@sapui5/sap.fe.base 1.143.0 → 1.145.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/AnnotationEnum.js +5 -3
- package/src/sap/fe/base/AnnotationEnum.ts +5 -2
- package/src/sap/fe/base/BindingToolkit.js +345 -37
- package/src/sap/fe/base/BindingToolkit.ts +663 -55
- package/src/sap/fe/base/BuildingBlockBase.js +52 -6
- package/src/sap/fe/base/BuildingBlockBase.ts +55 -7
- package/src/sap/fe/base/ClassSupport.js +95 -18
- package/src/sap/fe/base/ClassSupport.ts +91 -21
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +5 -5
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +5 -4
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +4 -2
- package/src/sap/fe/base/jsx-runtime/jsx-xml.ts +3 -1
- package/src/sap/fe/base/jsx-runtime/jsx.js +13 -1
- package/src/sap/fe/base/jsx-runtime/jsx.ts +11 -0
- package/src/sap/fe/base/library.js +1 -1
- package/src/sap/fe/base/types/sap.fe.base-auto-ext.d.js +10 -0
- package/src/sap/fe/base/types/sap.fe.base-auto-ext.d.ts +315 -0
- package/src/sap/fe/base/types/sap.fe.base-manual-ext.d.js +9 -0
- package/src/sap/fe/base/types/sap.fe.base-manual-ext.d.ts +33 -0
|
@@ -8,6 +8,37 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var propagateHookFromMixin = HookSupport.propagateHookFromMixin;
|
|
10
10
|
var hookable = HookSupport.hookable;
|
|
11
|
+
/**
|
|
12
|
+
* Collection of decorators to support the creation of UI5 classes.
|
|
13
|
+
* @namespace
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
const classSupportNamespace = "sap.fe.base.ClassSupport";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Definition of a UI5 property metadata.
|
|
20
|
+
* @public
|
|
21
|
+
* @ui5-experimental-since 1.145.0
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Definition of a UI5 aggregation metadata.
|
|
26
|
+
* @public
|
|
27
|
+
* @ui5-experimental-since 1.145.0
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Definition of a UI5 association metadata.
|
|
32
|
+
* @public
|
|
33
|
+
* @ui5-experimental-since 1.145.0
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Returns the properties of a control.
|
|
38
|
+
* @public
|
|
39
|
+
* @ui5-experimental-since 1.145.0
|
|
40
|
+
*/
|
|
41
|
+
_exports.classSupportNamespace = classSupportNamespace;
|
|
11
42
|
const ensureMetadata = function (target) {
|
|
12
43
|
target.metadata = merge({
|
|
13
44
|
controllerExtensions: {},
|
|
@@ -76,11 +107,36 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
76
107
|
target.getAPI = prepareGetAPIFunction(target);
|
|
77
108
|
}
|
|
78
109
|
};
|
|
110
|
+
|
|
79
111
|
/**
|
|
80
|
-
*
|
|
112
|
+
* Represents the state object of a building block.
|
|
113
|
+
* @public
|
|
114
|
+
* @ui5-experimental-since 1.145.0
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Represents the state object of a building block.
|
|
119
|
+
* @public
|
|
120
|
+
* @ui5-experimental-since 1.145.0
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Type for a generic state object
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Represents the state object of a building block.
|
|
129
|
+
* @public
|
|
130
|
+
* @ui5-experimental-since 1.145.0
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Allows to define a property that holds the control state.
|
|
81
135
|
*
|
|
82
|
-
* Properties defined with this decorator
|
|
136
|
+
* Properties defined with this decorator are automatically bound to the control state when used in JSX.
|
|
83
137
|
* Arrays need to be bound using the `bindState` function.
|
|
138
|
+
* @public
|
|
139
|
+
* @ui5-experimental-since 1.145.0
|
|
84
140
|
* @returns A property decorator
|
|
85
141
|
*/
|
|
86
142
|
function defineState() {
|
|
@@ -213,8 +269,10 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
213
269
|
|
|
214
270
|
/* #region CONTROL */
|
|
215
271
|
/**
|
|
216
|
-
* Indicates that the property
|
|
272
|
+
* Indicates that the property is declared as an event on the control metadata.
|
|
217
273
|
* @returns The decorated property
|
|
274
|
+
* @public
|
|
275
|
+
* @ui5-experimental-since 1.145.0
|
|
218
276
|
*/
|
|
219
277
|
_exports.usingExtension = usingExtension;
|
|
220
278
|
function event() {
|
|
@@ -227,9 +285,11 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
227
285
|
}
|
|
228
286
|
|
|
229
287
|
/**
|
|
230
|
-
* Defines the following property in the control metadata.
|
|
288
|
+
* Defines the following property as a managed object in the control metadata.
|
|
231
289
|
* @param attributeDefinition The property definition
|
|
232
290
|
* @returns The decorated property.
|
|
291
|
+
* @public
|
|
292
|
+
* @ui5-experimental-since 1.145.0
|
|
233
293
|
*/
|
|
234
294
|
_exports.event = event;
|
|
235
295
|
function property(attributeDefinition) {
|
|
@@ -259,6 +319,8 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
259
319
|
* Defines and configures the following aggregation in the control metadata.
|
|
260
320
|
* @param aggregationDefinition The aggregation definition
|
|
261
321
|
* @returns The decorated property.
|
|
322
|
+
* @public
|
|
323
|
+
* @ui5-experimental-since 1.145.0
|
|
262
324
|
*/
|
|
263
325
|
_exports.property = property;
|
|
264
326
|
function aggregation(aggregationDefinition) {
|
|
@@ -285,6 +347,8 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
285
347
|
* Defines and configures the following association in the control metadata.
|
|
286
348
|
* @param ui5AssociationMetadata The definition of the association.
|
|
287
349
|
* @returns The decorated property
|
|
350
|
+
* @public
|
|
351
|
+
* @ui5-experimental-since 1.145.0
|
|
288
352
|
*/
|
|
289
353
|
_exports.aggregation = aggregation;
|
|
290
354
|
function association(ui5AssociationMetadata) {
|
|
@@ -303,6 +367,8 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
303
367
|
* Defines in the metadata that this control implements a specific interface.
|
|
304
368
|
* @param interfaceName The name of the implemented interface
|
|
305
369
|
* @returns The decorated method
|
|
370
|
+
* @public
|
|
371
|
+
* @ui5-experimental-since 1.144.0
|
|
306
372
|
*/
|
|
307
373
|
_exports.association = association;
|
|
308
374
|
function implementInterface(interfaceName) {
|
|
@@ -335,11 +401,13 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
335
401
|
_exports.xmlEventHandler = xmlEventHandler;
|
|
336
402
|
/**
|
|
337
403
|
* Indicates that the following class should define a UI5 control of the specified name.
|
|
338
|
-
* @param
|
|
339
|
-
* @param metadataDefinition
|
|
340
|
-
* @returns A class decorator that
|
|
404
|
+
* @param target The fully qualified name of the UI5 class
|
|
405
|
+
* @param metadataDefinition Additional inline metadata definition
|
|
406
|
+
* @returns A class decorator that creates a UI5 class out of the TS class
|
|
407
|
+
* @public
|
|
408
|
+
* @ui5-experimental-since 1.145.0
|
|
341
409
|
*/
|
|
342
|
-
function defineUI5Class(
|
|
410
|
+
function defineUI5Class(target, metadataDefinition) {
|
|
343
411
|
return function (constructor) {
|
|
344
412
|
if (!constructor.prototype.metadata) {
|
|
345
413
|
constructor.prototype.metadata = {};
|
|
@@ -360,7 +428,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
360
428
|
}
|
|
361
429
|
}
|
|
362
430
|
}
|
|
363
|
-
return registerUI5Metadata(constructor,
|
|
431
|
+
return registerUI5Metadata(constructor, target, constructor.prototype);
|
|
364
432
|
};
|
|
365
433
|
}
|
|
366
434
|
_exports.defineUI5Class = defineUI5Class;
|
|
@@ -435,16 +503,25 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
435
503
|
});
|
|
436
504
|
return baseCtor;
|
|
437
505
|
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* The name identifier used to reference the component state model in the state management system.
|
|
509
|
+
* This constant defines the key under which component state data is stored and retrieved.
|
|
510
|
+
*/
|
|
511
|
+
const STATE_MODEL_NAME = "$componentState";
|
|
512
|
+
_exports.STATE_MODEL_NAME = STATE_MODEL_NAME;
|
|
438
513
|
function _getHandlerForStateProperty(jsonModel, prop) {
|
|
439
514
|
const pathInModel = `/${prop.toString()}`;
|
|
440
515
|
const oObj = deepClone(jsonModel.getObject(pathInModel));
|
|
441
516
|
let oTarget;
|
|
442
517
|
if (prop === "__bindingInfo") {
|
|
443
518
|
return {
|
|
444
|
-
model:
|
|
519
|
+
model: STATE_MODEL_NAME
|
|
445
520
|
};
|
|
446
521
|
}
|
|
447
|
-
if (
|
|
522
|
+
if (oObj === undefined || oObj === null) {
|
|
523
|
+
oTarget = oObj;
|
|
524
|
+
} else if (typeof oObj === "string") {
|
|
448
525
|
oTarget = oObj;
|
|
449
526
|
} else if (typeof oObj === "number") {
|
|
450
527
|
oTarget = oObj;
|
|
@@ -459,7 +536,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
459
536
|
} else if (ref === undefined && isNaN(Number(p.toString()))) {
|
|
460
537
|
return {
|
|
461
538
|
__bindingInfo: {
|
|
462
|
-
model:
|
|
539
|
+
model: STATE_MODEL_NAME,
|
|
463
540
|
path: p
|
|
464
541
|
}
|
|
465
542
|
};
|
|
@@ -472,9 +549,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
472
549
|
...oObj
|
|
473
550
|
};
|
|
474
551
|
}
|
|
475
|
-
if (typeof oTarget === "object") {
|
|
552
|
+
if (typeof oTarget === "object" && oTarget !== null) {
|
|
476
553
|
oTarget.__bindingInfo = {
|
|
477
|
-
model:
|
|
554
|
+
model: STATE_MODEL_NAME,
|
|
478
555
|
path: pathInModel
|
|
479
556
|
};
|
|
480
557
|
}
|
|
@@ -483,8 +560,8 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
483
560
|
const boundProperties = Symbol("boundProperties");
|
|
484
561
|
function createStateProxy(targetControl, statePropertyName, boundToStateProps, initialData) {
|
|
485
562
|
// Lazy initialization of the state property
|
|
486
|
-
targetControl.setModel(new JSONModel(initialData),
|
|
487
|
-
const stateModel = targetControl.getModel(
|
|
563
|
+
targetControl.setModel(new JSONModel(initialData), STATE_MODEL_NAME);
|
|
564
|
+
const stateModel = targetControl.getModel(STATE_MODEL_NAME);
|
|
488
565
|
stateModel.attachPropertyChange(evt => {
|
|
489
566
|
const path = evt.getParameter("path")?.substring(1); // to remove the first /
|
|
490
567
|
if (path && boundToStateProps.includes(path)) {
|
|
@@ -592,7 +669,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
592
669
|
if (!this.__stateCreated) {
|
|
593
670
|
createStateProxy(targetControl, targetControl.__stateName, targetControl[boundProperties]);
|
|
594
671
|
}
|
|
595
|
-
this.getModel(
|
|
672
|
+
this.getModel(STATE_MODEL_NAME).setProperty(`/${sPropertyName}`, oValue);
|
|
596
673
|
targetControl._updateStateDebounced(sPropertyName);
|
|
597
674
|
}
|
|
598
675
|
return fnSetProperty.call(this, sPropertyName, oValue, bSuppressInvalidate);
|
|
@@ -825,4 +902,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
825
902
|
}
|
|
826
903
|
return _exports;
|
|
827
904
|
}, false);
|
|
828
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwiaXNBcnJheSIsImNvbmNhdCIsInJlZ2lzdGVyVUk1TWV0YWRhdGEiLCJtaXhpbiIsImludGVyZmFjZUNsYXNzIiwiYmFzZUN0b3IiLCJleHRlbmQiLCJpbnRlcmZhY2VQcm90b1R5cGVUb01peCIsIl9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzZXR1cE1peGluIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsImJhc2VDbGFzc01ldGFkYXRhIiwiaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUiLCJnZXRJbnRlcmZhY2VOYW1lIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJuYW1lIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkiLCJqc29uTW9kZWwiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJvT2JqIiwiZGVlcENsb25lIiwiZ2V0T2JqZWN0Iiwib1RhcmdldCIsIm1vZGVsIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJyZWYiLCJSZWZsZWN0IiwiYmluZCIsImlzTmFOIiwiTnVtYmVyIiwiX19iaW5kaW5nSW5mbyIsInBhdGgiLCJib3VuZFByb3BlcnRpZXMiLCJTeW1ib2wiLCJjcmVhdGVTdGF0ZVByb3h5Iiwic3RhdGVQcm9wZXJ0eU5hbWUiLCJib3VuZFRvU3RhdGVQcm9wcyIsImluaXRpYWxEYXRhIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJzdGF0ZU1vZGVsIiwiZ2V0TW9kZWwiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsImdldFBhcmFtZXRlciIsInN1YnN0cmluZyIsImluY2x1ZGVzIiwic2V0UHJvcGVydHkiLCJfX3N0YXRlQ3JlYXRlZCIsInByb3h5Iiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwia25vd25Cb3VuZFByb3BlcnRpZXMiLCJfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSIsInNldFJlc3VsdCIsIl91cGRhdGVTdGF0ZURlYm91bmNlZCIsImNvbmZpZ3VyYWJsZSIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwidXBkYXRpbmdTdGF0ZSIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJfdXBkYXRlU3RhdGUiLCJfdXBkYXRlU3RhdGVUaW1lciIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiX19zdGF0ZU5hbWUiLCJmbkFwcGx5U2V0dGluZ3MiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwic2NvcGUiLCJtb2RlbHMiLCIkY29tcG9uZW50U3RhdGUiLCJjYWxsIiwiZm5TZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJvVmFsdWUiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiY2xhenoiLCJpbk9iaiIsIm9iak5hbWUiLCJiYXNlVHlwZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwicmVzdWx0IiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlLCBwcm9wYWdhdGVIb29rRnJvbU1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxudHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGJpbmRhYmxlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdGlzQmluZGluZ0luZm8/OiBib29sZWFuO1xuXHRiaW5kVG9TdGF0ZT86IGJvb2xlYW47XG5cdGV4cGVjdGVkQW5ub3RhdGlvbnM/OiBzdHJpbmdbXTtcblx0ZXhwZWN0ZWRUeXBlcz86IHN0cmluZ1tdO1xuXHRhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1QWdncmVnYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRhbHRUeXBlcz86IHN0cmluZ1tdO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdGRlZmF1bHRDbGFzcz86IHVua25vd247XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0dmlzaWJpbGl0eT86IHN0cmluZztcblx0Zm9yd2FyZGluZz86IG9iamVjdDtcbn07XG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0c3RhdGVQcm9wZXJ0eT86IHN0cmluZztcblx0c3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0cmV0dXJuVHlwZXM/OiBzdHJpbmdbXTtcblx0YnVpbGRpbmdCbG9ja01ldGFkYXRhPzogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NvckRlc2NyaXB0b3I8VD4gPSBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiAmIHsgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUIH07XG50eXBlIFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZT86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0b3ZlcnJpZGVzPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2xEZWZpbml0aW9uID0ge1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdG92ZXJyaWRlPzogdW5rbm93bjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcblx0X19hcGlSZWdpc3RlcmVkOiBib29sZWFuO1xufSAmIHtcblx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgWE1MRXZlbnRIb2xkZXIgPSB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcbn07XG5cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdC8vIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBUUyBjb21waWxlclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcblxudHlwZSBFdmVudE5hbWVzT2Y8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgKGV2ZW50OiBpbmZlciBFKSA9PiB2b2lkID8gKEUgZXh0ZW5kcyBVSTVFdmVudCA/IEsgOiBuZXZlcikgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBFdmVudHNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBFdmVudE5hbWVzT2Y8VD4+PjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBDb252ZXJ0Q29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIiA/IHN0cmluZyA6IFRbS107XG59O1xudHlwZSBDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQ29udGV4dCB8IHVuZGVmaW5lZCA/IHN0cmluZyB8IHVuZGVmaW5lZCA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2ZCdWlsZGluZ0Jsb2NrPFQ+ID0gQ29udGV4dFRvU3RyaW5nPFByb3BlcnRpZXNPZjxUPj47XG5leHBvcnQgdHlwZSBTdHJpY3RQcm9wZXJ0aWVzT2Y8VD4gPSBQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+PjtcbmV4cG9ydCB0eXBlIFVJNUFjY2Vzc29yczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgZ2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuZXhwb3J0IHR5cGUgVUk1U2V0dGVyczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgc2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBzZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICh2YWx1ZTogVFtQXSkgPT4gVDtcbn07XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IHtcblx0bmV3IChwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG5cdG5ldyAoc0lkOiBzdHJpbmcsIHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcbn0gJiBUICZcblx0VUk1QWNjZXNzb3JzPFQ+ICZcblx0VUk1U2V0dGVyczxUPjtcblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24gPSBcIkluc3RlYWRcIiB8IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIkFmdGVyQXN5bmNcIiB8IFwiQmVmb3JlQXN5bmNcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHJlZmVyZW5jZXM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgPz8ge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdGhhdCB3aWxsIGZpbmQgdGhlIGNvcnJlY3QgQVBJIG9iamVjdCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250cm9sIGhpZXJhcmNoeS5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXIgZ2V0QVBJIGZ1bmN0aW9uIGZvciB0aGlzIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVHZXRBUElGdW5jdGlvbih0YXJnZXQ6IFVJNUFQSUNvbnRyb2wpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgVUk1QVBJQ29udHJvbD4oXG5cdFx0dGhpczogVUk1QVBJQ29udHJvbCxcblx0XHRvRXZlbnQ6IFVJNUV2ZW50LFxuXHRcdGFwaUZRTjogc3RyaW5nID0gdGFyZ2V0LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpXG5cdCk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdGlmICh0YXJnZXQuX2dldEFQSUV4dGVuc2lvbikge1xuXHRcdFx0b1NvdXJjZSA9IHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKG9Tb3VyY2UpID8/IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHdoaWxlIChvU291cmNlICYmICFvU291cmNlLmlzQTxUPihhcGlGUU4pICYmIG9Tb3VyY2UuZ2V0UGFyZW50KSB7XG5cdFx0XHRpZiAodGhpcy5pc0RlcGVuZGVudEJvdW5kKSB7XG5cdFx0XHRcdGNvbnN0IG9EZXBlbmRlbnRzID0gKG9Tb3VyY2UgYXMgQ29udHJvbCkuZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0XHRjb25zdCBoYXNDb3JyZWN0RGVwZW5kZW50ID0gb0RlcGVuZGVudHMuZmluZCgob0RlcGVuZGVudDogVUk1RWxlbWVudCkgPT4gb0RlcGVuZGVudC5pc0EoYXBpRlFOKSk7XG5cdFx0XHRcdGlmIChoYXNDb3JyZWN0RGVwZW5kZW50KSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IGhhc0NvcnJlY3REZXBlbmRlbnQgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvU291cmNlIHx8ICFvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHRjb25zdCBvU291cmNlTWFwID0gdGhpcy5pbnN0YW5jZU1hcC5nZXQodGhpcykgYXMgVFtdO1xuXHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2VNYXA/LltvU291cmNlTWFwLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0Q29udHJvbDtcblx0XHRpZiAob1NvdXJjZSAmJiBvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sID0gb1NvdXJjZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG5cdH07XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHdoZW4gYW4geG1sRXZlbnRIYW5kbGVyIGlzIGRlZmluZWQsIHRoZSBgZ2V0QVBJYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBhc3NpZ25lZC5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxkIGhvbGQgdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuY29uc3QgZW5zdXJlR2V0QVBJID0gZnVuY3Rpb24gKHRhcmdldDogVUk1QVBJQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoIXRhcmdldC5fX2FwaVJlZ2lzdGVyZWQpIHtcblx0XHR0YXJnZXQuX19hcGlSZWdpc3RlcmVkID0gdHJ1ZTtcblx0XHR0YXJnZXQuaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPigpO1xuXHRcdHRhcmdldC5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKF9pbnN0YW5jZTogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGlmICghdGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlTWFwLnNldChfaW5zdGFuY2UuY29uc3RydWN0b3IsIFtdKTtcblx0XHRcdH1cblx0XHRcdCh0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpIGFzIG9iamVjdFtdKS5wdXNoKF9pbnN0YW5jZSk7XG5cdFx0fTtcblx0XHR0YXJnZXQuZ2V0QVBJID0gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldCk7XG5cdH1cbn07XG5cbnR5cGUgRXh0ZW5kV2l0aE9iamVjdDxULCBLPiA9IFQgZXh0ZW5kcyBvYmplY3QgPyBLICYgeyBbVEtleSBpbiBrZXlvZiBUXT86IEJpbmRpbmdJbmZvSG9sZGVyPFRbVEtleV0+IH0gOiBLO1xuXG5leHBvcnQgdHlwZSBTdGF0ZU9mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEFycmF5PGluZmVyIFU+IHwgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IEV4dGVuZFdpdGhPYmplY3Q8VSwgUmVhZG9ubHlBcnJheTxVPj4gOiBUW0tdO1xufTtcbmV4cG9ydCB0eXBlIEJpbmRpbmdJbmZvSG9sZGVyPFQ+ID0gVCAmIHtcblx0X19iaW5kaW5nSW5mbzoge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRtb2RlbDogc3RyaW5nO1xuXHRcdHR5cGU6IFQ7XG5cdH07XG59O1xuXG4vKipcbiAqIEFsbG93cyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgaG9sZCB0aGUgY29udHJvbCBzdGF0ZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRpZiAoIWF0dHJpYnV0ZURlZmluaXRpb24uaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpIHtcblx0XHRcdC8vIE5vdCBleHBsaWNpdGVseSBkZWZpbmVkXG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdH1cblxuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uIFRoZSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBVSTUgZGVmYXVsdHMgdGhpcyB0byB0cnVlIGJ1dCB0aGlzIGlzIGp1c3Qgd2VpcmQuLi5cblx0XHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBhZ2dyZWdhdGlvbkRlZmluaXRpb247XG5cdFx0fVxuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24uaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQ/Lltwcm9wZXJ0eWtleS50b1N0cmluZygpXSguLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufVxuXG50eXBlIFVJNUNvbnRyb2xBbmRNb3JlID0gdHlwZW9mIENvbnRyb2wgJlxuXHRGdW5jdGlvbiAmIHtcblx0XHRyZWdpc3Rlckluc3RhbmNlPzogRnVuY3Rpb247XG5cdFx0b3ZlcnJpZGU/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hOiB1bmtub3duW10pID0+IFQ7XG4vKipcbiAqIE1peGluIGEgc3BlY2lmaWMgaW50ZXJmYWNlIGluY2x1ZGluZyBhbGwgaXRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgaW50byB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSBpbnRlcmZhY2VDbGFzcyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBvZiB0aGUgY29udHJvbFxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIElJbnRlcmZhY2VXaXRoTWl4aW4+KGludGVyZmFjZUNsYXNzOiBDb25zdHJ1Y3RvcjxUPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoYmFzZUN0b3IucHJvdG90eXBlLmV4dGVuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIG1peGluSW50ZXJmYWNlIGRlY29yYXRvciBtdXN0IGJlIHBsYWNlZCBhZnRlciBgZGVmaW5lVWk1Q2xhc3NgXCIpO1xuXHRcdH1cblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKGJhc2VDdG9yLnByb3RvdHlwZSk7XG5cblx0XHRsZXQgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGU7XG5cdFx0d2hpbGUgKGludGVyZmFjZVByb3RvVHlwZVRvTWl4KSB7XG5cdFx0XHRiYXNlQ3RvciA9IF9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MoYmFzZUN0b3IsIG1ldGFkYXRhLCBpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0XHRpbnRlcmZhY2VQcm90b1R5cGVUb01peCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0fVxuXHRcdHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4oYmFzZUN0b3IsIGludGVyZmFjZUNsYXNzKTtcblxuXHRcdC8vIEhvb2sgdG8gYWRkIHBvdGVudGlhbGx5IG1vcmUgbG9naWMgdG8gdGhlIG1peGluXG5cdFx0aW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlLnNldHVwTWl4aW4/LihiYXNlQ3Rvcik7XG5cdFx0cmV0dXJuIGJhc2VDdG9yO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZWNlaXZpbmcgY29udHJvbC5cblx0ICogSWYgbm90IGRlZmluZWQsIHRoZSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgYWRkZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2Vcblx0ICovXG5cdGdldEludGVyZmFjZU5hbWU/KCk6IHN0cmluZztcblxuXHQvKipcblx0ICogSG9vayB0byBhZGQgbW9yZSBsb2dpYyB0byB0aGUgbWl4aW4uXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbG9naWMgdG8gdGhlIGJhc2UgY2xhc3MuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGJhc2UgY2xhc3MgdGhhdCB3aWxsIGJlIGV4dGVuZGVkXG5cdCAqL1xuXHRzZXR1cE1peGluPyhiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZTxUIGV4dGVuZHMgVUk1RWxlbWVudD4oKTogUmVmPFQ+IHtcblx0cmV0dXJuIHtcblx0XHRjdXJyZW50OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuXHRcdHNldEN1cnJlbnQ6IGZ1bmN0aW9uIChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZCB7XG5cdFx0XHR0aGlzLmN1cnJlbnQgPSBvQ29udHJvbEluc3RhbmNlO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgdGhyb3VnaCBqc3ggdGVtcGxhdGluZy5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWZlcmVuY2UoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRpZiAoQmFzZU9iamVjdC5pc09iamVjdEEodGFyZ2V0LCBcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdGlmICghbWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyID0gY3JlYXRlUmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG5mdW5jdGlvbiBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKFxuXHRiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUsXG5cdGJhc2VDbGFzc01ldGFkYXRhOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uLFxuXHRpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZTogRnVuY3Rpb25bXCJwcm90b3R5cGVcIl1cbik6IFVJNUNvbnRyb2xBbmRNb3JlIHtcblx0Y29uc3QgaW50ZXJmYWNlTmFtZSA9IGludGVyZmFjZUNsYXNzUHJvdG90eXBlPy5nZXRJbnRlcmZhY2VOYW1lPy4oKTtcblx0aWYgKGludGVyZmFjZU5hbWUpIHtcblx0XHRiYXNlQ2xhc3NNZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdH1cblxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmIChuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIgJiYgbmFtZSAhPT0gXCJzZXR1cE1peGluXCIgJiYgbmFtZSAhPT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRpZiAoIWJhc2VDdG9yLnByb3RvdHlwZVtuYW1lXSkge1xuXHRcdFx0XHQvLyBUaGUgYmFzZSBjbGFzcyBcIndpbnNcIiBvdmVyIHRoZSBtaXhpblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSwgbmFtZSkgfHwgT2JqZWN0LmNyZWF0ZShudWxsKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSBtZXJnZShiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEsIGludGVyZmFjZUNsYXNzUHJvdG90eXBlLm1ldGFkYXRhKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYmFzZUN0b3I7XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChwcm9wID09PSBcIl9fYmluZGluZ0luZm9cIikge1xuXHRcdHJldHVybiB7IG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvT2JqID09PSBcInN0cmluZ1wiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwibnVtYmVyXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRpZiAodHlwZW9mIG9UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgXCIkY29tcG9uZW50U3RhdGVcIik7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAoXG5cdFx0XHRcdG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSxcblx0XHRcdFx0c2NvcGU/OiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHRcdCk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGUpIHtcblx0XHRcdFx0XHQvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBtb2RlbCBkaXJlY3RseSBmcm9tIG1TZXR0aW5ncy5tb2RlbHMgYXMgdGhpcyBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCB3aGVuIGNsb25pbmdcblx0XHRcdFx0XHRtU2V0dGluZ3MubW9kZWxzID0geyAuLi5tU2V0dGluZ3MubW9kZWxzIH07XG5cdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5tb2RlbHMuJGNvbXBvbmVudFN0YXRlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncywgc2NvcGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlICE9PSBiaW5kaW5nUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gdGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BWYWx1ZSB9OyAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJvcGVydHlEZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgdGhpc1twcm9wZXJ0eUtleV0gIT09IHByb3BlcnR5RGVmYXVsdCkge1xuXHRcdFx0XHRcdC8vIGRvbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmVcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5RGVmYXVsdDtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZiA9IG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldO1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA/PyBhZ2dyZWdhdGlvbkRlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgKGRlZmF1bHRWYWx1ZSBhcyBVSTVFbGVtZW50KT8uaXNBKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1thZ2dyZWdhdGlvbktleV0gPSBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucmVmZXJlbmNlcyk7XG5cdFx0XHRyZWZlcmVuY2VQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogY3JlYXRlUmVmZXJlbmNlKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGhvZE5hbWUgaW4gb2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IG9iai5tZXRhZGF0YS5tZXRob2RzW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIgfHwgbWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLm1ldGhvZEhvbGRlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXIgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbdGhpc1ttZXRob2ROYW1lXV07XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG1ldGhvZE5hbWUsIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXS5wdXNoKHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKC4uLm1ldGhvZEFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZEFycmF5cy5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhcmcgb2YgbWV0aG9kQXJyYXlzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBhcmcuYXBwbHkodGhpcywgbWV0aG9kQXJncyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBc0pBLE1BQU1BLGNBQWMsR0FBRyxTQUFBQSxDQUFVQyxNQUFzRCxFQUFnQztJQUN0SEEsTUFBTSxDQUFDQyxRQUFRLEdBQUdDLEtBQUssQ0FDdEI7TUFDQ0Msb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO01BQ3hCQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2RDLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDaEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNYQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQ1ZDLFVBQVUsRUFBRTtJQUNiLENBQUMsRUFDRFYsTUFBTSxDQUFDQyxRQUFRLElBQUksQ0FBQyxDQUNyQixDQUFpQztJQUNqQyxPQUFPRCxNQUFNLENBQUND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
|
|
905
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGFzc1N1cHBvcnROYW1lc3BhY2UiLCJfZXhwb3J0cyIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwibWV0YWRhdGEiLCJtZXJnZSIsImNvbnRyb2xsZXJFeHRlbnNpb25zIiwicHJvcGVydGllcyIsImFnZ3JlZ2F0aW9ucyIsInJlZmVyZW5jZXMiLCJhc3NvY2lhdGlvbnMiLCJtZXRob2RzIiwiZXZlbnRzIiwiaW50ZXJmYWNlcyIsInByZXBhcmVHZXRBUElGdW5jdGlvbiIsIm9FdmVudCIsImFwaUZRTiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJfZ2V0QVBJRXh0ZW5zaW9uIiwiaXNBIiwiZ2V0UGFyZW50IiwiaXNEZXBlbmRlbnRCb3VuZCIsIm9EZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImhhc0NvcnJlY3REZXBlbmRlbnQiLCJmaW5kIiwib0RlcGVuZGVudCIsIm9Tb3VyY2VNYXAiLCJpbnN0YW5jZU1hcCIsImdldCIsInRhcmdldENvbnRyb2wiLCJlbnN1cmVHZXRBUEkiLCJfX2FwaVJlZ2lzdGVyZWQiLCJXZWFrTWFwIiwicmVnaXN0ZXJJbnN0YW5jZSIsIl9pbnN0YW5jZSIsImNvbnN0cnVjdG9yIiwic2V0IiwicHVzaCIsImdldEFQSSIsImRlZmluZVN0YXRlIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJzdGF0ZVByb3BlcnR5IiwiRXJyb3IiLCJ3cml0YWJsZSIsInN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWUiLCJpbml0aWFsaXplciIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRhZGF0YURlZmluaXRpb24iLCJwcm90b3R5cGUiLCJrZXkiLCJpc0FycmF5IiwiY29uY2F0IiwicmVnaXN0ZXJVSTVNZXRhZGF0YSIsIm1peGluIiwiaW50ZXJmYWNlQ2xhc3MiLCJiYXNlQ3RvciIsImV4dGVuZCIsImludGVyZmFjZVByb3RvVHlwZVRvTWl4IiwiX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwicHJvcGFnYXRlSG9va0Zyb21NaXhpbiIsInNldHVwTWl4aW4iLCJjcmVhdGVSZWZlcmVuY2UiLCJjdXJyZW50Iiwic2V0Q3VycmVudCIsIm9Db250cm9sSW5zdGFuY2UiLCJkZWZpbmVSZWZlcmVuY2UiLCJCYXNlT2JqZWN0IiwiaXNPYmplY3RBIiwiYmFzZUNsYXNzTWV0YWRhdGEiLCJpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSIsImdldEludGVyZmFjZU5hbWUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsIm5hbWUiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImNyZWF0ZSIsIlNUQVRFX01PREVMX05BTUUiLCJfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkiLCJqc29uTW9kZWwiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJvT2JqIiwiZGVlcENsb25lIiwiZ2V0T2JqZWN0Iiwib1RhcmdldCIsIm1vZGVsIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJyZWYiLCJSZWZsZWN0IiwiYmluZCIsImlzTmFOIiwiTnVtYmVyIiwiX19iaW5kaW5nSW5mbyIsInBhdGgiLCJib3VuZFByb3BlcnRpZXMiLCJTeW1ib2wiLCJjcmVhdGVTdGF0ZVByb3h5Iiwic3RhdGVQcm9wZXJ0eU5hbWUiLCJib3VuZFRvU3RhdGVQcm9wcyIsImluaXRpYWxEYXRhIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJzdGF0ZU1vZGVsIiwiZ2V0TW9kZWwiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsImdldFBhcmFtZXRlciIsInN1YnN0cmluZyIsImluY2x1ZGVzIiwic2V0UHJvcGVydHkiLCJfX3N0YXRlQ3JlYXRlZCIsInByb3h5Iiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwia25vd25Cb3VuZFByb3BlcnRpZXMiLCJfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSIsInNldFJlc3VsdCIsIl91cGRhdGVTdGF0ZURlYm91bmNlZCIsImNvbmZpZ3VyYWJsZSIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwidXBkYXRpbmdTdGF0ZSIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJfdXBkYXRlU3RhdGUiLCJfdXBkYXRlU3RhdGVUaW1lciIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiX19zdGF0ZU5hbWUiLCJmbkFwcGx5U2V0dGluZ3MiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwic2NvcGUiLCJtb2RlbHMiLCIkY29tcG9uZW50U3RhdGUiLCJjYWxsIiwiZm5TZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJvVmFsdWUiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiY2xhenoiLCJpbk9iaiIsIm9iak5hbWUiLCJiYXNlVHlwZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwicmVzdWx0IiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlLCBwcm9wYWdhdGVIb29rRnJvbU1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGRlY29yYXRvcnMgdG8gc3VwcG9ydCB0aGUgY3JlYXRpb24gb2YgVUk1IGNsYXNzZXMuXG4gKiBAbmFtZXNwYWNlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGFzc1N1cHBvcnROYW1lc3BhY2UgPSBcInNhcC5mZS5iYXNlLkNsYXNzU3VwcG9ydFwiO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBVSTUgcHJvcGVydHkgbWV0YWRhdGEuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YmluZGFibGU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRieVZhbHVlPzogYm9vbGVhbjtcblx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdGJpbmRUb1N0YXRlPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBVSTUgYWdncmVnYXRpb24gbWV0YWRhdGEuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YWx0VHlwZXM/OiBzdHJpbmdbXTtcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRpc0RlZmF1bHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRkZWZhdWx0Q2xhc3M/OiB1bmtub3duO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG5cdGZvcndhcmRpbmc/OiBvYmplY3Q7XG59O1xuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgVUk1IGFzc29jaWF0aW9uIG1ldGFkYXRhLlxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0c3RhdGVQcm9wZXJ0eT86IHN0cmluZztcblx0c3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0cmV0dXJuVHlwZXM/OiBzdHJpbmdbXTtcblx0YnVpbGRpbmdCbG9ja01ldGFkYXRhPzogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NvckRlc2NyaXB0b3I8VD4gPSBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiAmIHsgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUIH07XG50eXBlIFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZT86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0b3ZlcnJpZGVzPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2xEZWZpbml0aW9uID0ge1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdG92ZXJyaWRlPzogdW5rbm93bjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcblx0X19hcGlSZWdpc3RlcmVkOiBib29sZWFuO1xufSAmIHtcblx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgWE1MRXZlbnRIb2xkZXIgPSB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcbn07XG5cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdC8vIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBUUyBjb21waWxlclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm9wZXJ0aWVzIG9mIGEgY29udHJvbC5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5cbnR5cGUgRXZlbnROYW1lc09mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIChldmVudDogaW5mZXIgRSkgPT4gdm9pZCA/IChFIGV4dGVuZHMgVUk1RXZlbnQgPyBLIDogbmV2ZXIpIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgRXZlbnRzT2Y8VD4gPSBQYXJ0aWFsPFBpY2s8VCwgRXZlbnROYW1lc09mPFQ+Pj47XG5cbmV4cG9ydCB0eXBlIENvbnZlcnRDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBLIGV4dGVuZHMgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiID8gc3RyaW5nIDogVFtLXTtcbn07XG50eXBlIENvbnRleHRUb1N0cmluZzxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBDb250ZXh0IHwgdW5kZWZpbmVkID8gc3RyaW5nIHwgdW5kZWZpbmVkIDogVFtLXTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZkJ1aWxkaW5nQmxvY2s8VD4gPSBDb250ZXh0VG9TdHJpbmc8UHJvcGVydGllc09mPFQ+PjtcbmV4cG9ydCB0eXBlIFN0cmljdFByb3BlcnRpZXNPZjxUPiA9IFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+O1xuZXhwb3J0IHR5cGUgVUk1QWNjZXNzb3JzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBnZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYGdldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKCkgPT4gVFtQXTtcbn07XG5leHBvcnQgdHlwZSBVSTVTZXR0ZXJzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBzZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYHNldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKHZhbHVlOiBUW1BdKSA9PiBUO1xufTtcbmV4cG9ydCB0eXBlIEVuaGFuY2VXaXRoVUk1PFQ+ID0ge1xuXHRuZXcgKHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcblx0bmV3IChzSWQ6IHN0cmluZywgcHJvcHM6IFByb3BlcnRpZXNPZjxUPik6IEVuaGFuY2VXaXRoVUk1PFQ+O1xufSAmIFQgJlxuXHRVSTVBY2Nlc3NvcnM8VD4gJlxuXHRVSTVTZXR0ZXJzPFQ+O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiA9IFwiSW5zdGVhZFwiIHwgXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiQWZ0ZXJBc3luY1wiIHwgXCJCZWZvcmVBc3luY1wiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uIHwgVUk1Q29udHJvbERlZmluaXRpb24pOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uIHtcblx0dGFyZ2V0Lm1ldGFkYXRhID0gbWVyZ2UoXG5cdFx0e1xuXHRcdFx0Y29udHJvbGxlckV4dGVuc2lvbnM6IHt9LFxuXHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0cmVmZXJlbmNlczoge30sXG5cdFx0XHRhc3NvY2lhdGlvbnM6IHt9LFxuXHRcdFx0bWV0aG9kczoge30sXG5cdFx0XHRldmVudHM6IHt9LFxuXHRcdFx0aW50ZXJmYWNlczogW11cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSA/PyB7fVxuXHQpIGFzIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0aGF0IHdpbGwgZmluZCB0aGUgY29ycmVjdCBBUEkgb2JqZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRyb2wgaGllcmFyY2h5LlxuICogQHBhcmFtIHRhcmdldFxuICogQHJldHVybnMgVGhlIHByb3BlciBnZXRBUEkgZnVuY3Rpb24gZm9yIHRoaXMgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldDogVUk1QVBJQ29udHJvbCkge1xuXHRyZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBVSTVBUElDb250cm9sPihcblx0XHR0aGlzOiBVSTVBUElDb250cm9sLFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0YXBpRlFOOiBzdHJpbmcgPSB0YXJnZXQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKClcblx0KTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0aWYgKHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKSB7XG5cdFx0XHRvU291cmNlID0gdGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24ob1NvdXJjZSkgPz8gb1NvdXJjZTtcblx0XHR9XG5cdFx0d2hpbGUgKG9Tb3VyY2UgJiYgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikgJiYgb1NvdXJjZS5nZXRQYXJlbnQpIHtcblx0XHRcdGlmICh0aGlzLmlzRGVwZW5kZW50Qm91bmQpIHtcblx0XHRcdFx0Y29uc3Qgb0RlcGVuZGVudHMgPSAob1NvdXJjZSBhcyBDb250cm9sKS5nZXREZXBlbmRlbnRzKCk7XG5cdFx0XHRcdGNvbnN0IGhhc0NvcnJlY3REZXBlbmRlbnQgPSBvRGVwZW5kZW50cy5maW5kKChvRGVwZW5kZW50OiBVSTVFbGVtZW50KSA9PiBvRGVwZW5kZW50LmlzQShhcGlGUU4pKTtcblx0XHRcdFx0aWYgKGhhc0NvcnJlY3REZXBlbmRlbnQpIHtcblx0XHRcdFx0XHRvU291cmNlID0gaGFzQ29ycmVjdERlcGVuZGVudCBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIW9Tb3VyY2UgfHwgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2VNYXAgPSB0aGlzLmluc3RhbmNlTWFwLmdldCh0aGlzKSBhcyBUW107XG5cdFx0XHRvU291cmNlID0gb1NvdXJjZU1hcD8uW29Tb3VyY2VNYXAubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRDb250cm9sO1xuXHRcdGlmIChvU291cmNlICYmIG9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdHRhcmdldENvbnRyb2wgPSBvU291cmNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcblx0fTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgd2hlbiBhbiB4bWxFdmVudEhhbmRsZXIgaXMgZGVmaW5lZCwgdGhlIGBnZXRBUElgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGFzc2lnbmVkLlxuICogQHBhcmFtIHRhcmdldCBUaGUgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBzaG91bGQgaG9sZCB0aGUgc3RhdGljIGZ1bmN0aW9uc1xuICovXG5jb25zdCBlbnN1cmVHZXRBUEkgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVBUElDb250cm9sKTogdm9pZCB7XG5cdGlmICghdGFyZ2V0Ll9fYXBpUmVnaXN0ZXJlZCkge1xuXHRcdHRhcmdldC5fX2FwaVJlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHRhcmdldC5pbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+KCk7XG5cdFx0dGFyZ2V0LnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoX2luc3RhbmNlOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0aWYgKCF0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpKSB7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2VNYXAuc2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvciwgW10pO1xuXHRcdFx0fVxuXHRcdFx0KHRoaXMuaW5zdGFuY2VNYXAuZ2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvcikgYXMgb2JqZWN0W10pLnB1c2goX2luc3RhbmNlKTtcblx0XHR9O1xuXHRcdHRhcmdldC5nZXRBUEkgPSBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0KTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xudHlwZSBFeHRlbmRXaXRoT2JqZWN0PFQsIEs+ID0gVCBleHRlbmRzIG9iamVjdCA/IEsgJiB7IFtUS2V5IGluIGtleW9mIFRdPzogQmluZGluZ0luZm9Ib2xkZXI8VFtUS2V5XT4gfSA6IEs7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2JqZWN0IG9mIGEgYnVpbGRpbmcgYmxvY2suXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXRlT2Y8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gfCBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gRXh0ZW5kV2l0aE9iamVjdDxVLCBSZWFkb25seUFycmF5PFU+PiA6IFRbS107XG59O1xuLyoqXG4gKiBUeXBlIGZvciBhIGdlbmVyaWMgc3RhdGUgb2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ0luZm9Ib2xkZXI8VD4gPSBUICYge1xuXHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsOiBzdHJpbmc7XG5cdFx0dHlwZTogVDtcblx0fTtcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGRlZmluZSBhIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIGNvbnRyb2wgc3RhdGUuXG4gKlxuICogUHJvcGVydGllcyBkZWZpbmVkIHdpdGggdGhpcyBkZWNvcmF0b3IgYXJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgaXMgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBhcyBhIG1hbmFnZWQgb2JqZWN0IGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb24gVGhlIHByb3BlcnR5IGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShhdHRyaWJ1dGVEZWZpbml0aW9uOiBVSTVQcm9wZXJ0eU1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSBmYWxzZTtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZ3JvdXAgPSBcIkRhdGFcIjtcblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGlmICghYXR0cmlidXRlRGVmaW5pdGlvbi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0Ly8gTm90IGV4cGxpY2l0ZWx5IGRlZmluZWRcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkRlZmluaXRpb24gVGhlIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFVJNSBkZWZhdWx0cyB0aGlzIHRvIHRydWUgYnV0IHRoaXMgaXMganVzdCB3ZWlyZC4uLlxuXHRcdFx0YWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgSSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgZm9sbG93aW5nIGFzc29jaWF0aW9uIGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIHVpNUFzc29jaWF0aW9uTWV0YWRhdGEgVGhlIGRlZmluaXRpb24gb2YgdGhlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IHVpNUFzc29jaWF0aW9uTWV0YWRhdGE7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDQuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbGVtZW50SW50ZXJmYWNlKGludGVyZmFjZU5hbWU6IHN0cmluZyk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIFhNTC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWxFdmVudEhhbmRsZXIoKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eWtleSkge1xuXHRcdGNvbnN0IGN1cnJlbnRDb25zdHJ1Y3RvcjogVUk1QVBJQ29udHJvbCA9IHRhcmdldC5jb25zdHJ1Y3RvciBhcyB1bmtub3duIGFzIFVJNUFQSUNvbnRyb2w7XG5cdFx0ZW5zdXJlR2V0QVBJKGN1cnJlbnRDb25zdHJ1Y3Rvcik7XG5cdFx0Y3VycmVudENvbnN0cnVjdG9yW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdFx0aWYgKGFyZ3M/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudENvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRcdFx0Y3VycmVudFRhcmdldD8uW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG59XG5cbnR5cGUgVUk1Q29udHJvbEFuZE1vcmUgPSB0eXBlb2YgQ29udHJvbCAmXG5cdEZ1bmN0aW9uICYge1xuXHRcdHJlZ2lzdGVySW5zdGFuY2U/OiBGdW5jdGlvbjtcblx0XHRvdmVycmlkZT86IEZ1bmN0aW9uO1xuXHRcdHJlbmRlcmVyPzogdW5rbm93bjtcblx0XHRyZW5kZXI6IEZ1bmN0aW9uO1xuXHRcdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0fTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIGNsYXNzIHNob3VsZCBkZWZpbmUgYSBVSTUgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgVUk1IGNsYXNzXG4gKiBAcGFyYW0gbWV0YWRhdGFEZWZpbml0aW9uIEFkZGl0aW9uYWwgaW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgY3JlYXRlcyBhIFVJNSBjbGFzcyBvdXQgb2YgdGhlIFRTIGNsYXNzXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVVSTVDbGFzcyh0YXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCB0YXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG5cdH0gYXMgQ2xhc3NEZWNvcmF0b3I7XG59XG50eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmE6IHVua25vd25bXSkgPT4gVDtcblxuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXG5cdFx0bGV0IGludGVyZmFjZVByb3RvVHlwZVRvTWl4ID0gaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlO1xuXHRcdHdoaWxlIChpbnRlcmZhY2VQcm90b1R5cGVUb01peCkge1xuXHRcdFx0YmFzZUN0b3IgPSBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKGJhc2VDdG9yLCBtZXRhZGF0YSwgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdFx0aW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdH1cblx0XHRwcm9wYWdhdGVIb29rRnJvbU1peGluKGJhc2VDdG9yLCBpbnRlcmZhY2VDbGFzcyk7XG5cblx0XHQvLyBIb29rIHRvIGFkZCBwb3RlbnRpYWxseSBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpblxuXHRcdGludGVyZmFjZUNsYXNzLnByb3RvdHlwZS5zZXR1cE1peGluPy4oYmFzZUN0b3IpO1xuXHRcdHJldHVybiBiYXNlQ3Rvcjtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVjZWl2aW5nIGNvbnRyb2wuXG5cdCAqIElmIG5vdCBkZWZpbmVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFkZGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2VOYW1lPygpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gYWRkIG1vcmUgbG9naWMgdG8gdGhlIG1peGluLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIHRoZSBiYXNlIGNsYXNzLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBiYXNlIGNsYXNzIHRoYXQgd2lsbCBiZSBleHRlbmRlZFxuXHQgKi9cblx0c2V0dXBNaXhpbj8oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2U8VCBleHRlbmRzIFVJNUVsZW1lbnQ+KCk6IFJlZjxUPiB7XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcblx0XHRzZXRDdXJyZW50OiBmdW5jdGlvbiAob0NvbnRyb2xJbnN0YW5jZTogVCk6IHZvaWQge1xuXHRcdFx0dGhpcy5jdXJyZW50ID0gb0NvbnRyb2xJbnN0YW5jZTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG9iamVjdCB3aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIHRocm91Z2gganN4IHRlbXBsYXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuZnVuY3Rpb24gX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyhcblx0YmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRiYXNlQ2xhc3NNZXRhZGF0YTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbixcblx0aW50ZXJmYWNlQ2xhc3NQcm90b3R5cGU6IEZ1bmN0aW9uW1wicHJvdG90eXBlXCJdXG4pOiBVSTVDb250cm9sQW5kTW9yZSB7XG5cdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZT8uZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdGlmIChpbnRlcmZhY2VOYW1lKSB7XG5cdFx0YmFzZUNsYXNzTWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9XG5cblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAobmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIG5hbWUgIT09IFwic2V0dXBNaXhpblwiICYmIG5hbWUgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0aWYgKCFiYXNlQ3Rvci5wcm90b3R5cGVbbmFtZV0pIHtcblx0XHRcdFx0Ly8gVGhlIGJhc2UgY2xhc3MgXCJ3aW5zXCIgb3ZlciB0aGUgbWl4aW5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUsIG5hbWUpIHx8IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0gbWVyZ2UoYmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhLCBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZS5tZXRhZGF0YSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJhc2VDdG9yO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIGlkZW50aWZpZXIgdXNlZCB0byByZWZlcmVuY2UgdGhlIGNvbXBvbmVudCBzdGF0ZSBtb2RlbCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBzeXN0ZW0uXG4gKiBUaGlzIGNvbnN0YW50IGRlZmluZXMgdGhlIGtleSB1bmRlciB3aGljaCBjb21wb25lbnQgc3RhdGUgZGF0YSBpcyBzdG9yZWQgYW5kIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX01PREVMX05BTUUgPSBcIiRjb21wb25lbnRTdGF0ZVwiO1xuZnVuY3Rpb24gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KGpzb25Nb2RlbDogSlNPTk1vZGVsLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgcGF0aEluTW9kZWwgPSBgLyR7cHJvcC50b1N0cmluZygpfWA7XG5cdGNvbnN0IG9PYmogPSBkZWVwQ2xvbmUoanNvbk1vZGVsLmdldE9iamVjdChwYXRoSW5Nb2RlbCkpO1xuXHRsZXQgb1RhcmdldDtcblx0aWYgKHByb3AgPT09IFwiX19iaW5kaW5nSW5mb1wiKSB7XG5cdFx0cmV0dXJuIHsgbW9kZWw6IFNUQVRFX01PREVMX05BTUUgfTtcblx0fVxuXHRpZiAob09iaiA9PT0gdW5kZWZpbmVkIHx8IG9PYmogPT09IG51bGwpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSBvT2JqO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvT2JqKSkge1xuXHRcdG9UYXJnZXQgPSBuZXcgUHJveHkob09iaiwge1xuXHRcdFx0Z2V0KHRhcmdldDogdW5rbm93bltdLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgcmVmID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmLmJpbmQodGFyZ2V0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWYgPT09IHVuZGVmaW5lZCAmJiBpc05hTihOdW1iZXIocC50b1N0cmluZygpKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X19iaW5kaW5nSW5mbzoge1xuXHRcdFx0XHRcdFx0XHRtb2RlbDogU1RBVEVfTU9ERUxfTkFNRSxcblx0XHRcdFx0XHRcdFx0cGF0aDogcFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlZjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0ID0geyAuLi5vT2JqIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIG9UYXJnZXQgIT09IG51bGwpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogU1RBVEVfTU9ERUxfTkFNRSxcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgU1RBVEVfTU9ERUxfTkFNRSk7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFNUQVRFX01PREVMX05BTUUpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAoXG5cdFx0XHRcdG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSxcblx0XHRcdFx0c2NvcGU/OiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHRcdCk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGUpIHtcblx0XHRcdFx0XHQvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBtb2RlbCBkaXJlY3RseSBmcm9tIG1TZXR0aW5ncy5tb2RlbHMgYXMgdGhpcyBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCB3aGVuIGNsb25pbmdcblx0XHRcdFx0XHRtU2V0dGluZ3MubW9kZWxzID0geyAuLi5tU2V0dGluZ3MubW9kZWxzIH07XG5cdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5tb2RlbHMuJGNvbXBvbmVudFN0YXRlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncywgc2NvcGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFNUQVRFX01PREVMX05BTUUpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlICE9PSBiaW5kaW5nUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gdGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BWYWx1ZSB9OyAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJvcGVydHlEZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgdGhpc1twcm9wZXJ0eUtleV0gIT09IHByb3BlcnR5RGVmYXVsdCkge1xuXHRcdFx0XHRcdC8vIGRvbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmVcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5RGVmYXVsdDtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZiA9IG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldO1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA/PyBhZ2dyZWdhdGlvbkRlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgKGRlZmF1bHRWYWx1ZSBhcyBVSTVFbGVtZW50KT8uaXNBKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1thZ2dyZWdhdGlvbktleV0gPSBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucmVmZXJlbmNlcyk7XG5cdFx0XHRyZWZlcmVuY2VQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogY3JlYXRlUmVmZXJlbmNlKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGhvZE5hbWUgaW4gb2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IG9iai5tZXRhZGF0YS5tZXRob2RzW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIgfHwgbWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLm1ldGhvZEhvbGRlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXIgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbdGhpc1ttZXRob2ROYW1lXV07XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG1ldGhvZE5hbWUsIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXS5wdXNoKHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKC4uLm1ldGhvZEFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZEFycmF5cy5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhcmcgb2YgbWV0aG9kQXJyYXlzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBhcmcuYXBwbHkodGhpcywgbWV0aG9kQXJncyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQkFBcUIsR0FBRywwQkFBMEI7O0VBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQWdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFDLFFBQUEsQ0FBQUQscUJBQUEsR0FBQUEscUJBQUE7RUF3Q0EsTUFBTUUsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUs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
|