@sapui5/sap.fe.base 1.130.1 → 1.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +4 -3
- package/src/sap/fe/base/BindingToolkit.ts +7 -12
- package/src/sap/fe/base/BuildingBlockBase.js +191 -0
- package/src/sap/fe/base/BuildingBlockBase.ts +166 -0
- package/src/sap/fe/base/ClassSupport.js +76 -26
- package/src/sap/fe/base/ClassSupport.ts +94 -19
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +3 -1
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +3 -0
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +12 -14
- package/src/sap/fe/base/jsx-runtime/jsx-xml.ts +7 -9
- package/src/sap/fe/base/library.js +3 -2
- package/src/sap/fe/base/library.ts +1 -0
|
@@ -87,6 +87,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
87
87
|
return function (target, propertyKey, propertyDescriptor) {
|
|
88
88
|
var _initializer, _ref;
|
|
89
89
|
const metadata = ensureMetadata(target);
|
|
90
|
+
if (metadata.stateProperty !== undefined) {
|
|
91
|
+
throw new Error("Only one state property per control is allowed");
|
|
92
|
+
}
|
|
90
93
|
metadata.stateProperty = propertyKey;
|
|
91
94
|
delete propertyDescriptor.writable;
|
|
92
95
|
metadata.statePropertyDefaultValue ??= (_initializer = (_ref = propertyDescriptor).initializer) === null || _initializer === void 0 ? void 0 : _initializer.call(_ref);
|
|
@@ -361,6 +364,33 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
361
364
|
};
|
|
362
365
|
}
|
|
363
366
|
_exports.defineUI5Class = defineUI5Class;
|
|
367
|
+
/**
|
|
368
|
+
* Mixin a specific interface including all its methods and properties into the control.
|
|
369
|
+
* @param interfaceClass Implementation class of the control
|
|
370
|
+
* @returns The decorated class
|
|
371
|
+
*/
|
|
372
|
+
function mixin(interfaceClass) {
|
|
373
|
+
return function (baseCtor) {
|
|
374
|
+
var _interfaceClass$proto, _interfaceClass$proto2, _interfaceClass$proto3, _interfaceClass$proto4;
|
|
375
|
+
if (baseCtor.prototype.extend) {
|
|
376
|
+
throw new Error("The mixinInterface decorator must be placed after `defineUi5Class`");
|
|
377
|
+
}
|
|
378
|
+
const metadata = ensureMetadata(baseCtor.prototype);
|
|
379
|
+
const interfaceName = (_interfaceClass$proto = (_interfaceClass$proto2 = interfaceClass.prototype).getInterfaceName) === null || _interfaceClass$proto === void 0 ? void 0 : _interfaceClass$proto.call(_interfaceClass$proto2);
|
|
380
|
+
if (interfaceName) {
|
|
381
|
+
metadata.interfaces.push(interfaceName);
|
|
382
|
+
}
|
|
383
|
+
Object.getOwnPropertyNames(interfaceClass.prototype).forEach(name => {
|
|
384
|
+
if (name !== "constructor" && name !== "setupMixin") {
|
|
385
|
+
Object.defineProperty(baseCtor.prototype, name, Object.getOwnPropertyDescriptor(interfaceClass.prototype, name) || Object.create(null));
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
// Hook to add potentially more logic to the mixin
|
|
389
|
+
(_interfaceClass$proto3 = (_interfaceClass$proto4 = interfaceClass.prototype).setupMixin) === null || _interfaceClass$proto3 === void 0 ? void 0 : _interfaceClass$proto3.call(_interfaceClass$proto4, baseCtor);
|
|
390
|
+
return baseCtor;
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
_exports.mixin = mixin;
|
|
364
394
|
function createReference() {
|
|
365
395
|
return {
|
|
366
396
|
current: undefined,
|
|
@@ -394,28 +424,17 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
394
424
|
const pathInModel = `/${prop.toString()}`;
|
|
395
425
|
const oObj = deepClone(jsonModel.getObject(pathInModel));
|
|
396
426
|
let oTarget;
|
|
397
|
-
if (
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
};
|
|
401
|
-
oTarget.toString = function () {
|
|
402
|
-
return this.value;
|
|
403
|
-
};
|
|
404
|
-
oTarget.valueOf = function () {
|
|
405
|
-
return this.value;
|
|
427
|
+
if (prop === "__bindingInfo") {
|
|
428
|
+
return {
|
|
429
|
+
model: "$componentState"
|
|
406
430
|
};
|
|
431
|
+
}
|
|
432
|
+
if (typeof oObj === "string") {
|
|
433
|
+
oTarget = oObj;
|
|
407
434
|
} else if (typeof oObj === "number") {
|
|
408
|
-
oTarget =
|
|
409
|
-
value: oObj
|
|
410
|
-
};
|
|
411
|
-
oTarget.toString = function () {
|
|
412
|
-
return this.value.toString();
|
|
413
|
-
};
|
|
414
|
-
oTarget.valueOf = function () {
|
|
415
|
-
return this.value;
|
|
416
|
-
};
|
|
435
|
+
oTarget = oObj;
|
|
417
436
|
} else if (typeof oObj === "boolean") {
|
|
418
|
-
oTarget =
|
|
437
|
+
oTarget = oObj;
|
|
419
438
|
} else if (Array.isArray(oObj)) {
|
|
420
439
|
oTarget = new Proxy(oObj, {
|
|
421
440
|
get(target, p, receiver) {
|
|
@@ -438,10 +457,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
438
457
|
...oObj
|
|
439
458
|
};
|
|
440
459
|
}
|
|
441
|
-
oTarget
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
460
|
+
if (typeof oTarget === "object") {
|
|
461
|
+
oTarget.__bindingInfo = {
|
|
462
|
+
model: "$componentState",
|
|
463
|
+
path: pathInModel
|
|
464
|
+
};
|
|
465
|
+
}
|
|
445
466
|
return oTarget;
|
|
446
467
|
}
|
|
447
468
|
function _createStateProperty(obj, targetControl) {
|
|
@@ -450,6 +471,20 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
450
471
|
const stateModel = new JSONModel({});
|
|
451
472
|
targetControl.setModel(stateModel, "$componentState");
|
|
452
473
|
let updatingState = false;
|
|
474
|
+
const boundToStateProps = [];
|
|
475
|
+
for (const propertyName in obj.metadata.properties) {
|
|
476
|
+
const propertyDef = obj.metadata.properties[propertyName];
|
|
477
|
+
if (propertyDef.bindToState) {
|
|
478
|
+
boundToStateProps.push(propertyName);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
stateModel.attachPropertyChange(evt => {
|
|
482
|
+
var _evt$getParameter;
|
|
483
|
+
const path = (_evt$getParameter = evt.getParameter("path")) === null || _evt$getParameter === void 0 ? void 0 : _evt$getParameter.substring(1); // to remove the first /
|
|
484
|
+
if (path && boundToStateProps.includes(path)) {
|
|
485
|
+
targetControl.setProperty(path, evt.getParameter("value"));
|
|
486
|
+
}
|
|
487
|
+
});
|
|
453
488
|
// This method can be used to force the state to be applied and wait for it to be applied in tests
|
|
454
489
|
targetControl._updateState = async function () {
|
|
455
490
|
delete this._updateStateTimer;
|
|
@@ -480,6 +515,11 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
480
515
|
return _getHandlerForStateProperty(target, prop);
|
|
481
516
|
},
|
|
482
517
|
set: (setStateModel, prop, value) => {
|
|
518
|
+
if (boundToStateProps.includes(prop.toString())) {
|
|
519
|
+
targetControl._ignoreStatePropertyUpdate = true;
|
|
520
|
+
targetControl.setProperty(prop.toString(), value);
|
|
521
|
+
targetControl._ignoreStatePropertyUpdate = false;
|
|
522
|
+
}
|
|
483
523
|
const setResult = setStateModel.setProperty(`/${prop.toString()}`, value);
|
|
484
524
|
targetControl._updateStateDebounced(prop.toString());
|
|
485
525
|
return setResult;
|
|
@@ -496,6 +536,16 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
496
536
|
...obj.metadata.statePropertyDefaultValue
|
|
497
537
|
};
|
|
498
538
|
}
|
|
539
|
+
const fnSetProperty = targetControl.setProperty;
|
|
540
|
+
if (boundToStateProps.length > 0) {
|
|
541
|
+
targetControl.setProperty = function (sPropertyName, oValue, bSuppressInvalidate) {
|
|
542
|
+
if (boundToStateProps.includes(sPropertyName) && !this._ignoreStatePropertyUpdate) {
|
|
543
|
+
var _obj$metadata2;
|
|
544
|
+
this[(_obj$metadata2 = obj.metadata) === null || _obj$metadata2 === void 0 ? void 0 : _obj$metadata2.stateProperty][sPropertyName] = oValue;
|
|
545
|
+
}
|
|
546
|
+
return fnSetProperty.call(this, sPropertyName, oValue, bSuppressInvalidate);
|
|
547
|
+
};
|
|
548
|
+
}
|
|
499
549
|
}
|
|
500
550
|
}
|
|
501
551
|
|
|
@@ -507,7 +557,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
507
557
|
* @returns The metadata class
|
|
508
558
|
*/
|
|
509
559
|
function registerUI5Metadata(clazz, name, inObj) {
|
|
510
|
-
var _clazz$getMetadata, _clazz$getMetadata2, _inObj$metadata, _clazz$metadata, _obj$
|
|
560
|
+
var _clazz$getMetadata, _clazz$getMetadata2, _inObj$metadata, _clazz$metadata, _obj$metadata3;
|
|
511
561
|
if ((_clazz$getMetadata = clazz.getMetadata) !== null && _clazz$getMetadata !== void 0 && _clazz$getMetadata.call(clazz).isA("sap.ui.core.mvc.ControllerExtension")) {
|
|
512
562
|
Object.getOwnPropertyNames(inObj).forEach(objName => {
|
|
513
563
|
const descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
|
|
@@ -543,7 +593,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
543
593
|
}
|
|
544
594
|
}
|
|
545
595
|
});
|
|
546
|
-
if ((_obj$
|
|
596
|
+
if ((_obj$metadata3 = obj.metadata) !== null && _obj$metadata3 !== void 0 && _obj$metadata3.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
|
|
547
597
|
for (const cExtName in obj.metadata.controllerExtensions) {
|
|
548
598
|
obj[cExtName] = obj.metadata.controllerExtensions[cExtName];
|
|
549
599
|
}
|
|
@@ -721,4 +771,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
721
771
|
}
|
|
722
772
|
return _exports;
|
|
723
773
|
}, false);
|
|
724
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiX2luaXRpYWxpemVyIiwiX3JlZiIsInN0YXRlUHJvcGVydHkiLCJ3cml0YWJsZSIsInN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWUiLCJpbml0aWFsaXplciIsImNhbGwiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJfaW5pdGlhbGl6ZXIyIiwiX3JlZjIiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwiX2luaXRpYWxpemVyMyIsIl9yZWYzIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhc3NvY2lhdGlvbiIsInVpNUFzc29jaWF0aW9uTWV0YWRhdGEiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJpbnRlcmZhY2VOYW1lIiwieG1sRXZlbnRIYW5kbGVyIiwicHJvcGVydHlrZXkiLCJjdXJyZW50Q29uc3RydWN0b3IiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImRlZmluZVVJNUNsYXNzIiwic1RhcmdldCIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsIl9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSIsImpzb25Nb2RlbCIsInByb3AiLCJwYXRoSW5Nb2RlbCIsIm9PYmoiLCJkZWVwQ2xvbmUiLCJnZXRPYmplY3QiLCJvVGFyZ2V0IiwidmFsdWUiLCJ2YWx1ZU9mIiwiQm9vbGVhbiIsIlByb3h5IiwicCIsInJlY2VpdmVyIiwicmVmIiwiUmVmbGVjdCIsImJpbmQiLCJpc05hTiIsIk51bWJlciIsIl9fYmluZGluZ0luZm8iLCJtb2RlbCIsInBhdGgiLCJfY3JlYXRlU3RhdGVQcm9wZXJ0eSIsIm9iaiIsIl9vYmokbWV0YWRhdGEiLCJzdGF0ZU1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJ1cGRhdGluZ1N0YXRlIiwiX3VwZGF0ZVN0YXRlIiwiX3VwZGF0ZVN0YXRlVGltZXIiLCJfb25TdGF0ZUNoYW5nZSIsIl9yZWY0Iiwib25TdGF0ZUNoYW5nZSIsIl9jaGFuZ2VkUHJvcHMiLCJfdXBkYXRlU3RhdGVEZWJvdW5jZWQiLCJjaGFuZ2VkUHJvcCIsImluY2x1ZGVzIiwic2V0VGltZW91dCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0U3RhdGVNb2RlbCIsInNldFJlc3VsdCIsInNldFByb3BlcnR5IiwiY2xhenoiLCJuYW1lIiwiaW5PYmoiLCJfY2xhenokZ2V0TWV0YWRhdGEiLCJfY2xhenokZ2V0TWV0YWRhdGEyIiwiX2luT2JqJG1ldGFkYXRhIiwiX2NsYXp6JG1ldGFkYXRhIiwiX29iaiRtZXRhZGF0YTIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsIm9iak5hbWUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJiYXNlVHlwZSIsImdldFByb3RvdHlwZU9mIiwiZ2V0U3RlcmVvdHlwZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInJlbmRlcmVyIiwicmVuZGVyIiwiYXBpVmVyc2lvbiIsImtleXMiLCJlIiwiY0V4dE5hbWUiLCJvdXRwdXQiLCJleHRlbmQiLCJmbkluaXQiLCJpbml0IiwiZm5BZnRlckluaXQiLCJhZnRlckluaXQiLCJfdGhpcyIsIl9sZW4yIiwiX2tleTIiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJwcm9wZXJ0eURlZiIsInByb3BlcnR5RGVmYXVsdCIsIl9iaW5kaW5nUHJvcGVydGllcyIsInYiLCJtUHJvcGVydGllcyIsInByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eSIsImJpbmRpbmdQcm9wZXJ0eVZhbHVlIiwicHJvcFZhbHVlIiwiX2FwcGx5aW5nU2V0dGluZ3MiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJhZ2dyZWdhdGlvbkRlZiIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25Db250ZW50IiwiZ2V0QWdncmVnYXRpb24iLCJhQXNzb2NpYXRpb25LZXlzIiwiYXNzb2NpYXRpb25LZXkiLCJzZXRBc3NvY2lhdGlvbiIsImdldEFzc29jaWF0aW9uIiwicmVmZXJlbmNlUHJvcGVydGllcyIsIm1ldGhvZE5hbWUiLCJtZXRob2REZWZpbml0aW9uIiwibWV0aG9kSG9sZGVyIiwibWV0aG9kQXJyYXlzIiwicmV2ZXJzZSIsIl9sZW4zIiwibWV0aG9kQXJncyIsIl9rZXkzIiwiYXJnIiwib0V4dGVuc2lvbiIsInBvbCIsIl9sZW40IiwiX2tleTQiLCJvQ2xhc3MiLCJNZXRhZGF0YSIsImNyZWF0ZUNsYXNzIiwidWlkIiwiQ29udHJvbGxlck1ldGFkYXRhIiwiX3N0YXRpY092ZXJyaWRlIiwiX292ZXJyaWRlIiwiT2JqZWN0UGF0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2xhc3NTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBob29rYWJsZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWV0YWRhdGFcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IENvbnRyb2xsZXJNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJNZXRhZGF0YVwiO1xuaW1wb3J0IHR5cGUgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG50eXBlIE92ZXJyaWRlRGVmaW5pdGlvbiA9IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPjtcbnR5cGUgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb247XG5cdHB1YmxpYz86IGJvb2xlYW47XG5cdGZpbmFsPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOb25BYnN0cmFjdENsYXNzPFQ+ID0gUGljazxULCBrZXlvZiBUPiAmIChuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gVCk7XG5cbnR5cGUgVUk1UHJvcGVydHlNZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRiaW5kYWJsZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdGJ5VmFsdWU/OiBib29sZWFuO1xuXHRpc0JpbmRpbmdJbmZvPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGFsdFR5cGVzPzogc3RyaW5nW107XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0aXNEZWZhdWx0PzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0ZGVmYXVsdENsYXNzPzogdW5rbm93bjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xuXHR2aXNpYmlsaXR5Pzogc3RyaW5nO1xuXHRmb3J3YXJkaW5nPzogb2JqZWN0O1xufTtcbmV4cG9ydCB0eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0aW9uPzogc3RyaW5nO1xuXHRjb250cm9sbGVyRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgdHlwZW9mIENvbnRyb2xsZXJFeHRlbnNpb24gfCBGdW5jdGlvbj47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGE+O1xuXHRyZWZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblx0YXNzb2NpYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhPjtcblx0bWV0aG9kczogUmVjb3JkPHN0cmluZywgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24+O1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIHt9Pjtcblx0aW50ZXJmYWNlczogc3RyaW5nW107XG5cdGxpYnJhcnk/OiBzdHJpbmc7XG5cdGRlc2lnbnRpbWU/OiBzdHJpbmc7XG5cdGNvbmZpZz86IHtcblx0XHRmdWxsV2lkdGg/OiBib29sZWFuO1xuXHR9O1xuXHRzdGF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuXHRzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0bWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmtub3duO1xuXHRyZXR1cm5UeXBlcz86IHN0cmluZ1tdO1xuXHRidWlsZGluZ0Jsb2NrTWV0YWRhdGE/OiB1bmtub3duO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc29yRGVzY3JpcHRvcjxUPiA9IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+ICYgeyBpbml0aWFsaXplcj86ICgpID0+IFQgfTtcbnR5cGUgVUk1Q29udHJvbGxlckRlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRvdmVycmlkZXM/OiB7IGV4dGVuc2lvbj86IFJlY29yZDxzdHJpbmcsIE92ZXJyaWRlRGVmaW5pdGlvbj4gfSAmIHtcblx0XHRbazogc3RyaW5nXTogRnVuY3Rpb247XG5cdH07XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1Q29udHJvbERlZmluaXRpb24gPSB7XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0b3ZlcnJpZGU/OiB1bmtub3duO1xuXHRyZW5kZXJlcj86IEZ1bmN0aW9uO1xufTtcblxudHlwZSBVSTVBUElDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xuXHRfX2FwaVJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59ICYge1xuXHRbazogc3RyaW5nXTogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBYTUxFdmVudEhvbGRlciA9IHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xufTtcblxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFRTIGNvbXBpbGVyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBDb252ZXJ0Q29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIiA/IHN0cmluZyA6IFRbS107XG59O1xudHlwZSBDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQ29udGV4dCB8IHVuZGVmaW5lZCA/IHN0cmluZyB8IHVuZGVmaW5lZCA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2ZCdWlsZGluZ0Jsb2NrPFQ+ID0gQ29udGV4dFRvU3RyaW5nPFByb3BlcnRpZXNPZjxUPj47XG5leHBvcnQgdHlwZSBTdHJpY3RQcm9wZXJ0aWVzT2Y8VD4gPSBQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+PjtcbmV4cG9ydCB0eXBlIFVJNUFjY2Vzc29yczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgZ2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuZXhwb3J0IHR5cGUgVUk1U2V0dGVyczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgc2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBzZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICh2YWx1ZTogVFtQXSkgPT4gVDtcbn07XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IHtcblx0bmV3IChwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG5cdG5ldyAoc0lkOiBzdHJpbmcsIHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcbn0gJiBUICZcblx0VUk1QWNjZXNzb3JzPFQ+ICZcblx0VUk1U2V0dGVyczxUPjtcblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24gPSBcIkluc3RlYWRcIiB8IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIkFmdGVyQXN5bmNcIiB8IFwiQmVmb3JlQXN5bmNcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHJlZmVyZW5jZXM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgPz8ge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdGhhdCB3aWxsIGZpbmQgdGhlIGNvcnJlY3QgQVBJIG9iamVjdCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250cm9sIGhpZXJhcmNoeS5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXIgZ2V0QVBJIGZ1bmN0aW9uIGZvciB0aGlzIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVHZXRBUElGdW5jdGlvbih0YXJnZXQ6IFVJNUFQSUNvbnRyb2wpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgVUk1QVBJQ29udHJvbD4oXG5cdFx0dGhpczogVUk1QVBJQ29udHJvbCxcblx0XHRvRXZlbnQ6IFVJNUV2ZW50LFxuXHRcdGFwaUZRTjogc3RyaW5nID0gdGFyZ2V0LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpXG5cdCk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdGlmICh0YXJnZXQuX2dldEFQSUV4dGVuc2lvbikge1xuXHRcdFx0b1NvdXJjZSA9IHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKG9Tb3VyY2UpID8/IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHdoaWxlIChvU291cmNlICYmICFvU291cmNlLmlzQTxUPihhcGlGUU4pICYmIG9Tb3VyY2UuZ2V0UGFyZW50KSB7XG5cdFx0XHRpZiAodGhpcy5pc0RlcGVuZGVudEJvdW5kKSB7XG5cdFx0XHRcdGNvbnN0IG9EZXBlbmRlbnRzID0gKG9Tb3VyY2UgYXMgQ29udHJvbCkuZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0XHRjb25zdCBoYXNDb3JyZWN0RGVwZW5kZW50ID0gb0RlcGVuZGVudHMuZmluZCgob0RlcGVuZGVudDogVUk1RWxlbWVudCkgPT4gb0RlcGVuZGVudC5pc0EoYXBpRlFOKSk7XG5cdFx0XHRcdGlmIChoYXNDb3JyZWN0RGVwZW5kZW50KSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IGhhc0NvcnJlY3REZXBlbmRlbnQgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvU291cmNlIHx8ICFvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHRjb25zdCBvU291cmNlTWFwID0gdGhpcy5pbnN0YW5jZU1hcC5nZXQodGhpcykgYXMgVFtdO1xuXHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2VNYXA/LltvU291cmNlTWFwLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0Q29udHJvbDtcblx0XHRpZiAob1NvdXJjZSAmJiBvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sID0gb1NvdXJjZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG5cdH07XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHdoZW4gYW4geG1sRXZlbnRIYW5kbGVyIGlzIGRlZmluZWQsIHRoZSBgZ2V0QVBJYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBhc3NpZ25lZC5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxkIGhvbGQgdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuY29uc3QgZW5zdXJlR2V0QVBJID0gZnVuY3Rpb24gKHRhcmdldDogVUk1QVBJQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoIXRhcmdldC5fX2FwaVJlZ2lzdGVyZWQpIHtcblx0XHR0YXJnZXQuX19hcGlSZWdpc3RlcmVkID0gdHJ1ZTtcblx0XHR0YXJnZXQuaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPigpO1xuXHRcdHRhcmdldC5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKF9pbnN0YW5jZTogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGlmICghdGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlTWFwLnNldChfaW5zdGFuY2UuY29uc3RydWN0b3IsIFtdKTtcblx0XHRcdH1cblx0XHRcdCh0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpIGFzIG9iamVjdFtdKS5wdXNoKF9pbnN0YW5jZSk7XG5cdFx0fTtcblx0XHR0YXJnZXQuZ2V0QVBJID0gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldCk7XG5cdH1cbn07XG5cbnR5cGUgRXh0ZW5kV2l0aE9iamVjdDxULCBLPiA9IFQgZXh0ZW5kcyBvYmplY3QgPyBLICYgeyBbVEtleSBpbiBrZXlvZiBUXT86IEJpbmRpbmdJbmZvSG9sZGVyPFRbVEtleV0+IH0gOiBLO1xuXG5leHBvcnQgdHlwZSBTdGF0ZU9mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEFycmF5PGluZmVyIFU+IHwgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IEV4dGVuZFdpdGhPYmplY3Q8VSwgUmVhZG9ubHlBcnJheTxVPj4gOiBUW0tdO1xufTtcbmV4cG9ydCB0eXBlIEJpbmRpbmdJbmZvSG9sZGVyPFQ+ID0gVCAmIHtcblx0X19iaW5kaW5nSW5mbzoge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRtb2RlbDogc3RyaW5nO1xuXHRcdHR5cGU6IFQ7XG5cdH07XG59O1xuXG4vKipcbiAqIEFsbG93cyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgaG9sZCB0aGUgY29udHJvbCBzdGF0ZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEBleHBlcmltZW50YWxcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uIFRoZSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBVSTUgZGVmYXVsdHMgdGhpcyB0byB0cnVlIGJ1dCB0aGlzIGlzIGp1c3Qgd2VpcmQuLi5cblx0XHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBhZ2dyZWdhdGlvbkRlZmluaXRpb247XG5cdFx0fVxuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24uaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQ/Lltwcm9wZXJ0eWtleS50b1N0cmluZygpXSguLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufVxuXG50eXBlIFVJNUNvbnRyb2xBbmRNb3JlID0gdHlwZW9mIENvbnRyb2wgJlxuXHRGdW5jdGlvbiAmIHtcblx0XHRyZWdpc3Rlckluc3RhbmNlPzogRnVuY3Rpb247XG5cdFx0b3ZlcnJpZGU/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZTxUIGV4dGVuZHMgVUk1RWxlbWVudD4oKTogUmVmPFQ+IHtcblx0cmV0dXJuIHtcblx0XHRjdXJyZW50OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuXHRcdHNldEN1cnJlbnQ6IGZ1bmN0aW9uIChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZCB7XG5cdFx0XHR0aGlzLmN1cnJlbnQgPSBvQ29udHJvbEluc3RhbmNlO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgdGhyb3VnaCBqc3ggdGVtcGxhdGluZy5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWZlcmVuY2UoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRpZiAoQmFzZU9iamVjdC5pc09iamVjdEEodGFyZ2V0LCBcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdGlmICghbWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyID0gY3JlYXRlUmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG5mdW5jdGlvbiBfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkoanNvbk1vZGVsOiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24ge1xuXHRjb25zdCBwYXRoSW5Nb2RlbCA9IGAvJHtwcm9wLnRvU3RyaW5nKCl9YDtcblx0Y29uc3Qgb09iaiA9IGRlZXBDbG9uZShqc29uTW9kZWwuZ2V0T2JqZWN0KHBhdGhJbk1vZGVsKSk7XG5cdGxldCBvVGFyZ2V0O1xuXHRpZiAodHlwZW9mIG9PYmogPT09IFwic3RyaW5nXCIpIHtcblx0XHRvVGFyZ2V0ID0geyB2YWx1ZTogb09iaiB9O1xuXHRcdG9UYXJnZXQudG9TdHJpbmcgPSBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdH07XG5cdFx0b1RhcmdldC52YWx1ZU9mID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IHsgdmFsdWU6IG9PYmogfTtcblx0XHRvVGFyZ2V0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuXHRcdH07XG5cdFx0b1RhcmdldC52YWx1ZU9mID0gZnVuY3Rpb24gKCk6IG51bWJlciB7XG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcImJvb2xlYW5cIikge1xuXHRcdG9UYXJnZXQgPSBuZXcgQm9vbGVhbihvT2JqKTtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0bW9kZWw6IFwiJGNvbXBvbmVudFN0YXRlXCIsXG5cdFx0cGF0aDogcGF0aEluTW9kZWxcblx0fTtcblx0cmV0dXJuIG9UYXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdGF0ZVByb3BlcnR5KFxuXHRvYmo6IFVJNUNvbnRyb2xEZWZpbml0aW9uLFxuXHR0YXJnZXRDb250cm9sOiBDb250cm9sICYge1xuXHRcdF91cGRhdGVTdGF0ZTogRnVuY3Rpb247XG5cdFx0X3VwZGF0ZVN0YXRlRGVib3VuY2VkOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVUaW1lcjogdW5rbm93bjtcblx0XHRfY2hhbmdlZFByb3BzPzogc3RyaW5nW107XG5cdH1cbik6IHZvaWQge1xuXHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0Y29uc3Qgc3RhdGVNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdHRhcmdldENvbnRyb2wuc2V0TW9kZWwoc3RhdGVNb2RlbCwgXCIkY29tcG9uZW50U3RhdGVcIik7XG5cdFx0bGV0IHVwZGF0aW5nU3RhdGUgPSBmYWxzZTtcblx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3VwZGF0ZVN0YXRlVGltZXI7XG5cdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IHRydWU7XG5cdFx0XHRcdGF3YWl0ICh0aGlzIGFzIHsgb25TdGF0ZUNoYW5nZT86IEZ1bmN0aW9uIH0pLm9uU3RhdGVDaGFuZ2U/Lih0aGlzLl9jaGFuZ2VkUHJvcHMpO1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQgPSBmdW5jdGlvbiAoY2hhbmdlZFByb3A6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0dGhpcy5fY2hhbmdlZFByb3BzID8/PSBbXTtcblx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMucHVzaChjaGFuZ2VkUHJvcCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVN0YXRlKCk7XG5cdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHksIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRcdFx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZSAhPT0gYmluZGluZ1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZmF1bHQ7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25EZWYgPSBvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlID0gdGhpc1thZ2dyZWdhdGlvbktleV0gPz8gYWdncmVnYXRpb25EZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgYXMgVUk1RWxlbWVudCk/LmlzQSkge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbYWdncmVnYXRpb25LZXldID0gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9ucyk7XG5cdFx0XHRhQXNzb2NpYXRpb25LZXlzLmZvckVhY2goKGFzc29jaWF0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhc3NvY2lhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpO1xuXHRcdFx0cmVmZXJlbmNlUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IGNyZWF0ZVJlZmVyZW5jZSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSBvYmoubWV0YWRhdGEubWV0aG9kc1ttZXRob2ROYW1lXTtcblx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5tZXRob2RIb2xkZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdID0gW3RoaXNbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0ucHVzaCh2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFzeW5jICguLi5tZXRob2RBcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2RBcnJheXMgPSB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RBcnJheXMucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUE4SUEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hDLE1BQU0sRUFBRSxDQUFDLENBQUM7TUFDVkMsVUFBVSxFQUFFO0lBQ2IsQ0FBQyxFQUNEVixNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDLENBQ3JCLENBQWlDO0lBQ2pDLE9BQU9ELE1BQU0sQ0FBQ0MsUUFBUTtFQUN2QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVSxxQkFBcUJBLENBQUNYLE1BQXFCLEVBQUU7SUFDckQsT0FBTyxVQUVOWSxNQUFnQixFQUVBO01BQUEsSUFEaEJDLE1BQWMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdkLE1BQU0sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BRS9DLElBQUlDLE9BQU8sR0FBR1AsTUFBTSxDQUFDUSxTQUFTLENBQUMsQ0FBeUI7TUFDeEQsSUFBSXBCLE1BQU0sQ0FBQ3FCLGdCQUFnQixFQUFFO1FBQzVCRixPQUFPLEdBQUduQixNQUFNLENBQUNxQixnQkFBZ0IsQ0FBQ0YsT0FBTyxDQUFDLElBQUlBLE9BQU87TUFDdEQ7TUFDQSxPQUFPQSxPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDRyxHQUFHLENBQUlULE1B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
|
|
774
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiX2luaXRpYWxpemVyIiwiX3JlZiIsInN0YXRlUHJvcGVydHkiLCJFcnJvciIsIndyaXRhYmxlIiwic3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSIsImluaXRpYWxpemVyIiwiY2FsbCIsIl9leHBvcnRzIiwibWV0aG9kT3ZlcnJpZGUiLCJleHRlbnNpb25OYW1lIiwib3ZlcnJpZGUiLCJvdmVycmlkZXMiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwidG9TdHJpbmciLCJleHRlbnNpYmxlIiwib3ZlcnJpZGVFeGVjdXRpb24iLCJkZXNjcmlwdG9yIiwiaG9va2FibGUiLCJwdWJsaWNFeHRlbnNpb24iLCJlbnVtZXJhYmxlIiwicHVibGljIiwicHJpdmF0ZUV4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZmluYWwiLCJ1c2luZ0V4dGVuc2lvbiIsImV4dGVuc2lvbkNsYXNzIiwiZXZlbnQiLCJldmVudEtleSIsInByb3BlcnR5IiwiYXR0cmlidXRlRGVmaW5pdGlvbiIsIl9pbml0aWFsaXplcjIiLCJfcmVmMiIsImJpbmRhYmxlIiwiaXNCaW5kaW5nSW5mbyIsImdyb3VwIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJfaW5pdGlhbGl6ZXIzIiwiX3JlZjMiLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwiaXNBcnJheSIsImNvbmNhdCIsInJlZ2lzdGVyVUk1TWV0YWRhdGEiLCJtaXhpbiIsImludGVyZmFjZUNsYXNzIiwiYmFzZUN0b3IiLCJfaW50ZXJmYWNlQ2xhc3MkcHJvdG8iLCJfaW50ZXJmYWNlQ2xhc3MkcHJvdG8yIiwiX2ludGVyZmFjZUNsYXNzJHByb3RvMyIsIl9pbnRlcmZhY2VDbGFzcyRwcm90bzQiLCJleHRlbmQiLCJnZXRJbnRlcmZhY2VOYW1lIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJuYW1lIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJzZXR1cE1peGluIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsIl9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSIsImpzb25Nb2RlbCIsInByb3AiLCJwYXRoSW5Nb2RlbCIsIm9PYmoiLCJkZWVwQ2xvbmUiLCJnZXRPYmplY3QiLCJvVGFyZ2V0IiwibW9kZWwiLCJQcm94eSIsInAiLCJyZWNlaXZlciIsInJlZiIsIlJlZmxlY3QiLCJiaW5kIiwiaXNOYU4iLCJOdW1iZXIiLCJfX2JpbmRpbmdJbmZvIiwicGF0aCIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwiX29iaiRtZXRhZGF0YSIsInN0YXRlTW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsInVwZGF0aW5nU3RhdGUiLCJib3VuZFRvU3RhdGVQcm9wcyIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsIl9ldnQkZ2V0UGFyYW1ldGVyIiwiZ2V0UGFyYW1ldGVyIiwic3Vic3RyaW5nIiwiaW5jbHVkZXMiLCJzZXRQcm9wZXJ0eSIsIl91cGRhdGVTdGF0ZSIsIl91cGRhdGVTdGF0ZVRpbWVyIiwiX29uU3RhdGVDaGFuZ2UiLCJfcmVmNCIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiX3VwZGF0ZVN0YXRlRGVib3VuY2VkIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiY29uZmlndXJhYmxlIiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJmblNldFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIm9WYWx1ZSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJfb2JqJG1ldGFkYXRhMiIsImNsYXp6IiwiaW5PYmoiLCJfY2xhenokZ2V0TWV0YWRhdGEiLCJfY2xhenokZ2V0TWV0YWRhdGEyIiwiX2luT2JqJG1ldGFkYXRhIiwiX2NsYXp6JG1ldGFkYXRhIiwiX29iaiRtZXRhZGF0YTMiLCJvYmpOYW1lIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxudHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGJpbmRhYmxlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdGlzQmluZGluZ0luZm8/OiBib29sZWFuO1xuXHRiaW5kVG9TdGF0ZT86IHN0cmluZztcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGFsdFR5cGVzPzogc3RyaW5nW107XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0aXNEZWZhdWx0PzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0ZGVmYXVsdENsYXNzPzogdW5rbm93bjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xuXHR2aXNpYmlsaXR5Pzogc3RyaW5nO1xuXHRmb3J3YXJkaW5nPzogb2JqZWN0O1xufTtcbmV4cG9ydCB0eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0aW9uPzogc3RyaW5nO1xuXHRjb250cm9sbGVyRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgdHlwZW9mIENvbnRyb2xsZXJFeHRlbnNpb24gfCBGdW5jdGlvbj47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGE+O1xuXHRyZWZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblx0YXNzb2NpYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhPjtcblx0bWV0aG9kczogUmVjb3JkPHN0cmluZywgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24+O1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIHt9Pjtcblx0aW50ZXJmYWNlczogc3RyaW5nW107XG5cdGxpYnJhcnk/OiBzdHJpbmc7XG5cdGRlc2lnbnRpbWU/OiBzdHJpbmc7XG5cdGNvbmZpZz86IHtcblx0XHRmdWxsV2lkdGg/OiBib29sZWFuO1xuXHR9O1xuXHRzdGF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuXHRzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0bWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmtub3duO1xuXHRyZXR1cm5UeXBlcz86IHN0cmluZ1tdO1xuXHRidWlsZGluZ0Jsb2NrTWV0YWRhdGE/OiB1bmtub3duO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc29yRGVzY3JpcHRvcjxUPiA9IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+ICYgeyBpbml0aWFsaXplcj86ICgpID0+IFQgfTtcbnR5cGUgVUk1Q29udHJvbGxlckRlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRvdmVycmlkZXM/OiB7IGV4dGVuc2lvbj86IFJlY29yZDxzdHJpbmcsIE92ZXJyaWRlRGVmaW5pdGlvbj4gfSAmIHtcblx0XHRbazogc3RyaW5nXTogRnVuY3Rpb247XG5cdH07XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1Q29udHJvbERlZmluaXRpb24gPSB7XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0b3ZlcnJpZGU/OiB1bmtub3duO1xuXHRyZW5kZXJlcj86IEZ1bmN0aW9uO1xufTtcblxudHlwZSBVSTVBUElDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xuXHRfX2FwaVJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59ICYge1xuXHRbazogc3RyaW5nXTogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBYTUxFdmVudEhvbGRlciA9IHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xufTtcblxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFRTIGNvbXBpbGVyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBDb252ZXJ0Q29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIiA/IHN0cmluZyA6IFRbS107XG59O1xudHlwZSBDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQ29udGV4dCB8IHVuZGVmaW5lZCA/IHN0cmluZyB8IHVuZGVmaW5lZCA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2ZCdWlsZGluZ0Jsb2NrPFQ+ID0gQ29udGV4dFRvU3RyaW5nPFByb3BlcnRpZXNPZjxUPj47XG5leHBvcnQgdHlwZSBTdHJpY3RQcm9wZXJ0aWVzT2Y8VD4gPSBQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+PjtcbmV4cG9ydCB0eXBlIFVJNUFjY2Vzc29yczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgZ2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuZXhwb3J0IHR5cGUgVUk1U2V0dGVyczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgc2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBzZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICh2YWx1ZTogVFtQXSkgPT4gVDtcbn07XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IHtcblx0bmV3IChwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG5cdG5ldyAoc0lkOiBzdHJpbmcsIHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcbn0gJiBUICZcblx0VUk1QWNjZXNzb3JzPFQ+ICZcblx0VUk1U2V0dGVyczxUPjtcblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24gPSBcIkluc3RlYWRcIiB8IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIkFmdGVyQXN5bmNcIiB8IFwiQmVmb3JlQXN5bmNcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHJlZmVyZW5jZXM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgPz8ge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdGhhdCB3aWxsIGZpbmQgdGhlIGNvcnJlY3QgQVBJIG9iamVjdCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250cm9sIGhpZXJhcmNoeS5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXIgZ2V0QVBJIGZ1bmN0aW9uIGZvciB0aGlzIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVHZXRBUElGdW5jdGlvbih0YXJnZXQ6IFVJNUFQSUNvbnRyb2wpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgVUk1QVBJQ29udHJvbD4oXG5cdFx0dGhpczogVUk1QVBJQ29udHJvbCxcblx0XHRvRXZlbnQ6IFVJNUV2ZW50LFxuXHRcdGFwaUZRTjogc3RyaW5nID0gdGFyZ2V0LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpXG5cdCk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdGlmICh0YXJnZXQuX2dldEFQSUV4dGVuc2lvbikge1xuXHRcdFx0b1NvdXJjZSA9IHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKG9Tb3VyY2UpID8/IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHdoaWxlIChvU291cmNlICYmICFvU291cmNlLmlzQTxUPihhcGlGUU4pICYmIG9Tb3VyY2UuZ2V0UGFyZW50KSB7XG5cdFx0XHRpZiAodGhpcy5pc0RlcGVuZGVudEJvdW5kKSB7XG5cdFx0XHRcdGNvbnN0IG9EZXBlbmRlbnRzID0gKG9Tb3VyY2UgYXMgQ29udHJvbCkuZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0XHRjb25zdCBoYXNDb3JyZWN0RGVwZW5kZW50ID0gb0RlcGVuZGVudHMuZmluZCgob0RlcGVuZGVudDogVUk1RWxlbWVudCkgPT4gb0RlcGVuZGVudC5pc0EoYXBpRlFOKSk7XG5cdFx0XHRcdGlmIChoYXNDb3JyZWN0RGVwZW5kZW50KSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IGhhc0NvcnJlY3REZXBlbmRlbnQgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvU291cmNlIHx8ICFvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHRjb25zdCBvU291cmNlTWFwID0gdGhpcy5pbnN0YW5jZU1hcC5nZXQodGhpcykgYXMgVFtdO1xuXHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2VNYXA/LltvU291cmNlTWFwLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0Q29udHJvbDtcblx0XHRpZiAob1NvdXJjZSAmJiBvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sID0gb1NvdXJjZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG5cdH07XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHdoZW4gYW4geG1sRXZlbnRIYW5kbGVyIGlzIGRlZmluZWQsIHRoZSBgZ2V0QVBJYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBhc3NpZ25lZC5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxkIGhvbGQgdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuY29uc3QgZW5zdXJlR2V0QVBJID0gZnVuY3Rpb24gKHRhcmdldDogVUk1QVBJQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoIXRhcmdldC5fX2FwaVJlZ2lzdGVyZWQpIHtcblx0XHR0YXJnZXQuX19hcGlSZWdpc3RlcmVkID0gdHJ1ZTtcblx0XHR0YXJnZXQuaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPigpO1xuXHRcdHRhcmdldC5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKF9pbnN0YW5jZTogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGlmICghdGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlTWFwLnNldChfaW5zdGFuY2UuY29uc3RydWN0b3IsIFtdKTtcblx0XHRcdH1cblx0XHRcdCh0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpIGFzIG9iamVjdFtdKS5wdXNoKF9pbnN0YW5jZSk7XG5cdFx0fTtcblx0XHR0YXJnZXQuZ2V0QVBJID0gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldCk7XG5cdH1cbn07XG5cbnR5cGUgRXh0ZW5kV2l0aE9iamVjdDxULCBLPiA9IFQgZXh0ZW5kcyBvYmplY3QgPyBLICYgeyBbVEtleSBpbiBrZXlvZiBUXT86IEJpbmRpbmdJbmZvSG9sZGVyPFRbVEtleV0+IH0gOiBLO1xuXG5leHBvcnQgdHlwZSBTdGF0ZU9mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEFycmF5PGluZmVyIFU+IHwgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IEV4dGVuZFdpdGhPYmplY3Q8VSwgUmVhZG9ubHlBcnJheTxVPj4gOiBUW0tdO1xufTtcbmV4cG9ydCB0eXBlIEJpbmRpbmdJbmZvSG9sZGVyPFQ+ID0gVCAmIHtcblx0X19iaW5kaW5nSW5mbzoge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRtb2RlbDogc3RyaW5nO1xuXHRcdHR5cGU6IFQ7XG5cdH07XG59O1xuXG4vKipcbiAqIEFsbG93cyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgaG9sZCB0aGUgY29udHJvbCBzdGF0ZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEBleHBlcmltZW50YWxcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uIFRoZSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBVSTUgZGVmYXVsdHMgdGhpcyB0byB0cnVlIGJ1dCB0aGlzIGlzIGp1c3Qgd2VpcmQuLi5cblx0XHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBhZ2dyZWdhdGlvbkRlZmluaXRpb247XG5cdFx0fVxuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24uaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQ/Lltwcm9wZXJ0eWtleS50b1N0cmluZygpXSguLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufVxuXG50eXBlIFVJNUNvbnRyb2xBbmRNb3JlID0gdHlwZW9mIENvbnRyb2wgJlxuXHRGdW5jdGlvbiAmIHtcblx0XHRyZWdpc3Rlckluc3RhbmNlPzogRnVuY3Rpb247XG5cdFx0b3ZlcnJpZGU/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYTogdW5rbm93bltdKSA9PiBUO1xuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXHRcdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGUuZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdFx0aWYgKGludGVyZmFjZU5hbWUpIHtcblx0XHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdGlmIChuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIgJiYgbmFtZSAhPT0gXCJzZXR1cE1peGluXCIpIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlLCBuYW1lKSB8fCBPYmplY3QuY3JlYXRlKG51bGwpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gSG9vayB0byBhZGQgcG90ZW50aWFsbHkgbW9yZSBsb2dpYyB0byB0aGUgbWl4aW5cblx0XHRpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGUuc2V0dXBNaXhpbj8uKGJhc2VDdG9yKTtcblx0XHRyZXR1cm4gYmFzZUN0b3I7XG5cdH0gYXMgQ2xhc3NEZWNvcmF0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlY2VpdmluZyBjb250cm9sLlxuXHQgKiBJZiBub3QgZGVmaW5lZCwgdGhlIGludGVyZmFjZSB3aWxsIG5vdCBiZSBhZGRlZC5cblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZVxuXHQgKi9cblx0Z2V0SW50ZXJmYWNlTmFtZT8oKTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBIb29rIHRvIGFkZCBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpbi5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBjb250cm9scyBhcmUgY3JlYXRlZCBhbmQgY2FuIGJlIHVzZWQgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBsb2dpYyB0byB0aGUgYmFzZSBjbGFzcy5cblx0ICogQHBhcmFtIGJhc2VDbGFzcyBUaGUgYmFzZSBjbGFzcyB0aGF0IHdpbGwgYmUgZXh0ZW5kZWRcblx0ICovXG5cdHNldHVwTWl4aW4/KGJhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlPFQgZXh0ZW5kcyBVSTVFbGVtZW50PigpOiBSZWY8VD4ge1xuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFQsXG5cdFx0c2V0Q3VycmVudDogZnVuY3Rpb24gKG9Db250cm9sSW5zdGFuY2U6IFQpOiB2b2lkIHtcblx0XHRcdHRoaXMuY3VycmVudCA9IG9Db250cm9sSW5zdGFuY2U7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBvYmplY3Qgd2lsbCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgY29udHJvbCB0aHJvdWdoIGpzeCB0ZW1wbGF0aW5nLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZmVyZW5jZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXHRcdGlmIChCYXNlT2JqZWN0LmlzT2JqZWN0QSh0YXJnZXQsIFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0aWYgKCFtZXRhZGF0YS5yZWZlcmVuY2VzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRtZXRhZGF0YS5yZWZlcmVuY2VzW3Byb3BlcnR5S2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXIgPSBjcmVhdGVSZWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChwcm9wID09PSBcIl9fYmluZGluZ0luZm9cIikge1xuXHRcdHJldHVybiB7IG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvT2JqID09PSBcInN0cmluZ1wiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwibnVtYmVyXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRpZiAodHlwZW9mIG9UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVN0YXRlUHJvcGVydHkoXG5cdG9iajogVUk1Q29udHJvbERlZmluaXRpb24sXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fVxuKTogdm9pZCB7XG5cdGlmIChvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkpIHtcblx0XHRjb25zdCBzdGF0ZU1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cblx0XHR0YXJnZXRDb250cm9sLnNldE1vZGVsKHN0YXRlTW9kZWwsIFwiJGNvbXBvbmVudFN0YXRlXCIpO1xuXHRcdGxldCB1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0Y29uc3QgYm91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVmID0gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChwcm9wZXJ0eURlZi5iaW5kVG9TdGF0ZSkge1xuXHRcdFx0XHRib3VuZFRvU3RhdGVQcm9wcy5wdXNoKHByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHN0YXRlTW9kZWwuYXR0YWNoUHJvcGVydHlDaGFuZ2UoKGV2dDogTW9kZWwkUHJvcGVydHlDaGFuZ2VFdmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdFx0aWYgKHBhdGggJiYgYm91bmRUb1N0YXRlUHJvcHMuaW5jbHVkZXMocGF0aCkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eShwYXRoLCBldnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHRoZSBzdGF0ZSB0byBiZSBhcHBsaWVkIGFuZCB3YWl0IGZvciBpdCB0byBiZSBhcHBsaWVkIGluIHRlc3RzXG5cdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRkZWxldGUgdGhpcy5fdXBkYXRlU3RhdGVUaW1lcjtcblx0XHRcdGlmICghdXBkYXRpbmdTdGF0ZSkge1xuXHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0YXdhaXQgKHRoaXMgYXMgeyBvblN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfSkub25TdGF0ZUNoYW5nZT8uKHRoaXMuX2NoYW5nZWRQcm9wcyk7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA9IFtdO1xuXHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPz89IFtdO1xuXHRcdFx0aWYgKCF0aGlzLl9jaGFuZ2VkUHJvcHMuaW5jbHVkZXMoY2hhbmdlZFByb3ApKSB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5fdXBkYXRlU3RhdGVUaW1lciAmJiAhdXBkYXRpbmdTdGF0ZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGUoKTtcblx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb250cm9sLCBvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJveHkoc3RhdGVNb2RlbCwge1xuXHRcdFx0XHRcdGdldDogKHRhcmdldDogSlNPTk1vZGVsLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNldDogKHNldFN0YXRlTW9kZWw6IEpTT05Nb2RlbCwgcHJvcCwgdmFsdWUpOiBib29sZWFuID0+IHtcblx0XHRcdFx0XHRcdGlmIChib3VuZFRvU3RhdGVQcm9wcy5pbmNsdWRlcyhwcm9wLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHByb3AudG9TdHJpbmcoKSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdH1cblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eTtcblxuXHRcdGlmIChib3VuZFRvU3RhdGVQcm9wcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAoYm91bmRUb1N0YXRlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5TmFtZSkgJiYgIXRoaXMuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUpIHtcblx0XHRcdFx0XHQodGhpc1tvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkgYXMga2V5b2YgdHlwZW9mIHRhcmdldENvbnRyb2xdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzUHJvcGVydHlOYW1lXSA9IG9WYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZSAhPT0gYmluZGluZ1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZmF1bHQ7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25EZWYgPSBvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlID0gdGhpc1thZ2dyZWdhdGlvbktleV0gPz8gYWdncmVnYXRpb25EZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgYXMgVUk1RWxlbWVudCk/LmlzQSkge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbYWdncmVnYXRpb25LZXldID0gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9ucyk7XG5cdFx0XHRhQXNzb2NpYXRpb25LZXlzLmZvckVhY2goKGFzc29jaWF0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhc3NvY2lhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpO1xuXHRcdFx0cmVmZXJlbmNlUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IGNyZWF0ZVJlZmVyZW5jZSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSBvYmoubWV0YWRhdGEubWV0aG9kc1ttZXRob2ROYW1lXTtcblx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5tZXRob2RIb2xkZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdID0gW3RoaXNbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0ucHVzaCh2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFzeW5jICguLi5tZXRob2RBcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2RBcnJheXMgPSB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RBcnJheXMucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFnSkEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hDLE1BQU0sRUFBRSxDQUFDLENBQUM7TUFDVkMsVUFBVSxFQUFFO0lBQ2IsQ0FBQyxFQUNEVixNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDLENBQ3JCLENBQWlDO0lBQ2pDLE9BQU9ELE1BQU0sQ0FBQ0MsUUFBUTtFQUN2QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVSxxQkFBcUJBLENBQUNYLE1BQXFCLEVBQUU7SUFDckQsT0FBTyxVQUVOWSxNQUFnQixFQUVBO01BQUEsSUFEaEJDLE1BQWMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdkLE1BQU0sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BRS9DLElBQUlDLE9BQU8sR0FBR1AsTUFBTSxDQUFDUSxTQUFTLENBQUMsQ0FBeUI7TUFDeEQsSUFBSXBCLE1BQU0sQ0FBQ3FCLGdCQUFnQixFQUFFO1FBQzVCRixPQUFPLEdBQUduQixNQUFNLENBQUNxQixnQkFB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VUFBVSxDQUFBQyxLQUFBLElBQUF2TyxTQUFBLENBQUF1TyxLQUFBO2tCQUFBO2tCQUsxQixLQUFLLE1BQU1DLEdBQUcsSUFBSUwsWUFBWSxFQUFFO29CQUMvQixNQUFNSyxHQUFHLENBQUM5QixLQUFLLENBQUNILEtBQUksRUFBRStCLFVBQVUsQ0FBQztrQkFDbEM7Z0JBQ0QsQ0FBQztjQUNGO1lBQ0QsQ0FBQyxDQUFDO1VBQ0g7UUFDRDtNQUNEO01BQ0EzRixvQkFBb0IsQ0FBQ0MsR0FBRyxFQUFFLElBQUksQ0FBQztNQUMvQixJQUFJeUQsV0FBVyxFQUFFO1FBQ2hCQSxXQUFXLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUVySCxJQUFJLENBQUM7TUFDOUI7SUFDRCxDQUFDO0lBRUQyRixLQUFLLENBQUNySSxRQUFRLEdBQUcsVUFBVThMLFVBQW1CLEVBQVk7TUFDekQsTUFBTUMsR0FBRyxHQUFHLENBQUMsQ0FBQztNQUNiQSxHQUFHLENBQWNqTixXQUFXLEdBQUcsWUFBd0M7UUFBQSxTQUFBa04sS0FBQSxHQUFBM08sU0FBQSxDQUFBQyxNQUFBLEVBQTNCb0YsSUFBSSxPQUFBQyxLQUFBLENBQUFxSixLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7VUFBSnZKLElBQUksQ0FBQXVKLEtBQUEsSUFBQTVPLFNBQUEsQ0FBQTRPLEtBQUE7UUFBQTtRQUNoRCxPQUFPNUQsS0FBSyxDQUFDMEIsS0FBSyxDQUFDLElBQUksRUFBRXJILElBQUksQ0FBQztNQUMvQixDQUFDO01BQ0QsTUFBTXdKLE1BQU0sR0FBSUMsUUFBUSxDQUEwQ0MsV0FBVyxDQUM1RS9ELEtBQUssRUFDTCxzQkFBc0JnRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQzdCTixHQUFHLEVBQ0hPLGtCQUNELENBQUM7TUFDREosTUFBTSxDQUFDMU8sV0FBVyxDQUFDLENBQUMsQ0FBQytPLGVBQWUsR0FBR1QsVUFBVTtNQUNqREksTUFBTSxDQUFDMU8sV0FBVyxDQUFDLENBQUMsQ0FBQ2dQLFNBQVMsR0FBSW5FLEtBQUssQ0FBQzdLLFdBQVcsQ0FBQyxDQUFDLENBQTZCZ1AsU0FBUztNQUMzRixPQUFPTixNQUFNO0lBQ2QsQ0FBQztJQUVETyxVQUFVLENBQUMxTixHQUFHLENBQUNrRixJQUFJLEVBQUVzRixNQUFNLENBQUM7SUFFNUIsT0FBT0EsTUFBTTtFQUNkO0VBQUMsT0FBQTFKLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|