reaction-with-style 5.0.58 → 5.0.63
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 +402 -397
- package/lib/example/div/sizeable.js +17 -32
- package/lib/example/div/splitter/vertical.js +54 -53
- package/lib/example/events.js +4 -2
- package/lib/example/textarea/bnf.js +17 -33
- package/lib/example/textarea/content.js +17 -33
- package/lib/example/textarea/lexicalEntries.js +16 -31
- package/lib/example/textarea/parseTree.js +21 -36
- package/lib/example/textarea.js +35 -22
- package/lib/example/view.js +35 -31
- package/lib/utilities/query.js +2 -2
- package/package.json +3 -3
- package/src/example/div/sizeable.js +16 -26
- package/src/example/div/splitter/vertical.js +64 -76
- package/src/example/events.js +1 -0
- package/src/example/textarea/bnf.js +14 -28
- package/src/example/textarea/content.js +14 -28
- package/src/example/textarea/lexicalEntries.js +13 -25
- package/src/example/textarea/parseTree.js +19 -32
- package/src/example/textarea.js +30 -21
- package/src/example/view.js +44 -49
- package/src/utilities/query.js +1 -1
package/example.js
CHANGED
|
@@ -219,68 +219,6 @@
|
|
|
219
219
|
exports.default = ReactClass;
|
|
220
220
|
});
|
|
221
221
|
|
|
222
|
-
// node_modules/reaction/lib/reactComponent.js
|
|
223
|
-
var require_reactComponent = __commonJS((exports) => {
|
|
224
|
-
"use strict";
|
|
225
|
-
Object.defineProperty(exports, "__esModule", {
|
|
226
|
-
value: true
|
|
227
|
-
});
|
|
228
|
-
exports.default = void 0;
|
|
229
|
-
function _classCallCheck(instance, Constructor) {
|
|
230
|
-
if (!(instance instanceof Constructor)) {
|
|
231
|
-
throw new TypeError("Cannot call a class as a function");
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
function _defineProperties(target, props) {
|
|
235
|
-
for (var i = 0; i < props.length; i++) {
|
|
236
|
-
var descriptor = props[i];
|
|
237
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
238
|
-
descriptor.configurable = true;
|
|
239
|
-
if ("value" in descriptor)
|
|
240
|
-
descriptor.writable = true;
|
|
241
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
245
|
-
if (protoProps)
|
|
246
|
-
_defineProperties(Constructor.prototype, protoProps);
|
|
247
|
-
if (staticProps)
|
|
248
|
-
_defineProperties(Constructor, staticProps);
|
|
249
|
-
return Constructor;
|
|
250
|
-
}
|
|
251
|
-
var ReactComponent = /* @__PURE__ */ function() {
|
|
252
|
-
function ReactComponent2() {
|
|
253
|
-
_classCallCheck(this, ReactComponent2);
|
|
254
|
-
}
|
|
255
|
-
_createClass(ReactComponent2, [
|
|
256
|
-
{
|
|
257
|
-
key: "getInitialState",
|
|
258
|
-
value: function getInitialState() {
|
|
259
|
-
return {};
|
|
260
|
-
}
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
key: "getChildContext",
|
|
264
|
-
value: function getChildContext(context) {
|
|
265
|
-
return context;
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
key: "componentDidMount",
|
|
270
|
-
value: function componentDidMount() {
|
|
271
|
-
}
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
key: "componentWillUnmount",
|
|
275
|
-
value: function componentWillUnmount() {
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
]);
|
|
279
|
-
return ReactComponent2;
|
|
280
|
-
}();
|
|
281
|
-
exports.default = ReactComponent;
|
|
282
|
-
});
|
|
283
|
-
|
|
284
222
|
// node_modules/reaction/lib/mixins/reactElement.js
|
|
285
223
|
var require_reactElement = __commonJS((exports) => {
|
|
286
224
|
"use strict";
|
|
@@ -582,13 +520,13 @@
|
|
|
582
520
|
_createClass(ReactElement2, [
|
|
583
521
|
{
|
|
584
522
|
key: "mount",
|
|
585
|
-
value: function mount(parent,
|
|
523
|
+
value: function mount(parent, reference1, context) {
|
|
586
524
|
var _this = this;
|
|
587
525
|
this.context = context;
|
|
588
526
|
var childContext = this.getChildContext(context), children = (0, _array).guarantee(this.render());
|
|
589
527
|
_get(_getPrototypeOf(ReactElement2.prototype), "mount", this).call(this, parent, children);
|
|
590
528
|
children.forEach(function(child) {
|
|
591
|
-
var childParent = _this, childReference =
|
|
529
|
+
var childParent = _this, childReference = reference1;
|
|
592
530
|
child.mount(childParent, childReference, childContext);
|
|
593
531
|
});
|
|
594
532
|
this.componentDidMount();
|
|
@@ -662,7 +600,7 @@
|
|
|
662
600
|
key: "getChildReference",
|
|
663
601
|
value: function getChildReference() {
|
|
664
602
|
var parent = this.getParent(), child = this;
|
|
665
|
-
return
|
|
603
|
+
return reference(parent, child);
|
|
666
604
|
}
|
|
667
605
|
}
|
|
668
606
|
]);
|
|
@@ -671,34 +609,179 @@
|
|
|
671
609
|
Object.assign(ReactElement.prototype, _reactElement.default);
|
|
672
610
|
var _default = ReactElement;
|
|
673
611
|
exports.default = _default;
|
|
674
|
-
function
|
|
675
|
-
var
|
|
676
|
-
while (
|
|
612
|
+
function reference(parent, child) {
|
|
613
|
+
var reference2 = findReference(parent, child), parentDOMElement = parent.getDOMElement();
|
|
614
|
+
while (reference2 === null && parentDOMElement === null) {
|
|
677
615
|
child = parent;
|
|
678
616
|
parent = parent.getParent();
|
|
679
|
-
|
|
617
|
+
reference2 = findReference(parent, child);
|
|
680
618
|
parentDOMElement = parent.getDOMElement();
|
|
681
619
|
}
|
|
682
|
-
return
|
|
620
|
+
return reference2;
|
|
683
621
|
}
|
|
684
622
|
function findReference(parent, child) {
|
|
685
623
|
var children = parent.getChildren(), remainingChildren = (0, _array).remaining(child, children);
|
|
686
|
-
return remainingChildren.reduce(function(
|
|
687
|
-
if (
|
|
624
|
+
return remainingChildren.reduce(function(reference3, remainingChild) {
|
|
625
|
+
if (reference3 === null) {
|
|
688
626
|
var remainingChildDOMElement = remainingChild.getDOMElement();
|
|
689
627
|
if (remainingChildDOMElement !== null) {
|
|
690
|
-
|
|
628
|
+
reference3 = remainingChild;
|
|
691
629
|
} else {
|
|
692
630
|
child = null;
|
|
693
631
|
parent = remainingChild;
|
|
694
|
-
|
|
632
|
+
reference3 = findReference(parent, child);
|
|
695
633
|
}
|
|
696
634
|
}
|
|
697
|
-
return
|
|
635
|
+
return reference3;
|
|
698
636
|
}, null);
|
|
699
637
|
}
|
|
700
638
|
});
|
|
701
639
|
|
|
640
|
+
// node_modules/reaction/lib/reactComponent.js
|
|
641
|
+
var require_reactComponent = __commonJS((exports) => {
|
|
642
|
+
"use strict";
|
|
643
|
+
Object.defineProperty(exports, "__esModule", {
|
|
644
|
+
value: true
|
|
645
|
+
});
|
|
646
|
+
exports.default = void 0;
|
|
647
|
+
var _react = _interopRequireDefault2(require_react());
|
|
648
|
+
function _assertThisInitialized(self) {
|
|
649
|
+
if (self === void 0) {
|
|
650
|
+
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
651
|
+
}
|
|
652
|
+
return self;
|
|
653
|
+
}
|
|
654
|
+
function _classCallCheck(instance, Constructor) {
|
|
655
|
+
if (!(instance instanceof Constructor)) {
|
|
656
|
+
throw new TypeError("Cannot call a class as a function");
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
function _defineProperties(target, props) {
|
|
660
|
+
for (var i = 0; i < props.length; i++) {
|
|
661
|
+
var descriptor = props[i];
|
|
662
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
663
|
+
descriptor.configurable = true;
|
|
664
|
+
if ("value" in descriptor)
|
|
665
|
+
descriptor.writable = true;
|
|
666
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
670
|
+
if (protoProps)
|
|
671
|
+
_defineProperties(Constructor.prototype, protoProps);
|
|
672
|
+
if (staticProps)
|
|
673
|
+
_defineProperties(Constructor, staticProps);
|
|
674
|
+
return Constructor;
|
|
675
|
+
}
|
|
676
|
+
function _getPrototypeOf(o) {
|
|
677
|
+
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {
|
|
678
|
+
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
679
|
+
};
|
|
680
|
+
return _getPrototypeOf(o);
|
|
681
|
+
}
|
|
682
|
+
function _inherits(subClass, superClass) {
|
|
683
|
+
if (typeof superClass !== "function" && superClass !== null) {
|
|
684
|
+
throw new TypeError("Super expression must either be null or a function");
|
|
685
|
+
}
|
|
686
|
+
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
687
|
+
constructor: {
|
|
688
|
+
value: subClass,
|
|
689
|
+
writable: true,
|
|
690
|
+
configurable: true
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
if (superClass)
|
|
694
|
+
_setPrototypeOf(subClass, superClass);
|
|
695
|
+
}
|
|
696
|
+
function _interopRequireDefault2(obj) {
|
|
697
|
+
return obj && obj.__esModule ? obj : {
|
|
698
|
+
default: obj
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
function _possibleConstructorReturn(self, call) {
|
|
702
|
+
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
703
|
+
return call;
|
|
704
|
+
}
|
|
705
|
+
return _assertThisInitialized(self);
|
|
706
|
+
}
|
|
707
|
+
function _setPrototypeOf(o, p) {
|
|
708
|
+
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) {
|
|
709
|
+
o2.__proto__ = p2;
|
|
710
|
+
return o2;
|
|
711
|
+
};
|
|
712
|
+
return _setPrototypeOf(o, p);
|
|
713
|
+
}
|
|
714
|
+
var _typeof = function(obj) {
|
|
715
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
716
|
+
};
|
|
717
|
+
function _isNativeReflectConstruct() {
|
|
718
|
+
if (typeof Reflect === "undefined" || !Reflect.construct)
|
|
719
|
+
return false;
|
|
720
|
+
if (Reflect.construct.sham)
|
|
721
|
+
return false;
|
|
722
|
+
if (typeof Proxy === "function")
|
|
723
|
+
return true;
|
|
724
|
+
try {
|
|
725
|
+
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
|
|
726
|
+
}));
|
|
727
|
+
return true;
|
|
728
|
+
} catch (e) {
|
|
729
|
+
return false;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
function _createSuper(Derived) {
|
|
733
|
+
var hasNativeReflectConstruct = _isNativeReflectConstruct();
|
|
734
|
+
return function _createSuperInternal() {
|
|
735
|
+
var Super = _getPrototypeOf(Derived), result;
|
|
736
|
+
if (hasNativeReflectConstruct) {
|
|
737
|
+
var NewTarget = _getPrototypeOf(this).constructor;
|
|
738
|
+
result = Reflect.construct(Super, arguments, NewTarget);
|
|
739
|
+
} else {
|
|
740
|
+
result = Super.apply(this, arguments);
|
|
741
|
+
}
|
|
742
|
+
return _possibleConstructorReturn(this, result);
|
|
743
|
+
};
|
|
744
|
+
}
|
|
745
|
+
var ReactComponent = /* @__PURE__ */ function(ReactElement) {
|
|
746
|
+
_inherits(ReactComponent2, ReactElement);
|
|
747
|
+
var _super = _createSuper(ReactComponent2);
|
|
748
|
+
function ReactComponent2(props) {
|
|
749
|
+
_classCallCheck(this, ReactComponent2);
|
|
750
|
+
var _this;
|
|
751
|
+
_this = _super.call(this, props);
|
|
752
|
+
var initialState = _this.getInitialState();
|
|
753
|
+
_this.setInitialState(initialState);
|
|
754
|
+
return _this;
|
|
755
|
+
}
|
|
756
|
+
_createClass(ReactComponent2, [
|
|
757
|
+
{
|
|
758
|
+
key: "getInitialState",
|
|
759
|
+
value: function getInitialState() {
|
|
760
|
+
return {};
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
key: "getChildContext",
|
|
765
|
+
value: function getChildContext(context) {
|
|
766
|
+
return context;
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
key: "componentDidMount",
|
|
771
|
+
value: function componentDidMount() {
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
key: "componentWillUnmount",
|
|
776
|
+
value: function componentWillUnmount() {
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
]);
|
|
780
|
+
return ReactComponent2;
|
|
781
|
+
}(_react.default);
|
|
782
|
+
exports.default = ReactComponent;
|
|
783
|
+
});
|
|
784
|
+
|
|
702
785
|
// node_modules/reaction/lib/element/react/class.js
|
|
703
786
|
var require_class = __commonJS((exports) => {
|
|
704
787
|
"use strict";
|
|
@@ -1372,7 +1455,7 @@
|
|
|
1372
1455
|
value: function mount(parent, reference) {
|
|
1373
1456
|
var children = this.getChildren();
|
|
1374
1457
|
_get(_getPrototypeOf(VirtualDOMNode2.prototype), "mount", this).call(this, parent, children);
|
|
1375
|
-
|
|
1458
|
+
parentDOMElement(parent).insertBefore(this.domElement, referenceDOMElement(reference));
|
|
1376
1459
|
return this.domElement;
|
|
1377
1460
|
}
|
|
1378
1461
|
},
|
|
@@ -1397,17 +1480,17 @@
|
|
|
1397
1480
|
return VirtualDOMNode2;
|
|
1398
1481
|
}(_wrapNativeSuper(_element.default));
|
|
1399
1482
|
exports.default = VirtualDOMNode;
|
|
1400
|
-
function
|
|
1401
|
-
var
|
|
1402
|
-
while (
|
|
1483
|
+
function parentDOMElement(parent) {
|
|
1484
|
+
var parentDOMElement1 = parent.getDOMElement();
|
|
1485
|
+
while (parentDOMElement1 === null) {
|
|
1403
1486
|
parent = parent.getParent();
|
|
1404
|
-
|
|
1487
|
+
parentDOMElement1 = parent.getDOMElement();
|
|
1405
1488
|
}
|
|
1406
|
-
return
|
|
1489
|
+
return parentDOMElement1;
|
|
1407
1490
|
}
|
|
1408
|
-
function
|
|
1409
|
-
var
|
|
1410
|
-
return
|
|
1491
|
+
function referenceDOMElement(reference) {
|
|
1492
|
+
var referenceDOMElement1 = reference !== null ? reference.getDOMElement() : null;
|
|
1493
|
+
return referenceDOMElement1;
|
|
1411
1494
|
}
|
|
1412
1495
|
});
|
|
1413
1496
|
|
|
@@ -1590,9 +1673,11 @@
|
|
|
1590
1673
|
Object.defineProperty(exports, "__esModule", {
|
|
1591
1674
|
value: true
|
|
1592
1675
|
});
|
|
1593
|
-
exports.HTTP_WWW_W3_ORG_2000_SVG = exports.EMPTY_STRING = exports.CLASS_NAME = exports.HTML_FOR = exports.FUNCTION = exports.BOOLEAN = exports.OBJECT = exports.STRING = exports.CLASS = exports.FOR = void 0;
|
|
1676
|
+
exports.HTTP_WWW_W3_ORG_2000_SVG = exports.EMPTY_STRING = exports.CLASS_NAME = exports.HTML_FOR = exports.FUNCTION = exports.BOOLEAN = exports.OBJECT = exports.STRING = exports.CLASS = exports.REF = exports.FOR = void 0;
|
|
1594
1677
|
var FOR = "for";
|
|
1595
1678
|
exports.FOR = FOR;
|
|
1679
|
+
var REF = "ref";
|
|
1680
|
+
exports.REF = REF;
|
|
1596
1681
|
var CLASS = "class";
|
|
1597
1682
|
exports.CLASS = CLASS;
|
|
1598
1683
|
var STRING = "string";
|
|
@@ -1724,6 +1809,7 @@
|
|
|
1724
1809
|
exports.default = void 0;
|
|
1725
1810
|
var _virtualDOMNode = _interopRequireDefault2(require_virtualDOMNode());
|
|
1726
1811
|
var _virtualDOMElement = _interopRequireDefault2(require_virtualDOMElement());
|
|
1812
|
+
var _constants = require_constants();
|
|
1727
1813
|
function _assertThisInitialized(self) {
|
|
1728
1814
|
if (self === void 0) {
|
|
1729
1815
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
@@ -1887,7 +1973,7 @@
|
|
|
1887
1973
|
_this.setHandler(name, value);
|
|
1888
1974
|
} else if (_this.isAttributeName(name)) {
|
|
1889
1975
|
_this.setAttribute(name, value);
|
|
1890
|
-
} else if (name ===
|
|
1976
|
+
} else if (name === _constants.REF) {
|
|
1891
1977
|
var callback = value;
|
|
1892
1978
|
callback(_this.domElement);
|
|
1893
1979
|
}
|
|
@@ -1904,7 +1990,7 @@
|
|
|
1904
1990
|
{
|
|
1905
1991
|
key: "isHandlerName",
|
|
1906
1992
|
value: function isHandlerName(name) {
|
|
1907
|
-
return
|
|
1993
|
+
return /^on/.test(name);
|
|
1908
1994
|
}
|
|
1909
1995
|
}
|
|
1910
1996
|
]);
|
|
@@ -2755,9 +2841,9 @@
|
|
|
2755
2841
|
var mixins = reactClass.mixins;
|
|
2756
2842
|
assignMixins(mixins, element);
|
|
2757
2843
|
} else if (isSubclassOf(firstArgument, _reactComponent.default)) {
|
|
2758
|
-
var
|
|
2759
|
-
element =
|
|
2760
|
-
assignReactComponentMixins(
|
|
2844
|
+
var ReactComponentSubClass = firstArgument, reactComponent = new ReactComponentSubClass(props);
|
|
2845
|
+
element = reactComponent;
|
|
2846
|
+
assignReactComponentMixins(ReactComponentSubClass, element);
|
|
2761
2847
|
} else if ((typeof firstArgument === "undefined" ? "undefined" : _typeof(firstArgument)) === _constants.FUNCTION) {
|
|
2762
2848
|
var reactFunction = firstArgument, reactFunctionElement = new _function.default(reactFunction, props);
|
|
2763
2849
|
element = reactFunctionElement;
|
|
@@ -2790,11 +2876,12 @@
|
|
|
2790
2876
|
});
|
|
2791
2877
|
return children;
|
|
2792
2878
|
}
|
|
2793
|
-
function assignReactComponentMixins(
|
|
2794
|
-
var mixins =
|
|
2795
|
-
|
|
2796
|
-
if (
|
|
2797
|
-
|
|
2879
|
+
function assignReactComponentMixins(ReactComponentSubClass, element) {
|
|
2880
|
+
var mixins = ReactComponentSubClass.mixins;
|
|
2881
|
+
var ReactComponentSubClassPrototype = Object.getPrototypeOf(ReactComponentSubClass);
|
|
2882
|
+
if (ReactComponentSubClassPrototype !== _reactComponent.default) {
|
|
2883
|
+
ReactComponentSubClass = ReactComponentSubClassPrototype;
|
|
2884
|
+
assignReactComponentMixins(ReactComponentSubClass, element);
|
|
2798
2885
|
}
|
|
2799
2886
|
assignMixins(mixins, element);
|
|
2800
2887
|
}
|
|
@@ -7831,30 +7918,6 @@
|
|
|
7831
7918
|
return _super.apply(this, arguments);
|
|
7832
7919
|
}
|
|
7833
7920
|
_createClass(BasicLexer2, [
|
|
7834
|
-
{
|
|
7835
|
-
key: "matchBrokenComment",
|
|
7836
|
-
value: function matchBrokenComment(content, inComment) {
|
|
7837
|
-
return null;
|
|
7838
|
-
}
|
|
7839
|
-
},
|
|
7840
|
-
{
|
|
7841
|
-
key: "matchSingleLineComment",
|
|
7842
|
-
value: function matchSingleLineComment(content, inComment) {
|
|
7843
|
-
return null;
|
|
7844
|
-
}
|
|
7845
|
-
},
|
|
7846
|
-
{
|
|
7847
|
-
key: "matchMultiLineCommentInComment",
|
|
7848
|
-
value: function matchMultiLineCommentInComment(content, inComment) {
|
|
7849
|
-
return null;
|
|
7850
|
-
}
|
|
7851
|
-
},
|
|
7852
|
-
{
|
|
7853
|
-
key: "matchMultiLineCommentNotInComment",
|
|
7854
|
-
value: function matchMultiLineCommentNotInComment(content, inComment) {
|
|
7855
|
-
return null;
|
|
7856
|
-
}
|
|
7857
|
-
},
|
|
7858
7921
|
{
|
|
7859
7922
|
key: "matchRegularExpression",
|
|
7860
7923
|
value: function matchRegularExpression(content) {
|
|
@@ -24313,19 +24376,6 @@
|
|
|
24313
24376
|
_defineProperties(Constructor, staticProps);
|
|
24314
24377
|
return Constructor;
|
|
24315
24378
|
}
|
|
24316
|
-
function _defineProperty(obj, key, value) {
|
|
24317
|
-
if (key in obj) {
|
|
24318
|
-
Object.defineProperty(obj, key, {
|
|
24319
|
-
value,
|
|
24320
|
-
enumerable: true,
|
|
24321
|
-
configurable: true,
|
|
24322
|
-
writable: true
|
|
24323
|
-
});
|
|
24324
|
-
} else {
|
|
24325
|
-
obj[key] = value;
|
|
24326
|
-
}
|
|
24327
|
-
return obj;
|
|
24328
|
-
}
|
|
24329
24379
|
function _getPrototypeOf(o) {
|
|
24330
24380
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {
|
|
24331
24381
|
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
@@ -24407,7 +24457,7 @@
|
|
|
24407
24457
|
}
|
|
24408
24458
|
function _templateObject() {
|
|
24409
24459
|
var data = _taggedTemplateLiteral([
|
|
24410
|
-
"\n\n
|
|
24460
|
+
"\n\n width: 48rem;\n display: flex;\n min-width: 24rem;\n padding-left: 1rem;\n padding-right: 1rem;\n flex-direction: column;\n\n"
|
|
24411
24461
|
]);
|
|
24412
24462
|
_templateObject = function _templateObject2() {
|
|
24413
24463
|
return data;
|
|
@@ -24423,36 +24473,49 @@
|
|
|
24423
24473
|
return _super.apply(this, arguments);
|
|
24424
24474
|
}
|
|
24425
24475
|
_createClass(SizeableDiv2, [
|
|
24476
|
+
{
|
|
24477
|
+
key: "getWidth",
|
|
24478
|
+
value: function getWidth() {
|
|
24479
|
+
var firstChild = this.getFirstChild(), firstChildDOMElement = firstChild.getDOMElement(), firstChildDOMElementOffsetWidth = firstChildDOMElement.offsetWidth, width = firstChildDOMElementOffsetWidth;
|
|
24480
|
+
return width;
|
|
24481
|
+
}
|
|
24482
|
+
},
|
|
24483
|
+
{
|
|
24484
|
+
key: "setWidth",
|
|
24485
|
+
value: function setWidth(width) {
|
|
24486
|
+
width = "".concat(width, "px");
|
|
24487
|
+
this.setStyle(_constants.WIDTH, width);
|
|
24488
|
+
}
|
|
24489
|
+
},
|
|
24426
24490
|
{
|
|
24427
24491
|
key: "render",
|
|
24428
24492
|
value: function render(update) {
|
|
24429
|
-
var _this = this;
|
|
24430
24493
|
var _props = this.props, className = _props.className, children = _props.children;
|
|
24431
24494
|
return /* @__PURE__ */ _reaction2.React.createElement("div", {
|
|
24432
|
-
className: "".concat(className, " sizeable")
|
|
24433
|
-
ref: function(domElement) {
|
|
24434
|
-
_this.domElement = domElement;
|
|
24435
|
-
}
|
|
24495
|
+
className: "".concat(className, " sizeable")
|
|
24436
24496
|
}, children);
|
|
24437
24497
|
}
|
|
24438
24498
|
}
|
|
24439
24499
|
]);
|
|
24440
24500
|
return SizeableDiv2;
|
|
24441
24501
|
}(Component);
|
|
24442
|
-
_defineProperty(SizeableDiv, "mixins", [
|
|
24443
|
-
getWidth,
|
|
24444
|
-
setWidth
|
|
24445
|
-
]);
|
|
24446
24502
|
var _default = (0, _index2).default(SizeableDiv)(_templateObject());
|
|
24447
24503
|
exports.default = _default;
|
|
24448
|
-
|
|
24449
|
-
|
|
24450
|
-
|
|
24451
|
-
|
|
24452
|
-
|
|
24453
|
-
|
|
24454
|
-
|
|
24455
|
-
}
|
|
24504
|
+
});
|
|
24505
|
+
|
|
24506
|
+
// lib/example/events.js
|
|
24507
|
+
var require_events = __commonJS((exports) => {
|
|
24508
|
+
"use strict";
|
|
24509
|
+
Object.defineProperty(exports, "__esModule", {
|
|
24510
|
+
value: true
|
|
24511
|
+
});
|
|
24512
|
+
exports.MOUSEMOVE_EVENT = exports.MOUSEUP_EVENT = exports.KEYUP_EVENT = void 0;
|
|
24513
|
+
var KEYUP_EVENT = "keyup";
|
|
24514
|
+
exports.KEYUP_EVENT = KEYUP_EVENT;
|
|
24515
|
+
var MOUSEUP_EVENT = "mouseup";
|
|
24516
|
+
exports.MOUSEUP_EVENT = MOUSEUP_EVENT;
|
|
24517
|
+
var MOUSEMOVE_EVENT = "mousemove";
|
|
24518
|
+
exports.MOUSEMOVE_EVENT = MOUSEMOVE_EVENT;
|
|
24456
24519
|
});
|
|
24457
24520
|
|
|
24458
24521
|
// lib/example/textarea.js
|
|
@@ -24464,6 +24527,7 @@
|
|
|
24464
24527
|
exports.default = void 0;
|
|
24465
24528
|
var _index2 = _interopRequireDefault2(require_lib6());
|
|
24466
24529
|
var _reaction2 = require_lib();
|
|
24530
|
+
var _events = require_events();
|
|
24467
24531
|
function _assertThisInitialized(self) {
|
|
24468
24532
|
if (self === void 0) {
|
|
24469
24533
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
@@ -24599,41 +24663,52 @@
|
|
|
24599
24663
|
var _super = _createSuper(Textarea2);
|
|
24600
24664
|
function Textarea2() {
|
|
24601
24665
|
_classCallCheck(this, Textarea2);
|
|
24602
|
-
|
|
24666
|
+
var _this;
|
|
24667
|
+
_this = _super.apply(this, arguments);
|
|
24668
|
+
_defineProperty(_assertThisInitialized(_this), "onKeyUp", function(keyUpHandler) {
|
|
24669
|
+
var firstChild = _this.getFirstChild(), firstChildDOMElement = firstChild.getDOMElement();
|
|
24670
|
+
firstChildDOMElement.addEventListener(_events.KEYUP_EVENT, function(event) {
|
|
24671
|
+
keyUpHandler(event);
|
|
24672
|
+
});
|
|
24673
|
+
});
|
|
24674
|
+
return _this;
|
|
24603
24675
|
}
|
|
24604
24676
|
_createClass(Textarea2, [
|
|
24677
|
+
{
|
|
24678
|
+
key: "setValue",
|
|
24679
|
+
value: function setValue(value) {
|
|
24680
|
+
var firstChild = this.getFirstChild(), firstChildDOMElement = firstChild.getDOMElement();
|
|
24681
|
+
firstChildDOMElement.value = value;
|
|
24682
|
+
}
|
|
24683
|
+
},
|
|
24684
|
+
{
|
|
24685
|
+
key: "getValue",
|
|
24686
|
+
value: function getValue() {
|
|
24687
|
+
var firstChild = this.getFirstChild(), firstChildDOMElement = firstChild.getDOMElement();
|
|
24688
|
+
var value = firstChildDOMElement.value;
|
|
24689
|
+
return value;
|
|
24690
|
+
}
|
|
24691
|
+
},
|
|
24605
24692
|
{
|
|
24606
24693
|
key: "componentDidMount",
|
|
24607
24694
|
value: function componentDidMount() {
|
|
24608
|
-
var
|
|
24609
|
-
if (
|
|
24610
|
-
var keyUpHandler =
|
|
24695
|
+
var onKeyUp = this.props.onKeyUp;
|
|
24696
|
+
if (onKeyUp) {
|
|
24697
|
+
var keyUpHandler = onKeyUp;
|
|
24611
24698
|
this.onKeyUp(keyUpHandler);
|
|
24612
24699
|
}
|
|
24613
24700
|
}
|
|
24701
|
+
},
|
|
24702
|
+
{
|
|
24703
|
+
key: "componentWillUnmount",
|
|
24704
|
+
value: function componentWillUnmount() {
|
|
24705
|
+
}
|
|
24614
24706
|
}
|
|
24615
24707
|
]);
|
|
24616
24708
|
return Textarea2;
|
|
24617
24709
|
}(Component);
|
|
24618
|
-
_defineProperty(Textarea, "mixins", [
|
|
24619
|
-
onKeyUp,
|
|
24620
|
-
setValue,
|
|
24621
|
-
getValue
|
|
24622
|
-
]);
|
|
24623
24710
|
var _default = (0, _index2).default(Textarea)(_templateObject());
|
|
24624
24711
|
exports.default = _default;
|
|
24625
|
-
function onKeyUp(keyUpHandler) {
|
|
24626
|
-
this.domElement.addEventListener("keyup", function(event) {
|
|
24627
|
-
keyUpHandler(event);
|
|
24628
|
-
});
|
|
24629
|
-
}
|
|
24630
|
-
function setValue(value) {
|
|
24631
|
-
this.domElement.value = value;
|
|
24632
|
-
}
|
|
24633
|
-
function getValue() {
|
|
24634
|
-
var value = this.domElement.value;
|
|
24635
|
-
return value;
|
|
24636
|
-
}
|
|
24637
24712
|
});
|
|
24638
24713
|
|
|
24639
24714
|
// lib/example/textarea/bnf.js
|
|
@@ -24672,19 +24747,6 @@
|
|
|
24672
24747
|
_defineProperties(Constructor, staticProps);
|
|
24673
24748
|
return Constructor;
|
|
24674
24749
|
}
|
|
24675
|
-
function _defineProperty(obj, key, value) {
|
|
24676
|
-
if (key in obj) {
|
|
24677
|
-
Object.defineProperty(obj, key, {
|
|
24678
|
-
value,
|
|
24679
|
-
enumerable: true,
|
|
24680
|
-
configurable: true,
|
|
24681
|
-
writable: true
|
|
24682
|
-
});
|
|
24683
|
-
} else {
|
|
24684
|
-
obj[key] = value;
|
|
24685
|
-
}
|
|
24686
|
-
return obj;
|
|
24687
|
-
}
|
|
24688
24750
|
function _getPrototypeOf(o) {
|
|
24689
24751
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {
|
|
24690
24752
|
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
@@ -24762,37 +24824,34 @@
|
|
|
24762
24824
|
return _super.apply(this, arguments);
|
|
24763
24825
|
}
|
|
24764
24826
|
_createClass(BNFTextarea2, [
|
|
24827
|
+
{
|
|
24828
|
+
key: "getBNF",
|
|
24829
|
+
value: function getBNF() {
|
|
24830
|
+
var value = this.getValue(), bnf = value;
|
|
24831
|
+
return bnf;
|
|
24832
|
+
}
|
|
24833
|
+
},
|
|
24834
|
+
{
|
|
24835
|
+
key: "setBNF",
|
|
24836
|
+
value: function setBNF(bnf) {
|
|
24837
|
+
var value = bnf;
|
|
24838
|
+
this.setValue(value);
|
|
24839
|
+
}
|
|
24840
|
+
},
|
|
24765
24841
|
{
|
|
24766
24842
|
key: "render",
|
|
24767
24843
|
value: function render(update) {
|
|
24768
|
-
var _this = this;
|
|
24769
24844
|
var className = _textarea.default.className, children = this.props.children;
|
|
24770
24845
|
return /* @__PURE__ */ React.createElement("textarea", {
|
|
24771
24846
|
className: "".concat(className, " bnf"),
|
|
24772
|
-
spellCheck: "false"
|
|
24773
|
-
ref: function(domElement) {
|
|
24774
|
-
_this.domElement = domElement;
|
|
24775
|
-
}
|
|
24847
|
+
spellCheck: "false"
|
|
24776
24848
|
}, children);
|
|
24777
24849
|
}
|
|
24778
24850
|
}
|
|
24779
24851
|
]);
|
|
24780
24852
|
return BNFTextarea2;
|
|
24781
24853
|
}(_textarea.default);
|
|
24782
|
-
|
|
24783
|
-
getBNF,
|
|
24784
|
-
setBNF
|
|
24785
|
-
]);
|
|
24786
|
-
var _default = BNFTextarea;
|
|
24787
|
-
exports.default = _default;
|
|
24788
|
-
function getBNF() {
|
|
24789
|
-
var value = this.getValue(), bnf = value;
|
|
24790
|
-
return bnf;
|
|
24791
|
-
}
|
|
24792
|
-
function setBNF(bnf) {
|
|
24793
|
-
var value = bnf;
|
|
24794
|
-
this.setValue(value);
|
|
24795
|
-
}
|
|
24854
|
+
exports.default = BNFTextarea;
|
|
24796
24855
|
});
|
|
24797
24856
|
|
|
24798
24857
|
// lib/example/textarea/content.js
|
|
@@ -24831,19 +24890,6 @@
|
|
|
24831
24890
|
_defineProperties(Constructor, staticProps);
|
|
24832
24891
|
return Constructor;
|
|
24833
24892
|
}
|
|
24834
|
-
function _defineProperty(obj, key, value) {
|
|
24835
|
-
if (key in obj) {
|
|
24836
|
-
Object.defineProperty(obj, key, {
|
|
24837
|
-
value,
|
|
24838
|
-
enumerable: true,
|
|
24839
|
-
configurable: true,
|
|
24840
|
-
writable: true
|
|
24841
|
-
});
|
|
24842
|
-
} else {
|
|
24843
|
-
obj[key] = value;
|
|
24844
|
-
}
|
|
24845
|
-
return obj;
|
|
24846
|
-
}
|
|
24847
24893
|
function _getPrototypeOf(o) {
|
|
24848
24894
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {
|
|
24849
24895
|
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
@@ -24921,37 +24967,34 @@
|
|
|
24921
24967
|
return _super.apply(this, arguments);
|
|
24922
24968
|
}
|
|
24923
24969
|
_createClass(ContentTextarea2, [
|
|
24970
|
+
{
|
|
24971
|
+
key: "getContent",
|
|
24972
|
+
value: function getContent() {
|
|
24973
|
+
var value = this.getValue(), content = value;
|
|
24974
|
+
return content;
|
|
24975
|
+
}
|
|
24976
|
+
},
|
|
24977
|
+
{
|
|
24978
|
+
key: "setContent",
|
|
24979
|
+
value: function setContent(content) {
|
|
24980
|
+
var value = content;
|
|
24981
|
+
this.setValue(value);
|
|
24982
|
+
}
|
|
24983
|
+
},
|
|
24924
24984
|
{
|
|
24925
24985
|
key: "render",
|
|
24926
24986
|
value: function render(update) {
|
|
24927
|
-
var _this = this;
|
|
24928
24987
|
var className = _textarea.default.className, children = this.props.children;
|
|
24929
24988
|
return /* @__PURE__ */ React.createElement("textarea", {
|
|
24930
24989
|
className: "".concat(className, " content"),
|
|
24931
|
-
spellCheck: "false"
|
|
24932
|
-
ref: function(domElement) {
|
|
24933
|
-
_this.domElement = domElement;
|
|
24934
|
-
}
|
|
24990
|
+
spellCheck: "false"
|
|
24935
24991
|
}, children);
|
|
24936
24992
|
}
|
|
24937
24993
|
}
|
|
24938
24994
|
]);
|
|
24939
24995
|
return ContentTextarea2;
|
|
24940
24996
|
}(_textarea.default);
|
|
24941
|
-
|
|
24942
|
-
getContent,
|
|
24943
|
-
setContent
|
|
24944
|
-
]);
|
|
24945
|
-
var _default = ContentTextarea;
|
|
24946
|
-
exports.default = _default;
|
|
24947
|
-
function getContent() {
|
|
24948
|
-
var value = this.getValue(), content = value;
|
|
24949
|
-
return content;
|
|
24950
|
-
}
|
|
24951
|
-
function setContent(content) {
|
|
24952
|
-
var value = content;
|
|
24953
|
-
this.setValue(value);
|
|
24954
|
-
}
|
|
24997
|
+
exports.default = ContentTextarea;
|
|
24955
24998
|
});
|
|
24956
24999
|
|
|
24957
25000
|
// lib/example/textarea/parseTree.js
|
|
@@ -24991,19 +25034,6 @@
|
|
|
24991
25034
|
_defineProperties(Constructor, staticProps);
|
|
24992
25035
|
return Constructor;
|
|
24993
25036
|
}
|
|
24994
|
-
function _defineProperty(obj, key, value) {
|
|
24995
|
-
if (key in obj) {
|
|
24996
|
-
Object.defineProperty(obj, key, {
|
|
24997
|
-
value,
|
|
24998
|
-
enumerable: true,
|
|
24999
|
-
configurable: true,
|
|
25000
|
-
writable: true
|
|
25001
|
-
});
|
|
25002
|
-
} else {
|
|
25003
|
-
obj[key] = value;
|
|
25004
|
-
}
|
|
25005
|
-
return obj;
|
|
25006
|
-
}
|
|
25007
25037
|
function _getPrototypeOf(o) {
|
|
25008
25038
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {
|
|
25009
25039
|
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
@@ -25081,42 +25111,40 @@
|
|
|
25081
25111
|
return _super.apply(this, arguments);
|
|
25082
25112
|
}
|
|
25083
25113
|
_createClass(ParseTreeTextarea2, [
|
|
25114
|
+
{
|
|
25115
|
+
key: "setParseTree",
|
|
25116
|
+
value: function setParseTree(parseTree) {
|
|
25117
|
+
if (parseTree !== null) {
|
|
25118
|
+
parseTree.shiftLine();
|
|
25119
|
+
var parseTreeString = parseTree.asString(), value = parseTreeString;
|
|
25120
|
+
this.setValue(value);
|
|
25121
|
+
} else {
|
|
25122
|
+
this.clearParseTree();
|
|
25123
|
+
}
|
|
25124
|
+
}
|
|
25125
|
+
},
|
|
25126
|
+
{
|
|
25127
|
+
key: "clearParseTree",
|
|
25128
|
+
value: function clearParseTree() {
|
|
25129
|
+
var value = _constants.EMPTY_STRING;
|
|
25130
|
+
this.setValue(value);
|
|
25131
|
+
}
|
|
25132
|
+
},
|
|
25084
25133
|
{
|
|
25085
25134
|
key: "render",
|
|
25086
25135
|
value: function render(update) {
|
|
25087
|
-
var _this = this;
|
|
25088
25136
|
var className = _textarea.default.className, children = this.props.children;
|
|
25089
25137
|
return /* @__PURE__ */ React.createElement("textarea", {
|
|
25090
25138
|
className: "".concat(className, " parse-tree"),
|
|
25091
25139
|
spellCheck: "false",
|
|
25092
|
-
readOnly: true
|
|
25093
|
-
ref: function(domElement) {
|
|
25094
|
-
_this.domElement = domElement;
|
|
25095
|
-
}
|
|
25140
|
+
readOnly: true
|
|
25096
25141
|
}, children);
|
|
25097
25142
|
}
|
|
25098
25143
|
}
|
|
25099
25144
|
]);
|
|
25100
25145
|
return ParseTreeTextarea2;
|
|
25101
25146
|
}(_textarea.default);
|
|
25102
|
-
_defineProperty(ParseTreeTextarea, "mixins", [
|
|
25103
|
-
setParseTree,
|
|
25104
|
-
clearParseTree
|
|
25105
|
-
]);
|
|
25106
25147
|
exports.default = ParseTreeTextarea;
|
|
25107
|
-
function setParseTree(parseTree) {
|
|
25108
|
-
if (parseTree !== null) {
|
|
25109
|
-
parseTree.shiftLine();
|
|
25110
|
-
var parseTreeString = parseTree.asString(), value = parseTreeString;
|
|
25111
|
-
this.setValue(value);
|
|
25112
|
-
} else {
|
|
25113
|
-
this.clearParseTree();
|
|
25114
|
-
}
|
|
25115
|
-
}
|
|
25116
|
-
function clearParseTree() {
|
|
25117
|
-
var value = _constants.EMPTY_STRING;
|
|
25118
|
-
this.setValue(value);
|
|
25119
|
-
}
|
|
25120
25148
|
});
|
|
25121
25149
|
|
|
25122
25150
|
// lib/example/cursor.js
|
|
@@ -25213,19 +25241,6 @@
|
|
|
25213
25241
|
}
|
|
25214
25242
|
});
|
|
25215
25243
|
|
|
25216
|
-
// lib/example/events.js
|
|
25217
|
-
var require_events = __commonJS((exports) => {
|
|
25218
|
-
"use strict";
|
|
25219
|
-
Object.defineProperty(exports, "__esModule", {
|
|
25220
|
-
value: true
|
|
25221
|
-
});
|
|
25222
|
-
exports.MOUSEMOVE_EVENT = exports.MOUSEUP_EVENT = void 0;
|
|
25223
|
-
var MOUSEUP_EVENT = "mouseup";
|
|
25224
|
-
exports.MOUSEUP_EVENT = MOUSEUP_EVENT;
|
|
25225
|
-
var MOUSEMOVE_EVENT = "mousemove";
|
|
25226
|
-
exports.MOUSEMOVE_EVENT = MOUSEMOVE_EVENT;
|
|
25227
|
-
});
|
|
25228
|
-
|
|
25229
25244
|
// lib/example/div/splitter/vertical.js
|
|
25230
25245
|
var require_vertical = __commonJS((exports) => {
|
|
25231
25246
|
"use strict";
|
|
@@ -25360,7 +25375,7 @@
|
|
|
25360
25375
|
}
|
|
25361
25376
|
function _templateObject() {
|
|
25362
25377
|
var data = _taggedTemplateLiteral([
|
|
25363
|
-
"\n\n width: 1rem;\n flex-shrink: 0
|
|
25378
|
+
"\n\n width: 1rem;\n flex-shrink: 0; \n background-color: lightgrey;\n\n"
|
|
25364
25379
|
]);
|
|
25365
25380
|
_templateObject = function _templateObject2() {
|
|
25366
25381
|
return data;
|
|
@@ -25373,9 +25388,60 @@
|
|
|
25373
25388
|
var _super = _createSuper(VerticalSplitterDiv2);
|
|
25374
25389
|
function VerticalSplitterDiv2() {
|
|
25375
25390
|
_classCallCheck(this, VerticalSplitterDiv2);
|
|
25376
|
-
|
|
25391
|
+
var _this;
|
|
25392
|
+
_this = _super.apply(this, arguments);
|
|
25393
|
+
_defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function(event) {
|
|
25394
|
+
var dragging = _this.isDragging();
|
|
25395
|
+
if (dragging) {
|
|
25396
|
+
_this.stopDragging();
|
|
25397
|
+
}
|
|
25398
|
+
_cursor.default.reset();
|
|
25399
|
+
});
|
|
25400
|
+
_defineProperty(_assertThisInitialized(_this), "mouseMoveHandler", function(event) {
|
|
25401
|
+
var dragging = _this.isDragging();
|
|
25402
|
+
if (dragging) {
|
|
25403
|
+
var mouseLeft = event.pageX, relativeMouseLeft = mouseLeft - _this.previousMouseLeft, sizeableDivWidth = _this.previousSizeableDivWidth + relativeMouseLeft, width = sizeableDivWidth;
|
|
25404
|
+
_this.sizeableDiv.setWidth(width);
|
|
25405
|
+
}
|
|
25406
|
+
});
|
|
25407
|
+
_defineProperty(_assertThisInitialized(_this), "mouseDownHandler", function(event) {
|
|
25408
|
+
var dragging = _this.isDragging();
|
|
25409
|
+
if (!dragging) {
|
|
25410
|
+
var mouseLeft = event.pageX, sizeableDivWidth = _this.sizeableDiv.getWidth(), previousMouseLeft = mouseLeft, previousSizeableDivWidth = sizeableDivWidth;
|
|
25411
|
+
_this.previousMouseLeft = previousMouseLeft;
|
|
25412
|
+
_this.previousSizeableDivWidth = previousSizeableDivWidth;
|
|
25413
|
+
_this.startDragging();
|
|
25414
|
+
}
|
|
25415
|
+
_cursor.default.columnResize();
|
|
25416
|
+
});
|
|
25417
|
+
_defineProperty(_assertThisInitialized(_this), "mouseOverHandler", function(event) {
|
|
25418
|
+
_cursor.default.columnResize();
|
|
25419
|
+
});
|
|
25420
|
+
_defineProperty(_assertThisInitialized(_this), "mouseOutHandler", function(event) {
|
|
25421
|
+
_cursor.default.reset();
|
|
25422
|
+
});
|
|
25423
|
+
return _this;
|
|
25377
25424
|
}
|
|
25378
25425
|
_createClass(VerticalSplitterDiv2, [
|
|
25426
|
+
{
|
|
25427
|
+
key: "startDragging",
|
|
25428
|
+
value: function startDragging() {
|
|
25429
|
+
this.addClass("dragging");
|
|
25430
|
+
}
|
|
25431
|
+
},
|
|
25432
|
+
{
|
|
25433
|
+
key: "stopDragging",
|
|
25434
|
+
value: function stopDragging() {
|
|
25435
|
+
this.removeClass("dragging");
|
|
25436
|
+
}
|
|
25437
|
+
},
|
|
25438
|
+
{
|
|
25439
|
+
key: "isDragging",
|
|
25440
|
+
value: function isDragging() {
|
|
25441
|
+
var dragging = this.hasClass("dragging");
|
|
25442
|
+
return dragging;
|
|
25443
|
+
}
|
|
25444
|
+
},
|
|
25379
25445
|
{
|
|
25380
25446
|
key: "componentDidMount",
|
|
25381
25447
|
value: function componentDidMount() {
|
|
@@ -25408,58 +25474,8 @@
|
|
|
25408
25474
|
]);
|
|
25409
25475
|
return VerticalSplitterDiv2;
|
|
25410
25476
|
}(Component);
|
|
25411
|
-
_defineProperty(VerticalSplitterDiv, "mixins", [
|
|
25412
|
-
mouseUpHandler,
|
|
25413
|
-
mouseMoveHandler,
|
|
25414
|
-
mouseDownHandler,
|
|
25415
|
-
mouseOverHandler,
|
|
25416
|
-
mouseOutHandler,
|
|
25417
|
-
startDragging,
|
|
25418
|
-
stopDragging,
|
|
25419
|
-
isDragging
|
|
25420
|
-
]);
|
|
25421
25477
|
var _default = (0, _index2).default(VerticalSplitterDiv)(_templateObject());
|
|
25422
25478
|
exports.default = _default;
|
|
25423
|
-
function mouseUpHandler() {
|
|
25424
|
-
var dragging = this.isDragging();
|
|
25425
|
-
if (dragging) {
|
|
25426
|
-
this.stopDragging();
|
|
25427
|
-
}
|
|
25428
|
-
_cursor.default.reset();
|
|
25429
|
-
}
|
|
25430
|
-
function mouseMoveHandler(event) {
|
|
25431
|
-
var dragging = this.isDragging();
|
|
25432
|
-
if (dragging) {
|
|
25433
|
-
var mouseLeft = event.pageX, relativeMouseLeft = mouseLeft - this.previousMouseLeft, sizeableDivWidth = this.previousSizeableDivWidth + relativeMouseLeft, width = sizeableDivWidth;
|
|
25434
|
-
this.sizeableDiv.setWidth(width);
|
|
25435
|
-
}
|
|
25436
|
-
}
|
|
25437
|
-
function mouseDownHandler(event) {
|
|
25438
|
-
var dragging = this.isDragging();
|
|
25439
|
-
if (!dragging) {
|
|
25440
|
-
var mouseLeft = event.pageX, sizeableDivWidth = this.sizeableDiv.getWidth(), previousMouseLeft = mouseLeft, previousSizeableDivWidth = sizeableDivWidth;
|
|
25441
|
-
this.previousMouseLeft = previousMouseLeft;
|
|
25442
|
-
this.previousSizeableDivWidth = previousSizeableDivWidth;
|
|
25443
|
-
this.startDragging();
|
|
25444
|
-
}
|
|
25445
|
-
_cursor.default.columnResize();
|
|
25446
|
-
}
|
|
25447
|
-
function mouseOverHandler() {
|
|
25448
|
-
_cursor.default.columnResize();
|
|
25449
|
-
}
|
|
25450
|
-
function mouseOutHandler() {
|
|
25451
|
-
_cursor.default.reset();
|
|
25452
|
-
}
|
|
25453
|
-
function startDragging() {
|
|
25454
|
-
this.addClass("dragging");
|
|
25455
|
-
}
|
|
25456
|
-
function stopDragging() {
|
|
25457
|
-
this.removeClass("dragging");
|
|
25458
|
-
}
|
|
25459
|
-
function isDragging() {
|
|
25460
|
-
var dragging = this.hasClass("dragging");
|
|
25461
|
-
return dragging;
|
|
25462
|
-
}
|
|
25463
25479
|
});
|
|
25464
25480
|
|
|
25465
25481
|
// lib/example/textarea/lexicalEntries.js
|
|
@@ -25499,19 +25515,6 @@
|
|
|
25499
25515
|
_defineProperties(Constructor, staticProps);
|
|
25500
25516
|
return Constructor;
|
|
25501
25517
|
}
|
|
25502
|
-
function _defineProperty(obj, key, value) {
|
|
25503
|
-
if (key in obj) {
|
|
25504
|
-
Object.defineProperty(obj, key, {
|
|
25505
|
-
value,
|
|
25506
|
-
enumerable: true,
|
|
25507
|
-
configurable: true,
|
|
25508
|
-
writable: true
|
|
25509
|
-
});
|
|
25510
|
-
} else {
|
|
25511
|
-
obj[key] = value;
|
|
25512
|
-
}
|
|
25513
|
-
return obj;
|
|
25514
|
-
}
|
|
25515
25518
|
function _getPrototypeOf(o) {
|
|
25516
25519
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o2) {
|
|
25517
25520
|
return o2.__proto__ || Object.getPrototypeOf(o2);
|
|
@@ -25589,36 +25592,34 @@
|
|
|
25589
25592
|
return _super.apply(this, arguments);
|
|
25590
25593
|
}
|
|
25591
25594
|
_createClass(LexicalEntriesTextarea2, [
|
|
25595
|
+
{
|
|
25596
|
+
key: "getLexicalEntries",
|
|
25597
|
+
value: function getLexicalEntries() {
|
|
25598
|
+
var value = this.getValue(), lexicalEntries = JSON.parse(value);
|
|
25599
|
+
return lexicalEntries;
|
|
25600
|
+
}
|
|
25601
|
+
},
|
|
25602
|
+
{
|
|
25603
|
+
key: "setLexicalEntries",
|
|
25604
|
+
value: function setLexicalEntries(lexicalEntries) {
|
|
25605
|
+
var value = JSON.stringify(lexicalEntries, null, _constants.DOUBLE_SPACE);
|
|
25606
|
+
this.setValue(value);
|
|
25607
|
+
}
|
|
25608
|
+
},
|
|
25592
25609
|
{
|
|
25593
25610
|
key: "render",
|
|
25594
25611
|
value: function render(update) {
|
|
25595
|
-
var _this = this;
|
|
25596
25612
|
var className = _textarea.default.className, children = this.props.children;
|
|
25597
25613
|
return /* @__PURE__ */ React.createElement("textarea", {
|
|
25598
25614
|
className: "".concat(className, " lexical-entries"),
|
|
25599
|
-
spellCheck: "false"
|
|
25600
|
-
ref: function(domElement) {
|
|
25601
|
-
_this.domElement = domElement;
|
|
25602
|
-
}
|
|
25615
|
+
spellCheck: "false"
|
|
25603
25616
|
}, children);
|
|
25604
25617
|
}
|
|
25605
25618
|
}
|
|
25606
25619
|
]);
|
|
25607
25620
|
return LexicalEntriesTextarea2;
|
|
25608
25621
|
}(_textarea.default);
|
|
25609
|
-
_defineProperty(LexicalEntriesTextarea, "mixins", [
|
|
25610
|
-
getLexicalEntries,
|
|
25611
|
-
setLexicalEntries
|
|
25612
|
-
]);
|
|
25613
25622
|
exports.default = LexicalEntriesTextarea;
|
|
25614
|
-
function getLexicalEntries() {
|
|
25615
|
-
var value = this.getValue(), lexicalEntries = JSON.parse(value);
|
|
25616
|
-
return lexicalEntries;
|
|
25617
|
-
}
|
|
25618
|
-
function setLexicalEntries(lexicalEntries) {
|
|
25619
|
-
var value = JSON.stringify(lexicalEntries, null, _constants.DOUBLE_SPACE);
|
|
25620
|
-
this.setValue(value);
|
|
25621
|
-
}
|
|
25622
25623
|
});
|
|
25623
25624
|
|
|
25624
25625
|
// lib/utilities/query.js
|
|
@@ -25690,7 +25691,7 @@
|
|
|
25690
25691
|
}
|
|
25691
25692
|
return query(element5, function(element) {
|
|
25692
25693
|
return ReactComponents.some(function(ReactComponent) {
|
|
25693
|
-
return _instanceof(element
|
|
25694
|
+
return _instanceof(element, ReactComponent);
|
|
25694
25695
|
});
|
|
25695
25696
|
});
|
|
25696
25697
|
}
|
|
@@ -25733,6 +25734,7 @@
|
|
|
25733
25734
|
var _parseTree = _interopRequireDefault2(require_parseTree2());
|
|
25734
25735
|
var _vertical = _interopRequireDefault2(require_vertical());
|
|
25735
25736
|
var _lexicalEntries = _interopRequireDefault2(require_lexicalEntries());
|
|
25737
|
+
var _constants = require_constants7();
|
|
25736
25738
|
var _query = require_query3();
|
|
25737
25739
|
function _assertThisInitialized(self) {
|
|
25738
25740
|
if (self === void 0) {
|
|
@@ -25850,9 +25852,31 @@
|
|
|
25850
25852
|
var _super = _createSuper(View2);
|
|
25851
25853
|
function View2() {
|
|
25852
25854
|
_classCallCheck(this, View2);
|
|
25853
|
-
|
|
25855
|
+
var _this;
|
|
25856
|
+
_this = _super.apply(this, arguments);
|
|
25857
|
+
_defineProperty(_assertThisInitialized(_this), "keyUpHandler", function() {
|
|
25858
|
+
try {
|
|
25859
|
+
var parseTree = _this.getParseTree();
|
|
25860
|
+
_this.parseTreeTextarea.setParseTree(parseTree);
|
|
25861
|
+
} catch (error) {
|
|
25862
|
+
console.log(error);
|
|
25863
|
+
_this.parseTreeTextarea.clearParseTree();
|
|
25864
|
+
}
|
|
25865
|
+
});
|
|
25866
|
+
return _this;
|
|
25854
25867
|
}
|
|
25855
25868
|
_createClass(View2, [
|
|
25869
|
+
{
|
|
25870
|
+
key: "getParseTree",
|
|
25871
|
+
value: function getParseTree() {
|
|
25872
|
+
var parseTree = null;
|
|
25873
|
+
var bnf = this.bnfTextarea.getBNF(), content = this.contentTextarea.getContent(), lexicalEntries = this.lexicalEntriesTextarea.getLexicalEntries(), entries = lexicalEntries, cssLexer = _withStyle.CSSLexer.fromEntries(entries), cssParser = _withStyle.CSSParser.fromBNF(bnf), tokens = cssLexer.tokenise(content), node = cssParser.parse(tokens);
|
|
25874
|
+
if (node !== null) {
|
|
25875
|
+
parseTree = node.asParseTree(tokens);
|
|
25876
|
+
}
|
|
25877
|
+
return parseTree;
|
|
25878
|
+
}
|
|
25879
|
+
},
|
|
25856
25880
|
{
|
|
25857
25881
|
key: "componentDidMount",
|
|
25858
25882
|
value: function componentDidMount() {
|
|
@@ -25872,6 +25896,16 @@
|
|
|
25872
25896
|
delete this.lexicalEntriesTextarea;
|
|
25873
25897
|
}
|
|
25874
25898
|
},
|
|
25899
|
+
{
|
|
25900
|
+
key: "initialise",
|
|
25901
|
+
value: function initialise() {
|
|
25902
|
+
var entries = _withStyle.CSSLexer.entries, bnf = _withStyle.CSSParser.bnf, content = _constants.EMPTY_STRING, lexicalEntries = entries;
|
|
25903
|
+
this.bnfTextarea.setBNF(bnf);
|
|
25904
|
+
this.contentTextarea.setContent(content);
|
|
25905
|
+
this.lexicalEntriesTextarea.setLexicalEntries(lexicalEntries);
|
|
25906
|
+
this.keyUpHandler();
|
|
25907
|
+
}
|
|
25908
|
+
},
|
|
25875
25909
|
{
|
|
25876
25910
|
key: "render",
|
|
25877
25911
|
value: function render(update) {
|
|
@@ -25890,36 +25924,7 @@
|
|
|
25890
25924
|
]);
|
|
25891
25925
|
return View2;
|
|
25892
25926
|
}(Component);
|
|
25893
|
-
_defineProperty(View, "mixins", [
|
|
25894
|
-
initialise,
|
|
25895
|
-
keyUpHandler,
|
|
25896
|
-
getParseTree
|
|
25897
|
-
]);
|
|
25898
25927
|
exports.default = View;
|
|
25899
|
-
function initialise() {
|
|
25900
|
-
var entries = _withStyle.CSSLexer.entries, bnf = _withStyle.CSSParser.bnf, content = "", lexicalEntries = entries;
|
|
25901
|
-
this.bnfTextarea.setBNF(bnf);
|
|
25902
|
-
this.contentTextarea.setContent(content);
|
|
25903
|
-
this.lexicalEntriesTextarea.setLexicalEntries(lexicalEntries);
|
|
25904
|
-
this.keyUpHandler();
|
|
25905
|
-
}
|
|
25906
|
-
function getParseTree() {
|
|
25907
|
-
var parseTree = null;
|
|
25908
|
-
var bnf = this.bnfTextarea.getBNF(), content = this.contentTextarea.getContent(), lexicalEntries = this.lexicalEntriesTextarea.getLexicalEntries(), entries = lexicalEntries, cssLexer = _withStyle.CSSLexer.fromEntries(entries), cssParser = _withStyle.CSSParser.fromBNF(bnf), tokens = cssLexer.tokenise(content), node = cssParser.parse(tokens);
|
|
25909
|
-
if (node !== null) {
|
|
25910
|
-
parseTree = node.asParseTree(tokens);
|
|
25911
|
-
}
|
|
25912
|
-
return parseTree;
|
|
25913
|
-
}
|
|
25914
|
-
function keyUpHandler() {
|
|
25915
|
-
try {
|
|
25916
|
-
var parseTree = this.getParseTree();
|
|
25917
|
-
this.parseTreeTextarea.setParseTree(parseTree);
|
|
25918
|
-
} catch (error) {
|
|
25919
|
-
console.log(error);
|
|
25920
|
-
this.parseTreeTextarea.clearParseTree();
|
|
25921
|
-
}
|
|
25922
|
-
}
|
|
25923
25928
|
});
|
|
25924
25929
|
|
|
25925
25930
|
// lib/example.js
|
|
@@ -25938,4 +25943,4 @@
|
|
|
25938
25943
|
var bodyDOMElement = document.querySelector("body");
|
|
25939
25944
|
_reaction.ReactDOM.render(/* @__PURE__ */ _reaction.React.createElement(_view.default, null), bodyDOMElement);
|
|
25940
25945
|
})();
|
|
25941
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvcmVhY3RDbGFzcy5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL3JlYWN0Q29tcG9uZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvbWl4aW5zL3JlYWN0RWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50L3JlYWN0L2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvZWxlbWVudC9yZWFjdC9mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvcmVhY3QvY29tcG9uZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvZWxlbWVudC92aXJ0dWFsRE9NTm9kZS5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvdmlydHVhbERPTU5vZGUvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9taXhpbnMvdmlydHVhbERPTUVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50L3ZpcnR1YWxET01Ob2RlL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy91dGlsaXRpZXMvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvdmlydHVhbERPTU5vZGUvZWxlbWVudC9odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvZWxlbWVudC92aXJ0dWFsRE9NTm9kZS9lbGVtZW50L3N2Zy5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvcmVhY3RET00uanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdGFnTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jaGFyYWN0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hc3luY2hyb25vdXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvbWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb250ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvYnJva2VuQ29tbWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvYnJva2VuU3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2Jyb2tlblN0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL3ZlcnRpY2FsQnJhbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvY2hpbGROb2Rlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZU5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9jb2xsZWN0aW9uT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9lcHNpbG9uTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL2Vwc2lsb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL29wdGlvbmFsUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvb25lT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9iYXNpYy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9zcHJlYWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL3F1ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvZGVjbGFyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWEuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL21lZGlhcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9zdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzc05hbWUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgInNyYy91dGlsaXRpZXMvY2xhc3MuanMiLCAic3JjL3dpdGhTdHlsZS5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvaGVhZGluZy5qcyIsICJzcmMvZXhhbXBsZS9kaXYvcm93cy5qcyIsICJzcmMvZXhhbXBsZS9kaXYvY29sdW1uLmpzIiwgInNyYy9leGFtcGxlL2Rpdi9jb2x1bW5zLmpzIiwgInNyYy9leGFtcGxlL3N1YkhlYWRpbmcuanMiLCAic3JjL2V4YW1wbGUvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL2Rpdi9zaXplYWJsZS5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9ibmYuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvY29udGVudC5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9wYXJzZVRyZWUuanMiLCAic3JjL2V4YW1wbGUvY3Vyc29yLmpzIiwgInNyYy91dGlsaXRpZXMvc2libGluZy5qcyIsICJzcmMvZXhhbXBsZS9ldmVudHMuanMiLCAic3JjL2V4YW1wbGUvZGl2L3NwbGl0dGVyL3ZlcnRpY2FsLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2xleGljYWxFbnRyaWVzLmpzIiwgInNyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAic3JjL2V4YW1wbGUvdmlldy5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnJlZHVjZSgoYXJyYXksIGVsZW1lbnQpID0+IHtcbiAgICBhcnJheSA9IGFycmF5LmNvbmNhdChlbGVtZW50KTsgIC8vL1xuICAgIFxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1haW5pbmcoZWxlbWVudCwgYXJyYXkpIHtcbiAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGluZGV4T2YoZWxlbWVudCwgYXJyYXkpO1xuXG4gIHJldHVybiBhcnJheS5zbGljZShpbmRleCArIDEpO1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKGVsZW1lbnQsIGFycmF5KSB7XG4gIGxldCBpbmRleCA9IG51bGw7XG5cbiAgYXJyYXkuc29tZSgoY3VycmVudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50SW5kZXgpID0+IHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgIGluZGV4ID0gY3VycmVudEVsZW1lbnRJbmRleDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5kZXg7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjsgIC8vL1xuICB9XG5cbiAgZ2V0UGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGdldENoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICB9XG5cbiAgZ2V0Rmlyc3RDaGlsZCgpIHtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZmlyc3QodGhpcy5jaGlsZHJlbikgfHwgbnVsbDtcblxuICAgIHJldHVybiBmaXJzdENoaWxkO1xuICB9XG5cbiAgbW91bnQocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9XG5cbiAgdW5tb3VudCgpIHtcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdENsYXNzIHtcbiAgY29uc3RydWN0b3IocmVuZGVyLCBnZXRJbml0aWFsU3RhdGUsIGdldENoaWxkQ29udGV4dCwgY29tcG9uZW50RGlkTW91bnQsIGNvbXBvbmVudFdpbGxVbm1vdW50LCBtaXhpbnMpIHtcbiAgICB0aGlzLnJlbmRlciA9IHJlbmRlcjtcblxuICAgIGlmIChnZXRJbml0aWFsU3RhdGUpIHsgdGhpcy5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7IH1cbiAgICBpZiAoZ2V0Q2hpbGRDb250ZXh0KSB7IHRoaXMuZ2V0Q2hpbGRDb250ZXh0ID0gZ2V0Q2hpbGRDb250ZXh0OyB9XG4gICAgaWYgKGNvbXBvbmVudERpZE1vdW50KSB7IHRoaXMuY29tcG9uZW50RGlkTW91bnQgPSBjb21wb25lbnREaWRNb3VudDsgfVxuICAgIGlmIChjb21wb25lbnRXaWxsVW5tb3VudCkgeyB0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gY29tcG9uZW50V2lsbFVubW91bnQ7IH1cblxuICAgIHRoaXMubWl4aW5zID0gbWl4aW5zO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldENoaWxkQ29udGV4dChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbiAgXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblxuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShvYmplY3QpIHtcbiAgICBjb25zdCB7IHJlbmRlciwgZ2V0SW5pdGlhbFN0YXRlLCBnZXRDaGlsZENvbnRleHQsIGNvbXBvbmVudERpZE1vdW50LCBjb21wb25lbnRXaWxsVW5tb3VudCwgbWl4aW5zIH0gPSBvYmplY3Q7XG5cbiAgICByZXR1cm4gbmV3IFJlYWN0Q2xhc3MocmVuZGVyLCBnZXRJbml0aWFsU3RhdGUsIGdldENoaWxkQ29udGV4dCwgY29tcG9uZW50RGlkTW91bnQsIGNvbXBvbmVudFdpbGxVbm1vdW50LCBtaXhpbnMpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0Q29tcG9uZW50IHtcblxuXG5cblxuXG5cblxuXG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBcbiAgZ2V0Q2hpbGRDb250ZXh0KGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgXG4gIH1cbiBcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG5cbiAgfVxuXG5cblxuXG5cblxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIHJldHVybiBmaXJzdENoaWxkLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShuYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICByZXR1cm4gZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyQXR0cmlidXRlKG5hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIGZpcnN0Q2hpbGQuY2xlYXJBdHRyaWJ1dGUobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgZmlyc3RDaGlsZC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUobmFtZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgZmlyc3RDaGlsZC5yZW1vdmVBdHRyaWJ1dGUobmFtZSlcbn1cblxuZnVuY3Rpb24gaGFzQXR0cmlidXRlKG5hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIHJldHVybiBmaXJzdENoaWxkLmhhc0F0dHJpYnV0ZShuYW1lKTtcbn1cblxuZnVuY3Rpb24gc2V0Q2xhc3MoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICBmaXJzdENoaWxkLnNldENsYXNzKGNsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzTmFtZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgZmlyc3RDaGlsZC5hZGRDbGFzcyhjbGFzc05hbWUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIGZpcnN0Q2hpbGQucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICBmaXJzdENoaWxkLnRvZ2dsZUNsYXNzKGNsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgcmV0dXJuIGZpcnN0Q2hpbGQuaGFzQ2xhc3MoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3NlcyhjbGFzc05hbWVzKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICByZXR1cm4gZmlyc3RDaGlsZC5oYXNDbGFzc2VzKGNsYXNzTmFtZXMpO1xufVxuXG5mdW5jdGlvbiBjbGVhckNsYXNzZXMoKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICBmaXJzdENoaWxkLmNsZWFyQ2xhc3NlcygpO1xufVxuXG5mdW5jdGlvbiBnZXRUYWdOYW1lKCkge1xuICByZXR1cm4gbnVsbDsgIC8vL1xufVxuXG5mdW5jdGlvbiBnZXRTdHlsZShuYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICByZXR1cm4gZmlyc3RDaGlsZC5nZXRTdHlsZShuYW1lKTtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIGZpcnN0Q2hpbGQuc2V0U3R5bGUobmFtZSwgdmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldEF0dHJpYnV0ZSxcbiAgZ2V0QXR0cmlidXRlLFxuICBjbGVhckF0dHJpYnV0ZSxcbiAgYWRkQXR0cmlidXRlLFxuICByZW1vdmVBdHRyaWJ1dGUsXG4gIGhhc0F0dHJpYnV0ZSxcbiAgc2V0Q2xhc3MsXG4gIGFkZENsYXNzLFxuICByZW1vdmVDbGFzcyxcbiAgdG9nZ2xlQ2xhc3MsXG4gIGhhc0NsYXNzLFxuICBoYXNDbGFzc2VzLFxuICBjbGVhckNsYXNzZXMsXG4gIGdldFRhZ05hbWUsXG4gIGdldFN0eWxlLFxuICBzZXRTdHlsZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuaW1wb3J0IHJlYWN0RWxlbWVudE1peGlucyBmcm9tIFwiLi4vbWl4aW5zL3JlYWN0RWxlbWVudFwiO1xuXG5pbXBvcnQgeyBndWFyYW50ZWUsIHJlbWFpbmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY2xhc3MgUmVhY3RFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIFxuICAgIHRoaXMuc3RhdGUgPSB1bmRlZmluZWQ7IC8vL1xuXG4gICAgdGhpcy5jb250ZXh0ID0gdW5kZWZpbmVkOyAvLy9cbiAgfVxuXG4gIG1vdW50KHBhcmVudCwgcmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IHRoaXMuZ2V0Q2hpbGRDb250ZXh0KGNvbnRleHQpLFxuICAgICAgICAgIGNoaWxkcmVuID0gZ3VhcmFudGVlKHRoaXMucmVuZGVyKCkpO1xuXG4gICAgc3VwZXIubW91bnQocGFyZW50LCBjaGlsZHJlbik7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRQYXJlbnQgPSB0aGlzLFxuICAgICAgICAgICAgY2hpbGRSZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgIGNoaWxkLm1vdW50KGNoaWxkUGFyZW50LCBjaGlsZFJlZmVyZW5jZSwgY2hpbGRDb250ZXh0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgfVxuXG4gIHVubW91bnQoY29udGV4dCkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cbiAgICBjb25zdCBjaGlsZENvbnRleHQgPSB0aGlzLmdldENoaWxkQ29udGV4dChjb250ZXh0KSxcbiAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiBjaGlsZC51bm1vdW50KGNoaWxkQ29udGV4dCkpO1xuXG4gICAgc3VwZXIudW5tb3VudCgpO1xuICB9XG5cbiAgcmVtb3VudCh1cGRhdGUpIHtcbiAgICBjb25zdCBjaGlsZFBhcmVudCA9IHRoaXMsXG4gICAgICAgICAgY2hpbGRSZWZlcmVuY2UgPSB0aGlzLmdldENoaWxkUmVmZXJlbmNlKCksXG4gICAgICAgICAgY2hpbGRDb250ZXh0ID0gdGhpcy5nZXRDaGlsZENvbnRleHQodGhpcy5jb250ZXh0KTtcblxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IGNoaWxkLnVubW91bnQoY2hpbGRDb250ZXh0KSk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gZ3VhcmFudGVlKHRoaXMucmVuZGVyKHVwZGF0ZSkpO1xuXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gY2hpbGQubW91bnQoY2hpbGRQYXJlbnQsIGNoaWxkUmVmZXJlbmNlLCBjaGlsZENvbnRleHQpKTtcbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlOyAgLy8vXG4gIH1cblxuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcblxuICAgIHRoaXMucmVtb3VudCgpO1xuICB9XG5cbiAgdXBkYXRlU3RhdGUobmV3U3RhdGUpIHtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHRoaXMuc3RhdGU7ICAvLy9cblxuICAgIHRoaXMuc3RhdGUgPSBPYmplY3QuYXNzaWduKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG5cbiAgICB0aGlzLnJlbW91bnQoKTtcbiAgfVxuXG4gIGZvcmNlVXBkYXRlKHVwZGF0ZSkge1xuICAgIHRoaXMucmVtb3VudCh1cGRhdGUpO1xuICB9XG5cbiAgZ2V0Q2hpbGRSZWZlcmVuY2UoKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKSxcbiAgICAgICAgICBjaGlsZCA9IHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZShwYXJlbnQsIGNoaWxkKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFJlYWN0RWxlbWVudC5wcm90b3R5cGUsIHJlYWN0RWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0RWxlbWVudDtcblxuZnVuY3Rpb24gcmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IGZpbmRSZWZlcmVuY2UocGFyZW50LCBjaGlsZCksXG4gICAgICBwYXJlbnRET01FbGVtZW50ID0gcGFyZW50LmdldERPTUVsZW1lbnQoKTtcblxuICB3aGlsZSAoKHJlZmVyZW5jZSA9PT0gbnVsbCkgJiYgKHBhcmVudERPTUVsZW1lbnQgPT09IG51bGwpKSB7XG4gICAgY2hpbGQgPSBwYXJlbnQ7IC8vL1xuXG4gICAgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXG4gICAgcmVmZXJlbmNlID0gZmluZFJlZmVyZW5jZShwYXJlbnQsIGNoaWxkKTtcblxuICAgIHBhcmVudERPTUVsZW1lbnQgPSBwYXJlbnQuZ2V0RE9NRWxlbWVudCgpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gZmluZFJlZmVyZW5jZShwYXJlbnQsIGNoaWxkKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkcmVuKCksXG4gICAgICAgIHJlbWFpbmluZ0NoaWxkcmVuID0gcmVtYWluaW5nKGNoaWxkLCBjaGlsZHJlbik7XG5cbiAgcmV0dXJuIHJlbWFpbmluZ0NoaWxkcmVuLnJlZHVjZSgocmVmZXJlbmNlLCByZW1haW5pbmdDaGlsZCkgPT4ge1xuICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZ0NoaWxkRE9NRWxlbWVudCA9IHJlbWFpbmluZ0NoaWxkLmdldERPTUVsZW1lbnQoKTtcblxuICAgICAgaWYgKHJlbWFpbmluZ0NoaWxkRE9NRWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICByZWZlcmVuY2UgPSByZW1haW5pbmdDaGlsZDsgLy8vXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZCA9IG51bGw7XG5cbiAgICAgICAgcGFyZW50ID0gcmVtYWluaW5nQ2hpbGQ7ICAvLy9cblxuICAgICAgICByZWZlcmVuY2UgPSBmaW5kUmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH0sIG51bGwpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVhY3RFbGVtZW50IGZyb20gXCIuLi8uLi9lbGVtZW50L3JlYWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0Q2xhc3NFbGVtZW50IGV4dGVuZHMgUmVhY3RFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocmVhY3RDbGFzcywgcHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlYWN0Q2xhc3MgPSByZWFjdENsYXNzO1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gIH1cblxuICByZW5kZXIodXBkYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhY3RDbGFzcy5yZW5kZXIuY2FsbCh0aGlzLCB1cGRhdGUpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0Q2xhc3MuZ2V0SW5pdGlhbFN0YXRlLmNhbGwodGhpcyk7XG4gIH1cblxuICBnZXRDaGlsZENvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0Q2xhc3MuZ2V0Q2hpbGRDb250ZXh0LmNhbGwodGhpcywgY29udGV4dCk7XG4gIH1cbiAgXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RDbGFzcy5jb21wb25lbnREaWRNb3VudC5jYWxsKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5yZWFjdENsYXNzLmNvbXBvbmVudFdpbGxVbm1vdW50LmNhbGwodGhpcyk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlYWN0RWxlbWVudCBmcm9tIFwiLi4vLi4vZWxlbWVudC9yZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdEZ1bmN0aW9uRWxlbWVudCBleHRlbmRzIFJlYWN0RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHJlYWN0RnVuY3Rpb24sIHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWFjdEZ1bmN0aW9uID0gcmVhY3RGdW5jdGlvbjtcblxuXG5cblxuICB9XG4gXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdEZ1bmN0aW9uKHRoaXMucHJvcHMsIHRoaXMuY29udGV4dCwgdGhpcyk7XG4gIH1cblxuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgLy8vXG4gIH1cblxuICBnZXRDaGlsZENvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8vXG4gIH1cbiBcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgLy8vXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlYWN0RWxlbWVudCBmcm9tIFwiLi4vLi4vZWxlbWVudC9yZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdENvbXBvbmVudEVsZW1lbnQgZXh0ZW5kcyBSZWFjdEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihyZWFjdENvbXBvbmVudCwgcHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlYWN0Q29tcG9uZW50ID0gcmVhY3RDb21wb25lbnQ7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSgpO1xuXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgfVxuXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdENvbXBvbmVudC5yZW5kZXIuY2FsbCh0aGlzLCB1cGRhdGUpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0Q29tcG9uZW50LmdldEluaXRpYWxTdGF0ZS5jYWxsKHRoaXMpO1xuICB9XG5cbiAgZ2V0Q2hpbGRDb250ZXh0KGNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdENvbXBvbmVudC5nZXRDaGlsZENvbnRleHQuY2FsbCh0aGlzLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RDb21wb25lbnQuY29tcG9uZW50RGlkTW91bnQuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucmVhY3RDb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQuY2FsbCh0aGlzKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsRE9NTm9kZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcywgZG9tRWxlbWVudCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgbW91bnQocGFyZW50LCByZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcbiAgICBcbiAgICBzdXBlci5tb3VudChwYXJlbnQsIGNoaWxkcmVuKTtcblxuICAgIHBhcmVudERPTUVsZW1lbnQocGFyZW50KS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KHJlZmVyZW5jZSkpO1xuXG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIHVubW91bnQoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50KTtcblxuICAgIHN1cGVyLnVubW91bnQoKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRE9NRWxlbWVudChkb21FbGVtZW50KSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXSxcbiAgICAgICAgICBwcm9wcyA9IHtcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2aXJ0dWFsRE9NTm9kZSA9IG5ldyBWaXJ0dWFsRE9NTm9kZShwcm9wcywgZG9tRWxlbWVudCk7XG5cbiAgICByZXR1cm4gdmlydHVhbERPTU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyZW50RE9NRWxlbWVudChwYXJlbnQpIHtcbiAgbGV0IHBhcmVudERPTUVsZW1lbnQgPSBwYXJlbnQuZ2V0RE9NRWxlbWVudCgpO1xuXG4gIHdoaWxlIChwYXJlbnRET01FbGVtZW50ID09PSBudWxsKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXG4gICAgcGFyZW50RE9NRWxlbWVudCA9IHBhcmVudC5nZXRET01FbGVtZW50KCk7XG4gIH1cblxuICByZXR1cm4gcGFyZW50RE9NRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlRE9NRWxlbWVudChyZWZlcmVuY2UpIHtcbiAgY29uc3QgcmVmZXJlbmNlRE9NRWxlbWVudCA9IChyZWZlcmVuY2UgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLmdldERPTUVsZW1lbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gcmVmZXJlbmNlRE9NRWxlbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZpcnR1YWxET01Ob2RlIGZyb20gXCIuLi92aXJ0dWFsRE9NTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsRE9NVGV4dEVsZW1lbnQgZXh0ZW5kcyBWaXJ0dWFsRE9NTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCksXG4gICAgICAgICAgY2hpbGRyZW4gPSBbXSxcbiAgICAgICAgICBwcm9wcyA9IHtcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfTtcblxuICAgIHN1cGVyKHByb3BzLCBkb21FbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KHBhcmVudCwgcmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgc3VwZXIubW91bnQocGFyZW50LCByZWZlcmVuY2UpO1xuICB9XG4gIFxuICB1bm1vdW50KGNvbnRleHQpIHtcbiAgICBzdXBlci51bm1vdW50KCk7XG4gIH1cblxuICBnZXRUZXh0KCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUsXG4gICAgICAgICAgdGV4dCA9IG5vZGVWYWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHNldFRleHQodGV4dCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRleHQ7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBDTEFTUyA9IFwiY2xhc3NcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE9CSkVDVCA9IFwib2JqZWN0XCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OID0gXCJmdW5jdGlvblwiO1xuZXhwb3J0IGNvbnN0IEhUTUxfRk9SID0gXCJodG1sRm9yXCI7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBIVFRQX1dXV19XM19PUkdfMjAwMF9TVkcgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEZPUiwgQ0xBU1MsIE9CSkVDVCwgQk9PTEVBTiwgQ0xBU1NfTkFNRSwgSFRNTF9GT1IsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7XG4gIGlmIChuYW1lID09PSBDTEFTU19OQU1FKSB7XG4gICAgbmFtZSA9IENMQVNTO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09IEhUTUxfRk9SKSB7XG4gICAgbmFtZSA9IEZPUjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IE9CSkVDVCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpcy5kb21FbGVtZW50W25hbWVdW2tleV0gPSB2YWx1ZVtrZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBuYW1lOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOyB9XG5cbmZ1bmN0aW9uIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOyB9XG5cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZShuYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7IH1cblxuZnVuY3Rpb24gaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuZnVuY3Rpb24gc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7IH1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7IH1cblxuZnVuY3Rpb24gaGFzQ2xhc3NlcyhjbGFzc05hbWVzKSB7IHJldHVybiBjbGFzc05hbWVzLmV2ZXJ5KChjbGFzc05hbWUpID0+IHRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKSk7IH1cblxuZnVuY3Rpb24gY2xlYXJDbGFzc2VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HOyB9XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudGFnTmFtZTsgfVxuXG5mdW5jdGlvbiBnZXRTdHlsZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV07IH1cblxuZnVuY3Rpb24gc2V0U3R5bGUobmFtZSwgdmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7IH1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRBdHRyaWJ1dGUsXG4gIGdldEF0dHJpYnV0ZSxcbiAgY2xlYXJBdHRyaWJ1dGUsXG4gIGFkZEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQXR0cmlidXRlLFxuICBoYXNBdHRyaWJ1dGUsXG4gIHNldENsYXNzLFxuICBhZGRDbGFzcyxcbiAgcmVtb3ZlQ2xhc3MsXG4gIHRvZ2dsZUNsYXNzLFxuICBoYXNDbGFzcyxcbiAgaGFzQ2xhc3NlcyxcbiAgY2xlYXJDbGFzc2VzLFxuICBnZXRUYWdOYW1lLFxuICBnZXRTdHlsZSxcbiAgc2V0U3R5bGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWaXJ0dWFsRE9NTm9kZSBmcm9tIFwiLi4vdmlydHVhbERPTU5vZGVcIjtcblxuaW1wb3J0IHZpcnR1YWxET01FbGVtZW50TWl4aW5zIGZyb20gXCIuLi8uLi9taXhpbnMvdmlydHVhbERPTUVsZW1lbnRcIjtcblxuY2xhc3MgVmlydHVhbERPTUVsZW1lbnQgZXh0ZW5kcyBWaXJ0dWFsRE9NTm9kZSB7XG4gIG1vdW50KHBhcmVudCwgcmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgc3VwZXIubW91bnQocGFyZW50LCByZWZlcmVuY2UpO1xuXG4gICAgY29uc3QgY2hpbGRQYXJlbnQgPSB0aGlzLFxuICAgICAgICAgIGNoaWxkUmVmZXJlbmNlID0gbnVsbCxcbiAgICAgICAgICBjaGlsZENvbnRleHQgPSBjb250ZXh0LFxuICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbigpO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IGNoaWxkLm1vdW50KGNoaWxkUGFyZW50LCBjaGlsZFJlZmVyZW5jZSwgY2hpbGRDb250ZXh0KSk7XG5cbiAgICB0aGlzLmFwcGx5UHJvcHMoKTtcbiAgfVxuXG4gIHVubW91bnQoY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQsXG4gICAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKCk7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gY2hpbGQudW5tb3VudChjaGlsZENvbnRleHQpKTtcblxuICAgIHN1cGVyLnVubW91bnQoKTtcbiAgfVxuXG4gIGFwcGx5UHJvcHMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcblxuICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wc1tuYW1lXTtcblxuICAgICAgaWYgKGZhbHNlKSB7XG5cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hhbmRsZXJOYW1lKG5hbWUpKSB7XG4gICAgICAgIHRoaXMuc2V0SGFuZGxlcihuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBdHRyaWJ1dGVOYW1lKG5hbWUpKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJyZWZcIikge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHZhbHVlOyAvLy9cbiAgICAgICAgXG4gICAgICAgIGNhbGxiYWNrKHRoaXMuZG9tRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRIYW5kbGVyKG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSwgLy8vXG4gICAgICAgICAgaGFuZGxlciA9IHZhbHVlOyAgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsICBoYW5kbGVyKTtcbiAgfVxuXG5cdGlzSGFuZGxlck5hbWUobmFtZSkge1xuXHRcdHJldHVybiBuYW1lLm1hdGNoKC9eb24vKTtcblx0fVxufVxuXG5PYmplY3QuYXNzaWduKFZpcnR1YWxET01FbGVtZW50LnByb3RvdHlwZSwgdmlydHVhbERPTUVsZW1lbnRNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBWaXJ0dWFsRE9NRWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSB7XG4gIHJldHVybiBzdmdUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBzdmdBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSFRNTEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gaHRtbEF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5jb25zdCBzdmdUYWdOYW1lcyA9IFtcbiAgICAgICAgXCJhbHRHbHlwaFwiLCBcImFuaW1hdGVcIiwgXCJhbmltYXRlQ29sb3JcIiwgXCJhbmltYXRlTW90aW9uXCIsIFwiYW5pbWF0ZVRyYW5zZm9ybVwiLCBcImFuaW1hdGlvblwiLCBcImF1ZGlvXCIsXG4gICAgICAgIFwiY2lyY2xlXCIsIFwiY2xpcFBhdGhcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY3Vyc29yXCIsXG4gICAgICAgIFwiZGVmc1wiLCBcImRlc2NcIiwgXCJkaXNjYXJkXCIsXG4gICAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgICBcImZlQmxlbmRcIiwgXCJmZUNvbG9yTWF0cml4XCIsIFwiZmVDb21wb25lbnRUcmFuc2ZlclwiLCBcImZlQ29tcG9zaXRlXCIsIFwiZmVDb252b2x2ZU1hdHJpeFwiLCBcImZlRGlmZnVzZUxpZ2h0aW5nXCIsIFwiZmVEaXNwbGFjZW1lbnRNYXBcIiwgXCJmZURpc3RhbnRMaWdodFwiLCBcImZlRHJvcFNoYWRvd1wiLCBcImZlRmxvb2RcIiwgXCJmZUZ1bmNBXCIsIFwiZmVGdW5jQlwiLCBcImZlRnVuY0dcIiwgXCJmZUZ1bmNSXCIsIFwiZmVHYXVzc2lhbkJsdXJcIiwgXCJmZUltYWdlXCIsIFwiZmVNZXJnZVwiLCBcImZlTWVyZ2VOb2RlXCIsIFwiZmVNb3JwaG9sb2d5XCIsIFwiZmVPZmZzZXRcIiwgXCJmZVBvaW50TGlnaHRcIiwgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIiwgXCJmZVNwb3RMaWdodFwiLCBcImZlVGlsZVwiLCBcImZlVHVyYnVsZW5jZVwiLCBcImZpbHRlclwiLCBcImZvbnRcIiwgXCJmb250LWZhY2VcIiwgXCJmb250LWZhY2UtZm9ybWF0XCIsIFwiZm9udC1mYWNlLW5hbWVcIiwgXCJmb250LWZhY2UtdXJpXCIsIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgICAgICBcImdcIiwgXCJnbHlwaFwiLCBcImdseXBoUmVmXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhdGNoXCIsIFwiaGF0Y2hwYXRoXCIsIFwiaGtlcm5cIixcbiAgICAgICAgXCJpbWFnZVwiLCBcImxpbmVcIiwgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICBcImxpc3RlbmVyXCIsXG4gICAgICAgIFwibWFya2VyXCIsIFwibWFza1wiLCBcIm1lc2hcIiwgXCJtZXNoZ3JhZGllbnRcIiwgXCJtZXNocGF0Y2hcIiwgXCJtZXNocm93XCIsIFwibWV0YWRhdGFcIiwgXCJtaXNzaW5nLWdseXBoXCIsIFwibXBhdGhcIixcbiAgICAgICAgXCJwYXRoXCIsIFwicGF0dGVyblwiLCBcInBvbHlnb25cIiwgXCJwb2x5bGluZVwiLCBcInByZWZldGNoXCIsXG4gICAgICAgIFwicmFkaWFsR3JhZGllbnRcIiwgXCJyZWN0XCIsXG4gICAgICAgIFwic2NyaXB0XCIsIFwic2V0XCIsIFwic29saWRjb2xvclwiLCBcInN0b3BcIiwgXCJzdHlsZVwiLCBcInN2Z1wiLCBcInN3aXRjaFwiLCBcInN5bWJvbFwiLFxuICAgICAgICBcInRicmVha1wiLCBcInRleHRcIiwgXCJ0ZXh0QXJlYVwiLCBcInRleHRQYXRoXCIsIFwidGl0bGVcIiwgXCJ0cmVmXCIsIFwidHNwYW5cIixcbiAgICAgICAgXCJ1bmtub3duXCIsIFwidXNlXCIsXG4gICAgICAgIFwidmlkZW9cIiwgXCJ2aWV3XCIsIFwidmtlcm5cIlxuICAgICAgXSxcbiAgICAgIHN2Z0F0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VudC1oZWlnaHRcIiwgXCJhY2N1bXVsYXRlXCIsIFwiYWRkaXRpdmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJhbHBoYWJldGljXCIsIFwiYW1wbGl0dWRlXCIsIFwiYXJhYmljLWZvcm1cIiwgXCJhc2NlbnRcIiwgXCJhdHRyaWJ1dGVOYW1lXCIsIFwiYXR0cmlidXRlVHlwZVwiLCBcImF6aW11dGhcIixcbiAgICAgICAgXCJiYW5kd2lkdGhcIiwgXCJiYXNlRnJlcXVlbmN5XCIsIFwiYmFzZVByb2ZpbGVcIiwgXCJiYXNlbGluZS1zaGlmdFwiLCBcImJib3hcIiwgXCJiZWdpblwiLCBcImJpYXNcIiwgXCJieVwiLFxuICAgICAgICBcImNhbGNNb2RlXCIsIFwiY2FwLWhlaWdodFwiLCBcImNsaXBcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJjbGlwUGF0aFVuaXRzXCIsIFwiY29sb3JcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImNvbG9yLXJlbmRlcmluZ1wiLCBcImNvbnRlbnRTY3JpcHRUeXBlXCIsIFwiY29udGVudFN0eWxlVHlwZVwiLCBcImNyb3Nzb3JpZ2luXCIsIFwiY3Vyc29yXCIsIFwiY3hcIiwgXCJjeVwiLFxuICAgICAgICBcImRcIiwgXCJkZWZhdWx0QWN0aW9uXCIsIFwiZGVzY2VudFwiLCBcImRpZmZ1c2VDb25zdGFudFwiLCBcImRpcmVjdGlvblwiLCBcImRpc3BsYXlcIiwgXCJkaXZpc29yXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJkb3dubG9hZFwiLCBcImR1clwiLCBcImR4XCIsIFwiZHlcIixcbiAgICAgICAgXCJlZGdlTW9kZVwiLCBcImVkaXRhYmxlXCIsIFwiZWxldmF0aW9uXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJlbmRcIiwgXCJldmVudFwiLCBcImV4cG9uZW50XCIsIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBcImZpbGxcIiwgXCJmaWxsLW9wYWNpdHlcIiwgXCJmaWxsLXJ1bGVcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJSZXNcIiwgXCJmaWx0ZXJVbml0c1wiLCBcImZsb29kLWNvbG9yXCIsIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImZvY3VzSGlnaGxpZ2h0XCIsIFwiZm9jdXNhYmxlXCIsIFwiZm9udC1mYW1pbHlcIiwgXCJmb250LXNpemVcIiwgXCJmb250LXNpemUtYWRqdXN0XCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtd2VpZ2h0XCIsIFwiZm9ybWF0XCIsIFwiZnJcIiwgXCJmcm9tXCIsIFwiZnhcIiwgXCJmeVwiLFxuICAgICAgICBcImcxXCIsIFwiZzJcIiwgXCJnbHlwaC1uYW1lXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsIFwiZ2x5cGhSZWZcIiwgXCJncmFkaWVudFRyYW5zZm9ybVwiLCBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGFuZ2luZ1wiLCBcImhhdGNoQ29udGVudFVuaXRzXCIsIFwiaGF0Y2hVbml0c1wiLCBcImhlaWdodFwiLCBcImhvcml6LWFkdi14XCIsIFwiaG9yaXotb3JpZ2luLXhcIiwgXCJob3Jpei1vcmlnaW4teVwiLCBcImhyZWZcIiwgXCJocmVmbGFuZ1wiLFxuICAgICAgICBcImlkXCIsIFwiaWRlb2dyYXBoaWNcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIiwgXCJpblwiLCBcImluMlwiLCBcImluaXRpYWxWaXNpYmlsaXR5XCIsIFwiaW50ZXJjZXB0XCIsXG4gICAgICAgIFwia1wiLCBcImsxXCIsIFwiazJcIiwgXCJrM1wiLCBcIms0XCIsIFwia2VybmVsTWF0cml4XCIsIFwia2VybmVsVW5pdExlbmd0aFwiLCBcImtlcm5pbmdcIiwgXCJrZXlQb2ludHNcIiwgXCJrZXlTcGxpbmVzXCIsIFwia2V5VGltZXNcIixcbiAgICAgICAgXCJsZW5ndGhBZGp1c3RcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwibGltaXRpbmdDb25lQW5nbGVcIiwgXCJsb2NhbFwiLFxuICAgICAgICBcIm1hcmtlci1lbmRcIiwgXCJtYXJrZXItbWlkXCIsIFwibWFya2VyLXN0YXJ0XCIsIFwibWFya2VySGVpZ2h0XCIsIFwibWFya2VyVW5pdHNcIiwgXCJtYXJrZXJXaWR0aFwiLCBcIm1hc2tcIiwgXCJtYXNrQ29udGVudFVuaXRzXCIsIFwibWFza1VuaXRzXCIsIFwibWF0aGVtYXRpY2FsXCIsIFwibWF4XCIsIFwibWVkaWFcIiwgXCJtZWRpYUNoYXJhY3RlckVuY29kaW5nXCIsIFwibWVkaWFDb250ZW50RW5jb2RpbmdzXCIsIFwibWVkaWFTaXplXCIsIFwibWVkaWFUaW1lXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibW9kZVwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJuYXYtZG93blwiLCBcIm5hdi1kb3duLWxlZnRcIiwgXCJuYXYtZG93bi1yaWdodFwiLCBcIm5hdi1sZWZ0XCIsIFwibmF2LW5leHRcIiwgXCJuYXYtcHJldlwiLCBcIm5hdi1yaWdodFwiLCBcIm5hdi11cFwiLCBcIm5hdi11cC1sZWZ0XCIsIFwibmF2LXVwLXJpZ2h0XCIsIFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBcIm9ic2VydmVyXCIsIFwib2Zmc2V0XCIsIFwib3BhY2l0eVwiLCBcIm9wZXJhdG9yXCIsIFwib3JkZXJcIiwgXCJvcmllbnRcIiwgXCJvcmllbnRhdGlvblwiLCBcIm9yaWdpblwiLCBcIm92ZXJmbG93XCIsIFwib3ZlcmxheVwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCIsIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCIsXG4gICAgICAgIFwicGFub3NlLTFcIiwgXCJwYXRoXCIsIFwicGF0aExlbmd0aFwiLCBcInBhdHRlcm5Db250ZW50VW5pdHNcIiwgXCJwYXR0ZXJuVHJhbnNmb3JtXCIsIFwicGF0dGVyblVuaXRzXCIsIFwicGhhc2VcIiwgXCJwaXRjaFwiLCBcInBsYXliYWNrT3JkZXJcIiwgXCJwbGF5YmFja29yZGVyXCIsIFwicG9pbnRlci1ldmVudHNcIiwgXCJwb2ludHNcIiwgXCJwb2ludHNBdFhcIiwgXCJwb2ludHNBdFlcIiwgXCJwb2ludHNBdFpcIiwgXCJwcmVzZXJ2ZUFscGhhXCIsIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInByaW1pdGl2ZVVuaXRzXCIsIFwicHJvcGFnYXRlXCIsXG4gICAgICAgIFwiclwiLCBcInJhZGl1c1wiLCBcInJlZlhcIiwgXCJyZWZZXCIsIFwicmVuZGVyaW5nLWludGVudFwiLCBcInJlcGVhdENvdW50XCIsIFwicmVwZWF0RHVyXCIsIFwicmVxdWlyZWRFeHRlbnNpb25zXCIsIFwicmVxdWlyZWRGZWF0dXJlc1wiLCBcInJlcXVpcmVkRm9udHNcIiwgXCJyZXF1aXJlZEZvcm1hdHNcIiwgXCJyZXN0YXJ0XCIsIFwicmVzdWx0XCIsIFwicm90YXRlXCIsIFwicnhcIiwgXCJyeVwiLFxuICAgICAgICBcInNjYWxlXCIsIFwic2VlZFwiLCBcInNoYXBlLXJlbmRlcmluZ1wiLCBcInNpZGVcIiwgXCJzbG9wZVwiLCBcInNuYXBzaG90VGltZVwiLCBcInNwYWNpbmdcIiwgXCJzcGVjdWxhckNvbnN0YW50XCIsIFwic3BlY3VsYXJFeHBvbmVudFwiLCBcInNwcmVhZE1ldGhvZFwiLCBcInNyY1wiLCBcInN0YXJ0T2Zmc2V0XCIsIFwic3RkRGV2aWF0aW9uXCIsIFwic3RlbWhcIiwgXCJzdGVtdlwiLCBcInN0aXRjaFRpbGVzXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIiwgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiLCBcInN0cmluZ1wiLCBcInN0cm9rZVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaG9mZnNldFwiLCBcInN0cm9rZS1saW5lY2FwXCIsIFwic3Ryb2tlLWxpbmVqb2luXCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgXCJzdHJva2Utb3BhY2l0eVwiLCBcInN0cm9rZS13aWR0aFwiLCBcInN0eWxlXCIsIFwic3VyZmFjZVNjYWxlXCIsIFwic3luY0JlaGF2aW9yXCIsIFwic3luY0JlaGF2aW9yRGVmYXVsdFwiLCBcInN5bmNNYXN0ZXJcIiwgXCJzeW5jVG9sZXJhbmNlXCIsIFwic3luY1RvbGVyYW5jZURlZmF1bHRcIiwgXCJzeXN0ZW1MYW5ndWFnZVwiLFxuICAgICAgICBcInRhYmxlVmFsdWVzXCIsIFwidGFyZ2V0XCIsIFwidGFyZ2V0WFwiLCBcInRhcmdldFlcIiwgXCJ0ZXh0LWFuY2hvclwiLCBcInRleHQtZGVjb3JhdGlvblwiLCBcInRleHQtcmVuZGVyaW5nXCIsIFwidGV4dExlbmd0aFwiLCBcInRpbWVsaW5lQmVnaW5cIiwgXCJ0aW1lbGluZWJlZ2luXCIsIFwidGl0bGVcIiwgXCJ0b1wiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybUJlaGF2aW9yXCIsIFwidHlwZVwiLFxuICAgICAgICBcInUxXCIsIFwidTJcIiwgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCIsIFwidW5pY29kZVwiLCBcInVuaWNvZGUtYmlkaVwiLCBcInVuaWNvZGUtcmFuZ2VcIiwgXCJ1bml0cy1wZXItZW1cIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIiwgXCJ2LWhhbmdpbmdcIiwgXCJ2LWlkZW9ncmFwaGljXCIsIFwidi1tYXRoZW1hdGljYWxcIiwgXCJ2YWx1ZXNcIiwgXCJ2ZXJzaW9uXCIsIFwidmVydC1hZHYteVwiLCBcInZlcnQtb3JpZ2luLXhcIiwgXCJ2ZXJ0LW9yaWdpbi15XCIsIFwidmlld0JveFwiLCBcInZpZXdUYXJnZXRcIiwgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIFwid2lkdGhcIiwgXCJ3aWR0aHNcIiwgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3cml0aW5nLW1vZGVcIixcbiAgICAgICAgXCJ4XCIsIFwieC1oZWlnaHRcIiwgXCJ4MVwiLCBcIngyXCIsIFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInlcIiwgXCJ5MVwiLCBcInkyXCIsIFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInpcIiwgXCJ6b29tQW5kUGFuXCJcbiAgICAgIF0sXG4gICAgICBodG1sQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZXB0XCIsIFwiYWNjZXB0Q2hhcnNldFwiLCBcImFjY2Vzc0tleVwiLCBcImFjdGlvblwiLCBcImFsbG93XCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiYWxsb3dUcmFuc3BhcmVuY3lcIiwgXCJhbHRcIiwgXCJhc3luY1wiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9QbGF5XCIsXG4gICAgICAgIFwiY2FwdHVyZVwiLCBcImNlbGxQYWRkaW5nXCIsIFwiY2VsbFNwYWNpbmdcIiwgXCJjaGFsbGVuZ2VcIiwgXCJjaGFyU2V0XCIsIFwiY2hlY2tlZFwiLCBcImNpdGVcIiwgXCJjbGFzc0lEXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sU3BhblwiLCBcImNvbHNcIiwgXCJjb250ZW50XCIsIFwiY29udGVudEVkaXRhYmxlXCIsIFwiY29udGV4dE1lbnVcIiwgXCJjb250cm9sc1wiLCBcImNvb3Jkc1wiLCBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIFwiZGF0YVwiLCBcImRhdGVUaW1lXCIsIFwiZGVmYXVsdFwiLCBcImRlZmVyXCIsIFwiZGlyXCIsIFwiZGlzYWJsZWRcIiwgXCJkb3dubG9hZFwiLCBcImRyYWdnYWJsZVwiLFxuICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgXCJmb3JtXCIsIFwiZm9ybUFjdGlvblwiLCBcImZvcm1FbmNUeXBlXCIsIFwiZm9ybU1ldGhvZFwiLCBcImZvcm1Ob1ZhbGlkYXRlXCIsIFwiZm9ybVRhcmdldFwiLCBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIFwiaGVhZGVyc1wiLCBcImhlaWdodFwiLCBcImhpZGRlblwiLCBcImhpZ2hcIiwgXCJocmVmXCIsIFwiaHJlZkxhbmdcIiwgXCJodG1sRm9yXCIsIFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRNb2RlXCIsIFwiaW50ZWdyaXR5XCIsIFwiaXNcIixcbiAgICAgICAgXCJrZXlQYXJhbXNcIiwgXCJrZXlUeXBlXCIsIFwia2luZFwiLFxuICAgICAgICBcImxhYmVsXCIsIFwibGFuZ1wiLCBcImxpc3RcIiwgXCJsb29wXCIsIFwibG93XCIsXG4gICAgICAgIFwibWFuaWZlc3RcIiwgXCJtYXJnaW5IZWlnaHRcIiwgXCJtYXJnaW5XaWR0aFwiLCBcIm1heFwiLCBcIm1heExlbmd0aFwiLCBcIm1lZGlhXCIsIFwibWVkaWFHcm91cFwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1pbkxlbmd0aFwiLCBcIm11bHRpcGxlXCIsIFwibXV0ZWRcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibm9WYWxpZGF0ZVwiLCBcIm5vbmNlXCIsXG4gICAgICAgIFwib3BlblwiLCBcIm9wdGltdW1cIixcbiAgICAgICAgXCJwYXR0ZXJuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJwb3N0ZXJcIiwgXCJwcmVsb2FkXCIsIFwicHJvZmlsZVwiLFxuICAgICAgICBcInJhZGlvR3JvdXBcIiwgXCJyZWFkT25seVwiLCBcInJlbFwiLCBcInJlcXVpcmVkXCIsIFwicmV2ZXJzZWRcIiwgXCJyb2xlXCIsIFwicm93U3BhblwiLCBcInJvd3NcIixcbiAgICAgICAgXCJzYW5kYm94XCIsIFwic2NvcGVcIiwgXCJzY29wZWRcIiwgXCJzY3JvbGxpbmdcIiwgXCJzZWFtbGVzc1wiLCBcInNlbGVjdGVkXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwic2l6ZXNcIiwgXCJzcGFuXCIsIFwic3BlbGxDaGVja1wiLCBcInNyY1wiLCBcInNyY0RvY1wiLCBcInNyY0xhbmdcIiwgXCJzcmNTZXRcIiwgXCJzdGFydFwiLCBcInN0ZXBcIiwgXCJzdHlsZVwiLCBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0YWJJbmRleFwiLCBcInRhcmdldFwiLCBcInRpdGxlXCIsIFwidHlwZVwiLFxuICAgICAgICBcInVzZU1hcFwiLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgXCJ3bW9kZVwiLFxuICAgICAgICBcIndyYXBcIlxuICAgICAgXTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZpcnR1YWxET01FbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGlzSFRNTEF0dHJpYnV0ZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL25hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlydHVhbERPTUhUTUxFbGVtZW50IGV4dGVuZHMgVmlydHVhbERPTUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0YWdOYW1lLCBwcm9wcykge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuXG4gICAgc3VwZXIocHJvcHMsIGRvbUVsZW1lbnQpO1xuICB9XG5cbiAgaXNBdHRyaWJ1dGVOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gaXNIVE1MQXR0cmlidXRlTmFtZShuYW1lKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlydHVhbERPTUVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuaW1wb3J0IHsgaXNTVkdBdHRyaWJ1dGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyBIVFRQX1dXV19XM19PUkdfMjAwMF9TVkcgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpcnR1YWxET01TVkdFbGVtZW50IGV4dGVuZHMgVmlydHVhbERPTUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0YWdOYW1lLCBwcm9wcykge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSFRUUF9XV1dfVzNfT1JHXzIwMDBfU1ZHLCB0YWdOYW1lKTtcblxuICAgIHN1cGVyKHByb3BzLCBkb21FbGVtZW50KTtcbiAgfVxuXG4gIGlzQXR0cmlidXRlTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGlzU1ZHQXR0cmlidXRlTmFtZShuYW1lKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5pbXBvcnQgUmVhY3RDbGFzcyBmcm9tIFwiLi9yZWFjdENsYXNzXCI7XG5pbXBvcnQgUmVhY3RDb21wb25lbnQgZnJvbSBcIi4vcmVhY3RDb21wb25lbnRcIjtcbmltcG9ydCBSZWFjdENsYXNzRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50L3JlYWN0L2NsYXNzXCI7XG5pbXBvcnQgUmVhY3RGdW5jdGlvbkVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudC9yZWFjdC9mdW5jdGlvblwiO1xuaW1wb3J0IFJlYWN0Q29tcG9uZW50RWxlbWVudCBmcm9tIFwiLi9lbGVtZW50L3JlYWN0L2NvbXBvbmVudFwiO1xuaW1wb3J0IFZpcnR1YWxET01UZXh0RWxlbWVudCBmcm9tIFwiLi9lbGVtZW50L3ZpcnR1YWxET01Ob2RlL3RleHRFbGVtZW50XCI7XG5pbXBvcnQgVmlydHVhbERPTUhUTUxFbGVtZW50IGZyb20gXCIuL2VsZW1lbnQvdmlydHVhbERPTU5vZGUvZWxlbWVudC9odG1sXCI7XG5pbXBvcnQgVmlydHVhbERPTVNWR0VsZW1lbnQgZnJvbSBcIi4vZWxlbWVudC92aXJ0dWFsRE9NTm9kZS9lbGVtZW50L3N2Z1wiO1xuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgU1RSSU5HLCBGVU5DVElPTiB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBjcmVhdGVDbGFzcyhvYmplY3QpIHtcbiAgcmV0dXJuIFJlYWN0Q2xhc3MuY3JlYXRlKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZmlyc3RBcmd1bWVudCwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbkZyb21SZW1haW5pbmdBcmd1bWVudHMocmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBwcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfSk7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGZpcnN0QXJndW1lbnQsICAvLy9cbiAgICAgICAgICAgIHZpcnR1YWxET01FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmlydHVhbERPTVNWR0VsZW1lbnQodGFnTmFtZSwgcHJvcHMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWaXJ0dWFsRE9NSFRNTEVsZW1lbnQodGFnTmFtZSwgcHJvcHMpO1xuXG4gICAgICBlbGVtZW50ID0gdmlydHVhbERPTUVsZW1lbnQgLy8vXG4gICAgfSBlbHNlIGlmIChmaXJzdEFyZ3VtZW50IGluc3RhbmNlb2YgUmVhY3RDbGFzcykge1xuICAgICAgY29uc3QgcmVhY3RDbGFzcyA9IGZpcnN0QXJndW1lbnQsIC8vL1xuICAgICAgICAgICAgcmVhY3RDbGFzc0VsZW1lbnQgPSBuZXcgUmVhY3RDbGFzc0VsZW1lbnQocmVhY3RDbGFzcywgcHJvcHMpO1xuXG4gICAgICBlbGVtZW50ID0gcmVhY3RDbGFzc0VsZW1lbnQ7ICAvLy9cblxuICAgICAgY29uc3QgeyBtaXhpbnMgfSA9IHJlYWN0Q2xhc3M7XG5cbiAgICAgIGFzc2lnbk1peGlucyhtaXhpbnMsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNTdWJjbGFzc09mKGZpcnN0QXJndW1lbnQsIFJlYWN0Q29tcG9uZW50KSkge1xuICAgICAgY29uc3QgUmVhY3RDb21wb25lbnQgPSBmaXJzdEFyZ3VtZW50LCAgLy8vXG4gICAgICAgICAgICByZWFjdENvbXBvbmVudCA9IG5ldyBSZWFjdENvbXBvbmVudCgpLFxuICAgICAgICAgICAgcmVhY3RDb21wb25lbnRFbGVtZW50ID0gbmV3IFJlYWN0Q29tcG9uZW50RWxlbWVudChyZWFjdENvbXBvbmVudCwgcHJvcHMpO1xuXG4gICAgICBlbGVtZW50ID0gcmVhY3RDb21wb25lbnRFbGVtZW50OyAgLy8vXG5cbiAgICAgIGFzc2lnblJlYWN0Q29tcG9uZW50TWl4aW5zKFJlYWN0Q29tcG9uZW50LCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBGVU5DVElPTikge1xuICAgICAgY29uc3QgcmVhY3RGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQsICAvLy9cbiAgICAgICAgICAgIHJlYWN0RnVuY3Rpb25FbGVtZW50ID0gbmV3IFJlYWN0RnVuY3Rpb25FbGVtZW50KHJlYWN0RnVuY3Rpb24sIHByb3BzKTtcblxuICAgICAgZWxlbWVudCA9IHJlYWN0RnVuY3Rpb25FbGVtZW50OyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gUmVhY3RDb21wb25lbnQsIC8vL1xuICAgICAgUmVhY3QgPSB7XG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgY3JlYXRlQ2xhc3MsXG4gICAgICAgIGNyZWF0ZUVsZW1lbnRcbiAgICAgIH07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBjaGlsZHJlbkZyb21SZW1haW5pbmdBcmd1bWVudHMocmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIHJlbWFpbmluZ0FyZ3VtZW50cyA9IGZsYXR0ZW4ocmVtYWluaW5nQXJndW1lbnRzKTsgLy8vXG5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXTtcblxuICByZW1haW5pbmdBcmd1bWVudHMuZm9yRWFjaCgoY2hpbGRBcmd1bWVudCkgPT4ge1xuICAgIGxldCBjaGlsZDtcblxuICAgIGlmIChjaGlsZEFyZ3VtZW50KSB7ICAvLy9cbiAgICAgIGlmIChpc1N1YmNsYXNzT2YoY2hpbGRBcmd1bWVudC5jb25zdHJ1Y3RvciwgRWxlbWVudCkpIHsgLy8vXG4gICAgICAgIGNoaWxkID0gY2hpbGRBcmd1bWVudDsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNoaWxkQXJndW1lbnQsIC8vL1xuICAgICAgICAgICAgICB2aXJ0dWFsRE9NVGV4dEVsZW1lbnQgPSBuZXcgVmlydHVhbERPTVRleHRFbGVtZW50KHRleHQpO1xuXG4gICAgICAgIGNoaWxkID0gdmlydHVhbERPTVRleHRFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gYXNzaWduUmVhY3RDb21wb25lbnRNaXhpbnMocmVhY3RDb21wb25lbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBtaXhpbnMgfSA9IHJlYWN0Q29tcG9uZW50O1xuXG4gIHJlYWN0Q29tcG9uZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHJlYWN0Q29tcG9uZW50KTsgLy8vXG5cbiAgaWYgKHJlYWN0Q29tcG9uZW50ICE9PSBSZWFjdENvbXBvbmVudCkge1xuICAgIGFzc2lnblJlYWN0Q29tcG9uZW50TWl4aW5zKHJlYWN0Q29tcG9uZW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIGFzc2lnbk1peGlucyhtaXhpbnMsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25NaXhpbnMobWl4aW5zLCBlbGVtZW50KSB7XG4gIGlmIChtaXhpbnMpIHtcbiAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gbWl4aW47XG5cbiAgICAgIGVsZW1lbnRbbmFtZV0gPSBtaXhpbi5iaW5kKGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgLy8vXG4gICAgc3ViY2xhc3MgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGFyZ3VtZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFyZ3VtZW50KTsgLy8vXG5cbiAgICBpZiAoYXJndW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHN1YmNsYXNzID0gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YmNsYXNzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlydHVhbERPTU5vZGUgZnJvbSBcIi4vZWxlbWVudC92aXJ0dWFsRE9NTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdERPTSB7XG4gIHN0YXRpYyByZW5kZXIoZWxlbWVudCwgcGFyZW50RE9NRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudCA9IFZpcnR1YWxET01Ob2RlLmZyb21ET01FbGVtZW50KHBhcmVudERPTUVsZW1lbnQpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IG51bGwsXG4gICAgICAgICAgY29udGV4dCA9IHt9O1xuXG4gICAgZWxlbWVudC5tb3VudChwYXJlbnQsIHJlZmVyZW5jZSwgY29udGV4dCk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFjdERPTSB9IGZyb20gXCIuL3JlYWN0RE9NXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjggPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBDVFJMX0MgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUID0gXCJhY2NlcHRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRSA9IFwiY29udGVudC10eXBlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRVRYX0NIQVJBQ1RFUiA9IFwiXFx1MDAwM1wiO1xuZXhwb3J0IGNvbnN0IENPTE9OX0NIQVJBQ1RFUiA9IFwiOlwiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMSU5FX0ZFRURfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIgPSBcIlxcclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IG93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSxcbiAgICAgICAgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb3ZlcndyaXR0ZW4gPSBvd25Qcm9wZXJ0eU5hbWVzLnNvbWUoKG93blByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9IG93blByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgaGVhZGVyc1tvd25Qcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgaWYgKCFvdmVyd3JpdHRlbikge1xuICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBvd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksXG4gICAgICAgIGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXMgPSBvd25Qcm9wZXJ0eU5hbWVzLm1hcCgob3duUHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lID0gb3duUHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lc0luY2x1ZGVzTG93ZXJjYXNlTmFtZSA9IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXMuaW5jbHVkZXMobG93ZXJjYXNlTmFtZSk7XG5cbiAgaWYgKCFsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWVzSW5jbHVkZXNMb3dlcmNhc2VOYW1lKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQUNDRVBULCBDT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IHVuZGVyd3JpdGUsIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2h0dHBcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHQoaGVhZGVycywgYWNjZXB0KTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9zdChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gY29udGVudDtcbiAgICBjb250ZW50ID0gaGVhZGVycztcbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBQT1NUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEU7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdChoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHVuZGVyd3JpdGVDb250ZW50VHlwZShoZWFkZXJzLCBjb250ZW50VHlwZSk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBjb25zdCB1cmwgPSB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpLFxuICAgICAgICBhY2NlcHQgPSBoZWFkZXJzW0FDQ0VQVF0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVCwgYWNjZXB0KTtcbiAgfVxuXG4gIGlmIChjb250ZW50VHlwZSAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQ09OVEVOVF9UWVBFLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0KGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBULCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEUsICAvLy9cbiAgICAgICAgdmFsdWUgPSBjb250ZW50VFlwZTsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVID0gXCJ1XCI7XG5leHBvcnQgY29uc3QgU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBORVdfTElORSA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgTEVTU19USEFOID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgQU1QRVJTQU5EID0gXCImYW1wO1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0gXCImZ3Q7XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBMRVNTX1RIQU4sIEFNUEVSU0FORCwgR1JFQVRFUl9USEFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XHJcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mLywgQU1QRVJTQU5EKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi8sIEdSRUFURVJfVEhBTik7XHJcblxyXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVUeXBlID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgbmFtZVR5cGUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBjb21tZW50VHlwZSA9IFwiY29tbWVudFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVR5cGUgPSBcImVuZC1vZi1saW5lXCI7XG5leHBvcnQgY29uc3Qgd2hpdGVzcGFjZVR5cGUgPSBcIndoaXRlc3BhY2VcIjtcbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsVHlwZSA9IFwic3RyaW5nLWxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBicm9rZW5Db21tZW50VHlwZSA9IFwiYnJva2VuLWMwbW1lbnRcIjsgIC8vL1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSA9IFwicmVndWxhci1leHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgYnJva2VuU3RyaW5nTGl0ZXJhbFR5cGUgPSBcImJyb2tlbi1zdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBlbmQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYHN0YXJ0LW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgbWlkZGxlLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGVUeXBlLFxuICBuYW1lVHlwZSxcbiAgY29tbWVudFR5cGUsXG4gIGVuZE9mTGluZVR5cGUsXG4gIHdoaXRlc3BhY2VUeXBlLFxuICBzdHJpbmdMaXRlcmFsVHlwZSxcbiAgYnJva2VuQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgYnJva2VuU3RyaW5nTGl0ZXJhbFR5cGUsXG4gIHNpbmdsZUxpbmVDb21tZW50VHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgc2FuaXRpc2VDb250ZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0SW5uZXJIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLmlubmVySFRNTDtcbiAgfVxuXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUgPT09IGVuZE9mTGluZVR5cGUpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNFcXVhbFRvKHRva2VuKSB7XG4gICAgY29uc3QgZXF1YWxUb1Rva2VuID0gKHRoaXMgPT09IHRva2VuKTtcblxuICAgIHJldHVybiBlcXVhbFRvVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAgLy8vXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7dGhpcy5pbm5lckhUTUx9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPT0gZW5kUG9zaXRpb24pIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7ICAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudDsgLy8vXG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247ICAvLy9cbiAgICAgIHN0YXJ0UG9zaXRpb24gPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IGNvbnRlbnQ7IC8vL1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuICBcbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShjb250ZW50LCB0aGlzLnR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIGFzRW50cnkoKSB7XG4gICAgY29uc3QgZW50cnkgPSB7fSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBgJHt0aGlzLnJlZ3VsYXJFeHByZXNzaW9ufWA7XG5cbiAgICBlbnRyeVt0aGlzLnR5cGVdID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuO1xuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub2tlbihUb2tlbikge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVndWxhckV4cHJlc3Npb24gfSA9IFRva2VuLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW50cnkoZW50cnkpIHtcbiAgICBjb25zdCBlbnRyeUtleXMgPSBPYmplY3Qua2V5cyhlbnRyeSksXG4gICAgICAgICAgZmlyc3RFbnRyeUtleSA9IGZpcnN0KGVudHJ5S2V5cyksXG4gICAgICAgICAgdHlwZSA9IGZpcnN0RW50cnlLZXksIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGVudHJ5W3R5cGVdLFxuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybik7XG4gICAgICAgIFxuICAgIHJldHVybiBydWxlOyBcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgICBjb25zdCB1bmljb2RlID0gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgZmxhZ3MgPSB1bmljb2RlID9cbiAgICAgICAgICAgICAgICAgICAgVSA6XG4gICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLCBmbGFncyksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSByZWdFeHAsIC8vL1xuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gIGNvbnN0IHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiA9IC91ey8sIC8vL1xuICAgICAgICBpbmRleCA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybi5zZWFyY2godW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgdW5pY29kZSA9IChpbmRleCAhPT0gLTEpO1xuXG4gIHJldHVybiB1bmljb2RlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdXMgPSBcIitcIjtcclxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSBcIlx1MDNCNVwiO1xyXG5leHBvcnQgY29uc3Qgd2lsZGNhcmQgPSBcIi5cIjtcclxuZXhwb3J0IGNvbnN0IGFzdGVyaXNrID0gXCIqXCI7XHJcbmV4cG9ydCBjb25zdCBzZXBhcmF0b3IgPSBcIjo6PVwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gXCIhXCI7XHJcbmV4cG9ydCBjb25zdCBOT19XSElURVNQQUNFID0gXCI8Tk9fV0hJVEVTUEFDRT5cIjtcclxuZXhwb3J0IGNvbnN0IEVORF9PRl9MSU5FID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgcGx1cyxcclxuICBlcHNpbG9uLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86Ojo9fFxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwhfFxcXFwqfFxcXFwrfFxcXFwufFx1MDNCNXw7fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInR5cGVcIjogXCJeXFxcXFtbXlxcXFxdXStcXFxcXVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyB3aGl0ZXNwYWNlVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZXNwYWNlVG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2hpdGVzcGFjZVRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGJyb2tlbkNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb2tlbkNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQnJva2VuQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IGJyb2tlbkNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChCcm9rZW5Db21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQnJva2VuQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKD86XFxcXC58W15cXC9dKSpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcLy4qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBORVdfTElORSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCkge1xuICAgIHN1cGVyKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IE5FV19MSU5FO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHRoaXMuaW5kZXgpOyB9XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgZW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IC9cXHJcXG58XFxyfFxcbi8sXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gZW5kT2ZMaW5lVHlwZSwgLy8vXG4gICAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgICAgICBzaWduaWZpY2FudCA9IGZhbHNlLFxuICAgICAgICAgICAgICB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICAgIGVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gPSBuZXcgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwqLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzouKz8oPz1cXCpcXC8pfC4rJCkvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmltcG9ydCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXC58W14nXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2x5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goU2luZ2x5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFNpbmdseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKERvdWJseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChEb3VibHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuSW5Db21tZW50UHJlc2VydmluZ1Rva2VuKHRva2VuKSB7XG4gIGxldCB0b2tlbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gPSBmYWxzZTtcblxuICBjb25zdCB0b2tlbkNvbW1lbnRUb2tlbiA9IHRva2VuLmlzQ29tbWVudFRva2VuKCk7XG5cbiAgaWYgKHRva2VuQ29tbWVudFRva2VuKSB7XG4gICAgY29uc3QgY29tbWVudFRva2VuID0gdG9rZW4sIC8vL1xuICAgICAgICAgIGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBjb21tZW50VG9rZW4uaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCk7XG5cbiAgICB0b2tlbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9rZW5Db21tZW50UHJlc2VydmluZ1Rva2VuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi9ydWxlXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBCcm9rZW5Db21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9icm9rZW5Db21tZW50XCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcclxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XHJcbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2Jyb2tlblN0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9icm9rZW5TdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuaW1wb3J0IHsgU1RSSU5HLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGlzVG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Rva2VuXCI7XHJcblxyXG5jb25zdCB7IHNwbGljZSB9ID0gYXJyYXlVdGlsaXRpZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25MZXhlciB7XHJcbiAgY29uc3RydWN0b3IocnVsZXMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICB9XHJcbiAgXHJcbiAgZ2V0UnVsZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlcztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMgPSB0aGlzLnRva2VuaXNlRW5kT2ZMaW5lcyhjb250ZW50KSxcclxuICAgICAgICAgIHRva2Vuc09yQ29udGVudHMgPSBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzOyAvLy9cclxuXHJcbiAgICB0aGlzLnRva2VuaXNlQ29udGVudHModG9rZW5zT3JDb250ZW50cyk7XHJcblxyXG4gICAgY29uc3QgdG9rZW5zID0gdG9rZW5zT3JDb250ZW50czsgIC8vL1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZUVuZE9mTGluZXMoY29udGVudCwgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuKSB7XHJcbiAgICBjb25zdCBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzID0gW107XHJcblxyXG4gICAgbGV0IGVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lVG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgd2hpbGUgKGVuZE9mTGluZVRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGVuZE9mTGluZVRva2VuSW5kZXggPSBlbmRPZkxpbmVUb2tlbi5nZXRJbmRleCgpLFxyXG4gICAgICAgICAgICBlbmRPZkxpbmVUb2tlbkNvbnRlbnRMZW5ndGggPSBlbmRPZkxpbmVUb2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIGxlZnQgPSBlbmRPZkxpbmVUb2tlbkluZGV4LCAvLy9cclxuICAgICAgICAgICAgcmlnaHQgPSBlbmRPZkxpbmVUb2tlbkluZGV4ICsgZW5kT2ZMaW5lVG9rZW5Db250ZW50TGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGxlZnQpLFxyXG4gICAgICAgICAgICByaWdodENvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhyaWdodCk7XHJcblxyXG4gICAgICBjb250ZW50ID0gbGVmdENvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMucHVzaChjb250ZW50KTtcclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMucHVzaChlbmRPZkxpbmVUb2tlbik7XHJcblxyXG4gICAgICBjb250ZW50ID0gcmlnaHRDb250ZW50OyAvLy9cclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lVG9rZW4ubWF0Y2goY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5kT2ZMaW5lVG9rZW5zT3JDb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VDb250ZW50cyh0b2tlbnNPckNvbnRlbnRzKSB7XHJcbiAgICBsZXQgaW5Db21tZW50ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGluZGV4ID0gMCxcclxuICAgICAgICB0b2tlbnNPckNvbnRlbnRzTGVuZ3RoID0gdG9rZW5zT3JDb250ZW50cy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdG9rZW5zT3JDb250ZW50c0xlbmd0aCkge1xyXG4gICAgICBjb25zdCB0b2tlbk9yQ29udGVudCA9IHRva2Vuc09yQ29udGVudHNbaW5kZXhdLFxyXG4gICAgICAgICAgICB0b2tlbk9yQ29udGVudFN0cmluZyA9ICh0eXBlb2YgdG9rZW5PckNvbnRlbnQgPT09IFNUUklORyksXHJcbiAgICAgICAgICAgIHRva2VuT3JDb250ZW50Q29udGVudCA9IHRva2VuT3JDb250ZW50U3RyaW5nOyAvLy9cclxuXHJcbiAgICAgIGlmICh0b2tlbk9yQ29udGVudENvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCB0b2tlbnMgPSBbXSxcclxuICAgICAgICAgICAgICBjb250ZW50ID0gdG9rZW5PckNvbnRlbnQ7IC8vL1xyXG5cclxuICAgICAgICBpbkNvbW1lbnQgPSB0aGlzLnRva2VuaXNlQ29udGVudChjb250ZW50LCB0b2tlbnMsIGluQ29tbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xyXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgc3BsaWNlKHRva2Vuc09yQ29udGVudHMsIHN0YXJ0LCBkZWxldGVDb3VudCwgdG9rZW5zKTtcclxuXHJcbiAgICAgICAgdG9rZW5zT3JDb250ZW50c0xlbmd0aCArPSB0b2tlbnNMZW5ndGggLSAxO1xyXG5cclxuICAgICAgICBpbmRleCArPSB0b2tlbnNMZW5ndGggLSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VDb250ZW50KGNvbnRlbnQsIHRva2VucywgaW5Db21tZW50KSB7XHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IHRoaXMubWF0Y2hNdWx0aUxpbmVDb21tZW50SW5Db21tZW50KGNvbnRlbnQsIGluQ29tbWVudClcclxuICAgICAgICAgICAgICAgfHwgdGhpcy5tYXRjaFdoaXRlc3BhY2UoY29udGVudClcclxuICAgICAgICAgICAgICAgfHwgdGhpcy5tYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoU2luZ2xlTGluZUNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpXHJcbiAgICAgICAgICAgICAgIHx8IHRoaXMubWF0Y2hSZWd1bGFyRXhwcmVzc2lvbihjb250ZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KTtcclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5ydWxlcy5zb21lKChydWxlKSA9PiB7XHJcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gcnVsZS5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRlbnQgJyR7Y29udGVudH0nIGNhbm5vdCBiZSB0b2tlbmlzZWQuYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBpc1Rva2VuSW5Db21tZW50UHJlc2VydmluZ1Rva2VuKHRva2VuKSxcclxuICAgICAgICAgICAgdG9rZW5Db250ZW50TGVuZ3RoID0gdG9rZW4uZ2V0Q29udGVudExlbmd0aCgpLFxyXG4gICAgICAgICAgICBzdGFydCA9IHRva2VuQ29udGVudExlbmd0aDsgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQpO1xyXG5cclxuICAgICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgLy8vXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluQ29tbWVudDtcclxuICB9XHJcblxyXG4gIG1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHtcclxuICAgIGNvbnN0IGJyb2tlbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyb2tlbkNvbW1lbnRUb2tlbi5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICByZXR1cm4gYnJva2VuQ29tbWVudFRva2VuO1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hTaW5nbGVMaW5lQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHtcclxuICAgIGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnRJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgfHwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbXVsdGlMaW5Db21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBtdWx0aUxpbkNvbW1lbnRUb2tlbjtcclxuICB9XHJcblxyXG4gIG1hdGNoV2hpdGVzcGFjZShjb250ZW50KSB7IHJldHVybiBXaGl0ZXNwYWNlVG9rZW4ubWF0Y2goY29udGVudCk7IH1cclxuXHJcbiAgbWF0Y2hSZWd1bGFyRXhwcmVzc2lvbihjb250ZW50KSB7IHJldHVybiBSZWd1bGFyRXhwcmVzc2lvblRva2VuLm1hdGNoKGNvbnRlbnQpOyB9XHJcblxyXG4gIG1hdGNoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KSB7IHJldHVybiBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goY29udGVudCkgfHwgU2luZ2x5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKGNvbnRlbnQpOyB9XHJcblxyXG4gIG1hdGNoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KSB7IHJldHVybiBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goY29udGVudCkgfHwgRG91Ymx5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKGNvbnRlbnQpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhDbGFzcywgZW50cmllcykge1xyXG4gICAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KSksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBtYXRjaEJyb2tlbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gIG1hdGNoU2luZ2xlTGluZUNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gIG1hdGNoTXVsdGlMaW5lQ29tbWVudEluQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hNdWx0aUxpbmVDb21tZW50Tm90SW5Db21tZW50KGNvbnRlbnQsIGluQ29tbWVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3xcXFxcLXxcXFxcKnxcXFxcLylcIlxyXG4gIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIG1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hTaW5nbGVMaW5lQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hNdWx0aUxpbmVDb21tZW50SW5Db21tZW50KGNvbnRlbnQsIGluQ29tbWVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gIG1hdGNoUmVndWxhckV4cHJlc3Npb24oY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCYXNpY0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBORVdfTElORSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCkge1xuICAgIHN1cGVyKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IE5FV19MSU5FO1xuICAgIFxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0aGlzLmluZGV4KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSAvXFxyXFxufFxccnxcXG4vLFxuICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGVuZE9mTGluZVR5cGUsIC8vL1xuICAgICAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgICAgICB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICAgIGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gPSBuZXcgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vY29tbW9uL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi9jb21tb24vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9ibmYvc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7IC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7ICAvLy9cblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvYnJva2VuU3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvYnJva2VuU3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjsgIC8vL1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKVxcXFwlXCIgfSxcclxuXHJcbiAgeyBcImZyZXF1ZW5jeVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86aHp8a2h6KVwiIH0sXHJcblxyXG4gIHsgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiIH0sXHJcblxyXG4gIHsgXCJsZW5ndGhcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnB4fGNtfG1tfGlufHB0fHBjKVwiIH0sXHJcblxyXG4gIHsgXCJhbmdsZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86ZGVnfHJhZHxncmFkKVwiIH0sXHJcblxyXG4gIHsgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiIH0sXHJcblxyXG4gIHsgXCJyZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylyZW1cIiB9LFxyXG5cclxuICB7IFwiZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKyllbVwiIH0sXHJcblxyXG4gIHsgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCIgfSxcclxuXHJcbiAgeyBcInNwZWNpYWxcIjogXCJeO3w6Onw6fFxcXFwufCx8L3xcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcIm9wZXJhdG9yXCI6IFwiXl4oPzphbmR8bm90fG9ubHkpJFwiIH0sXHJcblxyXG4gIHsgXCJpZGVudGlmaWVyXCI6IFwiXltfYS16QS1aMC05LV0rXCIgfSxcclxuXHJcbiAgeyBcInVuYXJ5LW9wZXJhdG9yXCI6IFwiXlxcXFwrfFxcXFwtXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbixcclxuICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbmlzZUVuZE9mTGluZXMoY29udGVudCkgeyByZXR1cm4gc3VwZXIudG9rZW5pc2VFbmRPZkxpbmVzKGNvbnRlbnQsIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4pOyB9XHJcblxyXG4gIG1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hTaW5nbGVMaW5lQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHtcclxuICAgIGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnRJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgfHwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbXVsdGlMaW5Db21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBtdWx0aUxpbkNvbW1lbnRUb2tlbjtcclxuICB9XHJcblxyXG4gIG1hdGNoUmVndWxhckV4cHJlc3Npb24oY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBcIjo6PVwiIGRlZmluaXRpb25zIFwiO1wiIDtcblxuICAgICAgbmFtZSAgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgZGVmaW5pdGlvbnMgICAgICAgICAgIDo6PSAgZGVmaW5pdGlvbiAoIFwifFwiIGRlZmluaXRpb24gKSogO1xuXG4gICAgICBkZWZpbml0aW9uICAgICAgICAgICAgOjo9ICBwYXJ0KyA7XG5cbiAgICAgIHBhcnQgICAgICAgICAgICAgICAgICA6Oj0gIG5vblRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbm9XaGl0ZXNwYWNlUGFydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG5vblRlcm1pbmFsUGFydCAgICAgICA6Oj0gIGNob2ljZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgc2VxdWVuY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJ1bGVOYW1lIGxvb2tBaGVhZE1vZGlmaWVyP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIHRlcm1pbmFsUGFydCAgICAgICAgICA6Oj0gIHNpZ25pZmljYW50VG9rZW5UeXBlXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFN5bWJvbFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICBub1doaXRlc3BhY2VQYXJ0ICAgICAgOjo9ICBcIjxOT19XSElURVNQQUNFPlwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgY2hvaWNlT2ZQYXJ0cyAgICAgICAgIDo6PSAgXCIoXCIgcGFydCAoIFwifFwiIHBhcnQgKSsgXCIpXCIgO1xuXG4gICAgICBzZXF1ZW5jZU9mUGFydHMgICAgICAgOjo9ICBcIihcIiBwYXJ0IHBhcnQrIFwiKVwiIDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICB0ZXJtaW5hbFN5bWJvbCAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuXG4gICAgICBlcHNpbG9uICAgICAgICAgICAgICAgOjo9ICBcIlx1MDNCNVwiIDsgXG5cbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHplcm9Pck1vcmVRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiIVwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEJBUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0ggPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBORVdfTElORSA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTSU5HTEVfU1BBQ0UgPSBcIiBcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HLCBTSU5HTEVfU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU0lOR0xFX1NQQUNFO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKG9sZERlZmluaXRpb24sIG5ld0RlZmluaXRpb24pIHtcbiAgICBjb25zdCBvbGREZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2Yob2xkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAob2xkRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb2xkRGVmaW5pdGlvbkluZGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBuZXdEZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHJ1bGVOb2RlID0gbnVsbDtcblxuICAgIGNvbnRleHQuaW5jcmVhc2VEZXB0aCgpO1xuXG4gICAgY29uc3QgdG9vRGVlcCA9IGNvbnRleHQuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgICBjaGlsZE5vZGVzID0gZGVmaW5pdGlvbk5vZGVzLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSB0aGlzLk5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgICAgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVjcmVhc2VEZXB0aCgpO1xuXG4gICAgcmV0dXJuIHJ1bGVOb2RlO1xuICB9XG5cbiAgcGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBkZWZpbml0aW9uLnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgcnVsZSA9IG5ldyBDbGFzcyhuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgbGFzdCwgcHVzaCwgZmlsdGVyLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbihhcnJheSkgeyByZXR1cm4gYXJyYXkuZmlsdGVyKChlbnRyeSwgaW5kZXgpID0+IGlzRXZlbihpbmRleCkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmltcG9ydCB7IE5FV19MSU5FLCBFTVBUWV9TVFJJTkcsIFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORTtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU0lOR0xFX1NQQUNFO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEJBUiwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFtudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbl0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBQYXJzZVRyZWU7ICAvLy9cbiAgICB9XG4gICAgXG4gICAgY29uc3QgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgYXJncyA9IFtudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbl0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5lc0Zyb21EZXB0aChkZXB0aCkge1xuICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZGVwdGgpIHtcbiAgICBsaW5lc1tpbmRleCsrXSA9IEVNUFRZX1NUUklORztcbiAgfVxuXG4gIHJldHVybiBsaW5lcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgdG9rZW5JbmRleGVzID0gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cnVsZU5hbWV9JHt0b2tlbkluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0tJHtsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgO1xuXG4gIHJldHVybiB0b2tlbkluZGV4ZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBEQVNILCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSCksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucykge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZVBhcnNlVHJlZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGZpcnN0KGNoaWxkTm9kZVBhcnNlVHJlZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSAwO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gTWF0aC5tYXgoY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCAtIHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoO1xuXG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2hpbGROb2Rlc1BhcnNlVHJlZSwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZS5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICBjb25zdCBib3R0b21NYXJnaW5EZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCAtIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQoY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucyk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gY2hpbGQgbm9kZXMgYXQgcnVsZSAnJHtydWxlTmFtZX0nLmApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdW5kZWZpbmVkLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVzaCwgZmlyc3QsIGFsbEJ1dEZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldEZpcnN0UGFydCgpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBmaXJzdFBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0c0xlbmd0aCgpIHtcbiAgICBjb25zdCBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHBhcnRzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsQnV0Rmlyc3RQYXJ0cygpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdFBhcnRzID0gYWxsQnV0Rmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gYWxsQnV0Rmlyc3RQYXJ0cztcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBpbmRleCwgY29udGV4dCwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7IC8vL1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSB0cnVlO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4KytdO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnRzLCBub2RlcywgaW5kZXgsIGNvbnRleHQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGNvbnN0IHBhcnRzTm9kZXMgPSBbXTtcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KTtcblxuICAgIGlmIChwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICAgIHBhcnNlZCA9IHJ1bGVOYW1lUGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIGNvbnRleHQpKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnQge1xuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc0Vwc2lsb25QYXJ0KCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gZmFsc2U7XG4gICAgXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgY2xvbmUoUGFydCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgUGFydCguLi5yZW1haW5pbmdBcmd1bWVudHMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB1bmRlZmluZWQsIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYFske3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGV9XWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQobmFtZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IFBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IFJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IEVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgUnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBEb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IFdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgRW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IERlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IFF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IERlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3QgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgPSBcIm5vV2hpdGVzcGFjZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJsb29rQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBcInJlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9wdGlvbmFsUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwib25lT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcInplcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFwic2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5hbWVOb2RlIGZyb20gXCIuLi9ub2RlL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOYW1lTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBjbG9uZShQYXJ0LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBQYXJ0KC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICBwYXJzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IHF1ZXN0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE9wdGlvbmFsUGFydFBhcnQsIHRoaXMucGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG4gIFxuICBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZShQYXJ0KSB7IHJldHVybiBzdXBlci5jbG9uZShQYXJ0LCB0aGlzLnBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9uZU9yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBwYXJzZVBhcnQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnQucGFyc2UocGFydHNOb2RlcywgY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cblxuICAgICAgcGFyc2VQYXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFydC5wYXJzZShwYXJ0c05vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoY291bnQgIT09IDApO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IHBsdXMsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBzdXBlci5hc1N0cmluZyhvcGVyYXRvclN0cmluZyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShPbmVPck1vcmVQYXJ0c1BhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVBhcnRzUGFydCBleHRlbmRzIENvbGxlY3Rpb25PZlBhcnRzUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gWmVyb09yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBjb25zdCBwYXJzZVBhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBhc3RlcmlzaywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFplcm9Pck1vcmVQYXJ0c1BhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgUXVhbnRpZmllclJ1bGVOYW1lLCBSdWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL2JuZi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIGxvb2tBaGVhZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgdHlwZSA9IFJ1bGVOYW1lUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG5cbiAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgfVxuICBcbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBpc0xvb2tBaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb29rQWhlYWQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIHNldExvb2tBaGVhZChsb29rQWhlYWQpIHtcbiAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgfVxuXG4gIGZpbmRSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlTWFwID0gY29udGV4dC5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZmluZFJ1bGUoY29udGV4dCk7XG5cbiAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bGVOb2RlID0gcnVsZS5wYXJzZShjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIHBhcnNlZCA9IChydWxlTm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2xhbWF0aW9uTWFyayA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7bG9va0FoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShSdWxlTmFtZVBhcnQsIHRoaXMucnVsZU5hbWUsIHRoaXMubG9va0FoZWFkKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBUZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWxcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUsIE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHRoaXJkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZU5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zTm9kZSA9IHRoaXJkQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc05vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBzdXBlcigpO1xuICAgIFxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoVGVybWluYWxTeW1ib2xQYXJ0LCB0aGlzLmNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBOYW1lUnVsZU5hbWUsIERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc2VwYXJhdG9yLCB0ZXJtaW5hdG9yIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gc2VwYXJhdG9yLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB0ZXJtaW5hdG9yLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZSA9IE5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChuYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOb2RlIGZyb20gXCIuLi9ub2RlL3J1bGVcIjtcbmltcG9ydCBSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBuZXcgUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVycm9yTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdpbGRjYXJkUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yTm9kZSBmcm9tIFwiLi4vbm9kZS9lcnJvclwiO1xuaW1wb3J0IEVycm9yRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9lcnJvclwiO1xuXG5pbXBvcnQgeyBFcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBFcnJvclJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXJyb3JEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRXJyb3JOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVwc2lsb25Ob2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IEVwc2lsb25Ob2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZXBzaWxvbk5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGwsXG4gICAgICAgICAgZXBzaWxvbk5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oRXBzaWxvbk5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRXBzaWxvbk5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBFcHNpbG9uTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25Ob2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbk5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGlzRXBzaWxvblBhcnQoKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbjsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFcHNpbG9uUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gbmV3IEVwc2lsb25QYXJ0KCk7XG5cbiAgICByZXR1cm4gZXBzaWxvblBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRXBzaWxvbk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25Ob2RlIGZyb20gXCIuLi9ub2RlL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgRXBzaWxvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50ID0gZXBzaWxvbixcbiAgICAgICAgICBlcHNpbG9uVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gRXBzaWxvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVwc2lsb25Ob2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9ERVBUSCA9IDk5O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX01BWElNVU1fREVQVEggfSBmcm9tIFwiLi4vZGVmYXVsdHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVNYXAsIHRva2VucywgaW5kZXgsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuICBnZXREZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXB0aDtcbiAgfVxuXG5cdGdldE1heGltdW1EZXB0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzVG9vRGVlcCgpIHtcbiAgICBjb25zdCB0b29EZWVwID0gKHRoaXMuZGVwdGggPiB0aGlzLm1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gdG9vRGVlcDtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgaW5jcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoKys7XG4gIH1cblxuICBkZWNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgtLTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0ZGVwdGggPSAwLFxuXHRcdFx0XHRcdG1heGltdW1EZXB0aCA9IERFRkFVTFRfTUFYSU1VTV9ERVBUSCxcblx0XHRcdFx0XHRjb250ZXh0ID0gbmV3IENvbnRleHQocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IENvbnRleHQuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKFBhcnNlciwgcnVsZXMpIHtcbiAgICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgICAgc3RhcnRSdWxlID0gZmlyc3RSdWxlLCAgLy8vXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVzLnJlZHVjZSgocnVsZU1hcCwgcnVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU1hcDtcbiAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgcGFyc2VyID0gbmV3IFBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb21cIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChydWxlTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gY2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lUnVsZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBSdWxlUnVsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTm9kZSA9IHJ1bGVOYW1lUnVsZVJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICAgICAgcnVsZU5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTm9kZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZU5vZGVzLm1hcCgocnVsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEb2N1bWVudE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IGV2ZW4sIGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG4gICAgXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG4gIFxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICB0aGlzLnBhcnRzLnNvbWUoKHBhcnQpID0+IHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSB8ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKENob2ljZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG5cbiAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAgLy8vXG4gICAgXG4gICAgY29uc3QgZXZlbk5vZGVzID0gZXZlbihub2Rlcyk7XG5cbiAgICBub2RlcyA9IGV2ZW5Ob2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChwYXJ0cyk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSwgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnROb2RlIGZyb20gXCIuLi9ub2RlL2RvY3VtZW50XCI7XG5pbXBvcnQgRG9jdW1lbnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RvY3VtZW50XCI7XG5cbmltcG9ydCB7IERvY3VtZW50UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb24gPSBuZXcgRG9jdW1lbnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IERvY3VtZW50UnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEb2N1bWVudE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZU5hbWVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZU5vZGUgZnJvbSBcIi4uL25vZGUvcnVsZU5hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IFJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBSdWxlTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb24gIC8vL1xuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJ1bGVOYW1lTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gbmV3IFdpbGRjYXJkUGFydCgpO1xuXG4gICAgcmV0dXJuIHdpbGRjYXJkUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhXaWxkY2FyZE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZE5vZGUgZnJvbSBcIi4uL25vZGUvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHdpbGRjYXJkLFxuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFdpbGRjYXJkTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVuZE9mTGluZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2VuZE9mTGluZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVuZE9mTGluZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBjb250ZXh0LmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4gPSBzaWduaWZpY2FudFRva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBlbmRPZkxpbmVOb2RlID0gRW5kT2ZMaW5lTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoZW5kT2ZMaW5lTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVuZE9mTGluZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vbm9kZS9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgRW5kT2ZMaW5lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gRW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFbmRPZkxpbmVOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcGFydE5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnROb2Rlcy5tYXAoKHBhcnROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydE5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25Ob2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IERlZmluaXRpb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBldmVuIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc05vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBldmVuQ2hpbGROb2RlcyA9IGV2ZW4oY2hpbGROb2RlcyksICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uTm9kZXMgPSBldmVuQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uTm9kZXMubWFwKChkZWZpbml0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25Ob2RlLmdlbmVyYXRlRGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbnNOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgICAgIHBhcnRzTGVuZ3RoID0gdGhpcy5wYXJ0cy5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IHBhcnNlUGFydHMgPSAobm9kZXMsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGFydCA9IHRoaXMucGFydHNbaW5kZXgrK107XG5cbiAgICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnNlUGFydCA9IChwYXJ0LCBub2RlcywgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICBjb25zdCBwYXJ0c05vZGVzID0gW107XG5cbiAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0c05vZGVzLCBpbmRleCkpO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlZCA9IHBhcnNlUGFydHMocGFydHNOb2RlcywgaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2UocGFydHNOb2RlcywgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICB9LCBudWxsKSxcbiAgICAgICAgICBzdHJpbmcgPSBgKCAke3BhcnRzU3RyaW5nfSApYDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIHRoaXMucGFydHMpOyB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cblxuICAgIGNvbnN0IGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHBhcnRzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25SdWxlTmFtZSA9IERlZmluaXRpb25SdWxlTmFtZSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGRlZmluaXRpb25SdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc05vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBEZWZpbml0aW9uc0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvbnNcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbnNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uc0RlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25zTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsUGFydE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydE5vZGUgZnJvbSBcIi4uL25vZGUvcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBUZXJtaW5hbFBhcnRSdWxlTmFtZSwgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSwgVGVybWluYWxTeW1ib2xSdWxlTmFtZSwgRW5kT2ZMaW5lUnVsZU5hbWUsIEVwc2lsb25SdWxlTmFtZSwgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lID0gRXBzaWxvblJ1bGVOYW1lLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lID0gRW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oZXBzaWxvblJ1bGVOYW1lKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24od2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFBhcnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IENob2ljZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDaG9pY2VPZlBhcnRzTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciwgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c05vZGUgZnJvbSBcIi4uL25vZGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IENob2ljZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IENob2ljZU9mUGFydHNOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIigoPzpcXFxcLnxbXlwiXFxcXF0pKilcIiQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgY29udGVudCA9IHNlY29uZE1hdGNoLnJlcGxhY2UoL1xcXFxcXFxcL2csIFwiXFxcXFwiKS5yZXBsYWNlKC9cXFxcXCIvZywgXCJcXFwiXCIpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxTeW1ib2xOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xOb2RlIGZyb20gXCIuLi9ub2RlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsU3ltYm9sTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9uVGVybWluYWxQYXJ0Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCkge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMucG9wKCk7XG5cbiAgICBsb29rQWhlYWQgPSB0cnVlO1xuXG4gICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuXG5pbXBvcnQgeyBSdWxlTmFtZVJ1bGVOYW1lLCBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWUgPSBSdWxlTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQobG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Tm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c05vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTZXF1ZW5jZU9mUGFydHNOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNOb2RlIGZyb20gXCIuLi9ub2RlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oTm9XaGl0ZXNwYWNlTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IGNvbnRleHQuaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKTtcblxuICAgIGlmICghbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKSB7XG4gICAgICBub1doaXRlc3BhY2VOb2RlID0gTm9XaGl0ZXNwYWNlTm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChub1doaXRlc3BhY2VOb2RlICE9PSBudWxsKVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChub1doaXRlc3BhY2VOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShOb1doaXRlc3BhY2VQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9XaGl0ZXNwYWNlUGFydE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IE5PX1dISVRFU1BBQ0UsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnROb2RlIGZyb20gXCIuLi9ub2RlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5cbmltcG9ydCB7IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBuZXcgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Tm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGV4Y2xhbWF0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoZmlyc3RNYXRjaCA9PT0gY29udGVudCkge1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSxcblx0XHQgICAgICBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShSZWd1bGFyRXhwcmVzc2lvblBhcnQsIHRoaXMucmVndWxhckV4cHJlc3Npb24pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblBhcnQocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgfVxuXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgcGF0dGVybiA9IHNlY29uZE1hdGNoLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAocGF0dGVybik7ICAvLy9cblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZWd1bGFyRXhwcmVzc2lvbk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSZWd1bGFyRXhwcmVzc2lvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRlcm1pbmFsU3ltYm9sQ29udGVudCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbFN5bWJvbENvbnRlbnQsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcXVlc3Rpb25NYXJrLCAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbk5vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHBsdXMsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXFsoW15cXF1dKyldJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gdGhpcy5nZXRTaWduaWZpY2FudFRva2VuVHlwZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5UeXBlKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaWduaWZpY2FudFRva2VuVHlwZU5vZGU7XG5cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZU5vZGUgZnJvbSBcIi4uL25vZGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi9ydWxlXCI7XG5pbXBvcnQgTmFtZVJ1bGUgZnJvbSBcIi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4vcnVsZS9ydWxlXCI7XG5pbXBvcnQgRXJyb3JSdWxlIGZyb20gXCIuL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBFcHNpbG9uUnVsZSBmcm9tIFwiLi9ydWxlL2Vwc2lsb25cIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi9ydWxlL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRSdWxlIGZyb20gXCIuL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9xdWFudGlmaWVyXCI7XG5pbXBvcnQgRGVmaW5pdGlvblJ1bGUgZnJvbSBcIi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuL3J1bGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuL3J1bGUvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuL3J1bGUvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZSBmcm9tIFwiLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyXCI7XG5pbXBvcnQgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4vcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVSdWxlID0gbmV3IE5hbWVSdWxlKCksXG4gICAgICAgICAgcGFydFJ1bGUgPSBuZXcgUGFydFJ1bGUoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZSgpLFxuICAgICAgICAgIGVycm9yUnVsZSA9IG5ldyBFcnJvclJ1bGUoKSxcbiAgICAgICAgICBlcHNpbG9uUnVsZSA9IG5ldyBFcHNpbG9uUnVsZSgpLFxuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudFJ1bGUoKSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGUgPSBuZXcgUnVsZU5hbWVSdWxlKCksXG4gICAgICAgICAgd2lsZGNhcmRSdWxlID0gbmV3IFdpbGRjYXJkUnVsZSgpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBuZXcgRW5kT2ZMaW5lUnVsZSgpLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gbmV3IFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGUgPSBuZXcgRGVmaW5pdGlvblJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGUgPSBuZXcgRGVmaW5pdGlvbnNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZSA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUgPSBuZXcgVGVybWluYWxTeW1ib2xSdWxlKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydFJ1bGUoKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25SdWxlKCksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUoKTtcblxuICAgIGxldCBydWxlcyA9IFtcbiAgICAgIGRvY3VtZW50UnVsZSxcbiAgICAgIHJ1bGVSdWxlLFxuICAgICAgbmFtZVJ1bGUsXG4gICAgICBkZWZpbml0aW9uc1J1bGUsXG4gICAgICBkZWZpbml0aW9uUnVsZSxcbiAgICAgIHBhcnRSdWxlLFxuICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIHRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSxcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUsXG4gICAgICBjaG9pY2VPZlBhcnRzUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIGVuZE9mTGluZVJ1bGUsXG4gICAgICBlcHNpbG9uUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGUsICAvLy9cbiAgICAgICAgICBydWxlTWFwID0gcnVsZXMucmVkdWNlKChydWxlTWFwLCBydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTWFwO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICBibmZQYXJzZXIgPSBuZXcgQk5GUGFyc2VyKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGJuZlBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgZXhwcmVzc2lvbiAgOjo9IGV4cHJlc3Npb25fIG9wZXJhdG9yIGV4cHJlc3Npb24gZXhwcmVzc2lvbn4qXG5cbiAgICAgICAgICAgICAgICB8IGV4cHJlc3Npb25fXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgb3BlcmF0b3IgICAgOjo9IFwiK1wiXG5cbiAgICAgICAgICAgICAgICB8IFwiLVwiXG5cbiAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICB8IFwiKlwiXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgdGVybSAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICBleHByZXNzaW9uXyA6Oj0gXCIoXCIgZXhwcmVzc2lvbiBcIilcIlxuXG4gICAgICAgICAgICAgICAgfCB0ZXJtXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgZXhwcmVzc2lvbn4gOjo9IG9wZXJhdG9yIGV4cHJlc3Npb24gO1xuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikge1xuICAgIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKSxcbiAgICAgICAgICBiYXNpY1BhcnNlciA9IEJhc2ljUGFyc2VyLmZyb21SdWxlcyhydWxlcyk7XG5cbiAgICByZXR1cm4gYmFzaWNQYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBCYXNpY1BhcnNlci5mcm9tQk5GKGJuZik7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZXBzaWxvblwiO1xuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFcHNpbG9uUGFydCxcbiAgV2lsZGNhcmRQYXJ0LFxuICBFbmRPZkxpbmVQYXJ0LFxuICBUZXJtaW5hbFN5bWJvbFBhcnQsXG4gIFJlZ3VsYXJFeHByZXNzaW9uUGFydCxcbiAgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LFxuICBSdWxlTmFtZVBhcnQsXG4gIE9wdGlvbmFsUGFydFBhcnQsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnQsXG4gIE9uZU9yTW9yZVBhcnRzUGFydCxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQk5GUGFyc2VyIH0gZnJvbSBcIi4vYm5mL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY1BhcnNlciB9IGZyb20gXCIuL2Jhc2ljL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25QYXJzZXIgfSBmcm9tIFwiLi9jb21tb24vcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ibmYvcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL2JuZi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9ibmYvcGFydFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlZmluaXRpb24gfSBmcm9tIFwiLi9ibmYvZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuXG4gICAgc3R5bGVzaGVldCAgICAgICAgICAgICAgICAgOjo9ICggbWVkaWEgfCBydWxlU2V0IHwgZGVjbGFyYXRpb24gfCBlcnJvciApKyA7XG5cblxuXG5cblxuICAgIG1lZGlhICAgICAgICAgICAgICAgICAgICAgIDo6PSBcIkBtZWRpYVwiIG1lZGlhUXVlcmllcyBcIntcIiAoIHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiApKiBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJpZXMgICAgICAgICAgICAgICA6Oj0gIG1lZGlhUXVlcnkgKCBcIixcIiBtZWRpYVF1ZXJ5ICkqIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcnkgICAgICAgICAgICAgICAgIDo6PSAgXCJub3RcIj8gKCBcIm9ubHlcIj8gbWVkaWFUeXBlIFwiYW5kXCIgKT8gbWVkaWFFeHByZXNzaW9uICggXCJhbmRcIiBtZWRpYUV4cHJlc3Npb24gKSogO1xuXG5cbiAgICBtZWRpYVR5cGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiYWxsXCIgfCBcInByaW50XCIgfCBcInNjcmVlblwiIHwgXCJzcGVlY2hcIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYUV4cHJlc3Npb24gICAgICAgICAgICA6Oj0gIFwiKFwiIFtpZGVudGlmaWVyXSAoIFwiOlwiIGV4cHJlc3Npb24gKT8gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBydWxlU2V0ICAgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9ycyBcIntcIiBkZWNsYXJhdGlvbiogXCJ9XCIgO1xuICAgIFxuICAgIFxuICAgIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3IgKCBcIixcIiBzZWxlY3RvciApKiA7XG5cblxuICAgIHNlbGVjdG9yICAgICAgICAgICAgICAgICAgIDo6PSAgKCBjbGFzcyB8IHBzZXVkb0NsYXNzIHwgcHNldWRvRWxlbWVudCB8IGF0dHJpYnV0ZSApKyA7XG5cblxuXG5cblxuICAgIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgcHJvcGVydHkgXCI6XCIgZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSogcHJpb3JpdHk/IFwiO1wiIDtcblxuXG4gICAgY2xhc3MgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvQ2xhc3MgICAgICAgICAgICAgICAgOjo9ICBcIjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvRWxlbWVudCAgICAgICAgICAgICAgOjo9ICBcIjo6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBhcmVudGhlc2lzZWRTZWxlY3RvciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIoXCIgc2VsZWN0b3IgPE5PX1dISVRFU1BBQ0U+XCIpXCIgO1xuXG5cbiAgICBhdHRyaWJ1dGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiW1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIj1cIiB8IFwifj1cIiB8IFwifD1cIiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbaWRlbnRpZmllcl0gfCBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBwcm9wZXJ0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuICAgIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgIDo6PSAgdGVybSAoIFwiLFwiPyB0ZXJtICkqIDtcblxuXG4gICAgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgOjo9ICBcIiFpbXBvcnRhbnRcIiA7XG5cblxuXG5cblxuICAgIHRlcm0gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3VuYXJ5LW9wZXJhdG9yXT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3BlcmNlbnRhZ2VdIHwgW2ZyZXF1ZW5jeV0gfCBbZnJhY3Rpb25dIHwgW2xlbmd0aF0gfCBbYW5nbGVdIHwgW3JlbXNdIHwgW2Vtc10gfCBbdGltZV0gfCBbbnVtYmVyXSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nLWxpdGVyYWxdK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IEJORlBhcnNlciwgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7XG4gICAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpLFxuICAgICAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tUnVsZXMocnVsZXMpO1xuXG4gICAgcmV0dXJuIGNzc1BhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ1NTUGFyc2VyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDU1NQYXJzZXIuZnJvbUJORihibmYpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSSyA9IFwiIVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVYQ0xBTUFUSU9OX01BUksgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNsZWFyLCB0cmltLCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ByZWFkIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSkge1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgIHRoaXMudW5pcXVlID0gdW5pcXVlO1xuICB9XG5cbiAgYWRqdXN0Tm9kZXMobm9kZXMpIHtcbiAgICBpZiAodGhpcy51bmlxdWUpIHtcbiAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgIGNsZWFyKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJpbShub2RlcywgdGhpcy5zdGFydEluZGV4LCB0aGlzLmVuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gPT09IEVYQ0xBTUFUSU9OX01BUkspIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoXFxkKyk/KFxcLlxcLlxcLik/KFxcZCspP10vLFxuICAgICAgICAgICAgICBtYXRjaGVzID0gc3ByZWFkRXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBwYXJzZUludChzZWNvbmRNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdXJ0aE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YlF1ZXJ5ID0gc3ViUXVlcnk7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gICAgdGhpcy5pbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnQ7XG4gICAgdGhpcy5pbnRlcm1lZGlhdGVOb2RlcyA9IGludGVybWVkaWF0ZU5vZGVzO1xuICB9XG5cbiAgZXhlY3V0ZShub2RlLCBkZXB0aCA9IDAsIG1heGltdW1EZXB0aCA9IHRoaXMubWF4aW11bURlcHRoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHRoaXMuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gIH1cblxuICBmaW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBtYXhpbXVtRGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIG5vZGVOb25UZXJtaW5hbE5vZGUgPSAhbm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIGxldCBmb3VuZDtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnR5cGVzLCB0eXBlLCBXSUxEQ0FSRCk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnJ1bGVOYW1lcywgcnVsZU5hbWUsIFdJTERDQVJEKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzaW9uLCB0eXBlcykge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdWJFeHByZXNpb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3MoYXJndW1lbnQpIHsgcmV0dXJuIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgUmVhY3QuQ29tcG9uZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgICAvLy9cbiAgICBzdWJjbGFzcyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCAhPT0gbnVsbCkge1xuICAgICAgc3ViY2xhc3MgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3M7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJyZWFjdGlvblwiO1xuaW1wb3J0IHsgdGFnTmFtZXMsIHN0eWxlc1V0aWxpdGllcywgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIndpdGgtc3R5bGVcIjtcblxuaW1wb3J0IHsgaXNDbGFzcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc1wiO1xuXG5jb25zdCB7IGdlbmVyYXRlQ2xhc3NOYW1lIH0gPSBjbGFzc05hbWVVdGlsaXRpZXMsXG4gICAgICB7IHJlbmRlclN0eWxlLCByZW5kZXJTdHlsZXMsIGdlbmVyYXRlU3R5bGUsIHJldHJpZXZlU3R5bGUgfSA9IHN0eWxlc1V0aWxpdGllcztcblxuZnVuY3Rpb24gd2l0aFN0eWxlKENsYXNzT3JGdW5jdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdOyAgLy8vXG5cbiAgICBsZXQgeyBjbGFzc05hbWUgPSBudWxsIH0gPSBDbGFzc09yRnVuY3Rpb247XG5cbiAgICBjb25zdCBzdXBlclN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpO1xuXG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcblxuICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlKTtcblxuICAgIGNvbnN0IENsYXNzT3JGdW5jdGlvbkNsYXNzID0gaXNDbGFzcyhDbGFzc09yRnVuY3Rpb24pO1xuXG4gICAgaWYgKENsYXNzT3JGdW5jdGlvbkNsYXNzKSB7XG4gICAgICBjb25zdCBDbGFzcyA9IENsYXNzT3JGdW5jdGlvbjsgIC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgcmVuZGVyKHVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMucHJvcHMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BzKGNsYXNzTmFtZSwgdGhpcy5wcm9wcyk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKHVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gQ2xhc3NPckZ1bmN0aW9uOyAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gKHByb3BzLCBjb250ZXh0LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHByb3BzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wcyhjbGFzc05hbWUsIHByb3BzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcHMsIGNvbnRleHQsIGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKENsYXNzT3JGdW5jdGlvbiwge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ2xhc3NPckZ1bmN0aW9uO1xuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKHdpdGhTdHlsZSwge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlO1xuXG50YWdOYW1lcy5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXRoU3R5bGUsIHRhZ05hbWUsIHtcbiAgICBnZXQ6ICgpID0+IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdLCAgLy8vXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSk7XG5cbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gKHByb3BzLCBjb250ZXh0LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHByb3BzO1xuXG4gICAgICAgIHByb3BzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wcyhjbGFzc05hbWUsIHByb3BzKTtcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pO1xuICAgICAgfTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihGdW5jdGlvbiwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gRnVuY3Rpb247XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBhcHBlbmRDbGFzc05hbWVUb1Byb3BzKGNsYXNzTmFtZSwgcHJvcHMpIHtcbiAgcHJvcHMgPSBwcm9wcy5oYXNPd25Qcm9wZXJ0eShcImNsYXNzTmFtZVwiKSA/IHByb3BzIDogey4uLnByb3BzLCBjbGFzc05hbWV9OyAvLy9cblxuICByZXR1cm4gcHJvcHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBIZWFkaW5nID0gd2l0aFN0eWxlLmgxYFxuXG4gIGZvbnQtc2l6ZTogM3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmNvbnN0IFJvd3NEaXYgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjbGFzc05hbWUsIGNoaWxkcmVuIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gcm93c2B9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93c0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmNvbnN0IENvbHVtbkRpdiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG5cbiAgICA8ZGl2IGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBjb2x1bW5gfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cblxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbkRpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuXG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBDb2x1bW5zRGl2ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcblxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IGNvbHVtbnNgfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cblxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbnNEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBTdWJIZWFkaW5nID0gd2l0aFN0eWxlLmgyYFxuXG4gIG1hcmdpbjogMXJlbSAwIDAuNXJlbSAwO1xuICBmb250LXNpemU6IDJyZW07XG4gIFxuICA6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBTdWJIZWFkaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVVUTyA9IFwiYXV0b1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IENPTF9SRVNJWkUgPSBcImNvbC1yZXNpemVcIjtcbmV4cG9ydCBjb25zdCBST1dfUkVTSVpFID0gXCJyb3ctcmVzaXplXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBET1VCTEVfU1BBQ0UgPSBcIiAgXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuaW1wb3J0IHsgV0lEVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgQ29tcG9uZW50IH0gPSBSZWFjdDtcblxuY2xhc3MgU2l6ZWFibGVEaXYgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgbWl4aW5zID0gW1xuICAgIGdldFdpZHRoLFxuICAgIHNldFdpZHRoXG4gIF07XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IHNpemVhYmxlYH1cbiAgICAgICAgICAgcmVmPXsoZG9tRWxlbWVudCkgPT4ge1xuXG4gICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcblxuICAgICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNpemVhYmxlRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBcbiAgd2lkdGg6IDQ4cmVtO1xuICBtaW4td2lkdGg6IDI0cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbmA7XG5cbmZ1bmN0aW9uIGdldFdpZHRoKCkge1xuICBjb25zdCBkb21FbGVtZW50T2Zmc2V0V2lkdGggPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgIHdpZHRoID0gZG9tRWxlbWVudE9mZnNldFdpZHRoOyAvLy9cblxuICByZXR1cm4gd2lkdGg7XG59XG5cbmZ1bmN0aW9uIHNldFdpZHRoKHdpZHRoKSB7XG4gIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICB0aGlzLnNldFN0eWxlKFdJRFRILCB3aWR0aCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuY29uc3QgeyBDb21wb25lbnQgfSA9IFJlYWN0O1xuXG5jbGFzcyBUZXh0YXJlYSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBtaXhpbnMgPSBbXG4gICAgb25LZXlVcCxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRWYWx1ZVxuICBdO1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgb25LZXlVcCB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChvbktleVVwKSB7XG4gICAgICBjb25zdCBrZXlVcEhhbmRsZXIgPSBvbktleVVwOyAvLy9cblxuICAgICAgdGhpcy5vbktleVVwKGtleVVwSGFuZGxlcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUZXh0YXJlYSlgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7XG4gIGhlaWdodDogMjRyZW07XG4gIHJlc2l6ZTogdmVydGljYWw7XG4gIHBhZGRpbmc6IDAuMjVyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuXG5gO1xuXG5mdW5jdGlvbiBvbktleVVwKGtleVVwSGFuZGxlcikge1xuICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIChldmVudCkgPT4ge1xuICAgIGtleVVwSGFuZGxlcihldmVudCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSkge1xuICB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gIGNvbnN0IHZhbHVlID0gdGhpcy5kb21FbGVtZW50LnZhbHVlO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5jbGFzcyBCTkZUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgc3RhdGljIG1peGlucyA9IFtcbiAgICBnZXRCTkYsXG4gICAgc2V0Qk5GXG4gIF07XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBUZXh0YXJlYSxcbiAgICAgICAgICB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcblxuICAgICAgPHRleHRhcmVhIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBibmZgfVxuICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgcmVmPXsoZG9tRWxlbWVudCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC90ZXh0YXJlYT5cblxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQk5GVGV4dGFyZWE7XG5cbmZ1bmN0aW9uIGdldEJORigpIHtcbiAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgIGJuZiA9IHZhbHVlOyAgLy8vXG5cbiAgcmV0dXJuIGJuZjtcbn1cblxuZnVuY3Rpb24gc2V0Qk5GKGJuZikge1xuICBjb25zdCB2YWx1ZSA9IGJuZjsgIC8vL1xuXG4gIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmNsYXNzIENvbnRlbnRUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgc3RhdGljIG1peGlucyA9IFtcbiAgICBnZXRDb250ZW50LFxuICAgIHNldENvbnRlbnRcbiAgXTtcblxuICByZW5kZXIodXBkYXRlKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IFRleHRhcmVhLFxuICAgICAgICAgIHsgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuXG4gICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IGNvbnRlbnRgfVxuICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgcmVmPXsoZG9tRWxlbWVudCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC90ZXh0YXJlYT5cblxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udGVudFRleHRhcmVhO1xuXG5mdW5jdGlvbiBnZXRDb250ZW50KCkge1xuICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNldENvbnRlbnQoY29udGVudCkge1xuICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQ7ICAvLy9cblxuICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZVRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBzdGF0aWMgbWl4aW5zID0gW1xuICAgIHNldFBhcnNlVHJlZSxcbiAgICBjbGVhclBhcnNlVHJlZVxuICBdO1xuXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gVGV4dGFyZWEsXG4gICAgICAgICAgeyBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gcGFyc2UtdHJlZWB9XG4gICAgICAgICAgICAgICAgc3BlbGxDaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICByZWFkT25seVxuICAgICAgICAgICAgICAgIHJlZj17KGRvbUVsZW1lbnQpID0+IHtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcblxuICAgICAgICAgICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgaWYgKHBhcnNlVHJlZSAhPT0gbnVsbCkge1xuICAgIHBhcnNlVHJlZS5zaGlmdExpbmUoKTsgIC8vXG5cbiAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlVHJlZVN0cmluZzsgIC8vL1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyUGFyc2VUcmVlKCkge1xuICBjb25zdCB2YWx1ZSA9IEVNUFRZX1NUUklORztcblxuICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQVVUTywgQ09MX1JFU0laRSwgUk9XX1JFU0laRSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5sZXQgcHJldmlvdXNDdXJzb3I7ICAvLy9cblxuY29uc3QgYm9keURPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblxuZnVuY3Rpb24gY29sdW1uUmVzaXplKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBDT0xfUkVTSVpFKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yO1xuXG4gICAgc2V0Q3Vyc29yKENPTF9SRVNJWkUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJvd1Jlc2l6ZSgpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gUk9XX1JFU0laRSkge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjtcblxuICAgIHNldEN1cnNvcihST1dfUkVTSVpFKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldCgpIHtcbiAgc2V0Q3Vyc29yKHByZXZpb3VzQ3Vyc29yKTsgLy8vXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29sdW1uUmVzaXplLFxuICByb3dSZXNpemUsXG4gIHJlc2V0XG59XG5cbmZ1bmN0aW9uIHNldEN1cnNvcihjdXJzb3IpIHtcbiAgYm9keURPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gYm9keURPTUVsZW1lbnQuc3R5bGUuY3Vyc29yOyAgLy8vXG5cbiAgcmV0dXJuIGN1cnJlbnRDdXJzb3IgfHwgQVVUTzsgLy8vXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0U2libGluZyhlbGVtZW50KSB7XG4gIGxldCBuZXh0U2libGluZyA9IG51bGw7XG5cbiAgY29uc3Qgc2libGluZ3MgPSBlbGVtZW50LnBhcmVudC5jaGlsZHJlbjsgLy8vXG5cbiAgYmFja3dhcmRzU29tZShzaWJsaW5ncywgKHNpYmxpbmcpID0+IHtcbiAgICBpZiAoc2libGluZyA9PT0gZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbmV4dFNpYmxpbmcgPSBzaWJsaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmV4dFNpYmxpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1NpYmxpbmcoZWxlbWVudCkge1xuICBsZXQgcHJldmlvdXNTaWJsaW5nID0gbnVsbDtcblxuICBjb25zdCBzaWJsaW5ncyA9IGVsZW1lbnQucGFyZW50LmNoaWxkcmVuOyAvLy9cblxuICBmb3J3YXJkc1NvbWUoc2libGluZ3MsIChzaWJsaW5nKSA9PiB7XG4gICAgaWYgKHNpYmxpbmcgPT09IGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByZXZpb3VzU2libGluZyA9IHNpYmxpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBwcmV2aW91c1NpYmxpbmc7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRzU29tZShhcnJheSwgdGVzdCkge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgbGFzdEluZGV4ID0gYXJyYXlMZW5ndGggLSAxO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gbGFzdEluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYmFja3dhcmRzU29tZShhcnJheSwgdGVzdCkge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgbGFzdEluZGV4ID0gYXJyYXlMZW5ndGggLSAxO1xuXG4gIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlQgPSBcIm1vdXNldXBcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU1PVkVfRVZFTlQgPSBcIm1vdXNlbW92ZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuLi8uLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCB7IFJlYWN0IH0gZnJvbSBcInJlYWN0aW9uXCI7XG5cbmltcG9ydCBjdXJzb3IgZnJvbSBcIi4uLy4uL2N1cnNvclwiO1xuXG5pbXBvcnQgeyBnZXRQcmV2aW91c1NpYmxpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL3NpYmxpbmdcIjtcbmltcG9ydCB7IE1PVVNFVVBfRVZFTlQsIE1PVVNFTU9WRV9FVkVOVCB9IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcblxuY29uc3QgeyBDb21wb25lbnQgfSA9IFJlYWN0O1xuXG5jbGFzcyBWZXJ0aWNhbFNwbGl0dGVyRGl2IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIG1peGlucyA9IFtcbiAgICBtb3VzZVVwSGFuZGxlcixcbiAgICBtb3VzZU1vdmVIYW5kbGVyLFxuICAgIG1vdXNlRG93bkhhbmRsZXIsXG4gICAgbW91c2VPdmVySGFuZGxlcixcbiAgICBtb3VzZU91dEhhbmRsZXIsXG4gICAgc3RhcnREcmFnZ2luZyxcbiAgICBzdG9wRHJhZ2dpbmcsXG4gICAgaXNEcmFnZ2luZ1xuICBdO1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHByZXZpb3VzU2libGluZyA9IGdldFByZXZpb3VzU2libGluZyh0aGlzKSxcbiAgICAgICAgICBzaXplYWJsZURpdiA9IHByZXZpb3VzU2libGluZzsgIC8vL1xuXG4gICAgdGhpcy5zaXplYWJsZURpdiA9IHNpemVhYmxlRGl2O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoTU9VU0VVUF9FVkVOVCwgdGhpcy5tb3VzZVVwSGFuZGxlcik7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihNT1VTRU1PVkVfRVZFTlQsIHRoaXMubW91c2VNb3ZlSGFuZGxlcik7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihNT1VTRU1PVkVfRVZFTlQsIHRoaXMubW91c2VNb3ZlSGFuZGxlcik7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihNT1VTRVVQX0VWRU5ULCB0aGlzLm1vdXNlVXBIYW5kbGVyKTtcblxuICAgIGRlbGV0ZSB0aGlzLnNpemVhYmxlRGl2O1xuICB9XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcblxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gdmVydGljYWwtc3BsaXR0ZXJgfVxuICAgICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5tb3VzZURvd25IYW5kbGVyfVxuICAgICAgICAgICBvbk1vdXNlT3Zlcj17dGhpcy5tb3VzZU92ZXJIYW5kbGVyfVxuICAgICAgICAgICBvbk1vdXNlT3V0PXt0aGlzLm1vdXNlT3V0SGFuZGxlcn1cbiAgICAgIC8+XG5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWZXJ0aWNhbFNwbGl0dGVyRGl2KWBcblxuICB3aWR0aDogMXJlbTtcbiAgZmxleC1zaHJpbms6IDA7XG4gIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXk7XG5cbmA7XG5cbmZ1bmN0aW9uIG1vdXNlVXBIYW5kbGVyKCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gIGlmIChkcmFnZ2luZykge1xuICAgIHRoaXMuc3RvcERyYWdnaW5nKCk7XG4gIH1cblxuICBjdXJzb3IucmVzZXQoKTtcbn1cblxuZnVuY3Rpb24gbW91c2VNb3ZlSGFuZGxlcihldmVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gIGlmIChkcmFnZ2luZykge1xuICAgIGNvbnN0IG1vdXNlTGVmdCA9IGV2ZW50LnBhZ2VYLCAgLy8vXG4gICAgICAgICAgcmVsYXRpdmVNb3VzZUxlZnQgPSBtb3VzZUxlZnQgLSB0aGlzLnByZXZpb3VzTW91c2VMZWZ0LFxuICAgICAgICAgIHNpemVhYmxlRGl2V2lkdGggPSB0aGlzLnByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCArIHJlbGF0aXZlTW91c2VMZWZ0LFxuICAgICAgICAgIHdpZHRoID0gc2l6ZWFibGVEaXZXaWR0aDsgLy8vXG5cbiAgICB0aGlzLnNpemVhYmxlRGl2LnNldFdpZHRoKHdpZHRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VzZURvd25IYW5kbGVyKGV2ZW50KSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgaWYgKCFkcmFnZ2luZykge1xuICAgIGNvbnN0IG1vdXNlTGVmdCA9IGV2ZW50LnBhZ2VYLCAgLy8vXG4gICAgICAgICAgc2l6ZWFibGVEaXZXaWR0aCA9IHRoaXMuc2l6ZWFibGVEaXYuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBwcmV2aW91c01vdXNlTGVmdCA9IG1vdXNlTGVmdCwgIC8vL1xuICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2V2lkdGg7ICAgLy8vXG5cbiAgICB0aGlzLnByZXZpb3VzTW91c2VMZWZ0ID0gcHJldmlvdXNNb3VzZUxlZnQ7XG5cbiAgICB0aGlzLnByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aDtcblxuICAgIHRoaXMuc3RhcnREcmFnZ2luZygpO1xuICB9XG5cbiAgY3Vyc29yLmNvbHVtblJlc2l6ZSgpO1xufVxuXG5mdW5jdGlvbiBtb3VzZU92ZXJIYW5kbGVyKCkge1xuICBjdXJzb3IuY29sdW1uUmVzaXplKCk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlT3V0SGFuZGxlcigpIHtcbiAgY3Vyc29yLnJlc2V0KCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0RHJhZ2dpbmcoKSB7XG4gIHRoaXMuYWRkQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcbn1cblxuZnVuY3Rpb24gc3RvcERyYWdnaW5nKCkge1xuICB0aGlzLnJlbW92ZUNsYXNzKFwiZHJhZ2dpbmdcIik7XG59XG5cbmZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5oYXNDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gIHJldHVybiBkcmFnZ2luZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBET1VCTEVfU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExleGljYWxFbnRyaWVzVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHN0YXRpYyBtaXhpbnMgPSBbXG4gICAgZ2V0TGV4aWNhbEVudHJpZXMsXG4gICAgc2V0TGV4aWNhbEVudHJpZXNcbiAgXTtcblxuICByZW5kZXIodXBkYXRlKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IFRleHRhcmVhLFxuICAgICAgICAgIHsgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuXG4gICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IGxleGljYWwtZW50cmllc2B9XG4gICAgICAgICAgICAgICAgc3BlbGxDaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICByZWY9eyhkb21FbGVtZW50KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3RleHRhcmVhPlxuXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRMZXhpY2FsRW50cmllcygpIHtcbiAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgIGxleGljYWxFbnRyaWVzID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cbiAgcmV0dXJuIGxleGljYWxFbnRyaWVzO1xufVxuXG5mdW5jdGlvbiBzZXRMZXhpY2FsRW50cmllcyhsZXhpY2FsRW50cmllcykge1xuICBjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGxleGljYWxFbnRyaWVzLCBudWxsLCBET1VCTEVfU1BBQ0UpO1xuXG4gIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnkoZWxlbWVudCwgdGVzdCkge1xuICBjb25zdCBmb3VuZERlc2NlbmRhbnQgPSBxdWVyeURlc2NlbmRhbnQoZWxlbWVudCwgdGVzdCksXG4gICAgICAgIGRlc2NlbmRhbnQgPSBmb3VuZERlc2NlbmRhbnQ7IC8vL1xuXG4gIHJldHVybiBkZXNjZW5kYW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeVRhZ05hbWUoZWxlbWVudCwgLi4udGFnTmFtZXMpIHtcbiAgcmV0dXJuIHF1ZXJ5KGVsZW1lbnQsIChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHRhZ05hbWVzLnNvbWUoKHRhZ05hbWUpID0+IHtcbiAgICAgIHJldHVybiAoZWxlbWVudC5nZXRUYWdOYW1lICYmIHRvTG93ZXJDYXNlKGVsZW1lbnQuZ2V0VGFnTmFtZSgpKSA9PT0gdGFnTmFtZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzTmFtZShlbGVtZW50LCAuLi5jbGFzc05hbWVzKSB7XG4gIHJldHVybiBxdWVyeShlbGVtZW50LCAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBjbGFzc05hbWVzLnNvbWUoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIChlbGVtZW50Lmhhc0NsYXNzICYmIGVsZW1lbnQuaGFzQ2xhc3MoY2xhc3NOYW1lKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeVJlYWN0Q2xhc3MoZWxlbWVudCwgLi4ucmVhY3RDbGFzc2VzKSB7XG4gIHJldHVybiBxdWVyeShlbGVtZW50LCAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiByZWFjdENsYXNzZXMuc29tZSgocmVhY3RDbGFzcykgPT4ge1xuICAgICAgcmV0dXJuIChlbGVtZW50LnJlYWN0Q2xhc3MgPT09IHJlYWN0Q2xhc3MpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlSZWFjdEZ1bmN0aW9uKGVsZW1lbnQsIC4uLnJlYWN0RnVuY3Rpb25zKSB7XG4gIHJldHVybiBxdWVyeShlbGVtZW50LCAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiByZWFjdEZ1bmN0aW9ucy5zb21lKChyZWFjdEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gKGVsZW1lbnQucmVhY3RGdW5jdGlvbiA9PT0gcmVhY3RGdW5jdGlvbik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeVJlYWN0Q29tcG9uZW50KGVsZW1lbnQsIC4uLlJlYWN0Q29tcG9uZW50cykge1xuICByZXR1cm4gcXVlcnkoZWxlbWVudCwgKGVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gUmVhY3RDb21wb25lbnRzLnNvbWUoKFJlYWN0Q29tcG9uZW50KSA9PiB7XG4gICAgICByZXR1cm4gKGVsZW1lbnQucmVhY3RDb21wb25lbnQgaW5zdGFuY2VvZiBSZWFjdENvbXBvbmVudCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBxdWVyeURlc2NlbmRhbnQoZWxlbWVudCwgdGVzdCkge1xuICBjb25zdCBjaGlsZHJlbiA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oKSxcbiAgICAgICAgZm91bmREZXNjZW5kYW50ID0gY2hpbGRyZW4ucmVkdWNlKChmb3VuZERlc2NlbmRhbnQsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVzY2VuZGFudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0ZXN0KGNoaWxkKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIGZvdW5kRGVzY2VuZGFudCA9IGNoaWxkOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvdW5kRGVzY2VuZGFudCA9IHF1ZXJ5RGVzY2VuZGFudChjaGlsZCwgdGVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvdW5kRGVzY2VuZGFudDtcbiAgICAgICAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGZvdW5kRGVzY2VuZGFudDtcbn1cblxuZnVuY3Rpb24gdG9Mb3dlckNhc2UodGFnTmFtZSkge1xuICByZXR1cm4gKHRhZ05hbWUgPT09IG51bGwpID8gbnVsbCA6IHRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuaW1wb3J0IHsgQ1NTTGV4ZXIsIENTU1BhcnNlciB9IGZyb20gXCJ3aXRoLXN0eWxlXCI7XG5cbmNvbnN0IHsgQ29tcG9uZW50IH0gPSBSZWFjdDtcblxuaW1wb3J0IEhlYWRpbmcgZnJvbSBcIi4vaGVhZGluZ1wiO1xuaW1wb3J0IFJvd3NEaXYgZnJvbSBcIi4vZGl2L3Jvd3NcIjtcbmltcG9ydCBDb2x1bW5EaXYgZnJvbSBcIi4vZGl2L2NvbHVtblwiO1xuaW1wb3J0IENvbHVtbnNEaXYgZnJvbSBcIi4vZGl2L2NvbHVtbnNcIjtcbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9ibmZcIjtcbmltcG9ydCBDb250ZW50VGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvY29udGVudFwiO1xuaW1wb3J0IFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL3BhcnNlVHJlZVwiO1xuaW1wb3J0IFZlcnRpY2FsU3BsaXR0ZXJEaXYgZnJvbSBcIi4vZGl2L3NwbGl0dGVyL3ZlcnRpY2FsXCI7XG5pbXBvcnQgTGV4aWNhbEVudHJpZXNUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9sZXhpY2FsRW50cmllc1wiO1xuXG5pbXBvcnQgeyBxdWVyeUJ5UmVhY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgbWl4aW5zID0gW1xuICAgIGluaXRpYWxpc2UsXG4gICAga2V5VXBIYW5kbGVyLFxuICAgIGdldFBhcnNlVHJlZVxuICBdO1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuYm5mVGV4dGFyZWEgPSBxdWVyeUJ5UmVhY3RDb21wb25lbnQodGhpcywgQk5GVGV4dGFyZWEpO1xuICAgIHRoaXMuY29udGVudFRleHRhcmVhID0gcXVlcnlCeVJlYWN0Q29tcG9uZW50KHRoaXMsIENvbnRlbnRUZXh0YXJlYSk7XG4gICAgdGhpcy5wYXJzZVRyZWVUZXh0YXJlYSA9IHF1ZXJ5QnlSZWFjdENvbXBvbmVudCh0aGlzLCBQYXJzZVRyZWVUZXh0YXJlYSk7XG4gICAgdGhpcy5sZXhpY2FsRW50cmllc1RleHRhcmVhID0gcXVlcnlCeVJlYWN0Q29tcG9uZW50KHRoaXMsIExleGljYWxFbnRyaWVzVGV4dGFyZWEpO1xuXG4gICAgdGhpcy5pbml0aWFsaXNlKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBkZWxldGUgdGhpcy5ibmZUZXh0YXJlYTtcbiAgICBkZWxldGUgdGhpcy5jb250ZW50VGV4dGFyZWE7XG4gICAgZGVsZXRlIHRoaXMucGFyc2VUcmVlVGV4dGFyZWE7XG4gICAgZGVsZXRlIHRoaXMubGV4aWNhbEVudHJpZXNUZXh0YXJlYTtcbiAgfVxuXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICByZXR1cm4gKFtcblxuICAgICAgPEhlYWRpbmc+XG4gICAgICAgIFJlYWN0aW9uIHdpdGggU3R5bGUgZXhhbXBsZVxuICAgICAgPC9IZWFkaW5nPixcbiAgICAgIDxDb2x1bW5zRGl2PlxuICAgICAgICA8U2l6ZWFibGVEaXY+XG4gICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgTGV4aWNhbCBlbnRyaWVzXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8TGV4aWNhbEVudHJpZXNUZXh0YXJlYSBvbktleVVwPXt0aGlzLmtleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBCTkZcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxCTkZUZXh0YXJlYSBvbktleVVwPXt0aGlzLmtleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICA8L1Jvd3NEaXY+XG4gICAgICAgIDwvU2l6ZWFibGVEaXY+XG4gICAgICAgIDxWZXJ0aWNhbFNwbGl0dGVyRGl2Lz5cbiAgICAgICAgPENvbHVtbkRpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Q29udGVudFRleHRhcmVhIG9uS2V5VXA9e3RoaXMua2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFBhcnNlIHRyZWVcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxQYXJzZVRyZWVUZXh0YXJlYS8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0NvbHVtbkRpdj5cbiAgICAgIDwvQ29sdW1uc0Rpdj5cblxuICAgIF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2UoKSB7XG4gIGNvbnN0IHsgZW50cmllcyB9ID0gQ1NTTGV4ZXIsXG4gICAgICAgIHsgYm5mIH0gPSBDU1NQYXJzZXIsXG4gICAgICAgIGNvbnRlbnQgPSBcIlwiLCAvLy9cbiAgICAgICAgbGV4aWNhbEVudHJpZXMgPSBlbnRyaWVzOyAvLy9cblxuICB0aGlzLmJuZlRleHRhcmVhLnNldEJORihibmYpO1xuICB0aGlzLmNvbnRlbnRUZXh0YXJlYS5zZXRDb250ZW50KGNvbnRlbnQpO1xuICB0aGlzLmxleGljYWxFbnRyaWVzVGV4dGFyZWEuc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpO1xuXG4gIHRoaXMua2V5VXBIYW5kbGVyKCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnNlVHJlZSgpIHtcbiAgbGV0IHBhcnNlVHJlZSA9IG51bGw7XG5cbiAgY29uc3QgYm5mID0gdGhpcy5ibmZUZXh0YXJlYS5nZXRCTkYoKSxcbiAgICAgICAgY29udGVudCA9IHRoaXMuY29udGVudFRleHRhcmVhLmdldENvbnRlbnQoKSxcbiAgICAgICAgbGV4aWNhbEVudHJpZXMgPSB0aGlzLmxleGljYWxFbnRyaWVzVGV4dGFyZWEuZ2V0TGV4aWNhbEVudHJpZXMoKSxcbiAgICAgICAgZW50cmllcyA9IGxleGljYWxFbnRyaWVzLCAvLy9cbiAgICAgICAgY3NzTGV4ZXIgPSBDU1NMZXhlci5mcm9tRW50cmllcyhlbnRyaWVzKSxcbiAgICAgICAgY3NzUGFyc2VyID0gQ1NTUGFyc2VyLmZyb21CTkYoYm5mKSxcbiAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKTtcblxuICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgIHBhcnNlVHJlZSA9IG5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZVRyZWU7XG59XG5cbmZ1bmN0aW9uIGtleVVwSGFuZGxlcigpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZVRyZWUgPSB0aGlzLmdldFBhcnNlVHJlZSgpO1xuXG4gICAgdGhpcy5wYXJzZVRyZWVUZXh0YXJlYS5zZXRQYXJzZVRyZWUocGFyc2VUcmVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XG5cbiAgICB0aGlzLnBhcnNlVHJlZVRleHRhcmVhLmNsZWFyUGFyc2VUcmVlKCk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCB7IFJlYWN0LCBSZWFjdERPTSB9IGZyb20gXCJyZWFjdGlvblwiO1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXdcIjtcblxuY29uc3QgeyByZW5kZXJTdHlsZXMgfSA9IHdpdGhTdHlsZTtcblxud2luZG93LlJlYWN0ID0gUmVhY3Q7IC8vL1xuXG5yZW5kZXJTdHlsZXMoKTtcblxuY29uc3QgYm9keURPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblxuUmVhY3RET00ucmVuZGVyKFxuXG4gICAgPFZpZXcvPlxuXG4gICxcbiAgYm9keURPTUVsZW1lbnRcbik7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7Ozs7O1lBRWdCLFFBQUE7WUFFQSxVQUFBO1lBUUEsWUFBQTtZ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
|
|
25946
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvcmVhY3RDbGFzcy5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL21peGlucy9yZWFjdEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50L3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvcmVhY3RDb21wb25lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50L3JlYWN0L2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvZWxlbWVudC9yZWFjdC9mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvcmVhY3QvY29tcG9uZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvZWxlbWVudC92aXJ0dWFsRE9NTm9kZS5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvdmlydHVhbERPTU5vZGUvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9taXhpbnMvdmlydHVhbERPTUVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9lbGVtZW50L3ZpcnR1YWxET01Ob2RlL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy91dGlsaXRpZXMvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL2VsZW1lbnQvdmlydHVhbERPTU5vZGUvZWxlbWVudC9odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvZWxlbWVudC92aXJ0dWFsRE9NTm9kZS9lbGVtZW50L3N2Zy5qcyIsICJub2RlX21vZHVsZXMvcmVhY3Rpb24vc3JjL3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9yZWFjdGlvbi9zcmMvcmVhY3RET00uanMiLCAibm9kZV9tb2R1bGVzL3JlYWN0aW9uL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdGFnTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jaGFyYWN0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hc3luY2hyb25vdXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvbWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb250ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvYnJva2VuQ29tbWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvYnJva2VuU3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2Jyb2tlblN0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL3ZlcnRpY2FsQnJhbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvY2hpbGROb2Rlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZU5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC9ub25UZXJtaW5hbC9jb2xsZWN0aW9uT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9lcHNpbG9uTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL2Vwc2lsb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFydC90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvbm9kZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL25vZGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ydWxlL29wdGlvbmFsUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvb25lT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9ub2RlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9iYXNpYy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9zcHJlYWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL3F1ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvZGVjbGFyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWEuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL21lZGlhcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9zdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzc05hbWUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgInNyYy91dGlsaXRpZXMvY2xhc3MuanMiLCAic3JjL3dpdGhTdHlsZS5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvaGVhZGluZy5qcyIsICJzcmMvZXhhbXBsZS9kaXYvcm93cy5qcyIsICJzcmMvZXhhbXBsZS9kaXYvY29sdW1uLmpzIiwgInNyYy9leGFtcGxlL2Rpdi9jb2x1bW5zLmpzIiwgInNyYy9leGFtcGxlL3N1YkhlYWRpbmcuanMiLCAic3JjL2V4YW1wbGUvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL2Rpdi9zaXplYWJsZS5qcyIsICJzcmMvZXhhbXBsZS9ldmVudHMuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvYm5mLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2NvbnRlbnQuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvcGFyc2VUcmVlLmpzIiwgInNyYy9leGFtcGxlL2N1cnNvci5qcyIsICJzcmMvdXRpbGl0aWVzL3NpYmxpbmcuanMiLCAic3JjL2V4YW1wbGUvZGl2L3NwbGl0dGVyL3ZlcnRpY2FsLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2xleGljYWxFbnRyaWVzLmpzIiwgInNyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAic3JjL2V4YW1wbGUvdmlldy5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnJlZHVjZSgoYXJyYXksIGVsZW1lbnQpID0+IHtcbiAgICBhcnJheSA9IGFycmF5LmNvbmNhdChlbGVtZW50KTsgIC8vL1xuICAgIFxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1haW5pbmcoZWxlbWVudCwgYXJyYXkpIHtcbiAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGluZGV4T2YoZWxlbWVudCwgYXJyYXkpO1xuXG4gIHJldHVybiBhcnJheS5zbGljZShpbmRleCArIDEpO1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKGVsZW1lbnQsIGFycmF5KSB7XG4gIGxldCBpbmRleCA9IG51bGw7XG5cbiAgYXJyYXkuc29tZSgoY3VycmVudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50SW5kZXgpID0+IHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgIGluZGV4ID0gY3VycmVudEVsZW1lbnRJbmRleDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5kZXg7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjsgIC8vL1xuICB9XG5cbiAgZ2V0UGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGdldENoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICB9XG5cbiAgZ2V0Rmlyc3RDaGlsZCgpIHtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZmlyc3QodGhpcy5jaGlsZHJlbikgfHwgbnVsbDtcblxuICAgIHJldHVybiBmaXJzdENoaWxkO1xuICB9XG5cbiAgbW91bnQocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9XG5cbiAgdW5tb3VudCgpIHtcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdENsYXNzIHtcbiAgY29uc3RydWN0b3IocmVuZGVyLCBnZXRJbml0aWFsU3RhdGUsIGdldENoaWxkQ29udGV4dCwgY29tcG9uZW50RGlkTW91bnQsIGNvbXBvbmVudFdpbGxVbm1vdW50LCBtaXhpbnMpIHtcbiAgICB0aGlzLnJlbmRlciA9IHJlbmRlcjtcblxuICAgIGlmIChnZXRJbml0aWFsU3RhdGUpIHsgdGhpcy5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7IH1cbiAgICBpZiAoZ2V0Q2hpbGRDb250ZXh0KSB7IHRoaXMuZ2V0Q2hpbGRDb250ZXh0ID0gZ2V0Q2hpbGRDb250ZXh0OyB9XG4gICAgaWYgKGNvbXBvbmVudERpZE1vdW50KSB7IHRoaXMuY29tcG9uZW50RGlkTW91bnQgPSBjb21wb25lbnREaWRNb3VudDsgfVxuICAgIGlmIChjb21wb25lbnRXaWxsVW5tb3VudCkgeyB0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gY29tcG9uZW50V2lsbFVubW91bnQ7IH1cblxuICAgIHRoaXMubWl4aW5zID0gbWl4aW5zO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldENoaWxkQ29udGV4dChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbiAgXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblxuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShvYmplY3QpIHtcbiAgICBjb25zdCB7IHJlbmRlciwgZ2V0SW5pdGlhbFN0YXRlLCBnZXRDaGlsZENvbnRleHQsIGNvbXBvbmVudERpZE1vdW50LCBjb21wb25lbnRXaWxsVW5tb3VudCwgbWl4aW5zIH0gPSBvYmplY3Q7XG5cbiAgICByZXR1cm4gbmV3IFJlYWN0Q2xhc3MocmVuZGVyLCBnZXRJbml0aWFsU3RhdGUsIGdldENoaWxkQ29udGV4dCwgY29tcG9uZW50RGlkTW91bnQsIGNvbXBvbmVudFdpbGxVbm1vdW50LCBtaXhpbnMpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgcmV0dXJuIGZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIHJldHVybiBmaXJzdENoaWxkLmdldEF0dHJpYnV0ZShuYW1lKTtcbn1cblxuZnVuY3Rpb24gY2xlYXJBdHRyaWJ1dGUobmFtZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgZmlyc3RDaGlsZC5jbGVhckF0dHJpYnV0ZShuYW1lKTtcbn1cblxuZnVuY3Rpb24gYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICBmaXJzdENoaWxkLmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZShuYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICBmaXJzdENoaWxkLnJlbW92ZUF0dHJpYnV0ZShuYW1lKVxufVxuXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUobmFtZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgcmV0dXJuIGZpcnN0Q2hpbGQuaGFzQXR0cmlidXRlKG5hbWUpO1xufVxuXG5mdW5jdGlvbiBzZXRDbGFzcyhjbGFzc05hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIGZpcnN0Q2hpbGQuc2V0Q2xhc3MoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICBmaXJzdENoaWxkLmFkZENsYXNzKGNsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgZmlyc3RDaGlsZC5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIGZpcnN0Q2hpbGQudG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKTtcblxuICByZXR1cm4gZmlyc3RDaGlsZC5oYXNDbGFzcyhjbGFzc05hbWUpO1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzc2VzKGNsYXNzTmFtZXMpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIHJldHVybiBmaXJzdENoaWxkLmhhc0NsYXNzZXMoY2xhc3NOYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyQ2xhc3NlcygpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIGZpcnN0Q2hpbGQuY2xlYXJDbGFzc2VzKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWUoKSB7XG4gIHJldHVybiBudWxsOyAgLy8vXG59XG5cbmZ1bmN0aW9uIGdldFN0eWxlKG5hbWUpIHtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpO1xuXG4gIHJldHVybiBmaXJzdENoaWxkLmdldFN0eWxlKG5hbWUpO1xufVxuXG5mdW5jdGlvbiBzZXRTdHlsZShuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCk7XG5cbiAgZmlyc3RDaGlsZC5zZXRTdHlsZShuYW1lLCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0QXR0cmlidXRlLFxuICBnZXRBdHRyaWJ1dGUsXG4gIGNsZWFyQXR0cmlidXRlLFxuICBhZGRBdHRyaWJ1dGUsXG4gIHJlbW92ZUF0dHJpYnV0ZSxcbiAgaGFzQXR0cmlidXRlLFxuICBzZXRDbGFzcyxcbiAgYWRkQ2xhc3MsXG4gIHJlbW92ZUNsYXNzLFxuICB0b2dnbGVDbGFzcyxcbiAgaGFzQ2xhc3MsXG4gIGhhc0NsYXNzZXMsXG4gIGNsZWFyQ2xhc3NlcyxcbiAgZ2V0VGFnTmFtZSxcbiAgZ2V0U3R5bGUsXG4gIHNldFN0eWxlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgcmVhY3RFbGVtZW50TWl4aW5zIGZyb20gXCIuLi9taXhpbnMvcmVhY3RFbGVtZW50XCI7XG5cbmltcG9ydCB7IGd1YXJhbnRlZSwgcmVtYWluaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jbGFzcyBSZWFjdEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgXG4gICAgdGhpcy5zdGF0ZSA9IHVuZGVmaW5lZDsgLy8vXG5cbiAgICB0aGlzLmNvbnRleHQgPSB1bmRlZmluZWQ7IC8vL1xuICB9XG5cbiAgbW91bnQocGFyZW50LCByZWZlcmVuY2UsIGNvbnRleHQpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgY29uc3QgY2hpbGRDb250ZXh0ID0gdGhpcy5nZXRDaGlsZENvbnRleHQoY29udGV4dCksXG4gICAgICAgICAgY2hpbGRyZW4gPSBndWFyYW50ZWUodGhpcy5yZW5kZXIoKSk7XG5cbiAgICBzdXBlci5tb3VudChwYXJlbnQsIGNoaWxkcmVuKTtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZFBhcmVudCA9IHRoaXMsXG4gICAgICAgICAgICBjaGlsZFJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblxuICAgICAgY2hpbGQubW91bnQoY2hpbGRQYXJlbnQsIGNoaWxkUmVmZXJlbmNlLCBjaGlsZENvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb21wb25lbnREaWRNb3VudCgpO1xuICB9XG5cbiAgdW5tb3VudChjb250ZXh0KSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgIHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQoKTtcblxuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IHRoaXMuZ2V0Q2hpbGRDb250ZXh0KGNvbnRleHQpLFxuICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbigpO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IGNoaWxkLnVubW91bnQoY2hpbGRDb250ZXh0KSk7XG5cbiAgICBzdXBlci51bm1vdW50KCk7XG4gIH1cblxuICByZW1vdW50KHVwZGF0ZSkge1xuICAgIGNvbnN0IGNoaWxkUGFyZW50ID0gdGhpcyxcbiAgICAgICAgICBjaGlsZFJlZmVyZW5jZSA9IHRoaXMuZ2V0Q2hpbGRSZWZlcmVuY2UoKSxcbiAgICAgICAgICBjaGlsZENvbnRleHQgPSB0aGlzLmdldENoaWxkQ29udGV4dCh0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gY2hpbGQudW5tb3VudChjaGlsZENvbnRleHQpKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBndWFyYW50ZWUodGhpcy5yZW5kZXIodXBkYXRlKSk7XG5cbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiBjaGlsZC5tb3VudChjaGlsZFBhcmVudCwgY2hpbGRSZWZlcmVuY2UsIGNoaWxkQ29udGV4dCkpO1xuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7ICAvLy9cbiAgfVxuXG4gIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuXG4gICAgdGhpcy5yZW1vdW50KCk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGNvbnN0IG9sZFN0YXRlID0gdGhpcy5zdGF0ZTsgIC8vL1xuXG4gICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24ob2xkU3RhdGUsIG5ld1N0YXRlKTtcblxuICAgIHRoaXMucmVtb3VudCgpO1xuICB9XG5cbiAgZm9yY2VVcGRhdGUodXBkYXRlKSB7XG4gICAgdGhpcy5yZW1vdW50KHVwZGF0ZSk7XG4gIH1cblxuICBnZXRDaGlsZFJlZmVyZW5jZSgpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpLFxuICAgICAgICAgIGNoaWxkID0gdGhpczsgLy8vXG5cbiAgICByZXR1cm4gcmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oUmVhY3RFbGVtZW50LnByb3RvdHlwZSwgcmVhY3RFbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3RFbGVtZW50O1xuXG5mdW5jdGlvbiByZWZlcmVuY2UocGFyZW50LCBjaGlsZCkge1xuICBsZXQgcmVmZXJlbmNlID0gZmluZFJlZmVyZW5jZShwYXJlbnQsIGNoaWxkKSxcbiAgICAgIHBhcmVudERPTUVsZW1lbnQgPSBwYXJlbnQuZ2V0RE9NRWxlbWVudCgpO1xuXG4gIHdoaWxlICgocmVmZXJlbmNlID09PSBudWxsKSAmJiAocGFyZW50RE9NRWxlbWVudCA9PT0gbnVsbCkpIHtcbiAgICBjaGlsZCA9IHBhcmVudDsgLy8vXG5cbiAgICBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG5cbiAgICByZWZlcmVuY2UgPSBmaW5kUmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpO1xuXG4gICAgcGFyZW50RE9NRWxlbWVudCA9IHBhcmVudC5nZXRET01FbGVtZW50KCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBmaW5kUmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKSxcbiAgICAgICAgcmVtYWluaW5nQ2hpbGRyZW4gPSByZW1haW5pbmcoY2hpbGQsIGNoaWxkcmVuKTtcblxuICByZXR1cm4gcmVtYWluaW5nQ2hpbGRyZW4ucmVkdWNlKChyZWZlcmVuY2UsIHJlbWFpbmluZ0NoaWxkKSA9PiB7XG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVtYWluaW5nQ2hpbGRET01FbGVtZW50ID0gcmVtYWluaW5nQ2hpbGQuZ2V0RE9NRWxlbWVudCgpO1xuXG4gICAgICBpZiAocmVtYWluaW5nQ2hpbGRET01FbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJlZmVyZW5jZSA9IHJlbWFpbmluZ0NoaWxkOyAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gbnVsbDtcblxuICAgICAgICBwYXJlbnQgPSByZW1haW5pbmdDaGlsZDsgIC8vL1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IGZpbmRSZWZlcmVuY2UocGFyZW50LCBjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfSwgbnVsbCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWFjdEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudC9yZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdENvbXBvbmVudCBleHRlbmRzIFJlYWN0RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgLy8gdGhpcy5yZWFjdENvbXBvbmVudCA9IHJlYWN0Q29tcG9uZW50O1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gIH1cblxuICAvLyByZW5kZXIodXBkYXRlKSB7XG4gIC8vICAgcmV0dXJuIHRoaXMucmVhY3RDb21wb25lbnQucmVuZGVyLmNhbGwodGhpcywgdXBkYXRlKTtcbiAgLy8gfVxuXG4gIC8vIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5yZWFjdENvbXBvbmVudC5nZXRJbml0aWFsU3RhdGUuY2FsbCh0aGlzKTtcbiAgLy8gfVxuXG4gIC8vIGdldENoaWxkQ29udGV4dChjb250ZXh0KSB7XG4gIC8vICAgcmV0dXJuIHRoaXMucmVhY3RDb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0LmNhbGwodGhpcywgY29udGV4dCk7XG4gIC8vIH1cblxuICAvLyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgLy8gICB0aGlzLnJlYWN0Q29tcG9uZW50LmNvbXBvbmVudERpZE1vdW50LmNhbGwodGhpcyk7XG4gIC8vIH1cblxuICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgLy8gICB0aGlzLnJlYWN0Q29tcG9uZW50LmNvbXBvbmVudFdpbGxVbm1vdW50LmNhbGwodGhpcyk7XG4gIC8vIH1cblxuXG5cblxuXG5cblxuXG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBcbiAgZ2V0Q2hpbGRDb250ZXh0KGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgXG4gIH1cbiBcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG5cbiAgfVxuXG5cblxuXG5cblxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVhY3RFbGVtZW50IGZyb20gXCIuLi8uLi9lbGVtZW50L3JlYWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0Q2xhc3NFbGVtZW50IGV4dGVuZHMgUmVhY3RFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocmVhY3RDbGFzcywgcHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlYWN0Q2xhc3MgPSByZWFjdENsYXNzO1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gIH1cblxuICByZW5kZXIodXBkYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhY3RDbGFzcy5yZW5kZXIuY2FsbCh0aGlzLCB1cGRhdGUpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0Q2xhc3MuZ2V0SW5pdGlhbFN0YXRlLmNhbGwodGhpcyk7XG4gIH1cblxuICBnZXRDaGlsZENvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0Q2xhc3MuZ2V0Q2hpbGRDb250ZXh0LmNhbGwodGhpcywgY29udGV4dCk7XG4gIH1cbiAgXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RDbGFzcy5jb21wb25lbnREaWRNb3VudC5jYWxsKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5yZWFjdENsYXNzLmNvbXBvbmVudFdpbGxVbm1vdW50LmNhbGwodGhpcyk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlYWN0RWxlbWVudCBmcm9tIFwiLi4vLi4vZWxlbWVudC9yZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdEZ1bmN0aW9uRWxlbWVudCBleHRlbmRzIFJlYWN0RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHJlYWN0RnVuY3Rpb24sIHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWFjdEZ1bmN0aW9uID0gcmVhY3RGdW5jdGlvbjtcblxuXG5cblxuICB9XG4gXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdEZ1bmN0aW9uKHRoaXMucHJvcHMsIHRoaXMuY29udGV4dCwgdGhpcyk7XG4gIH1cblxuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgLy8vXG4gIH1cblxuICBnZXRDaGlsZENvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8vXG4gIH1cbiBcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgLy8vXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlYWN0RWxlbWVudCBmcm9tIFwiLi4vLi4vZWxlbWVudC9yZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdENvbXBvbmVudEVsZW1lbnQgZXh0ZW5kcyBSZWFjdEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihyZWFjdENvbXBvbmVudCwgcHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlYWN0Q29tcG9uZW50ID0gcmVhY3RDb21wb25lbnQ7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSgpO1xuXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgfVxuXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdENvbXBvbmVudC5yZW5kZXIuY2FsbCh0aGlzLCB1cGRhdGUpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0Q29tcG9uZW50LmdldEluaXRpYWxTdGF0ZS5jYWxsKHRoaXMpO1xuICB9XG5cbiAgZ2V0Q2hpbGRDb250ZXh0KGNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdENvbXBvbmVudC5nZXRDaGlsZENvbnRleHQuY2FsbCh0aGlzLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RDb21wb25lbnQuY29tcG9uZW50RGlkTW91bnQuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucmVhY3RDb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQuY2FsbCh0aGlzKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsRE9NTm9kZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcywgZG9tRWxlbWVudCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgbW91bnQocGFyZW50LCByZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcbiAgICBcbiAgICBzdXBlci5tb3VudChwYXJlbnQsIGNoaWxkcmVuKTtcblxuICAgIHBhcmVudERPTUVsZW1lbnQocGFyZW50KS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KHJlZmVyZW5jZSkpO1xuXG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIHVubW91bnQoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50KTtcblxuICAgIHN1cGVyLnVubW91bnQoKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRE9NRWxlbWVudChkb21FbGVtZW50KSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXSxcbiAgICAgICAgICBwcm9wcyA9IHtcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2aXJ0dWFsRE9NTm9kZSA9IG5ldyBWaXJ0dWFsRE9NTm9kZShwcm9wcywgZG9tRWxlbWVudCk7XG5cbiAgICByZXR1cm4gdmlydHVhbERPTU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyZW50RE9NRWxlbWVudChwYXJlbnQpIHtcbiAgbGV0IHBhcmVudERPTUVsZW1lbnQgPSBwYXJlbnQuZ2V0RE9NRWxlbWVudCgpO1xuXG4gIHdoaWxlIChwYXJlbnRET01FbGVtZW50ID09PSBudWxsKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXG4gICAgcGFyZW50RE9NRWxlbWVudCA9IHBhcmVudC5nZXRET01FbGVtZW50KCk7XG4gIH1cblxuICByZXR1cm4gcGFyZW50RE9NRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlRE9NRWxlbWVudChyZWZlcmVuY2UpIHtcbiAgY29uc3QgcmVmZXJlbmNlRE9NRWxlbWVudCA9IChyZWZlcmVuY2UgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLmdldERPTUVsZW1lbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gcmVmZXJlbmNlRE9NRWxlbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZpcnR1YWxET01Ob2RlIGZyb20gXCIuLi92aXJ0dWFsRE9NTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsRE9NVGV4dEVsZW1lbnQgZXh0ZW5kcyBWaXJ0dWFsRE9NTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCksXG4gICAgICAgICAgY2hpbGRyZW4gPSBbXSxcbiAgICAgICAgICBwcm9wcyA9IHtcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfTtcblxuICAgIHN1cGVyKHByb3BzLCBkb21FbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KHBhcmVudCwgcmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgc3VwZXIubW91bnQocGFyZW50LCByZWZlcmVuY2UpO1xuICB9XG4gIFxuICB1bm1vdW50KGNvbnRleHQpIHtcbiAgICBzdXBlci51bm1vdW50KCk7XG4gIH1cblxuICBnZXRUZXh0KCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUsXG4gICAgICAgICAgdGV4dCA9IG5vZGVWYWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHNldFRleHQodGV4dCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRleHQ7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBSRUYgPSBcInJlZlwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgSFRNTF9GT1IgPSBcImh0bWxGb3JcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FID0gXCJjbGFzc05hbWVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IEhUVFBfV1dXX1czX09SR18yMDAwX1NWRyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRk9SLCBDTEFTUywgT0JKRUNULCBCT09MRUFOLCBDTEFTU19OQU1FLCBIVE1MX0ZPUiwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IENMQVNTX05BTUUpIHtcbiAgICBuYW1lID0gQ0xBU1M7XG4gIH1cblxuICBpZiAobmFtZSA9PT0gSFRNTF9GT1IpIHtcbiAgICBuYW1lID0gRk9SO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRbbmFtZV1ba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5hbWU7IC8vL1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7IH1cblxuZnVuY3Rpb24gY2xlYXJBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyB9XG5cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKTsgfVxuXG5mdW5jdGlvbiBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG5mdW5jdGlvbiBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTsgfVxuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG5mdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG5mdW5jdGlvbiBoYXNDbGFzc2VzKGNsYXNzTmFtZXMpIHsgcmV0dXJuIGNsYXNzTmFtZXMuZXZlcnkoKGNsYXNzTmFtZSkgPT4gdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpKTsgfVxuXG5mdW5jdGlvbiBjbGVhckNsYXNzZXMoKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBFTVBUWV9TVFJJTkc7IH1cblxuZnVuY3Rpb24gZ2V0VGFnTmFtZSgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC50YWdOYW1lOyB9XG5cbmZ1bmN0aW9uIGdldFN0eWxlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zdHlsZVtuYW1lXTsgfVxuXG5mdW5jdGlvbiBzZXRTdHlsZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTsgfVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldEF0dHJpYnV0ZSxcbiAgZ2V0QXR0cmlidXRlLFxuICBjbGVhckF0dHJpYnV0ZSxcbiAgYWRkQXR0cmlidXRlLFxuICByZW1vdmVBdHRyaWJ1dGUsXG4gIGhhc0F0dHJpYnV0ZSxcbiAgc2V0Q2xhc3MsXG4gIGFkZENsYXNzLFxuICByZW1vdmVDbGFzcyxcbiAgdG9nZ2xlQ2xhc3MsXG4gIGhhc0NsYXNzLFxuICBoYXNDbGFzc2VzLFxuICBjbGVhckNsYXNzZXMsXG4gIGdldFRhZ05hbWUsXG4gIGdldFN0eWxlLFxuICBzZXRTdHlsZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZpcnR1YWxET01Ob2RlIGZyb20gXCIuLi92aXJ0dWFsRE9NTm9kZVwiO1xuXG5pbXBvcnQgdmlydHVhbERPTUVsZW1lbnRNaXhpbnMgZnJvbSBcIi4uLy4uL21peGlucy92aXJ0dWFsRE9NRWxlbWVudFwiO1xuXG5pbXBvcnQgeyBSRUYgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIFZpcnR1YWxET01FbGVtZW50IGV4dGVuZHMgVmlydHVhbERPTU5vZGUge1xuICBtb3VudChwYXJlbnQsIHJlZmVyZW5jZSwgY29udGV4dCkge1xuICAgIHN1cGVyLm1vdW50KHBhcmVudCwgcmVmZXJlbmNlKTtcblxuICAgIGNvbnN0IGNoaWxkUGFyZW50ID0gdGhpcyxcbiAgICAgICAgICBjaGlsZFJlZmVyZW5jZSA9IG51bGwsXG4gICAgICAgICAgY2hpbGRDb250ZXh0ID0gY29udGV4dCxcbiAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiBjaGlsZC5tb3VudChjaGlsZFBhcmVudCwgY2hpbGRSZWZlcmVuY2UsIGNoaWxkQ29udGV4dCkpO1xuXG4gICAgdGhpcy5hcHBseVByb3BzKCk7XG4gIH1cblxuICB1bm1vdW50KGNvbnRleHQpIHtcbiAgICBjb25zdCBjaGlsZENvbnRleHQgPSBjb250ZXh0LFxuICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbigpO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IGNoaWxkLnVubW91bnQoY2hpbGRDb250ZXh0KSk7XG5cbiAgICBzdXBlci51bm1vdW50KCk7XG4gIH1cblxuICBhcHBseVByb3BzKCkge1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XG5cbiAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvcHNbbmFtZV07XG5cbiAgICAgIGlmIChmYWxzZSkge1xuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNIYW5kbGVyTmFtZShuYW1lKSkge1xuICAgICAgICB0aGlzLnNldEhhbmRsZXIobmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQXR0cmlidXRlTmFtZShuYW1lKSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT09IFJFRikge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHZhbHVlOyAvLy9cbiAgICAgICAgXG4gICAgICAgIGNhbGxiYWNrKHRoaXMuZG9tRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRIYW5kbGVyKG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSwgLy8vXG4gICAgICAgICAgaGFuZGxlciA9IHZhbHVlOyAgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsICBoYW5kbGVyKTtcbiAgfVxuXG5cdGlzSGFuZGxlck5hbWUobmFtZSkge1xuXHRcdHJldHVybiAvXm9uLy50ZXN0KG5hbWUpO1xuXHR9XG59XG5cbk9iamVjdC5hc3NpZ24oVmlydHVhbERPTUVsZW1lbnQucHJvdG90eXBlLCB2aXJ0dWFsRE9NRWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFZpcnR1YWxET01FbGVtZW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdUYWdOYW1lKHRhZ05hbWUpIHtcbiAgcmV0dXJuIHN2Z1RhZ05hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIHN2Z0F0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBodG1sQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmNvbnN0IHN2Z1RhZ05hbWVzID0gW1xuICAgICAgICBcImFsdEdseXBoXCIsIFwiYW5pbWF0ZVwiLCBcImFuaW1hdGVDb2xvclwiLCBcImFuaW1hdGVNb3Rpb25cIiwgXCJhbmltYXRlVHJhbnNmb3JtXCIsIFwiYW5pbWF0aW9uXCIsIFwiYXVkaW9cIixcbiAgICAgICAgXCJjaXJjbGVcIiwgXCJjbGlwUGF0aFwiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjdXJzb3JcIixcbiAgICAgICAgXCJkZWZzXCIsIFwiZGVzY1wiLCBcImRpc2NhcmRcIixcbiAgICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICAgIFwiZmVCbGVuZFwiLCBcImZlQ29sb3JNYXRyaXhcIiwgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsIFwiZmVDb21wb3NpdGVcIiwgXCJmZUNvbnZvbHZlTWF0cml4XCIsIFwiZmVEaWZmdXNlTGlnaHRpbmdcIiwgXCJmZURpc3BsYWNlbWVudE1hcFwiLCBcImZlRGlzdGFudExpZ2h0XCIsIFwiZmVEcm9wU2hhZG93XCIsIFwiZmVGbG9vZFwiLCBcImZlRnVuY0FcIiwgXCJmZUZ1bmNCXCIsIFwiZmVGdW5jR1wiLCBcImZlRnVuY1JcIiwgXCJmZUdhdXNzaWFuQmx1clwiLCBcImZlSW1hZ2VcIiwgXCJmZU1lcmdlXCIsIFwiZmVNZXJnZU5vZGVcIiwgXCJmZU1vcnBob2xvZ3lcIiwgXCJmZU9mZnNldFwiLCBcImZlUG9pbnRMaWdodFwiLCBcImZlU3BlY3VsYXJMaWdodGluZ1wiLCBcImZlU3BvdExpZ2h0XCIsIFwiZmVUaWxlXCIsIFwiZmVUdXJidWxlbmNlXCIsIFwiZmlsdGVyXCIsIFwiZm9udFwiLCBcImZvbnQtZmFjZVwiLCBcImZvbnQtZmFjZS1mb3JtYXRcIiwgXCJmb250LWZhY2UtbmFtZVwiLCBcImZvbnQtZmFjZS11cmlcIiwgXCJmb3JlaWduT2JqZWN0XCIsXG4gICAgICAgIFwiZ1wiLCBcImdseXBoXCIsIFwiZ2x5cGhSZWZcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGF0Y2hcIiwgXCJoYXRjaHBhdGhcIiwgXCJoa2VyblwiLFxuICAgICAgICBcImltYWdlXCIsIFwibGluZVwiLCBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgIFwibGlzdGVuZXJcIixcbiAgICAgICAgXCJtYXJrZXJcIiwgXCJtYXNrXCIsIFwibWVzaFwiLCBcIm1lc2hncmFkaWVudFwiLCBcIm1lc2hwYXRjaFwiLCBcIm1lc2hyb3dcIiwgXCJtZXRhZGF0YVwiLCBcIm1pc3NpbmctZ2x5cGhcIiwgXCJtcGF0aFwiLFxuICAgICAgICBcInBhdGhcIiwgXCJwYXR0ZXJuXCIsIFwicG9seWdvblwiLCBcInBvbHlsaW5lXCIsIFwicHJlZmV0Y2hcIixcbiAgICAgICAgXCJyYWRpYWxHcmFkaWVudFwiLCBcInJlY3RcIixcbiAgICAgICAgXCJzY3JpcHRcIiwgXCJzZXRcIiwgXCJzb2xpZGNvbG9yXCIsIFwic3RvcFwiLCBcInN0eWxlXCIsIFwic3ZnXCIsIFwic3dpdGNoXCIsIFwic3ltYm9sXCIsXG4gICAgICAgIFwidGJyZWFrXCIsIFwidGV4dFwiLCBcInRleHRBcmVhXCIsIFwidGV4dFBhdGhcIiwgXCJ0aXRsZVwiLCBcInRyZWZcIiwgXCJ0c3BhblwiLFxuICAgICAgICBcInVua25vd25cIiwgXCJ1c2VcIixcbiAgICAgICAgXCJ2aWRlb1wiLCBcInZpZXdcIiwgXCJ2a2VyblwiXG4gICAgICBdLFxuICAgICAgc3ZnQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZW50LWhlaWdodFwiLCBcImFjY3VtdWxhdGVcIiwgXCJhZGRpdGl2ZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiLCBcImFscGhhYmV0aWNcIiwgXCJhbXBsaXR1ZGVcIiwgXCJhcmFiaWMtZm9ybVwiLCBcImFzY2VudFwiLCBcImF0dHJpYnV0ZU5hbWVcIiwgXCJhdHRyaWJ1dGVUeXBlXCIsIFwiYXppbXV0aFwiLFxuICAgICAgICBcImJhbmR3aWR0aFwiLCBcImJhc2VGcmVxdWVuY3lcIiwgXCJiYXNlUHJvZmlsZVwiLCBcImJhc2VsaW5lLXNoaWZ0XCIsIFwiYmJveFwiLCBcImJlZ2luXCIsIFwiYmlhc1wiLCBcImJ5XCIsXG4gICAgICAgIFwiY2FsY01vZGVcIiwgXCJjYXAtaGVpZ2h0XCIsIFwiY2xpcFwiLCBcImNsYXNzTmFtZVwiLCBcImNsaXAtcGF0aFwiLCBcImNsaXAtcnVsZVwiLCBcImNsaXBQYXRoVW5pdHNcIiwgXCJjb2xvclwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY29sb3ItcmVuZGVyaW5nXCIsIFwiY29udGVudFNjcmlwdFR5cGVcIiwgXCJjb250ZW50U3R5bGVUeXBlXCIsIFwiY3Jvc3NvcmlnaW5cIiwgXCJjdXJzb3JcIiwgXCJjeFwiLCBcImN5XCIsXG4gICAgICAgIFwiZFwiLCBcImRlZmF1bHRBY3Rpb25cIiwgXCJkZXNjZW50XCIsIFwiZGlmZnVzZUNvbnN0YW50XCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzcGxheVwiLCBcImRpdmlzb3JcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImRvd25sb2FkXCIsIFwiZHVyXCIsIFwiZHhcIiwgXCJkeVwiLFxuICAgICAgICBcImVkZ2VNb2RlXCIsIFwiZWRpdGFibGVcIiwgXCJlbGV2YXRpb25cIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiLCBcImVuZFwiLCBcImV2ZW50XCIsIFwiZXhwb25lbnRcIiwgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXG4gICAgICAgIFwiZmlsbFwiLCBcImZpbGwtb3BhY2l0eVwiLCBcImZpbGwtcnVsZVwiLCBcImZpbHRlclwiLCBcImZpbHRlclJlc1wiLCBcImZpbHRlclVuaXRzXCIsIFwiZmxvb2QtY29sb3JcIiwgXCJmbG9vZC1vcGFjaXR5XCIsIFwiZm9jdXNIaWdobGlnaHRcIiwgXCJmb2N1c2FibGVcIiwgXCJmb250LWZhbWlseVwiLCBcImZvbnQtc2l6ZVwiLCBcImZvbnQtc2l6ZS1hZGp1c3RcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC12YXJpYW50XCIsIFwiZm9udC13ZWlnaHRcIiwgXCJmb3JtYXRcIiwgXCJmclwiLCBcImZyb21cIiwgXCJmeFwiLCBcImZ5XCIsXG4gICAgICAgIFwiZzFcIiwgXCJnMlwiLCBcImdseXBoLW5hbWVcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIiwgXCJnbHlwaFJlZlwiLCBcImdyYWRpZW50VHJhbnNmb3JtXCIsIFwiZ3JhZGllbnRVbml0c1wiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYW5naW5nXCIsIFwiaGF0Y2hDb250ZW50VW5pdHNcIiwgXCJoYXRjaFVuaXRzXCIsIFwiaGVpZ2h0XCIsIFwiaG9yaXotYWR2LXhcIiwgXCJob3Jpei1vcmlnaW4teFwiLCBcImhvcml6LW9yaWdpbi15XCIsIFwiaHJlZlwiLCBcImhyZWZsYW5nXCIsXG4gICAgICAgIFwiaWRcIiwgXCJpZGVvZ3JhcGhpY1wiLCBcImltYWdlLXJlbmRlcmluZ1wiLCBcImluXCIsIFwiaW4yXCIsIFwiaW5pdGlhbFZpc2liaWxpdHlcIiwgXCJpbnRlcmNlcHRcIixcbiAgICAgICAgXCJrXCIsIFwiazFcIiwgXCJrMlwiLCBcImszXCIsIFwiazRcIiwgXCJrZXJuZWxNYXRyaXhcIiwgXCJrZXJuZWxVbml0TGVuZ3RoXCIsIFwia2VybmluZ1wiLCBcImtleVBvaW50c1wiLCBcImtleVNwbGluZXNcIiwgXCJrZXlUaW1lc1wiLFxuICAgICAgICBcImxlbmd0aEFkanVzdFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGlnaHRpbmctY29sb3JcIiwgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLCBcImxvY2FsXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiLCBcIm1hcmtlci1taWRcIiwgXCJtYXJrZXItc3RhcnRcIiwgXCJtYXJrZXJIZWlnaHRcIiwgXCJtYXJrZXJVbml0c1wiLCBcIm1hcmtlcldpZHRoXCIsIFwibWFza1wiLCBcIm1hc2tDb250ZW50VW5pdHNcIiwgXCJtYXNrVW5pdHNcIiwgXCJtYXRoZW1hdGljYWxcIiwgXCJtYXhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhQ2hhcmFjdGVyRW5jb2RpbmdcIiwgXCJtZWRpYUNvbnRlbnRFbmNvZGluZ3NcIiwgXCJtZWRpYVNpemVcIiwgXCJtZWRpYVRpbWVcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtb2RlXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5hdi1kb3duXCIsIFwibmF2LWRvd24tbGVmdFwiLCBcIm5hdi1kb3duLXJpZ2h0XCIsIFwibmF2LWxlZnRcIiwgXCJuYXYtbmV4dFwiLCBcIm5hdi1wcmV2XCIsIFwibmF2LXJpZ2h0XCIsIFwibmF2LXVwXCIsIFwibmF2LXVwLWxlZnRcIiwgXCJuYXYtdXAtcmlnaHRcIiwgXCJudW1PY3RhdmVzXCIsXG4gICAgICAgIFwib2JzZXJ2ZXJcIiwgXCJvZmZzZXRcIiwgXCJvcGFjaXR5XCIsIFwib3BlcmF0b3JcIiwgXCJvcmRlclwiLCBcIm9yaWVudFwiLCBcIm9yaWVudGF0aW9uXCIsIFwib3JpZ2luXCIsIFwib3ZlcmZsb3dcIiwgXCJvdmVybGF5XCIsIFwib3ZlcmxpbmUtcG9zaXRpb25cIiwgXCJvdmVybGluZS10aGlja25lc3NcIixcbiAgICAgICAgXCJwYW5vc2UtMVwiLCBcInBhdGhcIiwgXCJwYXRoTGVuZ3RoXCIsIFwicGF0dGVybkNvbnRlbnRVbml0c1wiLCBcInBhdHRlcm5UcmFuc2Zvcm1cIiwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJwaGFzZVwiLCBcInBpdGNoXCIsIFwicGxheWJhY2tPcmRlclwiLCBcInBsYXliYWNrb3JkZXJcIiwgXCJwb2ludGVyLWV2ZW50c1wiLCBcInBvaW50c1wiLCBcInBvaW50c0F0WFwiLCBcInBvaW50c0F0WVwiLCBcInBvaW50c0F0WlwiLCBcInByZXNlcnZlQWxwaGFcIiwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwicHJpbWl0aXZlVW5pdHNcIiwgXCJwcm9wYWdhdGVcIixcbiAgICAgICAgXCJyXCIsIFwicmFkaXVzXCIsIFwicmVmWFwiLCBcInJlZllcIiwgXCJyZW5kZXJpbmctaW50ZW50XCIsIFwicmVwZWF0Q291bnRcIiwgXCJyZXBlYXREdXJcIiwgXCJyZXF1aXJlZEV4dGVuc2lvbnNcIiwgXCJyZXF1aXJlZEZlYXR1cmVzXCIsIFwicmVxdWlyZWRGb250c1wiLCBcInJlcXVpcmVkRm9ybWF0c1wiLCBcInJlc3RhcnRcIiwgXCJyZXN1bHRcIiwgXCJyb3RhdGVcIiwgXCJyeFwiLCBcInJ5XCIsXG4gICAgICAgIFwic2NhbGVcIiwgXCJzZWVkXCIsIFwic2hhcGUtcmVuZGVyaW5nXCIsIFwic2lkZVwiLCBcInNsb3BlXCIsIFwic25hcHNob3RUaW1lXCIsIFwic3BhY2luZ1wiLCBcInNwZWN1bGFyQ29uc3RhbnRcIiwgXCJzcGVjdWxhckV4cG9uZW50XCIsIFwic3ByZWFkTWV0aG9kXCIsIFwic3JjXCIsIFwic3RhcnRPZmZzZXRcIiwgXCJzdGREZXZpYXRpb25cIiwgXCJzdGVtaFwiLCBcInN0ZW12XCIsIFwic3RpdGNoVGlsZXNcIiwgXCJzdG9wLWNvbG9yXCIsIFwic3RvcC1vcGFjaXR5XCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCIsIFwic3RyaW5nXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWpvaW5cIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiLCBcInN0cm9rZS1vcGFjaXR5XCIsIFwic3Ryb2tlLXdpZHRoXCIsIFwic3R5bGVcIiwgXCJzdXJmYWNlU2NhbGVcIiwgXCJzeW5jQmVoYXZpb3JcIiwgXCJzeW5jQmVoYXZpb3JEZWZhdWx0XCIsIFwic3luY01hc3RlclwiLCBcInN5bmNUb2xlcmFuY2VcIiwgXCJzeW5jVG9sZXJhbmNlRGVmYXVsdFwiLCBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIFwidGFibGVWYWx1ZXNcIiwgXCJ0YXJnZXRcIiwgXCJ0YXJnZXRYXCIsIFwidGFyZ2V0WVwiLCBcInRleHQtYW5jaG9yXCIsIFwidGV4dC1kZWNvcmF0aW9uXCIsIFwidGV4dC1yZW5kZXJpbmdcIiwgXCJ0ZXh0TGVuZ3RoXCIsIFwidGltZWxpbmVCZWdpblwiLCBcInRpbWVsaW5lYmVnaW5cIiwgXCJ0aXRsZVwiLCBcInRvXCIsIFwidHJhbnNmb3JtXCIsIFwidHJhbnNmb3JtQmVoYXZpb3JcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidTFcIiwgXCJ1MlwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiLCBcInVuZGVybGluZS10aGlja25lc3NcIiwgXCJ1bmljb2RlXCIsIFwidW5pY29kZS1iaWRpXCIsIFwidW5pY29kZS1yYW5nZVwiLCBcInVuaXRzLXBlci1lbVwiLFxuICAgICAgICBcInYtYWxwaGFiZXRpY1wiLCBcInYtaGFuZ2luZ1wiLCBcInYtaWRlb2dyYXBoaWNcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiLCBcInZhbHVlc1wiLCBcInZlcnNpb25cIiwgXCJ2ZXJ0LWFkdi15XCIsIFwidmVydC1vcmlnaW4teFwiLCBcInZlcnQtb3JpZ2luLXlcIiwgXCJ2aWV3Qm94XCIsIFwidmlld1RhcmdldFwiLCBcInZpc2liaWxpdHlcIixcbiAgICAgICAgXCJ3aWR0aFwiLCBcIndpZHRoc1wiLCBcIndvcmQtc3BhY2luZ1wiLCBcIndyaXRpbmctbW9kZVwiLFxuICAgICAgICBcInhcIiwgXCJ4LWhlaWdodFwiLCBcIngxXCIsIFwieDJcIiwgXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwieVwiLCBcInkxXCIsIFwieTJcIiwgXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwielwiLCBcInpvb21BbmRQYW5cIlxuICAgICAgXSxcbiAgICAgIGh0bWxBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlcHRcIiwgXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXNzS2V5XCIsIFwiYWN0aW9uXCIsIFwiYWxsb3dcIiwgXCJhbGxvd0Z1bGxTY3JlZW5cIiwgXCJhbGxvd1RyYW5zcGFyZW5jeVwiLCBcImFsdFwiLCBcImFzeW5jXCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1BsYXlcIixcbiAgICAgICAgXCJjYXB0dXJlXCIsIFwiY2VsbFBhZGRpbmdcIiwgXCJjZWxsU3BhY2luZ1wiLCBcImNoYWxsZW5nZVwiLCBcImNoYXJTZXRcIiwgXCJjaGVja2VkXCIsIFwiY2l0ZVwiLCBcImNsYXNzSURcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xTcGFuXCIsIFwiY29sc1wiLCBcImNvbnRlbnRcIiwgXCJjb250ZW50RWRpdGFibGVcIiwgXCJjb250ZXh0TWVudVwiLCBcImNvbnRyb2xzXCIsIFwiY29vcmRzXCIsIFwiY3Jvc3NPcmlnaW5cIixcbiAgICAgICAgXCJkYXRhXCIsIFwiZGF0ZVRpbWVcIiwgXCJkZWZhdWx0XCIsIFwiZGVmZXJcIiwgXCJkaXJcIiwgXCJkaXNhYmxlZFwiLCBcImRvd25sb2FkXCIsIFwiZHJhZ2dhYmxlXCIsXG4gICAgICAgIFwiZW5jVHlwZVwiLFxuICAgICAgICBcImZvcm1cIiwgXCJmb3JtQWN0aW9uXCIsIFwiZm9ybUVuY1R5cGVcIiwgXCJmb3JtTWV0aG9kXCIsIFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJmb3JtVGFyZ2V0XCIsIFwiZnJhbWVCb3JkZXJcIixcbiAgICAgICAgXCJoZWFkZXJzXCIsIFwiaGVpZ2h0XCIsIFwiaGlkZGVuXCIsIFwiaGlnaFwiLCBcImhyZWZcIiwgXCJocmVmTGFuZ1wiLCBcImh0bWxGb3JcIiwgXCJodHRwRXF1aXZcIixcbiAgICAgICAgXCJpY29uXCIsIFwiaWRcIiwgXCJpbnB1dE1vZGVcIiwgXCJpbnRlZ3JpdHlcIiwgXCJpc1wiLFxuICAgICAgICBcImtleVBhcmFtc1wiLCBcImtleVR5cGVcIiwgXCJraW5kXCIsXG4gICAgICAgIFwibGFiZWxcIiwgXCJsYW5nXCIsIFwibGlzdFwiLCBcImxvb3BcIiwgXCJsb3dcIixcbiAgICAgICAgXCJtYW5pZmVzdFwiLCBcIm1hcmdpbkhlaWdodFwiLCBcIm1hcmdpbldpZHRoXCIsIFwibWF4XCIsIFwibWF4TGVuZ3RoXCIsIFwibWVkaWFcIiwgXCJtZWRpYUdyb3VwXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibWluTGVuZ3RoXCIsIFwibXVsdGlwbGVcIiwgXCJtdXRlZFwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJub1ZhbGlkYXRlXCIsIFwibm9uY2VcIixcbiAgICAgICAgXCJvcGVuXCIsIFwib3B0aW11bVwiLFxuICAgICAgICBcInBhdHRlcm5cIiwgXCJwbGFjZWhvbGRlclwiLCBcInBvc3RlclwiLCBcInByZWxvYWRcIiwgXCJwcm9maWxlXCIsXG4gICAgICAgIFwicmFkaW9Hcm91cFwiLCBcInJlYWRPbmx5XCIsIFwicmVsXCIsIFwicmVxdWlyZWRcIiwgXCJyZXZlcnNlZFwiLCBcInJvbGVcIiwgXCJyb3dTcGFuXCIsIFwicm93c1wiLFxuICAgICAgICBcInNhbmRib3hcIiwgXCJzY29wZVwiLCBcInNjb3BlZFwiLCBcInNjcm9sbGluZ1wiLCBcInNlYW1sZXNzXCIsIFwic2VsZWN0ZWRcIiwgXCJzaGFwZVwiLCBcInNpemVcIiwgXCJzaXplc1wiLCBcInNwYW5cIiwgXCJzcGVsbENoZWNrXCIsIFwic3JjXCIsIFwic3JjRG9jXCIsIFwic3JjTGFuZ1wiLCBcInNyY1NldFwiLCBcInN0YXJ0XCIsIFwic3RlcFwiLCBcInN0eWxlXCIsIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRhYkluZGV4XCIsIFwidGFyZ2V0XCIsIFwidGl0bGVcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlTWFwXCIsXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBcIndtb2RlXCIsXG4gICAgICAgIFwid3JhcFwiXG4gICAgICBdO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlydHVhbERPTUVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuaW1wb3J0IHsgaXNIVE1MQXR0cmlidXRlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsRE9NSFRNTEVsZW1lbnQgZXh0ZW5kcyBWaXJ0dWFsRE9NRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHRhZ05hbWUsIHByb3BzKSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgICBzdXBlcihwcm9wcywgZG9tRWxlbWVudCk7XG4gIH1cblxuICBpc0F0dHJpYnV0ZU5hbWUobmFtZSkge1xuICAgIHJldHVybiBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWaXJ0dWFsRE9NRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBpc1NWR0F0dHJpYnV0ZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IEhUVFBfV1dXX1czX09SR18yMDAwX1NWRyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlydHVhbERPTVNWR0VsZW1lbnQgZXh0ZW5kcyBWaXJ0dWFsRE9NRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHRhZ05hbWUsIHByb3BzKSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhIVFRQX1dXV19XM19PUkdfMjAwMF9TVkcsIHRhZ05hbWUpO1xuXG4gICAgc3VwZXIocHJvcHMsIGRvbUVsZW1lbnQpO1xuICB9XG5cbiAgaXNBdHRyaWJ1dGVOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gaXNTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBSZWFjdENsYXNzIGZyb20gXCIuL3JlYWN0Q2xhc3NcIjtcbmltcG9ydCBSZWFjdENvbXBvbmVudCBmcm9tIFwiLi9yZWFjdENvbXBvbmVudFwiO1xuaW1wb3J0IFJlYWN0Q2xhc3NFbGVtZW50IGZyb20gXCIuL2VsZW1lbnQvcmVhY3QvY2xhc3NcIjtcbmltcG9ydCBSZWFjdEZ1bmN0aW9uRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50L3JlYWN0L2Z1bmN0aW9uXCI7XG5pbXBvcnQgUmVhY3RDb21wb25lbnRFbGVtZW50IGZyb20gXCIuL2VsZW1lbnQvcmVhY3QvY29tcG9uZW50XCI7XG5pbXBvcnQgVmlydHVhbERPTVRleHRFbGVtZW50IGZyb20gXCIuL2VsZW1lbnQvdmlydHVhbERPTU5vZGUvdGV4dEVsZW1lbnRcIjtcbmltcG9ydCBWaXJ0dWFsRE9NSFRNTEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudC92aXJ0dWFsRE9NTm9kZS9lbGVtZW50L2h0bWxcIjtcbmltcG9ydCBWaXJ0dWFsRE9NU1ZHRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50L3ZpcnR1YWxET01Ob2RlL2VsZW1lbnQvc3ZnXCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzU1ZHVGFnTmFtZSB9IGZyb20gXCIuL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyBTVFJJTkcsIEZVTkNUSU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKG9iamVjdCkge1xuICByZXR1cm4gUmVhY3RDbGFzcy5jcmVhdGUob2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuXG4gIGlmIChmaXJzdEFyZ3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuRnJvbVJlbWFpbmluZ0FyZ3VtZW50cyhyZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIHByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywge1xuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICB9KTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gU1RSSU5HKSB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gZmlyc3RBcmd1bWVudCwgIC8vL1xuICAgICAgICAgICAgdmlydHVhbERPTUVsZW1lbnQgPSBpc1NWR1RhZ05hbWUodGFnTmFtZSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWaXJ0dWFsRE9NU1ZHRWxlbWVudCh0YWdOYW1lLCBwcm9wcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZpcnR1YWxET01IVE1MRWxlbWVudCh0YWdOYW1lLCBwcm9wcyk7XG5cbiAgICAgIGVsZW1lbnQgPSB2aXJ0dWFsRE9NRWxlbWVudCAvLy9cbiAgICB9IGVsc2UgaWYgKGZpcnN0QXJndW1lbnQgaW5zdGFuY2VvZiBSZWFjdENsYXNzKSB7XG4gICAgICBjb25zdCByZWFjdENsYXNzID0gZmlyc3RBcmd1bWVudCwgLy8vXG4gICAgICAgICAgICByZWFjdENsYXNzRWxlbWVudCA9IG5ldyBSZWFjdENsYXNzRWxlbWVudChyZWFjdENsYXNzLCBwcm9wcyk7XG5cbiAgICAgIGVsZW1lbnQgPSByZWFjdENsYXNzRWxlbWVudDsgIC8vL1xuXG4gICAgICBjb25zdCB7IG1peGlucyB9ID0gcmVhY3RDbGFzcztcblxuICAgICAgYXNzaWduTWl4aW5zKG1peGlucywgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgUmVhY3RDb21wb25lbnQpKSB7XG4gICAgICBjb25zdCBSZWFjdENvbXBvbmVudFN1YkNsYXNzID0gZmlyc3RBcmd1bWVudCwgIC8vL1xuICAgICAgICAgICAgcmVhY3RDb21wb25lbnQgPSBuZXcgUmVhY3RDb21wb25lbnRTdWJDbGFzcyhwcm9wcyk7XG4gICAgICAgICAgICAvLyByZWFjdENvbXBvbmVudEVsZW1lbnQgPSBuZXcgUmVhY3RDb21wb25lbnRFbGVtZW50KHJlYWN0Q29tcG9uZW50LCBwcm9wcyk7Ki9cblxuICAgICAgLy8gZWxlbWVudCA9IHJlYWN0Q29tcG9uZW50RWxlbWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gcmVhY3RDb21wb25lbnQ7IC8vL1xuXG4gICAgICBhc3NpZ25SZWFjdENvbXBvbmVudE1peGlucyhSZWFjdENvbXBvbmVudFN1YkNsYXNzLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBGVU5DVElPTikge1xuICAgICAgY29uc3QgcmVhY3RGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQsICAvLy9cbiAgICAgICAgICAgIHJlYWN0RnVuY3Rpb25FbGVtZW50ID0gbmV3IFJlYWN0RnVuY3Rpb25FbGVtZW50KHJlYWN0RnVuY3Rpb24sIHByb3BzKTtcblxuICAgICAgZWxlbWVudCA9IHJlYWN0RnVuY3Rpb25FbGVtZW50OyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gUmVhY3RDb21wb25lbnQsIC8vL1xuICAgICAgUmVhY3QgPSB7XG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgY3JlYXRlQ2xhc3MsXG4gICAgICAgIGNyZWF0ZUVsZW1lbnRcbiAgICAgIH07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBjaGlsZHJlbkZyb21SZW1haW5pbmdBcmd1bWVudHMocmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIHJlbWFpbmluZ0FyZ3VtZW50cyA9IGZsYXR0ZW4ocmVtYWluaW5nQXJndW1lbnRzKTsgLy8vXG5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXTtcblxuICByZW1haW5pbmdBcmd1bWVudHMuZm9yRWFjaCgoY2hpbGRBcmd1bWVudCkgPT4ge1xuICAgIGxldCBjaGlsZDtcblxuICAgIGlmIChjaGlsZEFyZ3VtZW50KSB7ICAvLy9cbiAgICAgIGlmIChpc1N1YmNsYXNzT2YoY2hpbGRBcmd1bWVudC5jb25zdHJ1Y3RvciwgRWxlbWVudCkpIHsgLy8vXG4gICAgICAgIGNoaWxkID0gY2hpbGRBcmd1bWVudDsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNoaWxkQXJndW1lbnQsIC8vL1xuICAgICAgICAgICAgICB2aXJ0dWFsRE9NVGV4dEVsZW1lbnQgPSBuZXcgVmlydHVhbERPTVRleHRFbGVtZW50KHRleHQpO1xuXG4gICAgICAgIGNoaWxkID0gdmlydHVhbERPTVRleHRFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gYXNzaWduUmVhY3RDb21wb25lbnRNaXhpbnMoUmVhY3RDb21wb25lbnRTdWJDbGFzcywgZWxlbWVudCkge1xuICBjb25zdCB7IG1peGlucyB9ID0gUmVhY3RDb21wb25lbnRTdWJDbGFzcztcblxuICBjb25zdCBSZWFjdENvbXBvbmVudFN1YkNsYXNzUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKFJlYWN0Q29tcG9uZW50U3ViQ2xhc3MpOyAvLy9cblxuICBpZiAoUmVhY3RDb21wb25lbnRTdWJDbGFzc1Byb3RvdHlwZSAhPT0gUmVhY3RDb21wb25lbnQpIHtcbiAgICBSZWFjdENvbXBvbmVudFN1YkNsYXNzID0gUmVhY3RDb21wb25lbnRTdWJDbGFzc1Byb3RvdHlwZTsgLy8vXG5cbiAgICBhc3NpZ25SZWFjdENvbXBvbmVudE1peGlucyhSZWFjdENvbXBvbmVudFN1YkNsYXNzLCBlbGVtZW50KTtcbiAgfVxuXG4gIGFzc2lnbk1peGlucyhtaXhpbnMsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25NaXhpbnMobWl4aW5zLCBlbGVtZW50KSB7XG4gIGlmIChtaXhpbnMpIHtcbiAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gbWl4aW47XG5cbiAgICAgIGVsZW1lbnRbbmFtZV0gPSBtaXhpbi5iaW5kKGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgLy8vXG4gICAgc3ViY2xhc3MgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGFyZ3VtZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFyZ3VtZW50KTsgLy8vXG5cbiAgICBpZiAoYXJndW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHN1YmNsYXNzID0gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YmNsYXNzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlydHVhbERPTU5vZGUgZnJvbSBcIi4vZWxlbWVudC92aXJ0dWFsRE9NTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdERPTSB7XG4gIHN0YXRpYyByZW5kZXIoZWxlbWVudCwgcGFyZW50RE9NRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudCA9IFZpcnR1YWxET01Ob2RlLmZyb21ET01FbGVtZW50KHBhcmVudERPTUVsZW1lbnQpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IG51bGwsXG4gICAgICAgICAgY29udGV4dCA9IHt9O1xuXG4gICAgZWxlbWVudC5tb3VudChwYXJlbnQsIHJlZmVyZW5jZSwgY29udGV4dCk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFjdERPTSB9IGZyb20gXCIuL3JlYWN0RE9NXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjggPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBDVFJMX0MgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUID0gXCJhY2NlcHRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRSA9IFwiY29udGVudC10eXBlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRVRYX0NIQVJBQ1RFUiA9IFwiXFx1MDAwM1wiO1xuZXhwb3J0IGNvbnN0IENPTE9OX0NIQVJBQ1RFUiA9IFwiOlwiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMSU5FX0ZFRURfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIgPSBcIlxcclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IG93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSxcbiAgICAgICAgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb3ZlcndyaXR0ZW4gPSBvd25Qcm9wZXJ0eU5hbWVzLnNvbWUoKG93blByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9IG93blByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgaGVhZGVyc1tvd25Qcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgaWYgKCFvdmVyd3JpdHRlbikge1xuICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBvd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksXG4gICAgICAgIGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXMgPSBvd25Qcm9wZXJ0eU5hbWVzLm1hcCgob3duUHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lID0gb3duUHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgbG93ZXJDYXNlT3duUHJvcGVydHlOYW1lc0luY2x1ZGVzTG93ZXJjYXNlTmFtZSA9IGxvd2VyQ2FzZU93blByb3BlcnR5TmFtZXMuaW5jbHVkZXMobG93ZXJjYXNlTmFtZSk7XG5cbiAgaWYgKCFsb3dlckNhc2VPd25Qcm9wZXJ0eU5hbWVzSW5jbHVkZXNMb3dlcmNhc2VOYW1lKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQUNDRVBULCBDT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IHVuZGVyd3JpdGUsIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2h0dHBcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHQoaGVhZGVycywgYWNjZXB0KTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9zdChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gY29udGVudDtcbiAgICBjb250ZW50ID0gaGVhZGVycztcbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBQT1NUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEU7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdChoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHVuZGVyd3JpdGVDb250ZW50VHlwZShoZWFkZXJzLCBjb250ZW50VHlwZSk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBjb25zdCB1cmwgPSB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpLFxuICAgICAgICBhY2NlcHQgPSBoZWFkZXJzW0FDQ0VQVF0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVCwgYWNjZXB0KTtcbiAgfVxuXG4gIGlmIChjb250ZW50VHlwZSAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQ09OVEVOVF9UWVBFLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0KGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBULCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEUsICAvLy9cbiAgICAgICAgdmFsdWUgPSBjb250ZW50VFlwZTsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVID0gXCJ1XCI7XG5leHBvcnQgY29uc3QgU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBORVdfTElORSA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgTEVTU19USEFOID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgQU1QRVJTQU5EID0gXCImYW1wO1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0gXCImZ3Q7XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBMRVNTX1RIQU4sIEFNUEVSU0FORCwgR1JFQVRFUl9USEFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XHJcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mLywgQU1QRVJTQU5EKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi8sIEdSRUFURVJfVEhBTik7XHJcblxyXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVUeXBlID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgbmFtZVR5cGUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBjb21tZW50VHlwZSA9IFwiY29tbWVudFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVR5cGUgPSBcImVuZC1vZi1saW5lXCI7XG5leHBvcnQgY29uc3Qgd2hpdGVzcGFjZVR5cGUgPSBcIndoaXRlc3BhY2VcIjtcbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsVHlwZSA9IFwic3RyaW5nLWxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBicm9rZW5Db21tZW50VHlwZSA9IFwiYnJva2VuLWMwbW1lbnRcIjsgIC8vL1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSA9IFwicmVndWxhci1leHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgYnJva2VuU3RyaW5nTGl0ZXJhbFR5cGUgPSBcImJyb2tlbi1zdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBlbmQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYHN0YXJ0LW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgbWlkZGxlLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGVUeXBlLFxuICBuYW1lVHlwZSxcbiAgY29tbWVudFR5cGUsXG4gIGVuZE9mTGluZVR5cGUsXG4gIHdoaXRlc3BhY2VUeXBlLFxuICBzdHJpbmdMaXRlcmFsVHlwZSxcbiAgYnJva2VuQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgYnJva2VuU3RyaW5nTGl0ZXJhbFR5cGUsXG4gIHNpbmdsZUxpbmVDb21tZW50VHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgc2FuaXRpc2VDb250ZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0SW5uZXJIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLmlubmVySFRNTDtcbiAgfVxuXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUgPT09IGVuZE9mTGluZVR5cGUpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNFcXVhbFRvKHRva2VuKSB7XG4gICAgY29uc3QgZXF1YWxUb1Rva2VuID0gKHRoaXMgPT09IHRva2VuKTtcblxuICAgIHJldHVybiBlcXVhbFRvVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAgLy8vXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7dGhpcy5pbm5lckhUTUx9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPT0gZW5kUG9zaXRpb24pIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7ICAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudDsgLy8vXG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247ICAvLy9cbiAgICAgIHN0YXJ0UG9zaXRpb24gPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IGNvbnRlbnQ7IC8vL1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuICBcbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShjb250ZW50LCB0aGlzLnR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIGFzRW50cnkoKSB7XG4gICAgY29uc3QgZW50cnkgPSB7fSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBgJHt0aGlzLnJlZ3VsYXJFeHByZXNzaW9ufWA7XG5cbiAgICBlbnRyeVt0aGlzLnR5cGVdID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuO1xuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub2tlbihUb2tlbikge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVndWxhckV4cHJlc3Npb24gfSA9IFRva2VuLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW50cnkoZW50cnkpIHtcbiAgICBjb25zdCBlbnRyeUtleXMgPSBPYmplY3Qua2V5cyhlbnRyeSksXG4gICAgICAgICAgZmlyc3RFbnRyeUtleSA9IGZpcnN0KGVudHJ5S2V5cyksXG4gICAgICAgICAgdHlwZSA9IGZpcnN0RW50cnlLZXksIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGVudHJ5W3R5cGVdLFxuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybik7XG4gICAgICAgIFxuICAgIHJldHVybiBydWxlOyBcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgICBjb25zdCB1bmljb2RlID0gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgZmxhZ3MgPSB1bmljb2RlID9cbiAgICAgICAgICAgICAgICAgICAgVSA6XG4gICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLCBmbGFncyksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSByZWdFeHAsIC8vL1xuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gIGNvbnN0IHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiA9IC91ey8sIC8vL1xuICAgICAgICBpbmRleCA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybi5zZWFyY2godW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgdW5pY29kZSA9IChpbmRleCAhPT0gLTEpO1xuXG4gIHJldHVybiB1bmljb2RlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdXMgPSBcIitcIjtcclxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSBcIlx1MDNCNVwiO1xyXG5leHBvcnQgY29uc3Qgd2lsZGNhcmQgPSBcIi5cIjtcclxuZXhwb3J0IGNvbnN0IGFzdGVyaXNrID0gXCIqXCI7XHJcbmV4cG9ydCBjb25zdCBzZXBhcmF0b3IgPSBcIjo6PVwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gXCIhXCI7XHJcbmV4cG9ydCBjb25zdCBOT19XSElURVNQQUNFID0gXCI8Tk9fV0hJVEVTUEFDRT5cIjtcclxuZXhwb3J0IGNvbnN0IEVORF9PRl9MSU5FID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgcGx1cyxcclxuICBlcHNpbG9uLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86Ojo9fFxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwhfFxcXFwqfFxcXFwrfFxcXFwufFx1MDNCNXw7fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInR5cGVcIjogXCJeXFxcXFtbXlxcXFxdXStcXFxcXVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyB3aGl0ZXNwYWNlVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZXNwYWNlVG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2hpdGVzcGFjZVRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGJyb2tlbkNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb2tlbkNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQnJva2VuQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IGJyb2tlbkNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChCcm9rZW5Db21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQnJva2VuQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKD86XFxcXC58W15cXC9dKSpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcLy4qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBORVdfTElORSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCkge1xuICAgIHN1cGVyKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IE5FV19MSU5FO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHRoaXMuaW5kZXgpOyB9XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgZW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IC9cXHJcXG58XFxyfFxcbi8sXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gZW5kT2ZMaW5lVHlwZSwgLy8vXG4gICAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgICAgICBzaWduaWZpY2FudCA9IGZhbHNlLFxuICAgICAgICAgICAgICB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICAgIGVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gPSBuZXcgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwqLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzouKz8oPz1cXCpcXC8pfC4rJCkvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmltcG9ydCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXC58W14nXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2x5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goU2luZ2x5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFNpbmdseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IGJyb2tlblN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKERvdWJseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChEb3VibHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuSW5Db21tZW50UHJlc2VydmluZ1Rva2VuKHRva2VuKSB7XG4gIGxldCB0b2tlbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gPSBmYWxzZTtcblxuICBjb25zdCB0b2tlbkNvbW1lbnRUb2tlbiA9IHRva2VuLmlzQ29tbWVudFRva2VuKCk7XG5cbiAgaWYgKHRva2VuQ29tbWVudFRva2VuKSB7XG4gICAgY29uc3QgY29tbWVudFRva2VuID0gdG9rZW4sIC8vL1xuICAgICAgICAgIGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBjb21tZW50VG9rZW4uaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCk7XG5cbiAgICB0b2tlbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9rZW5Db21tZW50UHJlc2VydmluZ1Rva2VuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi9ydWxlXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBCcm9rZW5Db21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9icm9rZW5Db21tZW50XCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcclxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XHJcbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZEJyb2tlblN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50L2Jyb2tlblN0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9icm9rZW5TdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuaW1wb3J0IHsgU1RSSU5HLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGlzVG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nVG9rZW4gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Rva2VuXCI7XHJcblxyXG5jb25zdCB7IHNwbGljZSB9ID0gYXJyYXlVdGlsaXRpZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25MZXhlciB7XHJcbiAgY29uc3RydWN0b3IocnVsZXMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICB9XHJcbiAgXHJcbiAgZ2V0UnVsZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlcztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMgPSB0aGlzLnRva2VuaXNlRW5kT2ZMaW5lcyhjb250ZW50KSxcclxuICAgICAgICAgIHRva2Vuc09yQ29udGVudHMgPSBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzOyAvLy9cclxuXHJcbiAgICB0aGlzLnRva2VuaXNlQ29udGVudHModG9rZW5zT3JDb250ZW50cyk7XHJcblxyXG4gICAgY29uc3QgdG9rZW5zID0gdG9rZW5zT3JDb250ZW50czsgIC8vL1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZUVuZE9mTGluZXMoY29udGVudCwgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuKSB7XHJcbiAgICBjb25zdCBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzID0gW107XHJcblxyXG4gICAgbGV0IGVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lVG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgd2hpbGUgKGVuZE9mTGluZVRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGVuZE9mTGluZVRva2VuSW5kZXggPSBlbmRPZkxpbmVUb2tlbi5nZXRJbmRleCgpLFxyXG4gICAgICAgICAgICBlbmRPZkxpbmVUb2tlbkNvbnRlbnRMZW5ndGggPSBlbmRPZkxpbmVUb2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIGxlZnQgPSBlbmRPZkxpbmVUb2tlbkluZGV4LCAvLy9cclxuICAgICAgICAgICAgcmlnaHQgPSBlbmRPZkxpbmVUb2tlbkluZGV4ICsgZW5kT2ZMaW5lVG9rZW5Db250ZW50TGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGxlZnQpLFxyXG4gICAgICAgICAgICByaWdodENvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhyaWdodCk7XHJcblxyXG4gICAgICBjb250ZW50ID0gbGVmdENvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMucHVzaChjb250ZW50KTtcclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2Vuc09yQ29udGVudHMucHVzaChlbmRPZkxpbmVUb2tlbik7XHJcblxyXG4gICAgICBjb250ZW50ID0gcmlnaHRDb250ZW50OyAvLy9cclxuXHJcbiAgICAgIGVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lVG9rZW4ubWF0Y2goY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5kT2ZMaW5lVG9rZW5zT3JDb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBlbmRPZkxpbmVUb2tlbnNPckNvbnRlbnRzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VDb250ZW50cyh0b2tlbnNPckNvbnRlbnRzKSB7XHJcbiAgICBsZXQgaW5Db21tZW50ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGluZGV4ID0gMCxcclxuICAgICAgICB0b2tlbnNPckNvbnRlbnRzTGVuZ3RoID0gdG9rZW5zT3JDb250ZW50cy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdG9rZW5zT3JDb250ZW50c0xlbmd0aCkge1xyXG4gICAgICBjb25zdCB0b2tlbk9yQ29udGVudCA9IHRva2Vuc09yQ29udGVudHNbaW5kZXhdLFxyXG4gICAgICAgICAgICB0b2tlbk9yQ29udGVudFN0cmluZyA9ICh0eXBlb2YgdG9rZW5PckNvbnRlbnQgPT09IFNUUklORyksXHJcbiAgICAgICAgICAgIHRva2VuT3JDb250ZW50Q29udGVudCA9IHRva2VuT3JDb250ZW50U3RyaW5nOyAvLy9cclxuXHJcbiAgICAgIGlmICh0b2tlbk9yQ29udGVudENvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCB0b2tlbnMgPSBbXSxcclxuICAgICAgICAgICAgICBjb250ZW50ID0gdG9rZW5PckNvbnRlbnQ7IC8vL1xyXG5cclxuICAgICAgICBpbkNvbW1lbnQgPSB0aGlzLnRva2VuaXNlQ29udGVudChjb250ZW50LCB0b2tlbnMsIGluQ29tbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xyXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgc3BsaWNlKHRva2Vuc09yQ29udGVudHMsIHN0YXJ0LCBkZWxldGVDb3VudCwgdG9rZW5zKTtcclxuXHJcbiAgICAgICAgdG9rZW5zT3JDb250ZW50c0xlbmd0aCArPSB0b2tlbnNMZW5ndGggLSAxO1xyXG5cclxuICAgICAgICBpbmRleCArPSB0b2tlbnNMZW5ndGggLSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2VDb250ZW50KGNvbnRlbnQsIHRva2VucywgaW5Db21tZW50KSB7XHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IHRoaXMubWF0Y2hNdWx0aUxpbmVDb21tZW50SW5Db21tZW50KGNvbnRlbnQsIGluQ29tbWVudClcclxuICAgICAgICAgICAgICAgfHwgdGhpcy5tYXRjaFdoaXRlc3BhY2UoY29udGVudClcclxuICAgICAgICAgICAgICAgfHwgdGhpcy5tYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoU2luZ2xlTGluZUNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpXHJcbiAgICAgICAgICAgICAgIHx8IHRoaXMubWF0Y2hSZWd1bGFyRXhwcmVzc2lvbihjb250ZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KVxyXG4gICAgICAgICAgICAgICB8fCB0aGlzLm1hdGNoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KTtcclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5ydWxlcy5zb21lKChydWxlKSA9PiB7XHJcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gcnVsZS5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRlbnQgJyR7Y29udGVudH0nIGNhbm5vdCBiZSB0b2tlbmlzZWQuYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBpc1Rva2VuSW5Db21tZW50UHJlc2VydmluZ1Rva2VuKHRva2VuKSxcclxuICAgICAgICAgICAgdG9rZW5Db250ZW50TGVuZ3RoID0gdG9rZW4uZ2V0Q29udGVudExlbmd0aCgpLFxyXG4gICAgICAgICAgICBzdGFydCA9IHRva2VuQ29udGVudExlbmd0aDsgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQpO1xyXG5cclxuICAgICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgLy8vXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluQ29tbWVudDtcclxuICB9XHJcblxyXG4gIG1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHtcclxuICAgIGNvbnN0IGJyb2tlbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyb2tlbkNvbW1lbnRUb2tlbi5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICByZXR1cm4gYnJva2VuQ29tbWVudFRva2VuO1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hTaW5nbGVMaW5lQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHtcclxuICAgIGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnRJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgfHwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbXVsdGlMaW5Db21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBtdWx0aUxpbkNvbW1lbnRUb2tlbjtcclxuICB9XHJcblxyXG4gIG1hdGNoV2hpdGVzcGFjZShjb250ZW50KSB7IHJldHVybiBXaGl0ZXNwYWNlVG9rZW4ubWF0Y2goY29udGVudCk7IH1cclxuXHJcbiAgbWF0Y2hSZWd1bGFyRXhwcmVzc2lvbihjb250ZW50KSB7IHJldHVybiBSZWd1bGFyRXhwcmVzc2lvblRva2VuLm1hdGNoKGNvbnRlbnQpOyB9XHJcblxyXG4gIG1hdGNoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KSB7IHJldHVybiBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goY29udGVudCkgfHwgU2luZ2x5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKGNvbnRlbnQpOyB9XHJcblxyXG4gIG1hdGNoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbChjb250ZW50KSB7IHJldHVybiBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goY29udGVudCkgfHwgRG91Ymx5UXVvdGVkQnJva2VuU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKGNvbnRlbnQpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhDbGFzcywgZW50cmllcykge1xyXG4gICAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KSksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBtYXRjaEJyb2tlbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gIG1hdGNoU2luZ2xlTGluZUNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gIG1hdGNoTXVsdGlMaW5lQ29tbWVudEluQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hNdWx0aUxpbmVDb21tZW50Tm90SW5Db21tZW50KGNvbnRlbnQsIGluQ29tbWVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3xcXFxcLXxcXFxcKnxcXFxcLylcIlxyXG4gIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIG1hdGNoUmVndWxhckV4cHJlc3Npb24oY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBtYXRjaERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWwoY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCYXNpY0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBORVdfTElORSB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCkge1xuICAgIHN1cGVyKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IE5FV19MSU5FO1xuICAgIFxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0aGlzLmluZGV4KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSAvXFxyXFxufFxccnxcXG4vLFxuICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGVuZE9mTGluZVR5cGUsIC8vL1xuICAgICAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgICAgICB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICAgIGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gPSBuZXcgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vY29tbW9uL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi9jb21tb24vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9ibmYvc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7IC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL2NvbW1vbi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7ICAvLy9cblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiOyAgLy8vXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvYnJva2VuU3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjsgIC8vL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRCcm9rZW5TdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc2lnbmlmaWNhbnQvYnJva2VuU3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjsgIC8vL1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKVxcXFwlXCIgfSxcclxuXHJcbiAgeyBcImZyZXF1ZW5jeVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86aHp8a2h6KVwiIH0sXHJcblxyXG4gIHsgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiIH0sXHJcblxyXG4gIHsgXCJsZW5ndGhcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnB4fGNtfG1tfGlufHB0fHBjKVwiIH0sXHJcblxyXG4gIHsgXCJhbmdsZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86ZGVnfHJhZHxncmFkKVwiIH0sXHJcblxyXG4gIHsgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiIH0sXHJcblxyXG4gIHsgXCJyZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylyZW1cIiB9LFxyXG5cclxuICB7IFwiZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKyllbVwiIH0sXHJcblxyXG4gIHsgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCIgfSxcclxuXHJcbiAgeyBcInNwZWNpYWxcIjogXCJeO3w6Onw6fFxcXFwufCx8L3xcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcIm9wZXJhdG9yXCI6IFwiXl4oPzphbmR8bm90fG9ubHkpJFwiIH0sXHJcblxyXG4gIHsgXCJpZGVudGlmaWVyXCI6IFwiXltfYS16QS1aMC05LV0rXCIgfSxcclxuXHJcbiAgeyBcInVuYXJ5LW9wZXJhdG9yXCI6IFwiXlxcXFwrfFxcXFwtXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbixcclxuICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbmlzZUVuZE9mTGluZXMoY29udGVudCkgeyByZXR1cm4gc3VwZXIudG9rZW5pc2VFbmRPZkxpbmVzKGNvbnRlbnQsIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4pOyB9XHJcblxyXG4gIG1hdGNoQnJva2VuQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgbWF0Y2hTaW5nbGVMaW5lQ29tbWVudChjb250ZW50LCBpbkNvbW1lbnQpIHtcclxuICAgIGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnRJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgfHwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goY29udGVudCkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbXVsdGlMaW5Db21tZW50VG9rZW47XHJcbiAgfVxyXG5cclxuICBtYXRjaE11bHRpTGluZUNvbW1lbnROb3RJbkNvbW1lbnQoY29udGVudCwgaW5Db21tZW50KSB7XHJcbiAgICBjb25zdCBtdWx0aUxpbkNvbW1lbnRUb2tlbiA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiBtdWx0aUxpbkNvbW1lbnRUb2tlbjtcclxuICB9XHJcblxyXG4gIG1hdGNoUmVndWxhckV4cHJlc3Npb24oY29udGVudCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBcIjo6PVwiIGRlZmluaXRpb25zIFwiO1wiIDtcblxuICAgICAgbmFtZSAgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgZGVmaW5pdGlvbnMgICAgICAgICAgIDo6PSAgZGVmaW5pdGlvbiAoIFwifFwiIGRlZmluaXRpb24gKSogO1xuXG4gICAgICBkZWZpbml0aW9uICAgICAgICAgICAgOjo9ICBwYXJ0KyA7XG5cbiAgICAgIHBhcnQgICAgICAgICAgICAgICAgICA6Oj0gIG5vblRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbm9XaGl0ZXNwYWNlUGFydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG5vblRlcm1pbmFsUGFydCAgICAgICA6Oj0gIGNob2ljZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgc2VxdWVuY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJ1bGVOYW1lIGxvb2tBaGVhZE1vZGlmaWVyP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIHRlcm1pbmFsUGFydCAgICAgICAgICA6Oj0gIHNpZ25pZmljYW50VG9rZW5UeXBlXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFN5bWJvbFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICBub1doaXRlc3BhY2VQYXJ0ICAgICAgOjo9ICBcIjxOT19XSElURVNQQUNFPlwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgY2hvaWNlT2ZQYXJ0cyAgICAgICAgIDo6PSAgXCIoXCIgcGFydCAoIFwifFwiIHBhcnQgKSsgXCIpXCIgO1xuXG4gICAgICBzZXF1ZW5jZU9mUGFydHMgICAgICAgOjo9ICBcIihcIiBwYXJ0IHBhcnQrIFwiKVwiIDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICB0ZXJtaW5hbFN5bWJvbCAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuXG4gICAgICBlcHNpbG9uICAgICAgICAgICAgICAgOjo9ICBcIlx1MDNCNVwiIDsgXG5cbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHplcm9Pck1vcmVRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiIVwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEJBUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0ggPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBORVdfTElORSA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTSU5HTEVfU1BBQ0UgPSBcIiBcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HLCBTSU5HTEVfU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU0lOR0xFX1NQQUNFO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKG9sZERlZmluaXRpb24sIG5ld0RlZmluaXRpb24pIHtcbiAgICBjb25zdCBvbGREZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2Yob2xkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAob2xkRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb2xkRGVmaW5pdGlvbkluZGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBuZXdEZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHJ1bGVOb2RlID0gbnVsbDtcblxuICAgIGNvbnRleHQuaW5jcmVhc2VEZXB0aCgpO1xuXG4gICAgY29uc3QgdG9vRGVlcCA9IGNvbnRleHQuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgICBjaGlsZE5vZGVzID0gZGVmaW5pdGlvbk5vZGVzLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSB0aGlzLk5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgICAgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVjcmVhc2VEZXB0aCgpO1xuXG4gICAgcmV0dXJuIHJ1bGVOb2RlO1xuICB9XG5cbiAgcGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBkZWZpbml0aW9uLnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgcnVsZSA9IG5ldyBDbGFzcyhuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgbGFzdCwgcHVzaCwgZmlsdGVyLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbihhcnJheSkgeyByZXR1cm4gYXJyYXkuZmlsdGVyKChlbnRyeSwgaW5kZXgpID0+IGlzRXZlbihpbmRleCkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmltcG9ydCB7IE5FV19MSU5FLCBFTVBUWV9TVFJJTkcsIFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORTtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU0lOR0xFX1NQQUNFO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEJBUiwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFtudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbl0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBQYXJzZVRyZWU7ICAvLy9cbiAgICB9XG4gICAgXG4gICAgY29uc3QgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgYXJncyA9IFtudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbl0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5lc0Zyb21EZXB0aChkZXB0aCkge1xuICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZGVwdGgpIHtcbiAgICBsaW5lc1tpbmRleCsrXSA9IEVNUFRZX1NUUklORztcbiAgfVxuXG4gIHJldHVybiBsaW5lcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgdG9rZW5JbmRleGVzID0gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cnVsZU5hbWV9JHt0b2tlbkluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0tJHtsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgO1xuXG4gIHJldHVybiB0b2tlbkluZGV4ZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBEQVNILCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSCksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucykge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZVBhcnNlVHJlZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGZpcnN0KGNoaWxkTm9kZVBhcnNlVHJlZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSAwO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gTWF0aC5tYXgoY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCAtIHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoO1xuXG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2hpbGROb2Rlc1BhcnNlVHJlZSwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZS5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICBjb25zdCBib3R0b21NYXJnaW5EZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCAtIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQoY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucyk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gY2hpbGQgbm9kZXMgYXQgcnVsZSAnJHtydWxlTmFtZX0nLmApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdW5kZWZpbmVkLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVzaCwgZmlyc3QsIGFsbEJ1dEZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldEZpcnN0UGFydCgpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBmaXJzdFBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0c0xlbmd0aCgpIHtcbiAgICBjb25zdCBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHBhcnRzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsQnV0Rmlyc3RQYXJ0cygpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdFBhcnRzID0gYWxsQnV0Rmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gYWxsQnV0Rmlyc3RQYXJ0cztcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBpbmRleCwgY29udGV4dCwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7IC8vL1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSB0cnVlO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4KytdO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnRzLCBub2RlcywgaW5kZXgsIGNvbnRleHQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGNvbnN0IHBhcnRzTm9kZXMgPSBbXTtcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBjb250ZXh0LCBjYWxsYmFjaykpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KTtcblxuICAgIGlmIChwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICAgIHBhcnNlZCA9IHJ1bGVOYW1lUGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIGNvbnRleHQpKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnQge1xuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc0Vwc2lsb25QYXJ0KCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gZmFsc2U7XG4gICAgXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgY2xvbmUoUGFydCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgUGFydCguLi5yZW1haW5pbmdBcmd1bWVudHMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB1bmRlZmluZWQsIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYFske3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGV9XWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQobmFtZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IFBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IFJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IEVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgUnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBEb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IFdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgRW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IERlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IFF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IERlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3QgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgPSBcIm5vV2hpdGVzcGFjZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJsb29rQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBcInJlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9wdGlvbmFsUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwib25lT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcInplcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFwic2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5hbWVOb2RlIGZyb20gXCIuLi9ub2RlL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOYW1lTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBjbG9uZShQYXJ0LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBQYXJ0KC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICBwYXJzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IHF1ZXN0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE9wdGlvbmFsUGFydFBhcnQsIHRoaXMucGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG4gIFxuICBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZShQYXJ0KSB7IHJldHVybiBzdXBlci5jbG9uZShQYXJ0LCB0aGlzLnBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9uZU9yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBwYXJzZVBhcnQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnQucGFyc2UocGFydHNOb2RlcywgY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cblxuICAgICAgcGFyc2VQYXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFydC5wYXJzZShwYXJ0c05vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoY291bnQgIT09IDApO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IHBsdXMsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBzdXBlci5hc1N0cmluZyhvcGVyYXRvclN0cmluZyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShPbmVPck1vcmVQYXJ0c1BhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVBhcnRzUGFydCBleHRlbmRzIENvbGxlY3Rpb25PZlBhcnRzUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gWmVyb09yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpO1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBjb25zdCBwYXJzZVBhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBhc3RlcmlzaywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFplcm9Pck1vcmVQYXJ0c1BhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgUXVhbnRpZmllclJ1bGVOYW1lLCBSdWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL2JuZi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIGxvb2tBaGVhZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgdHlwZSA9IFJ1bGVOYW1lUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG5cbiAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgfVxuICBcbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBpc0xvb2tBaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb29rQWhlYWQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIHNldExvb2tBaGVhZChsb29rQWhlYWQpIHtcbiAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgfVxuXG4gIGZpbmRSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlTWFwID0gY29udGV4dC5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZmluZFJ1bGUoY29udGV4dCk7XG5cbiAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bGVOb2RlID0gcnVsZS5wYXJzZShjb250ZXh0LCBjYWxsYmFjayk7XG5cbiAgICAgIHBhcnNlZCA9IChydWxlTm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2xhbWF0aW9uTWFyayA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7bG9va0FoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShSdWxlTmFtZVBhcnQsIHRoaXMucnVsZU5hbWUsIHRoaXMubG9va0FoZWFkKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBUZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWxcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUsIE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHRoaXJkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZU5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zTm9kZSA9IHRoaXJkQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc05vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBzdXBlcigpO1xuICAgIFxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoVGVybWluYWxTeW1ib2xQYXJ0LCB0aGlzLmNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBOYW1lUnVsZU5hbWUsIERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc2VwYXJhdG9yLCB0ZXJtaW5hdG9yIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gc2VwYXJhdG9yLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB0ZXJtaW5hdG9yLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZSA9IE5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChuYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOb2RlIGZyb20gXCIuLi9ub2RlL3J1bGVcIjtcbmltcG9ydCBSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBuZXcgUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVycm9yTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IGNvbnRleHQuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdpbGRjYXJkUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yTm9kZSBmcm9tIFwiLi4vbm9kZS9lcnJvclwiO1xuaW1wb3J0IEVycm9yRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9lcnJvclwiO1xuXG5pbXBvcnQgeyBFcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBFcnJvclJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXJyb3JEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRXJyb3JOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVwc2lsb25Ob2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IEVwc2lsb25Ob2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZXBzaWxvbk5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGwsXG4gICAgICAgICAgZXBzaWxvbk5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oRXBzaWxvbk5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRXBzaWxvbk5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBFcHNpbG9uTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25Ob2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbk5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGlzRXBzaWxvblBhcnQoKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbjsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFcHNpbG9uUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gbmV3IEVwc2lsb25QYXJ0KCk7XG5cbiAgICByZXR1cm4gZXBzaWxvblBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRXBzaWxvbk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25Ob2RlIGZyb20gXCIuLi9ub2RlL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgRXBzaWxvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50ID0gZXBzaWxvbixcbiAgICAgICAgICBlcHNpbG9uVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gRXBzaWxvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVwc2lsb25Ob2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9ERVBUSCA9IDk5O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX01BWElNVU1fREVQVEggfSBmcm9tIFwiLi4vZGVmYXVsdHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVNYXAsIHRva2VucywgaW5kZXgsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuICBnZXREZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXB0aDtcbiAgfVxuXG5cdGdldE1heGltdW1EZXB0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzVG9vRGVlcCgpIHtcbiAgICBjb25zdCB0b29EZWVwID0gKHRoaXMuZGVwdGggPiB0aGlzLm1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gdG9vRGVlcDtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgaW5jcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoKys7XG4gIH1cblxuICBkZWNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgtLTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0ZGVwdGggPSAwLFxuXHRcdFx0XHRcdG1heGltdW1EZXB0aCA9IERFRkFVTFRfTUFYSU1VTV9ERVBUSCxcblx0XHRcdFx0XHRjb250ZXh0ID0gbmV3IENvbnRleHQocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IENvbnRleHQuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKFBhcnNlciwgcnVsZXMpIHtcbiAgICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgICAgc3RhcnRSdWxlID0gZmlyc3RSdWxlLCAgLy8vXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVzLnJlZHVjZSgocnVsZU1hcCwgcnVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU1hcDtcbiAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgcGFyc2VyID0gbmV3IFBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb21cIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChydWxlTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gY2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lUnVsZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBSdWxlUnVsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTm9kZSA9IHJ1bGVOYW1lUnVsZVJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICAgICAgcnVsZU5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTm9kZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZU5vZGVzLm1hcCgocnVsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEb2N1bWVudE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IGV2ZW4sIGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG4gICAgXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG4gIFxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICB0aGlzLnBhcnRzLnNvbWUoKHBhcnQpID0+IHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSB8ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKENob2ljZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG5cbiAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAgLy8vXG4gICAgXG4gICAgY29uc3QgZXZlbk5vZGVzID0gZXZlbihub2Rlcyk7XG5cbiAgICBub2RlcyA9IGV2ZW5Ob2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChwYXJ0cyk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSwgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnROb2RlIGZyb20gXCIuLi9ub2RlL2RvY3VtZW50XCI7XG5pbXBvcnQgRG9jdW1lbnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RvY3VtZW50XCI7XG5cbmltcG9ydCB7IERvY3VtZW50UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb24gPSBuZXcgRG9jdW1lbnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IERvY3VtZW50UnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEb2N1bWVudE5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vY29tbW9uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZU5hbWVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZU5vZGUgZnJvbSBcIi4uL25vZGUvcnVsZU5hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IFJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBSdWxlTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb24gIC8vL1xuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJ1bGVOYW1lTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gbmV3IFdpbGRjYXJkUGFydCgpO1xuXG4gICAgcmV0dXJuIHdpbGRjYXJkUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhXaWxkY2FyZE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZE5vZGUgZnJvbSBcIi4uL25vZGUvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHdpbGRjYXJkLFxuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFdpbGRjYXJkTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVuZE9mTGluZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2VuZE9mTGluZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVuZE9mTGluZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gY29udGV4dC5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBjb250ZXh0LmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4gPSBzaWduaWZpY2FudFRva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBlbmRPZkxpbmVOb2RlID0gRW5kT2ZMaW5lTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoZW5kT2ZMaW5lTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVuZE9mTGluZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vbm9kZS9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgRW5kT2ZMaW5lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gRW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFbmRPZkxpbmVOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcGFydE5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnROb2Rlcy5tYXAoKHBhcnROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydE5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25Ob2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IERlZmluaXRpb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBldmVuIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc05vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBldmVuQ2hpbGROb2RlcyA9IGV2ZW4oY2hpbGROb2RlcyksICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uTm9kZXMgPSBldmVuQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uTm9kZXMubWFwKChkZWZpbml0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25Ob2RlLmdlbmVyYXRlRGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbnNOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBjb250ZXh0LmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgICAgIHBhcnRzTGVuZ3RoID0gdGhpcy5wYXJ0cy5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IHBhcnNlUGFydHMgPSAobm9kZXMsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGFydCA9IHRoaXMucGFydHNbaW5kZXgrK107XG5cbiAgICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnNlUGFydCA9IChwYXJ0LCBub2RlcywgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICBjb25zdCBwYXJ0c05vZGVzID0gW107XG5cbiAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2RlcywgY29udGV4dCwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0c05vZGVzLCBpbmRleCkpO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlZCA9IHBhcnNlUGFydHMocGFydHNOb2RlcywgaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2UocGFydHNOb2RlcywgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29udGV4dC5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICB9LCBudWxsKSxcbiAgICAgICAgICBzdHJpbmcgPSBgKCAke3BhcnRzU3RyaW5nfSApYDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIHRoaXMucGFydHMpOyB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cblxuICAgIGNvbnN0IGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHBhcnRzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25SdWxlTmFtZSA9IERlZmluaXRpb25SdWxlTmFtZSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGRlZmluaXRpb25SdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc05vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBEZWZpbml0aW9uc0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvbnNcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbnNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uc0RlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25zTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsUGFydE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydE5vZGUgZnJvbSBcIi4uL25vZGUvcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBUZXJtaW5hbFBhcnRSdWxlTmFtZSwgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSwgVGVybWluYWxTeW1ib2xSdWxlTmFtZSwgRW5kT2ZMaW5lUnVsZU5hbWUsIEVwc2lsb25SdWxlTmFtZSwgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lID0gRXBzaWxvblJ1bGVOYW1lLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lID0gRW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oZXBzaWxvblJ1bGVOYW1lKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24od2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFBhcnROb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IENob2ljZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDaG9pY2VPZlBhcnRzTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciwgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c05vZGUgZnJvbSBcIi4uL25vZGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IENob2ljZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IENob2ljZU9mUGFydHNOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIigoPzpcXFxcLnxbXlwiXFxcXF0pKilcIiQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgY29udGVudCA9IHNlY29uZE1hdGNoLnJlcGxhY2UoL1xcXFxcXFxcL2csIFwiXFxcXFwiKS5yZXBsYWNlKC9cXFxcXCIvZywgXCJcXFwiXCIpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxTeW1ib2xOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xOb2RlIGZyb20gXCIuLi9ub2RlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsU3ltYm9sTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9uVGVybWluYWxQYXJ0Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCkge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMucG9wKCk7XG5cbiAgICBsb29rQWhlYWQgPSB0cnVlO1xuXG4gICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuXG5pbXBvcnQgeyBSdWxlTmFtZVJ1bGVOYW1lLCBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWUgPSBSdWxlTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQobG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0Tm9kZSBmcm9tIFwiLi4vbm9kZS9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Tm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c05vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTZXF1ZW5jZU9mUGFydHNOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNOb2RlIGZyb20gXCIuLi9ub2RlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oTm9XaGl0ZXNwYWNlTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IGNvbnRleHQuaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKTtcblxuICAgIGlmICghbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKSB7XG4gICAgICBub1doaXRlc3BhY2VOb2RlID0gTm9XaGl0ZXNwYWNlTm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChub1doaXRlc3BhY2VOb2RlICE9PSBudWxsKVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChub1doaXRlc3BhY2VOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb250ZXh0LmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShOb1doaXRlc3BhY2VQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9XaGl0ZXNwYWNlUGFydE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IE5PX1dISVRFU1BBQ0UsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnROb2RlIGZyb20gXCIuLi9ub2RlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5cbmltcG9ydCB7IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBuZXcgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Tm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGV4Y2xhbWF0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZShub2RlcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IGNvbnRleHQuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gY29udGV4dC5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoZmlyc3RNYXRjaCA9PT0gY29udGVudCkge1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnRleHQuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSxcblx0XHQgICAgICBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShSZWd1bGFyRXhwcmVzc2lvblBhcnQsIHRoaXMucmVndWxhckV4cHJlc3Npb24pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblBhcnQocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgfVxuXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgcGF0dGVybiA9IHNlY29uZE1hdGNoLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAocGF0dGVybik7ICAvLy9cblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZWd1bGFyRXhwcmVzc2lvbk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSZWd1bGFyRXhwcmVzc2lvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRlcm1pbmFsU3ltYm9sQ29udGVudCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbFN5bWJvbENvbnRlbnQsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25Ob2RlIGZyb20gXCIuLi9ub2RlL2RlZmluaXRpb25cIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcXVlc3Rpb25NYXJrLCAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbk5vZGUgZnJvbSBcIi4uL25vZGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHBsdXMsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uTm9kZSBmcm9tIFwiLi4vbm9kZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25Ob2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL2NvbW1vbi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXFsoW15cXF1dKyldJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gdGhpcy5nZXRTaWduaWZpY2FudFRva2VuVHlwZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5UeXBlKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaWduaWZpY2FudFRva2VuVHlwZU5vZGU7XG5cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZU5vZGUgZnJvbSBcIi4uL25vZGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi9ydWxlXCI7XG5pbXBvcnQgTmFtZVJ1bGUgZnJvbSBcIi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4vcnVsZS9ydWxlXCI7XG5pbXBvcnQgRXJyb3JSdWxlIGZyb20gXCIuL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBFcHNpbG9uUnVsZSBmcm9tIFwiLi9ydWxlL2Vwc2lsb25cIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi9ydWxlL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRSdWxlIGZyb20gXCIuL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9xdWFudGlmaWVyXCI7XG5pbXBvcnQgRGVmaW5pdGlvblJ1bGUgZnJvbSBcIi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuL3J1bGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuL3J1bGUvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuL3J1bGUvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZSBmcm9tIFwiLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyXCI7XG5pbXBvcnQgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4vcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVSdWxlID0gbmV3IE5hbWVSdWxlKCksXG4gICAgICAgICAgcGFydFJ1bGUgPSBuZXcgUGFydFJ1bGUoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZSgpLFxuICAgICAgICAgIGVycm9yUnVsZSA9IG5ldyBFcnJvclJ1bGUoKSxcbiAgICAgICAgICBlcHNpbG9uUnVsZSA9IG5ldyBFcHNpbG9uUnVsZSgpLFxuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudFJ1bGUoKSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGUgPSBuZXcgUnVsZU5hbWVSdWxlKCksXG4gICAgICAgICAgd2lsZGNhcmRSdWxlID0gbmV3IFdpbGRjYXJkUnVsZSgpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBuZXcgRW5kT2ZMaW5lUnVsZSgpLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gbmV3IFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGUgPSBuZXcgRGVmaW5pdGlvblJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGUgPSBuZXcgRGVmaW5pdGlvbnNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZSA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUgPSBuZXcgVGVybWluYWxTeW1ib2xSdWxlKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydFJ1bGUoKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25SdWxlKCksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUoKTtcblxuICAgIGxldCBydWxlcyA9IFtcbiAgICAgIGRvY3VtZW50UnVsZSxcbiAgICAgIHJ1bGVSdWxlLFxuICAgICAgbmFtZVJ1bGUsXG4gICAgICBkZWZpbml0aW9uc1J1bGUsXG4gICAgICBkZWZpbml0aW9uUnVsZSxcbiAgICAgIHBhcnRSdWxlLFxuICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIHRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSxcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUsXG4gICAgICBjaG9pY2VPZlBhcnRzUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIGVuZE9mTGluZVJ1bGUsXG4gICAgICBlcHNpbG9uUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGUsICAvLy9cbiAgICAgICAgICBydWxlTWFwID0gcnVsZXMucmVkdWNlKChydWxlTWFwLCBydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTWFwO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICBibmZQYXJzZXIgPSBuZXcgQk5GUGFyc2VyKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGJuZlBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgZXhwcmVzc2lvbiAgOjo9IGV4cHJlc3Npb25fIG9wZXJhdG9yIGV4cHJlc3Npb24gZXhwcmVzc2lvbn4qXG5cbiAgICAgICAgICAgICAgICB8IGV4cHJlc3Npb25fXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgb3BlcmF0b3IgICAgOjo9IFwiK1wiXG5cbiAgICAgICAgICAgICAgICB8IFwiLVwiXG5cbiAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICB8IFwiKlwiXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgdGVybSAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICBleHByZXNzaW9uXyA6Oj0gXCIoXCIgZXhwcmVzc2lvbiBcIilcIlxuXG4gICAgICAgICAgICAgICAgfCB0ZXJtXG5cbiAgICAgICAgICAgICAgICA7XG5cbiAgZXhwcmVzc2lvbn4gOjo9IG9wZXJhdG9yIGV4cHJlc3Npb24gO1xuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikge1xuICAgIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKSxcbiAgICAgICAgICBiYXNpY1BhcnNlciA9IEJhc2ljUGFyc2VyLmZyb21SdWxlcyhydWxlcyk7XG5cbiAgICByZXR1cm4gYmFzaWNQYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBCYXNpY1BhcnNlci5mcm9tQk5GKGJuZik7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZXBzaWxvblwiO1xuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFcHNpbG9uUGFydCxcbiAgV2lsZGNhcmRQYXJ0LFxuICBFbmRPZkxpbmVQYXJ0LFxuICBUZXJtaW5hbFN5bWJvbFBhcnQsXG4gIFJlZ3VsYXJFeHByZXNzaW9uUGFydCxcbiAgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LFxuICBSdWxlTmFtZVBhcnQsXG4gIE9wdGlvbmFsUGFydFBhcnQsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnQsXG4gIE9uZU9yTW9yZVBhcnRzUGFydCxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQk5GUGFyc2VyIH0gZnJvbSBcIi4vYm5mL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY1BhcnNlciB9IGZyb20gXCIuL2Jhc2ljL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25QYXJzZXIgfSBmcm9tIFwiLi9jb21tb24vcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ibmYvcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL2JuZi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9ibmYvcGFydFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlZmluaXRpb24gfSBmcm9tIFwiLi9ibmYvZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9jb21tb24vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9jb21tb24vbm9kZS9ub25UZXJtaW5hbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuXG4gICAgc3R5bGVzaGVldCAgICAgICAgICAgICAgICAgOjo9ICggbWVkaWEgfCBydWxlU2V0IHwgZGVjbGFyYXRpb24gfCBlcnJvciApKyA7XG5cblxuXG5cblxuICAgIG1lZGlhICAgICAgICAgICAgICAgICAgICAgIDo6PSBcIkBtZWRpYVwiIG1lZGlhUXVlcmllcyBcIntcIiAoIHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiApKiBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJpZXMgICAgICAgICAgICAgICA6Oj0gIG1lZGlhUXVlcnkgKCBcIixcIiBtZWRpYVF1ZXJ5ICkqIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcnkgICAgICAgICAgICAgICAgIDo6PSAgXCJub3RcIj8gKCBcIm9ubHlcIj8gbWVkaWFUeXBlIFwiYW5kXCIgKT8gbWVkaWFFeHByZXNzaW9uICggXCJhbmRcIiBtZWRpYUV4cHJlc3Npb24gKSogO1xuXG5cbiAgICBtZWRpYVR5cGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiYWxsXCIgfCBcInByaW50XCIgfCBcInNjcmVlblwiIHwgXCJzcGVlY2hcIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYUV4cHJlc3Npb24gICAgICAgICAgICA6Oj0gIFwiKFwiIFtpZGVudGlmaWVyXSAoIFwiOlwiIGV4cHJlc3Npb24gKT8gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBydWxlU2V0ICAgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9ycyBcIntcIiBkZWNsYXJhdGlvbiogXCJ9XCIgO1xuICAgIFxuICAgIFxuICAgIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3IgKCBcIixcIiBzZWxlY3RvciApKiA7XG5cblxuICAgIHNlbGVjdG9yICAgICAgICAgICAgICAgICAgIDo6PSAgKCBjbGFzcyB8IHBzZXVkb0NsYXNzIHwgcHNldWRvRWxlbWVudCB8IGF0dHJpYnV0ZSApKyA7XG5cblxuXG5cblxuICAgIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgcHJvcGVydHkgXCI6XCIgZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSogcHJpb3JpdHk/IFwiO1wiIDtcblxuXG4gICAgY2xhc3MgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvQ2xhc3MgICAgICAgICAgICAgICAgOjo9ICBcIjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvRWxlbWVudCAgICAgICAgICAgICAgOjo9ICBcIjo6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBhcmVudGhlc2lzZWRTZWxlY3RvciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIoXCIgc2VsZWN0b3IgPE5PX1dISVRFU1BBQ0U+XCIpXCIgO1xuXG5cbiAgICBhdHRyaWJ1dGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiW1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIj1cIiB8IFwifj1cIiB8IFwifD1cIiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbaWRlbnRpZmllcl0gfCBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBwcm9wZXJ0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuICAgIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgIDo6PSAgdGVybSAoIFwiLFwiPyB0ZXJtICkqIDtcblxuXG4gICAgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgOjo9ICBcIiFpbXBvcnRhbnRcIiA7XG5cblxuXG5cblxuICAgIHRlcm0gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3VuYXJ5LW9wZXJhdG9yXT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3BlcmNlbnRhZ2VdIHwgW2ZyZXF1ZW5jeV0gfCBbZnJhY3Rpb25dIHwgW2xlbmd0aF0gfCBbYW5nbGVdIHwgW3JlbXNdIHwgW2Vtc10gfCBbdGltZV0gfCBbbnVtYmVyXSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nLWxpdGVyYWxdK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IEJORlBhcnNlciwgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7XG4gICAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpLFxuICAgICAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tUnVsZXMocnVsZXMpO1xuXG4gICAgcmV0dXJuIGNzc1BhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ1NTUGFyc2VyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDU1NQYXJzZXIuZnJvbUJORihibmYpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSSyA9IFwiIVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVYQ0xBTUFUSU9OX01BUksgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNsZWFyLCB0cmltLCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ByZWFkIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSkge1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgIHRoaXMudW5pcXVlID0gdW5pcXVlO1xuICB9XG5cbiAgYWRqdXN0Tm9kZXMobm9kZXMpIHtcbiAgICBpZiAodGhpcy51bmlxdWUpIHtcbiAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgIGNsZWFyKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJpbShub2RlcywgdGhpcy5zdGFydEluZGV4LCB0aGlzLmVuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gPT09IEVYQ0xBTUFUSU9OX01BUkspIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoXFxkKyk/KFxcLlxcLlxcLik/KFxcZCspP10vLFxuICAgICAgICAgICAgICBtYXRjaGVzID0gc3ByZWFkRXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBwYXJzZUludChzZWNvbmRNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdXJ0aE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YlF1ZXJ5ID0gc3ViUXVlcnk7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gICAgdGhpcy5pbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnQ7XG4gICAgdGhpcy5pbnRlcm1lZGlhdGVOb2RlcyA9IGludGVybWVkaWF0ZU5vZGVzO1xuICB9XG5cbiAgZXhlY3V0ZShub2RlLCBkZXB0aCA9IDAsIG1heGltdW1EZXB0aCA9IHRoaXMubWF4aW11bURlcHRoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHRoaXMuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gIH1cblxuICBmaW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBtYXhpbXVtRGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIG5vZGVOb25UZXJtaW5hbE5vZGUgPSAhbm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIGxldCBmb3VuZDtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnR5cGVzLCB0eXBlLCBXSUxEQ0FSRCk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnJ1bGVOYW1lcywgcnVsZU5hbWUsIFdJTERDQVJEKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzaW9uLCB0eXBlcykge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdWJFeHByZXNpb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3MoYXJndW1lbnQpIHsgcmV0dXJuIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgUmVhY3QuQ29tcG9uZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgICAvLy9cbiAgICBzdWJjbGFzcyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCAhPT0gbnVsbCkge1xuICAgICAgc3ViY2xhc3MgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3M7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJyZWFjdGlvblwiO1xuaW1wb3J0IHsgdGFnTmFtZXMsIHN0eWxlc1V0aWxpdGllcywgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIndpdGgtc3R5bGVcIjtcblxuaW1wb3J0IHsgaXNDbGFzcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc1wiO1xuXG5jb25zdCB7IGdlbmVyYXRlQ2xhc3NOYW1lIH0gPSBjbGFzc05hbWVVdGlsaXRpZXMsXG4gICAgICB7IHJlbmRlclN0eWxlLCByZW5kZXJTdHlsZXMsIGdlbmVyYXRlU3R5bGUsIHJldHJpZXZlU3R5bGUgfSA9IHN0eWxlc1V0aWxpdGllcztcblxuZnVuY3Rpb24gd2l0aFN0eWxlKENsYXNzT3JGdW5jdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdOyAgLy8vXG5cbiAgICBsZXQgeyBjbGFzc05hbWUgPSBudWxsIH0gPSBDbGFzc09yRnVuY3Rpb247XG5cbiAgICBjb25zdCBzdXBlclN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpO1xuXG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcblxuICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlKTtcblxuICAgIGNvbnN0IENsYXNzT3JGdW5jdGlvbkNsYXNzID0gaXNDbGFzcyhDbGFzc09yRnVuY3Rpb24pO1xuXG4gICAgaWYgKENsYXNzT3JGdW5jdGlvbkNsYXNzKSB7XG4gICAgICBjb25zdCBDbGFzcyA9IENsYXNzT3JGdW5jdGlvbjsgIC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgcmVuZGVyKHVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMucHJvcHMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BzKGNsYXNzTmFtZSwgdGhpcy5wcm9wcyk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKHVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gQ2xhc3NPckZ1bmN0aW9uOyAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gKHByb3BzLCBjb250ZXh0LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHByb3BzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wcyhjbGFzc05hbWUsIHByb3BzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcHMsIGNvbnRleHQsIGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKENsYXNzT3JGdW5jdGlvbiwge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ2xhc3NPckZ1bmN0aW9uO1xuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKHdpdGhTdHlsZSwge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlO1xuXG50YWdOYW1lcy5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXRoU3R5bGUsIHRhZ05hbWUsIHtcbiAgICBnZXQ6ICgpID0+IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdLCAgLy8vXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSk7XG5cbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gKHByb3BzLCBjb250ZXh0LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHByb3BzO1xuXG4gICAgICAgIHByb3BzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wcyhjbGFzc05hbWUsIHByb3BzKTtcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pO1xuICAgICAgfTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihGdW5jdGlvbiwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gRnVuY3Rpb247XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBhcHBlbmRDbGFzc05hbWVUb1Byb3BzKGNsYXNzTmFtZSwgcHJvcHMpIHtcbiAgcHJvcHMgPSBwcm9wcy5oYXNPd25Qcm9wZXJ0eShcImNsYXNzTmFtZVwiKSA/IHByb3BzIDogey4uLnByb3BzLCBjbGFzc05hbWV9OyAvLy9cblxuICByZXR1cm4gcHJvcHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBIZWFkaW5nID0gd2l0aFN0eWxlLmgxYFxuXG4gIGZvbnQtc2l6ZTogM3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmNvbnN0IFJvd3NEaXYgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjbGFzc05hbWUsIGNoaWxkcmVuIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gcm93c2B9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93c0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmNvbnN0IENvbHVtbkRpdiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG5cbiAgICA8ZGl2IGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBjb2x1bW5gfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cblxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbkRpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuXG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBDb2x1bW5zRGl2ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcblxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IGNvbHVtbnNgfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cblxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbnNEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBTdWJIZWFkaW5nID0gd2l0aFN0eWxlLmgyYFxuXG4gIG1hcmdpbjogMXJlbSAwIDAuNXJlbSAwO1xuICBmb250LXNpemU6IDJyZW07XG4gIFxuICA6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBTdWJIZWFkaW5nO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVVUTyA9IFwiYXV0b1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IENPTF9SRVNJWkUgPSBcImNvbC1yZXNpemVcIjtcbmV4cG9ydCBjb25zdCBST1dfUkVTSVpFID0gXCJyb3ctcmVzaXplXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBET1VCTEVfU1BBQ0UgPSBcIiAgXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuaW1wb3J0IHsgV0lEVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgQ29tcG9uZW50IH0gPSBSZWFjdDtcblxuY2xhc3MgU2l6ZWFibGVEaXYgZXh0ZW5kcyBDb21wb25lbnQge1xuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCksXG4gICAgICAgICAgZmlyc3RDaGlsZERPTUVsZW1lbnQgPSBmaXJzdENoaWxkLmdldERPTUVsZW1lbnQoKSxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudE9mZnNldFdpZHRoID0gZmlyc3RDaGlsZERPTUVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgd2lkdGggPSBmaXJzdENoaWxkRE9NRWxlbWVudE9mZnNldFdpZHRoOyAvLy9cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIHNldFdpZHRoKHdpZHRoKSB7XG4gICAgd2lkdGggPSBgJHt3aWR0aH1weGA7IC8vL1xuXG4gICAgdGhpcy5zZXRTdHlsZShXSURUSCwgd2lkdGgpO1xuICB9XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IHNpemVhYmxlYH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU2l6ZWFibGVEaXYpYFxuXG4gIHdpZHRoOiA0OHJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWluLXdpZHRoOiAyNHJlbTtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgS0VZVVBfRVZFTlQgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgTU9VU0VVUF9FVkVOVCA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFTU9WRV9FVkVOVCA9IFwibW91c2Vtb3ZlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlQgfSBmcm9tIFwiLi9ldmVudHNcIjtcblxuY29uc3QgeyBDb21wb25lbnQgfSA9IFJlYWN0O1xuXG5jbGFzcyBUZXh0YXJlYSBleHRlbmRzIENvbXBvbmVudCB7XG4gIG9uS2V5VXAgPSAoa2V5VXBIYW5kbGVyKSA9PiB7XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZCgpLFxuICAgICAgICAgIGZpcnN0Q2hpbGRET01FbGVtZW50ID0gZmlyc3RDaGlsZC5nZXRET01FbGVtZW50KCk7XG5cbiAgICBmaXJzdENoaWxkRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKEtFWVVQX0VWRU5ULCAoZXZlbnQpID0+IHtcbiAgICAgIGtleVVwSGFuZGxlcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmdldEZpcnN0Q2hpbGQoKSxcbiAgICAgICAgZmlyc3RDaGlsZERPTUVsZW1lbnQgPSBmaXJzdENoaWxkLmdldERPTUVsZW1lbnQoKTtcblxuICAgIGZpcnN0Q2hpbGRET01FbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5nZXRGaXJzdENoaWxkKCksXG4gICAgICAgIGZpcnN0Q2hpbGRET01FbGVtZW50ID0gZmlyc3RDaGlsZC5nZXRET01FbGVtZW50KCk7XG5cbiAgICBjb25zdCB2YWx1ZSA9IGZpcnN0Q2hpbGRET01FbGVtZW50LnZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBvbktleVVwIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIGNvbnN0IGtleVVwSGFuZGxlciA9IG9uS2V5VXA7IC8vL1xuXG4gICAgICB0aGlzLm9uS2V5VXAoa2V5VXBIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAvLy9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVGV4dGFyZWEpYFxuXG4gIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5O1xuICBoZWlnaHQ6IDI0cmVtO1xuICByZXNpemU6IHZlcnRpY2FsO1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgZ2V0Qk5GKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGJuZiA9IHZhbHVlOyAgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mOyAgLy8vXG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHJlbmRlcih1cGRhdGUpIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gVGV4dGFyZWEsXG4gICAgICAgICAgeyBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gYm5mYH0gc3BlbGxDaGVjaz1cImZhbHNlXCI+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICApO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGVudFRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQ7ICAvLy9cblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBUZXh0YXJlYSxcbiAgICAgICAgICB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcblxuICAgICAgPHRleHRhcmVhIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBjb250ZW50YH0gc3BlbGxDaGVjaz1cImZhbHNlXCI+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICApO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZVRyZWVUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgc2V0UGFyc2VUcmVlKHBhcnNlVHJlZSkge1xuICAgIGlmIChwYXJzZVRyZWUgIT09IG51bGwpIHtcbiAgICAgIHBhcnNlVHJlZS5zaGlmdExpbmUoKTsgIC8vXG5cbiAgICAgIGNvbnN0IHBhcnNlVHJlZVN0cmluZyA9IHBhcnNlVHJlZS5hc1N0cmluZygpLFxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVRyZWVTdHJpbmc7ICAvLy9cblxuICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJQYXJzZVRyZWUoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclBhcnNlVHJlZSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBUZXh0YXJlYSxcbiAgICAgICAgICB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcblxuICAgICAgPHRleHRhcmVhIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBwYXJzZS10cmVlYH0gc3BlbGxDaGVjaz1cImZhbHNlXCIgcmVhZE9ubHk+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICApO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEFVVE8sIENPTF9SRVNJWkUsIFJPV19SRVNJWkUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxubGV0IHByZXZpb3VzQ3Vyc29yOyAgLy8vXG5cbmNvbnN0IGJvZHlET01FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cbmZ1bmN0aW9uIGNvbHVtblJlc2l6ZSgpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gQ09MX1JFU0laRSkge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjtcblxuICAgIHNldEN1cnNvcihDT0xfUkVTSVpFKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByb3dSZXNpemUoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IFJPV19SRVNJWkUpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7XG5cbiAgICBzZXRDdXJzb3IoUk9XX1JFU0laRSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHNldEN1cnNvcihwcmV2aW91c0N1cnNvcik7IC8vL1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbHVtblJlc2l6ZSxcbiAgcm93UmVzaXplLFxuICByZXNldFxufVxuXG5mdW5jdGlvbiBzZXRDdXJzb3IoY3Vyc29yKSB7XG4gIGJvZHlET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGJvZHlET01FbGVtZW50LnN0eWxlLmN1cnNvcjsgIC8vL1xuXG4gIHJldHVybiBjdXJyZW50Q3Vyc29yIHx8IEFVVE87IC8vL1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCkge1xuICBsZXQgbmV4dFNpYmxpbmcgPSBudWxsO1xuXG4gIGNvbnN0IHNpYmxpbmdzID0gZWxlbWVudC5wYXJlbnQuY2hpbGRyZW47IC8vL1xuXG4gIGJhY2t3YXJkc1NvbWUoc2libGluZ3MsIChzaWJsaW5nKSA9PiB7XG4gICAgaWYgKHNpYmxpbmcgPT09IGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5leHRTaWJsaW5nID0gc2libGluZztcbiAgfSk7XG5cbiAgcmV0dXJuIG5leHRTaWJsaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpIHtcbiAgbGV0IHByZXZpb3VzU2libGluZyA9IG51bGw7XG5cbiAgY29uc3Qgc2libGluZ3MgPSBlbGVtZW50LnBhcmVudC5jaGlsZHJlbjsgLy8vXG5cbiAgZm9yd2FyZHNTb21lKHNpYmxpbmdzLCAoc2libGluZykgPT4ge1xuICAgIGlmIChzaWJsaW5nID09PSBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcmV2aW91c1NpYmxpbmcgPSBzaWJsaW5nO1xuICB9KTtcblxuICByZXR1cm4gcHJldmlvdXNTaWJsaW5nO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkc1NvbWUoYXJyYXksIHRlc3QpIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IGFycmF5TGVuZ3RoIC0gMTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGJhY2t3YXJkc1NvbWUoYXJyYXksIHRlc3QpIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IGFycmF5TGVuZ3RoIC0gMTtcblxuICBmb3IgKGxldCBpbmRleCA9IGxhc3RJbmRleDsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4uLy4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwicmVhY3Rpb25cIjtcblxuaW1wb3J0IGN1cnNvciBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmltcG9ydCB7IGdldFByZXZpb3VzU2libGluZyB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvc2libGluZ1wiO1xuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVCwgTU9VU0VNT1ZFX0VWRU5UIH0gZnJvbSBcIi4uLy4uL2V2ZW50c1wiO1xuXG5jb25zdCB7IENvbXBvbmVudCB9ID0gUmVhY3Q7XG5cbmNsYXNzIFZlcnRpY2FsU3BsaXR0ZXJEaXYgZXh0ZW5kcyBDb21wb25lbnQge1xuICBtb3VzZVVwSGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICBpZiAoZHJhZ2dpbmcpIHtcbiAgICAgIHRoaXMuc3RvcERyYWdnaW5nKCk7XG4gICAgfVxuXG4gICAgY3Vyc29yLnJlc2V0KCk7XG4gIH1cblxuICBtb3VzZU1vdmVIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgY29uc3QgbW91c2VMZWZ0ID0gZXZlbnQucGFnZVgsICAvLy9cbiAgICAgICAgICAgIHJlbGF0aXZlTW91c2VMZWZ0ID0gbW91c2VMZWZ0IC0gdGhpcy5wcmV2aW91c01vdXNlTGVmdCxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2V2lkdGggPSB0aGlzLnByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCArIHJlbGF0aXZlTW91c2VMZWZ0LFxuICAgICAgICAgICAgd2lkdGggPSBzaXplYWJsZURpdldpZHRoOyAvLy9cblxuICAgICAgdGhpcy5zaXplYWJsZURpdi5zZXRXaWR0aCh3aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgbW91c2VEb3duSGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICBjb25zdCBtb3VzZUxlZnQgPSBldmVudC5wYWdlWCwgIC8vL1xuICAgICAgICAgICAgc2l6ZWFibGVEaXZXaWR0aCA9IHRoaXMuc2l6ZWFibGVEaXYuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHByZXZpb3VzTW91c2VMZWZ0ID0gbW91c2VMZWZ0LCAgLy8vXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBzaXplYWJsZURpdldpZHRoOyAgIC8vL1xuXG4gICAgICB0aGlzLnByZXZpb3VzTW91c2VMZWZ0ID0gcHJldmlvdXNNb3VzZUxlZnQ7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTaXplYWJsZURpdldpZHRoID0gcHJldmlvdXNTaXplYWJsZURpdldpZHRoO1xuXG4gICAgICB0aGlzLnN0YXJ0RHJhZ2dpbmcoKTtcbiAgICB9XG5cbiAgICBjdXJzb3IuY29sdW1uUmVzaXplKCk7XG4gIH1cblxuICBtb3VzZU92ZXJIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgY3Vyc29yLmNvbHVtblJlc2l6ZSgpO1xuICB9XG5cbiAgbW91c2VPdXRIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgY3Vyc29yLnJlc2V0KCk7XG4gIH1cblxuICBzdGFydERyYWdnaW5nKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcbiAgfVxuXG4gIHN0b3BEcmFnZ2luZygpIHtcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiZHJhZ2dpbmdcIik7XG4gIH1cblxuICBpc0RyYWdnaW5nKCkge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5oYXNDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gICAgcmV0dXJuIGRyYWdnaW5nO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gZ2V0UHJldmlvdXNTaWJsaW5nKHRoaXMpLFxuICAgICAgICAgIHNpemVhYmxlRGl2ID0gcHJldmlvdXNTaWJsaW5nOyAgLy8vXG5cbiAgICB0aGlzLnNpemVhYmxlRGl2ID0gc2l6ZWFibGVEaXY7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihNT1VTRVVQX0VWRU5ULCB0aGlzLm1vdXNlVXBIYW5kbGVyKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKE1PVVNFTU9WRV9FVkVOVCwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKE1PVVNFTU9WRV9FVkVOVCwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyKTtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKE1PVVNFVVBfRVZFTlQsIHRoaXMubW91c2VVcEhhbmRsZXIpO1xuXG4gICAgZGVsZXRlIHRoaXMuc2l6ZWFibGVEaXY7XG4gIH1cblxuICByZW5kZXIodXBkYXRlKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSB2ZXJ0aWNhbC1zcGxpdHRlcmB9XG4gICAgICAgICAgIG9uTW91c2VEb3duPXt0aGlzLm1vdXNlRG93bkhhbmRsZXJ9XG4gICAgICAgICAgIG9uTW91c2VPdmVyPXt0aGlzLm1vdXNlT3ZlckhhbmRsZXJ9XG4gICAgICAgICAgIG9uTW91c2VPdXQ9e3RoaXMubW91c2VPdXRIYW5kbGVyfVxuICAgICAgLz5cblxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZlcnRpY2FsU3BsaXR0ZXJEaXYpYFxuXG4gIHdpZHRoOiAxcmVtO1xuICBmbGV4LXNocmluazogMDsgIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXk7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuaW1wb3J0IHsgRE9VQkxFX1NQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZXhpY2FsRW50cmllc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRMZXhpY2FsRW50cmllcygpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IEpTT04ucGFyc2UodmFsdWUpO1xuXG4gICAgcmV0dXJuIGxleGljYWxFbnRyaWVzO1xuICB9XG5cbiAgc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGxleGljYWxFbnRyaWVzLCBudWxsLCBET1VCTEVfU1BBQ0UpO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICByZW5kZXIodXBkYXRlKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IFRleHRhcmVhLFxuICAgICAgICAgIHsgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuXG4gICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9IGxleGljYWwtZW50cmllc2B9IHNwZWxsQ2hlY2s9XCJmYWxzZVwiPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3RleHRhcmVhPlxuXG4gICAgKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnkoZWxlbWVudCwgdGVzdCkge1xuICBjb25zdCBmb3VuZERlc2NlbmRhbnQgPSBxdWVyeURlc2NlbmRhbnQoZWxlbWVudCwgdGVzdCksXG4gICAgICAgIGRlc2NlbmRhbnQgPSBmb3VuZERlc2NlbmRhbnQ7IC8vL1xuXG4gIHJldHVybiBkZXNjZW5kYW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeVRhZ05hbWUoZWxlbWVudCwgLi4udGFnTmFtZXMpIHtcbiAgcmV0dXJuIHF1ZXJ5KGVsZW1lbnQsIChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHRhZ05hbWVzLnNvbWUoKHRhZ05hbWUpID0+IHtcbiAgICAgIHJldHVybiAoZWxlbWVudC5nZXRUYWdOYW1lICYmIHRvTG93ZXJDYXNlKGVsZW1lbnQuZ2V0VGFnTmFtZSgpKSA9PT0gdGFnTmFtZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzTmFtZShlbGVtZW50LCAuLi5jbGFzc05hbWVzKSB7XG4gIHJldHVybiBxdWVyeShlbGVtZW50LCAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBjbGFzc05hbWVzLnNvbWUoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIChlbGVtZW50Lmhhc0NsYXNzICYmIGVsZW1lbnQuaGFzQ2xhc3MoY2xhc3NOYW1lKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeVJlYWN0Q2xhc3MoZWxlbWVudCwgLi4ucmVhY3RDbGFzc2VzKSB7XG4gIHJldHVybiBxdWVyeShlbGVtZW50LCAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiByZWFjdENsYXNzZXMuc29tZSgocmVhY3RDbGFzcykgPT4ge1xuICAgICAgcmV0dXJuIChlbGVtZW50LnJlYWN0Q2xhc3MgPT09IHJlYWN0Q2xhc3MpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlSZWFjdEZ1bmN0aW9uKGVsZW1lbnQsIC4uLnJlYWN0RnVuY3Rpb25zKSB7XG4gIHJldHVybiBxdWVyeShlbGVtZW50LCAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiByZWFjdEZ1bmN0aW9ucy5zb21lKChyZWFjdEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gKGVsZW1lbnQucmVhY3RGdW5jdGlvbiA9PT0gcmVhY3RGdW5jdGlvbik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeVJlYWN0Q29tcG9uZW50KGVsZW1lbnQsIC4uLlJlYWN0Q29tcG9uZW50cykge1xuICByZXR1cm4gcXVlcnkoZWxlbWVudCwgKGVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gUmVhY3RDb21wb25lbnRzLnNvbWUoKFJlYWN0Q29tcG9uZW50KSA9PiB7XG4gICAgICByZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBSZWFjdENvbXBvbmVudCk7IC8vL1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcXVlcnlEZXNjZW5kYW50KGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50LmdldENoaWxkcmVuKCksXG4gICAgICAgIGZvdW5kRGVzY2VuZGFudCA9IGNoaWxkcmVuLnJlZHVjZSgoZm91bmREZXNjZW5kYW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgIGlmIChmb3VuZERlc2NlbmRhbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGVzdChjaGlsZCk7XG5cbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICBmb3VuZERlc2NlbmRhbnQgPSBjaGlsZDsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3VuZERlc2NlbmRhbnQgPSBxdWVyeURlc2NlbmRhbnQoY2hpbGQsIHRlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmb3VuZERlc2NlbmRhbnQ7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBmb3VuZERlc2NlbmRhbnQ7XG59XG5cbmZ1bmN0aW9uIHRvTG93ZXJDYXNlKHRhZ05hbWUpIHtcbiAgcmV0dXJuICh0YWdOYW1lID09PSBudWxsKSA/IG51bGwgOiB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0IH0gZnJvbSBcInJlYWN0aW9uXCI7XG5cbmltcG9ydCB7IENTU0xleGVyLCBDU1NQYXJzZXIgfSBmcm9tIFwid2l0aC1zdHlsZVwiO1xuXG5jb25zdCB7IENvbXBvbmVudCB9ID0gUmVhY3Q7XG5cbmltcG9ydCBIZWFkaW5nIGZyb20gXCIuL2hlYWRpbmdcIjtcbmltcG9ydCBSb3dzRGl2IGZyb20gXCIuL2Rpdi9yb3dzXCI7XG5pbXBvcnQgQ29sdW1uRGl2IGZyb20gXCIuL2Rpdi9jb2x1bW5cIjtcbmltcG9ydCBDb2x1bW5zRGl2IGZyb20gXCIuL2Rpdi9jb2x1bW5zXCI7XG5pbXBvcnQgU3ViSGVhZGluZyBmcm9tIFwiLi9zdWJIZWFkaW5nXCI7XG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4vZGl2L3NpemVhYmxlXCI7XG5pbXBvcnQgQk5GVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvYm5mXCI7XG5pbXBvcnQgQ29udGVudFRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2NvbnRlbnRcIjtcbmltcG9ydCBQYXJzZVRyZWVUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9wYXJzZVRyZWVcIjtcbmltcG9ydCBWZXJ0aWNhbFNwbGl0dGVyRGl2IGZyb20gXCIuL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbFwiO1xuaW1wb3J0IExleGljYWxFbnRyaWVzVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvbGV4aWNhbEVudHJpZXNcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBxdWVyeUJ5UmVhY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcgZXh0ZW5kcyBDb21wb25lbnQge1xuICBrZXlVcEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlVHJlZSA9IHRoaXMuZ2V0UGFyc2VUcmVlKCk7XG5cbiAgICAgIHRoaXMucGFyc2VUcmVlVGV4dGFyZWEuc2V0UGFyc2VUcmVlKHBhcnNlVHJlZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgdGhpcy5wYXJzZVRyZWVUZXh0YXJlYS5jbGVhclBhcnNlVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhcnNlVHJlZSgpIHtcbiAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgIGNvbnN0IGJuZiA9IHRoaXMuYm5mVGV4dGFyZWEuZ2V0Qk5GKCksXG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnRUZXh0YXJlYS5nZXRDb250ZW50KCksXG4gICAgICAgIGxleGljYWxFbnRyaWVzID0gdGhpcy5sZXhpY2FsRW50cmllc1RleHRhcmVhLmdldExleGljYWxFbnRyaWVzKCksXG4gICAgICAgIGVudHJpZXMgPSBsZXhpY2FsRW50cmllcywgLy8vXG4gICAgICAgIGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbUVudHJpZXMoZW50cmllcyksXG4gICAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tQk5GKGJuZiksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmJuZlRleHRhcmVhID0gcXVlcnlCeVJlYWN0Q29tcG9uZW50KHRoaXMsIEJORlRleHRhcmVhKTtcbiAgICB0aGlzLmNvbnRlbnRUZXh0YXJlYSA9IHF1ZXJ5QnlSZWFjdENvbXBvbmVudCh0aGlzLCBDb250ZW50VGV4dGFyZWEpO1xuICAgIHRoaXMucGFyc2VUcmVlVGV4dGFyZWEgPSBxdWVyeUJ5UmVhY3RDb21wb25lbnQodGhpcywgUGFyc2VUcmVlVGV4dGFyZWEpO1xuICAgIHRoaXMubGV4aWNhbEVudHJpZXNUZXh0YXJlYSA9IHF1ZXJ5QnlSZWFjdENvbXBvbmVudCh0aGlzLCBMZXhpY2FsRW50cmllc1RleHRhcmVhKTtcblxuICAgIHRoaXMuaW5pdGlhbGlzZSgpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgZGVsZXRlIHRoaXMuYm5mVGV4dGFyZWE7XG4gICAgZGVsZXRlIHRoaXMuY29udGVudFRleHRhcmVhO1xuICAgIGRlbGV0ZSB0aGlzLnBhcnNlVHJlZVRleHRhcmVhO1xuICAgIGRlbGV0ZSB0aGlzLmxleGljYWxFbnRyaWVzVGV4dGFyZWE7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIGNvbnN0IHsgZW50cmllcyB9ID0gQ1NTTGV4ZXIsXG4gICAgICAgICAgeyBibmYgfSA9IENTU1BhcnNlcixcbiAgICAgICAgICBjb250ZW50ID0gRU1QVFlfU1RSSU5HLCAvLy9cbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IGVudHJpZXM7IC8vL1xuXG4gICAgdGhpcy5ibmZUZXh0YXJlYS5zZXRCTkYoYm5mKTtcbiAgICB0aGlzLmNvbnRlbnRUZXh0YXJlYS5zZXRDb250ZW50KGNvbnRlbnQpO1xuICAgIHRoaXMubGV4aWNhbEVudHJpZXNUZXh0YXJlYS5zZXRMZXhpY2FsRW50cmllcyhsZXhpY2FsRW50cmllcyk7XG5cbiAgICB0aGlzLmtleVVwSGFuZGxlcigpO1xuICB9XG5cbiAgcmVuZGVyKHVwZGF0ZSkge1xuICAgIHJldHVybiAoW1xuXG4gICAgICA8SGVhZGluZz5cbiAgICAgICAgUmVhY3Rpb24gd2l0aCBTdHlsZSBleGFtcGxlXG4gICAgICA8L0hlYWRpbmc+LFxuICAgICAgPENvbHVtbnNEaXY+XG4gICAgICAgIDxTaXplYWJsZURpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBMZXhpY2FsIGVudHJpZXNcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxMZXhpY2FsRW50cmllc1RleHRhcmVhIG9uS2V5VXA9e3RoaXMua2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIEJORlxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPEJORlRleHRhcmVhIG9uS2V5VXA9e3RoaXMua2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9TaXplYWJsZURpdj5cbiAgICAgICAgPFZlcnRpY2FsU3BsaXR0ZXJEaXYvPlxuICAgICAgICA8Q29sdW1uRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxDb250ZW50VGV4dGFyZWEgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgUGFyc2UgdHJlZVxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPFBhcnNlVHJlZVRleHRhcmVhLz5cbiAgICAgICAgICA8L1Jvd3NEaXY+XG4gICAgICAgIDwvQ29sdW1uRGl2PlxuICAgICAgPC9Db2x1bW5zRGl2PlxuXG4gICAgXSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCB7IFJlYWN0LCBSZWFjdERPTSB9IGZyb20gXCJyZWFjdGlvblwiO1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXdcIjtcblxuY29uc3QgeyByZW5kZXJTdHlsZXMgfSA9IHdpdGhTdHlsZTtcblxud2luZG93LlJlYWN0ID0gUmVhY3Q7IC8vL1xuXG5yZW5kZXJTdHlsZXMoKTtcblxuY29uc3QgYm9keURPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblxuUmVhY3RET00ucmVuZGVyKFxuXG4gICAgPFZpZXcvPlxuXG4gICxcbiAgYm9keURPTUVsZW1lbnRcbik7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7Ozs7O1lBRWdCLFFBQUE7WUFFQSxVQUFBO1lBUUEsWUFBQTtZQVFBLFlBQUE7Ozs7Ozs7O21CQWxCTSxPQUFPO0FBQUUsYUFBTyxNQUFNOztxQkFFcEIsUUFBTztBQUM3QixhQUFPLE9BQU0sT0FBTyxTQUFDLE9BQU8sU0FBWTtBQUN0QyxnQkFBUSxNQUFNLE9BQU87QUFFckIsZUFBTztTQUNOOzt1QkFHcUIsZ0JBQWdCO0FBQ3hDLHVCQUFpQixrQkFBa0I7QUFFbkMsYUFBUSxZQUFBLGdCQUEwQixTQUN4QixpQkFDRTtRQUFDOzs7dUJBR1csU0FBUyxPQUFPO0FBQ3hDLFVBQUksWUFBWSxNQUFNO0FBQ3BCLGVBQU87O0FBR1QsVUFBTSxRQUFRLFFBQVEsU0FBUztBQUUvQixhQUFPLE1BQU0sTUFBTSxRQUFROztxQkFHWixTQUFTLE9BQU87QUFDL0IsVUFBSSxRQUFRO0FBRVosWUFBTSxLQUFLLFNBQUMsZ0JBQWdCLHFCQUF3QjtBQUNsRCxZQUFJLG1CQUFtQixTQUFTO0FBQzlCLGtCQUFRO0FBRVIsaUJBQU87OztBQUlYLGFBQU87Ozs7O0FDekNUOzs7Ozs7QUFFc0IsUUFBQSxTQUFtQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFcEIsVUFBTiwyQkFBUTt3QkFDVCxPQUFLOzhCQURFO0FBRWpCLGFBQUssUUFBUTtBQUViLGFBQUssU0FBUztBQUVkLGFBQUssV0FBVyxNQUFNOzttQkFOTCxVQUFPOztVQVMxQixLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsdUJBQWM7QUFDWixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxnQkFBTSxhQUFVLElBcEJFLFFBQW1CLE1Bb0JaLEtBQUssYUFBYTtBQUUzQyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEs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
|