@sapui5/sap.fe.core 1.124.2 → 1.124.3

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.
@@ -236,7 +236,8 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
236
236
  },
237
237
  items: {
238
238
  path: "/",
239
- template: oMessageTemplate
239
+ template: oMessageTemplate,
240
+ length: 9999
240
241
  }
241
242
  });
242
243
  oMessageView.setGroupItems(true);
@@ -1222,4 +1223,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1222
1223
  };
1223
1224
  return messageHandling;
1224
1225
  }, false);
1225
- //# 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+XCIgKyAnICsgZm5Gb3JtYXREZXNjcmlwdGlvbigpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcgPVxuXHRcdFx0J3s9ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICsgJyArIFwiPC9odG1sPjwvYm9keT5cIiA6IFwiXCIgfSc7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0Z3JvdXBOYW1lOiBcIntoZWFkZXJOYW1lfVwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uQmluZGluZyArIHRlY2huaWNhbERldGFpbHNCaW5kaW5nLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIGlmIChtdWx0aTQxMikge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIntkZXNjcmlwdGlvbn1cIixcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGVcblx0XHR9XG5cdH0pO1xuXHRvTWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKTogdm9pZCB7XG5cdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdG9NZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRvTWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRzaG93TWVzc2FnZUJveD86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nPzogYm9vbGVhbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/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+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogZ2V0VGFibGVGaXJzdENvbFZhbHVlLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUE4Q0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsSUFBSUUsWUFBdUIsR0FBRyxFQUFFO0VBQ2hDLElBQUlDLGdCQUEyQixHQUFHLEVBQUU7RUFDcEMsSUFBSUMsaUJBQTZCLEdBQUcsRUFBRTtFQUN0QyxJQUFJQyxPQUFlO0VBQ25CLElBQUlDLFdBQW1CO0VBQ3ZCLElBQUlDLFlBQXlCO0VBd0g3QixTQUFTQyx3QkFBd0IsR0FBVztJQUMzQyxJQUFJQyxrQkFBMEI7O0lBRTlCO0lBQ0EsU0FBU0MsWUFBWSxDQUFDQyxTQUFrRCxFQUFVO01BQ2pGLE9BQU9BLFNBQVMsQ0FBQ0MsUUFBUSxHQUN0QixNQUFNLEdBQ05ELFNBQVMsQ0FBQ0MsUUFBUSxH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
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==