occam-grammars 1.0.115 → 1.0.119
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 +152 -2
- package/lib/customGrammarBNF/lexer.js +2 -1
- package/lib/customGrammarBNF/parser.js +2 -1
- package/lib/customGrammarLexicalPattern/lexer.js +2 -1
- package/lib/customGrammarLexicalPattern/parser.js +2 -1
- package/lib/example/input/ruleName.js +2 -1
- package/lib/example/textarea/bnf.js +2 -1
- package/lib/example/textarea/content.js +2 -1
- package/lib/example/textarea/lexicalEntries.js +2 -1
- package/lib/example/textarea/parseTree.js +2 -1
- package/lib/example/textarea/tokens.js +2 -1
- package/lib/example/view/customGrammarBNF.js +2 -1
- package/lib/example/view/customGrammarLexicalPattern.js +2 -1
- package/lib/example/view/florence.js +2 -1
- package/lib/example/view/metaJSON.js +2 -1
- package/lib/example/view/plain.js +2 -1
- package/lib/example/view.js +2 -1
- package/lib/florence/lexer.js +2 -1
- package/lib/florence/parser.js +2 -1
- package/lib/florence/token/nonSignificant/comment/multiLine/endOf.js +2 -1
- package/lib/florence/token/nonSignificant/comment/multiLine/middleOf.js +2 -1
- package/lib/florence/token/nonSignificant/comment/multiLine/startOf.js +2 -1
- package/lib/florence/token/nonSignificant/comment/singleLine.js +2 -1
- package/lib/metaJSON/lexer.js +2 -1
- package/lib/metaJSON/parser.js +2 -1
- package/lib/plain/lexer.js +2 -1
- package/lib/plain/parser.js +2 -1
- package/lib/readme/lexer.js +2 -1
- package/lib/readme/parser.js +2 -1
- package/lib/teX/lexer.js +2 -1
- package/lib/teX/parser.js +2 -1
- package/package.json +7 -7
package/example.js
CHANGED
|
@@ -4444,15 +4444,23 @@
|
|
|
4444
4444
|
Object.defineProperty(exports, "__esModule", {
|
|
4445
4445
|
value: true
|
|
4446
4446
|
});
|
|
4447
|
-
exports.CONTENT_TYPE = exports.EMPTY_STRING = exports.ACCEPT = exports.CTRL_C = exports.ERROR = exports.UTF8 = void 0;
|
|
4447
|
+
exports.CONTENT_TYPE = exports.EMPTY_STRING = exports.ENVIRONMENT = exports.BOOLEAN = exports.NUMBER = exports.ACCEPT = exports.STRING = exports.CTRL_C = exports.ERROR = exports.UTF8 = void 0;
|
|
4448
4448
|
var UTF8 = "utf8";
|
|
4449
4449
|
exports.UTF8 = UTF8;
|
|
4450
4450
|
var ERROR = "error";
|
|
4451
4451
|
exports.ERROR = ERROR;
|
|
4452
4452
|
var CTRL_C = "^C";
|
|
4453
4453
|
exports.CTRL_C = CTRL_C;
|
|
4454
|
+
var STRING = "string";
|
|
4455
|
+
exports.STRING = STRING;
|
|
4454
4456
|
var ACCEPT = "accept";
|
|
4455
4457
|
exports.ACCEPT = ACCEPT;
|
|
4458
|
+
var NUMBER = "number";
|
|
4459
|
+
exports.NUMBER = NUMBER;
|
|
4460
|
+
var BOOLEAN = "boolean";
|
|
4461
|
+
exports.BOOLEAN = BOOLEAN;
|
|
4462
|
+
var ENVIRONMENT = "ENVIRONMENT";
|
|
4463
|
+
exports.ENVIRONMENT = ENVIRONMENT;
|
|
4456
4464
|
var EMPTY_STRING = "";
|
|
4457
4465
|
exports.EMPTY_STRING = EMPTY_STRING;
|
|
4458
4466
|
var CONTENT_TYPE = "content-type";
|
|
@@ -5820,6 +5828,7 @@
|
|
|
5820
5828
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
5821
5829
|
}
|
|
5822
5830
|
var _typeof = function(obj) {
|
|
5831
|
+
"@swc/helpers - typeof";
|
|
5823
5832
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
5824
5833
|
};
|
|
5825
5834
|
function _unsupportedIterableToArray(o, minLen) {
|
|
@@ -6260,6 +6269,7 @@
|
|
|
6260
6269
|
return object;
|
|
6261
6270
|
}
|
|
6262
6271
|
var _typeof = function(obj) {
|
|
6272
|
+
"@swc/helpers - typeof";
|
|
6263
6273
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
6264
6274
|
};
|
|
6265
6275
|
function _isNativeReflectConstruct() {
|
|
@@ -6446,6 +6456,7 @@
|
|
|
6446
6456
|
return object;
|
|
6447
6457
|
}
|
|
6448
6458
|
var _typeof = function(obj) {
|
|
6459
|
+
"@swc/helpers - typeof";
|
|
6449
6460
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
6450
6461
|
};
|
|
6451
6462
|
function _isNativeReflectConstruct() {
|
|
@@ -6634,6 +6645,7 @@
|
|
|
6634
6645
|
return object;
|
|
6635
6646
|
}
|
|
6636
6647
|
var _typeof = function(obj) {
|
|
6648
|
+
"@swc/helpers - typeof";
|
|
6637
6649
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
6638
6650
|
};
|
|
6639
6651
|
function _isNativeReflectConstruct() {
|
|
@@ -6815,6 +6827,7 @@
|
|
|
6815
6827
|
return object;
|
|
6816
6828
|
}
|
|
6817
6829
|
var _typeof = function(obj) {
|
|
6830
|
+
"@swc/helpers - typeof";
|
|
6818
6831
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
6819
6832
|
};
|
|
6820
6833
|
function _isNativeReflectConstruct() {
|
|
@@ -7003,6 +7016,7 @@
|
|
|
7003
7016
|
return object;
|
|
7004
7017
|
}
|
|
7005
7018
|
var _typeof = function(obj) {
|
|
7019
|
+
"@swc/helpers - typeof";
|
|
7006
7020
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
7007
7021
|
};
|
|
7008
7022
|
function _isNativeReflectConstruct() {
|
|
@@ -7181,6 +7195,7 @@
|
|
|
7181
7195
|
return object;
|
|
7182
7196
|
}
|
|
7183
7197
|
var _typeof = function(obj) {
|
|
7198
|
+
"@swc/helpers - typeof";
|
|
7184
7199
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
7185
7200
|
};
|
|
7186
7201
|
function _isNativeReflectConstruct() {
|
|
@@ -7382,6 +7397,7 @@
|
|
|
7382
7397
|
return object;
|
|
7383
7398
|
}
|
|
7384
7399
|
var _typeof = function(obj) {
|
|
7400
|
+
"@swc/helpers - typeof";
|
|
7385
7401
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
7386
7402
|
};
|
|
7387
7403
|
function _isNativeReflectConstruct() {
|
|
@@ -7570,6 +7586,7 @@
|
|
|
7570
7586
|
return object;
|
|
7571
7587
|
}
|
|
7572
7588
|
var _typeof = function(obj) {
|
|
7589
|
+
"@swc/helpers - typeof";
|
|
7573
7590
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
7574
7591
|
};
|
|
7575
7592
|
function _isNativeReflectConstruct() {
|
|
@@ -7744,6 +7761,7 @@
|
|
|
7744
7761
|
return object;
|
|
7745
7762
|
}
|
|
7746
7763
|
var _typeof = function(obj) {
|
|
7764
|
+
"@swc/helpers - typeof";
|
|
7747
7765
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
7748
7766
|
};
|
|
7749
7767
|
function _isNativeReflectConstruct() {
|
|
@@ -7930,6 +7948,7 @@
|
|
|
7930
7948
|
return object;
|
|
7931
7949
|
}
|
|
7932
7950
|
var _typeof = function(obj) {
|
|
7951
|
+
"@swc/helpers - typeof";
|
|
7933
7952
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
7934
7953
|
};
|
|
7935
7954
|
function _isNativeReflectConstruct() {
|
|
@@ -8111,6 +8130,7 @@
|
|
|
8111
8130
|
return object;
|
|
8112
8131
|
}
|
|
8113
8132
|
var _typeof = function(obj) {
|
|
8133
|
+
"@swc/helpers - typeof";
|
|
8114
8134
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
8115
8135
|
};
|
|
8116
8136
|
function _isNativeReflectConstruct() {
|
|
@@ -8259,6 +8279,7 @@
|
|
|
8259
8279
|
};
|
|
8260
8280
|
}
|
|
8261
8281
|
var _typeof = function(obj) {
|
|
8282
|
+
"@swc/helpers - typeof";
|
|
8262
8283
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
8263
8284
|
};
|
|
8264
8285
|
var splice = _necessary.arrayUtilities.splice;
|
|
@@ -8543,6 +8564,7 @@
|
|
|
8543
8564
|
return object;
|
|
8544
8565
|
}
|
|
8545
8566
|
var _typeof = function(obj) {
|
|
8567
|
+
"@swc/helpers - typeof";
|
|
8546
8568
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
8547
8569
|
};
|
|
8548
8570
|
function _isNativeReflectConstruct() {
|
|
@@ -8734,6 +8756,7 @@
|
|
|
8734
8756
|
return _setPrototypeOf(o, p);
|
|
8735
8757
|
}
|
|
8736
8758
|
var _typeof = function(obj) {
|
|
8759
|
+
"@swc/helpers - typeof";
|
|
8737
8760
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
8738
8761
|
};
|
|
8739
8762
|
function _isNativeReflectConstruct() {
|
|
@@ -8906,6 +8929,7 @@
|
|
|
8906
8929
|
return object;
|
|
8907
8930
|
}
|
|
8908
8931
|
var _typeof = function(obj) {
|
|
8932
|
+
"@swc/helpers - typeof";
|
|
8909
8933
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
8910
8934
|
};
|
|
8911
8935
|
function _isNativeReflectConstruct() {
|
|
@@ -10121,6 +10145,7 @@
|
|
|
10121
10145
|
return object;
|
|
10122
10146
|
}
|
|
10123
10147
|
var _typeof = function(obj) {
|
|
10148
|
+
"@swc/helpers - typeof";
|
|
10124
10149
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
10125
10150
|
};
|
|
10126
10151
|
function _isNativeReflectConstruct() {
|
|
@@ -10305,6 +10330,7 @@
|
|
|
10305
10330
|
return _setPrototypeOf(o, p);
|
|
10306
10331
|
}
|
|
10307
10332
|
var _typeof = function(obj) {
|
|
10333
|
+
"@swc/helpers - typeof";
|
|
10308
10334
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
10309
10335
|
};
|
|
10310
10336
|
function _isNativeReflectConstruct() {
|
|
@@ -10439,6 +10465,7 @@
|
|
|
10439
10465
|
return _setPrototypeOf(o, p);
|
|
10440
10466
|
}
|
|
10441
10467
|
var _typeof = function(obj) {
|
|
10468
|
+
"@swc/helpers - typeof";
|
|
10442
10469
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
10443
10470
|
};
|
|
10444
10471
|
function _isNativeReflectConstruct() {
|
|
@@ -10578,6 +10605,7 @@
|
|
|
10578
10605
|
return _setPrototypeOf(o, p);
|
|
10579
10606
|
}
|
|
10580
10607
|
var _typeof = function(obj) {
|
|
10608
|
+
"@swc/helpers - typeof";
|
|
10581
10609
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
10582
10610
|
};
|
|
10583
10611
|
function _isNativeReflectConstruct() {
|
|
@@ -10758,6 +10786,7 @@
|
|
|
10758
10786
|
return _setPrototypeOf(o, p);
|
|
10759
10787
|
}
|
|
10760
10788
|
var _typeof = function(obj) {
|
|
10789
|
+
"@swc/helpers - typeof";
|
|
10761
10790
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
10762
10791
|
};
|
|
10763
10792
|
function _isNativeReflectConstruct() {
|
|
@@ -11064,6 +11093,7 @@
|
|
|
11064
11093
|
return _setPrototypeOf(o, p);
|
|
11065
11094
|
}
|
|
11066
11095
|
var _typeof = function(obj) {
|
|
11096
|
+
"@swc/helpers - typeof";
|
|
11067
11097
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
11068
11098
|
};
|
|
11069
11099
|
function _isNativeReflectConstruct() {
|
|
@@ -11529,6 +11559,7 @@
|
|
|
11529
11559
|
return _setPrototypeOf(o, p);
|
|
11530
11560
|
}
|
|
11531
11561
|
var _typeof = function(obj) {
|
|
11562
|
+
"@swc/helpers - typeof";
|
|
11532
11563
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
11533
11564
|
};
|
|
11534
11565
|
function _isNativeReflectConstruct() {
|
|
@@ -11831,6 +11862,7 @@
|
|
|
11831
11862
|
return object;
|
|
11832
11863
|
}
|
|
11833
11864
|
var _typeof = function(obj) {
|
|
11865
|
+
"@swc/helpers - typeof";
|
|
11834
11866
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
11835
11867
|
};
|
|
11836
11868
|
function _isNativeReflectConstruct() {
|
|
@@ -11981,6 +12013,7 @@
|
|
|
11981
12013
|
return _setPrototypeOf(o, p);
|
|
11982
12014
|
}
|
|
11983
12015
|
var _typeof = function(obj) {
|
|
12016
|
+
"@swc/helpers - typeof";
|
|
11984
12017
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
11985
12018
|
};
|
|
11986
12019
|
function _isNativeReflectConstruct() {
|
|
@@ -12149,6 +12182,7 @@
|
|
|
12149
12182
|
return _setPrototypeOf(o, p);
|
|
12150
12183
|
}
|
|
12151
12184
|
var _typeof = function(obj) {
|
|
12185
|
+
"@swc/helpers - typeof";
|
|
12152
12186
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
12153
12187
|
};
|
|
12154
12188
|
function _isNativeReflectConstruct() {
|
|
@@ -12483,6 +12517,7 @@
|
|
|
12483
12517
|
return object;
|
|
12484
12518
|
}
|
|
12485
12519
|
var _typeof = function(obj) {
|
|
12520
|
+
"@swc/helpers - typeof";
|
|
12486
12521
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
12487
12522
|
};
|
|
12488
12523
|
function _isNativeReflectConstruct() {
|
|
@@ -12670,6 +12705,7 @@
|
|
|
12670
12705
|
return object;
|
|
12671
12706
|
}
|
|
12672
12707
|
var _typeof = function(obj) {
|
|
12708
|
+
"@swc/helpers - typeof";
|
|
12673
12709
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
12674
12710
|
};
|
|
12675
12711
|
function _isNativeReflectConstruct() {
|
|
@@ -12841,6 +12877,7 @@
|
|
|
12841
12877
|
return object;
|
|
12842
12878
|
}
|
|
12843
12879
|
var _typeof = function(obj) {
|
|
12880
|
+
"@swc/helpers - typeof";
|
|
12844
12881
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
12845
12882
|
};
|
|
12846
12883
|
function _isNativeReflectConstruct() {
|
|
@@ -13044,6 +13081,7 @@
|
|
|
13044
13081
|
return object;
|
|
13045
13082
|
}
|
|
13046
13083
|
var _typeof = function(obj) {
|
|
13084
|
+
"@swc/helpers - typeof";
|
|
13047
13085
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13048
13086
|
};
|
|
13049
13087
|
function _isNativeReflectConstruct() {
|
|
@@ -13279,6 +13317,7 @@
|
|
|
13279
13317
|
return _setPrototypeOf(o, p);
|
|
13280
13318
|
}
|
|
13281
13319
|
var _typeof = function(obj) {
|
|
13320
|
+
"@swc/helpers - typeof";
|
|
13282
13321
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13283
13322
|
};
|
|
13284
13323
|
function _isNativeReflectConstruct() {
|
|
@@ -13484,6 +13523,7 @@
|
|
|
13484
13523
|
return object;
|
|
13485
13524
|
}
|
|
13486
13525
|
var _typeof = function(obj) {
|
|
13526
|
+
"@swc/helpers - typeof";
|
|
13487
13527
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13488
13528
|
};
|
|
13489
13529
|
function _isNativeReflectConstruct() {
|
|
@@ -13658,6 +13698,7 @@
|
|
|
13658
13698
|
return _setPrototypeOf(o, p);
|
|
13659
13699
|
}
|
|
13660
13700
|
var _typeof = function(obj) {
|
|
13701
|
+
"@swc/helpers - typeof";
|
|
13661
13702
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13662
13703
|
};
|
|
13663
13704
|
function _isNativeReflectConstruct() {
|
|
@@ -13766,6 +13807,7 @@
|
|
|
13766
13807
|
return _setPrototypeOf(o, p);
|
|
13767
13808
|
}
|
|
13768
13809
|
var _typeof = function(obj) {
|
|
13810
|
+
"@swc/helpers - typeof";
|
|
13769
13811
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13770
13812
|
};
|
|
13771
13813
|
function _isNativeReflectConstruct() {
|
|
@@ -13875,6 +13917,7 @@
|
|
|
13875
13917
|
return _setPrototypeOf(o, p);
|
|
13876
13918
|
}
|
|
13877
13919
|
var _typeof = function(obj) {
|
|
13920
|
+
"@swc/helpers - typeof";
|
|
13878
13921
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13879
13922
|
};
|
|
13880
13923
|
function _isNativeReflectConstruct() {
|
|
@@ -13986,6 +14029,7 @@
|
|
|
13986
14029
|
return _setPrototypeOf(o, p);
|
|
13987
14030
|
}
|
|
13988
14031
|
var _typeof = function(obj) {
|
|
14032
|
+
"@swc/helpers - typeof";
|
|
13989
14033
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
13990
14034
|
};
|
|
13991
14035
|
function _isNativeReflectConstruct() {
|
|
@@ -14111,6 +14155,7 @@
|
|
|
14111
14155
|
return _setPrototypeOf(o, p);
|
|
14112
14156
|
}
|
|
14113
14157
|
var _typeof = function(obj) {
|
|
14158
|
+
"@swc/helpers - typeof";
|
|
14114
14159
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14115
14160
|
};
|
|
14116
14161
|
function _isNativeReflectConstruct() {
|
|
@@ -14286,6 +14331,7 @@
|
|
|
14286
14331
|
return object;
|
|
14287
14332
|
}
|
|
14288
14333
|
var _typeof = function(obj) {
|
|
14334
|
+
"@swc/helpers - typeof";
|
|
14289
14335
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14290
14336
|
};
|
|
14291
14337
|
function _isNativeReflectConstruct() {
|
|
@@ -14438,6 +14484,7 @@
|
|
|
14438
14484
|
return _setPrototypeOf(o, p);
|
|
14439
14485
|
}
|
|
14440
14486
|
var _typeof = function(obj) {
|
|
14487
|
+
"@swc/helpers - typeof";
|
|
14441
14488
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14442
14489
|
};
|
|
14443
14490
|
function _isNativeReflectConstruct() {
|
|
@@ -14551,6 +14598,7 @@
|
|
|
14551
14598
|
return _setPrototypeOf(o, p);
|
|
14552
14599
|
}
|
|
14553
14600
|
var _typeof = function(obj) {
|
|
14601
|
+
"@swc/helpers - typeof";
|
|
14554
14602
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14555
14603
|
};
|
|
14556
14604
|
function _isNativeReflectConstruct() {
|
|
@@ -14673,6 +14721,7 @@
|
|
|
14673
14721
|
return _setPrototypeOf(o, p);
|
|
14674
14722
|
}
|
|
14675
14723
|
var _typeof = function(obj) {
|
|
14724
|
+
"@swc/helpers - typeof";
|
|
14676
14725
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14677
14726
|
};
|
|
14678
14727
|
function _isNativeReflectConstruct() {
|
|
@@ -14827,6 +14876,7 @@
|
|
|
14827
14876
|
return object;
|
|
14828
14877
|
}
|
|
14829
14878
|
var _typeof = function(obj) {
|
|
14879
|
+
"@swc/helpers - typeof";
|
|
14830
14880
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14831
14881
|
};
|
|
14832
14882
|
function _isNativeReflectConstruct() {
|
|
@@ -14971,6 +15021,7 @@
|
|
|
14971
15021
|
return _setPrototypeOf(o, p);
|
|
14972
15022
|
}
|
|
14973
15023
|
var _typeof = function(obj) {
|
|
15024
|
+
"@swc/helpers - typeof";
|
|
14974
15025
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
14975
15026
|
};
|
|
14976
15027
|
function _isNativeReflectConstruct() {
|
|
@@ -15079,6 +15130,7 @@
|
|
|
15079
15130
|
return _setPrototypeOf(o, p);
|
|
15080
15131
|
}
|
|
15081
15132
|
var _typeof = function(obj) {
|
|
15133
|
+
"@swc/helpers - typeof";
|
|
15082
15134
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15083
15135
|
};
|
|
15084
15136
|
function _isNativeReflectConstruct() {
|
|
@@ -15202,6 +15254,7 @@
|
|
|
15202
15254
|
return _setPrototypeOf(o, p);
|
|
15203
15255
|
}
|
|
15204
15256
|
var _typeof = function(obj) {
|
|
15257
|
+
"@swc/helpers - typeof";
|
|
15205
15258
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15206
15259
|
};
|
|
15207
15260
|
function _isNativeReflectConstruct() {
|
|
@@ -15335,6 +15388,7 @@
|
|
|
15335
15388
|
return _setPrototypeOf(o, p);
|
|
15336
15389
|
}
|
|
15337
15390
|
var _typeof = function(obj) {
|
|
15391
|
+
"@swc/helpers - typeof";
|
|
15338
15392
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15339
15393
|
};
|
|
15340
15394
|
function _isNativeReflectConstruct() {
|
|
@@ -15513,6 +15567,7 @@
|
|
|
15513
15567
|
return object;
|
|
15514
15568
|
}
|
|
15515
15569
|
var _typeof = function(obj) {
|
|
15570
|
+
"@swc/helpers - typeof";
|
|
15516
15571
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15517
15572
|
};
|
|
15518
15573
|
function _isNativeReflectConstruct() {
|
|
@@ -15674,6 +15729,7 @@
|
|
|
15674
15729
|
return _setPrototypeOf(o, p);
|
|
15675
15730
|
}
|
|
15676
15731
|
var _typeof = function(obj) {
|
|
15732
|
+
"@swc/helpers - typeof";
|
|
15677
15733
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15678
15734
|
};
|
|
15679
15735
|
function _isNativeReflectConstruct() {
|
|
@@ -15793,6 +15849,7 @@
|
|
|
15793
15849
|
return _setPrototypeOf(o, p);
|
|
15794
15850
|
}
|
|
15795
15851
|
var _typeof = function(obj) {
|
|
15852
|
+
"@swc/helpers - typeof";
|
|
15796
15853
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15797
15854
|
};
|
|
15798
15855
|
function _isNativeReflectConstruct() {
|
|
@@ -15902,6 +15959,7 @@
|
|
|
15902
15959
|
return _setPrototypeOf(o, p);
|
|
15903
15960
|
}
|
|
15904
15961
|
var _typeof = function(obj) {
|
|
15962
|
+
"@swc/helpers - typeof";
|
|
15905
15963
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
15906
15964
|
};
|
|
15907
15965
|
function _isNativeReflectConstruct() {
|
|
@@ -16026,6 +16084,7 @@
|
|
|
16026
16084
|
return _setPrototypeOf(o, p);
|
|
16027
16085
|
}
|
|
16028
16086
|
var _typeof = function(obj) {
|
|
16087
|
+
"@swc/helpers - typeof";
|
|
16029
16088
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16030
16089
|
};
|
|
16031
16090
|
function _isNativeReflectConstruct() {
|
|
@@ -16201,6 +16260,7 @@
|
|
|
16201
16260
|
return object;
|
|
16202
16261
|
}
|
|
16203
16262
|
var _typeof = function(obj) {
|
|
16263
|
+
"@swc/helpers - typeof";
|
|
16204
16264
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16205
16265
|
};
|
|
16206
16266
|
function _isNativeReflectConstruct() {
|
|
@@ -16368,6 +16428,7 @@
|
|
|
16368
16428
|
return _setPrototypeOf(o, p);
|
|
16369
16429
|
}
|
|
16370
16430
|
var _typeof = function(obj) {
|
|
16431
|
+
"@swc/helpers - typeof";
|
|
16371
16432
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16372
16433
|
};
|
|
16373
16434
|
function _isNativeReflectConstruct() {
|
|
@@ -16479,6 +16540,7 @@
|
|
|
16479
16540
|
return _setPrototypeOf(o, p);
|
|
16480
16541
|
}
|
|
16481
16542
|
var _typeof = function(obj) {
|
|
16543
|
+
"@swc/helpers - typeof";
|
|
16482
16544
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16483
16545
|
};
|
|
16484
16546
|
function _isNativeReflectConstruct() {
|
|
@@ -16603,6 +16665,7 @@
|
|
|
16603
16665
|
return _setPrototypeOf(o, p);
|
|
16604
16666
|
}
|
|
16605
16667
|
var _typeof = function(obj) {
|
|
16668
|
+
"@swc/helpers - typeof";
|
|
16606
16669
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16607
16670
|
};
|
|
16608
16671
|
function _isNativeReflectConstruct() {
|
|
@@ -16731,6 +16794,7 @@
|
|
|
16731
16794
|
return _setPrototypeOf(o, p);
|
|
16732
16795
|
}
|
|
16733
16796
|
var _typeof = function(obj) {
|
|
16797
|
+
"@swc/helpers - typeof";
|
|
16734
16798
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16735
16799
|
};
|
|
16736
16800
|
function _isNativeReflectConstruct() {
|
|
@@ -16854,6 +16918,7 @@
|
|
|
16854
16918
|
return _setPrototypeOf(o, p);
|
|
16855
16919
|
}
|
|
16856
16920
|
var _typeof = function(obj) {
|
|
16921
|
+
"@swc/helpers - typeof";
|
|
16857
16922
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16858
16923
|
};
|
|
16859
16924
|
function _isNativeReflectConstruct() {
|
|
@@ -16976,6 +17041,7 @@
|
|
|
16976
17041
|
return _setPrototypeOf(o, p);
|
|
16977
17042
|
}
|
|
16978
17043
|
var _typeof = function(obj) {
|
|
17044
|
+
"@swc/helpers - typeof";
|
|
16979
17045
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
16980
17046
|
};
|
|
16981
17047
|
function _isNativeReflectConstruct() {
|
|
@@ -17100,6 +17166,7 @@
|
|
|
17100
17166
|
return _setPrototypeOf(o, p);
|
|
17101
17167
|
}
|
|
17102
17168
|
var _typeof = function(obj) {
|
|
17169
|
+
"@swc/helpers - typeof";
|
|
17103
17170
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17104
17171
|
};
|
|
17105
17172
|
function _isNativeReflectConstruct() {
|
|
@@ -17233,6 +17300,7 @@
|
|
|
17233
17300
|
return _setPrototypeOf(o, p);
|
|
17234
17301
|
}
|
|
17235
17302
|
var _typeof = function(obj) {
|
|
17303
|
+
"@swc/helpers - typeof";
|
|
17236
17304
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17237
17305
|
};
|
|
17238
17306
|
function _isNativeReflectConstruct() {
|
|
@@ -17402,6 +17470,7 @@
|
|
|
17402
17470
|
return object;
|
|
17403
17471
|
}
|
|
17404
17472
|
var _typeof = function(obj) {
|
|
17473
|
+
"@swc/helpers - typeof";
|
|
17405
17474
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17406
17475
|
};
|
|
17407
17476
|
function _isNativeReflectConstruct() {
|
|
@@ -17566,6 +17635,7 @@
|
|
|
17566
17635
|
return _setPrototypeOf(o, p);
|
|
17567
17636
|
}
|
|
17568
17637
|
var _typeof = function(obj) {
|
|
17638
|
+
"@swc/helpers - typeof";
|
|
17569
17639
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17570
17640
|
};
|
|
17571
17641
|
function _isNativeReflectConstruct() {
|
|
@@ -17688,6 +17758,7 @@
|
|
|
17688
17758
|
return _setPrototypeOf(o, p);
|
|
17689
17759
|
}
|
|
17690
17760
|
var _typeof = function(obj) {
|
|
17761
|
+
"@swc/helpers - typeof";
|
|
17691
17762
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17692
17763
|
};
|
|
17693
17764
|
function _isNativeReflectConstruct() {
|
|
@@ -17797,6 +17868,7 @@
|
|
|
17797
17868
|
return _setPrototypeOf(o, p);
|
|
17798
17869
|
}
|
|
17799
17870
|
var _typeof = function(obj) {
|
|
17871
|
+
"@swc/helpers - typeof";
|
|
17800
17872
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17801
17873
|
};
|
|
17802
17874
|
function _isNativeReflectConstruct() {
|
|
@@ -17922,6 +17994,7 @@
|
|
|
17922
17994
|
return _setPrototypeOf(o, p);
|
|
17923
17995
|
}
|
|
17924
17996
|
var _typeof = function(obj) {
|
|
17997
|
+
"@swc/helpers - typeof";
|
|
17925
17998
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
17926
17999
|
};
|
|
17927
18000
|
function _isNativeReflectConstruct() {
|
|
@@ -18046,6 +18119,7 @@
|
|
|
18046
18119
|
return _setPrototypeOf(o, p);
|
|
18047
18120
|
}
|
|
18048
18121
|
var _typeof = function(obj) {
|
|
18122
|
+
"@swc/helpers - typeof";
|
|
18049
18123
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18050
18124
|
};
|
|
18051
18125
|
function _isNativeReflectConstruct() {
|
|
@@ -18154,6 +18228,7 @@
|
|
|
18154
18228
|
return _setPrototypeOf(o, p);
|
|
18155
18229
|
}
|
|
18156
18230
|
var _typeof = function(obj) {
|
|
18231
|
+
"@swc/helpers - typeof";
|
|
18157
18232
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18158
18233
|
};
|
|
18159
18234
|
function _isNativeReflectConstruct() {
|
|
@@ -18277,6 +18352,7 @@
|
|
|
18277
18352
|
return _setPrototypeOf(o, p);
|
|
18278
18353
|
}
|
|
18279
18354
|
var _typeof = function(obj) {
|
|
18355
|
+
"@swc/helpers - typeof";
|
|
18280
18356
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18281
18357
|
};
|
|
18282
18358
|
function _isNativeReflectConstruct() {
|
|
@@ -18442,6 +18518,7 @@
|
|
|
18442
18518
|
return object;
|
|
18443
18519
|
}
|
|
18444
18520
|
var _typeof = function(obj) {
|
|
18521
|
+
"@swc/helpers - typeof";
|
|
18445
18522
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18446
18523
|
};
|
|
18447
18524
|
function _isNativeReflectConstruct() {
|
|
@@ -18643,6 +18720,7 @@
|
|
|
18643
18720
|
return _setPrototypeOf(o, p);
|
|
18644
18721
|
}
|
|
18645
18722
|
var _typeof = function(obj) {
|
|
18723
|
+
"@swc/helpers - typeof";
|
|
18646
18724
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18647
18725
|
};
|
|
18648
18726
|
function _isNativeReflectConstruct() {
|
|
@@ -18756,6 +18834,7 @@
|
|
|
18756
18834
|
return _setPrototypeOf(o, p);
|
|
18757
18835
|
}
|
|
18758
18836
|
var _typeof = function(obj) {
|
|
18837
|
+
"@swc/helpers - typeof";
|
|
18759
18838
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18760
18839
|
};
|
|
18761
18840
|
function _isNativeReflectConstruct() {
|
|
@@ -18879,6 +18958,7 @@
|
|
|
18879
18958
|
return _setPrototypeOf(o, p);
|
|
18880
18959
|
}
|
|
18881
18960
|
var _typeof = function(obj) {
|
|
18961
|
+
"@swc/helpers - typeof";
|
|
18882
18962
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
18883
18963
|
};
|
|
18884
18964
|
function _isNativeReflectConstruct() {
|
|
@@ -19000,6 +19080,7 @@
|
|
|
19000
19080
|
return _setPrototypeOf(o, p);
|
|
19001
19081
|
}
|
|
19002
19082
|
var _typeof = function(obj) {
|
|
19083
|
+
"@swc/helpers - typeof";
|
|
19003
19084
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19004
19085
|
};
|
|
19005
19086
|
function _isNativeReflectConstruct() {
|
|
@@ -19128,6 +19209,7 @@
|
|
|
19128
19209
|
return _setPrototypeOf(o, p);
|
|
19129
19210
|
}
|
|
19130
19211
|
var _typeof = function(obj) {
|
|
19212
|
+
"@swc/helpers - typeof";
|
|
19131
19213
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19132
19214
|
};
|
|
19133
19215
|
function _isNativeReflectConstruct() {
|
|
@@ -19252,6 +19334,7 @@
|
|
|
19252
19334
|
return _setPrototypeOf(o, p);
|
|
19253
19335
|
}
|
|
19254
19336
|
var _typeof = function(obj) {
|
|
19337
|
+
"@swc/helpers - typeof";
|
|
19255
19338
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19256
19339
|
};
|
|
19257
19340
|
function _isNativeReflectConstruct() {
|
|
@@ -19369,6 +19452,7 @@
|
|
|
19369
19452
|
return _setPrototypeOf(o, p);
|
|
19370
19453
|
}
|
|
19371
19454
|
var _typeof = function(obj) {
|
|
19455
|
+
"@swc/helpers - typeof";
|
|
19372
19456
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19373
19457
|
};
|
|
19374
19458
|
function _isNativeReflectConstruct() {
|
|
@@ -19506,6 +19590,7 @@
|
|
|
19506
19590
|
return _setPrototypeOf(o, p);
|
|
19507
19591
|
}
|
|
19508
19592
|
var _typeof = function(obj) {
|
|
19593
|
+
"@swc/helpers - typeof";
|
|
19509
19594
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19510
19595
|
};
|
|
19511
19596
|
function _isNativeReflectConstruct() {
|
|
@@ -19635,6 +19720,7 @@
|
|
|
19635
19720
|
return _setPrototypeOf(o, p);
|
|
19636
19721
|
}
|
|
19637
19722
|
var _typeof = function(obj) {
|
|
19723
|
+
"@swc/helpers - typeof";
|
|
19638
19724
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19639
19725
|
};
|
|
19640
19726
|
function _isNativeReflectConstruct() {
|
|
@@ -19744,6 +19830,7 @@
|
|
|
19744
19830
|
return _setPrototypeOf(o, p);
|
|
19745
19831
|
}
|
|
19746
19832
|
var _typeof = function(obj) {
|
|
19833
|
+
"@swc/helpers - typeof";
|
|
19747
19834
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19748
19835
|
};
|
|
19749
19836
|
function _isNativeReflectConstruct() {
|
|
@@ -19867,6 +19954,7 @@
|
|
|
19867
19954
|
return _setPrototypeOf(o, p);
|
|
19868
19955
|
}
|
|
19869
19956
|
var _typeof = function(obj) {
|
|
19957
|
+
"@swc/helpers - typeof";
|
|
19870
19958
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
19871
19959
|
};
|
|
19872
19960
|
function _isNativeReflectConstruct() {
|
|
@@ -20001,6 +20089,7 @@
|
|
|
20001
20089
|
return _setPrototypeOf(o, p);
|
|
20002
20090
|
}
|
|
20003
20091
|
var _typeof = function(obj) {
|
|
20092
|
+
"@swc/helpers - typeof";
|
|
20004
20093
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20005
20094
|
};
|
|
20006
20095
|
function _isNativeReflectConstruct() {
|
|
@@ -20111,6 +20200,7 @@
|
|
|
20111
20200
|
return _setPrototypeOf(o, p);
|
|
20112
20201
|
}
|
|
20113
20202
|
var _typeof = function(obj) {
|
|
20203
|
+
"@swc/helpers - typeof";
|
|
20114
20204
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20115
20205
|
};
|
|
20116
20206
|
function _isNativeReflectConstruct() {
|
|
@@ -20236,6 +20326,7 @@
|
|
|
20236
20326
|
return _setPrototypeOf(o, p);
|
|
20237
20327
|
}
|
|
20238
20328
|
var _typeof = function(obj) {
|
|
20329
|
+
"@swc/helpers - typeof";
|
|
20239
20330
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20240
20331
|
};
|
|
20241
20332
|
function _isNativeReflectConstruct() {
|
|
@@ -20359,6 +20450,7 @@
|
|
|
20359
20450
|
return _setPrototypeOf(o, p);
|
|
20360
20451
|
}
|
|
20361
20452
|
var _typeof = function(obj) {
|
|
20453
|
+
"@swc/helpers - typeof";
|
|
20362
20454
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20363
20455
|
};
|
|
20364
20456
|
function _isNativeReflectConstruct() {
|
|
@@ -20472,6 +20564,7 @@
|
|
|
20472
20564
|
return _setPrototypeOf(o, p);
|
|
20473
20565
|
}
|
|
20474
20566
|
var _typeof = function(obj) {
|
|
20567
|
+
"@swc/helpers - typeof";
|
|
20475
20568
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20476
20569
|
};
|
|
20477
20570
|
function _isNativeReflectConstruct() {
|
|
@@ -20595,6 +20688,7 @@
|
|
|
20595
20688
|
return _setPrototypeOf(o, p);
|
|
20596
20689
|
}
|
|
20597
20690
|
var _typeof = function(obj) {
|
|
20691
|
+
"@swc/helpers - typeof";
|
|
20598
20692
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20599
20693
|
};
|
|
20600
20694
|
function _isNativeReflectConstruct() {
|
|
@@ -20728,6 +20822,7 @@
|
|
|
20728
20822
|
return _setPrototypeOf(o, p);
|
|
20729
20823
|
}
|
|
20730
20824
|
var _typeof = function(obj) {
|
|
20825
|
+
"@swc/helpers - typeof";
|
|
20731
20826
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20732
20827
|
};
|
|
20733
20828
|
function _isNativeReflectConstruct() {
|
|
@@ -20912,6 +21007,7 @@
|
|
|
20912
21007
|
return object;
|
|
20913
21008
|
}
|
|
20914
21009
|
var _typeof = function(obj) {
|
|
21010
|
+
"@swc/helpers - typeof";
|
|
20915
21011
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
20916
21012
|
};
|
|
20917
21013
|
function _isNativeReflectConstruct() {
|
|
@@ -21080,6 +21176,7 @@
|
|
|
21080
21176
|
return _setPrototypeOf(o, p);
|
|
21081
21177
|
}
|
|
21082
21178
|
var _typeof = function(obj) {
|
|
21179
|
+
"@swc/helpers - typeof";
|
|
21083
21180
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21084
21181
|
};
|
|
21085
21182
|
function _isNativeReflectConstruct() {
|
|
@@ -21200,6 +21297,7 @@
|
|
|
21200
21297
|
return _setPrototypeOf(o, p);
|
|
21201
21298
|
}
|
|
21202
21299
|
var _typeof = function(obj) {
|
|
21300
|
+
"@swc/helpers - typeof";
|
|
21203
21301
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21204
21302
|
};
|
|
21205
21303
|
function _isNativeReflectConstruct() {
|
|
@@ -21309,6 +21407,7 @@
|
|
|
21309
21407
|
return _setPrototypeOf(o, p);
|
|
21310
21408
|
}
|
|
21311
21409
|
var _typeof = function(obj) {
|
|
21410
|
+
"@swc/helpers - typeof";
|
|
21312
21411
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21313
21412
|
};
|
|
21314
21413
|
function _isNativeReflectConstruct() {
|
|
@@ -21416,6 +21515,7 @@
|
|
|
21416
21515
|
return _setPrototypeOf(o, p);
|
|
21417
21516
|
}
|
|
21418
21517
|
var _typeof = function(obj) {
|
|
21518
|
+
"@swc/helpers - typeof";
|
|
21419
21519
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21420
21520
|
};
|
|
21421
21521
|
function _isNativeReflectConstruct() {
|
|
@@ -21525,6 +21625,7 @@
|
|
|
21525
21625
|
return _setPrototypeOf(o, p);
|
|
21526
21626
|
}
|
|
21527
21627
|
var _typeof = function(obj) {
|
|
21628
|
+
"@swc/helpers - typeof";
|
|
21528
21629
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21529
21630
|
};
|
|
21530
21631
|
function _isNativeReflectConstruct() {
|
|
@@ -21674,6 +21775,7 @@
|
|
|
21674
21775
|
return object;
|
|
21675
21776
|
}
|
|
21676
21777
|
var _typeof = function(obj) {
|
|
21778
|
+
"@swc/helpers - typeof";
|
|
21677
21779
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21678
21780
|
};
|
|
21679
21781
|
function _isNativeReflectConstruct() {
|
|
@@ -21857,6 +21959,7 @@
|
|
|
21857
21959
|
return _setPrototypeOf(o, p);
|
|
21858
21960
|
}
|
|
21859
21961
|
var _typeof = function(obj) {
|
|
21962
|
+
"@swc/helpers - typeof";
|
|
21860
21963
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21861
21964
|
};
|
|
21862
21965
|
function _isNativeReflectConstruct() {
|
|
@@ -21989,6 +22092,7 @@
|
|
|
21989
22092
|
return _setPrototypeOf(o, p);
|
|
21990
22093
|
}
|
|
21991
22094
|
var _typeof = function(obj) {
|
|
22095
|
+
"@swc/helpers - typeof";
|
|
21992
22096
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21993
22097
|
};
|
|
21994
22098
|
function _isNativeReflectConstruct() {
|
|
@@ -22096,6 +22200,7 @@
|
|
|
22096
22200
|
return _setPrototypeOf(o, p);
|
|
22097
22201
|
}
|
|
22098
22202
|
var _typeof = function(obj) {
|
|
22203
|
+
"@swc/helpers - typeof";
|
|
22099
22204
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
22100
22205
|
};
|
|
22101
22206
|
function _isNativeReflectConstruct() {
|
|
@@ -22205,6 +22310,7 @@
|
|
|
22205
22310
|
return _setPrototypeOf(o, p);
|
|
22206
22311
|
}
|
|
22207
22312
|
var _typeof = function(obj) {
|
|
22313
|
+
"@swc/helpers - typeof";
|
|
22208
22314
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
22209
22315
|
};
|
|
22210
22316
|
function _isNativeReflectConstruct() {
|
|
@@ -22315,6 +22421,7 @@
|
|
|
22315
22421
|
return _setPrototypeOf(o, p);
|
|
22316
22422
|
}
|
|
22317
22423
|
var _typeof = function(obj) {
|
|
22424
|
+
"@swc/helpers - typeof";
|
|
22318
22425
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
22319
22426
|
};
|
|
22320
22427
|
function _isNativeReflectConstruct() {
|
|
@@ -22425,6 +22532,7 @@
|
|
|
22425
22532
|
return _setPrototypeOf(o, p);
|
|
22426
22533
|
}
|
|
22427
22534
|
var _typeof = function(obj) {
|
|
22535
|
+
"@swc/helpers - typeof";
|
|
22428
22536
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
22429
22537
|
};
|
|
22430
22538
|
function _isNativeReflectConstruct() {
|
|
@@ -22563,6 +22671,7 @@
|
|
|
22563
22671
|
return _setPrototypeOf(o, p);
|
|
22564
22672
|
}
|
|
22565
22673
|
var _typeof = function(obj) {
|
|
22674
|
+
"@swc/helpers - typeof";
|
|
22566
22675
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
22567
22676
|
};
|
|
22568
22677
|
function _isNativeReflectConstruct() {
|
|
@@ -22696,6 +22805,7 @@
|
|
|
22696
22805
|
return _setPrototypeOf(o, p);
|
|
22697
22806
|
}
|
|
22698
22807
|
var _typeof = function(obj) {
|
|
22808
|
+
"@swc/helpers - typeof";
|
|
22699
22809
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
22700
22810
|
};
|
|
22701
22811
|
function _isNativeReflectConstruct() {
|
|
@@ -23157,6 +23267,7 @@
|
|
|
23157
23267
|
return _setPrototypeOf(o, p);
|
|
23158
23268
|
}
|
|
23159
23269
|
var _typeof = function(obj) {
|
|
23270
|
+
"@swc/helpers - typeof";
|
|
23160
23271
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
23161
23272
|
};
|
|
23162
23273
|
function _isNativeReflectConstruct() {
|
|
@@ -25006,6 +25117,7 @@
|
|
|
25006
25117
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
25007
25118
|
}
|
|
25008
25119
|
var _typeof = function(obj) {
|
|
25120
|
+
"@swc/helpers - typeof";
|
|
25009
25121
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
25010
25122
|
};
|
|
25011
25123
|
function _unsupportedIterableToArray(o, minLen) {
|
|
@@ -25265,6 +25377,7 @@
|
|
|
25265
25377
|
return _setPrototypeOf(o, p);
|
|
25266
25378
|
}
|
|
25267
25379
|
var _typeof = function(obj) {
|
|
25380
|
+
"@swc/helpers - typeof";
|
|
25268
25381
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
25269
25382
|
};
|
|
25270
25383
|
function _isNativeReflectConstruct() {
|
|
@@ -25440,6 +25553,7 @@
|
|
|
25440
25553
|
return _setPrototypeOf(o, p);
|
|
25441
25554
|
}
|
|
25442
25555
|
var _typeof = function(obj) {
|
|
25556
|
+
"@swc/helpers - typeof";
|
|
25443
25557
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
25444
25558
|
};
|
|
25445
25559
|
function _isNativeReflectConstruct() {
|
|
@@ -25612,6 +25726,7 @@
|
|
|
25612
25726
|
return _setPrototypeOf(o, p);
|
|
25613
25727
|
}
|
|
25614
25728
|
var _typeof = function(obj) {
|
|
25729
|
+
"@swc/helpers - typeof";
|
|
25615
25730
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
25616
25731
|
};
|
|
25617
25732
|
function _isNativeReflectConstruct() {
|
|
@@ -25788,6 +25903,7 @@
|
|
|
25788
25903
|
return _setPrototypeOf(o, p);
|
|
25789
25904
|
}
|
|
25790
25905
|
var _typeof = function(obj) {
|
|
25906
|
+
"@swc/helpers - typeof";
|
|
25791
25907
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
25792
25908
|
};
|
|
25793
25909
|
function _isNativeReflectConstruct() {
|
|
@@ -25960,6 +26076,7 @@
|
|
|
25960
26076
|
return _setPrototypeOf(o, p);
|
|
25961
26077
|
}
|
|
25962
26078
|
var _typeof = function(obj) {
|
|
26079
|
+
"@swc/helpers - typeof";
|
|
25963
26080
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
25964
26081
|
};
|
|
25965
26082
|
function _isNativeReflectConstruct() {
|
|
@@ -26135,6 +26252,7 @@
|
|
|
26135
26252
|
return _setPrototypeOf(o, p);
|
|
26136
26253
|
}
|
|
26137
26254
|
var _typeof = function(obj) {
|
|
26255
|
+
"@swc/helpers - typeof";
|
|
26138
26256
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
26139
26257
|
};
|
|
26140
26258
|
function _isNativeReflectConstruct() {
|
|
@@ -26310,6 +26428,7 @@
|
|
|
26310
26428
|
return _setPrototypeOf(o, p);
|
|
26311
26429
|
}
|
|
26312
26430
|
var _typeof = function(obj) {
|
|
26431
|
+
"@swc/helpers - typeof";
|
|
26313
26432
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
26314
26433
|
};
|
|
26315
26434
|
function _isNativeReflectConstruct() {
|
|
@@ -26484,6 +26603,7 @@
|
|
|
26484
26603
|
return _setPrototypeOf(o, p);
|
|
26485
26604
|
}
|
|
26486
26605
|
var _typeof = function(obj) {
|
|
26606
|
+
"@swc/helpers - typeof";
|
|
26487
26607
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
26488
26608
|
};
|
|
26489
26609
|
function _isNativeReflectConstruct() {
|
|
@@ -26687,6 +26807,7 @@
|
|
|
26687
26807
|
return object;
|
|
26688
26808
|
}
|
|
26689
26809
|
var _typeof = function(obj) {
|
|
26810
|
+
"@swc/helpers - typeof";
|
|
26690
26811
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
26691
26812
|
};
|
|
26692
26813
|
function _isNativeReflectConstruct() {
|
|
@@ -26870,6 +26991,7 @@
|
|
|
26870
26991
|
return object;
|
|
26871
26992
|
}
|
|
26872
26993
|
var _typeof = function(obj) {
|
|
26994
|
+
"@swc/helpers - typeof";
|
|
26873
26995
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
26874
26996
|
};
|
|
26875
26997
|
function _isNativeReflectConstruct() {
|
|
@@ -27053,6 +27175,7 @@
|
|
|
27053
27175
|
return object;
|
|
27054
27176
|
}
|
|
27055
27177
|
var _typeof = function(obj) {
|
|
27178
|
+
"@swc/helpers - typeof";
|
|
27056
27179
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27057
27180
|
};
|
|
27058
27181
|
function _isNativeReflectConstruct() {
|
|
@@ -27236,6 +27359,7 @@
|
|
|
27236
27359
|
return object;
|
|
27237
27360
|
}
|
|
27238
27361
|
var _typeof = function(obj) {
|
|
27362
|
+
"@swc/helpers - typeof";
|
|
27239
27363
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27240
27364
|
};
|
|
27241
27365
|
function _isNativeReflectConstruct() {
|
|
@@ -27404,6 +27528,7 @@
|
|
|
27404
27528
|
return _setPrototypeOf(o, p);
|
|
27405
27529
|
}
|
|
27406
27530
|
var _typeof = function(obj) {
|
|
27531
|
+
"@swc/helpers - typeof";
|
|
27407
27532
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27408
27533
|
};
|
|
27409
27534
|
function _isNativeReflectConstruct() {
|
|
@@ -27622,6 +27747,7 @@
|
|
|
27622
27747
|
return _setPrototypeOf(o, p);
|
|
27623
27748
|
}
|
|
27624
27749
|
var _typeof = function(obj) {
|
|
27750
|
+
"@swc/helpers - typeof";
|
|
27625
27751
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27626
27752
|
};
|
|
27627
27753
|
function _isNativeReflectConstruct() {
|
|
@@ -27741,6 +27867,7 @@
|
|
|
27741
27867
|
return _setPrototypeOf(o, p);
|
|
27742
27868
|
}
|
|
27743
27869
|
var _typeof = function(obj) {
|
|
27870
|
+
"@swc/helpers - typeof";
|
|
27744
27871
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27745
27872
|
};
|
|
27746
27873
|
function _isNativeReflectConstruct() {
|
|
@@ -27838,6 +27965,7 @@
|
|
|
27838
27965
|
return _setPrototypeOf(o, p);
|
|
27839
27966
|
}
|
|
27840
27967
|
var _typeof = function(obj) {
|
|
27968
|
+
"@swc/helpers - typeof";
|
|
27841
27969
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27842
27970
|
};
|
|
27843
27971
|
function _isNativeReflectConstruct() {
|
|
@@ -27989,6 +28117,7 @@
|
|
|
27989
28117
|
return _setPrototypeOf(o, p);
|
|
27990
28118
|
}
|
|
27991
28119
|
var _typeof = function(obj) {
|
|
28120
|
+
"@swc/helpers - typeof";
|
|
27992
28121
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
27993
28122
|
};
|
|
27994
28123
|
function _isNativeReflectConstruct() {
|
|
@@ -28165,6 +28294,7 @@
|
|
|
28165
28294
|
return _setPrototypeOf(o, p);
|
|
28166
28295
|
}
|
|
28167
28296
|
var _typeof = function(obj) {
|
|
28297
|
+
"@swc/helpers - typeof";
|
|
28168
28298
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
28169
28299
|
};
|
|
28170
28300
|
function _isNativeReflectConstruct() {
|
|
@@ -28485,6 +28615,7 @@
|
|
|
28485
28615
|
}));
|
|
28486
28616
|
}
|
|
28487
28617
|
var _typeof = function(obj) {
|
|
28618
|
+
"@swc/helpers - typeof";
|
|
28488
28619
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
28489
28620
|
};
|
|
28490
28621
|
function _wrapNativeSuper(Class) {
|
|
@@ -28689,6 +28820,7 @@
|
|
|
28689
28820
|
}));
|
|
28690
28821
|
}
|
|
28691
28822
|
var _typeof = function(obj) {
|
|
28823
|
+
"@swc/helpers - typeof";
|
|
28692
28824
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
28693
28825
|
};
|
|
28694
28826
|
function _wrapNativeSuper(Class) {
|
|
@@ -28893,6 +29025,7 @@
|
|
|
28893
29025
|
}));
|
|
28894
29026
|
}
|
|
28895
29027
|
var _typeof = function(obj) {
|
|
29028
|
+
"@swc/helpers - typeof";
|
|
28896
29029
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
28897
29030
|
};
|
|
28898
29031
|
function _wrapNativeSuper(Class) {
|
|
@@ -29097,6 +29230,7 @@
|
|
|
29097
29230
|
}));
|
|
29098
29231
|
}
|
|
29099
29232
|
var _typeof = function(obj) {
|
|
29233
|
+
"@swc/helpers - typeof";
|
|
29100
29234
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
29101
29235
|
};
|
|
29102
29236
|
function _wrapNativeSuper(Class) {
|
|
@@ -29301,6 +29435,7 @@
|
|
|
29301
29435
|
}));
|
|
29302
29436
|
}
|
|
29303
29437
|
var _typeof = function(obj) {
|
|
29438
|
+
"@swc/helpers - typeof";
|
|
29304
29439
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
29305
29440
|
};
|
|
29306
29441
|
function _wrapNativeSuper(Class) {
|
|
@@ -29639,6 +29774,7 @@
|
|
|
29639
29774
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
29640
29775
|
}
|
|
29641
29776
|
var _typeof = function(obj) {
|
|
29777
|
+
"@swc/helpers - typeof";
|
|
29642
29778
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
29643
29779
|
};
|
|
29644
29780
|
function _unsupportedIterableToArray(o, minLen) {
|
|
@@ -30094,6 +30230,7 @@
|
|
|
30094
30230
|
}));
|
|
30095
30231
|
}
|
|
30096
30232
|
var _typeof = function(obj) {
|
|
30233
|
+
"@swc/helpers - typeof";
|
|
30097
30234
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
30098
30235
|
};
|
|
30099
30236
|
function _isNativeReflectConstruct() {
|
|
@@ -30336,6 +30473,7 @@
|
|
|
30336
30473
|
}));
|
|
30337
30474
|
}
|
|
30338
30475
|
var _typeof = function(obj) {
|
|
30476
|
+
"@swc/helpers - typeof";
|
|
30339
30477
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
30340
30478
|
};
|
|
30341
30479
|
function _isNativeReflectConstruct() {
|
|
@@ -30760,6 +30898,7 @@
|
|
|
30760
30898
|
return _setPrototypeOf(o, p);
|
|
30761
30899
|
}
|
|
30762
30900
|
var _typeof = function(obj) {
|
|
30901
|
+
"@swc/helpers - typeof";
|
|
30763
30902
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
30764
30903
|
};
|
|
30765
30904
|
function _isNativeReflectConstruct() {
|
|
@@ -30933,6 +31072,7 @@
|
|
|
30933
31072
|
}));
|
|
30934
31073
|
}
|
|
30935
31074
|
var _typeof = function(obj) {
|
|
31075
|
+
"@swc/helpers - typeof";
|
|
30936
31076
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
30937
31077
|
};
|
|
30938
31078
|
function _isNativeReflectConstruct() {
|
|
@@ -31111,6 +31251,7 @@
|
|
|
31111
31251
|
return _setPrototypeOf(o, p);
|
|
31112
31252
|
}
|
|
31113
31253
|
var _typeof = function(obj) {
|
|
31254
|
+
"@swc/helpers - typeof";
|
|
31114
31255
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
31115
31256
|
};
|
|
31116
31257
|
function _isNativeReflectConstruct() {
|
|
@@ -31288,6 +31429,7 @@
|
|
|
31288
31429
|
return _setPrototypeOf(o, p);
|
|
31289
31430
|
}
|
|
31290
31431
|
var _typeof = function(obj) {
|
|
31432
|
+
"@swc/helpers - typeof";
|
|
31291
31433
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
31292
31434
|
};
|
|
31293
31435
|
function _isNativeReflectConstruct() {
|
|
@@ -31451,6 +31593,7 @@
|
|
|
31451
31593
|
return _setPrototypeOf(o, p);
|
|
31452
31594
|
}
|
|
31453
31595
|
var _typeof = function(obj) {
|
|
31596
|
+
"@swc/helpers - typeof";
|
|
31454
31597
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
31455
31598
|
};
|
|
31456
31599
|
function _isNativeReflectConstruct() {
|
|
@@ -31619,6 +31762,7 @@
|
|
|
31619
31762
|
return _setPrototypeOf(o, p);
|
|
31620
31763
|
}
|
|
31621
31764
|
var _typeof = function(obj) {
|
|
31765
|
+
"@swc/helpers - typeof";
|
|
31622
31766
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
31623
31767
|
};
|
|
31624
31768
|
function _isNativeReflectConstruct() {
|
|
@@ -31837,6 +31981,7 @@
|
|
|
31837
31981
|
}));
|
|
31838
31982
|
}
|
|
31839
31983
|
var _typeof = function(obj) {
|
|
31984
|
+
"@swc/helpers - typeof";
|
|
31840
31985
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
31841
31986
|
};
|
|
31842
31987
|
function _wrapNativeSuper(Class) {
|
|
@@ -32059,6 +32204,7 @@
|
|
|
32059
32204
|
return _setPrototypeOf(o, p);
|
|
32060
32205
|
}
|
|
32061
32206
|
var _typeof = function(obj) {
|
|
32207
|
+
"@swc/helpers - typeof";
|
|
32062
32208
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
32063
32209
|
};
|
|
32064
32210
|
function _isNativeReflectConstruct() {
|
|
@@ -32182,6 +32328,7 @@
|
|
|
32182
32328
|
return _setPrototypeOf(o, p);
|
|
32183
32329
|
}
|
|
32184
32330
|
var _typeof = function(obj) {
|
|
32331
|
+
"@swc/helpers - typeof";
|
|
32185
32332
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
32186
32333
|
};
|
|
32187
32334
|
function _isNativeReflectConstruct() {
|
|
@@ -32305,6 +32452,7 @@
|
|
|
32305
32452
|
return _setPrototypeOf(o, p);
|
|
32306
32453
|
}
|
|
32307
32454
|
var _typeof = function(obj) {
|
|
32455
|
+
"@swc/helpers - typeof";
|
|
32308
32456
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
32309
32457
|
};
|
|
32310
32458
|
function _isNativeReflectConstruct() {
|
|
@@ -32445,6 +32593,7 @@
|
|
|
32445
32593
|
return _setPrototypeOf(o, p);
|
|
32446
32594
|
}
|
|
32447
32595
|
var _typeof = function(obj) {
|
|
32596
|
+
"@swc/helpers - typeof";
|
|
32448
32597
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
32449
32598
|
};
|
|
32450
32599
|
function _isNativeReflectConstruct() {
|
|
@@ -32581,6 +32730,7 @@
|
|
|
32581
32730
|
return _setPrototypeOf(o, p);
|
|
32582
32731
|
}
|
|
32583
32732
|
var _typeof = function(obj) {
|
|
32733
|
+
"@swc/helpers - typeof";
|
|
32584
32734
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
32585
32735
|
};
|
|
32586
32736
|
function _isNativeReflectConstruct() {
|
|
@@ -32670,4 +32820,4 @@
|
|
|
32670
32820
|
renderStyles();
|
|
32671
32821
|
body.mount(/* @__PURE__ */ React.createElement(View, null));
|
|
32672
32822
|
})();
|
|
32673
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvYm91bmRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9kb20uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy90ZXh0RWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL2VsZW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvanN4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ldmVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMva2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2xpY2suanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvcmVzaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9tb3VzZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Njcm9sbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvYm9keS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2NoZWNrYm94LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQvdGV4dGFyZWEuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9qdXh0YXBvc2Uvc3JjL2p1eHRhcG9zZS5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdGFnTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jaGFyYWN0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hc3luY2hyb25vdXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvbWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb250ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy91dGlsaXRpZXMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9iYXNpYy9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jc3MvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvdGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL2NvbGxlY3Rpb25PZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL29wdGlvbmFsUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvb25lT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9iYXNpYy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy93aXRoU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAic3JjL3RlWC9lbnRyaWVzLmpzIiwgInNyYy90ZVgvbGV4ZXIuanMiLCAic3JjL3RlWC9ibmYuanMiLCAic3JjL3RlWC9wYXJzZXIuanMiLCAic3JjL3BsYWluL2VudHJpZXMuanMiLCAic3JjL3BsYWluL2xleGVyLmpzIiwgInNyYy9wbGFpbi9ibmYuanMiLCAic3JjL3BsYWluL3BhcnNlci5qcyIsICJzcmMvcmVhZG1lL2VudHJpZXMuanMiLCAic3JjL3JlYWRtZS9sZXhlci5qcyIsICJzcmMvcmVhZG1lL2JuZi5qcyIsICJzcmMvcmVhZG1lL3BhcnNlci5qcyIsICJzcmMvbWV0YUpTT04vZW50cmllcy5qcyIsICJzcmMvbWV0YUpTT04vbGV4ZXIuanMiLCAic3JjL21ldGFKU09OL2JuZi5qcyIsICJzcmMvbWV0YUpTT04vcGFyc2VyLmpzIiwgInNyYy9mbG9yZW5jZS9lbnRyaWVzLmpzIiwgInNyYy9mbG9yZW5jZS90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAic3JjL2Zsb3JlbmNlL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLmpzIiwgInNyYy9mbG9yZW5jZS90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgInNyYy9mbG9yZW5jZS90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi5qcyIsICJzcmMvZmxvcmVuY2UvbGV4ZXIuanMiLCAic3JjL2Zsb3JlbmNlL2JuZi5qcyIsICJzcmMvZmxvcmVuY2UvZGVmYXVsdEN1c3RvbUdyYW1tYXIuanMiLCAic3JjL2Zsb3JlbmNlL3BhcnNlci5qcyIsICJzcmMvY3VzdG9tR3JhbW1hckJORi9sZXhlci5qcyIsICJzcmMvY3VzdG9tR3JhbW1hckJORi9wYXJzZXIuanMiLCAic3JjL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9lbnRyaWVzLmpzIiwgInNyYy9jdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm4vbGV4ZXIuanMiLCAic3JjL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9ibmYuanMiLCAic3JjL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9wYXJzZXIuanMiLCAic3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvb3B0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvcm93cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW4uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvY29sdW1ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zaXplYWJsZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2N1cnNvci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2V2ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvc3BsaXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvc3BsaXR0ZXIvdmVydGljYWwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvc3BsaXR0ZXIvaG9yaXpvbnRhbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2luZGV4LmpzIiwgInNyYy9leGFtcGxlL3N1YkhlYWRpbmcuanMiLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2JuZi5qcyIsICJzcmMvZXhhbXBsZS9pbnB1dC9ydWxlTmFtZS5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3Rva2Vucy5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9jb250ZW50LmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3BhcnNlVHJlZS5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9sZXhpY2FsRW50cmllcy5qcyIsICJzcmMvZXhhbXBsZS92aWV3LmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvZmxvcmVuY2UuanMiLCAic3JjL2V4YW1wbGUvdmlldy9wbGFpbi5qcyIsICJzcmMvZXhhbXBsZS92aWV3L21ldGFKU09OLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvY3VzdG9tR3JhbW1hckJORi5qcyIsICJzcmMvZXhhbXBsZS92aWV3L2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9mZnNldCB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuXG4gIGdldFJpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG5cbiAgZ2V0Qm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IHdpZHRoID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKTtcblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cbiAgXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgfVxuXG4gIHNldExlZnQobGVmdCkge1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBzZXRSaWdodChyaWdodCkge1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgfVxuXG4gIHNldEJvdHRvbShib3R0b20pIHtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIHNoaWZ0KGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KSB7XG4gICAgdGhpcy50b3AgKz0gdmVydGljYWxPZmZzZXQ7XG4gICAgdGhpcy5sZWZ0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5yaWdodCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMuYm90dG9tICs9IHZlcnRpY2FsT2Zmc2V0O1xuICB9XG5cbiAgaXNPdmVybGFwcGluZ01vdXNlKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgICByZXR1cm4gKCAgKHRoaXMudG9wIDw9IG1vdXNlVG9wKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDw9IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMucmlnaHQgPiBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IG1vdXNlVG9wKSAgKTtcbiAgfVxuXG4gIGFyZU92ZXJsYXBwaW5nKGJvdW5kcykge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPCBib3VuZHMuYm90dG9tKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDwgYm91bmRzLnJpZ2h0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IGJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBib3VuZHMudG9wKSAgKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCwgLy8vXG4gICAgICAgICAgd2luZG93U2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCwgIC8vL1xuICAgICAgICAgIHRvcCA9IGJvdW5kaW5nQ2xpZW50UmVjdC50b3AgKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgbGVmdCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICByaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgYm90dG9tID0gYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQodG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0LFxuICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIHdpZHRoLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEZPUiA9IFwiZm9yXCI7XG5leHBvcnQgY29uc3QgQk9EWSA9IFwiYm9keVwiO1xuZXhwb3J0IGNvbnN0IE5PTkUgPSBcIm5vbmVcIjtcbmV4cG9ydCBjb25zdCBTUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IEJMT0NLID0gXCJibG9ja1wiO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9IFwiaGVpZ2h0XCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSBcImRpc3BsYXlcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBIVE1MX0ZPUiA9IFwiaHRtbEZvclwiO1xuZXhwb3J0IGNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuZXhwb3J0IGNvbnN0IEFCT1VUX0JMQU5LID0gXCJhYm91dDpibGFua1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgU1ZHX05BTUVTUEFDRV9VUkkgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9QRVJUSUVTID0gXCJkZWZhdWx0UHJvcGVydGllc1wiO1xuZXhwb3J0IGNvbnN0IElHTk9SRURfUFJPUEVSVElFUyA9IFwiaWdub3JlZFByb3BlcnRpZXNcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJPT0xFQU4gfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhcmdldCwgc291cmNlID0ge30pIHtcbiAgdGFyZ2V0ID0geyAuLi50YXJnZXQgfTsgIC8vL1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7IC4uLnRhcmdldCB9OyAgLy8vXG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEhhc093blByb3BlcnR5ID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuXG4gICAgaWYgKHRhcmdldEhhc093blByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W25hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29tYmluZVZhbHVlcyh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgY29uc3QgdGFyZ2V0VmFsdWVCb29sZWFuID0gaXNWYWx1ZUJvb2xlYW4odGFyZ2V0VmFsdWUpLFxuICAgICAgICBzb3VyY2VWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbihzb3VyY2VWYWx1ZSksXG4gICAgICAgIGNvbWJpbmVkVmFsdWUgPSAodGFyZ2V0VmFsdWVCb29sZWFuICYmIHNvdXJjZVZhbHVlQm9vbGVhbikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RhcmdldFZhbHVlfSAke3NvdXJjZVZhbHVlfWA7XG5cbiAgcmV0dXJuIGNvbWJpbmVkVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVCb29sZWFuKHZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlQm9vbGVhbiA9ICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pO1xuXG4gIHJldHVybiB2YWx1ZUJvb2xlYW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFycmF5LCBlbGVtZW50KSA9PiB7XG4gICAgYXJyYXkgPSBhcnJheS5jb25jYXQoZWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5MSA9IFsgLi4uYXJyYXkxIF07IC8vL1xuXG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyYXkxO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdUYWdOYW1lKHRhZ05hbWUpIHtcbiAgcmV0dXJuIHN2Z1RhZ05hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIHN2Z0F0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBodG1sQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmNvbnN0IHN2Z1RhZ05hbWVzID0gW1xuICAgICAgICBcImFsdEdseXBoXCIsIFwiYW5pbWF0ZVwiLCBcImFuaW1hdGVDb2xvclwiLCBcImFuaW1hdGVNb3Rpb25cIiwgXCJhbmltYXRlVHJhbnNmb3JtXCIsIFwiYW5pbWF0aW9uXCIsIFwiYXVkaW9cIixcbiAgICAgICAgXCJjaXJjbGVcIiwgXCJjbGlwUGF0aFwiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjdXJzb3JcIixcbiAgICAgICAgXCJkZWZzXCIsIFwiZGVzY1wiLCBcImRpc2NhcmRcIixcbiAgICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICAgIFwiZmVCbGVuZFwiLCBcImZlQ29sb3JNYXRyaXhcIiwgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsIFwiZmVDb21wb3NpdGVcIiwgXCJmZUNvbnZvbHZlTWF0cml4XCIsIFwiZmVEaWZmdXNlTGlnaHRpbmdcIiwgXCJmZURpc3BsYWNlbWVudE1hcFwiLCBcImZlRGlzdGFudExpZ2h0XCIsIFwiZmVEcm9wU2hhZG93XCIsIFwiZmVGbG9vZFwiLCBcImZlRnVuY0FcIiwgXCJmZUZ1bmNCXCIsIFwiZmVGdW5jR1wiLCBcImZlRnVuY1JcIiwgXCJmZUdhdXNzaWFuQmx1clwiLCBcImZlSW1hZ2VcIiwgXCJmZU1lcmdlXCIsIFwiZmVNZXJnZU5vZGVcIiwgXCJmZU1vcnBob2xvZ3lcIiwgXCJmZU9mZnNldFwiLCBcImZlUG9pbnRMaWdodFwiLCBcImZlU3BlY3VsYXJMaWdodGluZ1wiLCBcImZlU3BvdExpZ2h0XCIsIFwiZmVUaWxlXCIsIFwiZmVUdXJidWxlbmNlXCIsIFwiZmlsdGVyXCIsIFwiZm9udFwiLCBcImZvbnQtZmFjZVwiLCBcImZvbnQtZmFjZS1mb3JtYXRcIiwgXCJmb250LWZhY2UtbmFtZVwiLCBcImZvbnQtZmFjZS11cmlcIiwgXCJmb3JlaWduT2JqZWN0XCIsXG4gICAgICAgIFwiZ1wiLCBcImdseXBoXCIsIFwiZ2x5cGhSZWZcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGF0Y2hcIiwgXCJoYXRjaHBhdGhcIiwgXCJoa2VyblwiLFxuICAgICAgICBcImltYWdlXCIsIFwibGluZVwiLCBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgIFwibGlzdGVuZXJcIixcbiAgICAgICAgXCJtYXJrZXJcIiwgXCJtYXNrXCIsIFwibWVzaFwiLCBcIm1lc2hncmFkaWVudFwiLCBcIm1lc2hwYXRjaFwiLCBcIm1lc2hyb3dcIiwgXCJtZXRhZGF0YVwiLCBcIm1pc3NpbmctZ2x5cGhcIiwgXCJtcGF0aFwiLFxuICAgICAgICBcInBhdGhcIiwgXCJwYXR0ZXJuXCIsIFwicG9seWdvblwiLCBcInBvbHlsaW5lXCIsIFwicHJlZmV0Y2hcIixcbiAgICAgICAgXCJyYWRpYWxHcmFkaWVudFwiLCBcInJlY3RcIixcbiAgICAgICAgXCJzY3JpcHRcIiwgXCJzZXRcIiwgXCJzb2xpZGNvbG9yXCIsIFwic3RvcFwiLCBcInN0eWxlXCIsIFwic3ZnXCIsIFwic3dpdGNoXCIsIFwic3ltYm9sXCIsXG4gICAgICAgIFwidGJyZWFrXCIsIFwidGV4dFwiLCBcInRleHRBcmVhXCIsIFwidGV4dFBhdGhcIiwgXCJ0aXRsZVwiLCBcInRyZWZcIiwgXCJ0c3BhblwiLFxuICAgICAgICBcInVua25vd25cIiwgXCJ1c2VcIixcbiAgICAgICAgXCJ2aWRlb1wiLCBcInZpZXdcIiwgXCJ2a2VyblwiXG4gICAgICBdLFxuICAgICAgc3ZnQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZW50LWhlaWdodFwiLCBcImFjY3VtdWxhdGVcIiwgXCJhZGRpdGl2ZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiLCBcImFscGhhYmV0aWNcIiwgXCJhbXBsaXR1ZGVcIiwgXCJhcmFiaWMtZm9ybVwiLCBcImFzY2VudFwiLCBcImF0dHJpYnV0ZU5hbWVcIiwgXCJhdHRyaWJ1dGVUeXBlXCIsIFwiYXppbXV0aFwiLFxuICAgICAgICBcImJhbmR3aWR0aFwiLCBcImJhc2VGcmVxdWVuY3lcIiwgXCJiYXNlUHJvZmlsZVwiLCBcImJhc2VsaW5lLXNoaWZ0XCIsIFwiYmJveFwiLCBcImJlZ2luXCIsIFwiYmlhc1wiLCBcImJ5XCIsXG4gICAgICAgIFwiY2FsY01vZGVcIiwgXCJjYXAtaGVpZ2h0XCIsIFwiY2xpcFwiLCBcImNsYXNzTmFtZVwiLCBcImNsaXAtcGF0aFwiLCBcImNsaXAtcnVsZVwiLCBcImNsaXBQYXRoVW5pdHNcIiwgXCJjb2xvclwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY29sb3ItcmVuZGVyaW5nXCIsIFwiY29udGVudFNjcmlwdFR5cGVcIiwgXCJjb250ZW50U3R5bGVUeXBlXCIsIFwiY3Jvc3NvcmlnaW5cIiwgXCJjdXJzb3JcIiwgXCJjeFwiLCBcImN5XCIsXG4gICAgICAgIFwiZFwiLCBcImRlZmF1bHRBY3Rpb25cIiwgXCJkZXNjZW50XCIsIFwiZGlmZnVzZUNvbnN0YW50XCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzcGxheVwiLCBcImRpdmlzb3JcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImRvd25sb2FkXCIsIFwiZHVyXCIsIFwiZHhcIiwgXCJkeVwiLFxuICAgICAgICBcImVkZ2VNb2RlXCIsIFwiZWRpdGFibGVcIiwgXCJlbGV2YXRpb25cIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiLCBcImVuZFwiLCBcImV2ZW50XCIsIFwiZXhwb25lbnRcIiwgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXG4gICAgICAgIFwiZmlsbFwiLCBcImZpbGwtb3BhY2l0eVwiLCBcImZpbGwtcnVsZVwiLCBcImZpbHRlclwiLCBcImZpbHRlclJlc1wiLCBcImZpbHRlclVuaXRzXCIsIFwiZmxvb2QtY29sb3JcIiwgXCJmbG9vZC1vcGFjaXR5XCIsIFwiZm9jdXNIaWdobGlnaHRcIiwgXCJmb2N1c2FibGVcIiwgXCJmb250LWZhbWlseVwiLCBcImZvbnQtc2l6ZVwiLCBcImZvbnQtc2l6ZS1hZGp1c3RcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC12YXJpYW50XCIsIFwiZm9udC13ZWlnaHRcIiwgXCJmb3JtYXRcIiwgXCJmclwiLCBcImZyb21cIiwgXCJmeFwiLCBcImZ5XCIsXG4gICAgICAgIFwiZzFcIiwgXCJnMlwiLCBcImdseXBoLW5hbWVcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIiwgXCJnbHlwaFJlZlwiLCBcImdyYWRpZW50VHJhbnNmb3JtXCIsIFwiZ3JhZGllbnRVbml0c1wiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYW5naW5nXCIsIFwiaGF0Y2hDb250ZW50VW5pdHNcIiwgXCJoYXRjaFVuaXRzXCIsIFwiaGVpZ2h0XCIsIFwiaG9yaXotYWR2LXhcIiwgXCJob3Jpei1vcmlnaW4teFwiLCBcImhvcml6LW9yaWdpbi15XCIsIFwiaHJlZlwiLCBcImhyZWZsYW5nXCIsXG4gICAgICAgIFwiaWRcIiwgXCJpZGVvZ3JhcGhpY1wiLCBcImltYWdlLXJlbmRlcmluZ1wiLCBcImluXCIsIFwiaW4yXCIsIFwiaW5pdGlhbFZpc2liaWxpdHlcIiwgXCJpbnRlcmNlcHRcIixcbiAgICAgICAgXCJrXCIsIFwiazFcIiwgXCJrMlwiLCBcImszXCIsIFwiazRcIiwgXCJrZXJuZWxNYXRyaXhcIiwgXCJrZXJuZWxVbml0TGVuZ3RoXCIsIFwia2VybmluZ1wiLCBcImtleVBvaW50c1wiLCBcImtleVNwbGluZXNcIiwgXCJrZXlUaW1lc1wiLFxuICAgICAgICBcImxlbmd0aEFkanVzdFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGlnaHRpbmctY29sb3JcIiwgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLCBcImxvY2FsXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiLCBcIm1hcmtlci1taWRcIiwgXCJtYXJrZXItc3RhcnRcIiwgXCJtYXJrZXJIZWlnaHRcIiwgXCJtYXJrZXJVbml0c1wiLCBcIm1hcmtlcldpZHRoXCIsIFwibWFza1wiLCBcIm1hc2tDb250ZW50VW5pdHNcIiwgXCJtYXNrVW5pdHNcIiwgXCJtYXRoZW1hdGljYWxcIiwgXCJtYXhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhQ2hhcmFjdGVyRW5jb2RpbmdcIiwgXCJtZWRpYUNvbnRlbnRFbmNvZGluZ3NcIiwgXCJtZWRpYVNpemVcIiwgXCJtZWRpYVRpbWVcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtb2RlXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5hdi1kb3duXCIsIFwibmF2LWRvd24tbGVmdFwiLCBcIm5hdi1kb3duLXJpZ2h0XCIsIFwibmF2LWxlZnRcIiwgXCJuYXYtbmV4dFwiLCBcIm5hdi1wcmV2XCIsIFwibmF2LXJpZ2h0XCIsIFwibmF2LXVwXCIsIFwibmF2LXVwLWxlZnRcIiwgXCJuYXYtdXAtcmlnaHRcIiwgXCJudW1PY3RhdmVzXCIsXG4gICAgICAgIFwib2JzZXJ2ZXJcIiwgXCJvZmZzZXRcIiwgXCJvcGFjaXR5XCIsIFwib3BlcmF0b3JcIiwgXCJvcmRlclwiLCBcIm9yaWVudFwiLCBcIm9yaWVudGF0aW9uXCIsIFwib3JpZ2luXCIsIFwib3ZlcmZsb3dcIiwgXCJvdmVybGF5XCIsIFwib3ZlcmxpbmUtcG9zaXRpb25cIiwgXCJvdmVybGluZS10aGlja25lc3NcIixcbiAgICAgICAgXCJwYW5vc2UtMVwiLCBcInBhdGhcIiwgXCJwYXRoTGVuZ3RoXCIsIFwicGF0dGVybkNvbnRlbnRVbml0c1wiLCBcInBhdHRlcm5UcmFuc2Zvcm1cIiwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJwaGFzZVwiLCBcInBpdGNoXCIsIFwicGxheWJhY2tPcmRlclwiLCBcInBsYXliYWNrb3JkZXJcIiwgXCJwb2ludGVyLWV2ZW50c1wiLCBcInBvaW50c1wiLCBcInBvaW50c0F0WFwiLCBcInBvaW50c0F0WVwiLCBcInBvaW50c0F0WlwiLCBcInByZXNlcnZlQWxwaGFcIiwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwicHJpbWl0aXZlVW5pdHNcIiwgXCJwcm9wYWdhdGVcIixcbiAgICAgICAgXCJyXCIsIFwicmFkaXVzXCIsIFwicmVmWFwiLCBcInJlZllcIiwgXCJyZW5kZXJpbmctaW50ZW50XCIsIFwicmVwZWF0Q291bnRcIiwgXCJyZXBlYXREdXJcIiwgXCJyZXF1aXJlZEV4dGVuc2lvbnNcIiwgXCJyZXF1aXJlZEZlYXR1cmVzXCIsIFwicmVxdWlyZWRGb250c1wiLCBcInJlcXVpcmVkRm9ybWF0c1wiLCBcInJlc3RhcnRcIiwgXCJyZXN1bHRcIiwgXCJyb3RhdGVcIiwgXCJyeFwiLCBcInJ5XCIsXG4gICAgICAgIFwic2NhbGVcIiwgXCJzZWVkXCIsIFwic2hhcGUtcmVuZGVyaW5nXCIsIFwic2lkZVwiLCBcInNsb3BlXCIsIFwic25hcHNob3RUaW1lXCIsIFwic3BhY2luZ1wiLCBcInNwZWN1bGFyQ29uc3RhbnRcIiwgXCJzcGVjdWxhckV4cG9uZW50XCIsIFwic3ByZWFkTWV0aG9kXCIsIFwic3JjXCIsIFwic3RhcnRPZmZzZXRcIiwgXCJzdGREZXZpYXRpb25cIiwgXCJzdGVtaFwiLCBcInN0ZW12XCIsIFwic3RpdGNoVGlsZXNcIiwgXCJzdG9wLWNvbG9yXCIsIFwic3RvcC1vcGFjaXR5XCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCIsIFwic3RyaW5nXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWpvaW5cIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiLCBcInN0cm9rZS1vcGFjaXR5XCIsIFwic3Ryb2tlLXdpZHRoXCIsIFwic3R5bGVcIiwgXCJzdXJmYWNlU2NhbGVcIiwgXCJzeW5jQmVoYXZpb3JcIiwgXCJzeW5jQmVoYXZpb3JEZWZhdWx0XCIsIFwic3luY01hc3RlclwiLCBcInN5bmNUb2xlcmFuY2VcIiwgXCJzeW5jVG9sZXJhbmNlRGVmYXVsdFwiLCBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIFwidGFibGVWYWx1ZXNcIiwgXCJ0YXJnZXRcIiwgXCJ0YXJnZXRYXCIsIFwidGFyZ2V0WVwiLCBcInRleHQtYW5jaG9yXCIsIFwidGV4dC1kZWNvcmF0aW9uXCIsIFwidGV4dC1yZW5kZXJpbmdcIiwgXCJ0ZXh0TGVuZ3RoXCIsIFwidGltZWxpbmVCZWdpblwiLCBcInRpbWVsaW5lYmVnaW5cIiwgXCJ0aXRsZVwiLCBcInRvXCIsIFwidHJhbnNmb3JtXCIsIFwidHJhbnNmb3JtQmVoYXZpb3JcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidTFcIiwgXCJ1MlwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiLCBcInVuZGVybGluZS10aGlja25lc3NcIiwgXCJ1bmljb2RlXCIsIFwidW5pY29kZS1iaWRpXCIsIFwidW5pY29kZS1yYW5nZVwiLCBcInVuaXRzLXBlci1lbVwiLFxuICAgICAgICBcInYtYWxwaGFiZXRpY1wiLCBcInYtaGFuZ2luZ1wiLCBcInYtaWRlb2dyYXBoaWNcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiLCBcInZhbHVlc1wiLCBcInZlcnNpb25cIiwgXCJ2ZXJ0LWFkdi15XCIsIFwidmVydC1vcmlnaW4teFwiLCBcInZlcnQtb3JpZ2luLXlcIiwgXCJ2aWV3Qm94XCIsIFwidmlld1RhcmdldFwiLCBcInZpc2liaWxpdHlcIixcbiAgICAgICAgXCJ3aWR0aFwiLCBcIndpZHRoc1wiLCBcIndvcmQtc3BhY2luZ1wiLCBcIndyaXRpbmctbW9kZVwiLFxuICAgICAgICBcInhcIiwgXCJ4LWhlaWdodFwiLCBcIngxXCIsIFwieDJcIiwgXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwieVwiLCBcInkxXCIsIFwieTJcIiwgXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwielwiLCBcInpvb21BbmRQYW5cIlxuICAgICAgXSxcbiAgICAgIGh0bWxBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlcHRcIiwgXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXNzS2V5XCIsIFwiYWN0aW9uXCIsIFwiYWxsb3dcIiwgXCJhbGxvd0Z1bGxTY3JlZW5cIiwgXCJhbGxvd1RyYW5zcGFyZW5jeVwiLCBcImFsdFwiLCBcImFzeW5jXCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1BsYXlcIixcbiAgICAgICAgXCJjYXB0dXJlXCIsIFwiY2VsbFBhZGRpbmdcIiwgXCJjZWxsU3BhY2luZ1wiLCBcImNoYWxsZW5nZVwiLCBcImNoYXJTZXRcIiwgXCJjaGVja2VkXCIsIFwiY2l0ZVwiLCBcImNsYXNzSURcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xTcGFuXCIsIFwiY29sc1wiLCBcImNvbnRlbnRcIiwgXCJjb250ZW50RWRpdGFibGVcIiwgXCJjb250ZXh0TWVudVwiLCBcImNvbnRyb2xzXCIsIFwiY29vcmRzXCIsIFwiY3Jvc3NPcmlnaW5cIixcbiAgICAgICAgXCJkYXRhXCIsIFwiZGF0ZVRpbWVcIiwgXCJkZWZhdWx0XCIsIFwiZGVmZXJcIiwgXCJkaXJcIiwgXCJkaXNhYmxlZFwiLCBcImRvd25sb2FkXCIsIFwiZHJhZ2dhYmxlXCIsXG4gICAgICAgIFwiZW5jVHlwZVwiLFxuICAgICAgICBcImZvcm1cIiwgXCJmb3JtQWN0aW9uXCIsIFwiZm9ybUVuY1R5cGVcIiwgXCJmb3JtTWV0aG9kXCIsIFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJmb3JtVGFyZ2V0XCIsIFwiZnJhbWVCb3JkZXJcIixcbiAgICAgICAgXCJoZWFkZXJzXCIsIFwiaGVpZ2h0XCIsIFwiaGlkZGVuXCIsIFwiaGlnaFwiLCBcImhyZWZcIiwgXCJocmVmTGFuZ1wiLCBcImh0bWxGb3JcIiwgXCJodHRwRXF1aXZcIixcbiAgICAgICAgXCJpY29uXCIsIFwiaWRcIiwgXCJpbnB1dE1vZGVcIiwgXCJpbnRlZ3JpdHlcIiwgXCJpc1wiLFxuICAgICAgICBcImtleVBhcmFtc1wiLCBcImtleVR5cGVcIiwgXCJraW5kXCIsXG4gICAgICAgIFwibGFiZWxcIiwgXCJsYW5nXCIsIFwibGlzdFwiLCBcImxvb3BcIiwgXCJsb3dcIixcbiAgICAgICAgXCJtYW5pZmVzdFwiLCBcIm1hcmdpbkhlaWdodFwiLCBcIm1hcmdpbldpZHRoXCIsIFwibWF4XCIsIFwibWF4TGVuZ3RoXCIsIFwibWVkaWFcIiwgXCJtZWRpYUdyb3VwXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibWluTGVuZ3RoXCIsIFwibXVsdGlwbGVcIiwgXCJtdXRlZFwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJub1ZhbGlkYXRlXCIsIFwibm9uY2VcIixcbiAgICAgICAgXCJvcGVuXCIsIFwib3B0aW11bVwiLFxuICAgICAgICBcInBhdHRlcm5cIiwgXCJwbGFjZWhvbGRlclwiLCBcInBvc3RlclwiLCBcInByZWxvYWRcIiwgXCJwcm9maWxlXCIsXG4gICAgICAgIFwicmFkaW9Hcm91cFwiLCBcInJlYWRPbmx5XCIsIFwicmVsXCIsIFwicmVxdWlyZWRcIiwgXCJyZXZlcnNlZFwiLCBcInJvbGVcIiwgXCJyb3dTcGFuXCIsIFwicm93c1wiLFxuICAgICAgICBcInNhbmRib3hcIiwgXCJzY29wZVwiLCBcInNjb3BlZFwiLCBcInNjcm9sbGluZ1wiLCBcInNlYW1sZXNzXCIsIFwic2VsZWN0ZWRcIiwgXCJzaGFwZVwiLCBcInNpemVcIiwgXCJzaXplc1wiLCBcInNwYW5cIiwgXCJzcGVsbENoZWNrXCIsIFwic3JjXCIsIFwic3JjRG9jXCIsIFwic3JjTGFuZ1wiLCBcInNyY1NldFwiLCBcInN0YXJ0XCIsIFwic3RlcFwiLCBcInN0eWxlXCIsIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRhYkluZGV4XCIsIFwidGFyZ2V0XCIsIFwidGl0bGVcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlTWFwXCIsXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBcIndtb2RlXCIsXG4gICAgICAgIFwid3JhcFwiXG4gICAgICBdO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkb21FbGVtZW50cykge1xuICBjb25zdCBkb21FbGVtZW50c1dpdGhFbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzKGRvbUVsZW1lbnRzLCAoZG9tRWxlbWVudCkgPT4gKGRvbUVsZW1lbnQuX19lbGVtZW50X18gIT09IHVuZGVmaW5lZCkpLFxuICAgICAgICBlbGVtZW50cyA9IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzLm1hcCgoZG9tRWxlbWVudCkgPT4gZG9tRWxlbWVudC5fX2VsZW1lbnRfXyk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGhlaWdodCA+IDApIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gZG9tTm9kZS5wYXJlbnRFbGVtZW50OyAgLy8vXG5cbiAgICBpZiAocGFyZW50RE9NTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYXNjZW5kYW50RE9NTm9kZXMucHVzaChwYXJlbnRET01Ob2RlKTtcblxuICAgICAgaGVpZ2h0LS07XG5cbiAgICAgIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUocGFyZW50RE9NTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChkZXB0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZERPTU5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOyAgLy8vXG5cbiAgICBwdXNoKGRlc2NlbmRhbnRET01Ob2RlcywgY2hpbGRET01Ob2Rlcyk7XG5cbiAgICBkZXB0aC0tO1xuXG4gICAgY2hpbGRET01Ob2Rlcy5mb3JFYWNoKChjaGlsZERPTU5vZGUpID0+IGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGNoaWxkRE9NTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRPTU5vZGVzQnlTZWxlY3Rvcihkb21Ob2Rlcywgc2VsZWN0b3IpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IGZpbHRlckRPTU5vZGVzKGRvbU5vZGVzLCAoZG9tTm9kZSkgPT4gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3RvcikpO1xuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3Rvcikge1xuICBjb25zdCBkb21Ob2RlVHlwZSA9IGRvbU5vZGUubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChkb21Ob2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb21Ob2RlOyAvLy9cblxuICAgICAgcmV0dXJuIGRvbUVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgaWYgKHNlbGVjdG9yID09PSBXSUxEQ0FSRCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gW10sXG4gICAgICAgIGRvbU5vZGVzTGVuZ3RoID0gZG9tTm9kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb21Ob2Rlc0xlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGRvbU5vZGUgPSBkb21Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChkb21Ob2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGZpbHRlcmVkRE9NTm9kZXMucHVzaChkb21Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IsIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzLCBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IsIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUsIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kb21cIjtcblxuZnVuY3Rpb24gZ2V0UGFyZW50RWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBwYXJlbnRFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBwYXJlbnRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgaWYgKHBhcmVudERPTUVsZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAocGFyZW50RE9NRWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgY29uc3QgcGFyZW50RE9NRWxlbWVudHMgPSBbcGFyZW50RE9NRWxlbWVudF0sXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKHBhcmVudERPTUVsZW1lbnRzKSxcbiAgICAgICAgICAgIGZpcnN0UGFyZW50RWxlbWVudCA9IGZpcnN0KHBhcmVudEVsZW1lbnRzKTtcblxuICAgICAgcGFyZW50RWxlbWVudCA9IGZpcnN0UGFyZW50RWxlbWVudCB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgY29uc3QgY2hpbGRET01Ob2RlcyA9IHRoaXMuZG9tRWxlbWVudC5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGNoaWxkRE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGNoaWxkRE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRBc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtSGVpZ2h0ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4aW11bUhlaWdodCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgYXNjZW5kYW50RE9NTm9kZXMgPSBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCksXG4gICAgICAgIGFzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGFzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGFzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoYXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBhc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBuZXh0U2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7XG5cbiAgaWYgKChuZXh0U2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IobmV4dFNpYmxpbmdET01Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICBuZXh0U2libGluZ0VsZW1lbnQgPSBuZXh0U2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXh0U2libGluZ0VsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcHJldmlvdXNTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7ICAvLy9cblxuICBpZiAoKHByZXZpb3VzU2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IocHJldmlvdXNTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHByZXZpb3VzU2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1NpYmxpbmdFbGVtZW50O1xufVxuXG5jb25zdCBlbGVtZW50TWl4aW5zID0ge1xuICBnZXRQYXJlbnRFbGVtZW50LFxuICBnZXRDaGlsZEVsZW1lbnRzLFxuICBnZXRBc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0RGVzY2VuZGFudEVsZW1lbnRzLFxuICBnZXROZXh0U2libGluZ0VsZW1lbnQsXG4gIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVsZW1lbnRNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcblxuY2xhc3MgVGV4dEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpcztcbiAgfVxuXG4gIGdldFRleHQoKSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSxcbiAgICAgICAgICB0ZXh0ID0gbm9kZVZhbHVlOyAvLy9cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGV4dDsgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IGNsaWVudFdpZHRoID0gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgIHdpZHRoID0gY2xpZW50V2lkdGg7ICAvLy9cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGhlaWdodCA9IGNsaWVudEhlaWdodDsgIC8vL1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFRleHRFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFbGVtZW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dEVsZW1lbnQgZnJvbSBcIi4uL3RleHRFbGVtZW50XCI7XG5cbmltcG9ydCB7IFNUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZhbHNleUVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMucmVkdWNlKChlbGVtZW50cywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4geyAgLy8vXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LCAgLy8vXG4gICAgICAgICAgICB0ZXh0RWxlbWVudCA9IG5ldyBUZXh0RWxlbWVudCh0ZXh0KTtcblxuICAgICAgZWxlbWVudCA9IHRleHRFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lLCBwcnVuZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBmaXJzdCwgZ3VhcmFudGVlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNIVE1MQXR0cmlidXRlTmFtZSwgaXNTVkdBdHRyaWJ1dGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50c1wiO1xuaW1wb3J0IHsgRk9SLCBDTEFTUywgT0JKRUNULCBIVE1MX0ZPUiwgQ0xBU1NfTkFNRSwgQk9PTEVBTiwgRlVOQ1RJT04sIFNWR19OQU1FU1BBQ0VfVVJJIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBhcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKSB7XG4gIHRoaXMucHJvcGVydGllcyA9IGNvbWJpbmUocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuXG4gIHByb3BlcnRpZXMgPSBwcnVuZSh0aGlzLnByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTsgLy8vXG5cbiAgY29uc3QgeyBuYW1lc3BhY2VVUkkgfSA9IHRoaXMuZG9tRWxlbWVudCxcbiAgICAgICAgc3ZnID0gKG5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRV9VUkkpLCAvLy9cbiAgICAgICAgcHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSxcbiAgICAgICAgbmFtZXMgPSBwcm9wZXJ0aWVzS2V5czsgIC8vLz1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzW25hbWVdLFxuICAgICAgICAgIG5hbWVIYW5kbGVyTmFtZSA9IGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpO1xuXG4gICAgaWYgKG5hbWVIYW5kbGVyTmFtZSkge1xuICAgICAgYWRkSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpO1xuXG4gICAgICBpZiAobmFtZUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQodGhpcykgfHwgcHJvcGVydGllcy5jaGlsZEVsZW1lbnRzLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSB7fTtcblxuICBjaGlsZEVsZW1lbnRzLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KTtcblxuICAgIHRoaXMuYWRkKGNoaWxkRWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoKSB7XG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNvbnRleHQobmFtZXMsIHRoZW5EZWxldGUpIHtcbiAgY29uc3QgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RBcmd1bWVudCA9IGZpcnN0KGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEJPT0xFQU4pIHtcbiAgICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgICAgdGhlbkRlbGV0ZSA9IGZpcnN0QXJndW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtuYW1lXSxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0aGVuRGVsZXRlKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfSwgW10pO1xufVxuXG5jb25zdCBqc3hNaXhpbnMgPSB7XG4gIGFwcGx5UHJvcGVydGllcyxcbiAgZ2V0UHJvcGVydGllcyxcbiAgZ2V0Q29udGV4dCxcbiAgYXNzaWduQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQganN4TWl4aW5zO1xuXG5mdW5jdGlvbiBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgY2hpbGRFbGVtZW50cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmNoaWxkRWxlbWVudHMgPT09IEZVTkNUSU9OKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuY2hpbGRFbGVtZW50cy5jYWxsKGVsZW1lbnQpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IGd1YXJhbnRlZShjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9ICh0eXBlb2YgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQgPT09IEZVTkNUSU9OKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jb250ZXh0OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGNvbnRleHQsIHBhcmVudENvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCksIC8vL1xuICAgICAgICBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uKGV2ZW50VHlwZSwgaGFuZGxlcik7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBpZiAobmFtZSA9PT0gQ0xBU1NfTkFNRSkge1xuICAgIG5hbWUgPSBDTEFTUztcbiAgfVxuXG4gIGlmIChuYW1lID09PSBIVE1MX0ZPUikge1xuICAgIG5hbWUgPSBGT1I7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBPQkpFQ1QpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tRWxlbWVudFtuYW1lXVtrZXldID0gdmFsdWVba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmFtZTsgLy8vXG5cbiAgICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIC9eb24vLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIHJldHVybiBzdmcgPyBpc1NWR0F0dHJpYnV0ZU5hbWUobmFtZSkgOiBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgQ0hBTkdFX0VWRU5UX1RZUEUgPSBcImNoYW5nZVwiO1xuZXhwb3J0IGNvbnN0IFJFU0laRV9FVkVOVF9UWVBFID0gXCJyZXNpemVcIjtcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlRfVFlQRSA9IFwic2Nyb2xsXCI7XG5leHBvcnQgY29uc3QgS0VZRE9XTl9FVkVOVF9UWVBFID0gXCJrZXlkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VVUF9FVkVOVF9UWVBFID0gXCJtb3VzZXVwXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU9WRVJfRVZFTlRfVFlQRSA9IFwibW91c2VvdmVyXCI7XG5leHBvcnQgY29uc3QgTU9VU0VET1dOX0VWRU5UX1RZUEUgPSBcIm1vdXNlZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFTU9WRV9FVkVOVF9UWVBFID0gXCJtb3VzZW1vdmVcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBDTElDS19FVkVOVF9UWVBFLFxuICBLRVlVUF9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRU1PVkVfRVZFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlRfVFlQRSwgS0VZRE9XTl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25LZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uS2V5RG93bihrZXlEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3Qga2V5TWl4aW5zID0ge1xuICBvbktleVVwLFxuICBvZmZLZXlVcCxcbiAgb25LZXlEb3duLFxuICBvZmZLZXlEb3duXG59O1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENMSUNLX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2xpY2tNaXhpbnMgPSB7XG4gIG9uQ2xpY2ssXG4gIG9mZkNsaWNrXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlja01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlO1xufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlKSB7XG4gIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc3RhdGUpO1xufVxuXG5jb25zdCBzdGF0ZU1peGlucyA9IHtcbiAgZ2V0U3RhdGUsXG4gIHNldFN0YXRlLFxuICB1cGRhdGVTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhdGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgT0JKRUNULCBBQk9VVF9CTEFOSyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gYWRkUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KE9CSkVDVCksXG4gICAgICAgIHN0eWxlID0gYGRpc3BsYXk6IGJsb2NrOyBcbiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgICAgICAgICAgICAgdG9wOiAwOyBcbiAgICAgICAgICAgICAgICAgbGVmdDogMDsgXG4gICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOyBcbiAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgXG4gICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyBcbiAgICAgICAgICAgICAgICAgei1pbmRleDogLTE7YCxcbiAgICAgICAgZGF0YSA9IEFCT1VUX0JMQU5LLFxuICAgICAgICB0eXBlID0gVEVYVF9IVE1MX0NPTlRFTlRfVFlQRTtcblxuICByZXNpemVPYmplY3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xuXG4gIHJlc2l6ZU9iamVjdC5kYXRhID0gZGF0YTtcblxuICByZXNpemVPYmplY3QudHlwZSA9IHR5cGU7XG5cbiAgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fID0gcmVzaXplT2JqZWN0O1xuXG4gIHJlc2l6ZU9iamVjdC5vbmxvYWQgPSAoKSA9PiByZXNpemVPYmplY3RMb2FkSGFuZGxlcih0aGlzKTtcblxuICB0aGlzLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzaXplT2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSB0aGlzLl9fcmVzaXplT2JqZWN0X18sXG4gICAgICAgIG9iamVjdFdpbmRvdyA9IHJlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7ICAvLy9cblxuICBvYmplY3RXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplRXZlbnRMaXN0ZW5lcik7XG5cbiAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKHJlc2l6ZU9iamVjdCk7XG5cbiAgZGVsZXRlIHRoaXMuX19yZXNpemVPYmplY3RfXztcbn1cblxuY29uc3QgcmVzaXplTWl4aW5zID0ge1xuICBvblJlc2l6ZSxcbiAgb2ZmUmVzaXplLFxuICBhZGRSZXNpemVPYmplY3QsXG4gIHJlbW92ZVJlc2l6ZU9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzaXplTWl4aW5zO1xuXG5mdW5jdGlvbiByZXNpemVPYmplY3RMb2FkSGFuZGxlcihlbGVtZW50KSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGVsZW1lbnQuX19yZXNpemVPYmplY3RfXyxcbiAgICAgICAgcmVzaXplT2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIHJlc2l6ZU9iamVjdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IGVsZW1lbnQuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKTtcblxuICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHJlc2l6ZUV2ZW50TGlzdGVuZXIpID0+IHJlc2l6ZUV2ZW50TGlzdGVuZXIoZXZlbnQpKTtcbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgcmVtb3ZlUmVzaXplT2JqZWN0IH0gZnJvbSBcIi4uL21peGlucy9yZXNpemVcIjtcblxuZnVuY3Rpb24gb24oZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gUkVTSVpFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpLFxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPSByZXNpemVFdmVudExpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChyZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmFkZFJlc2l6ZU9iamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvZmYoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcblxuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlUmVzaXplT2JqZWN0KHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gIH1cblxuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKGV2ZW50TGlzdGVuZXIpO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpLFxuICAgICAgICBpbmRleCA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuaW5kZXhPZihldmVudExpc3RlbmVyKSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVycztcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZmluZCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGlmICgoZXZlbnRMaXN0ZW5lci5lbGVtZW50ID09PSBlbGVtZW50KSAmJiAoZXZlbnRMaXN0ZW5lci5oYW5kbGVyID09PSBoYW5kbGVyKSAmJiAoZXZlbnRMaXN0ZW5lci5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBldmVudExpc3RlbmVyO1xuXG4gIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oZXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgaGFuZGxlcixcbiAgICBldmVudFR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmNvbnN0IGV2ZW50TWl4aW5zID0ge1xuICBvbixcbiAgb2ZmLFxuICBhZGRFdmVudExpc3RlbmVyLFxuICByZW1vdmVFdmVudExpc3RlbmVyLFxuICBjcmVhdGVFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcixcbiAgZmluZEV2ZW50TGlzdGVuZXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBldmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VPVkVSX0VWRU5UX1RZUEUsIG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IG1vdXNlTWl4aW5zID0ge1xuICBvbk1vdXNlVXAsXG4gIG9mZk1vdXNlVXAsXG4gIG9uTW91c2VPdXQsXG4gIG9mZk1vdXNlT3V0LFxuICBvbk1vdXNlRG93bixcbiAgb2ZmTW91c2VEb3duLFxuICBvbk1vdXNlT3ZlcixcbiAgb2ZmTW91c2VPdmVyLFxuICBvbk1vdXNlTW92ZSxcbiAgb2ZmTW91c2VNb3ZlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb3VzZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU0NST0xMX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG9wOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsTGVmdDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIGdldFNjcm9sbFRvcCxcbiAgZ2V0U2Nyb2xsTGVmdCxcbiAgc2V0U2Nyb2xsVG9wLFxuICBzZXRTY3JvbGxMZWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY3JvbGxNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGpzeE1peGlucyBmcm9tIFwiLi9taXhpbnMvanN4XCI7XG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBzdGF0ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvc3RhdGVcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCByZXNpemVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Jlc2l6ZVwiO1xuaW1wb3J0IHNjcm9sbE1peGlucyBmcm9tIFwiLi9taXhpbnMvc2Nyb2xsXCI7XG5pbXBvcnQgZWxlbWVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgaXNTVkdUYWdOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IGZpcnN0LCBhdWdtZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBOT05FLFxuICAgICAgICAgQkxPQ0ssXG4gICAgICAgICBXSURUSCxcbiAgICAgICAgIFNUUklORyxcbiAgICAgICAgIEhFSUdIVCxcbiAgICAgICAgIERJU1BMQVksXG4gICAgICAgICBESVNBQkxFRCxcbiAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgIFNWR19OQU1FU1BBQ0VfVVJJLFxuICAgICAgICAgREVGQVVMVF9QUk9QRVJUSUVTLFxuICAgICAgICAgSUdOT1JFRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW5jbHVkZUJvcmRlciA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBnZXRIZWlnaHQoaW5jbHVkZUJvcmRlciA9IHRydWUpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRIZWlnaHQgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG4gIGNsZWFyQ2xhc3NlcygpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IEVNUFRZX1NUUklORzsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkO1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lmluc2VydEJlZm9yZShkb21FbGVtZW50LCBmaXJzdENoaWxkRE9NRWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIG51bGwpOyAvLy9cbiAgfVxuXG4gIGFkZChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgbW91bnQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgICAgXTtcblxuICAgIHRoaXMuYWRkKGVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHMucmV2ZXJzZSgpOyAvLy9cblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50LmRpZE1vdW50ICYmIGVsZW1lbnQuZGlkTW91bnQoKSkpOyAgLy8vXG4gIH1cblxuICB1bm1vdW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50LmdldERlc2NlbmRhbnRFbGVtZW50cygpLFxuICAgICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIC4uLmRlc2NlbmRhbnRFbGVtZW50c1xuICAgICAgICAgIF07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC53aWxsVW5tb3VudCAmJiBlbGVtZW50LndpbGxVbm1vdW50KCkpKTsgIC8vL1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgaHRtbChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNzcyhjc3MpIHtcbiAgICBpZiAoY3NzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBibHVyKCkgeyB0aGlzLmRvbUVsZW1lbnQuYmx1cigpOyB9XG5cbiAgZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbiAgaGFzRm9jdXMoKSB7XG4gICAgY29uc3QgZm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGZvY3VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0YWdOYW1lIH0gPSBDbGFzcyxcbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpO1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IEVsZW1lbnQsICAvLy9cbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30sIC8vL1xuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gW107IC8vL1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBqc3hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHN0YXRlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnQ7XG5cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gbnVsbCxcbiAgICAgICAgZWxlbWVudCA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChDbGFzcywgbnVsbCwgc2VsZWN0b3IsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudCA9IGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0VfVVJJLCB0YWdOYW1lKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IGVsZW1lbnQ7IC8vL1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoREVGQVVMVF9QUk9QRVJUSUVTKSkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gY29tYmluZShkZWZhdWx0UHJvcGVydGllcywgQ2xhc3NbREVGQVVMVF9QUk9QRVJUSUVTXSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4gIWlnbm9yZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGlnbm9yZWRQcm9wZXJ0eSkpO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTVFJJTkcsIEZVTkNUSU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZmlyc3RBcmd1bWVudCwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IGNoaWxkRWxlbWVudHNGcm9tUmVtYWluaW5nQXJndW1lbnRzKHJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBwcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBjaGlsZEVsZW1lbnRzXG4gICAgfSwgcHJvcGVydGllcyk7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAoaXNTdWJjbGFzc09mKGZpcnN0QXJndW1lbnQsIEVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBDbGFzcyA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IENsYXNzLmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gU1RSSU5HKSB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gZmlyc3RBcmd1bWVudDsgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBFbGVtZW50LmZyb21UYWdOYW1lKHRhZ05hbWUsIHByb3BlcnRpZXMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEZVTkNUSU9OKSB7XG4gICAgICBjb25zdCBlbGVtZW50RnVuY3Rpb24gPSBmaXJzdEFyZ3VtZW50OyAgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmNvbnN0IFJlYWN0ID0ge1xuICBjcmVhdGVFbGVtZW50XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdDtcblxuZnVuY3Rpb24gY2hpbGRFbGVtZW50c0Zyb21SZW1haW5pbmdBcmd1bWVudHMocmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIHJlbWFpbmluZ0FyZ3VtZW50cyA9IGZsYXR0ZW4ocmVtYWluaW5nQXJndW1lbnRzKTsgLy8vXG5cbiAgbGV0IGNoaWxkRWxlbWVudHMgPSByZW1haW5pbmdBcmd1bWVudHM7IC8vL1xuXG4gIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGxldCBzdWJjbGFzc09mID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgLy8vXG4gICAgc3ViY2xhc3NPZiA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgc3ViY2xhc3NPZiA9IGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJjbGFzc09mO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZ2V0SFJlZigpIHsgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTsgfVxuXG4gIHNldEhSZWYoaHJlZikgeyByZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImFcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oQ0hBTkdFX0VWRU5UX1RZUEUsIGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBjaGFuZ2VNaXhpbnMgPSB7XG4gIG9uQ2hhbmdlLFxuICBvZmZDaGFuZ2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNoYW5nZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuaW1wb3J0IGNoYW5nZU1peGlucyBmcm9tIFwiLi9taXhpbnMvY2hhbmdlXCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4vZXZlbnRUeXBlc1wiO1xuXG5jbGFzcyBJbnB1dEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG4gIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBnZXRTZWxlY3Rpb25TdGFydCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydDsgfVxuXG4gIGdldFNlbGVjdGlvbkVuZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25FbmQ7IH1cbiAgXG4gIGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucmVhZE9ubHk7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHNldFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvblN0YXJ0KSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9XG5cbiAgc2V0U2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kOyB9XG5cbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHsgdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5ID0gcmVhZE9ubHk7IH1cblxuICBzZWxlY3QoKSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3QoKTsgfVxufVxuXG5PYmplY3QuYXNzaWduKElucHV0RWxlbWVudC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0RWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IElucHV0RWxlbWVudCBmcm9tIFwiLi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgSW5wdXRFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEVsZW1lbnQge1xuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwic2VsZWN0XCI7XG59XG5cbk9iamVjdC5hc3NpZ24oU2VsZWN0LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IGNoYW5nZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIEVsZW1lbnQge1xuICBpc0NoZWNrZWQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2hlY2tlZDsgfVxuXG4gIGNoZWNrKGNoZWNrZWQgPSB0cnVlKSB7IHRoaXMuZG9tRWxlbWVudC5jaGVja2VkID0gY2hlY2tlZDsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCJcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbihDaGVja2JveC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgSW5wdXRFbGVtZW50IGZyb20gXCIuLi9pbnB1dEVsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dGFyZWEgZXh0ZW5kcyBJbnB1dEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgb25SZXNpemUsIG9mZlJlc2l6ZSB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25SZXNpemUsXG4gIG9mZlJlc2l6ZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgd2luZG93TWl4aW5zIGZyb20gXCIuL21peGlucy93aW5kb3dcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIFdpbmRvdyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IHdpbmRvdzsgLy8vXG4gIH1cblxuICBhc3NpZ24oLi4uc291cmNlcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgLi4uc291cmNlcyk7XG4gIH1cblxuICBhZGRSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICByZW1vdmVSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICBnZXRXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lcldpZHRoOyB9IC8vL1xuICBcbiAgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmlubmVySGVpZ2h0OyB9IC8vL1xuXG4gIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWU9mZnNldDsgfSAgLy8vXG5cbiAgZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWE9mZnNldDsgfSAvLy9cbn1cblxuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCB3aW5kb3dNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCAodHlwZW9mIHdpbmRvdyA9PT0gVU5ERUZJTkVEKSA/IHVuZGVmaW5lZCA6IG5ldyBXaW5kb3coKTsgIC8vL1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIERvY3VtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQ7IC8vL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuXG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFjdCB9IGZyb20gXCIuL3JlYWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcyB9IGZyb20gXCIuL2JvdW5kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb2R5IH0gZnJvbSBcIi4vZWxlbWVudC9ib2R5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmsgfSBmcm9tIFwiLi9lbGVtZW50L2xpbmtcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXQgfSBmcm9tIFwiLi9pbnB1dEVsZW1lbnQvaW5wdXRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vZWxlbWVudC9idXR0b25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vZWxlbWVudC9zZWxlY3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9lbGVtZW50L2NoZWNrYm94XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRhcmVhIH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L3RleHRhcmVhXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRFbGVtZW50IH0gZnJvbSBcIi4vdGV4dEVsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXRFbGVtZW50IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRvY3VtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29uc3RhbnRzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCB3aW5kb3cgfSBmcm9tIFwiZWFzeVwiO1xuXG53aW5kb3cuYXNzaWduKHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2p1eHRhcG9zZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4ID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgRVJST1IgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgQ1RSTF9DID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVCA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX1RZUEUgPSBcImNvbnRlbnQtdHlwZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdO31cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkKGFycmF5KSB7IHJldHVybiBhcnJheVsyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoKGFycmF5KSB7IHJldHVybiBhcnJheVszXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAzXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGFpbChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2soYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKGFycmF5Lmxlbmd0aCAtIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9udChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5MSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5MiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRPckFycmF5Ml07XG4gIFxuICBwdXNoKGFycmF5MSwgYXJyYXkyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKGFycmF5KSB7XG4gIGNvbnN0IHN0YXJ0ID0gMDtcbiAgXG4gIHJldHVybiBhcnJheS5zcGxpY2Uoc3RhcnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShhcnJheTEsIGFycmF5Mikge1xuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gYXJyYXkyLmxlbmd0aDsgIC8vL1xuICBcbiAgc3BsaWNlKGFycmF5MSwgc3RhcnQsIGRlbGV0ZUNvdW50LCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXkyID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFtzdGFydCwgZGVsZXRlQ291bnQsIC4uLmFycmF5Ml0sXG4gICAgICAgIGRlbGV0ZWRJdGVtc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheTEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkSXRlbXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UoYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZmlsdGVyZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgdGVzdCkge1xuICBjb25zdCBlbGVtZW50cyA9IFtdO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIHRlc3QpIHtcbiAgbGV0IHBydW5lZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIHBydW5lZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gcHJ1bmVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKGFycmF5LCBlbGVtZW50LCB0ZXN0KSB7XG4gIGNvbnN0IGZvdW5kID0gYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudChhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXBhcmF0ZShhcnJheSwgYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICB2YWx1ZSA9IGNhbGxiYWNrKHZhbHVlLCBlbGVtZW50LCBpbmRleCk7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmlyc3QsXG4gIHNlY29uZCxcbiAgdGhpcmQsXG4gIGZvdXJ0aCxcbiAgZmlmdGgsXG4gIGZpZnRoTGFzdCxcbiAgZm91cnRoTGFzdCxcbiAgdGhpcmRMYXN0LFxuICBzZWNvbmRMYXN0LFxuICBmaXJzdExhc3QsXG4gIGxhc3QsXG4gIGhlYWQsXG4gIHRhaWwsXG4gIGJhY2ssXG4gIGZyb250LFxuICBwdXNoLFxuICB1bnNoaWZ0LFxuICBjb25jYXQsXG4gIGNsZWFyLFxuICBjb3B5LFxuICBtZXJnZSxcbiAgc3BsaWNlLFxuICByZXBsYWNlLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBwYXRjaCxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBDT0xPTl9DSEFSQUNURVIgPSBcIjpcIjtcbmV4cG9ydCBjb25zdCBBTVBFUlNBTkRfQ0hBUkFDVEVSID0gXCImXCI7XG5leHBvcnQgY29uc3QgTElORV9GRUVEX0NIQVJBQ1RFUiA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0NIQVJBQ1RFUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTI3KTtcbmV4cG9ydCBjb25zdCBDQVJSSUFHRV9SRVRVUk5fQ0hBUkFDVEVSID0gXCJcXHJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ09MT05fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSIH0gZnJvbSBcIi4uL2NoYXJhY3RlcnNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG92ZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBvd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksXG4gICAgICAgIGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIG92ZXJ3cml0dGVuID0gb3duUHJvcGVydHlOYW1lcy5zb21lKChvd25Qcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWUgPSBvd25Qcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbb3duUHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gIGlmICghb3ZlcndyaXR0ZW4pIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3Qgb3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLFxuICAgICAgICBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWVzID0gb3duUHJvcGVydHlOYW1lcy5tYXAoKG93blByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9IG93blByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZTtcbiAgICAgICAgfSksXG4gICAgICAgIGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXNJbmNsdWRlc0xvd2VyY2FzZU5hbWUgPSBsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKGxvd2VyY2FzZU5hbWUpO1xuXG4gIGlmICghbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lc0luY2x1ZGVzTG93ZXJjYXNlTmFtZSkge1xuICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9ydEZyb21Ib3N0KGhvc3QpIHtcbiAgbGV0IHBvcnQ7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteXFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBpbmRleCA9IHNlY29uZE1hdGNoLmluZGV4T2YoQ09MT05fQ0hBUkFDVEVSKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgY29uc3Qgc2VjdXJlID0gc2VjdXJlRnJvbUhvc3QoaG9zdCk7XG5cbiAgICBwb3J0ID0gc2VjdXJlID8gNDQzIDogODA7IC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXggKyAxLFxuICAgICAgICAgIHBvcnRTdHJpbmcgPSBzZWNvbmRNYXRjaC5zdWJzdHJpbmcoc3RhcnQpO1xuXG4gICAgcG9ydCA9IE51bWJlcihwb3J0U3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiBwb3J0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdXJlRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBzZWN1cmUgPSAvXmh0dHBzOlxcL1xcLy8udGVzdChob3N0KTtcblxuICByZXR1cm4gc2VjdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaG9zdG5hbWVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXjpcXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGhvc3RuYW1lID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBob3N0bmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocXVlcnkpLFxuICAgICAgICBuYW1lc0xlbmd0aCA9IG5hbWVzLmxlbmd0aCxcbiAgICAgICAgbGFzdEluZGV4ID0gbmFtZXNMZW5ndGggLSAxLFxuICAgICAgICBxdWVyeVN0cmluZyA9IG5hbWVzLnJlZHVjZSgocXVlcnlTdHJpbmcsIG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeVtuYW1lXSxcbiAgICAgICAgICAgICAgICBlbmNvZGVkTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSxcbiAgICAgICAgICAgICAgICBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLFxuICAgICAgICAgICAgICAgIGFtcGVyc2FuZE9yTm90aGluZyA9IChpbmRleCAhPT0gbGFzdEluZGV4KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTVBFUlNBTkRfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HO1xuICBcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtlbmNvZGVkTmFtZX09JHtlbmNvZGVkVmFsdWV9JHthbXBlcnNhbmRPck5vdGhpbmd9YDtcbiAgXG4gICAgICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBxdWVyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSkge1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5KHF1ZXJ5KSxcbiAgICAgICAgdXJsID0gKHF1ZXJ5U3RyaW5nID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfWAgOlxuICAgICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX0/JHtxdWVyeVN0cmluZ31gO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb3ZlcndyaXRlLFxuICB1bmRlcndyaXRlLFxuICBwb3J0RnJvbUhvc3QsXG4gIHNlY3VyZUZyb21Ib3N0LFxuICBob3N0bmFtZUZyb21Ib3N0LFxuICBxdWVyeVN0cmluZ0Zyb21RdWVyeSxcbiAgdXJsRnJvbUhvc3RVUklBbmRRdWVyeVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEFDQ0VQVCwgQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR0VUX01FVEhPRCwgUE9TVF9NRVRIT0QgfSBmcm9tIFwiLi4vbWV0aG9kc1wiO1xuaW1wb3J0IHsgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0KGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHQoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGUoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRdIHx8IG51bGwsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaGVhZGVyc1tDT05URU5UX1RZUEVdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFQsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRSwgY29udGVudFR5cGUpO1xuICB9XG5cbiAgKGNvbnRlbnQgIT09IG51bGwpID9cbiAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKGNvbnRlbnQpIDpcbiAgICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXQsXG4gIHBvc3QsXG4gIHJlcXVlc3Rcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUFjY2VwdChoZWFkZXJzLCBhY2NlcHQpIHtcbiAgY29uc3QgbmFtZSA9IEFDQ0VQVCwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZShoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhdGhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGF0aFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBodHRwVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2h0dHBcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FzeW5jaHJvbm91c1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGFqYXhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYWpheFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkUgPSBcIlxcblwiO1xuZXhwb3J0IGNvbnN0IExFU1NfVEhBTiA9IFwiJmx0O1wiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORCA9IFwiJmFtcDtcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTiA9IFwiJmd0O1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgTEVTU19USEFOLCBBTVBFUlNBTkQsIEdSRUFURVJfVEhBTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGlzZUNvbnRlbnQoY29udGVudCkge1xyXG4gIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJi8sIEFNUEVSU0FORClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88LywgTEVTU19USEFOKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU4pO1xyXG5cclxuICByZXR1cm4gc2FuaXRpc2VkQ29udGVudDtcclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlVHlwZSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IG5hbWVUeXBlID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgY29tbWVudFR5cGUgPSBcImNvbW1lbnRcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVUeXBlID0gXCJlbmQtb2YtbGluZVwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlc3BhY2VUeXBlID0gXCJ3aGl0ZXNwYWNlXCI7XG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbFR5cGUgPSBcInN0cmluZy1saXRlcmFsXCI7XG5leHBvcnQgY29uc3QgYnJva2VuQ29tbWVudFR5cGUgPSBcImJyb2tlbi1jMG1tZW50XCI7ICAvLy9cbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblR5cGUgPSBcInJlZ3VsYXItZXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlID0gXCJicm9rZW4tc3RyaW5nLWxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBzaW5nbGVMaW5lQ29tbWVudFR5cGUgPSBgc2luZ2xlLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgZW5kLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBzdGFydC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYG1pZGRsZS1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0eXBlVHlwZSxcbiAgbmFtZVR5cGUsXG4gIGNvbW1lbnRUeXBlLFxuICBlbmRPZkxpbmVUeXBlLFxuICB3aGl0ZXNwYWNlVHlwZSxcbiAgc3RyaW5nTGl0ZXJhbFR5cGUsXG4gIGJyb2tlbkNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlLFxuICBzaW5nbGVMaW5lQ29tbWVudFR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuIHtcbiAgY29uc3RydWN0b3IodHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICB0aGlzLnNpZ25pZmljYW50ID0gc2lnbmlmaWNhbnQ7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cbiAgXG4gIGdldElubmVySFRNTCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gIH1cblxuICBnZXRDb250ZW50TGVuZ3RoKCkge1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLmNvbnRlbnQubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGNvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBpc1NpZ25pZmljYW50KCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50O1xuICB9XG4gIFxuICBpc0NvbW1lbnRUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlSW5jbHVkZXNDb21tZW50VHlwZSA9IHRoaXMudHlwZS5pbmNsdWRlcyhjb21tZW50VHlwZSksXG4gICAgICAgICAgY29tbWVudFRva2VuID0gdHlwZUluY2x1ZGVzQ29tbWVudFR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGNvbW1lbnRUb2tlbjtcbiAgfVxuXG4gIGlzRW5kT2ZMaW5lVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUVuZE9mTGluZVR5cGUgPSAodGhpcy50eXBlID09PSBlbmRPZkxpbmVUeXBlKSxcbiAgICAgICAgICBlbmRPZkxpbmVUb2tlbiA9IHR5cGVFbmRPZkxpbmVUeXBlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVUb2tlbjtcbiAgfVxuXG4gIGlzV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVXaGl0ZXNwYWNlVHlwZSA9ICh0aGlzLnR5cGUgPT09IHdoaXRlc3BhY2VUeXBlKSxcbiAgICAgICAgICB3aGl0ZXNwYWNlVG9rZW4gPSB0eXBlV2hpdGVzcGFjZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIHdoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyh0b2tlbikge1xuICAgIGNvbnN0IGVxdWFsVG9Ub2tlbiA9ICh0aGlzID09PSB0b2tlbik7XG5cbiAgICByZXR1cm4gZXF1YWxUb1Rva2VuO1xuICB9XG5cbiAgbWF0Y2godG9rZW4pIHtcbiAgICBjb25zdCB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9ICgodGhpcy50eXBlID09PSB0eXBlKSAmJiAodGhpcy5jb250ZW50ID09PSBjb250ZW50KSAmJiAodGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQpKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgIC8vL1xuICAgICAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX1cIj4ke3RoaXMuaW5uZXJIVE1MfTwvc3Bhbj5gO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgaWYgKHN0YXJ0UG9zaXRpb24gIT09IGVuZFBvc2l0aW9uKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50OyAvLy9cblxuICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgeyB0eXBlLCByZWd1bGFyRXhwcmVzc2lvbiB9ID0gQ2xhc3MsXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudCwgLy8vXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyAgLy8vXG4gICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IFUsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pO1xuICAgICAgICBcbiAgICByZXR1cm4gcnVsZTsgXG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gICAgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIGZsYWdzID0gdW5pY29kZSA/XG4gICAgICAgICAgICAgICAgICAgIFUgOlxuICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwLCAvLy9cbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICBjb25zdCB1bmljb2RlUmVndWxhckV4cHJlc3Npb24gPSAvdXsvLCAvLy9cbiAgICAgICAgaW5kZXggPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4uc2VhcmNoKHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgIHVuaWNvZGUgPSAoaW5kZXggIT09IC0xKTtcblxuICByZXR1cm4gdW5pY29kZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVzID0gXCIrXCI7XHJcbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gXCJcdTAzQjVcIjtcclxuZXhwb3J0IGNvbnN0IHdpbGRjYXJkID0gXCIuXCI7XHJcbmV4cG9ydCBjb25zdCBhc3RlcmlzayA9IFwiKlwiO1xyXG5leHBvcnQgY29uc3Qgc2VwYXJhdG9yID0gXCI6Oj1cIjtcclxuZXhwb3J0IGNvbnN0IHRlcm1pbmF0b3IgPSBcIjtcIjtcclxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsQmFyID0gXCJ8XCI7XHJcbmV4cG9ydCBjb25zdCBvcGVuQnJhY2tldCA9IFwiKFwiO1xyXG5leHBvcnQgY29uc3QgY2xvc2VCcmFja2V0ID0gXCIpXCI7XHJcbmV4cG9ydCBjb25zdCBxdWVzdGlvbk1hcmsgPSBcIj9cIjtcclxuZXhwb3J0IGNvbnN0IGV4Y2xhbWF0aW9uTWFyayA9IFwiIVwiO1xyXG5leHBvcnQgY29uc3QgTk9fV0hJVEVTUEFDRSA9IFwiPE5PX1dISVRFU1BBQ0U+XCI7XHJcbmV4cG9ydCBjb25zdCBFTkRfT0ZfTElORSA9IFwiPEVORF9PRl9MSU5FPlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHBsdXMsXHJcbiAgZXBzaWxvbixcclxuICB3aWxkY2FyZCxcclxuICBhc3RlcmlzayxcclxuICBzZXBhcmF0b3IsXHJcbiAgdGVybWluYXRvcixcclxuICB2ZXJ0aWNhbEJhcixcclxuICBvcGVuQnJhY2tldCxcclxuICBjbG9zZUJyYWNrZXQsXHJcbiAgcXVlc3Rpb25NYXJrLFxyXG4gIGV4Y2xhbWF0aW9uTWFyayxcclxuICBOT19XSElURVNQQUNFLFxyXG4gIEVORF9PRl9MSU5FXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/Ojo6PXxcXFxcfHxcXFxcKHxcXFxcKXxcXFxcP3xcXFxcIXxcXFxcKnxcXFxcK3xcXFxcLnxcdTAzQjV8O3w8Tk9fV0hJVEVTUEFDRT58PEVORF9PRl9MSU5FPilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXlxcXFxbW15cXFxcXV0rXFxcXF1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltcXFxcd35dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdoaXRlc3BhY2VUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSB3aGl0ZXNwYWNlVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXltcXHQgXSsvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcLnxbXlxcL10pKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc2luZ2xlTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwvLiovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXCpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IE5FV19MSU5FIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgc2FuaXRpc2VDb250ZW50IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIGluZGV4KSB7XG4gICAgc3VwZXIodHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCk7XG5cbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBnZXRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gTkVXX0xJTkU7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgdGhpcy5pbmRleCk7IH1cblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBlbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gL1xcclxcbnxcXHJ8XFxuLyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBlbmRPZkxpbmVUeXBlLCAvLy9cbiAgICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudCwgLy8vXG4gICAgICAgICAgICAgIHNpZ25pZmljYW50ID0gZmFsc2UsXG4gICAgICAgICAgICAgIHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgICAgZW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiA9IG5ldyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/Oi4rPyg/PVxcKlxcLyl8LiskKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSAxLFxuICAgICAgICAgIGVuZCA9IGNvbnRlbnRMZW5ndGggLSAxLFxuICAgICAgICAgIHN0cmluZyA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXicoPzpcXFxcLnxbXiddKSonLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdMaXRlcmFsVHlwZSB9IGZyb21cIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIig/OlxcXFwufFteXCJcXFxcXSkqXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNUb2tlbkluQ29tbWVudFByZXNlcnZpbmdUb2tlbih0b2tlbikge1xuICBsZXQgdG9rZW5Db21tZW50UHJlc2VydmluZ1Rva2VuID0gZmFsc2U7XG5cbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgdG9rZW5Db21tZW50UHJlc2VydmluZ1Rva2VuID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIHRva2VuQ29tbWVudFByZXNlcnZpbmdUb2tlbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xyXG5cclxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4vcnVsZVwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XHJcbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xyXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xyXG5pbXBvcnQgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5pbXBvcnQgeyBTVFJJTkcsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaXNUb2tlbkluQ29tbWVudFByZXNlcnZpbmdUb2tlbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5cIjtcclxuXHJcbmNvbnN0IHsgc3BsaWNlIH0gPSBhcnJheVV0aWxpdGllcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50VG9rZW5zLCBOb3RJbkNvbW1lbnRUb2tlbnMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICAgIHRoaXMuSW5Db21tZW50VG9rZW5zID0gSW5Db21tZW50VG9rZW5zO1xyXG4gICAgdGhpcy5Ob3RJbkNvbW1lbnRUb2tlbnMgPSBOb3RJbkNvbW1lbnRUb2tlbnM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRUb2tlbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5JbkNvbW1lbnRUb2tlbnM7XHJcbiAgfVxyXG5cclxuICBnZXROb3RJbkNvbW1lbnRUb2tlbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRUb2tlbnM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZShjb250ZW50KSB7XHJcbiAgICBjb25zdCBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzID0gdGhpcy50b2tlbmlzZUVuZE9mTGluZXMoY29udGVudCksXHJcbiAgICAgICAgICB0b2tlbnNPckNvbnRlbnRzID0gZW5kT2ZMaW5lVG9rZW5zT3JDb250ZW50czsgLy8vXHJcblxyXG4gICAgdGhpcy50b2tlbmlzZUNvbnRlbnRzKHRva2Vuc09yQ29udGVudHMpO1xyXG5cclxuICAgIGNvbnN0IHRva2VucyA9IHRva2Vuc09yQ29udGVudHM7ICAvLy9cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VFbmRPZkxpbmVzKGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4gfSA9IHRoaXMuY29uc3RydWN0b3IsXHJcbiAgICAgICAgICBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzID0gW107XHJcblxyXG4gICAgbGV0IGVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lVG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgd2hpbGUgKGVuZE9mTGluZVRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGVuZE9mTGluZVRva2VuSW5kZXggPSBlbmRPZkxpbmVUb2tlbi5nZXRJbmRleCgpLFxyXG4gICAgICAgICAgICBlbmRPZkxpbmVUb2tlbkNvbnRlbnRMZW5ndGggPSBlbmRPZkxpbmVUb2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIGxlZnQgPSBlbmRPZkxpbmVUb2tlbkluZGV4LCAvLy9cclxuICAgICAgICAgICAgcmlnaHQgPSBlbmRPZkxpbmVUb2tlbkluZGV4ICsgZW5kT2ZMaW5lVG9rZW5Db250ZW50TGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGxlZnQpLFxyXG4gICAgICAgICAgICByaWdodENvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhyaWdodCk7XHJcblxyXG4gICAgICBjb250ZW50ID0gbGVmdENvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMucHVzaChjb250ZW50KTtcclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMucHVzaChlbmRPZkxpbmVUb2tlbik7XHJcblxyXG4gICAgICBjb250ZW50ID0gcmlnaHRDb250ZW50OyAvLy9cclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lVG9rZW4ubWF0Y2goY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5kT2ZMaW5lVG9rZW5zT3JDb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VDb250ZW50cyh0b2tlbnNPckNvbnRlbnRzKSB7XHJcbiAgICBsZXQgaW5Db21tZW50ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGluZGV4ID0gMCxcclxuICAgICAgICB0b2tlbnNPckNvbnRlbnRzTGVuZ3RoID0gdG9rZW5zT3JDb250ZW50cy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdG9rZW5zT3JDb250ZW50c0xlbmd0aCkge1xyXG4gICAgICBjb25zdCB0b2tlbk9yQ29udGVudCA9IHRva2Vuc09yQ29udGVudHNbaW5kZXhdLFxyXG4gICAgICAgICAgICB0b2tlbk9yQ29udGVudFN0cmluZyA9ICh0eXBlb2YgdG9rZW5PckNvbnRlbnQgPT09IFNUUklORyksXHJcbiAgICAgICAgICAgIHRva2VuT3JDb250ZW50Q29udGVudCA9IHRva2VuT3JDb250ZW50U3RyaW5nOyAvLy9cclxuXHJcbiAgICAgIGlmICh0b2tlbk9yQ29udGVudENvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCB0b2tlbnMgPSBbXSxcclxuICAgICAgICAgICAgICBjb250ZW50ID0gdG9rZW5PckNvbnRlbnQ7IC8vL1xyXG5cclxuICAgICAgICBpbkNvbW1lbnQgPSB0aGlzLnRva2VuaXNlQ29udGVudChjb250ZW50LCB0b2tlbnMsIGluQ29tbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xyXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgc3BsaWNlKHRva2Vuc09yQ29udGVudHMsIHN0YXJ0LCBkZWxldGVDb3VudCwgdG9rZW5zKTtcclxuXHJcbiAgICAgICAgdG9rZW5zT3JDb250ZW50c0xlbmd0aCArPSB0b2tlbnNMZW5ndGggLSAxO1xyXG5cclxuICAgICAgICBpbmRleCArPSB0b2tlbnNMZW5ndGggLSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VDb250ZW50KGNvbnRlbnQsIHRva2VucywgaW5Db21tZW50KSB7XHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBUb2tlbnMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSW5Db21tZW50VG9rZW5zIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50VG9rZW5zO1xyXG5cclxuICAgICAgVG9rZW5zLnNvbWUoKFRva2VuKSA9PiB7XHJcbiAgICAgICAgaWYgKFRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0b2tlbiA9IFRva2VuLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmICh0b2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHtcclxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBydWxlLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGVudCAnJHtjb250ZW50fScgY2Fubm90IGJlIHRva2VuaXNlZC5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xyXG5cclxuICAgICAgY29uc3QgY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZyA9IGlzVG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4odG9rZW4pLFxyXG4gICAgICAgICAgICB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5Db250ZW50TGVuZ3RoOyAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAvLy9cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5Db21tZW50O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gU2luZ2xlTGluZUNvbW1lbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XHJcbiAgICBjb25zdCB7IGVudHJpZXMgfSA9IENsYXNzLFxyXG4gICAgICAgICAgSW5Db21tZW50VG9rZW5zID0gSW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudFRva2VucyA9IE5vdEluQ29tbWVudFRva2Vuc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBydWxlcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gUnVsZS5mcm9tRW50cnkoZW50cnkpKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRUb2tlbnMsIE5vdEluQ29tbWVudFRva2Vucyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IEluQ29tbWVudFRva2VucyA9IEluQ29tbWVudFRva2Vuc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBOb3RJbkNvbW1lbnRUb2tlbnMgPSBOb3RJbkNvbW1lbnRUb2tlbnNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudFRva2VucywgTm90SW5Db21tZW50VG9rZW5zKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgSW5Db21tZW50VG9rZW5zID0gSW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudFRva2VucyA9IE5vdEluQ29tbWVudFRva2Vuc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50VG9rZW5zLCBOb3RJbkNvbW1lbnRUb2tlbnMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluQ29tbWVudFRva2Vuc0Zyb21DbGFzcyhDbGFzcykge1xyXG4gIGNvbnN0IHsgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcyxcclxuICAgICAgICBJbkNvbW1lbnRUb2tlbnMgPSBbXHJcbiAgICAgICAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuXHJcbiAgICAgICAgXTtcclxuXHJcbiAgcmV0dXJuIEluQ29tbWVudFRva2VucztcclxufVxyXG5cclxuZnVuY3Rpb24gTm90SW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzLFxyXG4gICAgICBOb3RJbkNvbW1lbnRUb2tlbnMgPSBbXHJcbiAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxyXG4gICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cclxuICAgICAgXTtcclxuXHJcbiAgcmV0dXJuIE5vdEluQ29tbWVudFRva2VucztcclxufSIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJORkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHRva2Vuc0Zyb21CTkYoYm5mKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gYm5mLCAgLy8vXHJcbiAgICAgICAgICB0b2tlbnMgPSBzdXBlci50b2tlbmlzZShjb250ZW50KTtcclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJORkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQk5GTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQk5GTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRpZ2l0XCI6IFwiXlxcXFxkK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImJyYWNrZXRcIjogXCJeKD86XFxcXCh8XFxcXCkpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwib3BlcmF0b3JcIjogXCJeKD86XFxcXCt8XFxcXC18XFxcXCp8XFxcXC8pXCJcclxuICB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhCYXNpY0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQmFzaWNMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCYXNpY0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBORVdfTElORSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCkge1xuICAgIHN1cGVyKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IE5FV19MSU5FO1xuICAgIFxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0aGlzLmluZGV4KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSAvXFxyXFxufFxccnxcXG4vLFxuICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGVuZE9mTGluZVR5cGUsIC8vL1xuICAgICAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgICAgICB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICAgIGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gPSBuZXcgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vY29tbW9uL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi9jb21tb24vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9ibmYvc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7IC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7ICAvLy9cblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjsgIC8vL1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKVxcXFwlXCIgfSxcclxuXHJcbiAgeyBcImZyZXF1ZW5jeVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86aHp8a2h6KVwiIH0sXHJcblxyXG4gIHsgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiIH0sXHJcblxyXG4gIHsgXCJsZW5ndGhcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnB4fGNtfG1tfGlufHB0fHBjKVwiIH0sXHJcblxyXG4gIHsgXCJhbmdsZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86ZGVnfHJhZHxncmFkKVwiIH0sXHJcblxyXG4gIHsgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiIH0sXHJcblxyXG4gIHsgXCJyZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylyZW1cIiB9LFxyXG5cclxuICB7IFwiZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKyllbVwiIH0sXHJcblxyXG4gIHsgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCIgfSxcclxuXHJcbiAgeyBcInNwZWNpYWxcIjogXCJeO3w6Onw6fFxcXFwufCx8L3xcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcIm9wZXJhdG9yXCI6IFwiXl4oPzphbmR8bm90fG9ubHkpJFwiIH0sXHJcblxyXG4gIHsgXCJpZGVudGlmaWVyXCI6IFwiXltfYS16QS1aMC05LV0rXCIgfSxcclxuXHJcbiAgeyBcInVuYXJ5LW9wZXJhdG9yXCI6IFwiXlxcXFwrfFxcXFwtXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKENTU0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ1NTTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ1NTTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBcIjo6PVwiIGRlZmluaXRpb25zIFwiO1wiIDtcblxuICAgICAgbmFtZSAgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgZGVmaW5pdGlvbnMgICAgICAgICAgIDo6PSAgZGVmaW5pdGlvbiAoIFwifFwiIGRlZmluaXRpb24gKSogO1xuXG4gICAgICBkZWZpbml0aW9uICAgICAgICAgICAgOjo9ICBwYXJ0KyA7XG5cbiAgICAgIHBhcnQgICAgICAgICAgICAgICAgICA6Oj0gIG5vblRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbm9XaGl0ZXNwYWNlUGFydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG5vblRlcm1pbmFsUGFydCAgICAgICA6Oj0gIGNob2ljZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgc2VxdWVuY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJ1bGVOYW1lIGxvb2tBaGVhZE1vZGlmaWVyP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIHRlcm1pbmFsUGFydCAgICAgICAgICA6Oj0gIHNpZ25pZmljYW50VG9rZW5UeXBlXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFN5bWJvbFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICBub1doaXRlc3BhY2VQYXJ0ICAgICAgOjo9ICBcIjxOT19XSElURVNQQUNFPlwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgY2hvaWNlT2ZQYXJ0cyAgICAgICAgIDo6PSAgXCIoXCIgcGFydCAoIFwifFwiIHBhcnQgKSsgXCIpXCIgO1xuXG4gICAgICBzZXF1ZW5jZU9mUGFydHMgICAgICAgOjo9ICBcIihcIiBwYXJ0IHBhcnQrIFwiKVwiIDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICB0ZXJtaW5hbFN5bWJvbCAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuXG4gICAgICBlcHNpbG9uICAgICAgICAgICAgICAgOjo9ICBcIlx1MDNCNVwiIDsgXG5cbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHplcm9Pck1vcmVRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiIVwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEJBUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0ggPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBORVdfTElORSA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTSU5HTEVfU1BBQ0UgPSBcIiBcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HLCBTSU5HTEVfU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU0lOR0xFX1NQQUNFO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKG9sZERlZmluaXRpb24sIG5ld0RlZmluaXRpb24pIHtcbiAgICBjb25zdCBvbGREZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2Yob2xkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAob2xkRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb2xkRGVmaW5pdGlvbkluZGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBuZXdEZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHJ1bGVOb2RlID0gbnVsbDtcblxuICAgIGNvbnRleHQuaW5jcmVhc2VEZXB0aCgpO1xuXG4gICAgY29uc3QgdG9vRGVlcCA9IGNvbnRleHQuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgICBjaGlsZE5vZGVzID0gZGVmaW5pdGlvbk5vZGVzLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSB0aGlzLk5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgICAgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVjcmVhc2VEZXB0aCgpO1xuXG4gICAgcmV0dXJuIHJ1bGVOb2RlO1xuICB9XG5cbiAgcGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBkZWZpbml0aW9uLnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgcnVsZSA9IG5ldyBDbGFzcyhuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWElNVU1fREVQVEggPSA5OTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9NQVhJTVVNX0RFUFRIIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVNYXAsIHRva2VucywgaW5kZXgsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuICBnZXREZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXB0aDtcbiAgfVxuXG5cdGdldE1heGltdW1EZXB0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzVG9vRGVlcCgpIHtcbiAgICBjb25zdCB0b29EZWVwID0gKHRoaXMuZGVwdGggPiB0aGlzLm1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gdG9vRGVlcDtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgaW5jcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoKys7XG4gIH1cblxuICBkZWNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgtLTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0ZGVwdGggPSAwLFxuXHRcdFx0XHRcdG1heGltdW1EZXB0aCA9IERFRkFVTFRfTUFYSU1VTV9ERVBUSCxcblx0XHRcdFx0XHRjb250ZXh0ID0gbmV3IENvbnRleHQocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGxhc3QsIHB1c2gsIGZpbHRlciwgZm9yd2FyZHNTb21lLCBiYWNrd2FyZHNTb21lIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW4oYXJyYXkpIHsgcmV0dXJuIGFycmF5LmZpbHRlcigoZW50cnksIGluZGV4KSA9PiBpc0V2ZW4oaW5kZXgpKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0Rmlyc3QoYXJyYXkpIHtcbiAgYXJyYXkgPSBhcnJheS5zbGljZSgpOyAgLy8vXG5cbiAgYXJyYXkuc2hpZnQoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdEFuZExhc3QoYXJyYXkpIHtcbiAgYXJyYXkgPSBhcnJheS5zbGljZSgpOyAgLy8vXG5cbiAgYXJyYXkuc2hpZnQoKTtcblxuICBhcnJheS5wb3AoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbihpbmRleCkge1xuICBjb25zdCBldmVuID0gKE1hdGguZmxvb3IoaW5kZXgvMikgPT09IGluZGV4LzIpO1xuXG4gIHJldHVybiBldmVuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5pbXBvcnQgeyBORVdfTElORSwgRU1QVFlfU1RSSU5HLCBTSU5HTEVfU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzKSB7XG4gICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKCksICAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBuZXcgUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGg7XG5cbiAgICBsZXQgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGlmIChsaW5lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgd2lkdGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IGxhc3QodGhpcy5saW5lcyksXG4gICAgICAgICAgICBsYXN0TGluZUxlbmd0aCA9IGxhc3RMaW5lLmxlbmd0aDtcblxuICAgICAgd2lkdGggPSBsYXN0TGluZUxlbmd0aDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgY29uc3QgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aCxcbiAgICAgICAgICBkZXB0aCA9IGxpbmVzTGVuZ3RoOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBmb3JFYWNoTGluZShjYWxsYmFjaykge1xuICAgIHRoaXMubGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhcHBlbmRUb1RvcChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvTGVmdChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxpbmUgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvUmlnaHQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIGxpbmU7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0JvdHRvbShwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFRvcE1hcmdpbih0b3BNYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIHRvcE1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICB0b3BNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgodG9wTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvcE1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQodG9wTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IGxlZnRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobGVmdE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxlZnRNYXJnaW5TdHJpbmcgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICBhZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgcmlnaHRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgocmlnaHRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIHJpZ2h0TWFyZ2luU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIGJvdHRvbU1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICBib3R0b21NYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgoYm90dG9tTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJvdHRvbU1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2goYm90dG9tTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgXG4gIHBvcExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnBvcCgpOyB9XG4gIFxuICBzaGlmdExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnNoaWZ0KCk7IH1cbiAgXG4gIHB1c2hMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy5wdXNoKGxpbmUpOyB9XG4gIFxuICB1bnNoaWZ0TGluZShsaW5lKSB7IHRoaXMubGluZXMudW5zaGlmdChsaW5lKTsgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMubGluZXMucmVkdWNlKChzdHJpbmcsIGxpbmUpID0+IHtcbiAgICAgIHN0cmluZyArPSBsaW5lICsgTkVXX0xJTkU7XG5cbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKG1hcmdpbldpZHRoLCBzcGFjZUNoYXJhY3Rlcikge1xuICBzcGFjZUNoYXJhY3RlciA9IHNwYWNlQ2hhcmFjdGVyIHx8IFNJTkdMRV9TUEFDRTtcblxuICBsZXQgbWFyZ2luU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXJnaW5XaWR0aDsgaW5kZXgrKykge1xuICAgIG1hcmdpblN0cmluZyArPSBzcGFjZUNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBtYXJnaW5TdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBCQVIsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIHN1cGVyKGxpbmVzKTtcbiAgICBcbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG4gIFxuICBnZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIHN1cGVyLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcblxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsZWZ0TWFyZ2luV2lkdGg7IC8vL1xuICB9XG5cbiAgc3RhdGljIGZyb21XaWR0aCh3aWR0aCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEJBUixcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLFxuICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IE1hdGguZmxvb3Iod2lkdGgvMiksXG4gICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoIC0gMTtcblxuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGNvbnN0IGxpbmVzID0gbGluZXNGcm9tRGVwdGgoZGVwdGgpLFxuICAgICAgICAgIGFyZ3MgPSBbbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25dLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGlmICh2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBzdHJpbmc7ICAvLy9cbiAgICAgIHN0cmluZyA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gUGFyc2VUcmVlOyAgLy8vXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGFyZ3MgPSBbbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25dLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgY29uc3QgbGluZXMgPSBbXTtcblxuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGRlcHRoKSB7XG4gICAgbGluZXNbaW5kZXgrK10gPSBFTVBUWV9TVFJJTkc7XG4gIH1cblxuICByZXR1cm4gbGluZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXhlcyA9IHRva2VuSW5kZXhlc0Zyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3J1bGVOYW1lfSR7dG9rZW5JbmRleGVzfWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oUnVsZU5hbWVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgdG9rZW5JbmRleGVzID0gKGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ICE9PSBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9LSR7bGFzdFNpZ25pZmljYW50VG9rZW5JbmRleH0pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0pYDtcblxuICByZXR1cm4gdG9rZW5JbmRleGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgREFTSCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21XaWR0aCh3aWR0aCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgod2lkdGgsIERBU0gpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZVwiO1xuXG5pbXBvcnQgeyBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIHNldENoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gIH1cbiAgXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIGNoaWxkIG5vZGVzIGF0IHJ1bGUgJyR7cnVsZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHVuZGVmaW5lZCwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOYW1lTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gZmFsc2U7XG5cbiAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IGlzUGFydFJ1bGVOYW1lUGFydChwYXJ0KTtcblxuICBpZiAocGFydFJ1bGVOYW1lUGFydCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsICAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBydWxlTmFtZVBhcnQuaXNMb29rQWhlYWQoKTtcblxuICAgIGlmIChsb29rQWhlYWQpIHtcbiAgICAgIHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQ7XG59XG5cbmZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydChwYXJ0KSB7XG4gIGxldCBwYXJ0UnVsZU5hbWVQYXJ0ID0gZmFsc2U7XG5cbiAgY29uc3QgcGFydFRlcm1pbmFsUGFydCA9IHBhcnQuaXNUZXJtaW5hbFBhcnQoKSxcbiAgICAgICAgcGFydE5vblRlcm1pbmFsUGFydCA9ICFwYXJ0VGVybWluYWxQYXJ0O1xuXG4gIGlmIChwYXJ0Tm9uVGVybWluYWxQYXJ0KSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gcGFydCxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBub25UZXJtaW5hbFBhcnQuaXNSdWxlTmFtZVBhcnQoKTtcblxuICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQ7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHBhcnRSdWxlTmFtZVBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1c2gsIGZpcnN0LCBhbGxCdXRGaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBnZXRGaXJzdFBhcnQoKSB7XG4gICAgY29uc3QgZmlyc3RQYXJ0ID0gZmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gZmlyc3RQYXJ0O1xuICB9XG5cbiAgZ2V0UGFydHNMZW5ndGgoKSB7XG4gICAgY29uc3QgcGFydHNMZW5ndGggPSB0aGlzLnBhcnRzLmxlbmd0aDtcblxuICAgIHJldHVybiBwYXJ0c0xlbmd0aDtcbiAgfVxuXG4gIGdldEFsbEJ1dEZpcnN0UGFydHMoKSB7XG4gICAgY29uc3QgYWxsQnV0Rmlyc3RQYXJ0cyA9IGFsbEJ1dEZpcnN0KHRoaXMucGFydHMpO1xuXG4gICAgcmV0dXJuIGFsbEJ1dEZpcnN0UGFydHM7XG4gIH1cblxuICBhZGRQYXJ0KHBhcnQpIHtcbiAgICB0aGlzLnBhcnRzLnB1c2gocGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2RlcywgaW5kZXgsIGNvbnRleHQsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nOyAvLy9cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICBzdHJpbmcgPSBwYXJ0c1N0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydHMocGFydHMsIG5vZGVzLCBpbmRleCwgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoKSB7XG4gICAgcGFyc2VkID0gdHJ1ZTtcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpbmRleCsrXTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBjb25zdCBwYXJ0c05vZGVzID0gW107XG5cbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0LCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgY29udGV4dCwgY2FsbGJhY2spKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCk7XG5cbiAgICBpZiAocGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgICAgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgICBwYXJzZWQgPSBydWxlTmFtZVBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBjb250ZXh0KSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydHMocGFydHMsIG5vZGVzLCBpbmRleCwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0IHtcbiAgaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNFcHNpbG9uUGFydCgpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIGNsb25lKFBhcnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykgeyByZXR1cm4gbmV3IFBhcnQoLi4ucmVtYWluaW5nQXJndW1lbnRzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVRlcm1pbmFsTm9kZUFuZFRva2Vucyh0ZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKSxcbiAgICAgICAgICB0b2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2Yoc2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgc3RyaW5nID0gYCR7Y29udGVudH1bJHt0eXBlfV0oJHt0b2tlbkluZGV4fSlgLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihUZXJtaW5hbE5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdGVybWluYWxOb2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW4sIHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgbGFzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpOyB9XG5cbiAgZ2V0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7IH1cblxuICBzZXRTaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBUZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbVRlcm1pbmFsTm9kZUFuZFRva2Vucyh0ZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKENsYXNzLCBzaWduaWZpY2FudFRva2VuKSB7XG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdW5kZWZpbmVkLCAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3Moc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSk7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGBbJHt0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlfV1gO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCwgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbmFtZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBuYW1lVHlwZSwgIC8vL1xuICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBOYW1lUnVsZU5hbWUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBQYXJ0UnVsZU5hbWUgPSBcInBhcnRcIjtcbmV4cG9ydCBjb25zdCBSdWxlUnVsZU5hbWUgPSBcInJ1bGVcIjtcbmV4cG9ydCBjb25zdCBFcnJvclJ1bGVOYW1lID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEVwc2lsb25SdWxlTmFtZSA9IFwiZXBzaWxvblwiO1xuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUnVsZU5hbWUgPSBcInJ1bGVOYW1lXCI7XG5leHBvcnQgY29uc3QgRG9jdW1lbnRSdWxlTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBXaWxkY2FyZFJ1bGVOYW1lID0gXCJ3aWxkY2FyZFwiO1xuZXhwb3J0IGNvbnN0IEVuZE9mTGluZVJ1bGVOYW1lID0gXCJlbmRPZkxpbmVcIjtcbmV4cG9ydCBjb25zdCBEZWZpbml0aW9uUnVsZU5hbWUgPSBcImRlZmluaXRpb25cIjtcbmV4cG9ydCBjb25zdCBRdWFudGlmaWVyUnVsZU5hbWUgPSBcInF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBEZWZpbml0aW9uc1J1bGVOYW1lID0gXCJkZWZpbml0aW9uc1wiO1xuZXhwb3J0IGNvbnN0IFRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFN5bWJvbFwiO1xuZXhwb3J0IGNvbnN0IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJub25UZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lID0gXCJub1doaXRlc3BhY2VQYXJ0XCI7XG5leHBvcnQgY29uc3QgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IFwibG9va0FoZWFkTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gXCJyZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvcHRpb25hbFF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJ6ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBcInNpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lTm9kZSBmcm9tIFwiLi4vbm9kZS9uYW1lXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuXG5pbXBvcnQgeyBOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IE5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTmFtZU5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7ICBcbiAgfVxuICBcbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSBmYWxzZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgY2xvbmUoUGFydCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgUGFydCguLi5yZW1haW5pbmdBcmd1bWVudHMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSdWxlTmFtZVBhcnRUeXBlID0gXCJydWxlTmFtZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFBhcnRQYXJ0VHlwZSA9IFwib3B0aW9uYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwib25lT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwiemVyb09yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFJ1bGVOYW1lUGFydFR5cGUsXG4gIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgT3B0aW9uYWxQYXJ0UGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxQYXJ0UGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT3B0aW9uYWxQYXJ0UGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKTtcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0KTtcblxuICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBxdWVzdGlvbk1hcmssICAvLy9cbiAgICAgICAgICBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke29wZXJhdG9yU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShPcHRpb25hbFBhcnRQYXJ0LCB0aGlzLnBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydCkge1xuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuICBcbiAgYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke29wZXJhdG9yU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoUGFydCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUGFydCwgdGhpcy5wYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3QgcGFyc2VQYXJ0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJ0LnBhcnNlKHBhcnRzTm9kZXMsIGNvbnRleHQsICgpID0+IHtcbiAgICAgICAgICBsZXQgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlUGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnQucGFyc2UocGFydHNOb2RlcywgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGNvdW50ICE9PSAwKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBwbHVzLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoT25lT3JNb3JlUGFydHNQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKTtcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VQYXJ0ID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhcnNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IG9wZXJhdG9yU3RyaW5nID0gYXN0ZXJpc2ssICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBzdXBlci5hc1N0cmluZyhvcGVyYXRvclN0cmluZyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShaZXJvT3JNb3JlUGFydHNQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIFF1YW50aWZpZXJSdWxlTmFtZSwgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ibmYvcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IFJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBsYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNOb2RlUXVhbnRpZmllck5vZGUsIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ibmZcIjtcbmltcG9ydCB7IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhQYXJ0Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpO1xuXG4gICAgaWYgKGxhc3ROb2RlUXVhbnRpZmllck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICAgIHF1YW50aWZpZXJOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpLFxuICAgICAgICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSk7XG5cbiAgICAgIHBhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBub2Rlcy5zaGlmdCgpO1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG5cbmZ1bmN0aW9uIGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcykge1xuICBjb25zdCBsYXN0Tm9kZSA9IGxhc3Qobm9kZXMpLFxuICAgICAgICBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNOb2RlUXVhbnRpZmllck5vZGUobGFzdE5vZGUpO1xuXG4gIHJldHVybiBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKSB7XG4gIGxldCBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbiAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgIGNhc2UgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvcHRpb25hbFBhcnRQYXJ0OyAvLy9cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb25lT3JNb3JlUGFydHNQYXJ0OyAvLy9cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydDsgIC8vL1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSdWxlTmFtZVBhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBsb29rQWhlYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuXG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cbiAgXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgaXNMb29rQWhlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9va0FoZWFkO1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzZXRMb29rQWhlYWQobG9va0FoZWFkKSB7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cblxuICBmaW5kUnVsZShjb250ZXh0KSB7XG4gICAgY29uc3QgcnVsZU1hcCA9IGNvbnRleHQuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGw7ICAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmZpbmRSdWxlKGNvbnRleHQpO1xuXG4gICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBydWxlTm9kZSA9IHJ1bGUucGFyc2UoY29udGV4dCwgY2FsbGJhY2spO1xuXG4gICAgICBwYXJzZWQgPSAocnVsZU5vZGUgIT09IG51bGwpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIG5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBsb29rQWhlYWRTdHJpbmcgPSB0aGlzLmxvb2tBaGVhZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsYW1hdGlvbk1hcmsgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RyaW5nID0gYCR7dGhpcy5ydWxlTmFtZX0ke2xvb2tBaGVhZFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUnVsZU5hbWVQYXJ0LCB0aGlzLnJ1bGVOYW1lLCB0aGlzLmxvb2tBaGVhZCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydCh0ZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBRdWFudGlmaWVyUnVsZU5hbWUsIE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWUgPSBRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobm9uVGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydE5vZGUgZnJvbSBcIi4uL25vZGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lLCBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0LCB0aGlyZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGUoUnVsZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWZpbml0aW9ucygpLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbE5vZGUsXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBkZWZpbml0aW9uc05vZGUgPSB0aGlyZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcblxuICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuICBcbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudC5yZXBsYWNlKC9cXFxcLywgXCJcXFxcXFxcXFwiKSxcbiAgICAgICAgICBzdHJpbmcgPSBgXCIke2NvbnRlbnR9XCJgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFRlcm1pbmFsU3ltYm9sUGFydCwgdGhpcy5jb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lLCBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBuYW1lUnVsZU5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZSA9IERlZmluaXRpb25zUnVsZU5hbWUsXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGRlZmluaXRpb25zUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTm9kZSBmcm9tIFwiLi4vbm9kZS9ydWxlXCI7XG5pbXBvcnQgUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZVwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvck5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvdGVybWluYWxcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBjb250ZXh0LmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShXaWxkY2FyZFBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcnJvck5vZGUgZnJvbSBcIi4uL25vZGUvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVycm9yRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVycm9yTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVwc2lsb24sIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFcHNpbG9uTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lcHNpbG9uTm9kZVwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVwc2lsb247ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVwc2lsb25Ob2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIGVwc2lsb25Ob2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVwc2lsb25Ob2RlLCBzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEVwc2lsb25Ob2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gRXBzaWxvbk5vZGUuZnJvbU5vdGhpbmcoKTtcblxuICAgIHBhcnNlZCA9IChlcHNpbG9uTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVwc2lsb25Ob2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBpc0Vwc2lsb25QYXJ0KCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVwc2lsb247IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoRXBzaWxvblBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IG5ldyBFcHNpbG9uUGFydCgpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVwc2lsb25Ob2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcHNpbG9uTm9kZSBmcm9tIFwiLi4vbm9kZS9lcHNpbG9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IEVwc2lsb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXBzaWxvblRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGVwc2lsb24sXG4gICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZXBzaWxvblRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IEVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFcHNpbG9uTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGVzKFJ1bGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5vZGVzID0gY2hpbGROb2Rlcy5yZWR1Y2UoKHJ1bGVOb2RlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBjaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWVSdWxlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFJ1bGVSdWxlTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlID0gcnVsZU5hbWVSdWxlUnVsZU5hbWU7ICAvLy9cblxuICAgICAgICAgICAgICBpZiAobm9uVGVybWluYWxOb2RlUnVsZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG5cbiAgICAgICAgICAgICAgICBydWxlTm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVOb2RlcztcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgcnVsZXMgPSBydWxlTm9kZXMubWFwKChydWxlTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVOb2RlLmdlbmVyYXRlUnVsZShSdWxlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERvY3VtZW50Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuaW1wb3J0IHsgZXZlbiwgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgY29uc3QgdHlwZSA9IENob2ljZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcbiAgICBcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cbiAgXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIHRoaXMucGFydHMuc29tZSgocGFydCkgPT4ge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuICAgIFxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9IHwgJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2hvaWNlT2ZQYXJ0c1BhcnQsIHRoaXMucGFydHMpOyB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cbiAgICBcbiAgICBjb25zdCBldmVuTm9kZXMgPSBldmVuKG5vZGVzKTtcblxuICAgIG5vZGVzID0gZXZlbk5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lLCBFcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZVJ1bGVOYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWUgPSBFcnJvclJ1bGVOYW1lLFxuICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVSdWxlTmFtZSksXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGVycm9yUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEb2N1bWVudE5vZGUgZnJvbSBcIi4uL25vZGUvZG9jdW1lbnRcIjtcbmltcG9ydCBEb2N1bWVudERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZG9jdW1lbnRcIjtcblxuaW1wb3J0IHsgRG9jdW1lbnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IG5ldyBEb2N1bWVudERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRG9jdW1lbnRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Tm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTmFtZU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lTm9kZSBmcm9tIFwiLi4vbm9kZS9ydWxlTmFtZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25hbWVcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvbiAgLy8vXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5hbWVOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFdpbGRjYXJkTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFdpbGRjYXJkTm9kZSBmcm9tIFwiLi4vbm9kZS93aWxkY2FyZFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBXaWxkY2FyZFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkVGVybWluYWxTeW1ib2xDb250ZW50ID0gd2lsZGNhcmQsXG4gICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKHdpbGRjYXJkVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gV2lsZGNhcmRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gV2lsZGNhcmROb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IGVuZE9mTGluZU5vZGVQYXJzZVRyZWUgPSBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7IHJldHVybiBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oRW5kT2ZMaW5lTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IGVuZE9mTGluZU5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZU5vZGUgPSBFbmRPZkxpbmVOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVQYXJ0ID0gbmV3IEVuZE9mTGluZVBhcnQoKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVuZE9mTGluZU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlIGZyb20gXCIuLi9ub2RlL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBFbmRPZkxpbmVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50ID0gRU5EX09GX0xJTkUsXG4gICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVuZE9mTGluZU5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnROb2RlIGZyb20gXCIuLi9ub2RlL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydE5vZGVzLm1hcCgocGFydE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Tm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbk5vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25Ob2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25Ob2Rlcy5tYXAoKGRlZmluaXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc05vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBhbGxCdXRGaXJzdEFuZExhc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgY29uc3QgdHlwZSA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICAgICAgcGFydHNMZW5ndGggPSB0aGlzLnBhcnRzLmxlbmd0aDtcblxuICAgICAgY29uc3QgcGFyc2VQYXJ0cyA9IChub2RlcywgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0c1tpbmRleCsrXTtcblxuICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBub2RlcywgaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VQYXJ0ID0gKHBhcnQsIG5vZGVzLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIGNvbnN0IHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0LCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzTm9kZXMsIGluZGV4KSk7XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cblxuICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0c05vZGVzLCBpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFydHMuZXZlcnkoKHBhcnQpID0+IHtcbiAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShwYXJ0c05vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2VxdWVuY2VPZlBhcnRzUGFydCwgdGhpcy5wYXJ0cyk7IH1cblxuICBzdGF0aWMgZnJvbU5vZGVzKG5vZGVzKSB7XG4gICAgY29uc3QgYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3Qobm9kZXMpO1xuXG4gICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvblJ1bGVOYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25zTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IERlZmluaXRpb25zRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uc1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25zRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEZWZpbml0aW9uc1J1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsUGFydFJ1bGVOYW1lLCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCBFbmRPZkxpbmVSdWxlTmFtZSwgRXBzaWxvblJ1bGVOYW1lLCBXaWxkY2FyZFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBUZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBlcHNpbG9uUnVsZU5hbWUgPSBFcHNpbG9uUnVsZU5hbWUsXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gVGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSxcbiAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlcHNpbG9uUnVsZU5hbWUpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih3aWxkY2FyZFJ1bGVOYW1lKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGVuZE9mTGluZVJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24odGVybWluYWxTeW1ib2xSdWxlTmFtZSksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVwc2lsb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyLCBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsIC8vL1xuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzTm9kZSBmcm9tIFwiLi4vbm9kZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBDaG9pY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gQ2hvaWNlT2ZQYXJ0c05vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKCg/OlxcXFwufFteXCJcXFxcXSkqKVwiJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBjb250ZW50ID0gc2Vjb25kTWF0Y2gucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCBcIlxcXCJcIik7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhUZXJtaW5hbFN5bWJvbE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbE5vZGUgZnJvbSBcIi4uL25vZGUvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgVGVybWluYWxTeW1ib2xSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzdHJpbmdMaXRlcmFsVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZSwgIC8vL1xuICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IFJ1bGVOYW1lUnVsZU5hbWUsIExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnROb2RlIGZyb20gXCIuLi9ub2RlL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsIFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbFBhcnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFNlcXVlbmNlT2ZQYXJ0c05vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c05vZGUgZnJvbSBcIi4uL25vZGUvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNlcXVlbmNlT2ZQYXJ0c05vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGwsXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihOb1doaXRlc3BhY2VOb2RlLCBzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgbm9XaGl0ZXNwYWNlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gY29udGV4dC5pc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpO1xuXG4gICAgaWYgKCFuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4pIHtcbiAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBOb1doaXRlc3BhY2VOb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKG5vV2hpdGVzcGFjZU5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vV2hpdGVzcGFjZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE5vV2hpdGVzcGFjZVBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb1doaXRlc3BhY2VQYXJ0Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gTk9fV0hJVEVTUEFDRSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydE5vZGUgZnJvbSBcIi4uL25vZGUvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnRcIjtcblxuaW1wb3J0IHsgTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5vV2hpdGVzcGFjZVBhcnROb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvdGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBjb250ZXh0LmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nID0gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbi50b1N0cmluZygpLFxuXHRcdCAgICAgIHN0cmluZyA9IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLygoPzpcXFxcLnxbXlxcL10pKilcXC8kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUGFydChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG5cbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgIC8vL1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlZ3VsYXJFeHByZXNzaW9uTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ob2RlIGZyb20gXCIuLi9ub2RlL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25SdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGUsICAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24ocmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJlZ3VsYXJFeHByZXNzaW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodGVybWluYWxTeW1ib2xDb250ZW50KSB7XG4gICAgY29uc3QgY29udGVudCA9IHRlcm1pbmFsU3ltYm9sQ29udGVudCwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbk5vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGFzdGVyaXNrLCAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcWyhbXlxcXV0rKV0kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTaWduaWZpY2FudFRva2VuVHlwZU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlTm9kZTtcblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlTm9kZSBmcm9tIFwiLi4vbm9kZS9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHR5cGVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSA9IHR5cGVUeXBlLCAgLy8vXG4gICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24odHlwZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTaWduaWZpY2FudFRva2VuVHlwZU5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSB7fTtcblxuICBydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIHJ1bGVNYXBbcnVsZU5hbWVdID0gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVNYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgZmlyc3RSdWxlID0gZmlyc3QocnVsZXMpLFxuICAgICAgc3RhcnRSdWxlID0gZmlyc3RSdWxlOyAgLy8vXG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBSdWxlIGZyb20gXCIuL3J1bGVcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgTmFtZVJ1bGUgZnJvbSBcIi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4vcnVsZS9ydWxlXCI7XG5pbXBvcnQgRXJyb3JSdWxlIGZyb20gXCIuL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBFcHNpbG9uUnVsZSBmcm9tIFwiLi9ydWxlL2Vwc2lsb25cIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi9ydWxlL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRSdWxlIGZyb20gXCIuL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9xdWFudGlmaWVyXCI7XG5pbXBvcnQgRGVmaW5pdGlvblJ1bGUgZnJvbSBcIi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuL3J1bGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuL3J1bGUvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuL3J1bGUvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZSBmcm9tIFwiLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyXCI7XG5pbXBvcnQgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4vcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVNYXBGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJORlBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgcGFyc2UodG9rZW5zLCBydWxlID0gdGhpcy5zdGFydFJ1bGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gQ29udGV4dC5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBydWxlLnBhcnNlKGNvbnRleHQpLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lUnVsZSA9IG5ldyBOYW1lUnVsZSgpLFxuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRSdWxlKCksXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZVJ1bGUoKSxcbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JSdWxlKCksXG4gICAgICAgICAgZXBzaWxvblJ1bGUgPSBuZXcgRXBzaWxvblJ1bGUoKSxcbiAgICAgICAgICBkb2N1bWVudFJ1bGUgPSBuZXcgRG9jdW1lbnRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWVSdWxlID0gbmV3IFJ1bGVOYW1lUnVsZSgpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IG5ldyBXaWxkY2FyZFJ1bGUoKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUoKSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZSA9IG5ldyBRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlID0gbmV3IENob2ljZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZSgpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSgpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUoKSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlID0gbmV3IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlKCk7XG5cbiAgICBsZXQgcnVsZXMgPSBbXG4gICAgICBkb2N1bWVudFJ1bGUsXG4gICAgICBydWxlUnVsZSxcbiAgICAgIG5hbWVSdWxlLFxuICAgICAgZGVmaW5pdGlvbnNSdWxlLFxuICAgICAgZGVmaW5pdGlvblJ1bGUsXG4gICAgICBwYXJ0UnVsZSxcbiAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICB0ZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUsXG4gICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlLFxuICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUsXG4gICAgICBydWxlTmFtZVJ1bGUsXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUsXG4gICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUsXG4gICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUsXG4gICAgICBlbmRPZkxpbmVSdWxlLFxuICAgICAgZXBzaWxvblJ1bGUsXG4gICAgICB3aWxkY2FyZFJ1bGUsXG4gICAgICBxdWFudGlmaWVyUnVsZSxcbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSxcbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUsXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSxcbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSxcbiAgICAgIGVycm9yUnVsZVxuICAgIF07XG5cbiAgICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBibmZQYXJzZXIgPSBuZXcgQk5GUGFyc2VyKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGJuZlBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgZXhwcmVzc2lvbiAgOjo9IGV4cHJlc3Npb25fIG9wZXJhdG9yIGV4cHJlc3Npb24gZXhwcmVzc2lvbn4qXG5cbiAgICAgICAgICAgICAgICB8IGV4cHJlc3Npb25fXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgb3BlcmF0b3IgICAgOjo9IFwiK1wiXG5cbiAgICAgICAgICAgICAgICB8IFwiLVwiXG5cbiAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICB8IFwiKlwiXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgdGVybSAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICBleHByZXNzaW9uXyA6Oj0gXCIoXCIgZXhwcmVzc2lvbiBcIilcIlxuXG4gICAgICAgICAgICAgICAgfCB0ZXJtXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgZXhwcmVzc2lvbn4gOjo9IG9wZXJhdG9yIGV4cHJlc3Npb24gO1xuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQk5GUGFyc2VyIGZyb20gXCIuLi9ibmYvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHN0YXJ0UnVsZUZyb21SdWxlcywgcnVsZU1hcEZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21CTkYoYm5mKSB7XG4gIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2Vucyk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IHJ1bGVzRnJvbUJORiwgcGFyc2VyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBDb250ZXh0LmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2UoY29udGV4dCksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBibmYgfSA9IENsYXNzLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21CTkYoQ2xhc3MsIGJuZikge1xuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhCYXNpY1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEJhc2ljUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhCYXNpY1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRXBzaWxvblBhcnQsXG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vYm5mL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydHMgfSBmcm9tIFwiLi9ibmYvcGFydHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydFR5cGVzIH0gZnJvbSBcIi4vYm5mL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vYm5mL2RlZmluaXRpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vY29tbW9uL25vZGUvdGVybWluYWxcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IEVYQ0xBTUFUSU9OX01BUksgPSBcIiFcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGxldCBzdGFydCxcbiAgICAgIGRlbGV0ZUNvdW50O1xuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBzdGFydCA9IDA7XG4gIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDtcblxuICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCAuLi5lbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gYXJyYXkuaW5jbHVkZXMoZWxlbWVudCkpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFWENMQU1BVElPTl9NQVJLIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjbGVhciwgdHJpbSwgc2Vjb25kLCB0aGlyZCwgZm91cnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pIHtcbiAgICBsZXQgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGlmIChzcHJlYWRFeHByZXNzaW9uID09PSBFWENMQU1BVElPTl9NQVJLKSB7XG4gICAgICAgIHVuaXF1ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdFeHAgPSAvXFxbKFxcZCspPyhcXC5cXC5cXC4pPyhcXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGFydEluZGV4ID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW5kSW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VydGhNYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kSW5kZXggPSBwYXJzZUludChmb3VydGhNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ByZWFkID0gbmV3IFNwcmVhZChzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKTtcblxuICAgIHJldHVybiBzcHJlYWQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGluY2x1ZGVzLCBwdXNoLCBjbGVhciwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkQpO1xuICAgIH1cblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy5ydWxlTmFtZXMsIHJ1bGVOYW1lLCBXSUxEQ0FSRCk7XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBjb25zdCBpbnRlcm1lZGlhdGVOb2RlID0gbm9kZTsgLy8vXG5cbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMucHVzaChpbnRlcm1lZGlhdGVOb2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmZpbml0ZURlc2NlbnQpIHtcbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnNwcmVhZC5hZGp1c3ROb2Rlcyh0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcblxuICAgIGlmICh0aGlzLnN1YlF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICBwdXNoKG5vZGVzLCB0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5mb3JFYWNoKChpbnRlcm1lZGlhdGVOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgaWYgKGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmNsZWFyKCk7XG5cbiAgICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gdGhpcy5zdWJRdWVyeS5maW5kKGNoaWxkTm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCkpO1xuXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeS5hcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc2lvbiwgdHlwZXMpIHtcbiAgICBsZXQgcXVlcnkgPSBudWxsO1xuXG4gICAgaWYgKHN1YkV4cHJlc2lvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZXNMZW5ndGggPSB0eXBlcy5sZW5ndGg7XG5cbiAgICAgIGlmICh0eXBlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gc3ViRXhwcmVzaW9uOyAgLy8vXG5cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgICBjb25zdCByZWdFeHAgPSAvXlxcLyhcXC8pPyhbXi9cXFshXSspKFxcW1teXFxdXStdfCEpPyhcXC8uKik/JC8sXG4gICAgICAgICAgbWF0Y2hlcyA9IGV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcyksXG4gICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyksXG4gICAgICAgICAgZmlmdGhNYXRjaCA9IGZpZnRoKG1hdGNoZXMpLFxuICAgICAgICAgIHNlbGVjdG9ycyA9IHRoaXJkTWF0Y2guc3BsaXQoXCJ8XCIpLFxuICAgICAgICAgIHN1YkV4cHJlc3Npb24gPSBmaWZ0aE1hdGNoIHx8IG51bGwsXG4gICAgICAgICAgc3ByZWFkRXhwcmVzc2lvbiA9IGZvdXJ0aE1hdGNoIHx8IG51bGwsXG4gICAgICAgICAgdHlwZXMgPSB0eXBlc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSxcbiAgICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzQW5kVHlwZXMoc2VsZWN0b3JzLCB0eXBlcyksXG4gICAgICAgICAgc3ByZWFkID0gU3ByZWFkLmZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pLFxuICAgICAgICAgIHN1YlF1ZXJ5ID0gUXVlcnkuZnJvbVN1YkV4cHJlc3Npb25BbmRUeXBlcyhzdWJFeHByZXNzaW9uLCB0eXBlcyksXG4gICAgICAgICAgaW5maW5pdGVEZXNjZW50ID0gKHNlY29uZE1hdGNoID09PSBcIi9cIiksICAvLy9cbiAgICAgICAgICBpbnRlcm1lZGlhdGVOb2RlcyA9IFtdLFxuICAgICAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcyk7XG4gICAgXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG5cbmZ1bmN0aW9uIHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHtcbiAgY29uc3QgdHlwZXMgPSBbXTtcblxuICBzZWxlY3RvcnMuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvclR5cGVTZWxlY3RvciA9IGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKHNlbGVjdG9yVHlwZVNlbGVjdG9yKSB7XG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0b3Iuc3Vic3RyaW5nKDEpO1xuXG4gICAgICB0eXBlcy5wdXNoKHR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5mdW5jdGlvbiBpc1NlbGVjdG9yVHlwZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXkAvLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSB7IHJldHVybiBzZWxlY3RvcnMuZmlsdGVyKGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKTsgfVxuXG5mdW5jdGlvbiBpc1NlbGVjdG9yUnVsZU5hbWVTZWxlY3RvcihzZWxlY3RvcikgeyByZXR1cm4gL15bXkBdLy50ZXN0KHNlbGVjdG9yKTsgfVxuXG5mdW5jdGlvbiBydWxlTmFtZXNGcm9tU2VsZWN0b3JzQW5kVHlwZXMoc2VsZWN0b3JzLCB0eXBlcykge1xuICBsZXQgcnVsZU5hbWVzID0gW107XG5cbiAgY29uc3QgdHlwZXNMZW5ndGggPSB0eXBlcy5sZW5ndGg7XG5cbiAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgcnVsZU5hbWVzID0gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpO1xuICB9XG5cbiAgcmV0dXJuIHJ1bGVOYW1lcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFF1ZXJ5IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzKG5vZGUsIENsYXNzLCBub2RlcyA9IFtdKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2xhc3MpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG5cbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiBxdWVyeUJ5Q2xhc3MoY2hpbGROb2RlLCBDbGFzcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlDbGFzc2VzKG5vZGUsIENsYXNzZXMsIG5vZGVzID0gW10pIHtcbiAgQ2xhc3Nlcy5zb21lKChDbGFzcykgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2xhc3MpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiBxdWVyeUJ5Q2xhc3NlcyhjaGlsZE5vZGUsIENsYXNzZXMsIG5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5RXhwcmVzc2lvbihub2RlLCBleHByZXNzaW9uLCBtYXhpbXVtRGVwdGgpIHtcbiAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGgpLFxuICAgICAgICBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHF1ZXJ5QnlDbGFzcyxcbiAgcXVlcnlCeUNsYXNzZXMsXG4gIHF1ZXJ5QnlFeHByZXNzaW9uXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEhFQUQgPSBcImhlYWRcIjtcbmV4cG9ydCBjb25zdCBTVFlMRSA9IFwic3R5bGVcIjtcbmV4cG9ydCBjb25zdCBDSEFSQUNURVJTID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCI7XG5leHBvcnQgY29uc3QgVFdPX1NQQUNFUyA9IFwiICBcIjtcbmV4cG9ydCBjb25zdCBGT1VSX1NQQUNFUyA9IFwiICAgIFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRV9MRU5HVEggPSA2O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHF1ZXJ5LCBub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgbm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICBmaXJzdE5vZGUgPSBmaXJzdChub2Rlcyk7XG5cbiAgbm9kZSA9IGZpcnN0Tm9kZTsgLy8vXG5cbiAgY29uc3QgY29udGVudCA9IGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5mdW5jdGlvbiBjb250ZW50RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBmaXJzdFRva2VuID0gZmlyc3RTaWduaWZpY2FudFRva2VuLCAvLy9cbiAgICAgICAgbGFzdFRva2VuID0gbGFzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBmaXJzdFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFRva2VuKSxcbiAgICAgICAgbGFzdFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihsYXN0VG9rZW4pO1xuXG4gIGxldCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gZmlyc3RUb2tlbkluZGV4OyBpbmRleCA8PSBsYXN0VG9rZW5JbmRleDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XSxcbiAgICAgICAgICB0b2tlbkNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCk7XG5cbiAgICBjb250ZW50ICs9IHRva2VuQ29udGVudDtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgcHJvcGVydHlRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcHJvcGVydHlcIiksXG4gICAgICBleHByZXNzaW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2V4cHJlc3Npb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHksIGV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldFByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5O1xuICB9XG5cbiAgZ2V0RXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uO1xuICB9XG5cbiAgY2hlY2tNYXRjaGVzKGRlY2xhcmF0aW9ucykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHkoKSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNNYXRjaCA9IChwcm9wZXJ0eSA9PT0gdGhpcy5wcm9wZXJ0eSk7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCwgbGFzdCkge1xuICAgIGNvbnN0IGNzcyA9IGxhc3QgP1xuICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07YCA6XG4gICAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5fTogJHt0aGlzLmV4cHJlc3Npb259O1xcbmA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHByb3BlcnR5Q29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHByb3BlcnR5UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZXhwcmVzc2lvbkNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhleHByZXNzaW9uUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUNvbnRlbnQsIC8vL1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uQ29udGVudCwgLy8vXG4gICAgICAgICAgZGVjbGFyYXRpb24gPSBuZXcgRGVjbGFyYXRpb24ocHJvcGVydHksIGV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb24gZnJvbSBcIi4vZGVjbGFyYXRpb25cIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBkZWNsYXJhdGlvblF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9kZWNsYXJhdGlvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb25zIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICBmb3J3YXJkc0ZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBmaXJzdEluZGV4ID0gMCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSBmaXJzdEluZGV4OyBpbmRleCA8PSBsYXN0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5hcnJheVtpbmRleF07XG5cbiAgICAgIGNhbGxiYWNrKGRlY2xhcmF0aW9uLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgYmFja3dhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGxhc3RJbmRleDsgaW5kZXggPj0gZmlyc3RJbmRleDsgaW5kZXgtLSkge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICB1bnNoaWZ0KGRlY2xhcmF0aW9ucykge1xuICAgIGRlY2xhcmF0aW9ucy5iYWNrd2FyZHNGb3JFYWNoKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9uLmNoZWNrTWF0Y2hlcyh0aGlzLmFycmF5KTsgLy8vXG5cbiAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQoZGVjbGFyYXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBpZiAoaW5kZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluZGVudCA9IGNsYXNzTmFtZTsgLy8vXG5cbiAgICAgIGNsYXNzTmFtZSA9IG51bGw7IC8vL1xuICAgIH1cblxuICAgIGxldCBjc3MgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5hcnJheS5yZWR1Y2UoKGRlY2xhcmF0aW9uc0NTUywgZGVjbGFyYXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSAoaW5kZXggPT09IGxhc3RJbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uQ1NTID0gZGVjbGFyYXRpb24uYXNDU1MoaW5kZW50LCBsYXN0KTtcblxuICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgKz0gZGVjbGFyYXRpb25DU1M7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uc0NTUztcbiAgICAgICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICAgIGlmIChjbGFzc05hbWUgPT09IG51bGwpIHtcbiAgICAgICAgY3NzID0gZGVjbGFyYXRpb25zQ1NTOyAgLy8vXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjc3MgPSBgLiR7Y2xhc3NOYW1lfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbn1cblxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uTm9kZXMgPSBkZWNsYXJhdGlvblF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBkZWNsYXJhdGlvbk5vZGVzLm1hcCgoZGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gZGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gRGVjbGFyYXRpb24uZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IG5ldyBEZWNsYXJhdGlvbnMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9ucztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3Qgc2VsZWN0b3JzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vc2VsZWN0b3JzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlU2V0IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3JzLCBkZWNsYXJhdGlvbnMpIHtcbiAgICB0aGlzLnNlbGVjdG9ycyA9IHNlbGVjdG9ycztcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFNlbGVjdG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RvcnM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgdW5zaGlmdChydWxlU2V0KSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gcnVsZVNldC5nZXREZWNsYXJhdGlvbnMoKTtcblxuICAgIHRoaXMuZGVjbGFyYXRpb25zLnVuc2hpZnQoZGVjbGFyYXRpb25zKTtcbiAgfVxuXG4gIGZpbmRNYXRjaGluZ1J1bGVTZXQocnVsZVNldHMpIHtcbiAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0cy5maW5kKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBydWxlU2V0LmdldFNlbGVjdG9ycygpLFxuICAgICAgICAgICAgc2VsZWN0b3JzTWF0Y2ggPSAoc2VsZWN0b3JzID09PSB0aGlzLnNlbGVjdG9ycyksXG4gICAgICAgICAgICBydWxlU2V0c01hdGNoID0gc2VsZWN0b3JzTWF0Y2g7IC8vL1xuXG4gICAgICBpZiAocnVsZVNldHNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsOyAvLy9cblxuICAgIHJldHVybiBtYXRjaGluZ1J1bGVTZXQ7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGxldCBjc3MgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhgICAke2luZGVudH1gKTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnNDU1MgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgIGNzcyA9IGAke2luZGVudH0uJHtjbGFzc05hbWV9JHt0aGlzLnNlbGVjdG9yc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9XG4ke2luZGVudH19XG5cbmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IFJ1bGVTZXQoc2VsZWN0b3JzLCBkZWNsYXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIG1lZGlhO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBzZWxlY3RvcnNOb2RlQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHNlbGVjdG9yc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICBzZWxlY3RvcnMgPSBgJHtzZWxlY3RvcnNOb2RlQ29udGVudH1gO1xuXG4gIHJldHVybiBzZWxlY3RvcnM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgUnVsZVNldCBmcm9tIFwiLi9ydWxlU2V0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgcnVsZVNldFF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9ydWxlU2V0XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlU2V0cyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgdW5zaGlmdChydWxlU2V0cykge1xuICAgIHJ1bGVTZXRzLmZvckVhY2goKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXQuZmluZE1hdGNoaW5nUnVsZVNldCh0aGlzLmFycmF5KTsgLy8vXG5cbiAgICAgIChtYXRjaGluZ1J1bGVTZXQgPT09IG51bGwpID9cbiAgICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KHJ1bGVTZXQpIDpcbiAgICAgICAgICBtYXRjaGluZ1J1bGVTZXQudW5zaGlmdChydWxlU2V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICB0aGlzLmFycmF5LmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBydWxlU2V0Q1NTID0gcnVsZVNldC5hc0NTUyhjbGFzc05hbWUsIGluZGVudCk7XG5cbiAgICAgIGNzcyArPSBydWxlU2V0Q1NTO1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVTZXROb2RlcyA9IHJ1bGVTZXRRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gcnVsZVNldE5vZGVzLm1hcCgocnVsZVNldE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBydWxlU2V0Tm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBydWxlU2V0ID0gUnVsZVNldC5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gcnVsZVNldDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBydWxlU2V0cyA9IG5ldyBSdWxlU2V0cyhhcnJheSk7XG5cbiAgICByZXR1cm4gcnVsZVNldHM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgVFdPX1NQQUNFUywgRk9VUl9TUEFDRVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBtZWRpYVF1ZXJpZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiL21lZGlhL21lZGlhUXVlcmllc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWEge1xuICBjb25zdHJ1Y3RvcihtZWRpYVF1ZXJpZXMsIGRlY2xhcmF0aW9ucywgcnVsZVNldHMpIHtcbiAgICB0aGlzLm1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllcztcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYVF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFRdWVyaWVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgbGV0IGNzcyA9IFwiXCI7XG5cbiAgICBjb25zdCBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBUV09fU1BBQ0VTKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIEZPVVJfU1BBQ0VTKTtcblxuICAgIGlmICgocnVsZVNldHNDU1MgIT09IG51bGwpIHx8IChkZWNsYXJhdGlvbnNDU1MgIT09IG51bGwpKSB7XG4gICAgICBjc3MgPSBgQG1lZGlhICR7dGhpcy5tZWRpYVF1ZXJpZXN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfSR7cnVsZVNldHNDU1N9XG59XG5cbmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBtZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBNZWRpYShtZWRpYVF1ZXJpZXMsIGRlY2xhcmF0aW9ucywgcnVsZVNldHMpO1xuXG4gICAgcmV0dXJuIG1lZGlhO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBtZWRpYVF1ZXJpZXNOb2RlQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKG1lZGlhUXVlcmllc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICBtZWRpYVF1ZXJpZXMgPSBgJHttZWRpYVF1ZXJpZXNOb2RlQ29udGVudH1gO1xuXG4gIHJldHVybiBtZWRpYVF1ZXJpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgTWVkaWEgZnJvbSBcIi4vbWVkaWFcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBtZWRpYVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvc3R5bGVzaGVldC9tZWRpYVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWFzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KG1lZGlhcykge1xuICAgIG1lZGlhcy5mb3JFYWNoKChtZWRpYSkgPT4ge1xuICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KG1lZGlhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICB0aGlzLmFycmF5LmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgbWVkaWEpID0+IHtcbiAgICAgIGNvbnN0IG1lZGlhQ1NTID0gbWVkaWEuYXNDU1MoY2xhc3NOYW1lKTtcblxuICAgICAgY3NzICs9IG1lZGlhQ1NTO1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhTm9kZXMgPSBtZWRpYVF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBtZWRpYU5vZGVzLm1hcCgobWVkaWFOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbWVkaWFOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1lZGlhID0gTWVkaWEuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1lZGlhcyA9IG5ldyBNZWRpYXMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIG1lZGlhcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWVkaWFzIGZyb20gXCIuL3N0eWxlL21lZGlhc1wiO1xuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3N0eWxlL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL3N0eWxlL2RlY2xhcmF0aW9uc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHlsZSB7XG4gIGNvbnN0cnVjdG9yKGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcykge1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgICB0aGlzLm1lZGlhcyA9IG1lZGlhcztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRSdWxlU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYXM7XG4gIH1cblxuICBleHRlbmRzKHN1cGVyU3R5bGUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBzdXBlclN0eWxlLmdldERlY2xhcmF0aW9ucygpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gc3VwZXJTdHlsZS5nZXRSdWxlU2V0cygpLFxuICAgICAgICAgIG1lZGlhcyA9IHN1cGVyU3R5bGUuZ2V0TWVkaWFzKCk7XG5cbiAgICB0aGlzLnVuc2hpZnQoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICAgIHRoaXMucnVsZVNldHMudW5zaGlmdChydWxlU2V0cyk7XG4gICAgdGhpcy5tZWRpYXMudW5zaGlmdChtZWRpYXMpO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoY2xhc3NOYW1lLCBcIiAgXCIpLFxuICAgICAgICAgIHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFwiXCIpLFxuICAgICAgICAgIG1lZGlhc0NTUyA9IHRoaXMubWVkaWFzLmFzQ1NTKGNsYXNzTmFtZSksXG4gICAgICAgICAgY3NzID0gYCR7ZGVjbGFyYXRpb25zQ1NTfSR7cnVsZVNldHNDU1N9JHttZWRpYXNDU1N9YDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhcyA9IE1lZGlhcy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHN0eWxlID0gbmV3IFN0eWxlKGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcyk7XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0eWxlIGZyb20gXCIuLi9zdHlsZVwiO1xuaW1wb3J0IENTU0xleGVyIGZyb20gXCIuLi9jc3MvbGV4ZXJcIjtcbmltcG9ydCBDU1NQYXJzZXIgZnJvbSBcIi4uL2Nzcy9wYXJzZXJcIjtcblxuaW1wb3J0IHsgSEVBRCwgU1RZTEUsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgY3NzTGV4ZXIgPSBDU1NMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgY3NzUGFyc2VyID0gQ1NTUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmlmICghZ2xvYmFsVGhpcy5zdHlsZU1hcCkge1xuICBnbG9iYWxUaGlzLnN0eWxlTWFwID0ge307XG59XG5cbmNvbnN0IHsgc3R5bGVNYXAgfSA9IGdsb2JhbFRoaXM7XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWxlKHN0eWxlKSB7XG4gIGNvbnN0IGhlYWRET01FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihIRUFEKSxcbiAgICAgICAgc3R5bGVET01FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChTVFlMRSksXG4gICAgICAgIGlubmVySFRNTCA9IGBcbiAgICAgICAgXG4ke3N0eWxlfWA7XG5cbiAgT2JqZWN0LmFzc2lnbihzdHlsZURPTUVsZW1lbnQsIHtcbiAgICBpbm5lckhUTUxcbiAgfSk7XG5cbiAgaGVhZERPTUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGVET01FbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3R5bGVzKCkge1xuICBjb25zdCBzdHlsZXNDU1MgPSByZXRyaWV2ZVN0eWxlc0NTUygpLFxuICAgICAgICBzdHlsZSA9IHN0eWxlc0NTUzsgIC8vL1xuXG4gIHJlbmRlclN0eWxlKHN0eWxlKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUsIHN1cGVyU3R5bGUgPSBudWxsKSB7XG4gIGNvbnN0IHN0cmluZ3MgPSBhcmdzLnNoaWZ0KCksXHQvLy9cbiAgICAgICAgY29udGVudCA9IHN0cmluZ3MucmVkdWNlKChjb250ZW50LCBzdHJpbmcsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpbmRleF07XG5cbiAgICAgICAgICBjb250ZW50ID0gKGFyZyAhPT0gdW5kZWZpbmVkKSA/XG4gICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ30ke2FyZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9YDtcblxuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICB0b2tlbnMgPSBjc3NMZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgbm9kZSA9IGNzc1BhcnNlci5wYXJzZSh0b2tlbnMpLFxuICAgICAgICBzdHlsZSA9IFN0eWxlLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgaWYgKHN1cGVyU3R5bGUgIT09IG51bGwpIHtcbiAgICAgICAgICBzdHlsZS5leHRlbmRzKHN1cGVyU3R5bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVNYXBbY2xhc3NOYW1lXSA9IHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSkge1xuICBjb25zdCBzdHlsZSA9IHN0eWxlTWFwW2NsYXNzTmFtZV0gfHwgbnVsbDtcblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVuZGVyU3R5bGUsXG4gIHJlbmRlclN0eWxlcyxcbiAgZ2VuZXJhdGVTdHlsZSxcbiAgcmV0cmlldmVTdHlsZVxufTtcblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZXNDU1MoKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZU1hcCksXG4gICAgICAgIHN0eWxlc0NTUyA9IGNsYXNzTmFtZXMucmVkdWNlKChzdHlsZXNDU1MsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpLFxuICAgICAgICAgICAgICAgIHN0eWxlQ1NTID0gc3R5bGUuYXNDU1MoY2xhc3NOYW1lKTtcblxuICAgICAgICAgIHN0eWxlc0NTUyArPSBzdHlsZUNTUztcblxuICAgICAgICAgIHJldHVybiBzdHlsZXNDU1M7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHN0eWxlc0NTUztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0hBUkFDVEVSUywgRU1QVFlfU1RSSU5HLCBDTEFTU19OQU1FX0xFTkdUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgbGVuZ3RoID0gQ0xBU1NfTkFNRV9MRU5HVEgsXG4gICAgICBjaGFyYWN0ZXJzID0gQ0hBUkFDVEVSUyxcbiAgICAgIGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcblxuY29uc3QgY2xhc3NOYW1lcyA9IFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDbGFzc05hbWUoKSB7XG4gIGxldCBjbGFzc05hbWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGxlbmd0aDsgY291bnQrKykge1xuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCksXG4gICAgICAgICAgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpbmRleF07XG5cbiAgICBjbGFzc05hbWUgKz0gY2hhcmFjdGVyO1xuICB9XG5cbiAgY29uc3QgY2xhc3NOYW1lc0luY2x1ZGVzQ2xhc3NOYW1lID0gY2xhc3NOYW1lcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xuXG4gIGlmICghY2xhc3NOYW1lc0luY2x1ZGVzQ2xhc3NOYW1lKSB7XG4gICAgY2xhc3NOYW1lcy5wdXNoKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZUNsYXNzTmFtZShlbGVtZW50KSB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBlbGVtZW50LnJlYWN0RnVuY3Rpb24gfHwgZWxlbWVudC5yZWFjdENvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdlbmVyYXRlQ2xhc3NOYW1lLFxuICByZXRyaWV2ZUNsYXNzTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWdOYW1lcyB9IGZyb20gXCIuL3RhZ05hbWVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTU0xleGVyIH0gZnJvbSBcIi4vY3NzL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTU1BhcnNlciB9IGZyb20gXCIuL2Nzcy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0eWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NOYW1lXCI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3MoYXJndW1lbnQpIHsgcmV0dXJuIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgRWxlbWVudCk7IH0gIC8vL1xuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGxldCBzdWJjbGFzcyA9IGZhbHNlO1xuXG4gIGlmIChhcmd1bWVudC5uYW1lID09PSBDbGFzcy5uYW1lKSB7ICAgLy8vXG4gICAgc3ViY2xhc3MgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGFyZ3VtZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFyZ3VtZW50KTsgLy8vXG5cbiAgICBpZiAoYXJndW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHN1YmNsYXNzID0gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YmNsYXNzO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyB0YWdOYW1lcywgc3R5bGVzVXRpbGl0aWVzLCBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwid2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyBDTEFTU19OQU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZ2VuZXJhdGVDbGFzc05hbWUgfSA9IGNsYXNzTmFtZVV0aWxpdGllcyxcbiAgICAgIHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcywgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB3aXRoU3R5bGUoQ2xhc3NPckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c107ICAvLy9cblxuICAgIGxldCB7IGNsYXNzTmFtZSA9IG51bGwgfSA9IENsYXNzT3JGdW5jdGlvbjtcblxuICAgIGNvbnN0IHN1cGVyU3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSk7XG5cbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUsIHN1cGVyU3R5bGUpO1xuXG4gICAgY29uc3QgQ2xhc3NPckZ1bmN0aW9uQ2xhc3MgPSBpc0NsYXNzKENsYXNzT3JGdW5jdGlvbik7XG5cbiAgICBpZiAoQ2xhc3NPckZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gQ2xhc3NPckZ1bmN0aW9uOyAgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IGNsYXNzIGV4dGVuZHMgQ2xhc3Mge1xuICAgICAgICBzdGF0aWMgZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgICAgcmV0dXJuIENsYXNzLmZyb21DbGFzcyhfQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRnVuY3Rpb24gPSBDbGFzc09yRnVuY3Rpb247IC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKHByb3BlcnRpZXMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKENsYXNzT3JGdW5jdGlvbiwge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ2xhc3NPckZ1bmN0aW9uO1xuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKHdpdGhTdHlsZSwge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlO1xuXG50YWdOYW1lcy5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXRoU3R5bGUsIHRhZ05hbWUsIHtcbiAgICBnZXQ6ICgpID0+IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdLCAgLy8vXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSk7XG5cbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gKHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRhZ05hbWUsIHByb3BlcnRpZXMpO1xuICAgICAgfTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihGdW5jdGlvbiwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gRnVuY3Rpb247XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKSB7XG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KENMQVNTX05BTUUpID8gcHJvcGVydGllcyA6IHsgLi4ucHJvcGVydGllcywgY2xhc3NOYW1lIH07IC8vL1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuL3dpdGhTdHlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzpcXFxcJFxcXFwkfFxcXFwkfFxcXFxcXFxcXFxcXCh8XFxcXFxcXFxcXFxcKXxcXFxcXFxcXFxcXFxbfFxcXFxcXFxcXFxcXF0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl4oPzouKz8oPz1cXFxcJFxcXFwkfFxcXFwkfFxcXFxcXFxcXFxcXCh8XFxcXFxcXFxcXFxcKXxcXFxcXFxcXFxcXFxbfFxcXFxcXFxcXFxcXF0pfC4rKVwiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuXHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVYTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFRlWExleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoVGVYTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoVGVYTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBkZWxpbWl0ZWRUZVggfCBldmVyeXRoaW5nRWxzZSApKyA7XG4gICAgXG4gICAgXG4gICAgXG4gICAgZGVsaW1pdGVkVGVYICAgICAgICAgICAgICAgICAgICA6Oj0gICBkb2xsYXJEZWxpbWl0ZXIgaW5saW5lVGVYIGRvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRvdWJsZURvbGxhckRlbGltaXRlciBkaXNwbGF5VGVYIGRvdWJsZURvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdCcmFja2V0RGVsaW1pdGVyIGlubGluZVRlWCBjbG9zaW5nQnJhY2tldERlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdTcXVhcmVCcmFja2V0RGVsaW1pdGVyIGRpc3BsYXlUZVggY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgXG5cbiAgICBcbiAgICBpbmxpbmVUZVggICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt1bmFzc2lnbmVkXSogO1xuXG4gICAgZGlzcGxheVRlWCAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbdW5hc3NpZ25lZF0qIDtcblxuXG5cbiAgICBkb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgICAgICAgIDo6PSAgIFwiJFwiIDtcbiBcbiAgICBkb3VibGVEb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgIDo6PSAgIFwiJCRcIiA7XG4gICAgXG5cbiAgICBcbiAgICBvcGVuaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXChcIiA7XG5cbiAgICBjbG9zaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXClcIiA7XG5cbiAgICBvcGVuaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciAgIDo6PSAgIFwiXFxcXFtcIiA7XG4gICAgXG4gICAgY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgICA6Oj0gICBcIlxcXFxdXCIgO1xuICAgIFxuICAgIFxuICAgIFxuICAgIGV2ZXJ5dGhpbmdFbHNlICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhUZVhQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihUZVhQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFRlWFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5MZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoUGxhaW5MZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFBsYWluTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoUGxhaW5MZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG4gICAgZG9jdW1lbnQgICAgICAgOjo9ICAoIGxpbmUgfCB2ZXJ0aWNhbFNwYWNlICkrIDtcblxuXG4gICAgbGluZSAgICAgICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpblBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFBsYWluUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoUGxhaW5QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFBsYWluUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoUmVhZG1lTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhSZWFkbWVMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhSZWFkbWVMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG4gICAgZG9jdW1lbnQgICAgICAgOjo9ICAoIGxpbmUgfCB2ZXJ0aWNhbFNwYWNlICkrIDtcblxuXG4gICAgbGluZSAgICAgICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhSZWFkbWVQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihSZWFkbWVQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFJlYWRtZVBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfDp8XFxcXFt8XFxcXF18XFxcXHt8XFxcXH0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05MZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhNZXRhSlNPTkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoTWV0YUpTT05MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhNZXRhSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICAgICA6Oj0gICggbWV0YUpTT04gZXJyb3IqICkgfCBlcnJvcisgO1xuXG5cbiAgICBtZXRhSlNPTiAgICAgICAgICA6Oj0gIFwie1wiICggKCByZXBvc2l0b3J5UGFpciAoIFwiLFwiIGRlcGVuZGVuY2llc1BhaXIgKT8gKSB8ICggZGVwZW5kZW5jaWVzUGFpciBcIixcIiByZXBvc2l0b3J5UGFpciApICkgXCJ9XCIgO1xuXG5cbiAgICBkZXBlbmRlbmNpZXNQYWlyICA6Oj0gIFwiXFxcXFwiZGVwZW5kZW5jaWVzXFxcXFwiXCIgXCI6XCIgZGVwZW5kZW5jaWVzIDtcbiAgICBcbiAgICBcbiAgICByZXBvc2l0b3J5UGFpciAgICA6Oj0gIFwiXFxcXFwicmVwb3NpdG9yeVxcXFxcIlwiIFwiOlwiIHJlcG9zaXRvcnkgO1xuXG5cbiAgICBkZXBlbmRlbmNpZXMgICAgICA6Oj0gIFwiW1wiIChkZXBlbmRlbmN5ICggXCIsXCIgZGVwZW5kZW5jeSApKik/IFwiXVwiIDtcbiAgXG5cbiAgICBkZXBlbmRlbmN5ICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG5cbiAgICByZXBvc2l0b3J5ICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG5cbiAgICBlcnJvciAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFKU09OUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoTWV0YUpTT05QYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihNZXRhSlNPTlBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoTWV0YUpTT05QYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86LHw9fDo6fDp8XFxcXHwtfFxcXFwofFxcXFwpKXxcXFxcW3xcXFxcXXxcXFxcLlxcXFwuXFxcXC5cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJrZXl3b3JkXCI6IFwiXig/OlJ1bGV8QXhpb218VGhlb3JlbXxMZW1tYXxDb25qZWN0dXJlfE1ldGFsZW1tYXxNZXRhdGhlb3JlbXxQcmVtaXNlc3xQcmVtaXNlfENvbmNsdXNpb258UHJvb2Z8VGhlcmVmb3JlfFN1cHBvc2V8VGhlbnxIZW5jZXxUeXBlc3xUeXBlfE9wZXJhdG9yc3xPcGVyYXRvcnxWYXJpYWJsZXN8VmFyaWFibGV8Q29uc3RydWN0b3JzfENvbnN0cnVjdG9yfERlcGVuZGVudFR5cGVzfERlcGVuZGVudFR5cGV8RGlzam9pbnRUeXBlc3xEaXNqb2ludFR5cGV8TWV0YXZhcmlhYmxlc3xNZXRhdmFyaWFibGV8QWJicmV2aWF0aW9uc3xBYmJyZXZpYXRpb258TGV0fGZvcnxmcm9tfGJ5KVxcXFxiXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwicmVzZXJ2ZWRcIjogXCJeKD86dW5kZWZpbmVkfGZyZWV8bm90fGlufGlzKVxcXFxiXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bQS1aYS16XHUwMzkxLVx1MDNBOVx1MDNCMS1cdTAzQzlfMC05XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmNvbnN0IHsgc2luZ2xlTGluZUNvbW1lbnRUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzaW5nbGVMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jLiovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5jb25zdCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiMjIy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuaW1wb3J0IHsgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuY29uc3QgeyBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuaW1wb3J0IHsgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuY29uc3QgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/Oi4rPyg/PSMjIyl8LiskKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuaW1wb3J0IHsgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XHJcbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xyXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XHJcbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvcmVuY2VMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBtYXRjaFJlZ3VsYXJFeHByZXNzaW9uKGNvbnRlbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsKGNvbnRlbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBTaW5nbGVMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoRmxvcmVuY2VMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEZsb3JlbmNlTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoRmxvcmVuY2VMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBkb2N1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBydWxlIHwgYXhpb20gfCBsZW1tYSB8IHRoZW9yZW0gfCBjb25qZWN0dXJlIHwgbWV0YWxlbW1hIHwgbWV0YXRoZW9yZW0gfCBtZXRhY29uamVjdHVyZSB8IGRlY2xhcmF0aW9uIHwgdmVydGljYWxTcGFjZSB8IGVycm9yICkrIDtcblxuXG5cbnJ1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlJ1bGVcIiBcIihcIiBsYWJlbHMgXCIpXCIgPEVORF9PRl9MSU5FPiAoIHByZW1pc2UgfCBwcmVtaXNlcyApPyBjb25jbHVzaW9uIG1ldGFwcm9vZj8gO1xuXG5heGlvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJBeGlvbVwiIFwiKFwiIGxhYmVscyBcIilcIiA8RU5EX09GX0xJTkU+ICggaW5kaWNhdGl2ZUNvbmRpdGlvbmFsIHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkgOyBcblxubGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTGVtbWFcIiBcIihcIiBsYWJlbHMgXCIpXCI/IDxFTkRfT0ZfTElORT4gKCBpbmRpY2F0aXZlQ29uZGl0aW9uYWwgfCB1bnF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSBwcm9vZiA7XG5cbnRoZW9yZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlRoZW9yZW1cIiBcIihcIiBsYWJlbHMgXCIpXCIgPEVORF9PRl9MSU5FPiAoIGluZGljYXRpdmVDb25kaXRpb25hbCB8IHVucXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApIHByb29mIDtcblxuY29uamVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiQ29uamVjdHVyZVwiIFwiKFwiIGxhYmVscyBcIilcIiA8RU5EX09GX0xJTkU+ICggaW5kaWNhdGl2ZUNvbmRpdGlvbmFsIHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkgcHJvb2Y/IDtcblxubWV0YWxlbW1hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTWV0YWxlbW1hXCIgXCIoXCIgbGFiZWxzIFwiKVwiIDxFTkRfT0ZfTElORT4gKCBtZXRhSW5kaWNhdGl2ZUNvbmRpdGlvbmFsIHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApIG1ldGFwcm9vZiA7XG5cbm1ldGF0aGVvcmVtICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIk1ldGF0aGVvcmVtXCIgXCIoXCIgbGFiZWxzIFwiKVwiIDxFTkRfT0ZfTElORT4gKCBtZXRhSW5kaWNhdGl2ZUNvbmRpdGlvbmFsIHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApIG1ldGFwcm9vZiA7XG5cbm1ldGFjb25qZWN0dXJlICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIk1ldGFjb25qZWN0dXJlXCIgXCIoXCIgbGFiZWxzIFwiKVwiIDxFTkRfT0ZfTElORT4gKCBtZXRhSW5kaWNhdGl2ZUNvbmRpdGlvbmFsIHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApIDtcblxuXG5cbmRlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB0eXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdmFyaWFibGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBvcGVyYXRvckRlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgZGlzam9pbnRUeXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgZGVwZW5kZW50VHlwZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGFiYnJldmlhdGlvbkRlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHR5cGVzRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdmFyaWFibGVzRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgb3BlcmF0b3JzRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29uc3RydWN0b3JzRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgZGlzam9pbnRUeXBlc0RlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGF2YXJpYWJsZXNEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkZXBlbmRlbnRUeXBlc0RlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGFiYnJldmlhdGlvbnNEZWNsYXJhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG50eXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJUeXBlXCIgdHlwZU5hbWUgKCBcIjpcIiB0eXBlTmFtZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbnZhcmlhYmxlRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICA6Oj0gICBcIlZhcmlhYmxlXCIgdmFyaWFibGVOYW1lIFwiOlwiIHR5cGVOYW1lIDxFTkRfT0ZfTElORT4gO1xuIFxub3BlcmF0b3JEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgIDo6PSAgIFwiT3BlcmF0b3JcIiBleHByZXNzaW9uICggXCI6XCIgdHlwZU5hbWUgKT8gPEVORF9PRl9MSU5FPiA7XG4gXG5jb25zdHJ1Y3RvckRlY2xhcmF0aW9uICAgICAgICAgICAgICAgOjo9ICAgXCJDb25zdHJ1Y3RvclwiIHRlcm0gKCBcIjpcIiB0eXBlTmFtZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbmRpc2pvaW50VHlwZURlY2xhcmF0aW9uICAgICAgICAgICAgICA6Oj0gICBcIkRpc2pvaW50VHlwZVwiIHR5cGVOYW1lIFwiOlwiIHR5cGVOYW1lcyA8RU5EX09GX0xJTkU+IDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxubWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gICAgICAgICAgICAgIDo6PSAgIFwiTWV0YXZhcmlhYmxlXCIgbWV0YXZhcmlhYmxlTmFtZSB0eXBlUGFyYW1ldGVyPyBcIjpcIiAoIFwiU3RhdGVtZW50XCIgfCBcIkNvbnRleHRcIiApIDxFTkRfT0ZfTElORT4gO1xuIFxuZGVwZW5kZW50VHlwZURlY2xhcmF0aW9uICAgICAgICAgICAgIDo6PSAgIFwiRGVwZW5kZW50VHlwZVwiIHR5cGVOYW1lIHR5cGVQYXJhbWV0ZXIgXCI6XCIgdHlwZU5hbWUgPEVORF9PRl9MSU5FPiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmFiYnJldmlhdGlvbkRlY2xhcmF0aW9uICAgICAgICAgICAgICA6Oj0gICBcIkFiYnJldmlhdGlvblwiIGFiYnJldmlhdGlvbiA8RU5EX09GX0xJTkU+IDtcblxudHlwZXNEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiVHlwZXNcIiB0eXBlTmFtZXMgKCBcIjpcIiB0eXBlTmFtZSApPyA8RU5EX09GX0xJTkU+IDtcblxudmFyaWFibGVzRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgIDo6PSAgIFwiVmFyaWFibGVzXCIgdmFyaWFibGVOYW1lICggXCIsXCIgdmFyaWFibGVOYW1lICkrIFwiOlwiIHR5cGVOYW1lIDxFTkRfT0ZfTElORT4gO1xuIFxub3BlcmF0b3JzRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgIDo6PSAgIFwiT3BlcmF0b3JzXCIgZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSsgKCBcIjpcIiB0eXBlTmFtZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbmNvbnN0cnVjdG9yc0RlY2xhcmF0aW9uICAgICAgICAgICAgICA6Oj0gICBcIkNvbnN0cnVjdG9yc1wiIHRlcm0gKCBcIixcIiB0ZXJtICkrICggXCI6XCIgdHlwZU5hbWUgKT8gPEVORF9PRl9MSU5FPiA7XG4gXG5kaXNqb2ludFR5cGVzRGVjbGFyYXRpb24gICAgICAgICAgICAgOjo9ICAgXCJEaXNqb2ludFR5cGVzXCIgdHlwZU5hbWVzIFwiOlwiIHR5cGVOYW1lcyA8RU5EX09GX0xJTkU+IDtcbiBcbm1ldGF2YXJpYWJsZXNEZWNsYXJhdGlvbiAgICAgICAgICAgICA6Oj0gICBcIk1ldGF2YXJpYWJsZXNcIiBtZXRhdmFyaWFibGVOYW1lIHR5cGVQYXJhbWV0ZXI/ICggXCIsXCIgbWV0YXZhcmlhYmxlTmFtZSB0eXBlUGFyYW1ldGVyPyApKyBcIjpcIiAoIFwiU3RhdGVtZW50XCIgfCBcIkNvbnRleHRcIiApIDxFTkRfT0ZfTElORT4gO1xuIFxuZGVwZW5kZW50VHlwZXNEZWNsYXJhdGlvbiAgICAgICAgICAgIDo6PSAgIFwiRGVwZW5kZW50VHlwZXNcIiB0eXBlTmFtZSB0eXBlUGFyYW1ldGVyICggXCIsXCIgdHlwZU5hbWUgdHlwZVBhcmFtZXRlciApKyBcIjpcIiB0eXBlTmFtZSA8RU5EX09GX0xJTkU+IDtcbiBcbmFiYnJldmlhdGlvbnNEZWNsYXJhdGlvbiAgICAgICAgICAgICA6Oj0gICBcIkFiYnJldmlhdGlvbnNcIiBhYmJyZXZpYXRpb24gKCBcIixcIiBhYmJyZXZpYXRpb24gKSsgPEVORF9PRl9MSU5FPiA7XG4gXG5cbiAgXG5wcmVtaXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJQcmVtaXNlXCIgPEVORF9PRl9MSU5FPiAoIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSA7XG5cbnByZW1pc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByZW1pc2VzXCIgPEVORF9PRl9MSU5FPiAoIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSAoIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSsgO1xuXG5jb25jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJDb25jbHVzaW9uXCIgPEVORF9PRl9MSU5FPiAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcblxuXG5cbm1ldGFwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnREZWZpbml0aW9uKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uc2Vuc2VEZWZpbml0aW9uKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YVByb29mRGVyaXZhdGlvbj8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1ldGFQcm9vZkRlcml2YXRpb24gICAgICAgICAgICAgICAgICA6Oj0gICAoIG1ldGFTdWJsZW1tYSB8IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApKyAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlZm9yZVwiIDxFTkRfT0ZfTElORT4gOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxubWV0YUluZGljYXRpdmVDb25kaXRpb25hbCAgICAgICAgICAgIDo6PSAgIFwiU3VwcG9zZVwiIDxFTkRfT0ZfTElORT4gKCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkrIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJIZW5jZVwiIDxFTkRfT0ZfTElORT4gKCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSA7XG5cbm1ldGFTdWJsZW1tYSAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtZXRhU3VibGVtbWEgfCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSsgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggbWV0YVN1YmxlbW1hIHwgcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHF1YWxpZmllZFN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkrIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkhlbmNlXCIgPEVORF9PRl9MSU5FPiAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcblxuXG5cbnByb29mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudERlZmluaXRpb24qXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25zZW5zZURlZmluaXRpb24qXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZkRlcml2YXRpb24/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbnByb29mRGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIHN1YmxlbW1hIHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSsgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlZm9yZVwiIDxFTkRfT0ZfTElORT4gO1xuXG5pbmRpY2F0aXZlQ29uZGl0aW9uYWwgICAgICAgICAgICAgICAgOjo9ICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiAoIHVucXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApKyBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+ICggcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSA7XG5cbnN1YmxlbW1hICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdWJMZW1tYSB8IHF1YWxpZmllZFN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkrIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN1YkxlbW1hIHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+ICggcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSA7XG5cblxuXG5tZXRhc3RhdGVtZW50RGVmaW5pdGlvbiAgICAgICAgICAgICAgOjo9ICAgXCJMZXRcIiB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuc3RhdGVtZW50RGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTGV0XCIgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxubm9uc2Vuc2VEZWZpbml0aW9uICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTGV0XCIgdW5xdWFsaWZpZWROb25zZW5zZSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5cblxudW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICAgICAgICAgICAgIDo6PSAgIG1ldGFzdGF0ZW1lbnQhIDxFTkRfT0ZfTElORT4gO1xuXG51bnF1YWxpZmllZFN0YXRlbWVudCAgICAgICAgICAgICAgICAgOjo9ICAgc3RhdGVtZW50ISA8RU5EX09GX0xJTkU+IDtcblxudW5xdWFsaWZpZWROb25zZW5zZSAgICAgICAgICAgICAgICAgIDo6PSAgIG5vbnNlbnNlISA8RU5EX09GX0xJTkU+IDtcblxuXG5cbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgICAgICAgICAgICAgICA6Oj0gICBtZXRhc3RhdGVtZW50ISBxdWFsaWZpY2F0aW9uPyA8RU5EX09GX0xJTkU+IDtcblxucXVhbGlmaWVkU3RhdGVtZW50ICAgICAgICAgICAgICAgICAgIDo6PSAgIHN0YXRlbWVudCEgcXVhbGlmaWNhdGlvbj8gPEVORF9PRl9MSU5FPiA7XG5cbnF1YWxpZmllZE5vbnNlbnNlICAgICAgICAgICAgICAgICAgICA6Oj0gICBub25zZW5zZSEgcXVhbGlmaWNhdGlvbj8gPEVORF9PRl9MSU5FPiA7XG5cblxuXG5ub25zZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBbbmFtZV0gfCBbY3VzdG9tXSB8IFtzcGVjaWFsXSB8IFtyZXNlcnZlZF0gfCBbdW5hc3NpZ25lZF0gKSsgO1xuXG5cblxucXVhbGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggXCJieVwiIHwgXCJmcm9tXCIgKSByZWZlcmVuY2UgO1xuXG5cblxudHlwZVBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdHlwZU5hbWUgXCIpXCIgKSA7XG5cblxuXG5hYmJyZXZpYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW2N1c3RvbV0gXCJmb3JcIiBbY3VzdG9tXSB8IG5hbWUgXCJmb3JcIiBuYW1lIDtcblxuXG5cbm1ldGF2YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBtZXRhdmFyaWFibGVOYW1lICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybSBcIilcIiApPyA7XG5cbnJlZmVyZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICByZWZlcmVuY2VOYW1lICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybSBcIilcIiApPyA7XG5cbmNvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBjb250ZXh0TmFtZSAoIDxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0gXCIpXCIgKT8gO1xuXG5sYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgbGFiZWxOYW1lICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybSBcIilcIiApPyA7XG5cblxuXG50eXBlTmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdHlwZU5hbWUgKCBcIixcIiB0eXBlTmFtZSApKiA7XG5cbmxhYmVscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIDtcblxuXG5cbm1ldGF2YXJpYWJsZU5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gO1xuXG5yZWZlcmVuY2VOYW1lICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtcblxudmFyaWFibGVOYW1lICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSA7XG5cbmNvbnRleHROYW1lICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gO1xuXG5sYWJlbE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtcblxudHlwZU5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSA7XG5cbm5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gO1xuXG5cblxudmVydGljYWxTcGFjZSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIDxFTkRfT0ZfTElORT4rIDtcblxuXG5cbmVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAuIDtgO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgbGV4aWNhbFBhdHRlcm4gPSBcIlwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRlcm1CTkYgPSBgdGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIG5hbWUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgO1xyXG5cclxuZXhwb3J0IGNvbnN0IGV4cHJlc3Npb25CTkYgPSBgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB0ZXJtIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDtcclxuXHJcbmV4cG9ydCBjb25zdCBzdGF0ZW1lbnRCTkYgPSBgc3RhdGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIHN0YXRlbWVudCBcIilcIlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGV4cHJlc3Npb24gXCI9XCIgZXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgZXhwcmVzc2lvblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDtcclxuXHJcbmV4cG9ydCBjb25zdCBtZXRhc3RhdGVtZW50Qk5GID0gYG1ldGFzdGF0ZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIihcIiBtZXRhc3RhdGVtZW50IFwiKVwiXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29udGV4dERlZmluaXRpb24gXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBwcm9vZkFzc2VydGlvblxyXG4gICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB0eXBlQXNzZXJ0aW9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YXZhcmlhYmxlIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHN1YnByb29mIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcclxuXHJcbmNvbnRleHREZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICA6Oj0gICBjb250ZXh0IFwiPVwiICgganVkZ2VtZW50IHwgY29udGV4dCApICggXCIsXCIgKCBqdWRnZW1lbnQgfCBjb250ZXh0ICkgKSogO1xyXG5cclxucHJvb2ZBc3NlcnRpb24gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIGNvbnRleHQgXCJ8LVwiIGp1ZGdlbWVudCA7XHJcbiBcclxudHlwZUFzc2VydGlvbiAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggdHlwZSB8IGV4cHJlc3Npb24gKSBcIjpcIiB0eXBlTmFtZSBcclxuXHJcbmp1ZGdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICByZWZlcmVuY2UgXCI6OlwiIG1ldGFzdGF0ZW1lbnQgO1xyXG5cclxuc3VicHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiW1wiIG1ldGFzdGF0ZW1lbnQgXCJdXCIgXCIuLi5cIiBtZXRhc3RhdGVtZW50IDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbGV4aWNhbFBhdHRlcm4sXHJcbiAgdGVybUJORixcclxuICBleHByZXNzaW9uQk5GLFxyXG4gIHN0YXRlbWVudEJORixcclxuICBtZXRhc3RhdGVtZW50Qk5GXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuaW1wb3J0IHsgdGVybUJORiwgZXhwcmVzc2lvbkJORiwgc3RhdGVtZW50Qk5GLCBtZXRhc3RhdGVtZW50Qk5GIH0gZnJvbSBcIi4vZGVmYXVsdEN1c3RvbUdyYW1tYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvcmVuY2VQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhGbG9yZW5jZVBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHtcbiAgICBibmYgPSBgXG4gICAgXG4gICAgICAke2JuZn1cbiAgICAgIFxuICAgICAgJHt0ZXJtQk5GfVxuICAgICAgXG4gICAgICAke2V4cHJlc3Npb25CTkZ9XG4gICAgICBcbiAgICAgICR7c3RhdGVtZW50Qk5GfVxuICAgICAgXG4gICAgICAke21ldGFzdGF0ZW1lbnRCTkZ9XG4gICAgICBcbiAgICBgOyAvLy9cblxuICAgIHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihGbG9yZW5jZVBhcnNlciwgYm5mKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoRmxvcmVuY2VQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORkxleGVyIGV4dGVuZHMgQk5GTGV4ZXIge31cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORlBhcnNlciBleHRlbmRzIEJORlBhcnNlciB7fVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeLlwiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25MZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcblxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuTGV4ZXIpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybkxleGVyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuTGV4ZXIsIGVudHJpZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG4gICAgZG9jdW1lbnQgICAgICAgOjo9ICBsZXhpY2FsUGF0dGVybiAoIHZlcnRpY2FsU3BhY2UgfCBlcnJvciApKiB8ICggdmVydGljYWxTcGFjZSB8IGVycm9yICkrIDtcblxuXG4gICAgbGV4aWNhbFBhdHRlcm4gOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuICAgIGVycm9yICAgICAgICAgIDo6PSAgLiA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5QYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5QYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVyblBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVYTGV4ZXIgfSBmcm9tIFwiLi90ZVgvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVYUGFyc2VyIH0gZnJvbSBcIi4vdGVYL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpbkxleGVyIH0gZnJvbSBcIi4vcGxhaW4vbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGxhaW5QYXJzZXIgfSBmcm9tIFwiLi9wbGFpbi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhZG1lTGV4ZXIgfSBmcm9tIFwiLi9yZWFkbWUvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhZG1lUGFyc2VyIH0gZnJvbSBcIi4vcmVhZG1lL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXRhSlNPTkxleGVyIH0gZnJvbSBcIi4vbWV0YUpTT04vbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWV0YUpTT05QYXJzZXIgfSBmcm9tIFwiLi9tZXRhSlNPTi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvcmVuY2VMZXhlciB9IGZyb20gXCIuL2Zsb3JlbmNlL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZsb3JlbmNlUGFyc2VyIH0gZnJvbSBcIi4vZmxvcmVuY2UvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlZmF1bHRDdXN0b21HcmFtbWFyIH0gZnJvbSBcIi4vZmxvcmVuY2UvZGVmYXVsdEN1c3RvbUdyYW1tYXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hckJORkxleGVyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckJORi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckJORi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuTGV4ZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm4vbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuUGFyc2VyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuL3BhcnNlclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRVNDQVBFX0tFWV9TVE9QU19EUkFHR0lOR19PUFRJT04gPSBcIkVTQ0FQRV9LRVlfU1RPUFNfRFJBR0dJTkdcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFU0NBUEVfS0VZX1NUT1BTX0RSQUdHSU5HX09QVElPTlxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJvd0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyb3dcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93RGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSb3dzRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJvd3NcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93c0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29sdW1uRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbHVtblwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5EaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIENvbHVtbnNEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sdW1uc1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5zRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBTaXplYWJsZURpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaXplYWJsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVVUTyA9IFwiYXV0b1wiO1xuZXhwb3J0IGNvbnN0IENVUlNPUiA9IFwiY3Vyc29yXCI7XG5leHBvcnQgY29uc3QgQ09MX1JFU0laRSA9IFwiY29sLXJlc2l6ZVwiO1xuZXhwb3J0IGNvbnN0IFJPV19SRVNJWkUgPSBcInJvdy1yZXNpemVcIjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQm9keSB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCB7IEFVVE8sIENVUlNPUiwgQ09MX1JFU0laRSwgUk9XX1JFU0laRSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxubGV0IHByZXZpb3VzQ3Vyc29yOyAgLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2x1bW5SZXNpemVDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IENPTF9SRVNJWkUpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7XG5cbiAgICBzZXRDdXJzb3IoQ09MX1JFU0laRSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvd1Jlc2l6ZUN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gUk9XX1JFU0laRSkge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjtcblxuICAgIHNldEN1cnNvcihST1dfUkVTSVpFKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDdXJzb3IoKSB7XG4gIHNldEN1cnNvcihwcmV2aW91c0N1cnNvcik7IC8vL1xufVxuXG5mdW5jdGlvbiBzZXRDdXJzb3IoY3Vyc29yKSB7XG4gIGNvbnN0IGNzcyA9IHtcbiAgICBjdXJzb3JcbiAgfTtcblxuICBib2R5LmNzcyhjc3MpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gYm9keS5jc3MoQ1VSU09SKSB8fCBBVVRPO1xuXG4gIHJldHVybiBjdXJyZW50Q3Vyc29yO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRFJBR19FVkVOVF9UWVBFID0gXCJkcmFnXCI7XG5leHBvcnQgY29uc3QgU1RPUF9EUkFHX0VWRU5UX1RZUEUgPSBcInN0b3AgZHJhZ1wiO1xuZXhwb3J0IGNvbnN0IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSA9IFwic3RhcnQgZHJhZ1wiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfQkxVUl9FVkVOVF9UWVBFID0gXCJtb3VzZXVwIGJsdXJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgd2luZG93LCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IFNpemVhYmxlRGl2IGZyb20gXCIuLi9kaXYvc2l6ZWFibGVcIjtcblxuaW1wb3J0IHsgcmVzZXRDdXJzb3IgfSBmcm9tIFwiLi4vY3Vyc29yXCI7XG5pbXBvcnQgeyBFU0NBUEVfS0VZX0NPREUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBFU0NBUEVfS0VZX1NUT1BTX0RSQUdHSU5HX09QVElPTiB9IGZyb20gXCIuLi9vcHRpb25zXCI7XG5pbXBvcnQgeyBEUkFHX0VWRU5UX1RZUEUsIFNUT1BfRFJBR19FVkVOVF9UWVBFLCBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsIE1PVVNFVVBfQkxVUl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgU3BsaXR0ZXJEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihzZWxlY3Rvcik7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgaXNPcHRpb25QcmVzZW50KG9wdGlvbikge1xuICAgIGNvbnN0IG9wdGlvblByZXNlbnQgPSAhIXRoaXMub3B0aW9uc1tvcHRpb25dO1xuXG4gICAgcmV0dXJuIG9wdGlvblByZXNlbnQ7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc2V0T3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMub3B0aW9uc1tvcHRpb25dID0gdHJ1ZTtcbiAgfVxuXG4gIHVuc2V0T3B0aW9uKG9wdGlvbikge1xuICAgIGRlbGV0ZSh0aGlzLm9wdGlvbnNbb3B0aW9uXSk7XG4gIH1cblxuICBvbkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgICAgaGFuZGxlciA9IGRyYWdIYW5kbGVyOyAgLy8vXG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIG9mZkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgICAgaGFuZGxlciA9IGRyYWdIYW5kbGVyOyAgLy8vXG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIG9uU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgICAgaGFuZGxlciA9IHN0b3BEcmFnSGFuZGxlcjsgIC8vL1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG4gIH1cblxuICBvZmZTdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIG9uU3RhcnREcmFnKHN0b3BEcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIG9mZlN0YXJ0RHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgICAgaGFuZGxlciA9IHN0b3BEcmFnSGFuZGxlcjsgIC8vL1xuXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG4gIH1cblxuICBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgICBldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBlbmFibGUoKSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgIFxuICAgIHJldHVybiBkaXNhYmxlZDtcbiAgfVxuXG4gIGlzRHJhZ2dpbmcoKSB7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmhhc0NsYXNzKFwiZHJhZ2dpbmdcIik7XG4gICAgXG4gICAgcmV0dXJuIGRyYWdnaW5nO1xuICB9XG4gIFxuICBnZXREaXJlY3Rpb24oKSB7XG4gICAgbGV0IGRpcmVjdGlvbjtcblxuICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudCgpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KSB7XG4gICAgICBkaXJlY3Rpb24gPSArMTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KSB7XG4gICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uO1xuICB9XG5cbiAgZ2V0U2l6ZWFibGVEaXYoKSB7XG4gICAgbGV0IHNpemVhYmxlRGl2O1xuXG4gICAgY29uc3QgbmV4dFNpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXROZXh0U2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KCk7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpIHtcbiAgICAgIHNpemVhYmxlRGl2ID0gbmV4dFNpYmxpbmdFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KSB7XG4gICAgICBzaXplYWJsZURpdiA9IHByZXZpb3VzU2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzaXplYWJsZURpdjtcbiAgfVxuXG4gIHN0YXJ0RHJhZygpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgICAgZXNjYXBlS2V5U3RvcHNEcmFnZ2luZ09wdGlvblByZXNlbnQgPSB0aGlzLmlzT3B0aW9uUHJlc2VudChFU0NBUEVfS0VZX1NUT1BTX0RSQUdHSU5HX09QVElPTik7XG5cbiAgICBpZiAoZXNjYXBlS2V5U3RvcHNEcmFnZ2luZ09wdGlvblByZXNlbnQpIHtcbiAgICAgIHdpbmRvdy5vbktleURvd24odGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlKVxuICB9XG5cbiAgc3RvcERyYWcoKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgICAgZXNjYXBlS2V5U3RvcHNEcmFnZ2luZ09wdGlvblByZXNlbnQgPSB0aGlzLmlzT3B0aW9uUHJlc2VudChFU0NBUEVfS0VZX1NUT1BTX0RSQUdHSU5HX09QVElPTik7XG5cbiAgICBpZiAoZXNjYXBlS2V5U3RvcHNEcmFnZ2luZ09wdGlvblByZXNlbnQpIHtcbiAgICAgIHdpbmRvdy5vZmZLZXlEb3duKHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcblxuICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSk7XG4gIH1cblxuICBtb3VzZVVwSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gICAgICBpZiAoZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9wRHJhZygpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnNvcigpO1xuICAgIH1cbiAgfVxuXG4gIG1vdXNlT3V0SGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gICAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICAgIHJlc2V0Q3Vyc29yKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAga2V5RG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xuXG4gICAgaWYgKGtleUNvZGUgPT09IEVTQ0FQRV9LRVlfQ09ERSkge1xuICAgICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcERyYWcoKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IG9uRHJhZywgb25TdG9wRHJhZywgb25TdGFydERyYWcsIGRpc2FibGVkIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgZHJhZ0hhbmRsZXIgPSBvbkRyYWcsIC8vL1xuICAgICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICAgIHN0YXJ0RHJhZ0hhbmRsZXIgPSBvblN0YXJ0RHJhZzsgLy8vXG5cbiAgICAoZGlzYWJsZWQgPT09IHRydWUpID8gLy8vXG4gICAgICB0aGlzLmRpc2FibGUoKSA6XG4gICAgICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICBkcmFnSGFuZGxlciAmJiB0aGlzLm9uRHJhZyhkcmFnSGFuZGxlcik7XG4gICAgc3RvcERyYWdIYW5kbGVyICYmIHRoaXMub25TdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIpO1xuICAgIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICAgIHdpbmRvdy5vbihNT1VTRVVQX0JMVVJfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7ICAvLy9cblxuICAgIHdpbmRvdy5vbk1vdXNlTW92ZSh0aGlzLm1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vbk1vdXNlRG93bih0aGlzLm1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMub25Nb3VzZU92ZXIodGhpcy5tb3VzZU92ZXJIYW5kbGVyLCB0aGlzKTtcbiAgICB0aGlzLm9uTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIsIHRoaXMpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBvbkRyYWcsIG9uU3RvcERyYWcsIG9uU3RhcnREcmFnIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgZHJhZ0hhbmRsZXIgPSBvbkRyYWcsIC8vL1xuICAgICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICAgIHN0YXJ0RHJhZ0hhbmRsZXIgPSBvblN0YXJ0RHJhZzsgLy8vXG5cbiAgICBkcmFnSGFuZGxlciAmJiB0aGlzLm9mZkRyYWcoZHJhZ0hhbmRsZXIpO1xuICAgIHN0b3BEcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gICAgc3RhcnREcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICAgIHdpbmRvdy5vZmYoTU9VU0VVUF9CTFVSX0VWRU5UX1RZUEUsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAgLy8vXG5cbiAgICB3aW5kb3cub2ZmTW91c2VNb3ZlKHRoaXMubW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9mZk1vdXNlRG93bih0aGlzLm1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMub2ZmTW91c2VPdmVyKHRoaXMubW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG4gICAgdGhpcy5vZmZNb3VzZU91dCh0aGlzLm1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzcGxpdHRlclwiXG4gIH07XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25EcmFnXCIsXG4gICAgXCJvcHRpb25zXCIsXG4gICAgXCJkaXNhYmxlZFwiLFxuICAgIFwib25TdG9wRHJhZ1wiLFxuICAgIFwib25TdGFydERyYWdcIlxuICBdO1xuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB7IG9wdGlvbnMgPSB7fSB9ID0gcHJvcGVydGllcyxcbiAgICAgICAgICBzcGxpdHRlckRpdiA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBzcGxpdHRlckRpdjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU3BsaXR0ZXJEaXYpYFxuXG4gIGZsZXgtc2hyaW5rOiAwO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSBcIi4uL3NwbGl0dGVyXCI7XG5cbmltcG9ydCB7IERSQUdfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi8uLi9ldmVudFR5cGVzXCI7XG5pbXBvcnQgeyBjb2x1bW5SZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIFZlcnRpY2FsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIG1vdXNlT3ZlckhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29sdW1uUmVzaXplQ3Vyc29yKCk7XG4gICAgfVxuICB9XG5cbiAgbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHsgcGFnZVggfSA9IGV2ZW50LFxuICAgICAgICAgIG1vdXNlTGVmdCA9IHBhZ2VYLCAgLy8vXG4gICAgICAgICAgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbigpLFxuICAgICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKTtcblxuICAgICAgICBjb25zdCBwcmV2aW91c01vdXNlTGVmdCA9IHRoaXMuZ2V0UHJldmlvdXNNb3VzZUxlZnQoKSxcbiAgICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdldpZHRoID0gdGhpcy5nZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgoKSxcbiAgICAgICAgICAgICAgcmVsYXRpdmVNb3VzZUxlZnQgPSBtb3VzZUxlZnQgLSBwcmV2aW91c01vdXNlTGVmdDtcblxuICAgICAgICBsZXQgc2l6ZWFibGVEaXZXaWR0aCA9IHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCAtIGRpcmVjdGlvbiAqIHJlbGF0aXZlTW91c2VMZWZ0O1xuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gc2l6ZWFibGVEaXZXaWR0aCwgLy8vXG4gICAgICAgICAgICAgIGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRTtcblxuICAgICAgICBzaXplYWJsZURpdi5zZXRXaWR0aCh3aWR0aCk7XG5cbiAgICAgICAgc2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2LmdldFdpZHRoKCk7ICAvLy9cblxuICAgICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIHNpemVhYmxlRGl2V2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHBhZ2VYIH0gPSBldmVudCxcbiAgICAgICAgICBtb3VzZUxlZnQgPSBwYWdlWCwgIC8vL1xuICAgICAgICAgIGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCksXG4gICAgICAgICAgICBwcmV2aW91c01vdXNlTGVmdCA9IG1vdXNlTGVmdCwgIC8vL1xuICAgICAgICAgICAgc2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2LmdldFdpZHRoKCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBzaXplYWJsZURpdldpZHRoOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNNb3VzZUxlZnQocHJldmlvdXNNb3VzZUxlZnQpO1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aChwcmV2aW91c1NpemVhYmxlRGl2V2lkdGgpO1xuXG4gICAgICBjb2x1bW5SZXNpemVDdXJzb3IoKTtcblxuICAgICAgaWYgKCFkcmFnZ2luZykge1xuICAgICAgICB0aGlzLnN0YXJ0RHJhZygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFByZXZpb3VzTW91c2VMZWZ0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgcHJldmlvdXNNb3VzZUxlZnQgfSA9IHN0YXRlO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzTW91c2VMZWZ0O1xuICB9XG5cbiAgZ2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgcHJldmlvdXNTaXplYWJsZURpdldpZHRoIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGg7XG4gIH1cblxuICBzZXRQcmV2aW91c01vdXNlTGVmdChwcmV2aW91c01vdXNlTGVmdCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgcHJldmlvdXNNb3VzZUxlZnRcbiAgICB9KTtcbiAgfVxuXG4gIHNldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aChwcmV2aW91c1NpemVhYmxlRGl2V2lkdGgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzTW91c2VMZWZ0ID0gbnVsbCxcbiAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBudWxsO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmV2aW91c01vdXNlTGVmdCxcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2ZXJ0aWNhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWZXJ0aWNhbFNwbGl0dGVyKWBcblxuICB3aWR0aDogMXJlbTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyByb3dSZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5pbXBvcnQgeyBEUkFHX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vLi4vZXZlbnRUeXBlc1wiO1xuXG5jbGFzcyBIb3Jpem9udGFsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIG1vdXNlT3ZlckhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgcm93UmVzaXplQ3Vyc29yKCk7XG4gICAgfVxuICB9XG5cbiAgbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHsgcGFnZVkgfSA9IGV2ZW50LFxuICAgICAgICAgIG1vdXNlVG9wID0gcGFnZVksICAvLy9cbiAgICAgICAgICBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICAgIHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpO1xuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzTW91c2VUb3AgPSB0aGlzLmdldFByZXZpb3VzTW91c2VUb3AoKSxcbiAgICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodCgpLFxuICAgICAgICAgICAgICByZWxhdGl2ZU1vdXNlVG9wID0gbW91c2VUb3AgLSBwcmV2aW91c01vdXNlVG9wO1xuXG4gICAgICAgIGxldCBzaXplYWJsZURpdkhlaWdodCA9IHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgLSBkaXJlY3Rpb24gKiByZWxhdGl2ZU1vdXNlVG9wO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHNpemVhYmxlRGl2SGVpZ2h0LCAvLy9cbiAgICAgICAgICAgICAgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFO1xuXG4gICAgICAgIHNpemVhYmxlRGl2LnNldEhlaWdodChoZWlnaHQpO1xuXG4gICAgICAgIHNpemVhYmxlRGl2SGVpZ2h0ID0gc2l6ZWFibGVEaXYuZ2V0SGVpZ2h0KCk7ICAvLy9cblxuICAgICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIHNpemVhYmxlRGl2SGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtb3VzZURvd25IYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgeyBwYWdlWSB9ID0gZXZlbnQsXG4gICAgICAgICAgbW91c2VUb3AgPSBwYWdlWSwgIC8vL1xuICAgICAgICAgIGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCksXG4gICAgICAgICAgICBwcmV2aW91c01vdXNlVG9wID0gbW91c2VUb3AsICAvLy9cbiAgICAgICAgICAgIHNpemVhYmxlRGl2SGVpZ2h0ID0gc2l6ZWFibGVEaXYuZ2V0SGVpZ2h0KCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0ID0gc2l6ZWFibGVEaXZIZWlnaHQ7ICAvLy9cblxuICAgICAgdGhpcy5zZXRQcmV2aW91c01vdXNlVG9wKHByZXZpb3VzTW91c2VUb3ApO1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQocHJldmlvdXNTaXplYWJsZURpdkhlaWdodCk7XG5cbiAgICAgIHJvd1Jlc2l6ZUN1cnNvcigpO1xuXG4gICAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMuc3RhcnREcmFnKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNNb3VzZVRvcCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHByZXZpb3VzTW91c2VUb3AgfSA9IHN0YXRlO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzTW91c2VUb3A7XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gcHJldmlvdXNTaXplYWJsZURpdkhlaWdodDtcbiAgfVxuXG4gIHNldFByZXZpb3VzTW91c2VUb3AocHJldmlvdXNNb3VzZVRvcCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgcHJldmlvdXNNb3VzZVRvcFxuICAgIH0pO1xuICB9XG5cbiAgc2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodChwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgcHJldmlvdXNNb3VzZVRvcCA9IG51bGwsXG4gICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzTW91c2VUb3AsXG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImhvcml6b250YWxcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoSG9yaXpvbnRhbFNwbGl0dGVyKWBcblxuICBoZWlnaHQ6IDFyZW07XG5cbmA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIG9wdGlvbnMgfSBmcm9tIFwiLi9vcHRpb25zXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm93RGl2IH0gZnJvbSBcIi4vZGl2L3Jvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dzRGl2IH0gZnJvbSBcIi4vZGl2L3Jvd3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5zRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtbnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2l6ZWFibGVEaXYgfSBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmVydGljYWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIb3Jpem9udGFsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXIvaG9yaXpvbnRhbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5jb25zdCBTdWJIZWFkaW5nID0gd2l0aFN0eWxlLmgyYFxuXG4gIG1hcmdpbjogMXJlbSAwIDAuNXJlbSAwO1xuICBmb250LXNpemU6IDJyZW07XG4gIFxuICA6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBTdWJIZWFkaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBTaXplYWJsZURpdiB9IGZyb20gXCJlYXN5LWxheW91dFwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU2l6ZWFibGVEaXYpYFxuXG4gIHdpZHRoOiA0OHJlbTtcbiAgbWluLXdpZHRoOiAyNHJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBUZXh0YXJlYSB9IGZyb20gXCJlYXN5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUZXh0YXJlYSlgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7XG4gIGhlaWdodDogMjRyZW07XG4gIHJlc2l6ZTogdmVydGljYWw7XG4gIHBhZGRpbmc6IDAuMjVyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJORlRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRCTkYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgYm5mID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIGJuZjtcbiAgfVxuXG4gIHNldEJORihibmYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJuZjtcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRCTkYgPSB0aGlzLmdldEJORi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldEJORiA9IHRoaXMuc2V0Qk5GLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldEJORixcbiAgICAgIHNldEJORlxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJibmZcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSdWxlTmFtZUlucHV0IGV4dGVuZHMgSW5wdXQge1xuICBnZXRSdWxlTmFtZSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHZhbHVlOyAvLy9cblxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFJ1bGVOYW1lXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJ1bGUtbmFtZVwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUnVsZU5hbWVJbnB1dClgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7XG4gIHBhZGRpbmc6IDAuMjVyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5zVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBsZXQgbGluZU51bWJlciA9IDEsXG4gICAgICAgIHByZXZpb3VzVG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgaHRtbCA9IHRva2Vucy5yZWR1Y2UoKGh0bWwsIHRva2VuKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbkhUTUwgPSB0b2tlbi5hc0hUTUwoKTtcblxuICAgICAgaWYgKHByZXZpb3VzVG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgaHRtbCArPSBgJHtsaW5lTnVtYmVyKyt9OiBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNUb2tlbkVuZE9mTGluZVRva2VuID0gcHJldmlvdXNUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzVG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICAgIGh0bWwgKz0gYCR7bGluZU51bWJlcisrfTogYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBodG1sICs9IHRva2VuSFRNTDtcblxuICAgICAgcHJldmlvdXNUb2tlbiA9IHRva2VuO1xuXG4gICAgICByZXR1cm4gaHRtbDtcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgdGhpcy5odG1sKGh0bWwpO1xuICB9XG5cbiAgY2xlYXJUb2tlbnMoKSB7XG4gICAgY29uc3QgaHRtbCA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuaHRtbChodG1sKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0VG9rZW5zID0gdGhpcy5zZXRUb2tlbnMuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclRva2VucyA9IHRoaXMuY2xlYXJUb2tlbnMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0VG9rZW5zLFxuICAgICAgY2xlYXJUb2tlbnNcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGVudFRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gY29udGVudDsgIC8vL1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldENvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRDb250ZW50ID0gdGhpcy5zZXRDb250ZW50LmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldENvbnRlbnQsXG4gICAgICBzZXRDb250ZW50XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbnRlbnRcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZVRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBzZXRQYXJzZVRyZWUocGFyc2VUcmVlKSB7XG4gICAgaWYgKHBhcnNlVHJlZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlLnNoaWZ0TGluZSgpOyAgLy9cblxuICAgICAgY29uc3QgcGFyc2VUcmVlU3RyaW5nID0gcGFyc2VUcmVlLmFzU3RyaW5nKCksXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlVHJlZVN0cmluZzsgIC8vL1xuXG4gICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUGFyc2VUcmVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IHNldFBhcnNlVHJlZSA9IHRoaXMuc2V0UGFyc2VUcmVlLmJpbmQodGhpcyksXG4gICAgICAgICAgY2xlYXJQYXJzZVRyZWUgPSB0aGlzLmNsZWFyUGFyc2VUcmVlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIHNldFBhcnNlVHJlZSxcbiAgICAgIGNsZWFyUGFyc2VUcmVlXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRva2Vuc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICByZWFkT25seTogdHJ1ZVxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExleGljYWxFbnRyaWVzVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldExleGljYWxFbnRyaWVzKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGxleGljYWxFbnRyaWVzID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cbiAgICByZXR1cm4gbGV4aWNhbEVudHJpZXM7XG4gIH1cblxuICBzZXRMZXhpY2FsRW50cmllcyhsZXhpY2FsRW50cmllcykge1xuICAgIGNvbnN0IHZhbHVlID0gSlNPTi5zdHJpbmdpZnkobGV4aWNhbEVudHJpZXMsIG51bGwsIFwiICBcIik7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0TGV4aWNhbEVudHJpZXMgPSB0aGlzLmdldExleGljYWxFbnRyaWVzLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0TGV4aWNhbEVudHJpZXMgPSB0aGlzLnNldExleGljYWxFbnRyaWVzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldExleGljYWxFbnRyaWVzLFxuICAgICAgc2V0TGV4aWNhbEVudHJpZXNcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwibGV4aWNhbC1lbnRyaWVzXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgUm93c0RpdiwgQ29sdW1uRGl2LCBDb2x1bW5zRGl2LCBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9ibmZcIjtcbmltcG9ydCBSdWxlTmFtZUlucHV0IGZyb20gXCIuL2lucHV0L3J1bGVOYW1lXCI7XG5pbXBvcnQgVG9rZW5zVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvdG9rZW5zXCI7XG5pbXBvcnQgQ29udGVudFRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2NvbnRlbnRcIjtcbmltcG9ydCBQYXJzZVRyZWVUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9wYXJzZVRyZWVcIjtcbmltcG9ydCBMZXhpY2FsRW50cmllc1RleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2xleGljYWxFbnRyaWVzXCI7XG5cbmNsYXNzIFZpZXcgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IHsgTGV4ZXIgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgbGV4aWNhbEVudHJpZXMgPSB0aGlzLmdldExleGljYWxFbnRyaWVzKCksXG4gICAgICAgICAgZW50cmllcyA9IGxleGljYWxFbnRyaWVzLCAvLy9cbiAgICAgICAgICBsZXhlciA9IExleGVyLmZyb21FbnRyaWVzKGVudHJpZXMpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBsZXhlci50b2tlbmlzZShjb250ZW50KTtcblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICBnZXRQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgbGV0IHBhcnNlVHJlZSA9IG51bGw7XG5cbiAgICBjb25zdCB7IFBhcnNlciB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBibmYgPSB0aGlzLmdldEJORigpLFxuICAgICAgICAgIHBhcnNlciA9IFBhcnNlci5mcm9tQk5GKGJuZiksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcnVsZU1hcCA9IHBhcnNlci5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbcnVsZU5hbWVdLFxuICAgICAgICAgIG5vZGUgPSBwYXJzZXIucGFyc2UodG9rZW5zLCBydWxlKTtcblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUgPSBub2RlLmFzUGFyc2VUcmVlKHRva2Vucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGtleVVwSGFuZGxlcigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5nZXRUb2tlbnMoKSxcbiAgICAgICAgICAgIHBhcnNlVHJlZSA9IHRoaXMuZ2V0UGFyc2VUcmVlKHRva2Vucyk7XG5cbiAgICAgIHRoaXMuc2V0VG9rZW5zKHRva2Vucyk7XG5cbiAgICAgIHRoaXMuc2V0UGFyc2VUcmVlKHBhcnNlVHJlZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgdGhpcy5jbGVhclRva2VucygpO1xuXG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCB7IHJlYWRPbmx5IH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIGtleVVwSGFuZGxlciA9IHRoaXMua2V5VXBIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKFtcblxuICAgICAgPENvbHVtbnNEaXY+XG4gICAgICAgIDxTaXplYWJsZURpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBMZXhpY2FsIGVudHJpZXNcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxMZXhpY2FsRW50cmllc1RleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gcmVhZE9ubHk9e3JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIEJORlxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPEJORlRleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gcmVhZE9ubHk9e3JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFJ1bGUgbmFtZVxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPFJ1bGVOYW1lSW5wdXQgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9TaXplYWJsZURpdj5cbiAgICAgICAgPFZlcnRpY2FsU3BsaXR0ZXJEaXYgLz5cbiAgICAgICAgPENvbHVtbkRpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Q29udGVudFRleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBUb2tlbnNcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxUb2tlbnNUZXh0YXJlYSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFBhcnNlIHRyZWVcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxQYXJzZVRyZWVUZXh0YXJlYSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9Db2x1bW5EaXY+XG4gICAgICA8L0NvbHVtbnNEaXY+XG5cbiAgICBdKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IExleGVyLCBQYXJzZXIsIGluaXRpYWxDb250ZW50IH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHsgYm5mIH0gPSBQYXJzZXIsXG4gICAgICAgICAgeyBlbnRyaWVzIH0gPSBMZXhlcixcbiAgICAgICAgICBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQsIC8vL1xuICAgICAgICAgIGxleGljYWxFbnRyaWVzID0gZW50cmllczsgLy8vXG5cbiAgICB0aGlzLnNldEJORihibmYpO1xuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcbiAgICB0aGlzLnNldExleGljYWxFbnRyaWVzKGxleGljYWxFbnRyaWVzKTtcblxuICAgIHRoaXMua2V5VXBIYW5kbGVyKCk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2aWV3XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZpZXcpYFxuXG4gIHBhZGRpbmc6IDFyZW07XG4gXG5gOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRmxvcmVuY2VMZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBGbG9yZW5jZVBhcnNlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlVmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgTGV4ZXIgPSBGbG9yZW5jZUxleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBGbG9yZW5jZVBhcnNlcjtcblxuICBzdGF0aWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgXG4gIFxuUnVsZSAoRXhwbG9zaW9uKVxuICBDb25jbHVzaW9uXG4gICAgQVxuXG4gIGA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmbG9yZW5jZVwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFBsYWluTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgUGxhaW5QYXJzZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpblZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgc3RhdGljIExleGVyID0gUGxhaW5MZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gUGxhaW5QYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gXCJcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInBsYWluXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTWV0YUpTT05MZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBNZXRhSlNPTlBhcnNlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFKU09OVmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgTGV4ZXIgPSBNZXRhSlNPTkxleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBNZXRhSlNPTlBhcnNlcjtcblxuICBzdGF0aWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBge1xuICBcInJlcG9zaXRvcnlcIjogXCJodHRwczovL2dpdGh1Yi5jb20vZGphbGJhdC9zdHJpbmdzXCIsXG4gIFwiZGVwZW5kZW5jaWVzXCI6IFtcbiAgICBcIm5hdHVyYWwtbnVtYmVyc1wiLFxuICAgIFwiYXJpdGhtZXRpY1wiXG4gIF1cbn1cbmA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJtZXRhLWpzb25cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hckJORlBhcnNlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJCTkZWaWV3IGV4dGVuZHMgVmlldyB7XG4gIGdldFBhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgIGNvbnN0IHsgUGFyc2VyIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcnNlciA9IFBhcnNlci5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2VucywgcnVsZSk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgTGV4ZXIgPSBDdXN0b21HcmFtbWFyQk5GTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IEN1c3RvbUdyYW1tYXJCTkZQYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gdHJ1ZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgdGVybSAgOjo9ICBvcGVyYXRpb24gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uICA6Oj0gIFwiaW5zZXJ0XCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiLFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZGVsZXRlXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiLFwiIGV4cHJlc3Npb24gXCIpXCIgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImVtcHR5XCI8Tk9fV0hJVEVTUEFDRT5cIihcIjxOT19XSElURVNQQUNFPlwiKVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5gO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY3VzdG9tLWdyYW1tYXItYm5mXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuVmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgTGV4ZXIgPSBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5MZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuUGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IFwiPD18Pj18PHw+fFxcXFwrfFxcXFwtfFx1MDBEN3xcdTAwRjdcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImN1c3RvbS1ncmFtbWFyLWxleGljYWwtcGF0dGVyblwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcImp1eHRhcG9zZVwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IEZsb3JlbmNlVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvZmxvcmVuY2VcIjtcbmltcG9ydCBQbGFpblZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3L3BsYWluXCI7XG5pbXBvcnQgTWV0YUpTT05WaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9tZXRhSlNPTlwiO1xuaW1wb3J0IEN1c3RvbUdyYW1tYXJCTkZWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9jdXN0b21HcmFtbWFyQk5GXCI7XG5pbXBvcnQgQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvY3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuXCI7XG5cbmNvbnN0IHsgcmVuZGVyU3R5bGVzIH0gPSB3aXRoU3R5bGU7XG5cbmxldCBWaWV3O1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKSxcbiAgICAgIGV4YW1wbGUgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKTsgIC8vL1xuXG5zd2l0Y2ggKGV4YW1wbGUpIHtcbiAgY2FzZSBcImZsb3JlbmNlXCIgOiBWaWV3ID0gRmxvcmVuY2VWaWV3OyBicmVhaztcbiAgY2FzZSBcInBsYWluXCIgOiBWaWV3ID0gUGxhaW5WaWV3OyBicmVhaztcbiAgY2FzZSBcIm1ldGFKU09OXCIgOiBWaWV3ID0gTWV0YUpTT05WaWV3OyBicmVhaztcbiAgY2FzZSBcImN1c3RvbUdyYW1tYXJCTkZcIiA6IFZpZXcgPSBDdXN0b21HcmFtbWFyQk5GVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJjdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5cIiA6IFZpZXcgPSBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5WaWV3OyBicmVhaztcbn1cblxucmVuZGVyU3R5bGVzKCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcgLz5cblxuKTtcbiJd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
|
|
32823
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvYm91bmRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9kb20uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy90ZXh0RWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL2VsZW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvanN4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ldmVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMva2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2xpY2suanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvcmVzaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9tb3VzZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Njcm9sbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvYm9keS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2NoZWNrYm94LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQvdGV4dGFyZWEuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9qdXh0YXBvc2Uvc3JjL2p1eHRhcG9zZS5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdGFnTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jaGFyYWN0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hc3luY2hyb25vdXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvbWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb250ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy91dGlsaXRpZXMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9iYXNpYy9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jc3MvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvdGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL2NvbGxlY3Rpb25PZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL29wdGlvbmFsUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvb25lT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9iYXNpYy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy93aXRoU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAic3JjL3RlWC9lbnRyaWVzLmpzIiwgInNyYy90ZVgvbGV4ZXIuanMiLCAic3JjL3RlWC9ibmYuanMiLCAic3JjL3RlWC9wYXJzZXIuanMiLCAic3JjL3BsYWluL2VudHJpZXMuanMiLCAic3JjL3BsYWluL2xleGVyLmpzIiwgInNyYy9wbGFpbi9ibmYuanMiLCAic3JjL3BsYWluL3BhcnNlci5qcyIsICJzcmMvcmVhZG1lL2VudHJpZXMuanMiLCAic3JjL3JlYWRtZS9sZXhlci5qcyIsICJzcmMvcmVhZG1lL2JuZi5qcyIsICJzcmMvcmVhZG1lL3BhcnNlci5qcyIsICJzcmMvbWV0YUpTT04vZW50cmllcy5qcyIsICJzcmMvbWV0YUpTT04vbGV4ZXIuanMiLCAic3JjL21ldGFKU09OL2JuZi5qcyIsICJzcmMvbWV0YUpTT04vcGFyc2VyLmpzIiwgInNyYy9mbG9yZW5jZS9lbnRyaWVzLmpzIiwgInNyYy9mbG9yZW5jZS90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAic3JjL2Zsb3JlbmNlL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLmpzIiwgInNyYy9mbG9yZW5jZS90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgInNyYy9mbG9yZW5jZS90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi5qcyIsICJzcmMvZmxvcmVuY2UvbGV4ZXIuanMiLCAic3JjL2Zsb3JlbmNlL2JuZi5qcyIsICJzcmMvZmxvcmVuY2UvZGVmYXVsdEN1c3RvbUdyYW1tYXIuanMiLCAic3JjL2Zsb3JlbmNlL3BhcnNlci5qcyIsICJzcmMvY3VzdG9tR3JhbW1hckJORi9sZXhlci5qcyIsICJzcmMvY3VzdG9tR3JhbW1hckJORi9wYXJzZXIuanMiLCAic3JjL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9lbnRyaWVzLmpzIiwgInNyYy9jdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm4vbGV4ZXIuanMiLCAic3JjL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9ibmYuanMiLCAic3JjL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9wYXJzZXIuanMiLCAic3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvb3B0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvcm93cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW4uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvY29sdW1ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zaXplYWJsZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2N1cnNvci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2V2ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvc3BsaXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvc3BsaXR0ZXIvdmVydGljYWwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvc3BsaXR0ZXIvaG9yaXpvbnRhbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2luZGV4LmpzIiwgInNyYy9leGFtcGxlL3N1YkhlYWRpbmcuanMiLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2JuZi5qcyIsICJzcmMvZXhhbXBsZS9pbnB1dC9ydWxlTmFtZS5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3Rva2Vucy5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9jb250ZW50LmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3BhcnNlVHJlZS5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9sZXhpY2FsRW50cmllcy5qcyIsICJzcmMvZXhhbXBsZS92aWV3LmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvZmxvcmVuY2UuanMiLCAic3JjL2V4YW1wbGUvdmlldy9wbGFpbi5qcyIsICJzcmMvZXhhbXBsZS92aWV3L21ldGFKU09OLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvY3VzdG9tR3JhbW1hckJORi5qcyIsICJzcmMvZXhhbXBsZS92aWV3L2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9mZnNldCB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuXG4gIGdldFJpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG5cbiAgZ2V0Qm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IHdpZHRoID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKTtcblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cbiAgXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgfVxuXG4gIHNldExlZnQobGVmdCkge1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBzZXRSaWdodChyaWdodCkge1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgfVxuXG4gIHNldEJvdHRvbShib3R0b20pIHtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIHNoaWZ0KGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KSB7XG4gICAgdGhpcy50b3AgKz0gdmVydGljYWxPZmZzZXQ7XG4gICAgdGhpcy5sZWZ0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5yaWdodCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMuYm90dG9tICs9IHZlcnRpY2FsT2Zmc2V0O1xuICB9XG5cbiAgaXNPdmVybGFwcGluZ01vdXNlKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgICByZXR1cm4gKCAgKHRoaXMudG9wIDw9IG1vdXNlVG9wKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDw9IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMucmlnaHQgPiBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IG1vdXNlVG9wKSAgKTtcbiAgfVxuXG4gIGFyZU92ZXJsYXBwaW5nKGJvdW5kcykge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPCBib3VuZHMuYm90dG9tKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDwgYm91bmRzLnJpZ2h0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IGJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBib3VuZHMudG9wKSAgKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCwgLy8vXG4gICAgICAgICAgd2luZG93U2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCwgIC8vL1xuICAgICAgICAgIHRvcCA9IGJvdW5kaW5nQ2xpZW50UmVjdC50b3AgKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgbGVmdCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICByaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgYm90dG9tID0gYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQodG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0LFxuICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIHdpZHRoLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEZPUiA9IFwiZm9yXCI7XG5leHBvcnQgY29uc3QgQk9EWSA9IFwiYm9keVwiO1xuZXhwb3J0IGNvbnN0IE5PTkUgPSBcIm5vbmVcIjtcbmV4cG9ydCBjb25zdCBTUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IEJMT0NLID0gXCJibG9ja1wiO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9IFwiaGVpZ2h0XCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSBcImRpc3BsYXlcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBIVE1MX0ZPUiA9IFwiaHRtbEZvclwiO1xuZXhwb3J0IGNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuZXhwb3J0IGNvbnN0IEFCT1VUX0JMQU5LID0gXCJhYm91dDpibGFua1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgU1ZHX05BTUVTUEFDRV9VUkkgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9QRVJUSUVTID0gXCJkZWZhdWx0UHJvcGVydGllc1wiO1xuZXhwb3J0IGNvbnN0IElHTk9SRURfUFJPUEVSVElFUyA9IFwiaWdub3JlZFByb3BlcnRpZXNcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJPT0xFQU4gfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhcmdldCwgc291cmNlID0ge30pIHtcbiAgdGFyZ2V0ID0geyAuLi50YXJnZXQgfTsgIC8vL1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7IC4uLnRhcmdldCB9OyAgLy8vXG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEhhc093blByb3BlcnR5ID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuXG4gICAgaWYgKHRhcmdldEhhc093blByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W25hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29tYmluZVZhbHVlcyh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgY29uc3QgdGFyZ2V0VmFsdWVCb29sZWFuID0gaXNWYWx1ZUJvb2xlYW4odGFyZ2V0VmFsdWUpLFxuICAgICAgICBzb3VyY2VWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbihzb3VyY2VWYWx1ZSksXG4gICAgICAgIGNvbWJpbmVkVmFsdWUgPSAodGFyZ2V0VmFsdWVCb29sZWFuICYmIHNvdXJjZVZhbHVlQm9vbGVhbikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RhcmdldFZhbHVlfSAke3NvdXJjZVZhbHVlfWA7XG5cbiAgcmV0dXJuIGNvbWJpbmVkVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVCb29sZWFuKHZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlQm9vbGVhbiA9ICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pO1xuXG4gIHJldHVybiB2YWx1ZUJvb2xlYW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFycmF5LCBlbGVtZW50KSA9PiB7XG4gICAgYXJyYXkgPSBhcnJheS5jb25jYXQoZWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5MSA9IFsgLi4uYXJyYXkxIF07IC8vL1xuXG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyYXkxO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdUYWdOYW1lKHRhZ05hbWUpIHtcbiAgcmV0dXJuIHN2Z1RhZ05hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIHN2Z0F0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBodG1sQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmNvbnN0IHN2Z1RhZ05hbWVzID0gW1xuICAgICAgICBcImFsdEdseXBoXCIsIFwiYW5pbWF0ZVwiLCBcImFuaW1hdGVDb2xvclwiLCBcImFuaW1hdGVNb3Rpb25cIiwgXCJhbmltYXRlVHJhbnNmb3JtXCIsIFwiYW5pbWF0aW9uXCIsIFwiYXVkaW9cIixcbiAgICAgICAgXCJjaXJjbGVcIiwgXCJjbGlwUGF0aFwiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjdXJzb3JcIixcbiAgICAgICAgXCJkZWZzXCIsIFwiZGVzY1wiLCBcImRpc2NhcmRcIixcbiAgICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICAgIFwiZmVCbGVuZFwiLCBcImZlQ29sb3JNYXRyaXhcIiwgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsIFwiZmVDb21wb3NpdGVcIiwgXCJmZUNvbnZvbHZlTWF0cml4XCIsIFwiZmVEaWZmdXNlTGlnaHRpbmdcIiwgXCJmZURpc3BsYWNlbWVudE1hcFwiLCBcImZlRGlzdGFudExpZ2h0XCIsIFwiZmVEcm9wU2hhZG93XCIsIFwiZmVGbG9vZFwiLCBcImZlRnVuY0FcIiwgXCJmZUZ1bmNCXCIsIFwiZmVGdW5jR1wiLCBcImZlRnVuY1JcIiwgXCJmZUdhdXNzaWFuQmx1clwiLCBcImZlSW1hZ2VcIiwgXCJmZU1lcmdlXCIsIFwiZmVNZXJnZU5vZGVcIiwgXCJmZU1vcnBob2xvZ3lcIiwgXCJmZU9mZnNldFwiLCBcImZlUG9pbnRMaWdodFwiLCBcImZlU3BlY3VsYXJMaWdodGluZ1wiLCBcImZlU3BvdExpZ2h0XCIsIFwiZmVUaWxlXCIsIFwiZmVUdXJidWxlbmNlXCIsIFwiZmlsdGVyXCIsIFwiZm9udFwiLCBcImZvbnQtZmFjZVwiLCBcImZvbnQtZmFjZS1mb3JtYXRcIiwgXCJmb250LWZhY2UtbmFtZVwiLCBcImZvbnQtZmFjZS11cmlcIiwgXCJmb3JlaWduT2JqZWN0XCIsXG4gICAgICAgIFwiZ1wiLCBcImdseXBoXCIsIFwiZ2x5cGhSZWZcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGF0Y2hcIiwgXCJoYXRjaHBhdGhcIiwgXCJoa2VyblwiLFxuICAgICAgICBcImltYWdlXCIsIFwibGluZVwiLCBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgIFwibGlzdGVuZXJcIixcbiAgICAgICAgXCJtYXJrZXJcIiwgXCJtYXNrXCIsIFwibWVzaFwiLCBcIm1lc2hncmFkaWVudFwiLCBcIm1lc2hwYXRjaFwiLCBcIm1lc2hyb3dcIiwgXCJtZXRhZGF0YVwiLCBcIm1pc3NpbmctZ2x5cGhcIiwgXCJtcGF0aFwiLFxuICAgICAgICBcInBhdGhcIiwgXCJwYXR0ZXJuXCIsIFwicG9seWdvblwiLCBcInBvbHlsaW5lXCIsIFwicHJlZmV0Y2hcIixcbiAgICAgICAgXCJyYWRpYWxHcmFkaWVudFwiLCBcInJlY3RcIixcbiAgICAgICAgXCJzY3JpcHRcIiwgXCJzZXRcIiwgXCJzb2xpZGNvbG9yXCIsIFwic3RvcFwiLCBcInN0eWxlXCIsIFwic3ZnXCIsIFwic3dpdGNoXCIsIFwic3ltYm9sXCIsXG4gICAgICAgIFwidGJyZWFrXCIsIFwidGV4dFwiLCBcInRleHRBcmVhXCIsIFwidGV4dFBhdGhcIiwgXCJ0aXRsZVwiLCBcInRyZWZcIiwgXCJ0c3BhblwiLFxuICAgICAgICBcInVua25vd25cIiwgXCJ1c2VcIixcbiAgICAgICAgXCJ2aWRlb1wiLCBcInZpZXdcIiwgXCJ2a2VyblwiXG4gICAgICBdLFxuICAgICAgc3ZnQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZW50LWhlaWdodFwiLCBcImFjY3VtdWxhdGVcIiwgXCJhZGRpdGl2ZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiLCBcImFscGhhYmV0aWNcIiwgXCJhbXBsaXR1ZGVcIiwgXCJhcmFiaWMtZm9ybVwiLCBcImFzY2VudFwiLCBcImF0dHJpYnV0ZU5hbWVcIiwgXCJhdHRyaWJ1dGVUeXBlXCIsIFwiYXppbXV0aFwiLFxuICAgICAgICBcImJhbmR3aWR0aFwiLCBcImJhc2VGcmVxdWVuY3lcIiwgXCJiYXNlUHJvZmlsZVwiLCBcImJhc2VsaW5lLXNoaWZ0XCIsIFwiYmJveFwiLCBcImJlZ2luXCIsIFwiYmlhc1wiLCBcImJ5XCIsXG4gICAgICAgIFwiY2FsY01vZGVcIiwgXCJjYXAtaGVpZ2h0XCIsIFwiY2xpcFwiLCBcImNsYXNzTmFtZVwiLCBcImNsaXAtcGF0aFwiLCBcImNsaXAtcnVsZVwiLCBcImNsaXBQYXRoVW5pdHNcIiwgXCJjb2xvclwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY29sb3ItcmVuZGVyaW5nXCIsIFwiY29udGVudFNjcmlwdFR5cGVcIiwgXCJjb250ZW50U3R5bGVUeXBlXCIsIFwiY3Jvc3NvcmlnaW5cIiwgXCJjdXJzb3JcIiwgXCJjeFwiLCBcImN5XCIsXG4gICAgICAgIFwiZFwiLCBcImRlZmF1bHRBY3Rpb25cIiwgXCJkZXNjZW50XCIsIFwiZGlmZnVzZUNvbnN0YW50XCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzcGxheVwiLCBcImRpdmlzb3JcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImRvd25sb2FkXCIsIFwiZHVyXCIsIFwiZHhcIiwgXCJkeVwiLFxuICAgICAgICBcImVkZ2VNb2RlXCIsIFwiZWRpdGFibGVcIiwgXCJlbGV2YXRpb25cIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiLCBcImVuZFwiLCBcImV2ZW50XCIsIFwiZXhwb25lbnRcIiwgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXG4gICAgICAgIFwiZmlsbFwiLCBcImZpbGwtb3BhY2l0eVwiLCBcImZpbGwtcnVsZVwiLCBcImZpbHRlclwiLCBcImZpbHRlclJlc1wiLCBcImZpbHRlclVuaXRzXCIsIFwiZmxvb2QtY29sb3JcIiwgXCJmbG9vZC1vcGFjaXR5XCIsIFwiZm9jdXNIaWdobGlnaHRcIiwgXCJmb2N1c2FibGVcIiwgXCJmb250LWZhbWlseVwiLCBcImZvbnQtc2l6ZVwiLCBcImZvbnQtc2l6ZS1hZGp1c3RcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC12YXJpYW50XCIsIFwiZm9udC13ZWlnaHRcIiwgXCJmb3JtYXRcIiwgXCJmclwiLCBcImZyb21cIiwgXCJmeFwiLCBcImZ5XCIsXG4gICAgICAgIFwiZzFcIiwgXCJnMlwiLCBcImdseXBoLW5hbWVcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIiwgXCJnbHlwaFJlZlwiLCBcImdyYWRpZW50VHJhbnNmb3JtXCIsIFwiZ3JhZGllbnRVbml0c1wiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYW5naW5nXCIsIFwiaGF0Y2hDb250ZW50VW5pdHNcIiwgXCJoYXRjaFVuaXRzXCIsIFwiaGVpZ2h0XCIsIFwiaG9yaXotYWR2LXhcIiwgXCJob3Jpei1vcmlnaW4teFwiLCBcImhvcml6LW9yaWdpbi15XCIsIFwiaHJlZlwiLCBcImhyZWZsYW5nXCIsXG4gICAgICAgIFwiaWRcIiwgXCJpZGVvZ3JhcGhpY1wiLCBcImltYWdlLXJlbmRlcmluZ1wiLCBcImluXCIsIFwiaW4yXCIsIFwiaW5pdGlhbFZpc2liaWxpdHlcIiwgXCJpbnRlcmNlcHRcIixcbiAgICAgICAgXCJrXCIsIFwiazFcIiwgXCJrMlwiLCBcImszXCIsIFwiazRcIiwgXCJrZXJuZWxNYXRyaXhcIiwgXCJrZXJuZWxVbml0TGVuZ3RoXCIsIFwia2VybmluZ1wiLCBcImtleVBvaW50c1wiLCBcImtleVNwbGluZXNcIiwgXCJrZXlUaW1lc1wiLFxuICAgICAgICBcImxlbmd0aEFkanVzdFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGlnaHRpbmctY29sb3JcIiwgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLCBcImxvY2FsXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiLCBcIm1hcmtlci1taWRcIiwgXCJtYXJrZXItc3RhcnRcIiwgXCJtYXJrZXJIZWlnaHRcIiwgXCJtYXJrZXJVbml0c1wiLCBcIm1hcmtlcldpZHRoXCIsIFwibWFza1wiLCBcIm1hc2tDb250ZW50VW5pdHNcIiwgXCJtYXNrVW5pdHNcIiwgXCJtYXRoZW1hdGljYWxcIiwgXCJtYXhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhQ2hhcmFjdGVyRW5jb2RpbmdcIiwgXCJtZWRpYUNvbnRlbnRFbmNvZGluZ3NcIiwgXCJtZWRpYVNpemVcIiwgXCJtZWRpYVRpbWVcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtb2RlXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5hdi1kb3duXCIsIFwibmF2LWRvd24tbGVmdFwiLCBcIm5hdi1kb3duLXJpZ2h0XCIsIFwibmF2LWxlZnRcIiwgXCJuYXYtbmV4dFwiLCBcIm5hdi1wcmV2XCIsIFwibmF2LXJpZ2h0XCIsIFwibmF2LXVwXCIsIFwibmF2LXVwLWxlZnRcIiwgXCJuYXYtdXAtcmlnaHRcIiwgXCJudW1PY3RhdmVzXCIsXG4gICAgICAgIFwib2JzZXJ2ZXJcIiwgXCJvZmZzZXRcIiwgXCJvcGFjaXR5XCIsIFwib3BlcmF0b3JcIiwgXCJvcmRlclwiLCBcIm9yaWVudFwiLCBcIm9yaWVudGF0aW9uXCIsIFwib3JpZ2luXCIsIFwib3ZlcmZsb3dcIiwgXCJvdmVybGF5XCIsIFwib3ZlcmxpbmUtcG9zaXRpb25cIiwgXCJvdmVybGluZS10aGlja25lc3NcIixcbiAgICAgICAgXCJwYW5vc2UtMVwiLCBcInBhdGhcIiwgXCJwYXRoTGVuZ3RoXCIsIFwicGF0dGVybkNvbnRlbnRVbml0c1wiLCBcInBhdHRlcm5UcmFuc2Zvcm1cIiwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJwaGFzZVwiLCBcInBpdGNoXCIsIFwicGxheWJhY2tPcmRlclwiLCBcInBsYXliYWNrb3JkZXJcIiwgXCJwb2ludGVyLWV2ZW50c1wiLCBcInBvaW50c1wiLCBcInBvaW50c0F0WFwiLCBcInBvaW50c0F0WVwiLCBcInBvaW50c0F0WlwiLCBcInByZXNlcnZlQWxwaGFcIiwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwicHJpbWl0aXZlVW5pdHNcIiwgXCJwcm9wYWdhdGVcIixcbiAgICAgICAgXCJyXCIsIFwicmFkaXVzXCIsIFwicmVmWFwiLCBcInJlZllcIiwgXCJyZW5kZXJpbmctaW50ZW50XCIsIFwicmVwZWF0Q291bnRcIiwgXCJyZXBlYXREdXJcIiwgXCJyZXF1aXJlZEV4dGVuc2lvbnNcIiwgXCJyZXF1aXJlZEZlYXR1cmVzXCIsIFwicmVxdWlyZWRGb250c1wiLCBcInJlcXVpcmVkRm9ybWF0c1wiLCBcInJlc3RhcnRcIiwgXCJyZXN1bHRcIiwgXCJyb3RhdGVcIiwgXCJyeFwiLCBcInJ5XCIsXG4gICAgICAgIFwic2NhbGVcIiwgXCJzZWVkXCIsIFwic2hhcGUtcmVuZGVyaW5nXCIsIFwic2lkZVwiLCBcInNsb3BlXCIsIFwic25hcHNob3RUaW1lXCIsIFwic3BhY2luZ1wiLCBcInNwZWN1bGFyQ29uc3RhbnRcIiwgXCJzcGVjdWxhckV4cG9uZW50XCIsIFwic3ByZWFkTWV0aG9kXCIsIFwic3JjXCIsIFwic3RhcnRPZmZzZXRcIiwgXCJzdGREZXZpYXRpb25cIiwgXCJzdGVtaFwiLCBcInN0ZW12XCIsIFwic3RpdGNoVGlsZXNcIiwgXCJzdG9wLWNvbG9yXCIsIFwic3RvcC1vcGFjaXR5XCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCIsIFwic3RyaW5nXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWpvaW5cIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiLCBcInN0cm9rZS1vcGFjaXR5XCIsIFwic3Ryb2tlLXdpZHRoXCIsIFwic3R5bGVcIiwgXCJzdXJmYWNlU2NhbGVcIiwgXCJzeW5jQmVoYXZpb3JcIiwgXCJzeW5jQmVoYXZpb3JEZWZhdWx0XCIsIFwic3luY01hc3RlclwiLCBcInN5bmNUb2xlcmFuY2VcIiwgXCJzeW5jVG9sZXJhbmNlRGVmYXVsdFwiLCBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIFwidGFibGVWYWx1ZXNcIiwgXCJ0YXJnZXRcIiwgXCJ0YXJnZXRYXCIsIFwidGFyZ2V0WVwiLCBcInRleHQtYW5jaG9yXCIsIFwidGV4dC1kZWNvcmF0aW9uXCIsIFwidGV4dC1yZW5kZXJpbmdcIiwgXCJ0ZXh0TGVuZ3RoXCIsIFwidGltZWxpbmVCZWdpblwiLCBcInRpbWVsaW5lYmVnaW5cIiwgXCJ0aXRsZVwiLCBcInRvXCIsIFwidHJhbnNmb3JtXCIsIFwidHJhbnNmb3JtQmVoYXZpb3JcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidTFcIiwgXCJ1MlwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiLCBcInVuZGVybGluZS10aGlja25lc3NcIiwgXCJ1bmljb2RlXCIsIFwidW5pY29kZS1iaWRpXCIsIFwidW5pY29kZS1yYW5nZVwiLCBcInVuaXRzLXBlci1lbVwiLFxuICAgICAgICBcInYtYWxwaGFiZXRpY1wiLCBcInYtaGFuZ2luZ1wiLCBcInYtaWRlb2dyYXBoaWNcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiLCBcInZhbHVlc1wiLCBcInZlcnNpb25cIiwgXCJ2ZXJ0LWFkdi15XCIsIFwidmVydC1vcmlnaW4teFwiLCBcInZlcnQtb3JpZ2luLXlcIiwgXCJ2aWV3Qm94XCIsIFwidmlld1RhcmdldFwiLCBcInZpc2liaWxpdHlcIixcbiAgICAgICAgXCJ3aWR0aFwiLCBcIndpZHRoc1wiLCBcIndvcmQtc3BhY2luZ1wiLCBcIndyaXRpbmctbW9kZVwiLFxuICAgICAgICBcInhcIiwgXCJ4LWhlaWdodFwiLCBcIngxXCIsIFwieDJcIiwgXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwieVwiLCBcInkxXCIsIFwieTJcIiwgXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwielwiLCBcInpvb21BbmRQYW5cIlxuICAgICAgXSxcbiAgICAgIGh0bWxBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlcHRcIiwgXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXNzS2V5XCIsIFwiYWN0aW9uXCIsIFwiYWxsb3dcIiwgXCJhbGxvd0Z1bGxTY3JlZW5cIiwgXCJhbGxvd1RyYW5zcGFyZW5jeVwiLCBcImFsdFwiLCBcImFzeW5jXCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1BsYXlcIixcbiAgICAgICAgXCJjYXB0dXJlXCIsIFwiY2VsbFBhZGRpbmdcIiwgXCJjZWxsU3BhY2luZ1wiLCBcImNoYWxsZW5nZVwiLCBcImNoYXJTZXRcIiwgXCJjaGVja2VkXCIsIFwiY2l0ZVwiLCBcImNsYXNzSURcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xTcGFuXCIsIFwiY29sc1wiLCBcImNvbnRlbnRcIiwgXCJjb250ZW50RWRpdGFibGVcIiwgXCJjb250ZXh0TWVudVwiLCBcImNvbnRyb2xzXCIsIFwiY29vcmRzXCIsIFwiY3Jvc3NPcmlnaW5cIixcbiAgICAgICAgXCJkYXRhXCIsIFwiZGF0ZVRpbWVcIiwgXCJkZWZhdWx0XCIsIFwiZGVmZXJcIiwgXCJkaXJcIiwgXCJkaXNhYmxlZFwiLCBcImRvd25sb2FkXCIsIFwiZHJhZ2dhYmxlXCIsXG4gICAgICAgIFwiZW5jVHlwZVwiLFxuICAgICAgICBcImZvcm1cIiwgXCJmb3JtQWN0aW9uXCIsIFwiZm9ybUVuY1R5cGVcIiwgXCJmb3JtTWV0aG9kXCIsIFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJmb3JtVGFyZ2V0XCIsIFwiZnJhbWVCb3JkZXJcIixcbiAgICAgICAgXCJoZWFkZXJzXCIsIFwiaGVpZ2h0XCIsIFwiaGlkZGVuXCIsIFwiaGlnaFwiLCBcImhyZWZcIiwgXCJocmVmTGFuZ1wiLCBcImh0bWxGb3JcIiwgXCJodHRwRXF1aXZcIixcbiAgICAgICAgXCJpY29uXCIsIFwiaWRcIiwgXCJpbnB1dE1vZGVcIiwgXCJpbnRlZ3JpdHlcIiwgXCJpc1wiLFxuICAgICAgICBcImtleVBhcmFtc1wiLCBcImtleVR5cGVcIiwgXCJraW5kXCIsXG4gICAgICAgIFwibGFiZWxcIiwgXCJsYW5nXCIsIFwibGlzdFwiLCBcImxvb3BcIiwgXCJsb3dcIixcbiAgICAgICAgXCJtYW5pZmVzdFwiLCBcIm1hcmdpbkhlaWdodFwiLCBcIm1hcmdpbldpZHRoXCIsIFwibWF4XCIsIFwibWF4TGVuZ3RoXCIsIFwibWVkaWFcIiwgXCJtZWRpYUdyb3VwXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibWluTGVuZ3RoXCIsIFwibXVsdGlwbGVcIiwgXCJtdXRlZFwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJub1ZhbGlkYXRlXCIsIFwibm9uY2VcIixcbiAgICAgICAgXCJvcGVuXCIsIFwib3B0aW11bVwiLFxuICAgICAgICBcInBhdHRlcm5cIiwgXCJwbGFjZWhvbGRlclwiLCBcInBvc3RlclwiLCBcInByZWxvYWRcIiwgXCJwcm9maWxlXCIsXG4gICAgICAgIFwicmFkaW9Hcm91cFwiLCBcInJlYWRPbmx5XCIsIFwicmVsXCIsIFwicmVxdWlyZWRcIiwgXCJyZXZlcnNlZFwiLCBcInJvbGVcIiwgXCJyb3dTcGFuXCIsIFwicm93c1wiLFxuICAgICAgICBcInNhbmRib3hcIiwgXCJzY29wZVwiLCBcInNjb3BlZFwiLCBcInNjcm9sbGluZ1wiLCBcInNlYW1sZXNzXCIsIFwic2VsZWN0ZWRcIiwgXCJzaGFwZVwiLCBcInNpemVcIiwgXCJzaXplc1wiLCBcInNwYW5cIiwgXCJzcGVsbENoZWNrXCIsIFwic3JjXCIsIFwic3JjRG9jXCIsIFwic3JjTGFuZ1wiLCBcInNyY1NldFwiLCBcInN0YXJ0XCIsIFwic3RlcFwiLCBcInN0eWxlXCIsIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRhYkluZGV4XCIsIFwidGFyZ2V0XCIsIFwidGl0bGVcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlTWFwXCIsXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBcIndtb2RlXCIsXG4gICAgICAgIFwid3JhcFwiXG4gICAgICBdO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkb21FbGVtZW50cykge1xuICBjb25zdCBkb21FbGVtZW50c1dpdGhFbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzKGRvbUVsZW1lbnRzLCAoZG9tRWxlbWVudCkgPT4gKGRvbUVsZW1lbnQuX19lbGVtZW50X18gIT09IHVuZGVmaW5lZCkpLFxuICAgICAgICBlbGVtZW50cyA9IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzLm1hcCgoZG9tRWxlbWVudCkgPT4gZG9tRWxlbWVudC5fX2VsZW1lbnRfXyk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGhlaWdodCA+IDApIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gZG9tTm9kZS5wYXJlbnRFbGVtZW50OyAgLy8vXG5cbiAgICBpZiAocGFyZW50RE9NTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYXNjZW5kYW50RE9NTm9kZXMucHVzaChwYXJlbnRET01Ob2RlKTtcblxuICAgICAgaGVpZ2h0LS07XG5cbiAgICAgIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUocGFyZW50RE9NTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChkZXB0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZERPTU5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOyAgLy8vXG5cbiAgICBwdXNoKGRlc2NlbmRhbnRET01Ob2RlcywgY2hpbGRET01Ob2Rlcyk7XG5cbiAgICBkZXB0aC0tO1xuXG4gICAgY2hpbGRET01Ob2Rlcy5mb3JFYWNoKChjaGlsZERPTU5vZGUpID0+IGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGNoaWxkRE9NTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRPTU5vZGVzQnlTZWxlY3Rvcihkb21Ob2Rlcywgc2VsZWN0b3IpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IGZpbHRlckRPTU5vZGVzKGRvbU5vZGVzLCAoZG9tTm9kZSkgPT4gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3RvcikpO1xuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3Rvcikge1xuICBjb25zdCBkb21Ob2RlVHlwZSA9IGRvbU5vZGUubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChkb21Ob2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb21Ob2RlOyAvLy9cblxuICAgICAgcmV0dXJuIGRvbUVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgaWYgKHNlbGVjdG9yID09PSBXSUxEQ0FSRCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gW10sXG4gICAgICAgIGRvbU5vZGVzTGVuZ3RoID0gZG9tTm9kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb21Ob2Rlc0xlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGRvbU5vZGUgPSBkb21Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChkb21Ob2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGZpbHRlcmVkRE9NTm9kZXMucHVzaChkb21Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IsIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzLCBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IsIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUsIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kb21cIjtcblxuZnVuY3Rpb24gZ2V0UGFyZW50RWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBwYXJlbnRFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBwYXJlbnRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgaWYgKHBhcmVudERPTUVsZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAocGFyZW50RE9NRWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgY29uc3QgcGFyZW50RE9NRWxlbWVudHMgPSBbcGFyZW50RE9NRWxlbWVudF0sXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKHBhcmVudERPTUVsZW1lbnRzKSxcbiAgICAgICAgICAgIGZpcnN0UGFyZW50RWxlbWVudCA9IGZpcnN0KHBhcmVudEVsZW1lbnRzKTtcblxuICAgICAgcGFyZW50RWxlbWVudCA9IGZpcnN0UGFyZW50RWxlbWVudCB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgY29uc3QgY2hpbGRET01Ob2RlcyA9IHRoaXMuZG9tRWxlbWVudC5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGNoaWxkRE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGNoaWxkRE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRBc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtSGVpZ2h0ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4aW11bUhlaWdodCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgYXNjZW5kYW50RE9NTm9kZXMgPSBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCksXG4gICAgICAgIGFzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGFzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGFzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoYXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBhc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBuZXh0U2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7XG5cbiAgaWYgKChuZXh0U2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IobmV4dFNpYmxpbmdET01Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICBuZXh0U2libGluZ0VsZW1lbnQgPSBuZXh0U2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXh0U2libGluZ0VsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcHJldmlvdXNTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7ICAvLy9cblxuICBpZiAoKHByZXZpb3VzU2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IocHJldmlvdXNTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHByZXZpb3VzU2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1NpYmxpbmdFbGVtZW50O1xufVxuXG5jb25zdCBlbGVtZW50TWl4aW5zID0ge1xuICBnZXRQYXJlbnRFbGVtZW50LFxuICBnZXRDaGlsZEVsZW1lbnRzLFxuICBnZXRBc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0RGVzY2VuZGFudEVsZW1lbnRzLFxuICBnZXROZXh0U2libGluZ0VsZW1lbnQsXG4gIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVsZW1lbnRNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcblxuY2xhc3MgVGV4dEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpcztcbiAgfVxuXG4gIGdldFRleHQoKSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSxcbiAgICAgICAgICB0ZXh0ID0gbm9kZVZhbHVlOyAvLy9cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGV4dDsgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IGNsaWVudFdpZHRoID0gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgIHdpZHRoID0gY2xpZW50V2lkdGg7ICAvLy9cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGhlaWdodCA9IGNsaWVudEhlaWdodDsgIC8vL1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFRleHRFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFbGVtZW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dEVsZW1lbnQgZnJvbSBcIi4uL3RleHRFbGVtZW50XCI7XG5cbmltcG9ydCB7IFNUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZhbHNleUVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMucmVkdWNlKChlbGVtZW50cywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4geyAgLy8vXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LCAgLy8vXG4gICAgICAgICAgICB0ZXh0RWxlbWVudCA9IG5ldyBUZXh0RWxlbWVudCh0ZXh0KTtcblxuICAgICAgZWxlbWVudCA9IHRleHRFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lLCBwcnVuZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBmaXJzdCwgZ3VhcmFudGVlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNIVE1MQXR0cmlidXRlTmFtZSwgaXNTVkdBdHRyaWJ1dGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50c1wiO1xuaW1wb3J0IHsgRk9SLCBDTEFTUywgT0JKRUNULCBIVE1MX0ZPUiwgQ0xBU1NfTkFNRSwgQk9PTEVBTiwgRlVOQ1RJT04sIFNWR19OQU1FU1BBQ0VfVVJJIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBhcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKSB7XG4gIHRoaXMucHJvcGVydGllcyA9IGNvbWJpbmUocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuXG4gIHByb3BlcnRpZXMgPSBwcnVuZSh0aGlzLnByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTsgLy8vXG5cbiAgY29uc3QgeyBuYW1lc3BhY2VVUkkgfSA9IHRoaXMuZG9tRWxlbWVudCxcbiAgICAgICAgc3ZnID0gKG5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRV9VUkkpLCAvLy9cbiAgICAgICAgcHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSxcbiAgICAgICAgbmFtZXMgPSBwcm9wZXJ0aWVzS2V5czsgIC8vLz1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzW25hbWVdLFxuICAgICAgICAgIG5hbWVIYW5kbGVyTmFtZSA9IGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpO1xuXG4gICAgaWYgKG5hbWVIYW5kbGVyTmFtZSkge1xuICAgICAgYWRkSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpO1xuXG4gICAgICBpZiAobmFtZUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQodGhpcykgfHwgcHJvcGVydGllcy5jaGlsZEVsZW1lbnRzLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSB7fTtcblxuICBjaGlsZEVsZW1lbnRzLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KTtcblxuICAgIHRoaXMuYWRkKGNoaWxkRWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoKSB7XG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNvbnRleHQobmFtZXMsIHRoZW5EZWxldGUpIHtcbiAgY29uc3QgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RBcmd1bWVudCA9IGZpcnN0KGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEJPT0xFQU4pIHtcbiAgICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgICAgdGhlbkRlbGV0ZSA9IGZpcnN0QXJndW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtuYW1lXSxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0aGVuRGVsZXRlKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfSwgW10pO1xufVxuXG5jb25zdCBqc3hNaXhpbnMgPSB7XG4gIGFwcGx5UHJvcGVydGllcyxcbiAgZ2V0UHJvcGVydGllcyxcbiAgZ2V0Q29udGV4dCxcbiAgYXNzaWduQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQganN4TWl4aW5zO1xuXG5mdW5jdGlvbiBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgY2hpbGRFbGVtZW50cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmNoaWxkRWxlbWVudHMgPT09IEZVTkNUSU9OKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuY2hpbGRFbGVtZW50cy5jYWxsKGVsZW1lbnQpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IGd1YXJhbnRlZShjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9ICh0eXBlb2YgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQgPT09IEZVTkNUSU9OKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jb250ZXh0OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGNvbnRleHQsIHBhcmVudENvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCksIC8vL1xuICAgICAgICBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uKGV2ZW50VHlwZSwgaGFuZGxlcik7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBpZiAobmFtZSA9PT0gQ0xBU1NfTkFNRSkge1xuICAgIG5hbWUgPSBDTEFTUztcbiAgfVxuXG4gIGlmIChuYW1lID09PSBIVE1MX0ZPUikge1xuICAgIG5hbWUgPSBGT1I7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBPQkpFQ1QpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tRWxlbWVudFtuYW1lXVtrZXldID0gdmFsdWVba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmFtZTsgLy8vXG5cbiAgICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIC9eb24vLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIHJldHVybiBzdmcgPyBpc1NWR0F0dHJpYnV0ZU5hbWUobmFtZSkgOiBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgQ0hBTkdFX0VWRU5UX1RZUEUgPSBcImNoYW5nZVwiO1xuZXhwb3J0IGNvbnN0IFJFU0laRV9FVkVOVF9UWVBFID0gXCJyZXNpemVcIjtcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlRfVFlQRSA9IFwic2Nyb2xsXCI7XG5leHBvcnQgY29uc3QgS0VZRE9XTl9FVkVOVF9UWVBFID0gXCJrZXlkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VVUF9FVkVOVF9UWVBFID0gXCJtb3VzZXVwXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU9WRVJfRVZFTlRfVFlQRSA9IFwibW91c2VvdmVyXCI7XG5leHBvcnQgY29uc3QgTU9VU0VET1dOX0VWRU5UX1RZUEUgPSBcIm1vdXNlZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFTU9WRV9FVkVOVF9UWVBFID0gXCJtb3VzZW1vdmVcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBDTElDS19FVkVOVF9UWVBFLFxuICBLRVlVUF9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRU1PVkVfRVZFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlRfVFlQRSwgS0VZRE9XTl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25LZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uS2V5RG93bihrZXlEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3Qga2V5TWl4aW5zID0ge1xuICBvbktleVVwLFxuICBvZmZLZXlVcCxcbiAgb25LZXlEb3duLFxuICBvZmZLZXlEb3duXG59O1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENMSUNLX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2xpY2tNaXhpbnMgPSB7XG4gIG9uQ2xpY2ssXG4gIG9mZkNsaWNrXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlja01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlO1xufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlKSB7XG4gIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc3RhdGUpO1xufVxuXG5jb25zdCBzdGF0ZU1peGlucyA9IHtcbiAgZ2V0U3RhdGUsXG4gIHNldFN0YXRlLFxuICB1cGRhdGVTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhdGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgT0JKRUNULCBBQk9VVF9CTEFOSyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gYWRkUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KE9CSkVDVCksXG4gICAgICAgIHN0eWxlID0gYGRpc3BsYXk6IGJsb2NrOyBcbiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgICAgICAgICAgICAgdG9wOiAwOyBcbiAgICAgICAgICAgICAgICAgbGVmdDogMDsgXG4gICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOyBcbiAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgXG4gICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyBcbiAgICAgICAgICAgICAgICAgei1pbmRleDogLTE7YCxcbiAgICAgICAgZGF0YSA9IEFCT1VUX0JMQU5LLFxuICAgICAgICB0eXBlID0gVEVYVF9IVE1MX0NPTlRFTlRfVFlQRTtcblxuICByZXNpemVPYmplY3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xuXG4gIHJlc2l6ZU9iamVjdC5kYXRhID0gZGF0YTtcblxuICByZXNpemVPYmplY3QudHlwZSA9IHR5cGU7XG5cbiAgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fID0gcmVzaXplT2JqZWN0O1xuXG4gIHJlc2l6ZU9iamVjdC5vbmxvYWQgPSAoKSA9PiByZXNpemVPYmplY3RMb2FkSGFuZGxlcih0aGlzKTtcblxuICB0aGlzLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzaXplT2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSB0aGlzLl9fcmVzaXplT2JqZWN0X18sXG4gICAgICAgIG9iamVjdFdpbmRvdyA9IHJlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7ICAvLy9cblxuICBvYmplY3RXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplRXZlbnRMaXN0ZW5lcik7XG5cbiAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKHJlc2l6ZU9iamVjdCk7XG5cbiAgZGVsZXRlIHRoaXMuX19yZXNpemVPYmplY3RfXztcbn1cblxuY29uc3QgcmVzaXplTWl4aW5zID0ge1xuICBvblJlc2l6ZSxcbiAgb2ZmUmVzaXplLFxuICBhZGRSZXNpemVPYmplY3QsXG4gIHJlbW92ZVJlc2l6ZU9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzaXplTWl4aW5zO1xuXG5mdW5jdGlvbiByZXNpemVPYmplY3RMb2FkSGFuZGxlcihlbGVtZW50KSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGVsZW1lbnQuX19yZXNpemVPYmplY3RfXyxcbiAgICAgICAgcmVzaXplT2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIHJlc2l6ZU9iamVjdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IGVsZW1lbnQuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKTtcblxuICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHJlc2l6ZUV2ZW50TGlzdGVuZXIpID0+IHJlc2l6ZUV2ZW50TGlzdGVuZXIoZXZlbnQpKTtcbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgcmVtb3ZlUmVzaXplT2JqZWN0IH0gZnJvbSBcIi4uL21peGlucy9yZXNpemVcIjtcblxuZnVuY3Rpb24gb24oZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gUkVTSVpFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpLFxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPSByZXNpemVFdmVudExpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChyZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmFkZFJlc2l6ZU9iamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvZmYoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcblxuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlUmVzaXplT2JqZWN0KHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gIH1cblxuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKGV2ZW50TGlzdGVuZXIpO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpLFxuICAgICAgICBpbmRleCA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuaW5kZXhPZihldmVudExpc3RlbmVyKSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVycztcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZmluZCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGlmICgoZXZlbnRMaXN0ZW5lci5lbGVtZW50ID09PSBlbGVtZW50KSAmJiAoZXZlbnRMaXN0ZW5lci5oYW5kbGVyID09PSBoYW5kbGVyKSAmJiAoZXZlbnRMaXN0ZW5lci5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBldmVudExpc3RlbmVyO1xuXG4gIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oZXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgaGFuZGxlcixcbiAgICBldmVudFR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmNvbnN0IGV2ZW50TWl4aW5zID0ge1xuICBvbixcbiAgb2ZmLFxuICBhZGRFdmVudExpc3RlbmVyLFxuICByZW1vdmVFdmVudExpc3RlbmVyLFxuICBjcmVhdGVFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcixcbiAgZmluZEV2ZW50TGlzdGVuZXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBldmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VPVkVSX0VWRU5UX1RZUEUsIG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IG1vdXNlTWl4aW5zID0ge1xuICBvbk1vdXNlVXAsXG4gIG9mZk1vdXNlVXAsXG4gIG9uTW91c2VPdXQsXG4gIG9mZk1vdXNlT3V0LFxuICBvbk1vdXNlRG93bixcbiAgb2ZmTW91c2VEb3duLFxuICBvbk1vdXNlT3ZlcixcbiAgb2ZmTW91c2VPdmVyLFxuICBvbk1vdXNlTW92ZSxcbiAgb2ZmTW91c2VNb3ZlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb3VzZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU0NST0xMX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG9wOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsTGVmdDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIGdldFNjcm9sbFRvcCxcbiAgZ2V0U2Nyb2xsTGVmdCxcbiAgc2V0U2Nyb2xsVG9wLFxuICBzZXRTY3JvbGxMZWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY3JvbGxNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGpzeE1peGlucyBmcm9tIFwiLi9taXhpbnMvanN4XCI7XG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBzdGF0ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvc3RhdGVcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCByZXNpemVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Jlc2l6ZVwiO1xuaW1wb3J0IHNjcm9sbE1peGlucyBmcm9tIFwiLi9taXhpbnMvc2Nyb2xsXCI7XG5pbXBvcnQgZWxlbWVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgaXNTVkdUYWdOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IGZpcnN0LCBhdWdtZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBOT05FLFxuICAgICAgICAgQkxPQ0ssXG4gICAgICAgICBXSURUSCxcbiAgICAgICAgIFNUUklORyxcbiAgICAgICAgIEhFSUdIVCxcbiAgICAgICAgIERJU1BMQVksXG4gICAgICAgICBESVNBQkxFRCxcbiAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgIFNWR19OQU1FU1BBQ0VfVVJJLFxuICAgICAgICAgREVGQVVMVF9QUk9QRVJUSUVTLFxuICAgICAgICAgSUdOT1JFRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW5jbHVkZUJvcmRlciA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBnZXRIZWlnaHQoaW5jbHVkZUJvcmRlciA9IHRydWUpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRIZWlnaHQgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG4gIGNsZWFyQ2xhc3NlcygpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IEVNUFRZX1NUUklORzsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkO1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lmluc2VydEJlZm9yZShkb21FbGVtZW50LCBmaXJzdENoaWxkRE9NRWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIG51bGwpOyAvLy9cbiAgfVxuXG4gIGFkZChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgbW91bnQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgICAgXTtcblxuICAgIHRoaXMuYWRkKGVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHMucmV2ZXJzZSgpOyAvLy9cblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50LmRpZE1vdW50ICYmIGVsZW1lbnQuZGlkTW91bnQoKSkpOyAgLy8vXG4gIH1cblxuICB1bm1vdW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50LmdldERlc2NlbmRhbnRFbGVtZW50cygpLFxuICAgICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIC4uLmRlc2NlbmRhbnRFbGVtZW50c1xuICAgICAgICAgIF07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC53aWxsVW5tb3VudCAmJiBlbGVtZW50LndpbGxVbm1vdW50KCkpKTsgIC8vL1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgaHRtbChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNzcyhjc3MpIHtcbiAgICBpZiAoY3NzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBibHVyKCkgeyB0aGlzLmRvbUVsZW1lbnQuYmx1cigpOyB9XG5cbiAgZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbiAgaGFzRm9jdXMoKSB7XG4gICAgY29uc3QgZm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGZvY3VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0YWdOYW1lIH0gPSBDbGFzcyxcbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpO1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IEVsZW1lbnQsICAvLy9cbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30sIC8vL1xuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gW107IC8vL1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBqc3hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHN0YXRlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnQ7XG5cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gbnVsbCxcbiAgICAgICAgZWxlbWVudCA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChDbGFzcywgbnVsbCwgc2VsZWN0b3IsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudCA9IGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0VfVVJJLCB0YWdOYW1lKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IGVsZW1lbnQ7IC8vL1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoREVGQVVMVF9QUk9QRVJUSUVTKSkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gY29tYmluZShkZWZhdWx0UHJvcGVydGllcywgQ2xhc3NbREVGQVVMVF9QUk9QRVJUSUVTXSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4gIWlnbm9yZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGlnbm9yZWRQcm9wZXJ0eSkpO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTVFJJTkcsIEZVTkNUSU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZmlyc3RBcmd1bWVudCwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IGNoaWxkRWxlbWVudHNGcm9tUmVtYWluaW5nQXJndW1lbnRzKHJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBwcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBjaGlsZEVsZW1lbnRzXG4gICAgfSwgcHJvcGVydGllcyk7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAoaXNTdWJjbGFzc09mKGZpcnN0QXJndW1lbnQsIEVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBDbGFzcyA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IENsYXNzLmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gU1RSSU5HKSB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gZmlyc3RBcmd1bWVudDsgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBFbGVtZW50LmZyb21UYWdOYW1lKHRhZ05hbWUsIHByb3BlcnRpZXMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEZVTkNUSU9OKSB7XG4gICAgICBjb25zdCBlbGVtZW50RnVuY3Rpb24gPSBmaXJzdEFyZ3VtZW50OyAgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmNvbnN0IFJlYWN0ID0ge1xuICBjcmVhdGVFbGVtZW50XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdDtcblxuZnVuY3Rpb24gY2hpbGRFbGVtZW50c0Zyb21SZW1haW5pbmdBcmd1bWVudHMocmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIHJlbWFpbmluZ0FyZ3VtZW50cyA9IGZsYXR0ZW4ocmVtYWluaW5nQXJndW1lbnRzKTsgLy8vXG5cbiAgbGV0IGNoaWxkRWxlbWVudHMgPSByZW1haW5pbmdBcmd1bWVudHM7IC8vL1xuXG4gIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGxldCBzdWJjbGFzc09mID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgLy8vXG4gICAgc3ViY2xhc3NPZiA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgc3ViY2xhc3NPZiA9IGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJjbGFzc09mO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZ2V0SFJlZigpIHsgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTsgfVxuXG4gIHNldEhSZWYoaHJlZikgeyByZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImFcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oQ0hBTkdFX0VWRU5UX1RZUEUsIGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBjaGFuZ2VNaXhpbnMgPSB7XG4gIG9uQ2hhbmdlLFxuICBvZmZDaGFuZ2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNoYW5nZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuaW1wb3J0IGNoYW5nZU1peGlucyBmcm9tIFwiLi9taXhpbnMvY2hhbmdlXCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4vZXZlbnRUeXBlc1wiO1xuXG5jbGFzcyBJbnB1dEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG4gIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBnZXRTZWxlY3Rpb25TdGFydCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydDsgfVxuXG4gIGdldFNlbGVjdGlvbkVuZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25FbmQ7IH1cbiAgXG4gIGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucmVhZE9ubHk7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHNldFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvblN0YXJ0KSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9XG5cbiAgc2V0U2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kOyB9XG5cbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHsgdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5ID0gcmVhZE9ubHk7IH1cblxuICBzZWxlY3QoKSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3QoKTsgfVxufVxuXG5PYmplY3QuYXNzaWduKElucHV0RWxlbWVudC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0RWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IElucHV0RWxlbWVudCBmcm9tIFwiLi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgSW5wdXRFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEVsZW1lbnQge1xuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwic2VsZWN0XCI7XG59XG5cbk9iamVjdC5hc3NpZ24oU2VsZWN0LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IGNoYW5nZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIEVsZW1lbnQge1xuICBpc0NoZWNrZWQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2hlY2tlZDsgfVxuXG4gIGNoZWNrKGNoZWNrZWQgPSB0cnVlKSB7IHRoaXMuZG9tRWxlbWVudC5jaGVja2VkID0gY2hlY2tlZDsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCJcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbihDaGVja2JveC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgSW5wdXRFbGVtZW50IGZyb20gXCIuLi9pbnB1dEVsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dGFyZWEgZXh0ZW5kcyBJbnB1dEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgb25SZXNpemUsIG9mZlJlc2l6ZSB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25SZXNpemUsXG4gIG9mZlJlc2l6ZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgd2luZG93TWl4aW5zIGZyb20gXCIuL21peGlucy93aW5kb3dcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIFdpbmRvdyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IHdpbmRvdzsgLy8vXG4gIH1cblxuICBhc3NpZ24oLi4uc291cmNlcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgLi4uc291cmNlcyk7XG4gIH1cblxuICBhZGRSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICByZW1vdmVSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICBnZXRXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lcldpZHRoOyB9IC8vL1xuICBcbiAgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmlubmVySGVpZ2h0OyB9IC8vL1xuXG4gIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWU9mZnNldDsgfSAgLy8vXG5cbiAgZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWE9mZnNldDsgfSAvLy9cbn1cblxuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCB3aW5kb3dNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCAodHlwZW9mIHdpbmRvdyA9PT0gVU5ERUZJTkVEKSA/IHVuZGVmaW5lZCA6IG5ldyBXaW5kb3coKTsgIC8vL1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIERvY3VtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQ7IC8vL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuXG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFjdCB9IGZyb20gXCIuL3JlYWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcyB9IGZyb20gXCIuL2JvdW5kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb2R5IH0gZnJvbSBcIi4vZWxlbWVudC9ib2R5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmsgfSBmcm9tIFwiLi9lbGVtZW50L2xpbmtcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXQgfSBmcm9tIFwiLi9pbnB1dEVsZW1lbnQvaW5wdXRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vZWxlbWVudC9idXR0b25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vZWxlbWVudC9zZWxlY3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9lbGVtZW50L2NoZWNrYm94XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRhcmVhIH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L3RleHRhcmVhXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRFbGVtZW50IH0gZnJvbSBcIi4vdGV4dEVsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXRFbGVtZW50IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRvY3VtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29uc3RhbnRzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCB3aW5kb3cgfSBmcm9tIFwiZWFzeVwiO1xuXG53aW5kb3cuYXNzaWduKHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2p1eHRhcG9zZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4ID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgRVJST1IgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgQ1RSTF9DID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUID0gXCJhY2NlcHRcIjtcbmV4cG9ydCBjb25zdCBOVU1CRVIgPSBcIm51bWJlclwiO1xuZXhwb3J0IGNvbnN0IEJPT0xFQU4gPSBcImJvb2xlYW5cIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRSA9IFwiY29udGVudC10eXBlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRVRYX0NIQVJBQ1RFUiA9IFwiXFx1MDAwM1wiO1xuZXhwb3J0IGNvbnN0IENPTE9OX0NIQVJBQ1RFUiA9IFwiOlwiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMSU5FX0ZFRURfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIgPSBcIlxcclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IG93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSxcbiAgICAgICAgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb3ZlcndyaXR0ZW4gPSBvd25Qcm9wZXJ0eU5hbWVzLnNvbWUoKG93blByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9IG93blByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgaGVhZGVyc1tvd25Qcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgaWYgKCFvdmVyd3JpdHRlbikge1xuICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBvd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksXG4gICAgICAgIGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXMgPSBvd25Qcm9wZXJ0eU5hbWVzLm1hcCgob3duUHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lID0gb3duUHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lc0luY2x1ZGVzTG93ZXJjYXNlTmFtZSA9IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXMuaW5jbHVkZXMobG93ZXJjYXNlTmFtZSk7XG5cbiAgaWYgKCFsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWVzSW5jbHVkZXNMb3dlcmNhc2VOYW1lKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQUNDRVBULCBDT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IHVuZGVyd3JpdGUsIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2h0dHBcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHQoaGVhZGVycywgYWNjZXB0KTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9zdChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gY29udGVudDtcbiAgICBjb250ZW50ID0gaGVhZGVycztcbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBQT1NUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEU7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdChoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHVuZGVyd3JpdGVDb250ZW50VHlwZShoZWFkZXJzLCBjb250ZW50VHlwZSk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBjb25zdCB1cmwgPSB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpLFxuICAgICAgICBhY2NlcHQgPSBoZWFkZXJzW0FDQ0VQVF0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVCwgYWNjZXB0KTtcbiAgfVxuXG4gIGlmIChjb250ZW50VHlwZSAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQ09OVEVOVF9UWVBFLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0KGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBULCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEUsICAvLy9cbiAgICAgICAgdmFsdWUgPSBjb250ZW50VFlwZTsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVID0gXCJ1XCI7XG5leHBvcnQgY29uc3QgU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBORVdfTElORSA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgTEVTU19USEFOID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgQU1QRVJTQU5EID0gXCImYW1wO1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0gXCImZ3Q7XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBMRVNTX1RIQU4sIEFNUEVSU0FORCwgR1JFQVRFUl9USEFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XHJcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mLywgQU1QRVJTQU5EKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi8sIEdSRUFURVJfVEhBTik7XHJcblxyXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVUeXBlID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgbmFtZVR5cGUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBjb21tZW50VHlwZSA9IFwiY29tbWVudFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVR5cGUgPSBcImVuZC1vZi1saW5lXCI7XG5leHBvcnQgY29uc3Qgd2hpdGVzcGFjZVR5cGUgPSBcIndoaXRlc3BhY2VcIjtcbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsVHlwZSA9IFwic3RyaW5nLWxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBicm9rZW5Db21tZW50VHlwZSA9IFwiYnJva2VuLWMwbW1lbnRcIjsgIC8vL1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSA9IFwicmVndWxhci1leHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgYnJva2VuU3RyaW5nTGl0ZXJhbFR5cGUgPSBcImJyb2tlbi1zdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBlbmQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYHN0YXJ0LW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgbWlkZGxlLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGVUeXBlLFxuICBuYW1lVHlwZSxcbiAgY29tbWVudFR5cGUsXG4gIGVuZE9mTGluZVR5cGUsXG4gIHdoaXRlc3BhY2VUeXBlLFxuICBzdHJpbmdMaXRlcmFsVHlwZSxcbiAgYnJva2VuQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgYnJva2VuU3RyaW5nTGl0ZXJhbFR5cGUsXG4gIHNpbmdsZUxpbmVDb21tZW50VHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgc2FuaXRpc2VDb250ZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0SW5uZXJIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLmlubmVySFRNTDtcbiAgfVxuXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUgPT09IGVuZE9mTGluZVR5cGUpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNFcXVhbFRvKHRva2VuKSB7XG4gICAgY29uc3QgZXF1YWxUb1Rva2VuID0gKHRoaXMgPT09IHRva2VuKTtcblxuICAgIHJldHVybiBlcXVhbFRvVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAgLy8vXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7dGhpcy5pbm5lckhUTUx9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPT0gZW5kUG9zaXRpb24pIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7ICAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudDsgLy8vXG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247ICAvLy9cbiAgICAgIHN0YXJ0UG9zaXRpb24gPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IGNvbnRlbnQ7IC8vL1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuICBcbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShjb250ZW50LCB0aGlzLnR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIGFzRW50cnkoKSB7XG4gICAgY29uc3QgZW50cnkgPSB7fSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBgJHt0aGlzLnJlZ3VsYXJFeHByZXNzaW9ufWA7XG5cbiAgICBlbnRyeVt0aGlzLnR5cGVdID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuO1xuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub2tlbihUb2tlbikge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVndWxhckV4cHJlc3Npb24gfSA9IFRva2VuLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW50cnkoZW50cnkpIHtcbiAgICBjb25zdCBlbnRyeUtleXMgPSBPYmplY3Qua2V5cyhlbnRyeSksXG4gICAgICAgICAgZmlyc3RFbnRyeUtleSA9IGZpcnN0KGVudHJ5S2V5cyksXG4gICAgICAgICAgdHlwZSA9IGZpcnN0RW50cnlLZXksIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGVudHJ5W3R5cGVdLFxuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybik7XG4gICAgICAgIFxuICAgIHJldHVybiBydWxlOyBcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgICBjb25zdCB1bmljb2RlID0gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgZmxhZ3MgPSB1bmljb2RlID9cbiAgICAgICAgICAgICAgICAgICAgVSA6XG4gICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLCBmbGFncyksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSByZWdFeHAsIC8vL1xuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gIGNvbnN0IHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiA9IC91ey8sIC8vL1xuICAgICAgICBpbmRleCA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybi5zZWFyY2godW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgdW5pY29kZSA9IChpbmRleCAhPT0gLTEpO1xuXG4gIHJldHVybiB1bmljb2RlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdXMgPSBcIitcIjtcclxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSBcIlx1MDNCNVwiO1xyXG5leHBvcnQgY29uc3Qgd2lsZGNhcmQgPSBcIi5cIjtcclxuZXhwb3J0IGNvbnN0IGFzdGVyaXNrID0gXCIqXCI7XHJcbmV4cG9ydCBjb25zdCBzZXBhcmF0b3IgPSBcIjo6PVwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gXCIhXCI7XHJcbmV4cG9ydCBjb25zdCBOT19XSElURVNQQUNFID0gXCI8Tk9fV0hJVEVTUEFDRT5cIjtcclxuZXhwb3J0IGNvbnN0IEVORF9PRl9MSU5FID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgcGx1cyxcclxuICBlcHNpbG9uLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86Ojo9fFxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwhfFxcXFwqfFxcXFwrfFxcXFwufFx1MDNCNXw7fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInR5cGVcIjogXCJeXFxcXFtbXlxcXFxdXStcXFxcXVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyB3aGl0ZXNwYWNlVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZXNwYWNlVG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2hpdGVzcGFjZVRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLyg/OlxcXFwufFteXFwvXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzaW5nbGVMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXC8uKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgTkVXX0xJTkUgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY29uc3RydWN0b3IodHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgaW5kZXgpIHtcbiAgICBzdXBlcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KTtcblxuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIGdldEluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLmluZGV4O1xuICB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSBORVdfTElORTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0aGlzLmluZGV4KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IGVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSAvXFxyXFxufFxccnxcXG4vLFxuICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGVuZE9mTGluZVR5cGUsIC8vL1xuICAgICAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgICBlbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuID0gbmV3IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4odHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86Lis/KD89XFwqXFwvKXwuKyQpLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IDEsXG4gICAgICAgICAgZW5kID0gY29udGVudExlbmd0aCAtIDEsXG4gICAgICAgICAgc3RyaW5nID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdMaXRlcmFsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eJyg/OlxcXFwufFteJ10pKicvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmltcG9ydCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbVwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXC58W15cIlxcXFxdKSpcIi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuSW5Db21tZW50UHJlc2VydmluZ1Rva2VuKHRva2VuKSB7XG4gIGxldCB0b2tlbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gPSBmYWxzZTtcblxuICBjb25zdCB0b2tlbkNvbW1lbnRUb2tlbiA9IHRva2VuLmlzQ29tbWVudFRva2VuKCk7XG5cbiAgaWYgKHRva2VuQ29tbWVudFRva2VuKSB7XG4gICAgY29uc3QgY29tbWVudFRva2VuID0gdG9rZW4sIC8vL1xuICAgICAgICAgIGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBjb21tZW50VG9rZW4uaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCk7XG5cbiAgICB0b2tlbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9rZW5Db21tZW50UHJlc2VydmluZ1Rva2VuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi9ydWxlXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcclxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XHJcbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuXHJcbmltcG9ydCB7IFNUUklORywgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBpc1Rva2VuSW5Db21tZW50UHJlc2VydmluZ1Rva2VuIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5cclxuY29uc3QgeyBzcGxpY2UgfSA9IGFycmF5VXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uTGV4ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHJ1bGVzLCBJbkNvbW1lbnRUb2tlbnMsIE5vdEluQ29tbWVudFRva2Vucykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRUb2tlbnMgPSBJbkNvbW1lbnRUb2tlbnM7XHJcbiAgICB0aGlzLk5vdEluQ29tbWVudFRva2VucyA9IE5vdEluQ29tbWVudFRva2VucztcclxuICB9XHJcbiAgXHJcbiAgZ2V0UnVsZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlcztcclxuICB9XHJcblxyXG4gIGdldEluQ29tbWVudFRva2VucygpIHtcclxuICAgIHJldHVybiB0aGlzLkluQ29tbWVudFRva2VucztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudFRva2VucygpIHtcclxuICAgIHJldHVybiB0aGlzLk5vdEluQ29tbWVudFRva2VucztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMgPSB0aGlzLnRva2VuaXNlRW5kT2ZMaW5lcyhjb250ZW50KSxcclxuICAgICAgICAgIHRva2Vuc09yQ29udGVudHMgPSBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzOyAvLy9cclxuXHJcbiAgICB0aGlzLnRva2VuaXNlQ29udGVudHModG9rZW5zT3JDb250ZW50cyk7XHJcblxyXG4gICAgY29uc3QgdG9rZW5zID0gdG9rZW5zT3JDb250ZW50czsgIC8vL1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZUVuZE9mTGluZXMoY29udGVudCkge1xyXG4gICAgY29uc3QgeyBFbmRPZkxpbmVUb2tlbiB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcclxuICAgICAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMgPSBbXTtcclxuXHJcbiAgICBsZXQgZW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVUb2tlbi5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICB3aGlsZSAoZW5kT2ZMaW5lVG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgZW5kT2ZMaW5lVG9rZW5JbmRleCA9IGVuZE9mTGluZVRva2VuLmdldEluZGV4KCksXHJcbiAgICAgICAgICAgIGVuZE9mTGluZVRva2VuQ29udGVudExlbmd0aCA9IGVuZE9mTGluZVRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcclxuICAgICAgICAgICAgbGVmdCA9IGVuZE9mTGluZVRva2VuSW5kZXgsIC8vL1xyXG4gICAgICAgICAgICByaWdodCA9IGVuZE9mTGluZVRva2VuSW5kZXggKyBlbmRPZkxpbmVUb2tlbkNvbnRlbnRMZW5ndGgsXHJcbiAgICAgICAgICAgIGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgbGVmdCksXHJcbiAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHJpZ2h0KTtcclxuXHJcbiAgICAgIGNvbnRlbnQgPSBsZWZ0Q29udGVudDsgIC8vL1xyXG5cclxuICAgICAgZW5kT2ZMaW5lVG9rZW5zT3JDb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgZW5kT2ZMaW5lVG9rZW5zT3JDb250ZW50cy5wdXNoKGVuZE9mTGluZVRva2VuKTtcclxuXHJcbiAgICAgIGNvbnRlbnQgPSByaWdodENvbnRlbnQ7IC8vL1xyXG5cclxuICAgICAgZW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVUb2tlbi5tYXRjaChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzLnB1c2goY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZUNvbnRlbnRzKHRva2Vuc09yQ29udGVudHMpIHtcclxuICAgIGxldCBpbkNvbW1lbnQgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgaW5kZXggPSAwLFxyXG4gICAgICAgIHRva2Vuc09yQ29udGVudHNMZW5ndGggPSB0b2tlbnNPckNvbnRlbnRzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0b2tlbnNPckNvbnRlbnRzTGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHRva2VuT3JDb250ZW50ID0gdG9rZW5zT3JDb250ZW50c1tpbmRleF0sXHJcbiAgICAgICAgICAgIHRva2VuT3JDb250ZW50U3RyaW5nID0gKHR5cGVvZiB0b2tlbk9yQ29udGVudCA9PT0gU1RSSU5HKSxcclxuICAgICAgICAgICAgdG9rZW5PckNvbnRlbnRDb250ZW50ID0gdG9rZW5PckNvbnRlbnRTdHJpbmc7IC8vL1xyXG5cclxuICAgICAgaWYgKHRva2VuT3JDb250ZW50Q29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IHRva2VucyA9IFtdLFxyXG4gICAgICAgICAgICAgIGNvbnRlbnQgPSB0b2tlbk9yQ29udGVudDsgLy8vXHJcblxyXG4gICAgICAgIGluQ29tbWVudCA9IHRoaXMudG9rZW5pc2VDb250ZW50KGNvbnRlbnQsIHRva2VucywgaW5Db21tZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdG9rZW5zLmxlbmd0aCxcclxuICAgICAgICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXHJcbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xyXG5cclxuICAgICAgICBzcGxpY2UodG9rZW5zT3JDb250ZW50cywgc3RhcnQsIGRlbGV0ZUNvdW50LCB0b2tlbnMpO1xyXG5cclxuICAgICAgICB0b2tlbnNPckNvbnRlbnRzTGVuZ3RoICs9IHRva2Vuc0xlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgIGluZGV4ICs9IHRva2Vuc0xlbmd0aCAtIDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZUNvbnRlbnQoY29udGVudCwgdG9rZW5zLCBpbkNvbW1lbnQpIHtcclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IFRva2VucyA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JbkNvbW1lbnRUb2tlbnMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Ob3RJbkNvbW1lbnRUb2tlbnM7XHJcblxyXG4gICAgICBUb2tlbnMuc29tZSgoVG9rZW4pID0+IHtcclxuICAgICAgICBpZiAoVG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gVG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBjb25zdCBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gaXNUb2tlbkluQ29tbWVudFByZXNlcnZpbmdUb2tlbih0b2tlbiksXHJcbiAgICAgICAgICAgIHRva2VuQ29udGVudExlbmd0aCA9IHRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcclxuICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkNvbnRlbnRMZW5ndGg7IC8vL1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuXHJcbiAgICAgIGluQ29tbWVudCA9IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmc7IC8vL1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbkNvbW1lbnQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBTaW5nbGVMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcclxuICAgIGNvbnN0IHsgZW50cmllcyB9ID0gQ2xhc3MsXHJcbiAgICAgICAgICBJbkNvbW1lbnRUb2tlbnMgPSBJbkNvbW1lbnRUb2tlbnNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50VG9rZW5zID0gTm90SW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudFRva2VucywgTm90SW5Db21tZW50VG9rZW5zKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xyXG4gICAgY29uc3QgSW5Db21tZW50VG9rZW5zID0gSW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudFRva2VucyA9IE5vdEluQ29tbWVudFRva2Vuc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50VG9rZW5zLCBOb3RJbkNvbW1lbnRUb2tlbnMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhDbGFzcywgZW50cmllcykge1xyXG4gICAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KSksXHJcbiAgICAgICAgICBJbkNvbW1lbnRUb2tlbnMgPSBJbkNvbW1lbnRUb2tlbnNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50VG9rZW5zID0gTm90SW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRUb2tlbnMsIE5vdEluQ29tbWVudFRva2Vucyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gSW5Db21tZW50VG9rZW5zRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSA9IENsYXNzLFxyXG4gICAgICAgIEluQ29tbWVudFRva2VucyA9IFtcclxuICAgICAgICAgIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW5cclxuICAgICAgICBdO1xyXG5cclxuICByZXR1cm4gSW5Db21tZW50VG9rZW5zO1xyXG59XHJcblxyXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRUb2tlbnNGcm9tQ2xhc3MoQ2xhc3MpIHtcclxuICBjb25zdCB7IFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgIE5vdEluQ29tbWVudFRva2VucyA9IFtcclxuICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sXHJcbiAgICAgICAgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxyXG4gICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlblxyXG4gICAgICBdO1xyXG5cclxuICByZXR1cm4gTm90SW5Db21tZW50VG9rZW5zO1xyXG59IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgdG9rZW5zRnJvbUJORihibmYpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBibmYsICAvLy9cclxuICAgICAgICAgIHRva2VucyA9IHN1cGVyLnRva2VuaXNlKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3xcXFxcLXxcXFxcKnxcXFxcLylcIlxyXG4gIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCYXNpY0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEJhc2ljTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IE5FV19MSU5FIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgc2FuaXRpc2VDb250ZW50IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIGluZGV4KSB7XG4gICAgc3VwZXIodHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCk7XG5cbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBnZXRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gTkVXX0xJTkU7XG4gICAgXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHRoaXMuaW5kZXgpOyB9XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgZW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IC9cXHJcXG58XFxyfFxcbi8sXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gZW5kT2ZMaW5lVHlwZSwgLy8vXG4gICAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgICAgICBzaWduaWZpY2FudCA9IHRydWUsXG4gICAgICAgICAgICAgIHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgICAgZW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiA9IG5ldyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9jb21tb24vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlcyB9IGZyb20gXCIuL2NvbW1vbi90eXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCIuL2JuZi9zcGVjaWFsU3ltYm9sc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORkxleGVyIH0gZnJvbSBcIi4vYm5mL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljTGV4ZXIgfSBmcm9tIFwiLi9iYXNpYy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25MZXhlciB9IGZyb20gXCIuL2NvbW1vbi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFdoaXRlc3BhY2VUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7ICAvLy9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjsgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7ICAvLy9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7ICAvLy9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjsgIC8vL1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7ICAvLy9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiOyAgLy8vXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG5cclxuICB7IFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIiB9LFxyXG5cclxuICB7IFwia2V5d29yZFwiOiBcIl4oPzohaW1wb3J0YW50fEBtZWRpYSlcIiB9LFxyXG5cclxuICB7IFwicGVyY2VudGFnZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspXFxcXCVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHwvfFxcXFx8PXx+PXw9fD58XFxcXHt8XFxcXH18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF1cIiB9LFxyXG5cclxuICB7IFwib3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3R8b25seSkkXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwidW5hcnktb3BlcmF0b3JcIjogXCJeXFxcXCt8XFxcXC1cIiB9LFxyXG5cclxuICB7IFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIiB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDU1NMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgICAgZG9jdW1lbnQgICAgICAgICAgICAgIDo6PSAgKCBydWxlIHwgZXJyb3IgKSsgO1xuXG4gICAgICBydWxlICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lIFwiOjo9XCIgZGVmaW5pdGlvbnMgXCI7XCIgO1xuXG4gICAgICBuYW1lICAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBkZWZpbml0aW9ucyAgICAgICAgICAgOjo9ICBkZWZpbml0aW9uICggXCJ8XCIgZGVmaW5pdGlvbiApKiA7XG5cbiAgICAgIGRlZmluaXRpb24gICAgICAgICAgICA6Oj0gIHBhcnQrIDtcblxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJlZ3VsYXJFeHByZXNzaW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsU3ltYm9sXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVwc2lsb25cbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHdpbGRjYXJkXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnQgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgOjo9ICBcIihcIiBwYXJ0ICggXCJ8XCIgcGFydCApKyBcIilcIiA7XG5cbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBydWxlTmFtZSAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZSAgOjo9ICBbdHlwZV0gO1xuXG4gICAgICByZWd1bGFyRXhwcmVzc2lvbiAgICAgOjo9ICBbcmVndWxhci1leHByZXNzaW9uXSA7XG5cbiAgICAgIHRlcm1pbmFsU3ltYm9sICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG4gICAgICBlbmRPZkxpbmUgICAgICAgICAgICAgOjo9ICBcIjxFTkRfT0ZfTElORT5cIiA7XG5cbiAgICAgIGVwc2lsb24gICAgICAgICAgICAgICA6Oj0gIFwiXHUwM0I1XCIgOyBcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb25lT3JNb3JlUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbG9va0FoZWFkTW9kaWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXIgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIj9cIiA7XG5cbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXIgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiK1wiIDtcblxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXIgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIqXCIgO1xuXG4gICAgICBlcnJvciAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQkFSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgREFTSCA9IFwiLVwiO1xuZXhwb3J0IGNvbnN0IE5FV19MSU5FID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFNJTkdMRV9TUEFDRSA9IFwiIFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKSB7XG4gIGxldCBwYWRkaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBwYWRkaW5nTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgcGFkZGluZyArPSBTSU5HTEVfU1BBQ0U7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldERlZmluaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb25zO1xuICB9XG5cbiAgZ2V0Tm9uVGVybWluYWxOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHNldE5vblRlcm1pbmFsTm9kZShOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGFkZERlZmluaXRpb24oZGVmaW5pdGlvbiwgcG9zaXRpb24pIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IHRoaXMuZGVmaW5pdGlvbnMuaW5jbHVkZXMoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoIWRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IHRoaXMuZGVmaW5pdGlvbnMubGVuZ3RoO1xuXG4gICAgICAgIHBvc2l0aW9uID0gZGVmaW5pdGlvbnNMZW5ndGg7IC8vL1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydCA9IHBvc2l0aW9uLCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMDtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBkZWZpbml0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IHRoaXMuZGVmaW5pdGlvbnMuaW5jbHVkZXMoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25JbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKSxcbiAgICAgICAgICAgIHN0YXJ0ID0gZGVmaW5pdGlvbkluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgfVxuICB9XG5cbiAgcmVwbGFjZURlZmluaXRpb24ob2xkRGVmaW5pdGlvbiwgbmV3RGVmaW5pdGlvbikge1xuICAgIGNvbnN0IG9sZERlZmluaXRpb25JbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihvbGREZWZpbml0aW9uKTtcblxuICAgIGlmIChvbGREZWZpbml0aW9uSW5kZXggPiAtMSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBvbGREZWZpbml0aW9uSW5kZXgsIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIG5ld0RlZmluaXRpb24pXG4gICAgfVxuICB9XG5cbiAgcGFyc2UoY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcnVsZU5vZGUgPSBudWxsO1xuXG4gICAgY29udGV4dC5pbmNyZWFzZURlcHRoKCk7XG5cbiAgICBjb25zdCB0b29EZWVwID0gY29udGV4dC5pc1Rvb0RlZXAoKTtcblxuICAgIGlmICh0b29EZWVwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXJzZSB0cmVlIGlzIHRvbyBkZWVwIGF0IHJ1bGUgXCIke3RoaXMubmFtZX1cIi5gKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkLFxuICAgICAgICBkZWZpbml0aW9uTm9kZXM7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNvbWUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGRlZmluaXRpb25Ob2RlcyA9IFtdO1xuXG4gICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBkZWZpbml0aW9uTm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBkZWZpbml0aW9uTm9kZXMsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHRoaXMuTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgICBydWxlTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29udGV4dC5kZWNyZWFzZURlcHRoKCk7XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IGRlZmluaXRpb24ucGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBtdWx0aUxpbmUgPSB0cnVlKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIG11bHRpTGluZSA9IG11bHRpTGluZSAmJiAoZGVmaW5pdGlvbnNMZW5ndGggPiAxKTsgIC8vL1xuXG4gICAgY29uc3QgbWF4aW11bVBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IHRoaXMuZGVmaW5pdGlvbnMucmVkdWNlKChkZWZpbml0aW9uc1N0cmluZywgZGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBkZWZpbml0aW9uU3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9XG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgfCAke2RlZmluaXRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9IHwgJHtkZWZpbml0aW9uU3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uc1N0cmluZztcbiAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nTGVuZ3RoID0gbWF4aW11bVJ1bGVOYW1lTGVuZ3RoIC0gcnVsZU5hbWVMZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKTtcblxuICAgIGNvbnN0IHNlbWljb2xvblN0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcblxuJHttYXhpbXVtUGFkZGluZ30gICA7YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgO1wiLFxuICAgICAgICAgIHN0cmluZyA9IGBcblxuJHt0aGlzLm5hbWV9JHtwYWRkaW5nfSA6Oj0gJHtkZWZpbml0aW9uc1N0cmluZ30ke3NlbWljb2xvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZShDbGFzcywgcnVsZSkge1xuICAgIGlmIChydWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bGUgPSBDbGFzcztcbiAgICAgIENsYXNzID0gUnVsZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gcnVsZS5nZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IHJ1bGUuZ2V0Tm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBydWxlID0gbmV3IENsYXNzKG5hbWUsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9ERVBUSCA9IDk5O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX01BWElNVU1fREVQVEggfSBmcm9tIFwiLi9kZWZhdWx0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy5pbmRleCA9IGluZGV4O1xuXHRcdHRoaXMuZGVwdGggPSBkZXB0aDtcbiAgICB0aGlzLm1heGltdW1EZXB0aCA9IG1heGltdW1EZXB0aDtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuXHRnZXRJbmRleCgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbmRleDtcblx0fVxuXG4gIGdldERlcHRoKCkge1xuICAgIHJldHVybiB0aGlzLmRlcHRoO1xuICB9XG5cblx0Z2V0TWF4aW11bURlcHRoKCkge1xuXHRcdHJldHVybiB0aGlzLm1heGltdW1EZXB0aDtcblx0fVxuXG5cdGdldFNhdmVkSW5kZXgoKSB7XG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHRoaXMuaW5kZXg7IC8vL1xuICBcbiAgICByZXR1cm4gc2F2ZWRJbmRleDtcbiAgfVxuXG4gIGdldE5leHRUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW47XG4gIH1cblxuICBnZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpIHtcblx0XHRsZXQgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gIFx0Y29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gIFx0d2hpbGUgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgXHRcdGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXSxcblx0XHRcdFx0XHRcdHRva2VuU2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCk7XG5cbiAgXHRcdGlmICh0b2tlblNpZ25pZmljYW50KSB7XG4gIFx0XHQgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSB0b2tlbjsgLy8vXG5cblx0XHRcdFx0bmV4dFNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1x0Ly8vXG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG4gIFx0fVxuXG5cdFx0cmV0dXJuIG5leHRTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IGZhbHNlO1xuXG4gICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXG4gICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBuZXh0VG9rZW4uaXNXaGl0ZXNwYWNlVG9rZW4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNUb29EZWVwKCkge1xuICAgIGNvbnN0IHRvb0RlZXAgPSAodGhpcy5kZXB0aCA+IHRoaXMubWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiB0b29EZWVwO1xuICB9XG5cblx0YmFja3RyYWNrKHNhdmVkSW5kZXgpIHtcblx0XHR0aGlzLmluZGV4ID0gc2F2ZWRJbmRleDsgIC8vL1xuXHR9XG5cbiAgc2V0SW5kZXgoaW5kZXgpIHtcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBpbmNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgrKztcbiAgfVxuXG4gIGRlY3JlYXNlRGVwdGgoKSB7XG4gICAgdGhpcy5kZXB0aC0tO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgcnVsZU1hcCkge1xuICAgIGNvbnN0IGluZGV4ID0gMCxcblx0XHRcdFx0XHRkZXB0aCA9IDAsXG5cdFx0XHRcdFx0bWF4aW11bURlcHRoID0gREVGQVVMVF9NQVhJTVVNX0RFUFRILFxuXHRcdFx0XHRcdGNvbnRleHQgPSBuZXcgQ29udGV4dChydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgbGFzdCwgcHVzaCwgZmlsdGVyLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbihhcnJheSkgeyByZXR1cm4gYXJyYXkuZmlsdGVyKChlbnRyeSwgaW5kZXgpID0+IGlzRXZlbihpbmRleCkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmltcG9ydCB7IE5FV19MSU5FLCBFTVBUWV9TVFJJTkcsIFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORTtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU0lOR0xFX1NQQUNFO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEJBUiwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFtudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbl0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBQYXJzZVRyZWU7ICAvLy9cbiAgICB9XG4gICAgXG4gICAgY29uc3QgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgYXJncyA9IFtudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbl0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5lc0Zyb21EZXB0aChkZXB0aCkge1xuICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZGVwdGgpIHtcbiAgICBsaW5lc1tpbmRleCsrXSA9IEVNUFRZX1NUUklORztcbiAgfVxuXG4gIHJldHVybiBsaW5lcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgdG9rZW5JbmRleGVzID0gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cnVsZU5hbWV9JHt0b2tlbkluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0tJHtsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgO1xuXG4gIHJldHVybiB0b2tlbkluZGV4ZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBEQVNILCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSCksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucykge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZVBhcnNlVHJlZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGZpcnN0KGNoaWxkTm9kZVBhcnNlVHJlZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSAwO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gTWF0aC5tYXgoY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCAtIHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoO1xuXG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2hpbGROb2Rlc1BhcnNlVHJlZSwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZS5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICBjb25zdCBib3R0b21NYXJnaW5EZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCAtIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQoY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucyk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gY2hpbGQgbm9kZXMgYXQgcnVsZSAnJHtydWxlTmFtZX0nLmApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdW5kZWZpbmVkLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVzaCwgZmlyc3QsIGFsbEJ1dEZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldEZpcnN0UGFydCgpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBmaXJzdFBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0c0xlbmd0aCgpIHtcbiAgICBjb25zdCBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHBhcnRzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsQnV0Rmlyc3RQYXJ0cygpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdFBhcnRzID0gYWxsQnV0Rmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gYWxsQnV0Rmlyc3RQYXJ0cztcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBpbmRleCwgY29udGV4dCwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7IC8vL1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSB0cnVlO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4KytdO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnRzLCBub2RlcywgaW5kZXgsIGNvbnRleHQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGNvbnN0IHBhcnRzTm9kZXMgPSBbXTtcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KTtcblxuICAgIGlmIChwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICAgIHBhcnNlZCA9IHJ1bGVOYW1lUGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIGNvbnRleHQpKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnQge1xuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc0Vwc2lsb25QYXJ0KCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gZmFsc2U7XG4gICAgXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgY2xvbmUoUGFydCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgUGFydCguLi5yZW1haW5pbmdBcmd1bWVudHMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB1bmRlZmluZWQsIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYFske3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGV9XWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQobmFtZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IFBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IFJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IEVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgUnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBEb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IFdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgRW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IERlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IFF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IERlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3QgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgPSBcIm5vV2hpdGVzcGFjZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJsb29rQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBcInJlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9wdGlvbmFsUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwib25lT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcInplcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFwic2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5hbWVOb2RlIGZyb20gXCIuLi9ub2RlL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOYW1lTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBjbG9uZShQYXJ0LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBQYXJ0KC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICBwYXJzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IHF1ZXN0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE9wdGlvbmFsUGFydFBhcnQsIHRoaXMucGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG4gIFxuICBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZShQYXJ0KSB7IHJldHVybiBzdXBlci5jbG9uZShQYXJ0LCB0aGlzLnBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9uZU9yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBwYXJzZVBhcnQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnQucGFyc2UocGFydHNOb2RlcywgY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cblxuICAgICAgcGFyc2VQYXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFydC5wYXJzZShwYXJ0c05vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoY291bnQgIT09IDApO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IHBsdXMsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBzdXBlci5hc1N0cmluZyhvcGVyYXRvclN0cmluZyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShPbmVPck1vcmVQYXJ0c1BhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVBhcnRzUGFydCBleHRlbmRzIENvbGxlY3Rpb25PZlBhcnRzUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gWmVyb09yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBjb25zdCBwYXJzZVBhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBhc3RlcmlzaywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFplcm9Pck1vcmVQYXJ0c1BhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgUXVhbnRpZmllclJ1bGVOYW1lLCBSdWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL2JuZi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIGxvb2tBaGVhZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgdHlwZSA9IFJ1bGVOYW1lUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG5cbiAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgfVxuICBcbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBpc0xvb2tBaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb29rQWhlYWQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIHNldExvb2tBaGVhZChsb29rQWhlYWQpIHtcbiAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgfVxuXG4gIGZpbmRSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlTWFwID0gY29udGV4dC5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZmluZFJ1bGUoY29udGV4dCk7XG5cbiAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bGVOb2RlID0gcnVsZS5wYXJzZShjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIHBhcnNlZCA9IChydWxlTm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2xhbWF0aW9uTWFyayA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7bG9va0FoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShSdWxlTmFtZVBhcnQsIHRoaXMucnVsZU5hbWUsIHRoaXMubG9va0FoZWFkKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBUZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWxcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUsIE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHRoaXJkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZU5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zTm9kZSA9IHRoaXJkQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc05vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBzdXBlcigpO1xuICAgIFxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoVGVybWluYWxTeW1ib2xQYXJ0LCB0aGlzLmNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBOYW1lUnVsZU5hbWUsIERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc2VwYXJhdG9yLCB0ZXJtaW5hdG9yIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gc2VwYXJhdG9yLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB0ZXJtaW5hdG9yLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZSA9IE5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChuYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOb2RlIGZyb20gXCIuLi9ub2RlL3J1bGVcIjtcbmltcG9ydCBSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBuZXcgUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVycm9yTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdpbGRjYXJkUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yTm9kZSBmcm9tIFwiLi4vbm9kZS9lcnJvclwiO1xuaW1wb3J0IEVycm9yRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9lcnJvclwiO1xuXG5pbXBvcnQgeyBFcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBFcnJvclJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXJyb3JEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRXJyb3JOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVwc2lsb25Ob2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IEVwc2lsb25Ob2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZXBzaWxvbk5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGwsXG4gICAgICAgICAgZXBzaWxvbk5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oRXBzaWxvbk5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRXBzaWxvbk5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBFcHNpbG9uTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25Ob2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbk5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGlzRXBzaWxvblBhcnQoKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbjsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFcHNpbG9uUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gbmV3IEVwc2lsb25QYXJ0KCk7XG5cbiAgICByZXR1cm4gZXBzaWxvblBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRXBzaWxvbk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25Ob2RlIGZyb20gXCIuLi9ub2RlL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgRXBzaWxvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50ID0gZXBzaWxvbixcbiAgICAgICAgICBlcHNpbG9uVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gRXBzaWxvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVwc2lsb25Ob2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBDaG9pY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5pbXBvcnQgeyBldmVuLCBhbGxCdXRGaXJzdEFuZExhc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICBjb25zdCB0eXBlID0gQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuICAgIFxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuICBcbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdGhpcy5wYXJ0cy5zb21lKChwYXJ0KSA9PiB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG4gICAgXG4gICAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gfCAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICB9LCBudWxsKSxcbiAgICAgICAgICBzdHJpbmcgPSBgKCAke3BhcnRzU3RyaW5nfSApYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShDaG9pY2VPZlBhcnRzUGFydCwgdGhpcy5wYXJ0cyk7IH1cblxuICBzdGF0aWMgZnJvbU5vZGVzKG5vZGVzKSB7XG4gICAgY29uc3QgYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3Qobm9kZXMpO1xuXG4gICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgIC8vL1xuICAgIFxuICAgIGNvbnN0IGV2ZW5Ob2RlcyA9IGV2ZW4obm9kZXMpO1xuXG4gICAgbm9kZXMgPSBldmVuTm9kZXM7ICAvLy9cblxuICAgIGNvbnN0IGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHBhcnRzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgcmV0dXJuIGNob2ljZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUsIEVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWUgPSBSdWxlUnVsZU5hbWUsXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZSA9IEVycm9yUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZXJyb3JSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERvY3VtZW50Tm9kZSBmcm9tIFwiLi4vbm9kZS9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBEb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEb2N1bWVudFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRG9jdW1lbnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZSwgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGVybWluYWxOb2RlQ29udGVudDsgLy8vXG4gICAgXG4gICAgcmV0dXJuIHJ1bGVOYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJ1bGVOYW1lTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUnVsZU5hbWVOb2RlIGZyb20gXCIuLi9ub2RlL3J1bGVOYW1lXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuXG5pbXBvcnQgeyBSdWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTmFtZU5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoV2lsZGNhcmROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgV2lsZGNhcmROb2RlIGZyb20gXCIuLi9ub2RlL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IFdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB3aWxkY2FyZCxcbiAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24od2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBXaWxkY2FyZE5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkUsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFbmRPZkxpbmVOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZU5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgZW5kT2ZMaW5lTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgZW5kT2ZMaW5lTm9kZSA9IEVuZE9mTGluZU5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGVuZE9mTGluZU5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlbmRPZkxpbmVOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkU7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRW5kT2ZMaW5lTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVuZE9mTGluZU5vZGUgZnJvbSBcIi4uL25vZGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IEVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBFTkRfT0ZfTElORSxcbiAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydE5vZGUgZnJvbSBcIi4uL25vZGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBRdWFudGlmaWVyUnVsZU5hbWUsIE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBQYXJ0Tm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlLCAgLy8vXG4gICAgICAgICAgcGFydHMgPSBwYXJ0Tm9kZXMubWFwKChwYXJ0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnROb2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvblwiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25SdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBEZWZpbml0aW9uUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbkRlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZXZlbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZXZlbkNoaWxkTm9kZXMgPSBldmVuKGNoaWxkTm9kZXMpLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbk5vZGVzID0gZXZlbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbk5vZGVzLm1hcCgoZGVmaW5pdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZpbml0aW9uTm9kZS5nZW5lcmF0ZURlZmluaXRpb24oKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25zTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICBjb25zdCB0eXBlID0gU2VxdWVuY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgICAgICBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgICBjb25zdCBwYXJzZVBhcnRzID0gKG5vZGVzLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBhcnQgPSB0aGlzLnBhcnRzW2luZGV4KytdO1xuXG4gICAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZVBhcnQgPSAocGFydCwgbm9kZXMsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsICgpID0+IHBhcnNlUGFydHMocGFydHNOb2RlcywgaW5kZXgpKTtcblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfVxuXG4gICAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHBhcnRzTm9kZXMsIGluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJ0cy5ldmVyeSgocGFydCkgPT4ge1xuICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKHBhcnRzTm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShTZXF1ZW5jZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG5cbiAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydChwYXJ0cyk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBEZWZpbml0aW9uUnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNOb2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25zXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbnNEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IERlZmluaXRpb25zUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uc0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uc05vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhUZXJtaW5hbFBhcnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnROb2RlIGZyb20gXCIuLi9ub2RlL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgVGVybWluYWxQYXJ0UnVsZU5hbWUsIFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsIFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsIEVuZE9mTGluZVJ1bGVOYW1lLCBFcHNpbG9uUnVsZU5hbWUsIFdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGVwc2lsb25SdWxlTmFtZSA9IEVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lID0gV2lsZGNhcmRSdWxlTmFtZSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLFxuICAgICAgICAgIGVwc2lsb25SdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGVwc2lsb25SdWxlTmFtZSksXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHdpbGRjYXJkUnVsZU5hbWUpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oZW5kT2ZMaW5lUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ocmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxQYXJ0Tm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c05vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2hvaWNlT2ZQYXJ0c05vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNOb2RlIGZyb20gXCIuLi9ub2RlL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IENob2ljZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBDaG9pY2VPZlBhcnRzTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sTm9kZSBmcm9tIFwiLi4vbm9kZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24oc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gVGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFN5bWJvbE5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5vblRlcm1pbmFsUGFydE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgbG9va0FoZWFkID0gdHJ1ZTtcblxuICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSwgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydE5vZGUgZnJvbSBcIi4uL25vZGUvcGFydC9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsIENob2ljZU9mUGFydHNSdWxlTmFtZSwgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZSA9IENob2ljZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGNob2ljZU9mUGFydHNSdWxlTmFtZSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsUGFydE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2VxdWVuY2VPZlBhcnRzTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzTm9kZSBmcm9tIFwiLi4vbm9kZS9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2VxdWVuY2VPZlBhcnRzTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0UsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKE5vV2hpdGVzcGFjZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBub1doaXRlc3BhY2VOb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBjb250ZXh0LmlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCk7XG5cbiAgICBpZiAoIW5leHRUb2tlbldoaXRlc3BhY2VUb2tlbikge1xuICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAobm9XaGl0ZXNwYWNlTm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9XaGl0ZXNwYWNlTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0U7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoTm9XaGl0ZXNwYWNlUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5vV2hpdGVzcGFjZVBhcnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBOT19XSElURVNQQUNFLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydFwiO1xuXG5pbXBvcnQgeyBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gbmV3IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9XaGl0ZXNwYWNlUGFydE5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBleGNsYW1hdGlvbk1hcmssICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbk5vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKGZpcnN0TWF0Y2ggPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uLnRvU3RyaW5nKCksXG5cdFx0ICAgICAgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25QYXJ0LCB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKCg/OlxcXFwufFteXFwvXSkqKVxcLyQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IHRoaXMuZ2V0UmVndWxhckV4cHJlc3Npb24oKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gIH1cblxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHBhdHRlcm4gPSBzZWNvbmRNYXRjaCwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHBhdHRlcm4pOyAgLy8vXG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUmVndWxhckV4cHJlc3Npb25Ob2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvbk5vZGUgZnJvbSBcIi4uL25vZGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSwgIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUmVndWxhckV4cHJlc3Npb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih0ZXJtaW5hbFN5bWJvbENvbnRlbnQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGVybWluYWxTeW1ib2xDb250ZW50LCAgLy8vXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHF1ZXN0aW9uTWFyaywgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBwbHVzLCAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbk5vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFxbKFteXFxdXSspXSQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFNpZ25pZmljYW50VG9rZW5UeXBlTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlO1xuXG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlIGZyb20gXCIuLi9ub2RlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbih0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGU7ICAvLy9cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IFJ1bGUgZnJvbSBcIi4vcnVsZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBOYW1lUnVsZSBmcm9tIFwiLi9ydWxlL25hbWVcIjtcbmltcG9ydCBQYXJ0UnVsZSBmcm9tIFwiLi9ydWxlL3BhcnRcIjtcbmltcG9ydCBSdWxlUnVsZSBmcm9tIFwiLi9ydWxlL3J1bGVcIjtcbmltcG9ydCBFcnJvclJ1bGUgZnJvbSBcIi4vcnVsZS9lcnJvclwiO1xuaW1wb3J0IEVwc2lsb25SdWxlIGZyb20gXCIuL3J1bGUvZXBzaWxvblwiO1xuaW1wb3J0IERvY3VtZW50UnVsZSBmcm9tIFwiLi9ydWxlL2RvY3VtZW50XCI7XG5pbXBvcnQgUnVsZU5hbWVSdWxlIGZyb20gXCIuL3J1bGUvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZFJ1bGUgZnJvbSBcIi4vcnVsZS93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVJ1bGUgZnJvbSBcIi4vcnVsZS9lbmRPZkxpbmVcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi9ydWxlL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uc1J1bGUgZnJvbSBcIi4vcnVsZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4vcnVsZS90ZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi9ydWxlL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFJ1bGUgZnJvbSBcIi4vcnVsZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4vcnVsZS9ub25UZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNSdWxlIGZyb20gXCIuL3J1bGUvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZnJvbSBcIi4vcnVsZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvbG9va0FoZWFkTW9kaWZpZXJcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZnJvbSBcIi4vcnVsZS9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS96ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBmcm9tIFwiLi9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHN0YXJ0UnVsZUZyb21SdWxlcywgcnVsZU1hcEZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBDb250ZXh0LmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2UoY29udGV4dCksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cblx0cnVsZXNGcm9tVG9rZW5zKHRva2Vucykge1xuXHQgIGxldCBydWxlcztcblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBub2RlLmApO1xuICAgIH1cblxuICAgIHJ1bGVzID0gbm9kZS5nZW5lcmF0ZVJ1bGVzKFJ1bGUpO1xuXG4gICAgY29uc3QgcnVsZXNMZW5ndGggPSBydWxlcy5sZW5ndGg7XG5cbiAgICBpZiAocnVsZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIHJ1bGVzLmApO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVSdWxlID0gbmV3IE5hbWVSdWxlKCksXG4gICAgICAgICAgcGFydFJ1bGUgPSBuZXcgUGFydFJ1bGUoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZSgpLFxuICAgICAgICAgIGVycm9yUnVsZSA9IG5ldyBFcnJvclJ1bGUoKSxcbiAgICAgICAgICBlcHNpbG9uUnVsZSA9IG5ldyBFcHNpbG9uUnVsZSgpLFxuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudFJ1bGUoKSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGUgPSBuZXcgUnVsZU5hbWVSdWxlKCksXG4gICAgICAgICAgd2lsZGNhcmRSdWxlID0gbmV3IFdpbGRjYXJkUnVsZSgpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBuZXcgRW5kT2ZMaW5lUnVsZSgpLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gbmV3IFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGUgPSBuZXcgRGVmaW5pdGlvblJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGUgPSBuZXcgRGVmaW5pdGlvbnNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZSA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUgPSBuZXcgVGVybWluYWxTeW1ib2xSdWxlKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydFJ1bGUoKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25SdWxlKCksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUoKTtcblxuICAgIGxldCBydWxlcyA9IFtcbiAgICAgIGRvY3VtZW50UnVsZSxcbiAgICAgIHJ1bGVSdWxlLFxuICAgICAgbmFtZVJ1bGUsXG4gICAgICBkZWZpbml0aW9uc1J1bGUsXG4gICAgICBkZWZpbml0aW9uUnVsZSxcbiAgICAgIHBhcnRSdWxlLFxuICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIHRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSxcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUsXG4gICAgICBjaG9pY2VPZlBhcnRzUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIGVuZE9mTGluZVJ1bGUsXG4gICAgICBlcHNpbG9uUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIGJuZlBhcnNlciA9IG5ldyBCTkZQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKTtcbiAgICBcbiAgICByZXR1cm4gYm5mUGFyc2VyO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICBleHByZXNzaW9uICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgIHwgZXhwcmVzc2lvbl9cblxuICAgICAgICAgICAgICAgIDtcblxuICBvcGVyYXRvciAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgIHwgXCItXCJcblxuICAgICAgICAgICAgICAgIHwgXCIvXCJcblxuICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgIDtcblxuICB0ZXJtICAgICAgICA6Oj0gL1xcXFxkKy8gO1xuXG4gIGV4cHJlc3Npb25fIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICB8IHRlcm1cblxuICAgICAgICAgICAgICAgIDtcblxuICBleHByZXNzaW9ufiA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBCTkZQYXJzZXIgZnJvbSBcIi4uL2JuZi9wYXJzZXJcIjtcblxuaW1wb3J0IHsgc3RhcnRSdWxlRnJvbVJ1bGVzLCBydWxlTWFwRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUJORihibmYpIHtcbiAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IENvbnRleHQuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBjb25zdCB7IGJuZiB9ID0gQ2xhc3MsXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJORihDbGFzcywgYm5mKSB7XG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZXBzaWxvblwiO1xuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFcHNpbG9uUGFydCxcbiAgV2lsZGNhcmRQYXJ0LFxuICBFbmRPZkxpbmVQYXJ0LFxuICBUZXJtaW5hbFN5bWJvbFBhcnQsXG4gIFJlZ3VsYXJFeHByZXNzaW9uUGFydCxcbiAgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LFxuICBSdWxlTmFtZVBhcnQsXG4gIE9wdGlvbmFsUGFydFBhcnQsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnQsXG4gIE9uZU9yTW9yZVBhcnRzUGFydCxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQk5GUGFyc2VyIH0gZnJvbSBcIi4vYm5mL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY1BhcnNlciB9IGZyb20gXCIuL2Jhc2ljL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25QYXJzZXIgfSBmcm9tIFwiLi9jb21tb24vcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ibmYvcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL2JuZi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9ibmYvcGFydFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlZmluaXRpb24gfSBmcm9tIFwiLi9ibmYvZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuXG4gICAgc3R5bGVzaGVldCAgICAgICAgICAgICAgICAgOjo9ICggbWVkaWEgfCBydWxlU2V0IHwgZGVjbGFyYXRpb24gfCBlcnJvciApKyA7XG5cblxuXG5cblxuICAgIG1lZGlhICAgICAgICAgICAgICAgICAgICAgIDo6PSBcIkBtZWRpYVwiIG1lZGlhUXVlcmllcyBcIntcIiAoIHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiApKiBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJpZXMgICAgICAgICAgICAgICA6Oj0gIG1lZGlhUXVlcnkgKCBcIixcIiBtZWRpYVF1ZXJ5ICkqIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcnkgICAgICAgICAgICAgICAgIDo6PSAgXCJub3RcIj8gKCBcIm9ubHlcIj8gbWVkaWFUeXBlIFwiYW5kXCIgKT8gbWVkaWFFeHByZXNzaW9uICggXCJhbmRcIiBtZWRpYUV4cHJlc3Npb24gKSogO1xuXG5cbiAgICBtZWRpYVR5cGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiYWxsXCIgfCBcInByaW50XCIgfCBcInNjcmVlblwiIHwgXCJzcGVlY2hcIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYUV4cHJlc3Npb24gICAgICAgICAgICA6Oj0gIFwiKFwiIFtpZGVudGlmaWVyXSAoIFwiOlwiIGV4cHJlc3Npb24gKT8gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBydWxlU2V0ICAgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9ycyBcIntcIiBkZWNsYXJhdGlvbiogXCJ9XCIgO1xuICAgIFxuICAgIFxuICAgIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3IgKCBcIixcIiBzZWxlY3RvciApKiA7XG5cblxuICAgIHNlbGVjdG9yICAgICAgICAgICAgICAgICAgIDo6PSAgKCBjbGFzcyB8IHBzZXVkb0NsYXNzIHwgcHNldWRvRWxlbWVudCB8IGF0dHJpYnV0ZSApKyA7XG5cblxuXG5cblxuICAgIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgcHJvcGVydHkgXCI6XCIgZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSogcHJpb3JpdHk/IFwiO1wiIDtcblxuXG4gICAgY2xhc3MgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvQ2xhc3MgICAgICAgICAgICAgICAgOjo9ICBcIjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvRWxlbWVudCAgICAgICAgICAgICAgOjo9ICBcIjo6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBhcmVudGhlc2lzZWRTZWxlY3RvciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIoXCIgc2VsZWN0b3IgPE5PX1dISVRFU1BBQ0U+XCIpXCIgO1xuXG5cbiAgICBhdHRyaWJ1dGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiW1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIj1cIiB8IFwifj1cIiB8IFwifD1cIiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbaWRlbnRpZmllcl0gfCBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBwcm9wZXJ0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuICAgIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgIDo6PSAgdGVybSAoIFwiLFwiPyB0ZXJtICkqIDtcblxuXG4gICAgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgOjo9ICBcIiFpbXBvcnRhbnRcIiA7XG5cblxuXG5cblxuICAgIHRlcm0gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3VuYXJ5LW9wZXJhdG9yXT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3BlcmNlbnRhZ2VdIHwgW2ZyZXF1ZW5jeV0gfCBbZnJhY3Rpb25dIHwgW2xlbmd0aF0gfCBbYW5nbGVdIHwgW3JlbXNdIHwgW2Vtc10gfCBbdGltZV0gfCBbbnVtYmVyXSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nLWxpdGVyYWxdK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDU1NQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDU1NQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKENTU1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSSyA9IFwiIVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVYQ0xBTUFUSU9OX01BUksgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNsZWFyLCB0cmltLCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ByZWFkIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSkge1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgIHRoaXMudW5pcXVlID0gdW5pcXVlO1xuICB9XG5cbiAgYWRqdXN0Tm9kZXMobm9kZXMpIHtcbiAgICBpZiAodGhpcy51bmlxdWUpIHtcbiAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgIGNsZWFyKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJpbShub2RlcywgdGhpcy5zdGFydEluZGV4LCB0aGlzLmVuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gPT09IEVYQ0xBTUFUSU9OX01BUkspIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoXFxkKyk/KFxcLlxcLlxcLik/KFxcZCspP10vLFxuICAgICAgICAgICAgICBtYXRjaGVzID0gc3ByZWFkRXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBwYXJzZUludChzZWNvbmRNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdXJ0aE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YlF1ZXJ5ID0gc3ViUXVlcnk7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gICAgdGhpcy5pbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnQ7XG4gICAgdGhpcy5pbnRlcm1lZGlhdGVOb2RlcyA9IGludGVybWVkaWF0ZU5vZGVzO1xuICB9XG5cbiAgZXhlY3V0ZShub2RlLCBkZXB0aCA9IDAsIG1heGltdW1EZXB0aCA9IHRoaXMubWF4aW11bURlcHRoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHRoaXMuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gIH1cblxuICBmaW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBtYXhpbXVtRGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIG5vZGVOb25UZXJtaW5hbE5vZGUgPSAhbm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIGxldCBmb3VuZDtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnR5cGVzLCB0eXBlLCBXSUxEQ0FSRCk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnJ1bGVOYW1lcywgcnVsZU5hbWUsIFdJTERDQVJEKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzaW9uLCB0eXBlcykge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdWJFeHByZXNpb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyhhcmd1bWVudCkgeyByZXR1cm4gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBFbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgICAvLy9cbiAgICBzdWJjbGFzcyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCAhPT0gbnVsbCkge1xuICAgICAgc3ViY2xhc3MgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3M7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0IH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IHRhZ05hbWVzLCBzdHlsZXNVdGlsaXRpZXMsIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCJ3aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NcIjtcbmltcG9ydCB7IENMQVNTX05BTUUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBnZW5lcmF0ZUNsYXNzTmFtZSB9ID0gY2xhc3NOYW1lVXRpbGl0aWVzLFxuICAgICAgeyByZW5kZXJTdHlsZSwgcmVuZGVyU3R5bGVzLCBnZW5lcmF0ZVN0eWxlLCByZXRyaWV2ZVN0eWxlIH0gPSBzdHlsZXNVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIHdpdGhTdHlsZShDbGFzc09yRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbLi4uYXJndW1lbnRzXTsgIC8vL1xuXG4gICAgbGV0IHsgY2xhc3NOYW1lID0gbnVsbCB9ID0gQ2xhc3NPckZ1bmN0aW9uO1xuXG4gICAgY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKTtcblxuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSk7XG5cbiAgICBjb25zdCBDbGFzc09yRnVuY3Rpb25DbGFzcyA9IGlzQ2xhc3MoQ2xhc3NPckZ1bmN0aW9uKTtcblxuICAgIGlmIChDbGFzc09yRnVuY3Rpb25DbGFzcykge1xuICAgICAgY29uc3QgQ2xhc3MgPSBDbGFzc09yRnVuY3Rpb247ICAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgIHN0YXRpYyBmcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICByZXR1cm4gQ2xhc3MuZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGdW5jdGlvbiA9IENsYXNzT3JGdW5jdGlvbjsgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oQ2xhc3NPckZ1bmN0aW9uLCB7XG4gICAgICBjbGFzc05hbWVcbiAgICB9KTtcblxuICAgIHJldHVybiBDbGFzc09yRnVuY3Rpb247XG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24od2l0aFN0eWxlLCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXNcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG5cbnRhZ05hbWVzLmZvckVhY2goKHRhZ05hbWUpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpdGhTdHlsZSwgdGFnTmFtZSwge1xuICAgIGdldDogKCkgPT4gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c10sICAvLy9cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lKTtcblxuICAgICAgY29uc3QgRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICB9O1xuXG4gICAgICBPYmplY3QuYXNzaWduKEZ1bmN0aW9uLCB7XG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBGdW5jdGlvbjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpIHtcbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQ0xBU1NfTkFNRSkgPyBwcm9wZXJ0aWVzIDogeyAuLi5wcm9wZXJ0aWVzLCBjbGFzc05hbWUgfTsgLy8vXG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/OlxcXFwkXFxcXCR8XFxcXCR8XFxcXFxcXFxcXFxcKHxcXFxcXFxcXFxcXFwpfFxcXFxcXFxcXFxcXFt8XFxcXFxcXFxcXFxcXSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXig/Oi4rPyg/PVxcXFwkXFxcXCR8XFxcXCR8XFxcXFxcXFxcXFxcKHxcXFxcXFxcXFxcXFwpfFxcXFxcXFxcXFxcXFt8XFxcXFxcXFxcXFxcXSl8LispXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG5cclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoVGVYTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhUZVhMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhUZVhMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG4gICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIGRlbGltaXRlZFRlWCB8IGV2ZXJ5dGhpbmdFbHNlICkrIDtcbiAgICBcbiAgICBcbiAgICBcbiAgICBkZWxpbWl0ZWRUZVggICAgICAgICAgICAgICAgICAgIDo6PSAgIGRvbGxhckRlbGltaXRlciBpbmxpbmVUZVggZG9sbGFyRGVsaW1pdGVyIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgZG91YmxlRG9sbGFyRGVsaW1pdGVyIGRpc3BsYXlUZVggZG91YmxlRG9sbGFyRGVsaW1pdGVyIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgb3BlbmluZ0JyYWNrZXREZWxpbWl0ZXIgaW5saW5lVGVYIGNsb3NpbmdCcmFja2V0RGVsaW1pdGVyIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgb3BlbmluZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgZGlzcGxheVRlWCBjbG9zaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICBcblxuICAgIFxuICAgIGlubGluZVRlWCAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3VuYXNzaWduZWRdKiA7XG5cbiAgICBkaXNwbGF5VGVYICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt1bmFzc2lnbmVkXSogO1xuXG5cblxuICAgIGRvbGxhckRlbGltaXRlciAgICAgICAgICAgICAgICAgOjo9ICAgXCIkXCIgO1xuIFxuICAgIGRvdWJsZURvbGxhckRlbGltaXRlciAgICAgICAgICAgOjo9ICAgXCIkJFwiIDtcbiAgICBcblxuICAgIFxuICAgIG9wZW5pbmdCcmFja2V0RGVsaW1pdGVyICAgICAgICAgOjo9ICAgXCJcXFxcKFwiIDtcblxuICAgIGNsb3NpbmdCcmFja2V0RGVsaW1pdGVyICAgICAgICAgOjo9ICAgXCJcXFxcKVwiIDtcblxuICAgIG9wZW5pbmdTcXVhcmVCcmFja2V0RGVsaW1pdGVyICAgOjo9ICAgXCJcXFxcW1wiIDtcbiAgICBcbiAgICBjbG9zaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciAgIDo6PSAgIFwiXFxcXF1cIiA7XG4gICAgXG4gICAgXG4gICAgXG4gICAgZXZlcnl0aGluZ0Vsc2UgICAgICAgICAgICAgICAgICA6Oj0gICAuIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlWFBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFRlWFBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKFRlWFBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoVGVYUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpbkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhQbGFpbkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoUGxhaW5MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhQbGFpbkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gICggbGluZSB8IHZlcnRpY2FsU3BhY2UgKSsgO1xuXG5cbiAgICBsaW5lICAgICAgICAgICA6Oj0gIFt1bmFzc2lnbmVkXSsgO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoUGxhaW5QYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihQbGFpblBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoUGxhaW5QYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRtZUxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhSZWFkbWVMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFJlYWRtZUxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFJlYWRtZUxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gICggbGluZSB8IHZlcnRpY2FsU3BhY2UgKSsgO1xuXG5cbiAgICBsaW5lICAgICAgICAgICA6Oj0gIFt1bmFzc2lnbmVkXSsgO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRtZVBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFJlYWRtZVBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKFJlYWRtZVBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoUmVhZG1lUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/Oix8OnxcXFxcW3xcXFxcXXxcXFxce3xcXFxcfSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhSlNPTkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKE1ldGFKU09OTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhNZXRhSlNPTkxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKE1ldGFKU09OTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgIDo6PSAgKCBtZXRhSlNPTiBlcnJvciogKSB8IGVycm9yKyA7XG5cblxuICAgIG1ldGFKU09OICAgICAgICAgIDo6PSAgXCJ7XCIgKCAoIHJlcG9zaXRvcnlQYWlyICggXCIsXCIgZGVwZW5kZW5jaWVzUGFpciApPyApIHwgKCBkZXBlbmRlbmNpZXNQYWlyIFwiLFwiIHJlcG9zaXRvcnlQYWlyICkgKSBcIn1cIiA7XG5cblxuICAgIGRlcGVuZGVuY2llc1BhaXIgIDo6PSAgXCJcXFxcXCJkZXBlbmRlbmNpZXNcXFxcXCJcIiBcIjpcIiBkZXBlbmRlbmNpZXMgO1xuICAgIFxuICAgIFxuICAgIHJlcG9zaXRvcnlQYWlyICAgIDo6PSAgXCJcXFxcXCJyZXBvc2l0b3J5XFxcXFwiXCIgXCI6XCIgcmVwb3NpdG9yeSA7XG5cblxuICAgIGRlcGVuZGVuY2llcyAgICAgIDo6PSAgXCJbXCIgKGRlcGVuZGVuY3kgKCBcIixcIiBkZXBlbmRlbmN5ICkqKT8gXCJdXCIgO1xuICBcblxuICAgIGRlcGVuZGVuY3kgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIHJlcG9zaXRvcnkgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIGVycm9yICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05QYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhNZXRhSlNPTlBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKE1ldGFKU09OUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhNZXRhSlNPTlBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfD18Ojp8OnxcXFxcfC18XFxcXCh8XFxcXCkpfFxcXFxbfFxcXFxdfFxcXFwuXFxcXC5cXFxcLlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleXdvcmRcIjogXCJeKD86UnVsZXxBeGlvbXxUaGVvcmVtfExlbW1hfENvbmplY3R1cmV8TWV0YWxlbW1hfE1ldGF0aGVvcmVtfFByZW1pc2VzfFByZW1pc2V8Q29uY2x1c2lvbnxQcm9vZnxUaGVyZWZvcmV8U3VwcG9zZXxUaGVufEhlbmNlfFR5cGVzfFR5cGV8T3BlcmF0b3JzfE9wZXJhdG9yfFZhcmlhYmxlc3xWYXJpYWJsZXxDb25zdHJ1Y3RvcnN8Q29uc3RydWN0b3J8RGVwZW5kZW50VHlwZXN8RGVwZW5kZW50VHlwZXxEaXNqb2ludFR5cGVzfERpc2pvaW50VHlwZXxNZXRhdmFyaWFibGVzfE1ldGF2YXJpYWJsZXxBYmJyZXZpYXRpb25zfEFiYnJldmlhdGlvbnxMZXR8Zm9yfGZyb218YnkpXFxcXGJcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJyZXNlcnZlZFwiOiBcIl4oPzp1bmRlZmluZWR8ZnJlZXxub3R8aW58aXMpXFxcXGJcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltBLVphLXpcdTAzOTEtXHUwM0E5XHUwM0IxLVx1MDNDOV8wLTldK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuaW1wb3J0IHsgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuY29uc3QgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiMuKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmNvbnN0IHsgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5jb25zdCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5jb25zdCB7IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86Lis/KD89IyMjKXwuKyQpLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5pbXBvcnQgeyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcclxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XHJcbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcclxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG9yZW5jZUxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIG1hdGNoUmVndWxhckV4cHJlc3Npb24oY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IFNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhGbG9yZW5jZUxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoRmxvcmVuY2VMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhGbG9yZW5jZUxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIHJ1bGUgfCBheGlvbSB8IGxlbW1hIHwgdGhlb3JlbSB8IGNvbmplY3R1cmUgfCBtZXRhbGVtbWEgfCBtZXRhdGhlb3JlbSB8IG1ldGFjb25qZWN0dXJlIHwgZGVjbGFyYXRpb24gfCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSsgO1xuXG5cblxucnVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUnVsZVwiIFwiKFwiIGxhYmVscyBcIilcIiA8RU5EX09GX0xJTkU+ICggcHJlbWlzZSB8IHByZW1pc2VzICk/IGNvbmNsdXNpb24gbWV0YXByb29mPyA7XG5cbmF4aW9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIkF4aW9tXCIgXCIoXCIgbGFiZWxzIFwiKVwiIDxFTkRfT0ZfTElORT4gKCBpbmRpY2F0aXZlQ29uZGl0aW9uYWwgfCB1bnF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSA7IFxuXG5sZW1tYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJMZW1tYVwiIFwiKFwiIGxhYmVscyBcIilcIj8gPEVORF9PRl9MSU5FPiAoIGluZGljYXRpdmVDb25kaXRpb25hbCB8IHVucXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApIHByb29mIDtcblxudGhlb3JlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiVGhlb3JlbVwiIFwiKFwiIGxhYmVscyBcIilcIiA8RU5EX09GX0xJTkU+ICggaW5kaWNhdGl2ZUNvbmRpdGlvbmFsIHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkgcHJvb2YgO1xuXG5jb25qZWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJDb25qZWN0dXJlXCIgXCIoXCIgbGFiZWxzIFwiKVwiIDxFTkRfT0ZfTElORT4gKCBpbmRpY2F0aXZlQ29uZGl0aW9uYWwgfCB1bnF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSBwcm9vZj8gO1xuXG5tZXRhbGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhbGVtbWFcIiBcIihcIiBsYWJlbHMgXCIpXCIgPEVORF9PRl9MSU5FPiAoIG1ldGFJbmRpY2F0aXZlQ29uZGl0aW9uYWwgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkgbWV0YXByb29mIDtcblxubWV0YXRoZW9yZW0gICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTWV0YXRoZW9yZW1cIiBcIihcIiBsYWJlbHMgXCIpXCIgPEVORF9PRl9MSU5FPiAoIG1ldGFJbmRpY2F0aXZlQ29uZGl0aW9uYWwgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkgbWV0YXByb29mIDtcblxubWV0YWNvbmplY3R1cmUgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTWV0YWNvbmplY3R1cmVcIiBcIihcIiBsYWJlbHMgXCIpXCIgPEVORF9PRl9MSU5FPiAoIG1ldGFJbmRpY2F0aXZlQ29uZGl0aW9uYWwgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkgO1xuXG5cblxuZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB2YXJpYWJsZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZXJhdG9yRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkaXNqb2ludFR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkZXBlbmRlbnRUeXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgYWJicmV2aWF0aW9uRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdHlwZXNEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB2YXJpYWJsZXNEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBvcGVyYXRvcnNEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb25zdHJ1Y3RvcnNEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkaXNqb2ludFR5cGVzRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YXZhcmlhYmxlc0RlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRlcGVuZGVudFR5cGVzRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgYWJicmV2aWF0aW9uc0RlY2xhcmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG5cbnR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlR5cGVcIiB0eXBlTmFtZSAoIFwiOlwiIHR5cGVOYW1lICk/IDxFTkRfT0ZfTElORT4gO1xuIFxudmFyaWFibGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgIDo6PSAgIFwiVmFyaWFibGVcIiB2YXJpYWJsZU5hbWUgXCI6XCIgdHlwZU5hbWUgPEVORF9PRl9MSU5FPiA7XG4gXG5vcGVyYXRvckRlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgOjo9ICAgXCJPcGVyYXRvclwiIGV4cHJlc3Npb24gKCBcIjpcIiB0eXBlTmFtZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbmNvbnN0cnVjdG9yRGVjbGFyYXRpb24gICAgICAgICAgICAgICA6Oj0gICBcIkNvbnN0cnVjdG9yXCIgdGVybSAoIFwiOlwiIHR5cGVOYW1lICk/IDxFTkRfT0ZfTElORT4gO1xuIFxuZGlzam9pbnRUeXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgIDo6PSAgIFwiRGlzam9pbnRUeXBlXCIgdHlwZU5hbWUgXCI6XCIgdHlwZU5hbWVzIDxFTkRfT0ZfTElORT4gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5tZXRhdmFyaWFibGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhdmFyaWFibGVcIiBtZXRhdmFyaWFibGVOYW1lIHR5cGVQYXJhbWV0ZXI/IFwiOlwiICggXCJTdGF0ZW1lbnRcIiB8IFwiQ29udGV4dFwiICkgPEVORF9PRl9MSU5FPiA7XG4gXG5kZXBlbmRlbnRUeXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgOjo9ICAgXCJEZXBlbmRlbnRUeXBlXCIgdHlwZU5hbWUgdHlwZVBhcmFtZXRlciBcIjpcIiB0eXBlTmFtZSA8RU5EX09GX0xJTkU+IDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYWJicmV2aWF0aW9uRGVjbGFyYXRpb24gICAgICAgICAgICAgIDo6PSAgIFwiQWJicmV2aWF0aW9uXCIgYWJicmV2aWF0aW9uIDxFTkRfT0ZfTElORT4gO1xuXG50eXBlc0RlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJUeXBlc1wiIHR5cGVOYW1lcyAoIFwiOlwiIHR5cGVOYW1lICk/IDxFTkRfT0ZfTElORT4gO1xuXG52YXJpYWJsZXNEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgOjo9ICAgXCJWYXJpYWJsZXNcIiB2YXJpYWJsZU5hbWUgKCBcIixcIiB2YXJpYWJsZU5hbWUgKSsgXCI6XCIgdHlwZU5hbWUgPEVORF9PRl9MSU5FPiA7XG4gXG5vcGVyYXRvcnNEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgOjo9ICAgXCJPcGVyYXRvcnNcIiBleHByZXNzaW9uICggXCIsXCIgZXhwcmVzc2lvbiApKyAoIFwiOlwiIHR5cGVOYW1lICk/IDxFTkRfT0ZfTElORT4gO1xuIFxuY29uc3RydWN0b3JzRGVjbGFyYXRpb24gICAgICAgICAgICAgIDo6PSAgIFwiQ29uc3RydWN0b3JzXCIgdGVybSAoIFwiLFwiIHRlcm0gKSsgKCBcIjpcIiB0eXBlTmFtZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbmRpc2pvaW50VHlwZXNEZWNsYXJhdGlvbiAgICAgICAgICAgICA6Oj0gICBcIkRpc2pvaW50VHlwZXNcIiB0eXBlTmFtZXMgXCI6XCIgdHlwZU5hbWVzIDxFTkRfT0ZfTElORT4gO1xuIFxubWV0YXZhcmlhYmxlc0RlY2xhcmF0aW9uICAgICAgICAgICAgIDo6PSAgIFwiTWV0YXZhcmlhYmxlc1wiIG1ldGF2YXJpYWJsZU5hbWUgdHlwZVBhcmFtZXRlcj8gKCBcIixcIiBtZXRhdmFyaWFibGVOYW1lIHR5cGVQYXJhbWV0ZXI/ICkrIFwiOlwiICggXCJTdGF0ZW1lbnRcIiB8IFwiQ29udGV4dFwiICkgPEVORF9PRl9MSU5FPiA7XG4gXG5kZXBlbmRlbnRUeXBlc0RlY2xhcmF0aW9uICAgICAgICAgICAgOjo9ICAgXCJEZXBlbmRlbnRUeXBlc1wiIHR5cGVOYW1lIHR5cGVQYXJhbWV0ZXIgKCBcIixcIiB0eXBlTmFtZSB0eXBlUGFyYW1ldGVyICkrIFwiOlwiIHR5cGVOYW1lIDxFTkRfT0ZfTElORT4gO1xuIFxuYWJicmV2aWF0aW9uc0RlY2xhcmF0aW9uICAgICAgICAgICAgIDo6PSAgIFwiQWJicmV2aWF0aW9uc1wiIGFiYnJldmlhdGlvbiAoIFwiLFwiIGFiYnJldmlhdGlvbiApKyA8RU5EX09GX0xJTkU+IDtcbiBcblxuICBcbnByZW1pc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByZW1pc2VcIiA8RU5EX09GX0xJTkU+ICggdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApIDtcblxucHJlbWlzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUHJlbWlzZXNcIiA8RU5EX09GX0xJTkU+ICggdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApICggdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWROb25zZW5zZSApKyA7XG5cbmNvbmNsdXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbmNsdXNpb25cIiA8RU5EX09GX0xJTkU+ICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkgO1xuXG5cblxubWV0YXByb29mICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUHJvb2ZcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXN0YXRlbWVudERlZmluaXRpb24qXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25zZW5zZURlZmluaXRpb24qXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhUHJvb2ZEZXJpdmF0aW9uPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxubWV0YVByb29mRGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgIDo6PSAgICggbWV0YVN1YmxlbW1hIHwgcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHF1YWxpZmllZFN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkrICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmVmb3JlXCIgPEVORF9PRl9MSU5FPiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5tZXRhSW5kaWNhdGl2ZUNvbmRpdGlvbmFsICAgICAgICAgICAgOjo9ICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiAoIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTm9uc2Vuc2UgKSsgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkhlbmNlXCIgPEVORF9PRl9MSU5FPiAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcblxubWV0YVN1YmxlbW1hICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiU3VwcG9zZVwiIDxFTkRfT0ZfTElORT4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1ldGFTdWJsZW1tYSB8IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApKyBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtZXRhU3VibGVtbWEgfCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+ICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkgO1xuXG5cblxucHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUHJvb2ZcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50RGVmaW5pdGlvbipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbnNlbnNlRGVmaW5pdGlvbipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb29mRGVyaXZhdGlvbj8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZFN0YXRlbWVudCB8IHF1YWxpZmllZE5vbnNlbnNlICkgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxucHJvb2ZEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggc3VibGVtbWEgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApKyBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmVmb3JlXCIgPEVORF9PRl9MSU5FPiA7XG5cbmluZGljYXRpdmVDb25kaXRpb25hbCAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+ICggdW5xdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE5vbnNlbnNlICkrIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJIZW5jZVwiIDxFTkRfT0ZfTElORT4gKCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcblxuc3VibGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiU3VwcG9zZVwiIDxFTkRfT0ZfTElORT4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN1YkxlbW1hIHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgcXVhbGlmaWVkTm9uc2Vuc2UgKSsgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3ViTGVtbWEgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJIZW5jZVwiIDxFTkRfT0ZfTElORT4gKCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCBxdWFsaWZpZWROb25zZW5zZSApIDtcblxuXG5cbm1ldGFzdGF0ZW1lbnREZWZpbml0aW9uICAgICAgICAgICAgICA6Oj0gICBcIkxldFwiIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5zdGF0ZW1lbnREZWZpbml0aW9uICAgICAgICAgICAgICAgICAgOjo9ICAgXCJMZXRcIiB1bnF1YWxpZmllZFN0YXRlbWVudCA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5ub25zZW5zZURlZmluaXRpb24gICAgICAgICAgICAgICAgICAgOjo9ICAgXCJMZXRcIiB1bnF1YWxpZmllZE5vbnNlbnNlIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG51bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgICAgICAgICAgICAgOjo9ICAgbWV0YXN0YXRlbWVudCEgPEVORF9PRl9MSU5FPiA7XG5cbnVucXVhbGlmaWVkU3RhdGVtZW50ICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQhIDxFTkRfT0ZfTElORT4gO1xuXG51bnF1YWxpZmllZE5vbnNlbnNlICAgICAgICAgICAgICAgICAgOjo9ICAgbm9uc2Vuc2UhIDxFTkRfT0ZfTElORT4gO1xuXG5cblxucXVhbGlmaWVkTWV0YXN0YXRlbWVudCAgICAgICAgICAgICAgIDo6PSAgIG1ldGFzdGF0ZW1lbnQhIHF1YWxpZmljYXRpb24/IDxFTkRfT0ZfTElORT4gO1xuXG5xdWFsaWZpZWRTdGF0ZW1lbnQgICAgICAgICAgICAgICAgICAgOjo9ICAgc3RhdGVtZW50ISBxdWFsaWZpY2F0aW9uPyA8RU5EX09GX0xJTkU+IDtcblxucXVhbGlmaWVkTm9uc2Vuc2UgICAgICAgICAgICAgICAgICAgIDo6PSAgIG5vbnNlbnNlISBxdWFsaWZpY2F0aW9uPyA8RU5EX09GX0xJTkU+IDtcblxuXG5cbm5vbnNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIFtuYW1lXSB8IFtjdXN0b21dIHwgW3NwZWNpYWxdIHwgW3Jlc2VydmVkXSB8IFt1bmFzc2lnbmVkXSApKyA7XG5cblxuXG5xdWFsaWZpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcImJ5XCIgfCBcImZyb21cIiApIHJlZmVyZW5jZSA7XG5cblxuXG50eXBlUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0eXBlTmFtZSBcIilcIiApIDtcblxuXG5cbmFiYnJldmlhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbY3VzdG9tXSBcImZvclwiIFtjdXN0b21dIHwgbmFtZSBcImZvclwiIG5hbWUgO1xuXG5cblxubWV0YXZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIG1ldGF2YXJpYWJsZU5hbWUgKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtIFwiKVwiICk/IDtcblxucmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHJlZmVyZW5jZU5hbWUgKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtIFwiKVwiICk/IDtcblxuY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIGNvbnRleHROYW1lICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybSBcIilcIiApPyA7XG5cbmxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBsYWJlbE5hbWUgKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtIFwiKVwiICk/IDtcblxuXG5cbnR5cGVOYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB0eXBlTmFtZSAoIFwiLFwiIHR5cGVOYW1lICkqIDtcblxubGFiZWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIGxhYmVsICggXCIsXCIgbGFiZWwgKSogO1xuXG5cblxubWV0YXZhcmlhYmxlTmFtZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSA7XG5cbnJlZmVyZW5jZU5hbWUgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gO1xuXG52YXJpYWJsZU5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtcblxuY29udGV4dE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSA7XG5cbmxhYmVsTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gO1xuXG50eXBlTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtcblxubmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSA7XG5cblxuXG52ZXJ0aWNhbFNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgPEVORF9PRl9MSU5FPisgO1xuXG5cblxuZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIC4gO2A7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBsZXhpY2FsUGF0dGVybiA9IFwiXCI7XHJcblxyXG5leHBvcnQgY29uc3QgdGVybUJORiA9IGB0ZXJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgbmFtZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA7XHJcblxyXG5leHBvcnQgY29uc3QgZXhwcmVzc2lvbkJORiA9IGBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCIoXCIgZXhwcmVzc2lvbiBcIilcIlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHRlcm0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgO1xyXG5cclxuZXhwb3J0IGNvbnN0IHN0YXRlbWVudEJORiA9IGBzdGF0ZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCIoXCIgc3RhdGVtZW50IFwiKVwiXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgZXhwcmVzc2lvbiBcIj1cIiBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBleHByZXNzaW9uXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgO1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldGFzdGF0ZW1lbnRCTkYgPSBgbWV0YXN0YXRlbWVudCAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIG1ldGFzdGF0ZW1lbnQgXCIpXCJcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb250ZXh0RGVmaW5pdGlvbiBcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHByb29mQXNzZXJ0aW9uXHJcbiAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHR5cGVBc3NlcnRpb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBtZXRhdmFyaWFibGUgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgc3VicHJvb2YgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xyXG5cclxuY29udGV4dERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgIDo6PSAgIGNvbnRleHQgXCI9XCIgKCBqdWRnZW1lbnQgfCBjb250ZXh0ICkgKCBcIixcIiAoIGp1ZGdlbWVudCB8IGNvbnRleHQgKSApKiA7XHJcblxyXG5wcm9vZkFzc2VydGlvbiAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgY29udGV4dCBcInwtXCIganVkZ2VtZW50IDtcclxuIFxyXG50eXBlQXNzZXJ0aW9uICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCB0eXBlIHwgZXhwcmVzc2lvbiApIFwiOlwiIHR5cGVOYW1lIFxyXG5cclxuanVkZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHJlZmVyZW5jZSBcIjo6XCIgbWV0YXN0YXRlbWVudCA7XHJcblxyXG5zdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJbXCIgbWV0YXN0YXRlbWVudCBcIl1cIiBcIi4uLlwiIG1ldGFzdGF0ZW1lbnQgO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBsZXhpY2FsUGF0dGVybixcclxuICB0ZXJtQk5GLFxyXG4gIGV4cHJlc3Npb25CTkYsXHJcbiAgc3RhdGVtZW50Qk5GLFxyXG4gIG1ldGFzdGF0ZW1lbnRCTkZcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5pbXBvcnQgeyB0ZXJtQk5GLCBleHByZXNzaW9uQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYgfSBmcm9tIFwiLi9kZWZhdWx0Q3VzdG9tR3JhbW1hclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG9yZW5jZVBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEZsb3JlbmNlUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikge1xuICAgIGJuZiA9IGBcbiAgICBcbiAgICAgICR7Ym5mfVxuICAgICAgXG4gICAgICAke3Rlcm1CTkZ9XG4gICAgICBcbiAgICAgICR7ZXhwcmVzc2lvbkJORn1cbiAgICAgIFxuICAgICAgJHtzdGF0ZW1lbnRCTkZ9XG4gICAgICBcbiAgICAgICR7bWV0YXN0YXRlbWVudEJORn1cbiAgICAgIFxuICAgIGA7IC8vL1xuXG4gICAgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEZsb3JlbmNlUGFyc2VyLCBibmYpO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhGbG9yZW5jZVBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgZXh0ZW5kcyBCTkZMZXhlciB7fVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZQYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIGV4dGVuZHMgQk5GUGFyc2VyIHt9XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl4uXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuaW1wb3J0IHsgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5MZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xuXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5MZXhlcik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuTGV4ZXIsIHJ1bGVzKTsgfVxuXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5MZXhlciwgZW50cmllcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gIGxleGljYWxQYXR0ZXJuICggdmVydGljYWxTcGFjZSB8IGVycm9yICkqIHwgKCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSsgO1xuXG5cbiAgICBsZXhpY2FsUGF0dGVybiA6Oj0gIFt1bmFzc2lnbmVkXSsgO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG4gICAgZXJyb3IgICAgICAgICAgOjo9ICAuIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVyblBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVyblBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVyblBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ3VzdG9tR3JhbW1hckxleGljYWxQYXR0ZXJuUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZVhMZXhlciB9IGZyb20gXCIuL3RlWC9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZVhQYXJzZXIgfSBmcm9tIFwiLi90ZVgvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsYWluTGV4ZXIgfSBmcm9tIFwiLi9wbGFpbi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblBhcnNlciB9IGZyb20gXCIuL3BsYWluL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFkbWVMZXhlciB9IGZyb20gXCIuL3JlYWRtZS9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFkbWVQYXJzZXIgfSBmcm9tIFwiLi9yZWFkbWUvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1ldGFKU09OTGV4ZXIgfSBmcm9tIFwiLi9tZXRhSlNPTi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXRhSlNPTlBhcnNlciB9IGZyb20gXCIuL21ldGFKU09OL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9yZW5jZUxleGVyIH0gZnJvbSBcIi4vZmxvcmVuY2UvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvcmVuY2VQYXJzZXIgfSBmcm9tIFwiLi9mbG9yZW5jZS9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi9mbG9yZW5jZS9kZWZhdWx0Q3VzdG9tR3JhbW1hclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyQk5GL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJCTkZQYXJzZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyQk5GL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5MZXhlciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5QYXJzZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm4vcGFyc2VyXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX1NUT1BTX0RSQUdHSU5HX09QVElPTiA9IFwiRVNDQVBFX0tFWV9TVE9QU19EUkFHR0lOR1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEVTQ0FQRV9LRVlfU1RPUFNfRFJBR0dJTkdfT1BUSU9OXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgUm93RGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJvd1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShSb3dEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJvd3NEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicm93c1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShSb3dzRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBDb2x1bW5EaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sdW1uXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbkRpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29sdW1uc0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb2x1bW5zXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbnNEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFNpemVhYmxlRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInNpemVhYmxlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNpemVhYmxlRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBBVVRPID0gXCJhdXRvXCI7XG5leHBvcnQgY29uc3QgQ1VSU09SID0gXCJjdXJzb3JcIjtcbmV4cG9ydCBjb25zdCBDT0xfUkVTSVpFID0gXCJjb2wtcmVzaXplXCI7XG5leHBvcnQgY29uc3QgUk9XX1JFU0laRSA9IFwicm93LXJlc2l6ZVwiO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRV9LRVlfQ09ERSA9IDI3O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHsgQVVUTywgQ1VSU09SLCBDT0xfUkVTSVpFLCBST1dfUkVTSVpFIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGJvZHkgPSBuZXcgQm9keSgpO1xuXG5sZXQgcHJldmlvdXNDdXJzb3I7ICAvLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblJlc2l6ZUN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gQ09MX1JFU0laRSkge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjtcblxuICAgIHNldEN1cnNvcihDT0xfUkVTSVpFKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm93UmVzaXplQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBST1dfUkVTSVpFKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yO1xuXG4gICAgc2V0Q3Vyc29yKFJPV19SRVNJWkUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldEN1cnNvcigpIHtcbiAgc2V0Q3Vyc29yKHByZXZpb3VzQ3Vyc29yKTsgLy8vXG59XG5cbmZ1bmN0aW9uIHNldEN1cnNvcihjdXJzb3IpIHtcbiAgY29uc3QgY3NzID0ge1xuICAgIGN1cnNvclxuICB9O1xuXG4gIGJvZHkuY3NzKGNzcyk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBib2R5LmNzcyhDVVJTT1IpIHx8IEFVVE87XG5cbiAgcmV0dXJuIGN1cnJlbnRDdXJzb3I7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBEUkFHX0VWRU5UX1RZUEUgPSBcImRyYWdcIjtcbmV4cG9ydCBjb25zdCBTVE9QX0RSQUdfRVZFTlRfVFlQRSA9IFwic3RvcCBkcmFnXCI7XG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR19FVkVOVF9UWVBFID0gXCJzdGFydCBkcmFnXCI7XG5leHBvcnQgY29uc3QgTU9VU0VVUF9CTFVSX0VWRU5UX1RZUEUgPSBcIm1vdXNldXAgYmx1clwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyB3aW5kb3csIEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4uL2Rpdi9zaXplYWJsZVwiO1xuXG5pbXBvcnQgeyByZXNldEN1cnNvciB9IGZyb20gXCIuLi9jdXJzb3JcIjtcbmltcG9ydCB7IEVTQ0FQRV9LRVlfQ09ERSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEVTQ0FQRV9LRVlfU1RPUFNfRFJBR0dJTkdfT1BUSU9OIH0gZnJvbSBcIi4uL29wdGlvbnNcIjtcbmltcG9ydCB7IERSQUdfRVZFTlRfVFlQRSwgU1RPUF9EUkFHX0VWRU5UX1RZUEUsIFNUQVJUX0RSQUdfRVZFTlRfVFlQRSwgTU9VU0VVUF9CTFVSX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5jbGFzcyBTcGxpdHRlckRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBpc09wdGlvblByZXNlbnQob3B0aW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uUHJlc2VudCA9ICEhdGhpcy5vcHRpb25zW29wdGlvbl07XG5cbiAgICByZXR1cm4gb3B0aW9uUHJlc2VudDtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzZXRPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5vcHRpb25zW29wdGlvbl0gPSB0cnVlO1xuICB9XG5cbiAgdW5zZXRPcHRpb24ob3B0aW9uKSB7XG4gICAgZGVsZXRlKHRoaXMub3B0aW9uc1tvcHRpb25dKTtcbiAgfVxuXG4gIG9uRHJhZyhkcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgb2ZmRHJhZyhkcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgb25TdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIG9mZlN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgb25TdGFydERyYWcoc3RvcERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gU1RBUlRfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgb2ZmU3RhcnREcmFnKHN0b3BEcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTtcblxuICAgIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiZGlzYWJsZWRcIik7XG4gIH1cblxuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmhhc0NsYXNzKFwiZGlzYWJsZWRcIik7XG4gICAgXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG5cbiAgaXNEcmFnZ2luZygpIHtcbiAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaGFzQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcbiAgICBcbiAgICByZXR1cm4gZHJhZ2dpbmc7XG4gIH1cbiAgXG4gIGdldERpcmVjdGlvbigpIHtcbiAgICBsZXQgZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbmV4dFNpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXROZXh0U2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KCk7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpIHtcbiAgICAgIGRpcmVjdGlvbiA9ICsxO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpIHtcbiAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb247XG4gIH1cblxuICBnZXRTaXplYWJsZURpdigpIHtcbiAgICBsZXQgc2l6ZWFibGVEaXY7XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKTtcblxuICAgIGlmIChuZXh0U2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdikge1xuICAgICAgc2l6ZWFibGVEaXYgPSBuZXh0U2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpIHtcbiAgICAgIHNpemVhYmxlRGl2ID0gcHJldmlvdXNTaWJsaW5nRWxlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVhYmxlRGl2O1xuICB9XG5cbiAgc3RhcnREcmFnKCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBlc2NhcGVLZXlTdG9wc0RyYWdnaW5nT3B0aW9uUHJlc2VudCA9IHRoaXMuaXNPcHRpb25QcmVzZW50KEVTQ0FQRV9LRVlfU1RPUFNfRFJBR0dJTkdfT1BUSU9OKTtcblxuICAgIGlmIChlc2NhcGVLZXlTdG9wc0RyYWdnaW5nT3B0aW9uUHJlc2VudCkge1xuICAgICAgd2luZG93Lm9uS2V5RG93bih0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZENsYXNzKFwiZHJhZ2dpbmdcIik7XG5cbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUpXG4gIH1cblxuICBzdG9wRHJhZygpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgICBlc2NhcGVLZXlTdG9wc0RyYWdnaW5nT3B0aW9uUHJlc2VudCA9IHRoaXMuaXNPcHRpb25QcmVzZW50KEVTQ0FQRV9LRVlfU1RPUFNfRFJBR0dJTkdfT1BUSU9OKTtcblxuICAgIGlmIChlc2NhcGVLZXlTdG9wc0RyYWdnaW5nT3B0aW9uUHJlc2VudCkge1xuICAgICAgd2luZG93Lm9mZktleURvd24odGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlKTtcbiAgfVxuXG4gIG1vdXNlVXBIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgICB0aGlzLnN0b3BEcmFnKCk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3Vyc29yKCk7XG4gICAgfVxuICB9XG5cbiAgbW91c2VPdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICAgIGlmICghZHJhZ2dpbmcpIHtcbiAgICAgICAgcmVzZXRDdXJzb3IoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBrZXlEb3duSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRVNDQVBFX0tFWV9DT0RFKSB7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gICAgICBpZiAoZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9wRHJhZygpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnNvcigpO1xuICAgIH1cbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZywgZGlzYWJsZWQgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgICAgc3RvcERyYWdIYW5kbGVyID0gb25TdG9wRHJhZywgLy8vXG4gICAgICAgICAgc3RhcnREcmFnSGFuZGxlciA9IG9uU3RhcnREcmFnOyAvLy9cblxuICAgIChkaXNhYmxlZCA9PT0gdHJ1ZSkgPyAvLy9cbiAgICAgIHRoaXMuZGlzYWJsZSgpIDpcbiAgICAgICAgdGhpcy5lbmFibGUoKTtcblxuICAgIGRyYWdIYW5kbGVyICYmIHRoaXMub25EcmFnKGRyYWdIYW5kbGVyKTtcbiAgICBzdG9wRHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gICAgc3RhcnREcmFnSGFuZGxlciAmJiB0aGlzLm9uU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gICAgd2luZG93Lm9uKE1PVVNFVVBfQkxVUl9FVkVOVF9UWVBFLCB0aGlzLm1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgIC8vL1xuXG4gICAgd2luZG93Lm9uTW91c2VNb3ZlKHRoaXMubW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9uTW91c2VEb3duKHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG4gICAgdGhpcy5vbk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMub25Nb3VzZU91dCh0aGlzLm1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IG9uRHJhZywgb25TdG9wRHJhZywgb25TdGFydERyYWcgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgICAgc3RvcERyYWdIYW5kbGVyID0gb25TdG9wRHJhZywgLy8vXG4gICAgICAgICAgc3RhcnREcmFnSGFuZGxlciA9IG9uU3RhcnREcmFnOyAvLy9cblxuICAgIGRyYWdIYW5kbGVyICYmIHRoaXMub2ZmRHJhZyhkcmFnSGFuZGxlcik7XG4gICAgc3RvcERyYWdIYW5kbGVyICYmIHRoaXMub2ZmU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyKTtcbiAgICBzdGFydERyYWdIYW5kbGVyICYmIHRoaXMub2ZmU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gICAgd2luZG93Lm9mZihNT1VTRVVQX0JMVVJfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7ICAvLy9cblxuICAgIHdpbmRvdy5vZmZNb3VzZU1vdmUodGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcblxuICAgIHRoaXMub2ZmTW91c2VEb3duKHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG4gICAgdGhpcy5vZmZNb3VzZU92ZXIodGhpcy5tb3VzZU92ZXJIYW5kbGVyLCB0aGlzKTtcbiAgICB0aGlzLm9mZk1vdXNlT3V0KHRoaXMubW91c2VPdXRIYW5kbGVyLCB0aGlzKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInNwbGl0dGVyXCJcbiAgfTtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJvbkRyYWdcIixcbiAgICBcIm9wdGlvbnNcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCJvblN0b3BEcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiXG4gIF07XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHsgb3B0aW9ucyA9IHt9IH0gPSBwcm9wZXJ0aWVzLFxuICAgICAgICAgIHNwbGl0dGVyRGl2ID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNwbGl0dGVyRGl2O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTcGxpdHRlckRpdilgXG5cbiAgZmxleC1zaHJpbms6IDA7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTcGxpdHRlciBmcm9tIFwiLi4vc3BsaXR0ZXJcIjtcblxuaW1wb3J0IHsgRFJBR19FVkVOVF9UWVBFIH0gZnJvbSBcIi4uLy4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IGNvbHVtblJlc2l6ZUN1cnNvciB9IGZyb20gXCIuLi8uLi9jdXJzb3JcIjtcblxuY2xhc3MgVmVydGljYWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgbW91c2VPdmVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb2x1bW5SZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBtb3VzZU1vdmVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgeyBwYWdlWCB9ID0gZXZlbnQsXG4gICAgICAgICAgbW91c2VMZWZ0ID0gcGFnZVgsICAvLy9cbiAgICAgICAgICBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICAgIHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpO1xuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzTW91c2VMZWZ0ID0gdGhpcy5nZXRQcmV2aW91c01vdXNlTGVmdCgpLFxuICAgICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSB0aGlzLmdldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCgpLFxuICAgICAgICAgICAgICByZWxhdGl2ZU1vdXNlTGVmdCA9IG1vdXNlTGVmdCAtIHByZXZpb3VzTW91c2VMZWZ0O1xuXG4gICAgICAgIGxldCBzaXplYWJsZURpdldpZHRoID0gcHJldmlvdXNTaXplYWJsZURpdldpZHRoIC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZUxlZnQ7XG5cbiAgICAgICAgY29uc3Qgd2lkdGggPSBzaXplYWJsZURpdldpZHRoLCAvLy9cbiAgICAgICAgICAgICAgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFO1xuXG4gICAgICAgIHNpemVhYmxlRGl2LnNldFdpZHRoKHdpZHRoKTtcblxuICAgICAgICBzaXplYWJsZURpdldpZHRoID0gc2l6ZWFibGVEaXYuZ2V0V2lkdGgoKTsgIC8vL1xuXG4gICAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgc2l6ZWFibGVEaXZXaWR0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW91c2VEb3duSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHsgcGFnZVggfSA9IGV2ZW50LFxuICAgICAgICAgIG1vdXNlTGVmdCA9IHBhZ2VYLCAgLy8vXG4gICAgICAgICAgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKSxcbiAgICAgICAgICAgIHByZXZpb3VzTW91c2VMZWZ0ID0gbW91c2VMZWZ0LCAgLy8vXG4gICAgICAgICAgICBzaXplYWJsZURpdldpZHRoID0gc2l6ZWFibGVEaXYuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2V2lkdGg7ICAvLy9cblxuICAgICAgdGhpcy5zZXRQcmV2aW91c01vdXNlTGVmdChwcmV2aW91c01vdXNlTGVmdCk7XG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCk7XG5cbiAgICAgIGNvbHVtblJlc2l6ZUN1cnNvcigpO1xuXG4gICAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMuc3RhcnREcmFnKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNNb3VzZUxlZnQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgeyBwcmV2aW91c01vdXNlTGVmdCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gcHJldmlvdXNNb3VzZUxlZnQ7XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgeyBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggfSA9IHN0YXRlO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aDtcbiAgfVxuXG4gIHNldFByZXZpb3VzTW91c2VMZWZ0KHByZXZpb3VzTW91c2VMZWZ0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c01vdXNlTGVmdFxuICAgIH0pO1xuICB9XG5cbiAgc2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZURpdldpZHRoXG4gICAgfSk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgcHJldmlvdXNNb3VzZUxlZnQgPSBudWxsLFxuICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzTW91c2VMZWZ0LFxuICAgICAgcHJldmlvdXNTaXplYWJsZURpdldpZHRoXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZlcnRpY2FsXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZlcnRpY2FsU3BsaXR0ZXIpYFxuXG4gIHdpZHRoOiAxcmVtO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSBcIi4uL3NwbGl0dGVyXCI7XG5cbmltcG9ydCB7IHJvd1Jlc2l6ZUN1cnNvciB9IGZyb20gXCIuLi8uLi9jdXJzb3JcIjtcbmltcG9ydCB7IERSQUdfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi8uLi9ldmVudFR5cGVzXCI7XG5cbmNsYXNzIEhvcml6b250YWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgbW91c2VPdmVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICByb3dSZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBtb3VzZU1vdmVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgeyBwYWdlWSB9ID0gZXZlbnQsXG4gICAgICAgICAgbW91c2VUb3AgPSBwYWdlWSwgIC8vL1xuICAgICAgICAgIGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gICAgICBpZiAoZHJhZ2dpbmcpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKSxcbiAgICAgICAgICAgICAgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCk7XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNNb3VzZVRvcCA9IHRoaXMuZ2V0UHJldmlvdXNNb3VzZVRvcCgpLFxuICAgICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0ID0gdGhpcy5nZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KCksXG4gICAgICAgICAgICAgIHJlbGF0aXZlTW91c2VUb3AgPSBtb3VzZVRvcCAtIHByZXZpb3VzTW91c2VUb3A7XG5cbiAgICAgICAgbGV0IHNpemVhYmxlRGl2SGVpZ2h0ID0gcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCAtIGRpcmVjdGlvbiAqIHJlbGF0aXZlTW91c2VUb3A7XG5cbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gc2l6ZWFibGVEaXZIZWlnaHQsIC8vL1xuICAgICAgICAgICAgICBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEU7XG5cbiAgICAgICAgc2l6ZWFibGVEaXYuc2V0SGVpZ2h0KGhlaWdodCk7XG5cbiAgICAgICAgc2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdi5nZXRIZWlnaHQoKTsgIC8vL1xuXG4gICAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgc2l6ZWFibGVEaXZIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHBhZ2VZIH0gPSBldmVudCxcbiAgICAgICAgICBtb3VzZVRvcCA9IHBhZ2VZLCAgLy8vXG4gICAgICAgICAgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKSxcbiAgICAgICAgICAgIHByZXZpb3VzTW91c2VUb3AgPSBtb3VzZVRvcCwgIC8vL1xuICAgICAgICAgICAgc2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdi5nZXRIZWlnaHQoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdkhlaWdodDsgIC8vL1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzTW91c2VUb3AocHJldmlvdXNNb3VzZVRvcCk7XG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodChwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KTtcblxuICAgICAgcm93UmVzaXplQ3Vyc29yKCk7XG5cbiAgICAgIGlmICghZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5zdGFydERyYWcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c01vdXNlVG9wKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgcHJldmlvdXNNb3VzZVRvcCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gcHJldmlvdXNNb3VzZVRvcDtcbiAgfVxuXG4gIGdldFByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgeyBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0IH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0O1xuICB9XG5cbiAgc2V0UHJldmlvdXNNb3VzZVRvcChwcmV2aW91c01vdXNlVG9wKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c01vdXNlVG9wXG4gICAgfSk7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c01vdXNlVG9wID0gbnVsbCxcbiAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0ID0gbnVsbDtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcHJldmlvdXNNb3VzZVRvcCxcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiaG9yaXpvbnRhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShIb3Jpem9udGFsU3BsaXR0ZXIpYFxuXG4gIGhlaWdodDogMXJlbTtcblxuYDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3B0aW9ucyB9IGZyb20gXCIuL29wdGlvbnNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dEaXYgfSBmcm9tIFwiLi9kaXYvcm93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJvd3NEaXYgfSBmcm9tIFwiLi9kaXYvcm93c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5EaXYgfSBmcm9tIFwiLi9kaXYvY29sdW1uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtbnNEaXYgfSBmcm9tIFwiLi9kaXYvY29sdW1uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaXplYWJsZURpdiB9IGZyb20gXCIuL2Rpdi9zaXplYWJsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcIi4vZGl2L3NwbGl0dGVyL3ZlcnRpY2FsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhvcml6b250YWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmNvbnN0IFN1YkhlYWRpbmcgPSB3aXRoU3R5bGUuaDJgXG5cbiAgbWFyZ2luOiAxcmVtIDAgMC41cmVtIDA7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgXG4gIDpmaXJzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IFN1YkhlYWRpbmc7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFNpemVhYmxlRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgd2lkdGg6IDQ4cmVtO1xuICBtaW4td2lkdGg6IDI0cmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRleHRhcmVhKWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgaGVpZ2h0OiAyNHJlbTtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEJORigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBibmYgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldEJORiA9IHRoaXMuZ2V0Qk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Qk5GID0gdGhpcy5zZXRCTkYuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Qk5GLFxuICAgICAgc2V0Qk5GXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImJuZlwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJ1bGVOYW1lSW5wdXQgZXh0ZW5kcyBJbnB1dCB7XG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRSdWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UnVsZU5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicnVsZS1uYW1lXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShSdWxlTmFtZUlucHV0KWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbnNUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgc2V0VG9rZW5zKHRva2Vucykge1xuICAgIGxldCBsaW5lTnVtYmVyID0gMSxcbiAgICAgICAgcHJldmlvdXNUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCBodG1sID0gdG9rZW5zLnJlZHVjZSgoaHRtbCwgdG9rZW4pID0+IHtcbiAgICAgIGNvbnN0IHRva2VuSFRNTCA9IHRva2VuLmFzSFRNTCgpO1xuXG4gICAgICBpZiAocHJldmlvdXNUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgICBodG1sICs9IGAke2xpbmVOdW1iZXIrK306IGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmV2aW91c1Rva2VuRW5kT2ZMaW5lVG9rZW4gPSBwcmV2aW91c1Rva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgICBpZiAocHJldmlvdXNUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgICAgaHRtbCArPSBgJHtsaW5lTnVtYmVyKyt9OiBgO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGh0bWwgKz0gdG9rZW5IVE1MO1xuXG4gICAgICBwcmV2aW91c1Rva2VuID0gdG9rZW47XG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICB0aGlzLmh0bWwoaHRtbCk7XG4gIH1cblxuICBjbGVhclRva2VucygpIHtcbiAgICBjb25zdCBodG1sID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgdGhpcy5odG1sKGh0bWwpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBzZXRUb2tlbnMgPSB0aGlzLnNldFRva2Vucy5iaW5kKHRoaXMpLFxuICAgICAgICAgIGNsZWFyVG9rZW5zID0gdGhpcy5jbGVhclRva2Vucy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBzZXRUb2tlbnMsXG4gICAgICBjbGVhclRva2Vuc1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0b2tlbnNcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZW50VGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50OyAgLy8vXG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0Q29udGVudCA9IHRoaXMuZ2V0Q29udGVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldENvbnRlbnQgPSB0aGlzLnNldENvbnRlbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Q29udGVudCxcbiAgICAgIHNldENvbnRlbnRcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29udGVudFwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgICBpZiAocGFyc2VUcmVlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUuc2hpZnRMaW5lKCk7ICAvL1xuXG4gICAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUcmVlU3RyaW5nOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJzZVRyZWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0UGFyc2VUcmVlID0gdGhpcy5zZXRQYXJzZVRyZWUuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclBhcnNlVHJlZSA9IHRoaXMuY2xlYXJQYXJzZVRyZWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0UGFyc2VUcmVlLFxuICAgICAgY2xlYXJQYXJzZVRyZWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGV4aWNhbEVudHJpZXNUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgZ2V0TGV4aWNhbEVudHJpZXMoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgbGV4aWNhbEVudHJpZXMgPSBKU09OLnBhcnNlKHZhbHVlKTtcblxuICAgIHJldHVybiBsZXhpY2FsRW50cmllcztcbiAgfVxuXG4gIHNldExleGljYWxFbnRyaWVzKGxleGljYWxFbnRyaWVzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBKU09OLnN0cmluZ2lmeShsZXhpY2FsRW50cmllcywgbnVsbCwgXCIgIFwiKTtcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRMZXhpY2FsRW50cmllcyA9IHRoaXMuZ2V0TGV4aWNhbEVudHJpZXMuYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRMZXhpY2FsRW50cmllcyA9IHRoaXMuc2V0TGV4aWNhbEVudHJpZXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0TGV4aWNhbEVudHJpZXMsXG4gICAgICBzZXRMZXhpY2FsRW50cmllc1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJsZXhpY2FsLWVudHJpZXNcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuaW1wb3J0IFN1YkhlYWRpbmcgZnJvbSBcIi4vc3ViSGVhZGluZ1wiO1xuaW1wb3J0IFNpemVhYmxlRGl2IGZyb20gXCIuL2Rpdi9zaXplYWJsZVwiO1xuaW1wb3J0IEJORlRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2JuZlwiO1xuaW1wb3J0IFJ1bGVOYW1lSW5wdXQgZnJvbSBcIi4vaW5wdXQvcnVsZU5hbWVcIjtcbmltcG9ydCBUb2tlbnNUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS90b2tlbnNcIjtcbmltcG9ydCBDb250ZW50VGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvY29udGVudFwiO1xuaW1wb3J0IFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL3BhcnNlVHJlZVwiO1xuaW1wb3J0IExleGljYWxFbnRyaWVzVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvbGV4aWNhbEVudHJpZXNcIjtcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRUb2tlbnMoKSB7XG4gICAgY29uc3QgeyBMZXhlciB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IHRoaXMuZ2V0TGV4aWNhbEVudHJpZXMoKSxcbiAgICAgICAgICBlbnRyaWVzID0gbGV4aWNhbEVudHJpZXMsIC8vL1xuICAgICAgICAgIGxleGVyID0gTGV4ZXIuZnJvbUVudHJpZXMoZW50cmllcyksXG4gICAgICAgICAgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRva2VucyA9IGxleGVyLnRva2VuaXNlKGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIGdldFBhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgIGNvbnN0IHsgUGFyc2VyIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIGJuZiA9IHRoaXMuZ2V0Qk5GKCksXG4gICAgICAgICAgcGFyc2VyID0gUGFyc2VyLmZyb21CTkYoYm5mKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTWFwID0gcGFyc2VyLmdldFJ1bGVNYXAoKSxcbiAgICAgICAgICBydWxlID0gcnVsZU1hcFtydWxlTmFtZV0sXG4gICAgICAgICAgbm9kZSA9IHBhcnNlci5wYXJzZSh0b2tlbnMsIHJ1bGUpO1xuXG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHBhcnNlVHJlZSA9IG5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAga2V5VXBIYW5kbGVyKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLmdldFRva2VucygpLFxuICAgICAgICAgICAgcGFyc2VUcmVlID0gdGhpcy5nZXRQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgdGhpcy5zZXRUb2tlbnModG9rZW5zKTtcblxuICAgICAgdGhpcy5zZXRQYXJzZVRyZWUocGFyc2VUcmVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuXG4gICAgICB0aGlzLmNsZWFyVG9rZW5zKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJQYXJzZVRyZWUoKTtcbiAgICB9XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgcmVhZE9ubHkgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAga2V5VXBIYW5kbGVyID0gdGhpcy5rZXlVcEhhbmRsZXIuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoW1xuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPFNpemVhYmxlRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIExleGljYWwgZW50cmllc1xuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPExleGljYWxFbnRyaWVzVGV4dGFyZWEgb25LZXlVcD17a2V5VXBIYW5kbGVyfSByZWFkT25seT17cmVhZE9ubHl9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgQk5GXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Qk5GVGV4dGFyZWEgb25LZXlVcD17a2V5VXBIYW5kbGVyfSByZWFkT25seT17cmVhZE9ubHl9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgUnVsZSBuYW1lXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UnVsZU5hbWVJbnB1dCBvbktleVVwPXtrZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L1NpemVhYmxlRGl2PlxuICAgICAgICA8VmVydGljYWxTcGxpdHRlckRpdiAvPlxuICAgICAgICA8Q29sdW1uRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxDb250ZW50VGV4dGFyZWEgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFRva2Vuc1xuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPFRva2Vuc1RleHRhcmVhIC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgUGFyc2UgdHJlZVxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPFBhcnNlVHJlZVRleHRhcmVhIC8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0NvbHVtbkRpdj5cbiAgICAgIDwvQ29sdW1uc0Rpdj5cblxuICAgIF0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIGNvbnN0IHsgTGV4ZXIsIFBhcnNlciwgaW5pdGlhbENvbnRlbnQgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgeyBibmYgfSA9IFBhcnNlcixcbiAgICAgICAgICB7IGVudHJpZXMgfSA9IExleGVyLFxuICAgICAgICAgIGNvbnRlbnQgPSBpbml0aWFsQ29udGVudCwgLy8vXG4gICAgICAgICAgbGV4aWNhbEVudHJpZXMgPSBlbnRyaWVzOyAvLy9cblxuICAgIHRoaXMuc2V0Qk5GKGJuZik7XG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQpO1xuICAgIHRoaXMuc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpO1xuXG4gICAgdGhpcy5rZXlVcEhhbmRsZXIoKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmlldylgXG5cbiAgcGFkZGluZzogMXJlbTtcbiBcbmA7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBGbG9yZW5jZUxleGVyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cbmltcG9ydCB7IEZsb3JlbmNlUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvcmVuY2VWaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IEZsb3JlbmNlTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IEZsb3JlbmNlUGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGBcbiAgXG5SdWxlIChFeHBsb3Npb24pXG4gIENvbmNsdXNpb25cbiAgICBBXG5cbiAgYDtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImZsb3JlbmNlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGxhaW5MZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBQbGFpblBhcnNlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgTGV4ZXIgPSBQbGFpbkxleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBQbGFpblBhcnNlcjtcblxuICBzdGF0aWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBcIlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicGxhaW5cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNZXRhSlNPTkxleGVyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cbmltcG9ydCB7IE1ldGFKU09OUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05WaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IE1ldGFKU09OTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IE1ldGFKU09OUGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGB7XG4gIFwicmVwb3NpdG9yeVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9kamFsYmF0L3N0cmluZ3NcIixcbiAgXCJkZXBlbmRlbmNpZXNcIjogW1xuICAgIFwibmF0dXJhbC1udW1iZXJzXCIsXG4gICAgXCJhcml0aG1ldGljXCJcbiAgXVxufVxuYDtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1ldGEtanNvblwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEN1c3RvbUdyYW1tYXJCTkZMZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORlZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgZ2V0UGFyc2VUcmVlKHRva2Vucykge1xuICAgIGxldCBwYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgY29uc3QgeyBQYXJzZXIgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgcGFyc2VyID0gUGFyc2VyLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcnVsZU1hcCA9IHBhcnNlci5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbcnVsZU5hbWVdLFxuICAgICAgICAgIG5vZGUgPSBwYXJzZXIucGFyc2UodG9rZW5zLCBydWxlKTtcblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUgPSBub2RlLmFzUGFyc2VUcmVlKHRva2Vucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBMZXhlciA9IEN1c3RvbUdyYW1tYXJCTkZMZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gQ3VzdG9tR3JhbW1hckJORlBhcnNlcjtcblxuICBzdGF0aWMgcmVhZE9ubHkgPSB0cnVlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGBcblxuICAgICAgICAgICAgICAgICAgICAgICB0ZXJtICA6Oj0gIG9wZXJhdGlvbiAoIDxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgKT9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgICAgICAgICAgICAgICBvcGVyYXRpb24gIDo6PSAgXCJpbnNlcnRcIjxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIsXCIgZXhwcmVzc2lvbiBcIilcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJkZWxldGVcIjxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIsXCIgZXhwcmVzc2lvbiBcIilcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZW1wdHlcIjxOT19XSElURVNQQUNFPlwiKFwiPE5PX1dISVRFU1BBQ0U+XCIpXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbmA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjdXN0b20tZ3JhbW1hci1ibmZcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5MZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5QYXJzZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5WaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVybkxleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5QYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gXCI8PXw+PXw8fD58XFxcXCt8XFxcXC18XHUwMEQ3fFx1MDBGN1wiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY3VzdG9tLWdyYW1tYXItbGV4aWNhbC1wYXR0ZXJuXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwianV4dGFwb3NlXCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgRmxvcmVuY2VWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9mbG9yZW5jZVwiO1xuaW1wb3J0IFBsYWluVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvcGxhaW5cIjtcbmltcG9ydCBNZXRhSlNPTlZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3L21ldGFKU09OXCI7XG5pbXBvcnQgQ3VzdG9tR3JhbW1hckJORlZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3L2N1c3RvbUdyYW1tYXJCTkZcIjtcbmltcG9ydCBDdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5WaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9jdXN0b21HcmFtbWFyTGV4aWNhbFBhdHRlcm5cIjtcblxuY29uc3QgeyByZW5kZXJTdHlsZXMgfSA9IHdpdGhTdHlsZTtcblxubGV0IFZpZXc7XG5cbmNvbnN0IGJvZHkgPSBuZXcgQm9keSgpLFxuICAgICAgZXhhbXBsZSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpOyAgLy8vXG5cbnN3aXRjaCAoZXhhbXBsZSkge1xuICBjYXNlIFwiZmxvcmVuY2VcIiA6IFZpZXcgPSBGbG9yZW5jZVZpZXc7IGJyZWFrO1xuICBjYXNlIFwicGxhaW5cIiA6IFZpZXcgPSBQbGFpblZpZXc7IGJyZWFrO1xuICBjYXNlIFwibWV0YUpTT05cIiA6IFZpZXcgPSBNZXRhSlNPTlZpZXc7IGJyZWFrO1xuICBjYXNlIFwiY3VzdG9tR3JhbW1hckJORlwiIDogVmlldyA9IEN1c3RvbUdyYW1tYXJCTkZWaWV3OyBicmVhaztcbiAgY2FzZSBcImN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVyblwiIDogVmlldyA9IEN1c3RvbUdyYW1tYXJMZXhpY2FsUGF0dGVyblZpZXc7IGJyZWFrO1xufVxuXG5yZW5kZXJTdHlsZXMoKTtcblxuYm9keS5tb3VudChcblxuICA8VmlldyAvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBRXFCLFNBQU4sMkJBQVE7eUJBQ1QsS0FBSyxNQUFJO2dDQURGO0FBRWpCLGVBQUssTUFBTTtBQUNYLGVBQUssT0FBTzs7cUJBSEssU0FBTTs7WUFNekIsS0FBQTttQkFBQSxrQkFBUztBQUNQLHFCQUFPLEtBQUs7Ozs7WUFHZCxLQUFBO21CQUFBLG1CQUFVO0FBQ1IscUJBQU8sS0FBSzs7OztlQVhLOzt3QkFBQTs7Ozs7QUNGckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBRXFCLFNBQU4sMkJBQVE7eUJBQ1QsS0FBSyxNQUFNLE9BQU8sUUFBTTtnQ0FEakI7QUFFakIsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQ1osZUFBSyxRQUFRO0FBQ2IsZUFBSyxTQUFTOztxQkFMRyxTQUFNOztZQVF6QixLQUFBO21CQUFBLGtCQUFTO0FBQ1AscUJBQU8sS0FBSzs7OztZQUdkLEtBQUE7bUJBQUEsbUJBQVU7QUFDUixxQkFBTyxLQUFLOzs7O1lBR2QsS0FBQTttQkFBQSxvQkFBVztBQUNULHFCQUFPLEtBQUs7Ozs7WUFHZCxLQUFBO21CQUFBLHFCQUFZO0FBQ1YscUJBQU8sS0FBSzs7OztZQUdkLEtBQUE7bUJBQUEsb0JBQVc7QUFDVCxrQkFBTSxRQUFTLEtBQUssUUFBUSxLQUFLO0FBRWpDLHFCQUFPOzs7O1lBR1QsS0FBQTttQkFBQSxxQkFBWTtBQUNWLGtCQUFNLFNBQVUsS0FBSyxTQUFTLEtBQUs7QUFFbkMscUJBQU87Ozs7WUFHVCxLQUFBO21CQUFBLGdCQUFPLEtBQUs7QUFDVixtQkFBSyxNQUFNOzs7O1lBR2Is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
|