@sapui5/sap.fe.core 1.124.5 → 1.124.6

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.
@@ -256,6 +256,13 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
256
256
  oBackButton
257
257
  };
258
258
  }
259
+ function isNonTechnicalMessage(message) {
260
+ const technicalDetails = message.getTechnicalDetails();
261
+ if (technicalDetails && (technicalDetails.originalMessage !== undefined && technicalDetails.originalMessage !== null || technicalDetails.httpStatus !== undefined && technicalDetails.httpStatus !== null) || message.getCode()) {
262
+ return true;
263
+ }
264
+ return false;
265
+ }
259
266
  async function showUnboundMessages(aCustomMessages, oContext, bShowBoundTransition, concurrentEditFlag, control, sActionName, bOnlyForTest, onBeforeShowMessage, viewType) {
260
267
  let aTransitionMessages = this.getMessages();
261
268
  let sHighestPriority;
@@ -267,6 +274,10 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
267
274
  })];
268
275
  let showMessageDialog = false,
269
276
  showMessageBox = false;
277
+ const isNonTechnicalMessageFilter = new Filter({
278
+ path: "",
279
+ test: isNonTechnicalMessage
280
+ });
270
281
  if (bShowBoundTransition) {
271
282
  aTransitionMessages = aTransitionMessages.concat(getMessages(true, true));
272
283
  // we only want to show bound transition messages not bound state messages hence add a filter for the same
@@ -299,12 +310,15 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
299
310
  test: fnCheckControlIdInDialog,
300
311
  caseSensitive: true
301
312
  }));
313
+ aFilters.push(isNonTechnicalMessageFilter);
302
314
  } else {
303
315
  // only unbound messages have to be shown so add filter accordingly
304
316
  aFilters.push(new Filter({
305
- path: "target",
306
- operator: FilterOperator.EQ,
307
- value1: ""
317
+ filters: [new Filter({
318
+ path: "",
319
+ test: message => message.getTargets().length === 0 || message.getTargets()[0] === ""
320
+ }), isNonTechnicalMessageFilter],
321
+ and: true
308
322
  }));
309
323
  }
310
324
  if (aCustomMessages && aCustomMessages.length) {
@@ -991,13 +1005,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
991
1005
  }
992
1006
  }
993
1007
  //Filtering messages again here to avoid showing pure technical messages raised by the model
994
- const backendMessages = [];
995
- for (i = 0; i < aTransitionMessages.length; i++) {
996
- const technicalDetails = aTransitionMessages[i].getTechnicalDetails();
997
- if (technicalDetails && (technicalDetails.originalMessage !== undefined && technicalDetails.originalMessage !== null || technicalDetails.httpStatus !== undefined && technicalDetails.httpStatus !== null) || aTransitionMessages[i].getCode()) {
998
- backendMessages.push(aTransitionMessages[i]);
999
- }
1000
- }
1008
+ const backendMessages = aTransitionMessages.filter(isNonTechnicalMessage);
1001
1009
  return backendMessages;
1002
1010
  }
1003
1011
  function removeTransitionMessages(bBoundMessages, sPathToBeRemoved) {
@@ -1223,4 +1231,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1223
1231
  };
1224
1232
  return messageHandling;
1225
1233
  }, false);
