appium 2.0.0-beta.30 → 2.0.0-beta.35
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/build/lib/appium.d.ts +1 -1
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +5 -2
- package/build/lib/cli/args.js +1 -1
- package/build/lib/cli/driver-command.d.ts +3 -3
- package/build/lib/cli/driver-command.d.ts.map +1 -1
- package/build/lib/cli/driver-command.js +8 -8
- package/build/lib/cli/extension-command.d.ts +22 -17
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +35 -36
- package/build/lib/cli/extension.js +1 -1
- package/build/lib/cli/parser.d.ts +3 -2
- package/build/lib/cli/parser.d.ts.map +1 -1
- package/build/lib/cli/parser.js +1 -1
- package/build/lib/cli/plugin-command.d.ts +9 -15
- package/build/lib/cli/plugin-command.d.ts.map +1 -1
- package/build/lib/cli/plugin-command.js +8 -8
- package/build/lib/cli/utils.js +1 -1
- package/build/lib/config-file.js +1 -1
- package/build/lib/config.d.ts +5 -4
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +1 -1
- package/build/lib/constants.js +1 -1
- package/build/lib/extension/driver-config.js +1 -1
- package/build/lib/extension/extension-config.js +1 -1
- package/build/lib/extension/index.js +1 -1
- package/build/lib/extension/manifest.d.ts.map +1 -1
- package/build/lib/extension/manifest.js +1 -1
- package/build/lib/extension/package-changed.js +1 -1
- package/build/lib/extension/plugin-config.js +1 -1
- package/build/lib/grid-register.js +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/logsink.js +1 -1
- package/build/lib/main.d.ts +13 -10
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +57 -50
- package/build/lib/schema/arg-spec.js +1 -1
- package/build/lib/schema/cli-args.js +1 -1
- package/build/lib/schema/cli-transformers.js +1 -1
- package/build/lib/schema/index.js +1 -1
- package/build/lib/schema/keywords.js +1 -1
- package/build/lib/schema/schema.js +1 -1
- package/build/lib/utils.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/appium-manifest.d.ts +40 -0
- package/build/types/appium-manifest.d.ts.map +1 -0
- package/build/types/cli.d.ts +112 -0
- package/build/types/cli.d.ts.map +1 -0
- package/build/types/extension.d.ts +43 -0
- package/build/types/extension.d.ts.map +1 -0
- package/build/types/external-manifest.d.ts +47 -0
- package/build/types/external-manifest.d.ts.map +1 -0
- package/build/types/index.d.ts +15 -0
- package/build/types/index.d.ts.map +1 -0
- package/lib/appium.js +7 -3
- package/lib/cli/driver-command.js +45 -20
- package/lib/cli/extension-command.js +229 -123
- package/lib/cli/parser.js +2 -1
- package/lib/cli/plugin-command.js +33 -18
- package/lib/config.js +6 -5
- package/lib/extension/manifest.js +0 -2
- package/lib/main.js +78 -63
- package/package.json +20 -14
- package/types/{appium-manifest.d.ts → appium-manifest.ts} +1 -1
- package/types/{cli.d.ts → cli.ts} +48 -29
- package/types/{extension.d.ts → extension.ts} +4 -4
- package/types/{external-manifest.d.ts → external-manifest.ts} +2 -2
- package/types/{index.d.ts → index.ts} +7 -0
- package/lib/appium-config.schema.json +0 -278
|
@@ -449,4 +449,4 @@ const {
|
|
|
449
449
|
isAllowedSchemaFileExtension
|
|
450
450
|
} = AppiumSchema;
|
|
451
451
|
exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;
|
|
452
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIlJvYWNoSG90ZWxNYXAiLCJNYXAiLCJzZXQiLCJrZXkiLCJ2YWx1ZSIsImhhcyIsIkVycm9yIiwiZGVsZXRlIiwiY2xlYXIiLCJBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TIiwiU2V0IiwiQXBwaXVtU2NoZW1hIiwiX2FyZ1NwZWNzIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFuY2UiLCJfZmluYWxpemVkU2NoZW1hcyIsImNvbnN0cnVjdG9yIiwiX2luc3RhbnRpYXRlQWp2IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJfIiwiYmluZEFsbCIsImhhc1JlZ2lzdGVyZWRTY2hlbWEiLCJleHRUeXBlIiwiZXh0TmFtZSIsImlzRmluYWxpemVkIiwiQm9vbGVhbiIsImdldEFsbEFyZ1NwZWNzIiwiZmluYWxpemUiLCJhanYiLCJiYXNlU2NoZW1hIiwiY2xvbmVEZWVwIiwiQXBwaXVtQ29uZmlnSnNvblNjaGVtYSIsImFkZEFyZ1NwZWNzIiwic2NoZW1hIiwicHJvcE5hbWUiLCJwcm9wU2NoZW1hIiwiT2JqZWN0IiwiZW50cmllcyIsImFyZ1NwZWMiLCJBcmdTcGVjIiwiZGVzdCIsImFwcGl1bUNsaURlc3QiLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0IiwiYXJnIiwib21pdCIsInByb3BlcnRpZXMiLCJzZXJ2ZXIiLCJmaW5hbGl6ZWRTY2hlbWFzIiwiZmluYWxTY2hlbWEiLCJyZWR1Y2UiLCJleHRlbnNpb25TY2hlbWFzIiwiZm9yRWFjaCIsIiRyZWYiLCJ0b1NjaGVtYUJhc2VSZWYiLCIkaWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsIiRjb21tZW50IiwidmFsaWRhdGVTY2hlbWEiLCJhZGRTY2hlbWEiLCJBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCIsImZyZWV6ZSIsIkFqdiIsImFsbEVycm9ycyIsImtleXdvcmRzIiwia2V5d29yZCIsImFkZEtleXdvcmQiLCJyZXNldCIsInNjaGVtYUlkIiwia2V5cyIsInJlbW92ZVNjaGVtYSIsInJlZ2lzdGVyU2NoZW1hIiwiaXNVbmRlZmluZWQiLCJUeXBlRXJyb3IiLCJpc1N1cHBvcnRlZFNjaGVtYVR5cGUiLCJTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yIiwibm9ybWFsaXplZEV4dE5hbWUiLCJrZWJhYkNhc2UiLCJnZXQiLCJTY2hlbWFOYW1lQ29uZmxpY3RFcnJvciIsImdldEFyZ1NwZWMiLCJuYW1lIiwidG9BcmciLCJoYXNBcmdTcGVjIiwiZ2V0RGVmYXVsdHMiLCJmbGF0dGVuIiwiU2NoZW1hRmluYWxpemF0aW9uRXJyb3IiLCJyZWR1Y2VyIiwiZGVmYXVsdHMiLCJyZXR2YWwiLCJ2YWx1ZXMiLCJnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiIsInNwZWNzIiwiZmlsdGVyIiwic3BlYyIsInJhd0Rlc3QiLCJnZXRTY2hlbWEiLCJzdGFjayIsInByZWZpeCIsImZsYXR0ZW5lZCIsInBhaXJzIiwidG9QYWlycyIsInB1c2giLCJTRVJWRVJfUFJPUF9OQU1FIiwicmVmU2NoZW1hIiwiZXJyIiwiU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIiwiZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQiLCJSZWZlcmVuY2VFcnJvciIsInJlZiIsIl9nZXRWYWxpZGF0b3IiLCJpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiaXNBcnJheSIsImVycm9ycyIsImlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24iLCJmaWxlbmFtZSIsInBhdGgiLCJleHRuYW1lIiwiaXNQbGFpbk9iamVjdCIsIiRhc3luYyIsImNvZGUiLCJkYXRhIiwibXNnIiwiaXNCb29sZWFuIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwcGl1bVNjaGVtYSIsImZpbmFsaXplU2NoZW1hIiwicmVzZXRTY2hlbWEiLCJmbGF0dGVuU2NoZW1hIiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiXSwibWFwcGluZ3MiOiI7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NUQsTUFBTXlHLFlBQVksR0FBR3pILFlBQVksQ0FBQ1UsTUFBYixFQUFyQjtBQUVPLE1BQU07QUFDWHNELEVBQUFBLGNBRFc7QUFFWDdDLEVBQUFBLGNBRlc7QUFHWHNELEVBQUFBLFVBSFc7QUFJWEcsRUFBQUEsVUFKVztBQUtYM0QsRUFBQUEsV0FMVztBQU1YRyxFQUFBQSxRQUFRLEVBQUVzRyxjQU5DO0FBT1g5RCxFQUFBQSxLQUFLLEVBQUUrRCxXQVBJO0FBUVhqQixFQUFBQSxRQVJXO0FBU1hqQixFQUFBQSxTQVRXO0FBVVhYLEVBQUFBLE9BQU8sRUFBRThDLGFBVkU7QUFXWC9DLEVBQUFBLFdBQVcsRUFBRWdELG9CQVhGO0FBWVh6QyxFQUFBQTtBQVpXLElBYVRxQyxZQWJHOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTTtBQUFDWixFQUFBQTtBQUFELElBQWlDN0csWUFBdkMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBpdW1Db25maWdKc29uU2NoZW1hIH0gZnJvbSAnQGFwcGl1bS9zY2hlbWEnO1xuaW1wb3J0IHsgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQsIEFyZ1NwZWMsIFNFUlZFUl9QUk9QX05BTUUgfSBmcm9tICcuL2FyZy1zcGVjJztcbmltcG9ydCB7IGtleXdvcmRzIH0gZnJvbSAnLi9rZXl3b3Jkcyc7XG5cbi8qKlxuICogS2V5L3ZhbHVlIHBhaXJzIGdvIGluLi4uIGJ1dCB0aGV5IGRvbid0IGNvbWUgb3V0LlxuICpcbiAqIEB0ZW1wbGF0ZSBLLFZcbiAqIEBleHRlbmRzIHtNYXA8SyxWPn1cbiAqL1xuZXhwb3J0IGNsYXNzIFJvYWNoSG90ZWxNYXAgZXh0ZW5kcyBNYXAge1xuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICogQHBhcmFtIHtWfSB2YWx1ZVxuICAgKi9cbiAgc2V0IChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IGlzIGFscmVhZHkgc2V0YCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBkZWxldGUgKGtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBSb2FjaEhvdGVsTWFwYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRlbnNpb25zIHRoYXQgYW4gZXh0ZW5zaW9uIHNjaGVtYSBmaWxlIGNhbiBoYXZlLlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcuanMnLCAnLmNqcyddKTtcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIEFqdiBhbmQgc2NoZW1hLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIFNob3VsZCBoYXZlIGJlZW4gbmFtZWQgSGlnaGxhbmRlciwgYmVjYXVzZSBfdGhlcmUgY2FuIG9ubHkgYmUgb25lX1xuICovXG5jbGFzcyBBcHBpdW1TY2hlbWEge1xuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHVuaXF1ZSBhcmd1bWVudCBJRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY31zLlxuICAgKlxuICAgKiBBbiBcImFyZ3VtZW50XCIgaXMgYSBDTEkgYXJndW1lbnQgb3IgYSBjb25maWcgcHJvcGVydHkuXG4gICAqXG4gICAqIFVzZWQgdG8gcHJvdmlkZSBlYXN5IGxvb2t1cHMgb2YgYXJndW1lbnQgbWV0YWRhdGEgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aG9zZSBhcmd1bWVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb2FjaEhvdGVsTWFwPHN0cmluZyxBcmdTcGVjPn1cbiAgICovXG4gIF9hcmdTcGVjcyA9IG5ldyBSb2FjaEhvdGVsTWFwKCk7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBleHRlbnNpb24gbmFtZXMgdG8gc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG5hbWluZyBjb25mbGljdHMuIFRoZSBzY2hlbWFzXG4gICAqIGFyZSBzdG9yZWQgaGVyZSBpbiBtZW1vcnkgdW50aWwgdGhlIGluc3RhbmNlIGlzIF9maW5hbGl6ZWRfLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsTWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+Pn1cbiAgICovXG4gIF9yZWdpc3RlcmVkU2NoZW1hcyA9IHtbRFJJVkVSX1RZUEVdOiBuZXcgTWFwKCksIFtQTFVHSU5fVFlQRV06IG5ldyBNYXAoKX07XG5cbiAgLyoqXG4gICAqIEFqdiBpbnN0YW5jZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7QWp2fVxuICAgKi9cbiAgX2FqdjtcblxuICAvKipcbiAgICogU2luZ2xldG9uIGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7QXBwaXVtU2NoZW1hfVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZTtcblxuICAvKipcbiAgICogTG9va3VwIG9mIHNjaGVtYSBJRHMgdG8gZmluYWxpemVkIHNjaGVtYXMuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgaW5jbHVkZSByZWZlcmVuY2VzLCBidXQgcmF0aGVyIHRoZSByb290IHNjaGVtYXMgdGhlbXNlbHZlcy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj99XG4gICAqL1xuICBfZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIEFqdiwgYWRkcyBzdGFuZGFyZCBmb3JtYXRzIGFuZCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICAgKiBAc2VlIGh0dHBzOi8vbnBtLmltL2Fqdi1mb3JtYXRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIHtAbGluayBBcHBpdW1TY2hlbWF9IGluc3RhbmNlcy5cbiAgICpcbiAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyBvbmUuXG4gICAqIEJpbmRzIHB1YmxpYyBtZXRob2RzIHRvIHRoZSBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUgKCkge1xuICAgIGlmICghQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBwaXVtU2NoZW1hKCk7XG4gICAgICBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICBfLmJpbmRBbGwoaW5zdGFuY2UsIFtcbiAgICAgICAgJ2ZpbmFsaXplJyxcbiAgICAgICAgJ2ZsYXR0ZW4nLFxuICAgICAgICAnZ2V0QWxsQXJnU3BlY3MnLFxuICAgICAgICAnZ2V0QXJnU3BlYycsXG4gICAgICAgICdnZXREZWZhdWx0cycsXG4gICAgICAgICdnZXREZWZhdWx0c0ZvckV4dGVuc2lvbicsXG4gICAgICAgICdnZXRTY2hlbWEnLFxuICAgICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAgICdpc0ZpbmFsaXplZCcsXG4gICAgICAgICdyZWdpc3RlclNjaGVtYScsXG4gICAgICAgICdoYXNSZWdpc3RlcmVkU2NoZW1hJyxcbiAgICAgICAgJ3Jlc2V0JyxcbiAgICAgICAgJ3ZhbGlkYXRlJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcHBpdW1TY2hlbWEuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIGdldEFsbEFyZ1NwZWNzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3M7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGlzIHdoZW4gbm8gbW9yZSBzY2hlbWFzIHdpbGwgYmUgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogVGhpcyBkb2VzIHRocmVlIHRoaW5nczpcbiAgICogMS4gSXQgY29tYmluZXMgYWxsIHNjaGVtYXMgZnJvbSBleHRlbnNpb25zIGludG8gdGhlIEFwcGl1bSBjb25maWcgc2NoZW1hLFxuICAgKiAgICB0aGVuIGFkZHMgdGhlIHJlc3VsdCB0byB0aGUgYEFqdmAgaW5zdGFuY2UuXG4gICAqIDIuIEl0IGFkZHMgc2NoZW1hcyBmb3IgX2VhY2hfIGFyZ3VtZW50L3Byb3BlcnR5IGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzLlxuICAgKiAgICBUaGUgQ0xJIHVzZXMgdGhlc2Ugc2NoZW1hcyB0byB2YWxpZGF0ZSBzcGVjaWZpYyBhcmd1bWVudHMuXG4gICAqIDMuIFRoZSBzY2hlbWFzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCBKU09OIHNjaGVtYSBkcmFmdC0wNyAod2hpY2ggaXMgdGhlXG4gICAqICAgIG9ubHkgb25lIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpXG4gICAqXG4gICAqIEFueSBtZXRob2QgaW4gdGhpcyBpbnN0YW5jZSB0aGF0IG5lZWRzIHRvIGludGVyYWN0IHdpdGggdGhlIGBBanZgIGluc3RhbmNlXG4gICAqIHdpbGwgdGhyb3cgaWYgdGhpcyBtZXRob2QgaGFzIG5vdCBiZWVuIGNhbGxlZC5cbiAgICpcbiAgICogSWYgdGhlIGluc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkLCB0aGlzIGlzIGEgbm8tb3AuXG4gICAqIEBwdWJsaWNcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzY2hlbWEgaXMgbm90IHZhbGlkXG4gICAqIEByZXR1cm5zIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4+fSBSZWNvcmQgb2Ygc2NoZW1hIElEcyB0byBmdWxsIHNjaGVtYSBvYmplY3RzXG4gICAqL1xuICBmaW5hbGl6ZSAoKSB7XG4gICAgaWYgKHRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXM+fSAqLyAoXG4gICAgICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYWp2ID0gdGhpcy5fYWp2O1xuXG4gICAgLy8gQWp2IHdpbGwgX211dGF0ZV8gdGhlIHNjaGVtYSwgc28gd2UgbmVlZCB0byBjbG9uZSBpdC5cbiAgICBjb25zdCBiYXNlU2NoZW1hID0gXy5jbG9uZURlZXAoQXBwaXVtQ29uZmlnSnNvblNjaGVtYSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovIChzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJhc2VTY2hlbWE7XG4gICAgICB9LFxuICAgICAgYmFzZVNjaGVtYSxcbiAgICApO1xuXG4gICAgYWp2LmFkZFNjaGVtYShmaW5hbFNjaGVtYSwgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpO1xuICAgIGZpbmFsaXplZFNjaGVtYXNbQVBQSVVNX0NPTkZJR19TQ0hFTUFfSURdID0gZmluYWxTY2hlbWE7XG4gICAgYWp2LnZhbGlkYXRlU2NoZW1hKGZpbmFsU2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBmaW5hbGl6ZWRTY2hlbWFzO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKGZpbmFsaXplZFNjaGVtYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgYW5kIGNyZWF0ZXMgYW4gQWp2IGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7QWp2fVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW50aWF0ZUFqdiAoKSB7XG4gICAgY29uc3QgYWp2ID0gYWRkRm9ybWF0cyhcbiAgICAgIG5ldyBBanYoe1xuICAgICAgICAvLyB3aXRob3V0IHRoaXMgbm90IG11Y2ggdmFsaWRhdGlvbiBhY3R1YWxseSBoYXBwZW5zXG4gICAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBhZGQgY3VzdG9tIGtleXdvcmRzIHRvIGFqdi4gc2VlIHNjaGVtYS1rZXl3b3Jkcy5qc1xuICAgIF8uZm9yRWFjaChrZXl3b3JkcywgKGtleXdvcmQpID0+IHtcbiAgICAgIGFqdi5hZGRLZXl3b3JkKGtleXdvcmQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIC0gUmVtb3ZlcyBhbGwgYWRkZWQgc2NoZW1hcyBmcm9tIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHJlZ2lzdGVyZWQgc2NoZW1hc1xuICAgKiAtIFNldHMgdGhlIHtAbGluayBBcHBpdW1TY2hlbWEuX2ZpbmFsaXplZCBfZmluYWxpemVkfSBmbGFnIHRvIGBmYWxzZWBcbiAgICpcbiAgICogSWYgeW91IG5lZWQgdG8gY2FsbCB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBhZ2FpbiwgeW91J2xsIHdhbnQgdG8gY2FsbCB0aGlzIGZpcnN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmb3IgKGNvbnN0IHNjaGVtYUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPz8ge30pKSB7XG4gICAgICB0aGlzLl9hanYucmVtb3ZlU2NoZW1hKHNjaGVtYUlkKTtcbiAgICB9XG4gICAgdGhpcy5fYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSkgfHwgXy5pc1VuZGVmaW5lZChzY2hlbWEpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lLCBhbmQgYSBkZWZpbmVkIHNjaGVtYScsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5pc1N1cHBvcnRlZFNjaGVtYVR5cGUoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3Ioc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dE5hbWUgPSBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgICBpZiAodGhpcy5oYXNSZWdpc3RlcmVkU2NoZW1hKGV4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lKSkge1xuICAgICAgaWYgKHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmdldChub3JtYWxpemVkRXh0TmFtZSkgPT09IHNjaGVtYSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2Fqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uc2V0KG5vcm1hbGl6ZWRFeHROYW1lLCBzY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgQXJnU3BlY30gZm9yIHRoZSBnaXZlbiBhcmd1bWVudCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtBcmdTcGVjfHVuZGVmaW5lZH0gQXJnU3BlYyBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldEFyZ1NwZWMgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3MuZ2V0KEFyZ1NwZWMudG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnN0YW5jZSBrbm93cyBhYm91dCBhbiBhcmd1bWVudCBieSB0aGUgZ2l2ZW4gYG5hbWVgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgc3VjaCBhbiB7QGxpbmsgQXJnU3BlY30gZXhpc3RzXG4gICAqL1xuICBoYXNBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmhhcyhBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYFJlY29yZGAgb2YgYXJndW1lbnQgXCJkZXN0XCIgc3RyaW5ncyB0byBkZWZhdWx0IHZhbHVlcy5cbiAgICpcbiAgICogVGhlIFwiZGVzdFwiIHN0cmluZyBpcyB0aGUgcHJvcGVydHkgbmFtZSBpbiBvYmplY3QgcmV0dXJuZWQgYnlcbiAgICogYGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyWydwYXJzZV9hcmdzJ11gLlxuICAgKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAgICogQHBhcmFtIHtGbGF0dGVuZWR9IFtmbGF0dGVuPXRydWVdIC0gSWYgYHRydWVgLCBmbGF0dGVucyB0aGUgcmV0dXJuZWQgb2JqZWN0XG4gICAqIHVzaW5nIFwia2V5cGF0aFwiLXN0eWxlIGtleXMgb2YgdGhlIGZvcm1hdCBgPGV4dFR5cGU+LjxleHROYW1lPi48YXJnTmFtZT5gLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYSBuZXN0ZWQgb2JqZWN0IHVzaW5nIGBleHRUeXBlYCBhbmQgYGV4dE5hbWVgIGFzXG4gICAqIHByb3BlcnRpZXMuIEJhc2UgYXJndW1lbnRzIChzZXJ2ZXIgYXJndW1lbnRzKSBhcmUgYWx3YXlzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59XG4gICAqL1xuICBnZXREZWZhdWx0cyAoZmxhdHRlbiA9IC8qKiBAdHlwZSB7RmxhdHRlbmVkfSAqLyAodHJ1ZSkpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY2FsbGJhY2sgRGVmYXVsdFJlZHVjZXJcbiAgICAgKiBAcGFyYW0ge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gZGVmYXVsdHNcbiAgICAgKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWNcbiAgICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgICAqL1xuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFJlZHVjZXJ9ICovXG4gICAgY29uc3QgcmVkdWNlciA9IGZsYXR0ZW5cbiAgICAgID8gKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH1cbiAgICAgIDogKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIF8uc2V0KGRlZmF1bHRzLCBkZXN0LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH07XG5cbiAgICAvKiogQHR5cGUge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gKi9cbiAgICBjb25zdCByZXR2YWwgPSB7fTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5yZWR1Y2UocmVkdWNlciwgcmV0dmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZmxhdHRlbmVkIFJlY29yZCBvZiBkZWZhdWx0cyBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uIEtleXMgd2lsbFxuICAgKiBiZSBvZiBmb3JtYXQgYDxhcmdOYW1lPmAuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT59XG4gICAqL1xuICBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgY29uc3Qgc3BlY3MgPSBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLmZpbHRlcihcbiAgICAgIChzcGVjKSA9PiBzcGVjLmV4dFR5cGUgPT09IGV4dFR5cGUgJiYgc3BlYy5leHROYW1lID09PSBleHROYW1lLFxuICAgICk7XG4gICAgcmV0dXJuIHNwZWNzLnJlZHVjZSgoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIHJhd0Rlc3R9KSA9PiB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0c1tyYXdEZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiBzY2hlbWEgaW50byBhbiBhcnJheSBvZiBgU2NoZW1hT2JqZWN0YHMgYW5kIGFzc29jaWF0ZWRcbiAgICoge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9LlxuICAgKlxuICAgKiBDb252ZXJ0cyBuZXN0ZWQgZXh0ZW5zaW9uIHNjaGVtYXMgdG8ga2V5cyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kXG4gICAqIG5hbWUuIFVzZWQgd2hlbiB0cmFuc2xhdGluZyB0byBgYXJncGFyc2VgIG9wdGlvbnMgb3IgZ2V0dGluZyB0aGUgbGlzdCBvZlxuICAgKiBkZWZhdWx0IHZhbHVlcyAoc2VlIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9KSBmb3IgQ0xJIG9yIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnRlcm1lZGlhdGUgcmVwcnNlbnRhdGlvbiB1c2VkIGJ5IGBjbGktYXJnc2BcbiAgICogbW9kdWxlJ3MgYHRvUGFyc2VyQXJnc2AsIHdoaWNoIGNvbnZlcnRzIHRoZSBmaW5hbGl6ZWQgc2NoZW1hIHRvIHBhcmFtZXRlcnNcbiAgICogdXNlZCBieSBgYXJncGFyc2VgLlxuICAgKiBAdGhyb3dzIElmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICAgKiBAcmV0dXJucyB7RmxhdHRlbmVkU2NoZW1hfVxuICAgKi9cbiAgZmxhdHRlbiAoKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoKTtcblxuICAgIC8qKiBAdHlwZSB7IHtwcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W10gfSAqL1xuICAgIGNvbnN0IHN0YWNrID0gW3twcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllcywgcHJlZml4OiBbXX1dO1xuICAgIC8qKiBAdHlwZSB7RmxhdHRlbmVkU2NoZW1hfSAqL1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuXG4gICAgLy8gdGhpcyBiaXQgaXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHJld3JpdHRlbiBhcyBhIGZvciBsb29wLlxuICAgIC8vIHdoZW4gd2UgZmluZCBzb21ldGhpbmcgd2Ugd2FudCB0byB0cmF2ZXJzZSwgd2UgYWRkIGl0IHRvIGBzdGFja2BcbiAgICBmb3IgKGNvbnN0IHtwcm9wZXJ0aWVzLCBwcmVmaXh9IG9mIHN0YWNrKSB7XG4gICAgICBjb25zdCBwYWlycyA9IF8udG9QYWlycyhwcm9wZXJ0aWVzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9wZXJ0aWVzLCAkcmVmfSA9IHZhbHVlO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDoga2V5ID09PSBTRVJWRVJfUFJPUF9OQU1FID8gW10gOiBbLi4ucHJlZml4LCBrZXldLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCRyZWYpIHtcbiAgICAgICAgICBsZXQgcmVmU2NoZW1hO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWZTY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgkcmVmKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhbiBleHRlbnNpb24gc2NoZW1hIHN1cHBsaWVzIGEgJHJlZiB0byBhIG5vbi1leGlzdGVudCBzY2hlbWFcbiAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IoJHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAgICAgQXJnU3BlYy5leHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCgkcmVmKTtcbiAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRFeHROYW1lKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBleHRlbnNpb24gbmFtZSBmcm9tIHNjaGVtYSBJRCAkeyRyZWZ9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLFxuICAgICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXJnU3BlYykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFVua25vd24gYXJndW1lbnQgd2l0aCBrZXkgJHtrZXl9LCBleHRUeXBlICR7ZXh0VHlwZX0gYW5kIGV4dE5hbWUgJHtleHROYW1lfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYSAocmVmID0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTY2hlbWFPYmplY3R9ICovICh0aGlzLl9nZXRWYWxpZGF0b3IocmVmKS5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzY2hlbWEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZyb20gQWp2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaWRdIC0gU2NoZW1hIElEXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb259XG4gICAqL1xuICBfZ2V0VmFsaWRhdG9yIChpZCA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fYWp2LmdldFNjaGVtYShpZCk7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIGlmIChpZCA9PT0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QsIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYS5cbiAgICogSWYgZXJyb3JzIG9jY3VyLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBub24tZW1wdHkuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSAoaG9wZWZ1bGx5IGFuIG9iamVjdCkgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRCBvciByZWYuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gQXJyYXkgb2YgZXJyb3JzLCBpZiBhbnkuXG4gICAqL1xuICB2YWxpZGF0ZSAodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIChzY2hlbWEpIHtcbiAgICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hLiRhc3luYyAhPT0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgYnV0IGl0J3Mgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS5cbiAqXG4gKiBcIlZhbGlkXCIgc2NoZW1hcyB3aGljaCBhcmUgdW5zdXBwb3J0ZWQgaW5jbHVkZSBib29sZWFuIHNjaGVtYXMgYW5kIGFzeW5jIHNjaGVtYXNcbiAqIChoYXZpbmcgYSBgdHJ1ZWAgYCRhc3luY2AgcHJvcGVydHkpLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTlNVUFBPUlRFRF9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYTogYW55LCBleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWFcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy84Mjc3XG4gICAgc3VwZXIoXG4gICAgICAoKCkgPT4ge1xuICAgICAgICBsZXQgbXNnID0gYFVuc3VwcG9ydGVkIHNjaGVtYSBmcm9tICR7ZXh0VHlwZX0gXCIke2V4dE5hbWV9XCI6YDtcbiAgICAgICAgaWYgKF8uaXNCb29sZWFuKHNjaGVtYSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGEgYm9vbGVhbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS4kYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBjYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYHNjaGVtYSBJUyBzdXBwb3J0ZWQ7IHRoaXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB0aHJvd24gKHRoaXMgaXMgYSBidWcpLiB2YWx1ZSBvZiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IHdpdGhvdXQgYSB0cnVlIFwiJGFzeW5jXCIgcHJvcGVydHlgO1xuICAgICAgfSkoKSxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbmNvbnN0IGFwcGl1bVNjaGVtYSA9IEFwcGl1bVNjaGVtYS5jcmVhdGUoKTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVnaXN0ZXJTY2hlbWEsXG4gIGdldEFsbEFyZ1NwZWNzLFxuICBnZXRBcmdTcGVjLFxuICBoYXNBcmdTcGVjLFxuICBpc0ZpbmFsaXplZCxcbiAgZmluYWxpemU6IGZpbmFsaXplU2NoZW1hLFxuICByZXNldDogcmVzZXRTY2hlbWEsXG4gIHZhbGlkYXRlLFxuICBnZXRTY2hlbWEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5TY2hlbWEsXG4gIGdldERlZmF1bHRzOiBnZXREZWZhdWx0c0ZvclNjaGVtYSxcbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24sXG59ID0gYXBwaXVtU2NoZW1hO1xuZXhwb3J0IGNvbnN0IHtpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9ufSA9IEFwcGl1bVNjaGVtYTtcblxuLyoqXG4gKiBBcHBpdW0gb25seSBzdXBwb3J0cyBzY2hlbWFzIHRoYXQgYXJlIHBsYWluIG9iamVjdHM7IG5vdCBhcnJheXMuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3QgJiB7W2tleTogbnVtYmVyXTogbmV2ZXJ9fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCBoYXZpbmcgcHJvcGVydHkgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIFN0cmljdFByb3BcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBTY2hlbWFPYmplY3R9IHdpdGggYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtTY2hlbWFPYmplY3QgJiBTdHJpY3RQcm9wfSBTdHJpY3RTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEEgbGlzdCBvZiBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfSBvYmplY3RzLlxuICpcbiAqIEludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gY29udmVydGluZyB0aGUgZW50aXJlIHNjaGVtYSBkb3duIHRvIENMSSBhcmd1bWVudHMuXG4gKiBAdHlwZWRlZiB7IHtzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXSB9IEZsYXR0ZW5lZFNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FyZ1NwZWNbJ2RlZmF1bHRWYWx1ZSddfSBBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBlLmcuIGB7ZHJpdmVyOiB7Zm9vOiAnYmFyJ319YCB3aGVyZSBgZm9vYCBpcyB0aGUgYXJnIG5hbWUgYW5kIGBiYXJgIGlzIHRoZSBkZWZhdWx0IHZhbHVlLlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsUmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPj59IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWVcbiAqL1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9XG4gKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLEZsYXR0ZW5lZCBleHRlbmRzIHRydWUgPyBBcmdTcGVjRGVmYXVsdFZhbHVlIDogQXJnU3BlY0RlZmF1bHRWYWx1ZSB8IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWU+fSBEZWZhdWx0VmFsdWVzXG4gKi9cbiJdfQ==
|
|
452
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb2FjaEhvdGVsTWFwIiwiTWFwIiwic2V0Iiwia2V5IiwidmFsdWUiLCJoYXMiLCJFcnJvciIsImRlbGV0ZSIsImNsZWFyIiwiQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyIsIlNldCIsIkFwcGl1bVNjaGVtYSIsIl9hcmdTcGVjcyIsIl9yZWdpc3RlcmVkU2NoZW1hcyIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJfYWp2IiwiX2luc3RhbmNlIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJjb25zdHJ1Y3RvciIsIl9pbnN0YW50aWF0ZUFqdiIsImNyZWF0ZSIsImluc3RhbmNlIiwiXyIsImJpbmRBbGwiLCJoYXNSZWdpc3RlcmVkU2NoZW1hIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJpc0ZpbmFsaXplZCIsIkJvb2xlYW4iLCJnZXRBbGxBcmdTcGVjcyIsImZpbmFsaXplIiwiYWp2IiwiYmFzZVNjaGVtYSIsImNsb25lRGVlcCIsIkFwcGl1bUNvbmZpZ0pzb25TY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzVW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIiwiU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciIsIm5vcm1hbGl6ZWRFeHROYW1lIiwia2ViYWJDYXNlIiwiZ2V0IiwiU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IiLCJnZXRBcmdTcGVjIiwibmFtZSIsInRvQXJnIiwiaGFzQXJnU3BlYyIsImdldERlZmF1bHRzIiwiZmxhdHRlbiIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwicmVkdWNlciIsImRlZmF1bHRzIiwicmV0dmFsIiwidmFsdWVzIiwiZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24iLCJzcGVjcyIsImZpbHRlciIsInNwZWMiLCJyYXdEZXN0IiwiZ2V0U2NoZW1hIiwic3RhY2siLCJwcmVmaXgiLCJmbGF0dGVuZWQiLCJwYWlycyIsInRvUGFpcnMiLCJwdXNoIiwiU0VSVkVSX1BST1BfTkFNRSIsInJlZlNjaGVtYSIsImVyciIsIlNjaGVtYVVua25vd25TY2hlbWFFcnJvciIsImV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkIiwiUmVmZXJlbmNlRXJyb3IiLCJyZWYiLCJfZ2V0VmFsaWRhdG9yIiwiaWQiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZSIsImlzQXJyYXkiLCJlcnJvcnMiLCJpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIiwiZmlsZW5hbWUiLCJwYXRoIiwiZXh0bmFtZSIsImlzUGxhaW5PYmplY3QiLCIkYXN5bmMiLCJjb2RlIiwiZGF0YSIsIm1zZyIsImlzQm9vbGVhbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRm9yU2NoZW1hIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwaXVtQ29uZmlnSnNvblNjaGVtYSB9IGZyb20gJ0BhcHBpdW0vc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FIH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQgeyBrZXl3b3JkcyB9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEtleS92YWx1ZSBwYWlycyBnbyBpbi4uLiBidXQgdGhleSBkb24ndCBjb21lIG91dC5cbiAqXG4gKiBAdGVtcGxhdGUgSyxWXG4gKiBAZXh0ZW5kcyB7TWFwPEssVj59XG4gKi9cbmV4cG9ydCBjbGFzcyBSb2FjaEhvdGVsTWFwIGV4dGVuZHMgTWFwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqIEBwYXJhbSB7Vn0gdmFsdWVcbiAgICovXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBhbHJlYWR5IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgUm9hY2hIb3RlbE1hcGApO1xuICB9XG59XG5cbi8qKlxuICogRXh0ZW5zaW9ucyB0aGF0IGFuIGV4dGVuc2lvbiBzY2hlbWEgZmlsZSBjYW4gaGF2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmpzb24nLCAnLmpzJywgJy5janMnXSk7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBBanYgYW5kIHNjaGVtYS1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBTaG91bGQgaGF2ZSBiZWVuIG5hbWVkIEhpZ2hsYW5kZXIsIGJlY2F1c2UgX3RoZXJlIGNhbiBvbmx5IGJlIG9uZV9cbiAqL1xuY2xhc3MgQXBwaXVtU2NoZW1hIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB1bmlxdWUgYXJndW1lbnQgSURzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcge0BsaW5rIEFyZ1NwZWN9cy5cbiAgICpcbiAgICogQW4gXCJhcmd1bWVudFwiIGlzIGEgQ0xJIGFyZ3VtZW50IG9yIGEgY29uZmlnIHByb3BlcnR5LlxuICAgKlxuICAgKiBVc2VkIHRvIHByb3ZpZGUgZWFzeSBsb29rdXBzIG9mIGFyZ3VtZW50IG1ldGFkYXRhIHdoZW4gY29udmVydGluZyBiZXR3ZWVuIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgdGhvc2UgYXJndW1lbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Um9hY2hIb3RlbE1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lLlxuICAgKiBCaW5kcyBwdWJsaWMgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlICgpIHtcbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5faW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEFwcGl1bVNjaGVtYSgpO1xuICAgICAgQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgXy5iaW5kQWxsKGluc3RhbmNlLCBbXG4gICAgICAgICdmaW5hbGl6ZScsXG4gICAgICAgICdmbGF0dGVuJyxcbiAgICAgICAgJ2dldEFsbEFyZ1NwZWNzJyxcbiAgICAgICAgJ2dldEFyZ1NwZWMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24nLFxuICAgICAgICAnZ2V0U2NoZW1hJyxcbiAgICAgICAgJ2hhc0FyZ1NwZWMnLFxuICAgICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgICAncmVnaXN0ZXJTY2hlbWEnLFxuICAgICAgICAnaGFzUmVnaXN0ZXJlZFNjaGVtYScsXG4gICAgICAgICdyZXNldCcsXG4gICAgICAgICd2YWxpZGF0ZScsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwaXVtU2NoZW1hLl9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHNjaGVtYSBoYXMgYmVlbiByZWdpc3RlcmVkIHVzaW5nIGdpdmVuIGV4dGVuc2lvbiB0eXBlIGFuZCBuYW1lLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGRlcGVuZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gX2ZpbmFsaXplZF8uXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gTmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgcmVnaXN0ZXJlZFxuICAgKi9cbiAgaGFzUmVnaXN0ZXJlZFNjaGVtYSAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5oYXMoZXh0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplIGZpbmFsaXplfSBoYXMgYmVlbiBjYWxsZWRcbiAgICogc3VjY2Vzc2Z1bGx5IGFuZCB7QGxpbmsgQXBwaXVtU2NoZW1hLnJlc2V0IHJlc2V0fSBoYXMgbm90IGJlZW4gY2FsbGVkIHNpbmNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgZmluYWxpemVkXG4gICAqL1xuICBpc0ZpbmFsaXplZCAoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICBnZXRBbGxBcmdTcGVjcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhpcyB3aGVuIG5vIG1vcmUgc2NoZW1hcyB3aWxsIGJlIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIFRoaXMgZG9lcyB0aHJlZSB0aGluZ3M6XG4gICAqIDEuIEl0IGNvbWJpbmVzIGFsbCBzY2hlbWFzIGZyb20gZXh0ZW5zaW9ucyBpbnRvIHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYSxcbiAgICogICAgdGhlbiBhZGRzIHRoZSByZXN1bHQgdG8gdGhlIGBBanZgIGluc3RhbmNlLlxuICAgKiAyLiBJdCBhZGRzIHNjaGVtYXMgZm9yIF9lYWNoXyBhcmd1bWVudC9wcm9wZXJ0eSBmb3IgdmFsaWRhdGlvbiBwdXJwb3Nlcy5cbiAgICogICAgVGhlIENMSSB1c2VzIHRoZXNlIHNjaGVtYXMgdG8gdmFsaWRhdGUgc3BlY2lmaWMgYXJndW1lbnRzLlxuICAgKiAzLiBUaGUgc2NoZW1hcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgKHdoaWNoIGlzIHRoZVxuICAgKiAgICBvbmx5IG9uZSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKVxuICAgKlxuICAgKiBBbnkgbWV0aG9kIGluIHRoaXMgaW5zdGFuY2UgdGhhdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiB3aWxsIHRocm93IGlmIHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiBjYWxsZWQuXG4gICAqXG4gICAqIElmIHRoZSBpbnN0YW5jZSBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCwgdGhpcyBpcyBhIG5vLW9wLlxuICAgKiBAcHVibGljXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgc2NoZW1hIGlzIG5vdCB2YWxpZFxuICAgKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+Pn0gUmVjb3JkIG9mIHNjaGVtYSBJRHMgdG8gZnVsbCBzY2hlbWEgb2JqZWN0c1xuICAgKi9cbiAgZmluYWxpemUgKCkge1xuICAgIGlmICh0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge05vbk51bGxhYmxlPHR5cGVvZiB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzPn0gKi8gKFxuICAgICAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFqdiA9IHRoaXMuX2FqdjtcblxuICAgIC8vIEFqdiB3aWxsIF9tdXRhdGVfIHRoZSBzY2hlbWEsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuXG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IF8uY2xvbmVEZWVwKEFwcGl1bUNvbmZpZ0pzb25TY2hlbWEpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hXG4gICAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdXG4gICAgICovXG4gICAgY29uc3QgYWRkQXJnU3BlY3MgPSAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBbcHJvcE5hbWUsIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgYXJnU3BlYyA9IEFyZ1NwZWMuY3JlYXRlKHByb3BOYW1lLCB7XG4gICAgICAgICAgZGVzdDogcHJvcFNjaGVtYS5hcHBpdW1DbGlEZXN0LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcHJvcFNjaGVtYS5kZWZhdWx0LFxuICAgICAgICAgIGV4dFR5cGUsXG4gICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHthcmd9ID0gYXJnU3BlYztcbiAgICAgICAgdGhpcy5fYXJnU3BlY3Muc2V0KGFyZywgYXJnU3BlYyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEFyZ1NwZWNzKFxuICAgICAgXy5vbWl0KGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllcywgW1xuICAgICAgICBEUklWRVJfVFlQRSxcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pn1cbiAgICAgKi9cbiAgICBjb25zdCBmaW5hbGl6ZWRTY2hlbWFzID0ge307XG5cbiAgICBjb25zdCBmaW5hbFNjaGVtYSA9IF8ucmVkdWNlKFxuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMsXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7dHlwZW9mIGJhc2VTY2hlbWF9IGJhc2VTY2hlbWFcbiAgICAgICAqIEBwYXJhbSB7TWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+fSBleHRlbnNpb25TY2hlbWFzXG4gICAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICAgICAqL1xuICAgICAgKGJhc2VTY2hlbWEsIGV4dGVuc2lvblNjaGVtYXMsIGV4dFR5cGUpID0+IHtcbiAgICAgICAgZXh0ZW5zaW9uU2NoZW1hcy5mb3JFYWNoKChzY2hlbWEsIGV4dE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCAkcmVmID0gQXJnU3BlYy50b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgICAgICAgc2NoZW1hLiRpZCA9ICRyZWY7XG4gICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7IC8vIHRoaXMgbWFrZXMgYHNjaGVtYWAgYmVjb21lIGEgYFN0cmljdFNjaGVtYU9iamVjdGBcbiAgICAgICAgICBiYXNlU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXNbZXh0VHlwZV0ucHJvcGVydGllc1tleHROYW1lXSA9XG4gICAgICAgICAgICB7JHJlZiwgJGNvbW1lbnQ6IGV4dE5hbWV9O1xuICAgICAgICAgIGFqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICAgIGFkZEFyZ1NwZWNzKHNjaGVtYS5wcm9wZXJ0aWVzLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgJHJlZik7XG4gICAgICAgICAgZmluYWxpemVkU2NoZW1hc1skcmVmXSA9IC8qKiBAdHlwZSB7U3RyaWN0U2NoZW1hT2JqZWN0fSAqLyAoc2NoZW1hKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBiYXNlU2NoZW1hO1xuICAgICAgfSxcbiAgICAgIGJhc2VTY2hlbWEsXG4gICAgKTtcblxuICAgIGFqdi5hZGRTY2hlbWEoZmluYWxTY2hlbWEsIEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKTtcbiAgICBmaW5hbGl6ZWRTY2hlbWFzW0FQUElVTV9DT05GSUdfU0NIRU1BX0lEXSA9IGZpbmFsU2NoZW1hO1xuICAgIGFqdi52YWxpZGF0ZVNjaGVtYShmaW5hbFNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gZmluYWxpemVkU2NoZW1hcztcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmaW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuZCBjcmVhdGVzIGFuIEFqdiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge0Fqdn1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFudGlhdGVBanYgKCkge1xuICAgIGNvbnN0IGFqdiA9IGFkZEZvcm1hdHMoXG4gICAgICBuZXcgQWp2KHtcbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIG5vdCBtdWNoIHZhbGlkYXRpb24gYWN0dWFsbHkgaGFwcGVuc1xuICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gYWRkIGN1c3RvbSBrZXl3b3JkcyB0byBhanYuIHNlZSBzY2hlbWEta2V5d29yZHMuanNcbiAgICBfLmZvckVhY2goa2V5d29yZHMsIChrZXl3b3JkKSA9PiB7XG4gICAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhanY7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiAtIFJlbW92ZXMgYWxsIGFkZGVkIHNjaGVtYXMgZnJvbSB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc31cbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiByZWdpc3RlcmVkIHNjaGVtYXNcbiAgICogLSBTZXRzIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hLl9maW5hbGl6ZWQgX2ZpbmFsaXplZH0gZmxhZyB0byBgZmFsc2VgXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRvIGNhbGwge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gYWdhaW4sIHlvdSdsbCB3YW50IHRvIGNhbGwgdGhpcyBmaXJzdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZXNldCAoKSB7XG4gICAgZm9yIChjb25zdCBzY2hlbWFJZCBvZiBPYmplY3Qua2V5cyh0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID8/IHt9KSkge1xuICAgICAgdGhpcy5fYWp2LnJlbW92ZVNjaGVtYShzY2hlbWFJZCk7XG4gICAgfVxuICAgIHRoaXMuX2FyZ1NwZWNzID0gbmV3IFJvYWNoSG90ZWxNYXAoKTtcbiAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyA9IHtcbiAgICAgIFtEUklWRVJfVFlQRV06IG5ldyBNYXAoKSxcbiAgICAgIFtQTFVHSU5fVFlQRV06IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gICAgLy8gQWp2IHNlZW1zIHRvIGhhdmUgYW4gb3Zlci1lYWdlciBjYWNoZSwgc28gd2UgaGF2ZSB0byBkdW1wIHRoZSBvYmplY3QgZW50aXJlbHkuXG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNjaGVtYSBmcm9tIGFuIGV4dGVuc2lvbi5cbiAgICpcbiAgICogVGhpcyBpcyBcImZhaWwtZmFzdFwiIGluIHRoYXQgdGhlIHNjaGVtYSB3aWxsIGltbWVkaWF0ZWx5IGJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3IF9vcl8gd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBzY2hlbWEncyBgJHNjaGVtYWAgcHJvcCBpcy5cbiAgICpcbiAgICogRG9lcyBfbm90XyBhZGQgdGhlIHNjaGVtYSB0byB0aGUgYGFqdmAgaW5zdGFuY2UgKHRoaXMgaXMgZG9uZSBieSB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSkuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gVW5pcXVlIGV4dGVuc2lvbiBuYW1lIGZvciBgdHlwZWBcbiAgICogQHBhcmFtIHtTY2hlbWFPYmplY3R9IHNjaGVtYSAtIFNjaGVtYSBvYmplY3RcbiAgICogQHRocm93cyB7U2NoZW1hTmFtZUNvbmZsaWN0RXJyb3J9IElmIHRoZSBzY2hlbWEgaXMgYW4gaW52YWxpZFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlZ2lzdGVyU2NoZW1hIChleHRUeXBlLCBleHROYW1lLCBzY2hlbWEpIHtcbiAgICBpZiAoIShleHRUeXBlICYmIGV4dE5hbWUpIHx8IF8uaXNVbmRlZmluZWQoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIGV4dGVuc2lvbiB0eXBlLCBleHRlbnNpb24gbmFtZSwgYW5kIGEgZGVmaW5lZCBzY2hlbWEnLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFBcHBpdW1TY2hlbWEuaXNTdXBwb3J0ZWRTY2hlbWFUeXBlKHNjaGVtYSkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHROYW1lID0gXy5rZWJhYkNhc2UoZXh0TmFtZSk7XG4gICAgaWYgKHRoaXMuaGFzUmVnaXN0ZXJlZFNjaGVtYShleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5nZXQobm9ybWFsaXplZEV4dE5hbWUpID09PSBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNjaGVtYU5hbWVDb25mbGljdEVycm9yKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9hanYudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLnNldChub3JtYWxpemVkRXh0TmFtZSwgc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIEFyZ1NwZWN9IGZvciB0aGUgZ2l2ZW4gYXJndW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXJnU3BlY3x1bmRlZmluZWR9IEFyZ1NwZWMgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmdldChBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5zdGFuY2Uga25vd3MgYWJvdXQgYW4gYXJndW1lbnQgYnkgdGhlIGdpdmVuIGBuYW1lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2ggYW4ge0BsaW5rIEFyZ1NwZWN9IGV4aXN0c1xuICAgKi9cbiAgaGFzQXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5XG4gICAqIGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gICAqIEBwYXJhbSB7RmxhdHRlbmVkfSBbZmxhdHRlbj10cnVlXSAtIElmIGB0cnVlYCwgZmxhdHRlbnMgdGhlIHJldHVybmVkIG9iamVjdFxuICAgKiB1c2luZyBcImtleXBhdGhcIi1zdHlsZSBrZXlzIG9mIHRoZSBmb3JtYXQgYDxleHRUeXBlPi48ZXh0TmFtZT4uPGFyZ05hbWU+YC5cbiAgICogT3RoZXJ3aXNlLCByZXR1cm5zIGEgbmVzdGVkIG9iamVjdCB1c2luZyBgZXh0VHlwZWAgYW5kIGBleHROYW1lYCBhc1xuICAgKiBwcm9wZXJ0aWVzLiBCYXNlIGFyZ3VtZW50cyAoc2VydmVyIGFyZ3VtZW50cykgYXJlIGFsd2F5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMgKGZsYXR0ZW4gPSAvKiogQHR5cGUge0ZsYXR0ZW5lZH0gKi8gKHRydWUpKSB7XG4gICAgaWYgKCF0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNhbGxiYWNrIERlZmF1bHRSZWR1Y2VyXG4gICAgICogQHBhcmFtIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59IGRlZmF1bHRzXG4gICAgICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjXG4gICAgICogQHJldHVybnMge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn1cbiAgICAgKi9cbiAgICAvKiogQHR5cGUge0RlZmF1bHRSZWR1Y2VyfSAqL1xuICAgIGNvbnN0IHJlZHVjZXIgPSBmbGF0dGVuXG4gICAgICA/IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICBkZWZhdWx0c1tkZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICB9XG4gICAgICA6IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICBfLnNldChkZWZhdWx0cywgZGVzdCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICB9O1xuXG4gICAgLyoqIEB0eXBlIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59ICovXG4gICAgY29uc3QgcmV0dmFsID0ge307XG4gICAgcmV0dXJuIFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0ucmVkdWNlKHJlZHVjZXIsIHJldHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZsYXR0ZW5lZCBSZWNvcmQgb2YgZGVmYXVsdHMgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLiBLZXlzIHdpbGxcbiAgICogYmUgb2YgZm9ybWF0IGA8YXJnTmFtZT5gLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLEFyZ1NwZWNEZWZhdWx0VmFsdWU+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24gKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHNwZWNzID0gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5maWx0ZXIoXG4gICAgICAoc3BlYykgPT4gc3BlYy5leHRUeXBlID09PSBleHRUeXBlICYmIHNwZWMuZXh0TmFtZSA9PT0gZXh0TmFtZSxcbiAgICApO1xuICAgIHJldHVybiBzcGVjcy5yZWR1Y2UoKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCByYXdEZXN0fSkgPT4ge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbcmF3RGVzdF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgYFNjaGVtYU9iamVjdGBzIGFuZCBhc3NvY2lhdGVkXG4gICAqIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfS5cbiAgICpcbiAgICogQ29udmVydHMgbmVzdGVkIGV4dGVuc2lvbiBzY2hlbWFzIHRvIGtleXMgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiB0eXBlIGFuZFxuICAgKiBuYW1lLiBVc2VkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYGFyZ3BhcnNlYCBvcHRpb25zIG9yIGdldHRpbmcgdGhlIGxpc3Qgb2ZcbiAgICogZGVmYXVsdCB2YWx1ZXMgKHNlZSB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfSkgZm9yIENMSSBvciBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJzZW50YXRpb24gdXNlZCBieSBgY2xpLWFyZ3NgXG4gICAqIG1vZHVsZSdzIGB0b1BhcnNlckFyZ3NgLCB3aGljaCBjb252ZXJ0cyB0aGUgZmluYWxpemVkIHNjaGVtYSB0byBwYXJhbWV0ZXJzXG4gICAqIHVzZWQgYnkgYGFyZ3BhcnNlYC5cbiAgICogQHRocm93cyBJZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAgICogQHJldHVybnMge0ZsYXR0ZW5lZFNjaGVtYX1cbiAgICovXG4gIGZsYXR0ZW4gKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG5cbiAgICAvKiogQHR5cGUgeyB7cHJvcGVydGllczogU2NoZW1hT2JqZWN0LCBwcmVmaXg6IHN0cmluZ1tdfVtdIH0gKi9cbiAgICBjb25zdCBzdGFjayA9IFt7cHJvcGVydGllczogc2NoZW1hLnByb3BlcnRpZXMsIHByZWZpeDogW119XTtcbiAgICAvKiogQHR5cGUge0ZsYXR0ZW5lZFNjaGVtYX0gKi9cbiAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcblxuICAgIC8vIHRoaXMgYml0IGlzIGEgcmVjdXJzaXZlIGFsZ29yaXRobSByZXdyaXR0ZW4gYXMgYSBmb3IgbG9vcC5cbiAgICAvLyB3aGVuIHdlIGZpbmQgc29tZXRoaW5nIHdlIHdhbnQgdG8gdHJhdmVyc2UsIHdlIGFkZCBpdCB0byBgc3RhY2tgXG4gICAgZm9yIChjb25zdCB7cHJvcGVydGllcywgcHJlZml4fSBvZiBzdGFjaykge1xuICAgICAgY29uc3QgcGFpcnMgPSBfLnRvUGFpcnMocHJvcGVydGllcyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwYWlycykge1xuICAgICAgICBjb25zdCB7cHJvcGVydGllcywgJHJlZn0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmVmaXg6IGtleSA9PT0gU0VSVkVSX1BST1BfTkFNRSA/IFtdIDogWy4uLnByZWZpeCwga2V5XSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgkcmVmKSB7XG4gICAgICAgICAgbGV0IHJlZlNjaGVtYTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVmU2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoJHJlZik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gaWYgYW4gZXh0ZW5zaW9uIHNjaGVtYSBzdXBwbGllcyBhICRyZWYgdG8gYSBub24tZXhpc3RlbnQgc2NoZW1hXG4gICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKCRyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7bm9ybWFsaXplZEV4dE5hbWV9ID1cbiAgICAgICAgICAgIEFyZ1NwZWMuZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQoJHJlZik7XG4gICAgICAgICAgaWYgKCFub3JtYWxpemVkRXh0TmFtZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgZXh0ZW5zaW9uIG5hbWUgZnJvbSBzY2hlbWEgSUQgJHskcmVmfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiByZWZTY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDogWy4uLnByZWZpeCwga2V5LCBub3JtYWxpemVkRXh0TmFtZV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSBEUklWRVJfVFlQRSAmJiBrZXkgIT09IFBMVUdJTl9UWVBFKSB7XG4gICAgICAgICAgY29uc3QgW2V4dFR5cGUsIGV4dE5hbWVdID0gcHJlZml4O1xuICAgICAgICAgIGNvbnN0IGFyZ1NwZWMgPSB0aGlzLmdldEFyZ1NwZWMoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAvKiogQHR5cGUge0V4dGVuc2lvblR5cGV9ICovIChleHRUeXBlKSxcbiAgICAgICAgICAgIGV4dE5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWFyZ1NwZWMpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIGFyZ3VtZW50IHdpdGgga2V5ICR7a2V5fSwgZXh0VHlwZSAke2V4dFR5cGV9IGFuZCBleHROYW1lICR7ZXh0TmFtZX0uIFRoaXMgaXMgYSBidWcuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHtzY2hlbWE6IF8uY2xvbmVEZWVwKHZhbHVlKSwgYXJnU3BlY30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHNjaGVtYSBpdHNlbGZcbiAgICogQHB1YmxpY1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSURcbiAgICogQHRocm93cyBJZiB0aGUgc2NoZW1hIGhhcyBub3QgeWV0IGJlZW4gZmluYWxpemVkXG4gICAqIEByZXR1cm5zIHtTY2hlbWFPYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEgKHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2NoZW1hT2JqZWN0fSAqLyAodGhpcy5fZ2V0VmFsaWRhdG9yKHJlZikuc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgc2NoZW1hIHZhbGlkYXRvciBmdW5jdGlvbiBmcm9tIEFqdlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFNjaGVtYSBJRFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufVxuICAgKi9cbiAgX2dldFZhbGlkYXRvciAoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUgKHZhbHVlLCByZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2dldFZhbGlkYXRvcihyZWYpO1xuICAgIHJldHVybiAhdmFsaWRhdG9yKHZhbHVlKSAmJiBfLmlzQXJyYXkodmFsaWRhdG9yLmVycm9ycylcbiAgICAgID8gWy4uLnZhbGlkYXRvci5lcnJvcnNdXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGBmaWxlbmFtZWAncyBmaWxlIGV4dGVuc2lvbiBpcyBhbGxvd2VkIChpbiB7QGxpbmsgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OU30pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiAoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUy5oYXMocGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYHNjaGVtYWAgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIG5vbi10cnVlIGAkYXN5bmNgIHByb3BlcnR5LlxuICAgKiBAcGFyYW0ge2FueX0gc2NoZW1hIC0gU2NoZW1hIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtzY2hlbWEgaXMgU2NoZW1hT2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkU2NoZW1hVHlwZSAoc2NoZW1hKSB7XG4gICAgcmV0dXJuIF8uaXNQbGFpbk9iamVjdChzY2hlbWEpICYmIHNjaGVtYS4kYXN5bmMgIT09IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiB0aGUge0BsaW5rIEFwcGl1bVNjaGVtYX0gaW5zdGFuY2UgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWQsIGJ1dFxuICogdGhlIG1ldGhvZCBjYWxsZWQgcmVxdWlyZXMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfU0NIRU1BX0ZJTkFMSVpBVElPTic7XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKCdTY2hlbWEgbm90IHlldCBmaW5hbGl6ZWQ7IGBmaW5hbGl6ZSgpYCBtdXN0IGJlIGNhbGxlZCBmaXJzdC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgXCJ1bmlxdWVcIiBzY2hlbWEgSUQgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hIElELlxuICpcbiAqIFRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGNhdXNlZCBieSBhdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIHNjaGVtYSB0d2ljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYU5hbWVDb25mbGljdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfTkFNRV9DT05GTElDVCc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgc3VwZXIoXG4gICAgICBgTmFtZSBmb3IgJHtleHRUeXBlfSBzY2hlbWEgXCIke2V4dE5hbWV9XCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hYCxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgc2NoZW1hIElEIHdhcyBleHBlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHtAbGluayBBanZ9IGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIGV4dGVuZHMgUmVmZXJlbmNlRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfVU5LTk9XTl9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYUlkOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFJZFxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNjaGVtYUlkKSB7XG4gICAgc3VwZXIoYFVua25vd24gc2NoZW1hOiBcIiR7c2NoZW1hSWR9XCJgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hSWR9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgaXMgcHJvdmlkZWQsIGJ1dCBpdCdzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUuXG4gKlxuICogXCJWYWxpZFwiIHNjaGVtYXMgd2hpY2ggYXJlIHVuc3VwcG9ydGVkIGluY2x1ZGUgYm9vbGVhbiBzY2hlbWFzIGFuZCBhc3luYyBzY2hlbWFzXG4gKiAoaGF2aW5nIGEgYHRydWVgIGAkYXN5bmNgIHByb3BlcnR5KS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IgZXh0ZW5kcyBUeXBlRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfVU5TVVBQT1JURURfU0NIRU1BJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtzY2hlbWE6IGFueSwgZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvODI3N1xuICAgIHN1cGVyKFxuICAgICAgKCgpID0+IHtcbiAgICAgICAgbGV0IG1zZyA9IGBVbnN1cHBvcnRlZCBzY2hlbWEgZnJvbSAke2V4dFR5cGV9IFwiJHtleHROYW1lfVwiOmA7XG4gICAgICAgIGlmIChfLmlzQm9vbGVhbihzY2hlbWEpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke21zZ30gc2NoZW1hIGNhbm5vdCBiZSBhIGJvb2xlYW5gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICAgIGlmIChzY2hlbWEuJGFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGFuIGFzeW5jIHNjaGVtYWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBzY2hlbWEgSVMgc3VwcG9ydGVkOyB0aGlzIGVycm9yIHNob3VsZCBub3QgYmUgdGhyb3duICh0aGlzIGlzIGEgYnVnKS4gdmFsdWUgb2Ygc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgbXVzdCBiZSBhIHBsYWluIG9iamVjdCB3aXRob3V0IGEgdHJ1ZSBcIiRhc3luY1wiIHByb3BlcnR5YDtcbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hLCBleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG5jb25zdCBhcHBpdW1TY2hlbWEgPSBBcHBpdW1TY2hlbWEuY3JlYXRlKCk7XG5cbmV4cG9ydCBjb25zdCB7XG4gIHJlZ2lzdGVyU2NoZW1hLFxuICBnZXRBbGxBcmdTcGVjcyxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGb3JTY2hlbWEsXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQXBwaXVtIG9ubHkgc3VwcG9ydHMgc2NoZW1hcyB0aGF0IGFyZSBwbGFpbiBvYmplY3RzOyBub3QgYXJyYXlzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0ICYge1trZXk6IG51bWJlcl06IG5ldmVyfX0gU2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9leHRlbnNpb24vbWFuaWZlc3QnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYgeyB7c2NoZW1hOiBTY2hlbWFPYmplY3QsIGFyZ1NwZWM6IEFyZ1NwZWN9W10gfSBGbGF0dGVuZWRTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcmdTcGVjWydkZWZhdWx0VmFsdWUnXX0gQXJnU3BlY0RlZmF1bHRWYWx1ZVxuICovXG5cbi8qKlxuICogZS5nLiBge2RyaXZlcjoge2ZvbzogJ2Jhcid9fWAgd2hlcmUgYGZvb2AgaXMgdGhlIGFyZyBuYW1lIGFuZCBgYmFyYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLFJlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT4+fSBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfVxuICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxGbGF0dGVuZWQgZXh0ZW5kcyB0cnVlID8gQXJnU3BlY0RlZmF1bHRWYWx1ZSA6IEFyZ1NwZWNEZWZhdWx0VmFsdWUgfCBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlPn0gRGVmYXVsdFZhbHVlc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUU8sTUFBTUEsYUFBTixTQUE0QkMsR0FBNUIsQ0FBZ0M7RUFLckNDLEdBQUcsQ0FBRUMsR0FBRixFQUFPQyxLQUFQLEVBQWM7SUFDZixJQUFJLEtBQUtDLEdBQUwsQ0FBU0YsR0FBVCxDQUFKLEVBQW1CO01BQ2pCLE1BQU0sSUFBSUcsS0FBSixDQUFXLEdBQUVILEdBQUksaUJBQWpCLENBQU47SUFDRDs7SUFDRCxPQUFPLE1BQU1ELEdBQU4sQ0FBVUMsR0FBVixFQUFlQyxLQUFmLENBQVA7RUFDRDs7RUFNREcsTUFBTSxDQUFFSixHQUFGLEVBQU87SUFDWCxPQUFPLEtBQVA7RUFDRDs7RUFFREssS0FBSyxHQUFJO0lBQ1AsTUFBTSxJQUFJRixLQUFKLENBQVcsNEJBQVgsQ0FBTjtFQUNEOztBQXRCb0M7OztBQTRCaEMsTUFBTUcseUJBQXlCLEdBQUcsSUFBSUMsR0FBSixDQUFRLENBQUMsT0FBRCxFQUFVLEtBQVYsRUFBaUIsTUFBakIsQ0FBUixDQUFsQzs7O0FBT1AsTUFBTUMsWUFBTixDQUFtQjtFQVVqQkMsU0FBUyxHQUFHLElB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
|
package/build/lib/utils.js
CHANGED
|
@@ -188,4 +188,4 @@ function pullSettings(caps) {
|
|
|
188
188
|
|
|
189
189
|
return result;
|
|
190
190
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwibWVzc2FnZSIsImluc2VydEFwcGl1bVByZWZpeGVzIiwiY2FwcyIsIlNUQU5EQVJEX0NBUFMiLCJwcmVmaXhlZENhcHMiLCJuYW1lIiwidmFsdWUiLCJpbmNsdWRlcyIsImZpeGVkQ2FwcyIsImtleSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJwdWxsU2V0dGluZ3MiLCJyZXN1bHQiLCJtYXRjaCIs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ICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBwcm9jZXNzQ2FwYWJpbGl0aWVzLCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGluc3BlY3QgYXMgZHVtcCB9IGZyb20gJ3V0aWwnO1xuXG5jb25zdCBXM0NfQVBQSVVNX1BSRUZJWCA9ICdhcHBpdW0nO1xuXG4vKipcbiAqXG4gKiBJZiBgc3Rkb3V0YCBpcyBhIFRUWSwgdGhpcyBpcyBgdHJ1ZWAuXG4gKlxuICogVXNlZCBmb3IgdGlnaHRlciBjb250cm9sIG92ZXIgbG9nIG91dHB1dC5cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0ZG91dFRUWSA9IHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xuXG4vKipcbiAqIER1bXBzIHRvIHZhbHVlIHRvIHRoZSBjb25zb2xlIHVzaW5nIGBpbmZvYCBsb2dnZXIuXG4gKlxuICogQHRvZG8gTWF5IHdhbnQgdG8gZm9yY2UgY29sb3IgdG8gYmUgYGZhbHNlYCBpZiB7QGxpbmsgaXNTdGRvdXRUVFl9IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IGluc3BlY3QgPSBfLmZsb3coXG4gIF8ucGFydGlhbFJpZ2h0KFxuICAgIC8qKiBAdHlwZSB7KG9iamVjdDogYW55LCBvcHRpb25zOiBpbXBvcnQoJ3V0aWwnKS5JbnNwZWN0T3B0aW9ucykgPT4gc3RyaW5nfSAqLyhkdW1wKSxcbiAgICB7Y29sb3JzOiB0cnVlLCBkZXB0aDogbnVsbCwgY29tcGFjdDogIWlzU3Rkb3V0VFRZfVxuICApLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGxvZ2dlci5pbmZvKC4uLmFyZ3MpO1xuICB9KTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHthbnl9IGpzb253cENhcGFiaWxpdGllc1xuICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllc1xuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db25zdHJhaW50c30gY29uc3RyYWludHNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGVmYXVsdENhcGFiaWxpdGllc0NvbmZpZ30gW2RlZmF1bHRDYXBhYmlsaXRpZXNdXG4gKiBAcmV0dXJucyB7UGFyc2VkRHJpdmVyQ2Fwc3xJbnZhbGlkQ2Fwc31cbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIgKGpzb253cENhcGFiaWxpdGllcywgdzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cyA9IHt9LCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge30pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID0gXy5pc1BsYWluT2JqZWN0KHczY0NhcGFiaWxpdGllcykgJiZcbiAgICAoXy5oYXModzNjQ2FwYWJpbGl0aWVzLCAnYWx3YXlzTWF0Y2gnKSB8fCBfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdmaXJzdE1hdGNoJykpO1xuICBjb25zdCBoYXNKU09OV1BDYXBzID0gXy5pc1BsYWluT2JqZWN0KGpzb253cENhcGFiaWxpdGllcyk7XG4gIGxldCBkZXNpcmVkQ2FwcyA9IC8qKiBAdHlwZSB7UGFyc2VkRHJpdmVyQ2Fwc1snZGVzaXJlZENhcHMnXX0gKi8oe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyh7XG4gICAgICBwcm90b2NvbDogUFJPVE9DT0xTLlczQyxcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ1czQyBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHByb3ZpZGVkJyksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB7VzNDfSA9IFBST1RPQ09MUztcbiAgY29uc3QgcHJvdG9jb2wgPSBXM0M7XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG4gIGpzb253cENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcGFiaWxpdGllcyk7XG4gIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcblxuICBpZiAoIV8uaXNFbXB0eShkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGlmIChoYXNXM0NDYXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtkZWZhdWx0Q2FwS2V5LCBkZWZhdWx0Q2FwVmFsdWVdIG9mIF8udG9QYWlycyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgICAgICBsZXQgaXNDYXBBbHJlYWR5U2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGZpcnN0TWF0Y2ggZW50cmllc1xuICAgICAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaXJzdE1hdGNoRW50cnkpXG4gICAgICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hFbnRyeSksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpIHtcbiAgICAgICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYWx3YXlzTWF0Y2ggZW50cmllc1xuICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSBpc0NhcEFscmVhZHlTZXQgfHwgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpXG4gICAgICAgICAgJiYgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKSk7XG4gICAgICAgIGlmIChpc0NhcEFscmVhZHlTZXQpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwcm92aWRlZCBjYXBzXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGFkZCB0aGUgZGVmYXVsdCBjYXBhYmlsaXR5IGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuXG4gICAgICAgIGlmIChfLmlzRW1wdHkodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2gpKSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPSBbe1tkZWZhdWx0Q2FwS2V5XTogZGVmYXVsdENhcFZhbHVlfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hbMF1bZGVmYXVsdENhcEtleV0gPSBkZWZhdWx0Q2FwVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICAgIGpzb253cENhcGFiaWxpdGllcyA9IHsuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSwgLi4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovKHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgdzNjIGNhcGFiaWxpdGllcyBwYXlsb2FkIHRoYXQgY29udGFpbnMgb25seSB0aGUgbWF0Y2hpbmcgY2FwcyBpbiBgYWx3YXlzTWF0Y2hgXG4gICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgYWx3YXlzTWF0Y2g6IHsuLi5pbnNlcnRBcHBpdW1QcmVmaXhlcyhkZXNpcmVkQ2Fwcyl9LFxuICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UGFyc2VkRHJpdmVyQ2Fwc30gKi8oe2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9KTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGNhcGFiaWxpdGllcyBvYmplY3RzIGFuZCBwcmVmaXhlcyBjYXBhYmlsaXRpZXMgd2l0aCBgYXBwaXVtOmBcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzIERlc2lyZWQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogQHJldHVybnMge0FwcGl1bVczQ0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0QXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuICBdO1xuXG4gIGxldCBwcmVmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU1RBTkRBUkRfQ0FQUy5pbmNsdWRlcyhuYW1lKSB8fCBuYW1lLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIHByZWZpeGVkQ2Fwc1tuYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhlZENhcHNbYCR7VzNDX0FQUElVTV9QUkVGSVh9OiR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZWRDYXBzO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0FwcGl1bVczQ0NhcGFiaWxpdGllc30gY2Fwc1xuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeCAoa2V5KSB7XG4gIGNvbnN0IHByZWZpeCA9IGAke1czQ19BUFBJVU1fUFJFRklYfTpgO1xuICByZXR1cm4gXy5zdGFydHNXaXRoKGtleSwgcHJlZml4KSA/IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkgOiBrZXk7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uIChwa2dOYW1lKSB7XG4gIGNvbnN0IHBrZ0luZm8gPSByZXF1aXJlKGAke3BrZ05hbWV9L3BhY2thZ2UuanNvbmApIHx8IHt9O1xuICByZXR1cm4gcGtnSW5mby52ZXJzaW9uO1xufVxuXG4vKipcbiAqIFB1bGxzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBBcHBpdW0gc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gY2FwYWJpbGl0aWVzIGFyZ3VtZW50LlxuICogRWFjaCBzZXR0aW5nIGl0ZW0gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICogYHNldHRpbmdbc2V0dGluZ19uYW1lXTogc2V0dGluZ192YWx1ZWBcbiAqIFRoZSBjYXBhYmlsaXRpZXMgYXJndW1lbnQgaXRzZWxmIGdldHMgbXV0YXRlZCwgc28gaXQgZG9lcyBub3QgY29udGFpbiBwYXJzZWRcbiAqIHNldHRpbmdzIGFueW1vcmUgdG8gYXZvaWQgZnVydGhlciBwYXJzaW5nIGlzc3Vlcy5cbiAqIENoZWNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL2FkdmFuY2VkLWNvbmNlcHRzL3NldHRpbmdzLm1kXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSBjYXBzIC0gQ2FwYWJpbGl0aWVzIGRpY3Rpb25hcnkuIEl0IGlzIG11dGF0ZWQgaWZcbiAqIG9uZSBvciBtb3JlIHNldHRpbmdzIGhhdmUgYmVlbiBwdWxsZWQgZnJvbSBpdFxuICogQHJldHVybiB7T2JqZWN0fSAtIEFuIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlIGdpdmVuIGNhcHMgY29udGFpbnMgbm9cbiAqIHNldHRpbmcgaXRlbXMgb3IgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgcGFyc2VkIEFwcGl1bSBzZXR0aW5nIG5hbWVzIGFsb25nIHdpdGhcbiAqIHRoZWlyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcHVsbFNldHRpbmdzIChjYXBzKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpIHx8IF8uaXNFbXB0eShjYXBzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBjb25zdCBtYXRjaCA9IC9cXGJzZXR0aW5nc1xcWyhcXFMrKVxcXSQvLmV4ZWMoa2V5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgZGVsZXRlIGNhcHNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LCBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciwgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsXG4gIGdldFBhY2thZ2VWZXJzaW9uLCBwdWxsU2V0dGluZ3MsIHJlbW92ZUFwcGl1bVByZWZpeGVzXG59O1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIFBhcnNlZERyaXZlckNhcHNcbiAqIEBwcm9wZXJ0eSB7Q2FwYWJpbGl0aWVzfSBkZXNpcmVkQ2Fwc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge2FueX0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzfSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHRvZG8gcHJvdG9jb2wgaXMgbW9yZSBzcGVjaWZpY1xuICogQHR5cGVkZWYgSW52YWxpZENhcHNcbiAqIEBwcm9wZXJ0eSB7RXJyb3J9IGVycm9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdG9jb2xcbiAqIEBwcm9wZXJ0eSB7Q2FwYWJpbGl0aWVzfSBbZGVzaXJlZENhcHNdXG4gKiBAcHJvcGVydHkge2FueX0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzfSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1XM0NDYXBhYmlsaXRpZXN9IEFwcGl1bVczQ0NhcGFiaWxpdGllc1xuICovXG4iXX0=
|
|
191
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwibWVzc2FnZSIsImluc2VydEFwcGl1bVByZWZpeGVzIiwiY2FwcyIsIlNUQU5EQVJEX0NBUFMiLCJwcmVmaXhlZENhcHMiLCJuYW1lIiwidmFsdWUiLCJpbmNsdWRlcyIsImZpeGVkQ2FwcyIsImtleSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJwdWxsU2V0dGluZ3MiLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBwcm9jZXNzQ2FwYWJpbGl0aWVzLCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGluc3BlY3QgYXMgZHVtcCB9IGZyb20gJ3V0aWwnO1xuXG5jb25zdCBXM0NfQVBQSVVNX1BSRUZJWCA9ICdhcHBpdW0nO1xuXG4vKipcbiAqXG4gKiBJZiBgc3Rkb3V0YCBpcyBhIFRUWSwgdGhpcyBpcyBgdHJ1ZWAuXG4gKlxuICogVXNlZCBmb3IgdGlnaHRlciBjb250cm9sIG92ZXIgbG9nIG91dHB1dC5cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0ZG91dFRUWSA9IHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xuXG4vKipcbiAqIER1bXBzIHRvIHZhbHVlIHRvIHRoZSBjb25zb2xlIHVzaW5nIGBpbmZvYCBsb2dnZXIuXG4gKlxuICogQHRvZG8gTWF5IHdhbnQgdG8gZm9yY2UgY29sb3IgdG8gYmUgYGZhbHNlYCBpZiB7QGxpbmsgaXNTdGRvdXRUVFl9IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IGluc3BlY3QgPSBfLmZsb3coXG4gIF8ucGFydGlhbFJpZ2h0KFxuICAgIC8qKiBAdHlwZSB7KG9iamVjdDogYW55LCBvcHRpb25zOiBpbXBvcnQoJ3V0aWwnKS5JbnNwZWN0T3B0aW9ucykgPT4gc3RyaW5nfSAqLyhkdW1wKSxcbiAgICB7Y29sb3JzOiB0cnVlLCBkZXB0aDogbnVsbCwgY29tcGFjdDogIWlzU3Rkb3V0VFRZfVxuICApLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGxvZ2dlci5pbmZvKC4uLmFyZ3MpO1xuICB9KTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHthbnl9IGpzb253cENhcGFiaWxpdGllc1xuICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllc1xuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db25zdHJhaW50c30gY29uc3RyYWludHNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGVmYXVsdENhcGFiaWxpdGllc0NvbmZpZ30gW2RlZmF1bHRDYXBhYmlsaXRpZXNdXG4gKiBAcmV0dXJucyB7UGFyc2VkRHJpdmVyQ2Fwc3xJbnZhbGlkQ2Fwc31cbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIgKGpzb253cENhcGFiaWxpdGllcywgdzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cyA9IHt9LCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge30pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID0gXy5pc1BsYWluT2JqZWN0KHczY0NhcGFiaWxpdGllcykgJiZcbiAgICAoXy5oYXModzNjQ2FwYWJpbGl0aWVzLCAnYWx3YXlzTWF0Y2gnKSB8fCBfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdmaXJzdE1hdGNoJykpO1xuICBjb25zdCBoYXNKU09OV1BDYXBzID0gXy5pc1BsYWluT2JqZWN0KGpzb253cENhcGFiaWxpdGllcyk7XG4gIGxldCBkZXNpcmVkQ2FwcyA9IC8qKiBAdHlwZSB7UGFyc2VkRHJpdmVyQ2Fwc1snZGVzaXJlZENhcHMnXX0gKi8oe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyh7XG4gICAgICBwcm90b2NvbDogUFJPVE9DT0xTLlczQyxcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ1czQyBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHByb3ZpZGVkJyksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB7VzNDfSA9IFBST1RPQ09MUztcbiAgY29uc3QgcHJvdG9jb2wgPSBXM0M7XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG4gIGpzb253cENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcGFiaWxpdGllcyk7XG4gIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcblxuICBpZiAoIV8uaXNFbXB0eShkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGlmIChoYXNXM0NDYXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtkZWZhdWx0Q2FwS2V5LCBkZWZhdWx0Q2FwVmFsdWVdIG9mIF8udG9QYWlycyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgICAgICBsZXQgaXNDYXBBbHJlYWR5U2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGZpcnN0TWF0Y2ggZW50cmllc1xuICAgICAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaXJzdE1hdGNoRW50cnkpXG4gICAgICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hFbnRyeSksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpIHtcbiAgICAgICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYWx3YXlzTWF0Y2ggZW50cmllc1xuICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSBpc0NhcEFscmVhZHlTZXQgfHwgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpXG4gICAgICAgICAgJiYgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKSk7XG4gICAgICAgIGlmIChpc0NhcEFscmVhZHlTZXQpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwcm92aWRlZCBjYXBzXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGFkZCB0aGUgZGVmYXVsdCBjYXBhYmlsaXR5IGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuXG4gICAgICAgIGlmIChfLmlzRW1wdHkodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2gpKSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPSBbe1tkZWZhdWx0Q2FwS2V5XTogZGVmYXVsdENhcFZhbHVlfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hbMF1bZGVmYXVsdENhcEtleV0gPSBkZWZhdWx0Q2FwVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICAgIGpzb253cENhcGFiaWxpdGllcyA9IHsuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSwgLi4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovKHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgdzNjIGNhcGFiaWxpdGllcyBwYXlsb2FkIHRoYXQgY29udGFpbnMgb25seSB0aGUgbWF0Y2hpbmcgY2FwcyBpbiBgYWx3YXlzTWF0Y2hgXG4gICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgYWx3YXlzTWF0Y2g6IHsuLi5pbnNlcnRBcHBpdW1QcmVmaXhlcyhkZXNpcmVkQ2Fwcyl9LFxuICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UGFyc2VkRHJpdmVyQ2Fwc30gKi8oe2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9KTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGNhcGFiaWxpdGllcyBvYmplY3RzIGFuZCBwcmVmaXhlcyBjYXBhYmlsaXRpZXMgd2l0aCBgYXBwaXVtOmBcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzIERlc2lyZWQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogQHJldHVybnMge0FwcGl1bVczQ0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0QXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuICBdO1xuXG4gIGxldCBwcmVmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU1RBTkRBUkRfQ0FQUy5pbmNsdWRlcyhuYW1lKSB8fCBuYW1lLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIHByZWZpeGVkQ2Fwc1tuYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhlZENhcHNbYCR7VzNDX0FQUElVTV9QUkVGSVh9OiR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZWRDYXBzO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0FwcGl1bVczQ0NhcGFiaWxpdGllc30gY2Fwc1xuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeCAoa2V5KSB7XG4gIGNvbnN0IHByZWZpeCA9IGAke1czQ19BUFBJVU1fUFJFRklYfTpgO1xuICByZXR1cm4gXy5zdGFydHNXaXRoKGtleSwgcHJlZml4KSA/IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkgOiBrZXk7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uIChwa2dOYW1lKSB7XG4gIGNvbnN0IHBrZ0luZm8gPSByZXF1aXJlKGAke3BrZ05hbWV9L3BhY2thZ2UuanNvbmApIHx8IHt9O1xuICByZXR1cm4gcGtnSW5mby52ZXJzaW9uO1xufVxuXG4vKipcbiAqIFB1bGxzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBBcHBpdW0gc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gY2FwYWJpbGl0aWVzIGFyZ3VtZW50LlxuICogRWFjaCBzZXR0aW5nIGl0ZW0gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICogYHNldHRpbmdbc2V0dGluZ19uYW1lXTogc2V0dGluZ192YWx1ZWBcbiAqIFRoZSBjYXBhYmlsaXRpZXMgYXJndW1lbnQgaXRzZWxmIGdldHMgbXV0YXRlZCwgc28gaXQgZG9lcyBub3QgY29udGFpbiBwYXJzZWRcbiAqIHNldHRpbmdzIGFueW1vcmUgdG8gYXZvaWQgZnVydGhlciBwYXJzaW5nIGlzc3Vlcy5cbiAqIENoZWNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL2FkdmFuY2VkLWNvbmNlcHRzL3NldHRpbmdzLm1kXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSBjYXBzIC0gQ2FwYWJpbGl0aWVzIGRpY3Rpb25hcnkuIEl0IGlzIG11dGF0ZWQgaWZcbiAqIG9uZSBvciBtb3JlIHNldHRpbmdzIGhhdmUgYmVlbiBwdWxsZWQgZnJvbSBpdFxuICogQHJldHVybiB7T2JqZWN0fSAtIEFuIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlIGdpdmVuIGNhcHMgY29udGFpbnMgbm9cbiAqIHNldHRpbmcgaXRlbXMgb3IgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgcGFyc2VkIEFwcGl1bSBzZXR0aW5nIG5hbWVzIGFsb25nIHdpdGhcbiAqIHRoZWlyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcHVsbFNldHRpbmdzIChjYXBzKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpIHx8IF8uaXNFbXB0eShjYXBzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBjb25zdCBtYXRjaCA9IC9cXGJzZXR0aW5nc1xcWyhcXFMrKVxcXSQvLmV4ZWMoa2V5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgZGVsZXRlIGNhcHNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LCBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciwgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsXG4gIGdldFBhY2thZ2VWZXJzaW9uLCBwdWxsU2V0dGluZ3MsIHJlbW92ZUFwcGl1bVByZWZpeGVzXG59O1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIFBhcnNlZERyaXZlckNhcHNcbiAqIEBwcm9wZXJ0eSB7Q2FwYWJpbGl0aWVzfSBkZXNpcmVkQ2Fwc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge2FueX0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzfSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHRvZG8gcHJvdG9jb2wgaXMgbW9yZSBzcGVjaWZpY1xuICogQHR5cGVkZWYgSW52YWxpZENhcHNcbiAqIEBwcm9wZXJ0eSB7RXJyb3J9IGVycm9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdG9jb2xcbiAqIEBwcm9wZXJ0eSB7Q2FwYWJpbGl0aWVzfSBbZGVzaXJlZENhcHNdXG4gKiBAcHJvcGVydHkge2FueX0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzfSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1XM0NDYXBhYmlsaXRpZXN9IEFwcGl1bVczQ0NhcGFiaWxpdGllc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxpQkFBaUIsR0FBRyxRQUExQjtBQVNBLE1BQU1DLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxNQUFSLENBQWVDLEtBQW5DOztBQU9BLE1BQU1DLE9BQU8sR0FBR0MsZ0JBQUVDLElBQUYsQ0FDZEQsZ0JBQUVFLFlBQUYsQ0FDaUZDLGFBRGpGLEVBRUU7RUFBQ0MsTUFBTSxFQUFFLElBQVQ7RUFBZUMsS0FBSyxFQUFFLElBQXRCO0VBQTRCQyxPQUFPLEVBQUUsQ0FBQ1g7QUFBdEMsQ0FGRixDQURjLEVBS2QsQ0FBQyxHQUFHWSxJQUFKLEtBQWE7RUFDWEMsZ0JBQU9DLElBQVAsQ0FBWSxHQUFHRixJQUFmO0FBQ0QsQ0FQYSxDQUFoQjs7OztBQW1CQSxTQUFTRyx1QkFBVCxDQUFrQ0Msa0JBQWxDLEVBQXNEQyxlQUF0RCxFQUF1RUMsV0FBVyxHQUFHLEVBQXJGLEVBQXlGQyxtQkFBbUIsR0FBRyxFQUEvRyxFQUFtSDtFQUVqSCxNQUFNQyxVQUFVLEdBQUdmLGdCQUFFZ0IsYUFBRixDQUFnQkosZUFBaEIsTUFDaEJaLGdCQUFFaUIsR0FBRixDQUFNTCxlQUFOLEVBQXVCLGFBQXZCLEtBQXlDWixnQkFBRWlCLEdBQUYsQ0FBTUwsZUFBTixFQUF1QixZQUF2QixDQUR6QixDQUFuQjs7RUFFQSxNQUFNTSxhQUFhLEdBQUdsQixnQkFBRWdCLGFBQUYsQ0FBZ0JMLGtCQUFoQixDQUF0Qjs7RUFDQSxJQUFJUSxXQUFXLEdBQWtELEVBQWpFO0VBRUEsSUFBSUMsd0JBQUo7RUFFQSxJQUFJQywyQkFBSjs7RUFFQSxJQUFJLENBQUNOLFVBQUwsRUFBaUI7SUFDZixPQUFrQztNQUNoQ08sUUFBUSxFQUFFQyxzQkFBVUMsR0FEWTtNQUVoQ0MsS0FBSyxFQUFFLElBQUlDLEtBQUosQ0FBVSxxQ0FBVjtJQUZ5QixDQUFsQztFQUlEOztFQUVELE1BQU07SUFBQ0Y7RUFBRCxJQUFRRCxxQkFBZDtFQUNBLE1BQU1ELFFBQVEsR0FBR0UsR0FBakI7RUFHQWIsa0JBQWtCLEdBQUdYLGdCQUFFMkIsU0FBRixDQUFZaEIsa0JBQVosQ0FBckI7RUFDQUMsZUFBZSxHQUFHWixnQkFBRTJCLFNBQUYsQ0FBWWYsZUFBWixDQUFsQjtFQUNBRSxtQkFBbUIsR0FBR2QsZ0JBQUUyQixTQUFGLENBQVliLG1CQUFaLENBQXRCOztFQUVBLElBQUksQ0FBQ2QsZ0JBQUU0QixPQUFGLENBQVVkLG1CQUFWLENBQUwsRUFBcUM7SUFDbkMsSUFBSUMsVUFBSixFQUFnQjtNQUNkLEtBQUssTUFBTSxDQUFDYyxhQUFELEVBQWdCQyxlQUFoQixDQUFYLElBQStDOUIsZ0JBQUUrQixPQUFGLENBQVVqQixtQkFBVixDQUEvQyxFQUErRTtRQUM3RSxJQUFJa0IsZUFBZSxHQUFHLEtBQXRCOztRQUVBLEtBQUssTUFBTUMsZUFBWCxJQUErQnJCLGVBQWUsQ0FBQ3NCLFVBQWhCLElBQThCLEVBQTdELEVBQWtFO1VBQ2hFLElBQUlsQyxnQkFBRWdCLGFBQUYsQ0FBZ0JpQixlQUFoQixLQUNHakMsZ0JBQUVpQixHQUFGLENBQU1rQixvQkFBb0IsQ0FBQ0YsZUFBRCxDQUExQixFQUE2Q0csa0JBQWtCLENBQUNQLGFBQUQsQ0FBL0QsQ0FEUCxFQUN3RjtZQUN0RkcsZUFBZSxHQUFHLElBQWxCO1lBQ0E7VUFDRDtRQUNGOztRQUVEQSxlQUFlLEdBQUdBLGVBQWUsSUFBS2hDLGdCQUFFZ0IsYUFBRixDQUFnQkosZUFBZSxDQUFDeUIsV0FBaEMsS0FDakNyQyxnQkFBRWlCLEdBQUYsQ0FBTWtCLG9CQUFvQixDQUFDdkIsZUFBZSxDQUFDeUIsV0FBakIsQ0FBMUIsRUFBeURELGtCQUFrQixDQUFDUCxhQUFELENBQTNFLENBREw7O1FBRUEsSUFBSUcsZUFBSixFQUFxQjtVQUVuQjtRQUNEOztRQUdELElBQUloQyxnQkFBRTRCLE9BQUYsQ0FBVWhCLGVBQWUsQ0FBQ3NCLFVBQTFCLENBQUosRUFBMkM7VUFDekN0QixlQUFlLENBQUNzQixVQUFoQixHQUE2QixDQUFDO1lBQUMsQ0FBQ0wsYUFBRCxHQUFpQkM7VUFBbEIsQ0FBRCxDQUE3QjtRQUNELENBRkQsTUFFTztVQUNMbEIsZUFBZSxDQUFDc0IsVUFBaEIsQ0FBMkIsQ0FBM0IsRUFBOEJMLGFBQTlCLElBQStDQyxlQUEvQztRQUNEO01BQ0Y7SUFDRjs7SUFDRCxJQUFJWixhQUFKLEVBQW1CO01BQ2pCUCxrQkFBa0IsR0FBRyxFQUFDLEdBQUd3QixvQkFBb0IsQ0FBQ3JCLG1CQUFELENBQXhCO1FBQStDLEdBQUdIO01BQWxELENBQXJCO0lBQ0Q7RUFDRjs7RUFHRCxJQUFJTyxhQUFKLEVBQW1CO0lBQ2pCRywyQkFBMkIsR0FBRyxFQUFDLEdBQUdWO0lBQUosQ0FBOUI7RUFDRDs7RUFHRCxJQUFJSSxVQUFKLEVBQWdCO0lBR2QsSUFBSTtNQUNGSSxXQUFXLEdBQUcscUNBQW9CUCxlQUFwQixFQUFxQ0MsV0FBckMsRUFBa0QsSUFBbEQsQ0FBZDtJQUNELENBRkQsQ0FFRSxPQUFPWSxLQUFQLEVBQWM7TUFDZGpCLGdCQUFPQyxJQUFQLENBQWEscUNBQW9DZ0IsS0FBSyxDQUFDYSxPQUFRLEVBQS9EOztNQUNBLE9BQWtDO1FBQ2hDbkIsV0FEZ0M7UUFFaENFLDJCQUZnQztRQUdoQ0Qsd0JBSGdDO1FBSWhDRSxRQUpnQztRQUtoQ0c7TUFMZ0MsQ0FBbEM7SUFPRDs7SUFHREwsd0JBQXdCLEdBQUc7TUFDekJpQixXQUFXLEVBQUUsRUFBQyxHQUFHRSxvQkFBb0IsQ0FBQ3BCLFdBQUQ7TUFBeEIsQ0FEWTtNQUV6QmUsVUFBVSxFQUFFLENBQUMsRUFBRDtJQUZhLENBQTNCO0VBSUQ7O0VBRUQsT0FBdUM7SUFBQ2YsV0FBRDtJQUFjRSwyQkFBZDtJQUEyQ0Qsd0JBQTNDO0lBQXFFRTtFQUFyRSxDQUF2QztBQUNEOztBQU9ELFNBQVNpQixvQkFBVCxDQUErQkMsSUFBL0IsRUFBcUM7RUFFbkMsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLGFBRG9CLEVBRXBCLGdCQUZvQixFQUdwQixjQUhvQixFQUlwQixxQkFKb0IsRUFLcEIsa0JBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLGVBUG9CLEVBUXBCLFVBUm9CLEVBU3BCLHlCQVRvQixDQUF0QjtFQVlBLElBQUlDLFlBQVksR0FBRyxFQUFuQjs7RUFDQSxLQUFLLElBQUksQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLENBQVQsSUFBMEI1QyxnQkFBRStCLE9BQUYsQ0FBVVMsSUFBVixDQUExQixFQUEyQztJQUN6QyxJQUFJQyxhQUFhLENBQUNJLFFBQWQsQ0FBdUJGLElBQXZCLEtBQWdDQSxJQUFJLENBQUNFLFFBQUwsQ0FBYyxHQUFkLENBQXBDLEVBQXdEO01BQ3RESCxZQUFZLENBQUNDLElBQUQsQ0FBWixHQUFxQkMsS0FBckI7SUFDRCxDQUZELE1BRU87TUFDTEYsWUFBWSxDQUFFLEdBQUVoRCxpQkFBa0IsSUFBR2lELElBQUssRUFBOUIsQ0FBWixHQUErQ0MsS0FBL0M7SUFDRDtFQUNGOztFQUNELE9BQU9GLFlBQVA7QUFDRDs7QUFPRCxTQUFTUCxvQkFBVCxDQUErQkssSUFBL0IsRUFBcUM7RUFDbkMsSUFBSSxDQUFDeEMsZ0JBQUVnQixhQUFGLENBQWdCd0IsSUFBaEIsQ0FBTCxFQUE0QjtJQUMxQixPQUFPQSxJQUFQO0VBQ0Q7O0VBR0QsTUFBTU0sU0FBUyxHQUFHLEVBQWxCOztFQUNBLEtBQUssSUFBSSxDQUFDSCxJQUFELEVBQU9DLEtBQVAsQ0FBVCxJQUEwQjVDLGdCQUFFK0IsT0FBRixDQUFVUyxJQUFWLENBQTFCLEVBQTJDO0lBQ3pDTSxTQUFTLENBQUNWLGtCQUFrQixDQUFDTyxJQUFELENBQW5CLENBQVQsR0FBc0NDLEtBQXRDO0VBQ0Q7O0VBQ0QsT0FBT0UsU0FBUDtBQUNEOztBQUVELFNBQVNWLGtCQUFULENBQTZCVyxHQUE3QixFQUFrQztFQUNoQyxNQUFNQyxNQUFNLEdBQUksR0FBRXRELGlCQUFrQixHQUFwQztFQUNBLE9BQU9NLGdCQUFFaUQsVUFBRixDQUFhRixHQUFiLEVBQWtCQyxNQUFsQixJQUE0QkQsR0FBRyxDQUFDRyxTQUFKLENBQWNGLE1BQU0sQ0FBQ0csTUFBckIsQ0FBNUIsR0FBMkRKLEdBQWxFO0FBQ0Q7O0FBRUQsU0FBU0ssaUJBQVQsQ0FBNEJDLE9BQTVCLEVBQXFDO0VBQ25DLE1BQU1DLE9BQU8sR0FBR0MsT0FBTyxDQUFFLEdBQUVGLE9BQVEsZUFBWixDQUFQLElBQXNDLEVBQXREO0VBQ0EsT0FBT0MsT0FBTyxDQUFDRSxPQUFmO0FBQ0Q7O0FBa0JELFNBQVNDLFlBQVQsQ0FBdUJqQixJQUF2QixFQUE2QjtFQUMzQixJQUFJLENBQUN4QyxnQkFBRWdCLGFBQUYsQ0FBZ0J3QixJQUFoQixDQUFELElBQTBCeEMsZ0JBQUU0QixPQUFGLENBQVVZLElBQVYsQ0FBOUIsRUFBK0M7SUFDN0MsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsTUFBTWtCLE1BQU0sR0FBRyxFQUFmOztFQUNBLEtBQUssTUFBTSxDQUFDWCxHQUFELEVBQU1ILEtBQU4sQ0FBWCxJQUEyQjVDLGdCQUFFK0IsT0FBRixDQUFVUyxJQUFWLENBQTNCLEVBQTRDO0lBQzFDLE1BQU1tQixLQUFLLEdBQUcsdUJBQXVCQyxJQUF2QixDQUE0QmIsR0FBNUIsQ0FBZDs7SUFDQSxJQUFJLENBQUNZLEtBQUwsRUFBWTtNQUNWO0lBQ0Q7O0lBRURELE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUQsQ0FBTixDQUFOLEdBQW1CZixLQUFuQjtJQUNBLE9BQU9KLElBQUksQ0FBQ08sR0FBRCxDQUFYO0VBQ0Q7O0VBQ0QsT0FBT1csTUFBUDtBQUNEIn0=
|