@sapui5/sap.fe.test 1.139.0 → 1.139.4
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
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -627,6 +627,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
627
627
|
_exports.processFragment = processFragment;
|
|
628
628
|
function serializeControl(controlToSerialize) {
|
|
629
629
|
let showCustomStyleClasses = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
630
|
+
let ignoreKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
630
631
|
let tabCount = 0;
|
|
631
632
|
const UID = /uid--id-\d{13}-\d{1,3}/;
|
|
632
633
|
const CONTROLID = /id-\d{13}-\d{1,3}/;
|
|
@@ -660,7 +661,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
660
661
|
id = typeof id === "string" ? id?.replace?.(CONTROLID, "id") : id;
|
|
661
662
|
let data = `{id: ${ManagedObjectMetadata.isGeneratedId(id) ? "__dynamicId" : id}`;
|
|
662
663
|
for (const oControlKey in control.mProperties) {
|
|
663
|
-
if (control.mProperties.hasOwnProperty(oControlKey)) {
|
|
664
|
+
if (control.mProperties.hasOwnProperty(oControlKey) && !ignoreKeys.includes(oControlKey)) {
|
|
664
665
|
let propertyValue = control.mProperties[oControlKey];
|
|
665
666
|
propertyValue = typeof propertyValue === "string" ? propertyValue?.replace?.(UID, "uid--id") : propertyValue;
|
|
666
667
|
propertyValue = typeof propertyValue === "string" ? propertyValue?.replace?.(CONTROLID, "id") : propertyValue;
|
|
@@ -684,7 +685,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
684
685
|
}
|
|
685
686
|
}
|
|
686
687
|
for (const oControlKey in control.mAssociations) {
|
|
687
|
-
if (control.mAssociations.hasOwnProperty(oControlKey)) {
|
|
688
|
+
if (control.mAssociations.hasOwnProperty(oControlKey) && !ignoreKeys.includes(oControlKey)) {
|
|
688
689
|
let associationValue = control.mAssociations[oControlKey];
|
|
689
690
|
if (!Array.isArray(associationValue)) {
|
|
690
691
|
associationValue = [associationValue];
|
|
@@ -703,7 +704,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
703
704
|
data += `,\n${getTab()} customStyleClasses : ${control.aCustomStyleClasses.join(", ")}`;
|
|
704
705
|
}
|
|
705
706
|
for (const oControlKey in control.mEventRegistry) {
|
|
706
|
-
if (control.mEventRegistry.hasOwnProperty(oControlKey)) {
|
|
707
|
+
if (control.mEventRegistry.hasOwnProperty(oControlKey) && !ignoreKeys.includes(oControlKey)) {
|
|
707
708
|
data += `,\n${getTab()} ${oControlKey}: true`;
|
|
708
709
|
}
|
|
709
710
|
}
|
|
@@ -741,6 +742,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
741
742
|
function serializeControlAsXML(controlToSerialize) {
|
|
742
743
|
let showCustomStyleClasses = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
743
744
|
let preferValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
745
|
+
let ignoreKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
744
746
|
let tabCount = 0;
|
|
745
747
|
const UID = /uid--id-\d{13}-\d{1,3}/;
|
|
746
748
|
const CONTROLID = /id-\d{13}-\d{1,3}/;
|
|
@@ -815,7 +817,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
815
817
|
if (!ManagedObjectMetadata.isGeneratedId(id)) {
|
|
816
818
|
data = `id="${id}"`;
|
|
817
819
|
}
|
|
818
|
-
let keys = Object.keys(control.mProperties).filter(propName => propName !== "id").concat(Object.keys(control.mBindingInfos)).concat(Object.keys(control.mAssociations)).concat(Object.keys(control.mEventRegistry));
|
|
820
|
+
let keys = Object.keys(control.mProperties).filter(propName => propName !== "id").concat(Object.keys(control.mBindingInfos)).concat(Object.keys(control.mAssociations)).concat(Object.keys(control.mEventRegistry)).filter(propName => !ignoreKeys.includes(propName));
|
|
819
821
|
keys = keys.sort((a, b) => a.localeCompare(b));
|
|
820
822
|
const uniqueKeys = new Set(keys);
|
|
821
823
|
keys = Array.from(uniqueKeys);
|
|
@@ -1090,4 +1092,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
1090
1092
|
_exports.delayFor = delayFor;
|
|
1091
1093
|
return _exports;
|
|
1092
1094
|
}, false);
|
|
1093
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbEZpbHRlciIsImZpZWxkaGVscCIsInJldmVzZU5hbWVzcGFjZU1hcCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJyZXZlcnNlTWFwIiwiY3VycmVudE5hbWUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJiaW5kaW5nQ29udGV4dHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJmbiIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsInNlcmlhbGl6ZXIiLCJ3aW5kb3ciLCJYTUxTZXJpYWxpemVyIiwibm9kZSIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiU1RBUlQiLCJFTkQiLCJVSUQiLCJVSUQyIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJvbk9wZW5UYWdFbmQiLCJzZWxmQ2xvc2VkIiwib25DbG9zZVRhZ1N0YXJ0Iiwib25DbG9zZVRhZ05hbWUiLCJvbkNsb3NlVGFnRW5kIiwicGFyc2UiLCJ0cmltIiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImFsbE9wdGlvbnMiLCJlbnRyaWVzIiwiZWRteEZpbGVOYW1lIiwiZmlsZW5hbWUiLCJfcmVmIiwib3B0aW9uS2V5Iiwib3B0aW9uVmFsdWUiLCJ0b1N0cmluZyIsImJhc2VuYW1lIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJzb3VyY2VzIiwicmVxdWlyZSIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJjbGFzc05hbWVPRGF0YU1vZGVsIiwic2NvcGVPYmplY3QiLCJnZXRNb2RlbCIsImlzQSIsImdldFNlcnZpY2VVcmwiLCJnZXRTZXJ2aWNlIiwiZ2V0Q2FwYWJpbGl0aWVzIiwic2VydmljZUluc3RhbmNlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJnZXRJbnRlcmZhY2UiLCJnZXRGYWtlRGlhZ25vc3RpY3MiLCJpc3N1ZXMiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsIk1hbmlmZXN0V3JhcHBlciIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ0luZm8iLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwicXVlcnlTZWxlY3RvckFsbCIsImlkIiwiY2hhbmdlcyIsImNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCIsImFwcElkIiwib01hbmlmZXN0IiwidHlwZSIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXRDb21wb25lbnREYXRhIiwiZ2V0TWFuaWZlc3RPYmplY3QiLCJnZXRFbnRyeSIsImdldExvY2FsSWQiLCJzSWQiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiTG9hZGVyIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiY2hhbmdlc0FwcGxpZWQiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInRvQmUiLCJ2YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMiLCJmbGF0TWFwIiwiZSIsImZpbHRlciIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwianN4IiwiZGVmaW5lWE1MTmFtZXNwYWNlTWFwIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJzZXJpYWxpemVDb250cm9sIiwiY29udHJvbFRvU2VyaWFsaXplIiwic2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyIsInRhYkNvdW50IiwiQ09OVFJPTElEIiwiZ2V0VGFiIiwidG9BZGQiLCJ0YWIiLCJpIiwic2VyaWFsaXplRGVsZWdhdGUiLCJzdGFydCIsInNBZ2dyZWdhdGlvbk5hbWUiLCJjb250cm9sRGV0YWlsIiwiZ2V0UGFyZW50IiwiaW5kZXhJblBhcmVudCIsImdldEFnZ3JlZ2F0aW9uIiwiaW5kZXhPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImVuZCIsIm1pZGRsZSIsImdldElkIiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsIm9Db250cm9sS2V5IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1CaW5kaW5nSW5mb3MiLCJiaW5kaW5nRGV0YWlsIiwib091dHB1dEZvcm1hdCIsImJpbmRpbmciLCJtQXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25WYWx1ZSIsImFzc29jaWF0aW9uVmFsdWVFbGVtZW50IiwiYUN1c3RvbVN0eWxlQ2xhc3NlcyIsIm1FdmVudFJlZ2lzdHJ5Iiwic3RhcnRBZ2dyZWdhdGlvbiIsInNOYW1lIiwib3V0IiwiZW5kQWdncmVnYXRpb24iLCJjb250cm9sVG9SZW5kZXIiLCJTZXJpYWxpemVyIiwic2VyaWFsaXplIiwic2VyaWFsaXplQ29udHJvbEFzWE1MIiwicHJlZmVyVmFsdWUiLCJkZWZpbmVkTmFtZXNwYWNlcyIsImdldE5hbWVzcGFjZUFsaWFzIiwiY2xhc3NOYW1lIiwibmFtZXNTcGxpdCIsInNwbGl0IiwibmFtZXNwYWNlIiwibmFtZXNwYWNlQWxpYXMiLCJuYW1lRnVsbCIsImhhc0FnZ3JlZ2F0aW9uIiwibUFnZ3JlZ2F0aW9uc0tleSIsIm1BZ2dyZWdhdGlvbnMiLCJwcm9wTmFtZSIsImNvbmNhdCIsInVuaXF1ZUtleXMiLCJTZXQiLCJmcm9tIiwidGVtcGxhdGUiLCJmRnVuY3Rpb24iLCJvdXRYTUwiLCJjcmVhdGVBd2FpdGVyIiwiZm5SZXNvbHZlIiwibXlQcm9taXNlIiwicHJvbWlzZSIsInJlZ2lzdGVyTW9ja0ZyYWdtZW50cyIsIl9sZW4yIiwiX2tleTIiLCJvcmlnaW5hbExvYWRUZW1wbGF0ZSIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlUHJvbWlzZSIsImxvYWRUZW1wbGF0ZVN0dWIiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJ0ZW1wbGF0ZU5hbWUiLCJleHRlbnNpb24iLCJwYXJzZVhNTFN0cmluZyIsImluaXRpYWxpemVBcHBDb21wb25lbnQiLCJ2aWV3TGV2ZWwiLCJjZHNGaWxlIiwiX19kaXJuYW1lIiwiZ3VpZCIsInVpZCIsImNkc0NvbnRlbnQiLCJqZXN0VUk1IiwibW9ja1VybCIsIkRlZmF1bHRQYWdlQ29udGVudCIsIl9QYWdlQ29udHJvbGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwicmVuZGVyIiwiX2pzeCIsIlBhZ2UiLCJQYWdlQ29udHJvbGxlciIsInNhcCIsInVpIiwiZGVmaW5lIiwiX0FwcENvbXBvbmVudCIsIkFwcENvbXBvbmVudCIsIm1ldGFkYXRhIiwibWFuaWZlc3QiLCJ0aXRsZSIsImRhdGFTb3VyY2VzIiwibWFpblNlcnZpY2UiLCJ1cmkiLCJvZGF0YVZlcnNpb24iLCJkYXRhU291cmNlIiwicm91dGluZyIsInRhcmdldHMiLCJEZWZhdWx0IiwibWFpbkNvbnRleHRQYXRoIiwidmlld1R5cGUiLCJ2aWV3Q29udGVudCIsInBhZ2VDb250ZW50Iiwicm91dGVzIiwicGF0dGVybiIsInRhcmdldCIsImZlTWFuaWZlc3RTZXR0aW5ncyIsIm1vY2tBcHBDb21wb25lbnQiLCJpbml0aWFsaXplZCIsInYiLCJnZXRSb3V0ZXIiLCJnZXRUYXJnZXQiLCJsb2FkIiwidGVtcGxhdGVDb21wb25lbnQiLCJvYmplY3QiLCJmaW5kRWxlbWVudCIsImNvbGxlY3Rpb24iLCJlbGVtZW50IiwiaXRlbSIsIndhaXRGb3JFdmVudCIsImV2ZW50TmFtZSIsImF0dGFjaEV2ZW50T25jZSIsImV2ZW50Iiwia2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0IiwiZW5hYmxlZCIsIkJpbmRpbmdQYXJzZXIiLCJfa2VlcEJpbmRpbmdTdHJpbmdzIiwiZGVsYXlGb3IiLCJkZWxheSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSmVzdFRlbXBsYXRpbmdIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW55QW5ub3RhdGlvbiwgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBjb21waWxlciBmcm9tIFwiQHNhcC9jZHMtY29tcGlsZXJcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHR5cGUgeyBSYW5nZSwgUmFuZ2VzIH0gZnJvbSBcImh0bWxqcy1wYXJzZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNlciB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2FkZXJFeHRlbnNpb25zIGZyb20gXCJzYXAvYmFzZS91dGlsL0xvYWRlckV4dGVuc2lvbnNcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgcGFyc2VYTUxTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcywgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvdGVzdC9VSTVNb2NrSGVscGVyXCI7XG5pbXBvcnQgUGFnZSBmcm9tIFwic2FwL20vUGFnZVwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCJzYXAvdWkvZmwvVXRpbHNcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvTG9hZGVyXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL3ByZXByb2Nlc3NvcnMvWG1sUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgQXBwU3RvcmFnZSBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL1N0b3JhZ2VcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBfTWV0YWRhdGFSZXF1ZXN0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9saWIvX01ldGFkYXRhUmVxdWVzdG9yXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QgfSBmcm9tIFwiLi9KZXN0RmxleGliaWxpdHlIZWxwZXJcIjtcblxudHlwZSBQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGUgPSB7XG5cdG1vZGVsczoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0fTtcblx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xudHlwZSBNb2NrRnJhZ21lbnQgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcblxudHlwZSBKZXN0VGVtcGxhdGVkVmlldyA9IHtcblx0YXNFbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRhc1N0cmluZzogc3RyaW5nO1xufTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvU2hhcmU6IFwic2FwLmZlLm1hY3Jvcy5zaGFyZVwiLFxuXHRtYWNyb3M6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRmZUJCOiBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmdcIixcblx0bWFjcm9GaWVsZDogXCJzYXAuZmUubWFjcm9zLmZpZWxkXCIsXG5cdG1hY3JvZGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGxvZzogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGN1c3RvbURhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRjb250cm9sOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdGNvbnRyb2xzOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIixcblx0Y29yZTogXCJzYXAudWkuY29yZVwiLFxuXHRkdDogXCJzYXAudWkuZHRcIixcblx0bTogXCJzYXAubVwiLFxuXHRmOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRmbDogXCJzYXAudWkuZmxcIixcblx0aW50ZXJuYWxNYWNybzogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdG1kYzogXCJzYXAudWkubWRjXCIsXG5cdGFjdGlvbnRvb2xiYXI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdG1kY0ZpZWxkOiBcInNhcC51aS5tZGMuZmllbGRcIixcblx0bWRjVGFibGU6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHR1OiBcInNhcC51aS51bmlmaWVkXCIsXG5cdHV4YXA6IFwic2FwLnV4YXBcIixcblx0bWFjcm9NaWNyb0NoYXJ0OiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRtaWNyb0NoYXJ0OiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdG1hY3JvVGFibGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZVwiLFxuXHRtZGN2YzogXCJzYXAudWkubWRjLnZhbHVlaGVscC5jb250ZW50XCIsXG5cdG1kY3Y6IFwic2FwLnVpLm1kYy52YWx1ZWhlbHBcIixcblx0dmFsdWVIZWxwOiBcInNhcC5mZS5tYWNyb3MudmFsdWVIZWxwXCIsXG5cdGNvbnRlbnRTd2l0Y2hlcjogXCJzYXAuZmUubWFjcm9zLmNvbnRlbnRTd2l0Y2hlclwiLFxuXHRmaWx0ZXJCYXI6IFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXJcIixcblx0ZHJhZnRJbmRpY2F0b3I6IFwic2FwLmZlLm1hY3Jvcy5kcmFmdEluZGljYXRvclwiLFxuXHR2aXN1YWxGaWx0ZXI6IFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzXCIsXG5cdGZpZWxkaGVscDogXCJzYXAudWkuY29yZS5maWVsZGhlbHBcIlxufTtcbmNvbnN0IHJldmVzZU5hbWVzcGFjZU1hcCA9IE9iamVjdC5rZXlzKG5hbWVTcGFjZU1hcCkucmVkdWNlKChyZXZlcnNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjdXJyZW50TmFtZSkgPT4ge1xuXHRyZXZlcnNlTWFwW25hbWVTcGFjZU1hcFtjdXJyZW50TmFtZV1dID0gY3VycmVudE5hbWU7XG5cdHJldHVybiByZXZlcnNlTWFwO1xufSwge30pO1xuY29uc3Qgc2VsZWN0ID0geHBhdGgudXNlTmFtZXNwYWNlcyhuYW1lU3BhY2VNYXApO1xuXG5jb25zdCBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlID0geyBjb21wdXRlRmllbGRHcm91cElkczogKCkgPT4gW10gfTtcblxuZnVuY3Rpb24gX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbTogTm9kZSwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8qKlxuXHQgKiBpZiBhIHJvb3QgZWxlbWVudCBoYXMgYmVlbiBhZGRlZCBkdXJpbmcgdGhlIHRlbXBsYXRpbmcgYnkgb3VyIEplc3QgVGVtcGxhdGluZyBtZXRob2RzXG5cdCAqIHRoZSByb290IGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIHNlbGVjdG9yIHBhdGguXG5cdCAqL1xuXHRjb25zdCByb290UGF0aCA9IFwiL3Jvb3RcIjtcblx0cmV0dXJuIGAke3htbGRvbS5ub2RlTmFtZSA9PT0gXCJyb290XCIgJiYgIXNlbGVjdG9yLnN0YXJ0c1dpdGgocm9vdFBhdGgpID8gcm9vdFBhdGggOiBcIlwifSR7c2VsZWN0b3J9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MoXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8UHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlPiB7XG5cdGxldCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKHNNZXRhZGF0YVVybCkge1xuXHRcdG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0XHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblx0XHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IGNvbnZlcnRlckNvbnRleHQ6IG5ldyBUZW1wbGF0ZU1vZGVsKHt9LCBvTWV0YU1vZGVsISkgfSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdFx0bU1vZGVsc1tzTW9kZWxOYW1lXSA9IG5ldyBUZW1wbGF0ZU1vZGVsKG1Nb2RlbHNbc01vZGVsTmFtZV0uZGF0YSwgb01ldGFNb2RlbCEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgc2V0dGluZ3M6IGFueSA9IHtcblx0XHRtb2RlbHM6IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0fSxcblx0XHRcdG1Nb2RlbHNcblx0XHQpLFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30sXG5cdFx0YXBwQ29tcG9uZW50OiB7XG5cdFx0XHRnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSxcblx0XHRcdGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQsXG5cdFx0XHRnZXRTaGVsbFNlcnZpY2VzOiBqZXN0LmZuKCksXG5cdFx0XHRnZXRNYW5pZmVzdEVudHJ5OiAoKSA9PiB1bmRlZmluZWRcblx0XHR9XG5cdH07XG5cblx0c2V0dGluZ3MuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZS5tb2NrUmV0dXJuVmFsdWUoZmFrZVNpZGVFZmZlY3RTZXJ2aWNlID8/IGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXHQvL0luamVjdCBtb2RlbHMgYW5kIGJpbmRpbmdDb250ZXh0c1xuXHRPYmplY3Qua2V5cyhtQmluZGluZ0NvbnRleHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0LyogQXNzZXJ0IHRvIG1ha2Ugc3VyZSB0aGUgYW5ub3RhdGlvbnMgYXJlIGluIHRoZSB0ZXN0IG1ldGFkYXRhIC0+IGF2b2lkIG1pc2xlYWRpbmcgdGVzdHMgKi9cblx0XHRleHBlY3QodHlwZW9mIG9NZXRhTW9kZWw/LmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NLZXldID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pOyAvL1ZhbHVlIGlzIHNQYXRoXG5cdFx0c2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblx0cmV0dXJuIHNldHRpbmdzO1xufVxuXG5mdW5jdGlvbiBfbG9hZFJlc291cmNlVmlldyh2aWV3TmFtZTogc3RyaW5nKTogRWxlbWVudCB7XG5cdGNvbnN0IG5hbWUgPSB2aWV3TmFtZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpICsgXCIudmlldy54bWxcIjtcblx0Y29uc3QgdmlldyA9IExvYWRlckV4dGVuc2lvbnMubG9hZFJlc291cmNlKG5hbWUpO1xuXHRyZXR1cm4gdmlldy5kb2N1bWVudEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBydW5YUGF0aFF1ZXJ5ID0gZnVuY3Rpb24gKHNlbGVjdG9yOiBzdHJpbmcsIHhtbGRvbTogTm9kZSB8IHVuZGVmaW5lZCkge1xuXHRyZXR1cm4gc2VsZWN0KHNlbGVjdG9yLCB4bWxkb20pO1xufTtcblxuZXhwZWN0LmV4dGVuZCh7XG5cdHRvSGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgZGlkIG5vdCBmaW5kIGNvbnRyb2xzIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID49IDFcblx0XHR9O1xuXHR9LFxuXHR0b05vdEhhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYFRoZXJlIGlzIGEgY29udHJvbCBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA9PT0gMFxuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBDaGVja3MgZm9yIGVycm9ycyBpbiBgeG1sYCBjcmVhdGVkIGR1cmluZyB0ZW1wbGF0aW5nIG9mIGFuIFhNTCBzdHJpbmcgb3Jcblx0ICogYW4gWE1MIG5vZGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tlcyBmb3IgdGhlIHhtbCBlcnJvcnMgY3JlYXRlZCBieSB0aGVcblx0ICogZnVuY3Rpb24gW0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3Nvci5jcmVhdGVFcnJvclhNTF17QGxpbmsgc2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZy5CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IjY3JlYXRlRXJyb3JYTUx9LlxuXHQgKiBAcGFyYW0geG1sIFhNTCBTdHJpbmcgb3IgWE1MIE5vZGUgdG8gYmUgdGVzdGVkIGZvciBlcnJvcnNcblx0ICogQHJldHVybnMgSmVzdCBNYXRjaGVyIHJlc3VsdCBvYmplY3Rcblx0ICovXG5cdHRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoeG1sOiBzdHJpbmcgfCBOb2RlKSB7XG5cdFx0Y29uc3QgeG1sVGV4dCA9IHR5cGVvZiB4bWwgPT09IFwic3RyaW5nXCIgPyB4bWwgOiBzZXJpYWxpemVYTUwoeG1sKTtcblx0XHRjb25zdCBiYXNlNjRFbnRyaWVzOiBzdHJpbmdbXSA9IHhtbFRleHQubWF0Y2goL0JCRlxcLmJhc2U2NERlY29kZVxcKCcoW14nXSopJ1xcKS9nbSkgfHwgKFtdIGFzIHN0cmluZ1tdKTtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSA9IGJhc2U2NEVudHJpZXMubWFwKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gYXRvYihtZXNzYWdlLm1hdGNoKC8oJ1teJ10qKS8pPy5bMF0/LnNsaWNlKDEpIHx8IFwiXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSk7XG5cdFx0aWYgKGVycm9yTWVzc2FnZXMubGVuZ3RoIDw9IDApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGBYTUwgVGVtcGxhdGluZyB3aXRob3V0IGVycm9yc2AsXG5cdFx0XHRcdHBhc3M6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBlcnJvck1lc3NhZ2VzLmpvaW4oXCJcXG5cIiksXG5cdFx0XHRcdHBhc3M6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGlmIChBcnJheS5pc0FycmF5KHhtbFN0cmluZykpIHtcblx0XHR4bWxTdHJpbmcgPSB4bWxTdHJpbmcuam9pbihcIlwiKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udHJvbEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChjb250cm9sU2VsZWN0b3I6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nLCB4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VsZWN0b3IgPSBgc3RyaW5nKCR7X2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbERvbSwgY29udHJvbFNlbGVjdG9yKX0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgcGFydHMgb3IgdGhlIGNvbXBsZXRlIGdpdmVuIFhNTCBET00gdG8gc3RyaW5nLlxuICogQHBhcmFtIHhtbERvbSBET00gbm9kZSB0aGF0IGlzIHRvIGJlIHNlcmlhbGl6ZWQuXG4gKiBAcGFyYW0gc2VsZWN0b3IgT3B0aW9uYWwgc2VsZWN0b3Igb2Ygc3ViIG5vZGVzXG4gKiBAcmV0dXJucyBYTUwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlLCBzZWxlY3Rvcj86IHN0cmluZykge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGxldCB4bWxTdHJpbmc6IHN0cmluZztcblx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pIGFzIE5vZGVbXTtcblx0XHR4bWxTdHJpbmcgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpLmpvaW4oXCJcXG5cIik7XG5cdH0gZWxzZSB7XG5cdFx0eG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyBhIHN0cmluZyBjb250YWluaW5nIGFuIFhNTCBkb2N1bWVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY29uc2lkZXJzIFhNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzLCBpZ25vcmluZyBldmVyeXRoaW5nIGVsc2UgKHRleHQsIGNvbW1lbnRzKS4gQWRkaXRpb25hbGx5LFxuICogYXR0cmlidXRlIHZhbHVlcyBjb250YWluaW5nIGEgdmFyeWluZyBVSUQgYXJlIHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqXG4gKiBBbiBcIlhNTFwiIHN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIHJvb3QgZWxlbWVudHMgY2FuIGJlLlxuICogQHBhcmFtIHhtbFN0cmluZyAgVGhlIGlucHV0IFhNTCBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIFwiWE1MXCIgc3RyaW5ncyB3aXRoIG11bHRpcGxlIHJvb3QgZWxlbWVudHMuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIFhNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBTVEFSVCA9IFwiPF9fWE1MX18+XCIsXG5cdFx0RU5EID0gXCI8L19fWE1MX18+XCIsXG5cdFx0VUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS8sXG5cdFx0VUlEMiA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lyxcblx0XHRsaW5lczogc3RyaW5nW10gPSBbXTtcblxuXHRsZXQgY3VycmVudExpbmUgPSBcIlwiLFxuXHRcdGxldmVsID0gLTEsXG5cdFx0YXR0cmlidXRlczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIH1bXSA9IFtdO1xuXG5cdGZ1bmN0aW9uIG5ld2xpbmUoKSB7XG5cdFx0aWYgKGN1cnJlbnRMaW5lICYmIGN1cnJlbnRMaW5lICE9PSBTVEFSVCkge1xuXHRcdFx0bGluZXMucHVzaChjdXJyZW50TGluZSk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudExpbmUgPSBsZXZlbCA+IDAgPyBcIiAgXCIucmVwZWF0KGxldmVsKSA6IFwiXCI7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVzKCkge1xuXHRcdGlmIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgIWIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgIWIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV2ZWwrKztcblx0XHRcdGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0XHRjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUubmFtZTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZS52YWx1ZSkgY3VycmVudExpbmUgKz0gYXR0cmlidXRlLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdGF0dHJpYnV0ZXMgPSBbXTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmQoZGF0YTogUmFuZ2UpIHtcblx0XHRjdXJyZW50TGluZSArPSBwYXJzZXIucmVhZChkYXRhKTtcblx0fVxuXG5cdGNvbnN0IHBhcnNlciA9IGNyZWF0ZVBhcnNlcih7XG5cdFx0b25PcGVuVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnTmFtZTogYXBwZW5kLFxuXG5cdFx0b25BdHRyTmFtZShkYXRhOiBSYW5nZSkge1xuXHRcdFx0YXR0cmlidXRlcy51bnNoaWZ0KHsgbmFtZTogcGFyc2VyLnJlYWQoZGF0YSkgfSk7XG5cdFx0fSxcblxuXHRcdG9uQXR0clZhbHVlKGRhdGE6IFJhbmdlcy5BdHRyVmFsdWUpIHtcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKS5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpOyAvLyByZXBsYWNlIHZhcnlpbmcgVUlEcyB3aXRoIGEgY29uc3RhbnQgdmFsdWVcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKS5yZXBsYWNlKFVJRDIsIFwiaWRcIik7IC8vIHJlcGxhY2UgdmFyeWluZyBVSURzIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdFbmQoZGF0YTogUmFuZ2VzLk9wZW5UYWdFbmQpIHtcblx0XHRcdGFwcGVuZEF0dHJpYnV0ZXMoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHRcdGlmICghZGF0YS5zZWxmQ2xvc2VkKSBsZXZlbCsrO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGxldmVsLS07XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdOYW1lOiBhcHBlbmQsXG5cdFx0b25DbG9zZVRhZ0VuZDogYXBwZW5kXG5cdH0pO1xuXG5cdHBhcnNlci5wYXJzZShTVEFSVCArIHhtbFN0cmluZyArIEVORCk7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlXG4gKiBzYXAuZmUudGVzdCBhbmQgYSBzZXJ2aWNlIEplc3RTZXJ2aWNlXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChjZHNVcmw6IHN0cmluZywgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Ly8gSWYgdGhlIGNhbGxlciBwcm92aWRlZCBDRFMgY29tcGlsZXIgb3B0aW9uczogSW5jbHVkZSB0aGVtIGluIHRoZSBmaWxlbmFtZS4gVGhpcyBwcmV2ZW50cyB1bnByZWRpY3RhYmxlIHJlc3VsdHMgaWYgdGhlIHNhbWUgQ0RTIHNvdXJjZVxuXHQvLyBmaWxlIGlzIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhIGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucyAoZS5nLiBpbiBhIHRlc3QgcnVubmluZyBpbiBwYXJhbGxlbClcblx0Y29uc3QgYWxsT3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpO1xuXHRhbGxPcHRpb25zLnNvcnQoKGEsIGIpID0+IGJbMF0ubG9jYWxlQ29tcGFyZShhWzBdKSk7XG5cblx0Y29uc3QgZWRteEZpbGVOYW1lID1cblx0XHRhbGxPcHRpb25zLnJlZHVjZShcblx0XHRcdChmaWxlbmFtZSwgW29wdGlvbktleSwgb3B0aW9uVmFsdWVdKSA9PiBgJHtmaWxlbmFtZX0jJHtvcHRpb25LZXl9PSR7b3B0aW9uVmFsdWUudG9TdHJpbmcoKX0jYCxcblx0XHRcdHBhdGguYmFzZW5hbWUoY2RzVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIlwiKVxuXHRcdCkgKyBcIi54bWxcIjtcblxuXHRjb25zdCBlZG14RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGlyLCBlZG14RmlsZU5hbWUpO1xuXG5cdGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteEZpbGVQYXRoLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14RmlsZVBhdGg7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKiBAcGFyYW0gY2RzIFRoZSBDRFMgbW9kZWwuIEl0IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBzZXJ2aWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIGNvbXBpbGVkLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzZXJ2aWNlIG1vZGVsIGFzIEVETVguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZHMyZWRteChjZHM6IHN0cmluZywgc2VydmljZSA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3Qgc291cmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJzb3VyY2UuY2RzXCI6IGNkcyB9O1xuXG5cdC8vIGFsbG93IHRvIGluY2x1ZGUgc3R1ZmYgZnJvbSBAc2FwL2Nkcy9jb21tb25cblx0aWYgKGNkcy5pbmNsdWRlcyhcIidAc2FwL2Nkcy9jb21tb24nXCIpKSB7XG5cdFx0c291cmNlc1tcImNvbW1vbi5jZHNcIl0gPSBmcy5yZWFkRmlsZVN5bmMocmVxdWlyZS5yZXNvbHZlKFwiQHNhcC9jZHMvY29tbW9uLmNkc1wiKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdGNvbnN0IGNzbiA9IGNvbXBpbGVyLmNvbXBpbGVTb3VyY2VzKHNvdXJjZXMsIHt9KTtcblxuXHRjb25zdCBlZG14T3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge1xuXHRcdG9kYXRhRm9yZWlnbktleXM6IHRydWUsXG5cdFx0b2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLFxuXHRcdG9kYXRhQ29udGFpbm1lbnQ6IHRydWUsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y2xhc3NOYW1lT0RhdGFNb2RlbCA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIlxuKTogUHJvbWlzZTxTaWRlRWZmZWN0c1NlcnZpY2U+IHtcblx0Y29uc3Qgc2NvcGVPYmplY3QgPSB7XG5cdFx0Z2V0TW9kZWw6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzQTogKCkgPT4gY2xhc3NOYW1lT0RhdGFNb2RlbCA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiLFxuXHRcdFx0XHRnZXRNZXRhTW9kZWw6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbWV0YU1vZGVsO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRTZXJ2aWNlVXJsOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fSxcblx0XHRnZXRTZXJ2aWNlOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRnZXRDYXBhYmlsaXRpZXM6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IGF3YWl0IG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZSh7IHNjb3BlT2JqZWN0LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9KTtcblx0cmV0dXJuIHNlcnZpY2VJbnN0YW5jZS5nZXRJbnRlcmZhY2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlRGlhZ25vc3RpY3MgPSBmdW5jdGlvbiAoKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKChpc3N1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gbWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aFxuXHRcdD8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGgpIGFzIENvbnRleHQpXG5cdFx0OiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0fWApKTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXG5cdFx0Y29udmVydGVkVHlwZXMsXG5cdFx0bmV3IE1hbmlmZXN0V3JhcHBlcihtYW5pZmVzdFNldHRpbmdzKSxcblx0XHRnZXRGYWtlRGlhZ25vc3RpY3MoKSxcblx0XHRkYXRhTW9kZWxQYXRoXG5cdCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwgdW5kZWZpbmVkLCB7fSwge30sIGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIHsgX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlczogKCkgPT4gW10gfSk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gPFQgPSBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb24+KFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFRcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ0luZm8ucGFyc2UoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5jb25zdCBhcHBseUZsZXhDaGFuZ2VzID0gYXN5bmMgZnVuY3Rpb24gKGZsZXhDaGFuZ2VzOiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LCBvTWV0YU1vZGVsOiBNZXRhTW9kZWwsIHJlc3VsdFhNTDogYW55KSB7XG5cdC8vIHByZWZpeCBJZHNcblx0Wy4uLnJlc3VsdFhNTC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVwiKV0uZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdH0pO1xuXHRjb25zdCBjaGFuZ2VzID0gY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGZsZXhDaGFuZ2VzKTtcblx0Y29uc3QgYXBwSWQgPSBcInNvbWVDb21wb25lbnRcIjtcblx0Y29uc3Qgb01hbmlmZXN0ID0ge1xuXHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRpZDogYXBwSWQsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uXCIsXG5cdFx0XHRjcm9zc05hdmlnYXRpb246IHtcblx0XHRcdFx0b3V0Ym91bmRzOiBbXVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0ge1xuXHRcdGdldERpYWdub3N0aWNzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGdldEZha2VEaWFnbm9zdGljcygpKSxcblx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRNZXRhTW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUob01ldGFNb2RlbClcblx0XHR9KSxcblx0XHRnZXRDb21wb25lbnREYXRhOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHt9KSxcblx0XHRnZXRNYW5pZmVzdE9iamVjdDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRFbnRyeTogZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gKG9NYW5pZmVzdCBhcyBhbnkpW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGdldExvY2FsSWQ6IGplc3QuZm4oKHNJZCkgPT4gc0lkKVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKExvYWRlciwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cblx0amVzdC5zcHlPbihDb21wb25lbnQgYXMgdW5rbm93biBhcyB7IGdldENvbXBvbmVudEJ5SWQ6ICgpID0+IEFwcENvbXBvbmVudCB9LCBcImdldENvbXBvbmVudEJ5SWRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyAwICsgZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdHJldHVybiBqc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwKHJldmVzZU5hbWVzcGFjZU1hcCwgYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0XHR4bWxJbnB1dCxcblx0XHRcdHNNZXRhZGF0YVVybCxcblx0XHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRtTW9kZWxzLFxuXHRcdFx0ZmxleENoYW5nZXMsXG5cdFx0XHRmYWtlU2lkZUVmZmVjdFNlcnZpY2Vcblx0XHQpO1xuXHRcdGNvbnN0IHNlcmlhbGllZFhNTCA9IHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwsIHVuZGVmaW5lZCk7XG5cdFx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0XHRyZXR1cm4gc2VyaWFsaWVkWE1MO1xuXHR9KSBhcyB1bmtub3duIGFzIFByb21pc2U8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSB2aWV3IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBzTWV0YWRhdGFVcmwgVXJsIG9mIHRoZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSBtQmluZGluZ0NvbnRleHRzIE1hcCBvZiB0aGUgYmluZGluZ0NvbnRleHRzIHRvIHNldCBvbiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIG1Nb2RlbHMgTWFwIG9mIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gZmxleENoYW5nZXMgT2JqZWN0IHdpdGggVUkgY2hhbmdlcyBsaWtlICdjaGFuZ2VzJyBvciAndmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzJ1xuICogQHJldHVybnMgVGVtcGxhdGVkIHZpZXcgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhcblx0bmFtZTogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH1cbik6IFByb21pc2U8SmVzdFRlbXBsYXRlZFZpZXc+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRjb25zdCBvVmlld0RvY3VtZW50ID0gX2xvYWRSZXNvdXJjZVZpZXcobmFtZSk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdGxldCBvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9WaWV3RG9jdW1lbnQsIHsgbmFtZTogbmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHRvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMgPz8gW10sIG9NZXRhTW9kZWwsIG9QcmVwcm9jZXNzZWRWaWV3KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGFzRWxlbWVudDogb1ByZXByb2Nlc3NlZFZpZXcsXG5cdFx0YXNTdHJpbmc6IGZvcm1hdFhNTChvUHJlcHJvY2Vzc2VkVmlldz8ub3V0ZXJIVE1MIHx8IFwiXCIpXG5cdH07XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblxuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxSZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLCBzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UpIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgPyBcIl9fZHluYW1pY0lkXCIgOiBpZH1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiID8gcHJvcGVydHlWYWx1ZT8ucmVwbGFjZT8uKFVJRCwgXCJ1aWQtLWlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7SlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Bc3NvY2lhdGlvbnMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUFzc29jaWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KVxuXHRcdFx0XHRcdFx0XHRcdD8gXCJfX2R5bmFtaWNJZFwiXG5cdFx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tRXZlbnRSZWdpc3RyeSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IHRydWVgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBgO1xuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogeyBtQmluZGluZ0luZm9zOiBSZWNvcmQ8c3RyaW5nLCBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbz4gfSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IG91dCA9IGAsXFxuJHtnZXRUYWIoKX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbEFzWE1MKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBNYW5hZ2VkT2JqZWN0IHwgTWFuYWdlZE9iamVjdFtdIHwgbnVsbCxcblx0c2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlLFxuXHRwcmVmZXJWYWx1ZSA9IGZhbHNlXG4pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0Y29uc3QgZGVmaW5lZE5hbWVzcGFjZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmdW5jdGlvbiBnZXROYW1lc3BhY2VBbGlhcyhjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbmFtZXNTcGxpdCA9IGNsYXNzTmFtZS5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbmFtZXNwYWNlID0gbmFtZXNTcGxpdC5zbGljZSgwLCAtMSk7XG5cdFx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0XHRsZXQgbmFtZXNwYWNlQWxpYXMgPSBuYW1lc3BhY2VbbmFtZXNwYWNlLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChyZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXSkge1xuXHRcdFx0bmFtZXNwYWNlQWxpYXMgPSByZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0XHR9XG5cdFx0aWYgKG5hbWVzcGFjZUFsaWFzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gXCJ0ZXN0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lc3BhY2VBbGlhcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZCA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IGNvbnRyb2xEZXRhaWwgPSBcIlwiO1xuXHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleEluUGFyZW50ID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKT8uaW5kZXhPZj8uKGNvbnRyb2wpO1xuXHRcdFx0XHRcdGlmIChpbmRleEluUGFyZW50ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYDwke25hbWVzcGFjZUFsaWFzfToke25hbWV9XFxuYDtcblx0XHRcdGlmICghZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSA9IDE7XG5cdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Z2V0VGFiKCl9eG1sbnM6JHtuYW1lc3BhY2VBbGlhc309XCIke25hbWVTcGFjZU1hcFtuYW1lc3BhY2VBbGlhc119XCJcXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10tLTtcblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYDwvJHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfT5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAvPmA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gXCJcIjtcblx0XHRcdGlmICghTWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpKSB7XG5cdFx0XHRcdGRhdGEgPSBgaWQ9XCIke2lkfVwiYDtcblx0XHRcdH1cblx0XHRcdGxldCBrZXlzID0gT2JqZWN0LmtleXMoY29udHJvbC5tUHJvcGVydGllcylcblx0XHRcdFx0LmZpbHRlcigocHJvcE5hbWUpID0+IHByb3BOYW1lICE9PSBcImlkXCIpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tQmluZGluZ0luZm9zKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1Bc3NvY2lhdGlvbnMpKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkpKTtcblx0XHRcdGtleXMgPSBrZXlzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cdFx0XHRjb25zdCB1bmlxdWVLZXlzID0gbmV3IFNldChrZXlzKTtcblx0XHRcdGtleXMgPSBBcnJheS5mcm9tKHVuaXF1ZUtleXMpO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmICghcHJlZmVyVmFsdWUgJiYgY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLmNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV0gfTtcblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSR7b0NvbnRyb2xLZXl9PVwiJHtiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcucmVwbGFjZShcIj5cIiwgXCImZ3Q7XCIpfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnRlbXBsYXRlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0ke29Db250cm9sS2V5fT0nJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX0nYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZS5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpLnJlcGxhY2UoQ09OVFJPTElELCBcImlkXCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7cHJvcGVydHlWYWx1ZX1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5tQXNzb2NpYXRpb25zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50Py5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7KGFzc29jaWF0aW9uVmFsdWU/LmpvaW4/LihcIixcIikgPz8gYXNzb2NpYXRpb25WYWx1ZSkgfHwgdW5kZWZpbmVkfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5W29Db250cm9sS2V5XVswXT8uZkZ1bmN0aW9uPy5uYW1lKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7Y29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwic29tZUV2ZW50SGFuZGxlclwiYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYFxcbmA7XG5cdFx0XHRsZXQgaGFzQWdncmVnYXRpb24gPSBmYWxzZTtcblx0XHRcdGZvciAoY29uc3QgbUFnZ3JlZ2F0aW9uc0tleSBpbiBjb250cm9sLm1BZ2dyZWdhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiYgY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldLmxlbmd0aCA+IDApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGhhc0FnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGhhc0FnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGRhdGEgKz0gXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRsZXQgb3V0ID0gYFxcbiR7Z2V0VGFiKCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfTwvJHtuYW1lc3BhY2VBbGlhc306JHtzTmFtZX0+XFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIHZpZXcgbGV2ZWwgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgYXBwY29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB0byB1c2UgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBDb21wb25lbnQoXG5cdG9wdGlvbnM/OiB7XG5cdFx0Y2RzRmlsZT86IHN0cmluZztcblx0XHRjb21wb25lbnRJZD86IHN0cmluZztcblx0XHRtYWluQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0cGFnZUNvbnRlbnQ/OiBGdW5jdGlvbjtcblx0XHRtYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzPjtcblx0XHRmZU1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXT47XG5cdFx0Y29udGVudD86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdPjtcblx0XHRndWlkPzogc3RyaW5nO1xuXHR9LFxuXHRuYW1lPzogc3RyaW5nLFxuXHR2aWV3TGV2ZWw/OiBudW1iZXJcbik6IFByb21pc2U8eyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50IH0+IHtcblx0bGV0IGNkc0ZpbGUgPSBvcHRpb25zPy5jZHNGaWxlO1xuXHRpZiAoIWNkc0ZpbGUpIHtcblx0XHRjZHNGaWxlID0gY29tcGlsZUNEUyhwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4vZGF0YS9Qcm9kdWN0cy5jZHNcIikpO1xuXHR9XG5cdGNvbnN0IGd1aWQgPSBvcHRpb25zPy5ndWlkID8/IHVpZCgpO1xuXHRjb25zdCBpZCA9IG9wdGlvbnM/LmNvbXBvbmVudElkID8/IGBzYXAuZmUudGVzdC4ke2d1aWR9YDtcblx0Y29uc3QgY2RzQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjZHNGaWxlKS50b1N0cmluZygpO1xuXHR3aW5kb3cuamVzdFVJNS5tb2NrVXJsKGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9LyRtZXRhZGF0YT9zYXAtbGFuZ3VhZ2U9RU5gLCBjZHNDb250ZW50KTtcblx0Y2xhc3MgRGVmYXVsdFBhZ2VDb250ZW50IGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiA8UGFnZT48L1BhZ2U+O1xuXHRcdH1cblx0fVxuXHRzYXAudWkuZGVmaW5lKGBzYXAvZmUvdGVzdC8ke2d1aWR9L0NvbXBvbmVudGAsIFtcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiXSwgZnVuY3Rpb24gKF9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdFwidXNlIHN0cmljdFwiO1xuXG5cdFx0cmV0dXJuIEFwcENvbXBvbmVudC5leHRlbmQoYHNhcC5mZS50ZXN0LiR7Z3VpZH0uQ29tcG9uZW50YCwge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0bWFuaWZlc3Q6IHtcblx0XHRcdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRcdFx0aWQ6IGB0ZXN0JHtndWlkfWAsXG5cdFx0XHRcdFx0XHR0aXRsZTogXCJBcHAgVGl0bGVcIixcblx0XHRcdFx0XHRcdGRhdGFTb3VyY2VzOiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0XHRcdFx0dXJpOiBgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS9gLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiT0RhdGFcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2RhdGFWZXJzaW9uOiBcIjQuMFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwiXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhU291cmNlOiBcIm1haW5TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHt9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldHM6IHtcblx0XHRcdFx0XHRcdFx0XHREZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSA/PyBcInNhcC5mZS5jb3JlLmZwbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0xldmVsOiB2aWV3TGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Li4uKG9wdGlvbnM/Lm1hbmlmZXN0U2V0dGluZ3MgPz8ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvcHRpb25zPy5tYWluQ29udGV4dFBhdGggPz8gXCIvUHJvZHVjdHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3VHlwZTogXCJKU1hcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udGVudDogb3B0aW9ucz8ucGFnZUNvbnRlbnQgPz8gRGVmYXVsdFBhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IG9wdGlvbnM/LmNvbnRlbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cm91dGVzOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogXCI6P3F1ZXJ5OlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IFwiRGVmYXVsdFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC5mZVwiOiBvcHRpb25zPy5mZU1hbmlmZXN0U2V0dGluZ3MgPz8ge31cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQ8VCBleHRlbmRzIHt9Pihjb250cm9sOiBFdmVudFByb3ZpZGVyLCBldmVudE5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RXZlbnQ8VD4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29udHJvbC5hdHRhY2hFdmVudE9uY2UoZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRyZXNvbHZlKGV2ZW50IGFzIHVua25vd24gYXMgVUk1RXZlbnQ8VD4pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUZWxsIHRoZSBiaW5kaW5nIHBhcnNlciB0byBrZWVwIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRlc3RpbmcuXG4gKiBAcGFyYW0gZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0KGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0QmluZGluZ1BhcnNlci5fa2VlcEJpbmRpbmdTdHJpbmdzID0gZW5hYmxlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGF5Rm9yKGRlbGF5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBdUVBQSxHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQVMsa0NBQWtDLENBQUM7RUFDMURDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLEtBQUssQ0FBQztFQUV0QixNQUFNQyxZQUFvQyxHQUFHO0lBQzVDQyxLQUFLLEVBQUUsZUFBZTtJQUN0QkMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsTUFBTSxFQUFFLGVBQWU7SUFDdkJDLElBQUksRUFBRSx1Q0FBdUM7SUFDN0NDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLFNBQVMsRUFBRSxrRUFBa0U7SUFDN0VDLEdBQUcsRUFBRSxrRUFBa0U7SUFDdkVDLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUVDLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0JDLFFBQVEsRUFBRSx3QkFBd0I7SUFDbENDLElBQUksRUFB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
|
|
1095
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbEZpbHRlciIsImZpZWxkaGVscCIsInJldmVzZU5hbWVzcGFjZU1hcCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJyZXZlcnNlTWFwIiwiY3VycmVudE5hbWUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJiaW5kaW5nQ29udGV4dHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJmbiIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsInNlcmlhbGl6ZXIiLCJ3aW5kb3ciLCJYTUxTZXJpYWxpemVyIiwibm9kZSIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiU1RBUlQiLCJFTkQiLCJVSUQiLCJVSUQyIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJvbk9wZW5UYWdFbmQiLCJzZWxmQ2xvc2VkIiwib25DbG9zZVRhZ1N0YXJ0Iiwib25DbG9zZVRhZ05hbWUiLCJvbkNsb3NlVGFnRW5kIiwicGFyc2UiLCJ0cmltIiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImFsbE9wdGlvbnMiLCJlbnRyaWVzIiwiZWRteEZpbGVOYW1lIiwiZmlsZW5hbWUiLCJfcmVmIiwib3B0aW9uS2V5Iiwib3B0aW9uVmFsdWUiLCJ0b1N0cmluZyIsImJhc2VuYW1lIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJzb3VyY2VzIiwicmVxdWlyZSIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJjbGFzc05hbWVPRGF0YU1vZGVsIiwic2NvcGVPYmplY3QiLCJnZXRNb2RlbCIsImlzQSIsImdldFNlcnZpY2VVcmwiLCJnZXRTZXJ2aWNlIiwiZ2V0Q2FwYWJpbGl0aWVzIiwic2VydmljZUluc3RhbmNlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJnZXRJbnRlcmZhY2UiLCJnZXRGYWtlRGlhZ25vc3RpY3MiLCJpc3N1ZXMiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsIk1hbmlmZXN0V3JhcHBlciIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ0luZm8iLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwicXVlcnlTZWxlY3RvckFsbCIsImlkIiwiY2hhbmdlcyIsImNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCIsImFwcElkIiwib01hbmlmZXN0IiwidHlwZSIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXRDb21wb25lbnREYXRhIiwiZ2V0TWFuaWZlc3RPYmplY3QiLCJnZXRFbnRyeSIsImdldExvY2FsSWQiLCJzSWQiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiTG9hZGVyIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiY2hhbmdlc0FwcGxpZWQiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInRvQmUiLCJ2YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMiLCJmbGF0TWFwIiwiZSIsImZpbHRlciIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwianN4IiwiZGVmaW5lWE1MTmFtZXNwYWNlTWFwIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJzZXJpYWxpemVDb250cm9sIiwiY29udHJvbFRvU2VyaWFsaXplIiwic2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyIsImlnbm9yZUtleXMiLCJ0YWJDb3VudCIsIkNPTlRST0xJRCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJzQWdncmVnYXRpb25OYW1lIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIk1hbmFnZWRPYmplY3RNZXRhZGF0YSIsImlzR2VuZXJhdGVkSWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtQmluZGluZ0luZm9zIiwiYmluZGluZ0RldGFpbCIsIm9PdXRwdXRGb3JtYXQiLCJiaW5kaW5nIiwibUFzc29jaWF0aW9ucyIsImFzc29jaWF0aW9uVmFsdWUiLCJhc3NvY2lhdGlvblZhbHVlRWxlbWVudCIsImFDdXN0b21TdHlsZUNsYXNzZXMiLCJtRXZlbnRSZWdpc3RyeSIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUNvbnRyb2xBc1hNTCIsInByZWZlclZhbHVlIiwiZGVmaW5lZE5hbWVzcGFjZXMiLCJnZXROYW1lc3BhY2VBbGlhcyIsImNsYXNzTmFtZSIsIm5hbWVzU3BsaXQiLCJzcGxpdCIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZUFsaWFzIiwibmFtZUZ1bGwiLCJoYXNBZ2dyZWdhdGlvbiIsIm1BZ2dyZWdhdGlvbnNLZXkiLCJtQWdncmVnYXRpb25zIiwicHJvcE5hbWUiLCJjb25jYXQiLCJ1bmlxdWVLZXlzIiwiU2V0IiwiZnJvbSIsInRlbXBsYXRlIiwiZkZ1bmN0aW9uIiwib3V0WE1MIiwiY3JlYXRlQXdhaXRlciIsImZuUmVzb2x2ZSIsIm15UHJvbWlzZSIsInByb21pc2UiLCJyZWdpc3Rlck1vY2tGcmFnbWVudHMiLCJfbGVuMiIsIl9rZXkyIiwib3JpZ2luYWxMb2FkVGVtcGxhdGUiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZVByb21pc2UiLCJsb2FkVGVtcGxhdGVTdHViIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVtcGxhdGVOYW1lIiwiZXh0ZW5zaW9uIiwicGFyc2VYTUxTdHJpbmciLCJpbml0aWFsaXplQXBwQ29tcG9uZW50Iiwidmlld0xldmVsIiwiY2RzRmlsZSIsIl9fZGlybmFtZSIsImd1aWQiLCJ1aWQiLCJjZHNDb250ZW50IiwiamVzdFVJNSIsIm1vY2tVcmwiLCJEZWZhdWx0UGFnZUNvbnRlbnQiLCJfUGFnZUNvbnRyb2xsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJlbmRlciIsIl9qc3giLCJQYWdlIiwiUGFnZUNvbnRyb2xsZXIiLCJzYXAiLCJ1aSIsImRlZmluZSIsIl9BcHBDb21wb25lbnQiLCJBcHBDb21wb25lbnQiLCJtZXRhZGF0YSIsIm1hbmlmZXN0IiwidGl0bGUiLCJkYXRhU291cmNlcyIsIm1haW5TZXJ2aWNlIiwidXJpIiwib2RhdGFWZXJzaW9uIiwiZGF0YVNvdXJjZSIsInJvdXRpbmciLCJ0YXJnZXRzIiwiRGVmYXVsdCIsIm1haW5Db250ZXh0UGF0aCIsInZpZXdUeXBlIiwidmlld0NvbnRlbnQiLCJwYWdlQ29udGVudCIsInJvdXRlcyIsInBhdHRlcm4iLCJ0YXJnZXQiLCJmZU1hbmlmZXN0U2V0dGluZ3MiLCJtb2NrQXBwQ29tcG9uZW50IiwiaW5pdGlhbGl6ZWQiLCJ2IiwiZ2V0Um91dGVyIiwiZ2V0VGFyZ2V0IiwibG9hZCIsInRlbXBsYXRlQ29tcG9uZW50Iiwib2JqZWN0IiwiZmluZEVsZW1lbnQiLCJjb2xsZWN0aW9uIiwiZWxlbWVudCIsIml0ZW0iLCJ3YWl0Rm9yRXZlbnQiLCJldmVudE5hbWUiLCJhdHRhY2hFdmVudE9uY2UiLCJldmVudCIsImtlZXBCaW5kaW5nU3RyaW5nRm9yVGVzdCIsImVuYWJsZWQiLCJCaW5kaW5nUGFyc2VyIiwiX2tlZXBCaW5kaW5nU3RyaW5ncyIsImRlbGF5Rm9yIiwiZGVsYXkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWE1MU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MsIFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvVUk1TW9ja0hlbHBlclwiO1xuaW1wb3J0IFBhZ2UgZnJvbSBcInNhcC9tL1BhZ2VcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgU2VyaWFsaXplciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9zZXJpYWxpemVyL1NlcmlhbGl6ZXJcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwic2FwL3VpL2ZsL1V0aWxzXCI7XG5pbXBvcnQgRmxleFN0YXRlIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL2ZsZXhTdGF0ZS9GbGV4U3RhdGVcIjtcbmltcG9ydCBMb2FkZXIgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0xvYWRlclwiO1xuaW1wb3J0IFhtbFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IH0gZnJvbSBcIi4vSmVzdEZsZXhpYmlsaXR5SGVscGVyXCI7XG5cbnR5cGUgUHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlID0ge1xuXHRtb2RlbHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIHwgT0RhdGFNZXRhTW9kZWw7XG5cdH07XG5cdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHR9O1xufTtcbnR5cGUgTW9ja0ZyYWdtZW50ID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGNvbnRlbnQ6IHN0cmluZztcbn07XG5cbnR5cGUgSmVzdFRlbXBsYXRlZFZpZXcgPSB7XG5cdGFzRWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZDtcblx0YXNTdHJpbmc6IHN0cmluZztcbn07XG5cbkxvZy5zZXRMZXZlbCgxIGFzIGFueSwgXCJzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3NvclwiKTtcbmplc3Quc2V0VGltZW91dCg0MDAwMCk7XG5cbmNvbnN0IG5hbWVTcGFjZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcblx0bWFjcm86IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRtYWNyb1NoYXJlOiBcInNhcC5mZS5tYWNyb3Muc2hhcmVcIixcblx0bWFjcm9zOiBcInNhcC5mZS5tYWNyb3NcIixcblx0ZmVCQjogXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nXCIsXG5cdG1hY3JvRmllbGQ6IFwic2FwLmZlLm1hY3Jvcy5maWVsZFwiLFxuXHRtYWNyb2RhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRsb2c6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRjdXN0b21EYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y29udHJvbDogXCJzYXAuZmUuY29yZS5jb250cm9sc1wiLFxuXHRjb250cm9sczogXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzXCIsXG5cdGNvcmU6IFwic2FwLnVpLmNvcmVcIixcblx0ZHQ6IFwic2FwLnVpLmR0XCIsXG5cdG06IFwic2FwLm1cIixcblx0ZjogXCJzYXAudWkubGF5b3V0LmZvcm1cIixcblx0Zmw6IFwic2FwLnVpLmZsXCIsXG5cdGludGVybmFsTWFjcm86IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiLFxuXHRtZGM6IFwic2FwLnVpLm1kY1wiLFxuXHRhY3Rpb250b29sYmFyOiBcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhclwiLFxuXHRtZGNGaWVsZDogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdG1kY1RhYmxlOiBcInNhcC51aS5tZGMudGFibGVcIixcblx0dTogXCJzYXAudWkudW5pZmllZFwiLFxuXHR1eGFwOiBcInNhcC51eGFwXCIsXG5cdG1hY3JvTWljcm9DaGFydDogXCJzYXAuZmUubWFjcm9zLm1pY3JvY2hhcnRcIixcblx0bWljcm9DaGFydDogXCJzYXAuc3VpdGUudWkubWljcm9jaGFydFwiLFxuXHRtYWNyb1RhYmxlOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIixcblx0bWRjdmM6IFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudFwiLFxuXHRtZGN2OiBcInNhcC51aS5tZGMudmFsdWVoZWxwXCIsXG5cdHZhbHVlSGVscDogXCJzYXAuZmUubWFjcm9zLnZhbHVlSGVscFwiLFxuXHRjb250ZW50U3dpdGNoZXI6IFwic2FwLmZlLm1hY3Jvcy5jb250ZW50U3dpdGNoZXJcIixcblx0ZmlsdGVyQmFyOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyXCIsXG5cdGRyYWZ0SW5kaWNhdG9yOiBcInNhcC5mZS5tYWNyb3MuZHJhZnRJbmRpY2F0b3JcIixcblx0dmlzdWFsRmlsdGVyOiBcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVyc1wiLFxuXHRmaWVsZGhlbHA6IFwic2FwLnVpLmNvcmUuZmllbGRoZWxwXCJcbn07XG5jb25zdCByZXZlc2VOYW1lc3BhY2VNYXAgPSBPYmplY3Qua2V5cyhuYW1lU3BhY2VNYXApLnJlZHVjZSgocmV2ZXJzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY3VycmVudE5hbWUpID0+IHtcblx0cmV2ZXJzZU1hcFtuYW1lU3BhY2VNYXBbY3VycmVudE5hbWVdXSA9IGN1cnJlbnROYW1lO1xuXHRyZXR1cm4gcmV2ZXJzZU1hcDtcbn0sIHt9KTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRsZXQgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzTWV0YWRhdGFVcmwpIHtcblx0XHRvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdFx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCEpIH0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9LFxuXHRcdGFwcENvbXBvbmVudDoge1xuXHRcdFx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksXG5cdFx0XHRnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLFxuXHRcdFx0Z2V0TWFuaWZlc3RFbnRyeTogKCkgPT4gdW5kZWZpbmVkXG5cdFx0fVxuXHR9O1xuXG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGZha2VTaWRlRWZmZWN0U2VydmljZSA/PyBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsPy5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdHNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cdHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gX2xvYWRSZXNvdXJjZVZpZXcodmlld05hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRjb25zdCBuYW1lID0gdmlld05hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKSArIFwiLnZpZXcueG1sXCI7XG5cdGNvbnN0IHZpZXcgPSBMb2FkZXJFeHRlbnNpb25zLmxvYWRSZXNvdXJjZShuYW1lKTtcblx0cmV0dXJuIHZpZXcuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcnVuWFBhdGhRdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBlcnJvcnMgaW4gYHhtbGAgY3JlYXRlZCBkdXJpbmcgdGVtcGxhdGluZyBvZiBhbiBYTUwgc3RyaW5nIG9yXG5cdCAqIGFuIFhNTCBub2RlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrZXMgZm9yIHRoZSB4bWwgZXJyb3JzIGNyZWF0ZWQgYnkgdGhlXG5cdCAqIGZ1bmN0aW9uIFtCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IuY3JlYXRlRXJyb3JYTUxde0BsaW5rIHNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yI2NyZWF0ZUVycm9yWE1MfS5cblx0ICogQHBhcmFtIHhtbCBYTUwgU3RyaW5nIG9yIFhNTCBOb2RlIHRvIGJlIHRlc3RlZCBmb3IgZXJyb3JzXG5cdCAqIEByZXR1cm5zIEplc3QgTWF0Y2hlciByZXN1bHQgb2JqZWN0XG5cdCAqL1xuXHR0b0hhdmVUZW1wbGF0aW5nRXJyb3JzKHhtbDogc3RyaW5nIHwgTm9kZSkge1xuXHRcdGNvbnN0IHhtbFRleHQgPSB0eXBlb2YgeG1sID09PSBcInN0cmluZ1wiID8geG1sIDogc2VyaWFsaXplWE1MKHhtbCk7XG5cdFx0Y29uc3QgYmFzZTY0RW50cmllczogc3RyaW5nW10gPSB4bWxUZXh0Lm1hdGNoKC9CQkZcXC5iYXNlNjREZWNvZGVcXCgnKFteJ10qKSdcXCkvZ20pIHx8IChbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBiYXNlNjRFbnRyaWVzLm1hcCgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGF0b2IobWVzc2FnZS5tYXRjaCgvKCdbXiddKikvKT8uWzBdPy5zbGljZSgxKSB8fCBcIlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvck1lc3NhZ2VzLmxlbmd0aCA8PSAwKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBgWE1MIFRlbXBsYXRpbmcgd2l0aG91dCBlcnJvcnNgLFxuXHRcdFx0XHRwYXNzOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXCIpLFxuXHRcdFx0XHRwYXNzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh4bWxTdHJpbmcpKSB7XG5cdFx0eG1sU3RyaW5nID0geG1sU3RyaW5nLmpvaW4oXCJcIik7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygke19nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxEb20sIGNvbnRyb2xTZWxlY3Rvcil9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBhcnRzIG9yIHRoZSBjb21wbGV0ZSBnaXZlbiBYTUwgRE9NIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB4bWxEb20gRE9NIG5vZGUgdGhhdCBpcyB0byBiZSBzZXJpYWxpemVkLlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIG9mIHN1YiBub2Rlc1xuICogQHJldHVybnMgWE1MIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplWE1MID0gZnVuY3Rpb24gKHhtbERvbTogTm9kZSwgc2VsZWN0b3I/OiBzdHJpbmcpIHtcblx0Y29uc3Qgc2VyaWFsaXplciA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpO1xuXHRsZXQgeG1sU3RyaW5nOiBzdHJpbmc7XG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKSBhcyBOb2RlW107XG5cdFx0eG1sU3RyaW5nID0gbm9kZXMubWFwKChub2RlKSA9PiBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpKS5qb2luKFwiXFxuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHhtbFN0cmluZyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHMgYSBzdHJpbmcgY29udGFpbmluZyBhbiBYTUwgZG9jdW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBvbmx5IGNvbnNpZGVycyBYTUwgdGFncyBhbmQgYXR0cmlidXRlcywgaWdub3JpbmcgZXZlcnl0aGluZyBlbHNlICh0ZXh0LCBjb21tZW50cykuIEFkZGl0aW9uYWxseSxcbiAqIGF0dHJpYnV0ZSB2YWx1ZXMgY29udGFpbmluZyBhIHZhcnlpbmcgVUlEIGFyZSByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKlxuICogQW4gXCJYTUxcIiBzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSByb290IGVsZW1lbnRzIGNhbiBiZS5cbiAqIEBwYXJhbSB4bWxTdHJpbmcgIFRoZSBpbnB1dCBYTUwgc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGFsc28gYWNjZXB0cyBcIlhNTFwiIHN0cmluZ3Mgd2l0aCBtdWx0aXBsZSByb290IGVsZW1lbnRzLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBYTUwgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgU1RBUlQgPSBcIjxfX1hNTF9fPlwiLFxuXHRcdEVORCA9IFwiPC9fX1hNTF9fPlwiLFxuXHRcdFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vLFxuXHRcdFVJRDIgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS8sXG5cdFx0bGluZXM6IHN0cmluZ1tdID0gW107XG5cblx0bGV0IGN1cnJlbnRMaW5lID0gXCJcIixcblx0XHRsZXZlbCA9IC0xLFxuXHRcdGF0dHJpYnV0ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB9W10gPSBbXTtcblxuXHRmdW5jdGlvbiBuZXdsaW5lKCkge1xuXHRcdGlmIChjdXJyZW50TGluZSAmJiBjdXJyZW50TGluZSAhPT0gU1RBUlQpIHtcblx0XHRcdGxpbmVzLnB1c2goY3VycmVudExpbmUpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRMaW5lID0gbGV2ZWwgPiAwID8gXCIgIFwiLnJlcGVhdChsZXZlbCkgOiBcIlwiO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQXR0cmlidXRlcygpIHtcblx0XHRpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmICFiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmIGIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChhLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpICYmIGIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhLm5hbWUuaW5jbHVkZXMoXCI6XCIpICYmICFiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhLm5hbWUuaW5jbHVkZXMoXCI6XCIpICYmIGIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldmVsKys7XG5cdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdFx0Y3VycmVudExpbmUgKz0gYXR0cmlidXRlLm5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGUudmFsdWUpIGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGxldmVsLS07XG5cdFx0XHRhdHRyaWJ1dGVzID0gW107XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kKGRhdGE6IFJhbmdlKSB7XG5cdFx0Y3VycmVudExpbmUgKz0gcGFyc2VyLnJlYWQoZGF0YSk7XG5cdH1cblxuXHRjb25zdCBwYXJzZXIgPSBjcmVhdGVQYXJzZXIoe1xuXHRcdG9uT3BlblRhZ1N0YXJ0KGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ05hbWU6IGFwcGVuZCxcblxuXHRcdG9uQXR0ck5hbWUoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGF0dHJpYnV0ZXMudW5zaGlmdCh7IG5hbWU6IHBhcnNlci5yZWFkKGRhdGEpIH0pO1xuXHRcdH0sXG5cblx0XHRvbkF0dHJWYWx1ZShkYXRhOiBSYW5nZXMuQXR0clZhbHVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcGFyc2VyLnJlYWQoZGF0YSkucmVwbGFjZShVSUQsIFwidWlkLS1pZFwiKTsgLy8gcmVwbGFjZSB2YXJ5aW5nIFVJRHMgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG5cdFx0XHRhdHRyaWJ1dGVzWzBdLnZhbHVlID0gcGFyc2VyLnJlYWQoZGF0YSkucmVwbGFjZShVSUQyLCBcImlkXCIpOyAvLyByZXBsYWNlIHZhcnlpbmcgVUlEcyB3aXRoIGEgY29uc3RhbnQgdmFsdWVcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnRW5kKGRhdGE6IFJhbmdlcy5PcGVuVGFnRW5kKSB7XG5cdFx0XHRhcHBlbmRBdHRyaWJ1dGVzKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0XHRpZiAoIWRhdGEuc2VsZkNsb3NlZCkgbGV2ZWwrKztcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ1N0YXJ0KGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnTmFtZTogYXBwZW5kLFxuXHRcdG9uQ2xvc2VUYWdFbmQ6IGFwcGVuZFxuXHR9KTtcblxuXHRwYXJzZXIucGFyc2UoU1RBUlQgKyB4bWxTdHJpbmcgKyBFTkQpO1xuXHRyZXR1cm4gbGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYSBDRFMgZmlsZSBpbnRvIGFuIEVETVggZmlsZS5cbiAqIEBwYXJhbSBjZHNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBtdXN0IGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZ2VuZXJhdGVkIEVETVhcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBpbGVDRFMgPSBmdW5jdGlvbiAoY2RzVXJsOiBzdHJpbmcsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjZHNVcmwsIFwidXRmLThcIik7XG5cdGNvbnN0IGVkbXhDb250ZW50ID0gY2RzMmVkbXgoY2RzU3RyaW5nLCBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnMpO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoY2RzVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXG5cdC8vIElmIHRoZSBjYWxsZXIgcHJvdmlkZWQgQ0RTIGNvbXBpbGVyIG9wdGlvbnM6IEluY2x1ZGUgdGhlbSBpbiB0aGUgZmlsZW5hbWUuIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSByZXN1bHRzIGlmIHRoZSBzYW1lIENEUyBzb3VyY2Vcblx0Ly8gZmlsZSBpcyB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMgKGUuZy4gaW4gYSB0ZXN0IHJ1bm5pbmcgaW4gcGFyYWxsZWwpXG5cdGNvbnN0IGFsbE9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKTtcblx0YWxsT3B0aW9ucy5zb3J0KChhLCBiKSA9PiBiWzBdLmxvY2FsZUNvbXBhcmUoYVswXSkpO1xuXG5cdGNvbnN0IGVkbXhGaWxlTmFtZSA9XG5cdFx0YWxsT3B0aW9ucy5yZWR1Y2UoXG5cdFx0XHQoZmlsZW5hbWUsIFtvcHRpb25LZXksIG9wdGlvblZhbHVlXSkgPT4gYCR7ZmlsZW5hbWV9IyR7b3B0aW9uS2V5fT0ke29wdGlvblZhbHVlLnRvU3RyaW5nKCl9I2AsXG5cdFx0XHRwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCJcIilcblx0XHQpICsgXCIueG1sXCI7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBiZSBjb21waWxlZC4gRGVmYXVsdHMgdG8gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2UgPSBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFwic291cmNlLmNkc1wiOiBjZHMgfTtcblxuXHQvLyBhbGxvdyB0byBpbmNsdWRlIHN0dWZmIGZyb20gQHNhcC9jZHMvY29tbW9uXG5cdGlmIChjZHMuaW5jbHVkZXMoXCInQHNhcC9jZHMvY29tbW9uJ1wiKSkge1xuXHRcdHNvdXJjZXNbXCJjb21tb24uY2RzXCJdID0gZnMucmVhZEZpbGVTeW5jKHJlcXVpcmUucmVzb2x2ZShcIkBzYXAvY2RzL2NvbW1vbi5jZHNcIiksIFwidXRmLThcIik7XG5cdH1cblxuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyhzb3VyY2VzLCB7fSk7XG5cblx0Y29uc3QgZWRteE9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHtcblx0XHRvZGF0YUZvcmVpZ25LZXlzOiB0cnVlLFxuXHRcdG9kYXRhRm9ybWF0OiBcInN0cnVjdHVyZWRcIixcblx0XHRvZGF0YUNvbnRhaW5tZW50OiB0cnVlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdFx0c2VydmljZTogc2VydmljZVxuXHR9O1xuXG5cdGNvbnN0IGVkbXggPSBjb21waWxlci50by5lZG14KGNzbiwgZWRteE9wdGlvbnMpO1xuXHRpZiAoIWVkbXgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGF0aW9uIGZhaWxlZC4gSGludDogTWFrZSBzdXJlIHRoYXQgdGhlIENEUyBtb2RlbCBkZWZpbmVzIHNlcnZpY2UgJHtzZXJ2aWNlfS5gKTtcblx0fVxuXHRyZXR1cm4gZWRteDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UgPSBhc3luYyBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdGNsYXNzTmFtZU9EYXRhTW9kZWwgPSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCJcbik6IFByb21pc2U8U2lkZUVmZmVjdHNTZXJ2aWNlPiB7XG5cdGNvbnN0IHNjb3BlT2JqZWN0ID0ge1xuXHRcdGdldE1vZGVsOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0E6ICgpID0+IGNsYXNzTmFtZU9EYXRhTW9kZWwgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIixcblx0XHRcdFx0Z2V0TWV0YU1vZGVsOiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1ldGFNb2RlbDtcblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0U2VydmljZVVybDogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Z2V0U2VydmljZTogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0Q2FwYWJpbGl0aWVzOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBzZXJ2aWNlSW5zdGFuY2UgPSBhd2FpdCBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2UoeyBzY29wZU9iamVjdCwgc2NvcGVUeXBlOiBcIlwiLCBzZXR0aW5nczoge30gfSk7XG5cdHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGhcblx0XHQ/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoKSBhcyBDb250ZXh0KVxuXHRcdDogZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldH1gKSk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFxuXHRcdGNvbnZlcnRlZFR5cGVzLFxuXHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIobWFuaWZlc3RTZXR0aW5ncyksXG5cdFx0Z2V0RmFrZURpYWdub3N0aWNzKCksXG5cdFx0ZGF0YU1vZGVsUGF0aFxuXHQpO1xufTtcbmNvbnN0IG1ldGFNb2RlbENhY2hlOiBhbnkgPSB7fTtcbmV4cG9ydCBjb25zdCBnZXRNZXRhTW9kZWwgPSBhc3luYyBmdW5jdGlvbiAoc01ldGFkYXRhVXJsOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1JlcXVlc3RvciA9IF9NZXRhZGF0YVJlcXVlc3Rvci5jcmVhdGUoe30sIFwiNC4wXCIsIHVuZGVmaW5lZCwge30sIHt9LCBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCB7IF9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXM6ICgpID0+IFtdIH0pO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIDxUID0gUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uPihcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0cHJvcGVydHk/OiBUXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+O1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdJbmZvLnBhcnNlKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqIEBwYXJhbSBiaW5kaW5nU3RyaW5nIFRoZSBiaW5kaW5nIHN0cmluZy5cbiAqIEBwYXJhbSBtb2RlbENvbnRlbnQgQ29udGVudCBvZiB0aGUgZGVmYXVsdCBtb2RlbCB0byB1c2UgZm9yIGV2YWx1YXRpb24uXG4gKiBAcGFyYW0gbmFtZWRNb2RlbHNDb250ZW50IENvbnRlbnRzIG9mIGFkZGl0aW9uYWwsIG5hbWVkIG1vZGVscyB0byB1c2UuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwoXG5cdGJpbmRpbmdTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxDb250ZW50OiBNb2RlbENvbnRlbnQsXG5cdG5hbWVkTW9kZWxzQ29udGVudD86IHsgW21vZGVsTmFtZTogc3RyaW5nXTogTW9kZWxDb250ZW50IH1cbik6IHN0cmluZyB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ0luZm8ucGFyc2UoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChmbGV4Q2hhbmdlczogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSwgb01ldGFNb2RlbDogTWV0YU1vZGVsLCByZXN1bHRYTUw6IGFueSkge1xuXHQvLyBwcmVmaXggSWRzXG5cdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHR9KTtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdChURVNUVklFV0lELCBmbGV4Q2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KSxcblx0XHRnZXRMb2NhbElkOiBqZXN0LmZuKChzSWQpID0+IHNJZClcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0amVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0amVzdC5zcHlPbihMb2FkZXIsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXG5cdGplc3Quc3B5T24oQ29tcG9uZW50IGFzIHVua25vd24gYXMgeyBnZXRDb21wb25lbnRCeUlkOiAoKSA9PiBBcHBDb21wb25lbnQgfSwgXCJnZXRDb21wb25lbnRCeUlkXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXG5cdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGZsZXhDaGFuZ2VzPy5jaGFuZ2VzPy5sZW5ndGggPz8gMCArIGZsZXhDaGFuZ2VzPy52YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/Lmxlbmd0aCA/PyAwKTtcblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDaGFuZ2VzRnJvbVhNTCA9ICh4bWw6IGFueSkgPT5cblx0Wy4uLnhtbC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKV1cblx0XHQuZmxhdE1hcCgoZSkgPT4gWy4uLmUuYXR0cmlidXRlc10ubWFwKChhKSA9PiBhLm5hbWUpKVxuXHRcdC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuaW5jbHVkZXMoXCJzYXAudWkuZmwuYXBwbGllZENoYW5nZXNcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbikge1xuXHRpZiAoIW1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSkge1xuXHRcdG1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSA9IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsKCk7XG5cdH1cblxuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMsIGZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly9UaGlzIGNvbnRleHQgZm9yIG1hY3JvIHRlc3Rpbmdcblx0aWYgKG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdKSB7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tcInRoaXNcIl0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblxuXHRsZXQgcmVzdWx0WE1MID0gKGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKSkgYXMgYW55O1xuXG5cdGlmIChzTWV0YWRhdGFVcmwgJiYgZmxleENoYW5nZXMpIHtcblx0XHQvLyBhcHBseSBmbGV4IGNoYW5nZXNcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0cmVzdWx0WE1MID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcywgb01ldGFNb2RlbCwgcmVzdWx0WE1MKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRlZFhNTCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRyZXR1cm4ganN4LmRlZmluZVhNTE5hbWVzcGFjZU1hcChyZXZlc2VOYW1lc3BhY2VNYXAsIGFzeW5jICgpID0+IHtcblx0XHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KFxuXHRcdFx0eG1sSW5wdXQsXG5cdFx0XHRzTWV0YWRhdGFVcmwsXG5cdFx0XHRtQmluZGluZ0NvbnRleHRzLFxuXHRcdFx0bU1vZGVscyxcblx0XHRcdGZsZXhDaGFuZ2VzLFxuXHRcdFx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlXG5cdFx0KTtcblx0XHRjb25zdCBzZXJpYWxpZWRYTUwgPSBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MLCB1bmRlZmluZWQpO1xuXHRcdGV4cGVjdChzZXJpYWxpZWRYTUwpLm5vdC50b0hhdmVUZW1wbGF0aW5nRXJyb3JzKCk7XG5cdFx0cmV0dXJuIHNlcmlhbGllZFhNTDtcblx0fSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHN0cmluZz47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCB2aWV3IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdmlldyB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gc01ldGFkYXRhVXJsIFVybCBvZiB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbUJpbmRpbmdDb250ZXh0cyBNYXAgb2YgdGhlIGJpbmRpbmdDb250ZXh0cyB0byBzZXQgb24gdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBtTW9kZWxzIE1hcCBvZiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIGZsZXhDaGFuZ2VzIE9iamVjdCB3aXRoIFVJIGNoYW5nZXMgbGlrZSAnY2hhbmdlcycgb3IgJ3ZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcydcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCB2aWV3IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoXG5cdG5hbWU6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9XG4pOiBQcm9taXNlPEplc3RUZW1wbGF0ZWRWaWV3PiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ZpZXdEb2N1bWVudCA9IF9sb2FkUmVzb3VyY2VWaWV3KG5hbWUpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRsZXQgb1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhvVmlld0RvY3VtZW50LCB7IG5hbWU6IG5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0aWYgKGZsZXhDaGFuZ2VzKSB7XG5cdFx0b1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzID8/IFtdLCBvTWV0YU1vZGVsLCBvUHJlcHJvY2Vzc2VkVmlldyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRhc0VsZW1lbnQ6IG9QcmVwcm9jZXNzZWRWaWV3LFxuXHRcdGFzU3RyaW5nOiBmb3JtYXRYTUwob1ByZXByb2Nlc3NlZFZpZXc/Lm91dGVySFRNTCB8fCBcIlwiKVxuXHR9O1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cblx0Y29uc3QgaW5wdXREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGlucHV0WG1sLCBcInRleHQveG1sXCIpO1xuXG5cdC8vIGJ1aWxkIG1vZGVsIGFuZCBiaW5kaW5ncyBmb3IgZ2l2ZW4gdGVzdCBkYXRhXG5cdGNvbnN0IHNldHRpbmdzID0ge1xuXHRcdG1vZGVsczoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIH0sXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBvYmplY3QgfSxcblx0XHRhcHBDb21wb25lbnQ6IHsgZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksIGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQgfVxuXHR9O1xuXHRmb3IgKGNvbnN0IG1vZGVsIGluIHRlc3REYXRhKSB7XG5cdFx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGpzb25Nb2RlbC5zZXREYXRhKHRlc3REYXRhW21vZGVsXSk7XG5cdFx0c2V0dGluZ3MubW9kZWxzW21vZGVsXSA9IGpzb25Nb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbbW9kZWxdID0gc2V0dGluZ3MubW9kZWxzW21vZGVsXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblx0c2V0dGluZ3MuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZS5tb2NrUmV0dXJuVmFsdWUoZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpIGFzIGFueTtcblx0aWYgKGZyYWdtZW50cz8ubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRmcmFnbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8vIEtlZXAgdGhlIGZyYWdtZW50IHJlc3VsdCBhcyBjaGlsZCBvZiByb290IG5vZGUgd2hlbiBmcmFnbWVudCBnZW5lcmF0ZXMgbXVsdGlwbGUgcm9vdCBjb250cm9sc1xuXHRjb25zdCB4bWxSZXN1bHQgPSByZXN1bHREb2MuY2hpbGRyZW4ubGVuZ3RoID4gMSA/IHJlc3VsdERvYy5vdXRlckhUTUwgOiByZXN1bHREb2MuaW5uZXJIVE1MO1xuXG5cdHJldHVybiBmb3JtYXRYTUwoeG1sUmVzdWx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2woXG5cdGNvbnRyb2xUb1NlcmlhbGl6ZT86IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10sXG5cdHNob3dDdXN0b21TdHlsZUNsYXNzZXMgPSBmYWxzZSxcblx0aWdub3JlS2V5czogc3RyaW5nW10gPSBbXVxuKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGNvbnN0IFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vO1xuXHRjb25zdCBDT05UUk9MSUQgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZCA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IGNvbnRyb2xEZXRhaWwgPSBcIlwiO1xuXHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleEluUGFyZW50ID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKT8uaW5kZXhPZj8uKGNvbnRyb2wpO1xuXHRcdFx0XHRcdGlmIChpbmRleEluUGFyZW50ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgLFxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Y29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX0oYDtcblx0XHRcdHJldHVybiBjb250cm9sRGV0YWlsO1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gXCJ9KVwiO1xuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IGB7aWQ6ICR7TWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpID8gXCJfX2R5bmFtaWNJZFwiIDogaWR9YDtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgIWlnbm9yZUtleXMuaW5jbHVkZXMob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5VmFsdWUgPSBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oVUlELCBcInVpZC0taWRcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHByb3BlcnR5VmFsdWU/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0Ly8gU3RyaW5naWZ5IG1heSBmYWlsIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtwcm9wZXJ0eVZhbHVlfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLmNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV0gfTtcblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC50eXBlPy5vT3V0cHV0Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUFzc29jaWF0aW9ucykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSAmJiAhaWdub3JlS2V5cy5pbmNsdWRlcyhvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KVxuXHRcdFx0XHRcdFx0XHRcdD8gXCJfX2R5bmFtaWNJZFwiXG5cdFx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tRXZlbnRSZWdpc3RyeSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgIWlnbm9yZUtleXMuaW5jbHVkZXMob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiB0cnVlYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgYDtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IHsgbUJpbmRpbmdJbmZvczogUmVjb3JkPHN0cmluZywgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8+IH0sIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXQgKz0gYD1bXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfV1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdHJldHVybiBjb250cm9sVG9TZXJpYWxpemUubWFwKChjb250cm9sVG9SZW5kZXI6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9SZW5kZXIsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2xBc1hNTChcblx0Y29udHJvbFRvU2VyaWFsaXplPzogTWFuYWdlZE9iamVjdCB8IE1hbmFnZWRPYmplY3RbXSB8IG51bGwsXG5cdHNob3dDdXN0b21TdHlsZUNsYXNzZXMgPSBmYWxzZSxcblx0cHJlZmVyVmFsdWUgPSBmYWxzZSxcblx0aWdub3JlS2V5czogc3RyaW5nW10gPSBbXVxuKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGNvbnN0IFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vO1xuXHRjb25zdCBDT05UUk9MSUQgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IGRlZmluZWROYW1lc3BhY2VzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cblx0ZnVuY3Rpb24gZ2V0TmFtZXNwYWNlQWxpYXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBjbGFzc05hbWUuc3BsaXQoXCIuXCIpO1xuXHRcdGNvbnN0IG5hbWVzcGFjZSA9IG5hbWVzU3BsaXQuc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0XHRpZiAocmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV0pIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gcmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV07XG5cdFx0fVxuXHRcdGlmIChuYW1lc3BhY2VBbGlhcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRuYW1lc3BhY2VBbGlhcyA9IFwidGVzdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZXNwYWNlQWxpYXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRUYWIodG9BZGQgPSAwKSB7XG5cdFx0bGV0IHRhYiA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJDb3VudCArIHRvQWRkOyBpKyspIHtcblx0XHRcdHRhYiArPSBcIlxcdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFiO1xuXHR9XG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYFxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVGdWxsID0gY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBuYW1lRnVsbC5zcGxpdChcIi5cIik7XG5cdFx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhuYW1lRnVsbCk7XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGA8JHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfVxcbmA7XG5cdFx0XHRpZiAoIWRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSkge1xuXHRcdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10gPSAxO1xuXHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2dldFRhYigpfXhtbG5zOiR7bmFtZXNwYWNlQWxpYXN9PVwiJHtuYW1lU3BhY2VNYXBbbmFtZXNwYWNlQWxpYXNdfVwiXFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSsrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGNvbnN0IG5hbWVGdWxsID0gY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBuYW1lRnVsbC5zcGxpdChcIi5cIik7XG5cdFx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhuYW1lRnVsbCk7XG5cdFx0XHRsZXQgaGFzQWdncmVnYXRpb24gPSBmYWxzZTtcblx0XHRcdGZvciAoY29uc3QgbUFnZ3JlZ2F0aW9uc0tleSBpbiBjb250cm9sLm1BZ2dyZWdhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiYgY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldLmxlbmd0aCA+IDApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGhhc0FnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdLS07XG5cdFx0XHRpZiAoaGFzQWdncmVnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGA8LyR7bmFtZXNwYWNlQWxpYXN9OiR7bmFtZX0+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgLz5gO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IFwiXCI7XG5cdFx0XHRpZiAoIU1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSkge1xuXHRcdFx0XHRkYXRhID0gYGlkPVwiJHtpZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wubVByb3BlcnRpZXMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAhPT0gXCJpZFwiKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUJpbmRpbmdJbmZvcykpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tQXNzb2NpYXRpb25zKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1FdmVudFJlZ2lzdHJ5KSlcblx0XHRcdFx0LmZpbHRlcigocHJvcE5hbWUpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKHByb3BOYW1lKSk7XG5cdFx0XHRrZXlzID0ga2V5cy5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXHRcdFx0Y29uc3QgdW5pcXVlS2V5cyA9IG5ldyBTZXQoa2V5cyk7XG5cdFx0XHRrZXlzID0gQXJyYXkuZnJvbSh1bmlxdWVLZXlzKTtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgb2Yga2V5cykge1xuXHRcdFx0XHRpZiAoIXByZWZlclZhbHVlICYmIGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZ1N0cmluZykge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0ke29Db250cm9sS2V5fT1cIiR7YmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nLnJlcGxhY2UoXCI+XCIsIFwiJmd0O1wiKX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnR5cGU/Lm9PdXRwdXRGb3JtYXQpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC50ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50ZW1wbGF0ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9JHtvQ29udHJvbEtleX09JyR7SlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCl9J2A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpICYmIGNvbnRyb2wubVByb3BlcnRpZXNbb0NvbnRyb2xLZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlWYWx1ZSA9IGNvbnRyb2wubVByb3BlcnRpZXNbb0NvbnRyb2xLZXldO1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWUucmVwbGFjZShVSUQsIFwidWlkLS1pZFwiKS5yZXBsYWNlKENPTlRST0xJRCwgXCJpZFwiKS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPVxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5VmFsdWUpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHQvLyBTdHJpbmdpZnkgbWF5IGZhaWwgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnV0IGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX09XCIke3Byb3BlcnR5VmFsdWV9XCJgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUFzc29jaWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0PyBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKVxuXHRcdFx0XHRcdFx0XHQ6IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50O1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX09XCIkeyhhc3NvY2lhdGlvblZhbHVlPy5qb2luPy4oXCIsXCIpID8/IGFzc29jaWF0aW9uVmFsdWUpIHx8IHVuZGVmaW5lZH1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZSkge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX09XCIke2NvbnRyb2wubUV2ZW50UmVnaXN0cnlbb0NvbnRyb2xLZXldWzBdPy5mRnVuY3Rpb24/Lm5hbWV9XCJgO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cInNvbWVFdmVudEhhbmRsZXJcImA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyAmJiBjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXMuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBcXG5gO1xuXHRcdFx0bGV0IGhhc0FnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IG1BZ2dyZWdhdGlvbnNLZXkgaW4gY29udHJvbC5tQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIUFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IHVuZGVmaW5lZCkgfHxcblx0XHRcdFx0XHQoQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmIGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XS5sZW5ndGggPiAwKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRoYXNBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRkYXRhICs9IFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0bGV0IG91dCA9IGBcXG4ke2dldFRhYigpfTwke25hbWVzcGFjZUFsaWFzfToke3NOYW1lfT5gO1xuXHRcdFx0dGFiQ291bnQrKztcblx0XHRcdG91dCArPSBgXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKTtcblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9PC8ke25hbWVzcGFjZUFsaWFzfToke3NOYW1lfT5cXG5gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0bGV0IG91dFhNTDtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdG91dFhNTCA9IGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogTWFuYWdlZE9iamVjdCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG91dFhNTCA9IG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1NlcmlhbGl6ZSwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoYDxyb290PiR7b3V0WE1MfTwvcm9vdD5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3YWl0ZXIoKSB7XG5cdGxldCBmblJlc29sdmUhOiBGdW5jdGlvbjtcblx0Y29uc3QgbXlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHR9KTtcblx0cmV0dXJuIHsgcHJvbWlzZTogbXlQcm9taXNlLCByZXNvbHZlOiBmblJlc29sdmUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9ja0ZyYWdtZW50cyguLi5mcmFnbWVudHM6IE1vY2tGcmFnbWVudFtdKTogamVzdC5TcHlJbnN0YW5jZSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IG9yaWdpbmFsTG9hZFRlbXBsYXRlID0gKFhNTFRlbXBsYXRlUHJvY2Vzc29yIGFzIGFueSkubG9hZFRlbXBsYXRlUHJvbWlzZTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3QgbG9hZFRlbXBsYXRlU3R1YiA9IGplc3Quc3B5T24oWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55LCBcImxvYWRUZW1wbGF0ZVByb21pc2VcIik7XG5cdGxvYWRUZW1wbGF0ZVN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgodGVtcGxhdGVOYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGlmIChmcmFnbWVudC5uYW1lID09PSB0ZW1wbGF0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlWE1MU3RyaW5nKGZyYWdtZW50LmNvbnRlbnQpWzBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWxMb2FkVGVtcGxhdGUodGVtcGxhdGVOYW1lLCBleHRlbnNpb24pO1xuXHR9KSBhcyAoKCkgPT4gRWxlbWVudCkgfCB1bmRlZmluZWQpO1xuXHRyZXR1cm4gbG9hZFRlbXBsYXRlU3R1Yjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFwcENvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5jZHNGaWxlIFRoZSBwYXRoIHRvIHRoZSBDRFMgZmlsZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLm1haW5Db250ZXh0UGF0aCBUaGUgbWFpbiBjb250ZXh0IHBhdGggdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5wYWdlQ29udGVudCBUaGUgcGFnZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMuY29udGVudCBUaGUgY29udGVudCB0byB1c2UgZm9yIHRoZSBhcHAgQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb21wb25lbnRJZFxuICogQHBhcmFtIG9wdGlvbnMubWFuaWZlc3RTZXR0aW5nc1xuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gdmlld0xldmVsIFRoZSB2aWV3IGxldmVsIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHJldHVybnMgVGhlIGFwcGNvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgdG8gdXNlIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplQXBwQ29tcG9uZW50KFxuXHRvcHRpb25zPzoge1xuXHRcdGNkc0ZpbGU/OiBzdHJpbmc7XG5cdFx0Y29tcG9uZW50SWQ/OiBzdHJpbmc7XG5cdFx0bWFpbkNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRcdHBhZ2VDb250ZW50PzogRnVuY3Rpb247XG5cdFx0bWFuaWZlc3RTZXR0aW5ncz86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncz47XG5cdFx0ZmVNYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0+O1xuXHRcdGNvbnRlbnQ/OiBQYXJ0aWFsPExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzW1wiY29udGVudFwiXSB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzW1wiY29udGVudFwiXT47XG5cdFx0Z3VpZD86IHN0cmluZztcblx0fSxcblx0bmFtZT86IHN0cmluZyxcblx0dmlld0xldmVsPzogbnVtYmVyXG4pOiBQcm9taXNlPHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHRlbXBsYXRlQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCB9PiB7XG5cdGxldCBjZHNGaWxlID0gb3B0aW9ucz8uY2RzRmlsZTtcblx0aWYgKCFjZHNGaWxlKSB7XG5cdFx0Y2RzRmlsZSA9IGNvbXBpbGVDRFMocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuL2RhdGEvUHJvZHVjdHMuY2RzXCIpKTtcblx0fVxuXHRjb25zdCBndWlkID0gb3B0aW9ucz8uZ3VpZCA/PyB1aWQoKTtcblx0Y29uc3QgaWQgPSBvcHRpb25zPy5jb21wb25lbnRJZCA/PyBgc2FwLmZlLnRlc3QuJHtndWlkfWA7XG5cdGNvbnN0IGNkc0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY2RzRmlsZSkudG9TdHJpbmcoKTtcblx0d2luZG93Lmplc3RVSTUubW9ja1VybChgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS8kbWV0YWRhdGE/c2FwLWxhbmd1YWdlPUVOYCwgY2RzQ29udGVudCk7XG5cdGNsYXNzIERlZmF1bHRQYWdlQ29udGVudCBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRyZXR1cm4gPFBhZ2U+PC9QYWdlPjtcblx0XHR9XG5cdH1cblx0c2FwLnVpLmRlZmluZShgc2FwL2ZlL3Rlc3QvJHtndWlkfS9Db21wb25lbnRgLCBbXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIl0sIGZ1bmN0aW9uIChfQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRcInVzZSBzdHJpY3RcIjtcblxuXHRcdHJldHVybiBBcHBDb21wb25lbnQuZXh0ZW5kKGBzYXAuZmUudGVzdC4ke2d1aWR9LkNvbXBvbmVudGAsIHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdG1hbmlmZXN0OiB7XG5cdFx0XHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0XHRcdGlkOiBgdGVzdCR7Z3VpZH1gLFxuXHRcdFx0XHRcdFx0dGl0bGU6IFwiQXBwIFRpdGxlXCIsXG5cdFx0XHRcdFx0XHRkYXRhU291cmNlczoge1xuXHRcdFx0XHRcdFx0XHRtYWluU2VydmljZToge1xuXHRcdFx0XHRcdFx0XHRcdHVyaTogYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vYCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIk9EYXRhXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9kYXRhVmVyc2lvbjogXCI0LjBcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRcIlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YVNvdXJjZTogXCJtYWluU2VydmljZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRzOiB7XG5cdFx0XHRcdFx0XHRcdFx0RGVmYXVsdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb21wb25lbnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IG5hbWUgPz8gXCJzYXAuZmUuY29yZS5mcG1cIixcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdMZXZlbDogdmlld0xldmVsLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC4uLihvcHRpb25zPy5tYW5pZmVzdFNldHRpbmdzID8/IHt9KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb3B0aW9ucz8ubWFpbkNvbnRleHRQYXRoID8/IFwiL1Byb2R1Y3RzXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld1R5cGU6IFwiSlNYXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld0NvbnRlbnQ6IG9wdGlvbnM/LnBhZ2VDb250ZW50ID8/IERlZmF1bHRQYWdlQ29udGVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBvcHRpb25zPy5jb250ZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHJvdXRlczogW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IFwiOj9xdWVyeTpcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBcIkRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJzYXAuZmVcIjogb3B0aW9ucz8uZmVNYW5pZmVzdFNldHRpbmdzID8/IHt9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdGNvbnN0IG1vY2tBcHBDb21wb25lbnQgPSAoYXdhaXQgQ29tcG9uZW50LmNyZWF0ZSh7IG5hbWU6IGBzYXAuZmUudGVzdC4ke2d1aWR9YCwgaWQ6IGlkIH0pKSBhcyBBcHBDb21wb25lbnQ7XG5cblx0YXdhaXQgbW9ja0FwcENvbXBvbmVudC5pbml0aWFsaXplZDtcblx0Y29uc3QgdiA9IGF3YWl0IChtb2NrQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFRhcmdldChcIkRlZmF1bHRcIikgYXMgeyBsb2FkPzogRnVuY3Rpb24gfSkubG9hZD8uKCk7XG5cdHJldHVybiB7IGFwcENvbXBvbmVudDogbW9ja0FwcENvbXBvbmVudCwgdGVtcGxhdGVDb21wb25lbnQ6IHYub2JqZWN0IH07XG59XG5cbi8qKlxuICogRmluZCBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHNlbGVjdG9yLlxuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBzZWxlY3RvclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciBvciB1bmRlZmluZWQgaWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVsZW1lbnQoY29sbGVjdGlvbjogSFRNTENvbGxlY3Rpb24sIHNlbGVjdG9yOiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29sbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBjb2xsZWN0aW9uLml0ZW0oaSkgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKHNlbGVjdG9yKGVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhbiBldmVudCB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZy5cbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gZXZlbnROYW1lXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBldmVudCBpcyByZWNlaXZlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckV2ZW50PFQgZXh0ZW5kcyB7fT4oY29udHJvbDogRXZlbnRQcm92aWRlciwgZXZlbnROYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVJNUV2ZW50PFQ+PiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnRyb2wuYXR0YWNoRXZlbnRPbmNlKGV2ZW50TmFtZSwgKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0cmVzb2x2ZShldmVudCBhcyB1bmtub3duIGFzIFVJNUV2ZW50PFQ+KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogVGVsbCB0aGUgYmluZGluZyBwYXJzZXIgdG8ga2VlcCB0aGUgYmluZGluZyBzdHJpbmdzIGZvciB0ZXN0aW5nLlxuICogQHBhcmFtIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBCaW5kaW5nU3RyaW5nRm9yVGVzdChlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdEJpbmRpbmdQYXJzZXIuX2tlZXBCaW5kaW5nU3RyaW5ncyA9IGVuYWJsZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheUZvcihkZWxheTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztFQXVFQUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBb0MsR0FBRztJQUM1Q0MsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCQyxJQUFJLEVBQUUsdUNBQXVDO0lBQzdDQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxTQUFTLEVBQUUsa0VBQWtFO0lBQzdFQyxHQUFHLEVBQUUsa0VBQWtFO0lBQ3ZFQyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFQyxPQUFPLEVBQUUsc0JBQXNCO0lBQy9CQyxRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDQyxJQUFJLEVBQUUsYUFBYTtJQUNuQkMsRUFBRSxFQUFFLFdBQVc7SUFDZkMsQ0FBQyxFQUFFLE9BQU87SUFDVkMsQ0FBQyxFQUFFLG9CQUFvQjtJQUN2QkMsRUFBRSxFQUFFLFdBQVc7SUFDZkMsYUFBYSxFQUFFLHdCQUF3QjtJQUN2Q0MsR0FBRyxFQUFFLFlBQVk7SUFDakJDLGFBQWEsRUFBRSwwQkFBMEI7SUFDekNDLFFBQVEsRUFBRSxrQkFBa0I7SUFDNUJDLFFBQVEsRUFBRSxrQkFBa0I7SUFDNUJDLENBQUMsRUFBRSxnQkFBZ0I7SUFDbkJDLElBQUksRUFBRSxVQUFVO0lBQ2hCQyxlQUFlLEVBQUUsMEJBQTBCO0lBQzNDQyxVQUFVLEVBQUUseUJBQXlCO0lBQ3JDQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxLQUFLLEVBQUUsOEJBQThCO0lBQ3JDQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCQyxTQUFTLEVBQUUseUJBQXlCO0lBQ3BDQyxlQUFlLEVBQUUsK0JBQStCO0lBQ2hEQyxTQUFTLEVBQUUseUJBQXlCO0lBQ3BDQyxjQUFjLEVBQUUsOEJBQThCO0lBQzlDQyxZQUFZLEVBQUUsNkJBQTZCO0lBQzNDQyxTQUFTLEVBQUU7RUFDWixDQUFDO0VBQ0QsTUFBTUMsa0JBQWtCLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcEMsWUFBWSxDQUFDLENBQUNxQyxNQUFNLENBQUMsQ0FBQ0MsVUFBa0MsRUFBRUMsV0FBVyxLQUFLO0lBQ2hIRCxVQUFVLENBQUN0QyxZQUFZLENBQUN1QyxXQUFXLENBQUMsQ0FBQyxHQUFHQSxXQUFXO0lBQ25ELE9BQU9ELFVBQVU7RUFDbEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ04sTUFBTUUsTUFBTSxHQUFHQyxLQUFLLENBQUNDLGFBQWEsQ0FBQzFDLFlBQVksQ0FBQztFQUVoRCxNQUFNMkMsNEJBQTRCLEdBQUc7SUFBRUMsb0JBQW9CLEVBQUVBLENBQUEsS0FBTTtFQUFHLENBQUM7RUFFdkUsU0FBU0MscUJBQXFCQSxDQUFDQyxNQUFZLEVBQUVDLFFBQWdCLEVBQVU7SUFDdEU7QUFDRDtBQUNBO0FBQ0E7SUFDQyxNQUFNQyxRQUFRLEdBQUcsT0FBTztJQUN4QixPQUFPLEdBQUdGLE1BQU0sQ0FBQ0csUUFBUSxLQUFLLE1BQU0sSUFBSSxDQUFDRixRQUFRLENBQUNHLFVBQVUsQ0FBQ0YsUUFBUSxDQUFDLEdBQUdBLFFBQVEsR0FBRyxFQUFFLEdBQUdELFFBQVEsRUFBRTtFQUNwRztFQUVBLGVBQWVJLDBCQUEwQkEsQ0FDeENDLFlBQWdDLEVBQ2hDQyxnQkFBeUMsRUFDekNDLE9BQTZCLEVBQzdCQyxxQkFBK0IsRUFDSztJQUNwQyxJQUFJQyxVQUFzQztJQUMxQyxJQUFJSixZQUFZLEVBQUU7TUFDakJJLFVBQVUsR0FBRyxNQUFNQyxZQUFZLENBQUNMLFlBQVksQ0FBQztNQUM3QztNQUNBO01BQ0EsSUFBSSxDQUFDRSxPQUFPLENBQUNJLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ2hESixPQUFPLEdBQUduQixNQUFNLENBQUN3QixNQUFNLENBQUNMLE9BQU8sRUFBRTtVQUFFTSxnQkFBZ0IsRUFBRSxJQUFJQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUVMLFVBQVc7UUFBRSxDQUFDLENBQUM7TUFDM0Y7TUFFQXJCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDa0IsT0FBTyxDQUFDLENBQUNRLE9BQU8sQ0FBQyxVQUFVQyxVQUFVLEVBQUU7UUFDbEQsSUFBSVQsT0FBTyxDQUFDUyxVQUFVLENBQUMsSUFBSVQsT0FBTyxDQUFDUyxVQUFVLENBQUMsQ0FBQ0MsZUFBZSxFQUFFO1VBQy9EVixPQUFPLENBQUNTLFVBQVUsQ0FBQyxHQUFHLElBQUlGLGFBQWEsQ0FBQ1AsT0FBTyxDQUFDUyxVQUFVLENBQUMsQ0FBQ0UsSUFBSSxFQUFFVCxVQUFXLENBQUM7UUFDL0U7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUVBLE1BQU1VLFFBQWEsR0FBRztNQUNyQkMsTUFBTSxFQUFFaEMsTUFBTSxDQUFDd0IsTUFBTSxDQUNwQjtRQUNDUyxTQUFTLEVBQUVaO01BQ1osQ0FBQyxFQUNERixPQUNELENBQUM7TUFDRGUsZUFBZSxFQUFFLENBQUMsQ0FBQztNQUNuQkMsWUFBWSxFQUFFO1FBQ2JDLHFCQUFxQixFQUFFekUsSUFBSSxDQUFDMEUsRUFBRSxDQUFDLENBQUM7UUFDaENDLGNBQWMsRUFBRUEsQ0FBQSxLQUFNQyxTQUFTO1FBQy9CQyxnQkFBZ0IsRUFBRTdFLElBQUksQ0FBQzBFLEVBQUUsQ0FBQyxDQUFDO1FBQzNCSSxnQkFBZ0IsRUFBRUEsQ0FBQSxLQUFNRjtNQUN6QjtJQUNELENBQUM7SUFFRFIsUUFBUSxDQUFDSSxZQUFZLENBQUNDLHFCQUFxQixDQUFDTSxlQUFlLENBQUN0QixxQkFBcUIsSUFBSVosNEJBQTRCLENBQUM7SUFDbEg7SUFDQVIsTUFBTSxDQUFDQyxJQUFJLENBQUNpQixnQkFBZ0IsQ0FBQyxDQUFDUyxPQUFPLENBQUMsVUFBVWdCLElBQUksRUFBRTtNQUNyRDtNQUNBQyxNQUFNLENBQUMsT0FBT3ZCLFVBQVUsRUFBRXdCLFNBQVMsQ0FBQzNCLGdCQUFnQixDQUFDeUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxXQUFXLENBQUMsQ0FBQztNQUMxRSxNQUFNQyxNQUFNLEdBQUc1QixPQUFPLENBQUN3QixJQUFJLENBQUMsSUFBSXRCLFVBQVU7TUFDMUNVLFFBQVEsQ0FBQ0csZUFBZSxDQUFDUyxJQUFJLENBQUMsR0FBR0ksTUFBTSxDQUFDQyxvQkFBb0IsQ0FBQzlCLGdCQUFnQixDQUFDeUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RGWixRQUFRLENBQUNDLE1BQU0sQ0FBQ1csSUFBSSxDQUFDLEdBQUdJLE1BQU07SUFDL0IsQ0FBQyxDQUFDO0lBQ0YsT0FBT2hCLFFBQVE7RUFDaEI7RUFFQSxTQUFTa0IsaUJBQWlCQSxDQUFDQyxRQUFnQixFQUFXO0lBQ3JELE1BQU1DLElBQUksR0FBR0QsUUFBUSxDQUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFdBQVc7SUFDdkQsTUFBTUMsSUFBSSxHQUFHQyxnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDSixJQUFJLENBQUM7SUFDaEQsT0FBT0UsSUFBSSxDQUFDRyxlQUFlO0VBQzVCO0VBRU8sTUFBTUMsYUFBYSxHQUFHLFNBQUFBLENBQVU3QyxRQUFnQixFQUFFRCxNQUF3QixFQUFFO0lBQ2xGLE9BQU9OLE1BQU0sQ0FBQ08sUUFBUSxFQUFFRCxNQUFNLENBQUM7RUFDaEMsQ0FBQztFQUVEaUMsTUFBTSxDQUFDYyxNQUFNLENBQUM7SUFDYkMsYUFBYUEsQ0FBQ2hELE1BQU0sRUFBRUMsUUFBUSxFQUFFO01BQy9CLE1BQU1nRCxLQUFLLEdBQUdILGFBQWEsQ0FBQy9DLHFCQUFxQixDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQyxFQUFFRCxNQUFNLENBQUM7TUFDNUUsT0FBTztRQUNOa0QsT0FBTyxFQUFFQSxDQUFBLEtBQU07VUFDZCxNQUFNQyxTQUFTLEdBQUdDLFlBQVksQ0FBQ3BELE1BQU0sQ0FBQztVQUN0QyxPQUFPLGtDQUFrQ0MsUUFBUSx3QkFBd0JrRCxTQUFTLEVBQUU7UUFDckYsQ0FBQztRQUNERSxJQUFJLEVBQUVKLEtBQUssSUFBSUEsS0FBSyxDQUFDSyxNQUFNLElBQUk7TUFDaEMsQ0FBQztJQUNGLENBQUM7SUFDREMsZ0JBQWdCQSxDQUFDdkQsTUFBTSxFQUFFQyxRQUFRLEVBQUU7TUFDbEMsTUFBTWdELEtBQUssR0FBR0gsYUFBYSxDQUFDL0MscUJBQXFCLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxDQUFDLEVBQUVELE1BQU0sQ0FBQztNQUM1RSxPQUFPO1FBQ05rRCxPQUFPLEVBQUVBLENBQUEsS0FBTTtVQUNkLE1BQU1DLFNBQVMsR0FBR0MsWUFBWSxDQUFDcEQsTUFBTSxDQUFDO1VBQ3RDLE9BQU8sK0JBQStCQyxRQUFRLHdCQUF3QmtELFNBQVMsRUFBRTtRQUNsRixDQUFDO1FBQ0RFLElBQUksRUFBRUosS0FBSyxJQUFJQSxLQUFLLENBQUNLLE1BQU0sS0FBSztNQUNqQyxDQUFDO0lBQ0YsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRSxzQkFBc0JBLENBQUNDLEdBQWtCLEVBQUU7TUFDMUMsTUFBTUMsT0FBTyxHQUFHLE9BQU9ELEdBQUcsS0FBSyxRQUFRLEdBQUdBLEdBQUcsR0FBR0wsWUFBWSxDQUFDSyxHQUFHLENBQUM7TUFDakUsTUFBTUUsYUFBdUIsR0FBR0QsT0FBTyxDQUFDRSxLQUFLLENBQUMsa0NBQWtDLENBQUMsSUFBSyxFQUFlO01BQ3JHLE1BQU1DLGFBQXVCLEdBQUdGLGFBQWEsQ0FBQ0csR0FBRyxDQUFFWixPQUFlLElBQUs7UUFDdEUsSUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDbEMsT0FBT1MsSUFBSSxDQUFDYixPQUFPLENBQUNVLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RDtRQUNBLE9BQU8sRUFBRTtNQUNWLENBQUMsQ0FBQztNQUNGLElBQUlILGFBQWEsQ0FBQ1AsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUM5QixPQUFPO1VBQ05KLE9BQU8sRUFBRUEsQ0FBQSxLQUFNLCtCQUErQjtVQUM5Q0csSUFBSSxFQUFFO1FBQ1AsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOLE9BQU87VUFDTkgsT0FBTyxFQUFFQSxDQUFBLEtBQU1XLGFBQWEsQ0FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQztVQUN2Q1osSUFBSSxFQUFFO1FBQ1AsQ0FBQztNQUNGO0lBQ0Q7RUFDRCxDQUFDLENBQUM7RUFBQ2EsUUFBQSxDQUFBcEIsYUFBQSxHQUFBQSxhQUFBO0VBRUksTUFBTXFCLHNCQUFzQixHQUFHLFNBQUFBLENBQVVDLFNBQTRCLEVBQVU7SUFDckYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFNBQVMsQ0FBQyxFQUFFO01BQzdCQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMvQjtJQUNBLE9BQU9NLFNBQVMsQ0FBQ0gsU0FBUyxDQUFDO0VBQzVCLENBQUM7RUFBQ0YsUUFBQSxDQUFBQyxzQkFBQSxHQUFBQSxzQkFBQTtFQUVLLE1BQU1LLG1CQUFtQixHQUFHLFNBQUFBLENBQVVDLGVBQXVCLEVBQUVDLGFBQXFCLEVBQUVDLE1BQVksRUFBRTtJQUMxRyxNQUFNMUUsUUFBUSxHQUFHLFVBQVVGLHFCQUFxQixDQUFDNEUsTUFBTSxFQUFFRixlQUFlLENBQUMsS0FBS0MsYUFBYSxHQUFHO0lBQzlGLE9BQU81QixhQUFhLENBQUM3QyxRQUFRLEVBQUUwRSxNQUFNLENBQUM7RUFDdkMsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQVQsUUFBQSxDQUFBTSxtQkFBQSxHQUFBQSxtQkFBQTtFQU1PLE1BQU1wQixZQUFZLEdBQUcsU0FBQUEsQ0FBVXVCLE1BQVksRUFBRTFFLFFBQWlCLEVBQUU7SUFDdEUsTUFBTTJFLFVBQVUsR0FBRyxJQUFJQyxNQUFNLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLElBQUlWLFNBQWlCO0lBQ3JCLElBQUluRSxRQUFRLEVBQUU7TUFDYixNQUFNZ0QsS0FBSyxHQUFHSCxhQUFhLENBQUM3QyxRQUFRLEVBQUUwRSxNQUFNLENBQVc7TUFDdkRQLFNBQVMsR0FBR25CLEtBQUssQ0FBQ2EsR0FBRyxDQUFFaUIsSUFBSSxJQUFLSCxVQUFVLENBQUNJLGlCQUFpQixDQUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQy9FLENBQUMsTUFBTTtNQUNORyxTQUFTLEdBQUdRLFVBQVUsQ0FBQ0ksaUJBQWlCLENBQUNMLE1BQU0sQ0FBQztJQUNqRDtJQUNBLE9BQU9KLFNBQVMsQ0FBQ0gsU0FBUyxDQUFDO0VBQzVCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQUYsUUFBQSxDQUFBZCxZQUFBLEdBQUFBLFlBQUE7RUFVTyxNQUFNbUIsU0FBUyxHQUFHLFNBQUFBLENBQVVILFNBQWlCLEVBQVU7SUFDN0QsTUFBTWEsS0FBSyxHQUFHLFdBQVc7TUFDeEJDLEdBQUcsR0FBRyxZQUFZO01BQ2xCQyxHQUFHLEdBQUcsd0JBQXdCO01BQzlCQyxJQUFJLEdBQUcsbUJBQW1CO01BQzFCQyxLQUFlLEdBQUcsRUFBRTtJQUVyQixJQUFJQyxXQUFXLEdBQUcsRUFBRTtNQUNuQkMsS0FBSyxHQUFHLENBQUMsQ0FBQztNQUNWQyxVQUE4QyxHQUFHLEVBQUU7SUFFcEQsU0FBU0MsT0FBT0EsQ0FBQSxFQUFHO01BQ2xCLElBQUlILFdBQVcsSUFBSUEsV0FBVyxLQUFLTCxLQUFLLEVBQUU7UUFDekNJLEtBQUssQ0FBQ0ssSUFBSSxDQUFDSixXQUFXLENBQUM7TUFDeEI7TUFFQUEsV0FBVyxHQUFHQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ0ksTUFBTSxDQUFDSixLQUFLLENBQUMsR0FBRyxFQUFFO0lBQ2xEO0lBRUEsU0FBU0ssZ0JBQWdCQSxDQUFBLEVBQUc7TUFDM0IsSUFBSUosVUFBVSxDQUFDbEMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQmtDLFVBQVUsR0FBR0EsVUFBVSxDQUFDSyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUs7VUFDdEMsSUFBSUQsQ0FBQyxDQUFDdEQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMyRixDQUFDLENBQUN2RCxJQUFJLENBQUNwQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUQsT0FBTyxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU0sSUFBSSxDQUFDMEYsQ0FBQyxDQUFDdEQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJMkYsQ0FBQyxDQUFDdkQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JFLE9BQU8sQ0FBQztVQUNULENBQUMsTUFBTSxJQUFJMEYsQ0FBQyxDQUFDdEQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJMkYsQ0FBQyxDQUFDdkQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BFLE9BQU8wRixDQUFDLENBQUN0RCxJQUFJLENBQUN3RCxhQUFhLENBQUNELENBQUMsQ0FBQ3ZELElBQUksQ0FBQztVQUNwQyxDQUFDLE1BQU0sSUFBSXNELENBQUMsQ0FBQ3RELElBQUksQ0FBQ3lELFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDRixDQUFDLENBQUN2RCxJQUFJLENBQUN5RCxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsT0FBTyxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU0sSUFBSSxDQUFDSCxDQUFDLENBQUN0RCxJQUFJLENBQUN5RCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUlGLENBQUMsQ0FBQ3ZELElBQUksQ0FBQ3lELFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxPQUFPLENBQUM7VUFDVCxDQUFDLE1BQU07WUFDTixPQUFPSCxDQUFDLENBQUN0RCxJQUFJLENBQUN3RCxhQUFhLENBQUNELENBQUMsQ0FBQ3ZELElBQUksQ0FBQztVQUNwQztRQUNELENBQUMsQ0FBQztRQUVGK0MsS0FBSyxFQUFFO1FBQ1AsS0FBSyxNQUFNVyxTQUFTLElBQUlWLFVBQVUsRUFBRTtVQUNuQ0MsT0FBTyxDQUFDLENBQUM7VUFDVEgsV0FBVyxJQUFJWSxTQUFTLENBQUMxRCxJQUFJO1VBQzdCLElBQUkwRCxTQUFTLENBQUNDLEtBQUssRUFBRWIsV0FBVyxJQUFJWSxTQUFTLENBQUNDLEtBQUs7UUFDcEQ7UUFDQVosS0FBSyxFQUFFO1FBQ1BDLFVBQVUsR0FBRyxFQUFFO1FBQ2ZDLE9BQU8sQ0FBQyxDQUFDO01BQ1Y7SUFDRDtJQUVBLFNBQVNXLE1BQU1BLENBQUNqRixJQUFXLEVBQUU7TUFDNUJtRSxXQUFXLElBQUllLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbkYsSUFBSSxDQUFDO0lBQ2pDO0lBRUEsTUFBTWtGLE1BQU0sR0FBR0UsWUFBWSxDQUFDO01BQzNCQyxjQUFjQSxDQUFDckYsSUFBVyxFQUFFO1FBQzNCc0UsT0FBTyxDQUFDLENBQUM7UUFDVFcsTUFBTSxDQUFDakYsSUFBSSxDQUFDO01BQ2IsQ0FBQztNQUVEc0YsYUFBYSxFQUFFTCxNQUFNO01BRXJCTSxVQUFVQSxDQUFDdkYsSUFBVyxFQUFFO1FBQ3ZCcUUsVUFBVSxDQUFDbUIsT0FBTyxDQUFDO1VBQUVuRSxJQUFJLEVBQUU2RCxNQUFNLENBQUNDLElBQUksQ0FBQ25GLElBQUk7UUFBRSxDQUFDLENBQUM7TUFDaEQsQ0FBQztNQUVEeUYsV0FBV0EsQ0FBQ3pGLElBQXNCLEVBQUU7UUFDbkNxRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNXLEtBQUssR0FBR0UsTUFBTSxDQUFDQyxJQUFJLENBQUNuRixJQUFJLENBQUMsQ0FBQ3NCLE9BQU8sQ0FBQzBDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pFSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNXLEtBQUssR0FBR0UsTUFBTSxDQUFDQyxJQUFJLENBQUNuRixJQUFJLENBQUMsQ0FBQ3NCLE9BQU8sQ0FBQzJDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzlELENBQUM7TUFFRHlCLFlBQVlBLENBQUMxRixJQUF1QixFQUFFO1FBQ3JDeUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsQlEsTUFBTSxDQUFDakYsSUFBSSxDQUFDO1FBQ1osSUFBSSxDQUFDQSxJQUFJLENBQUMyRixVQUFVLEVBQUV2QixLQUFLLEVBQUU7TUFDOUIsQ0FBQztNQUVEd0IsZUFBZUEsQ0FBQzVGLElBQVcsRUFBRTtRQUM1Qm9FLEtBQUssRUFBRTtRQUNQRSxPQUFPLENBQUMsQ0FBQztRQUNUVyxNQUFNLENBQUNqRixJQUFJLENBQUM7TUFDYixDQUFDO01BRUQ2RixjQUFjLEVBQUVaLE1BQU07TUFDdEJhLGFBQWEsRUFBRWI7SUFDaEIsQ0FBQyxDQUFDO0lBRUZDLE1BQU0sQ0FBQ2EsS0FBSyxDQUFDakMsS0FBSyxHQUFHYixTQUFTLEdBQUdjLEdBQUcsQ0FBQztJQUNyQyxPQUFPRyxLQUFLLENBQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUNrRCxJQUFJLENBQUMsQ0FBQztFQUMvQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFqRCxRQUFBLENBQUFLLFNBQUEsR0FBQUEsU0FBQTtFQU9PLE1BQU02QyxVQUFVLEdBQUcsU0FBQUEsQ0FBVUMsTUFBYyxFQUF1QztJQUFBLElBQXJDQyxPQUE4QixHQUFBQyxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQ3RGLE1BQU1DLFNBQVMsR0FBR0MsRUFBRSxDQUFDQyxZQUFZLENBQUNMLE1BQU0sRUFBRSxPQUFPLENBQUM7SUFDbEQsTUFBTU0sV0FBVyxHQUFHQyxRQUFRLENBQUNKLFNBQVMsRUFBRSx5QkFBeUIsRUFBRUYsT0FBTyxDQUFDO0lBQzNFLE1BQU1PLEdBQUcsR0FBR0MsSUFBSSxDQUFDQyxPQUFPLENBQUNWLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDOztJQUU3QztJQUNBO0lBQ0EsTUFBTVcsVUFBVSxHQUFHM0ksTUFBTSxDQUFDNEksT0FBTyxDQUFDWCxPQUFPLENBQUM7SUFDMUNVLFVBQVUsQ0FBQ25DLElBQUksQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUNGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5ELE1BQU1vQyxZQUFZLEdBQ2pCRixVQUFVLENBQUN6SSxNQUFNLENBQ2hCLENBQUM0SSxRQUFRLEVBQUFDLElBQUE7TUFBQSxJQUFFLENBQUNDLFNBQVMsRUFBRUMsV0FBVyxDQUFDLEdBQUFGLElBQUE7TUFBQSxPQUFLLEdBQUdELFFBQVEsSUFBSUUsU0FBUyxJQUFJQyxXQUFXLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUc7SUFBQSxHQUM3RlQsSUFBSSxDQUFDVSxRQUFRLENBQUNuQixNQUFNLENBQUMsQ0FBQzVFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUN6QyxDQUFDLEdBQUcsTUFBTTtJQUVYLE1BQU1nRyxZQUFZLEdBQUdYLElBQUksQ0FBQ0MsT0FBTyxDQUFDRixHQUFHLEVBQUVLLFlBQVksQ0FBQztJQUVwRFQsRUFBRSxDQUFDaUIsU0FBUyxDQUFDYixHQUFHLEVBQUU7TUFBRWMsU0FBUyxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBRXRDbEIsRUFBRSxDQUFDbUIsYUFBYSxDQUFDSCxZQUFZLEVBQUVkLFdBQVcsQ0FBQztJQUMzQyxPQUFPYyxZQUFZO0VBQ3BCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQXZFLFFBQUEsQ0FBQWtELFVBQUEsR0FBQUEsVUFBQTtFQU9PLFNBQVNRLFFBQVFBLENBQUNpQixHQUFXLEVBQTRFO0lBQUEsSUFBMUVDLE9BQU8sR0FBQXZCLFNBQUEsQ0FBQWpFLE1BQUEsUUFBQWlFLFNBQUEsUUFBQTNGLFNBQUEsR0FBQTJGLFNBQUEsTUFBRyx5QkFBeUI7SUFBQSxJQUFFRCxPQUE4QixHQUFBQyxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQzdHLE1BQU13QixPQUErQixHQUFHO01BQUUsWUFBWSxFQUFFRjtJQUFJLENBQUM7O0lBRTdEO0lBQ0EsSUFBSUEsR0FBRyxDQUFDNUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7TUFDdEM4QyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUd0QixFQUFFLENBQUNDLFlBQVksQ0FBQ3NCLE9BQU8sQ0FBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN6RjtJQUVBLE1BQU1rQixHQUFHLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDSixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEQsTUFBTUssV0FBa0MsR0FBRztNQUMxQ0MsZ0JBQWdCLEVBQUUsSUFBSTtNQUN0QkMsV0FBVyxFQUFFLFlBQVk7TUFDekJDLGdCQUFnQixFQUFFLElBQUk7TUFDdEIsR0FBR2pDLE9BQU87TUFDVndCLE9BQU8sRUFBRUE7SUFDVixDQUFDO0lBRUQsTUFBTVUsSUFBSSxHQUFHTixRQUFRLENBQUNPLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDUCxHQUFHLEVBQUVHLFdBQVcsQ0FBQztJQUMvQyxJQUFJLENBQUNJLElBQUksRUFBRTtNQUNWLE1BQU0sSUFBSUUsS0FBSyxDQUFDLDBFQUEwRVosT0FBTyxHQUFHLENBQUM7SUFDdEc7SUFDQSxPQUFPVSxJQUFJO0VBQ1o7RUFBQ3RGLFFBQUEsQ0FBQTBELFFBQUEsR0FBQUEsUUFBQTtFQUVNLE1BQU0rQix5QkFBeUIsR0FBRyxlQUFBQSxDQUN4Q3JJLFNBQXlCLEVBRUs7SUFBQSxJQUQ5QnNJLG1CQUFtQixHQUFBckMsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBM0YsU0FBQSxHQUFBMkYsU0FBQSxNQUFHLGtDQUFrQztJQUV4RCxNQUFNc0MsV0FBVyxHQUFHO01BQ25CQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNmLE9BQU87VUFDTkMsR0FBRyxFQUFFQSxDQUFBLEtBQU1ILG1CQUFtQixLQUFLLGtDQUFrQztVQUNyRWpKLFlBQVksRUFBRUEsQ0FBQSxLQUFNO1lBQ25CLE9BQU9XLFNBQVM7VUFDakIsQ0FBQztVQUNEMEksYUFBYSxFQUFFQSxDQUFBLEtBQU1wSTtRQUN0QixDQUFDO01BQ0YsQ0FBQztNQUNEcUksVUFBVSxFQUFFQSxDQUFBLEtBQU07UUFDakIsT0FBTztVQUNOQyxlQUFlLEVBQUVBLENBQUEsS0FBTXRJO1FBQ3hCLENBQUM7TUFDRjtJQUNELENBQUM7SUFDRCxNQUFNdUksZUFBZSxHQUFHLE1BQU0sSUFBSUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUM7TUFBRVIsV0FBVztNQUFFUyxTQUFTLEVBQUUsRUFBRTtNQUFFbEosUUFBUSxFQUFFLENBQUM7SUFBRSxDQUFDLENBQUM7SUFDbkgsT0FBTytJLGVBQWUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7RUFDdEMsQ0FBQztFQUFDckcsUUFBQSxDQUFBeUYseUJBQUEsR0FBQUEseUJBQUE7RUFFSyxNQUFNYSxrQkFBa0IsR0FBRyxTQUFBQSxDQUFBLEVBQTBCO0lBQzNELE1BQU1DLE1BQWEsR0FBRyxFQUFFO0lBQ3hCLE9BQU87TUFDTkMsUUFBUUEsQ0FBQ0MsYUFBNEIsRUFBRUMsYUFBNEIsRUFBRUMsT0FBZSxFQUFRO1FBQzNGSixNQUFNLENBQUMvRSxJQUFJLENBQUM7VUFDWGlGLGFBQWE7VUFDYkMsYUFBYTtVQUNiQztRQUNELENBQUMsQ0FBQztNQUNILENBQUM7TUFDREMsU0FBU0EsQ0FBQSxFQUFVO1FBQ2xCLE9BQU9MLE1BQU07TUFDZCxDQUFDO01BQ0RNLGtCQUFrQkEsQ0FBQ0osYUFBNEIsRUFBRUMsYUFBNEIsRUFBRUMsT0FBZSxFQUFXO1FBQ3hHLE9BQU9KLE1BQU0sQ0FBQ08sSUFBSSxDQUFFQyxLQUFLLElBQUs7VUFDN0IsT0FBT0EsS0FBSyxDQUFDTixhQUFhLEtBQUtBLGFBQWEsSUFBSU0sS0FBSyxDQUFDTCxhQUFhLEtBQUtBLGFBQWEsSUFBSUssS0FBSyxDQUFDSixPQUFPLEtBQUtBLE9BQU87UUFDbkgsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0VBQ0YsQ0FBQztFQUFDM0csUUFBQSxDQUFBc0csa0JBQUEsR0FBQUEsa0JBQUE7RUFFSyxNQUFNVSwwQkFBMEIsR0FBRyxTQUFBQSxDQUN6QzVKLFNBQXlCLEVBQ3pCNkosZ0JBQXlFLEVBQ3hFO0lBQ0QsTUFBTUMsY0FBYyxHQUFHQyxZQUFZLENBQUMvSixTQUFTLENBQUM7SUFDOUMsTUFBTWdLLGFBQWEsR0FBR0gsZ0JBQWdCLENBQUNJLFdBQVcsR0FDL0NDLDJCQUEyQixDQUF3QmxLLFNBQVMsQ0FBQ2Usb0JBQW9CLENBQUM4SSxnQkFBZ0IsQ0FBQ0ksV0FBVyxDQUFZLENBQUMsR0FDM0hDLDJCQUEyQixDQUF3QmxLLFNBQVMsQ0FBQ2Usb0JBQW9CLENBQUMsSUFBSThJLGdCQUFnQixDQUFDTSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZILE9BQU8sSUFBSUMsZ0JBQWdCLENBQzFCTixjQUFjLEVBQ2QsSUFBSU8sZUFBZSxDQUFDUixnQkFBZ0IsQ0FBQyxFQUNyQ1gsa0JBQWtCLENBQUMsQ0FBQyxFQUNwQmMsYUFDRCxDQUFDO0VBQ0YsQ0FBQztFQUFDcEgsUUFBQSxDQUFBZ0gsMEJBQUEsR0FBQUEsMEJBQUE7RUFDRixNQUFNVSxjQUFtQixHQUFHLENBQUMsQ0FBQztFQUN2QixNQUFNakwsWUFBWSxHQUFHLGVBQUFBLENBQWdCTCxZQUFvQixFQUFFO0lBQ2pFLE1BQU11TCxVQUFVLEdBQUdDLGtCQUFrQixDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFbkssU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVk7TUFDdEYsT0FBTyxJQUFJO0lBQ1osQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDZ0ssY0FBYyxDQUFDdEwsWUFBWSxDQUFDLEVBQUU7TUFDbEMsTUFBTUksVUFBVSxHQUFHLElBQUtzTCxjQUFjLENBQVNILFVBQVUsRUFBRXZMLFlBQVksRUFBRXNCLFNBQVMsRUFBRTtRQUFFcUsseUJBQXlCLEVBQUVBLENBQUEsS0FBTTtNQUFHLENBQUMsQ0FBQztNQUM1SCxNQUFNdkwsVUFBVSxDQUFDd0wsb0JBQW9CLENBQUMsQ0FBQztNQUN2Q04sY0FBYyxDQUFDdEwsWUFBWSxDQUFDLEdBQUdJLFVBQVU7SUFDMUM7SUFFQSxPQUFPa0wsY0FBYyxDQUFDdEwsWUFBWSxDQUFDO0VBQ3BDLENBQUM7RUFBQzRELFFBQUEsQ0FBQXZELFlBQUEsR0FBQUEsWUFBQTtFQUVLLE1BQU13TCxpQ0FBaUMsR0FBRyxTQUFBQSxDQUNoRFYsU0FBb0IsRUFDcEJMLGNBQWlDLEVBQ2pDZ0IsUUFBWSxFQUNhO0lBQ3pCLE1BQU1DLFVBQWtDLEdBQUc7TUFDMUNDLGlCQUFpQixFQUFFYixTQUFTO01BQzVCYyxvQkFBb0IsRUFBRSxFQUFFO01BQ3hCQyxZQUFZLEVBQUVKLFFBQVE7TUFDdEJLLGVBQWUsRUFBRWhCLFNBQVM7TUFDMUJpQixnQkFBZ0IsRUFBRWpCLFNBQVMsQ0FBQ2tCLFVBQVU7TUFDdEN2QixjQUFjLEVBQUVBO0lBQ2pCLENBQUM7SUFDRGlCLFVBQVUsQ0FBQ08sZUFBZSxHQUFHUCxVQUE0QztJQUN6RSxPQUFPQSxVQUFVO0VBQ2xCLENBQUM7RUFBQ25JLFFBQUEsQ0FBQWlJLGlDQUFBLEdBQUFBLGlDQUFBO0VBRUssTUFBTVUsZUFBZSxHQUFHLFNBQUFBLENBQVVDLGFBQXFCLEVBQWtCO0lBQy9FLE1BQU1DLGNBQWMsR0FBR0MsV0FBVyxDQUFDOUYsS0FBSyxDQUFDNEYsYUFBYSxDQUFDO0lBQUMsU0FBQUcsSUFBQSxHQUFBMUYsU0FBQSxDQUFBakUsTUFBQSxFQURVNEosSUFBSSxPQUFBN0ksS0FBQSxDQUFBNEksSUFBQSxPQUFBQSxJQUFBLFdBQUFFLElBQUEsTUFBQUEsSUFBQSxHQUFBRixJQUFBLEVBQUFFLElBQUE7TUFBSkQsSUFBSSxDQUFBQyxJQUFBLFFBQUE1RixTQUFBLENBQUE0RixJQUFBO0lBQUE7SUFFdEUsT0FBT0osY0FBYyxDQUFDSyxTQUFTLENBQUNDLEtBQUssQ0FBQ3pMLFNBQVMsRUFBRXNMLElBQUksQ0FBQztFQUN2RCxDQUFDO0VBQUNoSixRQUFBLENBQUEySSxlQUFBLEdBQUFBLGVBQUE7RUFNRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNTLHdCQUF3QkEsQ0FDdkNSLGFBQWlDLEVBQ2pDUyxZQUEwQixFQUMxQkMsa0JBQTBELEVBQ2pEO0lBQ1QsTUFBTVQsY0FBYyxHQUFHQyxXQUFXLENBQUM5RixLQUFLLENBQUM0RixhQUFhLENBQUM7SUFDdkQsTUFBTVcsSUFBSSxHQUFHLElBQUlDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDRCxJQUFJLENBQUNFLFlBQVksQ0FBQyxNQUFNLEVBQUVaLGNBQWMsQ0FBQztJQUV6QyxNQUFNYSxZQUFZLEdBQUcsSUFBSUMsU0FBUyxDQUFDTixZQUFZLENBQUM7SUFDaERFLElBQUksQ0FBQ0ssUUFBUSxDQUFDRixZQUFZLENBQUM7SUFDM0JILElBQUksQ0FBQ00saUJBQWlCLENBQUNILFlBQVksQ0FBQ3ZMLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlELElBQUltTCxrQkFBa0IsRUFBRTtNQUN2QixLQUFLLE1BQU0sQ0FBQ2hMLElBQUksRUFBRXdMLE9BQU8sQ0FBQyxJQUFJM08sTUFBTSxDQUFDNEksT0FBTyxDQUFDdUYsa0JBQWtCLENBQUMsRUFBRTtRQUNqRSxNQUFNUyxLQUFLLEdBQUcsSUFBSUosU0FBUyxDQUFDRyxPQUFPLENBQUM7UUFDcENQLElBQUksQ0FBQ0ssUUFBUSxDQUFDRyxLQUFLLEVBQUV6TCxJQUFJLENBQUM7UUFDMUJpTCxJQUFJLENBQUNNLGlCQUFpQixDQUFDRSxLQUFLLENBQUM1TCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRUcsSUFBSSxDQUFDO01BQzlEO0lBQ0Q7SUFFQSxPQUFPaUwsSUFBSSxDQUFDUyxPQUFPLENBQUMsQ0FBQztFQUN0QjtFQUFDaEssUUFBQSxDQUFBb0osd0JBQUEsR0FBQUEsd0JBQUE7RUFFRCxNQUFNYSxVQUFVLEdBQUcsWUFBWTtFQUUvQixNQUFNQyxnQkFBZ0IsR0FBRyxlQUFBQSxDQUFnQkMsV0FBc0MsRUFBRTNOLFVBQXFCLEVBQUU0TixTQUFjLEVBQUU7SUFDdkg7SUFDQSxDQUFDLEdBQUdBLFNBQVMsQ0FBQ0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ3ZOLE9BQU8sQ0FBRStELElBQUksSUFBSztNQUN6REEsSUFBSSxDQUFDeUosRUFBRSxHQUFHLEdBQUdMLFVBQVUsS0FBS3BKLElBQUksQ0FBQ3lKLEVBQUUsRUFBRTtJQUN0QyxDQUFDLENBQUM7SUFDRixNQUFNQyxPQUFPLEdBQUdDLDhCQUE4QixDQUFDUCxVQUFVLEVBQUVFLFdBQVcsQ0FBQztJQUN2RSxNQUFNTSxLQUFLLEdBQUcsZUFBZTtJQUM3QixNQUFNQyxTQUFTLEdBQUc7TUFDakIsU0FBUyxFQUFFO1FBQ1ZKLEVBQUUsRUFBRUcsS0FBSztRQUNURSxJQUFJLEVBQUUsYUFBYTtRQUNuQkMsZUFBZSxFQUFFO1VBQ2hCQyxTQUFTLEVBQUU7UUFDWjtNQUNEO0lBQ0QsQ0FBQztJQUNELE1BQU1DLGFBQTJCLEdBQUc7TUFDbkNyTixjQUFjLEVBQUUzRSxJQUFJLENBQUMwRSxFQUFFLENBQUMsQ0FBQyxDQUFDSyxlQUFlLENBQUN5SSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDL0RWLFFBQVEsRUFBRTlNLElBQUksQ0FBQzBFLEVBQUUsQ0FBQyxDQUFDLENBQUNLLGVBQWUsQ0FBQztRQUNuQ3BCLFlBQVksRUFBRTNELElBQUksQ0FBQzBFLEVBQUUsQ0FBQyxDQUFDLENBQUNLLGVBQWUsQ0FBQ3JCLFVBQVU7TUFDbkQsQ0FBQyxDQUFDO01BQ0Z1TyxnQkFBZ0IsRUFBRWpTLElBQUksQ0FBQzBFLEVBQUUsQ0FBQyxDQUFDLENBQUNLLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMvQ21OLGlCQUFpQixFQUFFbFMsSUFBSSxDQUFDMEUsRUFBRSxDQUFDLENBQUMsQ0FBQ0ssZUFBZSxDQUFDO1FBQzVDb04sUUFBUSxFQUFFLFNBQUFBLENBQVUzTSxJQUFZLEVBQUU7VUFDakMsT0FBUW9NLFNBQVMsQ0FBU3BNLElBQUksQ0FBQztRQUNoQztNQUNELENBQUMsQ0FBQztNQUNGNE0sVUFBVSxFQUFFcFMsSUFBSSxDQUFDMEUsRUFBRSxDQUFFMk4sR0FBRyxJQUFLQSxHQUFHO0lBQ2pDLENBQTRCO0lBQzVCO0lBQ0FyUyxJQUFJLENBQUNzUyxLQUFLLENBQUNDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQ3hOLGVBQWUsQ0FBQ3lOLE9BQU8sQ0FBQ3pILE9BQU8sQ0FBQzBHLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGelIsSUFBSSxDQUFDc1MsS0FBSyxDQUFDRyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMxTixlQUFlLENBQUN5TixPQUFPLENBQUN6SCxPQUFPLENBQUMwRyxPQUFPLENBQUMsQ0FBQztJQUU1RXpSLElBQUksQ0FBQ3NTLEtBQUssQ0FBQ0ksU0FBUyxFQUF5RCxrQkFBa0IsQ0FBQyxDQUFDM04sZUFBZSxDQUFDaU4sYUFBYSxDQUFDO0lBQy9IaFMsSUFBSSxDQUFDc1MsS0FBSyxDQUFDSyxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQzVOLGVBQWUsQ0FBQ2lOLGFBQWEsQ0FBQztJQUM3RSxNQUFNWSxTQUFTLENBQUNDLFVBQVUsQ0FBQztNQUMxQkMsV0FBVyxFQUFFbkI7SUFDZCxDQUFDLENBQUM7SUFDRkwsU0FBUyxHQUFHLE1BQU15QixlQUFlLENBQUNDLE9BQU8sQ0FBQzFCLFNBQVMsRUFBRTtNQUFFOUwsSUFBSSxFQUFFLGVBQWU7TUFBRXNOLFdBQVcsRUFBRW5CLEtBQUs7TUFBRUgsRUFBRSxFQUFFTDtJQUFXLENBQUMsQ0FBQzs7SUFFbkg7SUFDQSxNQUFNOEIsY0FBYyxHQUFHQyxpQkFBaUIsQ0FBQzVCLFNBQVMsQ0FBQztJQUNuRHJNLE1BQU0sQ0FBQ2dPLGNBQWMsQ0FBQzNNLE1BQU0sQ0FBQyxDQUFDNk0sSUFBSSxDQUFDOUIsV0FBVyxFQUFFSSxPQUFPLEVBQUVuTCxNQUFNLElBQUksQ0FBQyxHQUFHK0ssV0FBVyxFQUFFK0IsOEJBQThCLEVBQUU5TSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2hJLE9BQU9nTCxTQUFTO0VBQ2pCLENBQUM7RUFFTSxNQUFNNEIsaUJBQWlCLEdBQUl6TSxHQUFRLElBQ3pDLENBQUMsR0FBR0EsR0FBRyxDQUFDOEssZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDNUI4QixPQUFPLENBQUVDLENBQUMsSUFBSyxDQUFDLEdBQUdBLENBQUMsQ0FBQzlLLFVBQVUsQ0FBQyxDQUFDMUIsR0FBRyxDQUFFZ0MsQ0FBQyxJQUFLQSxDQUFDLENBQUN0RCxJQUFJLENBQUMsQ0FBQyxDQUNwRCtOLE1BQU0sQ0FBRUMsSUFBSSxJQUFLQSxJQUFJLENBQUN2SyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztFQUFDL0IsUUFBQSxDQUFBZ00saUJBQUEsR0FBQUEsaUJBQUE7RUFFeEQsTUFBTU8sbUJBQW1CLEdBQUcsZUFBQUEsQ0FDbENDLFFBQWdCLEVBQ2hCcFEsWUFBZ0MsRUFDaENDLGdCQUEwRCxFQUMxREMsT0FBNkIsRUFDN0I2TixXQUF1QyxFQUN2QzVOLHFCQUErQixFQUM5QjtJQUNELElBQUksQ0FBQ0QsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO01BQzVCQSxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUdtUSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25EO0lBRUEsTUFBTUMsWUFBWSxHQUFHLFNBQVNGLFFBQVEsU0FBUztJQUMvQyxNQUFNckssTUFBTSxHQUFHLElBQUl4QixNQUFNLENBQUNnTSxTQUFTLENBQUMsQ0FBQztJQUNyQyxNQUFNQyxNQUFNLEdBQUd6SyxNQUFNLENBQUMwSyxlQUFlLENBQUNILFlBQVksRUFBRSxVQUFVLENBQUM7SUFDL0Q7SUFDQTs7SUFFQSxNQUFNSSxxQkFBcUIsR0FBRyxNQUFNM1EsMEJBQTBCLENBQUNDLFlBQVksRUFBRUMsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRUMscUJBQXFCLENBQUM7O0lBRTlIO0lBQ0EsSUFBSXVRLHFCQUFxQixDQUFDM1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQ3pDMlAscUJBQXFCLENBQUN6UCxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUd5UCxxQkFBcUIsQ0FBQzNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQ2dCLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztJQUMvRztJQUVBLElBQUlpTSxTQUFTLEdBQUksTUFBTTJDLGVBQWUsQ0FBQ2pCLE9BQU8sQ0FBQ2MsTUFBTSxDQUFDSSxpQkFBaUIsRUFBRztNQUFFMU8sSUFBSSxFQUFFO0lBQWdCLENBQUMsRUFBRXdPLHFCQUFxQixDQUFTO0lBRW5JLElBQUkxUSxZQUFZLElBQUkrTixXQUFXLEVBQUU7TUFDaEM7TUFDQSxNQUFNM04sVUFBVSxHQUFHLE1BQU1DLFlBQVksQ0FBQ0wsWUFBWSxDQUFDO01BQ25EZ08sU0FBUyxHQUFHLE1BQU1GLGdCQUFnQixDQUFDQyxXQUFXLEVBQUUzTixVQUFVLEVBQUU0TixTQUFTLENBQUM7SUFDdkU7SUFDQSxPQUFPQSxTQUFTO0VBQ2pCLENBQUM7RUFBQ3BLLFFBQUEsQ0FBQXVNLG1CQUFBLEdBQUFBLG1CQUFBO0VBRUssTUFBTVUsZUFBZSxHQUFHLGVBQUFBLENBQzlCVCxRQUFnQixFQUNoQnBRLFlBQWdDLEVBQ2hDQyxnQkFBeUMsRUFDekNDLE9BQTZCLEVBQzdCNk4sV0FBdUMsRUFDdkM1TixxQkFBK0IsRUFDYjtJQUNsQixPQUFPMlEsR0FBRyxDQUFDQyxxQkFBcUIsQ0FBQ2pTLGtCQUFrQixFQUFFLFlBQVk7TUFDaEUsTUFBTWtTLFlBQVksR0FBRyxNQUFNYixtQkFBbUIsQ0FDN0NDLFFBQVEsRUFDUnBRLFlBQVksRUFDWkMsZ0JBQWdCLEVBQ2hCQyxPQUFPLEVBQ1A2TixXQUFXLEVBQ1g1TixxQkFDRCxDQUFDO01BQ0QsTUFBTThRLFlBQVksR0FBR25PLFlBQVksQ0FBQ2tPLFlBQVksRUFBRTFQLFNBQVMsQ0FBQztNQUMxREssTUFBTSxDQUFDc1AsWUFBWSxDQUFDLENBQUNDLEdBQUcsQ0FBQ2hPLHNCQUFzQixDQUFDLENBQUM7TUFDakQsT0FBTytOLFlBQVk7SUFDcEIsQ0FBQyxDQUFDO0VBQ0gsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQXJOLFFBQUEsQ0FBQWlOLGVBQUEsR0FBQUEsZUFBQTtFQVNPLGVBQWVNLFdBQVdBLENBQ2hDalAsSUFBWSxFQUNabEMsWUFBb0IsRUFDcEJDLGdCQUF5QyxFQUN6Q0MsT0FBNkIsRUFDN0I2TixXQUF1QyxFQUNWO0lBQzdCLE1BQU0zTixVQUFVLEdBQUcsTUFBTUMsWUFBWSxDQUFDTCxZQUFZLENBQUM7SUFDbkQsTUFBTW9SLGFBQWEsR0FBR3BQLGlCQUFpQixDQUFDRSxJQUFJLENBQUM7SUFDN0MsTUFBTXdPLHFCQUFxQixHQUFHLE1BQU0zUSwwQkFBMEIsQ0FBQ0MsWUFBWSxFQUFFQyxnQkFBZ0IsRUFBRUMsT0FBTyxDQUFDO0lBQ3ZHLElBQUltUixpQkFBaUIsR0FBRyxNQUFNVixlQUFlLENBQUNqQixPQUFPLENBQUMwQixhQUFhLEVBQUU7TUFBRWxQLElBQUksRUFBRUE7SUFBSyxDQUFDLEVBQUV3TyxxQkFBcUIsQ0FBQztJQUMzRyxJQUFJM0MsV0FBVyxFQUFFO01BQ2hCc0QsaUJBQWlCLEdBQUcsTUFBTXZELGdCQUFnQixDQUFDQyxXQUFXLElBQUksRUFBRSxFQUFFM04sVUFBVSxFQUFFaVIsaUJBQWlCLENBQUM7SUFDN0Y7SUFDQSxPQUFPO01BQ05DLFNBQVMsRUFBRUQsaUJBQWlCO01BQzVCRSxRQUFRLEVBQUV0TixTQUFTLENBQUNvTixpQkFBaUIsRUFBRUcsU0FBUyxJQUFJLEVBQUU7SUFDdkQsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBNU4sUUFBQSxDQUFBdU4sV0FBQSxHQUFBQSxXQUFBO0VBTU8sZUFBZU0sZUFBZUEsQ0FBQ3ZQLElBQVksRUFBRXdQLFFBQXFDLEVBQW1CO0lBQzNHLE1BQU1DLFFBQVEsR0FBRyxzQ0FBc0N6UCxJQUFJLGlEQUFpRDtJQUM1RyxNQUFNNkQsTUFBTSxHQUFHLElBQUl4QixNQUFNLENBQUNnTSxTQUFTLENBQUMsQ0FBQztJQUVyQyxNQUFNcUIsUUFBUSxHQUFHN0wsTUFBTSxDQUFDMEssZUFBZSxDQUFDa0IsUUFBUSxFQUFFLFVBQVUsQ0FBQzs7SUFFN0Q7SUFDQSxNQUFNN1EsUUFBUSxHQUFHO01BQ2hCQyxNQUFNLEVBQUUsQ0FBQyxDQUFrQztNQUMzQ0UsZUFBZSxFQUFFLENBQUMsQ0FBK0I7TUFDakRDLFlBQVksRUFBRTtRQUFFQyxxQkFBcUIsRUFBRXpFLElBQUksQ0FBQzBFLEVBQUUsQ0FBQyxDQUFDO1FBQUVDLGNBQWMsRUFBRUEsQ0FBQSxLQUFNQztNQUFVO0lBQ25GLENBQUM7SUFDRCxLQUFLLE1BQU1xTSxLQUFLLElBQUkrRCxRQUFRLEVBQUU7TUFDN0IsTUFBTUcsU0FBUyxHQUFHLElBQUl0RSxTQUFTLENBQUMsQ0FBQztNQUNqQ3NFLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDSixRQUFRLENBQUMvRCxLQUFLLENBQUMsQ0FBQztNQUNsQzdNLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDNE0sS0FBSyxDQUFDLEdBQUdrRSxTQUFTO01BQ2xDL1EsUUFBUSxDQUFDRyxlQUFlLENBQUMwTSxLQUFLLENBQUMsR0FBRzdNLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDNE0sS0FBSyxDQUFDLENBQUM1TCxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDbkY7SUFDQWpCLFFBQVEsQ0FBQ0ksWUFBWSxDQUFDQyxxQkFBcUIsQ0FBQ00sZUFBZSxDQUFDbEMsNEJBQTRCLENBQUM7O0lBRXpGO0lBQ0EsTUFBTXdTLFNBQVMsR0FBRyxNQUFNcEIsZUFBZSxDQUFDakIsT0FBTyxDQUFDa0MsUUFBUSxDQUFDaEIsaUJBQWlCLEVBQUU7TUFBRTFPO0lBQUssQ0FBQyxFQUFFcEIsUUFBUSxDQUFDOztJQUUvRjtJQUNBLE1BQU1rUixTQUFTLEdBQUdELFNBQVMsQ0FBQ0Usb0JBQW9CLENBQUMsZUFBZSxDQUFRO0lBQ3hFLElBQUlELFNBQVMsRUFBRWhQLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDMUIsS0FBSyxNQUFNa1AsUUFBUSxJQUFJRixTQUFTLEVBQUU7UUFDakNFLFFBQVEsQ0FBQ0MsU0FBUyxHQUFHLEVBQUU7TUFDeEI7SUFDRDs7SUFFQTtJQUNBLE1BQU1DLFNBQVMsR0FBR0wsU0FBUyxDQUFDTSxRQUFRLENBQUNyUCxNQUFNLEdBQUcsQ0FBQyxHQUFHK08sU0FBUyxDQUFDUCxTQUFTLEdBQUdPLFNBQVMsQ0FBQ0ksU0FBUztJQUUzRixPQUFPbE8sU0FBUyxDQUFDbU8sU0FBUyxDQUFDO0VBQzVCO0VBQUN4TyxRQUFBLENBQUE2TixlQUFBLEdBQUFBLGVBQUE7RUFFTSxTQUFTYSxnQkFBZ0JBLENBQy9CQyxrQkFBOEMsRUFHN0M7SUFBQSxJQUZEQyxzQkFBc0IsR0FBQXZMLFNBQUEsQ0FBQWpFLE1BQUEsUUFBQWlFLFNBQUEsUUFBQTNGLFNBQUEsR0FBQTJGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDOUJ3TCxVQUFvQixHQUFBeEwsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBM0YsU0FBQSxHQUFBMkYsU0FBQSxNQUFHLEVBQUU7SUFFekIsSUFBSXlMLFFBQVEsR0FBRyxDQUFDO0lBQ2hCLE1BQU03TixHQUFHLEdBQUcsd0JBQXdCO0lBQ3BDLE1BQU04TixTQUFTLEdBQUcsbUJBQW1CO0lBQ3JDLFNBQVNDLE1BQU1BLENBQUEsRUFBWTtNQUFBLElBQVhDLEtBQUssR0FBQTVMLFNBQUEsQ0FBQWpFLE1BQUEsUUFBQWlFLFNBQUEsUUFBQTNGLFNBQUEsR0FBQTJGLFNBQUEsTUFBRyxDQUFDO01BQ3hCLElBQUk2TCxHQUFHLEdBQUcsRUFBRTtNQUNaLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHTCxRQUFRLEdBQUdHLEtBQUssRUFBRUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUNELEdBQUcsSUFBSSxJQUFJO01BQ1o7TUFDQSxPQUFPQSxHQUFHO0lBQ1g7SUFDQSxNQUFNRSxpQkFBaUIsR0FBRztNQUN6QkMsS0FBSyxFQUFFLFNBQUFBLENBQVU1VixPQUFZLEVBQUU2VixnQkFBd0IsRUFBRTtRQUN4RCxJQUFJQyxhQUFhLEdBQUcsRUFBRTtRQUN0QixJQUFJRCxnQkFBZ0IsRUFBRTtVQUNyQixJQUFJN1YsT0FBTyxDQUFDK1YsU0FBUyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNQyxhQUFhLEdBQUloVyxPQUFPLENBQUMrVixTQUFTLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNKLGdCQUFnQixDQUFDLEVBQXNCSyxPQUFPLEdBQUdsVyxPQUFPLENBQUM7WUFDbkgsSUFBSWdXLGFBQWEsR0FBRyxDQUFDLEVBQUU7Y0FDdEJGLGFBQWEsSUFBSSxNQUFNUCxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2xDO1VBQ0Q7UUFDRDtRQUNBTyxhQUFhLElBQUksR0FBRzlWLE9BQU8sQ0FBQ21XLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEdBQUc7UUFDdEQsT0FBT04sYUFBYTtNQUNyQixDQUFDO01BQ0RPLEdBQUcsRUFBRSxTQUFBQSxDQUFBLEVBQVk7UUFDaEIsT0FBTyxJQUFJO01BQ1osQ0FBQztNQUNEQyxNQUFNLEVBQUUsU0FBQUEsQ0FBVXRXLE9BQVksRUFBRTtRQUMvQixJQUFJNlEsRUFBRSxHQUFHN1EsT0FBTyxDQUFDdVcsS0FBSyxDQUFDLENBQUM7UUFDeEIxRixFQUFFLEdBQUcsT0FBT0EsRUFBRSxLQUFLLFFBQVEsR0FBR0EsRUFBRSxFQUFFL0wsT0FBTyxHQUFHd1EsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHekUsRUFBRTtRQUNqRSxJQUFJck4sSUFBSSxHQUFHLFFBQVFnVCxxQkFBcUIsQ0FBQ0MsYUFBYSxDQUFDNUYsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHQSxFQUFFLEVBQUU7UUFDakYsS0FBSyxNQUFNNkYsV0FBVyxJQUFJMVcsT0FBTyxDQUFDMlcsV0FBVyxFQUFFO1VBQzlDLElBQUkzVyxPQUFPLENBQUMyVyxXQUFXLENBQUMxVCxjQUFjLENBQUN5VCxXQUFXLENBQUMsSUFBSSxDQUFDdEIsVUFBVSxDQUFDOU0sUUFBUSxDQUFDb08sV0FBVyxDQUFDLEVBQUU7WUFDekYsSUFBSUUsYUFBYSxHQUFHNVcsT0FBTyxDQUFDMlcsV0FBVyxDQUFDRCxXQUFXLENBQUM7WUFDcERFLGFBQWEsR0FBRyxPQUFPQSxhQUFhLEtBQUssUUFBUSxHQUFHQSxhQUFhLEVBQUU5UixPQUFPLEdBQUcwQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUdvUCxhQUFhO1lBQzVHQSxhQUFhLEdBQUcsT0FBT0EsYUFBYSxLQUFLLFFBQVEsR0FBR0EsYUFBYSxFQUFFOVIsT0FBTyxHQUFHd1EsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHc0IsYUFBYTtZQUM3RyxJQUFJO2NBQ0hBLGFBQWEsR0FBRyxPQUFPQSxhQUFhLEtBQUssUUFBUSxHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0YsYUFBYSxDQUFDLEdBQUdBLGFBQWE7WUFDbEcsQ0FBQyxDQUFDLE9BQU9qRSxDQUFDLEVBQUU7Y0FDWDtZQUFBO1lBR0RuUCxJQUFJLElBQUksTUFBTStSLE1BQU0sQ0FBQyxDQUFDLElBQUltQixXQUFXLEtBQUtFLGFBQWEsRUFBRTtVQUMxRCxDQUFDLE1BQU0sSUFBSTVXLE9BQU8sQ0FBQytXLGFBQWEsQ0FBQzlULGNBQWMsQ0FBQ3lULFdBQVcsQ0FBQyxFQUFFO1lBQzdELE1BQU1NLGFBQWEsR0FBRztjQUFFLEdBQUdoWCxPQUFPLENBQUMrVyxhQUFhLENBQUNMLFdBQVc7WUFBRSxDQUFDO1lBQy9ELElBQUlNLGFBQWEsQ0FBQzlGLElBQUksRUFBRStGLGFBQWEsRUFBRTtjQUN0QyxPQUFPRCxhQUFhLENBQUM5RixJQUFJLENBQUMrRixhQUFhO1lBQ3hDO1lBQ0EsSUFBSUQsYUFBYSxDQUFDRSxPQUFPLEVBQUU7Y0FDMUIsT0FBT0YsYUFBYSxDQUFDRSxPQUFPO1lBQzdCO1lBQ0ExVCxJQUFJLElBQUksTUFBTStSLE1BQU0sQ0FBQyxDQUFDLElBQUltQixXQUFXLEtBQUtHLElBQUksQ0FBQ0MsU0FBUyxDQUFDRSxhQUFhLENBQUMsRUFBRTtVQUMxRTtRQUNEO1FBQ0EsS0FBSyxNQUFNTixXQUFXLElBQUkxVyxPQUFPLENBQUNtWCxhQUFhLEVBQUU7VUFDaEQsSUFBSW5YLE9BQU8sQ0FBQ21YLGFBQWEsQ0FBQ2xVLGNBQWMsQ0FBQ3lULFdBQVcsQ0FBQyxJQUFJLENBQUN0QixVQUFVLENBQUM5TSxRQUFRLENBQUNvTyxXQUFXLENBQUMsRUFBRTtZQUMzRixJQUFJVSxnQkFBZ0IsR0FBR3BYLE9BQU8sQ0FBQ21YLGFBQWEsQ0FBQ1QsV0FBVyxDQUFDO1lBQ3pELElBQUksQ0FBQ2hRLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeVEsZ0JBQWdCLENBQUMsRUFBRTtjQUNyQ0EsZ0JBQWdCLEdBQUcsQ0FBQ0EsZ0JBQWdCLENBQUM7WUFDdEM7WUFDQUEsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDalIsR0FBRyxDQUFFa1IsdUJBQStCLElBQUs7Y0FDNUUsSUFBSSxPQUFPQSx1QkFBdUIsS0FBSyxRQUFRLEVBQUU7Z0JBQ2hELE9BQU9iLHFCQUFxQixDQUFDQyxhQUFhLENBQUNZLHVCQUF1QixDQUFDLEdBQ2hFLGFBQWEsR0FDYkEsdUJBQXVCLEVBQUV2UyxPQUFPLEdBQUd3USxTQUFTLEVBQUUsSUFBSSxDQUFDO2NBQ3ZELENBQUMsTUFBTTtnQkFDTixPQUFPK0IsdUJBQXVCO2NBQy9CO1lBQ0QsQ0FBQyxDQUFDO1lBRUY3VCxJQUFJLElBQUksTUFBTStSLE1BQU0sQ0FBQyxDQUFDLElBQUltQixXQUFXLEtBQUssQ0FBQ1UsZ0JBQWdCLEVBQUU5USxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUk4USxnQkFBZ0IsS0FBS25ULFNBQVMsRUFBRTtVQUM3RztRQUNEO1FBQ0EsSUFBSWtSLHNCQUFzQixJQUFJblYsT0FBTyxDQUFDc1gsbUJBQW1CLEVBQUUzUixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3RFbkMsSUFBSSxJQUFJLE1BQU0rUixNQUFNLENBQUMsQ0FBQyx5QkFBeUJ2VixPQUFPLENBQUNzWCxtQkFBbUIsQ0FBQ2hSLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4RjtRQUNBLEtBQUssTUFBTW9RLFdBQVcsSUFBSTFXLE9BQU8sQ0FBQ3VYLGNBQWMsRUFBRTtVQUNqRCxJQUFJdlgsT0FBTyxDQUFDdVgsY0FBYyxDQUFDdFUsY0FBYyxDQUFDeVQsV0FBVyxDQUFDLElBQUksQ0FBQ3RCLFVBQVUsQ0FBQzlNLFFBQVEsQ0FBQ29PLFdBQVcsQ0FBQyxFQUFFO1lBQzVGbFQsSUFBSSxJQUFJLE1BQU0rUixNQUFNLENBQUMsQ0FBQyxJQUFJbUIsV0FBVyxRQUFRO1VBQzlDO1FBQ0Q7UUFDQWxULElBQUksSUFBSSxFQUFFO1FBQ1YsT0FBT0EsSUFBSTtNQUNaLENBQUM7TUFDRGdVLGdCQUFnQixFQUFFLFNBQUFBLENBQVV4WCxPQUFzRSxFQUFFeVgsS0FBYSxFQUFFO1FBQ2xILElBQUlDLEdBQUcsR0FBRyxNQUFNbkMsTUFBTSxDQUFDLENBQUMsR0FBR2tDLEtBQUssRUFBRTtRQUNsQ3BDLFFBQVEsRUFBRTtRQUVWLElBQUlyVixPQUFPLENBQUMrVyxhQUFhLENBQUNVLEtBQUssQ0FBQyxFQUFFO1VBQ2pDQyxHQUFHLElBQUksWUFBWTFYLE9BQU8sQ0FBQytXLGFBQWEsQ0FBQ1UsS0FBSyxDQUFDLENBQUN0TixJQUFJLGlCQUFpQm9MLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDaEYsQ0FBQyxNQUFNO1VBQ05tQyxHQUFHLElBQUksT0FBT25DLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDekI7UUFDQSxPQUFPbUMsR0FBRztNQUNYLENBQUM7TUFDREMsY0FBYyxFQUFFLFNBQUFBLENBQVUzWCxPQUFZLEVBQUV5WCxLQUFhLEVBQUU7UUFDdERwQyxRQUFRLEVBQUU7UUFDVixJQUFJclYsT0FBTyxDQUFDK1csYUFBYSxDQUFDVSxLQUFLLENBQUMsRUFBRTtVQUNqQyxPQUFPLEtBQUtsQyxNQUFNLENBQUMsQ0FBQyxHQUFHO1FBQ3hCLENBQUMsTUFBTTtVQUNOLE9BQU8sS0FBS0EsTUFBTSxDQUFDLENBQUMsR0FBRztRQUN4QjtNQUNEO0lBQ0QsQ0FBQztJQUNELElBQUk3TyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3VPLGtCQUFrQixDQUFDLEVBQUU7TUFDdEMsT0FBT0Esa0JBQWtCLENBQUMvTyxHQUFHLENBQUV5UixlQUEyQixJQUFLO1FBQzlELE9BQU8sSUFBSUMsVUFBVSxDQUFDRCxlQUFlLEVBQUVqQyxpQkFBaUIsQ0FBQyxDQUFDbUMsU0FBUyxDQUFDLENBQUM7TUFDdEUsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ04sT0FBTyxJQUFJRCxVQUFVLENBQUMzQyxrQkFBa0IsRUFBRVMsaUJBQWlCLENBQUMsQ0FBQ21DLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFO0VBQ0Q7RUFBQ3ZSLFFBQUEsQ0FBQTBPLGdCQUFBLEdBQUFBLGdCQUFBO0VBRU0sU0FBUzhDLHFCQUFxQkEsQ0FDcEM3QyxrQkFBMkQsRUFJMUQ7SUFBQSxJQUhEQyxzQkFBc0IsR0FBQXZMLFNBQUEsQ0FBQWpFLE1BQUEsUUFBQWlFLFNBQUEsUUFBQTNGLFNBQUEsR0FBQTJGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDOUJvTyxXQUFXLEdBQUFwTyxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUEzRixTQUFBLEdBQUEyRixTQUFBLE1BQUcsS0FBSztJQUFBLElBQ25Cd0wsVUFBb0IsR0FBQXhMLFNBQUEsQ0FBQWpFLE1BQUEsUUFBQWlFLFNBQUEsUUFBQTNGLFNBQUEsR0FBQTJGLFNBQUEsTUFBRyxFQUFFO0lBRXpCLElBQUl5TCxRQUFRLEdBQUcsQ0FBQztJQUNoQixNQUFNN04sR0FBRyxHQUFHLHdCQUF3QjtJQUNwQyxNQUFNOE4sU0FBUyxHQUFHLG1CQUFtQjtJQUNyQyxNQUFNMkMsaUJBQXlDLEdBQUcsQ0FBQyxDQUFDO0lBRXBELFNBQVNDLGlCQUFpQkEsQ0FBQ0MsU0FBaUIsRUFBVTtNQUNyRCxNQUFNQyxVQUFVLEdBQUdELFNBQVMsQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUN2QyxNQUFNQyxTQUFTLEdBQUdGLFVBQVUsQ0FBQy9SLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDekMsTUFBTXhCLElBQUksR0FBR3VULFVBQVUsQ0FBQ0EsVUFBVSxDQUFDelMsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUM5QyxJQUFJNFMsY0FBYyxHQUFHRCxTQUFTLENBQUNBLFNBQVMsQ0FBQzNTLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDcEQsSUFBSWxFLGtCQUFrQixDQUFDNlcsU0FBUyxDQUFDaFMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDNUNpUyxjQUFjLEdBQUc5VyxrQkFBa0IsQ0FBQzZXLFNBQVMsQ0FBQ2hTLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN6RDtNQUNBLElBQUlpUyxjQUFjLEtBQUt0VSxTQUFTLEVBQUU7UUFDakNzVSxjQUFjLEdBQUcsTUFBTTtNQUN4QjtNQUNBLE9BQU9BLGNBQWM7SUFDdEI7SUFFQSxTQUFTaEQsTUFBTUEsQ0FBQSxFQUFZO01BQUEsSUFBWEMsS0FBSyxHQUFBNUwsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBM0YsU0FBQSxHQUFBMkYsU0FBQSxNQUFHLENBQUM7TUFDeEIsSUFBSTZMLEdBQUcsR0FBRyxFQUFFO01BQ1osS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdMLFFBQVEsR0FBR0csS0FBSyxFQUFFRSxDQUFDLEVBQUUsRUFBRTtRQUMxQ0QsR0FBRyxJQUFJLElBQUk7TUFDWjtNQUNBLE9BQU9BLEdBQUc7SUFDWDtJQUNBLE1BQU1FLGlCQUFpQixHQUFHO01BQ3pCQyxLQUFLLEVBQUUsU0FBQUEsQ0FBVTVWLE9BQVksRUFBRTZWLGdCQUF3QixFQUFFO1FBQ3hELElBQUlDLGFBQWEsR0FBRyxFQUFFO1FBQ3RCLElBQUlELGdCQUFnQixFQUFFO1VBQ3JCLElBQUk3VixPQUFPLENBQUMrVixTQUFTLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLE1BQU1DLGFBQWEsR0FBSWhXLE9BQU8sQ0FBQytWLFNBQVMsQ0FBQyxDQUFDLENBQUNFLGNBQWMsQ0FBQ0osZ0JBQWdCLENBQUMsRUFBc0JLLE9BQU8sR0FBR2xXLE9BQU8sQ0FBQztZQUNuSCxJQUFJZ1csYUFBYSxHQUFHLENBQUMsRUFBRTtjQUN0QkYsYUFBYSxJQUFJLEtBQUtQLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDakM7VUFDRDtRQUNEO1FBQ0EsTUFBTWlELFFBQVEsR0FBR3hZLE9BQU8sQ0FBQ21XLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU1nQyxVQUFVLEdBQUdJLFFBQVEsQ0FBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN0QyxNQUFNeFQsSUFBSSxHQUFHdVQsVUFBVSxDQUFDQSxVQUFVLENBQUN6UyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU00UyxjQUFjLEdBQUdMLGlCQUFpQixDQUFDTSxRQUFRLENBQUM7UUFDbEQxQyxhQUFhLElBQUksSUFBSXlDLGNBQWMsSUFBSTFULElBQUksSUFBSTtRQUMvQyxJQUFJLENBQUNvVCxpQkFBaUIsQ0FBQ00sY0FBYyxDQUFDLEVBQUU7VUFDdkNOLGlCQUFpQixDQUFDTSxjQUFjLENBQUMsR0FBRyxDQUFDO1VBQ3JDekMsYUFBYSxJQUFJLEdBQUdQLE1BQU0sQ0FBQyxDQUFDLFNBQVNnRCxjQUFjLEtBQUtoWixZQUFZLENBQUNnWixjQUFjLENBQUMsS0FBSztRQUMxRixDQUFDLE1BQU07VUFDTk4saUJBQWlCLENBQUNNLGNBQWMsQ0FBQyxFQUFFO1FBQ3BDO1FBQ0EsT0FBT3pDLGFBQWE7TUFDckIsQ0FBQztNQUNETyxHQUFHLEVBQUUsU0FBQUEsQ0FBVXJXLE9BQVksRUFBRTtRQUM1QixNQUFNd1ksUUFBUSxHQUFHeFksT0FBTyxDQUFDbVcsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTWdDLFVBQVUsR0FBR0ksUUFBUSxDQUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3RDLE1BQU14VCxJQUFJLEdBQUd1VCxVQUFVLENBQUNBLFVBQVUsQ0FBQ3pTLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTTRTLGNBQWMsR0FBR0wsaUJBQWlCLENBQUNNLFFBQVEsQ0FBQztRQUNsRCxJQUFJQyxjQUFjLEdBQUcsS0FBSztRQUMxQixLQUFLLE1BQU1DLGdCQUFnQixJQUFJMVksT0FBTyxDQUFDMlksYUFBYSxFQUFFO1VBQ3JELElBQ0UsQ0FBQ2pTLEtBQUssQ0FBQ0MsT0FBTyxDQUFDM0csT0FBTyxDQUFDMlksYUFBYSxDQUFDRCxnQkFBZ0IsQ0FBQyxDQUFDLElBQ3ZEMVksT0FBTyxDQUFDMlksYUFBYSxDQUFDRCxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksSUFDaEQxWSxPQUFPLENBQUMyWSxhQUFhLENBQUNELGdCQUFnQixDQUFDLEtBQUt6VSxTQUFTLElBQ3JEeUMsS0FBSyxDQUFDQyxPQUFPLENBQUMzRyxPQUFPLENBQUMyWSxhQUFhLENBQUNELGdCQUFnQixDQUFDLENBQUMsSUFBSTFZLE9BQU8sQ0FBQzJZLGFBQWEsQ0FBQ0QsZ0JBQWdCLENBQUMsQ0FBQy9TLE1BQU0sR0FBRyxDQUFFLEVBQzdHO1lBQ0Q4UyxjQUFjLEdBQUcsSUFBSTtVQUN0QjtRQUNEO1FBQ0FSLGlCQUFpQixDQUFDTSxjQUFjLENBQUMsRUFBRTtRQUNuQyxJQUFJRSxjQUFjLEVBQUU7VUFDbkIsT0FBTyxLQUFLRixjQUFjLElBQUkxVCxJQUFJLEdBQUc7UUFDdEMsQ0FBQyxNQUFNO1VBQ04sT0FBTyxJQUFJO1FBQ1o7TUFDRCxDQUFDO01BQ0R5UixNQUFNLEVBQUUsU0FBQUEsQ0FBVXRXLE9BQVksRUFBRTtRQUMvQixJQUFJNlEsRUFBRSxHQUFHN1EsT0FBTyxDQUFDdVcsS0FBSyxDQUFDLENBQUM7UUFDeEIxRixFQUFFLEdBQUcsT0FBT0EsRUFBRSxLQUFLLFFBQVEsR0FBR0EsRUFBRSxFQUFFL0wsT0FBTyxHQUFHd1EsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHekUsRUFBRTtRQUNqRSxJQUFJck4sSUFBSSxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUNnVCxxQkFBcUIsQ0FBQ0MsYUFBYSxDQUFDNUYsRUFBRSxDQUFDLEVBQUU7VUFDN0NyTixJQUFJLEdBQUcsT0FBT3FOLEVBQUUsR0FBRztRQUNwQjtRQUNBLElBQUlsUCxJQUFJLEdBQUdELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDMlcsV0FBVyxDQUFDLENBQ3pDL0QsTUFBTSxDQUFFZ0csUUFBUSxJQUFLQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQ3ZDQyxNQUFNLENBQUNuWCxNQUFNLENBQUNDLElBQUksQ0FBQzNCLE9BQU8sQ0FBQytXLGFBQWEsQ0FBQyxDQUFDLENBQzFDOEIsTUFBTSxDQUFDblgsTUFBTSxDQUFDQyxJQUFJLENBQUMzQixPQUFPLENBQUNtWCxhQUFhLENBQUMsQ0FBQyxDQUMxQzBCLE1BQU0sQ0FBQ25YLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDM0IsT0FBTyxDQUFDdVgsY0FBYyxDQUFDLENBQUMsQ0FDM0MzRSxNQUFNLENBQUVnRyxRQUFRLElBQUssQ0FBQ3hELFVBQVUsQ0FBQzlNLFFBQVEsQ0FBQ3NRLFFBQVEsQ0FBQyxDQUFDO1FBQ3REalgsSUFBSSxHQUFHQSxJQUFJLENBQUN1RyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUtELENBQUMsQ0FBQ0UsYUFBYSxDQUFDRCxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNMFEsVUFBVSxHQUFHLElBQUlDLEdBQUcsQ0FBQ3BYLElBQUksQ0FBQztRQUNoQ0EsSUFBSSxHQUFHK0UsS0FBSyxDQUFDc1MsSUFBSSxDQUFDRixVQUFVLENBQUM7UUFDN0IsS0FBSyxNQUFNcEMsV0FBVyxJQUFJL1UsSUFBSSxFQUFFO1VBQy9CLElBQUksQ0FBQ3FXLFdBQVcsSUFBSWhZLE9BQU8sQ0FBQytXLGFBQWEsQ0FBQzlULGNBQWMsQ0FBQ3lULFdBQVcsQ0FBQyxFQUFFO1lBQ3RFLE1BQU1NLGFBQWEsR0FBRztjQUFFLEdBQUdoWCxPQUFPLENBQUMrVyxhQUFhLENBQUNMLFdBQVc7WUFBRSxDQUFDO1lBQy9ELElBQUlNLGFBQWEsQ0FBQzdILGFBQWEsRUFBRTtjQUNoQzNMLElBQUksSUFBSSxLQUFLK1IsTUFBTSxDQUFDLENBQUMsR0FBR21CLFdBQVcsS0FBS00sYUFBYSxDQUFDN0gsYUFBYSxDQUFDckssT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUM1RixDQUFDLE1BQU07Y0FDTixJQUFJa1MsYUFBYSxDQUFDOUYsSUFBSSxFQUFFK0YsYUFBYSxFQUFFO2dCQUN0QyxPQUFPRCxhQUFhLENBQUM5RixJQUFJLENBQUMrRixhQUFhO2NBQ3hDO2NBRUEsSUFBSUQsYUFBYSxDQUFDRSxPQUFPLEVBQUU7Z0JBQzFCLE9BQU9GLGFBQWEsQ0FBQ0UsT0FBTztjQUM3QjtjQUNBLElBQUlGLGFBQWEsQ0FBQ2lDLFFBQVEsRUFBRTtnQkFDM0IsT0FBT2pDLGFBQWEsQ0FBQ2lDLFFBQVE7Y0FDOUI7Y0FDQXpWLElBQUksSUFBSSxLQUFLK1IsTUFBTSxDQUFDLENBQUMsR0FBR21CLFdBQVcsS0FBS0csSUFBSSxDQUFDQyxTQUFTLENBQUNFLGFBQWEsQ0FBQyxHQUFHO1lBQ3pFO1VBQ0QsQ0FBQyxNQUFNLElBQUloWCxPQUFPLENBQUMyVyxXQUFXLENBQUMxVCxjQUFjLENBQUN5VCxXQUFXLENBQUMsSUFBSTFXLE9BQU8sQ0FBQzJXLFdBQVcsQ0FBQ0QsV0FBVyxDQUFDLEtBQUt6UyxTQUFTLEVBQUU7WUFDN0csSUFBSTJTLGFBQWEsR0FBRzVXLE9BQU8sQ0FBQzJXLFdBQVcsQ0FBQ0QsV0FBVyxDQUFDO1lBQ3BELElBQUksT0FBT0UsYUFBYSxLQUFLLFFBQVEsRUFBRTtjQUN0Q0EsYUFBYSxHQUFHQSxhQUFhLENBQUM5UixPQUFPLENBQUMwQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMxQyxPQUFPLENBQUN3USxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUN4USxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUN2RztZQUNBLElBQUk7Y0FDSDhSLGFBQWEsR0FDWixPQUFPQSxhQUFhLEtBQUssUUFBUSxHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0YsYUFBYSxDQUFDLENBQUM5UixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHOFIsYUFBYTtZQUMzRyxDQUFDLENBQUMsT0FBT2pFLENBQUMsRUFBRTtjQUNYO1lBQUE7WUFHRG5QLElBQUksSUFBSSxLQUFLK1IsTUFBTSxDQUFDLENBQUMsSUFBSW1CLFdBQVcsS0FBS0UsYUFBYSxHQUFHO1VBQzFELENBQUMsTUFBTSxJQUFJNVcsT0FBTyxDQUFDbVgsYUFBYSxDQUFDbFUsY0FBYyxDQUFDeVQsV0FBVyxDQUFDLEVBQUU7WUFDN0QsSUFBSVUsZ0JBQWdCLEdBQUdwWCxPQUFPLENBQUNtWCxhQUFhLENBQUNULFdBQVcsQ0FBQztZQUN6RCxJQUFJLENBQUNoUSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lRLGdCQUFnQixDQUFDLEVBQUU7Y0FDckNBLGdCQUFnQixHQUFHLENBQUNBLGdCQUFnQixDQUFDO1lBQ3RDO1lBQ0FBLGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ2pSLEdBQUcsQ0FBRWtSLHVCQUErQixJQUFLO2NBQzVFLE9BQU8sT0FBT0EsdUJBQXVCLEtBQUssUUFBUSxHQUMvQ0EsdUJBQXVCLEVBQUV2UyxPQUFPLEdBQUd3USxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQ25EK0IsdUJBQXVCO1lBQzNCLENBQUMsQ0FBQztZQUVGN1QsSUFBSSxJQUFJLEtBQUsrUixNQUFNLENBQUMsQ0FBQyxJQUFJbUIsV0FBVyxLQUFLLENBQUNVLGdCQUFnQixFQUFFOVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJOFEsZ0JBQWdCLEtBQUtuVCxTQUFTLEdBQUc7VUFDN0csQ0FBQyxNQUFNLElBQUlqRSxPQUFPLENBQUN1WCxjQUFjLENBQUN0VSxjQUFjLENBQUN5VCxXQUFXLENBQUMsRUFBRTtZQUM5RCxJQUFJMVcsT0FBTyxDQUFDdVgsY0FBYyxDQUFDYixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRXdDLFNBQVMsRUFBRXJVLElBQUksRUFBRTtjQUM1RHJCLElBQUksSUFBSSxLQUFLK1IsTUFBTSxDQUFDLENBQUMsSUFBSW1CLFdBQVcsS0FBSzFXLE9BQU8sQ0FBQ3VYLGNBQWMsQ0FBQ2IsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUV3QyxTQUFTLEVBQUVyVSxJQUFJLEdBQUc7WUFDcEcsQ0FBQyxNQUFNO2NBQ05yQixJQUFJLElBQUksS0FBSytSLE1BQU0sQ0FBQyxDQUFDLElBQUltQixXQUFXLHFCQUFxQjtZQUMxRDtVQUNEO1FBQ0Q7UUFDQSxJQUFJdkIsc0JBQXNCLElBQUluVixPQUFPLENBQUNzWCxtQkFBbUIsRUFBRTNSLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDdEVuQyxJQUFJLElBQUksS0FBSytSLE1BQU0sQ0FBQyxDQUFDLHlCQUF5QnZWLE9BQU8sQ0FBQ3NYLG1CQUFtQixDQUFDaFIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZGO1FBQ0E5QyxJQUFJLElBQUksSUFBSTtRQUNaLElBQUlpVixjQUFjLEdBQUcsS0FBSztRQUMxQixLQUFLLE1BQU1DLGdCQUFnQixJQUFJMVksT0FBTyxDQUFDMlksYUFBYSxFQUFFO1VBQ3JELElBQ0UsQ0FBQ2pTLEtBQUssQ0FBQ0MsT0FBTyxDQUFDM0csT0FBTyxDQUFDMlksYUFBYSxDQUFDRCxnQkFBZ0IsQ0FBQyxDQUFDLElBQ3ZEMVksT0FBTyxDQUFDMlksYUFBYSxDQUFDRCxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksSUFDaEQxWSxPQUFPLENBQUMyWSxhQUFhLENBQUNELGdCQUFnQixDQUFDLEtBQUt6VSxTQUFTLElBQ3JEeUMsS0FBSyxDQUFDQyxPQUFPLENBQUMzRyxPQUFPLENBQUMyWSxhQUFhLENBQUNELGdCQUFnQixDQUFDLENBQUMsSUFBSTFZLE9BQU8sQ0FBQzJZLGFBQWEsQ0FBQ0QsZ0JBQWdCLENBQUMsQ0FBQy9TLE1BQU0sR0FBRyxDQUFFLEVBQzdHO1lBQ0Q4UyxjQUFjLEdBQUcsSUFBSTtVQUN0QjtRQUNEO1FBQ0EsSUFBSUEsY0FBYyxFQUFFO1VBQ25CalYsSUFBSSxJQUFJLEdBQUc7UUFDWjtRQUNBLE9BQU9BLElBQUk7TUFDWixDQUFDO01BQ0RnVSxnQkFBZ0IsRUFBRSxTQUFBQSxDQUFVeFgsT0FBWSxFQUFFeVgsS0FBYSxFQUFFO1FBQ3hELE1BQU1jLGNBQWMsR0FBR0wsaUJBQWlCLENBQUNsWSxPQUFPLENBQUNtVyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUlzQixHQUFHLEdBQUcsS0FBS25DLE1BQU0sQ0FBQyxDQUFDLElBQUlnRCxjQUFjLElBQUlkLEtBQUssR0FBRztRQUNyRHBDLFFBQVEsRUFBRTtRQUNWcUMsR0FBRyxJQUFJLEtBQUtuQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU9tQyxHQUFHO01BQ1gsQ0FBQztNQUNEQyxjQUFjLEVBQUUsU0FBQUEsQ0FBVTNYLE9BQVksRUFBRXlYLEtBQWEsRUFBRTtRQUN0RHBDLFFBQVEsRUFBRTtRQUNWLE1BQU1rRCxjQUFjLEdBQUdMLGlCQUFpQixDQUFDbFksT0FBTyxDQUFDbVcsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJcFcsT0FBTyxDQUFDK1csYUFBYSxDQUFDVSxLQUFLLENBQUMsRUFBRTtVQUNqQyxPQUFPLEtBQUtsQyxNQUFNLENBQUMsQ0FBQyxLQUFLZ0QsY0FBYyxJQUFJZCxLQUFLLEtBQUs7UUFDdEQsQ0FBQyxNQUFNO1VBQ04sT0FBTyxLQUFLbEMsTUFBTSxDQUFDLENBQUMsS0FBS2dELGNBQWMsSUFBSWQsS0FBSyxLQUFLO1FBQ3REO01BQ0Q7SUFDRCxDQUFDO0lBQ0QsSUFBSTBCLE1BQU07SUFDVixJQUFJelMsS0FBSyxDQUFDQyxPQUFPLENBQUN1TyxrQkFBa0IsQ0FBQyxFQUFFO01BQ3RDaUUsTUFBTSxHQUFHakUsa0JBQWtCLENBQUMvTyxHQUFHLENBQUV5UixlQUE4QixJQUFLO1FBQ25FLE9BQU8sSUFBSUMsVUFBVSxDQUFDRCxlQUFlLEVBQUVqQyxpQkFBaUIsQ0FBQyxDQUFDbUMsU0FBUyxDQUFDLENBQUM7TUFDdEUsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ05xQixNQUFNLEdBQUcsSUFBSXRCLFVBQVUsQ0FBQzNDLGtCQUFrQixFQUFFUyxpQkFBaUIsQ0FBQyxDQUFDbUMsU0FBUyxDQUFDLENBQUM7SUFDM0U7SUFDQSxPQUFPbFIsU0FBUyxDQUFDLFNBQVN1UyxNQUFNLFNBQVMsQ0FBQztFQUMzQztFQUFDNVMsUUFBQSxDQUFBd1IscUJBQUEsR0FBQUEscUJBQUE7RUFFTSxTQUFTcUIsYUFBYUEsQ0FBQSxFQUFHO0lBQy9CLElBQUlDLFNBQW9CO0lBQ3hCLE1BQU1DLFNBQVMsR0FBRyxJQUFJekgsT0FBTyxDQUFFekgsT0FBTyxJQUFLO01BQzFDaVAsU0FBUyxHQUFHalAsT0FBTztJQUNwQixDQUFDLENBQUM7SUFDRixPQUFPO01BQUVtUCxPQUFPLEVBQUVELFNBQVM7TUFBRWxQLE9BQU8sRUFBRWlQO0lBQVUsQ0FBQztFQUNsRDtFQUFDOVMsUUFBQSxDQUFBNlMsYUFBQSxHQUFBQSxhQUFBO0VBRU0sU0FBU0kscUJBQXFCQSxDQUFBLEVBQWlEO0lBQUEsU0FBQUMsS0FBQSxHQUFBN1AsU0FBQSxDQUFBakUsTUFBQSxFQUE3Q2dQLFNBQVMsT0FBQWpPLEtBQUEsQ0FBQStTLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtNQUFUL0UsU0FBUyxDQUFBK0UsS0FBQSxJQUFBOVAsU0FBQSxDQUFBOFAsS0FBQTtJQUFBO0lBQ2pEO0lBQ0EsTUFBTUMsb0JBQW9CLEdBQUlDLG9CQUFvQixDQUFTQyxtQkFBbUI7SUFDOUU7SUFDQSxNQUFNQyxnQkFBZ0IsR0FBR3phLElBQUksQ0FBQ3NTLEtBQUssQ0FBQ2lJLG9CQUFvQixFQUFTLHFCQUFxQixDQUFDO0lBQ3ZGRSxnQkFBZ0IsQ0FBQ0Msa0JBQWtCLENBQUUsQ0FBQ0MsWUFBb0IsRUFBRUMsU0FBaUIsS0FBSztNQUNqRixLQUFLLE1BQU1wRixRQUFRLElBQUlGLFNBQVMsRUFBRTtRQUNqQyxJQUFJRSxRQUFRLENBQUNoUSxJQUFJLEtBQUttVixZQUFZLEVBQUU7VUFDbkMsT0FBT0UsY0FBYyxDQUFDckYsUUFBUSxDQUFDeEUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDO01BQ0Q7TUFDQSxPQUFPc0osb0JBQW9CLENBQUNLLFlBQVksRUFBRUMsU0FBUyxDQUFDO0lBQ3JELENBQWlDLENBQUM7SUFDbEMsT0FBT0gsZ0JBQWdCO0VBQ3hCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWkF2VCxRQUFBLENBQUFpVCxxQkFBQSxHQUFBQSxxQkFBQTtFQWFPLGVBQWVXLHNCQUFzQkEsQ0FDM0N4USxPQVNDLEVBQ0Q5RSxJQUFhLEVBQ2J1VixTQUFrQixFQUM4RDtJQUNoRixJQUFJQyxPQUFPLEdBQUcxUSxPQUFPLEVBQUUwUSxPQUFPO0lBQzlCLElBQUksQ0FBQ0EsT0FBTyxFQUFFO01BQ2JBLE9BQU8sR0FBRzVRLFVBQVUsQ0FBQ1UsSUFBSSxDQUFDN0QsSUFBSSxDQUFDZ1UsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDbEU7SUFDQSxNQUFNQyxJQUFJLEdBQUc1USxPQUFPLEVBQUU0USxJQUFJLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE1BQU0zSixFQUFFLEdBQUdsSCxPQUFPLEVBQUV3SSxXQUFXLElBQUksZUFBZW9JLElBQUksRUFBRTtJQUN4RCxNQUFNRSxVQUFVLEdBQUczUSxFQUFFLENBQUNDLFlBQVksQ0FBQ3NRLE9BQU8sQ0FBQyxDQUFDelAsUUFBUSxDQUFDLENBQUM7SUFDdEQxRCxNQUFNLENBQUN3VCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxxQkFBcUJKLElBQUksNEJBQTRCLEVBQUVFLFVBQVUsQ0FBQztJQUFDLElBQ3BGRyxrQkFBa0IsMEJBQUFDLGVBQUE7TUFBQSxTQUFBRCxtQkFBQTtRQUFBLE9BQUFDLGVBQUEsQ0FBQW5MLEtBQUEsT0FBQTlGLFNBQUE7TUFBQTtNQUFBa1IsY0FBQSxDQUFBRixrQkFBQSxFQUFBQyxlQUFBO01BQUEsSUFBQUUsTUFBQSxHQUFBSCxrQkFBQSxDQUFBSSxTQUFBO01BQUFELE1BQUEsQ0FDdkJFLE1BQU0sR0FBTixTQUFBQSxNQUFNQSxDQUFBLEVBQUc7UUFDUixPQUFPQyxJQUFBLENBQUNDLElBQUksSUFBTyxDQUFDO01BQ3JCLENBQUM7TUFBQSxPQUFBUCxrQkFBQTtJQUFBLEVBSCtCUSxjQUFjO0lBSy9DQyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDLGVBQWVoQixJQUFJLFlBQVksRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsVUFBVWlCLGFBQTJCLEVBQUU7TUFDbkgsWUFBWTs7TUFFWixPQUFPQyxZQUFZLENBQUNyVyxNQUFNLENBQUMsZUFBZW1WLElBQUksWUFBWSxFQUFFO1FBQzNEbUIsUUFBUSxFQUFFO1VBQ1RDLFFBQVEsRUFBRTtZQUNULFNBQVMsRUFBRTtjQUNWOUssRUFBRSxFQUFFLE9BQU8wSixJQUFJLEVBQUU7Y0FDakJxQixLQUFLLEVBQUUsV0FBVztjQUNsQkMsV0FBVyxFQUFFO2dCQUNaQyxXQUFXLEVBQUU7a0JBQ1pDLEdBQUcsRUFBRSxxQkFBcUJ4QixJQUFJLEdBQUc7a0JBQ2pDckosSUFBSSxFQUFFLE9BQU87a0JBQ2J6TixRQUFRLEVBQUU7b0JBQ1R1WSxZQUFZLEVBQUU7a0JBQ2Y7Z0JBQ0Q7Y0FDRDtZQUNELENBQUM7WUFDRCxTQUFTLEVBQUU7Y0FDVnRZLE1BQU0sRUFBRTtnQkFDUCxFQUFFLEVBQUU7a0JBQ0h1WSxVQUFVLEVBQUUsYUFBYTtrQkFDekJ4WSxRQUFRLEVBQUUsQ0FBQztnQkFDWjtjQUNELENBQUM7Y0FDRHlZLE9BQU8sRUFBRTtnQkFDUkMsT0FBTyxFQUFFO2tCQUNSQyxPQUFPLEVBQUU7b0JBQ1JsTCxJQUFJLEVBQUUsV0FBVztvQkFDakJyTSxJQUFJLEVBQUVBLElBQUksSUFBSSxpQkFBaUI7b0JBQy9CZ00sRUFBRSxFQUFFLFNBQVM7b0JBQ2J1SixTQUFTLEVBQUVBLFNBQVM7b0JBQ3BCelEsT0FBTyxFQUFFO3NCQUNSbEcsUUFBUSxFQUFFO3dCQUNULElBQUlrRyxPQUFPLEVBQUU2RCxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDcENJLFdBQVcsRUFBRWpFLE9BQU8sRUFBRTBTLGVBQWUsSUFBSSxXQUFXO3dCQUNwREMsUUFBUSxFQUFFLEtBQUs7d0JBQ2ZDLFdBQVcsRUFBRTVTLE9BQU8sRUFBRTZTLFdBQVcsSUFBSTVCLGtCQUFrQjt3QkFDdkR2SyxPQUFPLEVBQUUxRyxPQUFPLEVBQUUwRztzQkFDbkI7b0JBQ0Q7a0JBQ0Q7Z0JBQ0QsQ0FBQztnQkFDRG9NLE1BQU0sRUFBRSxDQUNQO2tCQUNDQyxPQUFPLEVBQUUsVUFBVTtrQkFDbkI3WCxJQUFJLEVBQUUsU0FBUztrQkFDZjhYLE1BQU0sRUFBRTtnQkFDVCxDQUFDO2NBRUg7WUFDRCxDQUFDO1lBQ0QsUUFBUSxFQUFFaFQsT0FBTyxFQUFFaVQsa0JBQWtCLElBQUksQ0FBQztVQUMzQztRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0YsTUFBTUMsZ0JBQWdCLEdBQUksTUFBTTlLLFNBQVMsQ0FBQzNELE1BQU0sQ0FBQztNQUFFdkosSUFBSSxFQUFFLGVBQWUwVixJQUFJLEVBQUU7TUFBRTFKLEVBQUUsRUFBRUE7SUFBRyxDQUFDLENBQWtCO0lBRTFHLE1BQU1nTSxnQkFBZ0IsQ0FBQ0MsV0FBVztJQUNsQyxNQUFNQyxDQUFDLEdBQUcsTUFBT0YsZ0JBQWdCLENBQUNHLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBeUJDLElBQUksR0FBRyxDQUFDO0lBQ25HLE9BQU87TUFBRXJaLFlBQVksRUFBRWdaLGdCQUFnQjtNQUFFTSxpQkFBaUIsRUFBRUosQ0FBQyxDQUFDSztJQUFPLENBQUM7RUFDdkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE3VyxRQUFBLENBQUE0VCxzQkFBQSxHQUFBQSxzQkFBQTtFQU1PLFNBQVNrRCxXQUFXQSxDQUFDQyxVQUEwQixFQUFFaGIsUUFBMkMsRUFBMkI7SUFDN0gsS0FBSyxJQUFJb1QsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNEgsVUFBVSxDQUFDM1gsTUFBTSxFQUFFK1AsQ0FBQyxFQUFFLEVBQUU7TUFDM0MsTUFBTTZILE9BQU8sR0FBR0QsVUFBVSxDQUFDRSxJQUFJLENBQUM5SCxDQUFDLENBQWdCO01BQ2pELElBQUlwVCxRQUFRLENBQUNpYixPQUFPLENBQUMsRUFBRTtRQUN0QixPQUFPQSxPQUFPO01BQ2Y7SUFDRDtJQUNBLE9BQU90WixTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBc0MsUUFBQSxDQUFBOFcsV0FBQSxHQUFBQSxXQUFBO0VBTU8sZUFBZUksWUFBWUEsQ0FBZXpkLE9BQXNCLEVBQUUwZCxTQUFpQixFQUF3QjtJQUNqSCxPQUFPLElBQUk3TCxPQUFPLENBQUV6SCxPQUFPLElBQUs7TUFDL0JwSyxPQUFPLENBQUMyZCxlQUFlLENBQUNELFNBQVMsRUFBR0UsS0FBWSxJQUFLO1FBQ3BEeFQsT0FBTyxDQUFDd1QsS0FBK0IsQ0FBQztNQUN6QyxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUhBclgsUUFBQSxDQUFBa1gsWUFBQSxHQUFBQSxZQUFBO0VBSU8sU0FBU0ksd0JBQXdCQSxDQUFDQyxPQUFnQixFQUFRO0lBQ2hFQyxhQUFhLENBQUNDLG1CQUFtQixHQUFHRixPQUFPO0VBQzVDO0VBQUN2WCxRQUFBLENBQUFzWCx3QkFBQSxHQUFBQSx3QkFBQTtFQUVNLGVBQWVJLFFBQVFBLENBQUNDLEtBQWEsRUFBaUI7SUFDNUQsT0FBTyxJQUFJck0sT0FBTyxDQUFRekgsT0FBTyxJQUFLO01BQ3JDOUssVUFBVSxDQUFDOEssT0FBTyxFQUFFOFQsS0FBSyxDQUFDO0lBQzNCLENBQUMsQ0FBQztFQUNIO0VBQUMzWCxRQUFBLENBQUEwWCxRQUFBLEdBQUFBLFFBQUE7RUFBQSxPQUFBMVgsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -744,7 +744,11 @@ export async function processFragment(name: string, testData: { [model: string]:
|
|
|
744
744
|
return formatXML(xmlResult);
|
|
745
745
|
}
|
|
746
746
|
|
|
747
|
-
export function serializeControl(
|
|
747
|
+
export function serializeControl(
|
|
748
|
+
controlToSerialize?: UI5Element | UI5Element[],
|
|
749
|
+
showCustomStyleClasses = false,
|
|
750
|
+
ignoreKeys: string[] = []
|
|
751
|
+
) {
|
|
748
752
|
let tabCount = 0;
|
|
749
753
|
const UID = /uid--id-\d{13}-\d{1,3}/;
|
|
750
754
|
const CONTROLID = /id-\d{13}-\d{1,3}/;
|
|
@@ -777,7 +781,7 @@ export function serializeControl(controlToSerialize?: UI5Element | UI5Element[],
|
|
|
777
781
|
id = typeof id === "string" ? id?.replace?.(CONTROLID, "id") : id;
|
|
778
782
|
let data = `{id: ${ManagedObjectMetadata.isGeneratedId(id) ? "__dynamicId" : id}`;
|
|
779
783
|
for (const oControlKey in control.mProperties) {
|
|
780
|
-
if (control.mProperties.hasOwnProperty(oControlKey)) {
|
|
784
|
+
if (control.mProperties.hasOwnProperty(oControlKey) && !ignoreKeys.includes(oControlKey)) {
|
|
781
785
|
let propertyValue = control.mProperties[oControlKey];
|
|
782
786
|
propertyValue = typeof propertyValue === "string" ? propertyValue?.replace?.(UID, "uid--id") : propertyValue;
|
|
783
787
|
propertyValue = typeof propertyValue === "string" ? propertyValue?.replace?.(CONTROLID, "id") : propertyValue;
|
|
@@ -800,7 +804,7 @@ export function serializeControl(controlToSerialize?: UI5Element | UI5Element[],
|
|
|
800
804
|
}
|
|
801
805
|
}
|
|
802
806
|
for (const oControlKey in control.mAssociations) {
|
|
803
|
-
if (control.mAssociations.hasOwnProperty(oControlKey)) {
|
|
807
|
+
if (control.mAssociations.hasOwnProperty(oControlKey) && !ignoreKeys.includes(oControlKey)) {
|
|
804
808
|
let associationValue = control.mAssociations[oControlKey];
|
|
805
809
|
if (!Array.isArray(associationValue)) {
|
|
806
810
|
associationValue = [associationValue];
|
|
@@ -822,7 +826,7 @@ export function serializeControl(controlToSerialize?: UI5Element | UI5Element[],
|
|
|
822
826
|
data += `,\n${getTab()} customStyleClasses : ${control.aCustomStyleClasses.join(", ")}`;
|
|
823
827
|
}
|
|
824
828
|
for (const oControlKey in control.mEventRegistry) {
|
|
825
|
-
if (control.mEventRegistry.hasOwnProperty(oControlKey)) {
|
|
829
|
+
if (control.mEventRegistry.hasOwnProperty(oControlKey) && !ignoreKeys.includes(oControlKey)) {
|
|
826
830
|
data += `,\n${getTab()} ${oControlKey}: true`;
|
|
827
831
|
}
|
|
828
832
|
}
|
|
@@ -861,7 +865,8 @@ export function serializeControl(controlToSerialize?: UI5Element | UI5Element[],
|
|
|
861
865
|
export function serializeControlAsXML(
|
|
862
866
|
controlToSerialize?: ManagedObject | ManagedObject[] | null,
|
|
863
867
|
showCustomStyleClasses = false,
|
|
864
|
-
preferValue = false
|
|
868
|
+
preferValue = false,
|
|
869
|
+
ignoreKeys: string[] = []
|
|
865
870
|
) {
|
|
866
871
|
let tabCount = 0;
|
|
867
872
|
const UID = /uid--id-\d{13}-\d{1,3}/;
|
|
@@ -947,7 +952,8 @@ export function serializeControlAsXML(
|
|
|
947
952
|
.filter((propName) => propName !== "id")
|
|
948
953
|
.concat(Object.keys(control.mBindingInfos))
|
|
949
954
|
.concat(Object.keys(control.mAssociations))
|
|
950
|
-
.concat(Object.keys(control.mEventRegistry))
|
|
955
|
+
.concat(Object.keys(control.mEventRegistry))
|
|
956
|
+
.filter((propName) => !ignoreKeys.includes(propName));
|
|
951
957
|
keys = keys.sort((a, b) => a.localeCompare(b));
|
|
952
958
|
const uniqueKeys = new Set(keys);
|
|
953
959
|
keys = Array.from(uniqueKeys);
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _li
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.139.
|
|
25
|
+
version: "1.139.4",
|
|
26
26
|
noLibraryCSS: true
|
|
27
27
|
});
|
|
28
28
|
return thisLib;
|