@sapui5/sap.fe.core 1.108.32 → 1.108.33

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.108.32",
3
+ "version": "1.108.33",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.108.32</version>
9
+ <version>1.108.33</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -1158,9 +1158,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
1158
1158
  * @memberof sap.fe.core.controllerextensions.EditFlow
1159
1159
  * @param sActionName The name of the action to be called
1160
1160
  * @param mInParameters Contains the following attributes:
1161
- * @param mInParameters.parameterValues A map of action parameter names and provided values
1162
- * @param mInParameters.parameterValues.name Name of the parameter
1163
- * @param mInParameters.parameterValues.value Value of the parameter
1161
+ * @param mInParameters.parameterValues An optional array of objects representing the action parameters, where each object has a name of string type and a value that can be of any data type.
1164
1162
  * @param mInParameters.skipParameterDialog Skips the action parameter dialog if values are provided for all of them in parameterValues
1165
1163
  * @param mInParameters.contexts For a bound action, a context or an array with contexts for which the action is to be called must be provided
1166
1164
  * @param mInParameters.model For an unbound action, an instance of an OData V4 model must be provided
@@ -1821,4 +1819,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
1821
1819
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "editDocument", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "editDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteMultipleDocuments", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "updateDocument", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "updateDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createDocument", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "createDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeSave", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeSave"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeCreate", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeCreate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeEdit", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeEdit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeDiscard", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeDiscard"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeDelete", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeDelete"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "saveDocument", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "saveDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "toggleDraftActive", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "toggleDraftActive"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "cancelDocument", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "cancelDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteDocument", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyDocument", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "applyDocument"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "invokeAction", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "invokeAction"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "securedExecution", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "securedExecution"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handlePatchSent", [_dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "handlePatchSent"), _class2.prototype)), _class2)) || _class);
1822
1820
  return EditFlow;
1823
1821
  }, false);
1824
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIkNyZWF0aW9uTW9kZSIsIkZFTGlicmFyeSIsIlByb2dyYW1taW5nTW9kZWwiLCJDb25zdGFudHMiLCJEcmFmdFN0YXR1cyIsIkVkaXRNb2RlIiwiU3RhcnR1cE1vZGUiLCJNZXNzYWdlVHlwZSIsImNvcmVMaWJyYXJ5IiwiRWRpdEZsb3ciLCJkZWZpbmVVSTVDbGFzcyIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJlZGl0RG9jdW1lbnQiLCJjb250ZXh0IiwiYkRyYWZ0TmF2aWdhdGlvbiIsInRyYW5zYWN0aW9uSGVscGVyIiwiX2dldFRyYW5zYWN0aW9uSGVscGVyIiwib1Jvb3RWaWV3Q29udHJvbGxlciIsIl9nZXRSb290Vmlld0NvbnRyb2xsZXIiLCJtb2RlbCIsImdldE1vZGVsIiwicmlnaHRtb3N0Q29udGV4dCIsImJhc2UiLCJlZGl0RmxvdyIsIm9uQmVmb3JlRWRpdCIsImdldFZpZXciLCJfZ2V0TWVzc2FnZUhhbmRsZXIiLCJuZXdEb2N1bWVudENvbnRleHQiLCJwcm9ncmFtbWluZ01vZGVsIiwiX2dldFByb2dyYW1taW5nTW9kZWwiLCJfc2V0U3RpY2t5U2Vzc2lvbkludGVybmFsUHJvcGVydGllcyIsIl9zZXRFZGl0TW9kZSIsIkVkaXRhYmxlIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJfaGFuZGxlTmV3Q29udGV4dCIsImNvbnRleHRUb05hdmlnYXRlIiwiU3RpY2t5IiwiX2hhbmRsZVN0aWNreU9uIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImdldE1ldGFNb2RlbCIsInNoYXJlT2JqZWN0IiwiX2lzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJfY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInNpYmxpbmdJbmZvIiwiX2NyZWF0ZVNpYmxpbmdJbmZvIiwiX3VwZGF0ZVBhdGhzSW5IaXN0b3J5IiwicGF0aE1hcHBpbmciLCJ0YXJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImVycm9yIiwiTG9nIiwiUHJvbWlzZSIsInJlamVjdCIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwiYUNvbnRleHRzIiwibVBhcmFtZXRlcnMiLCJiZWZvcmVEZWxldGVDYWxsQmFjayIsIm9uQmVmb3JlRGVsZXRlIiwiZ2V0Q29udHJvbGxlciIsIl9lZGl0RmxvdyIsInVwZGF0ZURvY3VtZW50Iiwib0NvbnRleHQiLCJvUHJvbWlzZSIsIm9yaWdpbmFsQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImJJc0RyYWZ0IiwiRHJhZnQiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJfc3luY1Rhc2siLCJoYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMiLCJFZGl0U3RhdGUiLCJzZXRFZGl0U3RhdGVEaXJ0eSIsIl9zZXREcmFmdFN0YXR1cyIsIlNhdmluZyIsIm9CaW5kaW5nQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJzRW50aXR5U2V0TmFtZSIsImdldE1ldGFDb250ZXh0IiwiZ2V0T2JqZWN0IiwiYVNlbWFudGljS2V5cyIsIlNlbWFudGljS2V5SGVscGVyIiwiZ2V0U2VtYW50aWNLZXlzIiwibGVuZ3RoIiwib0N1cnJlbnRTZW1hbnRpY01hcHBpbmciLCJfZ2V0U2VtYW50aWNNYXBwaW5nIiwic0N1cnJlbnRTZW1hbnRpY1BhdGgiLCJzZW1hbnRpY1BhdGgiLCJzQ2hhbmdlZFBhdGgiLCJnZXRTZW1hbnRpY1BhdGgiLCJTYXZlZCIsIm9FcnJvciIsIkNsZWFyIiwic2hvd01lc3NhZ2VzIiwiY3JlYXRlRG9jdW1lbnQiLCJ2TGlzdEJpbmRpbmciLCJtSW5QYXJhbWV0ZXJzIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvdyIsIm9DcmVhdGlvblJvd09iamVjdHMiLCJvVGFibGUiLCJnZXRQYXJlbnQiLCJvRXhlY0N1c3RvbVZhbGlkYXRpb24iLCJ2YWxpZGF0ZURvY3VtZW50IiwiZGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImdldENyZWF0aW9uUm93Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJJbmxpbmUiLCJ0YWJsZUlkIiwiYnlJZCIsImlzQSIsImZuRm9jdXNPclNjcm9sbCIsImZvY3VzUm93Iiwic2Nyb2xsVG9JbmRleCIsImdldFJvd0JpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJvQ3JlYXRpb24iLCJjcmVhdGVBdEVuZCIsImdldExlbmd0aCIsImhhbmRsZVNpZGVFZmZlY3RzIiwib0xpc3RCaW5kaW5nIiwib0NyZWF0aW9uUHJvbWlzZSIsIm9OZXdDb250ZXh0IiwiY3JlYXRlZCIsIkNvbW1vblV0aWxzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsImNyZWF0ZUN1c3RvbVZhbGlkYXRpb25NZXNzYWdlcyIsImFWYWxpZGF0aW9uTWVzc2FnZXMiLCJzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwibUN1c3RvbVZhbGlkaXR5IiwiZ2V0UHJvcGVydHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvRmllbGRDb250cm9sIiwic1RhcmdldCIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJmb3JFYWNoIiwib01lc3NhZ2UiLCJjb2RlIiwicmVtb3ZlTWVzc2FnZXMiLCJvVmFsaWRhdGlvbk1lc3NhZ2UiLCJtZXNzYWdlVGFyZ2V0IiwiZ2V0Q29udHJvbCIsImZpZWxkSWQiLCJnZXRCaW5kaW5nUGF0aCIsImZpbHRlciIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJtZXNzYWdlVGV4dCIsInByb2Nlc3NvciIsInR5cGUiLCJFcnJvciIsInRlY2huaWNhbCIsInBlcnNpc3RlbnQiLCJhRXhpc3RpbmdWYWxpZGF0aW9uTWVzc2FnZXMiLCJhZGRDb250cm9sSWQiLCJwdXNoIiwidGV4dCIsImN1c3RvbU1lc3NhZ2VzIiwicmVzb2x2ZUNyZWF0aW9uTW9kZSIsImluaXRpYWxDcmVhdGlvbk1vZGUiLCJOZXdQYWdlIiwiaXNSZWxhdGl2ZSIsInNQYXRoIiwic05ld0FjdGlvbiIsImFQYXJhbWV0ZXJzIiwiRGVmZXJyZWQiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldEhlYWRlckNvbnRleHQiLCJhTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGRzIiwiZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIiwiQXN5bmMiLCJiU2hvdWxkQnVzeUxvY2siLCJCdXN5TG9ja2VyIiwibG9jayIsIm9Mb2NrT2JqZWN0Iiwib05hdmlnYXRpb24iLCJyZXNvbHZlZENyZWF0aW9uTW9kZSIsIm9Sb3V0aW5nTGlzdGVuZXIiLCJuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQiLCJiRGVmZXJyZWRDb250ZXh0IiwiZWRpdGFibGUiLCJiRm9yY2VGb2N1cyIsImFzeW5jQ29udGV4dCIsIlN5bmMiLCJtQXJncyIsInNQcm9ncmFtbWluZ01vZGVsIiwiY3JlYXRlQWN0aW9uIiwidHJhbnNpZW50Iiwib05ld0RvY3VtZW50Q29udGV4dCIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsIm5hdmlnYXRlVG9NZXNzYWdlUGFnZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiYkZyb21EZWZlcnJlZCIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib0NyZWF0aW9uUm93TGlzdEJpbmRpbmciLCJvQ3JlYXRpb25Sb3dDb250ZXh0IiwiZ2V0QmluZGluZyIsImJTa2lwU2lkZUVmZmVjdHMiLCJvTmV3VHJhbnNpZW50Q29udGV4dCIsImNyZWF0ZSIsIm9DcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiY2F0Y2giLCJ0cmFjZSIsImRlbGV0ZSIsImlzTG9ja2VkIiwidW5sb2NrIiwiYklzTmV3UGFnZUNyZWF0aW9uIiwiYWxsIiwiYVBhcmFtcyIsIm9Nb2RlbCIsIl9zZW5kQWN0aXZpdHkiLCJBY3Rpdml0eSIsIkNyZWF0ZSIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsIkNyZWF0aW9uRmFpbGVkIiwibmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9QYXlsb2FkIiwiX2dldFJvdXRpbmdMaXN0ZW5lciIsImtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQiLCJidXN5TW9kZSIsImJ1c3lJZCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImFubm90YXRpb24iLCJpZCIsIl9oYW5kbGVDcmVhdGVFdmVudHMiLCJwYXJlbnRDb250cm9sIiwiYmVmb3JlQ3JlYXRlQ2FsbEJhY2siLCJvbkJlZm9yZUNyZWF0ZSIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJvQXBwQ29tcG9uZW50IiwiZ2V0U3RhcnR1cE1vZGUiLCJBdXRvQ3JlYXRlIiwib1Jlc291cmNlQnVuZGxlIiwiT2JqZWN0Iiwia2V5cyIsInNQcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHkiLCIka2luZCIsIl9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMiLCJfZ2V0R2xvYmFsVUlNb2RlbCIsIl9nZXRSZXNvdXJjZUJ1bmRsZSIsIkV4dGVybmFsIiwicmVzb2x2ZSIsImdldFJvdXRlclByb3h5IiwicmVtb3ZlSUFwcFN0YXRlS2V5Iiwib0NvbnRyb2xsZXIiLCJzQ3JlYXRlUGF0aCIsImdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZyIsImhhbmRsZXJzIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib3V0Ym91bmQiLCJ1bmRlZmluZWQiLCJvbkJlZm9yZVNhdmUiLCJvbkJlZm9yZURpc2NhcmQiLCJzYXZlRG9jdW1lbnQiLCJiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwiX3N1Ym1pdE9wZW5DaGFuZ2VzIiwiYWN0aXZlRG9jdW1lbnRDb250ZXh0IiwiX3JlbW92ZVN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMiLCJBY3RpdmF0ZSIsIl90cmlnZ2VyQ29uZmlndXJlZFN1cnZleSIsIlN0YW5kYXJkQWN0aW9ucyIsInNhdmUiLCJUcmlnZ2VyVHlwZSIsInN0YW5kYXJkQWN0aW9uIiwiRGlzcGxheSIsImlzRmNsRW5hYmxlZCIsImNhbmNlbGVkIiwidG9nZ2xlRHJhZnRBY3RpdmUiLCJvQ29udGV4dERhdGEiLCJiRWRpdGFibGUiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsIkhhc0RyYWZ0RW50aXR5Iiwib1JpZ2h0bW9zdENvbnRleHQiLCJsYXN0U2VtYW50aWNNYXBwaW5nIiwidGVjaG5pY2FsUGF0aCIsInRhcmdldFBhdGgiLCJuZXdQYXRoIiwib2xkUGF0aCIsImNhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY29udHJvbCIsImJlZm9yZUNhbmNlbENhbGxCYWNrIiwiY2FuY2VsUmVzdWx0IiwiRGlzY2FyZCIsInNraXBCYWNrTmF2aWdhdGlvbiIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0Iiwib0FjdGl2ZURvY3VtZW50Q29udGV4dCIsIl9mZXRjaFNlbWFudGljS2V5VmFsdWVzIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJpc0RyYWZ0Um9vdCIsIm1ldGFNb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0RW50aXR5U2V0IiwiZGVsZXRlRG9jdW1lbnQiLCJiRmluZEFjdGl2ZUNvbnRleHRzIiwiZ2V0SW5kZXgiLCJwYXJhbWV0ZXJzIiwic2libGluZ0NvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RDYW5vbmljYWxQYXRoIiwiZHJhZnRQYXRoIiwiZHJhZnRDb250ZXh0VG9SZW1vdmUiLCJnZXRLZWVwQWxpdmVDb250ZXh0IiwicmVwbGFjZVdpdGgiLCJfZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbiIsIkRlbGV0ZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsIkRlZXBsaW5rIiwiZXhpdEZyb21BcHAiLCJhcHBseURvY3VtZW50IiwiaW52b2tlQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJtRXh0cmFQYXJhbXMiLCJvQ29udHJvbCIsImFQYXJ0cyIsInNPdmVybG9hZEVudGl0eVR5cGUiLCJvQ3VycmVudEFjdGlvbkNhbGxCYWNrcyIsIm9WaWV3IiwiQXJyYXkiLCJpc0FycmF5IiwiY29udGV4dHMiLCJpc05hdmlnYWJsZSIsInJlcXVpcmVzTmF2aWdhdGlvbiIsImNvbnRyb2xJZCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaW5kZXhPZiIsInNwbGl0IiwicmVwbGFjZUFsbCIsImJTdGF0aWNBY3Rpb24iLCJpc1RhYmxlQm91bmQiLCJzQmluZGluZ1BhdGgiLCJwYXRoIiwiX2dldEFjdGlvbk92ZXJsb2FkQ29udGV4dEZyb21NZXRhZGF0YVBhdGgiLCJlbmFibGVBdXRvU2Nyb2xsIiwiX2NyZWF0ZUFjdGlvblByb21pc2UiLCJzSWQiLCJiR2V0Qm91bmRDb250ZXh0IiwiX2dldEJvdW5kQ29udGV4dCIsImJPYmplY3RQYWdlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiY2FsbEFjdGlvbiIsIm9SZXNwb25zZSIsIkFjdGlvbiIsImFjdGlvbiIsImZSZXNvbHZlciIsIl9nZXRJbnRlcm5hbE1vZGVsIiwidkNvbnRleHQiLCJ2YWx1ZSIsInNDb250ZXh0TWV0YVBhdGgiLCJfZm5WYWxpZENvbnRleHRzIiwiYXBwbGljYWJsZUNvbnRleHRzIiwiZWxlbWVudCIsIm9BY3Rpb25Db250ZXh0IiwiYXBwbGljYWJsZUNvbnRleHQiLCJzQWN0aW9uQ29udGV4dE1ldGFQYXRoIiwiY2hlY2tOb0hhc2hDaGFuZ2UiLCJub0hpc3RvcnlFbnRyeSIsImluZm8iLCJfcmVmcmVzaExpc3RJZlJlcXVpcmVkIiwiX2dldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMiLCJlcnIiLCJmUmVqZWN0b3IiLCJyZWplY3RlZEl0ZW1zIiwic2VjdXJlZEV4ZWN1dGlvbiIsImZuRnVuY3Rpb24iLCJiQnVzeVNldCIsImJ1c3kiLCJzZXQiLCJiQnVzeUNoZWNrIiwiY2hlY2siLCJiVXBkYXRlc0RvY3VtZW50IiwidXBkYXRlc0RvY3VtZW50IiwiZmluYWxseSIsImhhbmRsZVBhdGNoU2VudCIsIm9FdmVudCIsIm9QYXRjaFByb21pc2UiLCJnZXRTb3VyY2UiLCJwYXRjaENvbXBsZXRlZEV2ZW50IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoIiwiYlN1Y2Nlc3MiLCJnZXRQYXJhbWV0ZXIiLCJoYW5kbGVDcmVhdGVBY3RpdmF0ZSIsIm9CaW5kaW5nIiwiYkF0RW5kIiwiYkluYWN0aXZlIiwib1BhcmFtcyIsImluYWN0aXZlIiwic0VkaXRNb2RlIiwiYkNyZWF0aW9uTW9kZSIsInNldEVkaXRNb2RlIiwic0RyYWZ0U3RhdGUiLCJzZXREcmFmdFN0YXR1cyIsImdldFJvdXRpbmdMaXN0ZW5lciIsImdldEdsb2JhbFVJTW9kZWwiLCJ2VGFzayIsInN5bmNUYXNrIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsImRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24iLCJoYW5kbGVDcmVhdGVFdmVudHMiLCJnZXRUcmFuc2FjdGlvbkhlbHBlciIsImdldEludGVybmFsTW9kZWwiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJzQ29udHJvbElkIiwiY3JlYXRlQWN0aW9uUHJvbWlzZSIsIl9nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiX2RlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJnZXRNZXNzYWdlSGFuZGxlciIsInJlbGF0ZWRDb250ZXh0cyIsImNvbnRlbnQiLCJtYXAiLCJzZW5kIiwidHJpZ2dlclR5cGUiLCJ0cmlnZ2VyQ29uZmlndXJlZFN1cnZleSIsImdldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMiLCJzdWJtaXRCYXRjaCIsIm9SZXF1ZXN0b3IiLCJ3YWl0Rm9yUnVubmluZ0NoYW5nZVJlcXVlc3RzIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJoYW5kbGVTdGlja3lPbiIsIl9oYW5kbGVTdGlja3lPZmYiLCJoYW5kbGVTdGlja3lPZmYiLCJfb25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbiIsIm9uQmFja05hdmlnYXRpb25JblNlc3Npb24iLCJfZGlzY2FyZFN0aWNreVNlc3Npb24iLCJkaXNjYXJkU3RpY2t5U2Vzc2lvbiIsImludGVybmFsTW9kZWwiLCJnZXRIdHRwSGVhZGVycyIsImJSZWNyZWF0ZUNvbnRleHQiLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2hvd1BsYWNlaG9sZGVyIiwia2VlcEN1cnJlbnRMYXlvdXQiLCJ2aWV3IiwicGFyYW1zIiwidmlld0xldmVsIiwiYlJlZnJlc2hBZnRlckFjdGlvbiIsInNWaWV3SWQiLCJnZXRJZCIsImFNZXNzYWdlcyIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImkiLCJ2YWxpZGF0aW9uIiwiZ2V0Q29udHJvbElkIiwib0RhdGEiLCJhS2V5cyIsIm9DdXJyZW50RGF0YSIsImJSZXR1cm5lZENvbnRleHRJc1NhbWUiLCJldmVyeSIsInNLZXkiLCJpc1Jvb3QiLCJyZWZyZXNoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRDb250ZXh0IiwiYVJlcXVlc3RQcm9taXNlcyIsIm9LZXkiLCJyZXF1ZXN0T2JqZWN0IiwiJFByb3BlcnR5UGF0aCIsInJvb3RDb250ZXh0IiwibGlzdEJpbmRpbmciLCJvdmVybG9hZEVudGl0eVR5cGUiLCJjb250ZXh0U2VnbWVudHMiLCJjdXJyZW50Q29udGV4dCIsInBvcCIsInVuc2hpZnQiLCJwYXJlbnRDb250ZXh0cyIsInBhdGhTZWdtZW50IiwicmV2ZXJzZSIsIm92ZXJsb2FkQ29udGV4dCIsImZpbmQiLCJwYXJlbnRDb250ZXh0IiwibmV3Q29udGV4dCIsIm1hcHBpbmdzIiwic2V0UGF0aE1hcHBpbmciLCJyb290Q3VycmVudENvbnRleHQiLCJyaWdodG1vc3RDdXJyZW50Q29udGV4dCIsImRvTm90Q29tcHV0ZUlmUm9vdCIsInN0YXJ0c1dpdGgiLCJkcmFmdCIsImNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24iLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFZGl0Rmxvdy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBzZW5kIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQWN0aXZpdHlTeW5jXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSwgc2hhcmVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNpYmxpbmdJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY01hcHBpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvUm91dGluZ1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbnMsIHRyaWdnZXJDb25maWd1cmVkU3VydmV5LCBUcmlnZ2VyVHlwZSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0ZlZWRiYWNrXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IGNvcmVMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVjRDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcIi4uL0FjdGlvblJ1bnRpbWVcIjtcblxuY29uc3QgQ3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZSxcblx0UHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsLFxuXHRDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzLFxuXHREcmFmdFN0YXR1cyA9IEZFTGlicmFyeS5EcmFmdFN0YXR1cyxcblx0RWRpdE1vZGUgPSBGRUxpYnJhcnkuRWRpdE1vZGUsXG5cdFN0YXJ0dXBNb2RlID0gRkVMaWJyYXJ5LlN0YXJ0dXBNb2RlLFxuXHRNZXNzYWdlVHlwZSA9IGNvcmVMaWJyYXJ5Lk1lc3NhZ2VUeXBlO1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgZWRpdCBmbG93IG9mIHRoZSBhcHBsaWNhdGlvblxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcIilcbmNsYXNzIEVkaXRGbG93IGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gUHVibGljIG1ldGhvZHNcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHRwcml2YXRlIGZuRGlydHlTdGF0ZVByb3ZpZGVyPzogRnVuY3Rpb247XG5cdHByaXZhdGUgZm5IYW5kbGVTZXNzaW9uVGltZW91dD86IEZ1bmN0aW9uO1xuXHRwcml2YXRlIG1QYXRjaFByb21pc2VzPzogYW55O1xuXHRwcml2YXRlIF9mblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24/OiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGRyYWZ0IGRvY3VtZW50IGZvciBhbiBleGlzdGluZyBhY3RpdmUgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBlZGl0YWJsZSBkb2N1bWVudCBpcyBhdmFpbGFibGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I2VkaXREb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBlZGl0RG9jdW1lbnQoY29udGV4dDogVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYkRyYWZ0TmF2aWdhdGlvbiA9IHRydWU7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLl9nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0bGV0IHJpZ2h0bW9zdENvbnRleHQ7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5vbkJlZm9yZUVkaXQoeyBjb250ZXh0OiBjb250ZXh0IH0pO1xuXHRcdFx0Y29uc3QgbmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdHJhbnNhY3Rpb25IZWxwZXIuZWRpdERvY3VtZW50KGNvbnRleHQsIHRoaXMuZ2V0VmlldygpLCB0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpKTtcblxuXHRcdFx0Y29uc3QgcHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuX2dldFByb2dyYW1taW5nTW9kZWwoY29udGV4dCk7XG5cblx0XHRcdHRoaXMuX3NldFN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMocHJvZ3JhbW1pbmdNb2RlbCwgbW9kZWwpO1xuXG5cdFx0XHRpZiAobmV3RG9jdW1lbnRDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMuX3NldEVkaXRNb2RlKEVkaXRNb2RlLkVkaXRhYmxlLCBmYWxzZSk7XG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coKTtcblxuXHRcdFx0XHRpZiAobmV3RG9jdW1lbnRDb250ZXh0ICE9PSBjb250ZXh0KSB7XG5cdFx0XHRcdFx0bGV0IGNvbnRleHRUb05hdmlnYXRlID0gbmV3RG9jdW1lbnRDb250ZXh0O1xuXHRcdFx0XHRcdGlmICh0aGlzLl9pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdFx0cmlnaHRtb3N0Q29udGV4dCA9IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpO1xuXHRcdFx0XHRcdFx0bGV0IHNpYmxpbmdJbmZvID0gYXdhaXQgdGhpcy5fY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihjb250ZXh0LCByaWdodG1vc3RDb250ZXh0LCBwcm9ncmFtbWluZ01vZGVsLCB0cnVlKTtcblx0XHRcdFx0XHRcdHNpYmxpbmdJbmZvID0gc2libGluZ0luZm8gPz8gdGhpcy5fY3JlYXRlU2libGluZ0luZm8oY29udGV4dCwgbmV3RG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVBhdGhzSW5IaXN0b3J5KHNpYmxpbmdJbmZvLnBhdGhNYXBwaW5nKTtcblx0XHRcdFx0XHRcdGlmIChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0LmdldFBhdGgoKSAhPSBuZXdEb2N1bWVudENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRUb05hdmlnYXRlID0gc2libGluZ0luZm8udGFyZ2V0Q29udGV4dDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9oYW5kbGVOZXdDb250ZXh0KGNvbnRleHRUb05hdmlnYXRlLCB0cnVlLCBmYWxzZSwgYkRyYWZ0TmF2aWdhdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0aWYgKHByb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgc3RpY2t5T24gaGFuZGxlciBtdXN0IGJlIHNldCBhZnRlciB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBkb25lLFxuXHRcdFx0XHRcdFx0Ly8gYXMgdGhlIFVSTCBtYXkgY2hhbmdlIGluIHRoZSBjYXNlIG9mIEZDTFxuXHRcdFx0XHRcdFx0dGhpcy5faGFuZGxlU3RpY2t5T24obmV3RG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG1vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0Ly8gYWNjb3JkaW5nIHRvIFVYIGluIGNhc2Ugb2YgZW5hYmxlZCBjb2xsYWJvcmF0aW9uIGRyYWZ0IHdlIHNoYXJlIHRoZSBvYmplY3QgaW1tZWRpYXRlbHlcblx0XHRcdFx0XHRcdGF3YWl0IHNoYXJlT2JqZWN0KG5ld0RvY3VtZW50Q29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGVkaXRpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0ZGVsZXRlTXVsdGlwbGVEb2N1bWVudHMoYUNvbnRleHRzOiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmJlZm9yZURlbGV0ZUNhbGxCYWNrID0gdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlRGVsZXRlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YmVmb3JlRGVsZXRlQ2FsbEJhY2s6IHRoaXMuYmFzZS5lZGl0Rmxvdy5vbkJlZm9yZURlbGV0ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzKGFDb250ZXh0cywgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGRyYWZ0IHN0YXR1cyBhbmQgZGlzcGxheXMgdGhlIGVycm9yIG1lc3NhZ2VzIGlmIHRoZXJlIGFyZSBlcnJvcnMgZHVyaW5nIGFuIHVwZGF0ZS5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSB1cGRhdGVkIGZpZWxkXG5cdCAqIEBwYXJhbSBvUHJvbWlzZSBQcm9taXNlIHRvIGRldGVybWluZSB3aGVuIHRoZSB1cGRhdGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4gVGhlIHByb21pc2Ugc2hvdWxkIGJlIHJlc29sdmVkIHdoZW4gdGhlIHVwZGF0ZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBzbyB0aGUgZHJhZnQgc3RhdHVzIGNhbiBiZSB1cGRhdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIG9uY2UgZHJhZnQgc3RhdHVzIGhhcyBiZWVuIHVwZGF0ZWRcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I3VwZGF0ZURvY3VtZW50XG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVwZGF0ZURvY3VtZW50KG9Db250ZXh0OiBvYmplY3QsIG9Qcm9taXNlOiBQcm9taXNlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0cmFuc2FjdGlvbkhlbHBlciA9IHRoaXMuX2dldFRyYW5zYWN0aW9uSGVscGVyKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxCaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYklzRHJhZnQgPSB0aGlzLl9nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KSA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdDtcblxuXHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0cmV0dXJuIHRoaXMuX3N5bmNUYXNrKGFzeW5jICgpID0+IHtcblx0XHRcdGlmIChvcmlnaW5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdHRyYW5zYWN0aW9uSGVscGVyLmhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucygpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYklzRHJhZnQpIHtcblx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0XHQvLyBJZiBhIG5hdmlnYXRpb24gaGFwcGVuZWQgd2hpbGUgb1Byb21pc2Ugd2FzIGJlaW5nIHJlc29sdmVkLCB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGNoYW5nZWRcblx0XHRcdFx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSBzaG91bGRuJ3QgZG8gYW55dGhpbmdcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0aWYgKGJJc0RyYWZ0ICYmIG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQgPT09IG9yaWdpbmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRzRW50aXR5U2V0TmFtZSA9IChvTWV0YU1vZGVsIGFzIGFueSkuZ2V0TWV0YUNvbnRleHQob0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRcdFx0XHRhU2VtYW50aWNLZXlzID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG9NZXRhTW9kZWwsIHNFbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0XHRpZiAoYVNlbWFudGljS2V5cyAmJiBhU2VtYW50aWNLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTZW1hbnRpY01hcHBpbmcgPSB0aGlzLl9nZXRTZW1hbnRpY01hcHBpbmcoKSxcblx0XHRcdFx0XHRcdFx0c0N1cnJlbnRTZW1hbnRpY1BhdGggPSBvQ3VycmVudFNlbWFudGljTWFwcGluZyAmJiBvQ3VycmVudFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGgsXG5cdFx0XHRcdFx0XHRcdHNDaGFuZ2VkUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQmluZGluZ0NvbnRleHQsIHRydWUpO1xuXHRcdFx0XHRcdFx0Ly8gc0N1cnJlbnRTZW1hbnRpY1BhdGggY291bGQgYmUgbnVsbCBpZiB3ZSBoYXZlIG5hdmlnYXRlZCB2aWEgZGVlcCBsaW5rIHRoZW4gdGhlcmUgYXJlIG5vIHNlbWFudGljTWFwcGluZ3MgdG8gY2FsY3VsYXRlIGl0IGZyb21cblx0XHRcdFx0XHRcdGlmIChzQ3VycmVudFNlbWFudGljUGF0aCAmJiBzQ3VycmVudFNlbWFudGljUGF0aCAhPT0gc0NoYW5nZWRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX2hhbmRsZU5ld0NvbnRleHQob0JpbmRpbmdDb250ZXh0IGFzIENvbnRleHQsIHRydWUsIGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZlZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgZG9jdW1lbnRcIiwgb0Vycm9yKTtcblx0XHRcdFx0aWYgKGJJc0RyYWZ0ICYmIG9yaWdpbmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBJbnRlcm5hbCBvbmx5IHBhcmFtcyAtLS1cblx0Ly8gKiBAcGFyYW0ge3N0cmluZ30gbVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXHQvLyAqICAgICAgICAgICAgICAgICAgICBTeW5jIC0gdGhlIGNyZWF0aW9uIGlzIHRyaWdnZXJlZCBhbmQgb25jZSB0aGUgZG9jdW1lbnQgaXMgY3JlYXRlZCwgdGhlIG5hdmlnYXRpb24gaXMgZG9uZVxuXHQvLyAqICAgICAgICAgICAgICAgICAgICBBc3luYyAtIHRoZSBjcmVhdGlvbiBhbmQgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGluc3RhbmNlIGFyZSBkb25lIGluIHBhcmFsbGVsXG5cdC8vICogICAgICAgICAgICAgICAgICAgIERlZmVycmVkIC0gdGhlIGNyZWF0aW9uIGlzIGRvbmUgb24gdGhlIHRhcmdldCBwYWdlXG5cdC8vICogICAgICAgICAgICAgICAgICAgIENyZWF0aW9uUm93IC0gVGhlIGNyZWF0aW9uIGlzIGRvbmUgaW5saW5lIGFzeW5jIHNvIHRoZSB1c2VyIGlzIG5vdCBibG9ja2VkXG5cdC8vIG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93IEluc3RhbmNlIG9mIHRoZSBjcmVhdGlvbiByb3cgLSAoVE9ETzogZ2V0IHJpZCBidXQgdXNlIGxpc3QgYmluZGluZ3Mgb25seSlcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1wYXJhbVxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSB2TGlzdEJpbmRpbmcgIE9EYXRhTGlzdEJpbmRpbmcgb2JqZWN0IG9yIHRoZSBiaW5kaW5nIHBhdGggZm9yIGEgdGVtcG9yYXJ5IGxpc3QgYmluZGluZ1xuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblx0ICogICAgICAgICAgICAgICAgICAgIE5ld1BhZ2UgLSB0aGUgY3JlYXRlZCBkb2N1bWVudCBpcyBzaG93biBpbiBhIG5ldyBwYWdlLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZXRhZGF0YSAnU3luYycsICdBc3luYycgb3IgJ0RlZmVycmVkJyBpcyB1c2VkXG5cdCAqICAgICAgICAgICAgICAgICAgICBJbmxpbmUgLSBUaGUgY3JlYXRpb24gaXMgZG9uZSBpbmxpbmUgKGluIGEgdGFibGUpXG5cdCAqICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbCAtIFRoZSBjcmVhdGlvbiBpcyBkb25lIGluIGEgZGlmZmVyZW50IGFwcGxpY2F0aW9uIHNwZWNpZmllZCB2aWEgdGhlIHBhcmFtZXRlciAnb3V0Ym91bmQnXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnRhYmxlSWQgSUQgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLm91dGJvdW5kIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCB3aGVyZSB0aGUgZG9jdW1lbnQgaXMgY3JlYXRlZCBpbiBjYXNlIG9mIGNyZWF0aW9uTW9kZSAnRXh0ZXJuYWwnXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kIFNwZWNpZmllcyBpZiB0aGUgbmV3IGVudHJ5IHNob3VsZCBiZSBjcmVhdGVkIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIGEgdGFibGUgaW4gY2FzZSBvZiBjcmVhdGlvbk1vZGUgJ0lubGluZSdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZFxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjY3JlYXRlRG9jdW1lbnRcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgY3JlYXRlRG9jdW1lbnQoXG5cdFx0dkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nIHwgc3RyaW5nLFxuXHRcdG1JblBhcmFtZXRlcnM6IHtcblx0XHRcdGNyZWF0aW9uTW9kZTogc3RyaW5nO1xuXHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdG91dGJvdW5kPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLl9nZXRHbG9iYWxVSU1vZGVsKCk7XG5cdFx0bGV0IG9UYWJsZTogYW55OyAvL3Nob3VsZCBiZSBUYWJsZSBidXQgdGhlcmUgYXJlIG1pc3NpbmcgbWV0aG9kcyBpbnRvIHRoZSBkZWZcblx0XHRsZXQgbVBhcmFtZXRlcnM6IGFueSA9IG1JblBhcmFtZXRlcnM7XG5cdFx0bGV0IG9DcmVhdGlvbjogUHJvbWlzZTxDb250ZXh0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSB0aGlzLl9nZXRSZXNvdXJjZUJ1bmRsZSgpO1xuXHRcdGNvbnN0IGJTaG91bGRCdXN5TG9jayA9XG5cdFx0XHQhbVBhcmFtZXRlcnMgfHxcblx0XHRcdChtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpO1xuXHRcdGxldCBvRXhlY0N1c3RvbVZhbGlkYXRpb24gPSBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5yZW1vdmVJQXBwU3RhdGVLZXkoKTtcblxuXHRcdGlmIChtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCkge1xuXHRcdFx0Ly8gQ3JlYXRlIGJ5IG5hdmlnYXRpbmcgdG8gYW4gZXh0ZXJuYWwgdGFyZ2V0XG5cdFx0XHQvLyBUT0RPOiBDYWxsIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIChjdXJyZW50bHkgdXNpbmcgdGhlIHNhbWUgYXMgZm9yIG91dGJvdW5kIGNoZXZyb24gbmF2LCBhbmQgd2l0aG91dCBhbnkgY29udGV4dCAtIDNyZCBwYXJhbSlcblx0XHRcdGF3YWl0IHRoaXMuX3N5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGNvbnN0IHNDcmVhdGVQYXRoID0gTW9kZWxIZWxwZXIuZ2V0QWJzb2x1dGVNZXRhUGF0aEZvckxpc3RCaW5kaW5nKHRoaXMuZ2V0VmlldygpLCB2TGlzdEJpbmRpbmcpO1xuXG5cdFx0XHQob0NvbnRyb2xsZXIgYXMgYW55KS5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIG1QYXJhbWV0ZXJzLm91dGJvdW5kLCB1bmRlZmluZWQsIHNDcmVhdGVQYXRoKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBtUGFyYW1ldGVycy5jcmVhdGlvblJvdykge1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93T2JqZWN0cyA9IG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCk7XG5cdFx0XHRkZWxldGUgb0NyZWF0aW9uUm93T2JqZWN0c1tcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdFx0XHRvVGFibGUgPSBtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRQYXJlbnQoKTtcblx0XHRcdG9FeGVjQ3VzdG9tVmFsaWRhdGlvbiA9IHRyYW5zYWN0aW9uSGVscGVyLnZhbGlkYXRlRG9jdW1lbnQoXG5cdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZGF0YTogb0NyZWF0aW9uUm93T2JqZWN0cyxcblx0XHRcdFx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLmRhdGEoXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBpcyBzZXQgdG8gZmFsc2UgaW4gbWFuaWZlc3QgY29udmVydGVyIChUYWJsZS50cykgaWYgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIGV4aXN0c1xuXHRcdFx0aWYgKG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLmRhdGEoXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lICYmIG1QYXJhbWV0ZXJzLnRhYmxlSWQpIHtcblx0XHRcdG9UYWJsZSA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMudGFibGVJZCkgYXMgVGFibGU7XG5cdFx0fVxuXG5cdFx0aWYgKG9UYWJsZSAmJiBvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0Y29uc3QgZm5Gb2N1c09yU2Nyb2xsID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lID8gb1RhYmxlLmZvY3VzUm93LmJpbmQob1RhYmxlKSA6IG9UYWJsZS5zY3JvbGxUb0luZGV4LmJpbmQob1RhYmxlKTtcblx0XHRcdG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0YXdhaXQgb0NyZWF0aW9uO1xuXHRcdFx0XHRmbkZvY3VzT3JTY3JvbGwobVBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPyBvVGFibGUuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIDogMCwgdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBoYW5kbGVTaWRlRWZmZWN0cyA9IGFzeW5jIChvTGlzdEJpbmRpbmc6IGFueSwgb0NyZWF0aW9uUHJvbWlzZTogUHJvbWlzZTxDb250ZXh0PikgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgb05ld0NvbnRleHQgPSBhd2FpdCBvQ3JlYXRpb25Qcm9taXNlO1xuXHRcdFx0XHQvLyB0cmFuc2llbnQgY29udGV4dHMgYXJlIHJlbGlhYmx5IHJlbW92ZWQgb25jZSBvTmV3Q29udGV4dC5jcmVhdGVkKCkgaXMgcmVzb2x2ZWRcblx0XHRcdFx0YXdhaXQgb05ld0NvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGFyZSB0cmFuc2llbnQgY29udGV4dHMsIHdlIG11c3QgYXZvaWQgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcblx0XHRcdFx0Ly8gdGhpcyBpcyBhdm9pZCBhIHBvdGVudGlhbCBsaXN0IHJlZnJlc2gsIHRoZXJlIGNvdWxkIGJlIGEgc2lkZSBlZmZlY3QgdGhhdCByZWZyZXNoZXMgdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHQvLyBpZiBsaXN0IGJpbmRpbmcgaXMgcmVmcmVzaGVkLCB0cmFuc2llbnQgY29udGV4dHMgbWlnaHQgYmUgbG9zdFxuXHRcdFx0XHRpZiAoIUNvbW1vblV0aWxzLmhhc1RyYW5zaWVudENvbnRleHQob0xpc3RCaW5kaW5nKSkge1xuXHRcdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eShvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgZG9jdW1lbnRcIiwgb0Vycm9yKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIGFWYWxpZGF0aW9uTWVzc2FnZXMgRXJyb3IgbWVzc2FnZXMgZnJvbSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvblxuXHRcdCAqL1xuXHRcdGNvbnN0IGNyZWF0ZUN1c3RvbVZhbGlkYXRpb25NZXNzYWdlcyA9IChhVmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnlbXSkgPT4ge1xuXHRcdFx0Y29uc3Qgc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKS5kYXRhKFwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uXCIpO1xuXHRcdFx0Y29uc3QgbUN1c3RvbVZhbGlkaXR5ID0gb1RhYmxlICYmIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIik7XG5cdFx0XHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBhQ3VzdG9tTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0ZpZWxkQ29udHJvbDtcblx0XHRcdGxldCBzVGFyZ2V0OiBzdHJpbmc7XG5cblx0XHRcdC8vIFJlbW92ZSBleGlzdGluZyBDdXN0b21WYWxpZGF0aW9uIG1lc3NhZ2Vcblx0XHRcdG9NZXNzYWdlTWFuYWdlclxuXHRcdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRcdGlmIChvTWVzc2FnZS5jb2RlID09PSBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdGFWYWxpZGF0aW9uTWVzc2FnZXMuZm9yRWFjaCgob1ZhbGlkYXRpb25NZXNzYWdlOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gSGFuZGxlIEJvdW5kIEN1c3RvbVZhbGlkYXRpb24gbWVzc2FnZVxuXHRcdFx0XHRpZiAob1ZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUYXJnZXQpIHtcblx0XHRcdFx0XHRvRmllbGRDb250cm9sID0gQ29yZS5nZXRDb250cm9sKG1DdXN0b21WYWxpZGl0eVtvVmFsaWRhdGlvbk1lc3NhZ2UubWVzc2FnZVRhcmdldF0uZmllbGRJZCkgYXMgQ29udHJvbDtcblx0XHRcdFx0XHRzVGFyZ2V0ID0gYCR7b0ZpZWxkQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7b0ZpZWxkQ29udHJvbC5nZXRCaW5kaW5nUGF0aChcInZhbHVlXCIpfWA7XG5cdFx0XHRcdFx0Ly8gQWRkIHZhbGlkYXRpb24gbWVzc2FnZSBpZiBzdGlsbCBub3QgZXhpc3RzXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b01lc3NhZ2VNYW5hZ2VyXG5cdFx0XHRcdFx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01lc3NhZ2UudGFyZ2V0ID09PSBzVGFyZ2V0O1xuXHRcdFx0XHRcdFx0XHR9KS5sZW5ndGggPT09IDBcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IG9WYWxpZGF0aW9uTWVzc2FnZS5tZXNzYWdlVGV4dCxcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdFx0Y29kZTogc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0ZWNobmljYWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldDogc1RhcmdldFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQWRkIGNvbnRyb2xJZCBpbiBvcmRlciB0byBnZXQgdGhlIGZvY3VzIGhhbmRsaW5nIG9mIHRoZSBlcnJvciBwb3BvdmVyIHJ1bmFibGVcblx0XHRcdFx0XHRjb25zdCBhRXhpc3RpbmdWYWxpZGF0aW9uTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXJcblx0XHRcdFx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb01lc3NhZ2UudGFyZ2V0ID09PSBzVGFyZ2V0O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YUV4aXN0aW5nVmFsaWRhdGlvbk1lc3NhZ2VzWzBdLmFkZENvbnRyb2xJZChtQ3VzdG9tVmFsaWRpdHlbb1ZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUYXJnZXRdLmZpZWxkSWQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIFVuYm91bmQgQ3VzdG9tVmFsaWRhdGlvbiBtZXNzYWdlXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUN1c3RvbU1lc3NhZ2VzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29kZTogc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRcdFx0XHRcdHRleHQ6IG9WYWxpZGF0aW9uTWVzc2FnZS5tZXNzYWdlVGV4dCxcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGFDdXN0b21NZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdGN1c3RvbU1lc3NhZ2VzOiBhQ3VzdG9tTWVzc2FnZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IHJlc29sdmVDcmVhdGlvbk1vZGUgPSAoXG5cdFx0XHRpbml0aWFsQ3JlYXRpb25Nb2RlOiBzdHJpbmcsXG5cdFx0XHRwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsXG5cdFx0XHRvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHRcdCk6IHN0cmluZyA9PiB7XG5cdFx0XHRpZiAoaW5pdGlhbENyZWF0aW9uTW9kZSAmJiBpbml0aWFsQ3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdFx0XHQvLyB1c2UgdGhlIHBhc3NlZCBjcmVhdGlvbiBtb2RlXG5cdFx0XHRcdHJldHVybiBpbml0aWFsQ3JlYXRpb25Nb2RlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTmV3QWN0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBOYXZpZ2F0aW9uUHJvcGVydHkgY29sbGVjdGlvblxuXHRcdFx0XHRpZiAoIW9MaXN0QmluZGluZy5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdFx0XHRjb25zdCBzUGF0aCA9IG9MaXN0QmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHQvLyBpZiBOZXdBY3Rpb24gd2l0aCBwYXJhbWV0ZXJzIGlzIHByZXNlbnQsIHRoZW4gY3JlYXRpb24gaXMgJ0RlZmVycmVkJ1xuXHRcdFx0XHRcdFx0Ly8gaW4gdGhlIGFic2VuY2Ugb2YgTmV3QWN0aW9uIG9yIE5ld0FjdGlvbiB3aXRoIHBhcmFtZXRlcnMsIGNyZWF0aW9uIGlzIGFzeW5jXG5cdFx0XHRcdFx0XHRzTmV3QWN0aW9uID1cblx0XHRcdFx0XHRcdFx0cHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdFxuXHRcdFx0XHRcdFx0XHRcdD8gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvTmV3QWN0aW9uYClcblx0XHRcdFx0XHRcdFx0XHQ6IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvTmV3QWN0aW9uYCk7XG5cdFx0XHRcdFx0aWYgKHNOZXdBY3Rpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NOZXdBY3Rpb259L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlcmApIHx8IFtdO1xuXHRcdFx0XHRcdFx0Ly8gYmluZGluZyBwYXJhbWV0ZXIgKGVnOiBfaXQpIGlzIG5vdCBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gQ3JlYXRpb25Nb2RlLkRlZmVycmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgYU5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkcyA9IENvbW1vblV0aWxzLmdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyhvTWV0YU1vZGVsLCBzTWV0YVBhdGgsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0aWYgKGFOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHJldHVybiBDcmVhdGlvbk1vZGUuRGVmZXJyZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIENyZWF0aW9uTW9kZS5Bc3luYztcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJTaG91bGRCdXN5TG9jaykge1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFWYWxpZGF0aW9uTWVzc2FnZXMgPSBhd2FpdCB0aGlzLl9zeW5jVGFzayhvRXhlY0N1c3RvbVZhbGlkYXRpb24pO1xuXHRcdFx0aWYgKGFWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjcmVhdGVDdXN0b21WYWxpZGF0aW9uTWVzc2FnZXMoYVZhbGlkYXRpb25NZXNzYWdlcyk7XG5cdFx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBWYWxpZGF0aW9uIGZhaWxlZFwiKTtcblx0XHRcdFx0Ly8gaWYgY3VzdG9tIHZhbGlkYXRpb24gZmFpbHMsIHdlIGxlYXZlIHRoZSBtZXRob2QgaW1tZWRpYXRlbHlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgb0xpc3RCaW5kaW5nOiBhbnk7XG5cdFx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRpZiAodkxpc3RCaW5kaW5nICYmIHR5cGVvZiB2TGlzdEJpbmRpbmcgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gd2UgYWxyZWFkeSBnZXQgYSBsaXN0IGJpbmRpbmcgdXNlIHRoaXMgb25lXG5cdFx0XHRcdG9MaXN0QmluZGluZyA9IHZMaXN0QmluZGluZztcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHZMaXN0QmluZGluZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRvTGlzdEJpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KSh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLCB2TGlzdEJpbmRpbmcpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuU3luYztcblx0XHRcdFx0ZGVsZXRlIG1QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyBvYmplY3Qgb3IgcGF0aCBleHBlY3RlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb01vZGVsID0gb0xpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nID0gdGhpcy5fZ2V0UHJvZ3JhbW1pbmdNb2RlbChvTGlzdEJpbmRpbmcpO1xuXHRcdFx0Y29uc3QgcmVzb2x2ZWRDcmVhdGlvbk1vZGUgPSByZXNvbHZlQ3JlYXRpb25Nb2RlKFxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsLFxuXHRcdFx0XHRvTGlzdEJpbmRpbmcsXG5cdFx0XHRcdG9Nb2RlbC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0KTtcblx0XHRcdGxldCBtQXJnczogYW55O1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93ID0gbVBhcmFtZXRlcnMuY3JlYXRpb25Sb3c7XG5cdFx0XHRsZXQgb0NyZWF0aW9uUm93Q29udGV4dDogYW55O1xuXHRcdFx0bGV0IG9QYXlsb2FkOiBhbnk7XG5cdFx0XHRsZXQgc01ldGFQYXRoOiBzdHJpbmc7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgb1JvdXRpbmdMaXN0ZW5lciA9IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpO1xuXG5cdFx0XHRpZiAocmVzb2x2ZWRDcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5EZWZlcnJlZCkge1xuXHRcdFx0XHRpZiAocmVzb2x2ZWRDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdFx0XHRcdG9DcmVhdGlvblJvd0NvbnRleHQgPSBvQ3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9DcmVhdGlvblJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHQvLyBwcmVmaWxsIGRhdGEgZnJvbSBjcmVhdGlvbiByb3dcblx0XHRcdFx0XHRvUGF5bG9hZCA9IG9DcmVhdGlvblJvd0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGF0YSA9IHt9O1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG9QYXlsb2FkKS5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtzUHJvcGVydHlQYXRofWApO1xuXHRcdFx0XHRcdFx0Ly8gZW5zdXJlIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcmUgbm90IHBhcnQgb2YgdGhlIHBheWxvYWQsIGRlZXAgY3JlYXRlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHkgJiYgb1Byb3BlcnR5LiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRhdGFbc1Byb3BlcnR5UGF0aF0gPSBvUGF5bG9hZFtzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMoLypvQ3JlYXRpb25Sb3dDb250ZXh0Ki8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZXNvbHZlZENyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93IHx8IHJlc29sdmVkQ3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCA9IGZhbHNlOyAvLyBjdXJyZW50bHkgbm90IGZ1bGx5IHN1cHBvcnRlZFxuXHRcdFx0XHRcdC8vIGJ1c3kgaGFuZGxpbmcgc2hhbGwgYmUgZG9uZSBsb2NhbGx5IG9ubHlcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5idXN5TW9kZSA9IFwiTG9jYWxcIjtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5idXN5SWQgPSBvVGFibGU/LmdldFBhcmVudCgpPy5nZXRUYWJsZURlZmluaXRpb24oKT8uYW5ub3RhdGlvbi5pZDtcblxuXHRcdFx0XHRcdC8vIHRha2UgY2FyZSBvbiBtZXNzYWdlIGhhbmRsaW5nLCBkcmFmdCBpbmRpY2F0b3IgKGluIGNhc2Ugb2YgZHJhZnQpXG5cdFx0XHRcdFx0Ly8gQXR0YWNoIHRoZSBjcmVhdGUgc2VudCBhbmQgY3JlYXRlIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0XHRcdHRoaXMuX2hhbmRsZUNyZWF0ZUV2ZW50cyhvTGlzdEJpbmRpbmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrID0gdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHdhcyBjYWxsZWQgd2l0aCBwcmVmZXJyZWRNb2RlPWF1dG9DcmVhdGVXaXRoLCB3ZSB3YW50IHRvIHNraXAgdGhlXG5cdFx0XHRcdC8vIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2cgPSBvQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBNb2RlKCkgPT09IFN0YXJ0dXBNb2RlLkF1dG9DcmVhdGU7XG5cblx0XHRcdFx0b0NyZWF0aW9uID0gdHJhbnNhY3Rpb25IZWxwZXIuY3JlYXRlRG9jdW1lbnQoXG5cdFx0XHRcdFx0b0xpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvTmF2aWdhdGlvbjtcblx0XHRcdHN3aXRjaCAocmVzb2x2ZWRDcmVhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuRGVmZXJyZWQ6XG5cdFx0XHRcdFx0b05hdmlnYXRpb24gPSBvUm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChvTGlzdEJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdGJEZWZlcnJlZENvbnRleHQ6IHRydWUsXG5cdFx0XHRcdFx0XHRlZGl0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGJGb3JjZUZvY3VzOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkFzeW5jOlxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gb1JvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQob0xpc3RCaW5kaW5nLCB7XG5cdFx0XHRcdFx0XHRhc3luY0NvbnRleHQ6IG9DcmVhdGlvbixcblx0XHRcdFx0XHRcdGVkaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0YkZvcmNlRm9jdXM6IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuU3luYzpcblx0XHRcdFx0XHRtQXJncyA9IHtcblx0XHRcdFx0XHRcdGVkaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0YkZvcmNlRm9jdXM6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSB8fCBtUGFyYW1ldGVycy5jcmVhdGVBY3Rpb24pIHtcblx0XHRcdFx0XHRcdG1BcmdzLnRyYW5zaWVudCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gb0NyZWF0aW9uPy50aGVuKGZ1bmN0aW9uIChvTmV3RG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmICghb05ld0RvY3VtZW50Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1JvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UoXG5cdFx0XHRcdFx0XHRcdFx0Y29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9EQVRBX1JFQ0VJVkVEX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBjb3JlUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FRElURkxPV19TQVBGRV9DUkVBVElPTl9GQUlMRURfREVTQ1JJUFRJT05cIilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBTeW5jIGNyZWF0aW9uIHdhcyB0cmlnZ2VyZWQgZm9yIGEgZGVmZXJyZWQgY3JlYXRpb24sIHdlIGRvbid0IG5hdmlnYXRlIGZvcndhcmRcblx0XHRcdFx0XHRcdFx0Ly8gYXMgd2UncmUgYWxyZWFkeSBvbiB0aGUgY29ycmVzcG9uZGluZyBPYmplY3RQYWdlXG5cdFx0XHRcdFx0XHRcdHJldHVybiBtUGFyYW1ldGVycy5iRnJvbURlZmVycmVkXG5cdFx0XHRcdFx0XHRcdFx0PyBvUm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlVG9Db250ZXh0KG9OZXdEb2N1bWVudENvbnRleHQsIG1BcmdzKVxuXHRcdFx0XHRcdFx0XHRcdDogb1JvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQob05ld0RvY3VtZW50Q29udGV4dCwgbUFyZ3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5JbmxpbmU6XG5cdFx0XHRcdFx0aGFuZGxlU2lkZUVmZmVjdHMob0xpc3RCaW5kaW5nLCBvQ3JlYXRpb24gYXMgUHJvbWlzZTxDb250ZXh0Pik7XG5cdFx0XHRcdFx0dGhpcy5fc3luY1Rhc2sob0NyZWF0aW9uKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3c6XG5cdFx0XHRcdFx0Ly8gdGhlIGNyZWF0aW9uIHJvdyBzaGFsbCBiZSBjbGVhcmVkIG9uY2UgdGhlIHZhbGlkYXRpb24gY2hlY2sgd2FzIHN1Y2Nlc3NmdWwgYW5kXG5cdFx0XHRcdFx0Ly8gdGhlcmVmb3JlIHRoZSBQT1NUIGNhbiBiZSBzZW50IGFzeW5jIHRvIHRoZSBiYWNrZW5kXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9DcmVhdGlvblJvd0xpc3RCaW5kaW5nID0gb0NyZWF0aW9uUm93Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cblx0XHRcdFx0XHRcdGlmICghbVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVTaWRlRWZmZWN0cyhvTGlzdEJpbmRpbmcsIG9DcmVhdGlvbiBhcyBQcm9taXNlPENvbnRleHQ+KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld1RyYW5zaWVudENvbnRleHQgPSBvQ3JlYXRpb25Sb3dMaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRcdG9DcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChvTmV3VHJhbnNpZW50Q29udGV4dCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3JzIFRPIGJlIGNoZWNrZWQgd2l0aCBtb2RlbCBjb2xsZWFndWVzXG5cdFx0XHRcdFx0XHRvTmV3VHJhbnNpZW50Q29udGV4dC5jcmVhdGVkKCkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgZmFzdCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gb0NyZWF0aW9uUm93Q29udGV4dC5kZWxldGUoXCIkZGlyZWN0XCIpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHQvLyBSZXNldCBidXN5IGluZGljYXRvciBhZnRlciBhIHZhbGlkYXRpb24gZXJyb3Jcblx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikpKSB7XG5cdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ3JlYXRpb25Sb3cgbmF2aWdhdGlvbiBlcnJvcjogXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gUHJvbWlzZS5yZWplY3QoYFVuaGFuZGxlZCBjcmVhdGlvbk1vZGUgJHtyZXNvbHZlZENyZWF0aW9uTW9kZX1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYklzTmV3UGFnZUNyZWF0aW9uID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgbVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0aWYgKG9DcmVhdGlvbikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFQYXJhbXMgPSBhd2FpdCBQcm9taXNlLmFsbChbb0NyZWF0aW9uLCBvTmF2aWdhdGlvbl0pO1xuXHRcdFx0XHRcdHRoaXMuX3NldFN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMoc1Byb2dyYW1taW5nTW9kZWwsIG9Nb2RlbCk7XG5cblx0XHRcdFx0XHRpZiAoYklzTmV3UGFnZUNyZWF0aW9uKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRFZGl0TW9kZShFZGl0TW9kZS5FZGl0YWJsZSwgYklzTmV3UGFnZUNyZWF0aW9uKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvTmV3RG9jdW1lbnRDb250ZXh0ID0gYVBhcmFtc1swXTtcblx0XHRcdFx0XHRpZiAob05ld0RvY3VtZW50Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLl9pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuX3NlbmRBY3Rpdml0eShBY3Rpdml0eS5DcmVhdGUsIG9OZXdEb2N1bWVudENvbnRleHQpO1xuXHRcdFx0XHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVTdGlja3lPbihvTmV3RG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBhY2NvcmRpbmcgdG8gVVggaW4gY2FzZSBvZiBlbmFibGVkIGNvbGxhYm9yYXRpb24gZHJhZnQgd2Ugc2hhcmUgdGhlIG9iamVjdCBpbW1lZGlhdGVseVxuXHRcdFx0XHRcdFx0XHRhd2FpdCBzaGFyZU9iamVjdChvTmV3RG9jdW1lbnRDb250ZXh0IGFzIFY0Q29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdC8vIFRPRE86IGN1cnJlbnRseSwgdGhlIG9ubHkgZXJyb3JzIGhhbmRsZWQgaGVyZSBhcmUgcmFpc2VkIGFzIHN0cmluZyAtIHNob3VsZCBiZSBjaGFuZ2VkIHRvIEVycm9yIG9iamVjdHNcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRlcnJvciA9PT0gQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyB8fFxuXHRcdFx0XHRcdFx0ZXJyb3IgPT09IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQgfHxcblx0XHRcdFx0XHRcdGVycm9yID09PSBDb25zdGFudHMuQ3JlYXRpb25GYWlsZWRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIGNyZWF0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCBieSB1c2VyIG9yIGZhaWxlZCBpbiBiYWNrZW5kID0+IGluIGNhc2Ugd2UgaGF2ZSBuYXZpZ2F0ZWQgdG8gdHJhbnNpZW50IGNvbnRleHQgYmVmb3JlLCBuYXZpZ2F0ZSBiYWNrXG5cdFx0XHRcdFx0XHQvLyB0aGUgc3dpdGNoLXN0YXRlbWVudCBhYm92ZSBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgaGFwcGVucyBpbiBjcmVhdGlvbk1vZGVzIGRlZmVycmVkIGFuZCBhc3luYy4gQnV0IGluIGZhY3QsIGluIHRoZXNlIGNhc2VzIGFmdGVyIHRoZSBuYXZpZ2F0aW9uIGZyb20gcm91dGVNYXRjaGVkIGluIE9QIGNvbXBvbmVudFxuXHRcdFx0XHRcdFx0Ly8gY3JlYXRlRGVmZXJyZWRDb250ZXh0IGlzIHRyaWdnZXJkLCB3aGljaCBjYWxscyB0aGlzIG1ldGhvZCAoY3JlYXRlRG9jdW1lbnQpIGFnYWluIC0gdGhpcyB0aW1lIHdpdGggY3JlYXRpb25Nb2RlIHN5bmMuIFRoZXJlZm9yZSwgYWxzbyBpbiB0aGF0IG1vZGUgd2UgbmVlZCB0byB0cmlnZ2VyIGJhY2sgbmF2aWdhdGlvbi5cblx0XHRcdFx0XHRcdC8vIFRoZSBvdGhlciBjYXNlcyBtaWdodCBzdGlsbCBiZSBuZWVkZWQgaW4gY2FzZSB0aGUgbmF2aWdhdGlvbiBmYWlscy5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5TeW5jIHx8XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkQ3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRGVmZXJyZWQgfHxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5Bc3luY1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG9Sb3V0aW5nTGlzdGVuZXIubmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChiU2hvdWxkQnVzeUxvY2spIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ1NhdmUnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdTYXZlJyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnU2F2ZScgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZVNhdmVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2F2ZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlc29sdmVkLCB0aGUgJ1NhdmUnIGFjdGlvbiBpcyB0cmlnZ2VyZWQuIElmIHJlamVjdGVkLCB0aGUgJ1NhdmUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkIGFuZCB0aGUgdXNlciBzdGF5cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjb25CZWZvcmVTYXZlXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlU2F2ZShtUGFyYW1ldGVycz86IHsgY29udGV4dD86IENvbnRleHQgfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSAnQ3JlYXRlJyBhY3Rpb24uIFlvdSBjYW4gZXhlY3V0ZSBjdXN0b20gY29kaW5nIGluIHRoaXMgZnVuY3Rpb24uXG5cdCAqIFRoZSBmcmFtZXdvcmsgd2FpdHMgZm9yIHRoZSByZXR1cm5lZCBwcm9taXNlIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnQ3JlYXRlJyBhY3Rpb24gaXMgc3RvcHBlZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtICBtUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gb25CZWZvcmVDcmVhdGVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHRQYXRoIFBhdGggcG9pbnRpbmcgdG8gdGhlIGNvbnRleHQgb24gd2hpY2ggQ3JlYXRlIGFjdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNyZWF0ZVBhcmFtZXRlcnMgQXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIGZpbGxlZCBpbiB0aGUgQWN0aW9uIFBhcmFtZXRlciBEaWFsb2dcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnQ3JlYXRlJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdDcmVhdGUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlQ3JlYXRlXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTguMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlQ3JlYXRlKG1QYXJhbWV0ZXJzPzogeyBjb250ZXh0UGF0aD86IHN0cmluZzsgY3JlYXRlUGFyYW1ldGVycz86IGFueVtdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0VkaXQnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdFZGl0JyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnRWRpdCcgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGRpc3BsYXkgbW9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZUVkaXRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgZWRpdGVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLiBJZiByZXNvbHZlZCwgdGhlICdFZGl0JyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdFZGl0JyBhY3Rpb24gaXMgbm90IHRyaWdnZXJlZCBhbmQgdGhlIHVzZXIgc3RheXMgaW4gZGlzcGxheSBtb2RlLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlRWRpdFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjk4LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZUVkaXQobVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0Rpc2NhcmQnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdEaXNjYXJkJyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnRGlzY2FyZCcgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZURpc2NhcmRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgZGlzY2FyZGVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLiBJZiByZXNvbHZlZCwgdGhlICdEaXNjYXJkJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdEaXNjYXJkJyBhY3Rpb24gaXMgbm90IHRyaWdnZXJlZCBhbmQgdGhlIHVzZXIgc3RheXMgaW4gZWRpdCBtb2RlLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlRGlzY2FyZFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjk4LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZURpc2NhcmQobVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0RlbGV0ZScgYWN0aW9uLiBZb3UgY2FuIGV4ZWN1dGUgY3VzdG9tIGNvZGluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuXHQgKiBUaGUgZnJhbWV3b3JrIHdhaXRzIGZvciB0aGUgcmV0dXJuZWQgcHJvbWlzZSB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZyB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuXHQgKiBJZiB5b3UgcmVqZWN0IHRoZSBwcm9taXNlLCB0aGUgJ0RlbGV0ZScgYWN0aW9uIGlzIHN0b3BwZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gb25CZWZvcmVEZWxldGVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHRzIEFuIGFycmF5IG9mIGNvbnRleHRzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGRlbGV0ZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnRGVsZXRlJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdEZWxldGUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlRGVsZXRlXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTguMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlRGVsZXRlKG1QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8vIEludGVybmFsIG9ubHkgcGFyYW1zIC0tLVxuXHQvLyBAcGFyYW0ge2Jvb2xlYW59IG1QYXJhbWV0ZXJzLmJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIEluZGljYXRlcyB3aGV0aGVyIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgaWdub3JlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIFNhdmUgZHVyaW5nIGFuIElubGluZSBjcmVhdGlvblxuXHQvLyBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMuYmluZGluZ3MgTGlzdCBiaW5kaW5ncyBvZiB0aGUgdGFibGVzIGluIHRoZSB2aWV3LlxuXHQvLyBCb3RoIG9mIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBmb3IgdGhlIHNhbWUgcHVycG9zZS4gVXNlciBjYW4gZW50ZXIgc29tZSBpbmZvcm1hdGlvbiBpbiB0aGUgY3JlYXRpb24gcm93KHMpIGJ1dCBkb2VzIG5vdCAnQWRkIHJvdycsIGluc3RlYWQgY2xpY2tzIFNhdmUuXG5cdC8vIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGluIHRoZSB2aWV3LlxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXBhcmFtXG5cdC8qKlxuXHQgKiBTYXZlcyBhIG5ldyBkb2N1bWVudCBhZnRlciBjaGVja2luZyBpdC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCAgQ29udGV4dCBvZiB0aGUgZWRpdGFibGUgZG9jdW1lbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHNhdmUgaXMgY29tcGxldGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I3NhdmVEb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBzYXZlRG9jdW1lbnQob0NvbnRleHQ6IFY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMgfHwge307XG5cdFx0Y29uc3QgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBtUGFyYW1ldGVycy5iRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciB8fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYkRyYWZ0TmF2aWdhdGlvbiA9IHRydWU7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IHRoaXMuX2dldFJlc291cmNlQnVuZGxlKCk7XG5cdFx0Y29uc3QgYUJpbmRpbmdzID0gbVBhcmFtZXRlcnMuYmluZGluZ3M7XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5fc3luY1Rhc2soKTtcblx0XHRcdGF3YWl0IHRoaXMuX3N1Ym1pdE9wZW5DaGFuZ2VzKG9Db250ZXh0KTtcblx0XHRcdGF3YWl0IHRoaXMuX2NoZWNrRm9yVmFsaWRhdGlvbkVycm9ycygpO1xuXHRcdFx0YXdhaXQgdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlU2F2ZSh7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXG5cdFx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuX2dldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX2dldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRcdGxldCBzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5IHx8IG9Db250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpKSAmJlxuXHRcdFx0XHRvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gTm8gbmVlZCB0byB0cnkgdG8gZ2V0IHJpZ2h0bW9zdCBjb250ZXh0IGluIGNhc2Ugb2YgYSBuZXcgb2JqZWN0XG5cdFx0XHRcdHNpYmxpbmdJbmZvID0gYXdhaXQgdGhpcy5fY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRvUm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKSxcblx0XHRcdFx0XHRzUHJvZ3JhbW1pbmdNb2RlbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFjdGl2ZURvY3VtZW50Q29udGV4dCA9IGF3YWl0IHRyYW5zYWN0aW9uSGVscGVyLnNhdmVEb2N1bWVudChcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdGFCaW5kaW5ncyxcblx0XHRcdFx0dGhpcy5fZ2V0TWVzc2FnZUhhbmRsZXIoKSxcblx0XHRcdFx0bVBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLl9yZW1vdmVTdGlja3lTZXNzaW9uSW50ZXJuYWxQcm9wZXJ0aWVzKHNQcm9ncmFtbWluZ01vZGVsKTtcblxuXHRcdFx0dGhpcy5fc2VuZEFjdGl2aXR5KEFjdGl2aXR5LkFjdGl2YXRlLCBhY3RpdmVEb2N1bWVudENvbnRleHQpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlckNvbmZpZ3VyZWRTdXJ2ZXkoU3RhbmRhcmRBY3Rpb25zLnNhdmUsIFRyaWdnZXJUeXBlLnN0YW5kYXJkQWN0aW9uKTtcblxuXHRcdFx0dGhpcy5fc2V0RWRpdE1vZGUoRWRpdE1vZGUuRGlzcGxheSwgZmFsc2UpO1xuXHRcdFx0dGhpcy5fZ2V0TWVzc2FnZUhhbmRsZXIoKS5zaG93TWVzc2FnZURpYWxvZygpO1xuXG5cdFx0XHRpZiAoYWN0aXZlRG9jdW1lbnRDb250ZXh0ICE9PSBvQ29udGV4dCkge1xuXHRcdFx0XHRsZXQgY29udGV4dFRvTmF2aWdhdGUgPSBhY3RpdmVEb2N1bWVudENvbnRleHQ7XG5cdFx0XHRcdGlmIChvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0c2libGluZ0luZm8gPSBzaWJsaW5nSW5mbyA/PyB0aGlzLl9jcmVhdGVTaWJsaW5nSW5mbyhvQ29udGV4dCwgYWN0aXZlRG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVQYXRoc0luSGlzdG9yeShzaWJsaW5nSW5mby5wYXRoTWFwcGluZyk7XG5cdFx0XHRcdFx0aWYgKHNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQuZ2V0UGF0aCgpICE9PSBhY3RpdmVEb2N1bWVudENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0VG9OYXZpZ2F0ZSA9IHNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlTmV3Q29udGV4dChjb250ZXh0VG9OYXZpZ2F0ZSwgZmFsc2UsIGZhbHNlLCBiRHJhZnROYXZpZ2F0aW9uLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0aWYgKCEob0Vycm9yICYmIG9FcnJvci5jYW5jZWxlZCkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2F2aW5nIHRoZSBkb2N1bWVudFwiLCBvRXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG9FcnJvcik7XG5cdFx0fVxuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyB0b2dnbGVEcmFmdEFjdGl2ZShvQ29udGV4dDogVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IGJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRjb25zdCBiSXNEcmFmdCA9IG9Db250ZXh0ICYmIHRoaXMuX2dldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0O1xuXG5cdFx0Ly90b2dnbGUgYmV0d2VlbiBkcmFmdCBhbmQgYWN0aXZlIGRvY3VtZW50IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlZGl0IGRyYWZ0cyBhbmQgYWN0aXZlIGRvY3VtZW50cyB3aXRoIGRyYWZ0KVxuXHRcdGlmIChcblx0XHRcdCFiSXNEcmFmdCB8fFxuXHRcdFx0IShcblx0XHRcdFx0KCFvQ29udGV4dERhdGEuSXNBY3RpdmVFbnRpdHkgJiYgb0NvbnRleHREYXRhLkhhc0FjdGl2ZUVudGl0eSkgfHxcblx0XHRcdFx0KG9Db250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSAmJiBvQ29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkpXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFvQ29udGV4dERhdGEuSXNBY3RpdmVFbnRpdHkgJiYgb0NvbnRleHREYXRhLkhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0Ly9zdGFydCBQb2ludDogZWRpdCBkcmFmdFxuXHRcdFx0YkVkaXRhYmxlID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHN0YXJ0IHBvaW50IGFjdGl2ZSBkb2N1bWVudFxuXHRcdFx0YkVkaXRhYmxlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX2dldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRcdGNvbnN0IG9SaWdodG1vc3RDb250ZXh0ID0gb1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSA/IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpIDogb0NvbnRleHQ7XG5cdFx0XHRsZXQgc2libGluZ0luZm8gPSBhd2FpdCB0aGlzLl9jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKG9Db250ZXh0LCBvUmlnaHRtb3N0Q29udGV4dCwgUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCwgZmFsc2UpO1xuXHRcdFx0aWYgKCFzaWJsaW5nSW5mbyAmJiBvQ29udGV4dCAhPT0gb1JpZ2h0bW9zdENvbnRleHQpIHtcblx0XHRcdFx0Ly8gVHJ5IHRvIGNvbXB1dGUgc2libGluZyBpbmZvIGZvciB0aGUgcm9vdCBjb250ZXh0IGlmIGl0IGZhaWxzIGZvciB0aGUgcmlnaHRtb3N0IGNvbnRleHRcblx0XHRcdFx0Ly8gLS0+IEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSB0cnkgdG8gc3dpdGNoIGJldHdlZW4gZHJhZnQgYW5kIGFjdGl2ZSBidXQgYSBjaGlsZCBlbnRpdHkgaGFzIG5vIHNpYmxpbmcsIHRoZSBzd2l0Y2ggd2lsbCBjbG9zZSB0aGUgY2hpbGQgY29sdW1uXG5cdFx0XHRcdHNpYmxpbmdJbmZvID0gYXdhaXQgdGhpcy5fY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihvQ29udGV4dCwgb0NvbnRleHQsIFByb2dyYW1taW5nTW9kZWwuRHJhZnQsIGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdGlmIChzaWJsaW5nSW5mbykge1xuXHRcdFx0XHR0aGlzLl9zZXRFZGl0TW9kZShiRWRpdGFibGUgPyBFZGl0TW9kZS5FZGl0YWJsZSA6IEVkaXRNb2RlLkRpc3BsYXksIGZhbHNlKTsgLy9zd2l0Y2ggdG8gZWRpdCBtb2RlIG9ubHkgaWYgYSBkcmFmdCBpcyBhdmFpbGFibGVcblxuXHRcdFx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGxhc3RTZW1hbnRpY01hcHBpbmcgPSB0aGlzLl9nZXRTZW1hbnRpY01hcHBpbmcoKTtcblx0XHRcdFx0XHRpZiAobGFzdFNlbWFudGljTWFwcGluZz8udGVjaG5pY2FsUGF0aCA9PT0gb0NvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gc2libGluZ0luZm8ucGF0aE1hcHBpbmdbc2libGluZ0luZm8ucGF0aE1hcHBpbmcubGVuZ3RoIC0gMV0ubmV3UGF0aDtcblx0XHRcdFx0XHRcdHNpYmxpbmdJbmZvLnBhdGhNYXBwaW5nLnB1c2goeyBvbGRQYXRoOiBsYXN0U2VtYW50aWNNYXBwaW5nLnNlbWFudGljUGF0aCwgbmV3UGF0aDogdGFyZ2V0UGF0aCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUGF0aHNJbkhpc3Rvcnkoc2libGluZ0luZm8ucGF0aE1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlTmV3Q29udGV4dChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0LCBiRWRpdGFibGUsIHRydWUsIHRydWUsIHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiRXJyb3IgaW4gRWRpdEZsb3cudG9nZ2xlRHJhZnRBY3RpdmUgLSBDYW5ub3QgZmluZCBzaWJsaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGBFcnJvciBpbiBFZGl0Rmxvdy50b2dnbGVEcmFmdEFjdGl2ZToke29FcnJvcn1gIGFzIGFueSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSW50ZXJuYWwgb25seSBwYXJhbXMgLS0tXG5cdC8vIEBwYXJhbSB7c2FwLm0uQnV0dG9ufSBtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24gLSBDdXJyZW50bHkgdGhpcyBpcyBwYXNzZWQgYXMgY2FuY2VsQnV0dG9uIGludGVybmFsbHkgKHJlcGxhY2VkIGJ5IG1QYXJhbWV0ZXJzLmNvbnRyb2wgaW4gdGhlIEpTRG9jIGJlbG93KS4gQ3VycmVudGx5IGl0IGlzIGFsc28gbWFuZGF0b3J5LlxuXHQvLyBQbGFuIC0gVGhpcyBzaG91bGQgbm90IGJlIG1hbmRhdG9yeS4gSWYgbm90IHByb3ZpZGVkLCB3ZSBzaG91bGQgaGF2ZSBhIGRlZmF1bHQgdGhhdCBjYW4gYWN0IGFzIHJlZmVyZW5jZSBjb250cm9sIGZvciB0aGUgZGlzY2FyZCBwb3BvdmVyIE9SIHdlIGNhbiBzaG93IGEgZGlhbG9nIGluc3RlYWQgb2YgYSBwb3BvdmVyLlxuXG5cdC8qKlxuXHQgKiBEaXNjYXJkIHRoZSBlZGl0YWJsZSBkb2N1bWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCAgQ29udGV4dCBvZiB0aGUgZWRpdGFibGUgZG9jdW1lbnRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIENhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRyb2wgVGhpcyBpcyB0aGUgY29udHJvbCB1c2VkIHRvIG9wZW4gdGhlIGRpc2NhcmQgcG9wb3ZlclxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuc2tpcERpc2NhcmRQb3BvdmVyIE9wdGlvbmFsLCBzdXByZXNzZXMgdGhlIGRpc2NhcmQgcG9wb3ZlciBhbmQgYWxsb3dzIGN1c3RvbSBoYW5kbGluZ1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIG9uY2UgZWRpdGFibGUgZG9jdW1lbnQgaGFzIGJlZW4gZGlzY2FyZGVkXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0RmxvdyNjYW5jZWxEb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBjYW5jZWxEb2N1bWVudChvQ29udGV4dDogVjRDb250ZXh0LCBtUGFyYW1ldGVyczogeyBjb250cm9sOiBvYmplY3Q7IHNraXBEaXNjYXJkUG9wb3Zlcj86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IHRoaXMuX2dldFJlc291cmNlQnVuZGxlKCk7XG5cdFx0Y29uc3QgbUluUGFyYW1ldGVyczogYW55ID0gbVBhcmFtZXRlcnM7XG5cdFx0bGV0IHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ7XG5cblx0XHRtSW5QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IG1QYXJhbWV0ZXJzLmNvbnRyb2wgfHwgbUluUGFyYW1ldGVycy5jYW5jZWxCdXR0b247XG5cdFx0bUluUGFyYW1ldGVycy5iZWZvcmVDYW5jZWxDYWxsQmFjayA9IHRoaXMuYmFzZS5lZGl0Rmxvdy5vbkJlZm9yZURpc2NhcmQ7XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5fc3luY1Rhc2soKTtcblx0XHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5fZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cdFx0XHRpZiAoKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSB8fCBvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSkgJiYgdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX2dldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblxuXHRcdFx0XHQvLyBObyBuZWVkIHRvIHRyeSB0byBnZXQgcmlnaHRtb3N0IGNvbnRleHQgaW4gY2FzZSBvZiBhIG5ldyBvYmplY3Rcblx0XHRcdFx0c2libGluZ0luZm8gPSBhd2FpdCB0aGlzLl9jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHRcdG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpLFxuXHRcdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY2FuY2VsUmVzdWx0ID0gYXdhaXQgdHJhbnNhY3Rpb25IZWxwZXIuY2FuY2VsRG9jdW1lbnQoXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHRtSW5QYXJhbWV0ZXJzLFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKClcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBiRHJhZnROYXZpZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuX3JlbW92ZVN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMoc1Byb2dyYW1taW5nTW9kZWwpO1xuXG5cdFx0XHR0aGlzLl9zZXRFZGl0TW9kZShFZGl0TW9kZS5EaXNwbGF5LCBmYWxzZSk7XG5cdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cdFx0XHQvLyB3ZSBmb3JjZSB0aGUgZWRpdCBzdGF0ZSBldmVuIGZvciBGQ0wgYmVjYXVzZSB0aGUgZHJhZnQgZGlzY2FyZCBtaWdodCBub3QgYmUgaW1wbGVtZW50ZWRcblx0XHRcdC8vIGFuZCB3ZSBtYXkganVzdCBkZWxldGUgdGhlIGRyYWZ0XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblxuXHRcdFx0aWYgKCFjYW5jZWxSZXN1bHQpIHtcblx0XHRcdFx0dGhpcy5fc2VuZEFjdGl2aXR5KEFjdGl2aXR5LkRpc2NhcmQsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdC8vaW4gY2FzZSBvZiBhIG5ldyBkb2N1bWVudCwgbm8gYWN0aXZlQ29udGV4dCBpcyByZXR1cm5lZCAtLT4gbmF2aWdhdGUgYmFjay5cblx0XHRcdFx0aWYgKCFtSW5QYXJhbWV0ZXJzLnNraXBCYWNrTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb0FjdGl2ZURvY3VtZW50Q29udGV4dCA9IGNhbmNlbFJlc3VsdCBhcyBWNENvbnRleHQ7XG5cdFx0XHRcdHRoaXMuX3NlbmRBY3Rpdml0eShBY3Rpdml0eS5EaXNjYXJkLCBvQWN0aXZlRG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0bGV0IGNvbnRleHRUb05hdmlnYXRlID0gb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcblx0XHRcdFx0aWYgKHRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0c2libGluZ0luZm8gPSBzaWJsaW5nSW5mbyA/PyB0aGlzLl9jcmVhdGVTaWJsaW5nSW5mbyhvQ29udGV4dCwgb0FjdGl2ZURvY3VtZW50Q29udGV4dCk7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUGF0aHNJbkhpc3Rvcnkoc2libGluZ0luZm8ucGF0aE1hcHBpbmcpO1xuXHRcdFx0XHRcdGlmIChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0LmdldFBhdGgoKSAhPT0gb0FjdGl2ZURvY3VtZW50Q29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0XHRcdGNvbnRleHRUb05hdmlnYXRlID0gc2libGluZ0luZm8udGFyZ2V0Q29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHNlbWFudGljIGtleXMgb2YgdGhlIGFjdGl2ZSBjb250ZXh0LCBhcyB3ZSBuZWVkIHRoZW1cblx0XHRcdFx0XHQvLyBmb3IgdGhlIG5hdmlnYXRpb25cblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9mZXRjaFNlbWFudGljS2V5VmFsdWVzKG9BY3RpdmVEb2N1bWVudENvbnRleHQpO1xuXHRcdFx0XHRcdC8vIFdlIGZvcmNlIHRoZSByZWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0LCBzbyB0aGF0IGl0J3MgY3JlYXRlZCBhbmQgYm91bmQgaW4gdGhlIHNhbWUgbWljcm90YXNrLFxuXHRcdFx0XHRcdC8vIHNvIHRoYXQgYWxsIHByb3BlcnRpZXMgYXJlIGxvYWRlZCB0b2dldGhlciBieSBhdXRvRXhwYW5kU2VsZWN0LCBzbyB0aGF0IHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gRWRpdCBtb2RlXG5cdFx0XHRcdFx0Ly8gJCRpbmhlcml0RXhwYW5kU2VsZWN0IHRha2VzIGFsbCBsb2FkZWQgcHJvcGVydGllcyBpbnRvIGFjY291bnQgKEJDUCAyMDcwNDYyMjY1KVxuXHRcdFx0XHRcdGlmICghbUluUGFyYW1ldGVycy5za2lwQmluZGluZ1RvVmlldykge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlTmV3Q29udGV4dChjb250ZXh0VG9OYXZpZ2F0ZSwgZmFsc2UsIHRydWUsIGJEcmFmdE5hdmlnYXRpb24sIHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9hY3RpdmUgY29udGV4dCBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIGNhbmNlbCBvZiBleGlzdGluZyBkb2N1bWVudFxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX2hhbmRsZU5ld0NvbnRleHQoY29udGV4dFRvTmF2aWdhdGUsIGZhbHNlLCBmYWxzZSwgYkRyYWZ0TmF2aWdhdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRpc2NhcmRpbmcgdGhlIGRvY3VtZW50XCIsIG9FcnJvciBhcyBhbnkpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEludGVybmFsIG9ubHkgcGFyYW1zIC0tLVxuXHQvLyBAcGFyYW0ge3N0cmluZ30gbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHlTZXQgdG8gd2hpY2ggdGhlIG9iamVjdCBiZWxvbmdzXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGNvbnRleHQgY29ycmVzcG9uZHMgdG8gYSBkcmFmdCByb290LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb250ZXh0IHBvaW50cyB0byBhIGRyYWZ0IHJvb3Rcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByb3RlY3RlZCBpc0RyYWZ0Um9vdChjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRyZXR1cm4gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KS50YXJnZXRFbnRpdHlTZXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIG9Db250ZXh0ICBDb250ZXh0IG9mIHRoZSBkb2N1bWVudFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycyBDYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnRpdGxlIFRpdGxlIG9mIHRoZSBvYmplY3QgYmVpbmcgZGVsZXRlZFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5kZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0IGJlaW5nIGRlbGV0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIGRvY3VtZW50IGhhcyBiZWVuIGRlbGV0ZWRcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I2RlbGV0ZURvY3VtZW50XG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGRlbGV0ZURvY3VtZW50KG9Db250ZXh0OiBDb250ZXh0LCBtSW5QYXJhbWV0ZXJzOiB7IHRpdGxlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGxldCBtUGFyYW1ldGVyczogYW55ID0gbUluUGFyYW1ldGVycztcblx0XHRpZiAoIW1QYXJhbWV0ZXJzKSB7XG5cdFx0XHRtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkZpbmRBY3RpdmVDb250ZXh0czogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmJGaW5kQWN0aXZlQ29udGV4dHMgPSBmYWxzZTtcblx0XHR9XG5cdFx0bVBhcmFtZXRlcnMuYmVmb3JlRGVsZXRlQ2FsbEJhY2sgPSB0aGlzLmJhc2UuZWRpdEZsb3cub25CZWZvcmVEZWxldGU7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLl9pc0ZjbEVuYWJsZWQoKSAmJlxuXHRcdFx0XHR0aGlzLmlzRHJhZnRSb290KG9Db250ZXh0KSAmJlxuXHRcdFx0XHRvQ29udGV4dC5nZXRJbmRleCgpID09PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gRGVsZXRpbmcgYW4gYWN0aXZlIGVudGl0eSB3aGljaCBoYXMgYSBkcmFmdCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGRpc3BsYXllZCBpbiB0aGUgTGlzdFJlcG9ydCAoRkNMIGNhc2UpXG5cdFx0XHRcdC8vIC0tPiBuZWVkIHRvIHJlbW92ZSB0aGUgZHJhZnQgZnJvbSB0aGUgTFIgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgYWN0aXZlIHZlcnNpb24sIHNvIHRoYXQgdGhlIExpc3RCaW5kaW5nIGlzIHByb3Blcmx5IHJlZnJlc2hlZFxuXHRcdFx0XHQvLyBUaGUgY29uZGl0aW9uICdvQ29udGV4dC5nZXRJbmRleCgpID09PSB1bmRlZmluZWQnIG1ha2VzIHN1cmUgdGhlIGFjdGl2ZSB2ZXJzaW9uIGlzbid0IGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSBMUlxuXHRcdFx0XHRtUGFyYW1ldGVycy5iZWZvcmVEZWxldGVDYWxsQmFjayA9IGFzeW5jIChwYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9KSA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlRGVsZXRlKHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWJsaW5nQ29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vU2libGluZ0VudGl0eWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZHJhZnRQYXRoID0gYXdhaXQgc2libGluZ0NvbnRleHQucmVxdWVzdENhbm9uaWNhbFBhdGgoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGRyYWZ0Q29udGV4dFRvUmVtb3ZlID0gbW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChkcmFmdFBhdGgpO1xuXHRcdFx0XHRcdFx0ZHJhZnRDb250ZXh0VG9SZW1vdmU/LnJlcGxhY2VXaXRoKG9Db250ZXh0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVwbGFjaW5nIHRoZSBkcmFmdCBpbnN0YW5jZSBpbiB0aGUgTFIgT0RMQlwiLCBlcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5fZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbihvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXG5cdFx0XHQvLyBTaW5nbGUgb2JqZXQgZGVsZXRpb24gaXMgdHJpZ2dlcmVkIGZyb20gYW4gT1AgaGVhZGVyIGJ1dHRvbiAobm90IGZyb20gYSBsaXN0KVxuXHRcdFx0Ly8gLS0+IE1hcmsgVUkgZGlydHkgYW5kIG5hdmlnYXRlIGJhY2sgdG8gZGlzbWlzcyB0aGUgT1Bcblx0XHRcdGlmICghdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zZW5kQWN0aXZpdHkoQWN0aXZpdHkuRGVsZXRlLCBvQ29udGV4dCk7XG5cblx0XHRcdC8vIEFmdGVyIGRlbGV0ZSBpcyBzdWNjZXNzZnVsbCwgd2UgbmVlZCB0byBkZXRhY2ggdGhlIHNldEJhY2tOYXZpZ2F0aW9uIE1ldGhvZHNcblx0XHRcdGlmIChvQXBwQ29tcG9uZW50KSB7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQXBwQ29tcG9uZW50Py5nZXRTdGFydHVwTW9kZSgpID09PSBTdGFydHVwTW9kZS5EZWVwbGluayAmJiAhdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgYXBwIGhhcyBiZWVuIGxhdW5jaGVkIHdpdGggc2VtYW50aWMga2V5cywgZGVsZXRpbmcgdGhlIG9iamVjdCB3ZSd2ZSBsYW5kZWQgb24gc2hhbGwgbmF2aWdhdGUgYmFja1xuXHRcdFx0XHQvLyB0byB0aGUgYXBwIHdlIGNhbWUgZnJvbSAoZXhjZXB0IGZvciBGQ0wsIHdoZXJlIHdlIG5hdmlnYXRlIHRvIExSIGFzIHVzdWFsKVxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuZXhpdEZyb21BcHAoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIGFueSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdCB0aGUgY3VycmVudCBzZXQgb2YgY2hhbmdlcyBhbmQgbmF2aWdhdGUgYmFjay5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCAgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBzYXZlZFxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjYXBwbHlEb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseURvY3VtZW50KG9Db250ZXh0OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvTG9ja09iamVjdCA9IHRoaXMuX2dldEdsb2JhbFVJTW9kZWwoKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3N5bmNUYXNrKCk7XG5cdFx0XHRhd2FpdCB0aGlzLl9zdWJtaXRPcGVuQ2hhbmdlcyhvQ29udGV4dCk7XG5cdFx0XHRhd2FpdCB0aGlzLl9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMoKTtcblx0XHRcdGF3YWl0IHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdGF3YWl0IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0xvY2tPYmplY3QpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJbnRlcm5hbCBvbmx5IHBhcmFtcyAtLS1cblx0Ly8gQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlN0YXRpY0FjdGlvbl0gQm9vbGVhbiB2YWx1ZSBmb3Igc3RhdGljIGFjdGlvbiwgdW5kZWZpbmVkIGZvciBvdGhlciBhY3Rpb25zXG5cdC8vIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmlzTmF2aWdhYmxlXSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBuYXZpZ2F0aW9uIGlzIHJlcXVpcmVkIGFmdGVyIHRoZSBhY3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWRcblx0Ly8gQ3VycmVudGx5IHRoZSBwYXJhbWV0ZXIgaXNOYXZpZ2FibGUgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG91bGQgYmUgY2hhbmdlZCB0byByZXF1aXJlc05hdmlnYXRpb24gYXMgaXQgaXMgYSBtb3JlIGFwdCBuYW1lIGZvciB0aGlzIHBhcmFtXG5cblx0LyoqXG5cdCAqIEludm9rZXMgYW4gYWN0aW9uIChib3VuZCBvciB1bmJvdW5kKSBhbmQgdHJhY2tzIHRoZSBjaGFuZ2VzIHNvIHRoYXQgb3RoZXIgcGFnZXMgY2FuIGJlIHJlZnJlc2hlZCBhbmQgc2hvdyB0aGUgdXBkYXRlZCBkYXRhIHVwb24gbmF2aWdhdGlvbi5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcyBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzLm5hbWUgTmFtZSBvZiB0aGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcy52YWx1ZSBWYWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2cgU2tpcHMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBvZiB0aGVtIGluIHBhcmFtZXRlclZhbHVlc1xuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5jb250ZXh0cyBGb3IgYSBib3VuZCBhY3Rpb24sIGEgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIHRvIGJlIGNhbGxlZCBtdXN0IGJlIHByb3ZpZGVkXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLm1vZGVsIEZvciBhbiB1bmJvdW5kIGFjdGlvbiwgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWwgbXVzdCBiZSBwcm92aWRlZFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5yZXF1aXJlc05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgbmF2aWdhdGlvbiBpcyByZXF1aXJlZCBhZnRlciB0aGUgYWN0aW9uIGhhcyBiZWVuIGV4ZWN1dGVkLiBOYXZpZ2F0aW9uIHRha2VzIHBsYWNlIHRvIHRoZSBjb250ZXh0IHJldHVybmVkIGJ5IHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMubGFiZWwgQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvbi4gVGhpcyBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgYWN0aW9uIGhhcyBhIHBhcmFtZXRlciBhbmQgYSBwYXJhbWV0ZXIgZGlhbG9nIGlzIHNob3duIHRvIHRoZSB1c2VyLiBUaGUgbGFiZWwgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZyBhbmQgZm9yIHRoZSBjb25maXJtYXRpb24gYnV0dG9uXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6ICdDaGFuZ2VTZXQnIHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgJ0lzb2xhdGVkJyB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHNcblx0ICogQHBhcmFtIG1FeHRyYVBhcmFtcyBQUklWQVRFXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBvbmNlIHRoZSBhY3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQsIHByb3ZpZGluZyB0aGUgcmVzcG9uc2Vcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I2ludm9rZUFjdGlvblxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgaW52b2tlQWN0aW9uKFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0bUluUGFyYW1ldGVycz86IHtcblx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH07XG5cdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdGNvbnRleHRzPzogQ29udGV4dCB8IENvbnRleHRbXTtcblx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdHJlcXVpcmVzTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHR9LFxuXHRcdG1FeHRyYVBhcmFtcz86IGFueVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgb0NvbnRyb2w6IGFueTtcblx0XHRjb25zdCB0cmFuc2FjdGlvbkhlbHBlciA9IHRoaXMuX2dldFRyYW5zYWN0aW9uSGVscGVyKCk7XG5cdFx0bGV0IGFQYXJ0cztcblx0XHRsZXQgc092ZXJsb2FkRW50aXR5VHlwZTtcblx0XHRsZXQgb0N1cnJlbnRBY3Rpb25DYWxsQmFja3M6IGFueTtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXG5cdFx0bGV0IG1QYXJhbWV0ZXJzOiBhbnkgPSBtSW5QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0Ly8gRHVlIHRvIGEgbWlzdGFrZSB0aGUgaW52b2tlQWN0aW9uIGluIHRoZSBleHRlbnNpb25BUEkgaGFkIGEgZGlmZmVyZW50IEFQSSB0aGFuIHRoaXMgb25lLlxuXHRcdC8vIFRoZSBvbmUgZnJvbSB0aGUgZXh0ZW5zaW9uQVBJIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSBhcyB3ZSBleHBvc2UgdGhlIGZ1bGwgZWRpdCBmbG93IG5vdyBidXRcblx0XHQvLyBkdWUgdG8gY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIHN0aWxsIG5lZWQgdG8gc3VwcG9ydCB0aGUgb2xkIHNpZ25hdHVyZVxuXHRcdGlmIChcblx0XHRcdChtUGFyYW1ldGVycy5pc0EgJiYgbVBhcmFtZXRlcnMuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHx8XG5cdFx0XHRBcnJheS5pc0FycmF5KG1QYXJhbWV0ZXJzKSB8fFxuXHRcdFx0bUV4dHJhUGFyYW1zICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRzID0gbVBhcmFtZXRlcnM7XG5cdFx0XHRtUGFyYW1ldGVycyA9IG1FeHRyYVBhcmFtcyB8fCB7fTtcblx0XHRcdGlmIChjb250ZXh0cykge1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jb250ZXh0cyA9IGNvbnRleHRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMubW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1QYXJhbWV0ZXJzLmlzTmF2aWdhYmxlID0gbVBhcmFtZXRlcnMucmVxdWlyZXNOYXZpZ2F0aW9uIHx8IG1QYXJhbWV0ZXJzLmlzTmF2aWdhYmxlO1xuXG5cdFx0aWYgKCFtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkge1xuXHRcdFx0b0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCk7XG5cdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVE9ETzogY3VycmVudGx5IHRoaXMgc2VsZWN0ZWQgY29udGV4dHMgdXBkYXRlIGlzIGRvbmUgd2l0aGluIHRoZSBvcGVyYXRpb24sIHNob3VsZCBiZSBtb3ZlZCBvdXRcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgPSBvQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0fVxuXG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluZGV4T2YoXCIoXCIpID4gLTEpIHtcblx0XHRcdC8vIGdldCBlbnRpdHkgdHlwZSBvZiBhY3Rpb24gb3ZlcmxvYWQgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBhY3Rpb24gcGF0aFxuXHRcdFx0Ly8gRXhhbXBsZSBzQWN0aW9uTmFtZSA9IFwiPEFjdGlvbk5hbWU+KENvbGxlY3Rpb24oPE92ZXJsb2FkRW50aXR5VHlwZT4pKVwiXG5cdFx0XHQvLyBzQWN0aW9uTmFtZSA9IGFQYXJ0c1swXSAtLT4gPEFjdGlvbk5hbWU+XG5cdFx0XHQvLyBzT3ZlcmxvYWRFbnRpdHlUeXBlID0gYVBhcnRzWzJdIC0tPiA8T3ZlcmxvYWRFbnRpdHlUeXBlPlxuXHRcdFx0YVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0c0FjdGlvbk5hbWUgPSBhUGFydHNbMF07XG5cdFx0XHRzT3ZlcmxvYWRFbnRpdHlUeXBlID0gKGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0gYXMgYW55KS5yZXBsYWNlQWxsKFwiKVwiLCBcIlwiKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnMuYlN0YXRpY0FjdGlvbikge1xuXHRcdFx0aWYgKG9Db250cm9sLmlzVGFibGVCb3VuZCgpKSB7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRleHRzID0gb0NvbnRyb2wuZ2V0Um93QmluZGluZygpLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IG9Db250cm9sLmRhdGEoXCJyb3dzQmluZGluZ0luZm9cIikucGF0aCxcblx0XHRcdFx0XHRvTGlzdEJpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KSh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLCBzQmluZGluZ1BhdGgpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzT3ZlcmxvYWRFbnRpdHlUeXBlICYmIG9Db250cm9sLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udGV4dHMgPSB0aGlzLl9nZXRBY3Rpb25PdmVybG9hZENvbnRleHRGcm9tTWV0YWRhdGFQYXRoKFxuXHRcdFx0XHRcdG9Db250cm9sLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdFx0b0NvbnRyb2wuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdHNPdmVybG9hZEVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmVuYWJsZUF1dG9TY3JvbGwpIHtcblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25DYWxsQmFja3MgPSB0aGlzLl9jcmVhdGVBY3Rpb25Qcm9taXNlKHNBY3Rpb25OYW1lLCBvQ29udHJvbC5zSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0ID0gdGhpcy5fZ2V0Qm91bmRDb250ZXh0KG9WaWV3LCBtUGFyYW1ldGVycyk7XG5cdFx0Ly8gTmVlZCB0byBrbm93IHRoYXQgdGhlIGFjdGlvbiBpcyBjYWxsZWQgZnJvbSBPYmplY3RQYWdlIGZvciBjaGFuZ2VTZXQgSXNvbGF0ZWQgd29ya2Fyb3VuZFxuXHRcdG1QYXJhbWV0ZXJzLmJPYmplY3RQYWdlID0gKG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgYW55KS5jb252ZXJ0ZXJUeXBlID09PSBcIk9iamVjdFBhZ2VcIjtcblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9zeW5jVGFzaygpO1xuXHRcdFx0Y29uc3Qgb1Jlc3BvbnNlID0gYXdhaXQgdHJhbnNhY3Rpb25IZWxwZXIuY2FsbEFjdGlvbi5iaW5kKFxuXHRcdFx0XHR0cmFuc2FjdGlvbkhlbHBlcixcblx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHR0aGlzLmdldFZpZXcoKSxcblx0XHRcdFx0dGhpcy5fZ2V0TWVzc2FnZUhhbmRsZXIoKVxuXHRcdFx0KSgpO1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRleHRzKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX3JlZnJlc2hMaXN0SWZSZXF1aXJlZCh0aGlzLl9nZXRBY3Rpb25SZXNwb25zZURhdGFBbmRLZXlzKHNBY3Rpb25OYW1lLCBvUmVzcG9uc2UpLCBtUGFyYW1ldGVycy5jb250ZXh0c1swXSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zZW5kQWN0aXZpdHkoQWN0aXZpdHkuQWN0aW9uLCBtUGFyYW1ldGVycy5jb250ZXh0cyk7XG5cdFx0XHR0aGlzLl90cmlnZ2VyQ29uZmlndXJlZFN1cnZleShzQWN0aW9uTmFtZSwgVHJpZ2dlclR5cGUuYWN0aW9uKTtcblxuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uQ2FsbEJhY2tzKSB7XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uQ2FsbEJhY2tzLmZSZXNvbHZlcihvUmVzcG9uc2UpO1xuXHRcdFx0fVxuXHRcdFx0Lypcblx0XHRcdFx0XHRXZSBzZXQgdGhlICh1cHBlcikgcGFnZXMgdG8gZGlydHkgYWZ0ZXIgYW4gZXhlY3V0aW9uIG9mIGFuIGFjdGlvblxuXHRcdFx0XHRcdFRPRE86IGdldCByaWQgb2YgdGhpcyB3b3JrYXJvdW5kXG5cdFx0XHRcdFx0VGhpcyB3b3JrYXJvdW5kIGlzIG9ubHkgbmVlZGVkIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGRvZXMgbm90IHN1cHBvcnQgdGhlIHN5bmNocm9uaXphdGlvbi5cblx0XHRcdFx0XHRPbmNlIHRoaXMgaXMgc3VwcG9ydGVkIHdlIGRvbid0IG5lZWQgdG8gc2V0IHRoZSBwYWdlcyB0byBkaXJ0eSBhbnltb3JlIGFzIHRoZSBjb250ZXh0IGl0c2VsZlxuXHRcdFx0XHRcdGlzIGFscmVhZHkgcmVmcmVzaGVkIChpdCdzIGp1c3Qgbm90IHJlZmxlY3RlZCBpbiB0aGUgb2JqZWN0IHBhZ2UpXG5cdFx0XHRcdFx0d2UgZXhwbGljaXRseSBkb24ndCBjYWxsIHRoaXMgbWV0aG9kIGZyb20gdGhlIGxpc3QgcmVwb3J0IGJ1dCBvbmx5IGNhbGwgaXQgZnJvbSB0aGUgb2JqZWN0IHBhZ2Vcblx0XHRcdFx0XHRhcyBpZiBpdCBpcyBjYWxsZWQgaW4gdGhlIGxpc3QgcmVwb3J0IGl0J3Mgbm90IG5lZWRlZCAtIGFzIHdlIGFueXdheSB3aWxsIHJlbW92ZSB0aGlzIGxvZ2ljXG5cdFx0XHRcdFx0d2UgY2FuIGxpdmUgd2l0aCB0aGlzXG5cdFx0XHRcdFx0d2UgbmVlZCBhIGNvbnRleHQgdG8gc2V0IHRoZSB1cHBlciBwYWdlcyB0byBkaXJ0eSAtIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHdlIHVzZSB0aGVcblx0XHRcdFx0XHRmaXJzdCBvbmUgYXMgdGhleSBhcmUgYW55d2F5IHNpYmxpbmdzXG5cdFx0XHRcdFx0Ki9cblx0XHRcdGlmIChtUGFyYW1ldGVycy5jb250ZXh0cykge1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fZ2V0SW50ZXJuYWxNb2RlbCgpLnNldFByb3BlcnR5KFwiL3NDdXN0b21BY3Rpb25cIiwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmlzTmF2aWdhYmxlKSB7XG5cdFx0XHRcdGxldCB2Q29udGV4dCA9IG9SZXNwb25zZTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodkNvbnRleHQpICYmIHZDb250ZXh0Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHZDb250ZXh0ID0gdkNvbnRleHRbMF0udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHZDb250ZXh0ICYmICFBcnJheS5pc0FycmF5KHZDb250ZXh0KSkge1xuXHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0XHRcdGNvbnN0IHNDb250ZXh0TWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHZDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0Y29uc3QgX2ZuVmFsaWRDb250ZXh0cyA9IChjb250ZXh0czogYW55LCBhcHBsaWNhYmxlQ29udGV4dHM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHRzLmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChhcHBsaWNhYmxlQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXBwbGljYWJsZUNvbnRleHRzLmluZGV4T2YoZWxlbWVudCkgPiAtMTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbkNvbnRleHQgPSBBcnJheS5pc0FycmF5KG1QYXJhbWV0ZXJzLmNvbnRleHRzKVxuXHRcdFx0XHRcdFx0PyBfZm5WYWxpZENvbnRleHRzKG1QYXJhbWV0ZXJzLmNvbnRleHRzLCBtUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dClbMF1cblx0XHRcdFx0XHRcdDogbVBhcmFtZXRlcnMuY29udGV4dHM7XG5cdFx0XHRcdFx0Y29uc3Qgc0FjdGlvbkNvbnRleHRNZXRhUGF0aCA9IG9BY3Rpb25Db250ZXh0ICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHRpZiAoc0NvbnRleHRNZXRhUGF0aCAhPSB1bmRlZmluZWQgJiYgc0NvbnRleHRNZXRhUGF0aCA9PT0gc0FjdGlvbkNvbnRleHRNZXRhUGF0aCkge1xuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKSAhPT0gdkNvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCh2Q29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRcdGNoZWNrTm9IYXNoQ2hhbmdlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdG5vSGlzdG9yeUVudHJ5OiBmYWxzZVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdExvZy5pbmZvKFwiTmF2aWdhdGlvbiB0byB0aGUgc2FtZSBjb250ZXh0IGlzIG5vdCBhbGxvd2VkXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9SZXNwb25zZTtcblx0XHR9IGNhdGNoIChlcnI6IGFueSkge1xuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uQ2FsbEJhY2tzKSB7XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uQ2FsbEJhY2tzLmZSZWplY3RvcigpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRklYTUU6IGluIG1vc3Qgc2l0dWF0aW9ucyB0aGVyZSBpcyBubyBoYW5kbGVyIGZvciB0aGUgcmVqZWN0ZWQgcHJvbWlzZXMgcmV0dXJuZWRxXG5cdFx0XHRpZiAoZXJyID09PSBDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKSB7XG5cdFx0XHRcdC8vIFRoaXMgbGVhZHMgdG8gY29uc29sZSBlcnJvci4gQWN0dWFsbHkgdGhlIGVycm9yIGlzIGFscmVhZHkgaGFuZGxlZCAoY3VycmVudGx5IGRpcmVjdGx5IGluIHByZXNzIGhhbmRsZXIgb2YgZW5kIGJ1dHRvbiBpbiBkaWFsb2cpLCBzbyBpdCBzaG91bGQgbm90IGJlIGZvcndhcmRlZFxuXHRcdFx0XHQvLyB1cCB0byBoZXJlLiBIb3dldmVyLCB3aGVuIGRpYWxvZyBoYW5kbGluZyBhbmQgYmFja2VuZCBleGVjdXRpb24gYXJlIHNlcGFyYXRlZCwgaW5mb3JtYXRpb24gd2hldGhlciBkaWFsb2cgd2FzIGNhbmNlbGxlZCwgb3IgYmFja2VuZCBleGVjdXRpb24gaGFzIGZhaWxlZCBuZWVkc1xuXHRcdFx0XHQvLyB0byBiZSB0cmFuc3BvcnRlZCB0byB0aGUgcGxhY2UgcmVzcG9uc2libGUgZm9yIGNvbm5lY3RpbmcgdGhlc2UgdHdvIHRoaW5ncy5cblx0XHRcdFx0Ly8gVE9ETzogcmVtb3ZlIHNwZWNpYWwgaGFuZGxpbmcgb25lIGRpYWxvZyBoYW5kbGluZyBhbmQgYmFja2VuZCBleGVjdXRpb24gYXJlIHNlcGFyYXRlZFxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJEaWFsb2cgY2FuY2VsbGVkXCIpO1xuXHRcdFx0fSBlbHNlIGlmICghKGVyciAmJiAoZXJyLmNhbmNlbGVkIHx8IChlcnIucmVqZWN0ZWRJdGVtcyAmJiBlcnIucmVqZWN0ZWRJdGVtc1swXS5jYW5jZWxlZCkpKSkge1xuXHRcdFx0XHQvLyBUT0RPOiBhbmFseXplLCB3aGV0aGVyIHRoaXMgaXMgb2YgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgYWJvdmVcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBFZGl0Rmxvdy5pbnZva2VBY3Rpb246JHtlcnJ9YCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBUT0RPOiBBbnkgdW5leHBlY3RlZCBlcnJvcnMgcHJvYmFibHkgc2hvdWxkIG5vdCBiZSBpZ25vcmVkIVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZWN1cmVkIGV4ZWN1dGlvbiBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb24uIEVuc3VyZXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCB3aGVuIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgZnVsZmlsbGVkLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIGZuRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkLiBTaG91bGQgcmV0dXJuIGEgcHJvbWlzZSB0aGF0IGlzIHNldHRsZWQgYWZ0ZXIgY29tcGxldGlvbiBvZiB0aGUgZXhlY3V0aW9uLiBJZiBub3RoaW5nIGlzIHJldHVybmVkLCBpbW1lZGlhdGUgY29tcGxldGlvbiBpcyBhc3N1bWVkLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgRGVmaW5pdGlvbnMgb2YgdGhlIHByZWNvbmRpdGlvbnMgdG8gYmUgY2hlY2tlZCBiZWZvcmUgZXhlY3V0aW9uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5idXN5IERlZmluZXMgdGhlIGJ1c3kgaW5kaWNhdG9yXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5idXN5LnNldCBUcmlnZ2VycyBhIGJ1c3kgaW5kaWNhdG9yIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuYnVzeS5jaGVjayBFeGVjdXRlcyBmdW5jdGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzbid0IGJ1c3kuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy51cGRhdGVzRG9jdW1lbnQgVGhpcyBvcGVyYXRpb24gdXBkYXRlcyB0aGUgY3VycmVudCBkb2N1bWVudCB3aXRob3V0IHVzaW5nIHRoZSBib3VuZCBtb2RlbCBhbmQgY29udGV4dC4gQXMgYSByZXN1bHQsIHRoZSBkcmFmdCBzdGF0dXMgaXMgdXBkYXRlZCBpZiBhIGRyYWZ0IGRvY3VtZW50IGV4aXN0cywgYW5kIHRoZSB1c2VyIGhhcyB0byBjb25maXJtIHRoZSBjYW5jZWxsYXRpb24gb2YgdGhlIGVkaXRpbmcgcHJvY2Vzcy5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVqZWN0ZWQgaWYgdGhlIGV4ZWN1dGlvbiBpcyBwcm9oaWJpdGVkIGFuZCByZXNvbHZlZCBieSB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgZm5GdW5jdGlvbi5cblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I3NlY3VyZWRFeGVjdXRpb25cblx0ICogQHB1YmxpY1xuXHQgKiBAZXhwZXJpbWVudGFsIEFzIG9mIHZlcnNpb24gMS45MC4wXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRzZWN1cmVkRXhlY3V0aW9uKFxuXHRcdGZuRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRcdG1QYXJhbWV0ZXJzPzoge1xuXHRcdFx0YnVzeT86IHtcblx0XHRcdFx0c2V0PzogYm9vbGVhbjtcblx0XHRcdFx0Y2hlY2s/OiBib29sZWFuO1xuXHRcdFx0fTtcblx0XHRcdHVwZGF0ZXNEb2N1bWVudD86IGJvb2xlYW47XG5cdFx0fVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiQnVzeVNldCA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmJ1c3kgJiYgbVBhcmFtZXRlcnMuYnVzeS5zZXQgIT09IHVuZGVmaW5lZCA/IG1QYXJhbWV0ZXJzLmJ1c3kuc2V0IDogdHJ1ZSxcblx0XHRcdGJCdXN5Q2hlY2sgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5idXN5ICYmIG1QYXJhbWV0ZXJzLmJ1c3kuY2hlY2sgIT09IHVuZGVmaW5lZCA/IG1QYXJhbWV0ZXJzLmJ1c3kuY2hlY2sgOiB0cnVlLFxuXHRcdFx0YlVwZGF0ZXNEb2N1bWVudCA9IChtUGFyYW1ldGVycyAmJiAobVBhcmFtZXRlcnMgYXMgYW55KS51cGRhdGVzRG9jdW1lbnQpIHx8IGZhbHNlLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLl9nZXRHbG9iYWxVSU1vZGVsKCksXG5cdFx0XHRvQ29udGV4dCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdGJJc0RyYWZ0ID0gb0NvbnRleHQgJiYgdGhpcy5fZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCkgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQ7XG5cblx0XHRpZiAoYkJ1c3lDaGVjayAmJiBCdXN5TG9ja2VyLmlzTG9ja2VkKG9Mb2NrT2JqZWN0KSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQXBwbGljYXRpb24gYWxyZWFkeSBidXN5IHRoZXJlZm9yZSBleGVjdXRpb24gcmVqZWN0ZWRcIik7XG5cdFx0fVxuXG5cdFx0Ly8gd2UgaGF2ZSB0byBzZXQgYnVzeSBhbmQgZHJhZnQgaW5kaWNhdG9yIGltbWVkaWF0ZWx5IGFsc28gdGhlIGZ1bmN0aW9uIG1pZ2h0IGJlIGV4ZWN1dGVkIGxhdGVyIGluIHF1ZXVlXG5cdFx0aWYgKGJCdXN5U2V0KSB7XG5cdFx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdH1cblx0XHRpZiAoYlVwZGF0ZXNEb2N1bWVudCAmJiBiSXNEcmFmdCkge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2aW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3N5bmNUYXNrKGZuRnVuY3Rpb24pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChiVXBkYXRlc0RvY3VtZW50KSB7XG5cdFx0XHRcdFx0dGhpcy5fZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKS5oYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMoKTtcblx0XHRcdFx0XHRpZiAoIXRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGJJc0RyYWZ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZlZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChvRXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoYlVwZGF0ZXNEb2N1bWVudCAmJiBiSXNEcmFmdCkge1xuXHRcdFx0XHRcdHRoaXMuX3NldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qob0Vycm9yKTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdGlmIChiQnVzeVNldCkge1xuXHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBwYXRjaFNlbnQgZXZlbnQ6IHJlZ2lzdGVyIGRvY3VtZW50IG1vZGlmaWNhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGhhbmRsZVBhdGNoU2VudChvRXZlbnQ6IGFueSkge1xuXHRcdGlmICghKHRoaXMuYmFzZS5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5nZXRQcm9wZXJ0eShcInNraXBQYXRjaEhhbmRsZXJzXCIpKSB7XG5cdFx0XHQvLyBDcmVhdGUgYSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBvciByZWplY3RlZCB3aGVuIHRoZSBwYXRoIGlzIGNvbXBsZXRlZFxuXHRcdFx0Y29uc3Qgb1BhdGNoUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0b0V2ZW50LmdldFNvdXJjZSgpLmF0dGFjaEV2ZW50T25jZShcInBhdGNoQ29tcGxldGVkXCIsIChwYXRjaENvbXBsZXRlZEV2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAob0V2ZW50LmdldFNvdXJjZSgpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoKFxuXHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHRcdFx0XHRvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuYmFzZS5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJTdWNjZXNzID0gcGF0Y2hDb21wbGV0ZWRFdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWNjZXNzXCIpO1xuXHRcdFx0XHRcdGlmIChiU3VjY2Vzcykge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnVwZGF0ZURvY3VtZW50KG9FdmVudC5nZXRTb3VyY2UoKSwgb1BhdGNoUHJvbWlzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIENyZWF0ZUFjdGl2YXRlIGV2ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRoYW5kbGVDcmVhdGVBY3RpdmF0ZShvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRyYW5zYWN0aW9uSGVscGVyID0gdGhpcy5fZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKTtcblx0XHRjb25zdCBiQXRFbmQgPSB0cnVlO1xuXHRcdGNvbnN0IGJJbmFjdGl2ZSA9IHRydWU7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gdGhpcy5fZ2V0UmVzb3VyY2VCdW5kbGUoKTtcblx0XHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7XG5cdFx0XHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0XHRjcmVhdGVBdEVuZDogYkF0RW5kLFxuXHRcdFx0aW5hY3RpdmU6IGJJbmFjdGl2ZSxcblx0XHRcdGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ6IGZhbHNlLCAvLyBjdXJyZW50bHkgbm90IGZ1bGx5IHN1cHBvcnRlZFxuXHRcdFx0YnVzeU1vZGU6IFwiTm9uZVwiXG5cdFx0fTtcblx0XHR0cmFuc2FjdGlvbkhlbHBlci5jcmVhdGVEb2N1bWVudChvQmluZGluZywgb1BhcmFtcywgb1Jlc291cmNlQnVuZGxlLCB0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpLCBmYWxzZSwgdGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gUHJpdmF0ZSBtZXRob2RzXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0Lypcblx0XHRcdCBUTyBCRSBDSEVDS0VEIC8gRElTQ1VTU0VEXG5cdFx0XHQgX2NyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIGFuZCBkZWxldGVNdWx0aURvY3VtZW50IC0gY291bGRuJ3Qgd2UgY29tYmluZSB0aGVtIHdpdGggY3JlYXRlIGFuZCBkZWxldGUgZG9jdW1lbnQ/XG5cdFx0XHQgX2NyZWF0ZUFjdGlvblByb21pc2UgYW5kIGRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIC0+IG5leHQgc3RlcFxuXG5cdFx0XHQgKi9cblxuXHRfc2V0RWRpdE1vZGUoc0VkaXRNb2RlOiBhbnksIGJDcmVhdGlvbk1vZGU/OiBib29sZWFuKSB7XG5cdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuc2V0RWRpdE1vZGUoc0VkaXRNb2RlLCBiQ3JlYXRpb25Nb2RlKTtcblx0fVxuXG5cdF9zZXREcmFmdFN0YXR1cyhzRHJhZnRTdGF0ZTogYW55KSB7XG5cdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoc0RyYWZ0U3RhdGUpO1xuXHR9XG5cblx0X2dldFJvdXRpbmdMaXN0ZW5lcigpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuZ2V0Um91dGluZ0xpc3RlbmVyKCk7XG5cdH1cblxuXHRfZ2V0R2xvYmFsVUlNb2RlbCgpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuZ2V0R2xvYmFsVUlNb2RlbCgpO1xuXHR9XG5cdF9zeW5jVGFzayh2VGFzaz86IGFueSkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5zeW5jVGFzayh2VGFzayk7XG5cdH1cblxuXHRfZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmdldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpO1xuXHR9XG5cblx0X2RlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24ob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5kZWxldGVEb2N1bWVudFRyYW5zYWN0aW9uKG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfaGFuZGxlQ3JlYXRlRXZlbnRzKG9CaW5kaW5nOiBhbnkpIHtcblx0XHQodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5oYW5kbGVDcmVhdGVFdmVudHMob0JpbmRpbmcpO1xuXHR9XG5cblx0X2dldFRyYW5zYWN0aW9uSGVscGVyKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHR9XG5cblx0X2dldEludGVybmFsTW9kZWwoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmdldEludGVybmFsTW9kZWwoKTtcblx0fVxuXG5cdF9nZXRSb290Vmlld0NvbnRyb2xsZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0fVxuXG5cdF9nZXRSZXNvdXJjZUJ1bmRsZSgpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBhbnkpLm9SZXNvdXJjZUJ1bmRsZTtcblx0fVxuXG5cdF9nZXRTZW1hbnRpY01hcHBpbmcoKTogU2VtYW50aWNNYXBwaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0TGFzdFNlbWFudGljTWFwcGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgcHJvbWlzZSB0byB3YWl0IGZvciBhbiBhY3Rpb24gdG8gYmUgZXhlY3V0ZWRcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9jcmVhdGVBY3Rpb25Qcm9taXNlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSByZXNvbHZlciBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBleHRlcm5hbGx5IHJlc29sdmUgdGhlIHByb21pc2Vcblx0ICovXG5cblx0X2NyZWF0ZUFjdGlvblByb21pc2Uoc0FjdGlvbk5hbWU6IGFueSwgc0NvbnRyb2xJZDogYW55KSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmNyZWF0ZUFjdGlvblByb21pc2Uoc0FjdGlvbk5hbWUsIHNDb250cm9sSWQpO1xuXHR9XG5cblx0X2dldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHR9XG5cblx0X2RlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHR9XG5cblx0X2dldE1lc3NhZ2VIYW5kbGVyKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5nZXRNZXNzYWdlSGFuZGxlcigpO1xuXHR9XG5cblx0X3NlbmRBY3Rpdml0eShhY3Rpb246IEFjdGl2aXR5LCByZWxhdGVkQ29udGV4dHM6IENvbnRleHQgfCBDb250ZXh0W10gfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBjb250ZW50ID0gQXJyYXkuaXNBcnJheShyZWxhdGVkQ29udGV4dHMpID8gcmVsYXRlZENvbnRleHRzLm1hcCgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQYXRoKCkpIDogcmVsYXRlZENvbnRleHRzPy5nZXRQYXRoKCk7XG5cdFx0c2VuZCh0aGlzLmdldFZpZXcoKSwgYWN0aW9uLCBjb250ZW50KTtcblx0fVxuXG5cdF90cmlnZ2VyQ29uZmlndXJlZFN1cnZleShzQWN0aW9uTmFtZTogc3RyaW5nLCB0cmlnZ2VyVHlwZTogVHJpZ2dlclR5cGUpIHtcblx0XHR0cmlnZ2VyQ29uZmlndXJlZFN1cnZleSh0aGlzLmdldFZpZXcoKSwgc0FjdGlvbk5hbWUsIHRyaWdnZXJUeXBlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXNcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRoYXQgaXMgZXhlY3V0ZWRcblx0ICogQHBhcmFtIG9SZXNwb25zZSBUaGUgYm91bmQgYWN0aW9uJ3MgcmVzcG9uc2UgZGF0YSBvciByZXNwb25zZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGRhdGEgYW5kIG5hbWVzIG9mIHRoZSBrZXkgZmllbGRzIG9mIHRoZSByZXNwb25zZVxuXHQgKi9cblx0X2dldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMoc0FjdGlvbk5hbWU6IHN0cmluZywgb1Jlc3BvbnNlOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuZ2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5cyhzQWN0aW9uTmFtZSwgb1Jlc3BvbnNlKTtcblx0fVxuXG5cdGFzeW5jIF9zdWJtaXRPcGVuQ2hhbmdlcyhvQ29udGV4dDogYW55KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLl9nZXRHbG9iYWxVSU1vZGVsKCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gU3VibWl0IGFueSBsZWZ0b3ZlciBjaGFuZ2VzIHRoYXQgYXJlIG5vdCB5ZXQgc3VibWl0dGVkXG5cdFx0XHQvLyBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIG9ubHkgMSB1cGRhdGVHcm91cElkLCBoZW5jZSBzdWJtaXR0aW5nIHRoZSBiYXRjaCBkaXJlY3RseSBoZXJlXG5cdFx0XHRhd2FpdCBvTW9kZWwuc3VibWl0QmF0Y2goXCIkYXV0b1wiKTtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgYWxsIGN1cnJlbnRseSBydW5uaW5nIGNoYW5nZXNcblx0XHRcdC8vIEZvciB0aGUgdGltZSBiZWluZyB3ZSBhZ3JlZWQgd2l0aCB0aGUgdjQgbW9kZWwgdGVhbSB0byB1c2UgYW4gaW50ZXJuYWwgbWV0aG9kLiBXZSdsbCByZXBsYWNlIGl0IG9uY2Vcblx0XHRcdC8vIGEgcHVibGljIG9yIHJlc3RyaWN0ZWQgbWV0aG9kIHdhcyBwcm92aWRlZFxuXHRcdFx0YXdhaXQgb01vZGVsLm9SZXF1ZXN0b3Iud2FpdEZvclJ1bm5pbmdDaGFuZ2VSZXF1ZXN0cyhcIiRhdXRvXCIpO1xuXG5cdFx0XHQvLyBDaGVjayBpZiBhbGwgY2hhbmdlcyB3ZXJlIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHlcblx0XHRcdGlmIChvTW9kZWwuaGFzUGVuZGluZ0NoYW5nZXMoXCIkYXV0b1wiKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdWJtaXQgb2Ygb3BlbiBjaGFuZ2VzIGZhaWxlZFwiKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0xvY2tPYmplY3QpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfaGFuZGxlU3RpY2t5T24ob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuaGFuZGxlU3RpY2t5T24ob0NvbnRleHQpO1xuXHR9XG5cblx0X2hhbmRsZVN0aWNreU9mZigpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbigpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cub25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbigpO1xuXHR9XG5cblx0X2Rpc2NhcmRTdGlja3lTZXNzaW9uKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmRpc2NhcmRTdGlja3lTZXNzaW9uKG9Db250ZXh0KTtcblx0fVxuXG5cdF9zZXRTdGlja3lTZXNzaW9uSW50ZXJuYWxQcm9wZXJ0aWVzKHByb2dyYW1taW5nTW9kZWw6IGFueSwgbW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0XHRpZiAocHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLl9nZXRJbnRlcm5hbE1vZGVsKCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiLCB0cnVlKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc3RpY2t5U2Vzc2lvblRva2VuXCIsIChtb2RlbC5nZXRIdHRwSGVhZGVycyh0cnVlKSBhcyBhbnkpW1wiU0FQLUNvbnRleHRJZFwiXSk7XG5cdFx0fVxuXHR9XG5cblx0X3JlbW92ZVN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMocHJvZ3JhbW1pbmdNb2RlbDogYW55KSB7XG5cdFx0aWYgKHByb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5fZ2V0SW50ZXJuYWxNb2RlbCgpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zZXNzaW9uT25cIiwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zdGlja3lTZXNzaW9uVG9rZW5cIiwgdW5kZWZpbmVkKTtcblx0XHRcdHRoaXMuX2hhbmRsZVN0aWNreU9mZigvKm9Db250ZXh0Ki8pO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9oYW5kbGVOZXdDb250ZXh0KFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdGJFZGl0YWJsZTogYm9vbGVhbixcblx0XHRiUmVjcmVhdGVDb250ZXh0OiBib29sZWFuLFxuXHRcdGJEcmFmdE5hdmlnYXRpb246IGJvb2xlYW4sXG5cdFx0YkZvcmNlRm9jdXMgPSBmYWxzZVxuXHQpIHtcblx0XHRpZiAoIXRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblx0XHR9XG5cblx0XHRhd2FpdCB0aGlzLl9nZXRSb3V0aW5nTGlzdGVuZXIoKS5uYXZpZ2F0ZVRvQ29udGV4dChvQ29udGV4dCwge1xuXHRcdFx0Y2hlY2tOb0hhc2hDaGFuZ2U6IHRydWUsXG5cdFx0XHRlZGl0YWJsZTogYkVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogdHJ1ZSxcblx0XHRcdGJSZWNyZWF0ZUNvbnRleHQ6IGJSZWNyZWF0ZUNvbnRleHQsXG5cdFx0XHRiRHJhZnROYXZpZ2F0aW9uOiBiRHJhZnROYXZpZ2F0aW9uLFxuXHRcdFx0c2hvd1BsYWNlaG9sZGVyOiBmYWxzZSxcblx0XHRcdGJGb3JjZUZvY3VzOiBiRm9yY2VGb2N1cyxcblx0XHRcdGtlZXBDdXJyZW50TGF5b3V0OiB0cnVlXG5cdFx0fSk7XG5cdH1cblxuXHRfZ2V0Qm91bmRDb250ZXh0KHZpZXc6IGFueSwgcGFyYW1zOiBhbnkpIHtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB2aWV3LmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGNvbnN0IGJSZWZyZXNoQWZ0ZXJBY3Rpb24gPSB2aWV3TGV2ZWwgPiAxIHx8ICh2aWV3TGV2ZWwgPT09IDEgJiYgcGFyYW1zLmNvbnRyb2xJZCk7XG5cdFx0cmV0dXJuICFwYXJhbXMuaXNOYXZpZ2FibGUgfHwgISFiUmVmcmVzaEFmdGVyQWN0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGVyZSBhcmUgdmFsaWRhdGlvbiAocGFyc2UpIGVycm9ycyBmb3IgY29udHJvbHMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0XG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfY2hlY2tGb3JWYWxpZGF0aW9uRXJyb3JzXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyBpZiB0aGVyZSBhcmUgbm8gdmFsaWRhdGlvbiBlcnJvcnMsIGFuZCByZWplY3RzIGlmIHRoZXJlIGFyZSB2YWxpZGF0aW9uIGVycm9yc1xuXHQgKi9cblxuXHRfY2hlY2tGb3JWYWxpZGF0aW9uRXJyb3JzKCkge1xuXHRcdHJldHVybiB0aGlzLl9zeW5jVGFzaygpLnRoZW4oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRsZXQgb0NvbnRyb2w7XG5cdFx0XHRsZXQgb01lc3NhZ2U7XG5cblx0XHRcdGlmICghYU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiTm8gdmFsaWRhdGlvbiBlcnJvcnMgZm91bmRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG9NZXNzYWdlID0gYU1lc3NhZ2VzW2ldO1xuXHRcdFx0XHRpZiAob01lc3NhZ2UudmFsaWRhdGlvbikge1xuXHRcdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKG9NZXNzYWdlLmdldENvbnRyb2xJZCgpKTtcblx0XHRcdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChvQ29udHJvbC5nZXRJZCgpID09PSBzVmlld0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcInZhbGlkYXRpb24gZXJyb3JzIGV4aXN0XCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX3JlZnJlc2hMaXN0SWZSZXF1aXJlZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIG9SZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2YgdGhlIGJvdW5kIGFjdGlvbiBhbmQgdGhlIG5hbWVzIG9mIHRoZSBrZXkgZmllbGRzXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgYm91bmQgY29udGV4dCBvbiB3aGljaCB0aGUgYWN0aW9uIHdhcyBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBBbHdheXMgcmVzb2x2ZXMgdG8gcGFyYW0gb1Jlc3BvbnNlXG5cdCAqL1xuXHRfcmVmcmVzaExpc3RJZlJlcXVpcmVkKG9SZXNwb25zZTogYW55LCBvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGlmICghb0NvbnRleHQgfHwgIW9SZXNwb25zZSB8fCAhb1Jlc3BvbnNlLm9EYXRhKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9CaW5kaW5nID0gb0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIHJlZnJlc2ggb25seSBsaXN0c1xuXHRcdGlmIChvQmluZGluZyAmJiBvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1Jlc3BvbnNlLm9EYXRhO1xuXHRcdFx0Y29uc3QgYUtleXMgPSBvUmVzcG9uc2Uua2V5cztcblx0XHRcdGNvbnN0IG9DdXJyZW50RGF0YSA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0bGV0IGJSZXR1cm5lZENvbnRleHRJc1NhbWUgPSB0cnVlO1xuXHRcdFx0Ly8gZW5zdXJlIGNvbnRleHQgaXMgaW4gdGhlIHJlc3BvbnNlXG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0NvbnRleHREYXRhKS5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gY2hlY2sgaWYgY29udGV4dCBpbiByZXNwb25zZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgYm91bmQgY29udGV4dFxuXHRcdFx0XHRiUmV0dXJuZWRDb250ZXh0SXNTYW1lID0gYUtleXMuZXZlcnkoZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvQ3VycmVudERhdGFbc0tleV0gPT09IG9Db250ZXh0RGF0YVtzS2V5XTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmICghYlJldHVybmVkQ29udGV4dElzU2FtZSkge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKChvQmluZGluZyBhcyBhbnkpLmlzUm9vdCgpKSB7XG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0b0JpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBvQmluZGluZy5nZXRQYXRoKCkgfV0sIG9CaW5kaW5nLmdldENvbnRleHQoKSBhcyBDb250ZXh0KVxuXHRcdFx0XHRcdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcmVzb2x2ZSB3aXRoIG9SZXNwb25zZSB0byBub3QgZGlzdHVyYiB0aGUgcHJvbWlzZSBjaGFpbiBhZnRlcndhcmRzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0X2ZldGNoU2VtYW50aWNLZXlWYWx1ZXMob0NvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSxcblx0XHRcdHNFbnRpdHlTZXROYW1lID0gb01ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCkpLmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpLFxuXHRcdFx0YVNlbWFudGljS2V5cyA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhvTWV0YU1vZGVsLCBzRW50aXR5U2V0TmFtZSk7XG5cblx0XHRpZiAoYVNlbWFudGljS2V5cyAmJiBhU2VtYW50aWNLZXlzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYVJlcXVlc3RQcm9taXNlcyA9IGFTZW1hbnRpY0tleXMubWFwKGZ1bmN0aW9uIChvS2V5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qob0tleS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlcXVlc3RQcm9taXNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIGxhdGVzdCBjb250ZXh0IGluIHRoZSBtZXRhZGF0YSBoaWVyYXJjaHkgZnJvbSByb290QmluZGluZyB0byBnaXZlbiBjb250ZXh0IHBvaW50aW5nIHRvIGdpdmVuIGVudGl0eVR5cGVcblx0ICogaWYgYW55IHN1Y2ggY29udGV4dCBleGlzdHMuIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgY29udGV4dC5cblx0ICogTm90ZTogSXQgaXMgb25seSBuZWVkZWQgYXMgd29yay1hcm91bmQgZm9yIGluY29ycmVjdCBtb2RlbGxpbmcuIENvcnJlY3QgbW9kZWxsaW5nIHdvdWxkIGltcGx5IGEgRGF0YUZpZWxkRm9yQWN0aW9uIGluIGEgTGluZUl0ZW1cblx0ICogdG8gcG9pbnQgdG8gYW4gb3ZlcmxvYWQgZGVmaW5lZCBlaXRoZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgRW50aXR5VHlwZSBvciBhIGNvbGxlY3Rpb24gb2YgdGhlIHNhbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSByb290Q29udGV4dCBUaGUgY29udGV4dCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbVxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGxpc3RCaW5kaW5nIG9mIHRoZSB0YWJsZVxuXHQgKiBAcGFyYW0gb3ZlcmxvYWRFbnRpdHlUeXBlIFRoZSBBY3Rpb25PdmVybG9hZCBlbnRpdHkgdHlwZSB0byBzZWFyY2ggZm9yXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIEFjdGlvbk92ZXJsb2FkIGVudGl0eVxuXHQgKi9cblx0X2dldEFjdGlvbk92ZXJsb2FkQ29udGV4dEZyb21NZXRhZGF0YVBhdGgocm9vdENvbnRleHQ6IENvbnRleHQsIGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBvdmVybG9hZEVudGl0eVR5cGU6IHN0cmluZyk6IENvbnRleHQge1xuXHRcdGNvbnN0IG1vZGVsOiBPRGF0YU1vZGVsID0gcm9vdENvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IGNvbnRleHRTZWdtZW50czogc3RyaW5nW10gPSBsaXN0QmluZGluZy5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBjdXJyZW50Q29udGV4dDogQ29udGV4dCA9IHJvb3RDb250ZXh0O1xuXG5cdFx0Ly8gV2UgZXhwZWN0IHRoYXQgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgbGlzdEJpbmRpbmcgaXMgdGhlIExpc3RCaW5kaW5nIG9mIHRoZSB0YWJsZS4gUmVtb3ZlIHRoaXMgZnJvbSBjb250ZXh0U2VnbWVudHNcblx0XHQvLyBiZWNhdXNlIGl0IGlzIGluY29ycmVjdCB0byBleGVjdXRlIGJpbmRDb250ZXh0IG9uIGEgbGlzdC4gV2UgZG8gbm90IGFueXdheSBuZWVkIHRvIHNlYXJjaCB0aGlzIGNvbnRleHQgZm9yIHRoZSBvdmVybG9hZC5cblx0XHRjb250ZXh0U2VnbWVudHMucG9wKCk7XG5cdFx0aWYgKGNvbnRleHRTZWdtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdGNvbnRleHRTZWdtZW50cyA9IFtcIlwiXTsgLy8gRG9uJ3QgbGVhdmUgY29udGV4dFNlZ21lbnRzIHVuZGVmaW5lZFxuXHRcdH1cblxuXHRcdGlmIChjb250ZXh0U2VnbWVudHNbMF0gIT09IFwiXCIpIHtcblx0XHRcdGNvbnRleHRTZWdtZW50cy51bnNoaWZ0KFwiXCIpOyAvLyB0byBhbHNvIGdldCB0aGUgcm9vdCBjb250ZXh0LCBpLmUuIHRoZSBiaW5kaW5nQ29udGV4dCBvZiB0aGUgdGFibGVcblx0XHR9XG5cdFx0Ly8gbG9hZCBhbGwgdGhlIHBhcmVudCBjb250ZXh0cyBpbnRvIGFuIGFycmF5XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dHM6IENvbnRleHRbXSA9IGNvbnRleHRTZWdtZW50c1xuXHRcdFx0Lm1hcCgocGF0aFNlZ21lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRpZiAocGF0aFNlZ21lbnQgIT09IFwiXCIpIHtcblx0XHRcdFx0XHRjdXJyZW50Q29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KHBhdGhTZWdtZW50LCBjdXJyZW50Q29udGV4dCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRpbmcgYSBuZXcgY29udGV4dCB1c2luZyBiaW5kQ29udGV4dCguLi4pLmdldEJvdW5kQ29udGV4dCgpIGRvZXMgbm90IHdvcmsgaWYgdGhlIGV0YWcgaXMgbmVlZGVkLiBBY2NvcmRpbmcgdG8gbW9kZWwgY29sbGVhZ3Vlcyxcblx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgYWx3YXlzIHVzZSBhbiBleGlzdGluZyBjb250ZXh0IGlmIHBvc3NpYmxlLlxuXHRcdFx0XHRcdC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgZXhhbXBsZSB3ZSBrbm93IGFib3V0IGlzIHVzaW5nIHRoZSByb290Q29udGV4dCAtIGFuZCBpbiB0aGlzIGNhc2UsIHdlIGNhbiBvYnZpb3VzbHkgcmV1c2UgdGhhdCBleGlzdGluZyBjb250ZXh0LlxuXHRcdFx0XHRcdC8vIElmIG90aGVyIGV4YW1wbGVzIHNob3VsZCBjb21lIHVwLCB0aGUgYmVzdCBwb3NzaWJsZSB3b3JrIGFyb3VuZCB3b3VsZCBiZSB0byByZXF1ZXN0IHNvbWUgZGF0YSB0byBnZXQgYW4gZXhpc3RpbmcgY29udGV4dC4gVG8ga2VlcCB0aGVcblx0XHRcdFx0XHQvLyByZXF1ZXN0IGFzIHNtYWxsIGFuZCBmYXN0IGFzIHBvc3NpYmxlLCB3ZSBzaG91bGQgcmVxdWVzdCBvbmx5IHRoZSBmaXJzdCBrZXkgcHJvcGVydHkuIEFzIHRoaXMgd291bGQgaW50cm9kdWNlIGFzeW5jaHJvbmlzbSwgYW5kIGFueXdheVxuXHRcdFx0XHRcdC8vIHRoZSB3aG9sZSBsb2dpYyBpcyBvbmx5IHBhcnQgb2Ygd29yay1hcm91bmQgZm9yIGluY29ycmVjdCBtb2RlbGxpbmcsIHdlIHdhaXQgdW50aWwgd2UgaGF2ZSBhbiBleGFtcGxlIG5lZWRpbmcgaXQgYmVmb3JlIGltcGxlbWVudGluZyB0aGlzLlxuXHRcdFx0XHRcdGN1cnJlbnRDb250ZXh0ID0gcm9vdENvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRDb250ZXh0O1xuXHRcdFx0fSlcblx0XHRcdC5yZXZlcnNlKCk7XG5cdFx0Ly8gc2VhcmNoIGZvciBjb250ZXh0IGJhY2t3YXJkc1xuXHRcdGNvbnN0IG92ZXJsb2FkQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCA9IHBhcmVudENvbnRleHRzLmZpbmQoXG5cdFx0XHQocGFyZW50Q29udGV4dDogQ29udGV4dCkgPT5cblx0XHRcdFx0KG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChwYXJlbnRDb250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiJFR5cGVcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBvdmVybG9hZEVudGl0eVR5cGVcblx0XHQpO1xuXHRcdHJldHVybiBvdmVybG9hZENvbnRleHQgfHwgbGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHR9XG5cblx0X2NyZWF0ZVNpYmxpbmdJbmZvKGN1cnJlbnRDb250ZXh0OiBWNENvbnRleHQsIG5ld0NvbnRleHQ6IFY0Q29udGV4dCk6IFNpYmxpbmdJbmZvcm1hdGlvbiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldENvbnRleHQ6IG5ld0NvbnRleHQsXG5cdFx0XHRwYXRoTWFwcGluZzogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0b2xkUGF0aDogY3VycmVudENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdG5ld1BhdGg6IG5ld0NvbnRleHQuZ2V0UGF0aCgpXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG5cblx0X3VwZGF0ZVBhdGhzSW5IaXN0b3J5KG1hcHBpbmdzOiB7IG9sZFBhdGg6IHN0cmluZzsgbmV3UGF0aDogc3RyaW5nIH1bXSkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLnNldFBhdGhNYXBwaW5nKG1hcHBpbmdzKTtcblxuXHRcdC8vIEFsc28gdXBkYXRlIHRoZSBzZW1hbnRpYyBtYXBwaW5nIGluIHRoZSByb3V0aW5nIHNlcnZpY2Vcblx0XHRjb25zdCBsYXN0U2VtYW50aWNNYXBwaW5nID0gdGhpcy5fZ2V0U2VtYW50aWNNYXBwaW5nKCk7XG5cdFx0aWYgKG1hcHBpbmdzLmxlbmd0aCAmJiBsYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID09PSBtYXBwaW5nc1ttYXBwaW5ncy5sZW5ndGggLSAxXS5vbGRQYXRoKSB7XG5cdFx0XHRsYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGggPSBtYXBwaW5nc1ttYXBwaW5ncy5sZW5ndGggLSAxXS5uZXdQYXRoO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZHMgY3JlYXRlcyBhIHNpYmxpbmcgY29udGV4dCBmb3IgYSBzdWJvYmplY3QgcGFnZSwgYW5kIGNhbGN1bGF0ZXMgYSBzaWJsaW5nIHBhdGggZm9yXG5cdCAqIGFsbCBpbnRlcm1lZGlhdGVzIHBhdGhzIGJldHdlZW4gdGhlIE9QIGFuZCB0aGUgc3ViLU9QLlxuXHQgKlxuXHQgKiBAcGFyYW0gcm9vdEN1cnJlbnRDb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgcm9vdCBvZiB0aGUgZHJhZnRcblx0ICogQHBhcmFtIHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBzdWJvYmplY3Rcblx0ICogQHBhcmFtIHNQcm9ncmFtbWluZ01vZGVsIFRoZSBwcm9ncmFtbWluZyBtb2RlbFxuXHQgKiBAcGFyYW0gZG9Ob3RDb21wdXRlSWZSb290IElmIHRydWUsIHdlIGRvbid0IGNvbXB1dGUgc2libGluZ0luZm8gaWYgdGhlIHJvb3QgYW5kIHRoZSByaWdodG1vc3QgY29udGV4dHMgYXJlIHRoZSBzYW1lXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHNpYmxpbmdJbmZvcm1hdGlvbiBvYmplY3Rcblx0ICovXG5cdGFzeW5jIF9jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKFxuXHRcdHJvb3RDdXJyZW50Q29udGV4dDogVjRDb250ZXh0LFxuXHRcdHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0OiBWNENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdHNQcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsXG5cdFx0ZG9Ob3RDb21wdXRlSWZSb290OiBib29sZWFuXG5cdCk6IFByb21pc2U8U2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkPiB7XG5cdFx0cmlnaHRtb3N0Q3VycmVudENvbnRleHQgPSByaWdodG1vc3RDdXJyZW50Q29udGV4dCA/PyByb290Q3VycmVudENvbnRleHQ7XG5cdFx0aWYgKCFyaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0Ly8gV3JvbmcgdXNhZ2UgISFcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBjb21wdXRlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHRcIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29tcHV0ZSByaWdodG1vc3Qgc2libGluZyBjb250ZXh0XCIpO1xuXHRcdH1cblx0XHRpZiAoZG9Ob3RDb21wdXRlSWZSb290ICYmIHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSA9PT0gcm9vdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGVsID0gcm9vdEN1cnJlbnRDb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0KSB7XG5cdFx0XHRyZXR1cm4gZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihyb290Q3VycmVudENvbnRleHQsIHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgbm90IGluIGRyYWZ0IG1vZGUsIHdlIGp1c3QgcmVjcmVhdGUgYSBjb250ZXh0IGZyb20gdGhlIHBhdGggb2YgdGhlIHJpZ2h0bW9zdCBjb250ZXh0XG5cdFx0XHQvLyBObyBwYXRoIG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXRDb250ZXh0OiBtb2RlbC5iaW5kQ29udGV4dChyaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpLmdldEJvdW5kQ29udGV4dCgpLFxuXHRcdFx0XHRwYXRoTWFwcGluZzogW11cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdF9pc0ZjbEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuX2lzRmNsRW5hYmxlZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRGbG93O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFHTywwQkFBMEJGLElBQUksRUFBRUssU0FBUyxFQUFFO0lBQ2pELElBQUk7TUFDSCxJQUFJSCxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO01BQ1gsT0FBT0UsU0FBUyxDQUFDLElBQUksRUFBRUYsQ0FBQyxDQUFDO0lBQzFCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFRCxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUU7SUFDQSxPQUFPRCxTQUFTLENBQUMsS0FBSyxFQUFFSCxNQUFNLENBQUM7RUFDaEM7RUFBQztFQUFBO0VBQUE7RUExaUJELElBQU1LLFlBQVksR0FBR0MsU0FBUyxDQUFDRCxZQUFZO0lBQzFDRSxnQkFBZ0IsR0FBR0QsU0FBUyxDQUFDQyxnQkFBZ0I7SUFDN0NDLFNBQVMsR0FBR0YsU0FBUyxDQUFDRSxTQUFTO0lBQy9CQyxXQUFXLEdBQUdILFNBQVMsQ0FBQ0csV0FBVztJQUNuQ0MsUUFBUSxHQUFHSixTQUFTLENBQUNJLFFBQVE7SUFDN0JDLFdBQVcsR0FBR0wsU0FBUyxDQUFDSyxXQUFXO0lBQ25DQyxXQUFXLEdBQUdDLFdBQVcsQ0FBQ0QsV0FBVzs7RUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQSxJQVFNRSxRQUFRLFdBRGJDLGNBQWMsQ0FBQywyQ0FBMkMsQ0FBQyxVQXVCMURDLGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFVBK0NoQkQsZUFBZSxFQUFFLFVBQ2pCQyxjQUFjLEVBQUUsVUF1QmhCRCxlQUFlLEVBQUUsVUFDakJDLGNBQWMsRUFBRSxVQWlGaEJELGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFdBbWJoQkQsZUFBZSxFQUFFLFdBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0F1Qm5DSixlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQXNCbkNKLGVBQWUsRUFBRSxXQUNqQkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLFdBc0JuQ0osZUFBZSxFQUFFLFdBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0FzQm5DSixlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQXdCbkNKLGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBa0VoQkQsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0F3RWhCRCxlQUFlLEVBQUUsV0FDakJDLGNBQWMsRUFBRSxXQTZHaEJELGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBMEVoQkQsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0E2Q2hCRCxlQUFlLEVBQUUsV0FDakJDLGNBQWMsRUFBRSxXQW1NaEJELGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBK0RoQkQsZUFBZSxFQUFFO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQTkwQ2xCO0lBQ0E7SUFDQTtJQU9BO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBVEMsT0FZTUssWUFBWSx5QkFBQ0MsT0FBa0I7TUFBQSxJQUFpQjtRQUFBLGFBRTNCLElBQUk7UUFEOUIsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBSTtRQUM3QixJQUFNQyxpQkFBaUIsR0FBRyxPQUFLQyxxQkFBcUIsRUFBRTtRQUN0RCxJQUFNQyxtQkFBbUIsR0FBRyxPQUFLQyxzQkFBc0IsRUFBUztRQUNoRSxJQUFNQyxLQUFLLEdBQUdOLE9BQU8sQ0FBQ08sUUFBUSxFQUFFO1FBQ2hDLElBQUlDLGdCQUFnQjtRQUFDLDBDQUNqQjtVQUFBLHVCQUNHLE9BQUtDLElBQUksQ0FBQ0MsUUFBUSxDQUFDQyxZQUFZLENBQUM7WUFBRVgsT0FBTyxFQUFFQTtVQUFRLENBQUMsQ0FBQztZQUFBLHVCQUMxQkUsaUJBQWlCLENBQUNILFlBQVksQ0FBQ0MsT0FBTyxFQUFFLE9BQUtZLE9BQU8sRUFBRSxFQUFFLE9BQUtDLGtCQUFrQixFQUFFLENBQUMsaUJBQTdHQyxrQkFBa0I7Y0FFeEIsSUFBTUMsZ0JBQWdCLEdBQUcsT0FBS0Msb0JBQW9CLENBQUNoQixPQUFPLENBQUM7Y0FFM0QsT0FBS2lCLG1DQUFtQyxDQUFDRixnQkFBZ0IsRUFBRVQsS0FBSyxDQUFDO2NBQUM7Z0JBQUEsSUFFOURRLGtCQUFrQjtrQkFDckIsT0FBS0ksWUFBWSxDQUFDOUIsUUFBUSxDQUFDK0IsUUFBUSxFQUFFLEtBQUssQ0FBQztrQkFDM0MsT0FBS04sa0JBQWtCLEVBQUUsQ0FBQ08saUJBQWlCLEVBQUU7a0JBQUM7b0JBQUEsSUFFMUNOLGtCQUFrQixLQUFLZCxPQUFPO3NCQUFBO3dCQUFBLHVCQVkzQixPQUFLcUIsaUJBQWlCLENBQUNDLGtCQUFpQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUVyQixnQkFBZ0IsRUFBRSxJQUFJLENBQUM7MEJBQUE7NEJBQUEsSUFDaEZjLGdCQUFnQixLQUFLOUIsZ0JBQWdCLENBQUNzQyxNQUFNOzhCQUMvQzs4QkFDQTs4QkFDQSxPQUFLQyxlQUFlLENBQUNWLGtCQUFrQixDQUFDOzRCQUFDOzhCQUFBO2dDQUFBLElBQy9CVyxXQUFXLENBQUNDLDZCQUE2QixDQUFDcEIsS0FBSyxDQUFDcUIsWUFBWSxFQUFFLENBQUM7a0NBQ3pFO2tDQUFBLHVCQUNNQyxXQUFXLENBQUNkLGtCQUFrQixDQUFDO2dDQUFBOzhCQUFBOzhCQUFBOzRCQUFBOzBCQUFBOzBCQUFBO3dCQUFBO3NCQUFBO3NCQWxCdEMsSUFBSVEsa0JBQWlCLEdBQUdSLGtCQUFrQjtzQkFBQzt3QkFBQSxJQUN2QyxPQUFLZSxhQUFhLEVBQUU7MEJBQ3ZCckIsZ0JBQWdCLEdBQUdKLG1CQUFtQixDQUFDMEIsbUJBQW1CLEVBQUU7MEJBQUMsdUJBQ3JDLE9BQUtDLDBCQUEwQixDQUFDL0IsT0FBTyxFQUFFUSxnQkFBZ0IsRUFBRU8sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGlCQUF0R2lCLFdBQVc7NEJBQUE7NEJBQ2ZBLFdBQVcsbUJBQUdBLFdBQVcsdURBQUksT0FBS0Msa0JBQWtCLENBQUNqQyxPQUFPLEVBQUVjLGtCQUFrQixDQUFDOzRCQUNqRixPQUFLb0IscUJBQXFCLENBQUNGLFdBQVcsQ0FBQ0csV0FBVyxDQUFDOzRCQUFDLElBQ2hESCxXQUFXLENBQUNJLGFBQWEsQ0FBQ0MsT0FBTyxFQUFFLElBQUl2QixrQkFBa0IsQ0FBQ3VCLE9BQU8sRUFBRTs4QkFDdEVmLGtCQUFpQixHQUFHVSxXQUFXLENBQUNJLGFBQWE7NEJBQUM7MEJBQUE7d0JBQUE7c0JBQUE7c0JBQUE7b0JBQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Y0FBQTtjQUFBO1lBQUE7VUFBQTtRQWVuRCxDQUFDLFlBQVFFLEtBQUssRUFBRTtVQUNmQyxHQUFHLENBQUNELEtBQUssQ0FBQyxrQ0FBa0MsRUFBRUEsS0FBSyxDQUFXO1VBQzlELE9BQU9FLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDSCxLQUFLLENBQUM7UUFDN0IsQ0FBQztNQUNGLENBQUM7UUFBQTtNQUFBO0lBQUE7SUFBQSxPQUdESSx1QkFBdUIsR0FGdkIsaUNBRXdCQyxTQUFjLEVBQUVDLFdBQWdCLEVBQUU7TUFDekQsSUFBSUEsV0FBVyxFQUFFO1FBQ2hCQSxXQUFXLENBQUNDLG9CQUFvQixHQUFHLElBQUksQ0FBQ3BDLElBQUksQ0FBQ0MsUUFBUSxDQUFDb0MsY0FBYztNQUNyRSxDQUFDLE1BQU07UUFDTkYsV0FBVyxHQUFHO1VBQ2JDLG9CQUFvQixFQUFFLElBQUksQ0FBQ3BDLElBQUksQ0FBQ0MsUUFBUSxDQUFDb0M7UUFDMUMsQ0FBQztNQUNGO01BQ0EsT0FBUSxJQUFJLENBQUNyQyxJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUNOLHVCQUF1QixDQUFDQyxTQUFTLEVBQUVDLFdBQVcsQ0FBQztJQUN6SDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQSxPQWFBSyxjQUFjLEdBRmQsd0JBRWVDLFFBQWdCLEVBQUVDLFFBQXNCLEVBQWlCO01BQUEsYUFTaEUsSUFBSTtNQVJYLElBQU1qRCxpQkFBaUIsR0FBRyxJQUFJLENBQUNDLHFCQUFxQixFQUFFO01BQ3RELElBQU1pRCxzQkFBc0IsR0FBRyxJQUFJLENBQUN4QyxPQUFPLEVBQUUsQ0FBQ3lDLGlCQUFpQixFQUFFO01BQ2pFLElBQU1DLFFBQVEsR0FBRyxJQUFJLENBQUN0QyxvQkFBb0IsQ0FBQ2tDLFFBQVEsQ0FBQyxLQUFLakUsZ0JBQWdCLENBQUNzRSxLQUFLO01BRS9FLElBQUksQ0FBQzFDLGtCQUFrQixFQUFFLENBQUMyQyx3QkFBd0IsRUFBRTtNQUNwRCxPQUFPLElBQUksQ0FBQ0MsU0FBUztRQUFBLElBQWE7VUFDakMsSUFBSUwsc0JBQXNCLEVBQUU7WUFDM0JsRCxpQkFBaUIsQ0FBQ3dELDJCQUEyQixFQUFFO1lBQy9DLElBQUksQ0FBQyxPQUFLN0IsYUFBYSxFQUFFLEVBQUU7Y0FDMUI4QixTQUFTLENBQUNDLGlCQUFpQixFQUFFO1lBQzlCO1lBRUEsSUFBSU4sUUFBUSxFQUFFO2NBQ2IsT0FBS08sZUFBZSxDQUFDMUUsV0FBVyxDQUFDMkUsTUFBTSxDQUFDO1lBQ3pDO1VBQ0Q7VUFBQztZQUFBLDBCQUVHO2NBQUEsdUJBQ0dYLFFBQVE7Z0JBQ2Q7Z0JBQ0E7Z0JBQ0EsSUFBTVksZUFBZSxHQUFHLE9BQUtuRCxPQUFPLEVBQUUsQ0FBQ3lDLGlCQUFpQixFQUFFO2dCQUFDO2tCQUFBLElBQ3ZEQyxRQUFRLElBQUlTLGVBQWUsSUFBSUEsZUFBZSxLQUFLWCxzQkFBc0I7b0JBQzVFLElBQU1ZLFVBQVUsR0FBR0QsZUFBZSxDQUFDeEQsUUFBUSxFQUFFLENBQUNvQixZQUFZLEVBQW9CO3NCQUM3RXNDLGNBQWMsR0FBSUQsVUFBVSxDQUFTRSxjQUFjLENBQUNILGVBQWUsQ0FBQzFCLE9BQU8sRUFBRSxDQUFDLENBQUM4QixTQUFTLENBQUMsYUFBYSxDQUFDO3NCQUN2R0MsYUFBYSxHQUFHQyxpQkFBaUIsQ0FBQ0MsZUFBZSxDQUFDTixVQUFVLEVBQUVDLGNBQWMsQ0FBQztvQkFBQztzQkFBQSxJQUMzRUcsYUFBYSxJQUFJQSxhQUFhLENBQUNHLE1BQU07d0JBQ3hDLElBQU1DLHVCQUF1QixHQUFHLE9BQUtDLG1CQUFtQixFQUFFOzBCQUN6REMsb0JBQW9CLEdBQUdGLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ0csWUFBWTswQkFDdEZDLFlBQVksR0FBR1AsaUJBQWlCLENBQUNRLGVBQWUsQ0FBQ2QsZUFBZSxFQUFFLElBQUksQ0FBQzt3QkFDeEU7d0JBQUE7MEJBQUEsSUFDSVcsb0JBQW9CLElBQUlBLG9CQUFvQixLQUFLRSxZQUFZOzRCQUFBLHVCQUMxRCxPQUFLdkQsaUJBQWlCLENBQUMwQyxlQUFlLEVBQWEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7OEJBQzNFLE9BQUtGLGVBQWUsQ0FBQzFFLFdBQVcsQ0FBQzJGLEtBQUssQ0FBQzs0QkFBQzswQkFBQTs0QkFFeEMsT0FBS2pCLGVBQWUsQ0FBQzFFLFdBQVcsQ0FBQzJGLEtBQUssQ0FBQzswQkFBQzt3QkFBQTt3QkFBQTtzQkFBQTt3QkFHekMsT0FBS2pCLGVBQWUsQ0FBQzFFLFdBQVcsQ0FBQzJGLEtBQUssQ0FBQztzQkFBQztvQkFBQTtvQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO1lBRzNDLENBQUMsWUFBUUMsTUFBVyxFQUFFO2NBQ3JCeEMsR0FBRyxDQUFDRCxLQUFLLENBQUMsbUNBQW1DLEVBQUV5QyxNQUFNLENBQUM7Y0FBQyxJQUNuRHpCLFFBQVEsSUFBSUYsc0JBQXNCO2dCQUNyQyxPQUFLUyxlQUFlLENBQUMxRSxXQUFXLENBQUM2RixLQUFLLENBQUM7Y0FBQztZQUUxQyxDQUFDO1VBQUE7WUFBQSx1QkFDTSxPQUFLbkUsa0JBQWtCLEVBQUUsQ0FBQ29FLFlBQVksRUFBRTtjQUFBO2NBQUE7WUFBQTtVQUFBO1VBQUE7UUFFaEQsQ0FBQztVQUFBO1FBQUE7TUFBQSxFQUFDO0lBQ0g7O0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0lBRUE7SUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FqQkM7SUFBQSxPQW9CTUMsY0FBYywyQkFDbkJDLFlBQXVDLEVBQ3ZDQyxhQUtDO01BQUEsSUFDZTtRQUFBO1FBQUEsYUFDVSxJQUFJO1FBQUE7VUFBQTtVQTJCOUIsSUFBSXhDLFdBQVcsQ0FBQ3lDLFlBQVksS0FBS3RHLFlBQVksQ0FBQ3VHLFdBQVcsSUFBSTFDLFdBQVcsQ0FBQzJDLFdBQVcsRUFBRTtZQUNyRixJQUFNQyxtQkFBbUIsR0FBRzVDLFdBQVcsQ0FBQzJDLFdBQVcsQ0FBQ2xDLGlCQUFpQixFQUFFLENBQUNjLFNBQVMsRUFBRTtZQUNuRixPQUFPcUIsbUJBQW1CLENBQUMsMkJBQTJCLENBQUM7WUFDdkRDLE1BQU0sR0FBRzdDLFdBQVcsQ0FBQzJDLFdBQVcsQ0FBQ0csU0FBUyxFQUFFO1lBQzVDQyxxQkFBcUIsR0FBR3pGLGlCQUFpQixDQUFDMEYsZ0JBQWdCLENBQ3pESCxNQUFNLENBQUNwQyxpQkFBaUIsRUFBRSxFQUMxQjtjQUNDd0MsSUFBSSxFQUFFTCxtQkFBbUI7Y0FDekJNLHdCQUF3QixFQUFFTCxNQUFNLENBQUNNLGNBQWMsRUFBRSxDQUFDRixJQUFJLENBQUMsMEJBQTBCO1lBQ2xGLENBQUMsRUFDRCxPQUFLcEYsSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FDbkI7O1lBRUQ7WUFDQSxJQUFJNkUsTUFBTSxDQUFDTSxjQUFjLEVBQUUsQ0FBQ0YsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssTUFBTSxFQUFFO2NBQy9FLElBQU1HLHFCQUFxQixHQUFHUCxNQUFNLENBQUNwQyxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO2NBQzFGMkMscUJBQXFCLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRTtVQUNEO1VBRUEsSUFBSXJELFdBQVcsQ0FBQ3lDLFlBQVksS0FBS3RHLFlBQVksQ0FBQ21ILE1BQU0sSUFBSXRELFdBQVcsQ0FBQ3VELE9BQU8sRUFBRTtZQUM1RVYsTUFBTSxHQUFHLE9BQUs3RSxPQUFPLEVBQUUsQ0FBQ3dGLElBQUksQ0FBQ3hELFdBQVcsQ0FBQ3VELE9BQU8sQ0FBVTtVQUMzRDtVQUVBLElBQUlWLE1BQU0sSUFBSUEsTUFBTSxDQUFDWSxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUM3QyxJQUFNQyxlQUFlLEdBQ3BCMUQsV0FBVyxDQUFDeUMsWUFBWSxLQUFLdEcsWUFBWSxDQUFDbUgsTUFBTSxHQUFHVCxNQUFNLENBQUNjLFFBQVEsQ0FBQ3pILElBQUksQ0FBQzJHLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLENBQUNlLGFBQWEsQ0FBQzFILElBQUksQ0FBQzJHLE1BQU0sQ0FBQztZQUNwSEEsTUFBTSxDQUFDZ0IsYUFBYSxFQUFFLENBQUNDLGVBQWUsQ0FBQyxRQUFRO2NBQUEsSUFBb0I7Z0JBQUEsdUJBQzVEQyxTQUFTO2tCQUNmTCxlQUFlLENBQUMxRCxXQUFXLENBQUNnRSxXQUFXLEdBQUduQixNQUFNLENBQUNnQixhQUFhLEVBQUUsQ0FBQ0ksU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFBQztjQUN6RixDQUFDO2dCQUFBO2NBQUE7WUFBQSxFQUFDO1VBQ0g7VUFFQSxJQUFNQyxpQkFBaUIsYUFBVUMsWUFBaUIsRUFBRUMsZ0JBQWtDO1lBQUEsSUFBSztjQUFBLGlDQUN0RjtnQkFBQSx1QkFDdUJBLGdCQUFnQixpQkFBcENDLFdBQVc7a0JBQ2pCO2tCQUFBLHVCQUNNQSxXQUFXLENBQUNDLE9BQU8sRUFBRTtvQkFDM0IsSUFBTW5ELGVBQWUsR0FBRyxPQUFLbkQsT0FBTyxFQUFFLENBQUN5QyxpQkFBaUIsRUFBYTtvQkFDckU7b0JBQ0E7b0JBQ0E7b0JBQUEsSUFDSSxDQUFDOEQsV0FBVyxDQUFDQyxtQkFBbUIsQ0FBQ0wsWUFBWSxDQUFDO3NCQUNqRCxJQUFNTSxZQUFZLEdBQUdGLFdBQVcsQ0FBQ0csZUFBZSxDQUFDLE9BQUsxRyxPQUFPLEVBQUUsQ0FBQztzQkFDaEV5RyxZQUFZLENBQUNFLHFCQUFxQixFQUFFLENBQUNDLHVDQUF1QyxDQUFDVCxZQUFZLENBQUMxRSxPQUFPLEVBQUUsRUFBRTBCLGVBQWUsQ0FBQztvQkFBQztrQkFBQTtnQkFBQTtjQUV4SCxDQUFDLFlBQVFnQixNQUFXLEVBQUU7Z0JBQ3JCeEMsR0FBRyxDQUFDRCxLQUFLLENBQUMsbUNBQW1DLEVBQUV5QyxNQUFNLENBQUM7Y0FDdkQsQ0FBQztjQUFBO1lBQ0YsQ0FBQztjQUFBO1lBQUE7VUFBQTs7VUFFRDtBQUNGO0FBQ0E7VUFDRSxJQUFNMEMsOEJBQThCLEdBQUcsVUFBQ0MsbUJBQTBCLEVBQUs7WUFBQTtZQUN0RSxJQUFNQyx5QkFBeUIsR0FBR2xDLE1BQU0sSUFBSUEsTUFBTSxDQUFDTSxjQUFjLEVBQUUsQ0FBQ0YsSUFBSSxDQUFDLDBCQUEwQixDQUFDO1lBQ3BHLElBQU0rQixlQUFlLEdBQUduQyxNQUFNLDhCQUFJQSxNQUFNLENBQUNwQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsMERBQXBDLHNCQUFzQ3dFLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztZQUNoSCxJQUFNQyxlQUFlLEdBQUdDLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUU7WUFDaEQsSUFBTUMsZUFBc0IsR0FBRyxFQUFFO1lBQ2pDLElBQUlDLGFBQWE7WUFDakIsSUFBSUMsT0FBZTs7WUFFbkI7WUFDQUwsZUFBZSxDQUNiTSxlQUFlLEVBQUUsQ0FDakJDLE9BQU8sRUFBRSxDQUNUQyxPQUFPLENBQUMsVUFBVUMsUUFBYSxFQUFFO2NBQ2pDLElBQUlBLFFBQVEsQ0FBQ0MsSUFBSSxLQUFLYix5QkFBeUIsRUFBRTtnQkFDaERHLGVBQWUsQ0FBQ1csY0FBYyxDQUFDRixRQUFRLENBQUM7Y0FDekM7WUFDRCxDQUFDLENBQUM7WUFFSGIsbUJBQW1CLENBQUNZLE9BQU8sQ0FBQyxVQUFDSSxrQkFBdUIsRUFBSztjQUN4RDtjQUNBLElBQUlBLGtCQUFrQixDQUFDQyxhQUFhLEVBQUU7Z0JBQUE7Z0JBQ3JDVCxhQUFhLEdBQUdILElBQUksQ0FBQ2EsVUFBVSxDQUFDaEIsZUFBZSxDQUFDYyxrQkFBa0IsQ0FBQ0MsYUFBYSxDQUFDLENBQUNFLE9BQU8sQ0FBWTtnQkFDckdWLE9BQU8sc0NBQU1ELGFBQWEsQ0FBQzdFLGlCQUFpQixFQUFFLDBEQUFqQyxzQkFBbUNoQixPQUFPLEVBQUUsY0FBSTZGLGFBQWEsQ0FBQ1ksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFFO2dCQUNwRztnQkFDQSxJQUNDaEIsZUFBZSxDQUNiTSxlQUFlLEVBQUUsQ0FDakJDLE9BQU8sRUFBRSxDQUNUVSxNQUFNLENBQUMsVUFBVVIsUUFBYSxFQUFFO2tCQUNoQyxPQUFPQSxRQUFRLENBQUNTLE1BQU0sS0FBS2IsT0FBTztnQkFDbkMsQ0FBQyxDQUFDLENBQUM1RCxNQUFNLEtBQUssQ0FBQyxFQUNmO2tCQUNEdUQsZUFBZSxDQUFDbUIsV0FBVyxDQUMxQixJQUFJQyxPQUFPLENBQUM7b0JBQ1hDLE9BQU8sRUFBRVQsa0JBQWtCLENBQUNVLFdBQVc7b0JBQ3ZDQyxTQUFTLEVBQUUsT0FBS3pJLE9BQU8sRUFBRSxDQUFDTCxRQUFRLEVBQUU7b0JBQ3BDK0ksSUFBSSxFQUFFaEssV0FBVyxDQUFDaUssS0FBSztvQkFDdkJmLElBQUksRUFBRWIseUJBQXlCO29CQUMvQjZCLFNBQVMsRUFBRSxLQUFLO29CQUNoQkMsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCVCxNQUFNLEVBQUViO2tCQUNULENBQUMsQ0FBQyxDQUNGO2dCQUNGO2dCQUNBO2dCQUNBLElBQU11QiwyQkFBMkIsR0FBRzVCLGVBQWUsQ0FDakRNLGVBQWUsRUFBRSxDQUNqQkMsT0FBTyxFQUFFLENBQ1RVLE1BQU0sQ0FBQyxVQUFVUixRQUFhLEVBQUU7a0JBQ2hDLE9BQU9BLFFBQVEsQ0FBQ1MsTUFBTSxLQUFLYixPQUFPO2dCQUNuQyxDQUFDLENBQUM7Z0JBQ0h1QiwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDL0IsZUFBZSxDQUFDYyxrQkFBa0IsQ0FBQ0MsYUFBYSxDQUFDLENBQUNFLE9BQU8sQ0FBQzs7Z0JBRXRHO2NBQ0QsQ0FBQyxNQUFNO2dCQUNOWixlQUFlLENBQUMyQixJQUFJLENBQUM7a0JBQ3BCcEIsSUFBSSxFQUFFYix5QkFBeUI7a0JBQy9Ca0MsSUFBSSxFQUFFbkIsa0JBQWtCLENBQUNVLFdBQVc7a0JBQ3BDSyxVQUFVLEVBQUUsSUFBSTtrQkFDaEJILElBQUksRUFBRWhLLFdBQVcsQ0FBQ2lLO2dCQUNuQixDQUFDLENBQUM7Y0FDSDtZQUNELENBQUMsQ0FBQztZQUVGLElBQUl0QixlQUFlLENBQUMxRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO2NBQy9CLE9BQUsxRCxrQkFBa0IsRUFBRSxDQUFDTyxpQkFBaUIsQ0FBQztnQkFDM0MwSSxjQUFjLEVBQUU3QjtjQUNqQixDQUFDLENBQUM7WUFDSDtVQUNELENBQUM7VUFFRCxJQUFNOEIsbUJBQW1CLEdBQUcsVUFDM0JDLG1CQUEyQixFQUMzQmpKLGdCQUF3QixFQUN4QmdHLFlBQThCLEVBQzlCL0MsVUFBMEIsRUFDZDtZQUNaLElBQUlnRyxtQkFBbUIsSUFBSUEsbUJBQW1CLEtBQUtqTCxZQUFZLENBQUNrTCxPQUFPLEVBQUU7Y0FDeEU7Y0FDQSxPQUFPRCxtQkFBbUI7WUFDM0IsQ0FBQyxNQUFNO2NBQ047Y0FDQSxJQUFJLENBQUNqRCxZQUFZLENBQUNtRCxVQUFVLEVBQUUsRUFBRTtnQkFDL0IsSUFBTUMsS0FBSyxHQUFHcEQsWUFBWSxDQUFDMUUsT0FBTyxFQUFFO2tCQUNuQztrQkFDQTtrQkFDQStILFVBQVUsR0FDVHJKLGdCQUFnQixLQUFLOUIsZ0JBQWdCLENBQUNzRSxLQUFLLEdBQ3hDUyxVQUFVLENBQUNHLFNBQVMsV0FBSWdHLEtBQUsseURBQXNELEdBQ25GbkcsVUFBVSxDQUFDRyxTQUFTLFdBQUlnRyxLQUFLLHVFQUFvRTtnQkFDdEcsSUFBSUMsVUFBVSxFQUFFO2tCQUNmLElBQU1DLFdBQVcsR0FBR3JHLFVBQVUsQ0FBQ0csU0FBUyxZQUFLaUcsVUFBVSxrQ0FBK0IsSUFBSSxFQUFFO2tCQUM1RjtrQkFDQSxJQUFJQyxXQUFXLENBQUM5RixNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixPQUFPeEYsWUFBWSxDQUFDdUwsUUFBUTtrQkFDN0I7Z0JBQ0Q7Y0FDRDtjQUNBLElBQU1DLFNBQVMsR0FBR3ZHLFVBQVUsQ0FBQ3dHLFdBQVcsQ0FBQ3pELFlBQVksQ0FBQzBELGdCQUFnQixFQUFFLENBQUNwSSxPQUFPLEVBQUUsQ0FBQztjQUNuRixJQUFNcUksNEJBQTRCLEdBQUd2RCxXQUFXLENBQUN3RCwyQkFBMkIsQ0FBQzNHLFVBQVUsRUFBRXVHLFNBQVMsRUFBRSxPQUFLM0osT0FBTyxFQUFFLENBQUM7Y0FDbkgsSUFBSThKLDRCQUE0QixDQUFDbkcsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDNUMsT0FBT3hGLFlBQVksQ0FBQ3VMLFFBQVE7Y0FDN0I7Y0FDQSxPQUFPdkwsWUFBWSxDQUFDNkwsS0FBSztZQUMxQjtVQUNELENBQUM7VUFFRCxJQUFJQyxlQUFlLEVBQUU7WUFDcEJDLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDQyxXQUFXLENBQUM7VUFDN0I7VUFBQyxvQ0FDRztZQUFBLHVCQUMrQixPQUFLdkgsU0FBUyxDQUFDa0MscUJBQXFCLENBQUMsaUJBQWpFK0IsbUJBQW1CO2NBQUE7Z0JBQUE7Z0JBcUZ6QixJQUFJdUQsV0FBVztnQkFDZixRQUFRQyxvQkFBb0I7a0JBQzNCLEtBQUtuTSxZQUFZLENBQUN1TCxRQUFRO29CQUN6QlcsV0FBVyxHQUFHRSxnQkFBZ0IsQ0FBQ0Msd0JBQXdCLENBQUNyRSxZQUFZLEVBQUU7c0JBQ3JFc0UsZ0JBQWdCLEVBQUUsSUFBSTtzQkFDdEJDLFFBQVEsRUFBRSxJQUFJO3NCQUNkQyxXQUFXLEVBQUU7b0JBQ2QsQ0FBQyxDQUFDO29CQUNGO2tCQUNELEtBQUt4TSxZQUFZLENBQUM2TCxLQUFLO29CQUN0QkssV0FBVyxHQUFHRSxnQkFBZ0IsQ0FBQ0Msd0JBQXdCLENBQUNyRSxZQUFZLEVBQUU7c0JBQ3JFeUUsWUFBWSxFQUFFN0UsU0FBUztzQkFDdkIyRSxRQUFRLEVBQUUsSUFBSTtzQkFDZEMsV0FBVyxFQUFFO29CQUNkLENBQUMsQ0FBQztvQkFDRjtrQkFDRCxLQUFLeE0sWUFBWSxDQUFDME0sSUFBSTtvQkFDckJDLEtBQUssR0FBRztzQkFDUEosUUFBUSxFQUFFLElBQUk7c0JBQ2RDLFdBQVcsRUFBRTtvQkFDZCxDQUFDO29CQUNELElBQUlJLGlCQUFpQixJQUFJMU0sZ0JBQWdCLENBQUNzQyxNQUFNLElBQUlxQixXQUFXLENBQUNnSixZQUFZLEVBQUU7c0JBQzdFRixLQUFLLENBQUNHLFNBQVMsR0FBRyxJQUFJO29CQUN2QjtvQkFDQVosV0FBVyxpQkFBR3RFLFNBQVMsK0NBQVQsV0FBVy9ILElBQUksQ0FBQyxVQUFVa04sbUJBQXdCLEVBQUU7c0JBQ2pFLElBQUksQ0FBQ0EsbUJBQW1CLEVBQUU7d0JBQ3pCLElBQU1DLGtCQUFrQixHQUFHaEUsSUFBSSxDQUFDaUUsd0JBQXdCLENBQUMsYUFBYSxDQUFDO3dCQUN2RSxPQUFPYixnQkFBZ0IsQ0FBQ2MscUJBQXFCLENBQzVDRixrQkFBa0IsQ0FBQ0csT0FBTyxDQUFDLG9DQUFvQyxDQUFDLEVBQ2hFOzBCQUNDQyxLQUFLLEVBQUVKLGtCQUFrQixDQUFDRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7MEJBQ3pERSxXQUFXLEVBQUVMLGtCQUFrQixDQUFDRyxPQUFPLENBQUMsOENBQThDO3dCQUN2RixDQUFDLENBQ0Q7c0JBQ0YsQ0FBQyxNQUFNO3dCQUNOO3dCQUNBO3dCQUNBLE9BQU90SixXQUFXLENBQUN5SixhQUFhLEdBQzdCbEIsZ0JBQWdCLENBQUNtQixpQkFBaUIsQ0FBQ1IsbUJBQW1CLEVBQUVKLEtBQUssQ0FBQyxHQUM5RFAsZ0JBQWdCLENBQUNDLHdCQUF3QixDQUFDVSxtQkFBbUIsRUFBRUosS0FBSyxDQUFDO3NCQUN6RTtvQkFDRCxDQUFDLENBQUM7b0JBQ0Y7a0JBQ0QsS0FBSzNNLFlBQVksQ0FBQ21ILE1BQU07b0JBQ3ZCWSxpQkFBaUIsQ0FBQ0MsWUFBWSxFQUFFSixTQUFTLENBQXFCO29CQUM5RCxPQUFLbEQsU0FBUyxDQUFDa0QsU0FBUyxDQUFDO29CQUN6QjtrQkFDRCxLQUFLNUgsWUFBWSxDQUFDdUcsV0FBVztvQkFDNUI7b0JBQ0E7b0JBQ0EsSUFBSTtzQkFDSCxJQUFNaUgsdUJBQXVCLEdBQUdDLG1CQUFtQixDQUFDQyxVQUFVLEVBQUU7c0JBRWhFLElBQUksQ0FBQzdKLFdBQVcsQ0FBQzhKLGdCQUFnQixFQUFFO3dCQUNsQzVGLGlCQUFpQixDQUFDQyxZQUFZLEVBQUVKLFNBQVMsQ0FBcUI7c0JBQy9EO3NCQUVBLElBQU1nRyxvQkFBb0IsR0FBR0osdUJBQXVCLENBQUNLLE1BQU0sRUFBRTtzQkFDN0RDLFlBQVksQ0FBQ0MsaUJBQWlCLENBQUNILG9CQUFvQixDQUFDOztzQkFFcEQ7c0JBQ0FBLG9CQUFvQixDQUFDekYsT0FBTyxFQUFFLENBQUM2RixLQUFLLENBQUMsWUFBWTt3QkFDaER4SyxHQUFHLENBQUN5SyxLQUFLLENBQUMseUNBQXlDLENBQUM7c0JBQ3JELENBQUMsQ0FBQztzQkFDRi9CLFdBQVcsR0FBR3VCLG1CQUFtQixDQUFDUyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUNwRCxDQUFDLENBQUMsT0FBT2xJLE1BQVcsRUFBRTtzQkFDckI7c0JBQ0EsSUFBSStGLFVBQVUsQ0FBQ29DLFFBQVEsQ0FBQyxPQUFLdE0sT0FBTyxFQUFFLENBQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUN2RHVLLFVBQVUsQ0FBQ3FDLE1BQU0sQ0FBQyxPQUFLdk0sT0FBTyxFQUFFLENBQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztzQkFDakQ7c0JBQ0FnQyxHQUFHLENBQUNELEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRXlDLE1BQU0sQ0FBQztvQkFDcEQ7b0JBQ0E7a0JBQ0Q7b0JBQ0NrRyxXQUFXLEdBQUd6SSxPQUFPLENBQUNDLE1BQU0sa0NBQTJCeUksb0JBQW9CLEVBQUc7b0JBQzlFO2dCQUFNO2dCQUdSLElBQU1rQyxrQkFBa0IsR0FDdkJ4SyxXQUFXLENBQUN5QyxZQUFZLEtBQUt0RyxZQUFZLENBQUN1RyxXQUFXLElBQUkxQyxXQUFXLENBQUN5QyxZQUFZLEtBQUt0RyxZQUFZLENBQUNtSCxNQUFNO2dCQUFDO2tCQUFBLElBQ3ZHUyxTQUFTO29CQUFBLDBCQUNSO3NCQUFBLHVCQUNtQm5FLE9BQU8sQ0FBQzZLLEdBQUcsQ0FBQyxDQUFDMUcsU0FBUyxFQUFFc0UsV0FBVyxDQUFDLENBQUMsaUJBQXJEcUMsT0FBTzt3QkFDYixPQUFLck0sbUNBQW1DLENBQUMwSyxpQkFBaUIsRUFBRTRCLE1BQU0sQ0FBQzt3QkFFbkUsSUFBSUgsa0JBQWtCLEVBQUU7MEJBQ3ZCLE9BQUtsTSxZQUFZLENBQUM5QixRQUFRLENBQUMrQixRQUFRLEVBQUVpTSxrQkFBa0IsQ0FBQzt3QkFDekQsQ0FBQyxNQUFNOzBCQUNOLE9BQUtsTSxZQUFZLENBQUM5QixRQUFRLENBQUMrQixRQUFRLENBQUM7d0JBQ3JDO3dCQUNBLElBQU0ySyxtQkFBbUIsR0FBR3dCLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQUM7MEJBQUEsSUFDbkN4QixtQkFBbUI7NEJBQ3RCLElBQUksQ0FBQyxPQUFLakssYUFBYSxFQUFFLEVBQUU7OEJBQzFCOEIsU0FBUyxDQUFDQyxpQkFBaUIsRUFBRTs0QkFDOUI7NEJBQ0EsT0FBSzRKLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDQyxNQUFNLEVBQUU1QixtQkFBbUIsQ0FBQzs0QkFBQzs4QkFBQSxJQUNyREgsaUJBQWlCLEtBQUsxTSxnQkFBZ0IsQ0FBQ3NDLE1BQU07Z0NBQ2hELE9BQUtDLGVBQWUsQ0FBQ3NLLG1CQUFtQixDQUFDOzhCQUFDO2dDQUFBO2tDQUFBLElBQ2hDckssV0FBVyxDQUFDQyw2QkFBNkIsQ0FBQzZMLE1BQU0sQ0FBQzVMLFlBQVksRUFBRSxDQUFDO29DQUMxRTtvQ0FBQSx1QkFDTUMsV0FBVyxDQUFDa0ssbUJBQW1CLENBQWM7a0NBQUE7Z0NBQUE7Z0NBQUE7OEJBQUE7NEJBQUE7NEJBQUE7MEJBQUE7d0JBQUE7d0JBQUE7c0JBQUE7b0JBR3RELENBQUMsWUFBUXhKLEtBQWMsRUFBRTtzQkFDeEI7c0JBQ0EsSUFDQ0EsS0FBSyxLQUFLcEQsU0FBUyxDQUFDeU8sa0JBQWtCLElBQ3RDckwsS0FBSyxLQUFLcEQsU0FBUyxDQUFDME8scUJBQXFCLElBQ3pDdEwsS0FBSyxLQUFLcEQsU0FBUyxDQUFDMk8sY0FBYyxFQUNqQzt3QkFDRDt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQSxJQUNDM0Msb0JBQW9CLEtBQUtuTSxZQUFZLENBQUMwTSxJQUFJLElBQzFDUCxvQkFBb0IsS0FBS25NLFlBQVksQ0FBQ3VMLFFBQVEsSUFDOUNZLG9CQUFvQixLQUFLbk0sWUFBWSxDQUFDNkwsS0FBSyxFQUMxQzswQkFDRE8sZ0JBQWdCLENBQUMyQyw4QkFBOEIsRUFBRTt3QkFDbEQ7c0JBQ0Q7c0JBQ0EsTUFBTXhMLEtBQUs7b0JBQ1osQ0FBQztrQkFBQTtnQkFBQTtjQUFBO2NBL01GLElBQUlvRixtQkFBbUIsQ0FBQ25ELE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ25Da0QsOEJBQThCLENBQUNDLG1CQUFtQixDQUFDO2dCQUNuRG5GLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLDBCQUEwQixDQUFDO2dCQUNyQztnQkFDQTtjQUNEO2NBRUEsSUFBSXlFLFlBQWlCO2NBQ3JCbkUsV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO2NBRS9CLElBQUl1QyxZQUFZLElBQUksT0FBT0EsWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDckQ7Z0JBQ0E0QixZQUFZLEdBQUc1QixZQUFZO2NBQzVCLENBQUMsTUFBTSxJQUFJLE9BQU9BLFlBQVksS0FBSyxRQUFRLEVBQUU7Z0JBQzVDNEIsWUFBWSxHQUFHLElBQUtnSCxnQkFBZ0IsQ0FBUyxPQUFLbk4sT0FBTyxFQUFFLENBQUNMLFFBQVEsRUFBRSxFQUFFNEUsWUFBWSxDQUFDO2dCQUNyRnZDLFdBQVcsQ0FBQ3lDLFlBQVksR0FBR3RHLFlBQVksQ0FBQzBNLElBQUk7Z0JBQzVDLE9BQU83SSxXQUFXLENBQUNnRSxXQUFXO2NBQy9CLENBQUMsTUFBTTtnQkFDTixNQUFNLElBQUkyQyxLQUFLLENBQUMsaUNBQWlDLENBQUM7Y0FDbkQ7Y0FFQSxJQUFNZ0UsTUFBTSxHQUFHeEcsWUFBWSxDQUFDeEcsUUFBUSxFQUFFO2NBQ3RDLElBQU1vTCxpQkFBeUIsR0FBRyxPQUFLM0ssb0JBQW9CLENBQUMrRixZQUFZLENBQUM7Y0FDekUsSUFBTW1FLG9CQUFvQixHQUFHbkIsbUJBQW1CLENBQy9DbkgsV0FBVyxDQUFDeUMsWUFBWSxFQUN4QnNHLGlCQUFpQixFQUNqQjVFLFlBQVksRUFDWndHLE1BQU0sQ0FBQzVMLFlBQVksRUFBRSxDQUNyQjtjQUNELElBQUkrSixLQUFVO2NBQ2QsSUFBTW1CLFlBQVksR0FBR2pLLFdBQVcsQ0FBQzJDLFdBQVc7Y0FDNUMsSUFBSWlILG1CQUF3QjtjQUM1QixJQUFJd0IsUUFBYTtjQUNqQixJQUFJekQsU0FBaUI7Y0FDckIsSUFBTXZHLFVBQVUsR0FBR3VKLE1BQU0sQ0FBQzVMLFlBQVksRUFBRTtjQUN4QyxJQUFNd0osZ0JBQWdCLEdBQUcsT0FBSzhDLG1CQUFtQixFQUFFO2NBQUM7Z0JBQUEsSUFFaEQvQyxvQkFBb0IsS0FBS25NLFlBQVksQ0FBQ3VMLFFBQVE7a0JBQUE7b0JBaUJqRCxJQUFJWSxvQkFBb0IsS0FBS25NLFlBQVksQ0FBQ3VHLFdBQVcsSUFBSTRGLG9CQUFvQixLQUFLbk0sWUFBWSxDQUFDbUgsTUFBTSxFQUFFO3NCQUFBO3NCQUN0R3RELFdBQVcsQ0FBQ3NMLDRCQUE0QixHQUFHLEtBQUssQ0FBQyxDQUFDO3NCQUNsRDtzQkFDQXRMLFdBQVcsQ0FBQ3VMLFFBQVEsR0FBRyxPQUFPO3NCQUM5QnZMLFdBQVcsQ0FBQ3dMLE1BQU0sY0FBRzNJLE1BQU0saUVBQU4sUUFBUUMsU0FBUyxFQUFFLCtFQUFuQixrQkFBcUIySSxrQkFBa0IsRUFBRSwwREFBekMsc0JBQTJDQyxVQUFVLENBQUNDLEVBQUU7O3NCQUU3RTtzQkFDQTtzQkFDQSxPQUFLQyxtQkFBbUIsQ0FBQ3pILFlBQVksQ0FBQztvQkFDdkM7b0JBRUEsSUFBSSxDQUFDbkUsV0FBVyxDQUFDNkwsYUFBYSxFQUFFO3NCQUMvQjdMLFdBQVcsQ0FBQzZMLGFBQWEsR0FBRyxPQUFLN04sT0FBTyxFQUFFO29CQUMzQztvQkFDQWdDLFdBQVcsQ0FBQzhMLG9CQUFvQixHQUFHLE9BQUtqTyxJQUFJLENBQUNDLFFBQVEsQ0FBQ2lPLGNBQWM7O29CQUVwRTtvQkFDQTtvQkFDQS9MLFdBQVcsQ0FBQ2dNLG1CQUFtQixHQUFHQyxhQUFhLENBQUNDLGNBQWMsRUFBRSxLQUFLelAsV0FBVyxDQUFDMFAsVUFBVTtvQkFFM0ZwSSxTQUFTLEdBQUd6RyxpQkFBaUIsQ0FBQ2dGLGNBQWMsQ0FDM0M2QixZQUFZLEVBQ1puRSxXQUFXLEVBQ1hvTSxlQUFlLEVBQ2YsT0FBS25PLGtCQUFrQixFQUFFLEVBQ3pCLEtBQUssRUFDTCxPQUFLRCxPQUFPLEVBQUUsQ0FDZDtrQkFBQztrQkFBQTtvQkFBQSxJQTNDRXNLLG9CQUFvQixLQUFLbk0sWUFBWSxDQUFDdUcsV0FBVztzQkFDcERrSCxtQkFBbUIsR0FBR0ssWUFBWSxDQUFDeEosaUJBQWlCLEVBQUU7c0JBQ3REa0gsU0FBUyxHQUFHdkcsVUFBVSxDQUFDd0csV0FBVyxDQUFDZ0MsbUJBQW1CLENBQUNuSyxPQUFPLEVBQUUsQ0FBQztzQkFDakU7c0JBQ0EyTCxRQUFRLEdBQUd4QixtQkFBbUIsQ0FBQ3JJLFNBQVMsRUFBRTtzQkFDMUN2QixXQUFXLENBQUNpRCxJQUFJLEdBQUcsQ0FBQyxDQUFDO3NCQUNyQm9KLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbEIsUUFBUSxDQUFDLENBQUMxRixPQUFPLENBQUMsVUFBVTZHLGFBQXFCLEVBQUU7d0JBQzlELElBQU1DLFNBQVMsR0FBR3BMLFVBQVUsQ0FBQ0csU0FBUyxXQUFJb0csU0FBUyxjQUFJNEUsYUFBYSxFQUFHO3dCQUN2RTt3QkFDQSxJQUFJQyxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsS0FBSyxLQUFLLG9CQUFvQixFQUFFOzBCQUMxRDt3QkFDRDt3QkFDQXpNLFdBQVcsQ0FBQ2lELElBQUksQ0FBQ3NKLGFBQWEsQ0FBQyxHQUFHbkIsUUFBUSxDQUFDbUIsYUFBYSxDQUFDO3NCQUMxRCxDQUFDLENBQUM7c0JBQUMsdUJBQ0csT0FBS0cseUJBQXlCLEVBQUMsd0JBQXdCO29CQUFBO2tCQUFBO2tCQUFBO2dCQUFBO2NBQUE7Y0FBQTtZQUFBO1VBNkpoRSxDQUFDO1lBQ0EsSUFBSXpFLGVBQWUsRUFBRTtjQUNwQkMsVUFBVSxDQUFDcUMsTUFBTSxDQUFDbkMsV0FBVyxDQUFDO1lBQy9CO1lBQUM7WUFBQTtVQUFBO1FBQUE7UUFyWkYsSUFBTTlLLGlCQUFpQixHQUFHLE9BQUtDLHFCQUFxQixFQUFFO1VBQ3JENkssV0FBVyxHQUFHLE9BQUt1RSxpQkFBaUIsRUFBRTtRQUN2QyxJQUFJOUosTUFBVyxDQUFDLENBQUM7UUFDakIsSUFBSTdDLFdBQWdCLEdBQUd3QyxhQUFhO1FBQ3BDLElBQUl1QixTQUF1QztRQUMzQyxJQUFNcUksZUFBZSxHQUFHLE9BQUtRLGtCQUFrQixFQUFFO1FBQ2pELElBQU0zRSxlQUFlLEdBQ3BCLENBQUNqSSxXQUFXLElBQ1hBLFdBQVcsQ0FBQ3lDLFlBQVksS0FBS3RHLFlBQVksQ0FBQ21ILE1BQU0sSUFDaER0RCxXQUFXLENBQUN5QyxZQUFZLEtBQUt0RyxZQUFZLENBQUN1RyxXQUFXLElBQ3JEMUMsV0FBVyxDQUFDeUMsWUFBWSxLQUFLdEcsWUFBWSxDQUFDMFEsUUFBUztRQUNyRCxJQUFJOUoscUJBQXFCLEdBQUduRCxPQUFPLENBQUNrTixPQUFPLENBQUMsRUFBRSxDQUFDO1FBQy9DLElBQU1iLGFBQWEsR0FBRzFILFdBQVcsQ0FBQ0csZUFBZSxDQUFDLE9BQUsxRyxPQUFPLEVBQUUsQ0FBQztRQUNqRWlPLGFBQWEsQ0FBQ2MsY0FBYyxFQUFFLENBQUNDLGtCQUFrQixFQUFFO1FBQUM7VUFBQSxJQUVoRGhOLFdBQVcsQ0FBQ3lDLFlBQVksS0FBS3RHLFlBQVksQ0FBQzBRLFFBQVE7WUFDckQ7WUFDQTtZQUFBLHVCQUNNLE9BQUtoTSxTQUFTLEVBQUU7Y0FDdEIsSUFBTW9NLFdBQVcsR0FBRyxPQUFLalAsT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUU7Y0FDbEQsSUFBTStNLFdBQVcsR0FBR3JPLFdBQVcsQ0FBQ3NPLGlDQUFpQyxDQUFDLE9BQUtuUCxPQUFPLEVBQUUsRUFBRXVFLFlBQVksQ0FBQztjQUU5RjBLLFdBQVcsQ0FBU0csUUFBUSxDQUFDQyw4QkFBOEIsQ0FBQ0osV0FBVyxFQUFFak4sV0FBVyxDQUFDc04sUUFBUSxFQUFFQyxTQUFTLEVBQUVMLFdBQVcsQ0FBQztjQUFDO1lBQUE7VUFBQTtRQUFBO1FBQUE7TUFpWTFILENBQUM7UUFBQTtNQUFBO0lBQUE7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQWZDO0lBQUE7SUFrQkE7SUFDQU0sWUFBWSxHQUhaLHNCQUdheE4sV0FBbUMsRUFBaUI7TUFDaEU7TUFDQSxPQUFPSixPQUFPLENBQUNrTixPQUFPLEVBQUU7SUFDekI7SUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BaEJDO0lBQUE7SUFtQkE7SUFDQWYsY0FBYyxHQUhkLHdCQUdlL0wsV0FBZ0UsRUFBaUI7TUFDL0Y7TUFDQSxPQUFPSixPQUFPLENBQUNrTixPQUFPLEVBQUU7SUFDekI7SUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWZDO0lBQUE7SUFrQkE7SUFDQS9PLFlBQVksR0FIWixzQkFHYWlDLFdBQW1DLEVBQWlCO01BQ2hFO01BQ0EsT0FBT0osT0FBTyxDQUFDa04sT0FBTyxFQUFFO0lBQ3pCO0lBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FmQztJQUFBO0lBa0JBO0lBQ0FXLGVBQWUsR0FIZix5QkFHZ0J6TixXQUFtQyxFQUFpQjtNQUNuRTtNQUNBLE9BQU9KLE9BQU8sQ0FBQ2tOLE9BQU8sRUFBRTtJQUN6QjtJQUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BZkM7SUFBQTtJQWtCQTtJQUNBNU0sY0FBYyxHQUhkLHdCQUdlRixXQUFzQyxFQUFpQjtNQUNyRTtNQUNBLE9BQU9KLE9BQU8sQ0FBQ2tOLE9BQU8sRUFBRTtJQUN6Qjs7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBO0lBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBLE9BWU1ZLFlBQVkseUJBQUNwTixRQUFtQixFQUFFTixXQUFnQjtNQUFBLElBQWlCO1FBQUEsYUFJOUMsSUFBSTtRQUg5QkEsV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQU0yTiwwQkFBMEIsR0FBRzNOLFdBQVcsQ0FBQzJOLDBCQUEwQixJQUFJSixTQUFTO1FBQ3RGLElBQU1sUSxnQkFBZ0IsR0FBRyxJQUFJO1FBQzdCLElBQU1DLGlCQUFpQixHQUFHLE9BQUtDLHFCQUFxQixFQUFFO1FBQ3RELElBQU02TyxlQUFlLEdBQUcsT0FBS1Esa0JBQWtCLEVBQUU7UUFDakQsSUFBTWdCLFNBQVMsR0FBRzVOLFdBQVcsQ0FBQzZOLFFBQVE7UUFBQywwQ0FFbkM7VUFBQSx1QkFDRyxPQUFLaE4sU0FBUyxFQUFFO1lBQUEsdUJBQ2hCLE9BQUtpTixrQkFBa0IsQ0FBQ3hOLFFBQVEsQ0FBQztjQUFBLHVCQUNqQyxPQUFLb00seUJBQXlCLEVBQUU7Z0JBQUEsdUJBQ2hDLE9BQUs3TyxJQUFJLENBQUNDLFFBQVEsQ0FBQzBQLFlBQVksQ0FBQztrQkFBRXBRLE9BQU8sRUFBRWtEO2dCQUFTLENBQUMsQ0FBQztrQkFBQTtvQkFBQSx1QkFrQnhCaEQsaUJBQWlCLENBQUNvUSxZQUFZLENBQ2pFcE4sUUFBUSxFQUNSOEwsZUFBZSxFQUNmdUIsMEJBQTBCLEVBQzFCQyxTQUFTLEVBQ1QsT0FBSzNQLGtCQUFrQixFQUFFLEVBQ3pCK0IsV0FBVyxDQUNYLGlCQVBLK04scUJBQXFCO3NCQVEzQixPQUFLQyxzQ0FBc0MsQ0FBQ2pGLGlCQUFpQixDQUFDO3NCQUU5RCxPQUFLNkIsYUFBYSxDQUFDQyxRQUFRLENBQUNvRCxRQUFRLEVBQUVGLHFCQUFxQixDQUFDO3NCQUM1RCxPQUFLRyx3QkFBd0IsQ0FBQ0MsZUFBZSxDQUFDQyxJQUFJLEVBQUVDLFdBQVcsQ0FBQ0MsY0FBYyxDQUFDO3NCQUUvRSxPQUFLaFEsWUFBWSxDQUFDOUIsUUFBUSxDQUFDK1IsT0FBTyxFQUFFLEtBQUssQ0FBQztzQkFDMUMsT0FBS3RRLGtCQUFrQixFQUFFLENBQUNPLGlCQUFpQixFQUFFO3NCQUFDO3dCQUFBLElBRTFDdVAscUJBQXFCLEtBQUt6TixRQUFROzBCQUNyQyxJQUFJNUIsbUJBQWlCLEdBQUdxUCxxQkFBcUI7MEJBQzdDLElBQUl2USxtQkFBbUIsQ0FBQ2dSLFlBQVksRUFBRSxFQUFFOzRCQUFBOzRCQUN2Q3BQLFdBQVcsb0JBQUdBLFdBQVcseURBQUksT0FBS0Msa0JBQWtCLENBQUNpQixRQUFRLEVBQUV5TixxQkFBcUIsQ0FBQzs0QkFDckYsT0FBS3pPLHFCQUFxQixDQUFDRixXQUFXLENBQUNHLFdBQVcsQ0FBQzs0QkFDbkQsSUFBSUgsV0FBVyxDQUFDSSxhQUFhLENBQUNDLE9BQU8sRUFBRSxLQUFLc08scUJBQXFCLENBQUN0TyxPQUFPLEVBQUUsRUFBRTs4QkFDNUVmLG1CQUFpQixHQUFHVSxXQUFXLENBQUNJLGFBQWE7NEJBQzlDOzBCQUNEOzBCQUFDLHVCQUVLLE9BQUtmLGlCQUFpQixDQUFDQyxtQkFBaUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFckIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO3dCQUFBO3NCQUFBO3NCQUFBO29CQUFBO2tCQUFBO2tCQTFDdEYsSUFBTTBMLGlCQUFpQixHQUFHLE9BQUszSyxvQkFBb0IsQ0FBQ2tDLFFBQVEsQ0FBQztrQkFDN0QsSUFBTTlDLG1CQUFtQixHQUFHLE9BQUtDLHNCQUFzQixFQUFTO2tCQUNoRSxJQUFJMkIsV0FBMkM7a0JBQUM7b0JBQUEsSUFFL0MsQ0FBQzJKLGlCQUFpQixLQUFLMU0sZ0JBQWdCLENBQUNzQyxNQUFNLElBQUkyQixRQUFRLENBQUMyRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FDekZ6SCxtQkFBbUIsQ0FBQ2dSLFlBQVksRUFBRTtzQkFFbEM7c0JBQUEsdUJBQ29CLE9BQUtyUCwwQkFBMEIsQ0FDbERtQixRQUFRLEVBQ1I5QyxtQkFBbUIsQ0FBQzBCLG1CQUFtQixFQUFFLEVBQ3pDNkosaUJBQWlCLEVBQ2pCLElBQUksQ0FDSjt3QkFMRDNKLFdBQVcsd0JBS1Y7c0JBQUM7b0JBQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Y0FBQTtZQUFBO1VBQUE7UUErQkosQ0FBQyxZQUFRK0MsTUFBVyxFQUFFO1VBQ3JCLElBQUksRUFBRUEsTUFBTSxJQUFJQSxNQUFNLENBQUNzTSxRQUFRLENBQUMsRUFBRTtZQUNqQzlPLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLGlDQUFpQyxFQUFFeUMsTUFBTSxDQUFDO1VBQ3JEO1VBQ0EsT0FBT3ZDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDc0MsTUFBTSxDQUFDO1FBQzlCLENBQUM7TUFDRixDQUFDO1FBQUE7TUFBQTtJQUFBO0lBQUEsT0FHS3VNLGlCQUFpQiw4QkFBQ3BPLFFBQW1CO01BQUEsSUFBaUI7UUFBQSxhQUc5QixJQUFJO1FBRmpDLElBQU1xTyxZQUFZLEdBQUdyTyxRQUFRLENBQUNpQixTQUFTLEVBQUU7UUFDekMsSUFBSXFOLFNBQWtCO1FBQ3RCLElBQU1sTyxRQUFRLEdBQUdKLFFBQVEsSUFBSSxPQUFLbEMsb0JBQW9CLENBQUNrQyxRQUFRLENBQUMsS0FBS2pFLGdCQUFnQixDQUFDc0UsS0FBSzs7UUFFM0Y7UUFDQSxJQUNDLENBQUNELFFBQVEsSUFDVCxFQUNFLENBQUNpTyxZQUFZLENBQUNFLGNBQWMsSUFBSUYsWUFBWSxDQUFDRyxlQUFlLElBQzVESCxZQUFZLENBQUNFLGNBQWMsSUFBSUYsWUFBWSxDQUFDSSxjQUFlLENBQzVELEVBQ0E7VUFDRDtRQUNEO1FBRUEsSUFBSSxDQUFDSixZQUFZLENBQUNFLGNBQWMsSUFBSUYsWUFBWSxDQUFDRyxlQUFlLEVBQUU7VUFDakU7VUFDQUYsU0FBUyxHQUFHLEtBQUs7UUFDbEIsQ0FBQyxNQUFNO1VBQ047VUFDQUEsU0FBUyxHQUFHLElBQUk7UUFDakI7UUFBQywwQ0FFRztVQUNILElBQU1wUixtQkFBbUIsR0FBRyxPQUFLQyxzQkFBc0IsRUFBUztVQUNoRSxJQUFNdVIsaUJBQWlCLEdBQUd4UixtQkFBbUIsQ0FBQ2dSLFlBQVksRUFBRSxHQUFHaFIsbUJBQW1CLENBQUMwQixtQkFBbUIsRUFBRSxHQUFHb0IsUUFBUTtVQUFDLHVCQUM1RixPQUFLbkIsMEJBQTBCLENBQUNtQixRQUFRLEVBQUUwTyxpQkFBaUIsRUFBRTNTLGdCQUFnQixDQUFDc0UsS0FBSyxFQUFFLEtBQUssQ0FBQyxpQkFBL0d2QixXQUFXO1lBQUE7Y0FBQTtnQkFBQSxJQU1YQSxXQUFXO2tCQUNkLE9BQUtkLFlBQVksQ0FBQ3NRLFNBQVMsR0FBR3BTLFFBQVEsQ0FBQytCLFFBQVEsR0FBRy9CLFFBQVEsQ0FBQytSLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDOztrQkFFNUUsSUFBSS9RLG1CQUFtQixDQUFDZ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ3ZDLElBQU1TLG1CQUFtQixHQUFHLE9BQUtwTixtQkFBbUIsRUFBRTtvQkFDdEQsSUFBSSxDQUFBb04sbUJBQW1CLGFBQW5CQSxtQkFBbUIsdUJBQW5CQSxtQkFBbUIsQ0FBRUMsYUFBYSxNQUFLNU8sUUFBUSxDQUFDYixPQUFPLEVBQUUsRUFBRTtzQkFDOUQsSUFBTTBQLFVBQVUsR0FBRy9QLFdBQVcsQ0FBQ0csV0FBVyxDQUFDSCxXQUFXLENBQUNHLFdBQVcsQ0FBQ29DLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ3lOLE9BQU87c0JBQ3RGaFEsV0FBVyxDQUFDRyxXQUFXLENBQUN5SCxJQUFJLENBQUM7d0JBQUVxSSxPQUFPLEVBQUVKLG1CQUFtQixDQUFDbE4sWUFBWTt3QkFBRXFOLE9BQU8sRUFBRUQ7c0JBQVcsQ0FBQyxDQUFDO29CQUNqRztvQkFDQSxPQUFLN1AscUJBQXFCLENBQUNGLFdBQVcsQ0FBQ0csV0FBVyxDQUFDO2tCQUNwRDtrQkFBQyx1QkFFSyxPQUFLZCxpQkFBaUIsQ0FBQ1csV0FBVyxDQUFDSSxhQUFhLEVBQUVvUCxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQUE7a0JBRXBGLE9BQU9oUCxPQUFPLENBQUNDLE1BQU0sQ0FBQywyREFBMkQsQ0FBQztnQkFBQztjQUFBO1lBQUE7WUFBQTtjQUFBLElBbkJoRixDQUFDVCxXQUFXLElBQUlrQixRQUFRLEtBQUswTyxpQkFBaUI7Z0JBQ2pEO2dCQUNBO2dCQUFBLHVCQUNvQixPQUFLN1AsMEJBQTBCLENBQUNtQixRQUFRLEVBQUVBLFFBQVEsRUFBRWpFLGdCQUFnQixDQUFDc0UsS0FBSyxFQUFFLEtBQUssQ0FBQztrQkFBdEd2QixXQUFXLHdCQUEyRjtnQkFBQztjQUFBO1lBQUE7WUFBQTtVQUFBO1FBa0J6RyxDQUFDLFlBQVErQyxNQUFNLEVBQUU7VUFDaEIsT0FBT3ZDLE9BQU8sQ0FBQ0MsTUFBTSwrQ0FBd0NzQyxNQUFNLEVBQVU7UUFDOUUsQ0FBQztNQUNGLENBQUM7UUFBQTtNQUFBO0lBQUEsRUFFRDtJQUNBO0lBQ0E7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQVpDO0lBQUEsT0FlTW1OLGNBQWMsMkJBQUNoUCxRQUFtQixFQUFFTixXQUE4RDtNQUFBLElBQWdCO1FBQUEsY0FDN0YsSUFBSTtRQUE5QixJQUFNMUMsaUJBQWlCLEdBQUcsUUFBS0MscUJBQXFCLEVBQUU7UUFDdEQsSUFBTTZPLGVBQWUsR0FBRyxRQUFLUSxrQkFBa0IsRUFBRTtRQUNqRCxJQUFNcEssYUFBa0IsR0FBR3hDLFdBQVc7UUFDdEMsSUFBSVosYUFBMkM7UUFFL0NvRCxhQUFhLENBQUMrTSxZQUFZLEdBQUd2UCxXQUFXLENBQUN3UCxPQUFPLElBQUloTixhQUFhLENBQUMrTSxZQUFZO1FBQzlFL00sYUFBYSxDQUFDaU4sb0JBQW9CLEdBQUcsUUFBSzVSLElBQUksQ0FBQ0MsUUFBUSxDQUFDMlAsZUFBZTtRQUFDLDBDQUVwRTtVQUFBLHVCQUNHLFFBQUs1TSxTQUFTLEVBQUU7WUFBQTtjQUFBLHVCQWNLdkQsaUJBQWlCLENBQUNnUyxjQUFjLENBQzFEaFAsUUFBUSxFQUNSa0MsYUFBYSxFQUNiNEosZUFBZSxFQUNmLFFBQUtuTyxrQkFBa0IsRUFBRSxDQUN6QixpQkFMS3lSLFlBQVk7Z0JBTWxCLElBQU1yUyxnQkFBZ0IsR0FBRyxJQUFJO2dCQUM3QixRQUFLMlEsc0NBQXNDLENBQUNqRixpQkFBaUIsQ0FBQztnQkFFOUQsUUFBS3pLLFlBQVksQ0FBQzlCLFFBQVEsQ0FBQytSLE9BQU8sRUFBRSxLQUFLLENBQUM7Z0JBQzFDLFFBQUt0TixlQUFlLENBQUMxRSxXQUFXLENBQUM2RixLQUFLLENBQUM7Z0JBQ3ZDO2dCQUNBO2dCQUNBckIsU0FBUyxDQUFDQyxpQkFBaUIsRUFBRTtnQkFBQztrQkFBQSxJQUUxQixDQUFDME8sWUFBWTtvQkFDaEIsUUFBSzlFLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDOEUsT0FBTyxFQUFFcEMsU0FBUyxDQUFDO29CQUMvQztvQkFBQTtzQkFBQSxJQUNJLENBQUMvSyxhQUFhLENBQUNvTixrQkFBa0I7d0JBQUEsdUJBQzlCLFFBQUt2RSxtQkFBbUIsRUFBRSxDQUFDd0UsdUJBQXVCLENBQUN2UCxRQUFRLENBQUM7c0JBQUE7b0JBQUE7b0JBQUE7a0JBQUE7b0JBR25FLElBQU13UCxzQkFBc0IsR0FBR0osWUFBeUI7b0JBQ3hELFFBQUs5RSxhQUFhLENBQUNDLFFBQVEsQ0FBQzhFLE9BQU8sRUFBRUcsc0JBQXNCLENBQUM7b0JBQzVELElBQUlwUixtQkFBaUIsR0FBR29SLHNCQUFzQjtvQkFDOUMsSUFBSSxRQUFLN1EsYUFBYSxFQUFFLEVBQUU7c0JBQUE7c0JBQ3pCRyxhQUFXLG9CQUFHQSxhQUFXLHlEQUFJLFFBQUtDLGtCQUFrQixDQUFDaUIsUUFBUSxFQUFFd1Asc0JBQXNCLENBQUM7c0JBQ3RGLFFBQUt4USxxQkFBcUIsQ0FBQ0YsYUFBVyxDQUFDRyxXQUFXLENBQUM7c0JBQ25ELElBQUlILGFBQVcsQ0FBQ0ksYUFBYSxDQUFDQyxPQUFPLEVBQUUsS0FBS3FRLHNCQUFzQixDQUFDclEsT0FBTyxFQUFFLEVBQUU7d0JBQzdFZixtQkFBaUIsR0FBR1UsYUFBVyxDQUFDSSxhQUFhO3NCQUM5QztvQkFDRDtvQkFBQztzQkFBQSxJQUVHdUosaUJBQWlCLEtBQUsxTSxnQkFBZ0IsQ0FBQ3NFLEtBQUs7d0JBQy9DO3dCQUNBO3dCQUFBLHVCQUNNLFFBQUtvUCx1QkFBdUIsQ0FBQ0Qsc0JBQXNCLENBQUM7MEJBQzFEOzBCQUNBOzBCQUNBOzBCQUFBOzRCQUFBLElBQ0ksQ0FBQ3ROLGFBQWEsQ0FBQ3dOLGlCQUFpQjs4QkFBQSx1QkFDN0IsUUFBS3ZSLGlCQUFpQixDQUFDQyxtQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFckIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDOzRCQUFBOzhCQUVwRixPQUFPeVMsc0JBQXNCOzRCQUFDOzBCQUFBO3dCQUFBO3NCQUFBO3dCQUcvQjt3QkFBQSx1QkFDTSxRQUFLclIsaUJBQWlCLENBQUNDLG1CQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUVyQixnQkFBZ0IsRUFBRSxJQUFJLENBQUM7c0JBQUE7b0JBQUE7a0JBQUE7Z0JBQUE7Y0FBQTtZQUFBO1lBNUR2RixJQUFNMEwsaUJBQWlCLEdBQUcsUUFBSzNLLG9CQUFvQixDQUFDa0MsUUFBUSxDQUFDO1lBQUM7Y0FBQSxJQUMxRCxDQUFDeUksaUJBQWlCLEtBQUsxTSxnQkFBZ0IsQ0FBQ3NDLE1BQU0sSUFBSTJCLFFBQVEsQ0FBQzJFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLFFBQUtoRyxhQUFhLEVBQUU7Z0JBQ3JILElBQU16QixvQkFBbUIsR0FBRyxRQUFLQyxzQkFBc0IsRUFBUzs7Z0JBRWhFO2dCQUFBLHVCQUNvQixRQUFLMEIsMEJBQTBCLENBQ2xEbUIsUUFBUSxFQUNSOUMsb0JBQW1CLENBQUMwQixtQkFBbUIsRUFBRSxFQUN6QzZKLGlCQUFpQixFQUNqQixJQUFJLENBQ0o7a0JBTEQzSixhQUFXLHdCQUtWO2dCQUFDO2NBQUE7WUFBQTtZQUFBO1VBQUE7UUFxREosQ0FBQyxZQUFRK0MsTUFBTSxFQUFFO1VBQ2hCeEMsR0FBRyxDQUFDRCxLQUFLLENBQUMscUNBQXFDLEVBQUV5QyxNQUFNLENBQVE7UUFDaEUsQ0FBQztNQUNGLENBQUM7UUFBQTtNQUFBO0lBQUEsRUFFRDtJQUNBO0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFOQztJQUFBLE9BT1U4TixXQUFXLEdBQXJCLHFCQUFzQjdTLE9BQWdCLEVBQVc7TUFDaEQsSUFBTThTLFNBQVMsR0FBRzlTLE9BQU8sQ0FBQ08sUUFBUSxFQUFFLENBQUNvQixZQUFZLEVBQUU7TUFDbkQsSUFBTW9SLFdBQVcsR0FBR0QsU0FBUyxDQUFDNU8sY0FBYyxDQUFDbEUsT0FBTyxDQUFDcUMsT0FBTyxFQUFFLENBQUM7TUFDL0QsT0FBT1osV0FBVyxDQUFDb1IsV0FBVyxDQUFDRywyQkFBMkIsQ0FBQ0QsV0FBVyxDQUFDLENBQUNFLGVBQWUsQ0FBQztJQUN6Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVpDO0lBQUEsT0FlTUMsY0FBYywyQkFBQ2hRLFFBQWlCLEVBQUVrQyxhQUFxRDtNQUFBLElBQWlCO1FBQUEsY0FDM0QsSUFBSTtRQUF0RCxJQUFNeUosYUFBYSxHQUFHMUgsV0FBVyxDQUFDRyxlQUFlLENBQUMsUUFBSzFHLE9BQU8sRUFBRSxDQUFDO1FBQ2pFLElBQUlnQyxXQUFnQixHQUFHd0MsYUFBYTtRQUNwQyxJQUFJLENBQUN4QyxXQUFXLEVBQUU7VUFDakJBLFdBQVcsR0FBRztZQUNidVEsbUJBQW1CLEVBQUU7VUFDdEIsQ0FBQztRQUNGLENBQUMsTUFBTTtVQUNOdlEsV0FBVyxDQUFDdVEsbUJBQW1CLEdBQUcsS0FBSztRQUN4QztRQUNBdlEsV0FBVyxDQUFDQyxvQkFBb0IsR0FBRyxRQUFLcEMsSUFBSSxDQUFDQyxRQUFRLENBQUNvQyxjQUFjO1FBQUMsaUNBRWpFO1VBQ0gsSUFDQyxRQUFLakIsYUFBYSxFQUFFLElBQ3BCLFFBQUtnUixXQUFXLENBQUMzUCxRQUFRLENBQUMsSUFDMUJBLFFBQVEsQ0FBQ2tRLFFBQVEsRUFBRSxLQUFLakQsU0FBUyxJQUNqQ2pOLFFBQVEsQ0FBQzJFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksSUFDL0MzRSxRQUFRLENBQUMyRSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQzlDO1lBQ0Q7WUFDQTtZQUNBO1lBQ0FqRixXQUFXLENBQUNDLG9CQUFvQixhQUFVd1EsVUFBcUM7Y0FBQSxJQUFLO2dCQUFBLHVCQUM3RSxRQUFLNVMsSUFBSSxDQUFDQyxRQUFRLENBQUNvQyxjQUFjLENBQUN1USxVQUFVLENBQUM7a0JBQUEsaUNBQy9DO29CQUNILElBQU0vUyxLQUFLLEdBQUc0QyxRQUFRLENBQUMzQyxRQUFRLEVBQUU7b0JBQ2pDLElBQU0rUyxjQUFjLEdBQUdoVCxLQUFLLENBQUNpVCxXQUFXLFdBQUlyUSxRQUFRLENBQUNiLE9BQU8sRUFBRSxvQkFBaUIsQ0FBQ21SLGVBQWUsRUFBRTtvQkFBQyx1QkFDMUVGLGNBQWMsQ0FBQ0csb0JBQW9CLEVBQUUsaUJBQXZEQyxTQUFTO3NCQUNmLElBQU1DLG9CQUFvQixHQUFHclQsS0FBSyxDQUFDc1QsbUJBQW1CLENBQUNGLFNBQVMsQ0FBQztzQkFDakVDLG9CQUFvQixhQUFwQkEsb0JBQW9CLHVCQUFwQkEsb0JBQW9CLENBQUVFLFdBQVcsQ0FBQzNRLFFBQVEsQ0FBQztvQkFBQztrQkFDN0MsQ0FBQyxZQUFRWixLQUFLLEVBQUU7b0JBQ2ZDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLHlEQUF5RCxFQUFFQSxLQUFLLENBQVE7a0JBQ25GLENBQUM7a0JBQUE7Z0JBQUE7Y0FDRixDQUFDO2dCQUFBO2NBQUE7WUFBQTtVQUNGO1VBQUMsdUJBRUssUUFBS3dSLDBCQUEwQixDQUFDNVEsUUFBUSxFQUFFTixXQUFXLENBQUM7WUFFNUQ7WUFDQTtZQUNBLElBQUksQ0FBQyxRQUFLZixhQUFhLEVBQUUsRUFBRTtjQUMxQjhCLFNBQVMsQ0FBQ0MsaUJBQWlCLEVBQUU7WUFDOUI7WUFDQSxRQUFLNEosYUFBYSxDQUFDQyxRQUFRLENBQUNzRyxNQUFNLEVBQUU3USxRQUFRLENBQUM7O1lBRTdDO1lBQ0EsSUFBSTJMLGFBQWEsRUFBRTtjQUNsQkEsYUFBYSxDQUFDbUYsZ0JBQWdCLEVBQUUsQ0FBQ0MsaUJBQWlCLEVBQUU7WUFDckQ7WUFBQyxJQUVHLENBQUFwRixhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRUMsY0FBYyxFQUFFLE1BQUt6UCxXQUFXLENBQUM2VSxRQUFRLElBQUksQ0FBQyxRQUFLclMsYUFBYSxFQUFFO2NBQ3BGO2NBQ0E7Y0FDQWdOLGFBQWEsQ0FBQ2MsY0FBYyxFQUFFLENBQUN3RSxXQUFXLEVBQUU7WUFBQztjQUU3QyxRQUFLbEcsbUJBQW1CLEVBQUUsQ0FBQ3dFLHVCQUF1QixDQUFDdlAsUUFBUSxDQUFDO1lBQUM7VUFBQTtRQUUvRCxDQUFDLFlBQVFaLEtBQUssRUFBRTtVQUNmQyxHQUFHLENBQUNELEtBQUssQ0FBQyxtQ0FBbUMsRUFBRUEsS0FBSyxDQUFRO1FBQzdELENBQUM7UUFBQTtNQUNGLENBQUM7UUFBQTtNQUFBO0lBQUE7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQVRDO0lBQUEsT0FZTThSLGFBQWEsMEJBQUNsUixRQUFnQjtNQUFBLElBQWlCO1FBQUEsY0FDaEMsSUFBSTtRQUF4QixJQUFNOEgsV0FBVyxHQUFHLFFBQUt1RSxpQkFBaUIsRUFBRTtRQUM1Q3pFLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDQyxXQUFXLENBQUM7UUFBQywyQ0FFekI7VUFBQSx1QkFDRyxRQUFLdkgsU0FBUyxFQUFFO1lBQUEsdUJBQ2hCLFFBQUtpTixrQkFBa0IsQ0FBQ3hOLFFBQVEsQ0FBQztjQUFBLHVCQUNqQyxRQUFLb00seUJBQXlCLEVBQUU7Z0JBQUEsdUJBQ2hDLFFBQUt6TyxrQkFBa0IsRUFBRSxDQUFDTyxpQkFBaUIsRUFBRTtrQkFBQSx1QkFDN0MsUUFBSzZNLG1CQUFtQixFQUFFLENBQUN3RSx1QkFBdUIsQ0FBQ3ZQLFFBQVEsQ0FBQztnQkFBQTtjQUFBO1lBQUE7VUFBQTtRQUNuRSxDQUFDO1VBQ0EsSUFBSTRILFVBQVUsQ0FBQ29DLFFBQVEsQ0FBQ2xDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JDRixVQUFVLENBQUNxQyxNQUFNLENBQUNuQyxXQUFXLENBQUM7VUFDL0I7VUFBQztVQUFBO1FBQUE7UUFBQTtNQUVILENBQUM7UUFBQTtNQUFBO0lBQUEsRUFFRDtJQUNBO0lBQ0E7SUFDQTtJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBckJDO0lBQUEsT0F3Qk1xSixZQUFZLHlCQUNqQkMsV0FBbUIsRUFDbkJsUCxhQVFDLEVBQ0RtUCxZQUFrQjtNQUFBLElBQ0Y7UUFBQSxjQUVVLElBQUk7UUFEOUIsSUFBSUMsUUFBYTtRQUNqQixJQUFNdFUsaUJBQWlCLEdBQUcsUUFBS0MscUJBQXFCLEVBQUU7UUFDdEQsSUFBSXNVLE1BQU07UUFDVixJQUFJQyxtQkFBbUI7UUFDdkIsSUFBSUMsdUJBQTRCO1FBQ2hDLElBQU1DLEtBQUssR0FBRyxRQUFLaFUsT0FBTyxFQUFFO1FBRTVCLElBQUlnQyxXQUFnQixHQUFHd0MsYUFBYSxJQUFJLENBQUMsQ0FBQzs7UUFFMUM7UUFDQTtRQUNBO1FBQ0EsSUFDRXhDLFdBQVcsQ0FBQ3lELEdBQUcsSUFBSXpELFdBQVcsQ0FBQ3lELEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxJQUNwRXdPLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbFMsV0FBVyxDQUFDLElBQzFCMlIsWUFBWSxLQUFLcEUsU0FBUyxFQUN6QjtVQUNELElBQU00RSxRQUFRLEdBQUduUyxXQUFXO1VBQzVCQSxXQUFXLEdBQUcyUixZQUFZLElBQUksQ0FBQyxDQUFDO1VBQ2hDLElBQUlRLFFBQVEsRUFBRTtZQUNiblMsV0FBVyxDQUFDbVMsUUFBUSxHQUFHQSxRQUFRO1VBQ2hDLENBQUMsTUFBTTtZQUNOblMsV0FBVyxDQUFDdEMsS0FBSyxHQUFHLFFBQUtNLE9BQU8sRUFBRSxDQUFDTCxRQUFRLEVBQUU7VUFDOUM7UUFDRDtRQUVBcUMsV0FBVyxDQUFDb1MsV0FBVyxHQUFHcFMsV0FBVyxDQUFDcVMsa0JBQWtCLElBQUlyUyxXQUFXLENBQUNvUyxXQUFXO1FBRW5GLElBQUksQ0FBQ3BTLFdBQVcsQ0FBQzZMLGFBQWEsRUFBRTtVQUMvQjdMLFdBQVcsQ0FBQzZMLGFBQWEsR0FBRyxRQUFLN04sT0FBTyxFQUFFO1FBQzNDO1FBRUEsSUFBSWdDLFdBQVcsQ0FBQ3NTLFNBQVMsRUFBRTtVQUMxQlYsUUFBUSxHQUFHLFFBQUs1VCxPQUFPLEVBQUUsQ0FBQ3dGLElBQUksQ0FBQ3hELFdBQVcsQ0FBQ3NTLFNBQVMsQ0FBQztVQUNyRCxJQUFJVixRQUFRLEVBQUU7WUFDYjtZQUNBNVIsV0FBVyxDQUFDdVMsb0JBQW9CLEdBQUdYLFFBQVEsQ0FBQ25SLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztVQUMxRTtRQUNELENBQUMsTUFBTTtVQUNOVCxXQUFXLENBQUN1UyxvQkFBb0IsR0FBR1AsS0FBSyxDQUFDdlIsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ3ZFO1FBRUEsSUFBSWlSLFdBQVcsSUFBSUEsV0FBVyxDQUFDYyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDakQ7VUFDQTtVQUNBO1VBQ0E7VUFDQVgsTUFBTSxHQUFHSCxXQUFXLENBQUNlLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFDL0JmLFdBQVcsR0FBR0csTUFBTSxDQUFDLENBQUMsQ0FBQztVQUN2QkMsbUJBQW1CLEdBQUlELE1BQU0sQ0FBQ0EsTUFBTSxDQUFDbFEsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFTK1EsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDN0U7UUFFQSxJQUFJMVMsV0FBVyxDQUFDMlMsYUFBYSxFQUFFO1VBQzlCLElBQUlmLFFBQVEsQ0FBQ2dCLFlBQVksRUFBRSxFQUFFO1lBQzVCNVMsV0FBVyxDQUFDbVMsUUFBUSxHQUFHUCxRQUFRLENBQUMvTixhQUFhLEVBQUUsQ0FBQ2dFLGdCQUFnQixFQUFFO1VBQ25FLENBQUMsTUFBTTtZQUNOLElBQU1nTCxZQUFZLEdBQUdqQixRQUFRLENBQUMzTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzZQLElBQUk7Y0FDekQzTyxhQUFZLEdBQUcsSUFBS2dILGdCQUFnQixDQUFTLFFBQUtuTixPQUFPLEVBQUUsQ0FBQ0wsUUFBUSxFQUFFLEVBQUVrVixZQUFZLENBQUM7WUFDdEY3UyxXQUFXLENBQUNtUyxRQUFRLEdBQUdoTyxhQUFZLENBQUMwRCxnQkFBZ0IsRUFBRTtVQUN2RDtVQUVBLElBQUlpSyxtQkFBbUIsSUFBSUYsUUFBUSxDQUFDblIsaUJBQWlCLEVBQUUsRUFBRTtZQUN4RFQsV0FBVyxDQUFDbVMsUUFBUSxHQUFHLFFBQUtZLHlDQUF5QyxDQUNwRW5CLFFBQVEsQ0FBQ25SLGlCQUFpQixFQUFFLEVBQzVCbVIsUUFBUSxDQUFDL04sYUFBYSxFQUFFLEVBQ3hCaU8sbUJBQW1CLENBQ25CO1VBQ0Y7VUFFQSxJQUFJOVIsV0FBVyxDQUFDZ1QsZ0JBQWdCLEVBQUU7WUFDakNqQix1QkFBdUIsR0FBRyxRQUFLa0Isb0JBQW9CLENBQUN2QixXQUFXLEVBQUVFLFFBQVEsQ0FBQ3NCLEdBQUcsQ0FBQztVQUMvRTtRQUNEO1FBQ0FsVCxXQUFXLENBQUNtVCxnQkFBZ0IsR0FBRyxRQUFLQyxnQkFBZ0IsQ0FBQ3BCLEtBQUssRUFBRWhTLFdBQVcsQ0FBQztRQUN4RTtRQUNBQSxXQUFXLENBQUNxVCxXQUFXLEdBQUlyQixLQUFLLENBQUNzQixXQUFXLEVBQUUsQ0FBU0MsYUFBYSxLQUFLLFlBQVk7UUFBQywwQ0FFbEY7VUFBQSx1QkFDRyxRQUFLMVMsU0FBUyxFQUFFO1lBQUEsdUJBQ0V2RCxpQkFBaUIsQ0FBQ2tXLFVBQVUsQ0FBQ3RYLElBQUksQ0FDeERvQixpQkFBaUIsRUFDakJvVSxXQUFXLEVBQ1gxUixXQUFXLEVBQ1gsUUFBS2hDLE9BQU8sRUFBRSxFQUNkLFFBQUtDLGtCQUFrQixFQUFFLENBQ3pCLEVBQUUsaUJBTkd3VixTQUFTO2NBQUE7Z0JBVWYsUUFBSzdJLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDNkksTUFBTSxFQUFFMVQsV0FBVyxDQUFDbVMsUUFBUSxDQUFDO2dCQUN6RCxRQUFLakUsd0JBQXdCLENBQUN3RCxXQUFXLEVBQUVyRCxXQUFXLENBQUNzRixNQUFNLENBQUM7Z0JBRTlELElBQUk1Qix1QkFBdUIsRUFBRTtrQkFDNUJBLHVCQUF1QixDQUFDNkIsU0FBUyxDQUFDSCxTQUFTLENBQUM7Z0JBQzdDO2dCQUNBO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtnQkFDRyxJQUFJelQsV0FBVyxDQUFDbVMsUUFBUSxFQUFFO2tCQUN6QixJQUFJLENBQUMsUUFBS2xULGFBQWEsRUFBRSxFQUFFO29CQUMxQjhCLFNBQVMsQ0FBQ0MsaUJBQWlCLEVBQUU7a0JBQzlCO2tCQUNBLFFBQUs2UyxpQkFBaUIsRUFBRSxDQUFDeFEsV0FBVyxDQUFDLGdCQUFnQixFQUFFcU8sV0FBVyxDQUFDO2dCQUNwRTtnQkFDQSxJQUFJMVIsV0FBVyxDQUFDb1MsV0FBVyxFQUFFO2tCQUM1QixJQUFJMEIsUUFBUSxHQUFHTCxTQUFTO2tCQUN4QixJQUFJeEIsS0FBSyxDQUFDQyxPQUFPLENBQUM0QixRQUFRLENBQUMsSUFBSUEsUUFBUSxDQUFDblMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDckRtUyxRQUFRLEdBQUdBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsS0FBSztrQkFDN0I7a0JBQ0EsSUFBSUQsUUFBUSxJQUFJLENBQUM3QixLQUFLLENBQUNDLE9BQU8sQ0FBQzRCLFFBQVEsQ0FBQyxFQUFFO29CQUN6QyxJQUFNMVMsVUFBVSxHQUFHNFEsS0FBSyxDQUFDclUsUUFBUSxFQUFFLENBQUNvQixZQUFZLEVBQW9CO29CQUNwRSxJQUFNaVYsZ0JBQWdCLEdBQUc1UyxVQUFVLENBQUN3RyxXQUFXLENBQUNrTSxRQUFRLENBQUNyVSxPQUFPLEVBQUUsQ0FBQztvQkFDbkUsSUFBTXdVLGdCQUFnQixHQUFHLFVBQUM5QixRQUFhLEVBQUUrQixrQkFBdUIsRUFBSztzQkFDcEUsT0FBTy9CLFFBQVEsQ0FBQ2hNLE1BQU0sQ0FBQyxVQUFDZ08sT0FBWSxFQUFLO3dCQUN4QyxJQUFJRCxrQkFBa0IsRUFBRTswQkFDdkIsT0FBT0Esa0JBQWtCLENBQUMxQixPQUFPLENBQUMyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2hEO3dCQUNBLE9BQU8sSUFBSTtzQkFDWixDQUFDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxJQUFNQyxjQUFjLEdBQUduQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2xTLFdBQVcsQ0FBQ21TLFFBQVEsQ0FBQyxHQUN2RDhCLGdCQUFnQixDQUFDalUsV0FBVyxDQUFDbVMsUUFBUSxFQUFFblMsV0FBVyxDQUFDcVUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDeEVyVSxXQUFXLENBQUNtUyxRQUFRO29CQUN2QixJQUFNbUMsc0JBQXNCLEdBQUdGLGNBQWMsSUFBSWhULFVBQVUsQ0FBQ3dHLFdBQVcsQ0FBQ3dNLGNBQWMsQ0FBQzNVLE9BQU8sRUFBRSxDQUFDO29CQUNqRyxJQUFJdVUsZ0JBQWdCLElBQUl6RyxTQUFTLElBQUl5RyxnQkFBZ0IsS0FBS00sc0JBQXNCLEVBQUU7c0JBQ2pGLElBQUlGLGNBQWMsQ0FBQzNVLE9BQU8sRUFBRSxLQUFLcVUsUUFBUSxDQUFDclUsT0FBTyxFQUFFLEVBQUU7d0JBQ3BELFFBQUs0TCxtQkFBbUIsRUFBRSxDQUFDN0Msd0JBQXdCLENBQUNzTCxRQUFRLEVBQUU7MEJBQzdEUyxpQkFBaUIsRUFBRSxJQUFJOzBCQUN2QkMsY0FBYyxFQUFFO3dCQUNqQixDQUFDLENBQUM7c0JBQ0gsQ0FBQyxNQUFNO3dCQUNON1UsR0FBRyxDQUFDOFUsSUFBSSxDQUFDLCtDQUErQyxDQUFDO3NCQUMxRDtvQkFDRDtrQkFDRDtnQkFDRDtnQkFDQSxPQUFPaEIsU0FBUztjQUFDO2NBQUE7Z0JBQUEsSUEzRGJ6VCxXQUFXLENBQUNtUyxRQUFRO2tCQUFBLHVCQUNqQixRQUFLdUMsc0JBQXNCLENBQUMsUUFBS0MsNkJBQTZCLENBQUNqRCxXQUFXLEVBQUUrQixTQUFTLENBQUMsRUFBRXpULFdBQVcsQ0FBQ21TLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQTtjQUFBO2NBQUE7WUFBQTtVQUFBO1FBMkR4SCxDQUFDLFlBQVF5QyxHQUFRLEVBQUU7VUFDbEIsSUFBSTdDLHVCQUF1QixFQUFFO1lBQzVCQSx1QkFBdUIsQ0FBQzhDLFNBQVMsRUFBRTtVQUNwQztVQUNBO1VBQUEsSUFDSUQsR0FBRyxLQUFLdFksU0FBUyxDQUFDeU8sa0JBQWtCO1lBQ3ZDO1lBQ0E7WUFDQTtZQUNBO1lBQ0EsTUFBTSxJQUFJcEUsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1VBQUMsT0FDOUIsSUFBSSxFQUFFaU8sR0FBRyxLQUFLQSxHQUFHLENBQUNuRyxRQUFRLElBQUttRyxHQUFHLENBQUNFLGFBQWEsSUFBSUYsR0FBRyxDQUFDRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNyRyxRQUFTLENBQUMsQ0FBQyxFQUFFO1lBQzVGO1lBQ0EsTUFBTSxJQUFJOUgsS0FBSywwQ0FBbUNpTyxHQUFHLEVBQUc7VUFDekQ7UUFFRCxDQUFDO01BQ0YsQ0FBQztRQUFBO01BQUE7SUFBQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBZkM7SUFBQSxPQWtCQUcsZ0JBQWdCLEdBRmhCLDBCQUdDQyxVQUFvQixFQUNwQmhWLFdBTUMsRUFDZTtNQUFBO01BQ2hCLElBQU1pVixRQUFRLEdBQUdqVixXQUFXLElBQUlBLFdBQVcsQ0FBQ2tWLElBQUksSUFBSWxWLFdBQVcsQ0FBQ2tWLElBQUksQ0FBQ0MsR0FBRyxLQUFLNUgsU0FBUyxHQUFHdk4sV0FBVyxDQUFDa1YsSUFBSSxDQUFDQyxHQUFHLEdBQUcsSUFBSTtRQUNuSEMsVUFBVSxHQUFHcFYsV0FBVyxJQUFJQSxXQUFXLENBQUNrVixJQUFJLElBQUlsVixXQUFXLENBQUNrVixJQUFJLENBQUNHLEtBQUssS0FBSzlILFNBQVMsR0FBR3ZOLFdBQVcsQ0FBQ2tWLElBQUksQ0FBQ0csS0FBSyxHQUFHLElBQUk7UUFDcEhDLGdCQUFnQixHQUFJdFYsV0FBVyxJQUFLQSxXQUFXLENBQVN1VixlQUFlLElBQUssS0FBSztRQUNqRm5OLFdBQVcsR0FBRyxJQUFJLENBQUN1RSxpQkFBaUIsRUFBRTtRQUN0Q3JNLFFBQVEsR0FBRyxJQUFJLENBQUN6QyxJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDeUMsaUJBQWlCLEVBQUU7UUFDbERDLFFBQVEsR0FBR0osUUFBUSxJQUFJLElBQUksQ0FBQ2xDLG9CQUFvQixDQUFDa0MsUUFBUSxDQUFDLEtBQUtqRSxnQkFBZ0IsQ0FBQ3NFLEtBQUs7TUFFdEYsSUFBSXlVLFVBQVUsSUFBSWxOLFVBQVUsQ0FBQ29DLFFBQVEsQ0FBQ2xDLFdBQVcsQ0FBQyxFQUFFO1FBQ25ELE9BQU94SSxPQUFPLENBQUNDLE1BQU0sQ0FBQyx1REFBdUQsQ0FBQztNQUMvRTs7TUFFQTtNQUNBLElBQUlvVixRQUFRLEVBQUU7UUFDYi9NLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDQyxXQUFXLENBQUM7TUFDN0I7TUFDQSxJQUFJa04sZ0JBQWdCLElBQUk1VSxRQUFRLEVBQUU7UUFDakMsSUFBSSxDQUFDTyxlQUFlLENBQUMxRSxXQUFXLENBQUMyRSxNQUFNLENBQUM7TUFDekM7TUFFQSxJQUFJLENBQUNqRCxrQkFBa0IsRUFBRSxDQUFDMkMsd0JBQXdCLEVBQUU7TUFFcEQsT0FBTyxJQUFJLENBQUNDLFNBQVMsQ0FBQ21VLFVBQVUsQ0FBQyxDQUMvQmhaLElBQUksQ0FBQyxZQUFNO1FBQ1gsSUFBSXNaLGdCQUFnQixFQUFFO1VBQ3JCLE9BQUksQ0FBQy9YLHFCQUFxQixFQUFFLENBQUN1RCwyQkFBMkIsRUFBRTtVQUMxRCxJQUFJLENBQUMsT0FBSSxDQUFDN0IsYUFBYSxFQUFFLEVBQUU7WUFDMUI4QixTQUFTLENBQUNDLGlCQUFpQixFQUFFO1VBQzlCO1VBQ0EsSUFBSU4sUUFBUSxFQUFFO1lBQ2IsT0FBSSxDQUFDTyxlQUFlLENBQUMxRSxXQUFXLENBQUMyRixLQUFLLENBQUM7VUFDeEM7UUFDRDtNQUNELENBQUMsQ0FBQyxDQUNEaUksS0FBSyxDQUFDLFVBQUNoSSxNQUFXLEVBQUs7UUFDdkIsSUFBSW1ULGdCQUFnQixJQUFJNVUsUUFBUSxFQUFFO1VBQ2pDLE9BQUksQ0FBQ08sZUFBZSxDQUFDMUUsV0FBVyxDQUFDNkYsS0FBSyxDQUFDO1FBQ3hDO1FBQ0EsT0FBT3hDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDc0MsTUFBTSxDQUFDO01BQzlCLENBQUMsQ0FBQyxDQUNEcVQsT0FBTyxDQUFDLFlBQU07UUFDZCxJQUFJUCxRQUFRLEVBQUU7VUFDYi9NLFVBQVUsQ0FBQ3FDLE1BQU0sQ0FBQ25DLFdBQVcsQ0FBQztRQUMvQjtRQUNBLE9BQUksQ0FBQ25LLGtCQUFrQixFQUFFLENBQUNPLGlCQUFpQixFQUFFO01BQzlDLENBQUMsQ0FBQztJQUNKOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLE9BTUFpWCxlQUFlLEdBRGYseUJBQ2dCQyxNQUFXLEVBQUU7TUFBQTtRQUFBO1FBQUE7TUFDNUIsSUFBSSx3QkFBRSxJQUFJLENBQUM3WCxJQUFJLENBQUNHLE9BQU8sRUFBRSx3RUFBbkIsbUJBQXFCeUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGtEQUFuRCxzQkFBOEV3RSxXQUFXLENBQUMsbUJBQW1CLENBQUMsR0FBRTtRQUNwSDtRQUNBLElBQU0wUSxhQUFhLEdBQUcsSUFBSS9WLE9BQU8sQ0FBTyxVQUFDa04sT0FBTyxFQUFFak4sTUFBTSxFQUFLO1VBQzVENlYsTUFBTSxDQUFDRSxTQUFTLEVBQUUsQ0FBQzlSLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFDK1IsbUJBQXdCLEVBQUs7WUFDbEYsSUFBSUgsTUFBTSxDQUFDRSxTQUFTLEVBQUUsQ0FBQ25TLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFO2NBQUE7Y0FDckVxUyxhQUFhLENBQUNDLDZCQUE2QixDQUMxQyxPQUFJLENBQUNsWSxJQUFJLENBQUNHLE9BQU8sRUFBRSxFQUNuQjBYLE1BQU0sQ0FBQ0UsU0FBUyxFQUFFLDBCQUNsQixPQUFJLENBQUMvWCxJQUFJLENBQUNHLE9BQU8sRUFBRSx5REFBbkIscUJBQXFCeUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQ2xEO1lBQ0Y7WUFDQSxJQUFNdVYsUUFBUSxHQUFHSCxtQkFBbUIsQ0FBQ0ksWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUM1RCxJQUFJRCxRQUFRLEVBQUU7Y0FDYmxKLE9BQU8sRUFBRTtZQUNWLENBQUMsTUFBTTtjQUNOak4sTUFBTSxFQUFFO1lBQ1Q7VUFDRCxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUNRLGNBQWMsQ0FBQ3FWLE1BQU0sQ0FBQ0UsU0FBUyxFQUFFLEVBQUVELGFBQWEsQ0FBQztNQUN2RDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLE9BS0FPLG9CQUFvQixHQUFwQiw4QkFBcUJSLE1BQVcsRUFBRTtNQUNqQyxJQUFNUyxRQUFRLEdBQUdULE1BQU0sQ0FBQ0UsU0FBUyxFQUFFO01BQ25DLElBQU10WSxpQkFBaUIsR0FBRyxJQUFJLENBQUNDLHFCQUFxQixFQUFFO01BQ3RELElBQU02WSxNQUFNLEdBQUcsSUFBSTtNQUNuQixJQUFNQyxTQUFTLEdBQUcsSUFBSTtNQUN0QixJQUFNakssZUFBZSxHQUFHLElBQUksQ0FBQ1Esa0JBQWtCLEVBQUU7TUFDakQsSUFBTTBKLE9BQVksR0FBRztRQUNwQjdULFlBQVksRUFBRXRHLFlBQVksQ0FBQ21ILE1BQU07UUFDakNVLFdBQVcsRUFBRW9TLE1BQU07UUFDbkJHLFFBQVEsRUFBRUYsU0FBUztRQUNuQi9LLDRCQUE0QixFQUFFLEtBQUs7UUFBRTtRQUNyQ0MsUUFBUSxFQUFFO01BQ1gsQ0FBQztNQUNEak8saUJBQWlCLENBQUNnRixjQUFjLENBQUM2VCxRQUFRLEVBQUVHLE9BQU8sRUFBRWxLLGVBQWUsRUFBRSxJQUFJLENBQUNuTyxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUNELE9BQU8sRUFBRSxDQUFDO0lBQ3ZIOztJQUVBO0lBQ0E7SUFDQTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBSkM7SUFBQSxPQU9BTSxZQUFZLEdBQVosc0JBQWFrWSxTQUFjLEVBQUVDLGFBQXVCLEVBQUU7TUFDcEQsSUFBSSxDQUFDNVksSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FBQ21DLGFBQWEsRUFBRSxDQUFvQkMsU0FBUyxDQUFDc1csV0FBVyxDQUFDRixTQUFTLEVBQUVDLGFBQWEsQ0FBQztJQUN4RyxDQUFDO0lBQUEsT0FFRHhWLGVBQWUsR0FBZix5QkFBZ0IwVixXQUFnQixFQUFFO01BQ2hDLElBQUksQ0FBQzlZLElBQUksQ0FBQ0csT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUUsQ0FBb0JDLFNBQVMsQ0FBQ3dXLGNBQWMsQ0FBQ0QsV0FBVyxDQUFDO0lBQzlGLENBQUM7SUFBQSxPQUVEdEwsbUJBQW1CLEdBQW5CLCtCQUFzQjtNQUNyQixPQUFRLElBQUksQ0FBQ3hOLElBQUksQ0FBQ0csT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUUsQ0FBb0JDLFNBQVMsQ0FBQ3lXLGtCQUFrQixFQUFFO0lBQzlGLENBQUM7SUFBQSxPQUVEbEssaUJBQWlCLEdBQWpCLDZCQUFvQjtNQUNuQixPQUFRLElBQUksQ0FBQzlPLElBQUksQ0FBQ0csT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUUsQ0FBb0JDLFNBQVMsQ0FBQzBXLGdCQUFnQixFQUFFO0lBQzVGLENBQUM7SUFBQSxPQUNEalcsU0FBUyxHQUFULG1CQUFVa1csS0FBVyxFQUFFO01BQ3RCLE9BQVEsSUFBSSxDQUFDbFosSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FBQ21DLGFBQWEsRUFBRSxDQUFvQkMsU0FBUyxDQUFDNFcsUUFBUSxDQUFDRCxLQUFLLENBQUM7SUFDekYsQ0FBQztJQUFBLE9BRUQzWSxvQkFBb0IsR0FBcEIsOEJBQXFCa0MsUUFBYSxFQUFFO01BQ25DLE9BQVEsSUFBSSxDQUFDekMsSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FBQ21DLGFBQWEsRUFBRSxDQUFvQkMsU0FBUyxDQUFDNlcsbUJBQW1CLENBQUMzVyxRQUFRLENBQUM7SUFDdkcsQ0FBQztJQUFBLE9BRUQ0USwwQkFBMEIsR0FBMUIsb0NBQTJCNVEsUUFBYSxFQUFFTixXQUFnQixFQUFFO01BQzNELE9BQVEsSUFBSSxDQUFDbkMsSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FBQ21DLGFBQWEsRUFBRSxDQUFvQkMsU0FBUyxDQUFDOFcseUJBQXlCLENBQUM1VyxRQUFRLEVBQUVOLFdBQVcsQ0FBQztJQUMxSCxDQUFDO0lBQUEsT0FFRDRMLG1CQUFtQixHQUFuQiw2QkFBb0J1SyxRQUFhLEVBQUU7TUFDakMsSUFBSSxDQUFDdFksSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FBQ21DLGFBQWEsRUFBRSxDQUFvQkMsU0FBUyxDQUFDK1csa0JBQWtCLENBQUNoQixRQUFRLENBQUM7SUFDL0YsQ0FBQztJQUFBLE9BRUQ1WSxxQkFBcUIsR0FBckIsaUNBQXdCO01BQ3ZCLE9BQVEsSUFBSSxDQUFDTSxJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUNnWCxvQkFBb0IsRUFBRTtJQUNoRyxDQUFDO0lBQUEsT0FFRHZELGlCQUFpQixHQUFqQiw2QkFBb0I7TUFDbkIsT0FBUSxJQUFJLENBQUNoVyxJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUNpWCxnQkFBZ0IsRUFBRTtJQUM1RixDQUFDO0lBQUEsT0FFRDVaLHNCQUFzQixHQUF0QixrQ0FBeUI7TUFDeEIsT0FBTyxJQUFJLENBQUNJLElBQUksQ0FBQzZHLGVBQWUsRUFBRSxDQUFDNFMscUJBQXFCLEVBQUU7SUFDM0QsQ0FBQztJQUFBLE9BRUQxSyxrQkFBa0IsR0FBbEIsOEJBQXFCO01BQ3BCLE9BQVEsSUFBSSxDQUFDNU8sT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUUsQ0FBU2lNLGVBQWU7SUFDL0QsQ0FBQztJQUFBLE9BRUR2SyxtQkFBbUIsR0FBbkIsK0JBQW1EO01BQ2xELE9BQU8sSUFBSSxDQUFDaEUsSUFBSSxDQUFDNkcsZUFBZSxFQUFFLENBQUM2UyxpQkFBaUIsRUFBRSxDQUFDQyxzQkFBc0IsRUFBRTtJQUNoRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQSxPQVNBdkUsb0JBQW9CLEdBQXBCLDhCQUFxQnZCLFdBQWdCLEVBQUUrRixVQUFlLEVBQUU7TUFDdkQsT0FBUSxJQUFJLENBQUM1WixJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUNzWCxtQkFBbUIsQ0FBQ2hHLFdBQVcsRUFBRStGLFVBQVUsQ0FBQztJQUN0SCxDQUFDO0lBQUEsT0FFREUsd0JBQXdCLEdBQXhCLG9DQUEyQjtNQUMxQixPQUFRLElBQUksQ0FBQzlaLElBQUksQ0FBQ0csT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUUsQ0FBb0JDLFNBQVMsQ0FBQ3dYLHVCQUF1QixFQUFFO0lBQ25HLENBQUM7SUFBQSxPQUVEQywyQkFBMkIsR0FBM0IsdUNBQThCO01BQzdCLE9BQVEsSUFBSSxDQUFDaGEsSUFBSSxDQUFDRyxPQUFPLEVBQUUsQ0FBQ21DLGFBQWEsRUFBRSxDQUFvQkMsU0FBUyxDQUFDMFgsMEJBQTBCLEVBQUU7SUFDdEcsQ0FBQztJQUFBLE9BRUQ3WixrQkFBa0IsR0FBbEIsOEJBQXFCO01BQ3BCLE9BQVEsSUFBSSxDQUFDSixJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUMyWCxpQkFBaUIsRUFBRTtJQUM3RixDQUFDO0lBQUEsT0FFRG5OLGFBQWEsR0FBYix1QkFBYytJLE1BQWdCLEVBQUVxRSxlQUFnRCxFQUFFO01BQ2pGLElBQU1DLE9BQU8sR0FBR2hHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDOEYsZUFBZSxDQUFDLEdBQUdBLGVBQWUsQ0FBQ0UsR0FBRyxDQUFDLFVBQUM5YSxPQUFPO1FBQUEsT0FBS0EsT0FBTyxDQUFDcUMsT0FBTyxFQUFFO01BQUEsRUFBQyxHQUFHdVksZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUV2WSxPQUFPLEVBQUU7TUFDakkwWSxJQUFJLENBQUMsSUFBSSxDQUFDbmEsT0FBTyxFQUFFLEVBQUUyVixNQUFNLEVBQUVzRSxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUFBLE9BRUQvSix3QkFBd0IsR0FBeEIsa0NBQXlCd0QsV0FBbUIsRUFBRTBHLFdBQXdCLEVBQUU7TUFDdkVDLHVCQUF1QixDQUFDLElBQUksQ0FBQ3JhLE9BQU8sRUFBRSxFQUFFMFQsV0FBVyxFQUFFMEcsV0FBVyxDQUFDO0lBQ2xFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBLE9BUUF6RCw2QkFBNkIsR0FBN0IsdUNBQThCakQsV0FBbUIsRUFBRStCLFNBQWlCLEVBQUU7TUFDckUsT0FBUSxJQUFJLENBQUM1VixJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUNrWSw0QkFBNEIsQ0FBQzVHLFdBQVcsRUFBRStCLFNBQVMsQ0FBQztJQUM5SCxDQUFDO0lBQUEsT0FFSzNGLGtCQUFrQiwrQkFBQ3hOLFFBQWE7TUFBQSxJQUFnQjtRQUFBLGNBRXRDLElBQUk7UUFEbkIsSUFBTXFLLE9BQU0sR0FBR3JLLFFBQVEsQ0FBQzNDLFFBQVEsRUFBRTtVQUNqQ3lLLFdBQVcsR0FBRyxRQUFLdUUsaUJBQWlCLEVBQUU7UUFBQyxvREFFcEM7VUFDSDtVQUNBO1VBQUEsdUJBQ01oQyxPQUFNLENBQUM0TixXQUFXLENBQUMsT0FBTyxDQUFDO1lBRWpDO1lBQ0E7WUFDQTtZQUFBLHVCQUNNNU4sT0FBTSxDQUFDNk4sVUFBVSxDQUFDQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUM7Y0FBQSxJQUd6RDlOLE9BQU0sQ0FBQytOLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztnQkFDcEMsTUFBTSxJQUFJL1IsS0FBSyxDQUFDLCtCQUErQixDQUFDO2NBQUM7WUFBQSxJQUZsRDtVQUFBO1FBSUQsQ0FBQztVQUNBLElBQUl1QixVQUFVLENBQUNvQyxRQUFRLENBQUNsQyxXQUFXLENBQUMsRUFBRTtZQUNyQ0YsVUFBVSxDQUFDcUMsTUFBTSxDQUFDbkMsV0FBVyxDQUFDO1VBQy9CO1VBQUM7VUFBQTtRQUFBO01BRUgsQ0FBQztRQUFBO01BQUE7SUFBQTtJQUFBLE9BRUR4SixlQUFlLEdBQWYseUJBQWdCMEIsUUFBaUIsRUFBRTtNQUNsQyxPQUFRLElBQUksQ0FBQ3pDLElBQUksQ0FBQ0csT0FBTyxFQUFFLENBQUNtQyxhQUFhLEVBQUUsQ0FBb0JDLFNBQVMsQ0FBQ3VZLGNBQWMsQ0FBQ3JZLFFBQVEsQ0FBQztJQUNsRyxDQUFDO0lBQUEsT0FFRHNZLGdCQUFnQixHQUFoQiw0QkFBbUI7TUFDbEIsT0FBUSxJQUFJLENBQUMvYSxJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUN5WSxlQUFlLEVBQUU7SUFDM0YsQ0FBQztJQUFBLE9BRURDLDBCQUEwQixHQUExQixzQ0FBNkI7TUFDNUIsT0FBUSxJQUFJLENBQUNqYixJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUMyWSx5QkFBeUIsRUFBRTtJQUNyRyxDQUFDO0lBQUEsT0FFREMscUJBQXFCLEdBQXJCLCtCQUFzQjFZLFFBQWlCLEVBQUU7TUFDeEMsT0FBUSxJQUFJLENBQUN6QyxJQUFJLENBQUNHLE9BQU8sRUFBRSxDQUFDbUMsYUFBYSxFQUFFLENBQW9CQyxTQUFTLENBQUM2WSxvQkFBb0IsQ0FBQzNZLFFBQVEsQ0FBQztJQUN4RyxDQUFDO0lBQUEsT0FFRGpDLG1DQUFtQyxHQUFuQyw2Q0FBb0NGLGdCQUFxQixFQUFFVCxLQUFpQixFQUFFO01BQzdFLElBQUlTLGdCQUFnQixLQUFLOUIsZ0JBQWdCLENBQUNzQyxNQUFNLEVBQUU7UUFDakQsSUFBTXVhLGFBQWEsR0FBRyxJQUFJLENBQUNyRixpQkFBaUIsRUFBRTtRQUM5Q3FGLGFBQWEsQ0FBQzdWLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO1FBQzdDNlYsYUFBYSxDQUFDN1YsV0FBVyxDQUFDLHFCQUFxQixFQUFHM0YsS0FBSyxDQUFDeWIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFTLGVBQWUsQ0FBQyxDQUFDO01BQ3ZHO0lBQ0QsQ0FBQztJQUFBLE9BRURuTCxzQ0FBc0MsR0FBdEMsZ0RBQXVDN1AsZ0JBQXFCLEVBQUU7TUFDN0QsSUFBSUEsZ0JBQWdCLEtBQUs5QixnQkFBZ0IsQ0FBQ3NDLE1BQU0sRUFBRTtRQUNqRCxJQUFNdWEsYUFBYSxHQUFHLElBQUksQ0FBQ3JGLGlCQUFpQixFQUFFO1FBQzlDcUYsYUFBYSxDQUFDN1YsV0FBVyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7UUFDOUM2VixhQUFhLENBQUM3VixXQUFXLENBQUMscUJBQXFCLEVBQUVrSyxTQUFTLENBQUM7UUFDM0QsSUFBSSxDQUFDcUwsZ0JBQWdCLEVBQUMsYUFBYTtNQUNwQztJQUNELENBQUM7SUFBQSxPQUVLbmEsaUJBQWlCLDhCQUN0QjZCLFFBQWlCLEVBQ2pCc08sU0FBa0IsRUFDbEJ3SyxnQkFBeUIsRUFDekIvYixnQkFBeUI7TUFBQSxJQUN6QnNMLFdBQVcsdUVBQUcsS0FBSztNQUFBLElBQ2xCO1FBQUEsY0FDSSxJQUFJO1FBQVQsSUFBSSxDQUFDLFFBQUsxSixhQUFhLEVBQUUsRUFBRTtVQUMxQjhCLFNBQVMsQ0FBQ0MsaUJBQWlCLEVBQUU7UUFDOUI7UUFBQyx1QkFFSyxRQUFLcUssbUJBQW1CLEVBQUUsQ0FBQzNCLGlCQUFpQixDQUFDcEosUUFBUSxFQUFFO1VBQzVEaVUsaUJBQWlCLEVBQUUsSUFBSTtVQUN2QjdMLFFBQVEsRUFBRWtHLFNBQVM7VUFDbkJ5SyxnQkFBZ0IsRUFBRSxJQUFJO1VBQ3RCRCxnQkFBZ0IsRUFBRUEsZ0JBQWdCO1VBQ2xDL2IsZ0JBQWdCLEVBQUVBLGdCQUFnQjtVQUNsQ2ljLGVBQWUsRUFBRSxLQUFLO1VBQ3RCM1EsV0FBVyxFQUFFQSxXQUFXO1VBQ3hCNFEsaUJBQWlCLEVBQUU7UUFDcEIsQ0FBQyxDQUFDO01BQ0gsQ0FBQztRQUFBO01BQUE7SUFBQTtJQUFBLE9BRURuRyxnQkFBZ0IsR0FBaEIsMEJBQWlCb0csSUFBUyxFQUFFQyxNQUFXLEVBQUU7TUFDeEMsSUFBTUMsU0FBUyxHQUFHRixJQUFJLENBQUNsRyxXQUFXLEVBQUUsQ0FBQ29HLFNBQVM7TUFDOUMsSUFBTUMsbUJBQW1CLEdBQUdELFNBQVMsR0FBRyxDQUFDLElBQUtBLFNBQVMsS0FBSyxDQUFDLElBQUlELE1BQU0sQ0FBQ25ILFNBQVU7TUFDbEYsT0FBTyxDQUFDbUgsTUFBTSxDQUFDckgsV0FBVyxJQUFJLENBQUMsQ0FBQ3VILG1CQUFtQjtJQUNwRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQSxPQVNBak4seUJBQXlCLEdBQXpCLHFDQUE0QjtNQUFBO01BQzNCLE9BQU8sSUFBSSxDQUFDN0wsU0FBUyxFQUFFLENBQUM3RSxJQUFJLENBQUMsWUFBTTtRQUNsQyxJQUFNNGQsT0FBTyxHQUFHLE9BQUksQ0FBQy9iLElBQUksQ0FBQ0csT0FBTyxFQUFFLENBQUM2YixLQUFLLEVBQUU7UUFDM0MsSUFBTUMsU0FBUyxHQUFHQyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsT0FBTyxFQUFFLENBQUM3VSxpQkFBaUIsRUFBRSxDQUFDSSxlQUFlLEVBQUUsQ0FBQ0MsT0FBTyxFQUFFO1FBQ2xGLElBQUltTSxRQUFRO1FBQ1osSUFBSWpNLFFBQVE7UUFFWixJQUFJLENBQUNtVSxTQUFTLENBQUNuWSxNQUFNLEVBQUU7VUFDdEIsT0FBTy9CLE9BQU8sQ0FBQ2tOLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztRQUNyRDtRQUVBLEtBQUssSUFBSW9OLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0osU0FBUyxDQUFDblksTUFBTSxFQUFFdVksQ0FBQyxFQUFFLEVBQUU7VUFDMUN2VSxRQUFRLEdBQUdtVSxTQUFTLENBQUNJLENBQUMsQ0FBQztVQUN2QixJQUFJdlUsUUFBUSxDQUFDd1UsVUFBVSxFQUFFO1lBQ3hCdkksUUFBUSxHQUFHek0sSUFBSSxDQUFDM0IsSUFBSSxDQUFDbUMsUUFBUSxDQUFDeVUsWUFBWSxFQUFFLENBQUM7WUFDN0MsT0FBT3hJLFFBQVEsRUFBRTtjQUNoQixJQUFJQSxRQUFRLENBQUNpSSxLQUFLLEVBQUUsS0FBS0QsT0FBTyxFQUFFO2dCQUNqQyxPQUFPaGEsT0FBTyxDQUFDQyxNQUFNLENBQUMseUJBQXlCLENBQUM7Y0FDakQ7Y0FDQStSLFFBQVEsR0FBR0EsUUFBUSxDQUFDOU8sU0FBUyxFQUFFO1lBQ2hDO1VBQ0Q7UUFDRDtNQUNELENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBLE9BUUE0UixzQkFBc0IsR0FBdEIsZ0NBQXVCakIsU0FBYyxFQUFFblQsUUFBaUIsRUFBRTtNQUFBO01BQ3pELElBQUksQ0FBQ0EsUUFBUSxJQUFJLENBQUNtVCxTQUFTLElBQUksQ0FBQ0EsU0FBUyxDQUFDNEcsS0FBSyxFQUFFO1FBQ2hELE9BQU96YSxPQUFPLENBQUNrTixPQUFPLEVBQUU7TUFDekI7TUFDQSxJQUFNcUosUUFBUSxHQUFHN1YsUUFBUSxDQUFDdUosVUFBVSxFQUFFO01BQ3RDO01BQ0EsSUFBSXNNLFFBQVEsSUFBSUEsUUFBUSxDQUFDMVMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLEVBQUU7UUFDdkUsSUFBTWtMLFlBQVksR0FBRzhFLFNBQVMsQ0FBQzRHLEtBQUs7UUFDcEMsSUFBTUMsS0FBSyxHQUFHN0csU0FBUyxDQUFDbkgsSUFBSTtRQUM1QixJQUFNaU8sWUFBWSxHQUFHamEsUUFBUSxDQUFDaUIsU0FBUyxFQUFFO1FBQ3pDLElBQUlpWixzQkFBc0IsR0FBRyxJQUFJO1FBQ2pDO1FBQ0EsSUFBSW5PLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcUMsWUFBWSxDQUFDLENBQUNoTixNQUFNLEVBQUU7VUFDckM7VUFDQTZZLHNCQUFzQixHQUFHRixLQUFLLENBQUNHLEtBQUssQ0FBQyxVQUFVQyxJQUFTLEVBQUU7WUFDekQsT0FBT0gsWUFBWSxDQUFDRyxJQUFJLENBQUMsS0FBSy9MLFlBQVksQ0FBQytMLElBQUksQ0FBQztVQUNqRCxDQUFDLENBQUM7VUFDRixJQUFJLENBQUNGLHNCQUFzQixFQUFFO1lBQzVCLE9BQU8sSUFBSTVhLE9BQU8sQ0FBTyxVQUFDa04sT0FBTyxFQUFLO2NBQ3JDLElBQUtxSixRQUFRLENBQVN3RSxNQUFNLEVBQUUsRUFBRTtnQkFDL0J4RSxRQUFRLENBQUNyUyxlQUFlLENBQUMsY0FBYyxFQUFFLFlBQVk7a0JBQ3BEZ0osT0FBTyxFQUFFO2dCQUNWLENBQUMsQ0FBQztnQkFDRnFKLFFBQVEsQ0FBQ3lFLE9BQU8sRUFBRTtjQUNuQixDQUFDLE1BQU07Z0JBQ04sSUFBTTNPLGFBQWEsR0FBRzFILFdBQVcsQ0FBQ0csZUFBZSxDQUFDLE9BQUksQ0FBQzFHLE9BQU8sRUFBRSxDQUFDO2dCQUNqRWlPLGFBQWEsQ0FDWHRILHFCQUFxQixFQUFFLENBQ3ZCa1csa0JBQWtCLENBQUMsQ0FBQztrQkFBRUMsdUJBQXVCLEVBQUUzRSxRQUFRLENBQUMxVyxPQUFPO2dCQUFHLENBQUMsQ0FBQyxFQUFFMFcsUUFBUSxDQUFDNEUsVUFBVSxFQUFFLENBQVksQ0FDdkcvZSxJQUFJLENBQ0osWUFBWTtrQkFDWDhRLE9BQU8sRUFBRTtnQkFDVixDQUFDLEVBQ0QsWUFBWTtrQkFDWG5OLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLGtDQUFrQyxDQUFDO2tCQUM3Q29OLE9BQU8sRUFBRTtnQkFDVixDQUFDLENBQ0QsQ0FDQTNDLEtBQUssQ0FBQyxVQUFVcE8sQ0FBTSxFQUFFO2tCQUN4QjRELEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLGtDQUFrQyxFQUFFM0QsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUM7Y0FDSjtZQUNELENBQUMsQ0FBQztVQUNIO1FBQ0Q7TUFDRDtNQUNBO01BQ0EsT0FBTzZELE9BQU8sQ0FBQ2tOLE9BQU8sRUFBRTtJQUN6QixDQUFDO0lBQUEsT0FFRGlELHVCQUF1QixHQUF2QixpQ0FBd0J6UCxRQUFpQixFQUFnQjtNQUN4RCxJQUFNYyxVQUFVLEdBQUdkLFFBQVEsQ0FBQzNDLFFBQVEsRUFBRSxDQUFDb0IsWUFBWSxFQUFTO1FBQzNEc0MsY0FBYyxHQUFHRCxVQUFVLENBQUNFLGNBQWMsQ0FBQ2hCLFFBQVEsQ0FBQ2IsT0FBTyxFQUFFLENBQUMsQ0FBQzhCLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDdkZDLGFBQWEsR0FBR0MsaUJBQWlCLENBQUNDLGVBQWUsQ0FBQ04sVUFBVSxFQUFFQyxjQUFjLENBQUM7TUFFOUUsSUFBSUcsYUFBYSxJQUFJQSxhQUFhLENBQUNHLE1BQU0sRUFBRTtRQUMxQyxJQUFNcVosZ0JBQWdCLEdBQUd4WixhQUFhLENBQUMwVyxHQUFHLENBQUMsVUFBVStDLElBQVMsRUFBRTtVQUMvRCxPQUFPM2EsUUFBUSxDQUFDNGEsYUFBYSxDQUFDRCxJQUFJLENBQUNFLGFBQWEsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFFRixPQUFPdmIsT0FBTyxDQUFDNkssR0FBRyxDQUFDdVEsZ0JBQWdCLENBQUM7TUFDckMsQ0FBQyxNQUFNO1FBQ04sT0FBT3BiLE9BQU8sQ0FBQ2tOLE9BQU8sRUFBRTtNQUN6QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FWQztJQUFBLE9BV0FpRyx5Q0FBeUMsR0FBekMsbURBQTBDcUksV0FBb0IsRUFBRUMsV0FBNkIsRUFBRUMsa0JBQTBCLEVBQVc7TUFDbkksSUFBTTVkLEtBQWlCLEdBQUcwZCxXQUFXLENBQUN6ZCxRQUFRLEVBQUU7TUFDaEQsSUFBTXVTLFNBQXlCLEdBQUd4UyxLQUFLLENBQUNxQixZQUFZLEVBQUU7TUFDdEQsSUFBSXdjLGVBQXlCLEdBQUdGLFdBQVcsQ0FBQzViLE9BQU8sRUFBRSxDQUFDZ1QsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUNoRSxJQUFJK0ksY0FBdUIsR0FBR0osV0FBVzs7TUFFekM7TUFDQTtNQUNBRyxlQUFlLENBQUNFLEdBQUcsRUFBRTtNQUNyQixJQUFJRixlQUFlLENBQUM1WixNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2pDNFosZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN6Qjs7TUFFQSxJQUFJQSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzlCQSxlQUFlLENBQUNHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzlCO01BQ0E7TUFDQSxJQUFNQyxjQUF5QixHQUFHSixlQUFlLENBQy9DckQsR0FBRyxDQUFDLFVBQUMwRCxXQUFtQixFQUFLO1FBQzdCLElBQUlBLFdBQVcsS0FBSyxFQUFFLEVBQUU7VUFDdkJKLGNBQWMsR0FBRzlkLEtBQUssQ0FBQ2lULFdBQVcsQ0FBQ2lMLFdBQVcsRUFBRUosY0FBYyxDQUFDLENBQUM1SyxlQUFlLEVBQUU7UUFDbEYsQ0FBQyxNQUFNO1VBQ047VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E0SyxjQUFjLEdBQUdKLFdBQVc7UUFDN0I7UUFDQSxPQUFPSSxjQUFjO01BQ3RCLENBQUMsQ0FBQyxDQUNESyxPQUFPLEVBQUU7TUFDWDtNQUNBLElBQU1DLGVBQW9DLEdBQUdILGNBQWMsQ0FBQ0ksSUFBSSxDQUMvRCxVQUFDQyxhQUFzQjtRQUFBLE9BQ3JCOUwsU0FBUyxDQUFDNU8sY0FBYyxDQUFDMGEsYUFBYSxDQUFDdmMsT0FBTyxFQUFFLENBQUMsQ0FBQzhCLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBMkIrWixrQkFBa0I7TUFBQSxFQUNuSDtNQUNELE9BQU9RLGVBQWUsSUFBSVQsV0FBVyxDQUFDeFQsZ0JBQWdCLEVBQUU7SUFDekQsQ0FBQztJQUFBLE9BRUR4SSxrQkFBa0IsR0FBbEIsNEJBQW1CbWMsY0FBeUIsRUFBRVMsVUFBcUIsRUFBc0I7TUFDeEYsT0FBTztRQUNOemMsYUFBYSxFQUFFeWMsVUFBVTtRQUN6QjFjLFdBQVcsRUFBRSxDQUNaO1VBQ0M4UCxPQUFPLEVBQUVtTSxjQUFjLENBQUMvYixPQUFPLEVBQUU7VUFDakMyUCxPQUFPLEVBQUU2TSxVQUFVLENBQUN4YyxPQUFPO1FBQzVCLENBQUM7TUFFSCxDQUFDO0lBQ0YsQ0FBQztJQUFBLE9BRURILHFCQUFxQixHQUFyQiwrQkFBc0I0YyxRQUFnRCxFQUFFO01BQ3ZFLElBQU1qUSxhQUFhLEdBQUcsSUFBSSxDQUFDcE8sSUFBSSxDQUFDNkcsZUFBZSxFQUFFO01BQ2pEdUgsYUFBYSxDQUFDYyxjQUFjLEVBQUUsQ0FBQ29QLGNBQWMsQ0FBQ0QsUUFBUSxDQUFDOztNQUV2RDtNQUNBLElBQU1qTixtQkFBbUIsR0FBRyxJQUFJLENBQUNwTixtQkFBbUIsRUFBRTtNQUN0RCxJQUFJcWEsUUFBUSxDQUFDdmEsTUFBTSxJQUFJLENBQUFzTixtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFQyxhQUFhLE1BQUtnTixRQUFRLENBQUNBLFFBQVEsQ0FBQ3ZhLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzBOLE9BQU8sRUFBRTtRQUNwR0osbUJBQW1CLENBQUNDLGFBQWEsR0FBR2dOLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdmEsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDeU4sT0FBTztNQUMxRTtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQSxPQVVNalEsMEJBQTBCLHVDQUMvQmlkLGtCQUE2QixFQUM3QkMsdUJBQXFELEVBQ3JEdFQsaUJBQXlCLEVBQ3pCdVQsa0JBQTJCO01BQUEsSUFDZTtRQUFBO1FBQzFDRCx1QkFBdUIsNEJBQUdBLHVCQUF1Qix5RUFBSUQsa0JBQWtCO1FBQ3ZFLElBQUksQ0FBQ0MsdUJBQXVCLENBQUM1YyxPQUFPLEVBQUUsQ0FBQzhjLFVBQVUsQ0FBQ0gsa0JBQWtCLENBQUMzYyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1VBQ2hGO1VBQ0FFLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLDBDQUEwQyxDQUFDO1VBQ3JELE1BQU0sSUFBSWlILEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztRQUM1RDtRQUNBLElBQUkyVixrQkFBa0IsSUFBSUQsdUJBQXVCLENBQUM1YyxPQUFPLEVBQUUsS0FBSzJjLGtCQUFrQixDQUFDM2MsT0FBTyxFQUFFLEVBQUU7VUFDN0YsT0FBT0csT0FBTyxDQUFDa04sT0FBTyxDQUFDUyxTQUFTLENBQUM7UUFDbEM7UUFFQSxJQUFNN1AsS0FBSyxHQUFHMGUsa0JBQWtCLENBQUN6ZSxRQUFRLEVBQUU7UUFDM0MsSUFBSW9MLGlCQUFpQixLQUFLMU0sZ0JBQWdCLENBQUNzRSxLQUFLLEVBQUU7VUFDakQsdUJBQU82YixLQUFLLENBQUNDLHlCQUF5QixDQUFDTCxrQkFBa0IsRUFBRUMsdUJBQXVCLENBQUM7UUFDcEYsQ0FBQyxNQUFNO1VBQ047VUFDQTtVQUNBLHVCQUFPO1lBQ043YyxhQUFhLEVBQUU5QixLQUFLLENBQUNpVCxXQUFXLENBQUMwTCx1QkFBdUIsQ0FBQzVjLE9BQU8sRUFBRSxDQUFDLENBQUNtUixlQUFlLEVBQUU7WUFDckZyUixXQUFXLEVBQUU7VUFDZCxDQUFDO1FBQ0Y7TUFDRCxDQUFDO1FBQUE7TUFBQTtJQUFBO0lBQUEsT0FDRE4sYUFBYSxHQUFiLHlCQUF5QjtNQUN4QixPQUFPc0YsV0FBVyxDQUFDRyxlQUFlLENBQUMsSUFBSSxDQUFDMUcsT0FBTyxFQUFFLENBQUMsQ0FBQ2lCLGFBQWEsRUFBRTtJQUNuRSxDQUFDO0lBQUE7RUFBQSxFQWx5RHFCeWQsbUJBQW1CO0VBQUEsT0FxeUQzQjlmLFFBQVE7QUFBQSJ9
1822
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIkNyZWF0aW9uTW9kZSIsIkZFTGlicmFyeSIsIlByb2dyYW1taW5nTW9kZWwiLCJDb25zdGFudHMiLCJEcmFmdFN0YXR1cyIsIkVkaXRNb2RlIiwiU3RhcnR1cE1vZGUiLCJNZXNzYWdlVHlwZSIsImNvcmVMaWJyYXJ5IiwiRWRpdEZsb3ciLCJkZWZpbmVVSTVDbGFzcyIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJlZGl0RG9jdW1lbnQiLCJjb250ZXh0IiwiYkRyYWZ0TmF2aWdhdGlvbiIsInRyYW5zYWN0aW9uSGVscGVyIiwiX2dldFRyYW5zYWN0aW9uSGVscGVyIiwib1Jvb3RWaWV3Q29udHJvbGxlciIsIl9nZXRSb290Vmlld0NvbnRyb2xsZXIiLCJtb2RlbCIsImdldE1vZGVsIiwicmlnaHRtb3N0Q29udGV4dCIsImJhc2UiLCJlZGl0RmxvdyIsIm9uQmVmb3JlRWRpdCIsImdldFZpZXciLCJfZ2V0TWVzc2FnZUhhbmRsZXIiLCJuZXdEb2N1bWVudENvbnRleHQiLCJwcm9ncmFtbWluZ01vZGVsIiwiX2dldFByb2dyYW1taW5nTW9kZWwiLCJfc2V0U3RpY2t5U2Vzc2lvbkludGVybmFsUHJvcGVydGllcyIsIl9zZXRFZGl0TW9kZSIsIkVkaXRhYmxlIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJfaGFuZGxlTmV3Q29udGV4dCIsImNvbnRleHRUb05hdmlnYXRlIiwiU3RpY2t5IiwiX2hhbmRsZVN0aWNreU9uIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImdldE1ldGFNb2RlbCIsInNoYXJlT2JqZWN0IiwiX2lzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJfY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInNpYmxpbmdJbmZvIiwiX2NyZWF0ZVNpYmxpbmdJbmZvIiwiX3VwZGF0ZVBhdGhzSW5IaXN0b3J5IiwicGF0aE1hcHBpbmciLCJ0YXJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImVycm9yIiwiTG9nIiwiUHJvbWlzZSIsInJlamVjdCIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwiYUNvbnRleHRzIiwibVBhcmFtZXRlcnMiLCJiZWZvcmVEZWxldGVDYWxsQmFjayIsIm9uQmVmb3JlRGVsZXRlIiwiZ2V0Q29udHJvbGxlciIsIl9lZGl0RmxvdyIsInVwZGF0ZURvY3VtZW50Iiwib0NvbnRleHQiLCJvUHJvbWlzZSIsIm9yaWdpbmFsQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImJJc0RyYWZ0IiwiRHJhZnQiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJfc3luY1Rhc2siLCJoYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMiLCJFZGl0U3RhdGUiLCJzZXRFZGl0U3RhdGVEaXJ0eSIsIl9zZXREcmFmdFN0YXR1cyIsIlNhdmluZyIsIm9CaW5kaW5nQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJzRW50aXR5U2V0TmFtZSIsImdldE1ldGFDb250ZXh0IiwiZ2V0T2JqZWN0IiwiYVNlbWFudGljS2V5cyIsIlNlbWFudGljS2V5SGVscGVyIiwiZ2V0U2VtYW50aWNLZXlzIiwibGVuZ3RoIiwib0N1cnJlbnRTZW1hbnRpY01hcHBpbmciLCJfZ2V0U2VtYW50aWNNYXBwaW5nIiwic0N1cnJlbnRTZW1hbnRpY1BhdGgiLCJzZW1hbnRpY1BhdGgiLCJzQ2hhbmdlZFBhdGgiLCJnZXRTZW1hbnRpY1BhdGgiLCJTYXZlZCIsIm9FcnJvciIsIkNsZWFyIiwic2hvd01lc3NhZ2VzIiwiY3JlYXRlRG9jdW1lbnQiLCJ2TGlzdEJpbmRpbmciLCJtSW5QYXJhbWV0ZXJzIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvdyIsIm9DcmVhdGlvblJvd09iamVjdHMiLCJvVGFibGUiLCJnZXRQYXJlbnQiLCJvRXhlY0N1c3RvbVZhbGlkYXRpb24iLCJ2YWxpZGF0ZURvY3VtZW50IiwiZGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImdldENyZWF0aW9uUm93Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJJbmxpbmUiLCJ0YWJsZUlkIiwiYnlJZCIsImlzQSIsImZuRm9jdXNPclNjcm9sbCIsImZvY3VzUm93Iiwic2Nyb2xsVG9JbmRleCIsImdldFJvd0JpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJvQ3JlYXRpb24iLCJjcmVhdGVBdEVuZCIsImdldExlbmd0aCIsImhhbmRsZVNpZGVFZmZlY3RzIiwib0xpc3RCaW5kaW5nIiwib0NyZWF0aW9uUHJvbWlzZSIsIm9OZXdDb250ZXh0IiwiY3JlYXRlZCIsIkNvbW1vblV0aWxzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsImNyZWF0ZUN1c3RvbVZhbGlkYXRpb25NZXNzYWdlcyIsImFWYWxpZGF0aW9uTWVzc2FnZXMiLCJzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwibUN1c3RvbVZhbGlkaXR5IiwiZ2V0UHJvcGVydHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvRmllbGRDb250cm9sIiwic1RhcmdldCIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJmb3JFYWNoIiwib01lc3NhZ2UiLCJjb2RlIiwicmVtb3ZlTWVzc2FnZXMiLCJvVmFsaWRhdGlvbk1lc3NhZ2UiLCJtZXNzYWdlVGFyZ2V0IiwiZ2V0Q29udHJvbCIsImZpZWxkSWQiLCJnZXRCaW5kaW5nUGF0aCIsImZpbHRlciIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJtZXNzYWdlVGV4dCIsInByb2Nlc3NvciIsInR5cGUiLCJFcnJvciIsInRlY2huaWNhbCIsInBlcnNpc3RlbnQiLCJhRXhpc3RpbmdWYWxpZGF0aW9uTWVzc2FnZXMiLCJhZGRDb250cm9sSWQiLCJwdXNoIiwidGV4dCIsImN1c3RvbU1lc3NhZ2VzIiwicmVzb2x2ZUNyZWF0aW9uTW9kZSIsImluaXRpYWxDcmVhdGlvbk1vZGUiLCJOZXdQYWdlIiwiaXNSZWxhdGl2ZSIsInNQYXRoIiwic05ld0FjdGlvbiIsImFQYXJhbWV0ZXJzIiwiRGVmZXJyZWQiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldEhlYWRlckNvbnRleHQiLCJhTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGRzIiwiZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIiwiQXN5bmMiLCJiU2hvdWxkQnVzeUxvY2siLCJCdXN5TG9ja2VyIiwibG9jayIsIm9Mb2NrT2JqZWN0Iiwib05hdmlnYXRpb24iLCJyZXNvbHZlZENyZWF0aW9uTW9kZSIsIm9Sb3V0aW5nTGlzdGVuZXIiLCJuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQiLCJiRGVmZXJyZWRDb250ZXh0IiwiZWRpdGFibGUiLCJiRm9yY2VGb2N1cyIsImFzeW5jQ29udGV4dCIsIlN5bmMiLCJtQXJncyIsInNQcm9ncmFtbWluZ01vZGVsIiwiY3JlYXRlQWN0aW9uIiwidHJhbnNpZW50Iiwib05ld0RvY3VtZW50Q29udGV4dCIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsIm5hdmlnYXRlVG9NZXNzYWdlUGFnZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiYkZyb21EZWZlcnJlZCIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib0NyZWF0aW9uUm93TGlzdEJpbmRpbmciLCJvQ3JlYXRpb25Sb3dDb250ZXh0IiwiZ2V0QmluZGluZyIsImJTa2lwU2lkZUVmZmVjdHMiLCJvTmV3VHJhbnNpZW50Q29udGV4dCIsImNyZWF0ZSIsIm9DcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiY2F0Y2giLCJ0cmFjZSIsImRlbGV0ZSIsImlzTG9ja2VkIiwidW5sb2NrIiwiYklzTmV3UGFnZUNyZWF0aW9uIiwiYWxsIiwiYVBhcmFtcyIsIm9Nb2RlbCIsIl9zZW5kQWN0aXZpdHkiLCJBY3Rpdml0eSIsIkNyZWF0ZSIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsIkNyZWF0aW9uRmFpbGVkIiwibmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9QYXlsb2FkIiwiX2dldFJvdXRpbmdMaXN0ZW5lciIsImtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQiLCJidXN5TW9kZSIsImJ1c3lJZCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImFubm90YXRpb24iLCJpZCIsIl9oYW5kbGVDcmVhdGVFdmVudHMiLCJwYXJlbnRDb250cm9sIiwiYmVmb3JlQ3JlYXRlQ2FsbEJhY2siLCJvbkJlZm9yZUNyZWF0ZSIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJvQXBwQ29tcG9uZW50IiwiZ2V0U3RhcnR1cE1vZGUiLCJBdXRvQ3JlYXRlIiwib1Jlc291cmNlQnVuZGxlIiwiT2JqZWN0Iiwia2V5cyIsInNQcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHkiLCIka2luZCIsIl9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMiLCJfZ2V0R2xvYmFsVUlNb2RlbCIsIl9nZXRSZXNvdXJjZUJ1bmRsZSIsIkV4dGVybmFsIiwicmVzb2x2ZSIsImdldFJvdXRlclByb3h5IiwicmVtb3ZlSUFwcFN0YXRlS2V5Iiwib0NvbnRyb2xsZXIiLCJzQ3JlYXRlUGF0aCIsImdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZyIsImhhbmRsZXJzIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib3V0Ym91bmQiLCJ1bmRlZmluZWQiLCJvbkJlZm9yZVNhdmUiLCJvbkJlZm9yZURpc2NhcmQiLCJzYXZlRG9jdW1lbnQiLCJiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwiX3N1Ym1pdE9wZW5DaGFuZ2VzIiwiYWN0aXZlRG9jdW1lbnRDb250ZXh0IiwiX3JlbW92ZVN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMiLCJBY3RpdmF0ZSIsIl90cmlnZ2VyQ29uZmlndXJlZFN1cnZleSIsIlN0YW5kYXJkQWN0aW9ucyIsInNhdmUiLCJUcmlnZ2VyVHlwZSIsInN0YW5kYXJkQWN0aW9uIiwiRGlzcGxheSIsImlzRmNsRW5hYmxlZCIsImNhbmNlbGVkIiwidG9nZ2xlRHJhZnRBY3RpdmUiLCJvQ29udGV4dERhdGEiLCJiRWRpdGFibGUiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsIkhhc0RyYWZ0RW50aXR5Iiwib1JpZ2h0bW9zdENvbnRleHQiLCJsYXN0U2VtYW50aWNNYXBwaW5nIiwidGVjaG5pY2FsUGF0aCIsInRhcmdldFBhdGgiLCJuZXdQYXRoIiwib2xkUGF0aCIsImNhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY29udHJvbCIsImJlZm9yZUNhbmNlbENhbGxCYWNrIiwiY2FuY2VsUmVzdWx0IiwiRGlzY2FyZCIsInNraXBCYWNrTmF2aWdhdGlvbiIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0Iiwib0FjdGl2ZURvY3VtZW50Q29udGV4dCIsIl9mZXRjaFNlbWFudGljS2V5VmFsdWVzIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJpc0RyYWZ0Um9vdCIsIm1ldGFNb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0RW50aXR5U2V0IiwiZGVsZXRlRG9jdW1lbnQiLCJiRmluZEFjdGl2ZUNvbnRleHRzIiwiZ2V0SW5kZXgiLCJwYXJhbWV0ZXJzIiwic2libGluZ0NvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RDYW5vbmljYWxQYXRoIiwiZHJhZnRQYXRoIiwiZHJhZnRDb250ZXh0VG9SZW1vdmUiLCJnZXRLZWVwQWxpdmVDb250ZXh0IiwicmVwbGFjZVdpdGgiLCJfZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbiIsIkRlbGV0ZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsIkRlZXBsaW5rIiwiZXhpdEZyb21BcHAiLCJhcHBseURvY3VtZW50IiwiaW52b2tlQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJtRXh0cmFQYXJhbXMiLCJvQ29udHJvbCIsImFQYXJ0cyIsInNPdmVybG9hZEVudGl0eVR5cGUiLCJvQ3VycmVudEFjdGlvbkNhbGxCYWNrcyIsIm9WaWV3IiwiQXJyYXkiLCJpc0FycmF5IiwiY29udGV4dHMiLCJpc05hdmlnYWJsZSIsInJlcXVpcmVzTmF2aWdhdGlvbiIsImNvbnRyb2xJZCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaW5kZXhPZiIsInNwbGl0IiwicmVwbGFjZUFsbCIsImJTdGF0aWNBY3Rpb24iLCJpc1RhYmxlQm91bmQiLCJzQmluZGluZ1BhdGgiLCJwYXRoIiwiX2dldEFjdGlvbk92ZXJsb2FkQ29udGV4dEZyb21NZXRhZGF0YVBhdGgiLCJlbmFibGVBdXRvU2Nyb2xsIiwiX2NyZWF0ZUFjdGlvblByb21pc2UiLCJzSWQiLCJiR2V0Qm91bmRDb250ZXh0IiwiX2dldEJvdW5kQ29udGV4dCIsImJPYmplY3RQYWdlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiY2FsbEFjdGlvbiIsIm9SZXNwb25zZSIsIkFjdGlvbiIsImFjdGlvbiIsImZSZXNvbHZlciIsIl9nZXRJbnRlcm5hbE1vZGVsIiwidkNvbnRleHQiLCJ2YWx1ZSIsInNDb250ZXh0TWV0YVBhdGgiLCJfZm5WYWxpZENvbnRleHRzIiwiYXBwbGljYWJsZUNvbnRleHRzIiwiZWxlbWVudCIsIm9BY3Rpb25Db250ZXh0IiwiYXBwbGljYWJsZUNvbnRleHQiLCJzQWN0aW9uQ29udGV4dE1ldGFQYXRoIiwiY2hlY2tOb0hhc2hDaGFuZ2UiLCJub0hpc3RvcnlFbnRyeSIsImluZm8iLCJfcmVmcmVzaExpc3RJZlJlcXVpcmVkIiwiX2dldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMiLCJlcnIiLCJmUmVqZWN0b3IiLCJyZWplY3RlZEl0ZW1zIiwic2VjdXJlZEV4ZWN1dGlvbiIsImZuRnVuY3Rpb24iLCJiQnVzeVNldCIsImJ1c3kiLCJzZXQiLCJiQnVzeUNoZWNrIiwiY2hlY2siLCJiVXBkYXRlc0RvY3VtZW50IiwidXBkYXRlc0RvY3VtZW50IiwiZmluYWxseSIsImhhbmRsZVBhdGNoU2VudCIsIm9FdmVudCIsIm9QYXRjaFByb21pc2UiLCJnZXRTb3VyY2UiLCJwYXRjaENvbXBsZXRlZEV2ZW50IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoIiwiYlN1Y2Nlc3MiLCJnZXRQYXJhbWV0ZXIiLCJoYW5kbGVDcmVhdGVBY3RpdmF0ZSIsIm9CaW5kaW5nIiwiYkF0RW5kIiwiYkluYWN0aXZlIiwib1BhcmFtcyIsImluYWN0aXZlIiwic0VkaXRNb2RlIiwiYkNyZWF0aW9uTW9kZSIsInNldEVkaXRNb2RlIiwic0RyYWZ0U3RhdGUiLCJzZXREcmFmdFN0YXR1cyIsImdldFJvdXRpbmdMaXN0ZW5lciIsImdldEdsb2JhbFVJTW9kZWwiLCJ2VGFzayIsInN5bmNUYXNrIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsImRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24iLCJoYW5kbGVDcmVhdGVFdmVudHMiLCJnZXRUcmFuc2FjdGlvbkhlbHBlciIsImdldEludGVybmFsTW9kZWwiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJzQ29udHJvbElkIiwiY3JlYXRlQWN0aW9uUHJvbWlzZSIsIl9nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiX2RlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJnZXRNZXNzYWdlSGFuZGxlciIsInJlbGF0ZWRDb250ZXh0cyIsImNvbnRlbnQiLCJtYXAiLCJzZW5kIiwidHJpZ2dlclR5cGUiLCJ0cmlnZ2VyQ29uZmlndXJlZFN1cnZleSIsImdldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMiLCJzdWJtaXRCYXRjaCIsIm9SZXF1ZXN0b3IiLCJ3YWl0Rm9yUnVubmluZ0NoYW5nZVJlcXVlc3RzIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJoYW5kbGVTdGlja3lPbiIsIl9oYW5kbGVTdGlja3lPZmYiLCJoYW5kbGVTdGlja3lPZmYiLCJfb25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbiIsIm9uQmFja05hdmlnYXRpb25JblNlc3Npb24iLCJfZGlzY2FyZFN0aWNreVNlc3Npb24iLCJkaXNjYXJkU3RpY2t5U2Vzc2lvbiIsImludGVybmFsTW9kZWwiLCJnZXRIdHRwSGVhZGVycyIsImJSZWNyZWF0ZUNvbnRleHQiLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2hvd1BsYWNlaG9sZGVyIiwia2VlcEN1cnJlbnRMYXlvdXQiLCJ2aWV3IiwicGFyYW1zIiwidmlld0xldmVsIiwiYlJlZnJlc2hBZnRlckFjdGlvbiIsInNWaWV3SWQiLCJnZXRJZCIsImFNZXNzYWdlcyIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImkiLCJ2YWxpZGF0aW9uIiwiZ2V0Q29udHJvbElkIiwib0RhdGEiLCJhS2V5cyIsIm9DdXJyZW50RGF0YSIsImJSZXR1cm5lZENvbnRleHRJc1NhbWUiLCJldmVyeSIsInNLZXkiLCJpc1Jvb3QiLCJyZWZyZXNoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRDb250ZXh0IiwiYVJlcXVlc3RQcm9taXNlcyIsIm9LZXkiLCJyZXF1ZXN0T2JqZWN0IiwiJFByb3BlcnR5UGF0aCIsInJvb3RDb250ZXh0IiwibGlzdEJpbmRpbmciLCJvdmVybG9hZEVudGl0eVR5cGUiLCJjb250ZXh0U2VnbWVudHMiLCJjdXJyZW50Q29udGV4dCIsInBvcCIsInVuc2hpZnQiLCJwYXJlbnRDb250ZXh0cyIsInBhdGhTZWdtZW50IiwicmV2ZXJzZSIsIm92ZXJsb2FkQ29udGV4dCIsImZpbmQiLCJwYXJlbnRDb250ZXh0IiwibmV3Q29udGV4dCIsIm1hcHBpbmdzIiwic2V0UGF0aE1hcHBpbmciLCJyb290Q3VycmVudENvbnRleHQiLCJyaWdodG1vc3RDdXJyZW50Q29udGV4dCIsImRvTm90Q29tcHV0ZUlmUm9vdCIsInN0YXJ0c1dpdGgiLCJkcmFmdCIsImNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24iLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFZGl0Rmxvdy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBzZW5kIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQWN0aXZpdHlTeW5jXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSwgc2hhcmVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNpYmxpbmdJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY01hcHBpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvUm91dGluZ1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbnMsIHRyaWdnZXJDb25maWd1cmVkU3VydmV5LCBUcmlnZ2VyVHlwZSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0ZlZWRiYWNrXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IGNvcmVMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVjRDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcIi4uL0FjdGlvblJ1bnRpbWVcIjtcblxuY29uc3QgQ3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZSxcblx0UHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsLFxuXHRDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzLFxuXHREcmFmdFN0YXR1cyA9IEZFTGlicmFyeS5EcmFmdFN0YXR1cyxcblx0RWRpdE1vZGUgPSBGRUxpYnJhcnkuRWRpdE1vZGUsXG5cdFN0YXJ0dXBNb2RlID0gRkVMaWJyYXJ5LlN0YXJ0dXBNb2RlLFxuXHRNZXNzYWdlVHlwZSA9IGNvcmVMaWJyYXJ5Lk1lc3NhZ2VUeXBlO1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgZWRpdCBmbG93IG9mIHRoZSBhcHBsaWNhdGlvblxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcIilcbmNsYXNzIEVkaXRGbG93IGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gUHVibGljIG1ldGhvZHNcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHRwcml2YXRlIGZuRGlydHlTdGF0ZVByb3ZpZGVyPzogRnVuY3Rpb247XG5cdHByaXZhdGUgZm5IYW5kbGVTZXNzaW9uVGltZW91dD86IEZ1bmN0aW9uO1xuXHRwcml2YXRlIG1QYXRjaFByb21pc2VzPzogYW55O1xuXHRwcml2YXRlIF9mblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24/OiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGRyYWZ0IGRvY3VtZW50IGZvciBhbiBleGlzdGluZyBhY3RpdmUgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBlZGl0YWJsZSBkb2N1bWVudCBpcyBhdmFpbGFibGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I2VkaXREb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBlZGl0RG9jdW1lbnQoY29udGV4dDogVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYkRyYWZ0TmF2aWdhdGlvbiA9IHRydWU7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLl9nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0bGV0IHJpZ2h0bW9zdENvbnRleHQ7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5vbkJlZm9yZUVkaXQoeyBjb250ZXh0OiBjb250ZXh0IH0pO1xuXHRcdFx0Y29uc3QgbmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdHJhbnNhY3Rpb25IZWxwZXIuZWRpdERvY3VtZW50KGNvbnRleHQsIHRoaXMuZ2V0VmlldygpLCB0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpKTtcblxuXHRcdFx0Y29uc3QgcHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuX2dldFByb2dyYW1taW5nTW9kZWwoY29udGV4dCk7XG5cblx0XHRcdHRoaXMuX3NldFN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMocHJvZ3JhbW1pbmdNb2RlbCwgbW9kZWwpO1xuXG5cdFx0XHRpZiAobmV3RG9jdW1lbnRDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMuX3NldEVkaXRNb2RlKEVkaXRNb2RlLkVkaXRhYmxlLCBmYWxzZSk7XG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coKTtcblxuXHRcdFx0XHRpZiAobmV3RG9jdW1lbnRDb250ZXh0ICE9PSBjb250ZXh0KSB7XG5cdFx0XHRcdFx0bGV0IGNvbnRleHRUb05hdmlnYXRlID0gbmV3RG9jdW1lbnRDb250ZXh0O1xuXHRcdFx0XHRcdGlmICh0aGlzLl9pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdFx0cmlnaHRtb3N0Q29udGV4dCA9IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpO1xuXHRcdFx0XHRcdFx0bGV0IHNpYmxpbmdJbmZvID0gYXdhaXQgdGhpcy5fY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihjb250ZXh0LCByaWdodG1vc3RDb250ZXh0LCBwcm9ncmFtbWluZ01vZGVsLCB0cnVlKTtcblx0XHRcdFx0XHRcdHNpYmxpbmdJbmZvID0gc2libGluZ0luZm8gPz8gdGhpcy5fY3JlYXRlU2libGluZ0luZm8oY29udGV4dCwgbmV3RG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVBhdGhzSW5IaXN0b3J5KHNpYmxpbmdJbmZvLnBhdGhNYXBwaW5nKTtcblx0XHRcdFx0XHRcdGlmIChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0LmdldFBhdGgoKSAhPSBuZXdEb2N1bWVudENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRUb05hdmlnYXRlID0gc2libGluZ0luZm8udGFyZ2V0Q29udGV4dDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9oYW5kbGVOZXdDb250ZXh0KGNvbnRleHRUb05hdmlnYXRlLCB0cnVlLCBmYWxzZSwgYkRyYWZ0TmF2aWdhdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0aWYgKHByb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgc3RpY2t5T24gaGFuZGxlciBtdXN0IGJlIHNldCBhZnRlciB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBkb25lLFxuXHRcdFx0XHRcdFx0Ly8gYXMgdGhlIFVSTCBtYXkgY2hhbmdlIGluIHRoZSBjYXNlIG9mIEZDTFxuXHRcdFx0XHRcdFx0dGhpcy5faGFuZGxlU3RpY2t5T24obmV3RG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG1vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0Ly8gYWNjb3JkaW5nIHRvIFVYIGluIGNhc2Ugb2YgZW5hYmxlZCBjb2xsYWJvcmF0aW9uIGRyYWZ0IHdlIHNoYXJlIHRoZSBvYmplY3QgaW1tZWRpYXRlbHlcblx0XHRcdFx0XHRcdGF3YWl0IHNoYXJlT2JqZWN0KG5ld0RvY3VtZW50Q29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGVkaXRpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0ZGVsZXRlTXVsdGlwbGVEb2N1bWVudHMoYUNvbnRleHRzOiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmJlZm9yZURlbGV0ZUNhbGxCYWNrID0gdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlRGVsZXRlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YmVmb3JlRGVsZXRlQ2FsbEJhY2s6IHRoaXMuYmFzZS5lZGl0Rmxvdy5vbkJlZm9yZURlbGV0ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzKGFDb250ZXh0cywgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGRyYWZ0IHN0YXR1cyBhbmQgZGlzcGxheXMgdGhlIGVycm9yIG1lc3NhZ2VzIGlmIHRoZXJlIGFyZSBlcnJvcnMgZHVyaW5nIGFuIHVwZGF0ZS5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSB1cGRhdGVkIGZpZWxkXG5cdCAqIEBwYXJhbSBvUHJvbWlzZSBQcm9taXNlIHRvIGRldGVybWluZSB3aGVuIHRoZSB1cGRhdGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4gVGhlIHByb21pc2Ugc2hvdWxkIGJlIHJlc29sdmVkIHdoZW4gdGhlIHVwZGF0ZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBzbyB0aGUgZHJhZnQgc3RhdHVzIGNhbiBiZSB1cGRhdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIG9uY2UgZHJhZnQgc3RhdHVzIGhhcyBiZWVuIHVwZGF0ZWRcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I3VwZGF0ZURvY3VtZW50XG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVwZGF0ZURvY3VtZW50KG9Db250ZXh0OiBvYmplY3QsIG9Qcm9taXNlOiBQcm9taXNlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0cmFuc2FjdGlvbkhlbHBlciA9IHRoaXMuX2dldFRyYW5zYWN0aW9uSGVscGVyKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxCaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYklzRHJhZnQgPSB0aGlzLl9nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KSA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdDtcblxuXHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0cmV0dXJuIHRoaXMuX3N5bmNUYXNrKGFzeW5jICgpID0+IHtcblx0XHRcdGlmIChvcmlnaW5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdHRyYW5zYWN0aW9uSGVscGVyLmhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucygpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYklzRHJhZnQpIHtcblx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0XHQvLyBJZiBhIG5hdmlnYXRpb24gaGFwcGVuZWQgd2hpbGUgb1Byb21pc2Ugd2FzIGJlaW5nIHJlc29sdmVkLCB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGNoYW5nZWRcblx0XHRcdFx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSBzaG91bGRuJ3QgZG8gYW55dGhpbmdcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0aWYgKGJJc0RyYWZ0ICYmIG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQgPT09IG9yaWdpbmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRzRW50aXR5U2V0TmFtZSA9IChvTWV0YU1vZGVsIGFzIGFueSkuZ2V0TWV0YUNvbnRleHQob0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRcdFx0XHRhU2VtYW50aWNLZXlzID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG9NZXRhTW9kZWwsIHNFbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0XHRpZiAoYVNlbWFudGljS2V5cyAmJiBhU2VtYW50aWNLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTZW1hbnRpY01hcHBpbmcgPSB0aGlzLl9nZXRTZW1hbnRpY01hcHBpbmcoKSxcblx0XHRcdFx0XHRcdFx0c0N1cnJlbnRTZW1hbnRpY1BhdGggPSBvQ3VycmVudFNlbWFudGljTWFwcGluZyAmJiBvQ3VycmVudFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGgsXG5cdFx0XHRcdFx0XHRcdHNDaGFuZ2VkUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQmluZGluZ0NvbnRleHQsIHRydWUpO1xuXHRcdFx0XHRcdFx0Ly8gc0N1cnJlbnRTZW1hbnRpY1BhdGggY291bGQgYmUgbnVsbCBpZiB3ZSBoYXZlIG5hdmlnYXRlZCB2aWEgZGVlcCBsaW5rIHRoZW4gdGhlcmUgYXJlIG5vIHNlbWFudGljTWFwcGluZ3MgdG8gY2FsY3VsYXRlIGl0IGZyb21cblx0XHRcdFx0XHRcdGlmIChzQ3VycmVudFNlbWFudGljUGF0aCAmJiBzQ3VycmVudFNlbWFudGljUGF0aCAhPT0gc0NoYW5nZWRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX2hhbmRsZU5ld0NvbnRleHQob0JpbmRpbmdDb250ZXh0IGFzIENvbnRleHQsIHRydWUsIGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZlZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgZG9jdW1lbnRcIiwgb0Vycm9yKTtcblx0XHRcdFx0aWYgKGJJc0RyYWZ0ICYmIG9yaWdpbmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBJbnRlcm5hbCBvbmx5IHBhcmFtcyAtLS1cblx0Ly8gKiBAcGFyYW0ge3N0cmluZ30gbVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXHQvLyAqICAgICAgICAgICAgICAgICAgICBTeW5jIC0gdGhlIGNyZWF0aW9uIGlzIHRyaWdnZXJlZCBhbmQgb25jZSB0aGUgZG9jdW1lbnQgaXMgY3JlYXRlZCwgdGhlIG5hdmlnYXRpb24gaXMgZG9uZVxuXHQvLyAqICAgICAgICAgICAgICAgICAgICBBc3luYyAtIHRoZSBjcmVhdGlvbiBhbmQgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGluc3RhbmNlIGFyZSBkb25lIGluIHBhcmFsbGVsXG5cdC8vICogICAgICAgICAgICAgICAgICAgIERlZmVycmVkIC0gdGhlIGNyZWF0aW9uIGlzIGRvbmUgb24gdGhlIHRhcmdldCBwYWdlXG5cdC8vICogICAgICAgICAgICAgICAgICAgIENyZWF0aW9uUm93IC0gVGhlIGNyZWF0aW9uIGlzIGRvbmUgaW5saW5lIGFzeW5jIHNvIHRoZSB1c2VyIGlzIG5vdCBibG9ja2VkXG5cdC8vIG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93IEluc3RhbmNlIG9mIHRoZSBjcmVhdGlvbiByb3cgLSAoVE9ETzogZ2V0IHJpZCBidXQgdXNlIGxpc3QgYmluZGluZ3Mgb25seSlcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1wYXJhbVxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSB2TGlzdEJpbmRpbmcgIE9EYXRhTGlzdEJpbmRpbmcgb2JqZWN0IG9yIHRoZSBiaW5kaW5nIHBhdGggZm9yIGEgdGVtcG9yYXJ5IGxpc3QgYmluZGluZ1xuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblx0ICogICAgICAgICAgICAgICAgICAgIE5ld1BhZ2UgLSB0aGUgY3JlYXRlZCBkb2N1bWVudCBpcyBzaG93biBpbiBhIG5ldyBwYWdlLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZXRhZGF0YSAnU3luYycsICdBc3luYycgb3IgJ0RlZmVycmVkJyBpcyB1c2VkXG5cdCAqICAgICAgICAgICAgICAgICAgICBJbmxpbmUgLSBUaGUgY3JlYXRpb24gaXMgZG9uZSBpbmxpbmUgKGluIGEgdGFibGUpXG5cdCAqICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbCAtIFRoZSBjcmVhdGlvbiBpcyBkb25lIGluIGEgZGlmZmVyZW50IGFwcGxpY2F0aW9uIHNwZWNpZmllZCB2aWEgdGhlIHBhcmFtZXRlciAnb3V0Ym91bmQnXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnRhYmxlSWQgSUQgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLm91dGJvdW5kIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCB3aGVyZSB0aGUgZG9jdW1lbnQgaXMgY3JlYXRlZCBpbiBjYXNlIG9mIGNyZWF0aW9uTW9kZSAnRXh0ZXJuYWwnXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kIFNwZWNpZmllcyBpZiB0aGUgbmV3IGVudHJ5IHNob3VsZCBiZSBjcmVhdGVkIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIGEgdGFibGUgaW4gY2FzZSBvZiBjcmVhdGlvbk1vZGUgJ0lubGluZSdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZFxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjY3JlYXRlRG9jdW1lbnRcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgY3JlYXRlRG9jdW1lbnQoXG5cdFx0dkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nIHwgc3RyaW5nLFxuXHRcdG1JblBhcmFtZXRlcnM6IHtcblx0XHRcdGNyZWF0aW9uTW9kZTogc3RyaW5nO1xuXHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdG91dGJvdW5kPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLl9nZXRHbG9iYWxVSU1vZGVsKCk7XG5cdFx0bGV0IG9UYWJsZTogYW55OyAvL3Nob3VsZCBiZSBUYWJsZSBidXQgdGhlcmUgYXJlIG1pc3NpbmcgbWV0aG9kcyBpbnRvIHRoZSBkZWZcblx0XHRsZXQgbVBhcmFtZXRlcnM6IGFueSA9IG1JblBhcmFtZXRlcnM7XG5cdFx0bGV0IG9DcmVhdGlvbjogUHJvbWlzZTxDb250ZXh0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSB0aGlzLl9nZXRSZXNvdXJjZUJ1bmRsZSgpO1xuXHRcdGNvbnN0IGJTaG91bGRCdXN5TG9jayA9XG5cdFx0XHQhbVBhcmFtZXRlcnMgfHxcblx0XHRcdChtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpO1xuXHRcdGxldCBvRXhlY0N1c3RvbVZhbGlkYXRpb24gPSBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5yZW1vdmVJQXBwU3RhdGVLZXkoKTtcblxuXHRcdGlmIChtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCkge1xuXHRcdFx0Ly8gQ3JlYXRlIGJ5IG5hdmlnYXRpbmcgdG8gYW4gZXh0ZXJuYWwgdGFyZ2V0XG5cdFx0XHQvLyBUT0RPOiBDYWxsIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIChjdXJyZW50bHkgdXNpbmcgdGhlIHNhbWUgYXMgZm9yIG91dGJvdW5kIGNoZXZyb24gbmF2LCBhbmQgd2l0aG91dCBhbnkgY29udGV4dCAtIDNyZCBwYXJhbSlcblx0XHRcdGF3YWl0IHRoaXMuX3N5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGNvbnN0IHNDcmVhdGVQYXRoID0gTW9kZWxIZWxwZXIuZ2V0QWJzb2x1dGVNZXRhUGF0aEZvckxpc3RCaW5kaW5nKHRoaXMuZ2V0VmlldygpLCB2TGlzdEJpbmRpbmcpO1xuXG5cdFx0XHQob0NvbnRyb2xsZXIgYXMgYW55KS5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIG1QYXJhbWV0ZXJzLm91dGJvdW5kLCB1bmRlZmluZWQsIHNDcmVhdGVQYXRoKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBtUGFyYW1ldGVycy5jcmVhdGlvblJvdykge1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93T2JqZWN0cyA9IG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCk7XG5cdFx0XHRkZWxldGUgb0NyZWF0aW9uUm93T2JqZWN0c1tcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdFx0XHRvVGFibGUgPSBtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRQYXJlbnQoKTtcblx0XHRcdG9FeGVjQ3VzdG9tVmFsaWRhdGlvbiA9IHRyYW5zYWN0aW9uSGVscGVyLnZhbGlkYXRlRG9jdW1lbnQoXG5cdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZGF0YTogb0NyZWF0aW9uUm93T2JqZWN0cyxcblx0XHRcdFx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLmRhdGEoXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBpcyBzZXQgdG8gZmFsc2UgaW4gbWFuaWZlc3QgY29udmVydGVyIChUYWJsZS50cykgaWYgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIGV4aXN0c1xuXHRcdFx0aWYgKG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLmRhdGEoXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lICYmIG1QYXJhbWV0ZXJzLnRhYmxlSWQpIHtcblx0XHRcdG9UYWJsZSA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMudGFibGVJZCkgYXMgVGFibGU7XG5cdFx0fVxuXG5cdFx0aWYgKG9UYWJsZSAmJiBvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0Y29uc3QgZm5Gb2N1c09yU2Nyb2xsID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lID8gb1RhYmxlLmZvY3VzUm93LmJpbmQob1RhYmxlKSA6IG9UYWJsZS5zY3JvbGxUb0luZGV4LmJpbmQob1RhYmxlKTtcblx0XHRcdG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0YXdhaXQgb0NyZWF0aW9uO1xuXHRcdFx0XHRmbkZvY3VzT3JTY3JvbGwobVBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPyBvVGFibGUuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIDogMCwgdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBoYW5kbGVTaWRlRWZmZWN0cyA9IGFzeW5jIChvTGlzdEJpbmRpbmc6IGFueSwgb0NyZWF0aW9uUHJvbWlzZTogUHJvbWlzZTxDb250ZXh0PikgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgb05ld0NvbnRleHQgPSBhd2FpdCBvQ3JlYXRpb25Qcm9taXNlO1xuXHRcdFx0XHQvLyB0cmFuc2llbnQgY29udGV4dHMgYXJlIHJlbGlhYmx5IHJlbW92ZWQgb25jZSBvTmV3Q29udGV4dC5jcmVhdGVkKCkgaXMgcmVzb2x2ZWRcblx0XHRcdFx0YXdhaXQgb05ld0NvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGFyZSB0cmFuc2llbnQgY29udGV4dHMsIHdlIG11c3QgYXZvaWQgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcblx0XHRcdFx0Ly8gdGhpcyBpcyBhdm9pZCBhIHBvdGVudGlhbCBsaXN0IHJlZnJlc2gsIHRoZXJlIGNvdWxkIGJlIGEgc2lkZSBlZmZlY3QgdGhhdCByZWZyZXNoZXMgdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHQvLyBpZiBsaXN0IGJpbmRpbmcgaXMgcmVmcmVzaGVkLCB0cmFuc2llbnQgY29udGV4dHMgbWlnaHQgYmUgbG9zdFxuXHRcdFx0XHRpZiAoIUNvbW1vblV0aWxzLmhhc1RyYW5zaWVudENvbnRleHQob0xpc3RCaW5kaW5nKSkge1xuXHRcdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eShvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgZG9jdW1lbnRcIiwgb0Vycm9yKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIGFWYWxpZGF0aW9uTWVzc2FnZXMgRXJyb3IgbWVzc2FnZXMgZnJvbSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvblxuXHRcdCAqL1xuXHRcdGNvbnN0IGNyZWF0ZUN1c3RvbVZhbGlkYXRpb25NZXNzYWdlcyA9IChhVmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnlbXSkgPT4ge1xuXHRcdFx0Y29uc3Qgc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKS5kYXRhKFwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uXCIpO1xuXHRcdFx0Y29uc3QgbUN1c3RvbVZhbGlkaXR5ID0gb1RhYmxlICYmIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIik7XG5cdFx0XHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBhQ3VzdG9tTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0ZpZWxkQ29udHJvbDtcblx0XHRcdGxldCBzVGFyZ2V0OiBzdHJpbmc7XG5cblx0XHRcdC8vIFJlbW92ZSBleGlzdGluZyBDdXN0b21WYWxpZGF0aW9uIG1lc3NhZ2Vcblx0XHRcdG9NZXNzYWdlTWFuYWdlclxuXHRcdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRcdGlmIChvTWVzc2FnZS5jb2RlID09PSBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdGFWYWxpZGF0aW9uTWVzc2FnZXMuZm9yRWFjaCgob1ZhbGlkYXRpb25NZXNzYWdlOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gSGFuZGxlIEJvdW5kIEN1c3RvbVZhbGlkYXRpb24gbWVzc2FnZVxuXHRcdFx0XHRpZiAob1ZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUYXJnZXQpIHtcblx0XHRcdFx0XHRvRmllbGRDb250cm9sID0gQ29yZS5nZXRDb250cm9sKG1DdXN0b21WYWxpZGl0eVtvVmFsaWRhdGlvbk1lc3NhZ2UubWVzc2FnZVRhcmdldF0uZmllbGRJZCkgYXMgQ29udHJvbDtcblx0XHRcdFx0XHRzVGFyZ2V0ID0gYCR7b0ZpZWxkQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7b0ZpZWxkQ29udHJvbC5nZXRCaW5kaW5nUGF0aChcInZhbHVlXCIpfWA7XG5cdFx0XHRcdFx0Ly8gQWRkIHZhbGlkYXRpb24gbWVzc2FnZSBpZiBzdGlsbCBub3QgZXhpc3RzXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b01lc3NhZ2VNYW5hZ2VyXG5cdFx0XHRcdFx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01lc3NhZ2UudGFyZ2V0ID09PSBzVGFyZ2V0O1xuXHRcdFx0XHRcdFx0XHR9KS5sZW5ndGggPT09IDBcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IG9WYWxpZGF0aW9uTWVzc2FnZS5tZXNzYWdlVGV4dCxcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdFx0Y29kZTogc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0ZWNobmljYWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldDogc1RhcmdldFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQWRkIGNvbnRyb2xJZCBpbiBvcmRlciB0byBnZXQgdGhlIGZvY3VzIGhhbmRsaW5nIG9mIHRoZSBlcnJvciBwb3BvdmVyIHJ1bmFibGVcblx0XHRcdFx0XHRjb25zdCBhRXhpc3RpbmdWYWxpZGF0aW9uTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXJcblx0XHRcdFx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb01lc3NhZ2UudGFyZ2V0ID09PSBzVGFyZ2V0O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YUV4aXN0aW5nVmFsaWRhdGlvbk1lc3NhZ2VzWzBdLmFkZENvbnRyb2xJZChtQ3VzdG9tVmFsaWRpdHlbb1ZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUYXJnZXRdLmZpZWxkSWQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIFVuYm91bmQgQ3VzdG9tVmFsaWRhdGlvbiBtZXNzYWdlXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUN1c3RvbU1lc3NhZ2VzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29kZTogc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRcdFx0XHRcdHRleHQ6IG9WYWxpZGF0aW9uTWVzc2FnZS5tZXNzYWdlVGV4dCxcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGFDdXN0b21NZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdGN1c3RvbU1lc3NhZ2VzOiBhQ3VzdG9tTWVzc2FnZXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IHJlc29sdmVDcmVhdGlvbk1vZGUgPSAoXG5cdFx0XHRpbml0aWFsQ3JlYXRpb25Nb2RlOiBzdHJpbmcsXG5cdFx0XHRwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsXG5cdFx0XHRvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHRcdCk6IHN0cmluZyA9PiB7XG5cdFx0XHRpZiAoaW5pdGlhbENyZWF0aW9uTW9kZSAmJiBpbml0aWFsQ3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdFx0XHQvLyB1c2UgdGhlIHBhc3NlZCBjcmVhdGlvbiBtb2RlXG5cdFx0XHRcdHJldHVybiBpbml0aWFsQ3JlYXRpb25Nb2RlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTmV3QWN0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBOYXZpZ2F0aW9uUHJvcGVydHkgY29sbGVjdGlvblxuXHRcdFx0XHRpZiAoIW9MaXN0QmluZGluZy5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdFx0XHRjb25zdCBzUGF0aCA9IG9MaXN0QmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHQvLyBpZiBOZXdBY3Rpb24gd2l0aCBwYXJhbWV0ZXJzIGlzIHByZXNlbnQsIHRoZW4gY3JlYXRpb24gaXMgJ0RlZmVycmVkJ1xuXHRcdFx0XHRcdFx0Ly8gaW4gdGhlIGFic2VuY2Ugb2YgTmV3QWN0aW9uIG9yIE5ld0FjdGlvbiB3aXRoIHBhcmFtZXRlcnMsIGNyZWF0aW9uIGlzIGFzeW5jXG5cdFx0XHRcdFx0XHRzTmV3QWN0aW9uID1cblx0XHRcdFx0XHRcdFx0cHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdFxuXHRcdFx0XHRcdFx0XHRcdD8gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvTmV3QWN0aW9uYClcblx0XHRcdFx0XHRcdFx0XHQ6IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvTmV3QWN0aW9uYCk7XG5cdFx0XHRcdFx0aWYgKHNOZXdBY3Rpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NOZXdBY3Rpb259L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlcmApIHx8IFtdO1xuXHRcdFx0XHRcdFx0Ly8gYmluZGluZyBwYXJhbWV0ZXIgKGVnOiBfaXQpIGlzIG5vdCBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gQ3JlYXRpb25Nb2RlLkRlZmVycmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgYU5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkcyA9IENvbW1vblV0aWxzLmdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyhvTWV0YU1vZGVsLCBzTWV0YVBhdGgsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0aWYgKGFOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHJldHVybiBDcmVhdGlvbk1vZGUuRGVmZXJyZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIENyZWF0aW9uTW9kZS5Bc3luYztcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJTaG91bGRCdXN5TG9jaykge1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFWYWxpZGF0aW9uTWVzc2FnZXMgPSBhd2FpdCB0aGlzLl9zeW5jVGFzayhvRXhlY0N1c3RvbVZhbGlkYXRpb24pO1xuXHRcdFx0aWYgKGFWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjcmVhdGVDdXN0b21WYWxpZGF0aW9uTWVzc2FnZXMoYVZhbGlkYXRpb25NZXNzYWdlcyk7XG5cdFx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBWYWxpZGF0aW9uIGZhaWxlZFwiKTtcblx0XHRcdFx0Ly8gaWYgY3VzdG9tIHZhbGlkYXRpb24gZmFpbHMsIHdlIGxlYXZlIHRoZSBtZXRob2QgaW1tZWRpYXRlbHlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgb0xpc3RCaW5kaW5nOiBhbnk7XG5cdFx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRpZiAodkxpc3RCaW5kaW5nICYmIHR5cGVvZiB2TGlzdEJpbmRpbmcgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gd2UgYWxyZWFkeSBnZXQgYSBsaXN0IGJpbmRpbmcgdXNlIHRoaXMgb25lXG5cdFx0XHRcdG9MaXN0QmluZGluZyA9IHZMaXN0QmluZGluZztcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHZMaXN0QmluZGluZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRvTGlzdEJpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KSh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLCB2TGlzdEJpbmRpbmcpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuU3luYztcblx0XHRcdFx0ZGVsZXRlIG1QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyBvYmplY3Qgb3IgcGF0aCBleHBlY3RlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb01vZGVsID0gb0xpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nID0gdGhpcy5fZ2V0UHJvZ3JhbW1pbmdNb2RlbChvTGlzdEJpbmRpbmcpO1xuXHRcdFx0Y29uc3QgcmVzb2x2ZWRDcmVhdGlvbk1vZGUgPSByZXNvbHZlQ3JlYXRpb25Nb2RlKFxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsLFxuXHRcdFx0XHRvTGlzdEJpbmRpbmcsXG5cdFx0XHRcdG9Nb2RlbC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0KTtcblx0XHRcdGxldCBtQXJnczogYW55O1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93ID0gbVBhcmFtZXRlcnMuY3JlYXRpb25Sb3c7XG5cdFx0XHRsZXQgb0NyZWF0aW9uUm93Q29udGV4dDogYW55O1xuXHRcdFx0bGV0IG9QYXlsb2FkOiBhbnk7XG5cdFx0XHRsZXQgc01ldGFQYXRoOiBzdHJpbmc7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgb1JvdXRpbmdMaXN0ZW5lciA9IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpO1xuXG5cdFx0XHRpZiAocmVzb2x2ZWRDcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5EZWZlcnJlZCkge1xuXHRcdFx0XHRpZiAocmVzb2x2ZWRDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdFx0XHRcdG9DcmVhdGlvblJvd0NvbnRleHQgPSBvQ3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9DcmVhdGlvblJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHQvLyBwcmVmaWxsIGRhdGEgZnJvbSBjcmVhdGlvbiByb3dcblx0XHRcdFx0XHRvUGF5bG9hZCA9IG9DcmVhdGlvblJvd0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGF0YSA9IHt9O1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG9QYXlsb2FkKS5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtzUHJvcGVydHlQYXRofWApO1xuXHRcdFx0XHRcdFx0Ly8gZW5zdXJlIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcmUgbm90IHBhcnQgb2YgdGhlIHBheWxvYWQsIGRlZXAgY3JlYXRlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHkgJiYgb1Byb3BlcnR5LiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRhdGFbc1Byb3BlcnR5UGF0aF0gPSBvUGF5bG9hZFtzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMoLypvQ3JlYXRpb25Sb3dDb250ZXh0Ki8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZXNvbHZlZENyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93IHx8IHJlc29sdmVkQ3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCA9IGZhbHNlOyAvLyBjdXJyZW50bHkgbm90IGZ1bGx5IHN1cHBvcnRlZFxuXHRcdFx0XHRcdC8vIGJ1c3kgaGFuZGxpbmcgc2hhbGwgYmUgZG9uZSBsb2NhbGx5IG9ubHlcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5idXN5TW9kZSA9IFwiTG9jYWxcIjtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5idXN5SWQgPSBvVGFibGU/LmdldFBhcmVudCgpPy5nZXRUYWJsZURlZmluaXRpb24oKT8uYW5ub3RhdGlvbi5pZDtcblxuXHRcdFx0XHRcdC8vIHRha2UgY2FyZSBvbiBtZXNzYWdlIGhhbmRsaW5nLCBkcmFmdCBpbmRpY2F0b3IgKGluIGNhc2Ugb2YgZHJhZnQpXG5cdFx0XHRcdFx0Ly8gQXR0YWNoIHRoZSBjcmVhdGUgc2VudCBhbmQgY3JlYXRlIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0XHRcdHRoaXMuX2hhbmRsZUNyZWF0ZUV2ZW50cyhvTGlzdEJpbmRpbmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrID0gdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHdhcyBjYWxsZWQgd2l0aCBwcmVmZXJyZWRNb2RlPWF1dG9DcmVhdGVXaXRoLCB3ZSB3YW50IHRvIHNraXAgdGhlXG5cdFx0XHRcdC8vIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2cgPSBvQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBNb2RlKCkgPT09IFN0YXJ0dXBNb2RlLkF1dG9DcmVhdGU7XG5cblx0XHRcdFx0b0NyZWF0aW9uID0gdHJhbnNhY3Rpb25IZWxwZXIuY3JlYXRlRG9jdW1lbnQoXG5cdFx0XHRcdFx0b0xpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvTmF2aWdhdGlvbjtcblx0XHRcdHN3aXRjaCAocmVzb2x2ZWRDcmVhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuRGVmZXJyZWQ6XG5cdFx0XHRcdFx0b05hdmlnYXRpb24gPSBvUm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChvTGlzdEJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdGJEZWZlcnJlZENvbnRleHQ6IHRydWUsXG5cdFx0XHRcdFx0XHRlZGl0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGJGb3JjZUZvY3VzOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkFzeW5jOlxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gb1JvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQob0xpc3RCaW5kaW5nLCB7XG5cdFx0XHRcdFx0XHRhc3luY0NvbnRleHQ6IG9DcmVhdGlvbixcblx0XHRcdFx0XHRcdGVkaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0YkZvcmNlRm9jdXM6IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuU3luYzpcblx0XHRcdFx0XHRtQXJncyA9IHtcblx0XHRcdFx0XHRcdGVkaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0YkZvcmNlRm9jdXM6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSB8fCBtUGFyYW1ldGVycy5jcmVhdGVBY3Rpb24pIHtcblx0XHRcdFx0XHRcdG1BcmdzLnRyYW5zaWVudCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gb0NyZWF0aW9uPy50aGVuKGZ1bmN0aW9uIChvTmV3RG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmICghb05ld0RvY3VtZW50Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1JvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UoXG5cdFx0XHRcdFx0XHRcdFx0Y29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9EQVRBX1JFQ0VJVkVEX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBjb3JlUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FRElURkxPV19TQVBGRV9DUkVBVElPTl9GQUlMRURfREVTQ1JJUFRJT05cIilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBTeW5jIGNyZWF0aW9uIHdhcyB0cmlnZ2VyZWQgZm9yIGEgZGVmZXJyZWQgY3JlYXRpb24sIHdlIGRvbid0IG5hdmlnYXRlIGZvcndhcmRcblx0XHRcdFx0XHRcdFx0Ly8gYXMgd2UncmUgYWxyZWFkeSBvbiB0aGUgY29ycmVzcG9uZGluZyBPYmplY3RQYWdlXG5cdFx0XHRcdFx0XHRcdHJldHVybiBtUGFyYW1ldGVycy5iRnJvbURlZmVycmVkXG5cdFx0XHRcdFx0XHRcdFx0PyBvUm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlVG9Db250ZXh0KG9OZXdEb2N1bWVudENvbnRleHQsIG1BcmdzKVxuXHRcdFx0XHRcdFx0XHRcdDogb1JvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQob05ld0RvY3VtZW50Q29udGV4dCwgbUFyZ3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5JbmxpbmU6XG5cdFx0XHRcdFx0aGFuZGxlU2lkZUVmZmVjdHMob0xpc3RCaW5kaW5nLCBvQ3JlYXRpb24gYXMgUHJvbWlzZTxDb250ZXh0Pik7XG5cdFx0XHRcdFx0dGhpcy5fc3luY1Rhc2sob0NyZWF0aW9uKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3c6XG5cdFx0XHRcdFx0Ly8gdGhlIGNyZWF0aW9uIHJvdyBzaGFsbCBiZSBjbGVhcmVkIG9uY2UgdGhlIHZhbGlkYXRpb24gY2hlY2sgd2FzIHN1Y2Nlc3NmdWwgYW5kXG5cdFx0XHRcdFx0Ly8gdGhlcmVmb3JlIHRoZSBQT1NUIGNhbiBiZSBzZW50IGFzeW5jIHRvIHRoZSBiYWNrZW5kXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9DcmVhdGlvblJvd0xpc3RCaW5kaW5nID0gb0NyZWF0aW9uUm93Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cblx0XHRcdFx0XHRcdGlmICghbVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVTaWRlRWZmZWN0cyhvTGlzdEJpbmRpbmcsIG9DcmVhdGlvbiBhcyBQcm9taXNlPENvbnRleHQ+KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld1RyYW5zaWVudENvbnRleHQgPSBvQ3JlYXRpb25Sb3dMaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRcdG9DcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChvTmV3VHJhbnNpZW50Q29udGV4dCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3JzIFRPIGJlIGNoZWNrZWQgd2l0aCBtb2RlbCBjb2xsZWFndWVzXG5cdFx0XHRcdFx0XHRvTmV3VHJhbnNpZW50Q29udGV4dC5jcmVhdGVkKCkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgZmFzdCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gb0NyZWF0aW9uUm93Q29udGV4dC5kZWxldGUoXCIkZGlyZWN0XCIpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHQvLyBSZXNldCBidXN5IGluZGljYXRvciBhZnRlciBhIHZhbGlkYXRpb24gZXJyb3Jcblx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikpKSB7XG5cdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ3JlYXRpb25Sb3cgbmF2aWdhdGlvbiBlcnJvcjogXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uID0gUHJvbWlzZS5yZWplY3QoYFVuaGFuZGxlZCBjcmVhdGlvbk1vZGUgJHtyZXNvbHZlZENyZWF0aW9uTW9kZX1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYklzTmV3UGFnZUNyZWF0aW9uID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgbVBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0aWYgKG9DcmVhdGlvbikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFQYXJhbXMgPSBhd2FpdCBQcm9taXNlLmFsbChbb0NyZWF0aW9uLCBvTmF2aWdhdGlvbl0pO1xuXHRcdFx0XHRcdHRoaXMuX3NldFN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMoc1Byb2dyYW1taW5nTW9kZWwsIG9Nb2RlbCk7XG5cblx0XHRcdFx0XHRpZiAoYklzTmV3UGFnZUNyZWF0aW9uKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRFZGl0TW9kZShFZGl0TW9kZS5FZGl0YWJsZSwgYklzTmV3UGFnZUNyZWF0aW9uKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvTmV3RG9jdW1lbnRDb250ZXh0ID0gYVBhcmFtc1swXTtcblx0XHRcdFx0XHRpZiAob05ld0RvY3VtZW50Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLl9pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuX3NlbmRBY3Rpdml0eShBY3Rpdml0eS5DcmVhdGUsIG9OZXdEb2N1bWVudENvbnRleHQpO1xuXHRcdFx0XHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVTdGlja3lPbihvTmV3RG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBhY2NvcmRpbmcgdG8gVVggaW4gY2FzZSBvZiBlbmFibGVkIGNvbGxhYm9yYXRpb24gZHJhZnQgd2Ugc2hhcmUgdGhlIG9iamVjdCBpbW1lZGlhdGVseVxuXHRcdFx0XHRcdFx0XHRhd2FpdCBzaGFyZU9iamVjdChvTmV3RG9jdW1lbnRDb250ZXh0IGFzIFY0Q29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdC8vIFRPRE86IGN1cnJlbnRseSwgdGhlIG9ubHkgZXJyb3JzIGhhbmRsZWQgaGVyZSBhcmUgcmFpc2VkIGFzIHN0cmluZyAtIHNob3VsZCBiZSBjaGFuZ2VkIHRvIEVycm9yIG9iamVjdHNcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRlcnJvciA9PT0gQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyB8fFxuXHRcdFx0XHRcdFx0ZXJyb3IgPT09IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQgfHxcblx0XHRcdFx0XHRcdGVycm9yID09PSBDb25zdGFudHMuQ3JlYXRpb25GYWlsZWRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIGNyZWF0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCBieSB1c2VyIG9yIGZhaWxlZCBpbiBiYWNrZW5kID0+IGluIGNhc2Ugd2UgaGF2ZSBuYXZpZ2F0ZWQgdG8gdHJhbnNpZW50IGNvbnRleHQgYmVmb3JlLCBuYXZpZ2F0ZSBiYWNrXG5cdFx0XHRcdFx0XHQvLyB0aGUgc3dpdGNoLXN0YXRlbWVudCBhYm92ZSBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgaGFwcGVucyBpbiBjcmVhdGlvbk1vZGVzIGRlZmVycmVkIGFuZCBhc3luYy4gQnV0IGluIGZhY3QsIGluIHRoZXNlIGNhc2VzIGFmdGVyIHRoZSBuYXZpZ2F0aW9uIGZyb20gcm91dGVNYXRjaGVkIGluIE9QIGNvbXBvbmVudFxuXHRcdFx0XHRcdFx0Ly8gY3JlYXRlRGVmZXJyZWRDb250ZXh0IGlzIHRyaWdnZXJkLCB3aGljaCBjYWxscyB0aGlzIG1ldGhvZCAoY3JlYXRlRG9jdW1lbnQpIGFnYWluIC0gdGhpcyB0aW1lIHdpdGggY3JlYXRpb25Nb2RlIHN5bmMuIFRoZXJlZm9yZSwgYWxzbyBpbiB0aGF0IG1vZGUgd2UgbmVlZCB0byB0cmlnZ2VyIGJhY2sgbmF2aWdhdGlvbi5cblx0XHRcdFx0XHRcdC8vIFRoZSBvdGhlciBjYXNlcyBtaWdodCBzdGlsbCBiZSBuZWVkZWQgaW4gY2FzZSB0aGUgbmF2aWdhdGlvbiBmYWlscy5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5TeW5jIHx8XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkQ3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRGVmZXJyZWQgfHxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5Bc3luY1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG9Sb3V0aW5nTGlzdGVuZXIubmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChiU2hvdWxkQnVzeUxvY2spIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ1NhdmUnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdTYXZlJyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnU2F2ZScgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZVNhdmVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2F2ZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlc29sdmVkLCB0aGUgJ1NhdmUnIGFjdGlvbiBpcyB0cmlnZ2VyZWQuIElmIHJlamVjdGVkLCB0aGUgJ1NhdmUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkIGFuZCB0aGUgdXNlciBzdGF5cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjb25CZWZvcmVTYXZlXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlU2F2ZShtUGFyYW1ldGVycz86IHsgY29udGV4dD86IENvbnRleHQgfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSAnQ3JlYXRlJyBhY3Rpb24uIFlvdSBjYW4gZXhlY3V0ZSBjdXN0b20gY29kaW5nIGluIHRoaXMgZnVuY3Rpb24uXG5cdCAqIFRoZSBmcmFtZXdvcmsgd2FpdHMgZm9yIHRoZSByZXR1cm5lZCBwcm9taXNlIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnQ3JlYXRlJyBhY3Rpb24gaXMgc3RvcHBlZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtICBtUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gb25CZWZvcmVDcmVhdGVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHRQYXRoIFBhdGggcG9pbnRpbmcgdG8gdGhlIGNvbnRleHQgb24gd2hpY2ggQ3JlYXRlIGFjdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNyZWF0ZVBhcmFtZXRlcnMgQXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIGZpbGxlZCBpbiB0aGUgQWN0aW9uIFBhcmFtZXRlciBEaWFsb2dcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnQ3JlYXRlJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdDcmVhdGUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlQ3JlYXRlXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTguMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlQ3JlYXRlKG1QYXJhbWV0ZXJzPzogeyBjb250ZXh0UGF0aD86IHN0cmluZzsgY3JlYXRlUGFyYW1ldGVycz86IGFueVtdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0VkaXQnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdFZGl0JyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnRWRpdCcgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGRpc3BsYXkgbW9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZUVkaXRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgZWRpdGVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLiBJZiByZXNvbHZlZCwgdGhlICdFZGl0JyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdFZGl0JyBhY3Rpb24gaXMgbm90IHRyaWdnZXJlZCBhbmQgdGhlIHVzZXIgc3RheXMgaW4gZGlzcGxheSBtb2RlLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlRWRpdFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjk4LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZUVkaXQobVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0Rpc2NhcmQnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdEaXNjYXJkJyBhY3Rpb24uXG5cdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnRGlzY2FyZCcgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZURpc2NhcmRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgZGlzY2FyZGVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLiBJZiByZXNvbHZlZCwgdGhlICdEaXNjYXJkJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdEaXNjYXJkJyBhY3Rpb24gaXMgbm90IHRyaWdnZXJlZCBhbmQgdGhlIHVzZXIgc3RheXMgaW4gZWRpdCBtb2RlLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlRGlzY2FyZFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjk4LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZURpc2NhcmQobVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0RlbGV0ZScgYWN0aW9uLiBZb3UgY2FuIGV4ZWN1dGUgY3VzdG9tIGNvZGluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuXHQgKiBUaGUgZnJhbWV3b3JrIHdhaXRzIGZvciB0aGUgcmV0dXJuZWQgcHJvbWlzZSB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZyB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuXHQgKiBJZiB5b3UgcmVqZWN0IHRoZSBwcm9taXNlLCB0aGUgJ0RlbGV0ZScgYWN0aW9uIGlzIHN0b3BwZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gb25CZWZvcmVEZWxldGVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRleHRzIEFuIGFycmF5IG9mIGNvbnRleHRzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGRlbGV0ZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnRGVsZXRlJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdEZWxldGUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkLlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I29uQmVmb3JlRGVsZXRlXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTguMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlRGVsZXRlKG1QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8vIEludGVybmFsIG9ubHkgcGFyYW1zIC0tLVxuXHQvLyBAcGFyYW0ge2Jvb2xlYW59IG1QYXJhbWV0ZXJzLmJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIEluZGljYXRlcyB3aGV0aGVyIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgaWdub3JlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIFNhdmUgZHVyaW5nIGFuIElubGluZSBjcmVhdGlvblxuXHQvLyBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMuYmluZGluZ3MgTGlzdCBiaW5kaW5ncyBvZiB0aGUgdGFibGVzIGluIHRoZSB2aWV3LlxuXHQvLyBCb3RoIG9mIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBmb3IgdGhlIHNhbWUgcHVycG9zZS4gVXNlciBjYW4gZW50ZXIgc29tZSBpbmZvcm1hdGlvbiBpbiB0aGUgY3JlYXRpb24gcm93KHMpIGJ1dCBkb2VzIG5vdCAnQWRkIHJvdycsIGluc3RlYWQgY2xpY2tzIFNhdmUuXG5cdC8vIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGluIHRoZSB2aWV3LlxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXBhcmFtXG5cdC8qKlxuXHQgKiBTYXZlcyBhIG5ldyBkb2N1bWVudCBhZnRlciBjaGVja2luZyBpdC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCAgQ29udGV4dCBvZiB0aGUgZWRpdGFibGUgZG9jdW1lbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHNhdmUgaXMgY29tcGxldGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I3NhdmVEb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBzYXZlRG9jdW1lbnQob0NvbnRleHQ6IFY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMgfHwge307XG5cdFx0Y29uc3QgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBtUGFyYW1ldGVycy5iRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciB8fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYkRyYWZ0TmF2aWdhdGlvbiA9IHRydWU7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IHRoaXMuX2dldFJlc291cmNlQnVuZGxlKCk7XG5cdFx0Y29uc3QgYUJpbmRpbmdzID0gbVBhcmFtZXRlcnMuYmluZGluZ3M7XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5fc3luY1Rhc2soKTtcblx0XHRcdGF3YWl0IHRoaXMuX3N1Ym1pdE9wZW5DaGFuZ2VzKG9Db250ZXh0KTtcblx0XHRcdGF3YWl0IHRoaXMuX2NoZWNrRm9yVmFsaWRhdGlvbkVycm9ycygpO1xuXHRcdFx0YXdhaXQgdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlU2F2ZSh7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXG5cdFx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuX2dldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX2dldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRcdGxldCBzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5IHx8IG9Db250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpKSAmJlxuXHRcdFx0XHRvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gTm8gbmVlZCB0byB0cnkgdG8gZ2V0IHJpZ2h0bW9zdCBjb250ZXh0IGluIGNhc2Ugb2YgYSBuZXcgb2JqZWN0XG5cdFx0XHRcdHNpYmxpbmdJbmZvID0gYXdhaXQgdGhpcy5fY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRvUm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKSxcblx0XHRcdFx0XHRzUHJvZ3JhbW1pbmdNb2RlbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFjdGl2ZURvY3VtZW50Q29udGV4dCA9IGF3YWl0IHRyYW5zYWN0aW9uSGVscGVyLnNhdmVEb2N1bWVudChcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdGFCaW5kaW5ncyxcblx0XHRcdFx0dGhpcy5fZ2V0TWVzc2FnZUhhbmRsZXIoKSxcblx0XHRcdFx0bVBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLl9yZW1vdmVTdGlja3lTZXNzaW9uSW50ZXJuYWxQcm9wZXJ0aWVzKHNQcm9ncmFtbWluZ01vZGVsKTtcblxuXHRcdFx0dGhpcy5fc2VuZEFjdGl2aXR5KEFjdGl2aXR5LkFjdGl2YXRlLCBhY3RpdmVEb2N1bWVudENvbnRleHQpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlckNvbmZpZ3VyZWRTdXJ2ZXkoU3RhbmRhcmRBY3Rpb25zLnNhdmUsIFRyaWdnZXJUeXBlLnN0YW5kYXJkQWN0aW9uKTtcblxuXHRcdFx0dGhpcy5fc2V0RWRpdE1vZGUoRWRpdE1vZGUuRGlzcGxheSwgZmFsc2UpO1xuXHRcdFx0dGhpcy5fZ2V0TWVzc2FnZUhhbmRsZXIoKS5zaG93TWVzc2FnZURpYWxvZygpO1xuXG5cdFx0XHRpZiAoYWN0aXZlRG9jdW1lbnRDb250ZXh0ICE9PSBvQ29udGV4dCkge1xuXHRcdFx0XHRsZXQgY29udGV4dFRvTmF2aWdhdGUgPSBhY3RpdmVEb2N1bWVudENvbnRleHQ7XG5cdFx0XHRcdGlmIChvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0c2libGluZ0luZm8gPSBzaWJsaW5nSW5mbyA/PyB0aGlzLl9jcmVhdGVTaWJsaW5nSW5mbyhvQ29udGV4dCwgYWN0aXZlRG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVQYXRoc0luSGlzdG9yeShzaWJsaW5nSW5mby5wYXRoTWFwcGluZyk7XG5cdFx0XHRcdFx0aWYgKHNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQuZ2V0UGF0aCgpICE9PSBhY3RpdmVEb2N1bWVudENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0VG9OYXZpZ2F0ZSA9IHNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlTmV3Q29udGV4dChjb250ZXh0VG9OYXZpZ2F0ZSwgZmFsc2UsIGZhbHNlLCBiRHJhZnROYXZpZ2F0aW9uLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0aWYgKCEob0Vycm9yICYmIG9FcnJvci5jYW5jZWxlZCkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2F2aW5nIHRoZSBkb2N1bWVudFwiLCBvRXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG9FcnJvcik7XG5cdFx0fVxuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyB0b2dnbGVEcmFmdEFjdGl2ZShvQ29udGV4dDogVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IGJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRjb25zdCBiSXNEcmFmdCA9IG9Db250ZXh0ICYmIHRoaXMuX2dldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0O1xuXG5cdFx0Ly90b2dnbGUgYmV0d2VlbiBkcmFmdCBhbmQgYWN0aXZlIGRvY3VtZW50IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlZGl0IGRyYWZ0cyBhbmQgYWN0aXZlIGRvY3VtZW50cyB3aXRoIGRyYWZ0KVxuXHRcdGlmIChcblx0XHRcdCFiSXNEcmFmdCB8fFxuXHRcdFx0IShcblx0XHRcdFx0KCFvQ29udGV4dERhdGEuSXNBY3RpdmVFbnRpdHkgJiYgb0NvbnRleHREYXRhLkhhc0FjdGl2ZUVudGl0eSkgfHxcblx0XHRcdFx0KG9Db250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSAmJiBvQ29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkpXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFvQ29udGV4dERhdGEuSXNBY3RpdmVFbnRpdHkgJiYgb0NvbnRleHREYXRhLkhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0Ly9zdGFydCBQb2ludDogZWRpdCBkcmFmdFxuXHRcdFx0YkVkaXRhYmxlID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHN0YXJ0IHBvaW50IGFjdGl2ZSBkb2N1bWVudFxuXHRcdFx0YkVkaXRhYmxlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX2dldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRcdGNvbnN0IG9SaWdodG1vc3RDb250ZXh0ID0gb1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSA/IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpIDogb0NvbnRleHQ7XG5cdFx0XHRsZXQgc2libGluZ0luZm8gPSBhd2FpdCB0aGlzLl9jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKG9Db250ZXh0LCBvUmlnaHRtb3N0Q29udGV4dCwgUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCwgZmFsc2UpO1xuXHRcdFx0aWYgKCFzaWJsaW5nSW5mbyAmJiBvQ29udGV4dCAhPT0gb1JpZ2h0bW9zdENvbnRleHQpIHtcblx0XHRcdFx0Ly8gVHJ5IHRvIGNvbXB1dGUgc2libGluZyBpbmZvIGZvciB0aGUgcm9vdCBjb250ZXh0IGlmIGl0IGZhaWxzIGZvciB0aGUgcmlnaHRtb3N0IGNvbnRleHRcblx0XHRcdFx0Ly8gLS0+IEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSB0cnkgdG8gc3dpdGNoIGJldHdlZW4gZHJhZnQgYW5kIGFjdGl2ZSBidXQgYSBjaGlsZCBlbnRpdHkgaGFzIG5vIHNpYmxpbmcsIHRoZSBzd2l0Y2ggd2lsbCBjbG9zZSB0aGUgY2hpbGQgY29sdW1uXG5cdFx0XHRcdHNpYmxpbmdJbmZvID0gYXdhaXQgdGhpcy5fY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihvQ29udGV4dCwgb0NvbnRleHQsIFByb2dyYW1taW5nTW9kZWwuRHJhZnQsIGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdGlmIChzaWJsaW5nSW5mbykge1xuXHRcdFx0XHR0aGlzLl9zZXRFZGl0TW9kZShiRWRpdGFibGUgPyBFZGl0TW9kZS5FZGl0YWJsZSA6IEVkaXRNb2RlLkRpc3BsYXksIGZhbHNlKTsgLy9zd2l0Y2ggdG8gZWRpdCBtb2RlIG9ubHkgaWYgYSBkcmFmdCBpcyBhdmFpbGFibGVcblxuXHRcdFx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGxhc3RTZW1hbnRpY01hcHBpbmcgPSB0aGlzLl9nZXRTZW1hbnRpY01hcHBpbmcoKTtcblx0XHRcdFx0XHRpZiAobGFzdFNlbWFudGljTWFwcGluZz8udGVjaG5pY2FsUGF0aCA9PT0gb0NvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gc2libGluZ0luZm8ucGF0aE1hcHBpbmdbc2libGluZ0luZm8ucGF0aE1hcHBpbmcubGVuZ3RoIC0gMV0ubmV3UGF0aDtcblx0XHRcdFx0XHRcdHNpYmxpbmdJbmZvLnBhdGhNYXBwaW5nLnB1c2goeyBvbGRQYXRoOiBsYXN0U2VtYW50aWNNYXBwaW5nLnNlbWFudGljUGF0aCwgbmV3UGF0aDogdGFyZ2V0UGF0aCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUGF0aHNJbkhpc3Rvcnkoc2libGluZ0luZm8ucGF0aE1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlTmV3Q29udGV4dChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0LCBiRWRpdGFibGUsIHRydWUsIHRydWUsIHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiRXJyb3IgaW4gRWRpdEZsb3cudG9nZ2xlRHJhZnRBY3RpdmUgLSBDYW5ub3QgZmluZCBzaWJsaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGBFcnJvciBpbiBFZGl0Rmxvdy50b2dnbGVEcmFmdEFjdGl2ZToke29FcnJvcn1gIGFzIGFueSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSW50ZXJuYWwgb25seSBwYXJhbXMgLS0tXG5cdC8vIEBwYXJhbSB7c2FwLm0uQnV0dG9ufSBtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24gLSBDdXJyZW50bHkgdGhpcyBpcyBwYXNzZWQgYXMgY2FuY2VsQnV0dG9uIGludGVybmFsbHkgKHJlcGxhY2VkIGJ5IG1QYXJhbWV0ZXJzLmNvbnRyb2wgaW4gdGhlIEpTRG9jIGJlbG93KS4gQ3VycmVudGx5IGl0IGlzIGFsc28gbWFuZGF0b3J5LlxuXHQvLyBQbGFuIC0gVGhpcyBzaG91bGQgbm90IGJlIG1hbmRhdG9yeS4gSWYgbm90IHByb3ZpZGVkLCB3ZSBzaG91bGQgaGF2ZSBhIGRlZmF1bHQgdGhhdCBjYW4gYWN0IGFzIHJlZmVyZW5jZSBjb250cm9sIGZvciB0aGUgZGlzY2FyZCBwb3BvdmVyIE9SIHdlIGNhbiBzaG93IGEgZGlhbG9nIGluc3RlYWQgb2YgYSBwb3BvdmVyLlxuXG5cdC8qKlxuXHQgKiBEaXNjYXJkIHRoZSBlZGl0YWJsZSBkb2N1bWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCAgQ29udGV4dCBvZiB0aGUgZWRpdGFibGUgZG9jdW1lbnRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIENhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRyb2wgVGhpcyBpcyB0aGUgY29udHJvbCB1c2VkIHRvIG9wZW4gdGhlIGRpc2NhcmQgcG9wb3ZlclxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuc2tpcERpc2NhcmRQb3BvdmVyIE9wdGlvbmFsLCBzdXByZXNzZXMgdGhlIGRpc2NhcmQgcG9wb3ZlciBhbmQgYWxsb3dzIGN1c3RvbSBoYW5kbGluZ1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIG9uY2UgZWRpdGFibGUgZG9jdW1lbnQgaGFzIGJlZW4gZGlzY2FyZGVkXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0RmxvdyNjYW5jZWxEb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBjYW5jZWxEb2N1bWVudChvQ29udGV4dDogVjRDb250ZXh0LCBtUGFyYW1ldGVyczogeyBjb250cm9sOiBvYmplY3Q7IHNraXBEaXNjYXJkUG9wb3Zlcj86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IHRoaXMuX2dldFJlc291cmNlQnVuZGxlKCk7XG5cdFx0Y29uc3QgbUluUGFyYW1ldGVyczogYW55ID0gbVBhcmFtZXRlcnM7XG5cdFx0bGV0IHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ7XG5cblx0XHRtSW5QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IG1QYXJhbWV0ZXJzLmNvbnRyb2wgfHwgbUluUGFyYW1ldGVycy5jYW5jZWxCdXR0b247XG5cdFx0bUluUGFyYW1ldGVycy5iZWZvcmVDYW5jZWxDYWxsQmFjayA9IHRoaXMuYmFzZS5lZGl0Rmxvdy5vbkJlZm9yZURpc2NhcmQ7XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5fc3luY1Rhc2soKTtcblx0XHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5fZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cdFx0XHRpZiAoKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSB8fCBvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSkgJiYgdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX2dldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblxuXHRcdFx0XHQvLyBObyBuZWVkIHRvIHRyeSB0byBnZXQgcmlnaHRtb3N0IGNvbnRleHQgaW4gY2FzZSBvZiBhIG5ldyBvYmplY3Rcblx0XHRcdFx0c2libGluZ0luZm8gPSBhd2FpdCB0aGlzLl9jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHRcdG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpLFxuXHRcdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY2FuY2VsUmVzdWx0ID0gYXdhaXQgdHJhbnNhY3Rpb25IZWxwZXIuY2FuY2VsRG9jdW1lbnQoXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHRtSW5QYXJhbWV0ZXJzLFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKClcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBiRHJhZnROYXZpZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuX3JlbW92ZVN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMoc1Byb2dyYW1taW5nTW9kZWwpO1xuXG5cdFx0XHR0aGlzLl9zZXRFZGl0TW9kZShFZGl0TW9kZS5EaXNwbGF5LCBmYWxzZSk7XG5cdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cdFx0XHQvLyB3ZSBmb3JjZSB0aGUgZWRpdCBzdGF0ZSBldmVuIGZvciBGQ0wgYmVjYXVzZSB0aGUgZHJhZnQgZGlzY2FyZCBtaWdodCBub3QgYmUgaW1wbGVtZW50ZWRcblx0XHRcdC8vIGFuZCB3ZSBtYXkganVzdCBkZWxldGUgdGhlIGRyYWZ0XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblxuXHRcdFx0aWYgKCFjYW5jZWxSZXN1bHQpIHtcblx0XHRcdFx0dGhpcy5fc2VuZEFjdGl2aXR5KEFjdGl2aXR5LkRpc2NhcmQsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdC8vaW4gY2FzZSBvZiBhIG5ldyBkb2N1bWVudCwgbm8gYWN0aXZlQ29udGV4dCBpcyByZXR1cm5lZCAtLT4gbmF2aWdhdGUgYmFjay5cblx0XHRcdFx0aWYgKCFtSW5QYXJhbWV0ZXJzLnNraXBCYWNrTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb0FjdGl2ZURvY3VtZW50Q29udGV4dCA9IGNhbmNlbFJlc3VsdCBhcyBWNENvbnRleHQ7XG5cdFx0XHRcdHRoaXMuX3NlbmRBY3Rpdml0eShBY3Rpdml0eS5EaXNjYXJkLCBvQWN0aXZlRG9jdW1lbnRDb250ZXh0KTtcblx0XHRcdFx0bGV0IGNvbnRleHRUb05hdmlnYXRlID0gb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcblx0XHRcdFx0aWYgKHRoaXMuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0c2libGluZ0luZm8gPSBzaWJsaW5nSW5mbyA/PyB0aGlzLl9jcmVhdGVTaWJsaW5nSW5mbyhvQ29udGV4dCwgb0FjdGl2ZURvY3VtZW50Q29udGV4dCk7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUGF0aHNJbkhpc3Rvcnkoc2libGluZ0luZm8ucGF0aE1hcHBpbmcpO1xuXHRcdFx0XHRcdGlmIChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0LmdldFBhdGgoKSAhPT0gb0FjdGl2ZURvY3VtZW50Q29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0XHRcdGNvbnRleHRUb05hdmlnYXRlID0gc2libGluZ0luZm8udGFyZ2V0Q29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHNlbWFudGljIGtleXMgb2YgdGhlIGFjdGl2ZSBjb250ZXh0LCBhcyB3ZSBuZWVkIHRoZW1cblx0XHRcdFx0XHQvLyBmb3IgdGhlIG5hdmlnYXRpb25cblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9mZXRjaFNlbWFudGljS2V5VmFsdWVzKG9BY3RpdmVEb2N1bWVudENvbnRleHQpO1xuXHRcdFx0XHRcdC8vIFdlIGZvcmNlIHRoZSByZWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0LCBzbyB0aGF0IGl0J3MgY3JlYXRlZCBhbmQgYm91bmQgaW4gdGhlIHNhbWUgbWljcm90YXNrLFxuXHRcdFx0XHRcdC8vIHNvIHRoYXQgYWxsIHByb3BlcnRpZXMgYXJlIGxvYWRlZCB0b2dldGhlciBieSBhdXRvRXhwYW5kU2VsZWN0LCBzbyB0aGF0IHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gRWRpdCBtb2RlXG5cdFx0XHRcdFx0Ly8gJCRpbmhlcml0RXhwYW5kU2VsZWN0IHRha2VzIGFsbCBsb2FkZWQgcHJvcGVydGllcyBpbnRvIGFjY291bnQgKEJDUCAyMDcwNDYyMjY1KVxuXHRcdFx0XHRcdGlmICghbUluUGFyYW1ldGVycy5za2lwQmluZGluZ1RvVmlldykge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlTmV3Q29udGV4dChjb250ZXh0VG9OYXZpZ2F0ZSwgZmFsc2UsIHRydWUsIGJEcmFmdE5hdmlnYXRpb24sIHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9hY3RpdmUgY29udGV4dCBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIGNhbmNlbCBvZiBleGlzdGluZyBkb2N1bWVudFxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX2hhbmRsZU5ld0NvbnRleHQoY29udGV4dFRvTmF2aWdhdGUsIGZhbHNlLCBmYWxzZSwgYkRyYWZ0TmF2aWdhdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRpc2NhcmRpbmcgdGhlIGRvY3VtZW50XCIsIG9FcnJvciBhcyBhbnkpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEludGVybmFsIG9ubHkgcGFyYW1zIC0tLVxuXHQvLyBAcGFyYW0ge3N0cmluZ30gbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHlTZXQgdG8gd2hpY2ggdGhlIG9iamVjdCBiZWxvbmdzXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGNvbnRleHQgY29ycmVzcG9uZHMgdG8gYSBkcmFmdCByb290LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb250ZXh0IHBvaW50cyB0byBhIGRyYWZ0IHJvb3Rcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByb3RlY3RlZCBpc0RyYWZ0Um9vdChjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRyZXR1cm4gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KS50YXJnZXRFbnRpdHlTZXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIG9Db250ZXh0ICBDb250ZXh0IG9mIHRoZSBkb2N1bWVudFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycyBDYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnRpdGxlIFRpdGxlIG9mIHRoZSBvYmplY3QgYmVpbmcgZGVsZXRlZFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5kZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0IGJlaW5nIGRlbGV0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIGRvY3VtZW50IGhhcyBiZWVuIGRlbGV0ZWRcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93I2RlbGV0ZURvY3VtZW50XG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGRlbGV0ZURvY3VtZW50KG9Db250ZXh0OiBDb250ZXh0LCBtSW5QYXJhbWV0ZXJzOiB7IHRpdGxlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGxldCBtUGFyYW1ldGVyczogYW55ID0gbUluUGFyYW1ldGVycztcblx0XHRpZiAoIW1QYXJhbWV0ZXJzKSB7XG5cdFx0XHRtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkZpbmRBY3RpdmVDb250ZXh0czogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmJGaW5kQWN0aXZlQ29udGV4dHMgPSBmYWxzZTtcblx0XHR9XG5cdFx0bVBhcmFtZXRlcnMuYmVmb3JlRGVsZXRlQ2FsbEJhY2sgPSB0aGlzLmJhc2UuZWRpdEZsb3cub25CZWZvcmVEZWxldGU7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLl9pc0ZjbEVuYWJsZWQoKSAmJlxuXHRcdFx0XHR0aGlzLmlzRHJhZnRSb290KG9Db250ZXh0KSAmJlxuXHRcdFx0XHRvQ29udGV4dC5nZXRJbmRleCgpID09PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gRGVsZXRpbmcgYW4gYWN0aXZlIGVudGl0eSB3aGljaCBoYXMgYSBkcmFmdCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGRpc3BsYXllZCBpbiB0aGUgTGlzdFJlcG9ydCAoRkNMIGNhc2UpXG5cdFx0XHRcdC8vIC0tPiBuZWVkIHRvIHJlbW92ZSB0aGUgZHJhZnQgZnJvbSB0aGUgTFIgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgYWN0aXZlIHZlcnNpb24sIHNvIHRoYXQgdGhlIExpc3RCaW5kaW5nIGlzIHByb3Blcmx5IHJlZnJlc2hlZFxuXHRcdFx0XHQvLyBUaGUgY29uZGl0aW9uICdvQ29udGV4dC5nZXRJbmRleCgpID09PSB1bmRlZmluZWQnIG1ha2VzIHN1cmUgdGhlIGFjdGl2ZSB2ZXJzaW9uIGlzbid0IGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSBMUlxuXHRcdFx0XHRtUGFyYW1ldGVycy5iZWZvcmVEZWxldGVDYWxsQmFjayA9IGFzeW5jIChwYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9KSA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5iYXNlLmVkaXRGbG93Lm9uQmVmb3JlRGVsZXRlKHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWJsaW5nQ29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vU2libGluZ0VudGl0eWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZHJhZnRQYXRoID0gYXdhaXQgc2libGluZ0NvbnRleHQucmVxdWVzdENhbm9uaWNhbFBhdGgoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGRyYWZ0Q29udGV4dFRvUmVtb3ZlID0gbW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChkcmFmdFBhdGgpO1xuXHRcdFx0XHRcdFx0ZHJhZnRDb250ZXh0VG9SZW1vdmU/LnJlcGxhY2VXaXRoKG9Db250ZXh0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVwbGFjaW5nIHRoZSBkcmFmdCBpbnN0YW5jZSBpbiB0aGUgTFIgT0RMQlwiLCBlcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5fZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbihvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXG5cdFx0XHQvLyBTaW5nbGUgb2JqZXQgZGVsZXRpb24gaXMgdHJpZ2dlcmVkIGZyb20gYW4gT1AgaGVhZGVyIGJ1dHRvbiAobm90IGZyb20gYSBsaXN0KVxuXHRcdFx0Ly8gLS0+IE1hcmsgVUkgZGlydHkgYW5kIG5hdmlnYXRlIGJhY2sgdG8gZGlzbWlzcyB0aGUgT1Bcblx0XHRcdGlmICghdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zZW5kQWN0aXZpdHkoQWN0aXZpdHkuRGVsZXRlLCBvQ29udGV4dCk7XG5cblx0XHRcdC8vIEFmdGVyIGRlbGV0ZSBpcyBzdWNjZXNzZnVsbCwgd2UgbmVlZCB0byBkZXRhY2ggdGhlIHNldEJhY2tOYXZpZ2F0aW9uIE1ldGhvZHNcblx0XHRcdGlmIChvQXBwQ29tcG9uZW50KSB7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQXBwQ29tcG9uZW50Py5nZXRTdGFydHVwTW9kZSgpID09PSBTdGFydHVwTW9kZS5EZWVwbGluayAmJiAhdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgYXBwIGhhcyBiZWVuIGxhdW5jaGVkIHdpdGggc2VtYW50aWMga2V5cywgZGVsZXRpbmcgdGhlIG9iamVjdCB3ZSd2ZSBsYW5kZWQgb24gc2hhbGwgbmF2aWdhdGUgYmFja1xuXHRcdFx0XHQvLyB0byB0aGUgYXBwIHdlIGNhbWUgZnJvbSAoZXhjZXB0IGZvciBGQ0wsIHdoZXJlIHdlIG5hdmlnYXRlIHRvIExSIGFzIHVzdWFsKVxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuZXhpdEZyb21BcHAoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIGFueSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdCB0aGUgY3VycmVudCBzZXQgb2YgY2hhbmdlcyBhbmQgbmF2aWdhdGUgYmFjay5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBvQ29udGV4dCAgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBzYXZlZFxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjYXBwbHlEb2N1bWVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseURvY3VtZW50KG9Db250ZXh0OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvTG9ja09iamVjdCA9IHRoaXMuX2dldEdsb2JhbFVJTW9kZWwoKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3N5bmNUYXNrKCk7XG5cdFx0XHRhd2FpdCB0aGlzLl9zdWJtaXRPcGVuQ2hhbmdlcyhvQ29udGV4dCk7XG5cdFx0XHRhd2FpdCB0aGlzLl9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMoKTtcblx0XHRcdGF3YWl0IHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdGF3YWl0IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0xvY2tPYmplY3QpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Mb2NrT2JqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJbnRlcm5hbCBvbmx5IHBhcmFtcyAtLS1cblx0Ly8gQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlN0YXRpY0FjdGlvbl0gQm9vbGVhbiB2YWx1ZSBmb3Igc3RhdGljIGFjdGlvbiwgdW5kZWZpbmVkIGZvciBvdGhlciBhY3Rpb25zXG5cdC8vIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmlzTmF2aWdhYmxlXSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBuYXZpZ2F0aW9uIGlzIHJlcXVpcmVkIGFmdGVyIHRoZSBhY3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWRcblx0Ly8gQ3VycmVudGx5IHRoZSBwYXJhbWV0ZXIgaXNOYXZpZ2FibGUgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG91bGQgYmUgY2hhbmdlZCB0byByZXF1aXJlc05hdmlnYXRpb24gYXMgaXQgaXMgYSBtb3JlIGFwdCBuYW1lIGZvciB0aGlzIHBhcmFtXG5cblx0LyoqXG5cdCAqIEludm9rZXMgYW4gYWN0aW9uIChib3VuZCBvciB1bmJvdW5kKSBhbmQgdHJhY2tzIHRoZSBjaGFuZ2VzIHNvIHRoYXQgb3RoZXIgcGFnZXMgY2FuIGJlIHJlZnJlc2hlZCBhbmQgc2hvdyB0aGUgdXBkYXRlZCBkYXRhIHVwb24gbmF2aWdhdGlvbi5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcyBBbiBvcHRpb25hbCBhcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgYWN0aW9uIHBhcmFtZXRlcnMsIHdoZXJlIGVhY2ggb2JqZWN0IGhhcyBhIG5hbWUgb2Ygc3RyaW5nIHR5cGUgYW5kIGEgdmFsdWUgdGhhdCBjYW4gYmUgb2YgYW55IGRhdGEgdHlwZS5cblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyBTa2lwcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW0gaW4gcGFyYW1ldGVyVmFsdWVzXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNvbnRleHRzIEZvciBhIGJvdW5kIGFjdGlvbiwgYSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgY2FsbGVkIG11c3QgYmUgcHJvdmlkZWRcblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMubW9kZWwgRm9yIGFuIHVuYm91bmQgYWN0aW9uLCBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbCBtdXN0IGJlIHByb3ZpZGVkXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnJlcXVpcmVzTmF2aWdhdGlvbiBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBuYXZpZ2F0aW9uIGlzIHJlcXVpcmVkIGFmdGVyIHRoZSBhY3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQuIE5hdmlnYXRpb24gdGFrZXMgcGxhY2UgdG8gdGhlIGNvbnRleHQgcmV0dXJuZWQgYnkgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5sYWJlbCBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uLiBUaGlzIGlzIG5lZWRlZCBpbiBjYXNlIHRoZSBhY3Rpb24gaGFzIGEgcGFyYW1ldGVyIGFuZCBhIHBhcmFtZXRlciBkaWFsb2cgaXMgc2hvd24gdG8gdGhlIHVzZXIuIFRoZSBsYWJlbCB3aWxsIGJlIHVzZWQgZm9yIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nIGFuZCBmb3IgdGhlIGNvbmZpcm1hdGlvbiBidXR0b25cblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogJ0NoYW5nZVNldCcgdG8gcHV0IGFsbCBhY3Rpb24gY2FsbHMgaW50byBvbmUgY2hhbmdlc2V0LCAnSXNvbGF0ZWQnIHRvIHB1dCB0aGVtIGludG8gc2VwYXJhdGUgY2hhbmdlc2V0c1xuXHQgKiBAcGFyYW0gbUV4dHJhUGFyYW1zIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIG9uY2UgdGhlIGFjdGlvbiBoYXMgYmVlbiBleGVjdXRlZCwgcHJvdmlkaW5nIHRoZSByZXNwb25zZVxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjaW52b2tlQWN0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKiBAZmluYWxcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBpbnZva2VBY3Rpb24oXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRtSW5QYXJhbWV0ZXJzPzoge1xuXHRcdFx0cGFyYW1ldGVyVmFsdWVzPzogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcblx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0Y29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdO1xuXHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdH0sXG5cdFx0bUV4dHJhUGFyYW1zPzogYW55XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBvQ29udHJvbDogYW55O1xuXHRcdGNvbnN0IHRyYW5zYWN0aW9uSGVscGVyID0gdGhpcy5fZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKTtcblx0XHRsZXQgYVBhcnRzO1xuXHRcdGxldCBzT3ZlcmxvYWRFbnRpdHlUeXBlO1xuXHRcdGxldCBvQ3VycmVudEFjdGlvbkNhbGxCYWNrczogYW55O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cblx0XHRsZXQgbVBhcmFtZXRlcnM6IGFueSA9IG1JblBhcmFtZXRlcnMgfHwge307XG5cblx0XHQvLyBEdWUgdG8gYSBtaXN0YWtlIHRoZSBpbnZva2VBY3Rpb24gaW4gdGhlIGV4dGVuc2lvbkFQSSBoYWQgYSBkaWZmZXJlbnQgQVBJIHRoYW4gdGhpcyBvbmUuXG5cdFx0Ly8gVGhlIG9uZSBmcm9tIHRoZSBleHRlbnNpb25BUEkgZG9lc24ndCBleGlzdCBhbnltb3JlIGFzIHdlIGV4cG9zZSB0aGUgZnVsbCBlZGl0IGZsb3cgbm93IGJ1dFxuXHRcdC8vIGR1ZSB0byBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2Ugc3RpbGwgbmVlZCB0byBzdXBwb3J0IHRoZSBvbGQgc2lnbmF0dXJlXG5cdFx0aWYgKFxuXHRcdFx0KG1QYXJhbWV0ZXJzLmlzQSAmJiBtUGFyYW1ldGVycy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkgfHxcblx0XHRcdEFycmF5LmlzQXJyYXkobVBhcmFtZXRlcnMpIHx8XG5cdFx0XHRtRXh0cmFQYXJhbXMgIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgY29udGV4dHMgPSBtUGFyYW1ldGVycztcblx0XHRcdG1QYXJhbWV0ZXJzID0gbUV4dHJhUGFyYW1zIHx8IHt9O1xuXHRcdFx0aWYgKGNvbnRleHRzKSB7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRleHRzID0gY29udGV4dHM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtUGFyYW1ldGVycy5tb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bVBhcmFtZXRlcnMuaXNOYXZpZ2FibGUgPSBtUGFyYW1ldGVycy5yZXF1aXJlc05hdmlnYXRpb24gfHwgbVBhcmFtZXRlcnMuaXNOYXZpZ2FibGU7XG5cblx0XHRpZiAoIW1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnMuY29udHJvbElkKSB7XG5cdFx0XHRvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKTtcblx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUT0RPOiBjdXJyZW50bHkgdGhpcyBzZWxlY3RlZCBjb250ZXh0cyB1cGRhdGUgaXMgZG9uZSB3aXRoaW4gdGhlIG9wZXJhdGlvbiwgc2hvdWxkIGJlIG1vdmVkIG91dFxuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9Db250cm9sLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc0FjdGlvbk5hbWUgJiYgc0FjdGlvbk5hbWUuaW5kZXhPZihcIihcIikgPiAtMSkge1xuXHRcdFx0Ly8gZ2V0IGVudGl0eSB0eXBlIG9mIGFjdGlvbiBvdmVybG9hZCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGFjdGlvbiBwYXRoXG5cdFx0XHQvLyBFeGFtcGxlIHNBY3Rpb25OYW1lID0gXCI8QWN0aW9uTmFtZT4oQ29sbGVjdGlvbig8T3ZlcmxvYWRFbnRpdHlUeXBlPikpXCJcblx0XHRcdC8vIHNBY3Rpb25OYW1lID0gYVBhcnRzWzBdIC0tPiA8QWN0aW9uTmFtZT5cblx0XHRcdC8vIHNPdmVybG9hZEVudGl0eVR5cGUgPSBhUGFydHNbMl0gLS0+IDxPdmVybG9hZEVudGl0eVR5cGU+XG5cdFx0XHRhUGFydHMgPSBzQWN0aW9uTmFtZS5zcGxpdChcIihcIik7XG5cdFx0XHRzQWN0aW9uTmFtZSA9IGFQYXJ0c1swXTtcblx0XHRcdHNPdmVybG9hZEVudGl0eVR5cGUgPSAoYVBhcnRzW2FQYXJ0cy5sZW5ndGggLSAxXSBhcyBhbnkpLnJlcGxhY2VBbGwoXCIpXCIsIFwiXCIpO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy5iU3RhdGljQWN0aW9uKSB7XG5cdFx0XHRpZiAob0NvbnRyb2wuaXNUYWJsZUJvdW5kKCkpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udGV4dHMgPSBvQ29udHJvbC5nZXRSb3dCaW5kaW5nKCkuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXRoID0gb0NvbnRyb2wuZGF0YShcInJvd3NCaW5kaW5nSW5mb1wiKS5wYXRoLFxuXHRcdFx0XHRcdG9MaXN0QmluZGluZyA9IG5ldyAoT0RhdGFMaXN0QmluZGluZyBhcyBhbnkpKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCksIHNCaW5kaW5nUGF0aCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNvbnRleHRzID0gb0xpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNPdmVybG9hZEVudGl0eVR5cGUgJiYgb0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jb250ZXh0cyA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkQ29udGV4dEZyb21NZXRhZGF0YVBhdGgoXG5cdFx0XHRcdFx0b0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0XHRvQ29udHJvbC5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRcdFx0c092ZXJsb2FkRW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuZW5hYmxlQXV0b1Njcm9sbCkge1xuXHRcdFx0XHRvQ3VycmVudEFjdGlvbkNhbGxCYWNrcyA9IHRoaXMuX2NyZWF0ZUFjdGlvblByb21pc2Uoc0FjdGlvbk5hbWUsIG9Db250cm9sLnNJZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQgPSB0aGlzLl9nZXRCb3VuZENvbnRleHQob1ZpZXcsIG1QYXJhbWV0ZXJzKTtcblx0XHQvLyBOZWVkIHRvIGtub3cgdGhhdCB0aGUgYWN0aW9uIGlzIGNhbGxlZCBmcm9tIE9iamVjdFBhZ2UgZm9yIGNoYW5nZVNldCBJc29sYXRlZCB3b3JrYXJvdW5kXG5cdFx0bVBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSAob1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3N5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBvUmVzcG9uc2UgPSBhd2FpdCB0cmFuc2FjdGlvbkhlbHBlci5jYWxsQWN0aW9uLmJpbmQoXG5cdFx0XHRcdHRyYW5zYWN0aW9uSGVscGVyLFxuXHRcdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLl9nZXRNZXNzYWdlSGFuZGxlcigpXG5cdFx0XHQpKCk7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuY29udGV4dHMpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5fcmVmcmVzaExpc3RJZlJlcXVpcmVkKHRoaXMuX2dldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMoc0FjdGlvbk5hbWUsIG9SZXNwb25zZSksIG1QYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3NlbmRBY3Rpdml0eShBY3Rpdml0eS5BY3Rpb24sIG1QYXJhbWV0ZXJzLmNvbnRleHRzKTtcblx0XHRcdHRoaXMuX3RyaWdnZXJDb25maWd1cmVkU3VydmV5KHNBY3Rpb25OYW1lLCBUcmlnZ2VyVHlwZS5hY3Rpb24pO1xuXG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25DYWxsQmFja3MpIHtcblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25DYWxsQmFja3MuZlJlc29sdmVyKG9SZXNwb25zZSk7XG5cdFx0XHR9XG5cdFx0XHQvKlxuXHRcdFx0XHRcdFdlIHNldCB0aGUgKHVwcGVyKSBwYWdlcyB0byBkaXJ0eSBhZnRlciBhbiBleGVjdXRpb24gb2YgYW4gYWN0aW9uXG5cdFx0XHRcdFx0VE9ETzogZ2V0IHJpZCBvZiB0aGlzIHdvcmthcm91bmRcblx0XHRcdFx0XHRUaGlzIHdvcmthcm91bmQgaXMgb25seSBuZWVkZWQgYXMgbG9uZyBhcyB0aGUgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc3luY2hyb25pemF0aW9uLlxuXHRcdFx0XHRcdE9uY2UgdGhpcyBpcyBzdXBwb3J0ZWQgd2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIHBhZ2VzIHRvIGRpcnR5IGFueW1vcmUgYXMgdGhlIGNvbnRleHQgaXRzZWxmXG5cdFx0XHRcdFx0aXMgYWxyZWFkeSByZWZyZXNoZWQgKGl0J3MganVzdCBub3QgcmVmbGVjdGVkIGluIHRoZSBvYmplY3QgcGFnZSlcblx0XHRcdFx0XHR3ZSBleHBsaWNpdGx5IGRvbid0IGNhbGwgdGhpcyBtZXRob2QgZnJvbSB0aGUgbGlzdCByZXBvcnQgYnV0IG9ubHkgY2FsbCBpdCBmcm9tIHRoZSBvYmplY3QgcGFnZVxuXHRcdFx0XHRcdGFzIGlmIGl0IGlzIGNhbGxlZCBpbiB0aGUgbGlzdCByZXBvcnQgaXQncyBub3QgbmVlZGVkIC0gYXMgd2UgYW55d2F5IHdpbGwgcmVtb3ZlIHRoaXMgbG9naWNcblx0XHRcdFx0XHR3ZSBjYW4gbGl2ZSB3aXRoIHRoaXNcblx0XHRcdFx0XHR3ZSBuZWVkIGEgY29udGV4dCB0byBzZXQgdGhlIHVwcGVyIHBhZ2VzIHRvIGRpcnR5IC0gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgd2UgdXNlIHRoZVxuXHRcdFx0XHRcdGZpcnN0IG9uZSBhcyB0aGV5IGFyZSBhbnl3YXkgc2libGluZ3Ncblx0XHRcdFx0XHQqL1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRleHRzKSB7XG5cdFx0XHRcdGlmICghdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9nZXRJbnRlcm5hbE1vZGVsKCkuc2V0UHJvcGVydHkoXCIvc0N1c3RvbUFjdGlvblwiLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaXNOYXZpZ2FibGUpIHtcblx0XHRcdFx0bGV0IHZDb250ZXh0ID0gb1Jlc3BvbnNlO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2Q29udGV4dCkgJiYgdkNvbnRleHQubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0dkNvbnRleHQgPSB2Q29udGV4dFswXS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodkNvbnRleHQgJiYgIUFycmF5LmlzQXJyYXkodkNvbnRleHQpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHRjb25zdCBfZm5WYWxpZENvbnRleHRzID0gKGNvbnRleHRzOiBhbnksIGFwcGxpY2FibGVDb250ZXh0czogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dHMuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGFwcGxpY2FibGVDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBhcHBsaWNhYmxlQ29udGV4dHMuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBvQWN0aW9uQ29udGV4dCA9IEFycmF5LmlzQXJyYXkobVBhcmFtZXRlcnMuY29udGV4dHMpXG5cdFx0XHRcdFx0XHQ/IF9mblZhbGlkQ29udGV4dHMobVBhcmFtZXRlcnMuY29udGV4dHMsIG1QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0KVswXVxuXHRcdFx0XHRcdFx0OiBtUGFyYW1ldGVycy5jb250ZXh0cztcblx0XHRcdFx0XHRjb25zdCBzQWN0aW9uQ29udGV4dE1ldGFQYXRoID0gb0FjdGlvbkNvbnRleHQgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdGlmIChzQ29udGV4dE1ldGFQYXRoICE9IHVuZGVmaW5lZCAmJiBzQ29udGV4dE1ldGFQYXRoID09PSBzQWN0aW9uQ29udGV4dE1ldGFQYXRoKSB7XG5cdFx0XHRcdFx0XHRpZiAob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpICE9PSB2Q29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0Um91dGluZ0xpc3RlbmVyKCkubmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0KHZDb250ZXh0LCB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tOb0hhc2hDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bm9IaXN0b3J5RW50cnk6IGZhbHNlXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0TG9nLmluZm8oXCJOYXZpZ2F0aW9uIHRvIHRoZSBzYW1lIGNvbnRleHQgaXMgbm90IGFsbG93ZWRcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlc3BvbnNlO1xuXHRcdH0gY2F0Y2ggKGVycjogYW55KSB7XG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25DYWxsQmFja3MpIHtcblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25DYWxsQmFja3MuZlJlamVjdG9yKCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBGSVhNRTogaW4gbW9zdCBzaXR1YXRpb25zIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9yIHRoZSByZWplY3RlZCBwcm9taXNlcyByZXR1cm5lZHFcblx0XHRcdGlmIChlcnIgPT09IENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpIHtcblx0XHRcdFx0Ly8gVGhpcyBsZWFkcyB0byBjb25zb2xlIGVycm9yLiBBY3R1YWxseSB0aGUgZXJyb3IgaXMgYWxyZWFkeSBoYW5kbGVkIChjdXJyZW50bHkgZGlyZWN0bHkgaW4gcHJlc3MgaGFuZGxlciBvZiBlbmQgYnV0dG9uIGluIGRpYWxvZyksIHNvIGl0IHNob3VsZCBub3QgYmUgZm9yd2FyZGVkXG5cdFx0XHRcdC8vIHVwIHRvIGhlcmUuIEhvd2V2ZXIsIHdoZW4gZGlhbG9nIGhhbmRsaW5nIGFuZCBiYWNrZW5kIGV4ZWN1dGlvbiBhcmUgc2VwYXJhdGVkLCBpbmZvcm1hdGlvbiB3aGV0aGVyIGRpYWxvZyB3YXMgY2FuY2VsbGVkLCBvciBiYWNrZW5kIGV4ZWN1dGlvbiBoYXMgZmFpbGVkIG5lZWRzXG5cdFx0XHRcdC8vIHRvIGJlIHRyYW5zcG9ydGVkIHRvIHRoZSBwbGFjZSByZXNwb25zaWJsZSBmb3IgY29ubmVjdGluZyB0aGVzZSB0d28gdGhpbmdzLlxuXHRcdFx0XHQvLyBUT0RPOiByZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBvbmUgZGlhbG9nIGhhbmRsaW5nIGFuZCBiYWNrZW5kIGV4ZWN1dGlvbiBhcmUgc2VwYXJhdGVkXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRpYWxvZyBjYW5jZWxsZWRcIik7XG5cdFx0XHR9IGVsc2UgaWYgKCEoZXJyICYmIChlcnIuY2FuY2VsZWQgfHwgKGVyci5yZWplY3RlZEl0ZW1zICYmIGVyci5yZWplY3RlZEl0ZW1zWzBdLmNhbmNlbGVkKSkpKSB7XG5cdFx0XHRcdC8vIFRPRE86IGFuYWx5emUsIHdoZXRoZXIgdGhpcyBpcyBvZiB0aGUgc2FtZSBjYXRlZ29yeSBhcyBhYm92ZVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIEVkaXRGbG93Lmludm9rZUFjdGlvbjoke2Vycn1gKTtcblx0XHRcdH1cblx0XHRcdC8vIFRPRE86IEFueSB1bmV4cGVjdGVkIGVycm9ycyBwcm9iYWJseSBzaG91bGQgbm90IGJlIGlnbm9yZWQhXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNlY3VyZWQgZXhlY3V0aW9uIG9mIHRoZSBnaXZlbiBmdW5jdGlvbi4gRW5zdXJlcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGFyZSBmdWxmaWxsZWQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0gZm5GdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuIFNob3VsZCByZXR1cm4gYSBwcm9taXNlIHRoYXQgaXMgc2V0dGxlZCBhZnRlciBjb21wbGV0aW9uIG9mIHRoZSBleGVjdXRpb24uIElmIG5vdGhpbmcgaXMgcmV0dXJuZWQsIGltbWVkaWF0ZSBjb21wbGV0aW9uIGlzIGFzc3VtZWQuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBEZWZpbml0aW9ucyBvZiB0aGUgcHJlY29uZGl0aW9ucyB0byBiZSBjaGVja2VkIGJlZm9yZSBleGVjdXRpb25cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmJ1c3kgRGVmaW5lcyB0aGUgYnVzeSBpbmRpY2F0b3Jcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmJ1c3kuc2V0IFRyaWdnZXJzIGEgYnVzeSBpbmRpY2F0b3Igd2hlbiB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5idXN5LmNoZWNrIEV4ZWN1dGVzIGZ1bmN0aW9uIG9ubHkgaWYgYXBwbGljYXRpb24gaXNuJ3QgYnVzeS5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnVwZGF0ZXNEb2N1bWVudCBUaGlzIG9wZXJhdGlvbiB1cGRhdGVzIHRoZSBjdXJyZW50IGRvY3VtZW50IHdpdGhvdXQgdXNpbmcgdGhlIGJvdW5kIG1vZGVsIGFuZCBjb250ZXh0LiBBcyBhIHJlc3VsdCwgdGhlIGRyYWZ0IHN0YXR1cyBpcyB1cGRhdGVkIGlmIGEgZHJhZnQgZG9jdW1lbnQgZXhpc3RzLCBhbmQgdGhlIHVzZXIgaGFzIHRvIGNvbmZpcm0gdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgZWRpdGluZyBwcm9jZXNzLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyByZWplY3RlZCBpZiB0aGUgZXhlY3V0aW9uIGlzIHByb2hpYml0ZWQgYW5kIHJlc29sdmVkIGJ5IHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHRoZSBmbkZ1bmN0aW9uLlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjc2VjdXJlZEV4ZWN1dGlvblxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHNlY3VyZWRFeGVjdXRpb24oXG5cdFx0Zm5GdW5jdGlvbjogRnVuY3Rpb24sXG5cdFx0bVBhcmFtZXRlcnM/OiB7XG5cdFx0XHRidXN5Pzoge1xuXHRcdFx0XHRzZXQ/OiBib29sZWFuO1xuXHRcdFx0XHRjaGVjaz86IGJvb2xlYW47XG5cdFx0XHR9O1xuXHRcdFx0dXBkYXRlc0RvY3VtZW50PzogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJCdXN5U2V0ID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuYnVzeSAmJiBtUGFyYW1ldGVycy5idXN5LnNldCAhPT0gdW5kZWZpbmVkID8gbVBhcmFtZXRlcnMuYnVzeS5zZXQgOiB0cnVlLFxuXHRcdFx0YkJ1c3lDaGVjayA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmJ1c3kgJiYgbVBhcmFtZXRlcnMuYnVzeS5jaGVjayAhPT0gdW5kZWZpbmVkID8gbVBhcmFtZXRlcnMuYnVzeS5jaGVjayA6IHRydWUsXG5cdFx0XHRiVXBkYXRlc0RvY3VtZW50ID0gKG1QYXJhbWV0ZXJzICYmIChtUGFyYW1ldGVycyBhcyBhbnkpLnVwZGF0ZXNEb2N1bWVudCkgfHwgZmFsc2UsXG5cdFx0XHRvTG9ja09iamVjdCA9IHRoaXMuX2dldEdsb2JhbFVJTW9kZWwoKSxcblx0XHRcdG9Db250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0YklzRHJhZnQgPSBvQ29udGV4dCAmJiB0aGlzLl9nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KSA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdDtcblxuXHRcdGlmIChiQnVzeUNoZWNrICYmIEJ1c3lMb2NrZXIuaXNMb2NrZWQob0xvY2tPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJBcHBsaWNhdGlvbiBhbHJlYWR5IGJ1c3kgdGhlcmVmb3JlIGV4ZWN1dGlvbiByZWplY3RlZFwiKTtcblx0XHR9XG5cblx0XHQvLyB3ZSBoYXZlIHRvIHNldCBidXN5IGFuZCBkcmFmdCBpbmRpY2F0b3IgaW1tZWRpYXRlbHkgYWxzbyB0aGUgZnVuY3Rpb24gbWlnaHQgYmUgZXhlY3V0ZWQgbGF0ZXIgaW4gcXVldWVcblx0XHRpZiAoYkJ1c3lTZXQpIHtcblx0XHRcdEJ1c3lMb2NrZXIubG9jayhvTG9ja09iamVjdCk7XG5cdFx0fVxuXHRcdGlmIChiVXBkYXRlc0RvY3VtZW50ICYmIGJJc0RyYWZ0KSB7XG5cdFx0XHR0aGlzLl9zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZpbmcpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fc3luY1Rhc2soZm5GdW5jdGlvbilcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKGJVcGRhdGVzRG9jdW1lbnQpIHtcblx0XHRcdFx0XHR0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpLmhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucygpO1xuXHRcdFx0XHRcdGlmICghdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVEaXJ0eSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYklzRHJhZnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3NldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChiVXBkYXRlc0RvY3VtZW50ICYmIGJJc0RyYWZ0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuQ2xlYXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChvRXJyb3IpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0aWYgKGJCdXN5U2V0KSB7XG5cdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHBhdGNoU2VudCBldmVudDogcmVnaXN0ZXIgZG9jdW1lbnQgbW9kaWZpY2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0aGFuZGxlUGF0Y2hTZW50KG9FdmVudDogYW55KSB7XG5cdFx0aWYgKCEodGhpcy5iYXNlLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LmdldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIikpIHtcblx0XHRcdC8vIENyZWF0ZSBhIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkIHdoZW4gdGhlIHBhdGggaXMgY29tcGxldGVkXG5cdFx0XHRjb25zdCBvUGF0Y2hQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRvRXZlbnQuZ2V0U291cmNlKCkuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKHBhdGNoQ29tcGxldGVkRXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvRXZlbnQuZ2V0U291cmNlKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2goXG5cdFx0XHRcdFx0XHRcdHRoaXMuYmFzZS5nZXRWaWV3KCksXG5cdFx0XHRcdFx0XHRcdG9FdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYlN1Y2Nlc3MgPSBwYXRjaENvbXBsZXRlZEV2ZW50LmdldFBhcmFtZXRlcihcInN1Y2Nlc3NcIik7XG5cdFx0XHRcdFx0aWYgKGJTdWNjZXNzKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBkYXRlRG9jdW1lbnQob0V2ZW50LmdldFNvdXJjZSgpLCBvUGF0Y2hQcm9taXNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3JlYXRlQWN0aXZhdGUgZXZlbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdGhhbmRsZUNyZWF0ZUFjdGl2YXRlKG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgdHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLl9nZXRUcmFuc2FjdGlvbkhlbHBlcigpO1xuXHRcdGNvbnN0IGJBdEVuZCA9IHRydWU7XG5cdFx0Y29uc3QgYkluYWN0aXZlID0gdHJ1ZTtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSB0aGlzLl9nZXRSZXNvdXJjZUJ1bmRsZSgpO1xuXHRcdGNvbnN0IG9QYXJhbXM6IGFueSA9IHtcblx0XHRcdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLklubGluZSxcblx0XHRcdGNyZWF0ZUF0RW5kOiBiQXRFbmQsXG5cdFx0XHRpbmFjdGl2ZTogYkluYWN0aXZlLFxuXHRcdFx0a2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZDogZmFsc2UsIC8vIGN1cnJlbnRseSBub3QgZnVsbHkgc3VwcG9ydGVkXG5cdFx0XHRidXN5TW9kZTogXCJOb25lXCJcblx0XHR9O1xuXHRcdHRyYW5zYWN0aW9uSGVscGVyLmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBvUGFyYW1zLCBvUmVzb3VyY2VCdW5kbGUsIHRoaXMuX2dldE1lc3NhZ2VIYW5kbGVyKCksIGZhbHNlLCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBQcml2YXRlIG1ldGhvZHNcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKlxuXHRcdFx0IFRPIEJFIENIRUNLRUQgLyBESVNDVVNTRURcblx0XHRcdCBfY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMgYW5kIGRlbGV0ZU11bHRpRG9jdW1lbnQgLSBjb3VsZG4ndCB3ZSBjb21iaW5lIHRoZW0gd2l0aCBjcmVhdGUgYW5kIGRlbGV0ZSBkb2N1bWVudD9cblx0XHRcdCBfY3JlYXRlQWN0aW9uUHJvbWlzZSBhbmQgZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UgLT4gbmV4dCBzdGVwXG5cblx0XHRcdCAqL1xuXG5cdF9zZXRFZGl0TW9kZShzRWRpdE1vZGU6IGFueSwgYkNyZWF0aW9uTW9kZT86IGJvb2xlYW4pIHtcblx0XHQodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5zZXRFZGl0TW9kZShzRWRpdE1vZGUsIGJDcmVhdGlvbk1vZGUpO1xuXHR9XG5cblx0X3NldERyYWZ0U3RhdHVzKHNEcmFmdFN0YXRlOiBhbnkpIHtcblx0XHQodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhzRHJhZnRTdGF0ZSk7XG5cdH1cblxuXHRfZ2V0Um91dGluZ0xpc3RlbmVyKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5nZXRSb3V0aW5nTGlzdGVuZXIoKTtcblx0fVxuXG5cdF9nZXRHbG9iYWxVSU1vZGVsKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5nZXRHbG9iYWxVSU1vZGVsKCk7XG5cdH1cblx0X3N5bmNUYXNrKHZUYXNrPzogYW55KSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LnN5bmNUYXNrKHZUYXNrKTtcblx0fVxuXG5cdF9nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cdH1cblxuXHRfZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbihvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24ob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9oYW5kbGVDcmVhdGVFdmVudHMob0JpbmRpbmc6IGFueSkge1xuXHRcdCh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmhhbmRsZUNyZWF0ZUV2ZW50cyhvQmluZGluZyk7XG5cdH1cblxuXHRfZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmdldFRyYW5zYWN0aW9uSGVscGVyKCk7XG5cdH1cblxuXHRfZ2V0SW50ZXJuYWxNb2RlbCgpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuZ2V0SW50ZXJuYWxNb2RlbCgpO1xuXHR9XG5cblx0X2dldFJvb3RWaWV3Q29udHJvbGxlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHR9XG5cblx0X2dldFJlc291cmNlQnVuZGxlKCkge1xuXHRcdHJldHVybiAodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIGFueSkub1Jlc291cmNlQnVuZGxlO1xuXHR9XG5cblx0X2dldFNlbWFudGljTWFwcGluZygpOiBTZW1hbnRpY01hcHBpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBwcm9taXNlIHRvIHdhaXQgZm9yIGFuIGFjdGlvbiB0byBiZSBleGVjdXRlZFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2NyZWF0ZUFjdGlvblByb21pc2Vcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHJlc29sdmVyIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGV4dGVybmFsbHkgcmVzb2x2ZSB0aGUgcHJvbWlzZVxuXHQgKi9cblxuXHRfY3JlYXRlQWN0aW9uUHJvbWlzZShzQWN0aW9uTmFtZTogYW55LCBzQ29udHJvbElkOiBhbnkpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuY3JlYXRlQWN0aW9uUHJvbWlzZShzQWN0aW9uTmFtZSwgc0NvbnRyb2xJZCk7XG5cdH1cblxuXHRfZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdH1cblxuXHRfZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdH1cblxuXHRfZ2V0TWVzc2FnZUhhbmRsZXIoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2VkaXRGbG93LmdldE1lc3NhZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRfc2VuZEFjdGl2aXR5KGFjdGlvbjogQWN0aXZpdHksIHJlbGF0ZWRDb250ZXh0czogQ29udGV4dCB8IENvbnRleHRbXSB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBBcnJheS5pc0FycmF5KHJlbGF0ZWRDb250ZXh0cykgPyByZWxhdGVkQ29udGV4dHMubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LmdldFBhdGgoKSkgOiByZWxhdGVkQ29udGV4dHM/LmdldFBhdGgoKTtcblx0XHRzZW5kKHRoaXMuZ2V0VmlldygpLCBhY3Rpb24sIGNvbnRlbnQpO1xuXHR9XG5cblx0X3RyaWdnZXJDb25maWd1cmVkU3VydmV5KHNBY3Rpb25OYW1lOiBzdHJpbmcsIHRyaWdnZXJUeXBlOiBUcmlnZ2VyVHlwZSkge1xuXHRcdHRyaWdnZXJDb25maWd1cmVkU3VydmV5KHRoaXMuZ2V0VmlldygpLCBzQWN0aW9uTmFtZSwgdHJpZ2dlclR5cGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5c1xuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdGhhdCBpcyBleGVjdXRlZFxuXHQgKiBAcGFyYW0gb1Jlc3BvbnNlIFRoZSBib3VuZCBhY3Rpb24ncyByZXNwb25zZSBkYXRhIG9yIHJlc3BvbnNlIGNvbnRleHRcblx0ICogQHJldHVybnMgT2JqZWN0IHdpdGggZGF0YSBhbmQgbmFtZXMgb2YgdGhlIGtleSBmaWVsZHMgb2YgdGhlIHJlc3BvbnNlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5cyhzQWN0aW9uTmFtZTogc3RyaW5nLCBvUmVzcG9uc2U6IG9iamVjdCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5nZXRBY3Rpb25SZXNwb25zZURhdGFBbmRLZXlzKHNBY3Rpb25OYW1lLCBvUmVzcG9uc2UpO1xuXHR9XG5cblx0YXN5bmMgX3N1Ym1pdE9wZW5DaGFuZ2VzKG9Db250ZXh0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRvTG9ja09iamVjdCA9IHRoaXMuX2dldEdsb2JhbFVJTW9kZWwoKTtcblxuXHRcdHRyeSB7XG5cdFx0XHQvLyBTdWJtaXQgYW55IGxlZnRvdmVyIGNoYW5nZXMgdGhhdCBhcmUgbm90IHlldCBzdWJtaXR0ZWRcblx0XHRcdC8vIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgb25seSAxIHVwZGF0ZUdyb3VwSWQsIGhlbmNlIHN1Ym1pdHRpbmcgdGhlIGJhdGNoIGRpcmVjdGx5IGhlcmVcblx0XHRcdGF3YWl0IG9Nb2RlbC5zdWJtaXRCYXRjaChcIiRhdXRvXCIpO1xuXG5cdFx0XHQvLyBXYWl0IGZvciBhbGwgY3VycmVudGx5IHJ1bm5pbmcgY2hhbmdlc1xuXHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nIHdlIGFncmVlZCB3aXRoIHRoZSB2NCBtb2RlbCB0ZWFtIHRvIHVzZSBhbiBpbnRlcm5hbCBtZXRob2QuIFdlJ2xsIHJlcGxhY2UgaXQgb25jZVxuXHRcdFx0Ly8gYSBwdWJsaWMgb3IgcmVzdHJpY3RlZCBtZXRob2Qgd2FzIHByb3ZpZGVkXG5cdFx0XHRhd2FpdCBvTW9kZWwub1JlcXVlc3Rvci53YWl0Rm9yUnVubmluZ0NoYW5nZVJlcXVlc3RzKFwiJGF1dG9cIik7XG5cblx0XHRcdC8vIENoZWNrIGlmIGFsbCBjaGFuZ2VzIHdlcmUgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseVxuXHRcdFx0aWYgKG9Nb2RlbC5oYXNQZW5kaW5nQ2hhbmdlcyhcIiRhdXRvXCIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInN1Ym1pdCBvZiBvcGVuIGNoYW5nZXMgZmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTG9ja09iamVjdCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdGlja3lPbihvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5oYW5kbGVTdGlja3lPbihvQ29udGV4dCk7XG5cdH1cblxuXHRfaGFuZGxlU3RpY2t5T2ZmKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5oYW5kbGVTdGlja3lPZmYoKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uKCkge1xuXHRcdHJldHVybiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9lZGl0Rmxvdy5vbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uKCk7XG5cdH1cblxuXHRfZGlzY2FyZFN0aWNreVNlc3Npb24ob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRyZXR1cm4gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZWRpdEZsb3cuZGlzY2FyZFN0aWNreVNlc3Npb24ob0NvbnRleHQpO1xuXHR9XG5cblx0X3NldFN0aWNreVNlc3Npb25JbnRlcm5hbFByb3BlcnRpZXMocHJvZ3JhbW1pbmdNb2RlbDogYW55LCBtb2RlbDogT0RhdGFNb2RlbCkge1xuXHRcdGlmIChwcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSkge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuX2dldEludGVybmFsTW9kZWwoKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc2Vzc2lvbk9uXCIsIHRydWUpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zdGlja3lTZXNzaW9uVG9rZW5cIiwgKG1vZGVsLmdldEh0dHBIZWFkZXJzKHRydWUpIGFzIGFueSlbXCJTQVAtQ29udGV4dElkXCJdKTtcblx0XHR9XG5cdH1cblxuXHRfcmVtb3ZlU3RpY2t5U2Vzc2lvbkludGVybmFsUHJvcGVydGllcyhwcm9ncmFtbWluZ01vZGVsOiBhbnkpIHtcblx0XHRpZiAocHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLl9nZXRJbnRlcm5hbE1vZGVsKCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiLCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3N0aWNreVNlc3Npb25Ub2tlblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0dGhpcy5faGFuZGxlU3RpY2t5T2ZmKC8qb0NvbnRleHQqLyk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2hhbmRsZU5ld0NvbnRleHQoXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0YkVkaXRhYmxlOiBib29sZWFuLFxuXHRcdGJSZWNyZWF0ZUNvbnRleHQ6IGJvb2xlYW4sXG5cdFx0YkRyYWZ0TmF2aWdhdGlvbjogYm9vbGVhbixcblx0XHRiRm9yY2VGb2N1cyA9IGZhbHNlXG5cdCkge1xuXHRcdGlmICghdGhpcy5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVEaXJ0eSgpO1xuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMuX2dldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlVG9Db250ZXh0KG9Db250ZXh0LCB7XG5cdFx0XHRjaGVja05vSGFzaENoYW5nZTogdHJ1ZSxcblx0XHRcdGVkaXRhYmxlOiBiRWRpdGFibGUsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiB0cnVlLFxuXHRcdFx0YlJlY3JlYXRlQ29udGV4dDogYlJlY3JlYXRlQ29udGV4dCxcblx0XHRcdGJEcmFmdE5hdmlnYXRpb246IGJEcmFmdE5hdmlnYXRpb24sXG5cdFx0XHRzaG93UGxhY2Vob2xkZXI6IGZhbHNlLFxuXHRcdFx0YkZvcmNlRm9jdXM6IGJGb3JjZUZvY3VzLFxuXHRcdFx0a2VlcEN1cnJlbnRMYXlvdXQ6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRCb3VuZENvbnRleHQodmlldzogYW55LCBwYXJhbXM6IGFueSkge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHZpZXcuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0Y29uc3QgYlJlZnJlc2hBZnRlckFjdGlvbiA9IHZpZXdMZXZlbCA+IDEgfHwgKHZpZXdMZXZlbCA9PT0gMSAmJiBwYXJhbXMuY29udHJvbElkKTtcblx0XHRyZXR1cm4gIXBhcmFtcy5pc05hdmlnYWJsZSB8fCAhIWJSZWZyZXNoQWZ0ZXJBY3Rpb247XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZXJlIGFyZSB2YWxpZGF0aW9uIChwYXJzZSkgZXJyb3JzIGZvciBjb250cm9scyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHRcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnNcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9ycywgYW5kIHJlamVjdHMgaWYgdGhlcmUgYXJlIHZhbGlkYXRpb24gZXJyb3JzXG5cdCAqL1xuXG5cdF9jaGVja0ZvclZhbGlkYXRpb25FcnJvcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N5bmNUYXNrKCkudGhlbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzID0gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdGxldCBvQ29udHJvbDtcblx0XHRcdGxldCBvTWVzc2FnZTtcblxuXHRcdFx0aWYgKCFhTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJObyB2YWxpZGF0aW9uIGVycm9ycyBmb3VuZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0b01lc3NhZ2UgPSBhTWVzc2FnZXNbaV07XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2wgPSBDb3JlLmJ5SWQob01lc3NhZ2UuZ2V0Q29udHJvbElkKCkpO1xuXHRcdFx0XHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0aWYgKG9Db250cm9sLmdldElkKCkgPT09IHNWaWV3SWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwidmFsaWRhdGlvbiBlcnJvcnMgZXhpc3RcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfcmVmcmVzaExpc3RJZlJlcXVpcmVkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0gb1Jlc3BvbnNlIFRoZSByZXNwb25zZSBvZiB0aGUgYm91bmQgYWN0aW9uIGFuZCB0aGUgbmFtZXMgb2YgdGhlIGtleSBmaWVsZHNcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBib3VuZCBjb250ZXh0IG9uIHdoaWNoIHRoZSBhY3Rpb24gd2FzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIEFsd2F5cyByZXNvbHZlcyB0byBwYXJhbSBvUmVzcG9uc2Vcblx0ICovXG5cdF9yZWZyZXNoTGlzdElmUmVxdWlyZWQob1Jlc3BvbnNlOiBhbnksIG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0aWYgKCFvQ29udGV4dCB8fCAhb1Jlc3BvbnNlIHx8ICFvUmVzcG9uc2Uub0RhdGEpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0Ly8gcmVmcmVzaCBvbmx5IGxpc3RzXG5cdFx0aWYgKG9CaW5kaW5nICYmIG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvUmVzcG9uc2Uub0RhdGE7XG5cdFx0XHRjb25zdCBhS2V5cyA9IG9SZXNwb25zZS5rZXlzO1xuXHRcdFx0Y29uc3Qgb0N1cnJlbnREYXRhID0gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRsZXQgYlJldHVybmVkQ29udGV4dElzU2FtZSA9IHRydWU7XG5cdFx0XHQvLyBlbnN1cmUgY29udGV4dCBpcyBpbiB0aGUgcmVzcG9uc2Vcblx0XHRcdGlmIChPYmplY3Qua2V5cyhvQ29udGV4dERhdGEpLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiBjb250ZXh0IGluIHJlc3BvbnNlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBib3VuZCBjb250ZXh0XG5cdFx0XHRcdGJSZXR1cm5lZENvbnRleHRJc1NhbWUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9DdXJyZW50RGF0YVtzS2V5XSA9PT0gb0NvbnRleHREYXRhW3NLZXldO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCFiUmV0dXJuZWRDb250ZXh0SXNTYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoKG9CaW5kaW5nIGFzIGFueSkuaXNSb290KCkpIHtcblx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRvQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IG9CaW5kaW5nLmdldFBhdGgoKSB9XSwgb0JpbmRpbmcuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQpXG5cdFx0XHRcdFx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlZnJlc2hpbmcgdGhlIHRhYmxlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiLCBlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyByZXNvbHZlIHdpdGggb1Jlc3BvbnNlIHRvIG5vdCBkaXN0dXJiIHRoZSBwcm9taXNlIGNoYWluIGFmdGVyd2FyZHNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRfZmV0Y2hTZW1hbnRpY0tleVZhbHVlcyhvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgYW55LFxuXHRcdFx0c0VudGl0eVNldE5hbWUgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRhU2VtYW50aWNLZXlzID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG9NZXRhTW9kZWwsIHNFbnRpdHlTZXROYW1lKTtcblxuXHRcdGlmIChhU2VtYW50aWNLZXlzICYmIGFTZW1hbnRpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhUmVxdWVzdFByb21pc2VzID0gYVNlbWFudGljS2V5cy5tYXAoZnVuY3Rpb24gKG9LZXk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRleHQucmVxdWVzdE9iamVjdChvS2V5LiRQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgbGF0ZXN0IGNvbnRleHQgaW4gdGhlIG1ldGFkYXRhIGhpZXJhcmNoeSBmcm9tIHJvb3RCaW5kaW5nIHRvIGdpdmVuIGNvbnRleHQgcG9pbnRpbmcgdG8gZ2l2ZW4gZW50aXR5VHlwZVxuXHQgKiBpZiBhbnkgc3VjaCBjb250ZXh0IGV4aXN0cy4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuXHQgKiBOb3RlOiBJdCBpcyBvbmx5IG5lZWRlZCBhcyB3b3JrLWFyb3VuZCBmb3IgaW5jb3JyZWN0IG1vZGVsbGluZy4gQ29ycmVjdCBtb2RlbGxpbmcgd291bGQgaW1wbHkgYSBEYXRhRmllbGRGb3JBY3Rpb24gaW4gYSBMaW5lSXRlbVxuXHQgKiB0byBwb2ludCB0byBhbiBvdmVybG9hZCBkZWZpbmVkIGVpdGhlciBvbiB0aGUgY29ycmVzcG9uZGluZyBFbnRpdHlUeXBlIG9yIGEgY29sbGVjdGlvbiBvZiB0aGUgc2FtZS5cblx0ICpcblx0ICogQHBhcmFtIHJvb3RDb250ZXh0IFRoZSBjb250ZXh0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBUaGUgbGlzdEJpbmRpbmcgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBvdmVybG9hZEVudGl0eVR5cGUgVGhlIEFjdGlvbk92ZXJsb2FkIGVudGl0eSB0eXBlIHRvIHNlYXJjaCBmb3Jcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgQWN0aW9uT3ZlcmxvYWQgZW50aXR5XG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRDb250ZXh0RnJvbU1ldGFkYXRhUGF0aChyb290Q29udGV4dDogQ29udGV4dCwgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIG92ZXJsb2FkRW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB7XG5cdFx0Y29uc3QgbW9kZWw6IE9EYXRhTW9kZWwgPSByb290Q29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgY29udGV4dFNlZ21lbnRzOiBzdHJpbmdbXSA9IGxpc3RCaW5kaW5nLmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0bGV0IGN1cnJlbnRDb250ZXh0OiBDb250ZXh0ID0gcm9vdENvbnRleHQ7XG5cblx0XHQvLyBXZSBleHBlY3QgdGhhdCB0aGUgbGFzdCBzZWdtZW50IG9mIHRoZSBsaXN0QmluZGluZyBpcyB0aGUgTGlzdEJpbmRpbmcgb2YgdGhlIHRhYmxlLiBSZW1vdmUgdGhpcyBmcm9tIGNvbnRleHRTZWdtZW50c1xuXHRcdC8vIGJlY2F1c2UgaXQgaXMgaW5jb3JyZWN0IHRvIGV4ZWN1dGUgYmluZENvbnRleHQgb24gYSBsaXN0LiBXZSBkbyBub3QgYW55d2F5IG5lZWQgdG8gc2VhcmNoIHRoaXMgY29udGV4dCBmb3IgdGhlIG92ZXJsb2FkLlxuXHRcdGNvbnRleHRTZWdtZW50cy5wb3AoKTtcblx0XHRpZiAoY29udGV4dFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Y29udGV4dFNlZ21lbnRzID0gW1wiXCJdOyAvLyBEb24ndCBsZWF2ZSBjb250ZXh0U2VnbWVudHMgdW5kZWZpbmVkXG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRleHRTZWdtZW50c1swXSAhPT0gXCJcIikge1xuXHRcdFx0Y29udGV4dFNlZ21lbnRzLnVuc2hpZnQoXCJcIik7IC8vIHRvIGFsc28gZ2V0IHRoZSByb290IGNvbnRleHQsIGkuZS4gdGhlIGJpbmRpbmdDb250ZXh0IG9mIHRoZSB0YWJsZVxuXHRcdH1cblx0XHQvLyBsb2FkIGFsbCB0aGUgcGFyZW50IGNvbnRleHRzIGludG8gYW4gYXJyYXlcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0czogQ29udGV4dFtdID0gY29udGV4dFNlZ21lbnRzXG5cdFx0XHQubWFwKChwYXRoU2VnbWVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGlmIChwYXRoU2VnbWVudCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdGN1cnJlbnRDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQocGF0aFNlZ21lbnQsIGN1cnJlbnRDb250ZXh0KS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDcmVhdGluZyBhIG5ldyBjb250ZXh0IHVzaW5nIGJpbmRDb250ZXh0KC4uLikuZ2V0Qm91bmRDb250ZXh0KCkgZG9lcyBub3Qgd29yayBpZiB0aGUgZXRhZyBpcyBuZWVkZWQuIEFjY29yZGluZyB0byBtb2RlbCBjb2xsZWFndWVzLFxuXHRcdFx0XHRcdC8vIHdlIHNob3VsZCBhbHdheXMgdXNlIGFuIGV4aXN0aW5nIGNvbnRleHQgaWYgcG9zc2libGUuXG5cdFx0XHRcdFx0Ly8gQ3VycmVudGx5LCB0aGUgb25seSBleGFtcGxlIHdlIGtub3cgYWJvdXQgaXMgdXNpbmcgdGhlIHJvb3RDb250ZXh0IC0gYW5kIGluIHRoaXMgY2FzZSwgd2UgY2FuIG9idmlvdXNseSByZXVzZSB0aGF0IGV4aXN0aW5nIGNvbnRleHQuXG5cdFx0XHRcdFx0Ly8gSWYgb3RoZXIgZXhhbXBsZXMgc2hvdWxkIGNvbWUgdXAsIHRoZSBiZXN0IHBvc3NpYmxlIHdvcmsgYXJvdW5kIHdvdWxkIGJlIHRvIHJlcXVlc3Qgc29tZSBkYXRhIHRvIGdldCBhbiBleGlzdGluZyBjb250ZXh0LiBUbyBrZWVwIHRoZVxuXHRcdFx0XHRcdC8vIHJlcXVlc3QgYXMgc21hbGwgYW5kIGZhc3QgYXMgcG9zc2libGUsIHdlIHNob3VsZCByZXF1ZXN0IG9ubHkgdGhlIGZpcnN0IGtleSBwcm9wZXJ0eS4gQXMgdGhpcyB3b3VsZCBpbnRyb2R1Y2UgYXN5bmNocm9uaXNtLCBhbmQgYW55d2F5XG5cdFx0XHRcdFx0Ly8gdGhlIHdob2xlIGxvZ2ljIGlzIG9ubHkgcGFydCBvZiB3b3JrLWFyb3VuZCBmb3IgaW5jb3JyZWN0IG1vZGVsbGluZywgd2Ugd2FpdCB1bnRpbCB3ZSBoYXZlIGFuIGV4YW1wbGUgbmVlZGluZyBpdCBiZWZvcmUgaW1wbGVtZW50aW5nIHRoaXMuXG5cdFx0XHRcdFx0Y3VycmVudENvbnRleHQgPSByb290Q29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudENvbnRleHQ7XG5cdFx0XHR9KVxuXHRcdFx0LnJldmVyc2UoKTtcblx0XHQvLyBzZWFyY2ggZm9yIGNvbnRleHQgYmFja3dhcmRzXG5cdFx0Y29uc3Qgb3ZlcmxvYWRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkID0gcGFyZW50Q29udGV4dHMuZmluZChcblx0XHRcdChwYXJlbnRDb250ZXh0OiBDb250ZXh0KSA9PlxuXHRcdFx0XHQobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHBhcmVudENvbnRleHQuZ2V0UGF0aCgpKS5nZXRPYmplY3QoXCIkVHlwZVwiKSBhcyB1bmtub3duIGFzIHN0cmluZykgPT09IG92ZXJsb2FkRW50aXR5VHlwZVxuXHRcdCk7XG5cdFx0cmV0dXJuIG92ZXJsb2FkQ29udGV4dCB8fCBsaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdH1cblxuXHRfY3JlYXRlU2libGluZ0luZm8oY3VycmVudENvbnRleHQ6IFY0Q29udGV4dCwgbmV3Q29udGV4dDogVjRDb250ZXh0KTogU2libGluZ0luZm9ybWF0aW9uIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFyZ2V0Q29udGV4dDogbmV3Q29udGV4dCxcblx0XHRcdHBhdGhNYXBwaW5nOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRvbGRQYXRoOiBjdXJyZW50Q29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRcdFx0bmV3UGF0aDogbmV3Q29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cblxuXHRfdXBkYXRlUGF0aHNJbkhpc3RvcnkobWFwcGluZ3M6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdKSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0UGF0aE1hcHBpbmcobWFwcGluZ3MpO1xuXG5cdFx0Ly8gQWxzbyB1cGRhdGUgdGhlIHNlbWFudGljIG1hcHBpbmcgaW4gdGhlIHJvdXRpbmcgc2VydmljZVxuXHRcdGNvbnN0IGxhc3RTZW1hbnRpY01hcHBpbmcgPSB0aGlzLl9nZXRTZW1hbnRpY01hcHBpbmcoKTtcblx0XHRpZiAobWFwcGluZ3MubGVuZ3RoICYmIGxhc3RTZW1hbnRpY01hcHBpbmc/LnRlY2huaWNhbFBhdGggPT09IG1hcHBpbmdzW21hcHBpbmdzLmxlbmd0aCAtIDFdLm9sZFBhdGgpIHtcblx0XHRcdGxhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9IG1hcHBpbmdzW21hcHBpbmdzLmxlbmd0aCAtIDFdLm5ld1BhdGg7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kcyBjcmVhdGVzIGEgc2libGluZyBjb250ZXh0IGZvciBhIHN1Ym9iamVjdCBwYWdlLCBhbmQgY2FsY3VsYXRlcyBhIHNpYmxpbmcgcGF0aCBmb3Jcblx0ICogYWxsIGludGVybWVkaWF0ZXMgcGF0aHMgYmV0d2VlbiB0aGUgT1AgYW5kIHRoZSBzdWItT1AuXG5cdCAqXG5cdCAqIEBwYXJhbSByb290Q3VycmVudENvbnRleHQgVGhlIGNvbnRleHQgZm9yIHRoZSByb290IG9mIHRoZSBkcmFmdFxuXHQgKiBAcGFyYW0gcmlnaHRtb3N0Q3VycmVudENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIHN1Ym9iamVjdFxuXHQgKiBAcGFyYW0gc1Byb2dyYW1taW5nTW9kZWwgVGhlIHByb2dyYW1taW5nIG1vZGVsXG5cdCAqIEBwYXJhbSBkb05vdENvbXB1dGVJZlJvb3QgSWYgdHJ1ZSwgd2UgZG9uJ3QgY29tcHV0ZSBzaWJsaW5nSW5mbyBpZiB0aGUgcm9vdCBhbmQgdGhlIHJpZ2h0bW9zdCBjb250ZXh0cyBhcmUgdGhlIHNhbWVcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgc2libGluZ0luZm9ybWF0aW9uIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgX2NvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24oXG5cdFx0cm9vdEN1cnJlbnRDb250ZXh0OiBWNENvbnRleHQsXG5cdFx0cmlnaHRtb3N0Q3VycmVudENvbnRleHQ6IFY0Q29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG5cdFx0c1Byb2dyYW1taW5nTW9kZWw6IHN0cmluZyxcblx0XHRkb05vdENvbXB1dGVJZlJvb3Q6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTaWJsaW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ+IHtcblx0XHRyaWdodG1vc3RDdXJyZW50Q29udGV4dCA9IHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0ID8/IHJvb3RDdXJyZW50Q29udGV4dDtcblx0XHRpZiAoIXJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHQvLyBXcm9uZyB1c2FnZSAhIVxuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGNvbXB1dGUgcmlnaHRtb3N0IHNpYmxpbmcgY29udGV4dFwiKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb21wdXRlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHRcIik7XG5cdFx0fVxuXHRcdGlmIChkb05vdENvbXB1dGVJZlJvb3QgJiYgcmlnaHRtb3N0Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpID09PSByb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9kZWwgPSByb290Q3VycmVudENvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdHJldHVybiBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKHJvb3RDdXJyZW50Q29udGV4dCwgcmlnaHRtb3N0Q3VycmVudENvbnRleHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiBub3QgaW4gZHJhZnQgbW9kZSwgd2UganVzdCByZWNyZWF0ZSBhIGNvbnRleHQgZnJvbSB0aGUgcGF0aCBvZiB0aGUgcmlnaHRtb3N0IGNvbnRleHRcblx0XHRcdC8vIE5vIHBhdGggbWFwcGluZyBpcyBuZWVkZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldENvbnRleHQ6IG1vZGVsLmJpbmRDb250ZXh0KHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSkuZ2V0Qm91bmRDb250ZXh0KCksXG5cdFx0XHRcdHBhdGhNYXBwaW5nOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0X2lzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKS5faXNGY2xFbmFibGVkKCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdEZsb3c7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrakJPLGdCQUFnQkEsSUFBSSxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFFO0lBQ3BCLENBQUMsQ0FBQyxPQUFNRyxDQUFDLEVBQUU7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUMsQ0FBQztJQUNsQjtJQUNBLElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEVBQUU7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUVILE9BQU8sQ0FBQztJQUNwQztJQUNBLE9BQU9DLE1BQU07RUFDZDtFQUdPLDBCQUEwQkYsSUFBSSxFQUFFSyxTQUFTLEVBQUU7SUFDakQsSUFBSTtNQUNILElBQUlILE1BQU0sR0FBR0YsSUFBSSxFQUFFO0lBQ3BCLENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7TUFDWCxPQUFPRSxTQUFTLENBQUMsSUFBSSxFQUFFRixDQUFDLENBQUM7SUFDMUI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FB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
@@ -1130,9 +1130,7 @@ class EditFlow extends ControllerExtension {
1130
1130
  * @memberof sap.fe.core.controllerextensions.EditFlow
1131
1131
  * @param sActionName The name of the action to be called
1132
1132
  * @param mInParameters Contains the following attributes:
1133
- * @param mInParameters.parameterValues A map of action parameter names and provided values
1134
- * @param mInParameters.parameterValues.name Name of the parameter
1135
- * @param mInParameters.parameterValues.value Value of the parameter
1133
+ * @param mInParameters.parameterValues An optional array of objects representing the action parameters, where each object has a name of string type and a value that can be of any data type.
1136
1134
  * @param mInParameters.skipParameterDialog Skips the action parameter dialog if values are provided for all of them in parameterValues
1137
1135
  * @param mInParameters.contexts For a bound action, a context or an array with contexts for which the action is to be called must be provided
1138
1136
  * @param mInParameters.model For an unbound action, an instance of an OData V4 model must be provided
@@ -1151,7 +1149,7 @@ class EditFlow extends ControllerExtension {
1151
1149
  async invokeAction(
1152
1150
  sActionName: string,
1153
1151
  mInParameters?: {
1154
- parameterValues?: { name: string; value: any };
1152
+ parameterValues?: { name: string; value: unknown }[];
1155
1153
  skipParameterDialog?: boolean;
1156
1154
  contexts?: Context | Context[];
1157
1155
  model?: ODataModel;
@@ -68,7 +68,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
68
68
  controls: [],
69
69
  elements: [],
70
70
  // eslint-disable-next-line no-template-curly-in-string
71
- version: "1.108.32",
71
+ version: "1.108.33",
72
72
  noLibraryCSS: true,
73
73
  extensions: {
74
74
  //Configuration used for rule loading of Support Assistant
@@ -65,9 +65,9 @@ ST_DRAFT_DATALOSS_CREATE_ENTITY_RBL=\u0625\u0646\u0634\u0627\u0621
65
65
 
66
66
  ST_DRAFT_DATALOSS_SAVE_DRAFT_TOL=\u0642\u0645 \u0628\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u062A\u063A\u064A\u064A\u0631\u0627\u062A \u0639\u0644\u0649 \u0627\u0644\u0625\u0635\u062F\u0627\u0631 \u0627\u0644\u0645\u062D\u0641\u0648\u0638.
67
67
 
68
- ST_DRAFT_DATALOSS_CREATE_ENTITY_TOL=\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646.
68
+ ST_DRAFT_DATALOSS_CREATE_ENTITY_TOL=\u0623\u0646\u0634\u0626 \u0627\u0644\u0643\u0627\u0626\u0646.
69
69
 
70
- ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL=\u0627\u062D\u062A\u0641\u0627\u0638 \u0628\u0627\u0644\u0645\u0633\u0648\u062F\u0629
70
+ ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL=\u0627\u0644\u0627\u062D\u062A\u0641\u0627\u0638 \u0628\u0627\u0644\u0645\u0633\u0648\u062F\u0629
71
71
 
72
72
  ST_DRAFT_DATALOSS_KEEP_DRAFT_TOL=\u0627\u0644\u062A\u063A\u064A\u064A\u0631\u0627\u062A \u0645\u0631\u0626\u064A\u0629 \u0644\u0643 \u0641\u0642\u0637 \u0648\u0644\u064A\u0633 \u0644\u0647\u0627 \u0623\u064A \u062A\u0623\u062B\u064A\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u064A\u0627\u062A \u0648\u0627\u0644\u0648\u0638\u0627\u0626\u0641 \u0627\u0644\u062A\u0627\u0628\u0639\u0629.
73
73
 
@@ -67,11 +67,11 @@ ST_DRAFT_DATALOSS_SAVE_DRAFT_TOL=\u0395\u03C6\u03B1\u03C1\u03BC\u03CC\u03C3\u03C
67
67
 
68
68
  ST_DRAFT_DATALOSS_CREATE_ENTITY_TOL=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03B1\u03BD\u03C4\u03B9\u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF.
69
69
 
70
- ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL=\u0394\u03B9\u03B1\u03C4.\u03A0\u03C1\u03CC\u03C7.
70
+ ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL=\u0394\u03B9\u03B1\u03C4\u03AE\u03C1\u03B7\u03C3\u03B7 \u03A0\u03C1\u03CC\u03C7\u03B5\u03B9\u03C1\u03BF\u03C5
71
71
 
72
72
  ST_DRAFT_DATALOSS_KEEP_DRAFT_TOL=\u039F\u03B9 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 \u03B8\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BC\u03CC\u03BD\u03BF \u03C3\u03B5 \u03B5\u03C3\u03AC\u03C2 \u03BA\u03B1\u03B9 \u03B4\u03B5\u03BD \u03B8\u03B1 \u03B9\u03C3\u03C7\u03CD\u03BF\u03C5\u03BD \u03C3\u03B5 \u03B5\u03BE\u03B1\u03C1\u03C4\u03B7\u03BC.\u03B4\u03B9\u03B1\u03B4\u03B9\u03BA.\u03BA\u03B1\u03B9 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B5\u03C2.
73
73
 
74
- ST_DRAFT_DATALOSS_DISCARD_DRAFT_RBL=\u0391\u03C0\u03CC\u03C1.\u03A0\u03C1\u03CC\u03C7.
74
+ ST_DRAFT_DATALOSS_DISCARD_DRAFT_RBL=\u0391\u03C0\u03CC\u03C1\u03C1\u03B9\u03C8\u03B7 \u03A0\u03C1\u03CC\u03C7\u03B5\u03B9\u03C1\u03BF\u03C5
75
75
 
76
76
  ST_DRAFT_DATALOSS_DISCARD_DRAFT_TOL=\u039F\u03BB\u03B5\u03C2 \u03BF\u03B9 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 \u03B8\u03B1 \u03C7\u03B1\u03B8\u03BF\u03CD\u03BD.
77
77
 
@@ -232,7 +232,7 @@ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_LOCKED=\n1 da
232
232
 
233
233
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR=\nObjek tersisa memiliki perubahan yang belum disimpan oleh pengguna lain.\n\nApakah Anda masih ingin menghapusnya?
234
234
 
235
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_PLURAL=\nObjek tersisa memiliki perubahan yang belum disimpan oleh pengguna lain.\n\nApakah Anda masih ingin menghapusnya?
235
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_PLURAL=\nObjek tersisa memiliki perubahan oleh pengguna lain yang belum disimpan.\n\nApakah Anda masih ingin menghapusnya?
236
236
 
237
237
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR=Juga hapus objek dengan perubahan yang belum disimpan?
238
238