@carto/kepler.gl 0.0.75 → 0.0.77
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/dist/components/kepler-gl.js +2 -11
- package/dist/components/map-container.js +1 -4
- package/dist/components/modal-container.js +1 -3
- package/dist/components/modals/add-map-style-modal.js +1 -4
- package/dist/constants/default-settings.js +1 -1
- package/dist/layers/base-layer.js +2 -2
- package/dist/utils/gl-utils.js +4 -5
- package/package.json +12 -11
- package/src/components/kepler-gl.d.ts +0 -1
- package/src/components/kepler-gl.js +0 -7
- package/src/components/map-container.js +0 -3
- package/src/components/modal-container.d.ts +0 -1
- package/src/components/modal-container.js +0 -2
- package/src/components/modals/add-map-style-modal.js +0 -3
- package/src/layers/base-layer.js +1 -1
- package/src/utils/gl-utils.js +2 -4
|
@@ -1022,7 +1022,7 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1022
1022
|
var value = getValue(field, data);
|
|
1023
1023
|
var channelConfig = this.config.visConfig[this.visualChannels[channel].range];
|
|
1024
1024
|
var channelField = this.config[this.visualChannels[channel].field];
|
|
1025
|
-
if (channelConfig.type === _colorRanges.hexColor) {
|
|
1025
|
+
if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.type) === _colorRanges.hexColor) {
|
|
1026
1026
|
var columnField = {
|
|
1027
1027
|
id: channelField.colorColumn,
|
|
1028
1028
|
name: channelField.colorColumn,
|
|
@@ -1684,4 +1684,4 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1684
1684
|
return Layer;
|
|
1685
1685
|
}();
|
|
1686
1686
|
var _default = exports["default"] = Layer;
|
|
1687
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl9rZXltaXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2V4dGVuc2lvbnMiLCJfY29yZSIsIl9jYXJ0byIsIl9kZWZhdWx0TGF5ZXJJY29uIiwiX2xheWVyVXBkYXRlIiwiX2QzQ29sb3IiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2NvbG9yUmFuZ2VzIiwiX2N1c3RvbUNvbG9yUmFuZ2VzIiwiX2xheWVyRmFjdG9yeSIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfZGF0YUNvbnRhaW5lclV0aWxzIiwiX2NvbG9yVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9kM1NjYWxlIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZSIsImYiLCJUeXBlRXJyb3IiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwiY2FsbCIsInN0ZXAiLCJuZXh0IiwiX2UyIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJhcnIiLCJsZW4iLCJhcnIyIiwib3duS2V5cyIsInIiLCJ0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX21hcmtlZCIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiZXhwb3J0cyIsIkZBTExCQUNLX0lDT04iLCJNQVhfU0FNUExFX1NJWkUiLCJkZWZhdWx0RG9tYWluIiwiZGF0YUZpbHRlckV4dGVuc2lvbiIsIkRhdGFGaWx0ZXJFeHRlbnNpb24iLCJmaWx0ZXJTaXplIiwiTUFYX0dQVV9GSUxURVJTIiwiY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uIiwiQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uIiwiZGVmYXVsdERhdGFBY2Nlc3NvciIsImRjIiwiZCIsImRlZmF1bHRHZXRGaWVsZFZhbHVlIiwiZmllbGQiLCJ2YWx1ZUFjY2Vzc29yIiwic2NhbGVJZGVudGl0eSIsInYiLCJPVkVSTEFZX1RZUEUiLCJrZXltaXJyb3IiLCJkZWNrZ2wiLCJtYXBib3hnbCIsImxheWVyQ29sb3JzIiwidmFsdWVzIiwiRGF0YVZpekNvbG9ycyIsIm1hcCIsImhleFRvUmdiIiwiaW5kZXgiLCJ3cmFwIiwiZ2VuZXJhdGVDb2xvciQiLCJfY29udGV4dCIsInByZXYiLCJzdG9wIiwiY29sb3JNYWtlciIsIkxheWVyIiwicHJvcHMiLCJ1bmRlZmluZWQiLCJfY2xhc3NDYWxsQ2hlY2syIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsIm1ldGEiLCJsZWdlbmRTZXR0aW5ncyIsInZpc0NvbmZpZ1NldHRpbmdzIiwiX2ludGVyYWN0aXZpdHlTZXR0aW5ncyIsImNvbmZpZyIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImNvbHVtbnMiLCJnZXRMYXllckNvbHVtbnMiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiZ2V0IiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwic2V0IiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiX3RoaXMkaW50ZXJhY3Rpdml0eVNlIiwiX3RoaXMkaW50ZXJhY3Rpdml0eVNlMiIsIl90aGlzJGludGVyYWN0aXZpdHlTZTMiLCJfdGhpcyRpbnRlcmFjdGl2aXR5U2U0IiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJfdGhpcyRpbnRlcmFjdGl2aXR5U2U1IiwiaGFzVG9vbHRpcCIsImVuYWJsZWQiLCJfcHJvcHMkdmlzaWJpbGl0eUJ5Wm8iLCJfcHJvcHMkdmlzaWJpbGl0eUJ5Wm8yIiwiZGF0YUlkIiwidmlzaWJpbGl0eUJ5Wm9vbSIsIm1pbiIsIlpPT01fTEVWRUxfTElNSVRTIiwibWF4IiwibGFiZWwiLCJERUZBVUxUX0xBWUVSX0xBQkVMIiwiaXNWaXNpYmxlIiwiaXNDb25maWdBY3RpdmUiLCJoaWdobGlnaHRDb2xvciIsIkRFRkFVTFRfSElHSExJR0hUX0NPTE9SIiwiaGlkZGVuIiwiY29sb3JGaWVsZCIsImNvbG9yRG9tYWluIiwiY29sb3JTY2FsZSIsIlNDQUxFX1RZUEVTIiwicXVhbnRpbGUiLCJzaXplRG9tYWluIiwic2l6ZVNjYWxlIiwibGluZWFyIiwic2l6ZUZpZWxkIiwicmFkaXVzRmllbGQiLCJ2aXNDb25maWciLCJ0ZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsImNvbG9yUmFuZ2UiLCJhbmltYXRpb24iLCJnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24iLCJ2aXN1YWxDaGFubmVscyIsIm1lYXN1cmUiLCJkaXNwbGF5TmFtZSIsImRlZmF1bHRNZWFzdXJlIiwiYXNzaWduQ29sdW1uIiwidXBkYXRlIiwiZmllbGRJZHgiLCJhc3NpZ25Db2x1bW5QYWlycyIsIl90aGlzJGNvbHVtblBhaXJzIiwiX3RoaXMkY29sdW1uUGFpcnMyIiwiX3RoaXMkY29sdW1uUGFpcnMzIiwiY29sdW1uUGFpcnMiLCJfdGhpcyRjb2x1bW5QYWlycyRrZXkiLCJwYXJ0bmVyS2V5IiwiX3RoaXMkY29sdW1uUGFpcnMkcGFyIiwicGFydG5lckZpZWxkUGFpcktleSIsImdldFpvb21GYWN0b3IiLCJfcmVmIiwiem9vbSIsIl9yZWYkem9vbU9mZnNldCIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsIl9yZWYyIiwiX3JlZjIkem9vbU9mZnNldCIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsImZpbHRlcmVkSW5kZXgiLCJyZW5kZXJMYXllciIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJhc3NpZ25Db25maWdUb0xheWVyIiwiY29uZmlnVG9Db3B5IiwiX3RoaXMiLCJzaGFsbG93Q29weSIsImNvbmNhdCIsIm5vdFRvQ29weSIsImdyb3VwIiwiY3VycmVudENvbmZpZyIsImNvcGllZCIsImNvcHlMYXllckNvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY2hhbm5lbCIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl90aGlzMiIsIl9yZWYzIiwiX3JlZjMkc2hhbGxvd0NvcHkiLCJfcmVmMyRub3RUb0NvcHkiLCJpc1BsYWluT2JqZWN0IiwiaW5jbHVkZXMiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJyZWdpc3RlclZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlncyIsIl90aGlzMyIsIml0ZW0iLCJMQVlFUl9WSVNfQ09ORklHUyIsImV2ZXJ5IiwicCIsImhhc093blByb3BlcnR5IiwiY29sdW1uVmFsaWRhdG9ycyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYXllckNvbHVtbnMiLCJyZWR1Y2UiLCJhY2N1IiwidmFsaWRhdG9yIiwib3B0aW9uYWwiLCJvcHRpb25hbENvbHVtbnMiLCJuZXdDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInByb3AiLCJfdGhpcyRjb25maWciLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJpc0NvbG9yUmFuZ2UiLCJjb2xvcnMiLCJoZXhDb2xvciIsInVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UiLCJ1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJIiwidXBkYXRlQ3VzdG9tUGFsZXR0ZSIsImNvbG9yUmFuZ2VDb25maWciLCJjdXN0b20iLCJfdGhpcyRjb25maWcyIiwiY3VzdG9tUGFsZXR0ZSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJfdmlzQ29uZmlnJHByb3AkY29sb3IiLCJzaG93RHJvcGRvd24iLCJfdGhpcyRjb25maWczIiwic3RlcHMiLCJyZXZlcnNlZCIsImhleENvbHVtbiIsImdldEhleENvbHVtbiIsImlzSGV4Q29sdW1uIiwiaXNDb2xvcmVkQnlDb2xvckNvbHVtbiIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJfdGhpcyRjb25maWc0IiwiX2NvbG9yVUkkcHJvcCRjb2xvclJhIiwiZ2V0Q29sb3JHcm91cEJ5TmFtZSIsInNhbWVHcm91cCIsIkNPTE9SX1JBTkdFUyIsImNyIiwiZmluZCIsInJldmVyc2VDb2xvclJhbmdlIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsIl90aGlzJGNvbmZpZyRmaWVsZCIsIl9PYmplY3QkdmFsdWVzJGZpbmQiLCJ1cGRhdGVDYXRlZ29yeUNvbG9yTWFwIiwidXBkYXRlTnVtZXJpY0NvbG9yTWFwIiwiYXNzaWduZWRDYXRlZ29yaWVzIiwibmV3Q29sb3JNYXAiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2F0ZWdvcnkiLCJjb2xvck1hcFZhbHVlcyIsImMiLCJtYXhWYWx1ZSIsInByZXZWYWx1ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiZGF0YSIsImlzVmFsaWRUb1NhdmUiLCJzaG91bGRSZW5kZXJMYXllciIsImdldENvbG9yU2NhbGUiLCJfIiwiX3JnYiIsInJnYiIsImciLCJiIiwiaXNOYU4iLCJVTktOT1dOX0NPTE9SIiwiTWFwIiwiX3JlZjYiLCJfcmVmNyIsImsiLCJTQ0FMRV9GVU5DIiwidW5rbm93biIsImdldFZpc0NoYW5uZWxTY2FsZSIsImdldEN1c3RvbU1hcmtlcnNTY2FsZSIsImZhbGxiYWNrSWNvbiIsInVua25vd25WYWx1ZSIsIm1hcHBpbmciLCJvdGhlcnNNYXJrZXIiLCJfaXRlcmF0b3IzIiwibWFya2VyTWFwIiwiX3N0ZXAzIiwiX3N0ZXAzJHZhbHVlIiwibWFya2VyVXJsIiwic2NhbGVPcmRpbmFsIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiX3JlZjgiLCJfdGhpczQiLCJfcmVmOCRkYXRhQWNjZXNzb3IiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJfdGhpczQkdmlzdWFsQ2hhbm5lbHMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJhZ2dyZWdhdGlvbiIsInNob3VsZEdldFNjYWxlIiwiaWRlbnRpdHkiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJjdXN0b21NYXJrZXIiLCJjdXN0b21NYXJrZXJzVXJsIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsIl9hZ2dyZWdhdGlvbiIsIkNvbnNvbGUiLCJ3YXJuIiwib3JkaW5hbCIsImRvbWFpbklzSW5maW5pdGUiLCJJbmZpbml0eSIsInNjYWxlRmFjdG9yeSIsInJlc3VsdCIsImdldFBvaW50c0JvdW5kcyIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsIm51bVJvd3MiLCJnZXRTYW1wbGVEYXRhIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJnZXRMYXRMbmdCb3VuZHMiLCJsbmdCb3VuZHMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsImRpZmZVcGRhdGVUcmlnZ2VycyIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJfcmVmOSIsIl9yZWY5JG51bGxWYWx1ZSIsIl9yZWY5JGdldFZhbHVlIiwiZ2V0VmFsdWUiLCJjb2xvckNvbHVtblZhbHVlIiwiY2hhbm5lbENvbmZpZyIsImNoYW5uZWxGaWVsZCIsImNvbHVtbkZpZWxkIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsInZhbHVlQXQiLCJhdHRyaWJ1dGVWYWx1ZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsIkRhdGUiLCJ1cGRhdGVNZXRhIiwidXBkYXRlTGF5ZXJMZWdlbmQiLCJzZXR0aW5ncyIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsIl9yZWYxMCIsImFsbERhdGEiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwidXBkYXRlRGF0YSIsIm9sZExheWVyRGF0YSIsImRhdGFzZXQiLCJnZXREYXRhc2V0IiwidXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyIsInVwZGF0ZUhleENvbG9yRG9tYWluIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfdGhpczUiLCJfbG9vcCIsIl90aGlzNSRjb25maWckdmlzQ29uZiIsIl9PYmplY3QkdmFsdWVzJF9pIiwiX09iamVjdCR2YWx1ZXMiLCJfaSIsIm9sZEZpZWxkIiwiaXNVc2luZ0hleENvbG9yQ29kZSIsIm5ld0RhdGFTZXRGaWVsZCIsImZkIiwiX3JldCIsInVwZGF0ZUxheWVyRG9tYWluIiwibmV3RmlsdGVyIiwiX3RoaXM2IiwidGFibGUiLCJzY2FsZVR5cGUiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsIl90aGlzNyIsInVwZGF0ZVRyaWdnZXJzIiwiZGF0YVNldEZpZWxkIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJfdGhpczgiLCJjaGVja0NvbG9yT3JGYWxsYmFjayIsImNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZCIsIl90aGlzOSIsImxlZ2VuZHMiLCJfdGhpczkkdmlzdWFsQ2hhbm5lbHMiLCJsZWdlbmQiLCJjYWxjdWxhdGVMZWdlbmQiLCJoYXNIb3ZlcmVkT2JqZWN0Iiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwiX29iamVjdEluZm8kbGF5ZXIiLCJfb2JqZWN0SW5mbyRsYXllciRwcm8iLCJwaWNrZWQiLCJsYXllciIsImdldFJhZGl1c1NjYWxlQnlab29tIiwibWFwU3RhdGUiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJyYWRpdXMiLCJnZXRSYWRpdXNTY2FsZSIsImdldE1heE1hcmtlclNpemUiLCJfdGhpcyRjb25maWc1IiwicmFkaXVzUmFuZ2UiLCJjZWlsIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwiX3RoaXMxMCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImJydXNoaW5nVGFyZ2V0IiwiYnJ1c2giLCJhdXRvSGlnaGxpZ2h0IiwiYnJ1c2hpbmdSYWRpdXMiLCJicnVzaGluZ0VuYWJsZWQiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJfcmVmMTIiLCJpZHgiLCJncHVGaWx0ZXIiLCJ2aXNpYmxlIiwibWFza1BvbHlnb24iLCJtYXNrRXh0ZW5zaW9uUHJvcHMiLCJnZXRNYXNrRXh0ZW5zaW9uUHJvcHMiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJMTkdMQVQiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJfcmVmMTMiLCJyZW5kZXJPcHRzIiwiZ2V0UmFkaXVzIiwicmFkaXVzU2NhbGUiLCJzaGFyZWRQcm9wcyIsIl90aGlzJGNvbmZpZzYiLCJ0ZXh0TGFiZWxzIiwiZ2V0VGV4dCIsIl90ZXh0TGFiZWwiLCJtYWluTGFiZWwiLCJzZWNvbmRhcnlMYWJlbCIsImFsaWdubWVudCIsImFuY2hvciIsImdldENvbG9yIiwibWFpbkZpZWxkIiwib3V0bGluZUNvbG9yIiwiX3JlZjE0IiwiZ2V0U2Vjb25kYXJ5Q29sb3IiLCJzZWNvbmRhcnlGaWVsZCIsInNlY29uZGFyeU91dGxpbmVDb2xvciIsInNlY29uZGFyeVNpemVTY2FsZSIsIlBvaW50TGFiZWxMYXllciIsImNoYXJhY3RlclNldCIsImNvbGxpc2lvbkVuYWJsZWQiLCJjb2xsaXNpb25Hcm91cCIsImdldFNlY29uZGFyeVRleHQiLCJnZXRUZXh0QW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJmb250RmFtaWx5IiwiZm9udFNldHRpbmdzIiwic2RmIiwiZm9udFdlaWdodCIsIm91dGxpbmVXaWR0aCIsImdldEZpbHRlclZhbHVlIiwiZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yIiwiaWNvblVybEFjY2Vzc29yIiwibWFzayIsIm1heEljb25TaXplIiwid2FudGVkVXJsIiwiaWNvbk9rIiwidXJsIiwid2lkdGgiLCJoZWlnaHQiLCJrZXBsZXJUYWJsZSIsIl9PYmplY3QkdmFsdWVzMiIsIl9PYmplY3QkdmFsdWVzMiRmaW5kIiwiX3RoaXMkY29uZmlnJGZpZWxkMiIsIl90aGlzJGNvbmZpZyR2aXNDb25maSIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJyZXF1aXJlZEZpZWxkcyIsImdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMiLCJhbGxLZXlzIiwicG9pbnRlcnMiLCJjb3VudFBlcktleSIsInBhaXJzIiwiaW5jcmVtZW50UG9pbnRlcnMiLCJuZXdQYWlyIiwiY3V1ciIsInB0cyIsImNvdW50cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVycy9iYXNlLWxheWVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBrZXltaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCB7Q29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uLCBEYXRhRmlsdGVyRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU0sIExheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge19Qb2ludExhYmVsTGF5ZXIgYXMgUG9pbnRMYWJlbExheWVyfSBmcm9tICdAZGVjay5nbC9jYXJ0byc7XG5pbXBvcnQgRGVmYXVsdExheWVySWNvbiBmcm9tICcuL2RlZmF1bHQtbGF5ZXItaWNvbic7XG5pbXBvcnQge2RpZmZVcGRhdGVUcmlnZ2Vyc30gZnJvbSAnLi9sYXllci11cGRhdGUnO1xuaW1wb3J0IHtyZ2J9IGZyb20gJ2QzLWNvbG9yJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVMsIGhleENvbG9yfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7RGF0YVZpekNvbG9yc30gZnJvbSAnY29uc3RhbnRzL2N1c3RvbS1jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUxcbn0gZnJvbSAnLi9sYXllci1mYWN0b3J5JztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgaXNQbGFpbk9iamVjdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2dldExhdExuZ0JvdW5kcywgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0U2FtcGxlRGF0YX0gZnJvbSAndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG5pbXBvcnQge2hleFRvUmdiLCBnZXRDb2xvckdyb3VwQnlOYW1lLCByZXZlcnNlQ29sb3JSYW5nZSwgY2hlY2tDb2xvck9yRmFsbGJhY2t9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7Z2V0TWFza0V4dGVuc2lvblByb3BzfSBmcm9tICd1dGlscy9sYXllci11dGlscyc7XG5pbXBvcnQge3NjYWxlT3JkaW5hbH0gZnJvbSAnZDMtc2NhbGUnO1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLkxheWVyfSBMYXllckNsYXNzfSAqL1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX0lEX0xFTkdUSCA9IDY7XG5cbi8vIE5vdGUsIHRoaXMgaXMgaXMgU1ZHIG9mIHNvbGlkIGNpcmNsZSBlbmNvZGVkIGFzIGRhdGEtdXJpXG5jb25zdCBGQUxMQkFDS19JQ09OID1cbiAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxQSE4yWnlCMmFXVjNRbTk0UFNJd0lEQWdNVEF3SURFd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNE5DaUFnUEdOcGNtTnNaU0JqZUQwaU5UQWlJR041UFNJMU1DSWdjajBpTlRBaUx6NE5Dand2YzNablBnPT0nO1xuXG5jb25zdCBNQVhfU0FNUExFX1NJWkUgPSA1MDAwO1xuY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcbmNvbnN0IGRhdGFGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRGF0YUZpbHRlckV4dGVuc2lvbih7ZmlsdGVyU2l6ZTogTUFYX0dQVV9GSUxURVJTfSk7XG5jb25zdCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24gPSBuZXcgQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uKCk7XG5cbmNvbnN0IGRlZmF1bHREYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+IGQ7XG5jb25zdCBkZWZhdWx0R2V0RmllbGRWYWx1ZSA9IChmaWVsZCwgZCkgPT4gZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcbmNvbnN0IHNjYWxlSWRlbnRpdHkgPSB2ID0+IHY7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEUgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqIEB0eXBlIHtMYXllckNsYXNzfSAqL1xuY2xhc3MgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gbGVnZW5kU2V0dGluZ3NcbiAgICB0aGlzLmxlZ2VuZFNldHRpbmdzID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIGludGVyYWN0aXZpdHlTZXR0aW5nc1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoe1xuICAgICAgY29sdW1uczogdGhpcy5nZXRMYXllckNvbHVtbnMoKSxcbiAgICAgIC4uLnByb3BzXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IG92ZXJsYXlUeXBlKCkge1xuICAgIHJldHVybiBPVkVSTEFZX1RZUEUuZGVja2dsO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2NvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgbnVsbFZhbHVlOiBOT19WQUxVRV9DT0xPUixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBwcm9wZXJ0eTogJ3NpemUnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBwb2ludCBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBwb2ludCBiYXNlZCBsYXllcnM6IHBvaW50LCBpY29uIGV0Yy5cbiAgICovXG4gIGdldCBkZWZhdWx0UG9pbnRDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogJ2xuZycsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogJ2xhdCcsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgbGluayBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBsaW5rIGJhc2VkIGxheWVyczogYXJjLCBsaW5lIGV0Y1xuICAgKi9cbiAgZ2V0IGRlZmF1bHRMaW5rQ29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBsYXQxOiB7cGFpcjogJ2xuZzEnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzE6IHtwYWlyOiAnbGF0MScsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBzZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKGludGVyYWN0aXZpdHlTZXR0aW5ncykge1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IGludGVyYWN0aXZpdHlTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBoYXNUb29sdGlwKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmhvdmVyPy5maWVsZHMubGVuZ3RoIHx8XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5jbGljaz8uZmllbGRzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzSW50ZXJhY3Rpdml0eSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmVuYWJsZWQpO1xuICB9XG5cbiAgLypcbiAgICogR2l2ZW4gYSBkYXRhc2V0LCBhdXRvbWF0aWNhbGx5IGZpbmQgcHJvcHMgdG8gY3JlYXRlIGxheWVyIGJhc2VkIG9uIGl0XG4gICAqIGFuZCByZXR1cm4gdGhlIHByb3BzIGFuZCBwcmV2aW91cyBmb3VuZCBsYXllcnMuXG4gICAqIEJ5IGRlZmF1bHQsIG5vIGxheWVycyB3aWxsIGJlIGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIGZvdW5kTGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKChpID09PSBhbGxLZXlzLmxlbmd0aCAtIDEgPyAtMSA6IDApKSk7XG4gICAgY29uc3QgY291bnRQZXJLZXkgPSBhbGxLZXlzLm1hcChrID0+IHJlcXVpcmVkQ29sdW1uc1trXS5sZW5ndGgpO1xuICAgIGNvbnN0IHBhaXJzID0gW107XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB3aGlsZSAoaW5jcmVtZW50UG9pbnRlcnMocG9pbnRlcnMsIGNvdW50UGVyS2V5LCBwb2ludGVycy5sZW5ndGggLSAxKSkge1xuICAgICAgY29uc3QgbmV3UGFpciA9IHBvaW50ZXJzLnJlZHVjZSgocHJldiwgY3V1ciwgaSkgPT4ge1xuICAgICAgICBwcmV2W2FsbEtleXNbaV1dID0gcmVxdWlyZWRDb2x1bW5zW2FsbEtleXNbaV1dW2N1dXJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcGFpcnMucHVzaChuZXdQYWlyKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IGluY3JlbWVudCBwb2ludGVyc1xuICAgIGZ1bmN0aW9uIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHB0c1swXSA9PT0gY291bnRzWzBdIC0gMSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGluY3JlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdHNbaW5kZXhdICsgMSA8IGNvdW50c1tpbmRleF0pIHtcbiAgICAgICAgcHRzW2luZGV4XSA9IHB0c1tpbmRleF0gKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHRzW2luZGV4XSA9IDA7XG4gICAgICByZXR1cm4gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgc3RhdGljIGhleFRvUmdiKGMpIHtcbiAgICByZXR1cm4gaGV4VG9SZ2IoYyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCB8fCBudWxsLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbiB8fCBaT09NX0xFVkVMX0xJTUlUUy5taW4sXG4gICAgICAgIG1heDogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4IHx8IFpPT01fTEVWRUxfTElNSVRTLm1heFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgY29sdW1uczogcHJvcHMuY29sdW1ucyB8fCBudWxsLFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgfHwgZmFsc2UsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgfHwgZmFsc2UsXG4gICAgICBoaWdobGlnaHRDb2xvcjogcHJvcHMuaGlnaGxpZ2h0Q29sb3IgfHwgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gICAgICBoaWRkZW46IHByb3BzLmhpZGRlbiB8fCBmYWxzZSxcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBpbnRvIHNlcGFyYXRlIHZpc3VhbCBDaGFubmVsIGNvbmZpZ1xuICAgICAgLy8gY29sb3IgYnkgZmllbGQsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIGNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBjb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgY29sb3JTY2FsZTogU0NBTEVfVFlQRVMucXVhbnRpbGUsXG5cbiAgICAgIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIHNpemVEb21haW46IFswLCAxXSxcbiAgICAgIHNpemVTY2FsZTogU0NBTEVfVFlQRVMubGluZWFyLFxuICAgICAgc2l6ZUZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zIHt7bGFiZWw6IHN0cmluZywgbWVhc3VyZTogKHN0cmluZ3xzdHJpbmcpfX1cbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXkpIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZV0ubGFiZWwsXG4gICAgICBtZWFzdXJlOiB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgID8gKHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0uZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLm5hbWUpXG4gICAgICAgIDogdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBmaWVsZCAtIFNlbGVjdGVkIGZpZWxkXG4gICAqIEByZXR1cm5zIHt7fX0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5LCBmaWVsZCkge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gcGFpciAtIGZpZWxkIFBhaXJcbiAgICogQHJldHVybnMge29iamVjdH0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXksIHBhaXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICBjb25zdCB7cGFpcjogcGFydG5lcktleSwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldO1xuICAgIGNvbnN0IHtmaWVsZFBhaXJLZXk6IHBhcnRuZXJGaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XTogcGFpcltmaWVsZFBhaXJLZXldLFxuICAgICAgW3BhcnRuZXJLZXldOiBwYWlyW3BhcnRuZXJGaWVsZFBhaXJLZXldXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yXG4gICAgICA/IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpXG4gICAgICA6IDE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIGZpbHRlcmVkSW5kZXgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZW5kZXJMYXllcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqL1xuICBhc3NpZ25Db25maWdUb0xheWVyKGNvbmZpZ1RvQ29weSwgdmlzQ29uZmlnU2V0dGluZ3MpIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX0gPSB7fSkge1xuICAgIGNvbnN0IGNvcGllZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlncykge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXTtcbiAgICAgIH0gZWxzZSBpZiAoWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmhhc093blByb3BlcnR5KHApKSkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldfVxuICAgICAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gey4uLmFjY3Vba2V5XSwgLi4udmFsdWV9IDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2UuIElmIHR5cGUgaXMgaGV4Q29sb3IgdGhlbiBpdCdzIGFsc28gYSByYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9XG4gICAgICB2aXNDb25maWdbcHJvcF0gJiYgKHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMgfHwgdmlzQ29uZmlnW3Byb3BdLnR5cGUgPT09IGhleENvbG9yKTtcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyB8fCAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgY29uc3Qge2NvbG9yc30gPSB2aXNDb25maWdbcHJvcF07XG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZSxcbiAgICAgIG5hbWU6ICdDdXN0b20gUGFsZXR0ZScsXG4gICAgICBjb2xvcnM6IFsuLi5jb2xvcnNdXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCwgcmV2ZXJzZWQgYW5kIHR5cGVcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgdHlwZTogdmlzQ29uZmlnW3Byb3BdLnR5cGUsXG4gICAgICAgICAgICBzdGVwczogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycz8ubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKSxcbiAgICAgICAgICAgIGhleENvbHVtbjogdGhpcy5nZXRIZXhDb2x1bW4ocHJvcCksXG4gICAgICAgICAgICBpc0hleENvbHVtbjogdGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3ApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtzdGVwcywgcmV2ZXJzZWR9ID0gY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnO1xuICAgIGNvbnN0IGNvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF07XG4gICAgLy8gZmluZCBiYXNlZCBvbiBzdGVwIG9yIHJldmVyc2VkXG4gICAgbGV0IHVwZGF0ZTtcbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3N0ZXBzJykpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0Q29sb3JHcm91cEJ5TmFtZShjb2xvclJhbmdlKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNhbWVHcm91cCA9IENPTE9SX1JBTkdFUy5maWx0ZXIoY3IgPT4gZ2V0Q29sb3JHcm91cEJ5TmFtZShjcikgPT09IGdyb3VwKTtcblxuICAgICAgICB1cGRhdGUgPSBzYW1lR3JvdXAuZmluZChjciA9PiBjci5jb2xvcnMubGVuZ3RoID09PSBzdGVwcyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLnJldmVyc2VkKSB7XG4gICAgICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UodHJ1ZSwgdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5jb2xvck1hcCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHRoaXMudXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JSYW5nZS5jb2xvck1hcCwgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmV2ZXJzZWQnKSkge1xuICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UocmV2ZXJzZWQsIHVwZGF0ZSB8fCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yTWFwLCBjb2xvclJhbmdlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtmaWVsZCwgZG9tYWlufSA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcHJvcCk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnW2ZpZWxkXT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyB0eXBlIG9yIHR5cGUgaXMgbm90IHN0cmluZywgYm9vbGVhbiBvciBkYXRlXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IGNvbG9yUmFuZ2UuY29sb3JzO1xuICAgIGNvbnN0IGFzc2lnbmVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIGlmIChjb2xvclJhbmdlLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgICBjb2xvck1hcDogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCkubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY01hcFswXSk7XG4gICAgICByZXR1cm4gW2NNYXBbMF0sIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgdW5hc3NpZ25lZENvbG9ycykge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBkb21haW4uZmluZChkID0+ICFhc3NpZ25lZENhdGVnb3JpZXMuaW5jbHVkZXMoZCkpO1xuICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIG5ld0NvbG9yTWFwLnB1c2goW2NhdGVnb3J5LCBjb2xvcl0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgdXBkYXRlKSB7XG4gICAgY29uc3QgY29sb3JzID0gdXBkYXRlLmNvbG9ycztcbiAgICBsZXQgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIG5ld0NvbG9yTWFwID0gbmV3Q29sb3JNYXAubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCA9PT0gbmV3Q29sb3JNYXAubGVuZ3RoIC0gMSA/IG51bGwgOiBjTWFwWzBdO1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgaWYgKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sb3JNYXBWYWx1ZXMgPSBjb2xvck1hcC5tYXAoYyA9PiBjWzBdKS5maWx0ZXIoYyA9PiB0eXBlb2YgYyA9PT0gJ251bWJlcicpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi5jb2xvck1hcFZhbHVlcywgZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAyXVswXTtcbiAgICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBwcmV2VmFsdWUpIC8gKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoICsgMSk7XG4gICAgICBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAxXVswXSA9IHByZXZWYWx1ZSArIHN0ZXA7XG5cbiAgICAgIGZvciAoY29uc3QgW2ksIGNvbG9yXSBvZiB1bmFzc2lnbmVkQ29sb3JzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGkgPT09IHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoIC0gMSA/IG51bGwgOiBwcmV2VmFsdWUgKyAoc3RlcCAqIChpICsgMikpO1xuICAgICAgICBuZXdDb2xvck1hcC5wdXNoKFt2YWx1ZSwgY29sb3JdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gKFxuICAgICAgKGNvbHVtbnMgJiZcbiAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkodiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHYub3B0aW9uYWwgfHwgKHYudmFsdWUgJiYgdi5maWVsZElkeCA+IC0xKSk7XG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGEpIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihsYXllckRhdGEuZGF0YSAmJiBsYXllckRhdGEuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy50eXBlICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgaWYgKGNvbG9yUmFuZ2UudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIHJldHVybiAoXywgY29sb3IpID0+IHtcbiAgICAgICAgY29uc3Qge3IsIGcsIGJ9ID0gcmdiKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiXS5zb21lKGlzTmFOKSA/IFVOS05PV05fQ09MT1IgOiBbciwgZywgYl07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvclJhbmdlLmNvbG9yTWFwKSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgICAgY29uc3Qgc2NhbGUgPSBTQ0FMRV9GVU5DW2NvbG9yU2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihBcnJheS5mcm9tKGNNYXAua2V5cygpKSlcbiAgICAgICAgLnJhbmdlKEFycmF5LmZyb20oY01hcC52YWx1ZXMoKSkpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBnZXRDdXN0b21NYXJrZXJzU2NhbGUocmFuZ2UsIGZhbGxiYWNrSWNvbikge1xuICAgIGxldCB1bmtub3duVmFsdWUgPSBmYWxsYmFja0ljb24gfHwgRkFMTEJBQ0tfSUNPTjtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdW5rbm93blZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAocmFuZ2Uub3RoZXJzTWFya2VyKSB7XG4gICAgICB1bmtub3duVmFsdWUgPSByYW5nZS5vdGhlcnNNYXJrZXI7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3ZhbHVlLCBtYXJrZXJVcmx9IG9mIHJhbmdlLm1hcmtlck1hcCkge1xuICAgICAgaWYgKG1hcmtlclVybCkge1xuICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihBcnJheS5mcm9tKG1hcHBpbmcua2V5cygpKSlcbiAgICAgIC5yYW5nZShBcnJheS5mcm9tKG1hcHBpbmcudmFsdWVzKCkpKVxuICAgICAgLnVua25vd24odW5rbm93blZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHZpc3VhbCBjaGFubmVscyB0byBkZWNrLmdsIGFjY2Vzb3JzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSBQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ycyA9IHt9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gQm9vbGVhbihcbiAgICAgICAgKHNjYWxlIHx8IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5KSAmJiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuY29uZmlnW3NjYWxlXSwgdGhpcy5jb25maWdbZG9tYWluXSwgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXV07XG4gICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBkZWNsYXJlIGFzIGNvbnN0IGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFyZSBnb2luZyB0byBiZSB1c2UgaW4gdGhlIGdldEVuY29kZWRDaGFubmVsVmFsdWUgY2FsbFxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBvbGRMYXllckRhdGEgcGFyYW1ldGVyIGluIGZvcm1hdExheWVyRGF0YSBtZXRob2Qgd2lsbCBiZSB3cm9uZyAoeW91IGNhbiBjaGVjayB0aGUgZm9ybWF0TGF5ZXJEYXRhIFRpbGVMYXllciBtZXRob2QgaW4gQnVpbGRlciBhcyBleGFtcGxlKVxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHlcbiAgICAgICAgICAgID8gc2NhbGVJZGVudGl0eVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoLi4uYXJncylcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnLmN1c3RvbU1hcmtlcnNVcmxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZSguLi5hcmdzLCBpc0ZpeGVkKTtcblxuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZCA9PlxuICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSh7XG4gICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgICAgIHNjYWxlOiBzY2FsZUZ1bmN0aW9uLFxuICAgICAgICAgICAgZGF0YTogZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgZmllbGQ6IGZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgX2FnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblZhbHVlLFxuICAgICAgICAgICAgbnVsbFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBnZXRBdHRyaWJ1dGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9XG4gICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGFjY2Vzc29yIGluIGF0dHJpYnV0ZUFjY2Vzc29ycykpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZUFjY2Vzc29ycztcbiAgfVxuXG4gIGdldFZpc0NoYW5uZWxTY2FsZShzY2FsZSwgZG9tYWluLCByYW5nZSwgZml4ZWQpIHtcbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgICAgcmV0dXJuIFNDQUxFX0ZVTkNbc2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihkb21haW4uc2xpY2UoMCwgcmFuZ2UubGVuZ3RoKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYGNvdW50YCBhZ2dyZWdhdGlvbiwgd2UgZG9tYWluIGlzIGFjdHVhbGx5IGBbMCwgSW5maW5pdHldYCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAvLyB0byB1c2UgaXQsIHNvIHNraXAgc3BlY3lmeWluZyB0aGlzIGRvbWFpbnNcbiAgICBjb25zdCBkb21haW5Jc0luZmluaXRlID0gZG9tYWluICYmIChkb21haW5bMF0gPT09IDAgJiYgZG9tYWluWzFdID09PSBJbmZpbml0eSk7XG4gICAgY29uc3Qgc2NhbGVGYWN0b3J5ID0gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdO1xuICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgIGxldCByZXN1bHQgPSBzY2FsZUZhY3RvcnkoKTtcbiAgICBpZiAoZG9tYWluICYmICFkb21haW5Jc0luZmluaXRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZG9tYWluKGRvbWFpbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIGNhbGN1bGF0ZSBib3VuZHMgZm9yLlxuICAgKiBAcGFyYW0geyhkOiB7aW5kZXg6IG51bWJlcn0sIGRjOiBpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IG51bWJlcltdfSBnZXRQb3NpdGlvbiBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEByZXR1cm4ge251bWJlcltdfG51bGx9IGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IHNhbXBsZURhdGEubWFwSW5kZXgoZ2V0UG9zaXRpb24pO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoe1xuICAgIGNoYW5uZWwsXG4gICAgc2NhbGUsXG4gICAgZGF0YSxcbiAgICBmaWVsZCxcbiAgICBkYXRhQ29udGFpbmVyLFxuICAgIC8vIEluIGJ1aWxkZXIgd2Ugb3ZlcndyaXRlIHRoZSBnZXRWYWx1ZSBmdW5jdGlvbiBhbmQgd2UgdXNlIHRoZSBfYWdncmVnYXRpb24gcGFyYW1ldGVyIGluIHNwYXRpYWwgaW5kZXggbGF5ZXJzIGFzIHRoZSBRdWFka2V5TGF5ZXIuXG4gICAgX2FnZ3JlZ2F0aW9uLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgfSkge1xuICAgIGxldCBjb2xvckNvbHVtblZhbHVlO1xuICAgIGNvbnN0IHt0eXBlfSA9IGZpZWxkO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZmllbGQsIGRhdGEpO1xuICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5yYW5nZV07XG4gICAgY29uc3QgY2hhbm5lbEZpZWxkID0gdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5maWVsZF07XG5cbiAgICBpZiAoY2hhbm5lbENvbmZpZy50eXBlID09PSBoZXhDb2xvcikge1xuICAgICAgY29uc3QgY29sdW1uRmllbGQgPSB7XG4gICAgICAgIGlkOiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgIG5hbWU6IGNoYW5uZWxGaWVsZC5jb2xvckNvbHVtbixcbiAgICAgICAgZmllbGRJZHg6IGNoYW5uZWxGaWVsZC5jb2xvckNvbHVtbklkeCxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFDb250YWluZXIudmFsdWVBdChkLmluZGV4LCBjaGFubmVsRmllbGQuY29sb3JDb2x1bW5JZHgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb2xvckNvbHVtblZhbHVlID0gZ2V0VmFsdWUoY29sdW1uRmllbGQsIGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGF0dHJpYnV0ZVZhbHVlO1xuICAgIGlmICh0eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKSB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjb252ZXJ0IGhlcmVcbiAgICAgIC8vIHNjYWxlIEZ1bmN0aW9uIHNob3VsZCB0YWtlIGNhcmUgb2YgaXRcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUobmV3IERhdGUodmFsdWUpLCBjb2xvckNvbHVtblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBzY2FsZSh2YWx1ZSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gIH1cblxuICB1cGRhdGVNZXRhKG1ldGEpIHtcbiAgICB0aGlzLm1ldGEgPSB7Li4udGhpcy5tZXRhLCAuLi5tZXRhfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTGVnZW5kKHNldHRpbmdzKSB7XG4gICAgdGhpcy5sZWdlbmRTZXR0aW5ncyA9IHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgYWxsRGF0YX0pIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuXG4gICAgdGhpcy51cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGRhdGFzZXQpO1xuICAgIHRoaXMudXBkYXRlSGV4Q29sb3JEb21haW4oZGF0YXNldCk7XG5cbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICBjb25zdCBkYXRhVXBkYXRlVHJpZ2dlcnMgPSB0aGlzLmdldERhdGFVcGRhdGVUcmlnZ2VycyhkYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQuZ2V0TWV0YSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoIXRyaWdnZXJDaGFuZ2VkLmdldERhdGEgJiYgb2xkTGF5ZXJEYXRhICYmIG9sZExheWVyRGF0YS5kYXRhKSB7XG4gICAgICAvLyBzYW1lIGRhdGFcbiAgICAgIGRhdGEgPSBvbGRMYXllckRhdGEuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMuY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShkYXRhc2V0LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0cmlnZ2VyQ2hhbmdlZH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHN0eWxlZCBmaWVsZHMgdG8gbWF0Y2ggb25lcyBmcm9tIG5ldyBkYXRhc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICAgKi9cbiAgdXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KSB7XG4gICAgZm9yIChjb25zdCB7ZmllbGQsIHJhbmdlfSBvZiBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpKSB7XG4gICAgICBjb25zdCBvbGRGaWVsZCA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgIGNvbnN0IGlzVXNpbmdIZXhDb2xvckNvZGUgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdPy5oZXhDb2xvcjtcbiAgICAgIGlmICghb2xkRmllbGQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IG5ld0RhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gb2xkRmllbGQubmFtZSkgfHwgbnVsbDtcbiAgICAgIGlmIChpc1VzaW5nSGV4Q29sb3JDb2RlKSB7XG4gICAgICAgIG5ld0RhdGFTZXRGaWVsZCA9IHtcbiAgICAgICAgICAuLi5uZXdEYXRhU2V0RmllbGQsXG4gICAgICAgICAgY29sb3JDb2x1bW46IG5ld0RhdGFTZXRGaWVsZC5jb2xvckNvbHVtbiB8fCBvbGRGaWVsZC5jb2xvckNvbHVtbixcbiAgICAgICAgICBjb2xvckNvbHVtbklkeDogbmV3RGF0YVNldEZpZWxkLmNvbG9yQ29sdW1uSWR4IHx8IG9sZEZpZWxkLmNvbG9yQ29sdW1uSWR4XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBuZXdEYXRhU2V0RmllbGR9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBvbmUgbGF5ZXIgZG9tYWluIHdoZW4gc3RhdGUuZGF0YSBjaGFuZ2VkXG4gICAqIGlmIHN0YXRlLmRhdGEgY2hhbmdlIGlzIGR1ZSBvdCB1cGRhdGUgZmlsdGVyLCBuZXdGaWxlciB3aWxsIGJlIHBhc3NlZFxuICAgKiBjYWxsZWQgYnkgdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0c1xuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3RmlsdGVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IGxheWVyXG4gICAqL1xuICB1cGRhdGVMYXllckRvbWFpbihkYXRhc2V0cywgbmV3RmlsdGVyKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghdGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7c2NhbGV9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcblxuICAgICAgLy8gb3JkaW5hbCBkb21haW4gaXMgYmFzZWQgb24gZGF0YUNvbnRhaW5lciwgaWYgb25seSBmaWx0ZXIgY2hhbmdlZFxuICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW5cbiAgICAgIGlmICghbmV3RmlsdGVyIHx8IHNjYWxlVHlwZSAhPT0gU0NBTEVfVFlQRVMub3JkaW5hbCkge1xuICAgICAgICBjb25zdCB7ZG9tYWlufSA9IGNoYW5uZWw7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKHRhYmxlLCBjaGFubmVsKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2RvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0RGF0YXNldChkYXRhc2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhSWQgPyBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB2aXN1YWwgY2hhbm5lbCBmaWVsZCBhbmQgc2NhbGVzIGJhc2VkIG9uIHN1cHBvcnRlZCBmaWVsZCAmIHNjYWxlIHR5cGVcbiAgICogQHBhcmFtIGNoYW5uZWxcbiAgICovXG4gIHZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKSB7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKTtcbiAgICB0aGlzLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZmllbGQgdHlwZSBiYXNlZCBvbiBjaGFubmVsU2NhbGVUeXBlXG4gICAqL1xuICB2YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBjaGFubmVsU2NhbGVUeXBlLCBzdXBwb3J0ZWRGaWVsZFR5cGVzfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICBpZiAodGhpcy5jb25maWdbZmllbGRdKSB7XG4gICAgICAvLyBpZiBmaWVsZCBpcyBzZWxlY3RlZCwgY2hlY2sgaWYgZmllbGQgdHlwZSBpcyBzdXBwb3J0ZWRcbiAgICAgIGNvbnN0IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzID1cbiAgICAgICAgc3VwcG9ydGVkRmllbGRUeXBlcyB8fCBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFNbY2hhbm5lbFNjYWxlVHlwZV07XG5cbiAgICAgIGlmICghY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXModGhpcy5jb25maWdbZmllbGRdLnR5cGUpKSB7XG4gICAgICAgIC8vIGZpZWxkIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgc2V0IGl0IGJhY2sgdG8gbnVsbFxuICAgICAgICAvLyBzZXQgc2NhbGUgYmFjayB0byBkZWZhdWx0XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG51bGx9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc2NhbGUgdHlwZSBiYXNlZCBvbiBhZ2dyZWdhdGlvblxuICAgKi9cbiAgdmFsaWRhdGVTY2FsZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge3NjYWxlLCByYW5nZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGlmIChcbiAgICAgICFzY2FsZSB8fFxuICAgICAgKHRoaXMuaXNDb2xvcmVkQnlDb2xvckNvbHVtbihyYW5nZSkgJiYgdGhpcy5jb25maWdbc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5pZGVudGl0eSlcbiAgICApIHtcbiAgICAgIC8vIHZpc3VhbENoYW5uZWwgZG9lc24ndCBoYXZlIHNjYWxlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IHRoaXMuZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpO1xuICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgc2VsZWN0ZWQgc2NhbGUgaXNcbiAgICAvLyBzdXBwb3J0ZWQsIGlmIG5vdCwgY2hhbmdlIHRvIGRlZmF1bHRcbiAgICBpZiAoIXNjYWxlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tzY2FsZV0pKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbc2NhbGVdOiBzY2FsZU9wdGlvbnNbMF19KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjYWxlIG9wdGlvbnMgYmFzZWQgb24gY3VycmVudCBmaWVsZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbFxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBnZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgc2NhbGUsIGNoYW5uZWxTY2FsZVR5cGV9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgID8gRklFTERfT1BUU1t0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZV0uc2NhbGVbY2hhbm5lbFNjYWxlVHlwZV1cbiAgICAgIDogW3RoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKClbc2NhbGVdXTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgLy8gY2FsY3VsYXRlIGxheWVyIGNoYW5uZWwgZG9tYWluXG4gICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCk7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3Zpc3VhbENoYW5uZWwuZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICB9XG5cbiAgZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzKCkge1xuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKHZpc3VhbENoYW5uZWwgPT4ge1xuICAgICAgLy8gZmllbGQgcmFuZ2Ugc2NhbGUgZG9tYWluXG4gICAgICBjb25zdCB7YWNjZXNzb3IsIGZpZWxkLCBzY2FsZSwgZG9tYWluLCByYW5nZSwgZGVmYXVsdFZhbHVlLCBmaXhlZH0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0gPSB7XG4gICAgICAgIFtmaWVsZF06IHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgW3NjYWxlXTogdGhpcy5jb25maWdbc2NhbGVdLFxuICAgICAgICBbZG9tYWluXTogdGhpcy5jb25maWdbZG9tYWluXSxcbiAgICAgICAgW3JhbmdlXTogdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnZnVuY3Rpb24nID8gZGVmYXVsdFZhbHVlKHRoaXMuY29uZmlnKSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgLi4uKGZpeGVkID8ge1tmaXhlZF06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tmaXhlZF19IDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVUcmlnZ2VycztcbiAgfVxuXG4gIGNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpIHtcbiAgICBjb25zdCB7c2NhbGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICAgIGlmICghZmllbGQgfHwgIXNjYWxlKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcbiAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICBpZiAoIXNjYWxlVHlwZSB8fCAhZGF0YVNldEZpZWxkKSB7XG4gICAgICAvLyBpZiBuZXcgZGF0YXNldCBkb2Vzbid0IGNvbnRhaW4gcHJldmlvdXNseSBzZXQgZmllbGRcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhc2V0LmdldENvbHVtbkxheWVyRG9tYWluKGRhdGFTZXRGaWVsZCwgc2NhbGVUeXBlKSB8fCBkZWZhdWx0RG9tYWluO1xuICB9XG5cbiAgdXBkYXRlSGV4Q29sb3JEb21haW4oZGF0YXNldCkge1xuICAgIGlmICghZGF0YXNldCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbY2hhbm5lbC5yYW5nZV07XG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnW2NoYW5uZWwuZmllbGRdO1xuXG4gICAgICBpZiAoY2hhbm5lbENvbmZpZz8udHlwZSA9PT0gaGV4Q29sb3IgJiYgZmllbGQ/LmNvbG9yQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLmNvbG9yQ29sdW1uKTtcbiAgICAgICAgY29uc3QgY29sb3JzID0gZGF0YXNldFxuICAgICAgICAgIC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIFNDQUxFX1RZUEVTLm9yZGluYWwpXG4gICAgICAgICAgLm1hcChjID0+IGNoZWNrQ29sb3JPckZhbGxiYWNrKGMpKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7XG4gICAgICAgICAgW2NoYW5uZWwucmFuZ2VdOiB7Li4uY2hhbm5lbENvbmZpZywgY29sb3JzfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY2FsY3VsYXRlSGV4Q29sdW1uTGVnZW5kKGRhdGFzZXRzKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCFkYXRhc2V0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZ2VuZFNldHRpbmdzID0gT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykucmVkdWNlKChsZWdlbmRzLCBjaGFubmVsKSA9PiB7XG4gICAgICBjb25zdCB7cmFuZ2UsIGZpZWxkOiBjaGFubmVsRmllbGR9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1tjaGFubmVsRmllbGRdO1xuXG4gICAgICBpZiAoY2hhbm5lbENvbmZpZz8udHlwZSA9PT0gaGV4Q29sb3IgJiYgZmllbGQ/LmNvbG9yQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLmNvbG9yQ29sdW1uKTtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gZGF0YXNldC5jYWxjdWxhdGVMZWdlbmQoZmllbGQsIGRhdGFTZXRGaWVsZCk7XG4gICAgICAgIGxlZ2VuZHNbY2hhbm5lbF0gPSBsZWdlbmQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVnZW5kcztcbiAgICB9LCB7fSk7XG4gICAgdGhpcy51cGRhdGVMYXllckxlZ2VuZChsZWdlbmRTZXR0aW5ncyk7XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gdGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSAmJiBvYmplY3RJbmZvLm9iamVjdCA/IG9iamVjdEluZm8ub2JqZWN0IDogbnVsbDtcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gb2JqZWN0SW5mbz8ucGlja2VkICYmIG9iamVjdEluZm8/LmxheWVyPy5wcm9wcz8uaWQgPT09IHRoaXMuaWQ7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZUJ5Wm9vbShtYXBTdGF0ZSkge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAodGhpcy5jb25maWdbZmllbGRdID8gMSA6IHJhZGl1cykgKiB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGUoKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsIHx8IHRoaXMuY29uZmlnW3JhZGl1c0NoYW5uZWwuZmllbGRdKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnLnJhZGl1cztcbiAgfVxuXG4gIGdldE1heE1hcmtlclNpemUoKSB7XG4gICAgY29uc3Qge3JhZGl1c0ZpZWxkLCBzaXplRmllbGQsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7cmFkaXVzUmFuZ2UsIHJhZGl1c30gPSB2aXNDb25maWc7XG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNGaWVsZCB8fCBzaXplRmllbGQ7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoZmllbGQgJiYgcmFkaXVzUmFuZ2UgPyByYWRpdXNSYW5nZVsxXSA6IHJhZGl1cykpO1xuICB9XG5cbiAgc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLnNvbWUocCA9PiAhdGhpcy5ub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMuaW5jbHVkZXMocCkpO1xuICB9XG5cbiAgZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZywgYnJ1c2hpbmdUYXJnZXQpIHtcbiAgICBjb25zdCB7YnJ1c2h9ID0gaW50ZXJhY3Rpb25Db25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gYnJ1c2hpbmdcbiAgICAgIGF1dG9IaWdobGlnaHQ6ICFicnVzaC5lbmFibGVkLFxuICAgICAgYnJ1c2hpbmdSYWRpdXM6IGJydXNoLmNvbmZpZy5zaXplICogMTAwMCxcbiAgICAgIGJydXNoaW5nVGFyZ2V0OiBicnVzaGluZ1RhcmdldCB8fCAnc291cmNlJyxcbiAgICAgIGJydXNoaW5nRW5hYmxlZDogYnJ1c2guZW5hYmxlZFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0RGVja0xheWVyUHJvcHMoe2lkeCwgZ3B1RmlsdGVyLCBtYXBTdGF0ZSwgdmlzaWJsZSwgbWFza1BvbHlnb259KSB7XG4gICAgY29uc3QgbWFza0V4dGVuc2lvblByb3BzID0gZ2V0TWFza0V4dGVuc2lvblByb3BzKG1hc2tQb2x5Z29uKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWFza0V4dGVuc2lvblByb3BzLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBpZHgsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICBwaWNrYWJsZTogdGhpcy5oYXNJbnRlcmFjdGl2aXR5LFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4obWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QpfSxcbiAgICAgIGhpZGRlbjogdGhpcy5jb25maWcuaGlkZGVuLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbTogdGhpcy5jb25maWcudmlzaWJpbGl0eUJ5Wm9vbSxcbiAgICAgIC8vIHZpc2NvbmZpZ1xuICAgICAgb3BhY2l0eTogdGhpcy5jb25maWcudmlzQ29uZmlnLm9wYWNpdHksXG4gICAgICBoaWdobGlnaHRDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAvLyBkYXRhIGZpbHRlcmluZ1xuICAgICAgZXh0ZW5zaW9uczogW2RhdGFGaWx0ZXJFeHRlbnNpb24sIC4uLm1hc2tFeHRlbnNpb25Qcm9wcy5leHRlbnNpb25zXSxcbiAgICAgIGZpbHRlclJhbmdlOiBncHVGaWx0ZXIgPyBncHVGaWx0ZXIuZmlsdGVyUmFuZ2UgOiB1bmRlZmluZWQsXG4gICAgICAvLyBsYXllciBzaG91bGQgYmUgdmlzaWJsZSBhbmQgaWYgc3BsaXRNYXAsIHNob3duIGluIHRvIG9uZSBvZiBwYW5lbFxuICAgICAgdmlzaWJsZTogdGhpcy5jb25maWcuaXNWaXNpYmxlICYmIHZpc2libGVcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke3RoaXMuaWR9LWhvdmVyZWRgLFxuICAgICAgcGlja2FibGU6IGZhbHNlLFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVFxuICAgIH07XG4gIH1cblxuICByZW5kZXJUZXh0TGFiZWxMYXllcihcbiAgICB7Z2V0UG9zaXRpb24sIGdldFJhZGl1cywgcmFkaXVzU2NhbGUsIHVwZGF0ZVRyaWdnZXJzLCBzaGFyZWRQcm9wc30sXG4gICAgcmVuZGVyT3B0c1xuICApIHtcbiAgICBjb25zdCB7ZGF0YX0gPSByZW5kZXJPcHRzO1xuICAgIGNvbnN0IHt0ZXh0TGFiZWwsIHZpc2liaWxpdHlCeVpvb219ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsuLi5zaGFyZWRQcm9wcy5leHRlbnNpb25zLCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb25dO1xuXG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLnRleHRMYWJlbHMgfHwgIWRhdGEudGV4dExhYmVsc1swXSB8fCAhZGF0YS50ZXh0TGFiZWxzWzBdLmdldFRleHQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBbbWFpbkxhYmVsLCBzZWNvbmRhcnlMYWJlbF0gPSB0ZXh0TGFiZWw7XG4gICAgY29uc3Qge1xuICAgICAgYWxpZ25tZW50LFxuICAgICAgYW5jaG9yLFxuICAgICAgY29sb3I6IGdldENvbG9yLFxuICAgICAgZmllbGQ6IG1haW5GaWVsZCxcbiAgICAgIG91dGxpbmVDb2xvcixcbiAgICAgIHNpemU6IHNpemVTY2FsZVxuICAgIH0gPSBtYWluTGFiZWw7XG4gICAgY29uc3Qge1xuICAgICAgY29sb3I6IGdldFNlY29uZGFyeUNvbG9yLFxuICAgICAgZmllbGQ6IHNlY29uZGFyeUZpZWxkLFxuICAgICAgb3V0bGluZUNvbG9yOiBzZWNvbmRhcnlPdXRsaW5lQ29sb3IsXG4gICAgICBzaXplOiBzZWNvbmRhcnlTaXplU2NhbGVcbiAgICB9ID0gc2Vjb25kYXJ5TGFiZWwgfHwge307XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IFBvaW50TGFiZWxMYXllcih7XG4gICAgICAgIC4uLnNoYXJlZFByb3BzLFxuXG4gICAgICAgIC8vIFJlY3JlYXRlIGxheWVyIHdoZW4gbGFiZWxzIGNoYW5nZSBvdGhlcndpc2UgcmVuZGVyaW5nIGJyZWFrc1xuICAgICAgICAvLyBUT0RPIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHdpdGggdXBkYXRlVHJpZ2dlcnM/XG4gICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke21haW5GaWVsZD8ubmFtZX0tJHtzZWNvbmRhcnlGaWVsZD8ubmFtZX0tbGFiZWxgLFxuICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgIHZpc2liaWxpdHlCeVpvb20sXG4gICAgICAgIGV4dGVuc2lvbnMsXG5cbiAgICAgICAgY2hhcmFjdGVyU2V0OiAnYXV0bycsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNvbGxpc2lvbkdyb3VwOiBgJHt0aGlzLmlkfS1sYWJlbHNgLFxuXG4gICAgICAgIGdldFRleHQ6IGRhdGEudGV4dExhYmVsc1swXS5nZXRUZXh0LFxuICAgICAgICBnZXRDb2xvcixcbiAgICAgICAgc2l6ZVNjYWxlLFxuICAgICAgICBvdXRsaW5lQ29sb3IsXG5cbiAgICAgICAgLi4uKHNlY29uZGFyeUZpZWxkICYmIHtcbiAgICAgICAgICBnZXRTZWNvbmRhcnlUZXh0OiBkYXRhLnRleHRMYWJlbHNbMV0uZ2V0VGV4dCxcbiAgICAgICAgICBnZXRTZWNvbmRhcnlDb2xvcixcbiAgICAgICAgICBzZWNvbmRhcnlTaXplU2NhbGUsXG4gICAgICAgICAgc2Vjb25kYXJ5T3V0bGluZUNvbG9yXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIFBvc2l0aW9uXG4gICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICBnZXRSYWRpdXMsXG4gICAgICAgIHJhZGl1c1NjYWxlLFxuICAgICAgICBnZXRUZXh0QW5jaG9yOiBhbmNob3IsXG4gICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiBhbGlnbm1lbnQsXG5cbiAgICAgICAgLy8gU3R5bGVcbiAgICAgICAgZm9udEZhbWlseTogJ0ludGVyLCBzYW5zJyxcbiAgICAgICAgZm9udFNldHRpbmdzOiB7c2RmOiB0cnVlfSxcbiAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICBvdXRsaW5lV2lkdGg6IDQsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAvLyB0ZXh0IHdpbGwgYWx3YXlzIHNob3cgb24gdG9wIG9mIGFsbCBsYXllcnNcbiAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlXG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgICAgZ2V0VGV4dDogbWFpbkZpZWxkPy5uYW1lLFxuICAgICAgICAgIGdldENvbG9yOiBtYWluRmllbGQ/LmNvbG9yLFxuICAgICAgICAgIGdldFRleHRBbmNob3I6IG1haW5MYWJlbC5hbmNob3IsXG4gICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IG1haW5MYWJlbC5hbGlnbm1lbnQsXG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5VGV4dDogc2Vjb25kYXJ5RmllbGQ/Lm5hbWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWNrLmdsIGBJY29uTGF5ZXJgIFwiYXV0b1BhY2tcIiBtb2RlIGFjY2Vzc29yIGZvciBjdXN0b20gbWFya2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBpY29uVXJsQWNjZXNzb3IgZGVjay5nbCBhY2Nlc3NvciAob3IgdmFsdWUpIHRoYXQgcmVzb2x2ZXMgdG8gVVJMIG9mIGljb24gZm9yIGdpdmVuIHJvd1xuICAgKiBAcmV0dXJucyBkZWNrLmdsIGFjY2Vzc29yIHRoYXQgcmV0dXJucyBVbnBhY2tlZEljb24gcmVhZHkgdG8gY29uc3VtZSBieSBJY29uTGF5ZXJcbiAgICovXG4gIGdldEN1c3RvbU1hcmtlckljb25BY2Nlc3NvcihpY29uVXJsQWNjZXNzb3IsIG1hc2sgPSB0cnVlKSB7XG4gICAgY29uc3QgbWF4SWNvblNpemUgPSB0aGlzLmdldE1heE1hcmtlclNpemUoKTtcblxuICAgIHJldHVybiBkID0+IHtcbiAgICAgIGNvbnN0IHdhbnRlZFVybCA9XG4gICAgICAgICh0eXBlb2YgaWNvblVybEFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSA/IGljb25VcmxBY2Nlc3NvcihkKSA6IGljb25VcmxBY2Nlc3NvcjtcbiAgICAgIGNvbnN0IGljb25PayA9IEJvb2xlYW4od2FudGVkVXJsKTtcbiAgICAgIG1hc2sgPSBpY29uT2sgPyBtYXNrIDogdHJ1ZTtcbiAgICAgIGNvbnN0IHVybCA9IGljb25PayA/IHdhbnRlZFVybCA6IEZBTExCQUNLX0lDT047XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYCR7dXJsfUBAJHttYXhJY29uU2l6ZX1AJHttYXNrID8gJ20nIDogJ2MnfWAsXG4gICAgICAgIHVybCxcbiAgICAgICAgd2lkdGg6IG1heEljb25TaXplLFxuICAgICAgICBoZWlnaHQ6IG1heEljb25TaXplLFxuICAgICAgICBtYXNrXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICBnZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cblxuICBnZXRIZXhDb2x1bW4ocmFuZ2UpIHtcbiAgICBjb25zdCBmaWVsZCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscyk/LmZpbmQodmFsdWUgPT4gdmFsdWUucmFuZ2UgPT09IHJhbmdlKT8uZmllbGQ7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdPy5jb2xvckNvbHVtbjtcbiAgICB9XG4gIH1cblxuICBpc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHJhbmdlKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0/LmhleENvbG9yO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheWVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FB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
|
|
1687
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl9rZXltaXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2V4dGVuc2lvbnMiLCJfY29yZSIsIl9jYXJ0byIsIl9kZWZhdWx0TGF5ZXJJY29uIiwiX2xheWVyVXBkYXRlIiwiX2QzQ29sb3IiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2NvbG9yUmFuZ2VzIiwiX2N1c3RvbUNvbG9yUmFuZ2VzIiwiX2xheWVyRmFjdG9yeSIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfZGF0YUNvbnRhaW5lclV0aWxzIiwiX2NvbG9yVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9kM1NjYWxlIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZSIsImYiLCJUeXBlRXJyb3IiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwiY2FsbCIsInN0ZXAiLCJuZXh0IiwiX2UyIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJhcnIiLCJsZW4iLCJhcnIyIiwib3duS2V5cyIsInIiLCJ0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX21hcmtlZCIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiZXhwb3J0cyIsIkZBTExCQUNLX0lDT04iLCJNQVhfU0FNUExFX1NJWkUiLCJkZWZhdWx0RG9tYWluIiwiZGF0YUZpbHRlckV4dGVuc2lvbiIsIkRhdGFGaWx0ZXJFeHRlbnNpb24iLCJmaWx0ZXJTaXplIiwiTUFYX0dQVV9GSUxURVJTIiwiY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uIiwiQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uIiwiZGVmYXVsdERhdGFBY2Nlc3NvciIsImRjIiwiZCIsImRlZmF1bHRHZXRGaWVsZFZhbHVlIiwiZmllbGQiLCJ2YWx1ZUFjY2Vzc29yIiwic2NhbGVJZGVudGl0eSIsInYiLCJPVkVSTEFZX1RZUEUiLCJrZXltaXJyb3IiLCJkZWNrZ2wiLCJtYXBib3hnbCIsImxheWVyQ29sb3JzIiwidmFsdWVzIiwiRGF0YVZpekNvbG9ycyIsIm1hcCIsImhleFRvUmdiIiwiaW5kZXgiLCJ3cmFwIiwiZ2VuZXJhdGVDb2xvciQiLCJfY29udGV4dCIsInByZXYiLCJzdG9wIiwiY29sb3JNYWtlciIsIkxheWVyIiwicHJvcHMiLCJ1bmRlZmluZWQiLCJfY2xhc3NDYWxsQ2hlY2syIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsIm1ldGEiLCJsZWdlbmRTZXR0aW5ncyIsInZpc0NvbmZpZ1NldHRpbmdzIiwiX2ludGVyYWN0aXZpdHlTZXR0aW5ncyIsImNvbmZpZyIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImNvbHVtbnMiLCJnZXRMYXllckNvbHVtbnMiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiZ2V0IiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwic2V0IiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiX3RoaXMkaW50ZXJhY3Rpdml0eVNlIiwiX3RoaXMkaW50ZXJhY3Rpdml0eVNlMiIsIl90aGlzJGludGVyYWN0aXZpdHlTZTMiLCJfdGhpcyRpbnRlcmFjdGl2aXR5U2U0IiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJfdGhpcyRpbnRlcmFjdGl2aXR5U2U1IiwiaGFzVG9vbHRpcCIsImVuYWJsZWQiLCJfcHJvcHMkdmlzaWJpbGl0eUJ5Wm8iLCJfcHJvcHMkdmlzaWJpbGl0eUJ5Wm8yIiwiZGF0YUlkIiwidmlzaWJpbGl0eUJ5Wm9vbSIsIm1pbiIsIlpPT01fTEVWRUxfTElNSVRTIiwibWF4IiwibGFiZWwiLCJERUZBVUxUX0xBWUVSX0xBQkVMIiwiaXNWaXNpYmxlIiwiaXNDb25maWdBY3RpdmUiLCJoaWdobGlnaHRDb2xvciIsIkRFRkFVTFRfSElHSExJR0hUX0NPTE9SIiwiaGlkZGVuIiwiY29sb3JGaWVsZCIsImNvbG9yRG9tYWluIiwiY29sb3JTY2FsZSIsIlNDQUxFX1RZUEVTIiwicXVhbnRpbGUiLCJzaXplRG9tYWluIiwic2l6ZVNjYWxlIiwibGluZWFyIiwic2l6ZUZpZWxkIiwicmFkaXVzRmllbGQiLCJ2aXNDb25maWciLCJ0ZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsImNvbG9yUmFuZ2UiLCJhbmltYXRpb24iLCJnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24iLCJ2aXN1YWxDaGFubmVscyIsIm1lYXN1cmUiLCJkaXNwbGF5TmFtZSIsImRlZmF1bHRNZWFzdXJlIiwiYXNzaWduQ29sdW1uIiwidXBkYXRlIiwiZmllbGRJZHgiLCJhc3NpZ25Db2x1bW5QYWlycyIsIl90aGlzJGNvbHVtblBhaXJzIiwiX3RoaXMkY29sdW1uUGFpcnMyIiwiX3RoaXMkY29sdW1uUGFpcnMzIiwiY29sdW1uUGFpcnMiLCJfdGhpcyRjb2x1bW5QYWlycyRrZXkiLCJwYXJ0bmVyS2V5IiwiX3RoaXMkY29sdW1uUGFpcnMkcGFyIiwicGFydG5lckZpZWxkUGFpcktleSIsImdldFpvb21GYWN0b3IiLCJfcmVmIiwiem9vbSIsIl9yZWYkem9vbU9mZnNldCIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsIl9yZWYyIiwiX3JlZjIkem9vbU9mZnNldCIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsImZpbHRlcmVkSW5kZXgiLCJyZW5kZXJMYXllciIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJhc3NpZ25Db25maWdUb0xheWVyIiwiY29uZmlnVG9Db3B5IiwiX3RoaXMiLCJzaGFsbG93Q29weSIsImNvbmNhdCIsIm5vdFRvQ29weSIsImdyb3VwIiwiY3VycmVudENvbmZpZyIsImNvcGllZCIsImNvcHlMYXllckNvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY2hhbm5lbCIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl90aGlzMiIsIl9yZWYzIiwiX3JlZjMkc2hhbGxvd0NvcHkiLCJfcmVmMyRub3RUb0NvcHkiLCJpc1BsYWluT2JqZWN0IiwiaW5jbHVkZXMiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJyZWdpc3RlclZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlncyIsIl90aGlzMyIsIml0ZW0iLCJMQVlFUl9WSVNfQ09ORklHUyIsImV2ZXJ5IiwicCIsImhhc093blByb3BlcnR5IiwiY29sdW1uVmFsaWRhdG9ycyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYXllckNvbHVtbnMiLCJyZWR1Y2UiLCJhY2N1IiwidmFsaWRhdG9yIiwib3B0aW9uYWwiLCJvcHRpb25hbENvbHVtbnMiLCJuZXdDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInByb3AiLCJfdGhpcyRjb25maWciLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJpc0NvbG9yUmFuZ2UiLCJjb2xvcnMiLCJoZXhDb2xvciIsInVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UiLCJ1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJIiwidXBkYXRlQ3VzdG9tUGFsZXR0ZSIsImNvbG9yUmFuZ2VDb25maWciLCJjdXN0b20iLCJfdGhpcyRjb25maWcyIiwiY3VzdG9tUGFsZXR0ZSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJfdmlzQ29uZmlnJHByb3AkY29sb3IiLCJzaG93RHJvcGRvd24iLCJfdGhpcyRjb25maWczIiwic3RlcHMiLCJyZXZlcnNlZCIsImhleENvbHVtbiIsImdldEhleENvbHVtbiIsImlzSGV4Q29sdW1uIiwiaXNDb2xvcmVkQnlDb2xvckNvbHVtbiIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJfdGhpcyRjb25maWc0IiwiX2NvbG9yVUkkcHJvcCRjb2xvclJhIiwiZ2V0Q29sb3JHcm91cEJ5TmFtZSIsInNhbWVHcm91cCIsIkNPTE9SX1JBTkdFUyIsImNyIiwiZmluZCIsInJldmVyc2VDb2xvclJhbmdlIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsIl90aGlzJGNvbmZpZyRmaWVsZCIsIl9PYmplY3QkdmFsdWVzJGZpbmQiLCJ1cGRhdGVDYXRlZ29yeUNvbG9yTWFwIiwidXBkYXRlTnVtZXJpY0NvbG9yTWFwIiwiYXNzaWduZWRDYXRlZ29yaWVzIiwibmV3Q29sb3JNYXAiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2F0ZWdvcnkiLCJjb2xvck1hcFZhbHVlcyIsImMiLCJtYXhWYWx1ZSIsInByZXZWYWx1ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiZGF0YSIsImlzVmFsaWRUb1NhdmUiLCJzaG91bGRSZW5kZXJMYXllciIsImdldENvbG9yU2NhbGUiLCJfIiwiX3JnYiIsInJnYiIsImciLCJiIiwiaXNOYU4iLCJVTktOT1dOX0NPTE9SIiwiTWFwIiwiX3JlZjYiLCJfcmVmNyIsImsiLCJTQ0FMRV9GVU5DIiwidW5rbm93biIsImdldFZpc0NoYW5uZWxTY2FsZSIsImdldEN1c3RvbU1hcmtlcnNTY2FsZSIsImZhbGxiYWNrSWNvbiIsInVua25vd25WYWx1ZSIsIm1hcHBpbmciLCJvdGhlcnNNYXJrZXIiLCJfaXRlcmF0b3IzIiwibWFya2VyTWFwIiwiX3N0ZXAzIiwiX3N0ZXAzJHZhbHVlIiwibWFya2VyVXJsIiwic2NhbGVPcmRpbmFsIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiX3JlZjgiLCJfdGhpczQiLCJfcmVmOCRkYXRhQWNjZXNzb3IiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJfdGhpczQkdmlzdWFsQ2hhbm5lbHMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJhZ2dyZWdhdGlvbiIsInNob3VsZEdldFNjYWxlIiwiaWRlbnRpdHkiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJjdXN0b21NYXJrZXIiLCJjdXN0b21NYXJrZXJzVXJsIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsIl9hZ2dyZWdhdGlvbiIsIkNvbnNvbGUiLCJ3YXJuIiwib3JkaW5hbCIsImRvbWFpbklzSW5maW5pdGUiLCJJbmZpbml0eSIsInNjYWxlRmFjdG9yeSIsInJlc3VsdCIsImdldFBvaW50c0JvdW5kcyIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsIm51bVJvd3MiLCJnZXRTYW1wbGVEYXRhIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJnZXRMYXRMbmdCb3VuZHMiLCJsbmdCb3VuZHMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsImRpZmZVcGRhdGVUcmlnZ2VycyIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJfcmVmOSIsIl9yZWY5JG51bGxWYWx1ZSIsIl9yZWY5JGdldFZhbHVlIiwiZ2V0VmFsdWUiLCJjb2xvckNvbHVtblZhbHVlIiwiY2hhbm5lbENvbmZpZyIsImNoYW5uZWxGaWVsZCIsImNvbHVtbkZpZWxkIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsInZhbHVlQXQiLCJhdHRyaWJ1dGVWYWx1ZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsIkRhdGUiLCJ1cGRhdGVNZXRhIiwidXBkYXRlTGF5ZXJMZWdlbmQiLCJzZXR0aW5ncyIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsIl9yZWYxMCIsImFsbERhdGEiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwidXBkYXRlRGF0YSIsIm9sZExheWVyRGF0YSIsImRhdGFzZXQiLCJnZXREYXRhc2V0IiwidXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyIsInVwZGF0ZUhleENvbG9yRG9tYWluIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfdGhpczUiLCJfbG9vcCIsIl90aGlzNSRjb25maWckdmlzQ29uZiIsIl9PYmplY3QkdmFsdWVzJF9pIiwiX09iamVjdCR2YWx1ZXMiLCJfaSIsIm9sZEZpZWxkIiwiaXNVc2luZ0hleENvbG9yQ29kZSIsIm5ld0RhdGFTZXRGaWVsZCIsImZkIiwiX3JldCIsInVwZGF0ZUxheWVyRG9tYWluIiwibmV3RmlsdGVyIiwiX3RoaXM2IiwidGFibGUiLCJzY2FsZVR5cGUiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsIl90aGlzNyIsInVwZGF0ZVRyaWdnZXJzIiwiZGF0YVNldEZpZWxkIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJfdGhpczgiLCJjaGVja0NvbG9yT3JGYWxsYmFjayIsImNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZCIsIl90aGlzOSIsImxlZ2VuZHMiLCJfdGhpczkkdmlzdWFsQ2hhbm5lbHMiLCJsZWdlbmQiLCJjYWxjdWxhdGVMZWdlbmQiLCJoYXNIb3ZlcmVkT2JqZWN0Iiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwiX29iamVjdEluZm8kbGF5ZXIiLCJfb2JqZWN0SW5mbyRsYXllciRwcm8iLCJwaWNrZWQiLCJsYXllciIsImdldFJhZGl1c1NjYWxlQnlab29tIiwibWFwU3RhdGUiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJyYWRpdXMiLCJnZXRSYWRpdXNTY2FsZSIsImdldE1heE1hcmtlclNpemUiLCJfdGhpcyRjb25maWc1IiwicmFkaXVzUmFuZ2UiLCJjZWlsIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwiX3RoaXMxMCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImJydXNoaW5nVGFyZ2V0IiwiYnJ1c2giLCJhdXRvSGlnaGxpZ2h0IiwiYnJ1c2hpbmdSYWRpdXMiLCJicnVzaGluZ0VuYWJsZWQiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJfcmVmMTIiLCJpZHgiLCJncHVGaWx0ZXIiLCJ2aXNpYmxlIiwibWFza1BvbHlnb24iLCJtYXNrRXh0ZW5zaW9uUHJvcHMiLCJnZXRNYXNrRXh0ZW5zaW9uUHJvcHMiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJMTkdMQVQiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJfcmVmMTMiLCJyZW5kZXJPcHRzIiwiZ2V0UmFkaXVzIiwicmFkaXVzU2NhbGUiLCJzaGFyZWRQcm9wcyIsIl90aGlzJGNvbmZpZzYiLCJ0ZXh0TGFiZWxzIiwiZ2V0VGV4dCIsIl90ZXh0TGFiZWwiLCJtYWluTGFiZWwiLCJzZWNvbmRhcnlMYWJlbCIsImFsaWdubWVudCIsImFuY2hvciIsImdldENvbG9yIiwibWFpbkZpZWxkIiwib3V0bGluZUNvbG9yIiwiX3JlZjE0IiwiZ2V0U2Vjb25kYXJ5Q29sb3IiLCJzZWNvbmRhcnlGaWVsZCIsInNlY29uZGFyeU91dGxpbmVDb2xvciIsInNlY29uZGFyeVNpemVTY2FsZSIsIlBvaW50TGFiZWxMYXllciIsImNoYXJhY3RlclNldCIsImNvbGxpc2lvbkVuYWJsZWQiLCJjb2xsaXNpb25Hcm91cCIsImdldFNlY29uZGFyeVRleHQiLCJnZXRUZXh0QW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJmb250RmFtaWx5IiwiZm9udFNldHRpbmdzIiwic2RmIiwiZm9udFdlaWdodCIsIm91dGxpbmVXaWR0aCIsImdldEZpbHRlclZhbHVlIiwiZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yIiwiaWNvblVybEFjY2Vzc29yIiwibWFzayIsIm1heEljb25TaXplIiwid2FudGVkVXJsIiwiaWNvbk9rIiwidXJsIiwid2lkdGgiLCJoZWlnaHQiLCJrZXBsZXJUYWJsZSIsIl9PYmplY3QkdmFsdWVzMiIsIl9PYmplY3QkdmFsdWVzMiRmaW5kIiwiX3RoaXMkY29uZmlnJGZpZWxkMiIsIl90aGlzJGNvbmZpZyR2aXNDb25maSIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJyZXF1aXJlZEZpZWxkcyIsImdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMiLCJhbGxLZXlzIiwicG9pbnRlcnMiLCJjb3VudFBlcktleSIsInBhaXJzIiwiaW5jcmVtZW50UG9pbnRlcnMiLCJuZXdQYWlyIiwiY3V1ciIsInB0cyIsImNvdW50cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVycy9iYXNlLWxheWVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBrZXltaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCB7Q29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uLCBEYXRhRmlsdGVyRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU0sIExheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge19Qb2ludExhYmVsTGF5ZXIgYXMgUG9pbnRMYWJlbExheWVyfSBmcm9tICdAZGVjay5nbC9jYXJ0byc7XG5pbXBvcnQgRGVmYXVsdExheWVySWNvbiBmcm9tICcuL2RlZmF1bHQtbGF5ZXItaWNvbic7XG5pbXBvcnQge2RpZmZVcGRhdGVUcmlnZ2Vyc30gZnJvbSAnLi9sYXllci11cGRhdGUnO1xuaW1wb3J0IHtyZ2J9IGZyb20gJ2QzLWNvbG9yJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVMsIGhleENvbG9yfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7RGF0YVZpekNvbG9yc30gZnJvbSAnY29uc3RhbnRzL2N1c3RvbS1jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUxcbn0gZnJvbSAnLi9sYXllci1mYWN0b3J5JztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgaXNQbGFpbk9iamVjdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2dldExhdExuZ0JvdW5kcywgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0U2FtcGxlRGF0YX0gZnJvbSAndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG5pbXBvcnQge2hleFRvUmdiLCBnZXRDb2xvckdyb3VwQnlOYW1lLCByZXZlcnNlQ29sb3JSYW5nZSwgY2hlY2tDb2xvck9yRmFsbGJhY2t9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7Z2V0TWFza0V4dGVuc2lvblByb3BzfSBmcm9tICd1dGlscy9sYXllci11dGlscyc7XG5pbXBvcnQge3NjYWxlT3JkaW5hbH0gZnJvbSAnZDMtc2NhbGUnO1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLkxheWVyfSBMYXllckNsYXNzfSAqL1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX0lEX0xFTkdUSCA9IDY7XG5cbi8vIE5vdGUsIHRoaXMgaXMgaXMgU1ZHIG9mIHNvbGlkIGNpcmNsZSBlbmNvZGVkIGFzIGRhdGEtdXJpXG5jb25zdCBGQUxMQkFDS19JQ09OID1cbiAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxQSE4yWnlCMmFXVjNRbTk0UFNJd0lEQWdNVEF3SURFd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNE5DaUFnUEdOcGNtTnNaU0JqZUQwaU5UQWlJR041UFNJMU1DSWdjajBpTlRBaUx6NE5Dand2YzNablBnPT0nO1xuXG5jb25zdCBNQVhfU0FNUExFX1NJWkUgPSA1MDAwO1xuY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcbmNvbnN0IGRhdGFGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRGF0YUZpbHRlckV4dGVuc2lvbih7ZmlsdGVyU2l6ZTogTUFYX0dQVV9GSUxURVJTfSk7XG5jb25zdCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24gPSBuZXcgQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uKCk7XG5cbmNvbnN0IGRlZmF1bHREYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+IGQ7XG5jb25zdCBkZWZhdWx0R2V0RmllbGRWYWx1ZSA9IChmaWVsZCwgZCkgPT4gZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcbmNvbnN0IHNjYWxlSWRlbnRpdHkgPSB2ID0+IHY7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEUgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqIEB0eXBlIHtMYXllckNsYXNzfSAqL1xuY2xhc3MgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gbGVnZW5kU2V0dGluZ3NcbiAgICB0aGlzLmxlZ2VuZFNldHRpbmdzID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIGludGVyYWN0aXZpdHlTZXR0aW5nc1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoe1xuICAgICAgY29sdW1uczogdGhpcy5nZXRMYXllckNvbHVtbnMoKSxcbiAgICAgIC4uLnByb3BzXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IG92ZXJsYXlUeXBlKCkge1xuICAgIHJldHVybiBPVkVSTEFZX1RZUEUuZGVja2dsO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2NvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgbnVsbFZhbHVlOiBOT19WQUxVRV9DT0xPUixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBwcm9wZXJ0eTogJ3NpemUnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBwb2ludCBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBwb2ludCBiYXNlZCBsYXllcnM6IHBvaW50LCBpY29uIGV0Yy5cbiAgICovXG4gIGdldCBkZWZhdWx0UG9pbnRDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogJ2xuZycsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogJ2xhdCcsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgbGluayBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBsaW5rIGJhc2VkIGxheWVyczogYXJjLCBsaW5lIGV0Y1xuICAgKi9cbiAgZ2V0IGRlZmF1bHRMaW5rQ29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBsYXQxOiB7cGFpcjogJ2xuZzEnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzE6IHtwYWlyOiAnbGF0MScsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBzZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKGludGVyYWN0aXZpdHlTZXR0aW5ncykge1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IGludGVyYWN0aXZpdHlTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBoYXNUb29sdGlwKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmhvdmVyPy5maWVsZHMubGVuZ3RoIHx8XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5jbGljaz8uZmllbGRzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzSW50ZXJhY3Rpdml0eSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmVuYWJsZWQpO1xuICB9XG5cbiAgLypcbiAgICogR2l2ZW4gYSBkYXRhc2V0LCBhdXRvbWF0aWNhbGx5IGZpbmQgcHJvcHMgdG8gY3JlYXRlIGxheWVyIGJhc2VkIG9uIGl0XG4gICAqIGFuZCByZXR1cm4gdGhlIHByb3BzIGFuZCBwcmV2aW91cyBmb3VuZCBsYXllcnMuXG4gICAqIEJ5IGRlZmF1bHQsIG5vIGxheWVycyB3aWxsIGJlIGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIGZvdW5kTGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKChpID09PSBhbGxLZXlzLmxlbmd0aCAtIDEgPyAtMSA6IDApKSk7XG4gICAgY29uc3QgY291bnRQZXJLZXkgPSBhbGxLZXlzLm1hcChrID0+IHJlcXVpcmVkQ29sdW1uc1trXS5sZW5ndGgpO1xuICAgIGNvbnN0IHBhaXJzID0gW107XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB3aGlsZSAoaW5jcmVtZW50UG9pbnRlcnMocG9pbnRlcnMsIGNvdW50UGVyS2V5LCBwb2ludGVycy5sZW5ndGggLSAxKSkge1xuICAgICAgY29uc3QgbmV3UGFpciA9IHBvaW50ZXJzLnJlZHVjZSgocHJldiwgY3V1ciwgaSkgPT4ge1xuICAgICAgICBwcmV2W2FsbEtleXNbaV1dID0gcmVxdWlyZWRDb2x1bW5zW2FsbEtleXNbaV1dW2N1dXJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcGFpcnMucHVzaChuZXdQYWlyKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IGluY3JlbWVudCBwb2ludGVyc1xuICAgIGZ1bmN0aW9uIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHB0c1swXSA9PT0gY291bnRzWzBdIC0gMSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGluY3JlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdHNbaW5kZXhdICsgMSA8IGNvdW50c1tpbmRleF0pIHtcbiAgICAgICAgcHRzW2luZGV4XSA9IHB0c1tpbmRleF0gKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHRzW2luZGV4XSA9IDA7XG4gICAgICByZXR1cm4gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgc3RhdGljIGhleFRvUmdiKGMpIHtcbiAgICByZXR1cm4gaGV4VG9SZ2IoYyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCB8fCBudWxsLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbiB8fCBaT09NX0xFVkVMX0xJTUlUUy5taW4sXG4gICAgICAgIG1heDogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4IHx8IFpPT01fTEVWRUxfTElNSVRTLm1heFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgY29sdW1uczogcHJvcHMuY29sdW1ucyB8fCBudWxsLFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgfHwgZmFsc2UsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgfHwgZmFsc2UsXG4gICAgICBoaWdobGlnaHRDb2xvcjogcHJvcHMuaGlnaGxpZ2h0Q29sb3IgfHwgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gICAgICBoaWRkZW46IHByb3BzLmhpZGRlbiB8fCBmYWxzZSxcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBpbnRvIHNlcGFyYXRlIHZpc3VhbCBDaGFubmVsIGNvbmZpZ1xuICAgICAgLy8gY29sb3IgYnkgZmllbGQsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIGNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBjb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgY29sb3JTY2FsZTogU0NBTEVfVFlQRVMucXVhbnRpbGUsXG5cbiAgICAgIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIHNpemVEb21haW46IFswLCAxXSxcbiAgICAgIHNpemVTY2FsZTogU0NBTEVfVFlQRVMubGluZWFyLFxuICAgICAgc2l6ZUZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zIHt7bGFiZWw6IHN0cmluZywgbWVhc3VyZTogKHN0cmluZ3xzdHJpbmcpfX1cbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXkpIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZV0ubGFiZWwsXG4gICAgICBtZWFzdXJlOiB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgID8gKHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0uZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLm5hbWUpXG4gICAgICAgIDogdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBmaWVsZCAtIFNlbGVjdGVkIGZpZWxkXG4gICAqIEByZXR1cm5zIHt7fX0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5LCBmaWVsZCkge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gcGFpciAtIGZpZWxkIFBhaXJcbiAgICogQHJldHVybnMge29iamVjdH0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXksIHBhaXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICBjb25zdCB7cGFpcjogcGFydG5lcktleSwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldO1xuICAgIGNvbnN0IHtmaWVsZFBhaXJLZXk6IHBhcnRuZXJGaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XTogcGFpcltmaWVsZFBhaXJLZXldLFxuICAgICAgW3BhcnRuZXJLZXldOiBwYWlyW3BhcnRuZXJGaWVsZFBhaXJLZXldXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yXG4gICAgICA/IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpXG4gICAgICA6IDE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIGZpbHRlcmVkSW5kZXgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZW5kZXJMYXllcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqL1xuICBhc3NpZ25Db25maWdUb0xheWVyKGNvbmZpZ1RvQ29weSwgdmlzQ29uZmlnU2V0dGluZ3MpIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX0gPSB7fSkge1xuICAgIGNvbnN0IGNvcGllZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlncykge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXTtcbiAgICAgIH0gZWxzZSBpZiAoWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmhhc093blByb3BlcnR5KHApKSkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldfVxuICAgICAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gey4uLmFjY3Vba2V5XSwgLi4udmFsdWV9IDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2UuIElmIHR5cGUgaXMgaGV4Q29sb3IgdGhlbiBpdCdzIGFsc28gYSByYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9XG4gICAgICB2aXNDb25maWdbcHJvcF0gJiYgKHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMgfHwgdmlzQ29uZmlnW3Byb3BdLnR5cGUgPT09IGhleENvbG9yKTtcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyB8fCAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgY29uc3Qge2NvbG9yc30gPSB2aXNDb25maWdbcHJvcF07XG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZSxcbiAgICAgIG5hbWU6ICdDdXN0b20gUGFsZXR0ZScsXG4gICAgICBjb2xvcnM6IFsuLi5jb2xvcnNdXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCwgcmV2ZXJzZWQgYW5kIHR5cGVcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgdHlwZTogdmlzQ29uZmlnW3Byb3BdLnR5cGUsXG4gICAgICAgICAgICBzdGVwczogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycz8ubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKSxcbiAgICAgICAgICAgIGhleENvbHVtbjogdGhpcy5nZXRIZXhDb2x1bW4ocHJvcCksXG4gICAgICAgICAgICBpc0hleENvbHVtbjogdGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3ApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtzdGVwcywgcmV2ZXJzZWR9ID0gY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnO1xuICAgIGNvbnN0IGNvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF07XG4gICAgLy8gZmluZCBiYXNlZCBvbiBzdGVwIG9yIHJldmVyc2VkXG4gICAgbGV0IHVwZGF0ZTtcbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3N0ZXBzJykpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0Q29sb3JHcm91cEJ5TmFtZShjb2xvclJhbmdlKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNhbWVHcm91cCA9IENPTE9SX1JBTkdFUy5maWx0ZXIoY3IgPT4gZ2V0Q29sb3JHcm91cEJ5TmFtZShjcikgPT09IGdyb3VwKTtcblxuICAgICAgICB1cGRhdGUgPSBzYW1lR3JvdXAuZmluZChjciA9PiBjci5jb2xvcnMubGVuZ3RoID09PSBzdGVwcyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLnJldmVyc2VkKSB7XG4gICAgICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UodHJ1ZSwgdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5jb2xvck1hcCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHRoaXMudXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JSYW5nZS5jb2xvck1hcCwgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmV2ZXJzZWQnKSkge1xuICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UocmV2ZXJzZWQsIHVwZGF0ZSB8fCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yTWFwLCBjb2xvclJhbmdlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtmaWVsZCwgZG9tYWlufSA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcHJvcCk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnW2ZpZWxkXT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyB0eXBlIG9yIHR5cGUgaXMgbm90IHN0cmluZywgYm9vbGVhbiBvciBkYXRlXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IGNvbG9yUmFuZ2UuY29sb3JzO1xuICAgIGNvbnN0IGFzc2lnbmVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIGlmIChjb2xvclJhbmdlLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgICBjb2xvck1hcDogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCkubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY01hcFswXSk7XG4gICAgICByZXR1cm4gW2NNYXBbMF0sIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgdW5hc3NpZ25lZENvbG9ycykge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBkb21haW4uZmluZChkID0+ICFhc3NpZ25lZENhdGVnb3JpZXMuaW5jbHVkZXMoZCkpO1xuICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIG5ld0NvbG9yTWFwLnB1c2goW2NhdGVnb3J5LCBjb2xvcl0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgdXBkYXRlKSB7XG4gICAgY29uc3QgY29sb3JzID0gdXBkYXRlLmNvbG9ycztcbiAgICBsZXQgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIG5ld0NvbG9yTWFwID0gbmV3Q29sb3JNYXAubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCA9PT0gbmV3Q29sb3JNYXAubGVuZ3RoIC0gMSA/IG51bGwgOiBjTWFwWzBdO1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgaWYgKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sb3JNYXBWYWx1ZXMgPSBjb2xvck1hcC5tYXAoYyA9PiBjWzBdKS5maWx0ZXIoYyA9PiB0eXBlb2YgYyA9PT0gJ251bWJlcicpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi5jb2xvck1hcFZhbHVlcywgZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAyXVswXTtcbiAgICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBwcmV2VmFsdWUpIC8gKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoICsgMSk7XG4gICAgICBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAxXVswXSA9IHByZXZWYWx1ZSArIHN0ZXA7XG5cbiAgICAgIGZvciAoY29uc3QgW2ksIGNvbG9yXSBvZiB1bmFzc2lnbmVkQ29sb3JzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGkgPT09IHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoIC0gMSA/IG51bGwgOiBwcmV2VmFsdWUgKyAoc3RlcCAqIChpICsgMikpO1xuICAgICAgICBuZXdDb2xvck1hcC5wdXNoKFt2YWx1ZSwgY29sb3JdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gKFxuICAgICAgKGNvbHVtbnMgJiZcbiAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkodiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHYub3B0aW9uYWwgfHwgKHYudmFsdWUgJiYgdi5maWVsZElkeCA+IC0xKSk7XG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGEpIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihsYXllckRhdGEuZGF0YSAmJiBsYXllckRhdGEuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy50eXBlICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgaWYgKGNvbG9yUmFuZ2UudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIHJldHVybiAoXywgY29sb3IpID0+IHtcbiAgICAgICAgY29uc3Qge3IsIGcsIGJ9ID0gcmdiKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiXS5zb21lKGlzTmFOKSA/IFVOS05PV05fQ09MT1IgOiBbciwgZywgYl07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvclJhbmdlLmNvbG9yTWFwKSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgICAgY29uc3Qgc2NhbGUgPSBTQ0FMRV9GVU5DW2NvbG9yU2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihBcnJheS5mcm9tKGNNYXAua2V5cygpKSlcbiAgICAgICAgLnJhbmdlKEFycmF5LmZyb20oY01hcC52YWx1ZXMoKSkpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBnZXRDdXN0b21NYXJrZXJzU2NhbGUocmFuZ2UsIGZhbGxiYWNrSWNvbikge1xuICAgIGxldCB1bmtub3duVmFsdWUgPSBmYWxsYmFja0ljb24gfHwgRkFMTEJBQ0tfSUNPTjtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdW5rbm93blZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAocmFuZ2Uub3RoZXJzTWFya2VyKSB7XG4gICAgICB1bmtub3duVmFsdWUgPSByYW5nZS5vdGhlcnNNYXJrZXI7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3ZhbHVlLCBtYXJrZXJVcmx9IG9mIHJhbmdlLm1hcmtlck1hcCkge1xuICAgICAgaWYgKG1hcmtlclVybCkge1xuICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihBcnJheS5mcm9tKG1hcHBpbmcua2V5cygpKSlcbiAgICAgIC5yYW5nZShBcnJheS5mcm9tKG1hcHBpbmcudmFsdWVzKCkpKVxuICAgICAgLnVua25vd24odW5rbm93blZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHZpc3VhbCBjaGFubmVscyB0byBkZWNrLmdsIGFjY2Vzb3JzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSBQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ycyA9IHt9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gQm9vbGVhbihcbiAgICAgICAgKHNjYWxlIHx8IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5KSAmJiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuY29uZmlnW3NjYWxlXSwgdGhpcy5jb25maWdbZG9tYWluXSwgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXV07XG4gICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBkZWNsYXJlIGFzIGNvbnN0IGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFyZSBnb2luZyB0byBiZSB1c2UgaW4gdGhlIGdldEVuY29kZWRDaGFubmVsVmFsdWUgY2FsbFxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBvbGRMYXllckRhdGEgcGFyYW1ldGVyIGluIGZvcm1hdExheWVyRGF0YSBtZXRob2Qgd2lsbCBiZSB3cm9uZyAoeW91IGNhbiBjaGVjayB0aGUgZm9ybWF0TGF5ZXJEYXRhIFRpbGVMYXllciBtZXRob2QgaW4gQnVpbGRlciBhcyBleGFtcGxlKVxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHlcbiAgICAgICAgICAgID8gc2NhbGVJZGVudGl0eVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoLi4uYXJncylcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnLmN1c3RvbU1hcmtlcnNVcmxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZSguLi5hcmdzLCBpc0ZpeGVkKTtcblxuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZCA9PlxuICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSh7XG4gICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgICAgIHNjYWxlOiBzY2FsZUZ1bmN0aW9uLFxuICAgICAgICAgICAgZGF0YTogZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgZmllbGQ6IGZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgX2FnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblZhbHVlLFxuICAgICAgICAgICAgbnVsbFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBnZXRBdHRyaWJ1dGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9XG4gICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGFjY2Vzc29yIGluIGF0dHJpYnV0ZUFjY2Vzc29ycykpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZUFjY2Vzc29ycztcbiAgfVxuXG4gIGdldFZpc0NoYW5uZWxTY2FsZShzY2FsZSwgZG9tYWluLCByYW5nZSwgZml4ZWQpIHtcbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgICAgcmV0dXJuIFNDQUxFX0ZVTkNbc2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihkb21haW4uc2xpY2UoMCwgcmFuZ2UubGVuZ3RoKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYGNvdW50YCBhZ2dyZWdhdGlvbiwgd2UgZG9tYWluIGlzIGFjdHVhbGx5IGBbMCwgSW5maW5pdHldYCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAvLyB0byB1c2UgaXQsIHNvIHNraXAgc3BlY3lmeWluZyB0aGlzIGRvbWFpbnNcbiAgICBjb25zdCBkb21haW5Jc0luZmluaXRlID0gZG9tYWluICYmIChkb21haW5bMF0gPT09IDAgJiYgZG9tYWluWzFdID09PSBJbmZpbml0eSk7XG4gICAgY29uc3Qgc2NhbGVGYWN0b3J5ID0gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdO1xuICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgIGxldCByZXN1bHQgPSBzY2FsZUZhY3RvcnkoKTtcbiAgICBpZiAoZG9tYWluICYmICFkb21haW5Jc0luZmluaXRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZG9tYWluKGRvbWFpbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIGNhbGN1bGF0ZSBib3VuZHMgZm9yLlxuICAgKiBAcGFyYW0geyhkOiB7aW5kZXg6IG51bWJlcn0sIGRjOiBpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IG51bWJlcltdfSBnZXRQb3NpdGlvbiBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEByZXR1cm4ge251bWJlcltdfG51bGx9IGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IHNhbXBsZURhdGEubWFwSW5kZXgoZ2V0UG9zaXRpb24pO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoe1xuICAgIGNoYW5uZWwsXG4gICAgc2NhbGUsXG4gICAgZGF0YSxcbiAgICBmaWVsZCxcbiAgICBkYXRhQ29udGFpbmVyLFxuICAgIC8vIEluIGJ1aWxkZXIgd2Ugb3ZlcndyaXRlIHRoZSBnZXRWYWx1ZSBmdW5jdGlvbiBhbmQgd2UgdXNlIHRoZSBfYWdncmVnYXRpb24gcGFyYW1ldGVyIGluIHNwYXRpYWwgaW5kZXggbGF5ZXJzIGFzIHRoZSBRdWFka2V5TGF5ZXIuXG4gICAgX2FnZ3JlZ2F0aW9uLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgfSkge1xuICAgIGxldCBjb2xvckNvbHVtblZhbHVlO1xuICAgIGNvbnN0IHt0eXBlfSA9IGZpZWxkO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZmllbGQsIGRhdGEpO1xuICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5yYW5nZV07XG4gICAgY29uc3QgY2hhbm5lbEZpZWxkID0gdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5maWVsZF07XG5cbiAgICBpZiAoY2hhbm5lbENvbmZpZz8udHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkZpZWxkID0ge1xuICAgICAgICBpZDogY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICBuYW1lOiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgIGZpZWxkSWR4OiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW5JZHgsXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IGQgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnZhbHVlQXQoZC5pbmRleCwgY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uSWR4KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29sb3JDb2x1bW5WYWx1ZSA9IGdldFZhbHVlKGNvbHVtbkZpZWxkLCBkYXRhKTtcbiAgICB9IGVsc2UgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGxldCBhdHRyaWJ1dGVWYWx1ZTtcbiAgICBpZiAodHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY29udmVydCBoZXJlXG4gICAgICAvLyBzY2FsZSBGdW5jdGlvbiBzaG91bGQgdGFrZSBjYXJlIG9mIGl0XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKG5ldyBEYXRlKHZhbHVlKSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUsIGNvbG9yQ29sdW1uVmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICB1cGRhdGVMYXllckxlZ2VuZChzZXR0aW5ncykge1xuICAgIHRoaXMubGVnZW5kU2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIGdldERhdGFVcGRhdGVUcmlnZ2Vycyh7ZmlsdGVyZWRJbmRleCwgaWQsIGFsbERhdGF9KSB7XG4gICAgY29uc3Qge2NvbHVtbnN9ID0gdGhpcy5jb25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0RGF0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnMsIGZpbHRlcmVkSW5kZXh9LFxuICAgICAgZ2V0TWV0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnN9LFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnRleHRMYWJlbCB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdSwgdGwsIGkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbYGdldExhYmVsQ2hhcmFjdGVyU2V0LSR7aX1gXTogdGwuZmllbGQgPyB0bC5maWVsZC5uYW1lIDogbnVsbFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcblxuICAgIHRoaXMudXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KTtcbiAgICB0aGlzLnVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMoZGF0YXNldCk7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSB0aGlzLmdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpO1xuXG4gICAgaWYgKHRyaWdnZXJDaGFuZ2VkLmdldE1ldGEpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IFtdO1xuXG4gICAgaWYgKCF0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhICYmIG9sZExheWVyRGF0YSAmJiBvbGRMYXllckRhdGEuZGF0YSkge1xuICAgICAgLy8gc2FtZSBkYXRhXG4gICAgICBkYXRhID0gb2xkTGF5ZXJEYXRhLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoZGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdHlsZWQgZmllbGRzIHRvIG1hdGNoIG9uZXMgZnJvbSBuZXcgZGF0YXNldC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAgICovXG4gIHVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMoZGF0YXNldCkge1xuICAgIGZvciAoY29uc3Qge2ZpZWxkLCByYW5nZX0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKSkge1xuICAgICAgY29uc3Qgb2xkRmllbGQgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICBjb25zdCBpc1VzaW5nSGV4Q29sb3JDb2RlID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXT8uaGV4Q29sb3I7XG4gICAgICBpZiAoIW9sZEZpZWxkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuZXdEYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IG9sZEZpZWxkLm5hbWUpIHx8IG51bGw7XG4gICAgICBpZiAoaXNVc2luZ0hleENvbG9yQ29kZSkge1xuICAgICAgICBuZXdEYXRhU2V0RmllbGQgPSB7XG4gICAgICAgICAgLi4ubmV3RGF0YVNldEZpZWxkLFxuICAgICAgICAgIGNvbG9yQ29sdW1uOiBuZXdEYXRhU2V0RmllbGQuY29sb3JDb2x1bW4gfHwgb2xkRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgICAgY29sb3JDb2x1bW5JZHg6IG5ld0RhdGFTZXRGaWVsZC5jb2xvckNvbHVtbklkeCB8fCBvbGRGaWVsZC5jb2xvckNvbHVtbklkeFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbmV3RGF0YVNldEZpZWxkfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHMsIG5ld0ZpbHRlcikge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge3NjYWxlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG5cbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCkge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGZpZWxkIHR5cGUgYmFzZWQgb24gY2hhbm5lbFNjYWxlVHlwZVxuICAgKi9cbiAgdmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZSwgc3VwcG9ydGVkRmllbGRUeXBlc30gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgLy8gaWYgZmllbGQgaXMgc2VsZWN0ZWQsIGNoZWNrIGlmIGZpZWxkIHR5cGUgaXMgc3VwcG9ydGVkXG4gICAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuXG4gICAgICBpZiAoIWNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHRoaXMuY29uZmlnW2ZpZWxkXS50eXBlKSkge1xuICAgICAgICAvLyBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBiYWNrIHRvIG51bGxcbiAgICAgICAgLy8gc2V0IHNjYWxlIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBudWxsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNjYWxlIHR5cGUgYmFzZWQgb24gYWdncmVnYXRpb25cbiAgICovXG4gIHZhbGlkYXRlU2NhbGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtzY2FsZSwgcmFuZ2V9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoXG4gICAgICAhc2NhbGUgfHxcbiAgICAgICh0aGlzLmlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4ocmFuZ2UpICYmIHRoaXMuY29uZmlnW3NjYWxlXSA9PT0gU0NBTEVfVFlQRVMuaWRlbnRpdHkpXG4gICAgKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZygpW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpIHtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2aXN1YWxDaGFubmVsID0+IHtcbiAgICAgIC8vIGZpZWxkIHJhbmdlIHNjYWxlIGRvbWFpblxuICAgICAgY29uc3Qge2FjY2Vzc29yLCBmaWVsZCwgc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGRlZmF1bHRWYWx1ZSwgZml4ZWR9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICBbZmllbGRdOiB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgIFtzY2FsZV06IHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgIFtyYW5nZV06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIC4uLihmaXhlZCA/IHtbZml4ZWRdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdfSA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkIHx8ICFzY2FsZSkge1xuICAgICAgLy8gaWYgY29sb3JGaWVsZCBvciBzaXplRmllbGQgd2VyZSBzZXQgYmFjayB0byBudWxsXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG4gICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQubmFtZSk7XG4gICAgaWYgKCFzY2FsZVR5cGUgfHwgIWRhdGFTZXRGaWVsZCkge1xuICAgICAgLy8gaWYgbmV3IGRhdGFzZXQgZG9lc24ndCBjb250YWluIHByZXZpb3VzbHkgc2V0IGZpZWxkXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIHNjYWxlVHlwZSkgfHwgZGVmYXVsdERvbWFpbjtcbiAgfVxuXG4gIHVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpIHtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2NoYW5uZWwucmFuZ2VdO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1tjaGFubmVsLmZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yICYmIGZpZWxkPy5jb2xvckNvbHVtbikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IGRhdGFzZXRcbiAgICAgICAgICAuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBTQ0FMRV9UWVBFUy5vcmRpbmFsKVxuICAgICAgICAgIC5tYXAoYyA9PiBjaGVja0NvbG9yT3JGYWxsYmFjayhjKSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1xuICAgICAgICAgIFtjaGFubmVsLnJhbmdlXTogey4uLmNoYW5uZWxDb25maWcsIGNvbG9yc31cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZChkYXRhc2V0cykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghZGF0YXNldHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZWdlbmRTZXR0aW5ncyA9IE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLnJlZHVjZSgobGVnZW5kcywgY2hhbm5lbCkgPT4ge1xuICAgICAgY29uc3Qge3JhbmdlLCBmaWVsZDogY2hhbm5lbEZpZWxkfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbEZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yICYmIGZpZWxkPy5jb2xvckNvbHVtbikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGxlZ2VuZCA9IGRhdGFzZXQuY2FsY3VsYXRlTGVnZW5kKGZpZWxkLCBkYXRhU2V0RmllbGQpO1xuICAgICAgICBsZWdlbmRzW2NoYW5uZWxdID0gbGVnZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZ2VuZHM7XG4gICAgfSwge30pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJMZWdlbmQobGVnZW5kU2V0dGluZ3MpO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykgJiYgb2JqZWN0SW5mby5vYmplY3QgPyBvYmplY3RJbmZvLm9iamVjdCA6IG51bGw7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGUpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzQ2hhbm5lbC5maWVsZDtcbiAgICBjb25zdCB7cmFkaXVzfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnW2ZpZWxkXSA/IDEgOiByYWRpdXMpICogdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlKCkge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCB8fCB0aGlzLmNvbmZpZ1tyYWRpdXNDaGFubmVsLmZpZWxkXSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXM7XG4gIH1cblxuICBnZXRNYXhNYXJrZXJTaXplKCkge1xuICAgIGNvbnN0IHtyYWRpdXNGaWVsZCwgc2l6ZUZpZWxkLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3JhZGl1c1JhbmdlLCByYWRpdXN9ID0gdmlzQ29uZmlnO1xuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzRmllbGQgfHwgc2l6ZUZpZWxkO1xuICAgIHJldHVybiBNYXRoLmNlaWwoKGZpZWxkICYmIHJhZGl1c1JhbmdlID8gcmFkaXVzUmFuZ2VbMV0gOiByYWRpdXMpKTtcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5zb21lKHAgPT4gIXRoaXMubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLmluY2x1ZGVzKHApKTtcbiAgfVxuXG4gIGdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsIGJydXNoaW5nVGFyZ2V0KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtpZHgsIGdwdUZpbHRlciwgbWFwU3RhdGUsIHZpc2libGUsIG1hc2tQb2x5Z29ufSkge1xuICAgIGNvbnN0IG1hc2tFeHRlbnNpb25Qcm9wcyA9IGdldE1hc2tFeHRlbnNpb25Qcm9wcyhtYXNrUG9seWdvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1hc2tFeHRlbnNpb25Qcm9wcyxcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgcGlja2FibGU6IHRoaXMuaGFzSW50ZXJhY3Rpdml0eSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJzOiB7ZGVwdGhUZXN0OiBCb29sZWFuKG1hcFN0YXRlLmRyYWdSb3RhdGUgfHwgdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZTNkKX0sXG4gICAgICBoaWRkZW46IHRoaXMuY29uZmlnLmhpZGRlbixcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20sXG4gICAgICAvLyB2aXNjb25maWdcbiAgICAgIG9wYWNpdHk6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5vcGFjaXR5LFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgLy8gZGF0YSBmaWx0ZXJpbmdcbiAgICAgIGV4dGVuc2lvbnM6IFtkYXRhRmlsdGVyRXh0ZW5zaW9uLCAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMuZXh0ZW5zaW9uc10sXG4gICAgICBmaWx0ZXJSYW5nZTogZ3B1RmlsdGVyID8gZ3B1RmlsdGVyLmZpbHRlclJhbmdlIDogdW5kZWZpbmVkLFxuICAgICAgLy8gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUgYW5kIGlmIHNwbGl0TWFwLCBzaG93biBpbiB0byBvbmUgb2YgcGFuZWxcbiAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSAmJiB2aXNpYmxlXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyVGV4dExhYmVsTGF5ZXIoXG4gICAge2dldFBvc2l0aW9uLCBnZXRSYWRpdXMsIHJhZGl1c1NjYWxlLCB1cGRhdGVUcmlnZ2Vycywgc2hhcmVkUHJvcHN9LFxuICAgIHJlbmRlck9wdHNcbiAgKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsLCB2aXNpYmlsaXR5Qnlab29tfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbLi4uc2hhcmVkUHJvcHMuZXh0ZW5zaW9ucywgY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uXTtcblxuICAgIGlmICghZGF0YSB8fCAhZGF0YS50ZXh0TGFiZWxzIHx8ICFkYXRhLnRleHRMYWJlbHNbMF0gfHwgIWRhdGEudGV4dExhYmVsc1swXS5nZXRUZXh0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgW21haW5MYWJlbCwgc2Vjb25kYXJ5TGFiZWxdID0gdGV4dExhYmVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGFsaWdubWVudCxcbiAgICAgIGFuY2hvcixcbiAgICAgIGNvbG9yOiBnZXRDb2xvcixcbiAgICAgIGZpZWxkOiBtYWluRmllbGQsXG4gICAgICBvdXRsaW5lQ29sb3IsXG4gICAgICBzaXplOiBzaXplU2NhbGVcbiAgICB9ID0gbWFpbkxhYmVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbG9yOiBnZXRTZWNvbmRhcnlDb2xvcixcbiAgICAgIGZpZWxkOiBzZWNvbmRhcnlGaWVsZCxcbiAgICAgIG91dGxpbmVDb2xvcjogc2Vjb25kYXJ5T3V0bGluZUNvbG9yLFxuICAgICAgc2l6ZTogc2Vjb25kYXJ5U2l6ZVNjYWxlXG4gICAgfSA9IHNlY29uZGFyeUxhYmVsIHx8IHt9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBQb2ludExhYmVsTGF5ZXIoe1xuICAgICAgICAuLi5zaGFyZWRQcm9wcyxcblxuICAgICAgICAvLyBSZWNyZWF0ZSBsYXllciB3aGVuIGxhYmVscyBjaGFuZ2Ugb3RoZXJ3aXNlIHJlbmRlcmluZyBicmVha3NcbiAgICAgICAgLy8gVE9ETyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCB3aXRoIHVwZGF0ZVRyaWdnZXJzP1xuICAgICAgICBpZDogYCR7dGhpcy5pZH0tJHttYWluRmllbGQ/Lm5hbWV9LSR7c2Vjb25kYXJ5RmllbGQ/Lm5hbWV9LWxhYmVsYCxcbiAgICAgICAgZGF0YTogZGF0YS5kYXRhLFxuICAgICAgICB2aXNpYmlsaXR5Qnlab29tLFxuICAgICAgICBleHRlbnNpb25zLFxuXG4gICAgICAgIGNoYXJhY3RlclNldDogJ2F1dG8nLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBjb2xsaXNpb25Hcm91cDogYCR7dGhpcy5pZH0tbGFiZWxzYCxcblxuICAgICAgICBnZXRUZXh0OiBkYXRhLnRleHRMYWJlbHNbMF0uZ2V0VGV4dCxcbiAgICAgICAgZ2V0Q29sb3IsXG4gICAgICAgIHNpemVTY2FsZSxcbiAgICAgICAgb3V0bGluZUNvbG9yLFxuXG4gICAgICAgIC4uLihzZWNvbmRhcnlGaWVsZCAmJiB7XG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5VGV4dDogZGF0YS50ZXh0TGFiZWxzWzFdLmdldFRleHQsXG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5Q29sb3IsXG4gICAgICAgICAgc2Vjb25kYXJ5U2l6ZVNjYWxlLFxuICAgICAgICAgIHNlY29uZGFyeU91dGxpbmVDb2xvclxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBQb3NpdGlvblxuICAgICAgICBnZXRQb3NpdGlvbixcbiAgICAgICAgZ2V0UmFkaXVzLFxuICAgICAgICByYWRpdXNTY2FsZSxcbiAgICAgICAgZ2V0VGV4dEFuY2hvcjogYW5jaG9yLFxuICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogYWxpZ25tZW50LFxuXG4gICAgICAgIC8vIFN0eWxlXG4gICAgICAgIGZvbnRGYW1pbHk6ICdJbnRlciwgc2FucycsXG4gICAgICAgIGZvbnRTZXR0aW5nczoge3NkZjogdHJ1ZX0sXG4gICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgb3V0bGluZVdpZHRoOiA0LFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgLy8gdGV4dCB3aWxsIGFsd2F5cyBzaG93IG9uIHRvcCBvZiBhbGwgbGF5ZXJzXG4gICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgIGdldFRleHQ6IG1haW5GaWVsZD8ubmFtZSxcbiAgICAgICAgICBnZXRDb2xvcjogbWFpbkZpZWxkPy5jb2xvcixcbiAgICAgICAgICBnZXRUZXh0QW5jaG9yOiBtYWluTGFiZWwuYW5jaG9yLFxuICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiBtYWluTGFiZWwuYWxpZ25tZW50LFxuICAgICAgICAgIGdldFNlY29uZGFyeVRleHQ6IHNlY29uZGFyeUZpZWxkPy5uYW1lXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVjay5nbCBgSWNvbkxheWVyYCBcImF1dG9QYWNrXCIgbW9kZSBhY2Nlc3NvciBmb3IgY3VzdG9tIG1hcmtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gaWNvblVybEFjY2Vzc29yIGRlY2suZ2wgYWNjZXNzb3IgKG9yIHZhbHVlKSB0aGF0IHJlc29sdmVzIHRvIFVSTCBvZiBpY29uIGZvciBnaXZlbiByb3dcbiAgICogQHJldHVybnMgZGVjay5nbCBhY2Nlc3NvciB0aGF0IHJldHVybnMgVW5wYWNrZWRJY29uIHJlYWR5IHRvIGNvbnN1bWUgYnkgSWNvbkxheWVyXG4gICAqL1xuICBnZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoaWNvblVybEFjY2Vzc29yLCBtYXNrID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1heEljb25TaXplID0gdGhpcy5nZXRNYXhNYXJrZXJTaXplKCk7XG5cbiAgICByZXR1cm4gZCA9PiB7XG4gICAgICBjb25zdCB3YW50ZWRVcmwgPVxuICAgICAgICAodHlwZW9mIGljb25VcmxBY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJykgPyBpY29uVXJsQWNjZXNzb3IoZCkgOiBpY29uVXJsQWNjZXNzb3I7XG4gICAgICBjb25zdCBpY29uT2sgPSBCb29sZWFuKHdhbnRlZFVybCk7XG4gICAgICBtYXNrID0gaWNvbk9rID8gbWFzayA6IHRydWU7XG4gICAgICBjb25zdCB1cmwgPSBpY29uT2sgPyB3YW50ZWRVcmwgOiBGQUxMQkFDS19JQ09OO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke3VybH1AQCR7bWF4SWNvblNpemV9QCR7bWFzayA/ICdtJyA6ICdjJ31gLFxuICAgICAgICB1cmwsXG4gICAgICAgIHdpZHRoOiBtYXhJY29uU2l6ZSxcbiAgICAgICAgaGVpZ2h0OiBtYXhJY29uU2l6ZSxcbiAgICAgICAgbWFza1xuICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShrZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9XG5cbiAgZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiAoKSA9PiBudWxsO1xuICB9XG5cbiAgZ2V0SGV4Q29sdW1uKHJhbmdlKSB7XG4gICAgY29uc3QgZmllbGQgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpPy5maW5kKHZhbHVlID0+IHZhbHVlLnJhbmdlID09PSByYW5nZSk/LmZpZWxkO1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXT8uY29sb3JDb2x1bW47XG4gICAgfVxuICB9XG5cbiAgaXNDb2xvcmVkQnlDb2xvckNvbHVtbihyYW5nZSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdPy5oZXhDb2xvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQW9CQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sWUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBRUEsSUFBQVMsZ0JBQUEsR0FBQVQsT0FBQTtBQVlBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLGtCQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxhQUFBLEdBQUFaLE9BQUE7QUFRQSxJQUFBYSxNQUFBLEdBQUFiLE9BQUE7QUFFQSxJQUFBYyxVQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxtQkFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLFdBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIsV0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixRQUFBLEdBQUFsQixPQUFBO0FBQXNDLFNBQUFtQiwyQkFBQUMsQ0FBQSxFQUFBQyxjQUFBLFFBQUFDLEVBQUEsVUFBQUMsTUFBQSxvQkFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsRUFBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxFQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsY0FBQSxJQUFBRCxDQUFBLFdBQUFBLENBQUEsQ0FBQVEsTUFBQSxxQkFBQU4sRUFBQSxFQUFBRixDQUFBLEdBQUFFLEVBQUEsTUFBQU8sQ0FBQSxVQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxRQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxXQUFBSyxJQUFBLG1CQUFBQSxJQUFBLFNBQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxDQUFBLFVBQUFNLENBQUEsV0FBQUEsRUFBQUMsRUFBQSxVQUFBQSxFQUFBLEtBQUFDLENBQUEsRUFBQVAsQ0FBQSxnQkFBQVEsU0FBQSxpSkFBQUMsZ0JBQUEsU0FBQUMsTUFBQSxVQUFBQyxHQUFBLFdBQUFWLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxFQUFBLEdBQUFBLEVBQUEsQ0FBQW9CLElBQUEsQ0FBQXRCLENBQUEsTUFBQVksQ0FBQSxXQUFBQSxFQUFBLFFBQUFXLElBQUEsR0FBQXJCLEVBQUEsQ0FBQXNCLElBQUEsSUFBQUwsZ0JBQUEsR0FBQUksSUFBQSxDQUFBVixJQUFBLFNBQUFVLElBQUEsS0FBQVIsQ0FBQSxXQUFBQSxFQUFBVSxHQUFBLElBQUFMLE1BQUEsU0FBQUMsR0FBQSxHQUFBSSxHQUFBLEtBQUFSLENBQUEsV0FBQUEsRUFBQSxlQUFBRSxnQkFBQSxJQUFBakIsRUFBQSxvQkFBQUEsRUFBQSw4QkFBQWtCLE1BQUEsUUFBQUMsR0FBQTtBQUFBLFNBQUFkLDRCQUFBUCxDQUFBLEVBQUEwQixNQUFBLFNBQUExQixDQUFBLHFCQUFBQSxDQUFBLHNCQUFBMkIsaUJBQUEsQ0FBQTNCLENBQUEsRUFBQTBCLE1BQUEsT0FBQWQsQ0FBQSxHQUFBZ0IsTUFBQSxDQUFBQyxTQUFBLENBQUFDLFFBQUEsQ0FBQVIsSUFBQSxDQUFBdEIsQ0FBQSxFQUFBK0IsS0FBQSxhQUFBbkIsQ0FBQSxpQkFBQVosQ0FBQSxDQUFBZ0MsV0FBQSxFQUFBcEIsQ0FBQSxHQUFBWixDQUFBLENBQUFnQyxXQUFBLENBQUFDLElBQUEsTUFBQXJCLENBQUEsY0FBQUEsQ0FBQSxtQkFBQVAsS0FBQSxDQUFBNkIsSUFBQSxDQUFBbEMsQ0FBQSxPQUFBWSxDQUFBLCtEQUFBdUIsSUFBQSxDQUFBdkIsQ0FBQSxVQUFBZSxpQkFBQSxDQUFBM0IsQ0FBQSxFQUFBMEIsTUFBQTtBQUFBLFNBQUFDLGtCQUFBUyxHQUFBLEVBQUFDLEdBQUEsUUFBQUEsR0FBQSxZQUFBQSxHQUFBLEdBQUFELEdBQUEsQ0FBQTVCLE1BQUEsRUFBQTZCLEdBQUEsR0FBQUQsR0FBQSxDQUFBNUIsTUFBQSxXQUFBQyxDQUFBLE1BQUE2QixJQUFBLE9BQUFqQyxLQUFBLENBQUFnQyxHQUFBLEdBQUE1QixDQUFBLEdBQUE0QixHQUFBLEVBQUE1QixDQUFBLElBQUE2QixJQUFBLENBQUE3QixDQUFBLElBQUEyQixHQUFBLENBQUEzQixDQUFBLFVBQUE2QixJQUFBO0FBQUEsU0FBQUMsUUFBQXhCLENBQUEsRUFBQXlCLENBQUEsUUFBQUMsQ0FBQSxHQUFBYixNQUFBLENBQUFjLElBQUEsQ0FBQTNCLENBQUEsT0FBQWEsTUFBQSxDQUFBZSxxQkFBQSxRQUFBM0MsQ0FBQSxHQUFBNEIsTUFBQSxDQUFBZSxxQkFBQSxDQUFBNUIsQ0FBQSxHQUFBeUIsQ0FBQSxLQUFBeEMsQ0FBQSxHQUFBQSxDQUFBLENBQUE0QyxNQUFBLFdBQUFKLENBQUEsV0FBQVosTUFBQSxDQUFBaUIsd0JBQUEsQ0FBQTlCLENBQUEsRUFBQXlCLENBQUEsRUFBQU0sVUFBQSxPQUFBTCxDQUFBLENBQUFNLElBQUEsQ0FBQUMsS0FBQSxDQUFBUCxDQUFBLEVBQUF6QyxDQUFBLFlBQUF5QyxDQUFBO0FBQUEsU0FBQVEsY0FBQWxDLENBQUEsYUFBQXlCLENBQUEsTUFBQUEsQ0FBQSxHQUFBVSxTQUFBLENBQUExQyxNQUFBLEVBQUFnQyxDQUFBLFVBQUFDLENBQUEsV0FBQVMsU0FBQSxDQUFBVixDQUFBLElBQUFVLFNBQUEsQ0FBQVYsQ0FBQSxRQUFBQSxDQUFBLE9BQUFELE9BQUEsQ0FBQVgsTUFBQSxDQUFBYSxDQUFBLE9BQUFVLE9BQUEsV0FBQVgsQ0FBQSxRQUFBWSxnQkFBQSxhQUFBckMsQ0FBQSxFQUFBeUIsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQVosTUFBQSxDQUFBeUIseUJBQUEsR0FBQXpCLE1BQUEsQ0FBQTBCLGdCQUFBLENBQUF2QyxDQUFBLEVBQUFhLE1BQUEsQ0FBQXlCLHlCQUFBLENBQUFaLENBQUEsS0FBQUYsT0FBQSxDQUFBWCxNQUFBLENBQUFhLENBQUEsR0FBQVUsT0FBQSxXQUFBWCxDQUFBLElBQUFaLE1BQUEsQ0FBQTJCLGNBQUEsQ0FBQXhDLENBQUEsRUFBQXlCLENBQUEsRUFBQVosTUFBQSxDQUFBaUIsd0JBQUEsQ0FBQUosQ0FBQSxFQUFBRCxDQUFBLGlCQUFBekIsQ0FBQTtBQUFBLElBQUF5QyxPQUFBLGdCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0E2QjVCQyxhQUFhLEdBdkZ2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTBDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBQWUsR0FBQUMsT0FBQSxDQUFBRCxlQUFBLEdBQUcsQ0FBQzs7QUFFaEM7QUFDQSxJQUFNRSxhQUFhLEdBQ2pCLDBMQUEwTDtBQUU1TCxJQUFNQyxlQUFlLEdBQUcsSUFBSTtBQUM1QixJQUFNQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLElBQU1DLG1CQUFtQixHQUFHLElBQUlDLCtCQUFtQixDQUFDO0VBQUNDLFVBQVUsRUFBRUM7QUFBZSxDQUFDLENBQUM7QUFDbEYsSUFBTUMsd0JBQXdCLEdBQUcsSUFBSUMsb0NBQXdCLENBQUMsQ0FBQztBQUUvRCxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFHQyxFQUFFO0VBQUEsT0FBSSxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQztFQUFBO0FBQUE7QUFDeEMsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsS0FBSyxFQUFFRixDQUFDO0VBQUEsT0FBS0UsS0FBSyxDQUFDQyxhQUFhLENBQUNILENBQUMsQ0FBQztBQUFBO0FBQ2pFLElBQU1JLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBR0MsQ0FBQztFQUFBLE9BQUlBLENBQUM7QUFBQTtBQUVyQixJQUFNQyxZQUFZLEdBQUFsQixPQUFBLENBQUFrQixZQUFBLEdBQUcsSUFBQUMscUJBQVMsRUFBQztFQUNwQ0MsTUFBTSxFQUFFLElBQUk7RUFDWkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxDQUFDO0FBRUssSUFBTUMsV0FBVyxHQUFBdEIsT0FBQSxDQUFBc0IsV0FBQSxHQUFHdkQsTUFBTSxDQUFDd0QsTUFBTSxDQUFDQyxnQ0FBYSxDQUFDLENBQUNDLEdBQUcsQ0FBQ0Msb0JBQVEsQ0FBQztBQUNyRSxTQUFVNUIsYUFBYUEsQ0FBQTtFQUFBLElBQUE2QixLQUFBO0VBQUEsT0FBQS9CLFlBQUEsWUFBQWdDLElBQUEsVUFBQUMsZUFBQUMsUUFBQTtJQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBbkUsSUFBQTtNQUFBO1FBQ2pCZ0UsS0FBSyxHQUFHLENBQUM7TUFBQTtRQUFBLE1BQ05BLEtBQUssR0FBR0wsV0FBVyxDQUFDM0UsTUFBTSxHQUFHLENBQUM7VUFBQW1GLFFBQUEsQ0FBQW5FLElBQUE7VUFBQTtRQUFBO1FBQ25DLElBQUlnRSxLQUFLLEtBQUtMLFdBQVcsQ0FBQzNFLE1BQU0sRUFBRTtVQUNoQ2dGLEtBQUssR0FBRyxDQUFDO1FBQ1g7UUFBQ0csUUFBQSxDQUFBbkUsSUFBQTtRQUNELE9BQU0yRCxXQUFXLENBQUNLLEtBQUssRUFBRSxDQUFDO01BQUE7UUFBQUcsUUFBQSxDQUFBbkUsSUFBQTtRQUFBO01BQUE7TUFBQTtRQUFBLE9BQUFtRSxRQUFBLENBQUFFLElBQUE7SUFBQTtFQUFBLEdBQUFyQyxPQUFBO0FBQUE7QUFJdkIsSUFBTXNDLFVBQVUsR0FBQWpDLE9BQUEsQ0FBQWlDLFVBQUEsR0FBR25DLGFBQWEsQ0FBQyxDQUFDOztBQUV6QztBQUFBLElBQ01vQyxLQUFLO0VBQ1QsU0FBQUEsTUFBQSxFQUF3QjtJQUFBLElBQVpDLEtBQUssR0FBQTlDLFNBQUEsQ0FBQTFDLE1BQUEsUUFBQTBDLFNBQUEsUUFBQStDLFNBQUEsR0FBQS9DLFNBQUEsTUFBRyxDQUFDLENBQUM7SUFBQSxJQUFBZ0QsZ0JBQUEsbUJBQUFILEtBQUE7SUFDcEIsSUFBSSxDQUFDSSxFQUFFLEdBQUdILEtBQUssQ0FBQ0csRUFBRSxJQUFJLElBQUFDLHFCQUFjLEVBQUN4QyxlQUFlLENBQUM7SUFDckQ7SUFDQSxJQUFJLENBQUN5QyxJQUFJLEdBQUcsQ0FBQyxDQUFDOztJQUVkO0lBQ0EsSUFBSSxDQUFDQyxjQUFjLEdBQUcsQ0FBQyxDQUFDOztJQUV4QjtJQUNBLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDOztJQUUzQjtJQUNBLElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcsQ0FBQyxDQUFDOztJQUVoQztJQUNBLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUksQ0FBQ0MscUJBQXFCLENBQUF6RCxhQUFBO01BQ3RDMEQsT0FBTyxFQUFFLElBQUksQ0FBQ0MsZUFBZSxDQUFDO0lBQUMsR0FDNUJaLEtBQUssQ0FDVCxDQUFDO0VBQ0o7RUFBQyxJQUFBYSxhQUFBLGFBQUFkLEtBQUE7SUFBQWUsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnQjtNQUNkLE9BQU9DLDRCQUFnQjtJQUN6QjtFQUFDO0lBQUFGLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBT2hDLFlBQVksQ0FBQ0UsTUFBTTtJQUM1QjtFQUFDO0lBQUE2QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQVc7TUFDVCxPQUFPLElBQUk7SUFDYjtFQUFDO0lBQUFELEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBVztNQUNULE9BQU8sSUFBSSxDQUFDRSxJQUFJO0lBQ2xCO0VBQUM7SUFBQUgsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtQjtNQUNqQixPQUFPLEtBQUs7SUFDZDtFQUFDO0lBQUFELEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxFQUFFO0lBQ1g7RUFBQztJQUFBRCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU8sRUFBRTtJQUNYO0VBQUM7SUFBQUQsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFrQztNQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQztJQUNqRTtFQUFDO0lBQUFELEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUI7TUFDbkIsT0FBTztRQUNMRyxLQUFLLEVBQUU7VUFDTEMsUUFBUSxFQUFFLE9BQU87VUFDakJ4QyxLQUFLLEVBQUUsWUFBWTtVQUNuQnlDLEtBQUssRUFBRSxZQUFZO1VBQ25CQyxNQUFNLEVBQUUsYUFBYTtVQUNyQkMsS0FBSyxFQUFFLFlBQVk7VUFDbkJSLEdBQUcsRUFBRSxPQUFPO1VBQ1pTLGdCQUFnQixFQUFFQywrQkFBYyxDQUFDTixLQUFLO1VBQ3RDTyxTQUFTLEVBQUVDLCtCQUFjO1VBQ3pCQyxZQUFZLEVBQUUsU0FBQUEsYUFBQWxCLE1BQU07WUFBQSxPQUFJQSxNQUFNLENBQUNTLEtBQUs7VUFBQTtRQUN0QyxDQUFDO1FBQ0RVLElBQUksRUFBRTtVQUNKVCxRQUFRLEVBQUUsTUFBTTtVQUNoQnhDLEtBQUssRUFBRSxXQUFXO1VBQ2xCeUMsS0FBSyxFQUFFLFdBQVc7VUFDbEJDLE1BQU0sRUFBRSxZQUFZO1VBQ3BCQyxLQUFLLEVBQUUsV0FBVztVQUNsQlIsR0FBRyxFQUFFLE1BQU07VUFDWFMsZ0JBQWdCLEVBQUVDLCtCQUFjLENBQUNJLElBQUk7VUFDckNILFNBQVMsRUFBRSxDQUFDO1VBQ1pFLFlBQVksRUFBRTtRQUNoQjtNQUNGLENBQUM7SUFDSDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUhFO0lBQUFiLEdBQUE7SUFBQUMsR0FBQSxFQUlBLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJO0lBQ2I7O0lBRUE7QUFDRjtBQUNBO0VBRkU7SUFBQUQsR0FBQTtJQUFBQyxHQUFBLEVBR0EsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPO1FBQ0xjLEdBQUcsRUFBRTtVQUFDQyxJQUFJLEVBQUUsS0FBSztVQUFFQyxZQUFZLEVBQUU7UUFBSyxDQUFDO1FBQ3ZDQyxHQUFHLEVBQUU7VUFBQ0YsSUFBSSxFQUFFLEtBQUs7VUFBRUMsWUFBWSxFQUFFO1FBQUs7TUFDeEMsQ0FBQztJQUNIOztJQUVBO0FBQ0Y7QUFDQTtFQUZFO0lBQUFqQixHQUFBO0lBQUFDLEdBQUEsRUFHQSxTQUFBQSxJQUFBLEVBQTZCO01BQzNCLE9BQU87UUFDTGtCLElBQUksRUFBRTtVQUFDSCxJQUFJLEVBQUUsTUFBTTtVQUFFQyxZQUFZLEVBQUU7UUFBSyxDQUFDO1FBQ3pDRyxJQUFJLEVBQUU7VUFBQ0osSUFBSSxFQUFFLE1BQU07VUFBRUMsWUFBWSxFQUFFO1FBQUssQ0FBQztRQUN6Q0ksSUFBSSxFQUFFO1VBQUNMLElBQUksRUFBRSxNQUFNO1VBQUVDLFlBQVksRUFBRTtRQUFLLENBQUM7UUFDekNLLElBQUksRUFBRTtVQUFDTixJQUFJLEVBQUUsTUFBTTtVQUFFQyxZQUFZLEVBQUU7UUFBSztNQUMxQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWEU7SUFBQWpCLEdBQUE7SUFBQUMsR0FBQSxFQVlBLFNBQUFBLElBQUEsRUFBcUI7TUFDbkIsT0FBTyxJQUFJO0lBQ2I7RUFBQztJQUFBRCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRCO01BQzFCLE9BQU8sSUFBSSxDQUFDUCxzQkFBc0I7SUFDcEMsQ0FBQztJQUFBNkIsR0FBQSxFQUVELFNBQUFBLElBQTBCQyxxQkFBcUIsRUFBRTtNQUMvQyxJQUFJLENBQUM5QixzQkFBc0IsR0FBRzhCLHFCQUFxQjtJQUNyRDtFQUFDO0lBQUF4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlCO01BQUEsSUFBQXdCLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO01BQ2YsT0FBT0MsT0FBTyxDQUNaLEVBQUFKLHFCQUFBLE9BQUksQ0FBQ0QscUJBQXFCLGNBQUFDLHFCQUFBLHdCQUFBQyxzQkFBQSxHQUExQkQscUJBQUEsQ0FBNEJLLEtBQUssY0FBQUosc0JBQUEsdUJBQWpDQSxzQkFBQSxDQUFtQ0ssTUFBTSxDQUFDckksTUFBTSxPQUFBaUksc0JBQUEsR0FDOUMsSUFBSSxDQUFDSCxxQkFBcUIsY0FBQUcsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQTFCRCxzQkFBQSxDQUE0QkssS0FBSyxjQUFBSixzQkFBQSx1QkFBakNBLHNCQUFBLENBQW1DRyxNQUFNLENBQUNySSxNQUFNLENBQ3BELENBQUM7SUFDSDtFQUFDO0lBQUFzRyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVCO01BQUEsSUFBQWdDLHNCQUFBO01BQ3JCLE9BQU9KLE9BQU8sQ0FBQyxJQUFJLENBQUNLLFVBQVUsTUFBQUQsc0JBQUEsR0FBSSxJQUFJLENBQUNULHFCQUFxQixjQUFBUyxzQkFBQSx1QkFBMUJBLHNCQUFBLENBQTRCRSxPQUFPLEVBQUM7SUFDeEU7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUpFO0lBQUFuQyxHQUFBO0lBQUFoRyxLQUFBLEVBb0ZBLFNBQUE0RixzQkFBQSxFQUFrQztNQUFBLElBQUF3QyxxQkFBQSxFQUFBQyxzQkFBQTtNQUFBLElBQVpuRCxLQUFLLEdBQUE5QyxTQUFBLENBQUExQyxNQUFBLFFBQUEwQyxTQUFBLFFBQUErQyxTQUFBLEdBQUEvQyxTQUFBLE1BQUcsQ0FBQyxDQUFDO01BQzlCLE9BQU87UUFDTGtHLE1BQU0sRUFBRXBELEtBQUssQ0FBQ29ELE1BQU0sSUFBSSxJQUFJO1FBQzVCQyxnQkFBZ0IsRUFBRTtVQUNoQkMsR0FBRyxFQUFFLEVBQUFKLHFCQUFBLEdBQUFsRCxLQUFLLENBQUNxRCxnQkFBZ0IsY0FBQUgscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3QkksR0FBRyxLQUFJQyxrQ0FBaUIsQ0FBQ0QsR0FBRztVQUN6REUsR0FBRyxFQUFFLEVBQUFMLHNCQUFBLEdBQUFuRCxLQUFLLENBQUNxRCxnQkFBZ0IsY0FBQUYsc0JBQUEsdUJBQXRCQSxzQkFBQSxDQUF3QkssR0FBRyxLQUFJRCxrQ0FBaUIsQ0FBQ0M7UUFDeEQsQ0FBQztRQUNEQyxLQUFLLEVBQUV6RCxLQUFLLENBQUN5RCxLQUFLLElBQUlDLGlDQUFtQjtRQUN6Q3hDLEtBQUssRUFBRWxCLEtBQUssQ0FBQ2tCLEtBQUssSUFBSXBCLFVBQVUsQ0FBQ3RFLElBQUksQ0FBQyxDQUFDLENBQUNWLEtBQUs7UUFDN0M2RixPQUFPLEVBQUVYLEtBQUssQ0FBQ1csT0FBTyxJQUFJLElBQUk7UUFDOUJnRCxTQUFTLEVBQUUzRCxLQUFLLENBQUMyRCxTQUFTLElBQUksS0FBSztRQUNuQ0MsY0FBYyxFQUFFNUQsS0FBSyxDQUFDNEQsY0FBYyxJQUFJLEtBQUs7UUFDN0NDLGNBQWMsRUFBRTdELEtBQUssQ0FBQzZELGNBQWMsSUFBSUMscUNBQXVCO1FBQy9EQyxNQUFNLEVBQUUvRCxLQUFLLENBQUMrRCxNQUFNLElBQUksS0FBSztRQUU3QjtRQUNBO1FBQ0FDLFVBQVUsRUFBRSxJQUFJO1FBQ2hCQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CQyxVQUFVLEVBQUVDLDRCQUFXLENBQUNDLFFBQVE7UUFFaEM7UUFDQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQkMsU0FBUyxFQUFFSCw0QkFBVyxDQUFDSSxNQUFNO1FBQzdCQyxTQUFTLEVBQUUsSUFBSTtRQUNmQyxXQUFXLEVBQUUsSUFBSTtRQUVqQkMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUViQyxTQUFTLEVBQUUsQ0FBQ0MsZ0NBQWtCLENBQUM7UUFFL0JDLE9BQU8sRUFBRTtVQUNQM0QsS0FBSyxFQUFFNEQsOEJBQWdCO1VBQ3ZCQyxVQUFVLEVBQUVEO1FBQ2QsQ0FBQztRQUNERSxTQUFTLEVBQUU7VUFBQy9CLE9BQU8sRUFBRTtRQUFLO01BQzVCLENBQUM7SUFDSDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBSkU7SUFBQW5DLEdBQUE7SUFBQWhHLEtBQUEsRUFLQSxTQUFBbUssNEJBQTRCbkUsR0FBRyxFQUFFO01BQy9CO01BQ0EsT0FBTztRQUNMMkMsS0FBSyxFQUFFLElBQUksQ0FBQ2xELGlCQUFpQixDQUFDLElBQUksQ0FBQzJFLGNBQWMsQ0FBQ3BFLEdBQUcsQ0FBQyxDQUFDUSxLQUFLLENBQUMsQ0FBQ21DLEtBQUs7UUFDbkUwQixPQUFPLEVBQUUsSUFBSSxDQUFDMUUsTUFBTSxDQUFDLElBQUksQ0FBQ3lFLGNBQWMsQ0FBQ3BFLEdBQUcsQ0FBQyxDQUFDbkMsS0FBSyxDQUFDLEdBQy9DLElBQUksQ0FBQzhCLE1BQU0sQ0FBQyxJQUFJLENBQUN5RSxjQUFjLENBQUNwRSxHQUFHLENBQUMsQ0FBQ25DLEtBQUssQ0FBQyxDQUFDeUcsV0FBVyxJQUN4RCxJQUFJLENBQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDeUUsY0FBYyxDQUFDcEUsR0FBRyxDQUFDLENBQUNuQyxLQUFLLENBQUMsQ0FBQzFDLElBQUksR0FDaEQsSUFBSSxDQUFDaUosY0FBYyxDQUFDcEUsR0FBRyxDQUFDLENBQUN1RTtNQUMvQixDQUFDO0lBQ0g7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEU7SUFBQXZFLEdBQUE7SUFBQWhHLEtBQUEsRUFNQSxTQUFBd0ssYUFBYXhFLEdBQUcsRUFBRW5DLEtBQUssRUFBRTtNQUN2QjtNQUNBLElBQU00RyxNQUFNLEdBQUc1RyxLQUFLLEdBQ2hCO1FBQ0U3RCxLQUFLLEVBQUU2RCxLQUFLLENBQUMxQyxJQUFJO1FBQ2pCdUosUUFBUSxFQUFFN0csS0FBSyxDQUFDNkc7TUFDbEIsQ0FBQyxHQUNEO1FBQUMxSyxLQUFLLEVBQUUsSUFBSTtRQUFFMEssUUFBUSxFQUFFLENBQUM7TUFBQyxDQUFDO01BRS9CLE9BQUF2SSxhQUFBLENBQUFBLGFBQUEsS0FDSyxJQUFJLENBQUN3RCxNQUFNLENBQUNFLE9BQU8sV0FBQXZELGdCQUFBLGlCQUNyQjBELEdBQUcsRUFBQTdELGFBQUEsQ0FBQUEsYUFBQSxLQUNDLElBQUksQ0FBQ3dELE1BQU0sQ0FBQ0UsT0FBTyxDQUFDRyxHQUFHLENBQUMsR0FDeEJ5RSxNQUFNO0lBR2Y7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEU7SUFBQXpFLEdBQUE7SUFBQWhHLEtBQUEsRUFNQSxTQUFBMkssa0JBQWtCM0UsR0FBRyxFQUFFZ0IsSUFBSSxFQUFFO01BQUEsSUFBQTRELGlCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGtCQUFBO01BQzNCLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsSUFBSSxHQUFBSCxpQkFBQSxHQUFDLElBQUksQ0FBQ0csV0FBVyxjQUFBSCxpQkFBQSxlQUFoQkEsaUJBQUEsQ0FBbUI1RSxHQUFHLENBQUMsR0FBRTtRQUNqRDtRQUNBLE9BQU8sSUFBSSxDQUFDTCxNQUFNLENBQUNFLE9BQU87TUFDNUI7TUFFQSxJQUFBbUYscUJBQUEsSUFBQUgsa0JBQUEsR0FBeUMsSUFBSSxDQUFDRSxXQUFXLGNBQUFGLGtCQUFBLHVCQUFoQkEsa0JBQUEsQ0FBbUI3RSxHQUFHLENBQUM7UUFBbkRpRixVQUFVLEdBQUFELHFCQUFBLENBQWhCaEUsSUFBSTtRQUFjQyxZQUFZLEdBQUErRCxxQkFBQSxDQUFaL0QsWUFBWTtNQUNyQyxJQUFBaUUscUJBQUEsSUFBQUosa0JBQUEsR0FBNEMsSUFBSSxDQUFDQyxXQUFXLGNBQUFELGtCQUFBLHVCQUFoQkEsa0JBQUEsQ0FBbUJHLFVBQVUsQ0FBQztRQUFyREUsbUJBQW1CLEdBQUFELHFCQUFBLENBQWpDakUsWUFBWTtNQUVuQixPQUFBOUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0ssSUFBSSxDQUFDd0QsTUFBTSxDQUFDRSxPQUFPLFdBQUF2RCxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQ3JCMEQsR0FBRyxFQUFHZ0IsSUFBSSxDQUFDQyxZQUFZLENBQUMsR0FDeEJnRSxVQUFVLEVBQUdqRSxJQUFJLENBQUNtRSxtQkFBbUIsQ0FBQztJQUUzQzs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5FO0lBQUFuRixHQUFBO0lBQUFoRyxLQUFBLEVBT0EsU0FBQW9MLGNBQUFDLElBQUEsRUFBc0M7TUFBQSxJQUF2QkMsSUFBSSxHQUFBRCxJQUFBLENBQUpDLElBQUk7UUFBQUMsZUFBQSxHQUFBRixJQUFBLENBQUVHLFVBQVU7UUFBVkEsVUFBVSxHQUFBRCxlQUFBLGNBQUcsQ0FBQyxHQUFBQSxlQUFBO01BQ2pDLE9BQU9FLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDL0MsR0FBRyxDQUFDLEVBQUUsR0FBRzRDLElBQUksR0FBR0UsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pEOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkU7SUFBQXhGLEdBQUE7SUFBQWhHLEtBQUEsRUFPQSxTQUFBMkwsdUJBQUFDLEtBQUEsRUFBK0M7TUFBQSxJQUF2Qk4sSUFBSSxHQUFBTSxLQUFBLENBQUpOLElBQUk7UUFBQU8sZ0JBQUEsR0FBQUQsS0FBQSxDQUFFSixVQUFVO1FBQVZBLFVBQVUsR0FBQUssZ0JBQUEsY0FBRyxDQUFDLEdBQUFBLGdCQUFBO01BQzFDLE9BQU8sSUFBSSxDQUFDbEcsTUFBTSxDQUFDaUUsU0FBUyxDQUFDa0MseUJBQXlCLEdBQ2xETCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUVELElBQUksQ0FBQy9DLEdBQUcsQ0FBQyxDQUFDLEdBQUc0QyxJQUFJLEdBQUdFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUMvQyxDQUFDO0lBQ1A7RUFBQztJQUFBeEYsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUErTCxnQkFBZ0JDLFFBQVEsRUFBRUMsYUFBYSxFQUFFO01BQ3ZDLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7RUFBQztJQUFBakcsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFrTSxZQUFBLEVBQWM7TUFDWixPQUFPLEVBQUU7SUFDWDtFQUFDO0lBQUFsRyxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQW1NLGFBQWFDLE1BQU0sRUFBRUMsYUFBYSxFQUFFO01BQ2xDLElBQUksQ0FBQ0QsTUFBTSxFQUFFO1FBQ1gsT0FBTyxJQUFJO01BQ2I7O01BRUE7TUFDQTtNQUNBLE9BQU9DLGFBQWEsQ0FBQ0MsR0FBRyxDQUFDRixNQUFNLENBQUMxSCxLQUFLLENBQUM7SUFDeEM7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUpFO0lBQUFzQixHQUFBO0lBQUFoRyxLQUFBLEVBS0EsU0FBQXVNLG9CQUFvQkMsWUFBWSxFQUFFL0csaUJBQWlCLEVBQUU7TUFBQSxJQUFBZ0gsS0FBQTtNQUNuRDtNQUNBO01BQ0EsSUFBTUMsV0FBVyxHQUFHLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUNDLE1BQU0sQ0FDM0Q3TCxNQUFNLENBQUN3RCxNQUFNLENBQUMsSUFBSSxDQUFDOEYsY0FBYyxDQUFDLENBQUM1RixHQUFHLENBQUMsVUFBQVIsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ0gsS0FBSztNQUFBLEVBQ3JELENBQUM7O01BRUQ7TUFDQSxJQUFNK0ksU0FBUyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUNELE1BQU0sQ0FBQzdMLE1BQU0sQ0FBQ3dELE1BQU0sQ0FBQyxJQUFJLENBQUM4RixjQUFjLENBQUMsQ0FBQzVGLEdBQUcsQ0FBQyxVQUFBUixDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDdUMsTUFBTTtNQUFBLEVBQUMsQ0FBQztNQUM3RjtNQUNBekYsTUFBTSxDQUFDd0QsTUFBTSxDQUFDLElBQUksQ0FBQzhGLGNBQWMsQ0FBQyxDQUFDL0gsT0FBTyxDQUFDLFVBQUEyQixDQUFDLEVBQUk7UUFDOUMsSUFDRXdJLFlBQVksQ0FBQzVDLFNBQVMsQ0FBQzVGLENBQUMsQ0FBQ3dDLEtBQUssQ0FBQyxJQUMvQmlHLEtBQUksQ0FBQ2hILGlCQUFpQixDQUFDekIsQ0FBQyxDQUFDd0MsS0FBSyxDQUFDLElBQy9CZixpQkFBaUIsQ0FBQ3pCLENBQUMsQ0FBQ3dDLEtBQUssQ0FBQyxDQUFDcUcsS0FBSyxLQUFLSixLQUFJLENBQUNoSCxpQkFBaUIsQ0FBQ3pCLENBQUMsQ0FBQ3dDLEtBQUssQ0FBQyxDQUFDcUcsS0FBSyxFQUMxRTtVQUNBRCxTQUFTLENBQUMzSyxJQUFJLENBQUMrQixDQUFDLENBQUN3QyxLQUFLLENBQUM7UUFDekI7TUFDRixDQUFDLENBQUM7O01BRUY7TUFDQSxJQUFNc0csYUFBYSxHQUFHLElBQUksQ0FBQ25ILE1BQU07TUFDakMsSUFBTW9ILE1BQU0sR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQ0YsYUFBYSxFQUFFTixZQUFZLEVBQUU7UUFDL0RFLFdBQVcsRUFBWEEsV0FBVztRQUNYRSxTQUFTLEVBQVRBO01BQ0YsQ0FBQyxDQUFDO01BQ0YsSUFBSSxDQUFDSyxpQkFBaUIsQ0FBQ0YsTUFBTSxDQUFDO01BQzlCO01BQ0FqTSxNQUFNLENBQUNjLElBQUksQ0FBQyxJQUFJLENBQUN3SSxjQUFjLENBQUMsQ0FBQy9ILE9BQU8sQ0FBQyxVQUFBNkssT0FBTyxFQUFJO1FBQ2xEVCxLQUFJLENBQUNVLHFCQUFxQixDQUFDRCxPQUFPLENBQUM7TUFDckMsQ0FBQyxDQUFDO0lBQ0o7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFURTtJQUFBbEgsR0FBQTtJQUFBaEcsS0FBQSxFQVVBLFNBQUFnTixnQkFBZ0JGLGFBQWEsRUFBRU4sWUFBWSxFQUEyQztNQUFBLElBQUFZLE1BQUE7TUFBQSxJQUFBQyxLQUFBLEdBQUFqTCxTQUFBLENBQUExQyxNQUFBLFFBQUEwQyxTQUFBLFFBQUErQyxTQUFBLEdBQUEvQyxTQUFBLE1BQUosQ0FBQyxDQUFDO1FBQUFrTCxpQkFBQSxHQUFBRCxLQUFBLENBQXRDWCxXQUFXO1FBQVhBLFdBQVcsR0FBQVksaUJBQUEsY0FBRyxFQUFFLEdBQUFBLGlCQUFBO1FBQUFDLGVBQUEsR0FBQUYsS0FBQSxDQUFFVCxTQUFTO1FBQVRBLFNBQVMsR0FBQVcsZUFBQSxjQUFHLEVBQUUsR0FBQUEsZUFBQTtNQUM1RSxJQUFNUixNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2pCak0sTUFBTSxDQUFDYyxJQUFJLENBQUNrTCxhQUFhLENBQUMsQ0FBQ3pLLE9BQU8sQ0FBQyxVQUFBMkQsR0FBRyxFQUFJO1FBQ3hDLElBQ0UsSUFBQXdILG9CQUFhLEVBQUNWLGFBQWEsQ0FBQzlHLEdBQUcsQ0FBQyxDQUFDLElBQ2pDLElBQUF3SCxvQkFBYSxFQUFDaEIsWUFBWSxDQUFDeEcsR0FBRyxDQUFDLENBQUMsSUFDaEMsQ0FBQzBHLFdBQVcsQ0FBQ2UsUUFBUSxDQUFDekgsR0FBRyxDQUFDLElBQzFCLENBQUM0RyxTQUFTLENBQUNhLFFBQVEsQ0FBQ3pILEdBQUcsQ0FBQyxFQUN4QjtVQUNBO1VBQ0ErRyxNQUFNLENBQUMvRyxHQUFHLENBQUMsR0FBR29ILE1BQUksQ0FBQ0osZUFBZSxDQUFDRixhQUFhLENBQUM5RyxHQUFHLENBQUMsRUFBRXdHLFlBQVksQ0FBQ3hHLEdBQUcsQ0FBQyxFQUFFO1lBQ3hFMEcsV0FBVyxFQUFYQSxXQUFXO1lBQ1hFLFNBQVMsRUFBVEE7VUFDRixDQUFDLENBQUM7UUFDSixDQUFDLE1BQU0sSUFBSSxJQUFBYyw2QkFBa0IsRUFBQ2xCLFlBQVksQ0FBQ3hHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzRHLFNBQVMsQ0FBQ2EsUUFBUSxDQUFDekgsR0FBRyxDQUFDLEVBQUU7VUFDNUU7VUFDQStHLE1BQU0sQ0FBQy9HLEdBQUcsQ0FBQyxHQUFHd0csWUFBWSxDQUFDeEcsR0FBRyxDQUFDO1FBQ2pDLENBQUMsTUFBTTtVQUNMO1VBQ0ErRyxNQUFNLENBQUMvRyxHQUFHLENBQUMsR0FBRzhHLGFBQWEsQ0FBQzlHLEdBQUcsQ0FBQztRQUNsQztNQUNGLENBQUMsQ0FBQztNQUVGLE9BQU8rRyxNQUFNO0lBQ2Y7RUFBQztJQUFBL0csR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUEyTixrQkFBa0JDLGVBQWUsRUFBRTtNQUFBLElBQUFDLE1BQUE7TUFDakMvTSxNQUFNLENBQUNjLElBQUksQ0FBQ2dNLGVBQWUsQ0FBQyxDQUFDdkwsT0FBTyxDQUFDLFVBQUF5TCxJQUFJLEVBQUk7UUFDM0MsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxJQUFJQywrQkFBaUIsQ0FBQ0gsZUFBZSxDQUFDRSxJQUFJLENBQUMsQ0FBQyxFQUFFO1VBQ3hFO1VBQ0FELE1BQUksQ0FBQ2xJLE1BQU0sQ0FBQ2lFLFNBQVMsQ0FBQ2tFLElBQUksQ0FBQyxHQUFHQywrQkFBaUIsQ0FBQ0gsZUFBZSxDQUFDRSxJQUFJLENBQUMsQ0FBQyxDQUFDakgsWUFBWTtVQUNuRmdILE1BQUksQ0FBQ3BJLGlCQUFpQixDQUFDcUksSUFBSSxDQUFDLEdBQUdDLCtCQUFpQixDQUFDSCxlQUFlLENBQUNFLElBQUksQ0FBQyxDQUFDO1FBQ3pFLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDRSxLQUFLLENBQUMsVUFBQUMsQ0FBQztVQUFBLE9BQUlMLGVBQWUsQ0FBQ0UsSUFBSSxDQUFDLENBQUNJLGNBQWMsQ0FBQ0QsQ0FBQyxDQUFDO1FBQUEsRUFBQyxFQUFFO1VBQ3ZGO1VBQ0E7VUFDQUosTUFBSSxDQUFDbEksTUFBTSxDQUFDaUUsU0FBUyxDQUFDa0UsSUFBSSxDQUFDLEdBQUdGLGVBQWUsQ0FBQ0UsSUFBSSxDQUFDLENBQUNqSCxZQUFZO1VBQ2hFZ0gsTUFBSSxDQUFDcEksaUJBQWlCLENBQUNxSSxJQUFJLENBQUMsR0FBR0YsZUFBZSxDQUFDRSxJQUFJLENBQUM7UUFDdEQ7TUFDRixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUE5SCxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQThGLGdCQUFBLEVBQWtCO01BQ2hCLElBQU1xSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUNBLGdCQUFnQixJQUFJLENBQUMsQ0FBQztNQUNwRCxJQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ0MsTUFBTSxDQUMvQyxVQUFDQyxJQUFJLEVBQUV2SSxHQUFHO1FBQUEsT0FBQTdELGFBQUEsQ0FBQUEsYUFBQSxLQUNMb00sSUFBSSxXQUFBak0sZ0JBQUEsaUJBQ04wRCxHQUFHLEVBQUdtSSxnQkFBZ0IsQ0FBQ25JLEdBQUcsQ0FBQyxHQUN4QjtVQUFDaEcsS0FBSyxFQUFFLElBQUk7VUFBRTBLLFFBQVEsRUFBRSxDQUFDLENBQUM7VUFBRThELFNBQVMsRUFBRUwsZ0JBQWdCLENBQUNuSSxHQUFHO1FBQUMsQ0FBQyxHQUM3RDtVQUFDaEcsS0FBSyxFQUFFLElBQUk7VUFBRTBLLFFBQVEsRUFBRSxDQUFDO1FBQUMsQ0FBQztNQUFBLENBQy9CLEVBQ0YsQ0FBQyxDQUNILENBQUM7TUFDRCxJQUFNK0QsUUFBUSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDSixNQUFNLENBQzFDLFVBQUNDLElBQUksRUFBRXZJLEdBQUc7UUFBQSxPQUFBN0QsYUFBQSxDQUFBQSxhQUFBLEtBQ0xvTSxJQUFJLFdBQUFqTSxnQkFBQSxpQkFDTjBELEdBQUcsRUFBRztVQUFDaEcsS0FBSyxFQUFFLElBQUk7VUFBRTBLLFFBQVEsRUFBRSxDQUFDLENBQUM7VUFBRStELFFBQVEsRUFBRTtRQUFJLENBQUM7TUFBQSxDQUNsRCxFQUNGLENBQUMsQ0FDSCxDQUFDO01BRUQsT0FBQXRNLGFBQUEsQ0FBQUEsYUFBQSxLQUFXaU0sUUFBUSxHQUFLSyxRQUFRO0lBQ2xDO0VBQUM7SUFBQXpJLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBaU4sa0JBQWtCMEIsU0FBUyxFQUFFO01BQzNCLElBQUksQ0FBQ2hKLE1BQU0sR0FBQXhELGFBQUEsQ0FBQUEsYUFBQSxLQUFPLElBQUksQ0FBQ3dELE1BQU0sR0FBS2dKLFNBQVMsQ0FBQztNQUM1QyxPQUFPLElBQUk7SUFDYjtFQUFDO0lBQUEzSSxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQTRPLHFCQUFxQkMsWUFBWSxFQUFFO01BQ2pDLElBQUksQ0FBQ2xKLE1BQU0sQ0FBQ2lFLFNBQVMsR0FBQXpILGFBQUEsQ0FBQUEsYUFBQSxLQUFPLElBQUksQ0FBQ3dELE1BQU0sQ0FBQ2lFLFNBQVMsR0FBS2lGLFlBQVksQ0FBQztNQUNuRSxPQUFPLElBQUk7SUFDYjtFQUFDO0lBQUE3SSxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQThPLG1CQUFtQkMsSUFBSSxFQUFFSixTQUFTLEVBQUU7TUFDbEMsSUFBQUssWUFBQSxHQUF1QyxJQUFJLENBQUNySixNQUFNO1FBQWxDc0osUUFBUSxHQUFBRCxZQUFBLENBQWpCakYsT0FBTztRQUFZSCxTQUFTLEdBQUFvRixZQUFBLENBQVRwRixTQUFTO01BRW5DLElBQUksQ0FBQyxJQUFBNEQsb0JBQWEsRUFBQ21CLFNBQVMsQ0FBQyxJQUFJLE9BQU9JLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDekQsT0FBTyxJQUFJO01BQ2I7TUFFQSxJQUFNRyxXQUFXLEdBQUdwTyxNQUFNLENBQUNxTyxPQUFPLENBQUNSLFNBQVMsQ0FBQyxDQUFDTCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFBYSxLQUFBLEVBQW1CO1FBQUEsSUFBQUMsS0FBQSxPQUFBQyxlQUFBLGFBQUFGLEtBQUE7VUFBaEJwSixHQUFHLEdBQUFxSixLQUFBO1VBQUVyUCxLQUFLLEdBQUFxUCxLQUFBO1FBQ3JFLE9BQUFsTixhQUFBLENBQUFBLGFBQUEsS0FDS29NLElBQUksV0FBQWpNLGdCQUFBLGlCQUNOMEQsR0FBRyxFQUFHLElBQUF3SCxvQkFBYSxFQUFDZSxJQUFJLENBQUN2SSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUF3SCxvQkFBYSxFQUFDeE4sS0FBSyxDQUFDLEdBQUFtQyxhQUFBLENBQUFBLGFBQUEsS0FBT29NLElBQUksQ0FBQ3ZJLEdBQUcsQ0FBQyxHQUFLaEcsS0FBSyxJQUFJQSxLQUFLO01BRTlGLENBQUMsRUFBRWlQLFFBQVEsQ0FBQ0YsSUFBSSxDQUFDLElBQUkvRSw4QkFBZ0IsQ0FBQztNQUV0QyxJQUFNRCxPQUFPLEdBQUE1SCxhQUFBLENBQUFBLGFBQUEsS0FDUjhNLFFBQVEsV0FBQTNNLGdCQUFBLGlCQUNWeU0sSUFBSSxFQUFHRyxXQUFXLEVBQ3BCO01BRUQsSUFBSSxDQUFDakMsaUJBQWlCLENBQUM7UUFBQ2xELE9BQU8sRUFBUEE7TUFBTyxDQUFDLENBQUM7TUFDakM7TUFDQSxJQUFNd0YsWUFBWSxHQUNoQjNGLFNBQVMsQ0FBQ21GLElBQUksQ0FBQyxLQUFLbkYsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLENBQUNTLE1BQU0sSUFBSTVGLFNBQVMsQ0FBQ21GLElBQUksQ0FBQyxDQUFDNUksSUFBSSxLQUFLc0oscUJBQVEsQ0FBQztNQUVsRixJQUFJRixZQUFZLEVBQUU7UUFDaEIsSUFBSSxDQUFDRyx5QkFBeUIsQ0FBQ2YsU0FBUyxFQUFFSSxJQUFJLENBQUM7UUFDL0MsSUFBSSxDQUFDWSx5QkFBeUIsQ0FBQ2hCLFNBQVMsRUFBRU0sUUFBUSxFQUFFRixJQUFJLENBQUM7UUFDekQsSUFBSSxDQUFDYSxtQkFBbUIsQ0FBQ2pCLFNBQVMsRUFBRU0sUUFBUSxFQUFFRixJQUFJLENBQUM7TUFDckQ7TUFFQSxPQUFPLElBQUk7SUFDYjtFQUFDO0lBQUEvSSxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQTRQLG9CQUFvQmpCLFNBQVMsRUFBRU0sUUFBUSxFQUFFRixJQUFJLEVBQUU7TUFDN0MsSUFBSSxDQUFDSixTQUFTLENBQUNrQixnQkFBZ0IsSUFBSSxDQUFDbEIsU0FBUyxDQUFDa0IsZ0JBQWdCLENBQUNDLE1BQU0sRUFBRTtRQUNyRTtNQUNGO01BRUEsSUFBQUMsYUFBQSxHQUE2QixJQUFJLENBQUNwSyxNQUFNO1FBQWpDb0UsT0FBTyxHQUFBZ0csYUFBQSxDQUFQaEcsT0FBTztRQUFFSCxTQUFTLEdBQUFtRyxhQUFBLENBQVRuRyxTQUFTO01BRXpCLElBQUksQ0FBQ0EsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLEVBQUU7TUFDdEIsSUFBT1MsTUFBTSxHQUFJNUYsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLENBQXpCUyxNQUFNO01BQ2IsSUFBTVEsYUFBYSxHQUFBN04sYUFBQSxDQUFBQSxhQUFBLEtBQ2Q0SCxPQUFPLENBQUNnRixJQUFJLENBQUMsQ0FBQ2lCLGFBQWE7UUFDOUI3TyxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCcU8sTUFBTSxNQUFBUyxtQkFBQSxhQUFNVCxNQUFNO01BQUMsRUFDcEI7TUFDRCxJQUFJLENBQUN2QyxpQkFBaUIsQ0FBQztRQUNyQmxELE9BQU8sRUFBQTVILGFBQUEsQ0FBQUEsYUFBQSxLQUNGNEgsT0FBTyxXQUFBekgsZ0JBQUEsaUJBQ1R5TSxJQUFJLEVBQUE1TSxhQUFBLENBQUFBLGFBQUEsS0FDQTRILE9BQU8sQ0FBQ2dGLElBQUksQ0FBQztVQUNoQmlCLGFBQWEsRUFBYkE7UUFBYTtNQUduQixDQUFDLENBQUM7SUFDSjtJQUNBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxFO0lBQUFoSyxHQUFBO0lBQUFoRyxLQUFBLEVBTUEsU0FBQTBQLDBCQUEwQmYsU0FBUyxFQUFFSSxJQUFJLEVBQUU7TUFBQSxJQUFBbUIscUJBQUE7TUFDekMsSUFBSSxPQUFPdkIsU0FBUyxDQUFDd0IsWUFBWSxLQUFLLFFBQVEsRUFBRTtNQUVoRCxJQUFBQyxhQUFBLEdBQTZCLElBQUksQ0FBQ3pLLE1BQU07UUFBakNvRSxPQUFPLEdBQUFxRyxhQUFBLENBQVByRyxPQUFPO1FBQUVILFNBQVMsR0FBQXdHLGFBQUEsQ0FBVHhHLFNBQVM7TUFDekIsSUFBSSxDQUFDcUQsaUJBQWlCLENBQUM7UUFDckJsRCxPQUFPLEVBQUE1SCxhQUFBLENBQUFBLGFBQUEsS0FDRjRILE9BQU8sV0FBQXpILGdCQUFBLGlCQUNUeU0sSUFBSSxFQUFBNU0sYUFBQSxDQUFBQSxhQUFBLEtBQ0E0SCxPQUFPLENBQUNnRixJQUFJLENBQUM7VUFDaEJjLGdCQUFnQixFQUFBMU4sYUFBQSxDQUFBQSxhQUFBLEtBQ1g0SCxPQUFPLENBQUNnRixJQUFJLENBQUMsQ0FBQ2MsZ0JBQWdCO1lBQ2pDMUosSUFBSSxFQUFFeUQsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLENBQUM1SSxJQUFJO1lBQzFCa0ssS0FBSyxHQUFBSCxxQkFBQSxHQUFFdEcsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLENBQUNTLE1BQU0sY0FBQVUscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3QnhRLE1BQU07WUFDckM0USxRQUFRLEVBQUV6SSxPQUFPLENBQUMrQixTQUFTLENBQUNtRixJQUFJLENBQUMsQ0FBQ3VCLFFBQVEsQ0FBQztZQUMzQ0MsU0FBUyxFQUFFLElBQUksQ0FBQ0MsWUFBWSxDQUFDekIsSUFBSSxDQUFDO1lBQ2xDMEIsV0FBVyxFQUFFLElBQUksQ0FBQ0Msc0JBQXNCLENBQUMzQixJQUFJO1VBQUM7UUFDL0M7TUFHUCxDQUFDLENBQUM7SUFDSjs7SUFFQTtFQUFBO0lBQUEvSSxHQUFBO0lBQUFoRyxLQUFBLEVBQ0EsU0FBQTJQLDBCQUEwQmhCLFNBQVMsRUFBRU0sUUFBUSxFQUFFRixJQUFJLEVBQUU7TUFDbkQ7TUFDQSxJQUFNNEIsWUFBWSxHQUNoQmhDLFNBQVMsQ0FBQ2tCLGdCQUFnQixJQUMxQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQ2UsSUFBSSxDQUN4QixVQUFBNUssR0FBRztRQUFBLE9BQ0QySSxTQUFTLENBQUNrQixnQkFBZ0IsQ0FBQzNCLGNBQWMsQ0FBQ2xJLEdBQUcsQ0FBQyxJQUM5QzJJLFNBQVMsQ0FBQ2tCLGdCQUFnQixDQUFDN0osR0FBRyxDQUFDLEtBQzdCLENBQUNpSixRQUFRLENBQUNGLElBQUksQ0FBQyxJQUFJL0UsOEJBQWdCLEVBQUU2RixnQkFBZ0IsQ0FBQzdKLEdBQUcsQ0FBQztNQUFBLENBQ2hFLENBQUM7TUFDSCxJQUFJLENBQUMySyxZQUFZLEVBQUU7TUFFbkIsSUFBQUUsYUFBQSxHQUE2QixJQUFJLENBQUNsTCxNQUFNO1FBQWpDb0UsT0FBTyxHQUFBOEcsYUFBQSxDQUFQOUcsT0FBTztRQUFFSCxTQUFTLEdBQUFpSCxhQUFBLENBQVRqSCxTQUFTO01BQ3pCLElBQUFrSCxxQkFBQSxHQUEwQi9HLE9BQU8sQ0FBQ2dGLElBQUksQ0FBQyxDQUFDYyxnQkFBZ0I7UUFBakRRLEtBQUssR0FBQVMscUJBQUEsQ0FBTFQsS0FBSztRQUFFQyxRQUFRLEdBQUFRLHFCQUFBLENBQVJSLFFBQVE7TUFDdEIsSUFBTXJHLFVBQVUsR0FBR0wsU0FBUyxDQUFDbUYsSUFBSSxDQUFDO01BQ2xDO01BQ0EsSUFBSXRFLE1BQU07TUFDVixJQUFJa0UsU0FBUyxDQUFDa0IsZ0JBQWdCLENBQUMzQixjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEQsSUFBTXJCLEtBQUssR0FBRyxJQUFBa0UsK0JBQW1CLEVBQUM5RyxVQUFVLENBQUM7UUFFN0MsSUFBSTRDLEtBQUssRUFBRTtVQUNULElBQU1tRSxTQUFTLEdBQUdDLHlCQUFZLENBQUNuUCxNQUFNLENBQUMsVUFBQW9QLEVBQUU7WUFBQSxPQUFJLElBQUFILCtCQUFtQixFQUFDRyxFQUFFLENBQUMsS0FBS3JFLEtBQUs7VUFBQSxFQUFDO1VBRTlFcEMsTUFBTSxHQUFHdUcsU0FBUyxDQUFDRyxJQUFJLENBQUMsVUFBQUQsRUFBRTtZQUFBLE9BQUlBLEVBQUUsQ0FBQzFCLE1BQU0sQ0FBQzlQLE1BQU0sS0FBSzJRLEtBQUs7VUFBQSxFQUFDO1VBRXpELElBQUk1RixNQUFNLElBQUlSLFVBQVUsQ0FBQ3FHLFFBQVEsRUFBRTtZQUNqQzdGLE1BQU0sR0FBRyxJQUFBMkcsNkJBQWlCLEVBQUMsSUFBSSxFQUFFM0csTUFBTSxDQUFDO1VBQzFDO1VBRUEsSUFBSUEsTUFBTSxJQUFJUixVQUFVLENBQUNvSCxRQUFRLEVBQUU7WUFDakM1RyxNQUFNLEdBQUcsSUFBSSxDQUFDNkcsY0FBYyxDQUFDdkMsSUFBSSxFQUFFOUUsVUFBVSxDQUFDb0gsUUFBUSxFQUFFNUcsTUFBTSxDQUFDO1VBQ2pFO1FBQ0Y7TUFDRjtNQUVBLElBQUlrRSxTQUFTLENBQUNrQixnQkFBZ0IsQ0FBQzNCLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUN6RHpELE1BQU0sR0FBRyxJQUFBMkcsNkJBQWlCLEVBQUNkLFFBQVEsRUFBRTdGLE1BQU0sSUFBSVIsVUFBVSxDQUFDO01BQzVEO01BRUEsSUFBSVEsTUFBTSxFQUFFO1FBQ1YsSUFBSSxDQUFDbUUsb0JBQW9CLEtBQUF0TSxnQkFBQSxpQkFBR3lNLElBQUksRUFBR3RFLE1BQU0sQ0FBQyxDQUFDO01BQzdDO0lBQ0Y7RUFBQztJQUFBekUsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFzUixlQUFldkMsSUFBSSxFQUFFc0MsUUFBUSxFQUFFcEgsVUFBVSxFQUFFO01BQUEsSUFBQXNILGtCQUFBO01BQ3pDO01BQ0EsSUFBQUMsbUJBQUEsR0FBd0IxUSxNQUFNLENBQUN3RCxNQUFNLENBQUMsSUFBSSxDQUFDOEYsY0FBYyxDQUFDLENBQUMrRyxJQUFJLENBQUMsVUFBQW5SLEtBQUs7VUFBQSxPQUFJQSxLQUFLLENBQUN3RyxLQUFLLEtBQUt1SSxJQUFJO1FBQUEsRUFBQztRQUF2RmxMLEtBQUssR0FBQTJOLG1CQUFBLENBQUwzTixLQUFLO1FBQUUwQyxNQUFNLEdBQUFpTCxtQkFBQSxDQUFOakwsTUFBTTtNQUNwQixJQUFNSixJQUFJLElBQUFvTCxrQkFBQSxHQUFHLElBQUksQ0FBQzVMLE1BQU0sQ0FBQzlCLEtBQUssQ0FBQyxjQUFBME4sa0JBQUEsdUJBQWxCQSxrQkFBQSxDQUFvQnBMLElBQUk7TUFFckMsSUFBSUEsSUFBSSxLQUFLLFFBQVEsSUFBSUEsSUFBSSxLQUFLLFNBQVMsSUFBSUEsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUM5RCxPQUFPLElBQUksQ0FBQ3NMLHNCQUFzQixDQUFDSixRQUFRLEVBQUUsSUFBSSxDQUFDMUwsTUFBTSxDQUFDWSxNQUFNLENBQUMsRUFBRTBELFVBQVUsQ0FBQztNQUMvRTs7TUFFQTtNQUNBLE9BQU8sSUFBSSxDQUFDeUgscUJBQXFCLENBQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMxTCxNQUFNLENBQUNZLE1BQU0sQ0FBQyxFQUFFMEQsVUFBVSxDQUFDO0lBQzlFO0VBQUM7SUFBQWpFLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBeVIsdUJBQXVCSixRQUFRLEVBQUU5SyxNQUFNLEVBQUUwRCxVQUFVLEVBQUU7TUFDbkQsSUFBTXVGLE1BQU0sR0FBR3ZGLFVBQVUsQ0FBQ3VGLE1BQU07TUFDaEMsSUFBTW1DLGtCQUFrQixHQUFHLEVBQUU7TUFDN0IsSUFBSTFILFVBQVUsQ0FBQzlELElBQUksS0FBS3NKLHFCQUFRLEVBQUU7UUFDaEMsT0FBQXROLGFBQUEsQ0FBQUEsYUFBQSxLQUNLOEgsVUFBVTtVQUNib0gsUUFBUSxFQUFFO1FBQUU7TUFFaEI7TUFDQSxJQUFNTyxXQUFXLEdBQUdQLFFBQVEsQ0FBQ3BRLEtBQUssQ0FBQyxDQUFDLEVBQUV1TyxNQUFNLENBQUM5UCxNQUFNLENBQUMsQ0FBQzhFLEdBQUcsQ0FBQyxVQUFDcU4sSUFBSSxFQUFFbk4sS0FBSyxFQUFLO1FBQ3hFaU4sa0JBQWtCLENBQUMxUCxJQUFJLENBQUM0UCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUVyQyxNQUFNLENBQUM5SyxLQUFLLENBQUMsQ0FBQztNQUNqQyxDQUFDLENBQUM7TUFDRixJQUFNb04sZ0JBQWdCLEdBQUd0QyxNQUFNLENBQUN2TyxLQUFLLENBQUMyUSxXQUFXLENBQUNsUyxNQUFNLEVBQUU4UCxNQUFNLENBQUM5UCxNQUFNLENBQUM7TUFBQyxJQUFBcVMsU0FBQSxHQUFBOVMsMEJBQUEsQ0FFckQ2UyxnQkFBZ0I7UUFBQUUsS0FBQTtNQUFBO1FBQXBDLEtBQUFELFNBQUEsQ0FBQWxTLENBQUEsTUFBQW1TLEtBQUEsR0FBQUQsU0FBQSxDQUFBalMsQ0FBQSxJQUFBQyxJQUFBLEdBQXNDO1VBQUEsSUFBM0JxRyxLQUFLLEdBQUE0TCxLQUFBLENBQUFoUyxLQUFBO1VBQ2QsSUFBTWlTLFFBQVEsR0FBRzFMLE1BQU0sQ0FBQzRLLElBQUksQ0FBQyxVQUFBeE4sQ0FBQztZQUFBLE9BQUksQ0FBQ2dPLGtCQUFrQixDQUFDbEUsUUFBUSxDQUFDOUosQ0FBQyxDQUFDO1VBQUEsRUFBQztVQUNsRSxJQUFJLENBQUNzTyxRQUFRLEVBQUU7WUFDYjtVQUNGO1VBQ0FOLGtCQUFrQixDQUFDMVAsSUFBSSxDQUFDZ1EsUUFBUSxDQUFDO1VBQ2pDTCxXQUFXLENBQUMzUCxJQUFJLENBQUMsQ0FBQ2dRLFFBQVEsRUFBRTdMLEtBQUssQ0FBQyxDQUFDO1FBQ3JDO01BQUMsU0FBQTdGLEdBQUE7UUFBQXdSLFNBQUEsQ0FBQTlSLENBQUEsQ0FBQU0sR0FBQTtNQUFBO1FBQUF3UixTQUFBLENBQUE1UixDQUFBO01BQUE7TUFDRCxPQUFBZ0MsYUFBQSxDQUFBQSxhQUFBLEtBQ0s4SCxVQUFVO1FBQ2JvSCxRQUFRLEVBQUVPO01BQVc7SUFFekI7RUFBQztJQUFBNUwsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUEwUixzQkFBc0JMLFFBQVEsRUFBRTlLLE1BQU0sRUFBRWtFLE1BQU0sRUFBRTtNQUM5QyxJQUFNK0UsTUFBTSxHQUFHL0UsTUFBTSxDQUFDK0UsTUFBTTtNQUM1QixJQUFJb0MsV0FBVyxHQUFHUCxRQUFRLENBQUNwUSxLQUFLLENBQUMsQ0FBQyxFQUFFdU8sTUFBTSxDQUFDOVAsTUFBTSxDQUFDO01BRWxEa1MsV0FBVyxHQUFHQSxXQUFXLENBQUNwTixHQUFHLENBQUMsVUFBQ3FOLElBQUksRUFBRW5OLEtBQUssRUFBSztRQUM3QyxJQUFNMUUsS0FBSyxHQUFHMEUsS0FBSyxLQUFLa04sV0FBVyxDQUFDbFMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUdtUyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQzdSLEtBQUssRUFBRXdQLE1BQU0sQ0FBQzlLLEtBQUssQ0FBQyxDQUFDO01BQy9CLENBQUMsQ0FBQztNQUNGLElBQU1vTixnQkFBZ0IsR0FBR3RDLE1BQU0sQ0FBQ3ZPLEtBQUssQ0FBQzJRLFdBQVcsQ0FBQ2xTLE1BQU0sRUFBRThQLE1BQU0sQ0FBQzlQLE1BQU0sQ0FBQztNQUV4RSxJQUFJb1MsZ0JBQWdCLENBQUNwUyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQy9CLElBQU13UyxjQUFjLEdBQUdiLFFBQVEsQ0FBQzdNLEdBQUcsQ0FBQyxVQUFBMk4sQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQSxFQUFDLENBQUNyUSxNQUFNLENBQUMsVUFBQXFRLENBQUM7VUFBQSxPQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRO1FBQUEsRUFBQztRQUNqRixJQUFNQyxRQUFRLEdBQUczRyxJQUFJLENBQUMvQyxHQUFHLENBQUF4RyxLQUFBLENBQVJ1SixJQUFJLE1BQUF3RSxtQkFBQSxhQUFRaUMsY0FBYyxFQUFBdkYsTUFBQSxFQUFFcEcsTUFBTSxDQUFDQSxNQUFNLENBQUM3RyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUM7UUFDdkUsSUFBTTJTLFNBQVMsR0FBR1QsV0FBVyxDQUFDQSxXQUFXLENBQUNsUyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQU1lLElBQUksR0FBRyxDQUFDMlIsUUFBUSxHQUFHQyxTQUFTLEtBQUtQLGdCQUFnQixDQUFDcFMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNuRWtTLFdBQVcsQ0FBQ0EsV0FBVyxDQUFDbFMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHMlMsU0FBUyxHQUFHNVIsSUFBSTtRQUFDLElBQUE2UixVQUFBLEdBQUFyVCwwQkFBQSxDQUVqQzZTLGdCQUFnQixDQUFDM0MsT0FBTyxDQUFDLENBQUM7VUFBQW9ELE1BQUE7UUFBQTtVQUFuRCxLQUFBRCxVQUFBLENBQUF6UyxDQUFBLE1BQUEwUyxNQUFBLEdBQUFELFVBQUEsQ0FBQXhTLENBQUEsSUFBQUMsSUFBQSxHQUFxRDtZQUFBLElBQUF5UyxZQUFBLE9BQUFsRCxlQUFBLGFBQUFpRCxNQUFBLENBQUF2UyxLQUFBO2NBQXpDTCxDQUFDLEdBQUE2UyxZQUFBO2NBQUVwTSxLQUFLLEdBQUFvTSxZQUFBO1lBQ2xCLElBQU14UyxLQUFLLEdBQUdMLENBQUMsS0FBS21TLGdCQUFnQixDQUFDcFMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcyUyxTQUFTLEdBQUk1UixJQUFJLElBQUlkLENBQUMsR0FBRyxDQUFDLENBQUU7WUFDckZpUyxXQUFXLENBQUMzUCxJQUFJLENBQUMsQ0FBQ2pDLEtBQUssRUFBRW9HLEtBQUssQ0FBQyxDQUFDO1VBQ2xDO1FBQUMsU0FBQTdGLEdBQUE7VUFBQStSLFVBQUEsQ0FBQXJTLENBQUEsQ0FBQU0sR0FBQTtRQUFBO1VBQUErUixVQUFBLENBQUFuUyxDQUFBO1FBQUE7TUFDSDtNQUNBLE9BQUFnQyxhQUFBLENBQUFBLGFBQUEsS0FDS3NJLE1BQU07UUFDVDRHLFFBQVEsRUFBRU87TUFBVztJQUV6Qjs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUhFO0lBQUE1TCxHQUFBO0lBQUFoRyxLQUFBLEVBSUEsU0FBQXlTLGNBQUEsRUFBZ0I7TUFDZCxJQUFPNU0sT0FBTyxHQUFJLElBQUksQ0FBQ0YsTUFBTSxDQUF0QkUsT0FBTztNQUNkLE9BQ0dBLE9BQU8sSUFDUi9FLE1BQU0sQ0FBQ3dELE1BQU0sQ0FBQ3VCLE9BQU8sQ0FBQyxDQUFDbUksS0FBSyxDQUFDLFVBQUFoSyxDQUFDLEVBQUk7UUFDaEMsT0FBTzZELE9BQU8sQ0FBQzdELENBQUMsQ0FBQ3lLLFFBQVEsSUFBS3pLLENBQUMsQ0FBQ2hFLEtBQUssSUFBSWdFLENBQUMsQ0FBQzBHLFFBQVEsR0FBRyxDQUFDLENBQUUsQ0FBQztNQUM1RCxDQUFDLENBQUM7SUFFTjs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMRTtJQUFBMUUsR0FBQTtJQUFBaEcsS0FBQSxFQU1BLFNBQUEwUyxhQUFhQyxTQUFTLEVBQUU7TUFDdEIsSUFBSSxDQUFDQSxTQUFTLEVBQUU7UUFDZCxPQUFPLEtBQUs7TUFDZDtNQUNBLE9BQU85SyxPQUFPLENBQUM4SyxTQUFTLENBQUNDLElBQUksSUFBSUQsU0FBUyxDQUFDQyxJQUFJLENBQUNsVCxNQUFNLENBQUM7SUFDekQ7RUFBQztJQUFBc0csR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUE2UyxjQUFBLEVBQWdCO01BQ2QsT0FBTyxJQUFJLENBQUMxTSxJQUFJLElBQUksSUFBSSxDQUFDc00sYUFBYSxDQUFDLENBQUM7SUFDMUM7RUFBQztJQUFBek0sR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUE4UyxrQkFBa0JGLElBQUksRUFBRTtNQUN0QixPQUNHLElBQUksQ0FBQ3pNLElBQUksSUFDVixJQUFJLENBQUNzTSxhQUFhLENBQUMsQ0FBQyxJQUNwQixJQUFJLENBQUNDLFlBQVksQ0FBQ0UsSUFBSSxDQUFDLElBQ3ZCLE9BQU8sSUFBSSxDQUFDMUcsV0FBVyxLQUFLLFVBQVU7SUFFMUM7RUFBQztJQUFBbEcsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUErUyxjQUFjM0osVUFBVSxFQUFFRCxXQUFXLEVBQUVjLFVBQVUsRUFBRTtNQUNqRCxJQUFJQSxVQUFVLENBQUM5RCxJQUFJLEtBQUtzSixxQkFBUSxFQUFFO1FBQ2hDLE9BQU8sVUFBQ3VELENBQUMsRUFBRTVNLEtBQUssRUFBSztVQUNuQixJQUFBNk0sSUFBQSxHQUFrQixJQUFBQyxZQUFHLEVBQUM5TSxLQUFLLENBQUM7WUFBckIxRSxDQUFDLEdBQUF1UixJQUFBLENBQUR2UixDQUFDO1lBQUV5UixDQUFDLEdBQUFGLElBQUEsQ0FBREUsQ0FBQztZQUFFQyxDQUFDLEdBQUFILElBQUEsQ0FBREcsQ0FBQztVQUNkLE9BQU8sQ0FBQzFSLENBQUMsRUFBRXlSLENBQUMsRUFBRUMsQ0FBQyxDQUFDLENBQUN4QyxJQUFJLENBQUN5QyxLQUFLLENBQUMsR0FBR0MsOEJBQWEsR0FBRyxDQUFDNVIsQ0FBQyxFQUFFeVIsQ0FBQyxFQUFFQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztNQUNILENBQUMsTUFBTSxJQUFJN1QsS0FBSyxDQUFDQyxPQUFPLENBQUN5SyxVQUFVLENBQUNvSCxRQUFRLENBQUMsRUFBRTtRQUM3QyxJQUFNUSxJQUFJLEdBQUcsSUFBSTBCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCdEosVUFBVSxDQUFDb0gsUUFBUSxDQUFDaFAsT0FBTyxDQUFDLFVBQUFtUixLQUFBLEVBQVk7VUFBQSxJQUFBQyxLQUFBLE9BQUFuRSxlQUFBLGFBQUFrRSxLQUFBO1lBQVZFLENBQUMsR0FBQUQsS0FBQTtZQUFFelAsQ0FBQyxHQUFBeVAsS0FBQTtVQUNoQzVCLElBQUksQ0FBQ3RLLEdBQUcsQ0FBQ21NLENBQUMsRUFBRSxPQUFPMVAsQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFBUyxvQkFBUSxFQUFDVCxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQzs7UUFFRjtRQUNBLElBQU1zQyxLQUFLLEdBQUdxTiwyQkFBVSxDQUFDdkssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUNuQzdDLE1BQU0sQ0FBQ2hILEtBQUssQ0FBQzZCLElBQUksQ0FBQ3lRLElBQUksQ0FBQ2pRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQjRFLEtBQUssQ0FBQ2pILEtBQUssQ0FBQzZCLElBQUksQ0FBQ3lRLElBQUksQ0FBQ3ZOLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNoQ3NQLE9BQU8sQ0FBQ04sOEJBQWEsQ0FBQztRQUN6QixPQUFPaE4sS0FBSztNQUNkO01BRUEsT0FBTyxJQUFJLENBQUN1TixrQkFBa0IsQ0FBQ3pLLFVBQVUsRUFBRUQsV0FBVyxFQUFFYyxVQUFVLENBQUN1RixNQUFNLENBQUNoTCxHQUFHLENBQUNDLG9CQUFRLENBQUMsQ0FBQztJQUMxRjtFQUFDO0lBQUF1QixHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQThULHNCQUFzQnROLEtBQUssRUFBRXVOLFlBQVksRUFBRTtNQUN6QyxJQUFJQyxZQUFZLEdBQUdELFlBQVksSUFBSS9RLGFBQWE7TUFDaEQsSUFBSSxDQUFDd0QsS0FBSyxFQUFFO1FBQ1YsT0FBTztVQUFBLE9BQU13TixZQUFZO1FBQUE7TUFDM0I7TUFFQSxJQUFNQyxPQUFPLEdBQUcsSUFBSVYsR0FBRyxDQUFDLENBQUM7TUFFekIsSUFBSS9NLEtBQUssQ0FBQzBOLFlBQVksRUFBRTtRQUN0QkYsWUFBWSxHQUFHeE4sS0FBSyxDQUFDME4sWUFBWTtNQUNuQztNQUFDLElBQUFDLFVBQUEsR0FBQWxWLDBCQUFBLENBQ2dDdUgsS0FBSyxDQUFDNE4sU0FBUztRQUFBQyxNQUFBO01BQUE7UUFBaEQsS0FBQUYsVUFBQSxDQUFBdFUsQ0FBQSxNQUFBd1UsTUFBQSxHQUFBRixVQUFBLENBQUFyVSxDQUFBLElBQUFDLElBQUEsR0FBa0Q7VUFBQSxJQUFBdVUsWUFBQSxHQUFBRCxNQUFBLENBQUFyVSxLQUFBO1lBQXRDQSxLQUFLLEdBQUFzVSxZQUFBLENBQUx0VSxLQUFLO1lBQUV1VSxTQUFTLEdBQUFELFlBQUEsQ0FBVEMsU0FBUztVQUMxQixJQUFJQSxTQUFTLEVBQUU7WUFDYk4sT0FBTyxDQUFDMU0sR0FBRyxDQUFDdkgsS0FBSyxFQUFFdVUsU0FBUyxDQUFDO1VBQy9CO1FBQ0Y7O1FBRUE7TUFBQSxTQUFBaFUsR0FBQTtRQUFBNFQsVUFBQSxDQUFBbFUsQ0FBQSxDQUFBTSxHQUFBO01BQUE7UUFBQTRULFVBQUEsQ0FBQWhVLENBQUE7TUFBQTtNQUNBLElBQU1tRyxLQUFLLEdBQUcsSUFBQWtPLHFCQUFZLEVBQUMsQ0FBQyxDQUN6QmpPLE1BQU0sQ0FBQ2hILEtBQUssQ0FBQzZCLElBQUksQ0FBQzZTLE9BQU8sQ0FBQ3JTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsQzRFLEtBQUssQ0FBQ2pILEtBQUssQ0FBQzZCLElBQUksQ0FBQzZTLE9BQU8sQ0FBQzNQLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuQ3NQLE9BQU8sQ0FBQ0ksWUFBWSxDQUFDO01BQ3hCLE9BQU8xTixLQUFLO0lBQ2Q7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFORTtJQUFBTixHQUFBO0lBQUFoRyxLQUFBLEVBT0EsU0FBQXlVLHNCQUFBQyxLQUFBLEVBQTJFO01BQUEsSUFBQUMsTUFBQTtNQUFBLElBQUFDLGtCQUFBLEdBQUFGLEtBQUEsQ0FBcERHLFlBQVk7UUFBWkEsWUFBWSxHQUFBRCxrQkFBQSxjQUFHblIsbUJBQW1CLEdBQUFtUixrQkFBQTtRQUFFdkksYUFBYSxHQUFBcUksS0FBQSxDQUFickksYUFBYTtNQUN0RSxJQUFNeUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDOztNQUU3QjtNQUNBaFUsTUFBTSxDQUFDYyxJQUFJLENBQUMsSUFBSSxDQUFDd0ksY0FBYyxDQUFDLENBQUMvSCxPQUFPLENBQUMsVUFBQTZLLE9BQU8sRUFBSTtRQUNsRCxJQUFBNkgscUJBQUEsR0FZSUosTUFBSSxDQUFDdkssY0FBYyxDQUFDOEMsT0FBTyxDQUFDO1VBWDlCckosS0FBSyxHQUFBa1IscUJBQUEsQ0FBTGxSLEtBQUs7VUFDTG1SLEtBQUssR0FBQUQscUJBQUEsQ0FBTEMsS0FBSztVQUNMMU8sS0FBSyxHQUFBeU8scUJBQUEsQ0FBTHpPLEtBQUs7VUFDTEMsTUFBTSxHQUFBd08scUJBQUEsQ0FBTnhPLE1BQU07VUFDTkMsS0FBSyxHQUFBdU8scUJBQUEsQ0FBTHZPLEtBQUs7VUFDTHlPLFFBQVEsR0FBQUYscUJBQUEsQ0FBUkUsUUFBUTtVQUNScE8sWUFBWSxHQUFBa08scUJBQUEsQ0FBWmxPLFlBQVk7VUFDWnFPLGlCQUFpQixHQUFBSCxxQkFBQSxDQUFqQkcsaUJBQWlCO1VBQ2pCdk8sU0FBUyxHQUFBb08scUJBQUEsQ0FBVHBPLFNBQVM7VUFDVEYsZ0JBQWdCLEdBQUFzTyxxQkFBQSxDQUFoQnRPLGdCQUFnQjtVQUNoQjBPLFdBQVcsR0FBQUoscUJBQUEsQ0FBWEksV0FBVztRQUdiLElBQU1DLGNBQWMsR0FBR3ZOLE9BQU8sQ0FDNUIsQ0FBQ3ZCLEtBQUssSUFBSUcsZ0JBQWdCLEtBQUtDLCtCQUFjLENBQUMyTyxRQUFRLEtBQUtWLE1BQUksQ0FBQ2hQLE1BQU0sQ0FBQzlCLEtBQUssQ0FDOUUsQ0FBQztRQUVELElBQUl1UixjQUFjLEVBQUU7VUFDbEIsSUFBTUUsSUFBSSxHQUFHLENBQUNYLE1BQUksQ0FBQ2hQLE1BQU0sQ0FBQ1csS0FBSyxDQUFDLEVBQUVxTyxNQUFJLENBQUNoUCxNQUFNLENBQUNZLE1BQU0sQ0FBQyxFQUFFb08sTUFBSSxDQUFDaFAsTUFBTSxDQUFDaUUsU0FBUyxDQUFDcEQsS0FBSyxDQUFDLENBQUM7VUFDcEYsSUFBTStPLE9BQU8sR0FBR1AsS0FBSyxJQUFJTCxNQUFJLENBQUNoUCxNQUFNLENBQUNpRSxTQUFTLENBQUNvTCxLQUFLLENBQUM7VUFDckQ7VUFDQTtVQUNBLElBQU1RLFdBQVcsR0FBR2IsTUFBSSxDQUFDaFAsTUFBTSxDQUFDOUIsS0FBSyxDQUFDO1VBQ3RDLElBQU00UixnQkFBZ0IsR0FBR2QsTUFBSSxDQUFDaFAsTUFBTSxDQUFDaUUsU0FBUyxDQUFDdUwsV0FBVyxDQUFDO1VBRTNELElBQU1PLGFBQWEsR0FDakJqUCxnQkFBZ0IsS0FBS0MsK0JBQWMsQ0FBQzJPLFFBQVEsR0FDeEN0UixhQUFhLEdBQ2IwQyxnQkFBZ0IsS0FBS0MsK0JBQWMsQ0FBQ04sS0FBSyxHQUN6Q3VPLE1BQUksQ0FBQzVCLGFBQWEsQ0FBQTdRLEtBQUEsQ0FBbEJ5UyxNQUFJLEVBQWtCVyxJQUFJLENBQUMsR0FDM0I3TyxnQkFBZ0IsS0FBS0MsK0JBQWMsQ0FBQ2lQLFlBQVksR0FDaERoQixNQUFJLENBQUNiLHFCQUFxQixDQUN4QmEsTUFBSSxDQUFDaFAsTUFBTSxDQUFDaUUsU0FBUyxDQUFDcEQsS0FBSyxDQUFDLEVBQzVCbU8sTUFBSSxDQUFDaFAsTUFBTSxDQUFDaUUsU0FBUyxDQUFDZ00sZ0JBQ3hCLENBQUMsR0FDRGpCLE1BQUksQ0FBQ2Qsa0JBQWtCLENBQUEzUixLQUFBLENBQXZCeVMsTUFBSSxFQUF1QlcsSUFBSSxDQUFBM0ksTUFBQSxFQUFFNEksT0FBTyxHQUFDO1VBRS9DVCxrQkFBa0IsQ0FBQ0csUUFBUSxDQUFDLEdBQUcsVUFBQXRSLENBQUM7WUFBQSxPQUM5QmdSLE1BQUksQ0FBQ2tCLHNCQUFzQixDQUFDO2NBQzFCM0ksT0FBTyxFQUFQQSxPQUFPO2NBQ1BiLGFBQWEsRUFBYkEsYUFBYTtjQUNiL0YsS0FBSyxFQUFFb1AsYUFBYTtjQUNwQjlDLElBQUksRUFBRWlDLFlBQVksQ0FBQ3hJLGFBQWEsQ0FBQyxDQUFDMUksQ0FBQyxDQUFDO2NBQ3BDRSxLQUFLLEVBQUUyUixXQUFXO2NBQ2xCTSxZQUFZLEVBQUVMLGdCQUFnQjtjQUM5QjlPLFNBQVMsRUFBVEE7WUFDRixDQUFDLENBQUM7VUFBQTtRQUNOLENBQUMsTUFBTSxJQUFJLE9BQU91TyxpQkFBaUIsS0FBSyxVQUFVLEVBQUU7VUFDbERKLGtCQUFrQixDQUFDRyxRQUFRLENBQUMsR0FBR0MsaUJBQWlCLENBQUNQLE1BQUksQ0FBQ2hQLE1BQU0sQ0FBQztRQUMvRCxDQUFDLE1BQU07VUFDTG1QLGtCQUFrQixDQUFDRyxRQUFRLENBQUMsR0FDMUIsT0FBT3BPLFlBQVksS0FBSyxVQUFVLEdBQUdBLFlBQVksQ0FBQzhOLE1BQUksQ0FBQ2hQLE1BQU0sQ0FBQyxHQUFHa0IsWUFBWTtRQUNqRjtRQUVBLElBQUksRUFBRW9PLFFBQVEsSUFBSUgsa0JBQWtCLENBQUMsRUFBRTtVQUNyQ2lCLGVBQU8sQ0FBQ0MsSUFBSSw0Q0FBQXJKLE1BQUEsQ0FBNENzSSxRQUFRLElBQUkvSCxPQUFPLENBQUUsQ0FBQztRQUNoRjtNQUNGLENBQUMsQ0FBQztNQUVGLE9BQU80SCxrQkFBa0I7SUFDM0I7RUFBQztJQUFBOU8sR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUE2VCxtQkFBbUJ2TixLQUFLLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFd08sS0FBSyxFQUFFO01BQzlDLElBQUkxTyxLQUFLLEtBQUsrQyw0QkFBVyxDQUFDNE0sT0FBTyxFQUFFO1FBQ2pDO1FBQ0EsT0FBT3RDLDJCQUFVLENBQUNyTixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3ZCQyxNQUFNLENBQUNBLE1BQU0sQ0FBQ3RGLEtBQUssQ0FBQyxDQUFDLEVBQUV1RixLQUFLLENBQUM5RyxNQUFNLENBQUMsQ0FBQyxDQUNyQzhHLEtBQUssQ0FBQ0EsS0FBSyxDQUFDLENBQ1pvTixPQUFPLENBQUNOLDhCQUFhLENBQUM7TUFDM0I7O01BRUE7TUFDQTtNQUNBLElBQU00QyxnQkFBZ0IsR0FBRzNQLE1BQU0sSUFBS0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLNFAsUUFBUztNQUM5RSxJQUFNQyxZQUFZLEdBQUd6QywyQkFBVSxDQUFDcUIsS0FBSyxHQUFHLFFBQVEsR0FBRzFPLEtBQUssQ0FBQztNQUN6RDtNQUNBLElBQUkrUCxNQUFNLEdBQUdELFlBQVksQ0FBQyxDQUFDO01BQzNCLElBQUk3UCxNQUFNLElBQUksQ0FBQzJQLGdCQUFnQixFQUFFO1FBQy9CRyxNQUFNLEdBQUdBLE1BQU0sQ0FBQzlQLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDO01BQ2hDO01BQ0EsT0FBTzhQLE1BQU0sQ0FBQzdQLEtBQUssQ0FBQ3dPLEtBQUssR0FBR3pPLE1BQU0sR0FBR0MsS0FBSyxDQUFDO0lBQzdDOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxFO0lBQUFSLEdBQUE7SUFBQWhHLEtBQUEsRUFNQSxTQUFBc1csZ0JBQWdCakssYUFBYSxFQUFFa0ssV0FBVyxFQUFFO01BQzFDO01BQ0E7TUFDQSxJQUFNQyxVQUFVLEdBQ2RuSyxhQUFhLENBQUNvSyxPQUFPLENBQUMsQ0FBQyxHQUFHeFQsZUFBZSxHQUNyQyxJQUFBeVQsaUNBQWEsRUFBQ3JLLGFBQWEsRUFBRXBKLGVBQWUsQ0FBQyxHQUM3Q29KLGFBQWE7TUFFbkIsSUFBTXNLLE1BQU0sR0FBR0gsVUFBVSxDQUFDSSxRQUFRLENBQUNMLFdBQVcsQ0FBQztNQUUvQyxJQUFNTSxTQUFTLEdBQUcsSUFBQUMsMEJBQWUsRUFBQ0gsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ3ZELElBQU1JLFNBQVMsR0FBRyxJQUFBRCwwQkFBZSxFQUFDSCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFFekQsSUFBSSxDQUFDRSxTQUFTLElBQUksQ0FBQ0UsU0FBUyxFQUFFO1FBQzVCLE9BQU8sSUFBSTtNQUNiO01BRUEsT0FBTyxDQUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFRixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakU7RUFBQztJQUFBN1EsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFnWCxtQkFBbUJDLGtCQUFrQixFQUFFO01BQ3JDLElBQU1DLGNBQWMsR0FBRyxJQUFBQywrQkFBa0IsRUFBQ0Ysa0JBQWtCLEVBQUUsSUFBSSxDQUFDRyxzQkFBc0IsQ0FBQztNQUMxRixJQUFJLENBQUNBLHNCQUFzQixHQUFHSCxrQkFBa0I7TUFFaEQsT0FBT0MsY0FBYztJQUN2QjtFQUFDO0lBQUFsUixHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQTZWLHVCQUFBd0IsS0FBQSxFQVVHO01BQUEsSUFURG5LLE9BQU8sR0FBQW1LLEtBQUEsQ0FBUG5LLE9BQU87UUFDUDVHLEtBQUssR0FBQStRLEtBQUEsQ0FBTC9RLEtBQUs7UUFDTHNNLElBQUksR0FBQXlFLEtBQUEsQ0FBSnpFLElBQUk7UUFDSi9PLEtBQUssR0FBQXdULEtBQUEsQ0FBTHhULEtBQUs7UUFDTHdJLGFBQWEsR0FBQWdMLEtBQUEsQ0FBYmhMLGFBQWE7UUFFYnlKLFlBQVksR0FBQXVCLEtBQUEsQ0FBWnZCLFlBQVk7UUFBQXdCLGVBQUEsR0FBQUQsS0FBQSxDQUNaMVEsU0FBUztRQUFUQSxTQUFTLEdBQUEyUSxlQUFBLGNBQUcxUSwrQkFBYyxHQUFBMFEsZUFBQTtRQUFBQyxjQUFBLEdBQUFGLEtBQUEsQ0FDMUJHLFFBQVE7UUFBUkEsUUFBUSxHQUFBRCxjQUFBLGNBQUczVCxvQkFBb0IsR0FBQTJULGNBQUE7TUFFL0IsSUFBSUUsZ0JBQWdCO01BQ3BCLElBQU90UixJQUFJLEdBQUl0QyxLQUFLLENBQWJzQyxJQUFJO01BQ1gsSUFBTW5HLEtBQUssR0FBR3dYLFFBQVEsQ0FBQzNULEtBQUssRUFBRStPLElBQUksQ0FBQztNQUNuQyxJQUFNOEUsYUFBYSxHQUFHLElBQUksQ0FBQy9SLE1BQU0sQ0FBQ2lFLFNBQVMsQ0FBQyxJQUFJLENBQUNRLGNBQWMsQ0FBQzhDLE9BQU8sQ0FBQyxDQUFDMUcsS0FBSyxDQUFDO01BQy9FLElBQU1tUixZQUFZLEdBQUcsSUFBSSxDQUFDaFMsTUFBTSxDQUFDLElBQUksQ0FBQ3lFLGNBQWMsQ0FBQzhDLE9BQU8sQ0FBQyxDQUFDckosS0FBSyxDQUFDO01BRXBFLElBQUksQ0FBQTZULGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFdlIsSUFBSSxNQUFLc0oscUJBQVEsRUFBRTtRQUNwQyxJQUFNbUksV0FBVyxHQUFHO1VBQ2xCdlMsRUFBRSxFQUFFc1MsWUFBWSxDQUFDRSxXQUFXO1VBQzVCMVcsSUFBSSxFQUFFd1csWUFBWSxDQUFDRSxXQUFXO1VBQzlCbk4sUUFBUSxFQUFFaU4sWUFBWSxDQUFDRyxjQUFjO1VBQ3JDaFUsYUFBYSxFQUFFLFNBQUFBLGNBQUFILENBQUMsRUFBSTtZQUNsQixPQUFPMEksYUFBYSxDQUFDMEwsT0FBTyxDQUFDcFUsQ0FBQyxDQUFDZSxLQUFLLEVBQUVpVCxZQUFZLENBQUNHLGNBQWMsQ0FBQztVQUNwRTtRQUNGLENBQUM7UUFFREwsZ0JBQWdCLEdBQUdELFFBQVEsQ0FBQ0ksV0FBVyxFQUFFaEYsSUFBSSxDQUFDO01BQ2hELENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQWxGLDZCQUFrQixFQUFDMU4sS0FBSyxDQUFDLEVBQUU7UUFDckMsT0FBTzJHLFNBQVM7TUFDbEI7TUFFQSxJQUFJcVIsY0FBYztNQUNsQixJQUFJN1IsSUFBSSxLQUFLOFIsZ0NBQWUsQ0FBQ0MsU0FBUyxFQUFFO1FBQ3RDO1FBQ0E7UUFDQUYsY0FBYyxHQUFHMVIsS0FBSyxDQUFDLElBQUk2UixJQUFJLENBQUNuWSxLQUFLLENBQUMsRUFBRXlYLGdCQUFnQixDQUFDO01BQzNELENBQUMsTUFBTTtRQUNMTyxjQUFjLEdBQUcxUixLQUFLLENBQUN0RyxLQUFLLEVBQUV5WCxnQkFBZ0IsQ0FBQztNQUNqRDtNQUVBLElBQUksQ0FBQyxJQUFBL0osNkJBQWtCLEVBQUNzSyxjQUFjLENBQUMsRUFBRTtRQUN2Q0EsY0FBYyxHQUFHclIsU0FBUztNQUM1QjtNQUVBLE9BQU9xUixjQUFjO0lBQ3ZCO0VBQUM7SUFBQWhTLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBb1ksV0FBVzdTLElBQUksRUFBRTtNQUNmLElBQUksQ0FBQ0EsSUFBSSxHQUFBcEQsYUFBQSxDQUFBQSxhQUFBLEtBQU8sSUFBSSxDQUFDb0QsSUFBSSxHQUFLQSxJQUFJLENBQUM7SUFDckM7RUFBQztJQUFBUyxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQXFZLGtCQUFrQkMsUUFBUSxFQUFFO01BQzFCLElBQUksQ0FBQzlTLGNBQWMsR0FBRzhTLFFBQVE7SUFDaEM7RUFBQztJQUFBdFMsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUF1WSxzQkFBQUMsTUFBQSxFQUFvRDtNQUFBLElBQTdCdk0sYUFBYSxHQUFBdU0sTUFBQSxDQUFidk0sYUFBYTtRQUFFNUcsRUFBRSxHQUFBbVQsTUFBQSxDQUFGblQsRUFBRTtRQUFFb1QsT0FBTyxHQUFBRCxNQUFBLENBQVBDLE9BQU87TUFDL0MsSUFBTzVTLE9BQU8sR0FBSSxJQUFJLENBQUNGLE1BQU0sQ0FBdEJFLE9BQU87TUFFZCxPQUFBMUQsYUFBQTtRQUNFdVcsT0FBTyxFQUFFO1VBQUNDLFNBQVMsRUFBRXRULEVBQUU7VUFBRW9ULE9BQU8sRUFBUEEsT0FBTztVQUFFNVMsT0FBTyxFQUFQQSxPQUFPO1VBQUVvRyxhQUFhLEVBQWJBO1FBQWEsQ0FBQztRQUN6RDJNLE9BQU8sRUFBRTtVQUFDRCxTQUFTLEVBQUV0VCxFQUFFO1VBQUVvVCxPQUFPLEVBQVBBLE9BQU87VUFBRTVTLE9BQU8sRUFBUEE7UUFBTztNQUFDLEdBQ3ZDLENBQUMsSUFBSSxDQUFDRixNQUFNLENBQUNrRSxTQUFTLElBQUksRUFBRSxFQUFFeUUsTUFBTSxDQUNyQyxVQUFDQyxJQUFJLEVBQUVzSyxFQUFFLEVBQUVsWixDQUFDO1FBQUEsT0FBQXdDLGFBQUEsQ0FBQUEsYUFBQSxLQUNQb00sSUFBSSxXQUFBak0sZ0JBQUEseUNBQUFxSyxNQUFBLENBQ2tCaE4sQ0FBQyxHQUFLa1osRUFBRSxDQUFDaFYsS0FBSyxHQUFHZ1YsRUFBRSxDQUFDaFYsS0FBSyxDQUFDMUMsSUFBSSxHQUFHLElBQUk7TUFBQSxDQUM5RCxFQUNGLENBQUMsQ0FDSCxDQUFDO0lBRUw7RUFBQztJQUFBNkUsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUE4WSxXQUFXOU0sUUFBUSxFQUFFK00sWUFBWSxFQUFFO01BQ2pDLElBQUksQ0FBQyxJQUFJLENBQUNwVCxNQUFNLENBQUMyQyxNQUFNLEVBQUU7UUFDdkIsT0FBTyxDQUFDLENBQUM7TUFDWDtNQUNBLElBQU0wUSxPQUFPLEdBQUcsSUFBSSxDQUFDQyxVQUFVLENBQUNqTixRQUFRLENBQUM7TUFDekMsSUFBT0ssYUFBYSxHQUFJMk0sT0FBTyxDQUF4QjNNLGFBQWE7TUFFcEIsSUFBSSxDQUFDNk0seUJBQXlCLENBQUNGLE9BQU8sQ0FBQztNQUN2QyxJQUFJLENBQUNHLG9CQUFvQixDQUFDSCxPQUFPLENBQUM7TUFFbEMsSUFBTXpDLFdBQVcsR0FBRyxJQUFJLENBQUM2QyxtQkFBbUIsQ0FBQy9NLGFBQWEsQ0FBQztNQUMzRCxJQUFNNEssa0JBQWtCLEdBQUcsSUFBSSxDQUFDc0IscUJBQXFCLENBQUNTLE9BQU8sQ0FBQztNQUM5RCxJQUFNOUIsY0FBYyxHQUFHLElBQUksQ0FBQ0Ysa0JBQWtCLENBQUNDLGtCQUFrQixDQUFDO01BRWxFLElBQUlDLGNBQWMsQ0FBQzBCLE9BQU8sRUFBRTtRQUMxQixJQUFJLENBQUNTLGVBQWUsQ0FBQ2hOLGFBQWEsRUFBRWtLLFdBQVcsQ0FBQztNQUNsRDtNQUVBLElBQUkzRCxJQUFJLEdBQUcsRUFBRTtNQUViLElBQUksQ0FBQ3NFLGNBQWMsQ0FBQ3dCLE9BQU8sSUFBSUssWUFBWSxJQUFJQSxZQUFZLENBQUNuRyxJQUFJLEVBQUU7UUFDaEU7UUFDQUEsSUFBSSxHQUFHbUcsWUFBWSxDQUFDbkcsSUFBSTtNQUMxQixDQUFDLE1BQU07UUFDTEEsSUFBSSxHQUFHLElBQUksQ0FBQzBHLHNCQUFzQixDQUFDTixPQUFPLEVBQUV6QyxXQUFXLENBQUM7TUFDMUQ7TUFFQSxPQUFPO1FBQUMzRCxJQUFJLEVBQUpBLElBQUk7UUFBRXNFLGNBQWMsRUFBZEE7TUFBYyxDQUFDO0lBQy9COztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFKRTtJQUFBbFIsR0FBQTtJQUFBaEcsS0FBQSxFQUtBLFNBQUFrWiwwQkFBMEJGLE9BQU8sRUFBRTtNQUFBLElBQUFPLE1BQUE7TUFBQSxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFDZ0M7VUFBQSxJQUFBQyxxQkFBQTtVQUE1RCxJQUFBQyxpQkFBQSxHQUFBQyxjQUFBLENBQUFDLEVBQUE7WUFBTy9WLEtBQUssR0FBQTZWLGlCQUFBLENBQUw3VixLQUFLO1lBQUUyQyxLQUFLLEdBQUFrVCxpQkFBQSxDQUFMbFQsS0FBSztVQUN0QixJQUFNcVQsUUFBUSxHQUFHTixNQUFJLENBQUM1VCxNQUFNLENBQUM5QixLQUFLLENBQUM7VUFDbkMsSUFBTWlXLG1CQUFtQixJQUFBTCxxQkFBQSxHQUFHRixNQUFJLENBQUM1VCxNQUFNLENBQUNpRSxTQUFTLENBQUNwRCxLQUFLLENBQUMsY0FBQWlULHFCQUFBLHVCQUE1QkEscUJBQUEsQ0FBOEJoSyxRQUFRO1VBQ2xFLElBQUksQ0FBQ29LLFFBQVEsRUFBRTtZQUFBO2NBQUE3VixDQUFBO1lBQUE7VUFFZjtVQUNBLElBQUkrVixlQUFlLEdBQUdmLE9BQU8sQ0FBQ2pSLE1BQU0sQ0FBQ29KLElBQUksQ0FBQyxVQUFBNkksRUFBRTtZQUFBLE9BQUlBLEVBQUUsQ0FBQzdZLElBQUksS0FBSzBZLFFBQVEsQ0FBQzFZLElBQUk7VUFBQSxFQUFDLElBQUksSUFBSTtVQUNsRixJQUFJMlksbUJBQW1CLEVBQUU7WUFDdkJDLGVBQWUsR0FBQTVYLGFBQUEsQ0FBQUEsYUFBQSxLQUNWNFgsZUFBZTtjQUNsQmxDLFdBQVcsRUFBRWtDLGVBQWUsQ0FBQ2xDLFdBQVcsSUFBSWdDLFFBQVEsQ0FBQ2hDLFdBQVc7Y0FDaEVDLGNBQWMsRUFBRWlDLGVBQWUsQ0FBQ2pDLGNBQWMsSUFBSStCLFFBQVEsQ0FBQy9CO1lBQWMsRUFDMUU7VUFDSDtVQUNBeUIsTUFBSSxDQUFDdE0saUJBQWlCLEtBQUEzSyxnQkFBQSxpQkFBR3VCLEtBQUssRUFBR2tXLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFBQUUsSUFBQTtNQWZELFNBQUFMLEVBQUEsTUFBQUQsY0FBQSxHQUE2QjdZLE1BQU0sQ0FBQ3dELE1BQU0sQ0FBQyxJQUFJLENBQUM4RixjQUFjLENBQUMsRUFBQXdQLEVBQUEsR0FBQUQsY0FBQSxDQUFBamEsTUFBQSxFQUFBa2EsRUFBQTtRQUFBSyxJQUFBLEdBQUFULEtBQUE7UUFBQSxJQUFBUyxJQUFBLFNBQUFBLElBQUEsQ0FBQWpXLENBQUE7TUFBQTtJQWdCakU7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBFO0lBQUFnQyxHQUFBO0lBQUFoRyxLQUFBLEVBUUEsU0FBQWthLGtCQUFrQmxPLFFBQVEsRUFBRW1PLFNBQVMsRUFBRTtNQUFBLElBQUFDLE1BQUE7TUFDckMsSUFBTUMsS0FBSyxHQUFHLElBQUksQ0FBQ3BCLFVBQVUsQ0FBQ2pOLFFBQVEsQ0FBQztNQUN2QyxJQUFJLENBQUNxTyxLQUFLLEVBQUU7UUFDVixPQUFPLElBQUk7TUFDYjtNQUNBdlosTUFBTSxDQUFDd0QsTUFBTSxDQUFDLElBQUksQ0FBQzhGLGNBQWMsQ0FBQyxDQUFDL0gsT0FBTyxDQUFDLFVBQUE2SyxPQUFPLEVBQUk7UUFDcEQsSUFBTzVHLEtBQUssR0FBSTRHLE9BQU8sQ0FBaEI1RyxLQUFLO1FBQ1osSUFBTWdVLFNBQVMsR0FBR0YsTUFBSSxDQUFDelUsTUFBTSxDQUFDVyxLQUFLLENBQUM7O1FBRXBDO1FBQ0E7UUFDQSxJQUFJLENBQUM2VCxTQUFTLElBQUlHLFNBQVMsS0FBS2pSLDRCQUFXLENBQUM0TSxPQUFPLEVBQUU7VUFDbkQsSUFBTzFQLE1BQU0sR0FBSTJHLE9BQU8sQ0FBakIzRyxNQUFNO1VBQ2IsSUFBTWdVLGFBQWEsR0FBR0gsTUFBSSxDQUFDSSxvQkFBb0IsQ0FBQ0gsS0FBSyxFQUFFbk4sT0FBTyxDQUFDO1VBQy9Ea04sTUFBSSxDQUFDbk4saUJBQWlCLEtBQUEzSyxnQkFBQSxpQkFBR2lFLE1BQU0sRUFBR2dVLGFBQWEsQ0FBQyxDQUFDO1FBQ25EO01BQ0YsQ0FBQyxDQUFDO01BRUYsT0FBTyxJQUFJO0lBQ2I7RUFBQztJQUFBdlUsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFpWixXQUFXak4sUUFBUSxFQUFFO01BQ25CLE9BQU8sSUFBSSxDQUFDckcsTUFBTSxDQUFDMkMsTUFBTSxHQUFHMEQsUUFBUSxDQUFDLElBQUksQ0FBQ3JHLE1BQU0sQ0FBQzJDLE1BQU0sQ0FBQyxHQUFHLElBQUk7SUFDakU7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7RUFIRTtJQUFBdEMsR0FBQTtJQUFBaEcsS0FBQSxFQUlBLFNBQUFtTixzQkFBc0JELE9BQU8sRUFBRTtNQUM3QixJQUFJLENBQUN1TixpQkFBaUIsQ0FBQ3ZOLE9BQU8sQ0FBQztNQUMvQixJQUFJLENBQUN3TixhQUFhLENBQUN4TixPQUFPLENBQUM7SUFDN0I7O0lBRUE7QUFDRjtBQUNBO0VBRkU7SUFBQWxILEdBQUE7SUFBQWhHLEtBQUEsRUFHQSxTQUFBeWEsa0JBQWtCdk4sT0FBTyxFQUFFO01BQ3pCLElBQU15TixhQUFhLEdBQUcsSUFBSSxDQUFDdlEsY0FBYyxDQUFDOEMsT0FBTyxDQUFDO01BQ2xELElBQU9ySixLQUFLLEdBQTJDOFcsYUFBYSxDQUE3RDlXLEtBQUs7UUFBRTRDLGdCQUFnQixHQUF5QmtVLGFBQWEsQ0FBdERsVSxnQkFBZ0I7UUFBRW1VLG1CQUFtQixHQUFJRCxhQUFhLENBQXBDQyxtQkFBbUI7TUFFbkQsSUFBSSxJQUFJLENBQUNqVixNQUFNLENBQUM5QixLQUFLLENBQUMsRUFBRTtRQUN0QjtRQUNBLElBQU1nWCwwQkFBMEIsR0FDOUJELG1CQUFtQixJQUFJRSwrQ0FBOEIsQ0FBQ3JVLGdCQUFnQixDQUFDO1FBRXpFLElBQUksQ0FBQ29VLDBCQUEwQixDQUFDcE4sUUFBUSxDQUFDLElBQUksQ0FBQzlILE1BQU0sQ0FBQzlCLEtBQUssQ0FBQyxDQUFDc0MsSUFBSSxDQUFDLEVBQUU7VUFDakU7VUFDQTtVQUNBLElBQUksQ0FBQzhHLGlCQUFpQixLQUFBM0ssZ0JBQUEsaUJBQUd1QixLQUFLLEVBQUcsSUFBSSxDQUFDLENBQUM7UUFDekM7TUFDRjtJQUNGOztJQUVBO0FBQ0Y7QUFDQTtFQUZFO0lBQUFtQyxHQUFBO0lBQUFoRyxLQUFBLEVBR0EsU0FBQTBhLGNBQWN4TixPQUFPLEVBQUU7TUFDckIsSUFBTXlOLGFBQWEsR0FBRyxJQUFJLENBQUN2USxjQUFjLENBQUM4QyxPQUFPLENBQUM7TUFDbEQsSUFBTzVHLEtBQUssR0FBV3FVLGFBQWEsQ0FBN0JyVSxLQUFLO1FBQUVFLEtBQUssR0FBSW1VLGFBQWEsQ0FBdEJuVSxLQUFLO01BQ25CLElBQ0UsQ0FBQ0YsS0FBSyxJQUNMLElBQUksQ0FBQ29LLHNCQUFzQixDQUFDbEssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDYixNQUFNLENBQUNXLEtBQUssQ0FBQyxLQUFLK0MsNEJBQVcsQ0FBQ2dNLFFBQVMsRUFDbkY7UUFDQTtRQUNBO01BQ0Y7TUFDQSxJQUFNMEYsWUFBWSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDOU4sT0FBTyxDQUFDO01BQ2xEO01BQ0E7TUFDQSxJQUFJLENBQUM2TixZQUFZLENBQUN0TixRQUFRLENBQUMsSUFBSSxDQUFDOUgsTUFBTSxDQUFDVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzlDLElBQUksQ0FBQzJHLGlCQUFpQixLQUFBM0ssZ0JBQUEsaUJBQUdnRSxLQUFLLEVBQUd5VSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwRDtJQUNGOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFKRTtJQUFBL1UsR0FBQTtJQUFBaEcsS0FBQSxFQUtBLFNBQUFnYixnQkFBZ0I5TixPQUFPLEVBQUU7TUFDdkIsSUFBTXlOLGFBQWEsR0FBRyxJQUFJLENBQUN2USxjQUFjLENBQUM4QyxPQUFPLENBQUM7TUFDbEQsSUFBT3JKLEtBQUssR0FBNkI4VyxhQUFhLENBQS9DOVcsS0FBSztRQUFFeUMsS0FBSyxHQUFzQnFVLGFBQWEsQ0FBeENyVSxLQUFLO1FBQUVHLGdCQUFnQixHQUFJa1UsYUFBYSxDQUFqQ2xVLGdCQUFnQjtNQUVyQyxPQUFPLElBQUksQ0FBQ2QsTUFBTSxDQUFDOUIsS0FBSyxDQUFDLEdBQ3JCb1gsMkJBQVUsQ0FBQyxJQUFJLENBQUN0VixNQUFNLENBQUM5QixLQUFLLENBQUMsQ0FBQ3NDLElBQUksQ0FBQyxDQUFDRyxLQUFLLENBQUNHLGdCQUFnQixDQUFDLEdBQzNELENBQUMsSUFBSSxDQUFDYixxQkFBcUIsQ0FBQyxDQUFDLENBQUNVLEtBQUssQ0FBQyxDQUFDO0lBQzNDO0VBQUM7SUFBQU4sR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFrYix5QkFBeUJsQyxPQUFPLEVBQUU5TCxPQUFPLEVBQUU7TUFDekMsSUFBTXlOLGFBQWEsR0FBRyxJQUFJLENBQUN2USxjQUFjLENBQUM4QyxPQUFPLENBQUM7TUFDbEQsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQ0QsT0FBTyxDQUFDO01BQ25DO01BQ0EsSUFBTXFOLGFBQWEsR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDeEIsT0FBTyxFQUFFMkIsYUFBYSxDQUFDO01BQ3ZFLElBQUksQ0FBQzFOLGlCQUFpQixLQUFBM0ssZ0JBQUEsaUJBQUdxWSxhQUFhLENBQUNwVSxNQUFNLEVBQUdnVSxhQUFhLENBQUMsQ0FBQztJQUNqRTtFQUFDO0lBQUF2VSxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQW1iLCtCQUFBLEVBQWlDO01BQUEsSUFBQUMsTUFBQTtNQUMvQixJQUFNQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO01BQ3pCdmEsTUFBTSxDQUFDd0QsTUFBTSxDQUFDLElBQUksQ0FBQzhGLGNBQWMsQ0FBQyxDQUFDL0gsT0FBTyxDQUFDLFVBQUFzWSxhQUFhLEVBQUk7UUFDMUQ7UUFDQSxJQUFPMUYsUUFBUSxHQUFzRDBGLGFBQWEsQ0FBM0UxRixRQUFRO1VBQUVwUixLQUFLLEdBQStDOFcsYUFBYSxDQUFqRTlXLEtBQUs7VUFBRXlDLEtBQUssR0FBd0NxVSxhQUFhLENBQTFEclUsS0FBSztVQUFFQyxNQUFNLEdBQWdDb1UsYUFBYSxDQUFuRHBVLE1BQU07VUFBRUMsS0FBSyxHQUF5Qm1VLGFBQWEsQ0FBM0NuVSxLQUFLO1VBQUVLLFlBQVksR0FBVzhULGFBQWEsQ0FBcEM5VCxZQUFZO1VBQUVtTyxLQUFLLEdBQUkyRixhQUFhLENBQXRCM0YsS0FBSztRQUVqRXFHLGNBQWMsQ0FBQ3BHLFFBQVEsQ0FBQyxHQUFBOVMsYUFBQSxLQUFBRyxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQ3JCdUIsS0FBSyxFQUFHdVgsTUFBSSxDQUFDelYsTUFBTSxDQUFDOUIsS0FBSyxDQUFDLEdBQzFCeUMsS0FBSyxFQUFHOFUsTUFBSSxDQUFDelYsTUFBTSxDQUFDVyxLQUFLLENBQUMsR0FDMUJDLE1BQU0sRUFBRzZVLE1BQUksQ0FBQ3pWLE1BQU0sQ0FBQ1ksTUFBTSxDQUFDLEdBQzVCQyxLQUFLLEVBQUc0VSxNQUFJLENBQUN6VixNQUFNLENBQUNpRSxTQUFTLENBQUNwRCxLQUFLLENBQUMsbUJBQ3ZCLE9BQU9LLFlBQVksS0FBSyxVQUFVLEdBQUdBLFlBQVksQ0FBQ3VVLE1BQUksQ0FBQ3pWLE1BQU0sQ0FBQyxHQUFHa0IsWUFBWSxHQUN2Rm1PLEtBQUssT0FBQTFTLGdCQUFBLGlCQUFLMFMsS0FBSyxFQUFHb0csTUFBSSxDQUFDelYsTUFBTSxDQUFDaUUsU0FBUyxDQUFDb0wsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pEO01BQ0gsQ0FBQyxDQUFDO01BQ0YsT0FBT3FHLGNBQWM7SUFDdkI7RUFBQztJQUFBclYsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUF3YSxxQkFBcUJ4QixPQUFPLEVBQUUyQixhQUFhLEVBQUU7TUFDM0MsSUFBT3JVLEtBQUssR0FBSXFVLGFBQWEsQ0FBdEJyVSxLQUFLO01BQ1osSUFBTXpDLEtBQUssR0FBRyxJQUFJLENBQUM4QixNQUFNLENBQUNnVixhQUFhLENBQUM5VyxLQUFLLENBQUM7TUFDOUMsSUFBSSxDQUFDQSxLQUFLLElBQUksQ0FBQ3lDLEtBQUssRUFBRTtRQUNwQjtRQUNBLE9BQU9wRCxhQUFhO01BQ3RCO01BRUEsSUFBTW9YLFNBQVMsR0FBRyxJQUFJLENBQUMzVSxNQUFNLENBQUNXLEtBQUssQ0FBQztNQUNwQyxJQUFNZ1YsWUFBWSxHQUFHdEMsT0FBTyxDQUFDalIsTUFBTSxDQUFDb0osSUFBSSxDQUFDLFVBQUFoUixDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDZ0IsSUFBSSxLQUFLMEMsS0FBSyxDQUFDMUMsSUFBSTtNQUFBLEVBQUM7TUFDcEUsSUFBSSxDQUFDbVosU0FBUyxJQUFJLENBQUNnQixZQUFZLEVBQUU7UUFDL0I7UUFDQSxPQUFPcFksYUFBYTtNQUN0QjtNQUVBLE9BQU84VixPQUFPLENBQUN1QyxvQkFBb0IsQ0FBQ0QsWUFBWSxFQUFFaEIsU0FBUyxDQUFDLElBQUlwWCxhQUFhO0lBQy9FO0VBQUM7SUFBQThDLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBbVoscUJBQXFCSCxPQUFPLEVBQUU7TUFBQSxJQUFBd0MsTUFBQTtNQUM1QixJQUFJLENBQUN4QyxPQUFPLEVBQUU7UUFDWixPQUFPLElBQUk7TUFDYjtNQUNBbFksTUFBTSxDQUFDd0QsTUFBTSxDQUFDLElBQUksQ0FBQzhGLGNBQWMsQ0FBQyxDQUFDL0gsT0FBTyxDQUFDLFVBQUE2SyxPQUFPLEVBQUk7UUFDcEQsSUFBTXdLLGFBQWEsR0FBRzhELE1BQUksQ0FBQzdWLE1BQU0sQ0FBQ2lFLFNBQVMsQ0FBQ3NELE9BQU8sQ0FBQzFHLEtBQUssQ0FBQztRQUMxRCxJQUFNM0MsS0FBSyxHQUFHMlgsTUFBSSxDQUFDN1YsTUFBTSxDQUFDdUgsT0FBTyxDQUFDckosS0FBSyxDQUFDO1FBRXhDLElBQUksQ0FBQTZULGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFdlIsSUFBSSxNQUFLc0oscUJBQVEsSUFBSTVMLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUVnVSxXQUFXLEVBQUU7VUFDMUQsSUFBTXlELFlBQVksR0FBR3RDLE9BQU8sQ0FBQ2pSLE1BQU0sQ0FBQ29KLElBQUksQ0FBQyxVQUFBaFIsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQ2dCLElBQUksS0FBSzBDLEtBQUssQ0FBQ2dVLFdBQVc7VUFBQSxFQUFDO1VBQzNFLElBQU1ySSxNQUFNLEdBQUd3SixPQUFPLENBQ25CdUMsb0JBQW9CLENBQUNELFlBQVksRUFBRWpTLDRCQUFXLENBQUM0TSxPQUFPLENBQUMsQ0FDdkR6UixHQUFHLENBQUMsVUFBQTJOLENBQUM7WUFBQSxPQUFJLElBQUFzSixnQ0FBb0IsRUFBQ3RKLENBQUMsQ0FBQztVQUFBLEVBQUM7VUFDcENxSixNQUFJLENBQUM1TSxvQkFBb0IsS0FBQXRNLGdCQUFBLGlCQUN0QjRLLE9BQU8sQ0FBQzFHLEtBQUssRUFBQXJFLGFBQUEsQ0FBQUEsYUFBQSxLQUFPdVYsYUFBYTtZQUFFbEksTUFBTSxFQUFOQTtVQUFNLEdBQzNDLENBQUM7UUFDSjtNQUNGLENBQUMsQ0FBQztNQUVGLE9BQU8sSUFBSTtJQUNiO0VBQUM7SUFBQXhKLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBMGIseUJBQXlCMVAsUUFBUSxFQUFFO01BQUEsSUFBQTJQLE1BQUE7TUFDakMsSUFBTTNDLE9BQU8sR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQ2pOLFFBQVEsQ0FBQztNQUN6QyxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiO01BQ0Y7TUFFQSxJQUFNeEcsY0FBYyxHQUFHMUUsTUFBTSxDQUFDYyxJQUFJLENBQUMsSUFBSSxDQUFDd0ksY0FBYyxDQUFDLENBQUNrRSxNQUFNLENBQUMsVUFBQ3NOLE9BQU8sRUFBRTFPLE9BQU8sRUFBSztRQUNuRixJQUFBMk8scUJBQUEsR0FBcUNGLE1BQUksQ0FBQ3ZSLGNBQWMsQ0FBQzhDLE9BQU8sQ0FBQztVQUExRDFHLEtBQUssR0FBQXFWLHFCQUFBLENBQUxyVixLQUFLO1VBQVNtUixZQUFZLEdBQUFrRSxxQkFBQSxDQUFuQmhZLEtBQUs7UUFDbkIsSUFBTTZULGFBQWEsR0FBR2lFLE1BQUksQ0FBQ2hXLE1BQU0sQ0FBQ2lFLFNBQVMsQ0FBQ3BELEtBQUssQ0FBQztRQUNsRCxJQUFNM0MsS0FBSyxHQUFHOFgsTUFBSSxDQUFDaFcsTUFBTSxDQUFDZ1MsWUFBWSxDQUFDO1FBRXZDLElBQUksQ0FBQUQsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUV2UixJQUFJLE1BQUtzSixxQkFBUSxJQUFJNUwsS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRWdVLFdBQVcsRUFBRTtVQUMxRCxJQUFNeUQsWUFBWSxHQUFHdEMsT0FBTyxDQUFDalIsTUFBTSxDQUFDb0osSUFBSSxDQUFDLFVBQUFoUixDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDZ0IsSUFBSSxLQUFLMEMsS0FBSyxDQUFDZ1UsV0FBVztVQUFBLEVBQUM7VUFDM0UsSUFBTWlFLE1BQU0sR0FBRzlDLE9BQU8sQ0FBQytDLGVBQWUsQ0FBQ2xZLEtBQUssRUFBRXlYLFlBQVksQ0FBQztVQUMzRE0sT0FBTyxDQUFDMU8sT0FBTyxDQUFDLEdBQUc0TyxNQUFNO1FBQzNCO1FBQ0EsT0FBT0YsT0FBTztNQUNoQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDTixJQUFJLENBQUN2RCxpQkFBaUIsQ0FBQzdTLGNBQWMsQ0FBQztJQUN4QztFQUFDO0lBQUFRLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBZ2MsaUJBQWlCQyxVQUFVLEVBQUU7TUFDM0IsT0FBTyxJQUFJLENBQUNDLGNBQWMsQ0FBQ0QsVUFBVSxDQUFDLElBQUlBLFVBQVUsQ0FBQzdQLE1BQU0sR0FBRzZQLFVBQVUsQ0FBQzdQLE1BQU0sR0FBRyxJQUFJO0lBQ3hGO0VBQUM7SUFBQXBHLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBa2MsZUFBZUQsVUFBVSxFQUFFO01BQUEsSUFBQUUsaUJBQUEsRUFBQUMscUJBQUE7TUFDekIsT0FBTyxDQUFBSCxVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRUksTUFBTSxLQUFJLENBQUFKLFVBQVUsYUFBVkEsVUFBVSx3QkFBQUUsaUJBQUEsR0FBVkYsVUFBVSxDQUFFSyxLQUFLLGNBQUFILGlCQUFBLHdCQUFBQyxxQkFBQSxHQUFqQkQsaUJBQUEsQ0FBbUJqWCxLQUFLLGNBQUFrWCxxQkFBQSx1QkFBeEJBLHFCQUFBLENBQTBCL1csRUFBRSxNQUFLLElBQUksQ0FBQ0EsRUFBRTtJQUN2RTtFQUFDO0lBQUFXLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBdWMscUJBQXFCQyxRQUFRLEVBQUU7TUFDN0IsSUFBTUMsYUFBYSxHQUFHM2IsTUFBTSxDQUFDd0QsTUFBTSxDQUFDLElBQUksQ0FBQzhGLGNBQWMsQ0FBQyxDQUFDK0csSUFBSSxDQUFDLFVBQUF1TCxFQUFFO1FBQUEsT0FBSUEsRUFBRSxDQUFDclcsUUFBUSxLQUFLLFFBQVE7TUFBQSxFQUFDO01BRTdGLElBQUksQ0FBQ29XLGFBQWEsRUFBRTtRQUNsQixPQUFPLENBQUM7TUFDVjtNQUVBLElBQU01WSxLQUFLLEdBQUc0WSxhQUFhLENBQUM1WSxLQUFLO01BQ2pDLElBQU84WSxNQUFNLEdBQUksSUFBSSxDQUFDaFgsTUFBTSxDQUFDaUUsU0FBUyxDQUEvQitTLE1BQU07O01BRWI7TUFDQSxPQUFPLENBQUMsSUFBSSxDQUFDaFgsTUFBTSxDQUFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHOFksTUFBTSxJQUFJLElBQUksQ0FBQ3ZSLGFBQWEsQ0FBQ29SLFFBQVEsQ0FBQztJQUN6RTtFQUFDO0lBQUF4VyxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQTRjLGVBQUEsRUFBaUI7TUFDZixJQUFNSCxhQUFhLEdBQUczYixNQUFNLENBQUN3RCxNQUFNLENBQUMsSUFBSSxDQUFDOEYsY0FBYyxDQUFDLENBQUMrRyxJQUFJLENBQUMsVUFBQXVMLEVBQUU7UUFBQSxPQUFJQSxFQUFFLENBQUNyVyxRQUFRLEtBQUssUUFBUTtNQUFBLEVBQUM7TUFFN0YsSUFBSSxDQUFDb1csYUFBYSxJQUFJLElBQUksQ0FBQzlXLE1BQU0sQ0FBQzhXLGFBQWEsQ0FBQzVZLEtBQUssQ0FBQyxFQUFFO1FBQ3RELE9BQU8sQ0FBQztNQUNWO01BRUEsT0FBTyxJQUFJLENBQUM4QixNQUFNLENBQUNpRSxTQUFTLENBQUMrUyxNQUFNO0lBQ3JDO0VBQUM7SUFBQTNXLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBNmMsaUJBQUEsRUFBbUI7TUFDakIsSUFBQUMsYUFBQSxHQUE0QyxJQUFJLENBQUNuWCxNQUFNO1FBQWhEZ0UsV0FBVyxHQUFBbVQsYUFBQSxDQUFYblQsV0FBVztRQUFFRCxTQUFTLEdBQUFvVCxhQUFBLENBQVRwVCxTQUFTO1FBQUVFLFNBQVMsR0FBQWtULGFBQUEsQ0FBVGxULFNBQVM7TUFDeEMsSUFBT21ULFdBQVcsR0FBWW5ULFNBQVMsQ0FBaENtVCxXQUFXO1FBQUVKLE1BQU0sR0FBSS9TLFNBQVMsQ0FBbkIrUyxNQUFNO01BQzFCLElBQU05WSxLQUFLLEdBQUc4RixXQUFXLElBQUlELFNBQVM7TUFDdEMsT0FBTytCLElBQUksQ0FBQ3VSLElBQUksQ0FBRW5aLEtBQUssSUFBSWtaLFdBQVcsR0FBR0EsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHSixNQUFPLENBQUM7SUFDcEU7RUFBQztJQUFBM1csR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFpZCx5QkFBeUIvWCxLQUFLLEVBQUU7TUFBQSxJQUFBZ1ksT0FBQTtNQUM5QixPQUFPaFksS0FBSyxDQUFDMEwsSUFBSSxDQUFDLFVBQUEzQyxDQUFDO1FBQUEsT0FBSSxDQUFDaVAsT0FBSSxDQUFDQywyQkFBMkIsQ0FBQzFQLFFBQVEsQ0FBQ1EsQ0FBQyxDQUFDO01BQUEsRUFBQztJQUN2RTtFQUFDO0lBQUFqSSxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQW9kLDBCQUEwQkMsaUJBQWlCLEVBQUVDLGNBQWMsRUFBRTtNQUMzRCxJQUFPQyxLQUFLLEdBQUlGLGlCQUFpQixDQUExQkUsS0FBSztNQUVaLE9BQU87UUFDTDtRQUNBQyxhQUFhLEVBQUUsQ0FBQ0QsS0FBSyxDQUFDcFYsT0FBTztRQUM3QnNWLGNBQWMsRUFBRUYsS0FBSyxDQUFDNVgsTUFBTSxDQUFDbUIsSUFBSSxHQUFHLElBQUk7UUFDeEN3VyxjQUFjLEVBQUVBLGNBQWMsSUFBSSxRQUFRO1FBQzFDSSxlQUFlLEVBQUVILEtBQUssQ0FBQ3BWO01BQ3pCLENBQUM7SUFDSDtFQUFDO0lBQUFuQyxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQTJkLHlCQUFBQyxNQUFBLEVBQTJFO01BQUEsSUFBakRDLEdBQUcsR0FBQUQsTUFBQSxDQUFIQyxHQUFHO1FBQUVDLFNBQVMsR0FBQUYsTUFBQSxDQUFURSxTQUFTO1FBQUV0QixRQUFRLEdBQUFvQixNQUFBLENBQVJwQixRQUFRO1FBQUV1QixPQUFPLEdBQUFILE1BQUEsQ0FBUEcsT0FBTztRQUFFQyxXQUFXLEdBQUFKLE1BQUEsQ0FBWEksV0FBVztNQUN0RSxJQUFNQyxrQkFBa0IsR0FBRyxJQUFBQyxpQ0FBcUIsRUFBQ0YsV0FBVyxDQUFDO01BQzdELE9BQUE3YixhQUFBLENBQUFBLGFBQUEsS0FDSzhiLGtCQUFrQjtRQUNyQjVZLEVBQUUsRUFBRSxJQUFJLENBQUNBLEVBQUU7UUFDWHdZLEdBQUcsRUFBSEEsR0FBRztRQUNITSxnQkFBZ0IsRUFBRUMsdUJBQWlCLENBQUNDLE1BQU07UUFDMUNDLFFBQVEsRUFBRSxJQUFJLENBQUNDLGdCQUFnQjtRQUMvQkMsYUFBYSxFQUFFLElBQUk7UUFDbkJDLFVBQVUsRUFBRTtVQUFDQyxTQUFTLEVBQUU3VyxPQUFPLENBQUMyVSxRQUFRLENBQUNtQyxVQUFVLElBQUksSUFBSSxDQUFDaFosTUFBTSxDQUFDaUUsU0FBUyxDQUFDZ1YsUUFBUTtRQUFDLENBQUM7UUFDdkYzVixNQUFNLEVBQUUsSUFBSSxDQUFDdEQsTUFBTSxDQUFDc0QsTUFBTTtRQUMxQlYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDNUMsTUFBTSxDQUFDNEMsZ0JBQWdCO1FBQzlDO1FBQ0FzVyxPQUFPLEVBQUUsSUFBSSxDQUFDbFosTUFBTSxDQUFDaUUsU0FBUyxDQUFDaVYsT0FBTztRQUN0QzlWLGNBQWMsRUFBRSxJQUFJLENBQUNwRCxNQUFNLENBQUNvRCxjQUFjO1FBQzFDO1FBQ0ErVixVQUFVLEdBQUczYixtQkFBbUIsRUFBQXdKLE1BQUEsS0FBQXNELG1CQUFBLGFBQUtnTyxrQkFBa0IsQ0FBQ2EsVUFBVSxFQUFDO1FBQ25FQyxXQUFXLEVBQUVqQixTQUFTLEdBQUdBLFNBQVMsQ0FBQ2lCLFdBQVcsR0FBRzVaLFNBQVM7UUFDMUQ7UUFDQTRZLE9BQU8sRUFBRSxJQUFJLENBQUNwWSxNQUFNLENBQUNrRCxTQUFTLElBQUlrVjtNQUFPO0lBRTdDO0VBQUM7SUFBQS9YLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBZ2YsMEJBQUEsRUFBNEI7TUFDMUIsT0FBTztRQUNMM1osRUFBRSxLQUFBc0gsTUFBQSxDQUFLLElBQUksQ0FBQ3RILEVBQUUsYUFBVTtRQUN4QmlaLFFBQVEsRUFBRSxLQUFLO1FBQ2ZFLGFBQWEsRUFBRSxJQUFJO1FBQ25CTCxnQkFBZ0IsRUFBRUMsdUJBQWlCLENBQUNDO01BQ3RDLENBQUM7SUFDSDtFQUFDO0lBQUFyWSxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQWlmLHFCQUFBQyxNQUFBLEVBRUVDLFVBQVUsRUFDVjtNQUFBLElBRkM1SSxXQUFXLEdBQUEySSxNQUFBLENBQVgzSSxXQUFXO1FBQUU2SSxTQUFTLEdBQUFGLE1BQUEsQ0FBVEUsU0FBUztRQUFFQyxXQUFXLEdBQUFILE1BQUEsQ0FBWEcsV0FBVztRQUFFaEUsY0FBYyxHQUFBNkQsTUFBQSxDQUFkN0QsY0FBYztRQUFFaUUsV0FBVyxHQUFBSixNQUFBLENBQVhJLFdBQVc7TUFHakUsSUFBTzFNLElBQUksR0FBSXVNLFVBQVUsQ0FBbEJ2TSxJQUFJO01BQ1gsSUFBQTJNLGFBQUEsR0FBc0MsSUFBSSxDQUFDNVosTUFBTTtRQUExQ2tFLFNBQVMsR0FBQTBWLGFBQUEsQ0FBVDFWLFNBQVM7UUFBRXRCLGdCQUFnQixHQUFBZ1gsYUFBQSxDQUFoQmhYLGdCQUFnQjtNQUNsQyxJQUFNdVcsVUFBVSxNQUFBblMsTUFBQSxLQUFBc0QsbUJBQUEsYUFBT3FQLFdBQVcsQ0FBQ1IsVUFBVSxJQUFFdmIsd0JBQXdCLEVBQUM7TUFFeEUsSUFBSSxDQUFDcVAsSUFBSSxJQUFJLENBQUNBLElBQUksQ0FBQzRNLFVBQVUsSUFBSSxDQUFDNU0sSUFBSSxDQUFDNE0sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM1TSxJQUFJLENBQUM0TSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sRUFBRTtRQUNuRixPQUFPLEVBQUU7TUFDWDtNQUVBLElBQUFDLFVBQUEsT0FBQXBRLGVBQUEsYUFBb0N6RixTQUFTO1FBQXRDOFYsU0FBUyxHQUFBRCxVQUFBO1FBQUVFLGNBQWMsR0FBQUYsVUFBQTtNQUNoQyxJQUNFRyxTQUFTLEdBTVBGLFNBQVMsQ0FOWEUsU0FBUztRQUNUQyxNQUFNLEdBS0pILFNBQVMsQ0FMWEcsTUFBTTtRQUNDQyxRQUFRLEdBSWJKLFNBQVMsQ0FKWHZaLEtBQUs7UUFDRTRaLFNBQVMsR0FHZEwsU0FBUyxDQUhYOWIsS0FBSztRQUNMb2MsWUFBWSxHQUVWTixTQUFTLENBRlhNLFlBQVk7UUFDTnpXLFNBQVMsR0FDYm1XLFNBQVMsQ0FEWDdZLElBQUk7TUFFTixJQUFBb1osTUFBQSxHQUtJTixjQUFjLElBQUksQ0FBQyxDQUFDO1FBSmZPLGlCQUFpQixHQUFBRCxNQUFBLENBQXhCOVosS0FBSztRQUNFZ2EsY0FBYyxHQUFBRixNQUFBLENBQXJCcmMsS0FBSztRQUNTd2MscUJBQXFCLEdBQUFILE1BQUEsQ0FBbkNELFlBQVk7UUFDTkssa0JBQWtCLEdBQUFKLE1BQUEsQ0FBeEJwWixJQUFJO01BR04sT0FBTyxDQUNMLElBQUl5Wix1QkFBZSxDQUFBcGUsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDZG1kLFdBQVc7UUFFZDtRQUNBO1FBQ0FqYSxFQUFFLEtBQUFzSCxNQUFBLENBQUssSUFBSSxDQUFDdEgsRUFBRSxPQUFBc0gsTUFBQSxDQUFJcVQsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUU3ZSxJQUFJLE9BQUF3TCxNQUFBLENBQUl5VCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRWpmLElBQUksV0FBUTtRQUNqRXlSLElBQUksRUFBRUEsSUFBSSxDQUFDQSxJQUFJO1FBQ2ZySyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtRQUNoQnVXLFVBQVUsRUFBVkEsVUFBVTtRQUVWMEIsWUFBWSxFQUFFLE1BQU07UUFDcEJDLGdCQUFnQixFQUFFLElBQUk7UUFDdEJDLGNBQWMsS0FBQS9ULE1BQUEsQ0FBSyxJQUFJLENBQUN0SCxFQUFFLFlBQVM7UUFFbkNvYSxPQUFPLEVBQUU3TSxJQUFJLENBQUM0TSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU87UUFDbkNNLFFBQVEsRUFBUkEsUUFBUTtRQUNSdlcsU0FBUyxFQUFUQSxTQUFTO1FBQ1R5VyxZQUFZLEVBQVpBO01BQVksR0FFUkcsY0FBYyxJQUFJO1FBQ3BCTyxnQkFBZ0IsRUFBRS9OLElBQUksQ0FBQzRNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsT0FBTztRQUM1Q1UsaUJBQWlCLEVBQWpCQSxpQkFBaUI7UUFDakJHLGtCQUFrQixFQUFsQkEsa0JBQWtCO1FBQ2xCRCxxQkFBcUIsRUFBckJBO01BQ0YsQ0FBQztRQUVEO1FBQ0E5SixXQUFXLEVBQVhBLFdBQVc7UUFDWDZJLFNBQVMsRUFBVEEsU0FBUztRQUNUQyxXQUFXLEVBQVhBLFdBQVc7UUFDWHVCLGFBQWEsRUFBRWQsTUFBTTtRQUNyQmUsb0JBQW9CLEVBQUVoQixTQUFTO1FBRS9CO1FBQ0FpQixVQUFVLEVBQUUsYUFBYTtRQUN6QkMsWUFBWSxFQUFFO1VBQUNDLEdBQUcsRUFBRTtRQUFJLENBQUM7UUFDekJDLFVBQVUsRUFBRSxHQUFHO1FBQ2ZDLFlBQVksRUFBRSxDQUFDO1FBQ2Z6QyxVQUFVLEVBQUU7VUFDVjtVQUNBQyxTQUFTLEVBQUU7UUFDYixDQUFDO1FBRUR5QyxjQUFjLEVBQUV2TyxJQUFJLENBQUN1TyxjQUFjO1FBQ25DOUYsY0FBYyxFQUFBbFosYUFBQSxDQUFBQSxhQUFBLEtBQ1RrWixjQUFjO1VBQ2pCb0UsT0FBTyxFQUFFTyxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRTdlLElBQUk7VUFDeEI0ZSxRQUFRLEVBQUVDLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFNVosS0FBSztVQUMxQndhLGFBQWEsRUFBRWpCLFNBQVMsQ0FBQ0csTUFBTTtVQUMvQmUsb0JBQW9CLEVBQUVsQixTQUFTLENBQUNFLFNBQVM7VUFDekNjLGdCQUFnQixFQUFFUCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRWpmO1FBQUk7TUFDdkMsRUFDRixDQUFDLENBQ0g7SUFDSDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMRTtJQUFBNkUsR0FBQTtJQUFBaEcsS0FBQSxFQU1BLFNBQUFvaEIsNEJBQTRCQyxlQUFlLEVBQWU7TUFBQSxJQUFiQyxJQUFJLEdBQUFsZixTQUFBLENBQUExQyxNQUFBLFFBQUEwQyxTQUFBLFFBQUErQyxTQUFBLEdBQUEvQyxTQUFBLE1BQUcsSUFBSTtNQUN0RCxJQUFNbWYsV0FBVyxHQUFHLElBQUksQ0FBQzFFLGdCQUFnQixDQUFDLENBQUM7TUFFM0MsT0FBTyxVQUFBbFosQ0FBQyxFQUFJO1FBQ1YsSUFBTTZkLFNBQVMsR0FDWixPQUFPSCxlQUFlLEtBQUssVUFBVSxHQUFJQSxlQUFlLENBQUMxZCxDQUFDLENBQUMsR0FBRzBkLGVBQWU7UUFDaEYsSUFBTUksTUFBTSxHQUFHNVosT0FBTyxDQUFDMlosU0FBUyxDQUFDO1FBQ2pDRixJQUFJLEdBQUdHLE1BQU0sR0FBR0gsSUFBSSxHQUFHLElBQUk7UUFDM0IsSUFBTUksR0FBRyxHQUFHRCxNQUFNLEdBQUdELFNBQVMsR0FBR3hlLGFBQWE7UUFDOUMsT0FBTztVQUNMcUMsRUFBRSxLQUFBc0gsTUFBQSxDQUFLK1UsR0FBRyxRQUFBL1UsTUFBQSxDQUFLNFUsV0FBVyxPQUFBNVUsTUFBQSxDQUFJMlUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUU7VUFDaERJLEdBQUcsRUFBSEEsR0FBRztVQUNIQyxLQUFLLEVBQUVKLFdBQVc7VUFDbEJLLE1BQU0sRUFBRUwsV0FBVztVQUNuQkQsSUFBSSxFQUFKQTtRQUNGLENBQUM7TUFDSCxDQUFDO0lBQ0g7RUFBQztJQUFBdGIsR0FBQTtJQUFBaEcsS0FBQSxFQUVELFNBQUFzWix1QkFBdUJ1SSxXQUFXLEVBQUV0TCxXQUFXLEVBQUU7TUFDL0M7TUFDQSxPQUFPLEVBQUU7SUFDWDtFQUFDO0lBQUF2USxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQXFaLGdCQUFnQmhOLGFBQWEsRUFBRWtLLFdBQVcsRUFBRTtNQUMxQztJQUFBO0VBQ0Q7SUFBQXZRLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBb1osb0JBQW9CL00sYUFBYSxFQUFFO01BQ2pDO01BQ0EsT0FBTztRQUFBLE9BQU0sSUFBSTtNQUFBO0lBQ25CO0VBQUM7SUFBQXJHLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBd1EsYUFBYWhLLEtBQUssRUFBRTtNQUFBLElBQUFzYixlQUFBLEVBQUFDLG9CQUFBO01BQ2xCLElBQU1sZSxLQUFLLElBQUFpZSxlQUFBLEdBQUdoaEIsTUFBTSxDQUFDd0QsTUFBTSxDQUFDLElBQUksQ0FBQzhGLGNBQWMsQ0FBQyxjQUFBMFgsZUFBQSx3QkFBQUMsb0JBQUEsR0FBbENELGVBQUEsQ0FBb0MzUSxJQUFJLENBQUMsVUFBQW5SLEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUN3RyxLQUFLLEtBQUtBLEtBQUs7TUFBQSxFQUFDLGNBQUF1YixvQkFBQSx1QkFBeEVBLG9CQUFBLENBQTBFbGUsS0FBSztNQUM3RixJQUFJQSxLQUFLLEVBQUU7UUFBQSxJQUFBbWUsbUJBQUE7UUFDVCxRQUFBQSxtQkFBQSxHQUFPLElBQUksQ0FBQ3JjLE1BQU0sQ0FBQzlCLEtBQUssQ0FBQyxjQUFBbWUsbUJBQUEsdUJBQWxCQSxtQkFBQSxDQUFvQm5LLFdBQVc7TUFDeEM7SUFDRjtFQUFDO0lBQUE3UixHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQTBRLHVCQUF1QmxLLEtBQUssRUFBRTtNQUFBLElBQUF5YixxQkFBQTtNQUM1QixRQUFBQSxxQkFBQSxHQUFPLElBQUksQ0FBQ3RjLE1BQU0sQ0FBQ2lFLFNBQVMsQ0FBQ3BELEtBQUssQ0FBQyxjQUFBeWIscUJBQUEsdUJBQTVCQSxxQkFBQSxDQUE4QnhTLFFBQVE7SUFDL0M7RUFBQztJQUFBekosR0FBQTtJQUFBaEcsS0FBQSxFQTF3Q0QsU0FBQWtpQixzQkFBNkJsSixPQUFPLEVBQUVtSixXQUFXLEVBQUU7TUFDakQsT0FBTztRQUFDamQsS0FBSyxFQUFFLEVBQUU7UUFBRWlkLFdBQVcsRUFBWEE7TUFBVyxDQUFDO0lBQ2pDOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQRTtJQUFBbmMsR0FBQTtJQUFBaEcsS0FBQSxFQVFBLFNBQUFvaUIsdUJBQThCQyxhQUFhLEVBQUVDLFNBQVMsRUFBRTtNQUN0RDtNQUNBLElBQU1DLGVBQWUsR0FBR3poQixNQUFNLENBQUNjLElBQUksQ0FBQ3lnQixhQUFhLENBQUMsQ0FBQy9ULE1BQU0sQ0FBQyxVQUFDeEosSUFBSSxFQUFFa0IsR0FBRyxFQUFLO1FBQ3ZFLElBQU13YyxjQUFjLEdBQUdGLFNBQVMsQ0FBQ3hnQixNQUFNLENBQ3JDLFVBQUEzQixDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDZ0IsSUFBSSxLQUFLa2hCLGFBQWEsQ0FBQ3JjLEdBQUcsQ0FBQyxJQUFJcWMsYUFBYSxDQUFDcmMsR0FBRyxDQUFDLENBQUN5SCxRQUFRLENBQUN0TixDQUFDLENBQUNnQixJQUFJLENBQUM7UUFBQSxDQUMzRSxDQUFDO1FBRUQyRCxJQUFJLENBQUNrQixHQUFHLENBQUMsR0FBR3djLGNBQWMsQ0FBQzlpQixNQUFNLEdBQzdCOGlCLGNBQWMsQ0FBQ2hlLEdBQUcsQ0FBQyxVQUFBckUsQ0FBQztVQUFBLE9BQUs7WUFDdkJILEtBQUssRUFBRUcsQ0FBQyxDQUFDZ0IsSUFBSTtZQUNidUosUUFBUSxFQUFFdkssQ0FBQyxDQUFDdUs7VUFDZCxDQUFDO1FBQUEsQ0FBQyxDQUFDLEdBQ0gsSUFBSTtRQUNSLE9BQU81RixJQUFJO01BQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BRU4sSUFBSSxDQUFDaEUsTUFBTSxDQUFDd0QsTUFBTSxDQUFDaWUsZUFBZSxDQUFDLENBQUN2VSxLQUFLLENBQUNuRyxPQUFPLENBQUMsRUFBRTtRQUNsRDtRQUNBLE9BQU8sSUFBSTtNQUNiO01BRUEsT0FBTyxJQUFJLENBQUM0YSx5QkFBeUIsQ0FBQ0YsZUFBZSxDQUFDO0lBQ3hEO0VBQUM7SUFBQXZjLEdBQUE7SUFBQWhHLEtBQUEsRUFFRCxTQUFBeWlCLDBCQUFpQ0YsZUFBZSxFQUFFO01BQ2hEO01BQ0E7TUFDQTtNQUNBLElBQU1HLE9BQU8sR0FBRzVoQixNQUFNLENBQUNjLElBQUksQ0FBQzJnQixlQUFlLENBQUM7TUFDNUMsSUFBTUksUUFBUSxHQUFHRCxPQUFPLENBQUNsZSxHQUFHLENBQUMsVUFBQ2tQLENBQUMsRUFBRS9ULENBQUM7UUFBQSxPQUFPQSxDQUFDLEtBQUsraUIsT0FBTyxDQUFDaGpCLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztNQUFBLENBQUUsQ0FBQztNQUM3RSxJQUFNa2pCLFdBQVcsR0FBR0YsT0FBTyxDQUFDbGUsR0FBRyxDQUFDLFVBQUFrUCxDQUFDO1FBQUEsT0FBSTZPLGVBQWUsQ0FBQzdPLENBQUMsQ0FBQyxDQUFDaFUsTUFBTTtNQUFBLEVBQUM7TUFDL0QsSUFBTW1qQixLQUFLLEdBQUcsRUFBRTs7TUFFaEI7TUFDQSxPQUFPQyxpQkFBaUIsQ0FBQ0gsUUFBUSxFQUFFQyxXQUFXLEVBQUVELFFBQVEsQ0FBQ2pqQixNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDcEUsSUFBTXFqQixPQUFPLEdBQUdKLFFBQVEsQ0FBQ3JVLE1BQU0sQ0FBQyxVQUFDeEosSUFBSSxFQUFFa2UsSUFBSSxFQUFFcmpCLENBQUMsRUFBSztVQUNqRG1GLElBQUksQ0FBQzRkLE9BQU8sQ0FBQy9pQixDQUFDLENBQUMsQ0FBQyxHQUFHNGlCLGVBQWUsQ0FBQ0csT0FBTyxDQUFDL2lCLENBQUMsQ0FBQyxDQUFDLENBQUNxakIsSUFBSSxDQUFDO1VBQ3BELE9BQU9sZSxJQUFJO1FBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRU4rZCxLQUFLLENBQUM1Z0IsSUFBSSxDQUFDOGdCLE9BQU8sQ0FBQztNQUNyQjtNQUNBOztNQUVBO01BQ0EsU0FBU0QsaUJBQWlCQSxDQUFDRyxHQUFHLEVBQUVDLE1BQU0sRUFBRXhlLEtBQUssRUFBRTtRQUM3QyxJQUFJQSxLQUFLLEtBQUssQ0FBQyxJQUFJdWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQzNDO1VBQ0EsT0FBTyxLQUFLO1FBQ2Q7UUFFQSxJQUFJRCxHQUFHLENBQUN2ZSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUd3ZSxNQUFNLENBQUN4ZSxLQUFLLENBQUMsRUFBRTtVQUNsQ3VlLEdBQUcsQ0FBQ3ZlLEtBQUssQ0FBQyxHQUFHdWUsR0FBRyxDQUFDdmUsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUMzQixPQUFPLElBQUk7UUFDYjtRQUVBdWUsR0FBRyxDQUFDdmUsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNkLE9BQU9vZSxpQkFBaUIsQ0FBQ0csR0FBRyxFQUFFQyxNQUFNLEVBQUV4ZSxLQUFLLEdBQUcsQ0FBQyxDQUFDO01BQ2xEO01BRUEsT0FBT21lLEtBQUs7SUFDZDtFQUFDO0lBQUE3YyxHQUFBO0lBQUFoRyxLQUFBLEVBRUQsU0FBQXlFLFNBQWdCME4sQ0FBQyxFQUFFO01BQ2pCLE9BQU8sSUFBQTFOLG9CQUFRLEVBQUMwTixDQUFDLENBQUM7SUFDcEI7RUFBQztFQUFBLE9BQUFsTixLQUFBO0FBQUE7QUFBQSxJQUFBa2UsUUFBQSxHQUFBcGdCLE9BQUEsY0Fnc0NZa0MsS0FBSyJ9
|