1226
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInNldFRhcmdldHMiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJkZXNjcmlwdGlvbkJpbmRpbmciLCJ0ZWNobmljYWxEZXRhaWxzQmluZGluZyIsIk1lc3NhZ2VJdGVtIiwidW5kZWZpbmVkIiwiY291bnRlciIsInBhdGgiLCJ0aXRsZSIsInN1YnRpdGxlIiwibG9uZ3RleHRVcmwiLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJzZXRHcm91cEl0ZW1zIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJiT25seUZvclRlc3QiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidmlld1R5cGUiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJzSGlnaGVzdFByaW9yaXR5Iiwic0hpZ2hlc3RQcmlvcml0eVRleHQiLCJhRmlsdGVycyIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJjb25jYXQiLCJwdXNoIiwiRVEiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImluZGV4IiwiSW5maW5pdHkiLCJvQ29udHJvbCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJiSGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiZ2V0Q29kZSIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImFNb2RlbERhdGFBcnJheSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImN1cnJlbnRDb250ZXh0IiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiZ2V0SWQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0TWVzc2FnZSIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9NZXNzYWdlT2JqZWN0Iiwib1NvcnRlciIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJnZXRNZXNzYWdlUmFuayIsInJhbmtCIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZVR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJpbmNsdWRlcyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsImFsbFJvd0NvbnRleHRzIiwicm93Q29udGV4dCIsImNvbnRleHRQYXRoIiwiaWRlbnRpZmllckNvbHVtbiIsImdldElkZW50aWZpZXJDb2x1bW4iLCJyb3dJZGVudGlmaWVyIiwiY29sdW1uUHJvcGVydHlOYW1lIiwiZ2V0VGFibGVDb2xQcm9wZXJ0eSIsInNUYWJsZVRhcmdldENvbE5hbWUiLCJnZXRUYWJsZUNvbEluZm8iLCJnZXRIZWFkZXIiLCJvVmlld0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9wTGF5b3V0IiwiZ2V0Q29udGVudCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsImdldENvbnRleHRzIiwiaGVhZGVyTmFtZSIsImdldEhlYWRlclZpc2libGUiLCJ0YWJsZUhlYWRlciIsImdldFRpdGxlIiwic0xhc3RBY3Rpb25UZXh0IiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93IiwiZ2V0UGVyc2lzdGVudCIsInN1YlRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwib1RhcmdldGVkQ29udHJvbCIsInNNZXNzYWdlU3VidGl0bGUiLCJzUm93U3VidGl0bGVWYWx1ZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSIsIm9Db2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsIm9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwic1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVGaXJzdENvbFZhbHVlIiwib0NvbHVtbkluZm8iLCJkZXRlcm1pbmVDb2x1bW5JbmZvIiwic0NvbHVtbkluZGljYXRvciIsInNDb2x1bW5WYWx1ZSIsIm9CaW5kaW5nQ29udGV4dCIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic1RleHRBbm5vdGF0aW9uUGF0aCIsInNUZXh0QXJyYW5nZW1lbnQiLCJzQ29kZVZhbHVlIiwic1RleHRWYWx1ZSIsInNDb21wdXRlZFZhbHVlIiwic2xpY2UiLCJzRW51bU51bWJlciIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJnZXRUYXJnZXRzIiwic3BsaXQiLCJwb3AiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwib0NvbHVtbiIsImtleSIsImF2YWlsYWJpbGl0eSIsIm9QYXJlbnRDb250cm9sIiwicmVzb3VyY2VCdW5kbGUiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsImxpc3RCaW5kaW5nIiwiU3RhcnRzV2l0aCIsIm1hcCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYmFja2VuZE1lc3NhZ2VzIiwidGVjaG5pY2FsRGV0YWlscyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiZm5GaWx0ZXJVcG9uSWRzIiwiYSIsImIiLCJvQ29udGV4dFBhdGgiLCJmblJlZ0V4cGVzY2FwZSIsInMiLCJyZXBsYWNlIiwiY29udGV4dFBhdGhUb0VzY2FwZSIsIlJlZ0V4cCIsInNUYWJsZVRhcmdldENvbFByb3BlcnR5Iiwib1RhYmxlVGFyZ2V0Q29sIiwiZ2V0Q29sdW1ucyIsImNvbHVtbiIsImdldFByb3BlcnR5S2V5Iiwib0N1c3RvbUNvbHVtbiIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldENvbHVtbnNGb3IiLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwiY29sdW1uRGVmaW5pdGlvbiIsInByb3BlcnR5SW5mbyIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsInNvbWUiLCJvVGFibGVDb2xJbmZvIiwib0l0ZW0iLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwic2VjdGlvbiIsImJNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYklzT3JwaGFuRWxlbWVudCIsImFFbGVtZW50cyIsIm9QYXJlbnRFbGVtZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tTWVzc2FnZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uVHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvbWVzc2FnZS9NZXNzYWdlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZSA9IENvcmVMaWIuTWVzc2FnZVR5cGU7XG5sZXQgYU1lc3NhZ2VMaXN0OiB1bmtub3duW10gPSBbXTtcbmxldCBhTWVzc2FnZURhdGFMaXN0OiBNZXNzYWdlW10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogRnVuY3Rpb25bXSA9IFtdO1xubGV0IG9EaWFsb2c6IERpYWxvZztcbmxldCBvQmFja0J1dHRvbjogQnV0dG9uO1xubGV0IG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VXaXRoSGVhZGVyID0gTWVzc2FnZSAmIHtcblx0aGVhZGVyTmFtZT86IHN0cmluZztcblx0dGFyZ2V0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsVGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dGFibGVIZWFkZXI/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYm9vbGVhbiwgYlRyYW5zaXRpb25Pbmx5PzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gTWVzc2FnZVtdO1xuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiAoXG5cdFx0YUN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10gfCB1bmRlZmluZWQsXG5cdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdG9Db250cm9sPzogQ29udHJvbCxcblx0XHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpID0+IFByb21pc2U8RGlhbG9nIHwgYm9vbGVhbj47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiB0cnVlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogKFxuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRcdGlzTXVsdGk0MTI/OiBib29sZWFuXG5cdCkgPT4ge1xuXHRcdG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdFx0b0JhY2tCdXR0b246IEJ1dHRvbjtcblx0fTtcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiAob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB2b2lkO1xuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogKG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sKSA9PiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuXHQpID0+IENvbEluZm9BbmRTdWJ0aXRsZVR5cGU7XG5cdGdldFRhYmxlQ29sSW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKSA9PiBzdHJpbmc7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSA9PiBDb2x1bW5JbmZvVHlwZTtcblx0ZmV0Y2hDb2x1bW5JbmZvOiAob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKSA9PiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRnZXRNZXNzYWdlUmFuazogKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpID0+IG51bWJlcjtcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pID0+IHZvaWQ7XG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogKFxuXHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHk6IHN0cmluZyxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRcdHNUZXh0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0XHRzVGV4dEFycmFuZ2VtZW50OiBzdHJpbmdcblx0KSA9PiBzdHJpbmc7XG5cdHNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGU6IChhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldykgPT4gdm9pZDtcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogKFxuXHRcdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpOiBzdHJpbmcge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHJpbmcoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpOiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH1bXSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdKTogQ29yZUxpYi5NZXNzYWdlVHlwZSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgdHlwZW9mIG9NZXNzYWdlQ291bnRdO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIChvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnNldFRhcmdldHMoW1wiXCJdKTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKTogdm9pZCB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gb01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhcblx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRtdWx0aTQxMj86IGJvb2xlYW5cbik6IHtcblx0b01lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblx0b0JhY2tCdXR0b246IEJ1dHRvbjtcbn0ge1xuXHRsZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQmluZGluZyA9ICd7PSAke2Rlc2NyaXB0aW9ufSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXREZXNjcmlwdGlvbigpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcgPVxuXHRcdFx0J3s9ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0Z3JvdXBOYW1lOiBcIntoZWFkZXJOYW1lfVwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uQmluZGluZyArIHRlY2huaWNhbERldGFpbHNCaW5kaW5nLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIGlmIChtdWx0aTQxMikge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIntkZXNjcmlwdGlvbn1cIixcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGUsXG5cdFx0XHRsZW5ndGg6IDk5OTlcblx0XHR9XG5cdH0pO1xuXHRvTWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKTogdm9pZCB7XG5cdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdG9NZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRvTWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRzaG93TWVzc2FnZUJveD86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nPzogYm9vbGVhbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/OiBGdW5jdGlvbjtcbn07XG5hc3luYyBmdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdGNvbnRyb2w/OiBDb250cm9sLFxuXHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHR2aWV3VHlwZT86IHN0cmluZ1xuKTogUHJvbWlzZTxEaWFsb2cgfCBib29sZWFuPiB7XG5cdGxldCBhVHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRNZXNzYWdlcygpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRsZXQgaW5kZXggPSBJbmZpbml0eSxcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChhQ29udHJvbElkc1swXSkgYXMgQ29udHJvbDtcblx0XHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9XG5cdFx0XHRcdFx0b0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2dcblx0XHRcdFx0XHRcdD8gKGVycm9yRmllbGRDb250cm9sLmdldFBhcmVudCgpIGFzIENvbnRyb2wpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBDdXN0b21NZXNzYWdlKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0XHR9KTtcblx0fVxuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gKG9NZXNzYWdlVmlldyAmJiAob01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsKSkgfHwgbmV3IEpTT05Nb2RlbCgpO1xuXHRjb25zdCBiSGFzRXRhZ01lc3NhZ2UgPSB0aGlzLm1vZGlmeUVUYWdNZXNzYWdlc09ubHkoTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISwgY29uY3VycmVudEVkaXRGbGFnKTtcblxuXHRpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIpIHtcblx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggIT09IDApIHtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdH1cblx0bGV0IHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRsZXQgYU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdID0gW107XG5cdGlmIChzaG93TWVzc2FnZURpYWxvZyB8fCAoIXNob3dNZXNzYWdlQm94ICYmICFvbkJlZm9yZVNob3dNZXNzYWdlKSkge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cblx0XHRcdC8vIGlmIGZhbHNlLCBzaG93IG1lc3NhZ2VzIGluIGRpYWxvZ1xuXHRcdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdFx0Ly8gdXNpbmcgdGhlIG1lc3NhZ2UgbW9kZWwgYWdhaW4gZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3IGFuZCB0aGVuIGZpbHRlcmluZyBvbiB0aGF0IGJpbmRpbmcgYWdhaW4gaXMgdW5uZWNlc3NhcnkuXG5cdFx0XHQvLyBTbyB3ZSBjcmVhdGUgbmV3IGpzb24gbW9kZWwgdG8gdXNlIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldy5cblx0XHRcdGNvbnN0IGFNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdFx0XHRhQ3VycmVudENvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRDb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCkpKSB7XG5cdFx0XHRcdGV4aXN0aW5nTWVzc2FnZXMgPSBvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9VbmlxdWVPYmo6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IGFNZXNzYWdlRGF0YUxpc3QuY29uY2F0KGV4aXN0aW5nTWVzc2FnZXMpLmZpbHRlcihmdW5jdGlvbiAob2JqOiBNZXNzYWdlKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5nZXRJZCgpXSAmJiAob1VuaXF1ZU9ialtvYmouZ2V0SWQoKV0gPSB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7XG5cdFx0fVxuXHR9XG5cdGlmIChvbkJlZm9yZVNob3dNZXNzYWdlKSB7XG5cdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0geyBzaG93TWVzc2FnZUJveCwgc2hvd01lc3NhZ2VEaWFsb2cgfTtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSBvbkJlZm9yZVNob3dNZXNzYWdlKGFUcmFuc2l0aW9uTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVycyk7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VCb3g7XG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpIHtcblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5maWx0ZXJlZE1lc3NhZ2VzID8gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgOiBhTW9kZWxEYXRhQXJyYXk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldE1lc3NhZ2UoKSk7XG5cdFx0XHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHRcdFx0fVxuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFUcmFuc2l0aW9uTWVzc2FnZXMpO1xuXHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZyAmJiBhTW9kZWxEYXRhQXJyYXkubGVuZ3RoKSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUoYU1vZGVsRGF0YUFycmF5LCBjb250cm9sLCBzQWN0aW9uTmFtZSwgdmlld1R5cGUpO1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTW9kZWxEYXRhQXJyYXkpOyAvLyBzZXQgdGhlIG1lc3NhZ2VzIGhlcmUgc28gdGhhdCBpZiBhbnkgb2YgdGhlbSBhcmUgZmlsdGVyZWQgZm9yIEFQRCwgdGhleSBhcmUgZmlsdGVyZWQgaGVyZSBhcyB3ZWxsLlxuXHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gYVJlc29sdmVGdW5jdGlvbnMgfHwgW107XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPERpYWxvZz4oZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogRGlhbG9nKSA9PiB2b2lkKSB7XG5cdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRcdGlmIChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlIShvTWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdGNvbnN0IG9Tb3J0ZXIgPSBuZXcgU29ydGVyKFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAob2JqMTogTWVzc2FnZSwgb2JqMjogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdFx0XHRjb25zdCByYW5rQiA9IGdldE1lc3NhZ2VSYW5rKG9iajIpO1xuXG5cdFx0XHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHR9KTtcblxuXHRcdFx0KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldy5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZykuc29ydChvU29ydGVyKTtcblxuXHRcdFx0b0RpYWxvZyA9XG5cdFx0XHRcdG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKVxuXHRcdFx0XHRcdD8gb0RpYWxvZ1xuXHRcdFx0XHRcdDogbmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1vZGVsRGF0YUFycmF5KTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIzNy41ZW1cIixcblx0XHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJlc29sdmVGdW5jdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0oKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgfSk7XG5cdFx0XHRvRGlhbG9nLnJlbW92ZUFsbENvbnRlbnQoKTtcblx0XHRcdG9EaWFsb2cuYWRkQ29udGVudChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcpO1xuXG5cdFx0XHRpZiAoYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL0J1dHRvblR5cGVcIl0sIGZ1bmN0aW9uIChCdXR0b25UeXBlVHlwZTogdHlwZW9mIEJ1dHRvblR5cGUpIHtcblx0XHRcdFx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGVUeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdFx0fVxuXHRcdFx0c0hpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShvTWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0XHRzSGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHQoKG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgQmFyKS5nZXRDb250ZW50TWlkZGxlKClbMF0gYXMgVGV4dCkuc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdGlmIChiT25seUZvclRlc3QgPT09IHRydWUpIHtcblx0XHRcdFx0cmVzb2x2ZShvRGlhbG9nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdO1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyAmJiAhYU1lc3NhZ2VMaXN0LmluY2x1ZGVzKG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZT8ubWVzc2FnZSkpIHx8XG5cdFx0XHRcdChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZylcblx0XHRcdCkge1xuXHRcdFx0XHRpZiAobWVzc2FnZVRlY2huaWNhbERldGFpbHMgJiYgKCFzaG93TWVzc2FnZVBhcmFtZXRlcnMgfHwgIXNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpKSB7XG5cdFx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gobWVzc2FnZVRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlPy5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYDxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUob01lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRcdGh0bWxUZXh0OiBmb3JtYXR0ZWRUZXh0U3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQgYXMgdW5rbm93biBhcyBzdHJpbmcsIHtcblx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIG5hbWUgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH0gZWxzZSBpZiAoYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCkge1xuXHRcdFx0Ly8gTFIgZmxvd1xuXHRcdFx0aWYgKHZpZXdUeXBlID09PSBcIkxpc3RSZXBvcnRcIiAmJiBjb250cm9sPy5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lTFJUYWJsZShjb250cm9sLCBhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpZXdUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHQvLyBPUCBEaXNwbGF5IG1vZGVcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUsIGNvbnRyb2wgYXMgVmlldyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKlxuICogQHBhcmFtIG9FbGVtXG4gKiBAcGFyYW0gYU1vZGVsRGF0YVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZUxSVGFibGUob0VsZW06IENvbnRyb2wgfCB1bmRlZmluZWQsIGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0gJiYgKG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7KG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgYWxsUm93Q29udGV4dHMgPSBvUm93QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAke3Jvd0NvbnRleHQuZ2V0UGF0aCgpfS9gO1xuXHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gJiYgcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXTtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5Qcm9wZXJ0eU5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xQcm9wZXJ0eShvRWxlbSwgYU1vZGVsRGF0YSwgY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZSB9ID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sSW5mbyhvRWxlbSBhcyBNRENUYWJsZSwgY29sdW1uUHJvcGVydHlOYW1lKTtcblxuXHRcdFx0XHRcdC8vIGlmIHRhcmdldCBoYXMgc29tZSBjb2x1bW4gbmFtZSBhbmQgY29sdW1uIGlzIHZpc2libGUgaW4gVUlcblx0XHRcdFx0XHRpZiAoY29sdW1uUHJvcGVydHlOYW1lICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0XHRcdC8vIGhlYWRlciB3aWxsIGJlIHJvdyBJZGVudGlmaWVyLCBpZiBmb3VuZCBmcm9tIGFib3ZlIGNvZGUgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSB0YWJsZSBuYW1lXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IHJvd0lkZW50aWZpZXIgPyBgICR7cm93SWRlbnRpZmllcn1gIDogKG9FbGVtIGFzIE1EQ1RhYmxlKS5nZXRIZWFkZXIoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gaWYgY29sdW1uIGRhdGEgbm90IGZvdW5kIChtYXkgYmUgdGhlIGNvbHVtbiBpcyBoaWRkZW4pLCBhZGQgZ3JvdXBpbmcgYXMgTGFzdCBBY3Rpb25cblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqXG4gKiBAcGFyYW0gYU1vZGVsRGF0YSBNZXNzYWdlIE9iamVjdFxuICogQHBhcmFtIHNBY3Rpb25OYW1lICBBY3Rpb24gbmFtZVxuICogQHBhcmFtIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldyk6IHZvaWQge1xuXHRjb25zdCBvVmlld0NvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvcExheW91dDogQ29udHJvbCA9IGNvbnRyb2w/LmdldENvbnRlbnQgJiYgY29udHJvbD8uZ2V0Q29udGVudCgpWzBdO1xuXHRsZXQgYklzR2VuZXJhbEdyb3VwTmFtZSA9IHRydWU7XG5cdGlmIChvcExheW91dCkge1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvcExheW91dCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRzdWJTZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUm93QmluZGluZyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdFx0XHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGxldCBjaGlsZFRhYmxlRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0b0VsZW0uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goKG9FbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHtvRWxlbS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3Jvd0lkZW50aWZpZXJ9LCAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGhlYWRlck5hbWUgPSBvRWxlbS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJOYW1lID0gb1N1YlNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7aGVhZGVyTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdC8vIGNoZWNrIGlmIE9QIGNvbnRleHQgcGF0aCBpcyBwYXJ0IG9mIHRhcmdldCwgc2V0IExhc3QgQWN0aW9uIGFzIGdyb3VwIG5hbWVcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0Y29uc3Qgc0xhc3RBY3Rpb25UZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0xBU1RfQUNUSU9OXCIpO1xuXHRyZXR1cm4gc0FjdGlvbk5hbWUgPyBgJHtzTGFzdEFjdGlvblRleHR9OiAke3NBY3Rpb25OYW1lfWAgOiBcIlwiO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnaXZlIHJhbmsgYmFzZWQgb24gTWVzc2FnZSBHcm91cC9IZWFkZXIgbmFtZSwgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBTb3J0aW5nIG1lc3NhZ2VzIGluIE1lc3NhZ2UgZGlhbG9nXG4gKiBMYXN0IEFjdGlvbiBzaG91bGQgYmUgc2hvd24gYXQgdG9wLCBuZXh0IFJvdyBJZCBhbmQgbGFzdCBHZW5lcmFsLlxuICpcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gMztcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMjtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICpcbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gYklzR2VuZXJhbEdyb3VwTmFtZVxuICovXG5jb25zdCBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lID0gKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pOiB2b2lkID0+IHtcblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBzZXRTZWN0aW9uTmFtZUluR3JvdXBcbiAqIEBwYXJhbSBmblNldEdyb3VwTmFtZVxuICogQHJldHVybnMgVGFibGUgaW5mbyBhbmQgU3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IGJvb2xlYW4sXG5cdGZuU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuKTogeyBvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlOyBzdWJUaXRsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB9IHtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUFuZFRhcmdldEluZm8ob1RhYmxlLCBhTWVzc2FnZSwgb0VsZW1lbnQsIG9Sb3dCaW5kaW5nKTtcblx0b1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciA9IG9UYWJsZS5nZXRIZWFkZXIoKTtcblxuXHRsZXQgc0NvbnRyb2xJZCwgYklzQ3JlYXRpb25Sb3c7XG5cdGlmICghb1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KSB7XG5cdFx0c0NvbnRyb2xJZCA9IGFNZXNzYWdlLmdldENvbnRyb2xJZHMoKS5maW5kKGZ1bmN0aW9uIChzSWQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xJblRhYmxlKG9UYWJsZSwgc0lkKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChzQ29udHJvbElkKSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdGJJc0NyZWF0aW9uUm93ID0gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sKTtcblx0fVxuXG5cdGlmICghb1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0Ly8gaWYgdGhlIGNvbHVtbiBpcyBub3QgcHJlc2VudCBvbiBVSSBvciB0aGUgdGFyZ2V0IGRvZXMgbm90IGhhdmUgYSB0YWJsZSBmaWVsZCBpbiBpdCwgdXNlIExhc3QgQWN0aW9uIGZvciBncm91cGluZ1xuXHRcdGlmIChhTWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgJiYgc0FjdGlvbk5hbWUpIHtcblx0XHRcdGZuU2V0R3JvdXBOYW1lKGFNZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdWJUaXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlU3VidGl0bGUoXG5cdFx0YU1lc3NhZ2UsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRvVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3dcblx0KTtcblxuXHRyZXR1cm4geyBvVGFyZ2V0VGFibGVJbmZvLCBzdWJUaXRsZSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgdGhlIHN1YnRpdGxlIGJhc2VkIG9uIFRhYmxlIFJvdy9Db2x1bW4gZGF0YS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0c1xuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gYklzQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBvVGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IENvbnRleHRbXSxcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZXNzYWdlU3VidGl0bGU7XG5cdGxldCBzUm93U3VidGl0bGVWYWx1ZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1RhYmxlKTtcblx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdGNvbnN0IG9Db2xGcm9tVGFibGVTZXR0aW5ncyA9IG1lc3NhZ2VIYW5kbGluZy5mZXRjaENvbHVtbkluZm8obWVzc2FnZSwgb1RhYmxlKTtcblx0aWYgKGJJc0NyZWF0aW9uUm93IHx8IG9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSkge1xuXHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA/IHNUYWJsZVRhcmdldENvbE5hbWUgOiAob0NvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdFx0XHRvVGFibGUsXG5cdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGggPSBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHRzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAob1RhYmxlUm93QmluZGluZ0NvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIHNldCBSb3cgc3VidGl0bGUgdGV4dFxuXHRcdFx0aWYgKG9UYXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IChvVGFyZ2V0ZWRDb250cm9sIGFzIEZpZWxkQVBJKS5nZXRWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVGaXJzdENvbFZhbHVlKFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHksXG5cdFx0XHRcdFx0b1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5ncywgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHRpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW3NSb3dTdWJ0aXRsZVZhbHVlLCBzVGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtcblx0XHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZVxuXHRcdFx0XHRdKX0sICR7b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlfWA7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiVW5rbm93blwiKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbc1Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3NSb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgc1RhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc01lc3NhZ2VTdWJ0aXRsZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQmluZGluZ0NvbnRleHQ7XG5cdGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7IC8vIG11c3QgYmUgYW4gT0RhdGFNZXRhTW9kZWwgdG8gbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb01ldGFNb2RlbD8uZ2V0TWV0YVBhdGgob1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdG9CaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgdmFsdWUgb2YgZmlyc3QgQ29sdW1uIG9mIFRhYmxlLCB3aXRoIGl0cyB0ZXh0IEFycmFuZ2VtZW50LlxuICpcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUZXh0QW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBzVGV4dEFycmFuZ2VtZW50XG4gKiBAcmV0dXJucyBDb2x1bW4gVmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xWYWx1ZShcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nLFxuXHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHNUZXh0QXJyYW5nZW1lbnQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0NvZGVWYWx1ZSA9IG9UYWJsZVJvd0NvbnRleHQuZ2V0T2JqZWN0KHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpO1xuXHRsZXQgc1RleHRWYWx1ZTtcblx0bGV0IHNDb21wdXRlZFZhbHVlID0gc0NvZGVWYWx1ZTtcblx0aWYgKHNUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRpZiAoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvLyB0aGUgdGFyZ2V0IHByb3BlcnR5IGlzIHJlcGxhY2VkIHdpdGggdGhlIHRleHQgYW5ub3RhdGlvbiBwYXRoXG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5zbGljZSgwLCBzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IHNUYWJsZUZpcnN0Q29sUHJvcGVydHkuY29uY2F0KHNUZXh0QW5ub3RhdGlvblBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RleHRBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0c1RleHRWYWx1ZSA9IG9UYWJsZVJvd0NvbnRleHQuZ2V0T2JqZWN0KHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpO1xuXHRcdGlmIChzVGV4dFZhbHVlKSB7XG5cdFx0XHRpZiAoc1RleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHRjb25zdCBzRW51bU51bWJlciA9IHNUZXh0QXJyYW5nZW1lbnQuc2xpY2Uoc1RleHRBcnJhbmdlbWVudC5pbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0XHRzd2l0Y2ggKHNFbnVtTnVtYmVyKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRPbmx5XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IHNUZXh0VmFsdWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dEZpcnN0XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NUZXh0VmFsdWV9ICgke3NDb2RlVmFsdWV9KWA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dExhc3RcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c0NvZGVWYWx1ZX0gKCR7c1RleHRWYWx1ZX0pYDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0U2VwYXJhdGVcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gc0NvZGVWYWx1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c1RleHRWYWx1ZX0gKCR7c0NvZGVWYWx1ZX0pYDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNDb21wdXRlZFZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGNvbHVtbiBpbmZvIGZyb20gdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBvZiB0aGUgbWVzc2FnZSBwb3BvdmVyLlxuICpcbiAqIEBwYXJhbSBvTWVzc2FnZSBNZXNzYWdlIG9iamVjdFxuICogQHBhcmFtIG9UYWJsZSBNZGNUYWJsZVxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29sdW1uIGluZm8uXG4gKi9cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBvQ29sdW1uLmtleS5zcGxpdChcIjo6XCIpLnBvcCgpID09PSBzQ29sTmFtZUZyb21NZXNzYWdlT2JqO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBDb2x1bW5JbmZvVHlwZSB7XG5cdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IHsgc0NvbHVtbkluZGljYXRvcjogXCJcIiwgc0NvbHVtblZhbHVlOiBcIlwiIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNDb250cm9sSWRcbiAqIEByZXR1cm5zIFRydWUgaWYgY29udHJvbCBpcyBwYXJ0IG9mIHRhYmxlLlxuICovXG5mdW5jdGlvbiBpc0NvbnRyb2xJblRhYmxlKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZyk6IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdGlmIChvQ29udHJvbCAmJiAhb0NvbnRyb2wuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpICYmICFvQ29udHJvbC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikpIHtcblx0XHRyZXR1cm4gb1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBvRWxlbS5nZXRJZCgpID09PSBvQ29udHJvbC5nZXRJZCgpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0bGV0IG9QYXJlbnRDb250cm9sID0gb0NvbnRyb2w/LmdldFBhcmVudCgpO1xuXHR3aGlsZSAoXG5cdFx0b1BhcmVudENvbnRyb2wgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLm0uQ29sdW1uTGlzdEl0ZW1cIilcblx0KSB7XG5cdFx0b1BhcmVudENvbnRyb2wgPSBvUGFyZW50Q29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdHJldHVybiAhIW9QYXJlbnRDb250cm9sICYmIG9QYXJlbnRDb250cm9sLmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0c3dpdGNoIChzSGlnaGVzdFByaW9yaXR5KSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIik7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIik7XG5cdFx0Y2FzZSBcIlN1Y2Nlc3NcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfU1VDQ0VTU1wiKTtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpO1xuXHR9XG59XG5mdW5jdGlvbiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk6IHZvaWQge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoZmFsc2UpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXModHJ1ZSwgc1BhdGhUb0JlUmVtb3ZlZCk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsOiBNZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiBNZXNzYWdlW10ge1xuXHRpZiAoc1BhdGhUb0JlUmVtb3ZlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRjb25zdCBsaXN0QmluZGluZyA9IG9NZXNzYWdlTW9kZWwuYmluZExpc3QoXCIvXCIpO1xuXG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuU3RhcnRzV2l0aCxcblx0XHRcdHZhbHVlMTogc1BhdGhUb0JlUmVtb3ZlZFxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRyZXR1cm4gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEdldCByZWxldmFudCBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gYkJvdW5kTWVzc2FnZXMgVG8gZ2V0IG9ubHkgYm91bmQgbWVzc2FnZXNcbiAqIEBwYXJhbSBiVHJhbnNpdGlvbk9ubHkgVG8gZ2V0IG9ubHkgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICogQHBhcmFtIHNQYXRoVG9CZVJlbW92ZWQgRmlsdGVyIG91dCBib3VuZCBtZXNzYWdlcyB3aXRoIHBhdGhcbiAqIEByZXR1cm5zIE1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seSA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISxcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gW107XG5cdGxldCBhTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0uZ2V0UGVyc2lzdGVudCgpKSAmJlxuXHRcdFx0KChiQm91bmRNZXNzYWdlcyAmJiBhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKSB8fFxuXHRcdFx0XHQoIWJCb3VuZE1lc3NhZ2VzICYmICghYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSB8fCBhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdID09PSBcIlwiKSkpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzLnB1c2goYU1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0Q29kZSgpID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKSAhPT0gXCJcIiAmJlxuXHRcdFx0IWFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpLmluY2x1ZGVzKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uc2V0TWVzc2FnZShcblx0XHRcdFx0YFxcbiR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpfSR7YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCl9YFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0Ly9GaWx0ZXJpbmcgbWVzc2FnZXMgYWdhaW4gaGVyZSB0byBhdm9pZCBzaG93aW5nIHB1cmUgdGVjaG5pY2FsIG1lc3NhZ2VzIHJhaXNlZCBieSB0aGUgbW9kZWxcblx0Y29uc3QgYmFja2VuZE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKFxuXHRcdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdFx0KCh0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSBudWxsKSB8fFxuXHRcdFx0XHRcdCh0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0Q29kZSgpXG5cdFx0KSB7XG5cdFx0XHRiYWNrZW5kTWVzc2FnZXMucHVzaChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9PYmplY3RQYWdlTGF5b3V0IFRoZSBvYmplY3RQYWdlTGF5b3V0IG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byByZXRyaWV2ZSB0aGUgdmlzaWJsZSBzZWN0aW9ucy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHZpc2libGUgc2VjdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sIHwgT2JqZWN0UGFnZUxheW91dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRyZXR1cm4gKG9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCkuZmlsdGVyKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRyZXR1cm4gb1NlY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBjb250cm9sIGlkcyBmcm9tIG1lc3NhZ2UgYXJlIGEgcGFydCBvZiBhIGdpdmVuIHN1YnNlY3Rpb24uXG4gKlxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBvTWVzc2FnZU9iamVjdFxuICogQHJldHVybnMgU3ViU2VjdGlvbiBtYXRjaGluZyBjb250cm9sIGlkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24oc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcik6IFVJNUVsZW1lbnRbXSB7XG5cdHJldHVybiBzdWJTZWN0aW9uXG5cdFx0LmZpbmRFbGVtZW50cyh0cnVlLCAob0VsZW0pID0+IHtcblx0XHRcdHJldHVybiBmbkZpbHRlclVwb25JZHMob01lc3NhZ2VPYmplY3QuZ2V0Q29udHJvbElkcygpLCBvRWxlbSk7XG5cdFx0fSlcblx0XHQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0Ly8gY29udHJvbHMgYXJlIHNvcnRlZCBpbiBvcmRlciB0byBoYXZlIHRoZSB0YWJsZSBvbiB0b3Agb2YgdGhlIGFycmF5XG5cdFx0XHQvLyBpdCB3aWxsIGhlbHAgdG8gY29tcHV0ZSB0aGUgc3VidGl0bGUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gdGhlIHR5cGUgb2YgcmVsYXRlZCBjb250cm9sc1xuXHRcdFx0aWYgKGEuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAhYi5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAxO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZUNvbFByb3BlcnR5KG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBzdHJpbmcgfCBSZWdFeHApOiBzdHJpbmcge1xuXHQvL3RoaXMgZnVuY3Rpb24gZXNjYXBlcyBhIHN0cmluZyB0byB1c2UgaXQgYXMgYSByZWdleFxuXHRjb25zdCBmblJlZ0V4cGVzY2FwZSA9IGZ1bmN0aW9uIChzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xuXHR9O1xuXHQvLyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBhdGggb2YgdGhlIG1lc3NhZ2Ugd2UgcmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWUuXG5cdC8vIHRvIGFjaGlldmUgaXQgd2UgcmVtb3ZlIHRoZSBiaW5kaW5nQ29udGV4dCBwYXRoIGFuZCB0aGUgcm93IGJpbmRpbmcgcGF0aCBmcm9tIHRoZSB0YXJnZXRcblx0aWYgKCFvQ29udGV4dFBhdGgpIHtcblx0XHRjb25zdCBjb250ZXh0UGF0aFRvRXNjYXBlID0gYCR7b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHsob1RhYmxlIGFzIE1EQ1RhYmxlKS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0b0NvbnRleHRQYXRoID0gbmV3IFJlZ0V4cChgJHtmblJlZ0V4cGVzY2FwZShjb250ZXh0UGF0aFRvRXNjYXBlKX1cXFxcKC4qXFxcXCkvYCk7XG5cdH1cblx0cmV0dXJuIG9NZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5yZXBsYWNlKG9Db250ZXh0UGF0aCwgXCJcIik7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uIGlmIGl0IG1hdGNoZXMgd2l0aCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIHRhcmdldCBvZiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcbik6IFRhcmdldFRhYmxlSW5mb1R5cGUge1xuXHRjb25zdCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlLCBvTWVzc2FnZU9iamVjdCk7XG5cdGNvbnN0IG9UYWJsZUNvbEluZm8gPSBnZXRUYWJsZUNvbEluZm8ob1RhYmxlLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSk7XG5cdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50Py5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHQ/IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpXG5cdFx0OiAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHRcdH0pXG5cdH07XG5cdHJldHVybiBvVGFyZ2V0VGFibGVJbmZvO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gYUNvbnRyb2xJZHNcbiAqIEBwYXJhbSBvSXRlbVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBtYXRjaGVzIG9uZSBvZiB0aGUgY29udHJvbHNcbiAqL1xuZnVuY3Rpb24gZm5GaWx0ZXJVcG9uSWRzKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGFDb250cm9sSWRzLnNvbWUoZnVuY3Rpb24gKHNDb250cm9sSWQpIHtcblx0XHRpZiAoc0NvbnRyb2xJZCA9PT0gb0l0ZW0uZ2V0SWQoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgZ3JvdXAgbmFtZSBoYXZpbmcgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBzZWN0aW9uXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIGJNdWx0aXBsZVN1YlNlY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFRhYmxlSW5mb1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIEdyb3VwIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUoXG5cdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcbik6IHN0cmluZyB7XG5cdHJldHVybiAoXG5cdFx0c2VjdGlvbi5nZXRUaXRsZSgpICtcblx0XHQoc3ViU2VjdGlvbi5nZXRUaXRsZSgpICYmIGJNdWx0aXBsZVN1YlNlY3Rpb25zID8gYCwgJHtzdWJTZWN0aW9uLmdldFRpdGxlKCl9YCA6IFwiXCIpICtcblx0XHQob1RhcmdldFRhYmxlSW5mbyAmJiBvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyXG5cdFx0XHQ/IGAsICR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyfWBcblx0XHRcdDogXCJcIilcblx0KTtcbn1cblxuZnVuY3Rpb24gYklzT3JwaGFuRWxlbWVudChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pOiBib29sZWFuIHtcblx0cmV0dXJuICFhRWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogZ2V0VGFibGVGaXJzdENvbFZhbHVlLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUE4Q0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsSUFBSUUsWUFBdUIsR0FBRyxFQUFFO0VBQ2hDLElBQUlDLGdCQUEyQixHQUFHLEVBQUU7RUFDcEMsSUFBSUMsaUJBQTZCLEdBQUcsRUFBRTtFQUN0QyxJQUFJQyxPQUFlO0VBQ25CLElBQUlDLFdBQW1CO0VBQ3ZCLElBQUlDLFlBQXlCO0VBd0g3QixTQUFTQyx3QkFBd0IsR0FBVztJQUMzQyxJQUFJQyxrQkFBMEI7O0lBRTlCO0lBQ0EsU0FBU0MsWUFBWSxDQUFDQyxTQUFrRCxFQUFVO01BQ2pGLE9BQU9BLFNBQVMsQ0FBQ0MsUUFBUSxHQUN0QixNQUFNLEdBQ05ELFNBQVMsQ0FBQ0MsUUFBUSxHQUNsQixXQUFXLEdBQ1hELFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQ0MsR0FBRyxDQUFDSixTQUFTLENBQUNDLFFBQVEsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFTCxTQUFTLENBQUNDLFFBQVEsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3BILFNBQVMsR0FDVCxJQUFJLEdBQ0pMLFNBQVMsQ0FBQ0MsUUFBUSxHQUNsQixvQkFBb0IsR0FDcEIsRUFBRTtJQUNOO0lBQ0E7SUFDQSxTQUFTSyxlQUFlLENBQUNOLFNBQWtELEVBQVU7TUFDcEYsSUFBSU8sS0FBSyxHQUFHLEVBQUU7TUFDZCxJQUFJUCxTQUFTLENBQUNRLFNBQVMsSUFBSVIsU0FBUyxDQUFDQyxRQUFRLElBQUlELFNBQVMsQ0FBQ1EsU0FBUyxLQUFLVixrQkFBa0IsRUFBRTtRQUM1RlMsS0FBSyxJQUFJLE1BQU0sR0FBR1AsU0FBUyxDQUFDQyxRQUFRLEdBQUcsZUFBZSxHQUFHRCxTQUFTLENBQUNRLFNBQVMsR0FBRyxrQkFBa0I7UUFDakdWLGtCQUFrQixHQUFHRSxTQUFTLENBQUNRLFNBQVM7TUFDekM7TUFDQSxPQUFPRCxLQUFLO0lBQ2I7O0lBRUE7SUFDQSxTQUFTRSxRQUFRLEdBQThDO01BQzlELE1BQU1DLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO01BQ2hDLE9BQU8sQ0FDTjtRQUFFRixTQUFTLEVBQUUsRUFBRTtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUFTLENBQUMsRUFDNUM7UUFBRUYsU0FBUyxFQUFFLEVBQUU7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBYSxDQUFDLEVBQ2hEO1FBQUVGLFNBQVMsRUFBRSxhQUFhO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQTZDLENBQUMsRUFDM0Y7UUFBRUYsU0FBUyxFQUFFLGFBQWE7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBMkMsQ0FBQyxFQUN6RjtRQUFFRixTQUFTLEVBQUUsYUFBYTtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUFtRCxDQUFDLEVBQ2pHO1FBQUVGLFNBQVMsRUFBRSxhQUFhO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQWdELENBQUMsRUFDOUY7UUFBRUYsU0FBUyxFQUFFLGlCQUFpQjtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUE4QyxDQUFDLEVBQ2hHO1FBQUVGLFNBQVMsRUFBRSxpQkFBaUI7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBMEMsQ0FBQyxFQUM1RjtRQUFFRixTQUFTLEVBQUUsaUJBQWlCO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQWtELENBQUMsRUFDcEc7UUFBRUYsU0FBUyxFQUFFLGlCQUFpQjtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUF1QyxDQUFDLEVBQ3pGO1FBQUVGLFNBQVMsRUFBRSxpQkFBaUI7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBK0IsQ0FBQyxFQUNqRjtRQUFFRixTQUFTLEVBQUUsaUJBQWlCO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQW1DLENBQUMsRUFDckY7UUFBRUYsU0FBUyxFQUFFLFVBQVU7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBYSxDQUFDLEVBQ3hEO1FBQUVGLFNBQVMsRUFBRSxVQUFVO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQWdCLENBQUMsQ0FDM0Q7SUFDRjtJQUVBLElBQUlILEtBQUssR0FBRyxjQUFjLEdBQUcscUJBQXFCLEdBQUcsbURBQW1EO0lBQ3hHRSxRQUFRLEVBQUUsQ0FBQ0UsT0FBTyxDQUFDLFVBQVVYLFNBQWtELEVBQUU7TUFDaEZPLEtBQUssR0FBSSxHQUFFQSxLQUFLLEdBQUdELGVBQWUsQ0FBQ04sU0FBUyxDQUFFLEdBQUVELFlBQVksQ0FBQ0MsU0FBUyxDQUFFLEtBQUk7SUFDN0UsQ0FBQyxDQUFDO0lBQ0YsT0FBT08sS0FBSztFQUNiO0VBQ0EsU0FBU0ssbUJBQW1CLEdBQVc7SUFDdEMsT0FBTyxLQUFLLEdBQUcsb0JBQW9CLEdBQUcscUJBQXFCO0VBQzVEO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsMkJBQTJCLENBQUNDLFNBQXdCLEVBQXVCO0lBQ25GLElBQUlDLGdCQUFnQixHQUFHMUIsV0FBVyxDQUFDMkIsSUFBSTtJQUN2QyxNQUFNQyxPQUFPLEdBQUdILFNBQVMsQ0FBQ0ksTUFBTTtJQUNoQyxNQUFNQyxhQUFhLEdBQUc7TUFBRUMsS0FBSyxFQUFFLENBQUM7TUFBRUMsT0FBTyxFQUFFLENBQUM7TUFBRUMsT0FBTyxFQUFFLENBQUM7TUFBRUMsV0FBVyxFQUFFO0lBQUUsQ0FBQztJQUUxRSxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR1AsT0FBTyxFQUFFTyxDQUFDLEVBQUUsRUFBRTtNQUNqQyxFQUFFTCxhQUFhLENBQUNMLFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUNDLE9BQU8sRUFBRSxDQUErQjtJQUN0RTtJQUNBLElBQUlOLGFBQWEsQ0FBQzlCLFdBQVcsQ0FBQytCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUN6Q0wsZ0JBQWdCLEdBQUcxQixXQUFXLENBQUMrQixLQUFLO0lBQ3JDLENBQUMsTUFBTSxJQUFJRCxhQUFhLENBQUM5QixXQUFXLENBQUNnQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDbEROLGdCQUFnQixHQUFHMUIsV0FBVyxDQUFDZ0MsT0FBTztJQUN2QyxDQUFDLE1BQU0sSUFBSUYsYUFBYSxDQUFDOUIsV0FBVyxDQUFDaUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2xEUCxnQkFBZ0IsR0FBRzFCLFdBQVcsQ0FBQ2lDLE9BQU87SUFDdkMsQ0FBQyxNQUFNLElBQUlILGFBQWEsQ0FBQzlCLFdBQVcsQ0FBQ2tDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUN0RFIsZ0JBQWdCLEdBQUcxQixXQUFXLENBQUNrQyxXQUFXO0lBQzNDO0lBQ0EsT0FBT1IsZ0JBQWdCO0VBQ3hCO0VBQ0E7RUFDQTtFQUNBLFNBQVNXLHdCQUF3QixDQUFDQyxlQUErQixFQUFFQyxrQkFBdUMsRUFBVztJQUNwSCxNQUFNZCxTQUFTLEdBQUdlLFNBQVMsQ0FBQ0MsZUFBZSxFQUFFLENBQUNDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUQsSUFBSUMsaUJBQWlCLEdBQUcsS0FBSztJQUM3QixJQUFJQyxZQUFZLEdBQUcsRUFBRTtJQUNyQm5CLFNBQVMsQ0FBQ0gsT0FBTyxDQUFDLFVBQVV1QixRQUFpQixFQUFFVixDQUFTLEVBQUU7TUFDekQsTUFBTVcsaUJBQWlCLEdBQUdELFFBQVEsQ0FBQ0UsbUJBQW1CLElBQUtGLFFBQVEsQ0FBQ0UsbUJBQW1CLEVBQThCO01BQ3JILElBQUlELGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0UsVUFBVSxLQUFLLEdBQUcsSUFBSUYsaUJBQWlCLENBQUNHLHdCQUF3QixFQUFFO1FBQzVHLElBQUlWLGtCQUFrQixFQUFFO1VBQ3ZCSyxZQUFZLEdBQ1hBLFlBQVksSUFBSU4sZUFBZSxDQUFDWSxPQUFPLENBQUMscUVBQXFFLENBQUM7UUFDaEgsQ0FBQyxNQUFNO1VBQ05OLFlBQVksR0FBR0EsWUFBWSxJQUFJTixlQUFlLENBQUNZLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztRQUN0RztRQUNBVixTQUFTLENBQUNXLGNBQWMsQ0FBQzFCLFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUM7UUFDdENVLFFBQVEsQ0FBQ08sVUFBVSxDQUFDUixZQUFZLENBQUM7UUFDakNDLFFBQVEsQ0FBQ1EsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekJiLFNBQVMsQ0FBQ2MsV0FBVyxDQUFDVCxRQUFRLENBQUM7UUFDL0JGLGlCQUFpQixHQUFHLElBQUk7TUFDekI7SUFDRCxDQUFDLENBQUM7SUFDRixPQUFPQSxpQkFBaUI7RUFDekI7RUFDQTtFQUNBLFNBQVNZLGtCQUFrQixHQUFTO0lBQ25DbEQsT0FBTyxDQUFDbUQsS0FBSyxFQUFFO0lBQ2ZsRCxXQUFXLENBQUNtRCxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQzdCdkQsWUFBWSxHQUFHLEVBQUU7SUFDakIsTUFBTXdELG1CQUFtQixHQUFHbkQsWUFBWSxDQUFDb0QsUUFBUSxFQUEyQjtJQUM1RSxJQUFJRCxtQkFBbUIsRUFBRTtNQUN4QkEsbUJBQW1CLENBQUNFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQztJQUNBQywrQkFBK0IsRUFBRTtFQUNsQztFQUNBLFNBQVNDLG9CQUFvQixDQUFDakIsUUFBaUIsRUFBRWtCLGNBQXdCLEVBQXNCO0lBQzlGLE1BQU1DLElBQUksR0FBRyxJQUFJQyxJQUFJLEVBQUU7SUFDdkIsTUFBTW5CLGlCQUFpQixHQUFHRCxRQUFRLENBQUNFLG1CQUFtQixFQUF5QztJQUMvRixNQUFNVCxlQUFlLEdBQUc0QixPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtJQUNwRSxJQUFJQyxrQkFBa0I7SUFDdEIsSUFBSXRCLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0UsVUFBVSxLQUFLLEdBQUcsSUFBSUYsaUJBQWlCLENBQUN1QixVQUFVLEVBQUU7TUFDOUYsTUFBTUMsV0FBVyxHQUFHeEIsaUJBQWlCLENBQUN1QixVQUFVO01BQ2hELElBQUlFLFdBQVc7TUFDZixJQUFJUCxJQUFJLENBQUNRLFdBQVcsRUFBRSxLQUFLRixXQUFXLENBQUNFLFdBQVcsRUFBRSxFQUFFO1FBQ3JEO1FBQ0FELFdBQVcsR0FBR0UsVUFBVSxDQUFDQyxtQkFBbUIsQ0FBQztVQUM1Q0MsT0FBTyxFQUFFO1FBQ1YsQ0FBQyxDQUFDO1FBQ0ZQLGtCQUFrQixHQUFHOUIsZUFBZSxDQUFDWSxPQUFPLENBQUMsb0NBQW9DLEVBQUUsQ0FBQ3FCLFdBQVcsQ0FBQ0ssTUFBTSxDQUFDTixXQUFXLENBQUMsQ0FBQyxDQUFDO01BQ3RILENBQUMsTUFBTSxJQUFJTixJQUFJLENBQUNRLFdBQVcsRUFBRSxJQUFJRixXQUFXLENBQUNFLFdBQVcsRUFBRSxFQUFFO1FBQzNEO1FBQ0EsSUFBSVQsY0FBYyxFQUFFO1VBQ25CO1VBQ0FLLGtCQUFrQixHQUFJLEdBQUU5QixlQUFlLENBQUNZLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBRSxJQUFHWixlQUFlLENBQUNZLE9BQU8sQ0FDL0csbUNBQW1DLENBQ2xDLEVBQUM7UUFDSixDQUFDLE1BQU0sSUFBSWMsSUFBSSxDQUFDYSxRQUFRLEVBQUUsS0FBS1AsV0FBVyxDQUFDTyxRQUFRLEVBQUUsSUFBSWIsSUFBSSxDQUFDYyxPQUFPLEVBQUUsS0FBS1IsV0FBVyxDQUFDUSxPQUFPLEVBQUUsRUFBRTtVQUNsR1AsV0FBVyxHQUFHRSxVQUFVLENBQUNDLG1CQUFtQixDQUFDO1lBQzVDQyxPQUFPLEVBQUU7VUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ0pQLGtCQUFrQixHQUFHOUIsZUFBZSxDQUFDWSxPQUFPLENBQUMsb0NBQW9DLEVBQUUsQ0FBQ3FCLFdBQVcsQ0FBQ0ssTUFBTSxDQUFDTixXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3RILENBQUMsTUFBTTtVQUNOO1VBQ0FDLFdBQVcsR0FBR0UsVUFBVSxDQUFDQyxtQkFBbUIsQ0FBQztZQUM1Q0MsT0FBTyxFQUFFO1VBQ1YsQ0FBQyxDQUFDO1VBQ0ZQLGtCQUFrQixHQUFHOUIsZUFBZSxDQUFDWSxPQUFPLENBQUMsd0NBQXdDLEVBQUUsQ0FBQ3FCLFdBQVcsQ0FBQ0ssTUFBTSxDQUFDTixXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzFIO01BQ0Q7SUFDRDtJQUVBLElBQUl4QixpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNFLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQ0YsaUJBQWlCLENBQUN1QixVQUFVLEVBQUU7TUFDL0ZELGtCQUFrQixHQUFHOUIsZUFBZSxDQUFDWSxPQUFPLENBQUMsbURBQW1ELENBQUM7SUFDbEc7SUFDQSxPQUFPa0Isa0JBQWtCO0VBQzFCO0VBRUEsU0FBU1csMkJBQTJCLENBQ25DckIsbUJBQThCLEVBQzlCc0IsbUJBQTRCLEVBQzVCQyxRQUFrQixFQUlqQjtJQUNELElBQUlDLGdCQUE2QjtJQUNqQyxJQUFJLENBQUNGLG1CQUFtQixFQUFFO01BQ3pCLE1BQU1HLGtCQUFrQixHQUFHLHVDQUF1QyxHQUFHNUQsbUJBQW1CLEVBQUUsR0FBRyw0QkFBNEI7TUFDekgsTUFBTTZELHVCQUF1QixHQUM1Qiw0Q0FBNEMsR0FBRzVFLHdCQUF3QixFQUFFLEdBQUcsNEJBQTRCO01BQ3pHMEUsZ0JBQWdCLEdBQUcsSUFBSUcsV0FBVyxDQUFDQyxTQUFTLEVBQUU7UUFDN0NDLE9BQU8sRUFBRTtVQUFFQyxJQUFJLEVBQUU7UUFBVSxDQUFDO1FBQzVCQyxLQUFLLEVBQUUsV0FBVztRQUNsQkMsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QkMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQkMsSUFBSSxFQUFFO1VBQUVKLElBQUksRUFBRTtRQUFPLENBQUM7UUFDdEJyRSxTQUFTLEVBQUUsY0FBYztRQUN6QjBFLFdBQVcsRUFBRVYsa0JBQWtCLEdBQUdDLHVCQUF1QjtRQUN6RFUsaUJBQWlCLEVBQUU7TUFDcEIsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUliLFFBQVEsRUFBRTtNQUNwQkMsZ0JBQWdCLEdBQUcsSUFBSUcsV0FBVyxDQUFDQyxTQUFTLEVBQUU7UUFDN0NDLE9BQU8sRUFBRTtVQUFFQyxJQUFJLEVBQUU7UUFBVSxDQUFDO1FBQzVCQyxLQUFLLEVBQUUsV0FBVztRQUNsQkMsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QkMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQkMsSUFBSSxFQUFFO1VBQUVKLElBQUksRUFBRTtRQUFPLENBQUM7UUFDdEJLLFdBQVcsRUFBRSxlQUFlO1FBQzVCQyxpQkFBaUIsRUFBRTtNQUNwQixDQUFDLENBQUM7SUFDSCxDQUFDLE1BQU07TUFDTlosZ0JBQWdCLEdBQUcsSUFBSUcsV0FBVyxDQUFDO1FBQ2xDSSxLQUFLLEVBQUUsV0FBVztRQUNsQkcsSUFBSSxFQUFFO1VBQUVKLElBQUksRUFBRTtRQUFPLENBQUM7UUFDdEJHLFdBQVcsRUFBRTtNQUNkLENBQUMsQ0FBQztJQUNIO0lBQ0FwRixZQUFZLEdBQUcsSUFBSXdGLFdBQVcsQ0FBQztNQUM5QkMscUJBQXFCLEVBQUUsS0FBSztNQUM1QkMsVUFBVSxFQUFFLFlBQWtCO1FBQzdCM0YsV0FBVyxDQUFDbUQsVUFBVSxDQUFDLElBQUksQ0FBQztNQUM3QixDQUFDO01BQ0R5QyxLQUFLLEVBQUU7UUFDTlYsSUFBSSxFQUFFLEdBQUc7UUFDVFcsUUFBUSxFQUFFakIsZ0JBQWdCO1FBQzFCckQsTUFBTSxFQUFFO01BQ1Q7SUFDRCxDQUFDLENBQUM7SUFDRnRCLFlBQVksQ0FBQzZGLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDaEM5RixXQUFXLEdBQ1ZBLFdBQVcsSUFDWCxJQUFJK0YsTUFBTSxDQUFDO01BQ1ZDLElBQUksRUFBRUMsUUFBUSxDQUFDQyxVQUFVLENBQUMsVUFBVSxDQUFDO01BQ3JDQyxPQUFPLEVBQUUsS0FBSztNQUNkQyxLQUFLLEVBQUUsWUFBOEI7UUFDcENuRyxZQUFZLENBQUNvRyxZQUFZLEVBQUU7UUFDM0IsSUFBSSxDQUFDbEQsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUN2QjtJQUNELENBQUMsQ0FBQztJQUNIO0lBQ0FsRCxZQUFZLENBQUNxRyxRQUFRLENBQUNsRCxtQkFBbUIsQ0FBQztJQUMxQyxPQUFPO01BQ05uRCxZQUFZO01BQ1pEO0lBQ0QsQ0FBQztFQUNGO0VBU0EsZUFBZXVHLG1CQUFtQixDQUVqQ0MsZUFBNEMsRUFDNUNDLFFBQXdCLEVBQ3hCQyxvQkFBOEIsRUFDOUJ6RSxrQkFBNEIsRUFDNUIwRSxPQUFpQixFQUNqQkMsV0FBZ0MsRUFDaENDLFlBQXNCLEVBQ3RCQyxtQkFBa0gsRUFDbEhDLFFBQWlCLEVBQ1c7SUFDNUIsSUFBSUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDQyxXQUFXLEVBQUU7SUFDNUMsSUFBSUMsZ0JBQWdCO0lBQ3BCLElBQUlDLG9CQUFvQjtJQUN4QixNQUFNQyxRQUFRLEdBQUcsQ0FBQyxJQUFJQyxNQUFNLENBQUM7TUFBRW5DLElBQUksRUFBRSxZQUFZO01BQUVvQyxRQUFRLEVBQUVDLGNBQWMsQ0FBQ0MsRUFBRTtNQUFFQyxNQUFNLEVBQUU7SUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRyxJQUFJQyxpQkFBc0MsR0FBRyxLQUFLO01BQ2pEQyxjQUFtQyxHQUFHLEtBQUs7SUFFNUMsSUFBSWpCLG9CQUFvQixFQUFFO01BQ3pCTSxtQkFBbUIsR0FBR0EsbUJBQW1CLENBQUNZLE1BQU0sQ0FBQ1gsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN6RTtNQUNBRyxRQUFRLENBQUNTLElBQUksQ0FBQyxJQUFJUixNQUFNLENBQUM7UUFBRW5DLElBQUksRUFBRSxZQUFZO1FBQUVvQyxRQUFRLEVBQUVDLGNBQWMsQ0FBQ08sRUFBRTtRQUFFTCxNQUFNLEVBQUU7TUFBSyxDQUFDLENBQUMsQ0FBQztNQUM1RixNQUFNTSx3QkFBd0IsR0FBRyxVQUFVQyxXQUFxQixFQUFXO1FBQzFFLElBQUlDLEtBQUssR0FBR0MsUUFBUTtVQUNuQkMsUUFBUSxHQUFHQyxVQUFVLENBQUNDLGNBQWMsQ0FBQ0wsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUF5QjtRQUM3RSxNQUFNTSxpQkFBaUIsR0FBR0YsVUFBVSxDQUFDQyxjQUFjLENBQUNMLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBWTtRQUM5RSxPQUFPRyxRQUFRLEVBQUU7VUFDaEIsTUFBTUksaUJBQWlCLEdBQ3RCSixRQUFRLFlBQVlLLE1BQU0sR0FDdEJGLGlCQUFpQixDQUFDRyxTQUFTLEVBQUUsQ0FBYUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDQyxPQUFPLENBQUNMLGlCQUFpQixDQUFDLEdBQ3hGSixRQUFRO1VBQ1osSUFBSUMsUUFBUSxZQUFZSyxNQUFNLEVBQUU7WUFDL0IsSUFBSVAsS0FBSyxHQUFHTSxpQkFBaUIsRUFBRTtjQUM5Qk4sS0FBSyxHQUFHTSxpQkFBaUI7Y0FDekI7Y0FDQUQsaUJBQWlCLENBQUNNLEtBQUssRUFBRTtZQUMxQjtZQUNBO1lBQ0EsT0FBTyxLQUFLO1VBQ2I7VUFDQVQsUUFBUSxHQUFHQSxRQUFRLENBQUNNLFNBQVMsRUFBRTtRQUNoQztRQUNBLE9BQU8sSUFBSTtNQUNaLENBQUM7TUFDRHJCLFFBQVEsQ0FBQ1MsSUFBSSxDQUNaLElBQUlSLE1BQU0sQ0FBQztRQUNWbkMsSUFBSSxFQUFFLFlBQVk7UUFDbEIyRCxJQUFJLEVBQUVkLHdCQUF3QjtRQUM5QmUsYUFBYSxFQUFFO01BQ2hCLENBQUMsQ0FBQyxDQUNGO0lBQ0YsQ0FBQyxNQUFNO01BQ047TUFDQTFCLFFBQVEsQ0FBQ1MsSUFBSSxDQUFDLElBQUlSLE1BQU0sQ0FBQztRQUFFbkMsSUFBSSxFQUFFLFFBQVE7UUFBRW9DLFFBQVEsRUFBRUMsY0FBYyxDQUFDTyxFQUFFO1FBQUVMLE1BQU0sRUFBRTtNQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGO0lBQ0EsSUFBSWpCLGVBQWUsSUFBSUEsZUFBZSxDQUFDakYsTUFBTSxFQUFFO01BQzlDaUYsZUFBZSxDQUFDeEYsT0FBTyxDQUFDLFVBQVV1QixRQUF1QixFQUFFO1FBQzFELE1BQU13RyxXQUFXLEdBQUd4RyxRQUFRLENBQUN5RyxJQUFJLEdBQUd6RyxRQUFRLENBQUN5RyxJQUFJLEdBQUcsRUFBRTtRQUN0RDlHLFNBQVMsQ0FBQ2MsV0FBVyxDQUNwQixJQUFJaUcsT0FBTyxDQUFDO1VBQ1hDLE9BQU8sRUFBRTNHLFFBQVEsQ0FBQzRHLElBQUk7VUFDdEI3RCxJQUFJLEVBQUUvQyxRQUFRLENBQUMrQyxJQUFJO1VBQ25COEQsTUFBTSxFQUFFLEVBQUU7VUFDVkMsVUFBVSxFQUFFLElBQUk7VUFDaEJMLElBQUksRUFBRUQ7UUFDUCxDQUFDLENBQUMsQ0FDRjtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7O0lBQ0EsTUFBTTNGLG1CQUFtQixHQUFJbkQsWUFBWSxJQUFLQSxZQUFZLENBQUNvRCxRQUFRLEVBQWdCLElBQUssSUFBSWlHLFNBQVMsRUFBRTtJQUN2RyxNQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQzVGLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQUc1QixrQkFBa0IsQ0FBQztJQUVySCxJQUFJK0UsbUJBQW1CLENBQUN6RixNQUFNLEtBQUssQ0FBQyxJQUFJeUYsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUN5QyxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUU7TUFDbkY5QixjQUFjLEdBQUcsSUFBSTtJQUN0QixDQUFDLE1BQU0sSUFBSVgsbUJBQW1CLENBQUN6RixNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzVDbUcsaUJBQWlCLEdBQUcsSUFBSTtJQUN6QjtJQUNBLElBQUlnQyxxQkFBNEM7SUFDaEQsSUFBSUMsZUFBb0MsR0FBRyxFQUFFO0lBQzdDLElBQUlqQyxpQkFBaUIsSUFBSyxDQUFDQyxjQUFjLElBQUksQ0FBQ2IsbUJBQW9CLEVBQUU7TUFDbkUsTUFBTThDLFlBQVksR0FBRzFILFNBQVMsQ0FBQ0MsZUFBZSxFQUFFLENBQUMwSCxRQUFRLENBQUMsR0FBRyxFQUFFN0UsU0FBUyxFQUFFQSxTQUFTLEVBQUVvQyxRQUFRLENBQUM7UUFDN0YwQyxnQkFBZ0IsR0FBR0YsWUFBWSxDQUFDRyxrQkFBa0IsRUFBRTtNQUNyRCxJQUFJRCxnQkFBZ0IsSUFBSUEsZ0JBQWdCLENBQUN2SSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3BEbUcsaUJBQWlCLEdBQUcsSUFBSTtRQUN4Qjs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU12RyxTQUFvQixHQUFHLEVBQUU7UUFDL0IySSxnQkFBZ0IsQ0FBQzlJLE9BQU8sQ0FBQyxVQUFVZ0osY0FBdUIsRUFBRTtVQUMzRCxNQUFNekgsUUFBUSxHQUFHeUgsY0FBYyxDQUFDNUgsU0FBUyxFQUFFO1VBQzNDakIsU0FBUyxDQUFDMEcsSUFBSSxDQUFDdEYsUUFBUSxDQUFDO1VBQ3hCMUMsZ0JBQWdCLEdBQUdzQixTQUFTO1FBQzdCLENBQUMsQ0FBQztRQUNGLElBQUk4SSxnQkFBMkIsR0FBRyxFQUFFO1FBQ3BDLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDL0csbUJBQW1CLENBQUNnSCxPQUFPLEVBQUUsQ0FBQyxFQUFFO1VBQ2pESCxnQkFBZ0IsR0FBRzdHLG1CQUFtQixDQUFDZ0gsT0FBTyxFQUFFO1FBQ2pEO1FBQ0EsTUFBTUMsVUFBbUMsR0FBRyxDQUFDLENBQUM7UUFFOUNWLGVBQWUsR0FBRzlKLGdCQUFnQixDQUFDK0gsTUFBTSxDQUFDcUMsZ0JBQWdCLENBQUMsQ0FBQ0ssTUFBTSxDQUFDLFVBQVVDLEdBQVksRUFBRTtVQUMxRjtVQUNBLE9BQU8sQ0FBQ0YsVUFBVSxDQUFDRSxHQUFHLENBQUNDLEtBQUssRUFBRSxDQUFDLEtBQUtILFVBQVUsQ0FBQ0UsR0FBRyxDQUFDQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFDRnBILG1CQUFtQixDQUFDRSxPQUFPLENBQUNxRyxlQUFlLENBQUM7TUFDN0M7SUFDRDtJQUNBLElBQUk3QyxtQkFBbUIsRUFBRTtNQUN4QjRDLHFCQUFxQixHQUFHO1FBQUUvQixjQUFjO1FBQUVEO01BQWtCLENBQUM7TUFDN0RnQyxxQkFBcUIsR0FBRzVDLG1CQUFtQixDQUFDRSxtQkFBbUIsRUFBRTBDLHFCQUFxQixDQUFDO01BQ3ZGL0IsY0FBYyxHQUFHK0IscUJBQXFCLENBQUMvQixjQUFjO01BQ3JERCxpQkFBaUIsR0FBR2dDLHFCQUFxQixDQUFDaEMsaUJBQWlCO01BQzNELElBQUlBLGlCQUFpQixJQUFJZ0MscUJBQXFCLENBQUNlLHdCQUF3QixFQUFFO1FBQ3hFZCxlQUFlLEdBQUdELHFCQUFxQixDQUFDZ0IsZ0JBQWdCLEdBQUdoQixxQkFBcUIsQ0FBQ2dCLGdCQUFnQixHQUFHZixlQUFlO01BQ3BIO0lBQ0Q7SUFDQSxJQUFJM0MsbUJBQW1CLENBQUN6RixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUNpRixlQUFlLElBQUksQ0FBQytDLGVBQWUsRUFBRTtNQUM3RTtNQUNBLE9BQU9vQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQyxNQUFNLElBQUk1RCxtQkFBbUIsQ0FBQ3pGLE1BQU0sS0FBSyxDQUFDLElBQUl5RixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xGLE9BQU8sRUFBRSxLQUFLcEMsV0FBVyxDQUFDaUMsT0FBTyxJQUFJLENBQUM2RSxlQUFlLEVBQUU7TUFDNUgsT0FBTyxJQUFJbUUsT0FBTyxDQUFXQyxPQUFPLElBQUs7UUFDeENDLFlBQVksQ0FBQ0MsSUFBSSxDQUFDOUQsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMrRCxVQUFVLEVBQUUsQ0FBQztRQUN0RCxJQUFJM0gsbUJBQW1CLEVBQUU7VUFDeEJBLG1CQUFtQixDQUFDRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEM7UUFDQXBCLFNBQVMsQ0FBQ1csY0FBYyxDQUFDbUUsbUJBQW1CLENBQUM7UUFDN0M0RCxPQUFPLENBQUMsSUFBSSxDQUFDO01BQ2QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUlsRCxpQkFBaUIsSUFBSWlDLGVBQWUsQ0FBQ3BJLE1BQU0sRUFBRTtNQUN2RHlKLGVBQWUsQ0FBQ0MsNEJBQTRCLENBQUN0QixlQUFlLEVBQUVoRCxPQUFPLEVBQUVDLFdBQVcsRUFBRUcsUUFBUSxDQUFDO01BQzdGM0QsbUJBQW1CLENBQUNFLE9BQU8sQ0FBQ3FHLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDOUM3SixpQkFBaUIsR0FBR0EsaUJBQWlCLElBQUksRUFBRTtNQUMzQyxPQUFPLElBQUk2SyxPQUFPLENBQVMsVUFBVUMsT0FBZ0MsRUFBRTtRQUN0RTlLLGlCQUFpQixDQUFDK0gsSUFBSSxDQUFDK0MsT0FBTyxDQUFDO1FBQy9CLE1BQU01SSxlQUFlLEdBQUc0QixPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtRQUNwRSxNQUFNYSxtQkFBbUIsR0FBRyxLQUFLO1FBQ2pDLElBQUlnRixxQkFBcUIsSUFBSUEscUJBQXFCLENBQUN3QixvQkFBb0IsRUFBRTtVQUN4RTlILG1CQUFtQixDQUFDZ0gsT0FBTyxFQUFFLENBQUNwSixPQUFPLENBQUMsVUFBVXVCLFFBQWlCLEVBQUU7WUFDbEVtSCxxQkFBcUIsQ0FBQ3dCLG9CQUFvQixDQUFFM0ksUUFBUSxDQUFDO1VBQ3RELENBQUMsQ0FBQztRQUNIO1FBRUEsTUFBTTRJLGNBQWMsR0FBRzFHLDJCQUEyQixDQUFDckIsbUJBQW1CLEVBQUVzQixtQkFBbUIsQ0FBQztRQUM1RixNQUFNMEcsT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxFQUFFLEVBQUVyRyxTQUFTLEVBQUVBLFNBQVMsRUFBRSxDQUFDc0csSUFBYSxFQUFFQyxJQUFhLEtBQUs7VUFDdEYsTUFBTUMsS0FBSyxHQUFHQyxjQUFjLENBQUNILElBQUksQ0FBQztVQUNsQyxNQUFNSSxLQUFLLEdBQUdELGNBQWMsQ0FBQ0YsSUFBSSxDQUFDO1VBRWxDLElBQUlDLEtBQUssR0FBR0UsS0FBSyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxDQUFDO1VBQ1Y7VUFDQSxJQUFJRixLQUFLLEdBQUdFLEtBQUssRUFBRTtZQUNsQixPQUFPLENBQUM7VUFDVDtVQUNBLE9BQU8sQ0FBQztRQUNULENBQUMsQ0FBQztRQUVEUCxjQUFjLENBQUNsTCxZQUFZLENBQUMwTCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQXNCQyxJQUFJLENBQUNSLE9BQU8sQ0FBQztRQUVuRnJMLE9BQU8sR0FDTkEsT0FBTyxJQUFJQSxPQUFPLENBQUM4TCxNQUFNLEVBQUUsR0FDeEI5TCxPQUFPLEdBQ1AsSUFBSXlJLE1BQU0sQ0FBQztVQUNYc0QsU0FBUyxFQUFFLElBQUk7VUFDZkMsU0FBUyxFQUFFLElBQUloRyxNQUFNLENBQUM7WUFDckJLLEtBQUssRUFBRSxZQUFrQjtjQUN4Qm5ELGtCQUFrQixFQUFFO2NBQ3BCO2NBQ0FmLFNBQVMsQ0FBQ1csY0FBYyxDQUFDOEcsZUFBZSxDQUFDO1lBQzFDLENBQUM7WUFDRFIsSUFBSSxFQUFFbkgsZUFBZSxDQUFDWSxPQUFPLENBQUMsc0JBQXNCO1VBQ3JELENBQUMsQ0FBQztVQUNGb0osWUFBWSxFQUFFLElBQUlDLEdBQUcsQ0FBQztZQUNyQkMsYUFBYSxFQUFFLENBQ2QsSUFBSUMsSUFBSSxDQUFDO2NBQ1JoRCxJQUFJLEVBQUVuSCxlQUFlLENBQUNZLE9BQU8sQ0FBQyxvREFBb0Q7WUFDbkYsQ0FBQyxDQUFDLENBQ0Y7WUFDRHdKLFdBQVcsRUFBRSxDQUFDcE0sV0FBVztVQUMxQixDQUFDLENBQUM7VUFDRnFNLFlBQVksRUFBRSxRQUFRO1VBQ3RCQyxhQUFhLEVBQUUsUUFBUTtVQUN2QkMsaUJBQWlCLEVBQUUsS0FBSztVQUN4QkMsaUJBQWlCLEVBQUUsS0FBSztVQUN4QkMsVUFBVSxFQUFFLFlBQWtCO1lBQzdCLEtBQUssTUFBTUMsSUFBSSxJQUFJNU0saUJBQWlCLEVBQUU7Y0FDckM0TSxJQUFJLEVBQUU7WUFDUDtZQUNBNU0saUJBQWlCLEdBQUcsRUFBRTtVQUN2QjtRQUNBLENBQUMsQ0FBQztRQUNOQyxPQUFPLENBQUM0TSxnQkFBZ0IsRUFBRTtRQUMxQjVNLE9BQU8sQ0FBQzZNLFVBQVUsQ0FBQ3pCLGNBQWMsQ0FBQ2xMLFlBQVksQ0FBQztRQUUvQyxJQUFJc0osZUFBZSxFQUFFO1VBQ3BCc0QsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsVUFBVUMsY0FBaUMsRUFBRTtZQUNqRmpOLE9BQU8sQ0FBQ2tOLGNBQWMsQ0FDckIsSUFBSWxILE1BQU0sQ0FBQztjQUNWSyxLQUFLLEVBQUUsWUFBa0I7Z0JBQ3hCbkQsa0JBQWtCLEVBQUU7Z0JBQ3BCLElBQUl3RCxRQUFRLENBQUN5RyxpQkFBaUIsRUFBRSxFQUFFO2tCQUNqQ3pHLFFBQVEsQ0FBQ2tGLFVBQVUsRUFBRSxDQUFDd0IsWUFBWSxFQUFFO2dCQUNyQztnQkFDQTFHLFFBQVEsQ0FBQzJHLE9BQU8sRUFBRTtjQUNuQixDQUFDO2NBQ0RqRSxJQUFJLEVBQUVuSCxlQUFlLENBQUNZLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztjQUN2RDBDLElBQUksRUFBRTBILGNBQWMsQ0FBQ0s7WUFDdEIsQ0FBQyxDQUFDLENBQ0Y7VUFDRixDQUFDLENBQUM7UUFDSCxDQUFDLE1BQU07VUFDTnROLE9BQU8sQ0FBQ3VOLGtCQUFrQixFQUFFO1FBQzdCO1FBQ0FwRyxnQkFBZ0IsR0FBR2hHLDJCQUEyQixDQUFDakIsWUFBWSxDQUFDc04sUUFBUSxFQUFFLENBQUM7UUFDdkVwRyxvQkFBb0IsR0FBR3FHLGlDQUFpQyxDQUFDdEcsZ0JBQWdCLENBQUM7UUFDMUVuSCxPQUFPLENBQUMwTixRQUFRLENBQUN2RyxnQkFBZ0IsQ0FBQztRQUNoQ25ILE9BQU8sQ0FBQzJOLGVBQWUsRUFBRSxDQUFTQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFVQyxPQUFPLENBQUN6RyxvQkFBb0IsQ0FBQztRQUNoR2xILFlBQVksQ0FBQ29HLFlBQVksRUFBRTtRQUMzQnRHLE9BQU8sQ0FBQzhOLElBQUksRUFBRTtRQUNkLElBQUloSCxZQUFZLEtBQUssSUFBSSxFQUFFO1VBQzFCK0QsT0FBTyxDQUFDN0ssT0FBTyxDQUFDO1FBQ2pCO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUk0SCxjQUFjLEVBQUU7TUFDMUIsT0FBTyxJQUFJZ0QsT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtRQUFBO1FBQ3JDLE1BQU1ySSxRQUFRLEdBQUd5RSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTThHLHVCQUF1QixHQUFHdkwsUUFBUSxDQUFDRSxtQkFBbUIsRUFBeUM7UUFDckcsSUFDRXFMLHVCQUF1QixJQUFJLENBQUNsTyxZQUFZLENBQUNtTyxRQUFRLDBCQUFDRCx1QkFBdUIsQ0FBQ0UsZUFBZSwwREFBdkMsc0JBQXlDOUUsT0FBTyxDQUFDLElBQ25HUSxxQkFBcUIsSUFBSUEscUJBQXFCLENBQUNlLHdCQUF5QixFQUN4RTtVQUNELElBQUlxRCx1QkFBdUIsS0FBSyxDQUFDcEUscUJBQXFCLElBQUksQ0FBQ0EscUJBQXFCLENBQUNlLHdCQUF3QixDQUFDLEVBQUU7WUFBQTtZQUMzRzdLLFlBQVksQ0FBQ2lJLElBQUksMkJBQUNpRyx1QkFBdUIsQ0FBQ0UsZUFBZSwyREFBdkMsdUJBQXlDOUUsT0FBTyxDQUFDO1VBQ3BFO1VBQ0EsSUFBSStFLG1CQUFtQixHQUFHLGNBQWM7VUFDeEMsTUFBTUMsaUJBQWlCLEdBQUcxSyxvQkFBb0IsQ0FBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUM7VUFDOUQsSUFBSTJMLGlCQUFpQixFQUFFO1lBQ3RCRCxtQkFBbUIsR0FBSSxPQUFNQyxpQkFBa0IsV0FBVTtVQUMxRDtVQUNBLElBQUl4RSxxQkFBcUIsSUFBSUEscUJBQXFCLENBQUN3QixvQkFBb0IsRUFBRTtZQUN4RXhCLHFCQUFxQixDQUFDd0Isb0JBQW9CLENBQUMzSSxRQUFRLENBQUM7VUFDckQ7VUFDQSxJQUFJQSxRQUFRLENBQUNrSCxPQUFPLEVBQUUsS0FBSyxLQUFLLElBQUlsSCxRQUFRLENBQUM0TCxpQkFBaUIsRUFBRSxLQUFLbkosU0FBUyxFQUFFO1lBQy9FaUosbUJBQW1CLEdBQUksR0FBRUEsbUJBQW1CLEdBQUcxTCxRQUFRLENBQUM0TCxpQkFBaUIsRUFBRyxLQUFJNUwsUUFBUSxDQUFDd0ksVUFBVSxFQUFHLGdCQUFlO1VBQ3RILENBQUMsTUFBTTtZQUNOa0QsbUJBQW1CLEdBQUksR0FBRUEsbUJBQW1CLEdBQUcxTCxRQUFRLENBQUN3SSxVQUFVLEVBQUcsZ0JBQWU7VUFDckY7VUFDQSxNQUFNcUQsYUFBYSxHQUFHLElBQUlDLGFBQWEsQ0FBQztZQUN2Q0MsUUFBUSxFQUFFTDtVQUNYLENBQUMsQ0FBQztVQUNGTSxVQUFVLENBQUNDLEtBQUssQ0FBQ0osYUFBYSxFQUF1QjtZQUNwREssT0FBTyxFQUFFLFlBQVk7Y0FDcEI3TyxZQUFZLEdBQUcsRUFBRTtjQUNqQixJQUFJOEcsb0JBQW9CLEVBQUU7Z0JBQ3pCZ0ksNkJBQTZCLEVBQUU7Y0FDaEM7Y0FDQW5MLCtCQUErQixFQUFFO2NBQ2pDcUgsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNkO1VBQ0QsQ0FBQyxDQUFDO1FBQ0g7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDLE1BQU07TUFDTixPQUFPRCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0I7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0ssNEJBQTRCLENBQ3BDdEIsZUFBb0MsRUFDcENoRCxPQUE0QixFQUM1QkMsV0FBK0IsRUFDL0JHLFFBQTRCLEVBQ3JCO0lBQ1A0QyxlQUFlLENBQUMzSSxPQUFPLENBQUUyTixVQUE2QixJQUFLO01BQUE7TUFDMURBLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO01BQzdCLElBQUksd0JBQUNBLFVBQVUsQ0FBQ3ZGLE1BQU0sK0NBQWpCLG1CQUFtQjdILE1BQU0sS0FBSSx3QkFBQW9OLFVBQVUsQ0FBQ2xGLE9BQU8sd0RBQWxCLHlCQUFBa0YsVUFBVSxDQUFZLE1BQUssd0NBQXdDLEVBQUU7UUFDdEc7UUFDQSxNQUFNQyxnQkFBZ0IsR0FBR2hMLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUVqQixPQUFPLENBQUMsOENBQThDLENBQUM7UUFDN0grTCxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUdDLGdCQUFnQjtNQUM1QyxDQUFDLE1BQU0sMkJBQUlELFVBQVUsQ0FBQ3ZGLE1BQU0sZ0RBQWpCLG9CQUFtQjdILE1BQU0sRUFBRTtRQUNyQztRQUNBLElBQUl3RixRQUFRLEtBQUssWUFBWSxJQUFJSixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFa0ksR0FBRyxDQUFXLGtCQUFrQixDQUFDLEVBQUU7VUFDNUU3RCxlQUFlLENBQUM4RCxtQkFBbUIsQ0FBQ25JLE9BQU8sRUFBRWdJLFVBQVUsRUFBRS9ILFdBQVcsQ0FBQztRQUN0RSxDQUFDLE1BQU0sSUFBSUcsUUFBUSxLQUFLLFlBQVksRUFBRTtVQUNyQztVQUNBaUUsZUFBZSxDQUFDK0QseUJBQXlCLENBQUNKLFVBQVUsRUFBRS9ILFdBQVcsRUFBRUQsT0FBTyxDQUFTO1FBQ3BGLENBQUMsTUFBTTtVQUNOZ0ksVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHM0QsZUFBZSxDQUFDZ0UsOEJBQThCLENBQUNwSSxXQUFXLENBQUM7UUFDdkY7TUFDRDtJQUNELENBQUMsQ0FBQztFQUNIOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2tJLG1CQUFtQixDQUFDRyxLQUEwQixFQUFFTixVQUE2QixFQUFFL0gsV0FBK0IsRUFBUTtJQUM5SCxNQUFNc0ksV0FBVyxHQUFHRCxLQUFLLElBQUtBLEtBQUssQ0FBY0UsYUFBYSxFQUFFO0lBQ2hFLElBQUlELFdBQVcsRUFBRTtNQUFBO01BQ2hCLE1BQU1FLGlCQUFpQixHQUFJLEdBQUdILEtBQUssQ0FBY0UsYUFBYSxFQUFFLENBQUNFLE9BQU8sRUFBRyxFQUFDO01BQzVFLElBQUksd0JBQUFWLFVBQVUsQ0FBQ3ZGLE1BQU0sd0RBQWpCLG9CQUFtQlQsT0FBTyxDQUFDeUcsaUJBQWlCLENBQUMsTUFBSyxDQUFDLEVBQUU7UUFDeEQsTUFBTUUsY0FBYyxHQUFHSixXQUFXLENBQUNuRixrQkFBa0IsRUFBRTtRQUN2RHVGLGNBQWMsQ0FBQ3RPLE9BQU8sQ0FBRXVPLFVBQW1CLElBQUs7VUFBQTtVQUMvQywyQkFBSVosVUFBVSxDQUFDdkYsTUFBTSxnREFBakIsb0JBQW1CMkUsUUFBUSxDQUFDd0IsVUFBVSxDQUFDRixPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3RELE1BQU1HLFdBQVcsR0FBSSxHQUFFRCxVQUFVLENBQUNGLE9BQU8sRUFBRyxHQUFFO1lBQzlDLE1BQU1JLGdCQUFnQixHQUFJUixLQUFLLENBQUN4RyxTQUFTLEVBQUUsQ0FBY2lILG1CQUFtQixFQUFZO1lBQ3hGLE1BQU1DLGFBQWEsR0FBR0YsZ0JBQWdCLElBQUlGLFVBQVUsQ0FBQ25OLFNBQVMsRUFBRSxDQUFDcU4sZ0JBQWdCLENBQUM7WUFDbEYsTUFBTUcsa0JBQWtCLEdBQUc1RSxlQUFlLENBQUM2RSxtQkFBbUIsQ0FBQ1osS0FBSyxFQUFFTixVQUFVLEVBQUVhLFdBQVcsQ0FBQztZQUM5RixNQUFNO2NBQUVNO1lBQW9CLENBQUMsR0FBRzlFLGVBQWUsQ0FBQytFLGVBQWUsQ0FBQ2QsS0FBSyxFQUFjVyxrQkFBa0IsQ0FBQzs7WUFFdEc7WUFDQSxJQUFJQSxrQkFBa0IsSUFBSUUsbUJBQW1CLEVBQUU7Y0FDOUM7Y0FDQW5CLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBR2dCLGFBQWEsR0FBSSxJQUFHQSxhQUFjLEVBQUMsR0FBSVYsS0FBSyxDQUFjZSxTQUFTLEVBQUU7WUFDakcsQ0FBQyxNQUFNO2NBQ047Y0FDQXJCLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRzNELGVBQWUsQ0FBQ2dFLDhCQUE4QixDQUFDcEksV0FBVyxDQUFDO1lBQ3ZGO1VBQ0Q7UUFDRCxDQUFDLENBQUM7TUFDSDtJQUNEO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTbUkseUJBQXlCLENBQUNKLFVBQTZCLEVBQUUvSCxXQUErQixFQUFFRCxPQUFhLEVBQVE7SUFDdkgsTUFBTXNKLFlBQVksR0FBR3RKLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFdUosaUJBQWlCLEVBQUU7SUFDakQsTUFBTUMsUUFBaUIsR0FBRyxDQUFBeEosT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV5SixVQUFVLE1BQUl6SixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXlKLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFJQyxtQkFBbUIsR0FBRyxJQUFJO0lBQzlCLElBQUlGLFFBQVEsRUFBRTtNQUNibkYsZUFBZSxDQUFDc0Ysc0NBQXNDLENBQUNILFFBQVEsQ0FBQyxDQUFDblAsT0FBTyxDQUFDLFVBQVV1UCxRQUEyQixFQUFFO1FBQy9HLE1BQU1DLFdBQVcsR0FBR0QsUUFBUSxDQUFDRSxjQUFjLEVBQUU7UUFDN0NELFdBQVcsQ0FBQ3hQLE9BQU8sQ0FBQyxVQUFVMFAsV0FBaUMsRUFBRTtVQUNoRUEsV0FBVyxDQUFDaEksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDMUgsT0FBTyxDQUFDLFVBQVVpTyxLQUFLLEVBQUU7WUFDdkQsSUFBSUEsS0FBSyxDQUFDSixHQUFHLENBQVcsa0JBQWtCLENBQUMsRUFBRTtjQUM1QyxNQUFNSyxXQUFXLEdBQUdELEtBQUssQ0FBQ0UsYUFBYSxFQUFFO2dCQUN4Q3dCLHFCQUFxQixHQUFHLElBQUk7Y0FDN0IsSUFBSUMsaUJBQXlDO2NBRTdDM0IsS0FBSyxDQUFDdkcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDMUgsT0FBTyxDQUFFNlAsUUFBUSxJQUFLO2dCQUM5QyxJQUFJQSxRQUFRLENBQUNoQyxHQUFHLENBQVEsYUFBYSxDQUFDLElBQUlnQyxRQUFRLENBQUNoQyxHQUFHLENBQVUsb0JBQW9CLENBQUMsRUFBRTtrQkFDdEYrQixpQkFBaUIsR0FBR0MsUUFBUTtnQkFDN0I7Y0FDRCxDQUFDLENBQUM7Y0FDRixJQUFJM0IsV0FBVyxFQUFFO2dCQUFBO2dCQUNoQixNQUFNRSxpQkFBaUIsR0FBSSxHQUFFYSxZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRVosT0FBTyxFQUFHLElBQUMsd0JBQUVKLEtBQUssQ0FBQ0UsYUFBYSxFQUFFLHlEQUFyQixxQkFBdUJFLE9BQU8sRUFBRyxFQUFDO2dCQUMxRixJQUFJLHdCQUFBVixVQUFVLENBQUN2RixNQUFNLHdEQUFqQixvQkFBbUJULE9BQU8sQ0FBQ3lHLGlCQUFpQixDQUFDLE1BQUssQ0FBQyxFQUFFO2tCQUN4RCxNQUFNN0UsR0FBRyxHQUFHUyxlQUFlLENBQUM4RiwrQkFBK0IsQ0FDMURuQyxVQUFVLEVBQ1ZNLEtBQUssRUFDTDJCLGlCQUFpQixFQUNqQjFCLFdBQVcsRUFDWHRJLFdBQVcsRUFDWCtKLHFCQUFxQixFQUNyQkksc0JBQXNCLENBQ3RCO2tCQUNELE1BQU07b0JBQUVDO2tCQUFpQixDQUFDLEdBQUd6RyxHQUFHO2tCQUVoQyxJQUFJb0cscUJBQXFCLEVBQUU7b0JBQzFCLE1BQU1sQixnQkFBZ0IsR0FBSVIsS0FBSyxDQUFDeEcsU0FBUyxFQUFFLENBQWNpSCxtQkFBbUIsRUFBWTtvQkFDeEYsSUFBSUQsZ0JBQWdCLEVBQUU7c0JBQ3JCLE1BQU1ILGNBQWMsR0FBR0wsS0FBSyxDQUFDRSxhQUFhLEVBQUUsQ0FBQzhCLFdBQVcsRUFBRTtzQkFDMUQzQixjQUFjLENBQUN0TyxPQUFPLENBQUV1TyxVQUFtQixJQUFLO3dCQUFBO3dCQUMvQywyQkFBSVosVUFBVSxDQUFDdkYsTUFBTSxnREFBakIsb0JBQW1CMkUsUUFBUSxDQUFDd0IsVUFBVSxDQUFDRixPQUFPLEVBQUUsQ0FBQyxFQUFFOzBCQUN0RCxNQUFNTSxhQUFhLEdBQUdGLGdCQUFnQixHQUNuQ0YsVUFBVSxDQUFDbk4sU0FBUyxFQUFFLENBQUNxTixnQkFBZ0IsQ0FBQyxHQUN4Q3pLLFNBQVM7MEJBQ1oySixVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBSSxHQUFFZ0IsYUFBYyxLQUFJcUIsZ0JBQWdCLENBQUNsQixtQkFBb0IsRUFBQzt3QkFDM0Y7c0JBQ0QsQ0FBQyxDQUFDO29CQUNILENBQUMsTUFBTTtzQkFDTm5CLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFJLEdBQUVxQyxnQkFBZ0IsQ0FBQ2xCLG1CQUFvQixFQUFDO29CQUN6RTtvQkFFQSxJQUFJb0IsVUFBVSxHQUFHakMsS0FBSyxDQUFDa0MsZ0JBQWdCLEVBQUUsSUFBSUgsZ0JBQWdCLENBQUNJLFdBQVc7b0JBQ3pFLElBQUksQ0FBQ0YsVUFBVSxFQUFFO3NCQUNoQkEsVUFBVSxHQUFHUixXQUFXLENBQUNXLFFBQVEsRUFBRTtvQkFDcEMsQ0FBQyxNQUFNO3NCQUNOLE1BQU1yUCxlQUFlLEdBQUc0QixPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtzQkFDcEVxTixVQUFVLEdBQUksR0FBRWxQLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLHlDQUF5QyxDQUFFLEtBQUlzTyxVQUFXLEVBQUM7b0JBQ3BHO29CQUNBdkMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHdUMsVUFBVTtvQkFDckNiLG1CQUFtQixHQUFHLEtBQUs7a0JBQzVCO2dCQUNEO2NBQ0Q7WUFDRDtVQUNELENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQztNQUNILENBQUMsQ0FBQztJQUNIO0lBRUEsSUFBSUEsbUJBQW1CLEVBQUU7TUFBQTtNQUN4QixNQUFNakIsaUJBQWlCLEdBQUksR0FBRWEsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVaLE9BQU8sRUFBRyxFQUFDO01BQ3RELElBQUksd0JBQUFWLFVBQVUsQ0FBQ3ZGLE1BQU0sd0RBQWpCLG9CQUFtQlQsT0FBTyxDQUFDeUcsaUJBQWlCLENBQUMsTUFBSyxDQUFDLEVBQUU7UUFDeEQ7UUFDQVQsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHM0QsZUFBZSxDQUFDZ0UsOEJBQThCLENBQUNwSSxXQUFXLENBQUM7TUFDdkYsQ0FBQyxNQUFNO1FBQ04rSCxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcvSyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFFakIsT0FBTyxDQUFDLDhDQUE4QyxDQUFDO01BQ2hJO0lBQ0Q7RUFDRDtFQUVBLFNBQVNvTSw4QkFBOEIsQ0FBQ3BJLFdBQStCLEVBQVU7SUFDaEYsTUFBTTBLLGVBQWUsR0FBRzFOLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUVqQixPQUFPLENBQUMsa0RBQWtELENBQUM7SUFDaEksT0FBT2dFLFdBQVcsR0FBSSxHQUFFMEssZUFBZ0IsS0FBSTFLLFdBQVksRUFBQyxHQUFHLEVBQUU7RUFDL0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTNkUsY0FBYyxDQUFDbEIsR0FBc0IsRUFBVTtJQUFBO0lBQ3ZELHVCQUFJQSxHQUFHLENBQUMyRyxVQUFVLDRDQUFkLGdCQUFnQkssUUFBUSxFQUFFLENBQUN4RCxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7TUFDdkQsT0FBTyxDQUFDO0lBQ1QsQ0FBQyxNQUFNLHdCQUFJeEQsR0FBRyxDQUFDMkcsVUFBVSw2Q0FBZCxpQkFBZ0JLLFFBQVEsRUFBRSxDQUFDeEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO01BQzFELE9BQU8sQ0FBQztJQUNULENBQUMsTUFBTTtNQUNOLE9BQU8sQ0FBQztJQUNUO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNZ0Qsc0JBQXNCLEdBQUcsQ0FBQ1MsUUFBMkIsRUFBRTVLLFdBQStCLEVBQUV5SixtQkFBNkIsS0FBVztJQUNySSxJQUFJQSxtQkFBbUIsRUFBRTtNQUN4Qm1CLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRzVOLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUVqQixPQUFPLENBQUMsOENBQThDLENBQUM7SUFDOUgsQ0FBQyxNQUFNO01BQ040TyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUd4RyxlQUFlLENBQUNnRSw4QkFBOEIsQ0FBQ3BJLFdBQVcsQ0FBQztJQUNyRjtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2tLLCtCQUErQixDQUN2Q1UsUUFBMkIsRUFDM0JDLE1BQWdCLEVBQ2hCWixRQUFnQyxFQUNoQzNCLFdBQW9CLEVBQ3BCdEksV0FBK0IsRUFDL0IrSixxQkFBOEIsRUFDOUJlLGNBQXdCLEVBQ3lEO0lBQ2pGLE1BQU1WLGdCQUFnQixHQUFHaEcsZUFBZSxDQUFDMkcscUJBQXFCLENBQUNGLE1BQU0sRUFBRUQsUUFBUSxFQUFFWCxRQUFRLEVBQUUzQixXQUFXLENBQUM7SUFDdkc4QixnQkFBZ0IsQ0FBQ0ksV0FBVyxHQUFHSyxNQUFNLENBQUN6QixTQUFTLEVBQUU7SUFFakQsSUFBSTRCLFVBQVUsRUFBRUMsY0FBYztJQUM5QixJQUFJLENBQUNiLGdCQUFnQixDQUFDYyxnQkFBZ0IsRUFBRTtNQUN2Q0YsVUFBVSxHQUFHSixRQUFRLENBQUNPLGFBQWEsRUFBRSxDQUFDQyxJQUFJLENBQUMsVUFBVUMsR0FBVyxFQUFFO1FBQ2pFLE9BQU9qSCxlQUFlLENBQUNrSCxnQkFBZ0IsQ0FBQ1QsTUFBTSxFQUFFUSxHQUFHLENBQUM7TUFDckQsQ0FBQyxDQUFDO0lBQ0g7SUFFQSxJQUFJTCxVQUFVLEVBQUU7TUFDZixNQUFNekosUUFBUSxHQUFHQyxVQUFVLENBQUNDLGNBQWMsQ0FBQ3VKLFVBQVUsQ0FBQztNQUN0REMsY0FBYyxHQUFHN0csZUFBZSxDQUFDbUgsMEJBQTBCLENBQUNoSyxRQUFRLENBQUM7SUFDdEU7SUFFQSxJQUFJLENBQUM2SSxnQkFBZ0IsQ0FBQ2xCLG1CQUFtQixFQUFFO01BQzFDO01BQ0EsSUFBSTBCLFFBQVEsQ0FBQ1ksYUFBYSxFQUFFLElBQUl4TCxXQUFXLEVBQUU7UUFDNUM4SyxjQUFjLENBQUNGLFFBQVEsRUFBRTVLLFdBQVcsQ0FBQztRQUNyQytKLHFCQUFxQixHQUFHLEtBQUs7TUFDOUI7SUFDRDtJQUVBLE1BQU0wQixRQUFRLEdBQUdySCxlQUFlLENBQUNzSCxrQkFBa0IsQ0FDbERkLFFBQVEsRUFDUlIsZ0JBQWdCLENBQUN1Qix3QkFBd0IsRUFDekN2QixnQkFBZ0IsQ0FBQ2MsZ0JBQWdCLEVBQ2pDZCxnQkFBZ0IsQ0FBQ2xCLG1CQUFtQixFQUNwQzJCLE1BQU0sRUFDTkksY0FBYyxDQUNkO0lBRUQsT0FBTztNQUFFYixnQkFBZ0I7TUFBRXFCO0lBQVMsQ0FBQztFQUN0Qzs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxrQkFBa0IsQ0FDMUJwSixPQUEwQixFQUMxQnFKLHdCQUFtQyxFQUNuQ1QsZ0JBQTRDLEVBQzVDaEMsbUJBQXVDLEVBQ3ZDMkIsTUFBZ0IsRUFDaEJJLGNBQW1DLEVBQ25DVyxnQkFBMEIsRUFDRTtJQUM1QixJQUFJQyxnQkFBZ0I7SUFDcEIsSUFBSUMsaUJBQWlCO0lBQ3JCLE1BQU1DLGFBQWEsR0FBR0MsZ0JBQWdCLENBQUNuQixNQUFNLENBQUM7SUFDOUMsTUFBTW9CLHNCQUFzQixHQUFJcEIsTUFBTSxDQUFDaEosU0FBUyxFQUFFLENBQWNpSCxtQkFBbUIsRUFBWTtJQUMvRixNQUFNb0QscUJBQXFCLEdBQUc5SCxlQUFlLENBQUMrSCxlQUFlLENBQUM3SixPQUFPLEVBQUV1SSxNQUFNLENBQUM7SUFDOUUsSUFBSUksY0FBYyxJQUFJQyxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUVrQixVQUFVLEVBQUUsRUFBRTtNQUNyRFAsZ0JBQWdCLEdBQUdFLGFBQWEsQ0FBQy9QLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUNuRStQLGFBQWEsQ0FBQy9QLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQyxFQUN2RWtOLG1CQUFtQixHQUFHQSxtQkFBbUIsR0FBSWdELHFCQUFxQixDQUEyQkcsS0FBSyxDQUNsRyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ04sTUFBTUMsMENBQTBDLEdBQUdsSSxlQUFlLENBQUNtSSwrQ0FBK0MsQ0FDakgxQixNQUFNLEVBQ05LLGdCQUFnQixFQUNoQmUsc0JBQXNCLENBQ3RCO01BQ0QsTUFBTU8sZ0NBQWdDLEdBQUdGLDBDQUEwQyxHQUNoRkEsMENBQTBDLENBQUM5USxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQzdENEMsU0FBUztNQUNaLE1BQU1xTyw2QkFBNkIsR0FDbENELGdDQUFnQyxJQUFJRiwwQ0FBMEMsR0FDM0VBLDBDQUEwQyxDQUFDOVEsU0FBUyxDQUFDLHlEQUF5RCxDQUFDLEdBQy9HNEMsU0FBUztNQUNiLElBQUl1Tix3QkFBd0IsQ0FBQ2hSLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEM7UUFDQSxJQUFJaVIsZ0JBQWdCLEVBQUU7VUFDckI7VUFDQUUsaUJBQWlCLEdBQUlGLGdCQUFnQixDQUFjYyxRQUFRLEVBQUU7UUFDOUQsQ0FBQyxNQUFNLElBQUl4QixnQkFBZ0IsSUFBSWUsc0JBQXNCLEVBQUU7VUFDdERILGlCQUFpQixHQUFHMUgsZUFBZSxDQUFDdUkscUJBQXFCLENBQ3hEVixzQkFBc0IsRUFDdEJmLGdCQUFnQixFQUNoQnNCLGdDQUFnQyxFQUNoQ0MsNkJBQTZCLENBQzdCO1FBQ0YsQ0FBQyxNQUFNO1VBQ05YLGlCQUFpQixHQUFHMU4sU0FBUztRQUM5QjtRQUNBO1FBQ0EsTUFBTXdPLFdBQTJCLEdBQUd4SSxlQUFlLENBQUN5SSxtQkFBbUIsQ0FBQ1gscUJBQXFCLEVBQUVILGFBQWEsQ0FBQztRQUM3RyxJQUFJRCxpQkFBaUIsSUFBSTVDLG1CQUFtQixFQUFFO1VBQzdDMkMsZ0JBQWdCLEdBQUdFLGFBQWEsQ0FBQy9QLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDOFAsaUJBQWlCLEVBQUU1QyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlHLENBQUMsTUFBTSxJQUFJNEMsaUJBQWlCLElBQUljLFdBQVcsQ0FBQ0UsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1VBQzFFakIsZ0JBQWdCLEdBQUksR0FBRUUsYUFBYSxDQUFDL1AsT0FBTyxDQUFDLHVEQUF1RCxFQUFFLENBQ3BHOFAsaUJBQWlCLENBQ2pCLENBQUUsS0FBSWMsV0FBVyxDQUFDRyxZQUFhLEVBQUM7UUFDbEMsQ0FBQyxNQUFNLElBQUlqQixpQkFBaUIsSUFBSWMsV0FBVyxDQUFDRSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7VUFDM0VqQixnQkFBZ0IsR0FBR0UsYUFBYSxDQUFDL1AsT0FBTyxDQUFDLHVEQUF1RCxFQUFFLENBQUM4UCxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZILENBQUMsTUFBTSxJQUFJQSxpQkFBaUIsSUFBSWMsV0FBVyxDQUFDRSxnQkFBZ0IsS0FBSyxXQUFXLEVBQUU7VUFDN0VqQixnQkFBZ0IsR0FBR0UsYUFBYSxDQUFDL1AsT0FBTyxDQUFDLHVEQUF1RCxFQUFFLENBQUM4UCxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZILENBQUMsTUFBTSxJQUFJLENBQUNBLGlCQUFpQixJQUFJNUMsbUJBQW1CLEVBQUU7VUFDckQyQyxnQkFBZ0IsR0FBR0UsYUFBYSxDQUFDL1AsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLEdBQUcsSUFBSSxHQUFHa04sbUJBQW1CO1FBQ2xILENBQUMsTUFBTSxJQUFJLENBQUM0QyxpQkFBaUIsSUFBSWMsV0FBVyxDQUFDRSxnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7VUFDM0VqQixnQkFBZ0IsR0FBR2UsV0FBVyxDQUFDRyxZQUFZO1FBQzVDLENBQUMsTUFBTTtVQUNObEIsZ0JBQWdCLEdBQUcsSUFBSTtRQUN4QjtNQUNELENBQUMsTUFBTTtRQUNOQSxnQkFBZ0IsR0FBRyxJQUFJO01BQ3hCO0lBQ0Q7SUFFQSxPQUFPQSxnQkFBZ0I7RUFDeEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNVLCtDQUErQyxDQUN2RDFCLE1BQWdCLEVBQ2hCSyxnQkFBNEMsRUFDNUNlLHNCQUE4QixFQUNEO0lBQzdCLElBQUllLGVBQWU7SUFDbkIsSUFBSTlCLGdCQUFnQixJQUFJZSxzQkFBc0IsRUFBRTtNQUMvQyxNQUFNZ0IsTUFBTSxHQUFHcEMsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVwTyxRQUFRLEVBQUU7TUFDakMsTUFBTXlRLFVBQVUsR0FBR0QsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVFLFlBQVksRUFBZ0MsQ0FBQyxDQUFDO01BQ3pFLE1BQU1DLFNBQVMsR0FBR0YsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVHLFdBQVcsQ0FBQ25DLGdCQUFnQixDQUFDekMsT0FBTyxFQUFFLENBQUM7TUFDckUsSUFBSXlFLFVBQVUsYUFBVkEsVUFBVSxlQUFWQSxVQUFVLENBQUUxUixTQUFTLENBQUUsR0FBRTRSLFNBQVUsSUFBR25CLHNCQUF1Qiw0Q0FBMkMsQ0FBQyxFQUFFO1FBQzlHZSxlQUFlLEdBQUdFLFVBQVUsQ0FBQ0ksb0JBQW9CLENBQUUsR0FBRUYsU0FBVSxJQUFHbkIsc0JBQXVCLHNDQUFxQyxDQUFDO01BQ2hJO0lBQ0Q7SUFDQSxPQUFPZSxlQUFlO0VBQ3ZCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNMLHFCQUFxQixDQUM3QlYsc0JBQThCLEVBQzlCZixnQkFBeUIsRUFDekJxQyxtQkFBMkIsRUFDM0JDLGdCQUF3QixFQUNmO0lBQ1QsTUFBTUMsVUFBVSxHQUFHdkMsZ0JBQWdCLENBQUMxUCxTQUFTLENBQUN5USxzQkFBc0IsQ0FBQztJQUNyRSxJQUFJeUIsVUFBVTtJQUNkLElBQUlDLGNBQWMsR0FBR0YsVUFBVTtJQUMvQixJQUFJRixtQkFBbUIsRUFBRTtNQUN4QixJQUFJdEIsc0JBQXNCLENBQUNuUyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hEO1FBQ0FtUyxzQkFBc0IsR0FBR0Esc0JBQXNCLENBQUMyQixLQUFLLENBQUMsQ0FBQyxFQUFFM0Isc0JBQXNCLENBQUNuUyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JHbVMsc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDakwsTUFBTSxDQUFDdU0sbUJBQW1CLENBQUM7TUFDNUUsQ0FBQyxNQUFNO1FBQ050QixzQkFBc0IsR0FBR3NCLG1CQUFtQjtNQUM3QztNQUNBRyxVQUFVLEdBQUd4QyxnQkFBZ0IsQ0FBQzFQLFNBQVMsQ0FBQ3lRLHNCQUFzQixDQUFDO01BQy9ELElBQUl5QixVQUFVLEVBQUU7UUFDZixJQUFJRixnQkFBZ0IsRUFBRTtVQUNyQixNQUFNSyxXQUFXLEdBQUdMLGdCQUFnQixDQUFDSSxLQUFLLENBQUNKLGdCQUFnQixDQUFDekwsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM3RSxRQUFROEwsV0FBVztZQUNsQixLQUFLLFVBQVU7Y0FDZEYsY0FBYyxHQUFHRCxVQUFVO2NBQzNCO1lBQ0QsS0FBSyxXQUFXO2NBQ2ZDLGNBQWMsR0FBSSxHQUFFRCxVQUFXLEtBQUlELFVBQVcsR0FBRTtjQUNoRDtZQUNELEtBQUssVUFBVTtjQUNkRSxjQUFjLEdBQUksR0FBRUYsVUFBVyxLQUFJQyxVQUFXLEdBQUU7Y0FDaEQ7WUFDRCxLQUFLLGNBQWM7Y0FDbEJDLGNBQWMsR0FBR0YsVUFBVTtjQUMzQjtZQUNEO1VBQVE7UUFFVixDQUFDLE1BQU07VUFDTkUsY0FBYyxHQUFJLEdBQUVELFVBQVcsS0FBSUQsVUFBVyxHQUFFO1FBQ2pEO01BQ0Q7SUFDRDtJQUNBLE9BQU9FLGNBQWM7RUFDdEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTeEIsZUFBZSxDQUFDeFEsUUFBMkIsRUFBRWtQLE1BQWdCLEVBQTJCO0lBQ2hHLE1BQU1pRCxzQkFBc0IsR0FBR25TLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFb1MsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsR0FBRyxFQUFFO0lBQ3pFLE9BQVFwRCxNQUFNLENBQUNoSixTQUFTLEVBQUUsQ0FBY3FNLGtCQUFrQixFQUFFLENBQUNDLE9BQU8sQ0FBQy9DLElBQUksQ0FBQyxVQUFVZ0QsT0FBTyxFQUFXO01BQ3JHLE9BQU9BLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUNDLEdBQUcsRUFBRSxLQUFLSCxzQkFBc0I7SUFDaEUsQ0FBQyxDQUFDO0VBQ0g7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTakIsbUJBQW1CLENBQUNYLHFCQUE4QyxFQUFFSCxhQUE0QixFQUFrQjtJQUMxSCxNQUFNYSxXQUEyQixHQUFHO01BQUVFLGdCQUFnQixFQUFFLEVBQUU7TUFBRUMsWUFBWSxFQUFFO0lBQUcsQ0FBQztJQUM5RSxJQUFJYixxQkFBcUIsRUFBRTtNQUMxQjtNQUNBLElBQUlBLHFCQUFxQixDQUFDb0MsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNwRDFCLFdBQVcsQ0FBQ0csWUFBWSxHQUFHM08sU0FBUztRQUNwQ3dPLFdBQVcsQ0FBQ0UsZ0JBQWdCLEdBQUcsV0FBVztNQUMzQyxDQUFDLE1BQU07UUFDTjtRQUNBRixXQUFXLENBQUNHLFlBQVksR0FBSSxHQUFFaEIsYUFBYSxDQUFDL1AsT0FBTyxDQUFDLDBDQUEwQyxDQUFFLEtBQUkrUCxhQUFhLENBQUMvUCxPQUFPLENBQ3hILHdDQUF3QyxDQUN2QyxNQUFLa1EscUJBQXFCLENBQUNHLEtBQU0sRUFBQztRQUNwQ08sV0FBVyxDQUFDRSxnQkFBZ0IsR0FBRyxRQUFRO01BQ3hDO0lBQ0QsQ0FBQyxNQUFNO01BQ05GLFdBQVcsQ0FBQ0UsZ0JBQWdCLEdBQUcsU0FBUztJQUN6QztJQUNBLE9BQU9GLFdBQVc7RUFDbkI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTdEIsZ0JBQWdCLENBQUNULE1BQWdCLEVBQUVHLFVBQWtCLEVBQTBCO0lBQ3ZGLE1BQU16SixRQUFRLEdBQUdDLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDdUosVUFBVSxDQUFDO0lBQ3RELElBQUl6SixRQUFRLElBQUksQ0FBQ0EsUUFBUSxDQUFDMEcsR0FBRyxDQUFVLG9CQUFvQixDQUFDLElBQUksQ0FBQzFHLFFBQVEsQ0FBQzBHLEdBQUcsQ0FBUSxhQUFhLENBQUMsRUFBRTtNQUNwRyxPQUFPNEMsTUFBTSxDQUFDL0ksWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVdUcsS0FBYyxFQUFXO1FBQ25FLE9BQU9BLEtBQUssQ0FBQ3pFLEtBQUssRUFBRSxLQUFLckMsUUFBUSxDQUFDcUMsS0FBSyxFQUFFO01BQzFDLENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBTyxLQUFLO0VBQ2I7RUFFQSxTQUFTMkgsMEJBQTBCLENBQUNoSyxRQUFnQyxFQUFXO0lBQzlFLElBQUlnTixjQUFjLEdBQUdoTixRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRU0sU0FBUyxFQUFFO0lBQzFDLE9BQ0MwTSxjQUFjLElBQ2QscUJBQUNBLGNBQWMsNENBQWQsZ0JBQWdCdEcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQ3hDLHNCQUFDc0csY0FBYyw2Q0FBZCxpQkFBZ0J0RyxHQUFHLENBQUMsMEJBQTBCLENBQUMsS0FDaEQsc0JBQUNzRyxjQUFjLDZDQUFkLGlCQUFnQnRHLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUMzQztNQUFBO01BQ0RzRyxjQUFjLEdBQUdBLGNBQWMsQ0FBQzFNLFNBQVMsRUFBRTtJQUM1QztJQUVBLE9BQU8sQ0FBQyxDQUFDME0sY0FBYyxJQUFJQSxjQUFjLENBQUN0RyxHQUFHLENBQUMsMEJBQTBCLENBQUM7RUFDMUU7RUFFQSxTQUFTckIsaUNBQWlDLENBQUN0RyxnQkFBd0IsRUFBVTtJQUM1RSxNQUFNa08sY0FBYyxHQUFHeFIsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7SUFDbkUsUUFBUXFELGdCQUFnQjtNQUN2QixLQUFLLE9BQU87UUFDWCxPQUFPa08sY0FBYyxDQUFDeFMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDO01BQ2hGLEtBQUssYUFBYTtRQUNqQixPQUFPd1MsY0FBYyxDQUFDeFMsT0FBTyxDQUFDLHlEQUF5RCxDQUFDO01BQ3pGLEtBQUssU0FBUztRQUNiLE9BQU93UyxjQUFjLENBQUN4UyxPQUFPLENBQUMsNERBQTRELENBQUM7TUFDNUYsS0FBSyxTQUFTO1FBQ2IsT0FBT3dTLGNBQWMsQ0FBQ3hTLE9BQU8sQ0FBQyw0REFBNEQsQ0FBQztNQUM1RjtRQUNDLE9BQU93UyxjQUFjLENBQUN4UyxPQUFPLENBQUMsb0RBQW9ELENBQUM7SUFBQztFQUV2RjtFQUNBLFNBQVNXLCtCQUErQixHQUFTO0lBQ2hEOFIsd0JBQXdCLENBQUMsS0FBSyxDQUFDO0VBQ2hDO0VBQ0EsU0FBUzNHLDZCQUE2QixDQUFDNEcsZ0JBQXlCLEVBQVE7SUFDdkVELHdCQUF3QixDQUFDLElBQUksRUFBRUMsZ0JBQWdCLENBQUM7RUFDakQ7RUFFQSxTQUFTQywyQkFBMkIsQ0FBQ0MsYUFBMkIsRUFBRUYsZ0JBQXlCLEVBQWE7SUFDdkcsSUFBSUEsZ0JBQWdCLEtBQUt0USxTQUFTLEVBQUU7TUFDbkMsT0FBT3dRLGFBQWEsQ0FBQ3BULFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDcEM7SUFDQSxNQUFNcVQsV0FBVyxHQUFHRCxhQUFhLENBQUMzTCxRQUFRLENBQUMsR0FBRyxDQUFDO0lBRS9DNEwsV0FBVyxDQUFDbkwsTUFBTSxDQUNqQixJQUFJakQsTUFBTSxDQUFDO01BQ1ZuQyxJQUFJLEVBQUUsUUFBUTtNQUNkb0MsUUFBUSxFQUFFQyxjQUFjLENBQUNtTyxVQUFVO01BQ25Dak8sTUFBTSxFQUFFNk47SUFDVCxDQUFDLENBQUMsQ0FDRjtJQUVELE9BQU9HLFdBQVcsQ0FBQzFMLGtCQUFrQixFQUFFLENBQUM0TCxHQUFHLENBQUMsVUFBVWxQLFFBQVEsRUFBRTtNQUMvRCxPQUFPQSxRQUFRLENBQUNyRSxTQUFTLEVBQUU7SUFDNUIsQ0FBQyxDQUFDO0VBQ0g7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM2RSxXQUFXLEdBQXdGO0lBQUEsSUFBdkYyTyxjQUFjLHVFQUFHLEtBQUs7SUFBQSxJQUFFQyxlQUFlLHVFQUFHLEtBQUs7SUFBQSxJQUFFUCxnQkFBeUI7SUFDOUYsSUFBSXpULENBQUM7SUFDTCxNQUFNMlQsYUFBYSxHQUFHdFQsU0FBUyxDQUFDQyxlQUFlLEVBQUU7TUFDaERILGVBQWUsR0FBRzRCLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFFO01BQzlEbUQsbUJBQW1CLEdBQUcsRUFBRTtJQUN6QixJQUFJN0YsU0FBb0IsR0FBRyxFQUFFO0lBQzdCLElBQUl5VSxjQUFjLElBQUlDLGVBQWUsSUFBSVAsZ0JBQWdCLEVBQUU7TUFDMURuVSxTQUFTLEdBQUdvVSwyQkFBMkIsQ0FBQ0MsYUFBYSxFQUFFRixnQkFBZ0IsQ0FBQztJQUN6RSxDQUFDLE1BQU07TUFDTm5VLFNBQVMsR0FBR3FVLGFBQWEsQ0FBQ3BULFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDekM7SUFDQSxLQUFLUCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdWLFNBQVMsQ0FBQ0ksTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtNQUN0QyxJQUNDLENBQUMsQ0FBQ2dVLGVBQWUsSUFBSTFVLFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUN1USxhQUFhLEVBQUUsTUFDL0N3RCxjQUFjLElBQUl6VSxTQUFTLENBQUNVLENBQUMsQ0FBQyxDQUFDOFMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUNyRCxDQUFDaUIsY0FBYyxLQUFLLENBQUN6VSxTQUFTLENBQUNVLENBQUMsQ0FBQyxDQUFDOFMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUl4VCxTQUFTLENBQUNVLENBQUMsQ0FBQyxDQUFDOFMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFFLENBQUMsRUFDNUY7UUFDRDNOLG1CQUFtQixDQUFDYSxJQUFJLENBQUMxRyxTQUFTLENBQUNVLENBQUMsQ0FBQyxDQUFDO01BQ3ZDO0lBQ0Q7SUFFQSxLQUFLQSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtRixtQkFBbUIsQ0FBQ3pGLE1BQU0sRUFBRU0sQ0FBQyxFQUFFLEVBQUU7TUFDaEQsSUFDQ21GLG1CQUFtQixDQUFDbkYsQ0FBQyxDQUFDLENBQUM0SCxPQUFPLEVBQUUsS0FBSyxLQUFLLElBQzFDekMsbUJBQW1CLENBQUNuRixDQUFDLENBQUMsQ0FBQ2tKLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFDMUMsQ0FBQy9ELG1CQUFtQixDQUFDbkYsQ0FBQyxDQUFDLENBQUNrSixVQUFVLEVBQUUsQ0FBQ2dELFFBQVEsQ0FBQy9MLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLDZDQUE2QyxDQUFDLENBQUMsRUFDcEg7UUFDRG9FLG1CQUFtQixDQUFDbkYsQ0FBQyxDQUFDLENBQUNpQixVQUFVLENBQy9CLEtBQUlkLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLDZDQUE2QyxDQUFFLEdBQUVvRSxtQkFBbUIsQ0FBQ25GLENBQUMsQ0FBQyxDQUFDa0osVUFBVSxFQUFHLEVBQUMsQ0FDbkg7TUFDRjtJQUNEO0lBQ0E7SUFDQSxNQUFNK0ssZUFBMEIsR0FBRyxFQUFFO0lBQ3JDLEtBQUtqVSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtRixtQkFBbUIsQ0FBQ3pGLE1BQU0sRUFBRU0sQ0FBQyxFQUFFLEVBQUU7TUFDaEQsTUFBTWtVLGdCQUFnQixHQUFHL08sbUJBQW1CLENBQUNuRixDQUFDLENBQUMsQ0FBQ1ksbUJBQW1CLEVBQXlDO01BQzVHLElBQ0VzVCxnQkFBZ0IsS0FDZEEsZ0JBQWdCLENBQUMvSCxlQUFlLEtBQUtoSixTQUFTLElBQUkrUSxnQkFBZ0IsQ0FBQy9ILGVBQWUsS0FBSyxJQUFJLElBQzNGK0gsZ0JBQWdCLENBQUNyVCxVQUFVLEtBQUtzQyxTQUFTLElBQUkrUSxnQkFBZ0IsQ0FBQ3JULFVBQVUsS0FBSyxJQUFLLENBQUMsSUFDdEZzRSxtQkFBbUIsQ0FBQ25GLENBQUMsQ0FBQyxDQUFDNEgsT0FBTyxFQUFFLEVBQy9CO1FBQ0RxTSxlQUFlLENBQUNqTyxJQUFJLENBQUNiLG1CQUFtQixDQUFDbkYsQ0FBQyxDQUFDLENBQUM7TUFDN0M7SUFDRDtJQUVBLE9BQU9pVSxlQUFlO0VBQ3ZCO0VBU0EsU0FBU1Qsd0JBQXdCLENBQUNPLGNBQXVCLEVBQUVOLGdCQUF5QixFQUFRO0lBQzNGLE1BQU1VLG9CQUFvQixHQUFHL08sV0FBVyxDQUFDMk8sY0FBYyxFQUFFLElBQUksRUFBRU4sZ0JBQWdCLENBQUM7SUFFaEYsSUFBSVUsb0JBQW9CLENBQUN6VSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3BDVyxTQUFTLENBQUNXLGNBQWMsQ0FBQ21ULG9CQUFvQixDQUFDO0lBQy9DO0VBQ0Q7RUFDQTtFQUNBLFNBQVNDLGtCQUFrQixDQUFDeEUsTUFBZ0IsRUFBRXlFLFNBQW9CLEVBQUVoTixPQUEwQixFQUFRO0lBQ3JHLElBQUlBLE9BQU8sQ0FBQ2lOLGNBQWMsS0FBS25SLFNBQVMsRUFBRTtNQUN6QyxNQUFNb1IsY0FBYyxHQUFJM0UsTUFBTSxDQUFDaEosU0FBUyxFQUFFLENBQWNpSCxtQkFBbUIsRUFBWTtNQUN2RixNQUFNMkcsWUFBWSxHQUFHSCxTQUFTLENBQUNsRSxJQUFJLENBQUMsVUFBVXZMLFFBQVEsRUFBRTtRQUN2RCxPQUFPeUMsT0FBTyxDQUFDeUwsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM1RyxRQUFRLENBQUN0SCxRQUFRLENBQUM0SSxPQUFPLEVBQUUsQ0FBQztNQUM1RCxDQUFDLENBQUM7TUFDRm5HLE9BQU8sQ0FBQ2lOLGNBQWMsR0FBR0UsWUFBWSxHQUFHQSxZQUFZLENBQUNqVSxTQUFTLEVBQUUsQ0FBQ2dVLGNBQWMsQ0FBQyxHQUFHcFIsU0FBUztJQUM3RjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNzTCxzQ0FBc0MsQ0FBQ2dHLGlCQUE2QyxFQUF1QjtJQUNuSCxPQUFRQSxpQkFBaUIsQ0FBc0JDLFdBQVcsRUFBRSxDQUFDak0sTUFBTSxDQUFDLFVBQVVpRyxRQUEyQixFQUFFO01BQzFHLE9BQU9BLFFBQVEsQ0FBQ2lHLFVBQVUsRUFBRTtJQUM3QixDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLHlDQUF5QyxDQUFDQyxVQUFnQyxFQUFFdkwsY0FBaUMsRUFBZ0I7SUFDckksT0FBT3VMLFVBQVUsQ0FDZmhPLFlBQVksQ0FBQyxJQUFJLEVBQUd1RyxLQUFLLElBQUs7TUFDOUIsT0FBTzBILGVBQWUsQ0FBQ3hMLGNBQWMsQ0FBQzRHLGFBQWEsRUFBRSxFQUFFOUMsS0FBSyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUNEckQsSUFBSSxDQUFDLFVBQVVnTCxDQUFDLEVBQUVDLENBQUMsRUFBRTtNQUNyQjtNQUNBO01BQ0EsSUFBSUQsQ0FBQyxDQUFDL0gsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQ2dJLENBQUMsQ0FBQ2hJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1FBQzVELE9BQU8sQ0FBQyxDQUFDO01BQ1Y7TUFDQSxPQUFPLENBQUM7SUFDVCxDQUFDLENBQUM7RUFDSjtFQUVBLFNBQVNnQixtQkFBbUIsQ0FBQzRCLE1BQWUsRUFBRXRHLGNBQWlDLEVBQUUyTCxZQUE4QixFQUFVO0lBQ3hIO0lBQ0EsTUFBTUMsY0FBYyxHQUFHLFVBQVVDLENBQVMsRUFBVTtNQUNuRCxPQUFPQSxDQUFDLENBQUNDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUM7SUFDbEQsQ0FBQztJQUNEO0lBQ0E7SUFDQSxJQUFJLENBQUNILFlBQVksRUFBRTtNQUFBO01BQ2xCLE1BQU1JLG1CQUFtQixHQUFJLDRCQUFFekYsTUFBTSxDQUFDdkIsaUJBQWlCLEVBQUUsMERBQTFCLHNCQUE0QmIsT0FBTyxFQUFHLElBQUlvQyxNQUFNLENBQWN0QyxhQUFhLEVBQUUsQ0FBQ0UsT0FBTyxFQUFHLEVBQUM7TUFDeEh5SCxZQUFZLEdBQUcsSUFBSUssTUFBTSxDQUFFLEdBQUVKLGNBQWMsQ0FBQ0csbUJBQW1CLENBQUUsV0FBVSxDQUFDO0lBQzdFO0lBQ0EsT0FBTy9MLGNBQWMsQ0FBQ3dKLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDc0MsT0FBTyxDQUFDSCxZQUFZLEVBQUUsRUFBRSxDQUFDO0VBQ2hFOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUy9HLGVBQWUsQ0FDdkIwQixNQUFnQixFQUNoQjJGLHVCQUEyQyxFQUNnRDtJQUMzRixJQUFJdEgsbUJBQXVDO0lBQzNDLE1BQU11SCxlQUFtQyxHQUFHNUYsTUFBTSxDQUFDNkYsVUFBVSxFQUFFLENBQUN0RixJQUFJLENBQUMsVUFBVXVGLE1BQU0sRUFBRTtNQUN0RixPQUFPQSxNQUFNLENBQUNDLGNBQWMsRUFBRSxJQUFJSix1QkFBdUI7SUFDMUQsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDQyxlQUFlLEVBQUU7TUFDckI7TUFDQSxNQUFNSSxhQUFhLEdBQUloRyxNQUFNLENBQUNpRyxrQkFBa0IsRUFBRSxDQUEwQkMsYUFBYSxDQUFDbEcsTUFBTSxDQUFDLENBQUNPLElBQUksQ0FBQyxVQUN0R2dELE9BQW9CLEVBQ1Y7UUFDVixJQUFJLENBQUMsQ0FBRUEsT0FBTyxDQUE0Qm5QLFFBQVEsSUFBSW1QLE9BQU8sQ0FBQzRDLGFBQWEsRUFBRTtVQUM1RSxPQUNDNUMsT0FBTyxDQUFDNEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLUix1QkFBdUIsSUFDcERwQyxPQUFPLENBQUM0QyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNYLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUtHLHVCQUF1QjtRQUVoRixDQUFDLE1BQU07VUFDTixPQUFPLEtBQUs7UUFDYjtNQUNELENBQUMsQ0FBdUM7TUFDeEMsSUFBSUssYUFBYSxFQUFFO1FBQUE7UUFDbEJMLHVCQUF1QixHQUFHSyxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRUksSUFBSTtRQUU3Qy9ILG1CQUFtQiw0QkFBRzJCLE1BQU0sQ0FDMUI2RixVQUFVLEVBQUUsQ0FDWnRGLElBQUksQ0FBQyxVQUFVZ0QsT0FBTyxFQUFXO1VBQ2pDLE9BQU9vQyx1QkFBdUIsS0FBS3BDLE9BQU8sQ0FBQ3dDLGNBQWMsRUFBRTtRQUM1RCxDQUFDLENBQUMsMERBSm1CLHNCQUtuQnhILFNBQVMsRUFBRTtNQUNmLENBQUMsTUFBTTtRQUNOO1FBQ0EsTUFBTThILFFBQVEsR0FBSXJHLE1BQU0sQ0FBQ2lHLGtCQUFrQixFQUFFLENBQTBCQyxhQUFhLENBQUNsRyxNQUFNLENBQUM7UUFDNUYsTUFBTXNHLGdCQUFnQixHQUFHRCxRQUFRLENBQUM5RixJQUFJLENBQUMsVUFBVWdELE9BQW9CLEVBQUU7VUFDdEUsSUFBSUEsT0FBTyxDQUFDQyxHQUFHLENBQUNsSCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUFBO1lBQzNDLGdDQUFPaUgsT0FBTyxDQUFDNEMsYUFBYSwwREFBckIsc0JBQXVCNUYsSUFBSSxDQUFDLFVBQVVnRyxZQUFvQixFQUFFO2NBQ2xFLE9BQ0NBLFlBQVksS0FBS1osdUJBQXVCLElBQUlZLFlBQVksQ0FBQ2YsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBS0csdUJBQXVCO1lBRWhILENBQUMsQ0FBQztVQUNIO1FBQ0QsQ0FBQyxDQUFzQztRQUN2QztRQUNBLElBQUlhLHdCQUF3QixHQUFHLEtBQUs7UUFDcEMsSUFBSUYsZ0JBQWdCLElBQUlBLGdCQUFnQixDQUFDOUUsS0FBSyxFQUFFO1VBQy9DZ0Ysd0JBQXdCLEdBQUd4RyxNQUFNLENBQUM2RixVQUFVLEVBQUUsQ0FBQ1ksSUFBSSxDQUFDLFVBQVVYLE1BQU0sRUFBRTtZQUNyRSxPQUFPQSxNQUFNLENBQUN2SCxTQUFTLEVBQUUsS0FBSytILGdCQUFnQixDQUFDOUUsS0FBSztVQUNyRCxDQUFDLENBQUM7UUFDSDtRQUNBbkQsbUJBQW1CLEdBQUdtSSx3QkFBd0IsR0FBR0YsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRTlFLEtBQUssR0FBR2pPLFNBQVM7UUFDcEZvUyx1QkFBdUIsR0FBR2Esd0JBQXdCLEdBQUdGLGdCQUFnQixhQUFoQkEsZ0JBQWdCLHVCQUFoQkEsZ0JBQWdCLENBQUU5QyxHQUFHLEdBQUdqUSxTQUFTO01BQ3ZGO0lBQ0QsQ0FBQyxNQUFNO01BQ044SyxtQkFBbUIsR0FBR3VILGVBQWUsQ0FBQ3JILFNBQVMsRUFBRTtJQUNsRDtJQUNBLE9BQU87TUFBRUYsbUJBQW1CLEVBQUVBLG1CQUFtQjtNQUFFc0gsdUJBQXVCLEVBQUVBO0lBQXdCLENBQUM7RUFDdEc7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3pGLHFCQUFxQixDQUM3QkYsTUFBZ0IsRUFDaEJ0RyxjQUFpQyxFQUNqQzBGLFFBQWdDLEVBQ2hDM0IsV0FBb0IsRUFDRTtJQUN0QixNQUFNa0ksdUJBQXVCLEdBQUd2SCxtQkFBbUIsQ0FBQzRCLE1BQU0sRUFBRXRHLGNBQWMsQ0FBQztJQUMzRSxNQUFNZ04sYUFBYSxHQUFHcEksZUFBZSxDQUFDMEIsTUFBTSxFQUFFMkYsdUJBQXVCLENBQUM7SUFDdEUsTUFBTTdFLHdCQUF3QixHQUFHMUIsUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRWhDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUNoRUssV0FBVyxDQUFzQitCLFdBQVcsRUFBRSxHQUM5Qy9CLFdBQVcsQ0FBc0JuRixrQkFBa0IsRUFBRTtJQUN6RCxNQUFNaUgsZ0JBQXFDLEdBQUc7TUFDN0N1Qix3QkFBd0I7TUFDeEJ6QyxtQkFBbUIsRUFBRXFJLGFBQWEsQ0FBQ3JJLG1CQUFtQjtNQUN0RHNILHVCQUF1QixFQUFFZSxhQUFhLENBQUNmLHVCQUF1QjtNQUM5RHRGLGdCQUFnQixFQUFFUyx3QkFBd0IsQ0FBQ1AsSUFBSSxDQUFDLFVBQVV6QyxVQUFVLEVBQUU7UUFDckUsT0FBT0EsVUFBVSxJQUFJcEUsY0FBYyxDQUFDd0osVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNoTSxPQUFPLENBQUM0RyxVQUFVLENBQUNGLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztNQUN4RixDQUFDO0lBQ0YsQ0FBQztJQUNELE9BQU8yQixnQkFBZ0I7RUFDeEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzJGLGVBQWUsQ0FBQzNPLFdBQXFCLEVBQUVvUSxLQUFpQixFQUFXO0lBQzNFLE9BQU9wUSxXQUFXLENBQUNrUSxJQUFJLENBQUMsVUFBVXRHLFVBQVUsRUFBRTtNQUM3QyxJQUFJQSxVQUFVLEtBQUt3RyxLQUFLLENBQUM1TixLQUFLLEVBQUUsRUFBRTtRQUNqQyxPQUFPLElBQUk7TUFDWjtNQUNBLE9BQU8sS0FBSztJQUNiLENBQUMsQ0FBQztFQUNIOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzZOLHNCQUFzQixDQUM5QkMsT0FBMEIsRUFDMUI1QixVQUFnQyxFQUNoQzZCLG9CQUE2QixFQUM3QnZILGdCQUFxQyxFQUNyQzJCLGFBQTRCLEVBQ25CO0lBQ1QsT0FDQzJGLE9BQU8sQ0FBQ2pILFFBQVEsRUFBRSxJQUNqQnFGLFVBQVUsQ0FBQ3JGLFFBQVEsRUFBRSxJQUFJa0gsb0JBQW9CLEdBQUksS0FBSTdCLFVBQVUsQ0FBQ3JGLFFBQVEsRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLElBQ2xGTCxnQkFBZ0IsSUFBSUEsZ0JBQWdCLENBQUNJLFdBQVcsR0FDN0MsS0FBSXVCLGFBQWEsQ0FBQy9QLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBRSxLQUFJb08sZ0JBQWdCLENBQUNJLFdBQVksRUFBQyxHQUN4RyxFQUFFLENBQUM7RUFFUjtFQUVBLFNBQVNvSCxnQkFBZ0IsQ0FBQzNILFFBQW9CLEVBQUU0SCxTQUF1QixFQUFXO0lBQ2pGLE9BQU8sQ0FBQ0EsU0FBUyxDQUFDUCxJQUFJLENBQUMsVUFBVWpKLEtBQUssRUFBRTtNQUN2QyxJQUFJeUosY0FBYyxHQUFHN0gsUUFBUSxDQUFDcEksU0FBUyxFQUFFO01BQ3pDLE9BQU9pUSxjQUFjLElBQUlBLGNBQWMsS0FBS3pKLEtBQUssRUFBRTtRQUNsRHlKLGNBQWMsR0FBR0EsY0FBYyxDQUFDalEsU0FBUyxFQUFFO01BQzVDO01BQ0EsT0FBT2lRLGNBQWMsR0FBRyxJQUFJLEdBQUcsS0FBSztJQUNyQyxDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU0xTixlQUFvQyxHQUFHO0lBQzVDL0QsV0FBVyxFQUFFQSxXQUFXO0lBQ3hCVixtQkFBbUIsRUFBRUEsbUJBQW1CO0lBQ3hDaEQsK0JBQStCLEVBQUVBLCtCQUErQjtJQUNoRW1MLDZCQUE2QixFQUFFQSw2QkFBNkI7SUFDNURsRixzQkFBc0IsRUFBRXpILHdCQUF3QjtJQUNoRHlCLG9CQUFvQixFQUFFQSxvQkFBb0I7SUFDMUNpQiwyQkFBMkIsRUFBRUEsMkJBQTJCO0lBQ3hEd1Isa0JBQWtCLEVBQUVBLGtCQUFrQjtJQUN0QzNGLHNDQUFzQyxFQUFFQSxzQ0FBc0M7SUFDOUVtRyx5Q0FBeUMsRUFBRUEseUNBQXlDO0lBQ3BGRSxlQUFlLEVBQUVBLGVBQWU7SUFDaENoRixxQkFBcUIsRUFBRUEscUJBQXFCO0lBQzVDMEcsc0JBQXNCLEVBQUVBLHNCQUFzQjtJQUM5Q0csZ0JBQWdCLEVBQUVBLGdCQUFnQjtJQUNsQ3hKLDhCQUE4QixFQUFFQSw4QkFBOEI7SUFDOUQ4QiwrQkFBK0IsRUFBRUEsK0JBQStCO0lBQ2hFZixlQUFlLEVBQUVBLGVBQWU7SUFDaENGLG1CQUFtQixFQUFFQSxtQkFBbUI7SUFDeEN5QyxrQkFBa0IsRUFBRUEsa0JBQWtCO0lBQ3RDbUIsbUJBQW1CLEVBQUVBLG1CQUFtQjtJQUN4Q1YsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDSSwrQ0FBK0MsRUFBRUEsK0NBQStDO0lBQ2hHMUgsY0FBYyxFQUFFQSxjQUFjO0lBQzlCc0Ysc0JBQXNCLEVBQUVBLHNCQUFzQjtJQUM5Q3dDLHFCQUFxQixFQUFFQSxxQkFBcUI7SUFDNUN4RSx5QkFBeUIsRUFBRUEseUJBQXlCO0lBQ3BEOUQsNEJBQTRCLEVBQUVBLDRCQUE0QjtJQUMxRDZELG1CQUFtQixFQUFFQSxtQkFBbUI7SUFDeENvRCxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDQywwQkFBMEIsRUFBRUE7RUFDN0IsQ0FBQztFQUFDLE9BRWFuSCxlQUFlO0FBQUEifQ==
1234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInNldFRhcmdldHMiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJkZXNjcmlwdGlvbkJpbmRpbmciLCJ0ZWNobmljYWxEZXRhaWxzQmluZGluZyIsIk1lc3NhZ2VJdGVtIiwidW5kZWZpbmVkIiwiY291bnRlciIsInBhdGgiLCJ0aXRsZSIsInN1YnRpdGxlIiwibG9uZ3RleHRVcmwiLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJzZXRHcm91cEl0ZW1zIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwiaXNOb25UZWNobmljYWxNZXNzYWdlIiwibWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJiT25seUZvclRlc3QiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidmlld1R5cGUiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJzSGlnaGVzdFByaW9yaXR5Iiwic0hpZ2hlc3RQcmlvcml0eVRleHQiLCJhRmlsdGVycyIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIiLCJ0ZXN0IiwiY29uY2F0IiwicHVzaCIsIkVRIiwiZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nIiwiYUNvbnRyb2xJZHMiLCJpbmRleCIsIkluZmluaXR5Iiwib0NvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJlcnJvckZpZWxkQ29udHJvbCIsImZpZWxkUmFua2luRGlhbG9nIiwiRGlhbG9nIiwiZ2V0UGFyZW50IiwiZmluZEVsZW1lbnRzIiwiaW5kZXhPZiIsImZvY3VzIiwiY2FzZVNlbnNpdGl2ZSIsImZpbHRlcnMiLCJnZXRUYXJnZXRzIiwiYW5kIiwibWVzc2FnZUNvZGUiLCJjb2RlIiwiTWVzc2FnZSIsInRleHQiLCJ0YXJnZXQiLCJwZXJzaXN0ZW50IiwiSlNPTk1vZGVsIiwiYkhhc0V0YWdNZXNzYWdlIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImFNb2RlbERhdGFBcnJheSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImN1cnJlbnRDb250ZXh0IiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiZ2V0SWQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0TWVzc2FnZSIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9NZXNzYWdlT2JqZWN0Iiwib1NvcnRlciIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJnZXRNZXNzYWdlUmFuayIsInJhbmtCIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZVR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwibWVzc2FnZVRlY2huaWNhbERldGFpbHMiLCJpbmNsdWRlcyIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsImFsbFJvd0NvbnRleHRzIiwicm93Q29udGV4dCIsImNvbnRleHRQYXRoIiwiaWRlbnRpZmllckNvbHVtbiIsImdldElkZW50aWZpZXJDb2x1bW4iLCJyb3dJZGVudGlmaWVyIiwiY29sdW1uUHJvcGVydHlOYW1lIiwiZ2V0VGFibGVDb2xQcm9wZXJ0eSIsInNUYWJsZVRhcmdldENvbE5hbWUiLCJnZXRUYWJsZUNvbEluZm8iLCJnZXRIZWFkZXIiLCJvVmlld0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9wTGF5b3V0IiwiZ2V0Q29udGVudCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiY2hpbGRUYWJsZUVsZW1lbnQiLCJvRWxlbWVudCIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJmbkNhbGxiYWNrU2V0R3JvdXBOYW1lIiwib1RhcmdldFRhYmxlSW5mbyIsImdldENvbnRleHRzIiwiaGVhZGVyTmFtZSIsImdldEhlYWRlclZpc2libGUiLCJ0YWJsZUhlYWRlciIsImdldFRpdGxlIiwic0xhc3RBY3Rpb25UZXh0IiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93IiwiZ2V0UGVyc2lzdGVudCIsInN1YlRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwib1RhcmdldGVkQ29udHJvbCIsInNNZXNzYWdlU3VidGl0bGUiLCJzUm93U3VidGl0bGVWYWx1ZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSIsIm9Db2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsIm9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwic1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJzVGFibGVGaXJzdENvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVGaXJzdENvbFZhbHVlIiwib0NvbHVtbkluZm8iLCJkZXRlcm1pbmVDb2x1bW5JbmZvIiwic0NvbHVtbkluZGljYXRvciIsInNDb2x1bW5WYWx1ZSIsIm9CaW5kaW5nQ29udGV4dCIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic1RleHRBbm5vdGF0aW9uUGF0aCIsInNUZXh0QXJyYW5nZW1lbnQiLCJzQ29kZVZhbHVlIiwic1RleHRWYWx1ZSIsInNDb21wdXRlZFZhbHVlIiwic2xpY2UiLCJzRW51bU51bWJlciIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJzcGxpdCIsInBvcCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJvQ29sdW1uIiwia2V5IiwiYXZhaWxhYmlsaXR5Iiwib1BhcmVudENvbnRyb2wiLCJyZXNvdXJjZUJ1bmRsZSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwibGlzdEJpbmRpbmciLCJTdGFydHNXaXRoIiwibWFwIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJiYWNrZW5kTWVzc2FnZXMiLCJhTWVzc2FnZXNUb0JlRGVsZXRlZCIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsImFDb250ZXh0cyIsImFkZGl0aW9uYWxUZXh0Iiwic3VidGl0bGVDb2x1bW4iLCJlcnJvckNvbnRleHQiLCJvT2JqZWN0UGFnZUxheW91dCIsImdldFNlY3Rpb25zIiwiZ2V0VmlzaWJsZSIsImdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uIiwic3ViU2VjdGlvbiIsImZuRmlsdGVyVXBvbklkcyIsImEiLCJiIiwib0NvbnRleHRQYXRoIiwiZm5SZWdFeHBlc2NhcGUiLCJzIiwicmVwbGFjZSIsImNvbnRleHRQYXRoVG9Fc2NhcGUiLCJSZWdFeHAiLCJzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSIsIm9UYWJsZVRhcmdldENvbCIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJnZXRQcm9wZXJ0eUtleSIsIm9DdXN0b21Db2x1bW4iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRDb2x1bW5zRm9yIiwicHJvcGVydHlJbmZvcyIsIm5hbWUiLCJhQ29sdW1ucyIsImNvbHVtbkRlZmluaXRpb24iLCJwcm9wZXJ0eUluZm8iLCJiSXNUYWJsZVRhcmdldENvbFZpc2libGUiLCJzb21lIiwib1RhYmxlQ29sSW5mbyIsIm9JdGVtIiwiY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSIsInNlY3Rpb24iLCJiTXVsdGlwbGVTdWJTZWN0aW9ucyIsImJJc09ycGhhbkVsZW1lbnQiLCJhRWxlbWVudHMiLCJvUGFyZW50RWxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsibWVzc2FnZUhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvblR5cGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgQ29yZUxpYiBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL21lc3NhZ2UvTWVzc2FnZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiwgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcblxuY29uc3QgTWVzc2FnZVR5cGUgPSBDb3JlTGliLk1lc3NhZ2VUeXBlO1xubGV0IGFNZXNzYWdlTGlzdDogdW5rbm93bltdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogTWVzc2FnZVtdID0gW107XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6IEZ1bmN0aW9uW10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHRhYmxlSGVhZGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2xJbmZvQW5kU3VidGl0bGVUeXBlID0ge1xuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRzdWJUaXRsZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIENvbHVtbkluZm9UeXBlID0ge1xuXHRzQ29sdW1uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c0NvbHVtbkluZGljYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGJvb2xlYW4sIGJUcmFuc2l0aW9uT25seT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IE1lc3NhZ2VbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRvQ29udHJvbD86IENvbnRyb2wsXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0XHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFx0dmlld1R5cGU/OiBzdHJpbmdcblx0KSA9PiBQcm9taXNlPERpYWxvZyB8IGJvb2xlYW4+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogdHJ1ZSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdFx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0XHRpc011bHRpNDEyPzogYm9vbGVhblxuXHQpID0+IHtcblx0XHRvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRcdG9CYWNrQnV0dG9uOiBCdXR0b247XG5cdH07XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IChzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBVSTVFbGVtZW50W107XG5cdGZuRmlsdGVyVXBvbklkczogKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpID0+IGJvb2xlYW47XG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG5cdCkgPT4gVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuXHQpID0+IHN0cmluZztcblx0YklzT3JwaGFuRWxlbWVudDogKG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSkgPT4gYm9vbGVhbjtcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiAoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nO1xuXHRnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlOiAoXG5cdFx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IGJvb2xlYW4sXG5cdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogRnVuY3Rpb25cblx0KSA9PiBDb2xJbmZvQW5kU3VidGl0bGVUeXBlO1xuXHRnZXRUYWJsZUNvbEluZm86IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmdcblx0KSA9PiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiAob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IHN0cmluZyB8IFJlZ0V4cCkgPT4gc3RyaW5nO1xuXHRnZXRNZXNzYWdlU3VidGl0bGU6IChcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0b1RhcmdldGVkQ29udHJvbD86IENvbnRyb2xcblx0KSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiAob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCkgPT4gQ29sdW1uSW5mb1R5cGU7XG5cdGZldGNoQ29sdW1uSW5mbzogKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBNRENUYWJsZSkgPT4gVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmdcblx0KSA9PiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0Z2V0TWVzc2FnZVJhbms6IChvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBudW1iZXI7XG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBib29sZWFuKSA9PiB2b2lkO1xuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IChcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogQ29udGV4dCxcblx0XHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG5cdCkgPT4gc3RyaW5nO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IFZpZXcpID0+IHZvaWQ7XG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IChcblx0XHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKTogc3RyaW5nIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBvUHJvcGVydHkucHJvcGVydHlcblx0XHRcdD8gXCIoICR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gPyAoXCI8cD4nICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkuc3Vic3RyaW5nKE1hdGgubWF4KG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIiksIG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi5cIikpICsgMSkgK1xuXHRcdFx0XHRcdCcgOiBcIiArICcgK1xuXHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSArIFwiPC9wPlwiKSA6IFwiXCIgKSdcblx0XHRcdDogXCJcIjtcblx0fVxuXHQvLyBJbnNlcnQgZ3JvdXBuYW1lIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10ge1xuXHRcdGNvbnN0IHNURCA9IFwidGVjaG5pY2FsRGV0YWlsc1wiOyAvLyBuYW1lIG9mIHByb3BlcnR5IGluIG1lc3NhZ2UgbW9kZWwgZGF0YSBmb3IgdGVjaG5pY2FsIGRldGFpbHNcblx0XHRyZXR1cm4gW1xuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNUZXh0YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL0NvbXBvbmVudElkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlVmVyc2lvbmAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0RldGFpbGVkTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVHJhbnNhY3Rpb25JZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL2NvZGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9tZXNzYWdlYCB9XG5cdFx0XTtcblx0fVxuXG5cdGxldCBzSFRNTCA9IFwiT2JqZWN0LmtleXMoXCIgKyBcIiR7dGVjaG5pY2FsRGV0YWlsc31cIiArICcpLmxlbmd0aCA+IDAgPyBcIjxoMj5UZWNobmljYWwgRGV0YWlsczwvaDI+XCIgOiBcIlwiICc7XG5cdGdldFBhdGhzKCkuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pIHtcblx0XHRzSFRNTCA9IGAke3NIVE1MICsgaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eSl9JHtpbnNlcnREZXRhaWwob1Byb3BlcnR5KX0gKyBgO1xuXHR9KTtcblx0cmV0dXJuIHNIVE1MO1xufVxuZnVuY3Rpb24gZm5Gb3JtYXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuXHRyZXR1cm4gXCIoJHtcIiArIFwiZGVzY3JpcHRpb259ID8gKCR7XCIgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtIFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogTWVzc2FnZUl0ZW1bXSk6IENvcmVMaWIuTWVzc2FnZVR5cGUge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpIGFzIGtleW9mIHR5cGVvZiBvTWVzc2FnZUNvdW50XTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UsIGk6IG51bWJlcikge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscyAmJiAob01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyICYmIG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuXHRcdFx0aWYgKGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRUYXJnZXRzKFtcIlwiXSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCk6IHZvaWQge1xuXHRvRGlhbG9nLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBNZXNzYWdlLCBiTWVzc2FnZURpYWxvZz86IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpfSAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCJcblx0XHRcdFx0KX1gO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2coXG5cdG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCxcblx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0bXVsdGk0MTI/OiBib29sZWFuXG4pOiB7XG5cdG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdG9CYWNrQnV0dG9uOiBCdXR0b247XG59IHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkJpbmRpbmcgPSAnez0gJHtkZXNjcmlwdGlvbn0gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0RGVzY3JpcHRpb24oKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHNCaW5kaW5nID1cblx0XHRcdCd7PSAke3RlY2huaWNhbERldGFpbHN9ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkJpbmRpbmcgKyB0ZWNobmljYWxEZXRhaWxzQmluZGluZyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobXVsdGk0MTIpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJ7ZGVzY3JpcHRpb259XCIsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRvTWVzc2FnZVZpZXcgPSBuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXHRcdGl0ZW1zOiB7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlLFxuXHRcdFx0bGVuZ3RoOiA5OTk5XG5cdFx0fVxuXHR9KTtcblx0b01lc3NhZ2VWaWV3LnNldEdyb3VwSXRlbXModHJ1ZSk7XG5cdG9CYWNrQnV0dG9uID1cblx0XHRvQmFja0J1dHRvbiB8fFxuXHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0aWNvbjogSWNvblBvb2wuZ2V0SWNvblVSSShcIm5hdi1iYWNrXCIpLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRwcmVzczogZnVuY3Rpb24gKHRoaXM6IEJ1dHRvbik6IHZvaWQge1xuXHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRvTWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0b01lc3NhZ2VWaWV3LFxuXHRcdG9CYWNrQnV0dG9uXG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHtcblx0c2hvd01lc3NhZ2VCb3g/OiBib29sZWFuO1xuXHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW47XG5cdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZz86IGJvb2xlYW47XG5cdGZpbHRlcmVkTWVzc2FnZXM/OiBNZXNzYWdlW107XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlPzogRnVuY3Rpb247XG59O1xuXG5mdW5jdGlvbiBpc05vblRlY2huaWNhbE1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuXHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gbWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQodGVjaG5pY2FsRGV0YWlscyAmJlxuXHRcdFx0KCh0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSBudWxsKSB8fFxuXHRcdFx0XHQodGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzICE9PSB1bmRlZmluZWQgJiYgdGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzICE9PSBudWxsKSkpIHx8XG5cdFx0bWVzc2FnZS5nZXRDb2RlKClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdGNvbnRyb2w/OiBDb250cm9sLFxuXHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Yk9ubHlGb3JUZXN0PzogYm9vbGVhbixcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHR2aWV3VHlwZT86IHN0cmluZ1xuKTogUHJvbWlzZTxEaWFsb2cgfCBib29sZWFuPiB7XG5cdGxldCBhVHJhbnNpdGlvbk1lc3NhZ2VzID0gdGhpcy5nZXRNZXNzYWdlcygpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0Y29uc3QgaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyID0gbmV3IEZpbHRlcih7IHBhdGg6IFwiXCIsIHRlc3Q6IGlzTm9uVGVjaG5pY2FsTWVzc2FnZSB9KTtcblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRsZXQgaW5kZXggPSBJbmZpbml0eSxcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChhQ29udHJvbElkc1swXSkgYXMgQ29udHJvbDtcblx0XHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9XG5cdFx0XHRcdFx0b0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2dcblx0XHRcdFx0XHRcdD8gKGVycm9yRmllbGRDb250cm9sLmdldFBhcmVudCgpIGFzIENvbnRyb2wpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdGFGaWx0ZXJzLnB1c2goaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyKTtcblx0fSBlbHNlIHtcblx0XHQvLyBvbmx5IHVuYm91bmQgbWVzc2FnZXMgaGF2ZSB0byBiZSBzaG93biBzbyBhZGQgZmlsdGVyIGFjY29yZGluZ2x5XG5cdFx0YUZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIlxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlclxuXHRcdFx0XHRdLFxuXHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXHRpZiAoYUN1c3RvbU1lc3NhZ2VzICYmIGFDdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhQ3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IEN1c3RvbU1lc3NhZ2UpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGNvbnN0IGJIYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIikge1xuXHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0fVxuXHRsZXQgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdGxldCBhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10gPSBbXTtcblx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8ICghc2hvd01lc3NhZ2VCb3ggJiYgIW9uQmVmb3JlU2hvd01lc3NhZ2UpKSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblxuXHRcdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdGFDdXJyZW50Q29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudENvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0YU1lc3NhZ2VzLnB1c2gob01lc3NhZ2UpO1xuXHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgZXhpc3RpbmdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gYU1lc3NhZ2VEYXRhTGlzdC5jb25jYXQoZXhpc3RpbmdNZXNzYWdlcykuZmlsdGVyKGZ1bmN0aW9uIChvYmo6IE1lc3NhZ2UpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmdldElkKCldICYmIChvVW5pcXVlT2JqW29iai5nZXRJZCgpXSA9IHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1vZGVsRGF0YUFycmF5KTtcblx0XHR9XG5cdH1cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7IHNob3dNZXNzYWdlQm94LCBzaG93TWVzc2FnZURpYWxvZyB9O1xuXHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IG9uQmVmb3JlU2hvd01lc3NhZ2UoYVRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRzaG93TWVzc2FnZUJveCA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZUJveDtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZURpYWxvZztcblx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cgfHwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykge1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgPyBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZmlsdGVyZWRNZXNzYWdlcyA6IGFNb2RlbERhdGFBcnJheTtcblx0XHR9XG5cdH1cblx0aWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFhQ3VzdG9tTWVzc2FnZXMgJiYgIWJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyB0cmFuc2llbnQgbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9IGVsc2UgaWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFhQ3VzdG9tTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0TWVzc2FnZSgpKTtcblx0XHRcdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYVRyYW5zaXRpb25NZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nICYmIGFNb2RlbERhdGFBcnJheS5sZW5ndGgpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShhTW9kZWxEYXRhQXJyYXksIGNvbnRyb2wsIHNBY3Rpb25OYW1lLCB2aWV3VHlwZSk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7IC8vIHNldCB0aGUgbWVzc2FnZXMgaGVyZSBzbyB0aGF0IGlmIGFueSBvZiB0aGVtIGFyZSBmaWx0ZXJlZCBmb3IgQVBELCB0aGV5IGFyZSBmaWx0ZXJlZCBoZXJlIGFzIHdlbGwuXG5cdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBhUmVzb2x2ZUZ1bmN0aW9ucyB8fCBbXTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8RGlhbG9nPihmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBEaWFsb2cpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCkuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUhKG9NZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdFx0Y29uc3Qgb1NvcnRlciA9IG5ldyBTb3J0ZXIoXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIChvYmoxOiBNZXNzYWdlLCBvYmoyOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0XHRcdGNvbnN0IHJhbmtCID0gZ2V0TWVzc2FnZVJhbmsob2JqMik7XG5cblx0XHRcdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdH0pO1xuXG5cdFx0XHQob01lc3NhZ2VPYmplY3Qub01lc3NhZ2VWaWV3LmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5zb3J0KG9Tb3J0ZXIpO1xuXG5cdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0b0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpXG5cdFx0XHRcdFx0PyBvRGlhbG9nXG5cdFx0XHRcdFx0OiBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhUmVzb2x2ZUZ1bmN0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICB9KTtcblx0XHRcdG9EaWFsb2cucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0b0RpYWxvZy5hZGRDb250ZW50KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyk7XG5cblx0XHRcdGlmIChiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vQnV0dG9uVHlwZVwiXSwgZnVuY3Rpb24gKEJ1dHRvblR5cGVUeXBlOiB0eXBlb2YgQnV0dG9uVHlwZSkge1xuXHRcdFx0XHRcdG9EaWFsb2cuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZVR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHR9XG5cdFx0XHRzSGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG9NZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0b0RpYWxvZy5zZXRTdGF0ZShzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdCgob0RpYWxvZy5nZXRDdXN0b21IZWFkZXIoKSBhcyBCYXIpLmdldENvbnRlbnRNaWRkbGUoKVswXSBhcyBUZXh0KS5zZXRUZXh0KHNIaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0aWYgKGJPbmx5Rm9yVGVzdCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRyZXNvbHZlKG9EaWFsb2cpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFUcmFuc2l0aW9uTWVzc2FnZXNbMF07XG5cdFx0XHRjb25zdCBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0KG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzICYmICFhTWVzc2FnZUxpc3QuaW5jbHVkZXMobWVzc2FnZVRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlPy5tZXNzYWdlKSkgfHxcblx0XHRcdFx0KHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGlmIChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyAmJiAoIXNob3dNZXNzYWdlUGFyYW1ldGVycyB8fCAhc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykpIHtcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2U/Lm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZSwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgPGg2PiR7cmV0cnlBZnRlck1lc3NhZ2V9PC9oNj48YnI+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VQYXJhbWV0ZXJzICYmIHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZSkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9NZXNzYWdlLmdldENvZGUoKSAhPT0gXCI1MDNcIiAmJiBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCl9OiAke29NZXNzYWdlLmdldE1lc3NhZ2UoKX08L2h0bWw+PC9ib2R5PmA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCBhcyB1bmtub3duIGFzIHN0cmluZywge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ3JvdXAgbmFtZSBmb3IgYWxsIG1lc3NhZ2VzIGluIGEgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVMUlRhYmxlKGNvbnRyb2wsIGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAodmlld1R5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdC8vIE9QIERpc3BsYXkgbW9kZVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSwgY29udHJvbCBhcyBWaWV3KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtIGFzIE1EQ1RhYmxlLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgTURDVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0uZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRvRWxlbS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKG9FbGVtZW50LmlzQTxUYWJsZT4oXCJzYXAubS5UYWJsZVwiKSB8fCBvRWxlbWVudC5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKT8uZ2V0UGF0aCgpfWA7XG5cdFx0XHRcdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkVGFibGVFbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0b1Jvd0JpbmRpbmcsXG5cdFx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCxcblx0XHRcdFx0XHRcdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgb1RhcmdldFRhYmxlSW5mbyB9ID0gb2JqO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNldFNlY3Rpb25OYW1lSW5Hcm91cCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpZGVudGlmaWVyQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gb0VsZW0uZ2V0Um93QmluZGluZygpLmdldENvbnRleHRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImFkZGl0aW9uYWxUZXh0XCJdID0gYCR7cm93SWRlbnRpZmllcn0sICR7b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVyTmFtZSA9IG9FbGVtLmdldEhlYWRlclZpc2libGUoKSAmJiBvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFoZWFkZXJOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBvU3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVyTmFtZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtoZWFkZXJOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgT1AgY29udGV4dCBwYXRoIGlzIHBhcnQgb2YgdGFyZ2V0LCBzZXQgTGFzdCBBY3Rpb24gYXMgZ3JvdXAgbmFtZVxuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRjb25zdCBzTGFzdEFjdGlvblRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cdHJldHVybiBzQWN0aW9uTmFtZSA/IGAke3NMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCA6IFwiXCI7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgcmFuayBiYXNlZCBvbiBNZXNzYWdlIEdyb3VwL0hlYWRlciBuYW1lLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIFNvcnRpbmcgbWVzc2FnZXMgaW4gTWVzc2FnZSBkaWFsb2dcbiAqIExhc3QgQWN0aW9uIHNob3VsZCBiZSBzaG93biBhdCB0b3AsIG5leHQgUm93IElkIGFuZCBsYXN0IEdlbmVyYWwuXG4gKlxuICogQHBhcmFtIG9ialxuICogQHJldHVybnMgUmFuayBvZiBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VSYW5rKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpOiBudW1iZXIge1xuXHRpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJMYXN0IEFjdGlvblwiKSkge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiR2VuZXJhbFwiKSkge1xuXHRcdHJldHVybiAzO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAyO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSB3aGljaCBjYW4gZWl0aGVyIEdlbmVyYWwgb3IgTGFzdCBBY3Rpb24uXG4gKlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICpcbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9FbGVtZW50XG4gKiBAcGFyYW0gb1Jvd0JpbmRpbmdcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIHNldFNlY3Rpb25OYW1lSW5Hcm91cFxuICogQHBhcmFtIGZuU2V0R3JvdXBOYW1lXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIGFuZCBTdWJ0aXRsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0Zm5TZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG4pOiB7IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7IHN1YlRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIH0ge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0YklzQ3JlYXRpb25Sb3cgPSBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2wpO1xuXHR9XG5cblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHQvLyBpZiB0aGUgY29sdW1uIGlzIG5vdCBwcmVzZW50IG9uIFVJIG9yIHRoZSB0YXJnZXQgZG9lcyBub3QgaGF2ZSBhIHRhYmxlIGZpZWxkIGluIGl0LCB1c2UgTGFzdCBBY3Rpb24gZm9yIGdyb3VwaW5nXG5cdFx0aWYgKGFNZXNzYWdlLmdldFBlcnNpc3RlbnQoKSAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbE5hbWVcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBiSXNDcmVhdGlvblJvd1xuICogQHBhcmFtIG9UYXJnZXRlZENvbnRyb2xcbiAqIEByZXR1cm5zIE1lc3NhZ2Ugc3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VTdWJ0aXRsZShcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0b1RhcmdldGVkQ29udHJvbD86IENvbnRyb2xcbik6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRsZXQgc01lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHNSb3dTdWJ0aXRsZVZhbHVlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvVGFibGUpO1xuXHRjb25zdCBzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0Y29uc3Qgb0NvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtZXNzYWdlLCBvVGFibGUpO1xuXHRpZiAoYklzQ3JlYXRpb25Sb3cgfHwgb1RhYmxlUm93Q29udGV4dD8uaXNJbmFjdGl2ZSgpKSB7XG5cdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtcblx0XHRcdHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFX0NSRUFUSU9OX1JPV19JTkRJQ0FUT1JcIiksXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID8gc1RhYmxlVGFyZ2V0Q29sTmFtZSA6IChvQ29sRnJvbVRhYmxlU2V0dGluZ3MgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5sYWJlbFxuXHRcdF0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdG9UYWJsZSxcblx0XHRcdG9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCBzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCA9IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyBvVGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoICYmIG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gc2V0IFJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0XHRpZiAob1RhcmdldGVkQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgVUkgZXJyb3IgaXMgb24gdGhlIGZpcnN0IGNvbHVtbiwgd2UgdGhlbiBnZXQgdGhlIGNvbnRyb2wgaW5wdXQgYXMgdGhlIHJvdyBpbmRpY2F0b3I6XG5cdFx0XHRcdHNSb3dTdWJ0aXRsZVZhbHVlID0gKG9UYXJnZXRlZENvbnRyb2wgYXMgRmllbGRBUEkpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sVmFsdWUoXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdC8vIHNldCB0aGUgbWVzc2FnZSBzdWJ0aXRsZVxuXHRcdFx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0gbWVzc2FnZUhhbmRsaW5nLmRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbc1Jvd1N1YnRpdGxlVmFsdWUsIHNUYWJsZVRhcmdldENvbE5hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW1xuXHRcdFx0XHRcdHNSb3dTdWJ0aXRsZVZhbHVlXG5cdFx0XHRcdF0pfSwgJHtvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWV9YDtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtzUm93U3VidGl0bGVWYWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbc1Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIHNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIikgKyBcIjogXCIgKyBzVGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gb0NvbHVtbkluZm8uc0NvbHVtblZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzTWVzc2FnZVN1YnRpdGxlO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGZpcnN0IGNvbHVtbiBmb3IgdGV4dCBBbm5vdGF0aW9uLCB0aGlzIGlzIG5lZWRlZCB0byBzZXQgc3VidGl0bGUgb2YgTWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIEJpbmRpbmcgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmdcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9CaW5kaW5nQ29udGV4dDtcblx0aWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9UYWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aChvVGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0aWYgKG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHQvJFBhdGhgKSkge1xuXHRcdFx0b0JpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9CaW5kaW5nQ29udGV4dDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB2YWx1ZSBvZiBmaXJzdCBDb2x1bW4gb2YgVGFibGUsIHdpdGggaXRzIHRleHQgQXJyYW5nZW1lbnQuXG4gKlxuICogQHBhcmFtIHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcbiAqIEBwYXJhbSBvVGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gc1RleHRBbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIHNUZXh0QXJyYW5nZW1lbnRcbiAqIEByZXR1cm5zIENvbHVtbiBWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVGaXJzdENvbFZhbHVlKFxuXHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdG9UYWJsZVJvd0NvbnRleHQ6IENvbnRleHQsXG5cdHNUZXh0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRjb25zdCBzQ29kZVZhbHVlID0gb1RhYmxlUm93Q29udGV4dC5nZXRPYmplY3Qoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdGxldCBzVGV4dFZhbHVlO1xuXHRsZXQgc0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRpZiAoc1RleHRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdGlmIChzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGV4dCBhbm5vdGF0aW9uIHBhdGhcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGFibGVGaXJzdENvbFByb3BlcnR5LnNsaWNlKDAsIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5jb25jYXQoc1RleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGV4dEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRzVGV4dFZhbHVlID0gb1RhYmxlUm93Q29udGV4dC5nZXRPYmplY3Qoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdFx0aWYgKHNUZXh0VmFsdWUpIHtcblx0XHRcdGlmIChzVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHRcdGNvbnN0IHNFbnVtTnVtYmVyID0gc1RleHRBcnJhbmdlbWVudC5zbGljZShzVGV4dEFycmFuZ2VtZW50LmluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdHN3aXRjaCAoc0VudW1OdW1iZXIpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGV4dE9ubHlcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gc1RleHRWYWx1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0Rmlyc3RcIjpcblx0XHRcdFx0XHRcdHNDb21wdXRlZFZhbHVlID0gYCR7c1RleHRWYWx1ZX0gKCR7c0NvZGVWYWx1ZX0pYDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0TGFzdFwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzQ29kZVZhbHVlfSAoJHtzVGV4dFZhbHVlfSlgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRTZXBhcmF0ZVwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzVGV4dFZhbHVlfSAoJHtzQ29kZVZhbHVlfSlgO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0NvbXB1dGVkVmFsdWU7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKlxuICogQHBhcmFtIG9NZXNzYWdlIE1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0gb1RhYmxlIE1kY1RhYmxlXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb2x1bW4gaW5mby5cbiAqL1xuZnVuY3Rpb24gZmV0Y2hDb2x1bW5JbmZvKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBNRENUYWJsZSk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc0NvbE5hbWVGcm9tTWVzc2FnZU9iaiA9IG9NZXNzYWdlPy5nZXRUYXJnZXRzKClbMF0uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRyZXR1cm4gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIG9Db2x1bW4ua2V5LnNwbGl0KFwiOjpcIikucG9wKCkgPT09IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmo7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBDb2x1bW4gZGF0YSBkZXBlbmRpbmcgb24gaXRzIGF2YWlsYWJpbGl0eSBpbiBUYWJsZSwgdGhpcyBpcyBuZWVkZWQgZm9yIHNldHRpbmcgc3VidGl0bGUgb2YgTWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc0NvbnRyb2xJZFxuICogQHJldHVybnMgVHJ1ZSBpZiBjb250cm9sIGlzIHBhcnQgb2YgdGFibGUuXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEluVGFibGUob1RhYmxlOiBNRENUYWJsZSwgc0NvbnRyb2xJZDogc3RyaW5nKTogVUk1RWxlbWVudFtdIHwgYm9vbGVhbiB7XG5cdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0aWYgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikgJiYgIW9Db250cm9sLmlzQTxUYWJsZT4oXCJzYXAubS5UYWJsZVwiKSkge1xuXHRcdHJldHVybiBvVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sLmdldElkKCk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRsZXQgb1BhcmVudENvbnRyb2wgPSBvQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdHdoaWxlIChcblx0XHRvUGFyZW50Q29udHJvbCAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAubS5Db2x1bW5MaXN0SXRlbVwiKVxuXHQpIHtcblx0XHRvUGFyZW50Q29udHJvbCA9IG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cblx0cmV0dXJuICEhb1BhcmVudENvbnRyb2wgJiYgb1BhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyhzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyh0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWw6IE1lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoLFxuXHRcdFx0dmFsdWUxOiBzUGF0aFRvQmVSZW1vdmVkXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSBiQm91bmRNZXNzYWdlcyBUbyBnZXQgb25seSBib3VuZCBtZXNzYWdlc1xuICogQHBhcmFtIGJUcmFuc2l0aW9uT25seSBUbyBnZXQgb25seSB0cmFuc2l0aW9uIG1lc3NhZ2VzXG4gKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZCBGaWx0ZXIgb3V0IGJvdW5kIG1lc3NhZ2VzIHdpdGggcGF0aFxuICogQHJldHVybnMgTWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMgPSBmYWxzZSwgYlRyYW5zaXRpb25Pbmx5ID0gZmFsc2UsIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiBNZXNzYWdlW10ge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBbXTtcblx0bGV0IGFNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdGlmIChiQm91bmRNZXNzYWdlcyAmJiBiVHJhbnNpdGlvbk9ubHkgJiYgc1BhdGhUb0JlUmVtb3ZlZCkge1xuXHRcdGFNZXNzYWdlcyA9IGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZXMgPSBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdCghYlRyYW5zaXRpb25Pbmx5IHx8IGFNZXNzYWdlc1tpXS5nZXRQZXJzaXN0ZW50KCkpICYmXG5cdFx0XHQoKGJCb3VuZE1lc3NhZ2VzICYmIGFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gIT09IFwiXCIpIHx8XG5cdFx0XHRcdCghYkJvdW5kTWVzc2FnZXMgJiYgKCFhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdIHx8IGFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gPT09IFwiXCIpKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpICE9PSBcIlwiICYmXG5cdFx0XHQhYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkuaW5jbHVkZXMob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5zZXRNZXNzYWdlKFxuXHRcdFx0XHRgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHthVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKX1gXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHQvL0ZpbHRlcmluZyBtZXNzYWdlcyBhZ2FpbiBoZXJlIHRvIGF2b2lkIHNob3dpbmcgcHVyZSB0ZWNobmljYWwgbWVzc2FnZXMgcmFpc2VkIGJ5IHRoZSBtb2RlbFxuXHRjb25zdCBiYWNrZW5kTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuZmlsdGVyKGlzTm9uVGVjaG5pY2FsTWVzc2FnZSk7XG5cblx0cmV0dXJuIGJhY2tlbmRNZXNzYWdlcztcbn1cbmV4cG9ydCB0eXBlIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRvcmlnaW5hbE1lc3NhZ2U/OiB7XG5cdFx0bWVzc2FnZT86IHN0cmluZztcblx0fSB8IG51bGw7XG5cdGh0dHBTdGF0dXM/OiBudW1iZXIgfCBudWxsO1xuXHRyZXRyeUFmdGVyPzogRGF0ZTtcblx0aXNDb25jdXJyZW50TW9kaWZpY2F0aW9uPzogYm9vbGVhbjtcbn07XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgYU1lc3NhZ2VzVG9CZURlbGV0ZWQgPSBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcywgdHJ1ZSwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cblx0aWYgKGFNZXNzYWdlc1RvQmVEZWxldGVkLmxlbmd0aCA+IDApIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzVG9CZURlbGV0ZWQpO1xuXHR9XG59XG4vL1RPRE86IFRoaXMgbXVzdCBiZSBtb3ZlZCBvdXQgb2YgbWVzc2FnZSBoYW5kbGluZ1xuZnVuY3Rpb24gc2V0TWVzc2FnZVN1YnRpdGxlKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcik6IHZvaWQge1xuXHRpZiAobWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3Qgc3VidGl0bGVDb2x1bW4gPSAob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRcdGNvbnN0IGVycm9yQ29udGV4dCA9IGFDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLmluY2x1ZGVzKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fSk7XG5cdFx0bWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9IGVycm9yQ29udGV4dCA/IGVycm9yQ29udGV4dC5nZXRPYmplY3QoKVtzdWJ0aXRsZUNvbHVtbl0gOiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHJldHJpZXZlcyB0aGUgdmlzaWJsZSBzZWN0aW9ucyBmcm9tIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvT2JqZWN0UGFnZUxheW91dCBUaGUgb2JqZWN0UGFnZUxheW91dCBvYmplY3QgZm9yIHdoaWNoIHdlIHdhbnQgdG8gcmV0cmlldmUgdGhlIHZpc2libGUgc2VjdGlvbnMuXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2aXNpYmxlIHNlY3Rpb25zLlxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCB8IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0cmV0dXJuIChvT2JqZWN0UGFnZUxheW91dCBhcyBPYmplY3RQYWdlTGF5b3V0KS5nZXRTZWN0aW9ucygpLmZpbHRlcihmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0cmV0dXJuIG9TZWN0aW9uLmdldFZpc2libGUoKTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgY29udHJvbCBpZHMgZnJvbSBtZXNzYWdlIGFyZSBhIHBhcnQgb2YgYSBnaXZlbiBzdWJzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIENvbHVtbiBuYW1lIGFuZCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2xJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHtcblx0bGV0IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1RhYmxlVGFyZ2V0Q29sOiBDb2x1bW4gfCB1bmRlZmluZWQgPSBvVGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdHJldHVybiBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSA9PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0fSk7XG5cdGlmICghb1RhYmxlVGFyZ2V0Q29sKSB7XG5cdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBjdXN0b20gY29sdW1uICovXG5cdFx0Y29uc3Qgb0N1c3RvbUNvbHVtbiA9IChvVGFibGUuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIFRhYmxlRGVsZWdhdGUpLmdldENvbHVtbnNGb3Iob1RhYmxlKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdG9Db2x1bW46IFRhYmxlQ29sdW1uXG5cdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoISEob0NvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uKS50ZW1wbGF0ZSAmJiBvQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0gPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IHx8XG5cdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zWzBdLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9DdXN0b21Db2x1bW4pIHtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gb0N1c3RvbUNvbHVtbj8ubmFtZTtcblxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVxuXHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID09PSBvQ29sdW1uLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdD8uZ2V0SGVhZGVyKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIElmIHRoZSB0YXJnZXQgY29sdW1uIGlzIG5vdCBmb3VuZCwgd2UgY2hlY2sgZm9yIGEgZmllbGQgZ3JvdXAgKi9cblx0XHRcdGNvbnN0IGFDb2x1bW5zID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpO1xuXHRcdFx0Y29uc3QgY29sdW1uRGVmaW5pdGlvbiA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IFRhYmxlQ29sdW1uKSB7XG5cdFx0XHRcdGlmIChvQ29sdW1uLmtleS5pbmNsdWRlcyhcIjo6RmllbGRHcm91cDo6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW4ucHJvcGVydHlJbmZvcz8uZmluZChmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHwgcHJvcGVydHlJbmZvLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0LyogY2hlY2sgaWYgdGhlIGNvbHVtbiB3aXRoIHRoZSBmaWVsZCBncm91cCBpcyB2aXNpYmxlIGluIHRoZSB0YWJsZTogKi9cblx0XHRcdGxldCBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBmYWxzZTtcblx0XHRcdGlmIChjb2x1bW5EZWZpbml0aW9uICYmIGNvbHVtbkRlZmluaXRpb24ubGFiZWwpIHtcblx0XHRcdFx0YklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gb1RhYmxlLmdldENvbHVtbnMoKS5zb21lKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRcdFx0XHRyZXR1cm4gY29sdW1uLmdldEhlYWRlcigpID09PSBjb2x1bW5EZWZpbml0aW9uLmxhYmVsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5sYWJlbCA6IHVuZGVmaW5lZDtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID8gY29sdW1uRGVmaW5pdGlvbj8ua2V5IDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlVGFyZ2V0Q29sLmdldEhlYWRlcigpO1xuXHR9XG5cdHJldHVybiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHNUYWJsZVRhcmdldENvbE5hbWUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgVGFibGUgYW5kIGNvbHVtbiBpbmZvIGlmIGFueSBvZiBpdCBtYXRjaGVzIHRoZSB0YXJnZXQgZnJvbSBNZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvTWVzc2FnZU9iamVjdFxuICogQHBhcmFtIG9FbGVtZW50XG4gKiBAcGFyYW0gb1Jvd0JpbmRpbmdcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gbWF0Y2hpbmcgdGhlIG1lc3NhZ2UgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFuZFRhcmdldEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcixcblx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG4pOiBUYXJnZXRUYWJsZUluZm9UeXBlIHtcblx0Y29uc3Qgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBnZXRUYWJsZUNvbFByb3BlcnR5KG9UYWJsZSwgb01lc3NhZ2VPYmplY3QpO1xuXHRjb25zdCBvVGFibGVDb2xJbmZvID0gZ2V0VGFibGVDb2xJbmZvKG9UYWJsZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkpO1xuXHRjb25zdCBvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMgPSBvRWxlbWVudD8uaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpXG5cdFx0PyAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q29udGV4dHMoKVxuXHRcdDogKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHksXG5cdFx0b1RhYmxlUm93Q29udGV4dDogb1RhYmxlUm93QmluZGluZ0NvbnRleHRzLmZpbmQoZnVuY3Rpb24gKHJvd0NvbnRleHQpIHtcblx0XHRcdHJldHVybiByb3dDb250ZXh0ICYmIG9NZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5pbmRleE9mKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSA9PT0gMDtcblx0XHR9KVxuXHR9O1xuXHRyZXR1cm4gb1RhcmdldFRhYmxlSW5mbztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGFDb250cm9sSWRzXG4gKiBAcGFyYW0gb0l0ZW1cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGl0ZW0gbWF0Y2hlcyBvbmUgb2YgdGhlIGNvbnRyb2xzXG4gKi9cbmZ1bmN0aW9uIGZuRmlsdGVyVXBvbklkcyhhQ29udHJvbElkczogc3RyaW5nW10sIG9JdGVtOiBVSTVFbGVtZW50KTogYm9vbGVhbiB7XG5cdHJldHVybiBhQ29udHJvbElkcy5zb21lKGZ1bmN0aW9uIChzQ29udHJvbElkKSB7XG5cdFx0aWYgKHNDb250cm9sSWQgPT09IG9JdGVtLmdldElkKCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGdyb3VwIG5hbWUgaGF2aW5nIHNlY3Rpb24gYW5kIHN1YnNlY3Rpb24gZGF0YS5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlclxuXHRcdFx0PyBgLCAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7b1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcn1gXG5cdFx0XHQ6IFwiXCIpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGJJc09ycGhhbkVsZW1lbnQob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKTogYm9vbGVhbiB7XG5cdHJldHVybiAhYUVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50ICE9PSBvRWxlbSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IHNob3dVbmJvdW5kTWVzc2FnZXMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nLFxuXHRzZXRNZXNzYWdlU3VidGl0bGU6IHNldE1lc3NhZ2VTdWJ0aXRsZSxcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0LFxuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24sXG5cdGZuRmlsdGVyVXBvbklkczogZm5GaWx0ZXJVcG9uSWRzLFxuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IGdldFRhYmxlQW5kVGFyZ2V0SW5mbyxcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSxcblx0YklzT3JwaGFuRWxlbWVudDogYklzT3JwaGFuRWxlbWVudCxcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUsXG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUsXG5cdGdldFRhYmxlQ29sSW5mbzogZ2V0VGFibGVDb2xJbmZvLFxuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiBnZXRUYWJsZUNvbFByb3BlcnR5LFxuXHRnZXRNZXNzYWdlU3VidGl0bGU6IGdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogZGV0ZXJtaW5lQ29sdW1uSW5mbyxcblx0ZmV0Y2hDb2x1bW5JbmZvOiBmZXRjaENvbHVtbkluZm8sXG5cdGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiBnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbixcblx0Z2V0TWVzc2FnZVJhbms6IGdldE1lc3NhZ2VSYW5rLFxuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lLFxuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IGdldFRhYmxlRmlyc3RDb2xWYWx1ZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBOENBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUFXO0VBQ3ZDLElBQUlFLFlBQXVCLEdBQUcsRUFBRTtFQUNoQyxJQUFJQyxnQkFBMkIsR0FBRyxFQUFFO0VBQ3BDLElBQUlDLGlCQUE2QixHQUFHLEVBQUU7RUFDdEMsSUFBSUMsT0FBZTtFQUNuQixJQUFJQyxXQUFtQjtFQUN2QixJQUFJQyxZQUF5QjtFQXdIN0IsU0FBU0Msd0JBQXdCLEdBQVc7SUFDM0MsSUFBSUMsa0JBQTBCOztJQUU5QjtJQUNBLFNBQVNDLFlBQVksQ0FBQ0MsU0FBa0QsRUFBVTtNQUNqRixPQUFPQSxTQUFTLENBQUNDLFFBQVEsR0FDdEIsTUFBTSxHQUNORCxTQUFTLENBQUNDLFFBQVEsR0FDbEIsV0FBVyxHQUNYRCxTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0osU0FBUyxDQUFDQyxRQUFRLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRUwsU0FBUyxDQUFDQyxRQUFRLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNwSCxTQUFTLEdBQ1QsSUFBSSxHQUNKTCxTQUFTLENBQUNDLFFBQVEsR0FDbEIsb0JBQW9CLEdBQ3BCLEVBQUU7SUFDTjtJQUNBO0lBQ0EsU0FBU0ssZUFBZSxDQUFDTixTQUFrRCxFQUFVO01BQ3BGLElBQUlPLEtBQUssR0FBRyxFQUFFO01BQ2QsSUFBSVAsU0FBUyxDQUFDUSxTQUFTLElBQUlSLFNBQVMsQ0FBQ0MsUUFBUSxJQUFJRCxTQUFTLENBQUNRLFNBQVMsS0FBS1Ysa0JBQWtCLEVBQUU7UUFDNUZTLEtBQUssSUFBSSxNQUFNLEdBQUdQLFNBQVMsQ0FBQ0MsUUFBUSxHQUFHLGVBQWUsR0FBR0QsU0FBUyxDQUFDUSxTQUFTLEdBQUcsa0JBQWtCO1FBQ2pHVixrQkFBa0IsR0FBR0UsU0FBUyxDQUFDUSxTQUFTO01BQ3pDO01BQ0EsT0FBT0QsS0FBSztJQUNiOztJQUVBO0lBQ0EsU0FBU0UsUUFBUSxHQUE4QztNQUM5RCxNQUFNQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztNQUNoQyxPQUFPLENBQ047UUFBRUYsU0FBUyxFQUFFLEVBQUU7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBUyxDQUFDLEVBQzVDO1FBQUVGLFNBQVMsRUFBRSxFQUFFO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQWEsQ0FBQyxFQUNoRDtRQUFFRixTQUFTLEVBQUUsYUFBYTtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUE2QyxDQUFDLEVBQzNGO1FBQUVGLFNBQVMsRUFBRSxhQUFhO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQTJDLENBQUMsRUFDekY7UUFBRUYsU0FBUyxFQUFFLGFBQWE7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBbUQsQ0FBQyxFQUNqRztRQUFFRixTQUFTLEVBQUUsYUFBYTtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUFnRCxDQUFDLEVBQzlGO1FBQUVGLFNBQVMsRUFBRSxpQkFBaUI7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBOEMsQ0FBQyxFQUNoRztRQUFFRixTQUFTLEVBQUUsaUJBQWlCO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQTBDLENBQUMsRUFDNUY7UUFBRUYsU0FBUyxFQUFFLGlCQUFpQjtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUFrRCxDQUFDLEVBQ3BHO1FBQUVGLFNBQVMsRUFBRSxpQkFBaUI7UUFBRVAsUUFBUSxFQUFHLEdBQUVTLEdBQUk7TUFBdUMsQ0FBQyxFQUN6RjtRQUFFRixTQUFTLEVBQUUsaUJBQWlCO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQStCLENBQUMsRUFDakY7UUFBRUYsU0FBUyxFQUFFLGlCQUFpQjtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUFtQyxDQUFDLEVBQ3JGO1FBQUVGLFNBQVMsRUFBRSxVQUFVO1FBQUVQLFFBQVEsRUFBRyxHQUFFUyxHQUFJO01BQWEsQ0FBQyxFQUN4RDtRQUFFRixTQUFTLEVBQUUsVUFBVTtRQUFFUCxRQUFRLEVBQUcsR0FBRVMsR0FBSTtNQUFnQixDQUFDLENBQzNEO0lBQ0Y7SUFFQSxJQUFJSCxLQUFLLEdBQUcsY0FBYyxHQUFHLHFCQUFxQixHQUFHLG1EQUFtRDtJQUN4R0UsUUFBUSxFQUFFLENBQUNFLE9BQU8sQ0FBQyxVQUFVWCxTQUFrRCxFQUFFO01BQ2hGTyxLQUFLLEdBQUksR0FBRUEsS0FBSyxHQUFHRCxlQUFlLENBQUNOLFNBQVMsQ0FBRSxHQUFFRCxZQUFZLENBQUNDLFNBQVMsQ0FBRSxLQUFJO0lBQzdFLENBQUMsQ0FBQztJQUNGLE9BQU9PLEtBQUs7RUFDYjtFQUNBLFNBQVNLLG1CQUFtQixHQUFXO0lBQ3RDLE9BQU8sS0FBSyxHQUFHLG9CQUFvQixHQUFHLHFCQUFxQjtFQUM1RDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLDJCQUEyQixDQUFDQyxTQUF3QixFQUF1QjtJQUNuRixJQUFJQyxnQkFBZ0IsR0FBRzFCLFdBQVcsQ0FBQzJCLElBQUk7SUFDdkMsTUFBTUMsT0FBTyxHQUFHSCxTQUFTLENBQUNJLE1BQU07SUFDaEMsTUFBTUMsYUFBYSxHQUFHO01BQUVDLEtBQUssRUFBRSxDQUFDO01BQUVDLE9BQU8sRUFBRSxDQUFDO01BQUVDLE9BQU8sRUFBRSxDQUFDO01BQUVDLFdBQVcsRUFBRTtJQUFFLENBQUM7SUFFMUUsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdQLE9BQU8sRUFBRU8sQ0FBQyxFQUFFLEVBQUU7TUFDakMsRUFBRUwsYUFBYSxDQUFDTCxTQUFTLENBQUNVLENBQUMsQ0FBQyxDQUFDQyxPQUFPLEVBQUUsQ0FBK0I7SUFDdEU7SUFDQSxJQUFJTixhQUFhLENBQUM5QixXQUFXLENBQUMrQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDekNMLGdCQUFnQixHQUFHMUIsV0FBVyxDQUFDK0IsS0FBSztJQUNyQyxDQUFDLE1BQU0sSUFBSUQsYUFBYSxDQUFDOUIsV0FBVyxDQUFDZ0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2xETixnQkFBZ0IsR0FBRzFCLFdBQVcsQ0FBQ2dDLE9BQU87SUFDdkMsQ0FBQyxNQUFNLElBQUlGLGFBQWEsQ0FBQzlCLFdBQVcsQ0FBQ2lDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNsRFAsZ0JBQWdCLEdBQUcxQixXQUFXLENBQUNpQyxPQUFPO0lBQ3ZDLENBQUMsTUFBTSxJQUFJSCxhQUFhLENBQUM5QixXQUFXLENBQUNrQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDdERSLGdCQUFnQixHQUFHMUIsV0FBVyxDQUFDa0MsV0FBVztJQUMzQztJQUNBLE9BQU9SLGdCQUFnQjtFQUN4QjtFQUNBO0VBQ0E7RUFDQSxTQUFTVyx3QkFBd0IsQ0FBQ0MsZUFBK0IsRUFBRUMsa0JBQXVDLEVBQVc7SUFDcEgsTUFBTWQsU0FBUyxHQUFHZSxTQUFTLENBQUNDLGVBQWUsRUFBRSxDQUFDQyxTQUFTLENBQUMsR0FBRyxDQUFDO0lBQzVELElBQUlDLGlCQUFpQixHQUFHLEtBQUs7SUFDN0IsSUFBSUMsWUFBWSxHQUFHLEVBQUU7SUFDckJuQixTQUFTLENBQUNILE9BQU8sQ0FBQyxVQUFVdUIsUUFBaUIsRUFBRVYsQ0FBUyxFQUFFO01BQ3pELE1BQU1XLGlCQUFpQixHQUFHRCxRQUFRLENBQUNFLG1CQUFtQixJQUFLRixRQUFRLENBQUNFLG1CQUFtQixFQUE4QjtNQUNySCxJQUFJRCxpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNFLFVBQVUsS0FBSyxHQUFHLElBQUlGLGlCQUFpQixDQUFDRyx3QkFBd0IsRUFBRTtRQUM1RyxJQUFJVixrQkFBa0IsRUFBRTtVQUN2QkssWUFBWSxHQUNYQSxZQUFZLElBQUlOLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLHFFQUFxRSxDQUFDO1FBQ2hILENBQUMsTUFBTTtVQUNOTixZQUFZLEdBQUdBLFlBQVksSUFBSU4sZUFBZSxDQUFDWSxPQUFPLENBQUMsNkNBQTZDLENBQUM7UUFDdEc7UUFDQVYsU0FBUyxDQUFDVyxjQUFjLENBQUMxQixTQUFTLENBQUNVLENBQUMsQ0FBQyxDQUFDO1FBQ3RDVSxRQUFRLENBQUNPLFVBQVUsQ0FBQ1IsWUFBWSxDQUFDO1FBQ2pDQyxRQUFRLENBQUNRLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCYixTQUFTLENBQUNjLFdBQVcsQ0FBQ1QsUUFBUSxDQUFDO1FBQy9CRixpQkFBaUIsR0FBRyxJQUFJO01BQ3pCO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YsT0FBT0EsaUJBQWlCO0VBQ3pCO0VBQ0E7RUFDQSxTQUFTWSxrQkFBa0IsR0FBUztJQUNuQ2xELE9BQU8sQ0FBQ21ELEtBQUssRUFBRTtJQUNmbEQsV0FBVyxDQUFDbUQsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUM3QnZELFlBQVksR0FBRyxFQUFFO0lBQ2pCLE1BQU13RCxtQkFBbUIsR0FBR25ELFlBQVksQ0FBQ29ELFFBQVEsRUFBMkI7SUFDNUUsSUFBSUQsbUJBQW1CLEVBQUU7TUFDeEJBLG1CQUFtQixDQUFDRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEM7SUFDQUMsK0JBQStCLEVBQUU7RUFDbEM7RUFDQSxTQUFTQyxvQkFBb0IsQ0FBQ2pCLFFBQWlCLEVBQUVrQixjQUF3QixFQUFzQjtJQUM5RixNQUFNQyxJQUFJLEdBQUcsSUFBSUMsSUFBSSxFQUFFO0lBQ3ZCLE1BQU1uQixpQkFBaUIsR0FBR0QsUUFBUSxDQUFDRSxtQkFBbUIsRUFBeUM7SUFDL0YsTUFBTVQsZUFBZSxHQUFHNEIsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7SUFDcEUsSUFBSUMsa0JBQWtCO0lBQ3RCLElBQUl0QixpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNFLFVBQVUsS0FBSyxHQUFHLElBQUlGLGlCQUFpQixDQUFDdUIsVUFBVSxFQUFFO01BQzlGLE1BQU1DLFdBQVcsR0FBR3hCLGlCQUFpQixDQUFDdUIsVUFBVTtNQUNoRCxJQUFJRSxXQUFXO01BQ2YsSUFBSVAsSUFBSSxDQUFDUSxXQUFXLEVBQUUsS0FBS0YsV0FBVyxDQUFDRSxXQUFXLEVBQUUsRUFBRTtRQUNyRDtRQUNBRCxXQUFXLEdBQUdFLFVBQVUsQ0FBQ0MsbUJBQW1CLENBQUM7VUFDNUNDLE9BQU8sRUFBRTtRQUNWLENBQUMsQ0FBQztRQUNGUCxrQkFBa0IsR0FBRzlCLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLG9DQUFvQyxFQUFFLENBQUNxQixXQUFXLENBQUNLLE1BQU0sQ0FBQ04sV0FBVyxDQUFDLENBQUMsQ0FBQztNQUN0SCxDQUFDLE1BQU0sSUFBSU4sSUFBSSxDQUFDUSxXQUFXLEVBQUUsSUFBSUYsV0FBVyxDQUFDRSxXQUFXLEVBQUUsRUFBRTtRQUMzRDtRQUNBLElBQUlULGNBQWMsRUFBRTtVQUNuQjtVQUNBSyxrQkFBa0IsR0FBSSxHQUFFOUIsZUFBZSxDQUFDWSxPQUFPLENBQUMsb0NBQW9DLENBQUUsSUFBR1osZUFBZSxDQUFDWSxPQUFPLENBQy9HLG1DQUFtQyxDQUNsQyxFQUFDO1FBQ0osQ0FBQyxNQUFNLElBQUljLElBQUksQ0FBQ2EsUUFBUSxFQUFFLEtBQUtQLFdBQVcsQ0FBQ08sUUFBUSxFQUFFLElBQUliLElBQUksQ0FBQ2MsT0FBTyxFQUFFLEtBQUtSLFdBQVcsQ0FBQ1EsT0FBTyxFQUFFLEVBQUU7VUFDbEdQLFdBQVcsR0FBR0UsVUFBVSxDQUFDQyxtQkFBbUIsQ0FBQztZQUM1Q0MsT0FBTyxFQUFFO1VBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNKUCxrQkFBa0IsR0FBRzlCLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLG9DQUFvQyxFQUFFLENBQUNxQixXQUFXLENBQUNLLE1BQU0sQ0FBQ04sV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDLE1BQU07VUFDTjtVQUNBQyxXQUFXLEdBQUdFLFVBQVUsQ0FBQ0MsbUJBQW1CLENBQUM7WUFDNUNDLE9BQU8sRUFBRTtVQUNWLENBQUMsQ0FBQztVQUNGUCxrQkFBa0IsR0FBRzlCLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLHdDQUF3QyxFQUFFLENBQUNxQixXQUFXLENBQUNLLE1BQU0sQ0FBQ04sV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxSDtNQUNEO0lBQ0Q7SUFFQSxJQUFJeEIsaUJBQWlCLElBQUlBLGlCQUFpQixDQUFDRSxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUNGLGlCQUFpQixDQUFDdUIsVUFBVSxFQUFFO01BQy9GRCxrQkFBa0IsR0FBRzlCLGVBQWUsQ0FBQ1ksT0FBTyxDQUFDLG1EQUFtRCxDQUFDO0lBQ2xHO0lBQ0EsT0FBT2tCLGtCQUFrQjtFQUMxQjtFQUVBLFNBQVNXLDJCQUEyQixDQUNuQ3JCLG1CQUE4QixFQUM5QnNCLG1CQUE0QixFQUM1QkMsUUFBa0IsRUFJakI7SUFDRCxJQUFJQyxnQkFBNkI7SUFDakMsSUFBSSxDQUFDRixtQkFBbUIsRUFBRTtNQUN6QixNQUFNRyxrQkFBa0IsR0FBRyx1Q0FBdUMsR0FBRzVELG1CQUFtQixFQUFFLEdBQUcsNEJBQTRCO01BQ3pILE1BQU02RCx1QkFBdUIsR0FDNUIsNENBQTRDLEdBQUc1RSx3QkFBd0IsRUFBRSxHQUFHLDRCQUE0QjtNQUN6RzBFLGdCQUFnQixHQUFHLElBQUlHLFdBQVcsQ0FBQ0MsU0FBUyxFQUFFO1FBQzdDQyxPQUFPLEVBQUU7VUFBRUMsSUFBSSxFQUFFO1FBQVUsQ0FBQztRQUM1QkMsS0FBSyxFQUFFLFdBQVc7UUFDbEJDLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUJDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0JDLElBQUksRUFBRTtVQUFFSixJQUFJLEVBQUU7UUFBTyxDQUFDO1FBQ3RCckUsU0FBUyxFQUFFLGNBQWM7UUFDekIwRSxXQUFXLEVBQUVWLGtCQUFrQixHQUFHQyx1QkFBdUI7UUFDekRVLGlCQUFpQixFQUFFO01BQ3BCLENBQUMsQ0FBQztJQUNILENBQUMsTUFBTSxJQUFJYixRQUFRLEVBQUU7TUFDcEJDLGdCQUFnQixHQUFHLElBQUlHLFdBQVcsQ0FBQ0MsU0FBUyxFQUFFO1FBQzdDQyxPQUFPLEVBQUU7VUFBRUMsSUFBSSxFQUFFO1FBQVUsQ0FBQztRQUM1QkMsS0FBSyxFQUFFLFdBQVc7UUFDbEJDLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUJDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0JDLElBQUksRUFBRTtVQUFFSixJQUFJLEVBQUU7UUFBTyxDQUFDO1FBQ3RCSyxXQUFXLEVBQUUsZUFBZTtRQUM1QkMsaUJBQWlCLEVBQUU7TUFDcEIsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ05aLGdCQUFnQixHQUFHLElBQUlHLFdBQVcsQ0FBQztRQUNsQ0ksS0FBSyxFQUFFLFdBQVc7UUFDbEJHLElBQUksRUFBRTtVQUFFSixJQUFJLEVBQUU7UUFBTyxDQUFDO1FBQ3RCRyxXQUFXLEVBQUU7TUFDZCxDQUFDLENBQUM7SUFDSDtJQUNBcEYsWUFBWSxHQUFHLElBQUl3RixXQUFXLENBQUM7TUFDOUJDLHFCQUFxQixFQUFFLEtBQUs7TUFDNUJDLFVBQVUsRUFBRSxZQUFrQjtRQUM3QjNGLFdBQVcsQ0FBQ21ELFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDN0IsQ0FBQztNQUNEeUMsS0FBSyxFQUFFO1FBQ05WLElBQUksRUFBRSxHQUFHO1FBQ1RXLFFBQVEsRUFBRWpCLGdCQUFnQjtRQUMxQnJELE1BQU0sRUFBRTtNQUNUO0lBQ0QsQ0FBQyxDQUFDO0lBQ0Z0QixZQUFZLENBQUM2RixhQUFhLENBQUMsSUFBSSxDQUFDO0lBQ2hDOUYsV0FBVyxHQUNWQSxXQUFXLElBQ1gsSUFBSStGLE1BQU0sQ0FBQztNQUNWQyxJQUFJLEVBQUVDLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDLFVBQVUsQ0FBQztNQUNyQ0MsT0FBTyxFQUFFLEtBQUs7TUFDZEMsS0FBSyxFQUFFLFlBQThCO1FBQ3BDbkcsWUFBWSxDQUFDb0csWUFBWSxFQUFFO1FBQzNCLElBQUksQ0FBQ2xELFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDdkI7SUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBbEQsWUFBWSxDQUFDcUcsUUFBUSxDQUFDbEQsbUJBQW1CLENBQUM7SUFDMUMsT0FBTztNQUNObkQsWUFBWTtNQUNaRDtJQUNELENBQUM7RUFDRjtFQVVBLFNBQVN1RyxxQkFBcUIsQ0FBQ0MsT0FBZ0IsRUFBVztJQUN6RCxNQUFNQyxnQkFBZ0IsR0FBR0QsT0FBTyxDQUFDL0QsbUJBQW1CLEVBQXlDO0lBQzdGLElBQ0VnRSxnQkFBZ0IsS0FDZEEsZ0JBQWdCLENBQUNDLGVBQWUsS0FBSzFCLFNBQVMsSUFBSXlCLGdCQUFnQixDQUFDQyxlQUFlLEtBQUssSUFBSSxJQUMzRkQsZ0JBQWdCLENBQUMvRCxVQUFVLEtBQUtzQyxTQUFTLElBQUl5QixnQkFBZ0IsQ0FBQy9ELFVBQVUsS0FBSyxJQUFLLENBQUMsSUFDdEY4RCxPQUFPLENBQUNHLE9BQU8sRUFBRSxFQUNoQjtNQUNELE9BQU8sSUFBSTtJQUNaO0lBQ0EsT0FBTyxLQUFLO0VBQ2I7RUFFQSxlQUFlQyxtQkFBbUIsQ0FFakNDLGVBQTRDLEVBQzVDQyxRQUF3QixFQUN4QkMsb0JBQThCLEVBQzlCOUUsa0JBQTRCLEVBQzVCK0UsT0FBaUIsRUFDakJDLFdBQWdDLEVBQ2hDQyxZQUFzQixFQUN0QkMsbUJBQWtILEVBQ2xIQyxRQUFpQixFQUNXO0lBQzVCLElBQUlDLG1CQUFtQixHQUFHLElBQUksQ0FBQ0MsV0FBVyxFQUFFO0lBQzVDLElBQUlDLGdCQUFnQjtJQUNwQixJQUFJQyxvQkFBb0I7SUFDeEIsTUFBTUMsUUFBUSxHQUFHLENBQUMsSUFBSUMsTUFBTSxDQUFDO01BQUV4QyxJQUFJLEVBQUUsWUFBWTtNQUFFeUMsUUFBUSxFQUFFQyxjQUFjLENBQUNDLEVBQUU7TUFBRUMsTUFBTSxFQUFFO0lBQU0sQ0FBQyxDQUFDLENBQUM7SUFDakcsSUFBSUMsaUJBQXNDLEdBQUcsS0FBSztNQUNqREMsY0FBbUMsR0FBRyxLQUFLO0lBRTVDLE1BQU1DLDJCQUEyQixHQUFHLElBQUlQLE1BQU0sQ0FBQztNQUFFeEMsSUFBSSxFQUFFLEVBQUU7TUFBRWdELElBQUksRUFBRTNCO0lBQXNCLENBQUMsQ0FBQztJQUN6RixJQUFJUSxvQkFBb0IsRUFBRTtNQUN6Qk0sbUJBQW1CLEdBQUdBLG1CQUFtQixDQUFDYyxNQUFNLENBQUNiLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDekU7TUFDQUcsUUFBUSxDQUFDVyxJQUFJLENBQUMsSUFBSVYsTUFBTSxDQUFDO1FBQUV4QyxJQUFJLEVBQUUsWUFBWTtRQUFFeUMsUUFBUSxFQUFFQyxjQUFjLENBQUNTLEVBQUU7UUFBRVAsTUFBTSxFQUFFO01BQUssQ0FBQyxDQUFDLENBQUM7TUFDNUYsTUFBTVEsd0JBQXdCLEdBQUcsVUFBVUMsV0FBcUIsRUFBVztRQUMxRSxJQUFJQyxLQUFLLEdBQUdDLFFBQVE7VUFDbkJDLFFBQVEsR0FBR0MsVUFBVSxDQUFDQyxjQUFjLENBQUNMLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBeUI7UUFDN0UsTUFBTU0saUJBQWlCLEdBQUdGLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDTCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQVk7UUFDOUUsT0FBT0csUUFBUSxFQUFFO1VBQ2hCLE1BQU1JLGlCQUFpQixHQUN0QkosUUFBUSxZQUFZSyxNQUFNLEdBQ3RCRixpQkFBaUIsQ0FBQ0csU0FBUyxFQUFFLENBQWFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsT0FBTyxDQUFDTCxpQkFBaUIsQ0FBQyxHQUN4RkosUUFBUTtVQUNaLElBQUlDLFFBQVEsWUFBWUssTUFBTSxFQUFFO1lBQy9CLElBQUlQLEtBQUssR0FBR00saUJBQWlCLEVBQUU7Y0FDOUJOLEtBQUssR0FBR00saUJBQWlCO2NBQ3pCO2NBQ0FELGlCQUFpQixDQUFDTSxLQUFLLEVBQUU7WUFDMUI7WUFDQTtZQUNBLE9BQU8sS0FBSztVQUNiO1VBQ0FULFFBQVEsR0FBR0EsUUFBUSxDQUFDTSxTQUFTLEVBQUU7UUFDaEM7UUFDQSxPQUFPLElBQUk7TUFDWixDQUFDO01BQ0R2QixRQUFRLENBQUNXLElBQUksQ0FDWixJQUFJVixNQUFNLENBQUM7UUFDVnhDLElBQUksRUFBRSxZQUFZO1FBQ2xCZ0QsSUFBSSxFQUFFSSx3QkFBd0I7UUFDOUJjLGFBQWEsRUFBRTtNQUNoQixDQUFDLENBQUMsQ0FDRjtNQUNEM0IsUUFBUSxDQUFDVyxJQUFJLENBQUNILDJCQUEyQixDQUFDO0lBQzNDLENBQUMsTUFBTTtNQUNOO01BQ0FSLFFBQVEsQ0FBQ1csSUFBSSxDQUNaLElBQUlWLE1BQU0sQ0FBQztRQUNWMkIsT0FBTyxFQUFFLENBQ1IsSUFBSTNCLE1BQU0sQ0FBQztVQUNWeEMsSUFBSSxFQUFFLEVBQUU7VUFDUmdELElBQUksRUFBRzFCLE9BQWdCLElBQUtBLE9BQU8sQ0FBQzhDLFVBQVUsRUFBRSxDQUFDL0gsTUFBTSxLQUFLLENBQUMsSUFBSWlGLE9BQU8sQ0FBQzhDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQzlGLENBQUMsQ0FBQyxFQUNGckIsMkJBQTJCLENBQzNCO1FBQ0RzQixHQUFHLEVBQUU7TUFDTixDQUFDLENBQUMsQ0FDRjtJQUNGO0lBQ0EsSUFBSTFDLGVBQWUsSUFBSUEsZUFBZSxDQUFDdEYsTUFBTSxFQUFFO01BQzlDc0YsZUFBZSxDQUFDN0YsT0FBTyxDQUFDLFVBQVV1QixRQUF1QixFQUFFO1FBQzFELE1BQU1pSCxXQUFXLEdBQUdqSCxRQUFRLENBQUNrSCxJQUFJLEdBQUdsSCxRQUFRLENBQUNrSCxJQUFJLEdBQUcsRUFBRTtRQUN0RHZILFNBQVMsQ0FBQ2MsV0FBVyxDQUNwQixJQUFJMEcsT0FBTyxDQUFDO1VBQ1hsRCxPQUFPLEVBQUVqRSxRQUFRLENBQUNvSCxJQUFJO1VBQ3RCckUsSUFBSSxFQUFFL0MsUUFBUSxDQUFDK0MsSUFBSTtVQUNuQnNFLE1BQU0sRUFBRSxFQUFFO1VBQ1ZDLFVBQVUsRUFBRSxJQUFJO1VBQ2hCSixJQUFJLEVBQUVEO1FBQ1AsQ0FBQyxDQUFDLENBQ0Y7UUFDRDtNQUNELENBQUMsQ0FBQztJQUNIOztJQUNBLE1BQU1wRyxtQkFBbUIsR0FBSW5ELFlBQVksSUFBS0EsWUFBWSxDQUFDb0QsUUFBUSxFQUFnQixJQUFLLElBQUl5RyxTQUFTLEVBQUU7SUFDdkcsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNwRyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUFHNUIsa0JBQWtCLENBQUM7SUFFckgsSUFBSW9GLG1CQUFtQixDQUFDOUYsTUFBTSxLQUFLLENBQUMsSUFBSThGLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDVixPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUU7TUFDbkZxQixjQUFjLEdBQUcsSUFBSTtJQUN0QixDQUFDLE1BQU0sSUFBSVgsbUJBQW1CLENBQUM5RixNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzVDd0csaUJBQWlCLEdBQUcsSUFBSTtJQUN6QjtJQUNBLElBQUlrQyxxQkFBNEM7SUFDaEQsSUFBSUMsZUFBb0MsR0FBRyxFQUFFO0lBQzdDLElBQUluQyxpQkFBaUIsSUFBSyxDQUFDQyxjQUFjLElBQUksQ0FBQ2IsbUJBQW9CLEVBQUU7TUFDbkUsTUFBTWdELFlBQVksR0FBR2pJLFNBQVMsQ0FBQ0MsZUFBZSxFQUFFLENBQUNpSSxRQUFRLENBQUMsR0FBRyxFQUFFcEYsU0FBUyxFQUFFQSxTQUFTLEVBQUV5QyxRQUFRLENBQUM7UUFDN0Y0QyxnQkFBZ0IsR0FBR0YsWUFBWSxDQUFDRyxrQkFBa0IsRUFBRTtNQUNyRCxJQUFJRCxnQkFBZ0IsSUFBSUEsZ0JBQWdCLENBQUM5SSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3BEd0csaUJBQWlCLEdBQUcsSUFBSTtRQUN4Qjs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU01RyxTQUFvQixHQUFHLEVBQUU7UUFDL0JrSixnQkFBZ0IsQ0FBQ3JKLE9BQU8sQ0FBQyxVQUFVdUosY0FBdUIsRUFBRTtVQUMzRCxNQUFNaEksUUFBUSxHQUFHZ0ksY0FBYyxDQUFDbkksU0FBUyxFQUFFO1VBQzNDakIsU0FBUyxDQUFDaUgsSUFBSSxDQUFDN0YsUUFBUSxDQUFDO1VBQ3hCMUMsZ0JBQWdCLEdBQUdzQixTQUFTO1FBQzdCLENBQUMsQ0FBQztRQUNGLElBQUlxSixnQkFBMkIsR0FBRyxFQUFFO1FBQ3BDLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdEgsbUJBQW1CLENBQUN1SCxPQUFPLEVBQUUsQ0FBQyxFQUFFO1VBQ2pESCxnQkFBZ0IsR0FBR3BILG1CQUFtQixDQUFDdUgsT0FBTyxFQUFFO1FBQ2pEO1FBQ0EsTUFBTUMsVUFBbUMsR0FBRyxDQUFDLENBQUM7UUFFOUNWLGVBQWUsR0FBR3JLLGdCQUFnQixDQUFDc0ksTUFBTSxDQUFDcUMsZ0JBQWdCLENBQUMsQ0FBQ0ssTUFBTSxDQUFDLFVBQVVDLEdBQVksRUFBRTtVQUMxRjtVQUNBLE9BQU8sQ0FBQ0YsVUFBVSxDQUFDRSxHQUFHLENBQUNDLEtBQUssRUFBRSxDQUFDLEtBQUtILFVBQVUsQ0FBQ0UsR0FBRyxDQUFDQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFDRjNILG1CQUFtQixDQUFDRSxPQUFPLENBQUM0RyxlQUFlLENBQUM7TUFDN0M7SUFDRDtJQUNBLElBQUkvQyxtQkFBbUIsRUFBRTtNQUN4QjhDLHFCQUFxQixHQUFHO1FBQUVqQyxjQUFjO1FBQUVEO01BQWtCLENBQUM7TUFDN0RrQyxxQkFBcUIsR0FBRzlDLG1CQUFtQixDQUFDRSxtQkFBbUIsRUFBRTRDLHFCQUFxQixDQUFDO01BQ3ZGakMsY0FBYyxHQUFHaUMscUJBQXFCLENBQUNqQyxjQUFjO01BQ3JERCxpQkFBaUIsR0FBR2tDLHFCQUFxQixDQUFDbEMsaUJBQWlCO01BQzNELElBQUlBLGlCQUFpQixJQUFJa0MscUJBQXFCLENBQUNlLHdCQUF3QixFQUFFO1FBQ3hFZCxlQUFlLEdBQUdELHFCQUFxQixDQUFDZ0IsZ0JBQWdCLEdBQUdoQixxQkFBcUIsQ0FBQ2dCLGdCQUFnQixHQUFHZixlQUFlO01BQ3BIO0lBQ0Q7SUFDQSxJQUFJN0MsbUJBQW1CLENBQUM5RixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUNzRixlQUFlLElBQUksQ0FBQ2tELGVBQWUsRUFBRTtNQUM3RTtNQUNBLE9BQU9tQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQyxNQUFNLElBQUk5RCxtQkFBbUIsQ0FBQzlGLE1BQU0sS0FBSyxDQUFDLElBQUk4RixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZGLE9BQU8sRUFBRSxLQUFLcEMsV0FBVyxDQUFDaUMsT0FBTyxJQUFJLENBQUNrRixlQUFlLEVBQUU7TUFDNUgsT0FBTyxJQUFJcUUsT0FBTyxDQUFXQyxPQUFPLElBQUs7UUFDeENDLFlBQVksQ0FBQ0MsSUFBSSxDQUFDaEUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUNpRSxVQUFVLEVBQUUsQ0FBQztRQUN0RCxJQUFJbEksbUJBQW1CLEVBQUU7VUFDeEJBLG1CQUFtQixDQUFDRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEM7UUFDQXBCLFNBQVMsQ0FBQ1csY0FBYyxDQUFDd0UsbUJBQW1CLENBQUM7UUFDN0M4RCxPQUFPLENBQUMsSUFBSSxDQUFDO01BQ2QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUlwRCxpQkFBaUIsSUFBSW1DLGVBQWUsQ0FBQzNJLE1BQU0sRUFBRTtNQUN2RGdLLGVBQWUsQ0FBQ0MsNEJBQTRCLENBQUN0QixlQUFlLEVBQUVsRCxPQUFPLEVBQUVDLFdBQVcsRUFBRUcsUUFBUSxDQUFDO01BQzdGaEUsbUJBQW1CLENBQUNFLE9BQU8sQ0FBQzRHLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDOUNwSyxpQkFBaUIsR0FBR0EsaUJBQWlCLElBQUksRUFBRTtNQUMzQyxPQUFPLElBQUlvTCxPQUFPLENBQVMsVUFBVUMsT0FBZ0MsRUFBRTtRQUN0RXJMLGlCQUFpQixDQUFDc0ksSUFBSSxDQUFDK0MsT0FBTyxDQUFDO1FBQy9CLE1BQU1uSixlQUFlLEdBQUc0QixPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtRQUNwRSxNQUFNYSxtQkFBbUIsR0FBRyxLQUFLO1FBQ2pDLElBQUl1RixxQkFBcUIsSUFBSUEscUJBQXFCLENBQUN3QixvQkFBb0IsRUFBRTtVQUN4RXJJLG1CQUFtQixDQUFDdUgsT0FBTyxFQUFFLENBQUMzSixPQUFPLENBQUMsVUFBVXVCLFFBQWlCLEVBQUU7WUFDbEUwSCxxQkFBcUIsQ0FBQ3dCLG9CQUFvQixDQUFFbEosUUFBUSxDQUFDO1VBQ3RELENBQUMsQ0FBQztRQUNIO1FBRUEsTUFBTW1KLGNBQWMsR0FBR2pILDJCQUEyQixDQUFDckIsbUJBQW1CLEVBQUVzQixtQkFBbUIsQ0FBQztRQUM1RixNQUFNaUgsT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxFQUFFLEVBQUU1RyxTQUFTLEVBQUVBLFNBQVMsRUFBRSxDQUFDNkcsSUFBYSxFQUFFQyxJQUFhLEtBQUs7VUFDdEYsTUFBTUMsS0FBSyxHQUFHQyxjQUFjLENBQUNILElBQUksQ0FBQztVQUNsQyxNQUFNSSxLQUFLLEdBQUdELGNBQWMsQ0FBQ0YsSUFBSSxDQUFDO1VBRWxDLElBQUlDLEtBQUssR0FBR0UsS0FBSyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxDQUFDO1VBQ1Y7VUFDQSxJQUFJRixLQUFLLEdBQUdFLEtBQUssRUFBRTtZQUNsQixPQUFPLENBQUM7VUFDVDtVQUNBLE9BQU8sQ0FBQztRQUNULENBQUMsQ0FBQztRQUVEUCxjQUFjLENBQUN6TCxZQUFZLENBQUNpTSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQXNCQyxJQUFJLENBQUNSLE9BQU8sQ0FBQztRQUVuRjVMLE9BQU8sR0FDTkEsT0FBTyxJQUFJQSxPQUFPLENBQUNxTSxNQUFNLEVBQUUsR0FDeEJyTSxPQUFPLEdBQ1AsSUFBSWdKLE1BQU0sQ0FBQztVQUNYc0QsU0FBUyxFQUFFLElBQUk7VUFDZkMsU0FBUyxFQUFFLElBQUl2RyxNQUFNLENBQUM7WUFDckJLLEtBQUssRUFBRSxZQUFrQjtjQUN4Qm5ELGtCQUFrQixFQUFFO2NBQ3BCO2NBQ0FmLFNBQVMsQ0FBQ1csY0FBYyxDQUFDcUgsZUFBZSxDQUFDO1lBQzFDLENBQUM7WUFDRFAsSUFBSSxFQUFFM0gsZUFBZSxDQUFDWSxPQUFPLENBQUMsc0JBQXNCO1VBQ3JELENBQUMsQ0FBQztVQUNGMkosWUFBWSxFQUFFLElBQUlDLEdBQUcsQ0FBQztZQUNyQkMsYUFBYSxFQUFFLENBQ2QsSUFBSUMsSUFBSSxDQUFDO2NBQ1IvQyxJQUFJLEVBQUUzSCxlQUFlLENBQUNZLE9BQU8sQ0FBQyxvREFBb0Q7WUFDbkYsQ0FBQyxDQUFDLENBQ0Y7WUFDRCtKLFdBQVcsRUFBRSxDQUFDM00sV0FBVztVQUMxQixDQUFDLENBQUM7VUFDRjRNLFlBQVksRUFBRSxRQUFRO1VBQ3RCQyxhQUFhLEVBQUUsUUFBUTtVQUN2QkMsaUJBQWlCLEVBQUUsS0FBSztVQUN4QkMsaUJBQWlCLEVBQUUsS0FBSztVQUN4QkMsVUFBVSxFQUFFLFlBQWtCO1lBQzdCLEtBQUssTUFBTUMsSUFBSSxJQUFJbk4saUJBQWlCLEVBQUU7Y0FDckNtTixJQUFJLEVBQUU7WUFDUDtZQUNBbk4saUJBQWlCLEdBQUcsRUFBRTtVQUN2QjtRQUNBLENBQUMsQ0FBQztRQUNOQyxPQUFPLENBQUNtTixnQkFBZ0IsRUFBRTtRQUMxQm5OLE9BQU8sQ0FBQ29OLFVBQVUsQ0FBQ3pCLGNBQWMsQ0FBQ3pMLFlBQVksQ0FBQztRQUUvQyxJQUFJOEosZUFBZSxFQUFFO1VBQ3BCcUQsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsVUFBVUMsY0FBaUMsRUFBRTtZQUNqRnhOLE9BQU8sQ0FBQ3lOLGNBQWMsQ0FDckIsSUFBSXpILE1BQU0sQ0FBQztjQUNWSyxLQUFLLEVBQUUsWUFBa0I7Z0JBQ3hCbkQsa0JBQWtCLEVBQUU7Z0JBQ3BCLElBQUk2RCxRQUFRLENBQUMyRyxpQkFBaUIsRUFBRSxFQUFFO2tCQUNqQzNHLFFBQVEsQ0FBQ29GLFVBQVUsRUFBRSxDQUFDd0IsWUFBWSxFQUFFO2dCQUNyQztnQkFDQTVHLFFBQVEsQ0FBQzZHLE9BQU8sRUFBRTtjQUNuQixDQUFDO2NBQ0RoRSxJQUFJLEVBQUUzSCxlQUFlLENBQUNZLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztjQUN2RDBDLElBQUksRUFBRWlJLGNBQWMsQ0FBQ0s7WUFDdEIsQ0FBQyxDQUFDLENBQ0Y7VUFDRixDQUFDLENBQUM7UUFDSCxDQUFDLE1BQU07VUFDTjdOLE9BQU8sQ0FBQzhOLGtCQUFrQixFQUFFO1FBQzdCO1FBQ0F0RyxnQkFBZ0IsR0FBR3JHLDJCQUEyQixDQUFDakIsWUFBWSxDQUFDNk4sUUFBUSxFQUFFLENBQUM7UUFDdkV0RyxvQkFBb0IsR0FBR3VHLGlDQUFpQyxDQUFDeEcsZ0JBQWdCLENBQUM7UUFDMUV4SCxPQUFPLENBQUNpTyxRQUFRLENBQUN6RyxnQkFBZ0IsQ0FBQztRQUNoQ3hILE9BQU8sQ0FBQ2tPLGVBQWUsRUFBRSxDQUFTQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFVQyxPQUFPLENBQUMzRyxvQkFBb0IsQ0FBQztRQUNoR3ZILFlBQVksQ0FBQ29HLFlBQVksRUFBRTtRQUMzQnRHLE9BQU8sQ0FBQ3FPLElBQUksRUFBRTtRQUNkLElBQUlsSCxZQUFZLEtBQUssSUFBSSxFQUFFO1VBQzFCaUUsT0FBTyxDQUFDcEwsT0FBTyxDQUFDO1FBQ2pCO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUlpSSxjQUFjLEVBQUU7TUFDMUIsT0FBTyxJQUFJa0QsT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtRQUFBO1FBQ3JDLE1BQU01SSxRQUFRLEdBQUc4RSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTWdILHVCQUF1QixHQUFHOUwsUUFBUSxDQUFDRSxtQkFBbUIsRUFBeUM7UUFDckcsSUFDRTRMLHVCQUF1QixJQUFJLENBQUN6TyxZQUFZLENBQUMwTyxRQUFRLDBCQUFDRCx1QkFBdUIsQ0FBQzNILGVBQWUsMERBQXZDLHNCQUF5Q0YsT0FBTyxDQUFDLElBQ25HeUQscUJBQXFCLElBQUlBLHFCQUFxQixDQUFDZSx3QkFBeUIsRUFDeEU7VUFDRCxJQUFJcUQsdUJBQXVCLEtBQUssQ0FBQ3BFLHFCQUFxQixJQUFJLENBQUNBLHFCQUFxQixDQUFDZSx3QkFBd0IsQ0FBQyxFQUFFO1lBQUE7WUFDM0dwTCxZQUFZLENBQUN3SSxJQUFJLDJCQUFDaUcsdUJBQXVCLENBQUMzSCxlQUFlLDJEQUF2Qyx1QkFBeUNGLE9BQU8sQ0FBQztVQUNwRTtVQUNBLElBQUkrSCxtQkFBbUIsR0FBRyxjQUFjO1VBQ3hDLE1BQU1DLGlCQUFpQixHQUFHaEwsb0JBQW9CLENBQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDO1VBQzlELElBQUlpTSxpQkFBaUIsRUFBRTtZQUN0QkQsbUJBQW1CLEdBQUksT0FBTUMsaUJBQWtCLFdBQVU7VUFDMUQ7VUFDQSxJQUFJdkUscUJBQXFCLElBQUlBLHFCQUFxQixDQUFDd0Isb0JBQW9CLEVBQUU7WUFDeEV4QixxQkFBcUIsQ0FBQ3dCLG9CQUFvQixDQUFDbEosUUFBUSxDQUFDO1VBQ3JEO1VBQ0EsSUFBSUEsUUFBUSxDQUFDb0UsT0FBTyxFQUFFLEtBQUssS0FBSyxJQUFJcEUsUUFBUSxDQUFDa00saUJBQWlCLEVBQUUsS0FBS3pKLFNBQVMsRUFBRTtZQUMvRXVKLG1CQUFtQixHQUFJLEdBQUVBLG1CQUFtQixHQUFHaE0sUUFBUSxDQUFDa00saUJBQWlCLEVBQUcsS0FBSWxNLFFBQVEsQ0FBQytJLFVBQVUsRUFBRyxnQkFBZTtVQUN0SCxDQUFDLE1BQU07WUFDTmlELG1CQUFtQixHQUFJLEdBQUVBLG1CQUFtQixHQUFHaE0sUUFBUSxDQUFDK0ksVUFBVSxFQUFHLGdCQUFlO1VBQ3JGO1VBQ0EsTUFBTW9ELGFBQWEsR0FBRyxJQUFJQyxhQUFhLENBQUM7WUFDdkNDLFFBQVEsRUFBRUw7VUFDWCxDQUFDLENBQUM7VUFDRk0sVUFBVSxDQUFDQyxLQUFLLENBQUNKLGFBQWEsRUFBdUI7WUFDcERLLE9BQU8sRUFBRSxZQUFZO2NBQ3BCblAsWUFBWSxHQUFHLEVBQUU7Y0FDakIsSUFBSW1ILG9CQUFvQixFQUFFO2dCQUN6QmlJLDZCQUE2QixFQUFFO2NBQ2hDO2NBQ0F6TCwrQkFBK0IsRUFBRTtjQUNqQzRILE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDZDtVQUNELENBQUMsQ0FBQztRQUNIO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ04sT0FBT0QsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNLLDRCQUE0QixDQUNwQ3RCLGVBQW9DLEVBQ3BDbEQsT0FBNEIsRUFDNUJDLFdBQStCLEVBQy9CRyxRQUE0QixFQUNyQjtJQUNQOEMsZUFBZSxDQUFDbEosT0FBTyxDQUFFaU8sVUFBNkIsSUFBSztNQUFBO01BQzFEQSxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtNQUM3QixJQUFJLHdCQUFDQSxVQUFVLENBQUNyRixNQUFNLCtDQUFqQixtQkFBbUJySSxNQUFNLEtBQUksd0JBQUEwTixVQUFVLENBQUN0SSxPQUFPLHdEQUFsQix5QkFBQXNJLFVBQVUsQ0FBWSxNQUFLLHdDQUF3QyxFQUFFO1FBQ3RHO1FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUd0TCxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFFakIsT0FBTyxDQUFDLDhDQUE4QyxDQUFDO1FBQzdIcU0sVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHQyxnQkFBZ0I7TUFDNUMsQ0FBQyxNQUFNLDJCQUFJRCxVQUFVLENBQUNyRixNQUFNLGdEQUFqQixvQkFBbUJySSxNQUFNLEVBQUU7UUFDckM7UUFDQSxJQUFJNkYsUUFBUSxLQUFLLFlBQVksSUFBSUosT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRW1JLEdBQUcsQ0FBVyxrQkFBa0IsQ0FBQyxFQUFFO1VBQzVFNUQsZUFBZSxDQUFDNkQsbUJBQW1CLENBQUNwSSxPQUFPLEVBQUVpSSxVQUFVLEVBQUVoSSxXQUFXLENBQUM7UUFDdEUsQ0FBQyxNQUFNLElBQUlHLFFBQVEsS0FBSyxZQUFZLEVBQUU7VUFDckM7VUFDQW1FLGVBQWUsQ0FBQzhELHlCQUF5QixDQUFDSixVQUFVLEVBQUVoSSxXQUFXLEVBQUVELE9BQU8sQ0FBUztRQUNwRixDQUFDLE1BQU07VUFDTmlJLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRzFELGVBQWUsQ0FBQytELDhCQUE4QixDQUFDckksV0FBVyxDQUFDO1FBQ3ZGO01BQ0Q7SUFDRCxDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNtSSxtQkFBbUIsQ0FBQ0csS0FBMEIsRUFBRU4sVUFBNkIsRUFBRWhJLFdBQStCLEVBQVE7SUFDOUgsTUFBTXVJLFdBQVcsR0FBR0QsS0FBSyxJQUFLQSxLQUFLLENBQWNFLGFBQWEsRUFBRTtJQUNoRSxJQUFJRCxXQUFXLEVBQUU7TUFBQTtNQUNoQixNQUFNRSxpQkFBaUIsR0FBSSxHQUFHSCxLQUFLLENBQWNFLGFBQWEsRUFBRSxDQUFDRSxPQUFPLEVBQUcsRUFBQztNQUM1RSxJQUFJLHdCQUFBVixVQUFVLENBQUNyRixNQUFNLHdEQUFqQixvQkFBbUJWLE9BQU8sQ0FBQ3dHLGlCQUFpQixDQUFDLE1BQUssQ0FBQyxFQUFFO1FBQ3hELE1BQU1FLGNBQWMsR0FBR0osV0FBVyxDQUFDbEYsa0JBQWtCLEVBQUU7UUFDdkRzRixjQUFjLENBQUM1TyxPQUFPLENBQUU2TyxVQUFtQixJQUFLO1VBQUE7VUFDL0MsMkJBQUlaLFVBQVUsQ0FBQ3JGLE1BQU0sZ0RBQWpCLG9CQUFtQjBFLFFBQVEsQ0FBQ3VCLFVBQVUsQ0FBQ0YsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUN0RCxNQUFNRyxXQUFXLEdBQUksR0FBRUQsVUFBVSxDQUFDRixPQUFPLEVBQUcsR0FBRTtZQUM5QyxNQUFNSSxnQkFBZ0IsR0FBSVIsS0FBSyxDQUFDdkcsU0FBUyxFQUFFLENBQWNnSCxtQkFBbUIsRUFBWTtZQUN4RixNQUFNQyxhQUFhLEdBQUdGLGdCQUFnQixJQUFJRixVQUFVLENBQUN6TixTQUFTLEVBQUUsQ0FBQzJOLGdCQUFnQixDQUFDO1lBQ2xGLE1BQU1HLGtCQUFrQixHQUFHM0UsZUFBZSxDQUFDNEUsbUJBQW1CLENBQUNaLEtBQUssRUFBRU4sVUFBVSxFQUFFYSxXQUFXLENBQUM7WUFDOUYsTUFBTTtjQUFFTTtZQUFvQixDQUFDLEdBQUc3RSxlQUFlLENBQUM4RSxlQUFlLENBQUNkLEtBQUssRUFBY1csa0JBQWtCLENBQUM7O1lBRXRHO1lBQ0EsSUFBSUEsa0JBQWtCLElBQUlFLG1CQUFtQixFQUFFO2NBQzlDO2NBQ0FuQixVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUdnQixhQUFhLEdBQUksSUFBR0EsYUFBYyxFQUFDLEdBQUlWLEtBQUssQ0FBY2UsU0FBUyxFQUFFO1lBQ2pHLENBQUMsTUFBTTtjQUNOO2NBQ0FyQixVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcxRCxlQUFlLENBQUMrRCw4QkFBOEIsQ0FBQ3JJLFdBQVcsQ0FBQztZQUN2RjtVQUNEO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7SUFDRDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU29JLHlCQUF5QixDQUFDSixVQUE2QixFQUFFaEksV0FBK0IsRUFBRUQsT0FBYSxFQUFRO0lBQ3ZILE1BQU11SixZQUFZLEdBQUd2SixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXdKLGlCQUFpQixFQUFFO0lBQ2pELE1BQU1DLFFBQWlCLEdBQUcsQ0FBQXpKLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFMEosVUFBVSxNQUFJMUosT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUwSixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSUMsbUJBQW1CLEdBQUcsSUFBSTtJQUM5QixJQUFJRixRQUFRLEVBQUU7TUFDYmxGLGVBQWUsQ0FBQ3FGLHNDQUFzQyxDQUFDSCxRQUFRLENBQUMsQ0FBQ3pQLE9BQU8sQ0FBQyxVQUFVNlAsUUFBMkIsRUFBRTtRQUMvRyxNQUFNQyxXQUFXLEdBQUdELFFBQVEsQ0FBQ0UsY0FBYyxFQUFFO1FBQzdDRCxXQUFXLENBQUM5UCxPQUFPLENBQUMsVUFBVWdRLFdBQWlDLEVBQUU7VUFDaEVBLFdBQVcsQ0FBQy9ILFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQ2pJLE9BQU8sQ0FBQyxVQUFVdU8sS0FBSyxFQUFFO1lBQ3ZELElBQUlBLEtBQUssQ0FBQ0osR0FBRyxDQUFXLGtCQUFrQixDQUFDLEVBQUU7Y0FDNUMsTUFBTUssV0FBVyxHQUFHRCxLQUFLLENBQUNFLGFBQWEsRUFBRTtnQkFDeEN3QixxQkFBcUIsR0FBRyxJQUFJO2NBQzdCLElBQUlDLGlCQUF5QztjQUU3QzNCLEtBQUssQ0FBQ3RHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQ2pJLE9BQU8sQ0FBRW1RLFFBQVEsSUFBSztnQkFDOUMsSUFBSUEsUUFBUSxDQUFDaEMsR0FBRyxDQUFRLGFBQWEsQ0FBQyxJQUFJZ0MsUUFBUSxDQUFDaEMsR0FBRyxDQUFVLG9CQUFvQixDQUFDLEVBQUU7a0JBQ3RGK0IsaUJBQWlCLEdBQUdDLFFBQVE7Z0JBQzdCO2NBQ0QsQ0FBQyxDQUFDO2NBQ0YsSUFBSTNCLFdBQVcsRUFBRTtnQkFBQTtnQkFDaEIsTUFBTUUsaUJBQWlCLEdBQUksR0FBRWEsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVaLE9BQU8sRUFBRyxJQUFDLHdCQUFFSixLQUFLLENBQUNFLGFBQWEsRUFBRSx5REFBckIscUJBQXVCRSxPQUFPLEVBQUcsRUFBQztnQkFDMUYsSUFBSSx3QkFBQVYsVUFBVSxDQUFDckYsTUFBTSx3REFBakIsb0JBQW1CVixPQUFPLENBQUN3RyxpQkFBaUIsQ0FBQyxNQUFLLENBQUMsRUFBRTtrQkFDeEQsTUFBTTVFLEdBQUcsR0FBR1MsZUFBZSxDQUFDNkYsK0JBQStCLENBQzFEbkMsVUFBVSxFQUNWTSxLQUFLLEVBQ0wyQixpQkFBaUIsRUFDakIxQixXQUFXLEVBQ1h2SSxXQUFXLEVBQ1hnSyxxQkFBcUIsRUFDckJJLHNCQUFzQixDQUN0QjtrQkFDRCxNQUFNO29CQUFFQztrQkFBaUIsQ0FBQyxHQUFHeEcsR0FBRztrQkFFaEMsSUFBSW1HLHFCQUFxQixFQUFFO29CQUMxQixNQUFNbEIsZ0JBQWdCLEdBQUlSLEtBQUssQ0FBQ3ZHLFNBQVMsRUFBRSxDQUFjZ0gsbUJBQW1CLEVBQVk7b0JBQ3hGLElBQUlELGdCQUFnQixFQUFFO3NCQUNyQixNQUFNSCxjQUFjLEdBQUdMLEtBQUssQ0FBQ0UsYUFBYSxFQUFFLENBQUM4QixXQUFXLEVBQUU7c0JBQzFEM0IsY0FBYyxDQUFDNU8sT0FBTyxDQUFFNk8sVUFBbUIsSUFBSzt3QkFBQTt3QkFDL0MsMkJBQUlaLFVBQVUsQ0FBQ3JGLE1BQU0sZ0RBQWpCLG9CQUFtQjBFLFFBQVEsQ0FBQ3VCLFVBQVUsQ0FBQ0YsT0FBTyxFQUFFLENBQUMsRUFBRTswQkFDdEQsTUFBTU0sYUFBYSxHQUFHRixnQkFBZ0IsR0FDbkNGLFVBQVUsQ0FBQ3pOLFNBQVMsRUFBRSxDQUFDMk4sZ0JBQWdCLENBQUMsR0FDeEMvSyxTQUFTOzBCQUNaaUssVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUksR0FBRWdCLGFBQWMsS0FBSXFCLGdCQUFnQixDQUFDbEIsbUJBQW9CLEVBQUM7d0JBQzNGO3NCQUNELENBQUMsQ0FBQztvQkFDSCxDQUFDLE1BQU07c0JBQ05uQixVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBSSxHQUFFcUMsZ0JBQWdCLENBQUNsQixtQkFBb0IsRUFBQztvQkFDekU7b0JBRUEsSUFBSW9CLFVBQVUsR0FBR2pDLEtBQUssQ0FBQ2tDLGdCQUFnQixFQUFFLElBQUlILGdCQUFnQixDQUFDSSxXQUFXO29CQUN6RSxJQUFJLENBQUNGLFVBQVUsRUFBRTtzQkFDaEJBLFVBQVUsR0FBR1IsV0FBVyxDQUFDVyxRQUFRLEVBQUU7b0JBQ3BDLENBQUMsTUFBTTtzQkFDTixNQUFNM1AsZUFBZSxHQUFHNEIsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7c0JBQ3BFMk4sVUFBVSxHQUFJLEdBQUV4UCxlQUFlLENBQUNZLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBRSxLQUFJNE8sVUFBVyxFQUFDO29CQUNwRztvQkFDQXZDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBR3VDLFVBQVU7b0JBQ3JDYixtQkFBbUIsR0FBRyxLQUFLO2tCQUM1QjtnQkFDRDtjQUNEO1lBQ0Q7VUFDRCxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSDtJQUVBLElBQUlBLG1CQUFtQixFQUFFO01BQUE7TUFDeEIsTUFBTWpCLGlCQUFpQixHQUFJLEdBQUVhLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFWixPQUFPLEVBQUcsRUFBQztNQUN0RCxJQUFJLHdCQUFBVixVQUFVLENBQUNyRixNQUFNLHdEQUFqQixvQkFBbUJWLE9BQU8sQ0FBQ3dHLGlCQUFpQixDQUFDLE1BQUssQ0FBQyxFQUFFO1FBQ3hEO1FBQ0FULFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRzFELGVBQWUsQ0FBQytELDhCQUE4QixDQUFDckksV0FBVyxDQUFDO01BQ3ZGLENBQUMsTUFBTTtRQUNOZ0ksVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHckwsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBRWpCLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQztNQUNoSTtJQUNEO0VBQ0Q7RUFFQSxTQUFTME0sOEJBQThCLENBQUNySSxXQUErQixFQUFVO0lBQ2hGLE1BQU0ySyxlQUFlLEdBQUdoTyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFFakIsT0FBTyxDQUFDLGtEQUFrRCxDQUFDO0lBQ2hJLE9BQU9xRSxXQUFXLEdBQUksR0FBRTJLLGVBQWdCLEtBQUkzSyxXQUFZLEVBQUMsR0FBRyxFQUFFO0VBQy9EOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUytFLGNBQWMsQ0FBQ2xCLEdBQXNCLEVBQVU7SUFBQTtJQUN2RCx1QkFBSUEsR0FBRyxDQUFDMEcsVUFBVSw0Q0FBZCxnQkFBZ0JLLFFBQVEsRUFBRSxDQUFDdkQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO01BQ3ZELE9BQU8sQ0FBQztJQUNULENBQUMsTUFBTSx3QkFBSXhELEdBQUcsQ0FBQzBHLFVBQVUsNkNBQWQsaUJBQWdCSyxRQUFRLEVBQUUsQ0FBQ3ZELFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtNQUMxRCxPQUFPLENBQUM7SUFDVCxDQUFDLE1BQU07TUFDTixPQUFPLENBQUM7SUFDVDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTStDLHNCQUFzQixHQUFHLENBQUNTLFFBQTJCLEVBQUU3SyxXQUErQixFQUFFMEosbUJBQTZCLEtBQVc7SUFDckksSUFBSUEsbUJBQW1CLEVBQUU7TUFDeEJtQixRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUdsTyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFFakIsT0FBTyxDQUFDLDhDQUE4QyxDQUFDO0lBQzlILENBQUMsTUFBTTtNQUNOa1AsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHdkcsZUFBZSxDQUFDK0QsOEJBQThCLENBQUNySSxXQUFXLENBQUM7SUFDckY7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNtSywrQkFBK0IsQ0FDdkNVLFFBQTJCLEVBQzNCQyxNQUFnQixFQUNoQlosUUFBZ0MsRUFDaEMzQixXQUFvQixFQUNwQnZJLFdBQStCLEVBQy9CZ0sscUJBQThCLEVBQzlCZSxjQUF3QixFQUN5RDtJQUNqRixNQUFNVixnQkFBZ0IsR0FBRy9GLGVBQWUsQ0FBQzBHLHFCQUFxQixDQUFDRixNQUFNLEVBQUVELFFBQVEsRUFBRVgsUUFBUSxFQUFFM0IsV0FBVyxDQUFDO0lBQ3ZHOEIsZ0JBQWdCLENBQUNJLFdBQVcsR0FBR0ssTUFBTSxDQUFDekIsU0FBUyxFQUFFO0lBRWpELElBQUk0QixVQUFVLEVBQUVDLGNBQWM7SUFDOUIsSUFBSSxDQUFDYixnQkFBZ0IsQ0FBQ2MsZ0JBQWdCLEVBQUU7TUFDdkNGLFVBQVUsR0FBR0osUUFBUSxDQUFDTyxhQUFhLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLEdBQVcsRUFBRTtRQUNqRSxPQUFPaEgsZUFBZSxDQUFDaUgsZ0JBQWdCLENBQUNULE1BQU0sRUFBRVEsR0FBRyxDQUFDO01BQ3JELENBQUMsQ0FBQztJQUNIO0lBRUEsSUFBSUwsVUFBVSxFQUFFO01BQ2YsTUFBTXhKLFFBQVEsR0FBR0MsVUFBVSxDQUFDQyxjQUFjLENBQUNzSixVQUFVLENBQUM7TUFDdERDLGNBQWMsR0FBRzVHLGVBQWUsQ0FBQ2tILDBCQUEwQixDQUFDL0osUUFBUSxDQUFDO0lBQ3RFO0lBRUEsSUFBSSxDQUFDNEksZ0JBQWdCLENBQUNsQixtQkFBbUIsRUFBRTtNQUMxQztNQUNBLElBQUkwQixRQUFRLENBQUNZLGFBQWEsRUFBRSxJQUFJekwsV0FBVyxFQUFFO1FBQzVDK0ssY0FBYyxDQUFDRixRQUFRLEVBQUU3SyxXQUFXLENBQUM7UUFDckNnSyxxQkFBcUIsR0FBRyxLQUFLO01BQzlCO0lBQ0Q7SUFFQSxNQUFNMEIsUUFBUSxHQUFHcEgsZUFBZSxDQUFDcUgsa0JBQWtCLENBQ2xEZCxRQUFRLEVBQ1JSLGdCQUFnQixDQUFDdUIsd0JBQXdCLEVBQ3pDdkIsZ0JBQWdCLENBQUNjLGdCQUFnQixFQUNqQ2QsZ0JBQWdCLENBQUNsQixtQkFBbUIsRUFDcEMyQixNQUFNLEVBQ05JLGNBQWMsQ0FDZDtJQUVELE9BQU87TUFBRWIsZ0JBQWdCO01BQUVxQjtJQUFTLENBQUM7RUFDdEM7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Msa0JBQWtCLENBQzFCcE0sT0FBMEIsRUFDMUJxTSx3QkFBbUMsRUFDbkNULGdCQUE0QyxFQUM1Q2hDLG1CQUF1QyxFQUN2QzJCLE1BQWdCLEVBQ2hCSSxjQUFtQyxFQUNuQ1csZ0JBQTBCLEVBQ0U7SUFDNUIsSUFBSUMsZ0JBQWdCO0lBQ3BCLElBQUlDLGlCQUFpQjtJQUNyQixNQUFNQyxhQUFhLEdBQUdDLGdCQUFnQixDQUFDbkIsTUFBTSxDQUFDO0lBQzlDLE1BQU1vQixzQkFBc0IsR0FBSXBCLE1BQU0sQ0FBQy9JLFNBQVMsRUFBRSxDQUFjZ0gsbUJBQW1CLEVBQVk7SUFDL0YsTUFBTW9ELHFCQUFxQixHQUFHN0gsZUFBZSxDQUFDOEgsZUFBZSxDQUFDN00sT0FBTyxFQUFFdUwsTUFBTSxDQUFDO0lBQzlFLElBQUlJLGNBQWMsSUFBSUMsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFa0IsVUFBVSxFQUFFLEVBQUU7TUFDckRQLGdCQUFnQixHQUFHRSxhQUFhLENBQUNyUSxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FDbkVxUSxhQUFhLENBQUNyUSxPQUFPLENBQUMsZ0RBQWdELENBQUMsRUFDdkV3TixtQkFBbUIsR0FBR0EsbUJBQW1CLEdBQUlnRCxxQkFBcUIsQ0FBMkJHLEtBQUssQ0FDbEcsQ0FBQztJQUNILENBQUMsTUFBTTtNQUNOLE1BQU1DLDBDQUEwQyxHQUFHakksZUFBZSxDQUFDa0ksK0NBQStDLENBQ2pIMUIsTUFBTSxFQUNOSyxnQkFBZ0IsRUFDaEJlLHNCQUFzQixDQUN0QjtNQUNELE1BQU1PLGdDQUFnQyxHQUFHRiwwQ0FBMEMsR0FDaEZBLDBDQUEwQyxDQUFDcFIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUM3RDRDLFNBQVM7TUFDWixNQUFNMk8sNkJBQTZCLEdBQ2xDRCxnQ0FBZ0MsSUFBSUYsMENBQTBDLEdBQzNFQSwwQ0FBMEMsQ0FBQ3BSLFNBQVMsQ0FBQyx5REFBeUQsQ0FBQyxHQUMvRzRDLFNBQVM7TUFDYixJQUFJNk4sd0JBQXdCLENBQUN0UixNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDO1FBQ0EsSUFBSXVSLGdCQUFnQixFQUFFO1VBQ3JCO1VBQ0FFLGlCQUFpQixHQUFJRixnQkFBZ0IsQ0FBY2MsUUFBUSxFQUFFO1FBQzlELENBQUMsTUFBTSxJQUFJeEIsZ0JBQWdCLElBQUllLHNCQUFzQixFQUFFO1VBQ3RESCxpQkFBaUIsR0FBR3pILGVBQWUsQ0FBQ3NJLHFCQUFxQixDQUN4RFYsc0JBQXNCLEVBQ3RCZixnQkFBZ0IsRUFDaEJzQixnQ0FBZ0MsRUFDaENDLDZCQUE2QixDQUM3QjtRQUNGLENBQUMsTUFBTTtVQUNOWCxpQkFBaUIsR0FBR2hPLFNBQVM7UUFDOUI7UUFDQTtRQUNBLE1BQU04TyxXQUEyQixHQUFHdkksZUFBZSxDQUFDd0ksbUJBQW1CLENBQUNYLHFCQUFxQixFQUFFSCxhQUFhLENBQUM7UUFDN0csSUFBSUQsaUJBQWlCLElBQUk1QyxtQkFBbUIsRUFBRTtVQUM3QzJDLGdCQUFnQixHQUFHRSxhQUFhLENBQUNyUSxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQ29RLGlCQUFpQixFQUFFNUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5RyxDQUFDLE1BQU0sSUFBSTRDLGlCQUFpQixJQUFJYyxXQUFXLENBQUNFLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtVQUMxRWpCLGdCQUFnQixHQUFJLEdBQUVFLGFBQWEsQ0FBQ3JRLE9BQU8sQ0FBQyx1REFBdUQsRUFBRSxDQUNwR29RLGlCQUFpQixDQUNqQixDQUFFLEtBQUljLFdBQVcsQ0FBQ0csWUFBYSxFQUFDO1FBQ2xDLENBQUMsTUFBTSxJQUFJakIsaUJBQWlCLElBQUljLFdBQVcsQ0FBQ0UsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1VBQzNFakIsZ0JBQWdCLEdBQUdFLGFBQWEsQ0FBQ3JRLE9BQU8sQ0FBQyx1REFBdUQsRUFBRSxDQUFDb1EsaUJBQWlCLENBQUMsQ0FBQztRQUN2SCxDQUFDLE1BQU0sSUFBSUEsaUJBQWlCLElBQUljLFdBQVcsQ0FBQ0UsZ0JBQWdCLEtBQUssV0FBVyxFQUFFO1VBQzdFakIsZ0JBQWdCLEdBQUdFLGFBQWEsQ0FBQ3JRLE9BQU8sQ0FBQyx1REFBdUQsRUFBRSxDQUFDb1EsaUJBQWlCLENBQUMsQ0FBQztRQUN2SCxDQUFDLE1BQU0sSUFBSSxDQUFDQSxpQkFBaUIsSUFBSTVDLG1CQUFtQixFQUFFO1VBQ3JEMkMsZ0JBQWdCLEdBQUdFLGFBQWEsQ0FBQ3JRLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxHQUFHLElBQUksR0FBR3dOLG1CQUFtQjtRQUNsSCxDQUFDLE1BQU0sSUFBSSxDQUFDNEMsaUJBQWlCLElBQUljLFdBQVcsQ0FBQ0UsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1VBQzNFakIsZ0JBQWdCLEdBQUdlLFdBQVcsQ0FBQ0csWUFBWTtRQUM1QyxDQUFDLE1BQU07VUFDTmxCLGdCQUFnQixHQUFHLElBQUk7UUFDeEI7TUFDRCxDQUFDLE1BQU07UUFDTkEsZ0JBQWdCLEdBQUcsSUFBSTtNQUN4QjtJQUNEO0lBRUEsT0FBT0EsZ0JBQWdCO0VBQ3hCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVSwrQ0FBK0MsQ0FDdkQxQixNQUFnQixFQUNoQkssZ0JBQTRDLEVBQzVDZSxzQkFBOEIsRUFDRDtJQUM3QixJQUFJZSxlQUFlO0lBQ25CLElBQUk5QixnQkFBZ0IsSUFBSWUsc0JBQXNCLEVBQUU7TUFDL0MsTUFBTWdCLE1BQU0sR0FBR3BDLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFMU8sUUFBUSxFQUFFO01BQ2pDLE1BQU0rUSxVQUFVLEdBQUdELE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFRSxZQUFZLEVBQWdDLENBQUMsQ0FBQztNQUN6RSxNQUFNQyxTQUFTLEdBQUdGLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFRyxXQUFXLENBQUNuQyxnQkFBZ0IsQ0FBQ3pDLE9BQU8sRUFBRSxDQUFDO01BQ3JFLElBQUl5RSxVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFFaFMsU0FBUyxDQUFFLEdBQUVrUyxTQUFVLElBQUduQixzQkFBdUIsNENBQTJDLENBQUMsRUFBRTtRQUM5R2UsZUFBZSxHQUFHRSxVQUFVLENBQUNJLG9CQUFvQixDQUFFLEdBQUVGLFNBQVUsSUFBR25CLHNCQUF1QixzQ0FBcUMsQ0FBQztNQUNoSTtJQUNEO0lBQ0EsT0FBT2UsZUFBZTtFQUN2Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTTCxxQkFBcUIsQ0FDN0JWLHNCQUE4QixFQUM5QmYsZ0JBQXlCLEVBQ3pCcUMsbUJBQTJCLEVBQzNCQyxnQkFBd0IsRUFDZjtJQUNULE1BQU1DLFVBQVUsR0FBR3ZDLGdCQUFnQixDQUFDaFEsU0FBUyxDQUFDK1Esc0JBQXNCLENBQUM7SUFDckUsSUFBSXlCLFVBQVU7SUFDZCxJQUFJQyxjQUFjLEdBQUdGLFVBQVU7SUFDL0IsSUFBSUYsbUJBQW1CLEVBQUU7TUFDeEIsSUFBSXRCLHNCQUFzQixDQUFDelMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoRDtRQUNBeVMsc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDMkIsS0FBSyxDQUFDLENBQUMsRUFBRTNCLHNCQUFzQixDQUFDelMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyR3lTLHNCQUFzQixHQUFHQSxzQkFBc0IsQ0FBQ2hMLE1BQU0sQ0FBQ3NNLG1CQUFtQixDQUFDO01BQzVFLENBQUMsTUFBTTtRQUNOdEIsc0JBQXNCLEdBQUdzQixtQkFBbUI7TUFDN0M7TUFDQUcsVUFBVSxHQUFHeEMsZ0JBQWdCLENBQUNoUSxTQUFTLENBQUMrUSxzQkFBc0IsQ0FBQztNQUMvRCxJQUFJeUIsVUFBVSxFQUFFO1FBQ2YsSUFBSUYsZ0JBQWdCLEVBQUU7VUFDckIsTUFBTUssV0FBVyxHQUFHTCxnQkFBZ0IsQ0FBQ0ksS0FBSyxDQUFDSixnQkFBZ0IsQ0FBQ3hMLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDN0UsUUFBUTZMLFdBQVc7WUFDbEIsS0FBSyxVQUFVO2NBQ2RGLGNBQWMsR0FBR0QsVUFBVTtjQUMzQjtZQUNELEtBQUssV0FBVztjQUNmQyxjQUFjLEdBQUksR0FBRUQsVUFBVyxLQUFJRCxVQUFXLEdBQUU7Y0FDaEQ7WUFDRCxLQUFLLFVBQVU7Y0FDZEUsY0FBYyxHQUFJLEdBQUVGLFVBQVcsS0FBSUMsVUFBVyxHQUFFO2NBQ2hEO1lBQ0QsS0FBSyxjQUFjO2NBQ2xCQyxjQUFjLEdBQUdGLFVBQVU7Y0FDM0I7WUFDRDtVQUFRO1FBRVYsQ0FBQyxNQUFNO1VBQ05FLGNBQWMsR0FBSSxHQUFFRCxVQUFXLEtBQUlELFVBQVcsR0FBRTtRQUNqRDtNQUNEO0lBQ0Q7SUFDQSxPQUFPRSxjQUFjO0VBQ3RCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3hCLGVBQWUsQ0FBQzlRLFFBQTJCLEVBQUV3UCxNQUFnQixFQUEyQjtJQUNoRyxNQUFNaUQsc0JBQXNCLEdBQUd6UyxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRStHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDMkwsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxHQUFHLEVBQUU7SUFDekUsT0FBUW5ELE1BQU0sQ0FBQy9JLFNBQVMsRUFBRSxDQUFjbU0sa0JBQWtCLEVBQUUsQ0FBQ0MsT0FBTyxDQUFDOUMsSUFBSSxDQUFDLFVBQVUrQyxPQUFPLEVBQVc7TUFDckcsT0FBT0EsT0FBTyxDQUFDQyxHQUFHLENBQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsR0FBRyxFQUFFLEtBQUtGLHNCQUFzQjtJQUNoRSxDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNqQixtQkFBbUIsQ0FBQ1gscUJBQThDLEVBQUVILGFBQTRCLEVBQWtCO0lBQzFILE1BQU1hLFdBQTJCLEdBQUc7TUFBRUUsZ0JBQWdCLEVBQUUsRUFBRTtNQUFFQyxZQUFZLEVBQUU7SUFBRyxDQUFDO0lBQzlFLElBQUliLHFCQUFxQixFQUFFO01BQzFCO01BQ0EsSUFBSUEscUJBQXFCLENBQUNtQyxZQUFZLEtBQUssUUFBUSxFQUFFO1FBQ3BEekIsV0FBVyxDQUFDRyxZQUFZLEdBQUdqUCxTQUFTO1FBQ3BDOE8sV0FBVyxDQUFDRSxnQkFBZ0IsR0FBRyxXQUFXO01BQzNDLENBQUMsTUFBTTtRQUNOO1FBQ0FGLFdBQVcsQ0FBQ0csWUFBWSxHQUFJLEdBQUVoQixhQUFhLENBQUNyUSxPQUFPLENBQUMsMENBQTBDLENBQUUsS0FBSXFRLGFBQWEsQ0FBQ3JRLE9BQU8sQ0FDeEgsd0NBQXdDLENBQ3ZDLE1BQUt3USxxQkFBcUIsQ0FBQ0csS0FBTSxFQUFDO1FBQ3BDTyxXQUFXLENBQUNFLGdCQUFnQixHQUFHLFFBQVE7TUFDeEM7SUFDRCxDQUFDLE1BQU07TUFDTkYsV0FBVyxDQUFDRSxnQkFBZ0IsR0FBRyxTQUFTO0lBQ3pDO0lBQ0EsT0FBT0YsV0FBVztFQUNuQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVN0QixnQkFBZ0IsQ0FBQ1QsTUFBZ0IsRUFBRUcsVUFBa0IsRUFBMEI7SUFDdkYsTUFBTXhKLFFBQVEsR0FBR0MsVUFBVSxDQUFDQyxjQUFjLENBQUNzSixVQUFVLENBQUM7SUFDdEQsSUFBSXhKLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUN5RyxHQUFHLENBQVUsb0JBQW9CLENBQUMsSUFBSSxDQUFDekcsUUFBUSxDQUFDeUcsR0FBRyxDQUFRLGFBQWEsQ0FBQyxFQUFFO01BQ3BHLE9BQU80QyxNQUFNLENBQUM5SSxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVVzRyxLQUFjLEVBQVc7UUFDbkUsT0FBT0EsS0FBSyxDQUFDeEUsS0FBSyxFQUFFLEtBQUtyQyxRQUFRLENBQUNxQyxLQUFLLEVBQUU7TUFDMUMsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPLEtBQUs7RUFDYjtFQUVBLFNBQVMwSCwwQkFBMEIsQ0FBQy9KLFFBQWdDLEVBQVc7SUFDOUUsSUFBSThNLGNBQWMsR0FBRzlNLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFTSxTQUFTLEVBQUU7SUFDMUMsT0FDQ3dNLGNBQWMsSUFDZCxxQkFBQ0EsY0FBYyw0Q0FBZCxnQkFBZ0JyRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsS0FDeEMsc0JBQUNxRyxjQUFjLDZDQUFkLGlCQUFnQnJHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxLQUNoRCxzQkFBQ3FHLGNBQWMsNkNBQWQsaUJBQWdCckcsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQzNDO01BQUE7TUFDRHFHLGNBQWMsR0FBR0EsY0FBYyxDQUFDeE0sU0FBUyxFQUFFO0lBQzVDO0lBRUEsT0FBTyxDQUFDLENBQUN3TSxjQUFjLElBQUlBLGNBQWMsQ0FBQ3JHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztFQUMxRTtFQUVBLFNBQVNwQixpQ0FBaUMsQ0FBQ3hHLGdCQUF3QixFQUFVO0lBQzVFLE1BQU1rTyxjQUFjLEdBQUc3UixPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtJQUNuRSxRQUFRMEQsZ0JBQWdCO01BQ3ZCLEtBQUssT0FBTztRQUNYLE9BQU9rTyxjQUFjLENBQUM3UyxPQUFPLENBQUMsZ0RBQWdELENBQUM7TUFDaEYsS0FBSyxhQUFhO1FBQ2pCLE9BQU82UyxjQUFjLENBQUM3UyxPQUFPLENBQUMseURBQXlELENBQUM7TUFDekYsS0FBSyxTQUFTO1FBQ2IsT0FBTzZTLGNBQWMsQ0FBQzdTLE9BQU8sQ0FBQyw0REFBNEQsQ0FBQztNQUM1RixLQUFLLFNBQVM7UUFDYixPQUFPNlMsY0FBYyxDQUFDN1MsT0FBTyxDQUFDLDREQUE0RCxDQUFDO01BQzVGO1FBQ0MsT0FBTzZTLGNBQWMsQ0FBQzdTLE9BQU8sQ0FBQyxvREFBb0QsQ0FBQztJQUFDO0VBRXZGO0VBQ0EsU0FBU1csK0JBQStCLEdBQVM7SUFDaERtUyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7RUFDaEM7RUFDQSxTQUFTMUcsNkJBQTZCLENBQUMyRyxnQkFBeUIsRUFBUTtJQUN2RUQsd0JBQXdCLENBQUMsSUFBSSxFQUFFQyxnQkFBZ0IsQ0FBQztFQUNqRDtFQUVBLFNBQVNDLDJCQUEyQixDQUFDQyxhQUEyQixFQUFFRixnQkFBeUIsRUFBYTtJQUN2RyxJQUFJQSxnQkFBZ0IsS0FBSzNRLFNBQVMsRUFBRTtNQUNuQyxPQUFPNlEsYUFBYSxDQUFDelQsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUNwQztJQUNBLE1BQU0wVCxXQUFXLEdBQUdELGFBQWEsQ0FBQ3pMLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFFL0MwTCxXQUFXLENBQUNqTCxNQUFNLENBQ2pCLElBQUluRCxNQUFNLENBQUM7TUFDVnhDLElBQUksRUFBRSxRQUFRO01BQ2R5QyxRQUFRLEVBQUVDLGNBQWMsQ0FBQ21PLFVBQVU7TUFDbkNqTyxNQUFNLEVBQUU2TjtJQUNULENBQUMsQ0FBQyxDQUNGO0lBRUQsT0FBT0csV0FBVyxDQUFDeEwsa0JBQWtCLEVBQUUsQ0FBQzBMLEdBQUcsQ0FBQyxVQUFVbFAsUUFBUSxFQUFFO01BQy9ELE9BQU9BLFFBQVEsQ0FBQzFFLFNBQVMsRUFBRTtJQUM1QixDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2tGLFdBQVcsR0FBd0Y7SUFBQSxJQUF2RjJPLGNBQWMsdUVBQUcsS0FBSztJQUFBLElBQUVDLGVBQWUsdUVBQUcsS0FBSztJQUFBLElBQUVQLGdCQUF5QjtJQUM5RixJQUFJOVQsQ0FBQztJQUNMLE1BQU1nVSxhQUFhLEdBQUczVCxTQUFTLENBQUNDLGVBQWUsRUFBRTtNQUNoREgsZUFBZSxHQUFHNEIsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7TUFDOUR3RCxtQkFBbUIsR0FBRyxFQUFFO0lBQ3pCLElBQUlsRyxTQUFvQixHQUFHLEVBQUU7SUFDN0IsSUFBSThVLGNBQWMsSUFBSUMsZUFBZSxJQUFJUCxnQkFBZ0IsRUFBRTtNQUMxRHhVLFNBQVMsR0FBR3lVLDJCQUEyQixDQUFDQyxhQUFhLEVBQUVGLGdCQUFnQixDQUFDO0lBQ3pFLENBQUMsTUFBTTtNQUNOeFUsU0FBUyxHQUFHMFUsYUFBYSxDQUFDelQsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUN6QztJQUNBLEtBQUtQLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR1YsU0FBUyxDQUFDSSxNQUFNLEVBQUVNLENBQUMsRUFBRSxFQUFFO01BQ3RDLElBQ0MsQ0FBQyxDQUFDcVUsZUFBZSxJQUFJL1UsU0FBUyxDQUFDVSxDQUFDLENBQUMsQ0FBQzZRLGFBQWEsRUFBRSxNQUMvQ3VELGNBQWMsSUFBSTlVLFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUN5SCxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQ3JELENBQUMyTSxjQUFjLEtBQUssQ0FBQzlVLFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUN5SCxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSW5JLFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUN5SCxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUUsQ0FBQyxFQUM1RjtRQUNEakMsbUJBQW1CLENBQUNlLElBQUksQ0FBQ2pILFNBQVMsQ0FBQ1UsQ0FBQyxDQUFDLENBQUM7TUFDdkM7SUFDRDtJQUVBLEtBQUtBLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dGLG1CQUFtQixDQUFDOUYsTUFBTSxFQUFFTSxDQUFDLEVBQUUsRUFBRTtNQUNoRCxJQUNDd0YsbUJBQW1CLENBQUN4RixDQUFDLENBQUMsQ0FBQzhFLE9BQU8sRUFBRSxLQUFLLEtBQUssSUFDMUNVLG1CQUFtQixDQUFDeEYsQ0FBQyxDQUFDLENBQUN5SixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQzFDLENBQUNqRSxtQkFBbUIsQ0FBQ3hGLENBQUMsQ0FBQyxDQUFDeUosVUFBVSxFQUFFLENBQUNnRCxRQUFRLENBQUN0TSxlQUFlLENBQUNZLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ3BIO1FBQ0R5RSxtQkFBbUIsQ0FBQ3hGLENBQUMsQ0FBQyxDQUFDaUIsVUFBVSxDQUMvQixLQUFJZCxlQUFlLENBQUNZLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBRSxHQUFFeUUsbUJBQW1CLENBQUN4RixDQUFDLENBQUMsQ0FBQ3lKLFVBQVUsRUFBRyxFQUFDLENBQ25IO01BQ0Y7SUFDRDtJQUNBO0lBQ0EsTUFBTTZLLGVBQTBCLEdBQUc5TyxtQkFBbUIsQ0FBQ3dELE1BQU0sQ0FBQ3RFLHFCQUFxQixDQUFDO0lBRXBGLE9BQU80UCxlQUFlO0VBQ3ZCO0VBU0EsU0FBU1Qsd0JBQXdCLENBQUNPLGNBQXVCLEVBQUVOLGdCQUF5QixFQUFRO0lBQzNGLE1BQU1TLG9CQUFvQixHQUFHOU8sV0FBVyxDQUFDMk8sY0FBYyxFQUFFLElBQUksRUFBRU4sZ0JBQWdCLENBQUM7SUFFaEYsSUFBSVMsb0JBQW9CLENBQUM3VSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3BDVyxTQUFTLENBQUNXLGNBQWMsQ0FBQ3VULG9CQUFvQixDQUFDO0lBQy9DO0VBQ0Q7RUFDQTtFQUNBLFNBQVNDLGtCQUFrQixDQUFDdEUsTUFBZ0IsRUFBRXVFLFNBQW9CLEVBQUU5UCxPQUEwQixFQUFRO0lBQ3JHLElBQUlBLE9BQU8sQ0FBQytQLGNBQWMsS0FBS3ZSLFNBQVMsRUFBRTtNQUN6QyxNQUFNd1IsY0FBYyxHQUFJekUsTUFBTSxDQUFDL0ksU0FBUyxFQUFFLENBQWNnSCxtQkFBbUIsRUFBWTtNQUN2RixNQUFNeUcsWUFBWSxHQUFHSCxTQUFTLENBQUNoRSxJQUFJLENBQUMsVUFBVXhMLFFBQVEsRUFBRTtRQUN2RCxPQUFPTixPQUFPLENBQUM4QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ2dGLFFBQVEsQ0FBQ3hILFFBQVEsQ0FBQzZJLE9BQU8sRUFBRSxDQUFDO01BQzVELENBQUMsQ0FBQztNQUNGbkosT0FBTyxDQUFDK1AsY0FBYyxHQUFHRSxZQUFZLEdBQUdBLFlBQVksQ0FBQ3JVLFNBQVMsRUFBRSxDQUFDb1UsY0FBYyxDQUFDLEdBQUd4UixTQUFTO0lBQzdGO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzRMLHNDQUFzQyxDQUFDOEYsaUJBQTZDLEVBQXVCO0lBQ25ILE9BQVFBLGlCQUFpQixDQUFzQkMsV0FBVyxFQUFFLENBQUM5TCxNQUFNLENBQUMsVUFBVWdHLFFBQTJCLEVBQUU7TUFDMUcsT0FBT0EsUUFBUSxDQUFDK0YsVUFBVSxFQUFFO0lBQzdCLENBQUMsQ0FBQztFQUNIOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MseUNBQXlDLENBQUNDLFVBQWdDLEVBQUVwTCxjQUFpQyxFQUFnQjtJQUNySSxPQUFPb0wsVUFBVSxDQUNmN04sWUFBWSxDQUFDLElBQUksRUFBR3NHLEtBQUssSUFBSztNQUM5QixPQUFPd0gsZUFBZSxDQUFDckwsY0FBYyxDQUFDMkcsYUFBYSxFQUFFLEVBQUU5QyxLQUFLLENBQUM7SUFDOUQsQ0FBQyxDQUFDLENBQ0RwRCxJQUFJLENBQUMsVUFBVTZLLENBQUMsRUFBRUMsQ0FBQyxFQUFFO01BQ3JCO01BQ0E7TUFDQSxJQUFJRCxDQUFDLENBQUM3SCxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDOEgsQ0FBQyxDQUFDOUgsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDNUQsT0FBTyxDQUFDLENBQUM7TUFDVjtNQUNBLE9BQU8sQ0FBQztJQUNULENBQUMsQ0FBQztFQUNKO0VBRUEsU0FBU2dCLG1CQUFtQixDQUFDNEIsTUFBZSxFQUFFckcsY0FBaUMsRUFBRXdMLFlBQThCLEVBQVU7SUFDeEg7SUFDQSxNQUFNQyxjQUFjLEdBQUcsVUFBVUMsQ0FBUyxFQUFVO01BQ25ELE9BQU9BLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQztJQUNsRCxDQUFDO0lBQ0Q7SUFDQTtJQUNBLElBQUksQ0FBQ0gsWUFBWSxFQUFFO01BQUE7TUFDbEIsTUFBTUksbUJBQW1CLEdBQUksNEJBQUV2RixNQUFNLENBQUN2QixpQkFBaUIsRUFBRSwwREFBMUIsc0JBQTRCYixPQUFPLEVBQUcsSUFBSW9DLE1BQU0sQ0FBY3RDLGFBQWEsRUFBRSxDQUFDRSxPQUFPLEVBQUcsRUFBQztNQUN4SHVILFlBQVksR0FBRyxJQUFJSyxNQUFNLENBQUUsR0FBRUosY0FBYyxDQUFDRyxtQkFBbUIsQ0FBRSxXQUFVLENBQUM7SUFDN0U7SUFDQSxPQUFPNUwsY0FBYyxDQUFDcEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMrTixPQUFPLENBQUNILFlBQVksRUFBRSxFQUFFLENBQUM7RUFDaEU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTN0csZUFBZSxDQUN2QjBCLE1BQWdCLEVBQ2hCeUYsdUJBQTJDLEVBQ2dEO0lBQzNGLElBQUlwSCxtQkFBdUM7SUFDM0MsTUFBTXFILGVBQW1DLEdBQUcxRixNQUFNLENBQUMyRixVQUFVLEVBQUUsQ0FBQ3BGLElBQUksQ0FBQyxVQUFVcUYsTUFBTSxFQUFFO01BQ3RGLE9BQU9BLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFLElBQUlKLHVCQUF1QjtJQUMxRCxDQUFDLENBQUM7SUFDRixJQUFJLENBQUNDLGVBQWUsRUFBRTtNQUNyQjtNQUNBLE1BQU1JLGFBQWEsR0FBSTlGLE1BQU0sQ0FBQytGLGtCQUFrQixFQUFFLENBQTBCQyxhQUFhLENBQUNoRyxNQUFNLENBQUMsQ0FBQ08sSUFBSSxDQUFDLFVBQ3RHK0MsT0FBb0IsRUFDVjtRQUNWLElBQUksQ0FBQyxDQUFFQSxPQUFPLENBQTRCeFAsUUFBUSxJQUFJd1AsT0FBTyxDQUFDMkMsYUFBYSxFQUFFO1VBQzVFLE9BQ0MzQyxPQUFPLENBQUMyQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUtSLHVCQUF1QixJQUNwRG5DLE9BQU8sQ0FBQzJDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQ1gsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBS0csdUJBQXVCO1FBRWhGLENBQUMsTUFBTTtVQUNOLE9BQU8sS0FBSztRQUNiO01BQ0QsQ0FBQyxDQUF1QztNQUN4QyxJQUFJSyxhQUFhLEVBQUU7UUFBQTtRQUNsQkwsdUJBQXVCLEdBQUdLLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFSSxJQUFJO1FBRTdDN0gsbUJBQW1CLDRCQUFHMkIsTUFBTSxDQUMxQjJGLFVBQVUsRUFBRSxDQUNacEYsSUFBSSxDQUFDLFVBQVUrQyxPQUFPLEVBQVc7VUFDakMsT0FBT21DLHVCQUF1QixLQUFLbkMsT0FBTyxDQUFDdUMsY0FBYyxFQUFFO1FBQzVELENBQUMsQ0FBQywwREFKbUIsc0JBS25CdEgsU0FBUyxFQUFFO01BQ2YsQ0FBQyxNQUFNO1FBQ047UUFDQSxNQUFNNEgsUUFBUSxHQUFJbkcsTUFBTSxDQUFDK0Ysa0JBQWtCLEVBQUUsQ0FBMEJDLGFBQWEsQ0FBQ2hHLE1BQU0sQ0FBQztRQUM1RixNQUFNb0csZ0JBQWdCLEdBQUdELFFBQVEsQ0FBQzVGLElBQUksQ0FBQyxVQUFVK0MsT0FBb0IsRUFBRTtVQUN0RSxJQUFJQSxPQUFPLENBQUNDLEdBQUcsQ0FBQ2hILFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQUE7WUFDM0MsZ0NBQU8rRyxPQUFPLENBQUMyQyxhQUFhLDBEQUFyQixzQkFBdUIxRixJQUFJLENBQUMsVUFBVThGLFlBQW9CLEVBQUU7Y0FDbEUsT0FDQ0EsWUFBWSxLQUFLWix1QkFBdUIsSUFBSVksWUFBWSxDQUFDZixPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLRyx1QkFBdUI7WUFFaEgsQ0FBQyxDQUFDO1VBQ0g7UUFDRCxDQUFDLENBQXNDO1FBQ3ZDO1FBQ0EsSUFBSWEsd0JBQXdCLEdBQUcsS0FBSztRQUNwQyxJQUFJRixnQkFBZ0IsSUFBSUEsZ0JBQWdCLENBQUM1RSxLQUFLLEVBQUU7VUFDL0M4RSx3QkFBd0IsR0FBR3RHLE1BQU0sQ0FBQzJGLFVBQVUsRUFBRSxDQUFDWSxJQUFJLENBQUMsVUFBVVgsTUFBTSxFQUFFO1lBQ3JFLE9BQU9BLE1BQU0sQ0FBQ3JILFNBQVMsRUFBRSxLQUFLNkgsZ0JBQWdCLENBQUM1RSxLQUFLO1VBQ3JELENBQUMsQ0FBQztRQUNIO1FBQ0FuRCxtQkFBbUIsR0FBR2lJLHdCQUF3QixHQUFHRixnQkFBZ0IsYUFBaEJBLGdCQUFnQix1QkFBaEJBLGdCQUFnQixDQUFFNUUsS0FBSyxHQUFHdk8sU0FBUztRQUNwRndTLHVCQUF1QixHQUFHYSx3QkFBd0IsR0FBR0YsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRTdDLEdBQUcsR0FBR3RRLFNBQVM7TUFDdkY7SUFDRCxDQUFDLE1BQU07TUFDTm9MLG1CQUFtQixHQUFHcUgsZUFBZSxDQUFDbkgsU0FBUyxFQUFFO0lBQ2xEO0lBQ0EsT0FBTztNQUFFRixtQkFBbUIsRUFBRUEsbUJBQW1CO01BQUVvSCx1QkFBdUIsRUFBRUE7SUFBd0IsQ0FBQztFQUN0Rzs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTdkYscUJBQXFCLENBQzdCRixNQUFnQixFQUNoQnJHLGNBQWlDLEVBQ2pDeUYsUUFBZ0MsRUFDaEMzQixXQUFvQixFQUNFO0lBQ3RCLE1BQU1nSSx1QkFBdUIsR0FBR3JILG1CQUFtQixDQUFDNEIsTUFBTSxFQUFFckcsY0FBYyxDQUFDO0lBQzNFLE1BQU02TSxhQUFhLEdBQUdsSSxlQUFlLENBQUMwQixNQUFNLEVBQUV5Rix1QkFBdUIsQ0FBQztJQUN0RSxNQUFNM0Usd0JBQXdCLEdBQUcxQixRQUFRLGFBQVJBLFFBQVEsZUFBUkEsUUFBUSxDQUFFaEMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEdBQ2hFSyxXQUFXLENBQXNCK0IsV0FBVyxFQUFFLEdBQzlDL0IsV0FBVyxDQUFzQmxGLGtCQUFrQixFQUFFO0lBQ3pELE1BQU1nSCxnQkFBcUMsR0FBRztNQUM3Q3VCLHdCQUF3QjtNQUN4QnpDLG1CQUFtQixFQUFFbUksYUFBYSxDQUFDbkksbUJBQW1CO01BQ3REb0gsdUJBQXVCLEVBQUVlLGFBQWEsQ0FBQ2YsdUJBQXVCO01BQzlEcEYsZ0JBQWdCLEVBQUVTLHdCQUF3QixDQUFDUCxJQUFJLENBQUMsVUFBVXpDLFVBQVUsRUFBRTtRQUNyRSxPQUFPQSxVQUFVLElBQUluRSxjQUFjLENBQUNwQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0osT0FBTyxDQUFDMkcsVUFBVSxDQUFDRixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7TUFDeEYsQ0FBQztJQUNGLENBQUM7SUFDRCxPQUFPMkIsZ0JBQWdCO0VBQ3hCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVN5RixlQUFlLENBQUN4TyxXQUFxQixFQUFFaVEsS0FBaUIsRUFBVztJQUMzRSxPQUFPalEsV0FBVyxDQUFDK1AsSUFBSSxDQUFDLFVBQVVwRyxVQUFVLEVBQUU7TUFDN0MsSUFBSUEsVUFBVSxLQUFLc0csS0FBSyxDQUFDek4sS0FBSyxFQUFFLEVBQUU7UUFDakMsT0FBTyxJQUFJO01BQ1o7TUFDQSxPQUFPLEtBQUs7SUFDYixDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMwTixzQkFBc0IsQ0FDOUJDLE9BQTBCLEVBQzFCNUIsVUFBZ0MsRUFDaEM2QixvQkFBNkIsRUFDN0JySCxnQkFBcUMsRUFDckMyQixhQUE0QixFQUNuQjtJQUNULE9BQ0N5RixPQUFPLENBQUMvRyxRQUFRLEVBQUUsSUFDakJtRixVQUFVLENBQUNuRixRQUFRLEVBQUUsSUFBSWdILG9CQUFvQixHQUFJLEtBQUk3QixVQUFVLENBQUNuRixRQUFRLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUNsRkwsZ0JBQWdCLElBQUlBLGdCQUFnQixDQUFDSSxXQUFXLEdBQzdDLEtBQUl1QixhQUFhLENBQUNyUSxPQUFPLENBQUMseUNBQXlDLENBQUUsS0FBSTBPLGdCQUFnQixDQUFDSSxXQUFZLEVBQUMsR0FDeEcsRUFBRSxDQUFDO0VBRVI7RUFFQSxTQUFTa0gsZ0JBQWdCLENBQUN6SCxRQUFvQixFQUFFMEgsU0FBdUIsRUFBVztJQUNqRixPQUFPLENBQUNBLFNBQVMsQ0FBQ1AsSUFBSSxDQUFDLFVBQVUvSSxLQUFLLEVBQUU7TUFDdkMsSUFBSXVKLGNBQWMsR0FBRzNILFFBQVEsQ0FBQ25JLFNBQVMsRUFBRTtNQUN6QyxPQUFPOFAsY0FBYyxJQUFJQSxjQUFjLEtBQUt2SixLQUFLLEVBQUU7UUFDbER1SixjQUFjLEdBQUdBLGNBQWMsQ0FBQzlQLFNBQVMsRUFBRTtNQUM1QztNQUNBLE9BQU84UCxjQUFjLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDckMsQ0FBQyxDQUFDO0VBQ0g7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNdk4sZUFBb0MsR0FBRztJQUM1Q2pFLFdBQVcsRUFBRUEsV0FBVztJQUN4QlYsbUJBQW1CLEVBQUVBLG1CQUFtQjtJQUN4Q3JELCtCQUErQixFQUFFQSwrQkFBK0I7SUFDaEV5TCw2QkFBNkIsRUFBRUEsNkJBQTZCO0lBQzVEaEYsc0JBQXNCLEVBQUVqSSx3QkFBd0I7SUFDaER5QixvQkFBb0IsRUFBRUEsb0JBQW9CO0lBQzFDaUIsMkJBQTJCLEVBQUVBLDJCQUEyQjtJQUN4RDRSLGtCQUFrQixFQUFFQSxrQkFBa0I7SUFDdEN6RixzQ0FBc0MsRUFBRUEsc0NBQXNDO0lBQzlFaUcseUNBQXlDLEVBQUVBLHlDQUF5QztJQUNwRkUsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDOUUscUJBQXFCLEVBQUVBLHFCQUFxQjtJQUM1Q3dHLHNCQUFzQixFQUFFQSxzQkFBc0I7SUFDOUNHLGdCQUFnQixFQUFFQSxnQkFBZ0I7SUFDbEN0Siw4QkFBOEIsRUFBRUEsOEJBQThCO0lBQzlEOEIsK0JBQStCLEVBQUVBLCtCQUErQjtJQUNoRWYsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDRixtQkFBbUIsRUFBRUEsbUJBQW1CO0lBQ3hDeUMsa0JBQWtCLEVBQUVBLGtCQUFrQjtJQUN0Q21CLG1CQUFtQixFQUFFQSxtQkFBbUI7SUFDeENWLGVBQWUsRUFBRUEsZUFBZTtJQUNoQ0ksK0NBQStDLEVBQUVBLCtDQUErQztJQUNoR3pILGNBQWMsRUFBRUEsY0FBYztJQUM5QnFGLHNCQUFzQixFQUFFQSxzQkFBc0I7SUFDOUN3QyxxQkFBcUIsRUFBRUEscUJBQXFCO0lBQzVDeEUseUJBQXlCLEVBQUVBLHlCQUF5QjtJQUNwRDdELDRCQUE0QixFQUFFQSw0QkFBNEI7SUFDMUQ0RCxtQkFBbUIsRUFBRUEsbUJBQW1CO0lBQ3hDb0QsZ0JBQWdCLEVBQUVBLGdCQUFnQjtJQUNsQ0MsMEJBQTBCLEVBQUVBO0VBQzdCLENBQUM7RUFBQyxPQUVhbEgsZUFBZTtBQUFBIn0=