@sapui5/sap.fe.core 1.120.13 → 1.120.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -2
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +2 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -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);
|
|
@@ -1214,4 +1215,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
1214
1215
|
};
|
|
1215
1216
|
return messageHandling;
|
|
1216
1217
|
}, false);
|
|
1217
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJkZXNjcmlwdGlvbkJpbmRpbmciLCJ0ZWNobmljYWxEZXRhaWxzQmluZGluZyIsIk1lc3NhZ2VJdGVtIiwidW5kZWZpbmVkIiwiY291bnRlciIsInBhdGgiLCJ0aXRsZSIsInN1YnRpdGxlIiwibG9uZ3RleHRVcmwiLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJzZXRHcm91cEl0ZW1zIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJiT25seUZvclRlc3QiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidmlld1R5cGUiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJiSGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiZ2V0Q29kZSIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImFNb2RlbERhdGFBcnJheSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImN1cnJlbnRDb250ZXh0IiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiaWQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwibWVzc2FnZUhhbmRsaW5nIiwidXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSIsInJlamVjdCIsInRoZW4iLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9NZXNzYWdlT2JqZWN0Iiwib1NvcnRlciIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJnZXRNZXNzYWdlUmFuayIsInJhbmtCIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiY2FsbCIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZSIsInNldEJlZ2luQnV0dG9uIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiRW1waGFzaXplZCIsImRlc3Ryb3lCZWdpbkJ1dHRvbiIsImdldEl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nIiwic2V0U3RhdGUiLCJnZXRDdXN0b21IZWFkZXIiLCJnZXRDb250ZW50TWlkZGxlIiwic2V0VGV4dCIsIm9wZW4iLCJjYXRjaCIsInRlY2huaWNhbERldGFpbHMiLCJpbmNsdWRlcyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZ2V0TWVzc2FnZSIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJvbkNsb3NlIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJhTW9kZWxEYXRhIiwiZ2VuZXJhbEdyb3VwVGV4dCIsImlzQSIsInNldEdyb3VwTmFtZUxSVGFibGUiLCJzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlIiwiZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lIiwib0VsZW0iLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJzRWxlbWVCaW5kaW5nUGF0aCIsImdldFBhdGgiLCJhbGxSb3dDb250ZXh0cyIsInJvd0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImlkZW50aWZpZXJDb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwicm93SWRlbnRpZmllciIsImNvbHVtblByb3BlcnR5TmFtZSIsImdldFRhYmxlQ29sUHJvcGVydHkiLCJzVGFibGVUYXJnZXRDb2xOYW1lIiwiZ2V0VGFibGVDb2xJbmZvIiwiZ2V0SGVhZGVyIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImdldENvbnRlbnQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50Iiwib0VsZW1lbnQiLCJnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9UYXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsImhlYWRlck5hbWUiLCJnZXRIZWFkZXJWaXNpYmxlIiwidGFibGVIZWFkZXIiLCJnZXRUaXRsZSIsInNMYXN0QWN0aW9uVGV4dCIsInRvU3RyaW5nIiwiYU1lc3NhZ2UiLCJzR2VuZXJhbEdyb3VwVGV4dCIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJvVGFyZ2V0ZWRDb250cm9sIiwic01lc3NhZ2VTdWJ0aXRsZSIsInNSb3dTdWJ0aXRsZVZhbHVlIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzVGFibGVGaXJzdENvbFByb3BlcnR5Iiwib0NvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiaXNJbmFjdGl2ZSIsImxhYmVsIiwib1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCIsInNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50IiwiZ2V0VmFsdWUiLCJnZXRUYWJsZUZpcnN0Q29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwib0JpbmRpbmdDb250ZXh0Iiwib01vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVGV4dEFubm90YXRpb25QYXRoIiwic1RleHRBcnJhbmdlbWVudCIsInNDb2RlVmFsdWUiLCJzVGV4dFZhbHVlIiwic0NvbXB1dGVkVmFsdWUiLCJzbGljZSIsInNFbnVtTnVtYmVyIiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsImdldFRhcmdldHMiLCJzcGxpdCIsInBvcCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJvQ29sdW1uIiwia2V5IiwiU3RyaW5nIiwiYXZhaWxhYmlsaXR5IiwiZ2V0SWQiLCJvUGFyZW50Q29udHJvbCIsInJlc291cmNlQnVuZGxlIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwic1BhdGhUb0JlUmVtb3ZlZCIsImdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbCIsIm9NZXNzYWdlTW9kZWwiLCJsaXN0QmluZGluZyIsIlN0YXJ0c1dpdGgiLCJtYXAiLCJiQm91bmRNZXNzYWdlcyIsImJUcmFuc2l0aW9uT25seSIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiZm5GaWx0ZXJVcG9uSWRzIiwiYSIsImIiLCJvQ29udGV4dFBhdGgiLCJmblJlZ0V4cGVzY2FwZSIsInMiLCJyZXBsYWNlIiwiUmVnRXhwIiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJvVGFibGVUYXJnZXRDb2wiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiZ2V0RGF0YVByb3BlcnR5Iiwib0N1c3RvbUNvbHVtbiIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldENvbHVtbnNGb3IiLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwicHJvcGVydHlJbmZvIiwiYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlIiwic29tZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZURlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW47XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmc7XG5cdHRhYmxlSGVhZGVyOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbHVtbldpdGhMYWJlbFR5cGUgPSBDb2x1bW4gJiB7XG5cdGxhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGFueSwgYlRyYW5zaXRpb25Pbmx5PzogYW55KSA9PiBhbnlbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRcdG9Db250ZXh0PzogYW55LFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdG9Db250cm9sPzogQ29udHJvbCxcblx0XHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IGFueSxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpID0+IFByb21pc2U8YW55Pjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkgPT4gYW55O1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sIGlzTXVsdGk0MTI/OiBib29sZWFuKSA9PiBhbnk7XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gYW55O1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogQm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBhbnlcblx0KSA9PiBDb2xJbmZvQW5kU3VidGl0bGVUeXBlO1xuXHRnZXRUYWJsZUNvbEluZm86IChvVGFibGU6IENvbnRyb2wsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcpID0+IGFueTtcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogKG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBhbnkpID0+IGFueTtcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiAoXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW4sXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IGFueSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCkgPT4gQ29sdW1uSW5mb1R5cGU7XG5cdGZldGNoQ29sdW1uSW5mbzogKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBUYWJsZSkgPT4gQ29sdW1uO1xuXHRnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogKFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogQm9vbGVhbikgPT4gYW55O1xuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IChcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogQ29udGV4dCxcblx0XHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG5cdCkgPT4gc3RyaW5nO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IGFueSkgPT4gdm9pZDtcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogKFxuXHRcdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cihNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzVGV4dGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9jb2RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvbWVzc2FnZWAgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBgJHtzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpfSR7aW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSl9ICsgYDtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKSB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50OiBhbnkgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCldO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyICYmIG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuXHRcdFx0aWYgKGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS50YXJnZXQgPSBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdGJNZXNzYWdlc01vZGlmaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYk1lc3NhZ2VzTW9kaWZpZWQ7XG59XG4vLyBEaWFsb2cgY2xvc2UgSGFuZGxpbmdcbmZ1bmN0aW9uIGRpYWxvZ0Nsb3NlSGFuZGxlcigpIHtcblx0b0RpYWxvZy5jbG9zZSgpO1xuXHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWw6IGFueSA9IG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbiwgbXVsdGk0MTI/OiBib29sZWFuKSB7XG5cdGxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25CaW5kaW5nID0gJ3s9ICR7ZGVzY3JpcHRpb259ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdERlc2NyaXB0aW9uKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzQmluZGluZyA9XG5cdFx0XHQnez0gJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRncm91cE5hbWU6IFwie2hlYWRlck5hbWV9XCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25CaW5kaW5nICsgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKG11bHRpNDEyKSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0ZGVzY3JpcHRpb246IFwie2Rlc2NyaXB0aW9ufVwiLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0b01lc3NhZ2VWaWV3ID0gbmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdGl0ZW1TZWxlY3Q6IGZ1bmN0aW9uICgpIHtcblx0XHRcdG9CYWNrQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSxcblx0XHRpdGVtczoge1xuXHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdH1cblx0fSk7XG5cdG9NZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdHNBY3Rpb25OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyczogYW55KSA9PiBhbnksXG5cdHZpZXdUeXBlPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuXHRsZXQgYVRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBDb250cm9sO1xuXHRcdFx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkUmFua2luRGlhbG9nID1cblx0XHRcdFx0XHRvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZ1xuXHRcdFx0XHRcdFx0PyAoZXJyb3JGaWVsZENvbnRyb2wuZ2V0UGFyZW50KCkgYXMgYW55KS5maW5kRWxlbWVudHModHJ1ZSkuaW5kZXhPZihlcnJvckZpZWxkQ29udHJvbClcblx0XHRcdFx0XHRcdDogSW5maW5pdHk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGZpZWxkUmFua2luRGlhbG9nO1xuXHRcdFx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2wuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0XHRhRmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBvbmx5IHVuYm91bmQgbWVzc2FnZXMgaGF2ZSB0byBiZSBzaG93biBzbyBhZGQgZmlsdGVyIGFjY29yZGluZ2x5XG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJ0YXJnZXRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IFwiXCIgfSkpO1xuXHR9XG5cdGlmIChhQ3VzdG9tTWVzc2FnZXMgJiYgYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFDdXN0b21NZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0XHR9KTtcblx0fVxuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gKG9NZXNzYWdlVmlldyAmJiAob01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsKSkgfHwgbmV3IEpTT05Nb2RlbCgpO1xuXHRjb25zdCBiSGFzRXRhZ01lc3NhZ2UgPSB0aGlzLm1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyLCBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIikge1xuXHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0fVxuXHRsZXQgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnk7XG5cdGxldCBhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10gPSBbXTtcblx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8ICghc2hvd01lc3NhZ2VCb3ggJiYgIW9uQmVmb3JlU2hvd01lc3NhZ2UpKSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblxuXHRcdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogYW55ID0ge307XG5cblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IGFNZXNzYWdlRGF0YUxpc3QuY29uY2F0KGV4aXN0aW5nTWVzc2FnZXMpLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5pZF0gJiYgKG9VbmlxdWVPYmpbb2JqLmlkXSA9IHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1vZGVsRGF0YUFycmF5KTtcblx0XHR9XG5cdH1cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7IHNob3dNZXNzYWdlQm94LCBzaG93TWVzc2FnZURpYWxvZyB9O1xuXHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IG9uQmVmb3JlU2hvd01lc3NhZ2UoYVRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRzaG93TWVzc2FnZUJveCA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZUJveDtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZURpYWxvZztcblx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cgfHwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykge1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgPyBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZmlsdGVyZWRNZXNzYWdlcyA6IGFNb2RlbERhdGFBcnJheTtcblx0XHR9XG5cdH1cblx0aWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFhQ3VzdG9tTWVzc2FnZXMgJiYgIWJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyB0cmFuc2llbnQgbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9IGVsc2UgaWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFhQ3VzdG9tTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0ubWVzc2FnZSk7XG5cdFx0XHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFUcmFuc2l0aW9uTWVzc2FnZXMpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nICYmIGFNb2RlbERhdGFBcnJheS5sZW5ndGgpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShhTW9kZWxEYXRhQXJyYXksIGNvbnRyb2wsIHNBY3Rpb25OYW1lLCB2aWV3VHlwZSk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7IC8vIHNldCB0aGUgbWVzc2FnZXMgaGVyZSBzbyB0aGF0IGlmIGFueSBvZiB0aGVtIGFyZSBmaWx0ZXJlZCBmb3IgQVBELCB0aGV5IGFyZSBmaWx0ZXJlZCBoZXJlIGFzIHdlbGwuXG5cdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBhUmVzb2x2ZUZ1bmN0aW9ucyB8fCBbXTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHRDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRjb25zdCBvU29ydGVyID0gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IGFueSwgb2JqMjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLnNvcnQob1NvcnRlcik7XG5cblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKVxuXHRcdFx0XHRcdFx0XHQ/IG9EaWFsb2dcblx0XHRcdFx0XHRcdFx0OiBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhUmVzb2x2ZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQgIH0pO1xuXHRcdFx0XHRcdG9EaWFsb2cucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0XHRcdG9EaWFsb2cuYWRkQ29udGVudChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcpO1xuXG5cdFx0XHRcdFx0aWYgKGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vQnV0dG9uVHlwZVwiXSwgZnVuY3Rpb24gKEJ1dHRvblR5cGU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkob01lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0KG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgYW55KS5nZXRDb250ZW50TWlkZGxlKClbMF0uc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0XHRcdGlmIChiT25seUZvclRlc3QpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUob0RpYWxvZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscyAmJiAhYU1lc3NhZ2VMaXN0LmluY2x1ZGVzKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpKSB8fFxuXHRcdFx0XHQoc2hvd01lc3NhZ2VQYXJhbWV0ZXJzICYmIHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpXG5cdFx0XHQpIHtcblx0XHRcdFx0aWYgKCFzaG93TWVzc2FnZVBhcmFtZXRlcnMgfHwgIXNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpIHtcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYDxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUob01lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0OiBhbnkgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCwge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ3JvdXAgbmFtZSBmb3IgYWxsIG1lc3NhZ2VzIGluIGEgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbikge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZUxSVGFibGUoY29udHJvbCwgYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2aWV3VHlwZSA9PT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0Ly8gT1AgRGlzcGxheSBtb2RlXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lLCBjb250cm9sKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBhbnkpIHtcblx0Y29uc3Qgb1ZpZXdDb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0Y29uc3Qgb3BMYXlvdXQ6IENvbnRyb2wgPSBjb250cm9sPy5nZXRDb250ZW50ICYmIGNvbnRyb2w/LmdldENvbnRlbnQoKVswXTtcblx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRpZiAob3BMYXlvdXQpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob3BMYXlvdXQpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0c3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0uZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRvRWxlbS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW1lbnQuaXNBKFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHtvRWxlbS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3Jvd0lkZW50aWZpZXJ9LCAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGhlYWRlck5hbWUgPSBvRWxlbS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJOYW1lID0gb1N1YlNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7aGVhZGVyTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdC8vIGNoZWNrIGlmIE9QIGNvbnRleHQgcGF0aCBpcyBwYXJ0IG9mIHRhcmdldCwgc2V0IExhc3QgQWN0aW9uIGFzIGdyb3VwIG5hbWVcblx0XHRcdGNvbnN0IGhlYWRlck5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gaGVhZGVyTmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyBSYW5rIG9mIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVJhbmsob2JqOiBNZXNzYWdlV2l0aEhlYWRlcik6IG51bWJlciB7XG5cdGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkxhc3QgQWN0aW9uXCIpKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH0gZWxzZSBpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJHZW5lcmFsXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIHdoaWNoIGNhbiBlaXRoZXIgR2VuZXJhbCBvciBMYXN0IEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIGJJc0dlbmVyYWxHcm91cE5hbWVcbiAqL1xuY29uc3QgZm5DYWxsYmFja1NldEdyb3VwTmFtZSA9IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBCb29sZWFuKSA9PiB7XG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0dlbmVyYWxHcm91cFRleHQgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBzR2VuZXJhbEdyb3VwVGV4dDtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBzZXRTZWN0aW9uTmFtZUluR3JvdXBcbiAqIEBwYXJhbSBmblNldEdyb3VwTmFtZVxuICogQHJldHVybnMgVGFibGUgaW5mbyBhbmQgU3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0b1RhYmxlOiBUYWJsZSxcblx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IEJvb2xlYW4sXG5cdGZuU2V0R3JvdXBOYW1lOiBhbnlcbikge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IENvcmUuYnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoKGFNZXNzYWdlIGFzIGFueSkucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbE5hbWVcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBiSXNDcmVhdGlvblJvd1xuICogQHBhcmFtIG9UYXJnZXRlZENvbnRyb2xcbiAqIEByZXR1cm5zIE1lc3NhZ2Ugc3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VTdWJ0aXRsZShcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgYm9vbGVhbixcblx0b1RhYmxlOiBUYWJsZSxcblx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZXNzYWdlU3VidGl0bGU7XG5cdGxldCBzUm93U3VidGl0bGVWYWx1ZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1RhYmxlKTtcblx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdGNvbnN0IG9Db2xGcm9tVGFibGVTZXR0aW5ncyA9IG1lc3NhZ2VIYW5kbGluZy5mZXRjaENvbHVtbkluZm8obWVzc2FnZSwgb1RhYmxlKTtcblx0aWYgKGJJc0NyZWF0aW9uUm93IHx8IG9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSkge1xuXHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA/IHNUYWJsZVRhcmdldENvbE5hbWUgOiAob0NvbEZyb21UYWJsZVNldHRpbmdzIGFzIENvbHVtbldpdGhMYWJlbFR5cGUpLmxhYmVsXG5cdFx0XSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0b1RhYmxlLFxuXHRcdFx0b1RhYmxlUm93Q29udGV4dCxcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcblx0XHQpO1xuXHRcdGNvbnN0IHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoID0gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uXG5cdFx0XHQ/IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCIkUGF0aFwiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xUZXh0QXJyYW5nZW1lbnQgPVxuXHRcdFx0c1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGggJiYgb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uXG5cdFx0XHRcdD8gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnQvJEVudW1NZW1iZXJcIilcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmIChvVGFyZ2V0ZWRDb250cm9sKSB7XG5cdFx0XHRcdC8vIFRoZSBVSSBlcnJvciBpcyBvbiB0aGUgZmlyc3QgY29sdW1uLCB3ZSB0aGVuIGdldCB0aGUgY29udHJvbCBpbnB1dCBhcyB0aGUgcm93IGluZGljYXRvcjpcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSAob1RhcmdldGVkQ29udHJvbCBhcyBhbnkpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sVmFsdWUoXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdC8vIHNldCB0aGUgbWVzc2FnZSBzdWJ0aXRsZVxuXHRcdFx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0gbWVzc2FnZUhhbmRsaW5nLmRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbc1Jvd1N1YnRpdGxlVmFsdWUsIHNUYWJsZVRhcmdldENvbE5hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiKX06ICR7c1Jvd1N1YnRpdGxlVmFsdWV9LCAke1xuXHRcdFx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZVxuXHRcdFx0XHR9YDtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtzUm93U3VidGl0bGVWYWx1ZSwgb0NvbHVtbkluZm8uc0NvbHVtblZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIil9OiAke3NSb3dTdWJ0aXRsZVZhbHVlfWA7XG5cdFx0XHR9IGVsc2UgaWYgKCFzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgc1RhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc01lc3NhZ2VTdWJ0aXRsZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRvVGFibGU6IFRhYmxlLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQmluZGluZ0NvbnRleHQ7XG5cdGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gKG9NZXRhTW9kZWwgYXMgYW55KT8uZ2V0TWV0YVBhdGgob1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdG9CaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgdmFsdWUgb2YgZmlyc3QgQ29sdW1uIG9mIFRhYmxlLCB3aXRoIGl0cyB0ZXh0IEFycmFuZ2VtZW50LlxuICpcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUZXh0QW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBzVGV4dEFycmFuZ2VtZW50XG4gKiBAcmV0dXJucyBDb2x1bW4gVmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xWYWx1ZShcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nLFxuXHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHNUZXh0QXJyYW5nZW1lbnQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0NvZGVWYWx1ZSA9IChvVGFibGVSb3dDb250ZXh0IGFzIGFueSkuZ2V0VmFsdWUoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdGxldCBzVGV4dFZhbHVlO1xuXHRsZXQgc0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRpZiAoc1RleHRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdGlmIChzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGV4dCBhbm5vdGF0aW9uIHBhdGhcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGFibGVGaXJzdENvbFByb3BlcnR5LnNsaWNlKDAsIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5jb25jYXQoc1RleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGV4dEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRzVGV4dFZhbHVlID0gKG9UYWJsZVJvd0NvbnRleHQgYXMgYW55KS5nZXRWYWx1ZShzVGFibGVGaXJzdENvbFByb3BlcnR5KTtcblx0XHRpZiAoc1RleHRWYWx1ZSkge1xuXHRcdFx0aWYgKHNUZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0Y29uc3Qgc0VudW1OdW1iZXIgPSBzVGV4dEFycmFuZ2VtZW50LnNsaWNlKHNUZXh0QXJyYW5nZW1lbnQuaW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0c3dpdGNoIChzRW51bU51bWJlcikge1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0T25seVwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBzVGV4dFZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRGaXJzdFwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzVGV4dFZhbHVlfSAoJHtzQ29kZVZhbHVlfSlgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRMYXN0XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NDb2RlVmFsdWV9ICgke3NUZXh0VmFsdWV9KWA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dFNlcGFyYXRlXCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IHNDb2RlVmFsdWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NUZXh0VmFsdWV9ICgke3NDb2RlVmFsdWV9KWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzQ29tcHV0ZWRWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBjb2x1bW4gaW5mbyBmcm9tIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2Ugb2YgdGhlIG1lc3NhZ2UgcG9wb3Zlci5cbiAqXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5mdW5jdGlvbiBmZXRjaENvbHVtbkluZm8ob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IFRhYmxlKTogQ29sdW1uIHtcblx0Y29uc3Qgc0NvbE5hbWVGcm9tTWVzc2FnZU9iaiA9IG9NZXNzYWdlPy5nZXRUYXJnZXRzKClbMF0uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRyZXR1cm4gKG9UYWJsZSBhcyBhbnkpXG5cdFx0LmdldFBhcmVudCgpXG5cdFx0LmdldFRhYmxlRGVmaW5pdGlvbigpXG5cdFx0LmNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5rZXkuc3BsaXQoXCI6OlwiKS5wb3AoKSA9PT0gc0NvbE5hbWVGcm9tTWVzc2FnZU9iajtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogYW55LCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogQ29sdW1uSW5mb1R5cGUge1xuXHRjb25zdCBvQ29sdW1uSW5mbzogYW55ID0geyBzQ29sdW1uSW5kaWNhdG9yOiBTdHJpbmcsIHNDb2x1bW5WYWx1ZTogU3RyaW5nIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfSU5ESUNBVE9SX1VOS05PV05cIik7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNDb250cm9sSWRcbiAqIEByZXR1cm5zIFRydWUgaWYgY29udHJvbCBpcyBwYXJ0IG9mIHRhYmxlLlxuICovXG5mdW5jdGlvbiBpc0NvbnRyb2xJblRhYmxlKG9UYWJsZTogVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZyk6IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29udHJvbDogYW55ID0gQ29yZS5ieUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBKFwic2FwLm0uVGFibGVcIikpIHtcblx0XHRyZXR1cm4gb1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IGFueSkge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpIHtcblx0bGV0IG9QYXJlbnRDb250cm9sID0gb0NvbnRyb2w/LmdldFBhcmVudCgpO1xuXHR3aGlsZSAoXG5cdFx0b1BhcmVudENvbnRyb2wgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLm0uQ29sdW1uTGlzdEl0ZW1cIilcblx0KSB7XG5cdFx0b1BhcmVudENvbnRyb2wgPSBvUGFyZW50Q29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdHJldHVybiAhIW9QYXJlbnRDb250cm9sICYmIG9QYXJlbnRDb250cm9sLmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoLFxuXHRcdFx0dmFsdWUxOiBzUGF0aFRvQmVSZW1vdmVkXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seSA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKSxcblx0XHRvTWVzc2FnZU1vZGVsID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmNvZGUgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSAhPT0gXCJcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlLmluZGV4T2Yob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSA9IGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke1xuXHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2Vcblx0XHRcdH1gO1xuXHRcdH1cblx0fVxuXHQvL0ZpbHRlcmluZyBtZXNzYWdlcyBhZ2FpbiBoZXJlIHRvIGF2b2lkIHNob3dpbmcgcHVyZSB0ZWNobmljYWwgbWVzc2FnZXMgcmFpc2VkIGJ5IHRoZSBtb2RlbFxuXHRjb25zdCBiYWNrZW5kTWVzc2FnZXM6IGFueSA9IFtdO1xuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdFx0KChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSBudWxsKSB8fFxuXHRcdFx0XHRcdChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlXG5cdFx0KSB7XG5cdFx0XHRiYWNrZW5kTWVzc2FnZXMucHVzaChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJhY2tlbmRNZXNzYWdlcztcbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGNvbnN0IGFNZXNzYWdlc1RvQmVEZWxldGVkID0gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMsIHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXG5cdGlmIChhTWVzc2FnZXNUb0JlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG5cdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1RvQmVEZWxldGVkKTtcblx0fVxufVxuLy9UT0RPOiBUaGlzIG11c3QgYmUgbW92ZWQgb3V0IG9mIG1lc3NhZ2UgaGFuZGxpbmdcbmZ1bmN0aW9uIHNldE1lc3NhZ2VTdWJ0aXRsZShvVGFibGU6IFRhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIpIHtcblx0aWYgKG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHN1YnRpdGxlQ29sdW1uID0gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRjb25zdCBlcnJvckNvbnRleHQgPSBhQ29udGV4dHMuZmluZChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmNsdWRlcyhvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0pO1xuXHRcdG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPSBlcnJvckNvbnRleHQgPyBlcnJvckNvbnRleHQuZ2V0T2JqZWN0KClbc3VidGl0bGVDb2x1bW5dIDogdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZpc2libGUgc2VjdGlvbnMgZnJvbSBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcmV0dXJucyBTdWJTZWN0aW9uIG1hdGNoaW5nIGNvbnRyb2wgaWRzLlxuICovXG5mdW5jdGlvbiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKTogVUk1RWxlbWVudFtdIHtcblx0cmV0dXJuIHN1YlNlY3Rpb25cblx0XHQuZmluZEVsZW1lbnRzKHRydWUsIChvRWxlbTogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0XHQvLyBjb250cm9scyBhcmUgc29ydGVkIGluIG9yZGVyIHRvIGhhdmUgdGhlIHRhYmxlIG9uIHRvcCBvZiB0aGUgYXJyYXlcblx0XHRcdC8vIGl0IHdpbGwgaGVscCB0byBjb21wdXRlIHRoZSBzdWJ0aXRsZSBvZiB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiByZWxhdGVkIGNvbnRyb2xzXG5cdFx0XHRpZiAoYS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICFiLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IGFueSkge1xuXHQvL3RoaXMgZnVuY3Rpb24gZXNjYXBlcyBhIHN0cmluZyB0byB1c2UgaXQgYXMgYSByZWdleFxuXHRjb25zdCBmblJlZ0V4cGVzY2FwZSA9IGZ1bmN0aW9uIChzOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0b0NvbnRleHRQYXRoID0gbmV3IFJlZ0V4cChcblx0XHRcdGAke2ZuUmVnRXhwZXNjYXBlKGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gKX1cXFxcKC4qXFxcXCkvYFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIG9NZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5yZXBsYWNlKG9Db250ZXh0UGF0aCwgXCJcIik7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uIGlmIGl0IG1hdGNoZXMgd2l0aCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIHRhcmdldCBvZiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8ob1RhYmxlOiBDb250cm9sLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nKSB7XG5cdGxldCBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmc7XG5cdGxldCBvVGFibGVUYXJnZXRDb2wgPSAob1RhYmxlIGFzIFRhYmxlKS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uOiBhbnkpIHtcblx0XHRyZXR1cm4gY29sdW1uLmdldERhdGFQcm9wZXJ0eSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKChvVGFibGUgYXMgVGFibGUpLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSkuZmluZChmdW5jdGlvbiAoXG5cdFx0XHRvQ29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uXG5cdFx0KSB7XG5cdFx0XHRpZiAoISFvQ29sdW1uLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9DdXN0b21Db2x1bW4pIHtcblx0XHRcdG9UYWJsZVRhcmdldENvbCA9IG9DdXN0b21Db2x1bW47XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IChvVGFibGVUYXJnZXRDb2wgYXMgYW55KT8ubmFtZTtcblxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IChvVGFibGUgYXMgYW55KVxuXHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0RGF0YVByb3BlcnR5KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAoKG9UYWJsZSBhcyBUYWJsZSkuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIFRhYmxlRGVsZWdhdGUpLmdldENvbHVtbnNGb3Iob1RhYmxlKTtcblx0XHRcdG9UYWJsZVRhcmdldENvbCA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IFRhYmxlQ29sdW1uKSB7XG5cdFx0XHRcdGlmIChvQ29sdW1uLmtleS5pbmNsdWRlcyhcIjo6RmllbGRHcm91cDo6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW4ucHJvcGVydHlJbmZvcz8uZmluZChmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHwgcHJvcGVydHlJbmZvLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKG9UYWJsZVRhcmdldENvbCAmJiAob1RhYmxlVGFyZ2V0Q29sIGFzIGFueSkubGFiZWwpIHtcblx0XHRcdFx0YklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gKG9UYWJsZSBhcyBUYWJsZSkuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbHVtbi5nZXRIZWFkZXIoKSA9PT0gKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmtleTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVRhcmdldENvbCAmJiBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGU6IFRhYmxlLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9FbGVtZW50OiBhbnksIG9Sb3dCaW5kaW5nOiBCaW5kaW5nKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IGFueSA9IHt9O1xuXHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ID0gb1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHR9KTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gYk11bHRpcGxlU3ViU2VjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0VGFibGVJbmZvXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgR3JvdXAgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHRzZWN0aW9uLmdldFRpdGxlKCkgK1xuXHRcdChzdWJTZWN0aW9uLmdldFRpdGxlKCkgJiYgYk11bHRpcGxlU3ViU2VjdGlvbnMgPyBgLCAke3N1YlNlY3Rpb24uZ2V0VGl0bGUoKX1gIDogXCJcIikgK1xuXHRcdChvVGFyZ2V0VGFibGVJbmZvID8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YCA6IFwiXCIpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGJJc09ycGhhbkVsZW1lbnQob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKTogYm9vbGVhbiB7XG5cdHJldHVybiAhYUVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKG9FbGVtOiBhbnkpIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogZ2V0VGFibGVGaXJzdENvbFZhbHVlLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5k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
|
|
1218
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJtdWx0aTQxMiIsIm9NZXNzYWdlVGVtcGxhdGUiLCJkZXNjcmlwdGlvbkJpbmRpbmciLCJ0ZWNobmljYWxEZXRhaWxzQmluZGluZyIsIk1lc3NhZ2VJdGVtIiwidW5kZWZpbmVkIiwiY291bnRlciIsInBhdGgiLCJ0aXRsZSIsInN1YnRpdGxlIiwibG9uZ3RleHRVcmwiLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJzZXRHcm91cEl0ZW1zIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJiT25seUZvclRlc3QiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidmlld1R5cGUiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJiSGFzRXRhZ01lc3NhZ2UiLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5IiwiZ2V0Q29kZSIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImFNb2RlbERhdGFBcnJheSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImN1cnJlbnRDb250ZXh0IiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiaWQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwibWVzc2FnZUhhbmRsaW5nIiwidXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSIsInJlamVjdCIsInRoZW4iLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9NZXNzYWdlT2JqZWN0Iiwib1NvcnRlciIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJnZXRNZXNzYWdlUmFuayIsInJhbmtCIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiY2FsbCIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZSIsInNldEJlZ2luQnV0dG9uIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiRW1waGFzaXplZCIsImRlc3Ryb3lCZWdpbkJ1dHRvbiIsImdldEl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nIiwic2V0U3RhdGUiLCJnZXRDdXN0b21IZWFkZXIiLCJnZXRDb250ZW50TWlkZGxlIiwic2V0VGV4dCIsIm9wZW4iLCJjYXRjaCIsInRlY2huaWNhbERldGFpbHMiLCJpbmNsdWRlcyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZ2V0TWVzc2FnZSIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJvbkNsb3NlIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJhTW9kZWxEYXRhIiwiZ2VuZXJhbEdyb3VwVGV4dCIsImlzQSIsInNldEdyb3VwTmFtZUxSVGFibGUiLCJzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlIiwiZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lIiwib0VsZW0iLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJzRWxlbWVCaW5kaW5nUGF0aCIsImdldFBhdGgiLCJhbGxSb3dDb250ZXh0cyIsInJvd0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImlkZW50aWZpZXJDb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwicm93SWRlbnRpZmllciIsImNvbHVtblByb3BlcnR5TmFtZSIsImdldFRhYmxlQ29sUHJvcGVydHkiLCJzVGFibGVUYXJnZXRDb2xOYW1lIiwiZ2V0VGFibGVDb2xJbmZvIiwiZ2V0SGVhZGVyIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImdldENvbnRlbnQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50Iiwib0VsZW1lbnQiLCJnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9UYXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsImhlYWRlck5hbWUiLCJnZXRIZWFkZXJWaXNpYmxlIiwidGFibGVIZWFkZXIiLCJnZXRUaXRsZSIsInNMYXN0QWN0aW9uVGV4dCIsInRvU3RyaW5nIiwiYU1lc3NhZ2UiLCJzR2VuZXJhbEdyb3VwVGV4dCIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJvVGFyZ2V0ZWRDb250cm9sIiwic01lc3NhZ2VTdWJ0aXRsZSIsInNSb3dTdWJ0aXRsZVZhbHVlIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJzVGFibGVGaXJzdENvbFByb3BlcnR5Iiwib0NvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiaXNJbmFjdGl2ZSIsImxhYmVsIiwib1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJzVGFibGVGaXJzdENvbFRleHRBbm5vdGF0aW9uUGF0aCIsInNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50IiwiZ2V0VmFsdWUiLCJnZXRUYWJsZUZpcnN0Q29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwib0JpbmRpbmdDb250ZXh0Iiwib01vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVGV4dEFubm90YXRpb25QYXRoIiwic1RleHRBcnJhbmdlbWVudCIsInNDb2RlVmFsdWUiLCJzVGV4dFZhbHVlIiwic0NvbXB1dGVkVmFsdWUiLCJzbGljZSIsInNFbnVtTnVtYmVyIiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsImdldFRhcmdldHMiLCJzcGxpdCIsInBvcCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJvQ29sdW1uIiwia2V5IiwiU3RyaW5nIiwiYXZhaWxhYmlsaXR5IiwiZ2V0SWQiLCJvUGFyZW50Q29udHJvbCIsInJlc291cmNlQnVuZGxlIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwic1BhdGhUb0JlUmVtb3ZlZCIsImdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbCIsIm9NZXNzYWdlTW9kZWwiLCJsaXN0QmluZGluZyIsIlN0YXJ0c1dpdGgiLCJtYXAiLCJiQm91bmRNZXNzYWdlcyIsImJUcmFuc2l0aW9uT25seSIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiZm5GaWx0ZXJVcG9uSWRzIiwiYSIsImIiLCJvQ29udGV4dFBhdGgiLCJmblJlZ0V4cGVzY2FwZSIsInMiLCJyZXBsYWNlIiwiUmVnRXhwIiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJvVGFibGVUYXJnZXRDb2wiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiZ2V0RGF0YVByb3BlcnR5Iiwib0N1c3RvbUNvbHVtbiIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldENvbHVtbnNGb3IiLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwicHJvcGVydHlJbmZvIiwiYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlIiwic29tZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZURlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW47XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmc7XG5cdHRhYmxlSGVhZGVyOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbHVtbldpdGhMYWJlbFR5cGUgPSBDb2x1bW4gJiB7XG5cdGxhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGFueSwgYlRyYW5zaXRpb25Pbmx5PzogYW55KSA9PiBhbnlbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRcdG9Db250ZXh0PzogYW55LFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdG9Db250cm9sPzogQ29udHJvbCxcblx0XHRzQWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IGFueSxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpID0+IFByb21pc2U8YW55Pjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkgPT4gYW55O1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sIGlzTXVsdGk0MTI/OiBib29sZWFuKSA9PiBhbnk7XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gYW55O1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogQm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBhbnlcblx0KSA9PiBDb2xJbmZvQW5kU3VidGl0bGVUeXBlO1xuXHRnZXRUYWJsZUNvbEluZm86IChvVGFibGU6IENvbnRyb2wsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcpID0+IGFueTtcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogKG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBhbnkpID0+IGFueTtcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiAoXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IGJvb2xlYW4sXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IGFueSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCkgPT4gQ29sdW1uSW5mb1R5cGU7XG5cdGZldGNoQ29sdW1uSW5mbzogKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBUYWJsZSkgPT4gQ29sdW1uO1xuXHRnZXRUYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogKFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogQm9vbGVhbikgPT4gYW55O1xuXHRnZXRUYWJsZUZpcnN0Q29sVmFsdWU6IChcblx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0b1RhYmxlUm93Q29udGV4dDogQ29udGV4dCxcblx0XHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c1RleHRBcnJhbmdlbWVudDogc3RyaW5nXG5cdCkgPT4gc3RyaW5nO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IGFueSkgPT4gdm9pZDtcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogKFxuXHRcdGFNb2RlbERhdGFBcnJheTogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cihNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzVGV4dGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9jb2RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvbWVzc2FnZWAgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBgJHtzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpfSR7aW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSl9ICsgYDtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKSB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50OiBhbnkgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCldO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyICYmIG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuXHRcdFx0aWYgKGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS50YXJnZXQgPSBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdGJNZXNzYWdlc01vZGlmaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYk1lc3NhZ2VzTW9kaWZpZWQ7XG59XG4vLyBEaWFsb2cgY2xvc2UgSGFuZGxpbmdcbmZ1bmN0aW9uIGRpYWxvZ0Nsb3NlSGFuZGxlcigpIHtcblx0b0RpYWxvZy5jbG9zZSgpO1xuXHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWw6IGFueSA9IG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbiwgbXVsdGk0MTI/OiBib29sZWFuKSB7XG5cdGxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25CaW5kaW5nID0gJ3s9ICR7ZGVzY3JpcHRpb259ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdERlc2NyaXB0aW9uKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzQmluZGluZyA9XG5cdFx0XHQnez0gJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRncm91cE5hbWU6IFwie2hlYWRlck5hbWV9XCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25CaW5kaW5nICsgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKG11bHRpNDEyKSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0ZGVzY3JpcHRpb246IFwie2Rlc2NyaXB0aW9ufVwiLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0b01lc3NhZ2VWaWV3ID0gbmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdGl0ZW1TZWxlY3Q6IGZ1bmN0aW9uICgpIHtcblx0XHRcdG9CYWNrQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSxcblx0XHRpdGVtczoge1xuXHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZSxcblx0XHRcdGxlbmd0aDogOTk5OVxuXHRcdH1cblx0fSk7XG5cdG9NZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdHNBY3Rpb25OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRiT25seUZvclRlc3Q/OiBib29sZWFuLFxuXHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyczogYW55KSA9PiBhbnksXG5cdHZpZXdUeXBlPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuXHRsZXQgYVRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBDb250cm9sO1xuXHRcdFx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkUmFua2luRGlhbG9nID1cblx0XHRcdFx0XHRvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZ1xuXHRcdFx0XHRcdFx0PyAoZXJyb3JGaWVsZENvbnRyb2wuZ2V0UGFyZW50KCkgYXMgYW55KS5maW5kRWxlbWVudHModHJ1ZSkuaW5kZXhPZihlcnJvckZpZWxkQ29udHJvbClcblx0XHRcdFx0XHRcdDogSW5maW5pdHk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGZpZWxkUmFua2luRGlhbG9nO1xuXHRcdFx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2wuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0XHRhRmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBvbmx5IHVuYm91bmQgbWVzc2FnZXMgaGF2ZSB0byBiZSBzaG93biBzbyBhZGQgZmlsdGVyIGFjY29yZGluZ2x5XG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJ0YXJnZXRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IFwiXCIgfSkpO1xuXHR9XG5cdGlmIChhQ3VzdG9tTWVzc2FnZXMgJiYgYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFDdXN0b21NZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0XHR9KTtcblx0fVxuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gKG9NZXNzYWdlVmlldyAmJiAob01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsKSkgfHwgbmV3IEpTT05Nb2RlbCgpO1xuXHRjb25zdCBiSGFzRXRhZ01lc3NhZ2UgPSB0aGlzLm1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyLCBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIikge1xuXHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0fVxuXHRsZXQgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnk7XG5cdGxldCBhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10gPSBbXTtcblx0aWYgKHNob3dNZXNzYWdlRGlhbG9nIHx8ICghc2hvd01lc3NhZ2VCb3ggJiYgIW9uQmVmb3JlU2hvd01lc3NhZ2UpKSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblxuXHRcdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogYW55ID0ge307XG5cblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IGFNZXNzYWdlRGF0YUxpc3QuY29uY2F0KGV4aXN0aW5nTWVzc2FnZXMpLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5pZF0gJiYgKG9VbmlxdWVPYmpbb2JqLmlkXSA9IHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1vZGVsRGF0YUFycmF5KTtcblx0XHR9XG5cdH1cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7IHNob3dNZXNzYWdlQm94LCBzaG93TWVzc2FnZURpYWxvZyB9O1xuXHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IG9uQmVmb3JlU2hvd01lc3NhZ2UoYVRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRzaG93TWVzc2FnZUJveCA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZUJveDtcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZURpYWxvZztcblx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cgfHwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZykge1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZpbHRlcmVkTWVzc2FnZXMgPyBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZmlsdGVyZWRNZXNzYWdlcyA6IGFNb2RlbERhdGFBcnJheTtcblx0XHR9XG5cdH1cblx0aWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFhQ3VzdG9tTWVzc2FnZXMgJiYgIWJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyB0cmFuc2llbnQgbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9IGVsc2UgaWYgKGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0uZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFhQ3VzdG9tTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGFUcmFuc2l0aW9uTWVzc2FnZXNbMF0ubWVzc2FnZSk7XG5cdFx0XHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFUcmFuc2l0aW9uTWVzc2FnZXMpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nICYmIGFNb2RlbERhdGFBcnJheS5sZW5ndGgpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShhTW9kZWxEYXRhQXJyYXksIGNvbnRyb2wsIHNBY3Rpb25OYW1lLCB2aWV3VHlwZSk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7IC8vIHNldCB0aGUgbWVzc2FnZXMgaGVyZSBzbyB0aGF0IGlmIGFueSBvZiB0aGVtIGFyZSBmaWx0ZXJlZCBmb3IgQVBELCB0aGV5IGFyZSBmaWx0ZXJlZCBoZXJlIGFzIHdlbGwuXG5cdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBhUmVzb2x2ZUZ1bmN0aW9ucyB8fCBbXTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHRDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChzaG93TWVzc2FnZVBhcmFtZXRlcnMgJiYgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRjb25zdCBvU29ydGVyID0gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IGFueSwgb2JqMjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLnNvcnQob1NvcnRlcik7XG5cblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKVxuXHRcdFx0XHRcdFx0XHQ/IG9EaWFsb2dcblx0XHRcdFx0XHRcdFx0OiBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhUmVzb2x2ZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQgIH0pO1xuXHRcdFx0XHRcdG9EaWFsb2cucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0XHRcdG9EaWFsb2cuYWRkQ29udGVudChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcpO1xuXG5cdFx0XHRcdFx0aWYgKGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vQnV0dG9uVHlwZVwiXSwgZnVuY3Rpb24gKEJ1dHRvblR5cGU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkob01lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0KG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgYW55KS5nZXRDb250ZW50TWlkZGxlKClbMF0uc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0XHRcdGlmIChiT25seUZvclRlc3QpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUob0RpYWxvZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVHJhbnNpdGlvbk1lc3NhZ2VzWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscyAmJiAhYU1lc3NhZ2VMaXN0LmluY2x1ZGVzKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpKSB8fFxuXHRcdFx0XHQoc2hvd01lc3NhZ2VQYXJhbWV0ZXJzICYmIHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpXG5cdFx0XHQpIHtcblx0XHRcdFx0aWYgKCFzaG93TWVzc2FnZVBhcmFtZXRlcnMgfHwgIXNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2cpIHtcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYDxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNob3dNZXNzYWdlUGFyYW1ldGVycyAmJiBzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUob01lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0OiBhbnkgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCwge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ3JvdXAgbmFtZSBmb3IgYWxsIG1lc3NhZ2VzIGluIGEgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbikge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZUxSVGFibGUoY29udHJvbCwgYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2aWV3VHlwZSA9PT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0Ly8gT1AgRGlzcGxheSBtb2RlXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lLCBjb250cm9sKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICpcbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBhbnkpIHtcblx0Y29uc3Qgb1ZpZXdDb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0Y29uc3Qgb3BMYXlvdXQ6IENvbnRyb2wgPSBjb250cm9sPy5nZXRDb250ZW50ICYmIGNvbnRyb2w/LmdldENvbnRlbnQoKVswXTtcblx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRpZiAob3BMYXlvdXQpIHtcblx0XHRtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob3BMYXlvdXQpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0c3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0uZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRvRWxlbS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW1lbnQuaXNBKFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHtvRWxlbS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZFRhYmxlRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlkZW50aWZpZXJDb2x1bW4gPSAob0VsZW0uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3Jvd0lkZW50aWZpZXJ9LCAke29UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGhlYWRlck5hbWUgPSBvRWxlbS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJOYW1lID0gb1N1YlNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlck5hbWUgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7aGVhZGVyTmFtZX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQ/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdC8vIGNoZWNrIGlmIE9QIGNvbnRleHQgcGF0aCBpcyBwYXJ0IG9mIHRhcmdldCwgc2V0IExhc3QgQWN0aW9uIGFzIGdyb3VwIG5hbWVcblx0XHRcdGNvbnN0IGhlYWRlck5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gaGVhZGVyTmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyBSYW5rIG9mIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVJhbmsob2JqOiBNZXNzYWdlV2l0aEhlYWRlcik6IG51bWJlciB7XG5cdGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkxhc3QgQWN0aW9uXCIpKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH0gZWxzZSBpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJHZW5lcmFsXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIHdoaWNoIGNhbiBlaXRoZXIgR2VuZXJhbCBvciBMYXN0IEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIGJJc0dlbmVyYWxHcm91cE5hbWVcbiAqL1xuY29uc3QgZm5DYWxsYmFja1NldEdyb3VwTmFtZSA9IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBCb29sZWFuKSA9PiB7XG5cdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0Y29uc3Qgc0dlbmVyYWxHcm91cFRleHQgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBzR2VuZXJhbEdyb3VwVGV4dDtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqXG4gKiBAcGFyYW0gYU1lc3NhZ2VcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBzZXRTZWN0aW9uTmFtZUluR3JvdXBcbiAqIEBwYXJhbSBmblNldEdyb3VwTmFtZVxuICogQHJldHVybnMgVGFibGUgaW5mbyBhbmQgU3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0b1RhYmxlOiBUYWJsZSxcblx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IEJvb2xlYW4sXG5cdGZuU2V0R3JvdXBOYW1lOiBhbnlcbikge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IENvcmUuYnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoKGFNZXNzYWdlIGFzIGFueSkucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUYWJsZVRhcmdldENvbE5hbWVcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBiSXNDcmVhdGlvblJvd1xuICogQHBhcmFtIG9UYXJnZXRlZENvbnRyb2xcbiAqIEByZXR1cm5zIE1lc3NhZ2Ugc3VidGl0bGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VTdWJ0aXRsZShcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgYm9vbGVhbixcblx0b1RhYmxlOiBUYWJsZSxcblx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZXNzYWdlU3VidGl0bGU7XG5cdGxldCBzUm93U3VidGl0bGVWYWx1ZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1RhYmxlKTtcblx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdGNvbnN0IG9Db2xGcm9tVGFibGVTZXR0aW5ncyA9IG1lc3NhZ2VIYW5kbGluZy5mZXRjaENvbHVtbkluZm8obWVzc2FnZSwgb1RhYmxlKTtcblx0aWYgKGJJc0NyZWF0aW9uUm93IHx8IG9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSkge1xuXHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA/IHNUYWJsZVRhcmdldENvbE5hbWUgOiAob0NvbEZyb21UYWJsZVNldHRpbmdzIGFzIENvbHVtbldpdGhMYWJlbFR5cGUpLmxhYmVsXG5cdFx0XSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0b1RhYmxlLFxuXHRcdFx0b1RhYmxlUm93Q29udGV4dCxcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHlcblx0XHQpO1xuXHRcdGNvbnN0IHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoID0gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uXG5cdFx0XHQ/IG9UYWJsZUZpcnN0Q29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCIkUGF0aFwiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgc1RhYmxlRmlyc3RDb2xUZXh0QXJyYW5nZW1lbnQgPVxuXHRcdFx0c1RhYmxlRmlyc3RDb2xUZXh0QW5ub3RhdGlvblBhdGggJiYgb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uXG5cdFx0XHRcdD8gb1RhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnQvJEVudW1NZW1iZXJcIilcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmIChvVGFyZ2V0ZWRDb250cm9sKSB7XG5cdFx0XHRcdC8vIFRoZSBVSSBlcnJvciBpcyBvbiB0aGUgZmlyc3QgY29sdW1uLCB3ZSB0aGVuIGdldCB0aGUgY29udHJvbCBpbnB1dCBhcyB0aGUgcm93IGluZGljYXRvcjpcblx0XHRcdFx0c1Jvd1N1YnRpdGxlVmFsdWUgPSAob1RhcmdldGVkQ29udHJvbCBhcyBhbnkpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZVJvd0NvbnRleHQgJiYgc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSkge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUZpcnN0Q29sVmFsdWUoXG5cdFx0XHRcdFx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRvVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdHNUYWJsZUZpcnN0Q29sVGV4dEFycmFuZ2VtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzUm93U3VidGl0bGVWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdC8vIHNldCB0aGUgbWVzc2FnZSBzdWJ0aXRsZVxuXHRcdFx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0gbWVzc2FnZUhhbmRsaW5nLmRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbc1Jvd1N1YnRpdGxlVmFsdWUsIHNUYWJsZVRhcmdldENvbE5hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiKX06ICR7c1Jvd1N1YnRpdGxlVmFsdWV9LCAke1xuXHRcdFx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZVxuXHRcdFx0XHR9YDtcblx0XHRcdH0gZWxzZSBpZiAoc1Jvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9JVEVNX1NVQlRJVExFXCIsIFtzUm93U3VidGl0bGVWYWx1ZSwgb0NvbHVtbkluZm8uc0NvbHVtblZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIil9OiAke3NSb3dTdWJ0aXRsZVZhbHVlfWA7XG5cdFx0XHR9IGVsc2UgaWYgKCFzUm93U3VidGl0bGVWYWx1ZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgc1RhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXNSb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0c01lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNNZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTWVzc2FnZVN1YnRpdGxlID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc01lc3NhZ2VTdWJ0aXRsZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9UYWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRvVGFibGU6IFRhYmxlLFxuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQmluZGluZ0NvbnRleHQ7XG5cdGlmIChvVGFibGVSb3dDb250ZXh0ICYmIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gKG9NZXRhTW9kZWwgYXMgYW55KT8uZ2V0TWV0YVBhdGgob1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdG9CaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NUYWJsZUZpcnN0Q29sUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgdmFsdWUgb2YgZmlyc3QgQ29sdW1uIG9mIFRhYmxlLCB3aXRoIGl0cyB0ZXh0IEFycmFuZ2VtZW50LlxuICpcbiAqIEBwYXJhbSBzVGFibGVGaXJzdENvbFByb3BlcnR5XG4gKiBAcGFyYW0gb1RhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHNUZXh0QW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBzVGV4dEFycmFuZ2VtZW50XG4gKiBAcmV0dXJucyBDb2x1bW4gVmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlRmlyc3RDb2xWYWx1ZShcblx0c1RhYmxlRmlyc3RDb2xQcm9wZXJ0eTogc3RyaW5nLFxuXHRvVGFibGVSb3dDb250ZXh0OiBDb250ZXh0LFxuXHRzVGV4dEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHNUZXh0QXJyYW5nZW1lbnQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0NvZGVWYWx1ZSA9IChvVGFibGVSb3dDb250ZXh0IGFzIGFueSkuZ2V0VmFsdWUoc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eSk7XG5cdGxldCBzVGV4dFZhbHVlO1xuXHRsZXQgc0NvbXB1dGVkVmFsdWUgPSBzQ29kZVZhbHVlO1xuXHRpZiAoc1RleHRBbm5vdGF0aW9uUGF0aCkge1xuXHRcdGlmIChzVGFibGVGaXJzdENvbFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGV4dCBhbm5vdGF0aW9uIHBhdGhcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGFibGVGaXJzdENvbFByb3BlcnR5LnNsaWNlKDAsIHNUYWJsZUZpcnN0Q29sUHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRzVGFibGVGaXJzdENvbFByb3BlcnR5ID0gc1RhYmxlRmlyc3RDb2xQcm9wZXJ0eS5jb25jYXQoc1RleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYWJsZUZpcnN0Q29sUHJvcGVydHkgPSBzVGV4dEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRzVGV4dFZhbHVlID0gKG9UYWJsZVJvd0NvbnRleHQgYXMgYW55KS5nZXRWYWx1ZShzVGFibGVGaXJzdENvbFByb3BlcnR5KTtcblx0XHRpZiAoc1RleHRWYWx1ZSkge1xuXHRcdFx0aWYgKHNUZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0Y29uc3Qgc0VudW1OdW1iZXIgPSBzVGV4dEFycmFuZ2VtZW50LnNsaWNlKHNUZXh0QXJyYW5nZW1lbnQuaW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0c3dpdGNoIChzRW51bU51bWJlcikge1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0T25seVwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBzVGV4dFZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRGaXJzdFwiOlxuXHRcdFx0XHRcdFx0c0NvbXB1dGVkVmFsdWUgPSBgJHtzVGV4dFZhbHVlfSAoJHtzQ29kZVZhbHVlfSlgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRMYXN0XCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NDb2RlVmFsdWV9ICgke3NUZXh0VmFsdWV9KWA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGV4dFNlcGFyYXRlXCI6XG5cdFx0XHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IHNDb2RlVmFsdWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzQ29tcHV0ZWRWYWx1ZSA9IGAke3NUZXh0VmFsdWV9ICgke3NDb2RlVmFsdWV9KWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzQ29tcHV0ZWRWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBjb2x1bW4gaW5mbyBmcm9tIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2Ugb2YgdGhlIG1lc3NhZ2UgcG9wb3Zlci5cbiAqXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5mdW5jdGlvbiBmZXRjaENvbHVtbkluZm8ob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IFRhYmxlKTogQ29sdW1uIHtcblx0Y29uc3Qgc0NvbE5hbWVGcm9tTWVzc2FnZU9iaiA9IG9NZXNzYWdlPy5nZXRUYXJnZXRzKClbMF0uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRyZXR1cm4gKG9UYWJsZSBhcyBhbnkpXG5cdFx0LmdldFBhcmVudCgpXG5cdFx0LmdldFRhYmxlRGVmaW5pdGlvbigpXG5cdFx0LmNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5rZXkuc3BsaXQoXCI6OlwiKS5wb3AoKSA9PT0gc0NvbE5hbWVGcm9tTWVzc2FnZU9iajtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogYW55LCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogQ29sdW1uSW5mb1R5cGUge1xuXHRjb25zdCBvQ29sdW1uSW5mbzogYW55ID0geyBzQ29sdW1uSW5kaWNhdG9yOiBTdHJpbmcsIHNDb2x1bW5WYWx1ZTogU3RyaW5nIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfSU5ESUNBVE9SX1VOS05PV05cIik7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIHNDb250cm9sSWRcbiAqIEByZXR1cm5zIFRydWUgaWYgY29udHJvbCBpcyBwYXJ0IG9mIHRhYmxlLlxuICovXG5mdW5jdGlvbiBpc0NvbnRyb2xJblRhYmxlKG9UYWJsZTogVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZyk6IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29udHJvbDogYW55ID0gQ29yZS5ieUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBKFwic2FwLm0uVGFibGVcIikpIHtcblx0XHRyZXR1cm4gb1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IGFueSkge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpIHtcblx0bGV0IG9QYXJlbnRDb250cm9sID0gb0NvbnRyb2w/LmdldFBhcmVudCgpO1xuXHR3aGlsZSAoXG5cdFx0b1BhcmVudENvbnRyb2wgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLm0uQ29sdW1uTGlzdEl0ZW1cIilcblx0KSB7XG5cdFx0b1BhcmVudENvbnRyb2wgPSBvUGFyZW50Q29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdHJldHVybiAhIW9QYXJlbnRDb250cm9sICYmIG9QYXJlbnRDb250cm9sLmlzQShcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoLFxuXHRcdFx0dmFsdWUxOiBzUGF0aFRvQmVSZW1vdmVkXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seSA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKSxcblx0XHRvTWVzc2FnZU1vZGVsID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmNvZGUgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSAhPT0gXCJcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlLmluZGV4T2Yob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSA9IGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke1xuXHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2Vcblx0XHRcdH1gO1xuXHRcdH1cblx0fVxuXHQvL0ZpbHRlcmluZyBtZXNzYWdlcyBhZ2FpbiBoZXJlIHRvIGF2b2lkIHNob3dpbmcgcHVyZSB0ZWNobmljYWwgbWVzc2FnZXMgcmFpc2VkIGJ5IHRoZSBtb2RlbFxuXHRjb25zdCBiYWNrZW5kTWVzc2FnZXM6IGFueSA9IFtdO1xuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdFx0KChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSBudWxsKSB8fFxuXHRcdFx0XHRcdChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlXG5cdFx0KSB7XG5cdFx0XHRiYWNrZW5kTWVzc2FnZXMucHVzaChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJhY2tlbmRNZXNzYWdlcztcbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGNvbnN0IGFNZXNzYWdlc1RvQmVEZWxldGVkID0gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMsIHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXG5cdGlmIChhTWVzc2FnZXNUb0JlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG5cdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1RvQmVEZWxldGVkKTtcblx0fVxufVxuLy9UT0RPOiBUaGlzIG11c3QgYmUgbW92ZWQgb3V0IG9mIG1lc3NhZ2UgaGFuZGxpbmdcbmZ1bmN0aW9uIHNldE1lc3NhZ2VTdWJ0aXRsZShvVGFibGU6IFRhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIpIHtcblx0aWYgKG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHN1YnRpdGxlQ29sdW1uID0gKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRjb25zdCBlcnJvckNvbnRleHQgPSBhQ29udGV4dHMuZmluZChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmNsdWRlcyhvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0pO1xuXHRcdG1lc3NhZ2UuYWRkaXRpb25hbFRleHQgPSBlcnJvckNvbnRleHQgPyBlcnJvckNvbnRleHQuZ2V0T2JqZWN0KClbc3VidGl0bGVDb2x1bW5dIDogdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZpc2libGUgc2VjdGlvbnMgZnJvbSBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcmV0dXJucyBTdWJTZWN0aW9uIG1hdGNoaW5nIGNvbnRyb2wgaWRzLlxuICovXG5mdW5jdGlvbiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKTogVUk1RWxlbWVudFtdIHtcblx0cmV0dXJuIHN1YlNlY3Rpb25cblx0XHQuZmluZEVsZW1lbnRzKHRydWUsIChvRWxlbTogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0XHQvLyBjb250cm9scyBhcmUgc29ydGVkIGluIG9yZGVyIHRvIGhhdmUgdGhlIHRhYmxlIG9uIHRvcCBvZiB0aGUgYXJyYXlcblx0XHRcdC8vIGl0IHdpbGwgaGVscCB0byBjb21wdXRlIHRoZSBzdWJ0aXRsZSBvZiB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiByZWxhdGVkIGNvbnRyb2xzXG5cdFx0XHRpZiAoYS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICFiLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IGFueSkge1xuXHQvL3RoaXMgZnVuY3Rpb24gZXNjYXBlcyBhIHN0cmluZyB0byB1c2UgaXQgYXMgYSByZWdleFxuXHRjb25zdCBmblJlZ0V4cGVzY2FwZSA9IGZ1bmN0aW9uIChzOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0b0NvbnRleHRQYXRoID0gbmV3IFJlZ0V4cChcblx0XHRcdGAke2ZuUmVnRXhwZXNjYXBlKGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gKX1cXFxcKC4qXFxcXCkvYFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIG9NZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5yZXBsYWNlKG9Db250ZXh0UGF0aCwgXCJcIik7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uIGlmIGl0IG1hdGNoZXMgd2l0aCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIHRhcmdldCBvZiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8ob1RhYmxlOiBDb250cm9sLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nKSB7XG5cdGxldCBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmc7XG5cdGxldCBvVGFibGVUYXJnZXRDb2wgPSAob1RhYmxlIGFzIFRhYmxlKS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uOiBhbnkpIHtcblx0XHRyZXR1cm4gY29sdW1uLmdldERhdGFQcm9wZXJ0eSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKChvVGFibGUgYXMgVGFibGUpLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSkuZmluZChmdW5jdGlvbiAoXG5cdFx0XHRvQ29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uXG5cdFx0KSB7XG5cdFx0XHRpZiAoISFvQ29sdW1uLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9DdXN0b21Db2x1bW4pIHtcblx0XHRcdG9UYWJsZVRhcmdldENvbCA9IG9DdXN0b21Db2x1bW47XG5cdFx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IChvVGFibGVUYXJnZXRDb2wgYXMgYW55KT8ubmFtZTtcblxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IChvVGFibGUgYXMgYW55KVxuXHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0RGF0YVByb3BlcnR5KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAoKG9UYWJsZSBhcyBUYWJsZSkuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIFRhYmxlRGVsZWdhdGUpLmdldENvbHVtbnNGb3Iob1RhYmxlKTtcblx0XHRcdG9UYWJsZVRhcmdldENvbCA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IFRhYmxlQ29sdW1uKSB7XG5cdFx0XHRcdGlmIChvQ29sdW1uLmtleS5pbmNsdWRlcyhcIjo6RmllbGRHcm91cDo6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW4ucHJvcGVydHlJbmZvcz8uZmluZChmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHwgcHJvcGVydHlJbmZvLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKG9UYWJsZVRhcmdldENvbCAmJiAob1RhYmxlVGFyZ2V0Q29sIGFzIGFueSkubGFiZWwpIHtcblx0XHRcdFx0YklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gKG9UYWJsZSBhcyBUYWJsZSkuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbHVtbi5nZXRIZWFkZXIoKSA9PT0gKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmxhYmVsO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgJiYgKG9UYWJsZVRhcmdldENvbCBhcyBhbnkpLmtleTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVRhcmdldENvbCAmJiBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGU6IFRhYmxlLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9FbGVtZW50OiBhbnksIG9Sb3dCaW5kaW5nOiBCaW5kaW5nKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IGFueSA9IHt9O1xuXHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIG9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0b1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ID0gb1RhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHR9KTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gYk11bHRpcGxlU3ViU2VjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0VGFibGVJbmZvXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgR3JvdXAgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHRzZWN0aW9uLmdldFRpdGxlKCkgK1xuXHRcdChzdWJTZWN0aW9uLmdldFRpdGxlKCkgJiYgYk11bHRpcGxlU3ViU2VjdGlvbnMgPyBgLCAke3N1YlNlY3Rpb24uZ2V0VGl0bGUoKX1gIDogXCJcIikgK1xuXHRcdChvVGFyZ2V0VGFibGVJbmZvID8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YCA6IFwiXCIpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGJJc09ycGhhbkVsZW1lbnQob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKTogYm9vbGVhbiB7XG5cdHJldHVybiAhYUVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKG9FbGVtOiBhbnkpIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVGaXJzdENvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlRmlyc3RDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdGdldFRhYmxlRmlyc3RDb2xWYWx1ZTogZ2V0VGFibGVGaXJzdENvbFZhbHVlLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3dcbn07XG5cbmV4cG9y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
|
|
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
|
|
|
48
48
|
controls: [],
|
|
49
49
|
elements: [],
|
|
50
50
|
// eslint-disable-next-line no-template-curly-in-string
|
|
51
|
-
version: "1.120.
|
|
51
|
+
version: "1.120.14",
|
|
52
52
|
noLibraryCSS: true,
|
|
53
53
|
extensions: {
|
|
54
54
|
//Configuration used for rule loading of Support Assistant
|