@gravitee/ui-components 3.25.1 → 3.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravitee/ui-components",
3
- "version": "3.25.1",
3
+ "version": "3.25.3",
4
4
  "description": "Gravitee.io UI Components library, based on Web Components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -550,7 +550,7 @@ export class GvSchemaForm extends LitElement {
550
550
  if (this.schema) {
551
551
  // Additional properties should not block the validation of the form
552
552
  this._validatorResults = this._validator.validate(this._values, { ...this.schema,
553
- additionalProperties: true
553
+ additionalProperties: {}
554
554
  });
555
555
  this.errors = this._getErrors();
556
556
  }
@@ -643,4 +643,4 @@ export class GvSchemaForm extends LitElement {
643
643
 
644
644
  }
645
645
  window.customElements.define('gv-schema-form', GvSchemaForm);
646
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImdldCIsInNldCIsImRlbCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJjbGFzc01hcCIsInJlcGVhdCIsIlZhbGlkYXRvciIsImVtcHR5IiwiR3ZTY2hlbWFGb3JtIiwicHJvcGVydGllcyIsInNjaGVtYSIsInR5cGUiLCJPYmplY3QiLCJlcnJvcnMiLCJ2YWx1ZXMiLCJzdWJtaXRMYWJlbCIsIlN0cmluZyIsImhhc0Zvb3RlciIsIkJvb2xlYW4iLCJhdHRyaWJ1dGUiLCJoYXNIZWFkZXIiLCJfY29uZmlybSIsIl92YWx1ZXMiLCJkaXJ0eSIsInJlZmxlY3QiLCJoaWRlRGVwcmVjYXRlZCIsInZhbGlkYXRlT25SZW5kZXIiLCJfdmFsaWRhdG9yUmVzdWx0cyIsInNrZWxldG9uIiwiX3RvdWNoIiwicmVhZG9ubHkiLCJzY3JvbGxhYmxlIiwiZ3JvdXBzIiwiQXJyYXkiLCJjb25zdHJ1Y3RvciIsIl92YWxpZGF0b3IiLCJfaWdub3JlUHJvcGVydGllcyIsIl9keW5hbWljQ29udHJvbHMiLCJfZHluYW1pY0F0dHJpYnV0ZXMiLCJhZGRFdmVudExpc3RlbmVyIiwiX29uRGVmYXVsdFZhbHVlIiwiYmluZCIsIl9vbkNoYW5nZSIsIl9vbkNvbnRyb2xSZWFkeSIsIl9pbml0aWFsVmFsdWVzIiwicmVzZXQiLCJfc2V0RGlydHkiLCJnZXRDb250cm9scyIsImZvckVhY2giLCJzIiwicmVxdWVzdFVwZGF0ZSIsIl9vblJlc2V0IiwicmVxdWVzdFZhbGlkYXRpb24iLCJjbGVhclRpbWVvdXQiLCJfdmFsaWRhdGVUaW1lb3V0Iiwic2V0VGltZW91dCIsInZhbGlkYXRlIiwiX3VwZGF0ZUFjdGlvbnMiLCJzdWJtaXQiLCJfb25TdWJtaXQiLCJ2YWxpZGF0b3JSZXN1bHRzIiwiaXNWYWxpZCIsIl9zZXRUb3VjaCIsInRvdWNoIiwiY29uZmlybSIsImlzVG91Y2giLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfb25Db25maXJtUmVzZXQiLCJ1cGRhdGVDb21wbGV0ZSIsInRoZW4iLCJfb25Db25maXJtRWRpdCIsIl91cGRhdGVDaGlsZHJlbiIsIl9nZXRTdWJtaXRCdG4iLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsIl9nZXRSZXNldEJ0biIsIl9kaXNwYXRjaENoYW5nZSIsIl9jaGFuZ2VUaW1lb3V0IiwidGFyZ2V0IiwidmFsaWRhdGlvbiIsImRldGFpbCIsImN1cnJlbnRUYXJnZXQiLCJ2YWx1ZSIsImNvbnRyb2wiLCJ0cmltIiwibGVuZ3RoIiwicGFyc2VJbnQiLCJpZCIsImludFZhbHVlIiwiTnVtYmVyIiwidmFsdWVPZiIsImlzTmFOIiwiZW51bSIsImtleXMiLCJfdXBkYXRlRHluYW1pY0NvbnRyb2xzIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiY29udHJvbEVsZW1lbnQiLCJldmVudCIsIm5hbWUiLCJfaGFzQ29uZGl0aW9uIiwicHVzaCIsIl91cGRhdGVEeW5hbWljQ29udHJvbCIsImlzIiwiX2V2YWx1YXRlQ29uZGl0aW9uIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwicGVyZm9ybVVwZGF0ZSIsImFsbCIsIm1hcCIsIl9yZW5kZXJDb250cm9sIiwia2V5IiwiaXNSZXF1aXJlZCIsInJlcXVpcmVkIiwiaW5jbHVkZXMiLCJpc0Rpc2FibGVkIiwiZGlzYWJsZWQiLCJpc0hpZGRlbiIsImlzUmVhZG9ubHkiLCJyZWFkT25seSIsImlzV3JpdGVPbmx5Iiwid3JpdGVPbmx5IiwiZmluZCIsImNvbmRpdGlvbiIsImNvbmRpdGlvbktleSIsImlzQXJyYXkiLCJjb25zb2xlIiwid2FybiIsInJlc3VsdCIsIm9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiX2V2YWx1YXRlTm90RXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uIiwiX2V2YWx1YXRlRGVmQ29uZGl0aW9uIiwib3BlcmFuZHMiLCJtb2RlbEF0dHJpYnV0ZXMiLCJtb2RlbEF0dHJpYnV0ZSIsInRlc3RWYWx1ZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJfcmVuZGVyUGFydCIsImdyb3Vwc0NsZWFuZWQiLCJwcmV2IiwiZ3JvdXAiLCJpdGVtc0V4aXN0aW5nSW5TY2hlbWFLZXlzIiwiZmlsdGVyIiwiaXRlbXMiLCJkZWZhdWx0R3JvdXAiLCJnIiwiZGVmYXVsdCIsInppcEdyb3VwZWRJdGVtcyIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsIl9nZXRFcnJvcnMiLCJlcnJvciIsInByb3BlcnR5IiwicmVwbGFjZSIsImFyZ3VtZW50IiwiZXJyb3JLZXkiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJ2YWxpZCIsImNhblN1Ym1pdCIsInN1Ym1pdEJ0biIsInJlc2V0QnRuIiwid2l0aFZhbGlkYXRpb24iLCJfdXBkYXRlQWN0aW9uc1RpbWVvdXQiLCJ1cGRhdGVkIiwiY2hhbmdlZFByb3BlcnRpZXMiLCJoYXMiLCJnZXRVcGRhdGVDb21wbGV0ZSIsInJlbmRlciIsImNvbnRhaW5lciIsInRpdGxlIiwiY2VudGVyIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFVBQVQsRUFBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLEdBQVQsRUFBY0MsR0FBZCxFQUFtQkMsR0FBbkIsUUFBOEIsYUFBOUI7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TUFBQUEsTUFBTSxFQUFFLEtBQUtuSyxTQUFMLElBQWtCLENBQUMsS0FBS0g7QUFBL0MsS0FBRCxDQUZ0QixtR0FRRSxLQUFLYSxRQUFMLEtBQWtCLElBQWxCLElBQTBCLEtBQUtiLFNBQUwsS0FBbUIsSUFBN0MsR0FDRSxFQURGLEdBRUVyQixJQUFJLDhFQUtvQixLQUFLdUQsUUFMekIscUdBWW9CLEtBQUtRLFNBWnpCLCtCQWNVLEtBQUs1QyxXQWRmLHdCQVZSLFVBRE4sR0E4QkUsRUFoQ0cseUJBaUNnQixLQUFLTCxNQUFMLElBQWUsSUFBZixHQUFzQixLQUFLeUksV0FBTCxFQUF0QixHQUEyQ3ZKLElBQUksRUFqQy9ELFVBa0NMLEtBQUtxQixTQUFMLEtBQW1CLElBQW5CLElBQTJCLEtBQUthLFFBQUwsS0FBa0IsSUFBN0MsR0FDRWxDLElBQUksdUhBSXFELEtBQUt1RCxRQUoxRCxvR0FLNkMsS0FBS1EsU0FMbEQsK0JBSzBGLEtBQUs1QyxXQUwvRixLQU1PLEtBQUtBLFdBTlosNkJBRE4sR0FZRSxFQTlDRyxpQkFBWDtBQWlERDs7QUFFZ0IsYUFBTnlLLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0xqTCxLQURLLEVBRUw7QUFDQVYsSUFBQUEsR0FBRyxpMkRBSEUsQ0FBUDtBQXFLRDs7QUFoc0IwQztBQW1zQjdDNEwsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixnQkFBN0IsRUFBK0NuTCxZQUEvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sLCBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZ2V0LCBzZXQsIGRlbCB9IGZyb20gJ29iamVjdC1wYXRoJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgZGVlcEVxdWFsIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICdqc29uc2NoZW1hJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vc3R5bGVzL2VtcHR5JztcbmltcG9ydCAnLi9ndi1zY2hlbWEtZm9ybS1jb250cm9sJztcblxuLyoqXG4gKiBTY2hlbWEgZm9ybSBjb21wb25lbnRcbiAqXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06c3VibWl0IC0gZXZlbnQgd2hlbiB1c2VyIHN1Ym1pdCB2YWxpZCBmb3JtXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06ZXJyb3IgLSBldmVudCB3aGVuIHVzZXIgc3VibWl0IGludmFsaWQgZm9ybVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNoYW5nZSAtIGV2ZW50IHdoZW4gd2hlbiBmb3JtIGNoYW5nZVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNhbmNlbCAtIGV2ZW50IHdoZW4gdXNlciBjYW5jZWwgZm9ybVxuICpcbiAqIEBhdHRyIHtPYmplY3R9IHNjaGVtYSAtIHRoZSBzY2hlbWEgZm9ybSBjb25maWd1cmF0aW9uXG4gKiBAYXR0ciB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIG9mIGZpZWxkc1xuICogQGF0dHIge09iamVjdH0gZXJyb3JzIC0gdGhlIG1hcCBvZiBlcnJvcnMgYnkgaW5wdXQga2V5XG4gKiBAYXR0ciB7Qm9vbGVhbn0gdmFsaWRhdGUgLSB0byBmb3JjZSB2YWxpZGF0aW9uIG9uIGZpcnN0IHJlbmRlclxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gdHJ1ZSBpZiByZWFkb25seVxuICogQGF0dHIge0Jvb2xlYW59IHNjcm9sbGFibGUgLSB1c2VmdWwgZm9yIG1ha2luZyBjb250ZW50IHNjcm9sbGFibGUgd2l0aCBmaXhlZCBoZWFkZXJzIC8gZm9vdGVyc1xuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3Ytc2NoZW1hLWZvcm0tLWJnYz0jZmZmZmZmXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXNjaGVtYS1mb3JtLWNvbnRyb2wtLW09MC40cmVtXSAtIENvbnRyb2wgbWFyZ2luXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlNjaGVtYUZvcm0gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBlcnJvcnM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICB2YWx1ZXM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBzdWJtaXRMYWJlbDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGhhc0Zvb3RlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtZm9vdGVyJyB9LFxuICAgICAgaGFzSGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1oZWFkZXInIH0sXG4gICAgICBfY29uZmlybTogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIF92YWx1ZXM6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkaXJ0eTogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBoaWRlRGVwcmVjYXRlZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoaWRlLWRlcHJlY2F0ZWQnIH0sXG4gICAgICB2YWxpZGF0ZU9uUmVuZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3ZhbGlkYXRlLW9uLXJlbmRlcicgfSxcbiAgICAgIF92YWxpZGF0b3JSZXN1bHRzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgc2tlbGV0b246IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX3RvdWNoOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgZ3JvdXBzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oaWRlRGVwcmVjYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuc3VibWl0TGFiZWwgPSAnT2snO1xuICAgIHRoaXMuaGFzSGVhZGVyID0gZmFsc2U7XG4gICAgdGhpcy5oYXNGb290ZXIgPSBmYWxzZTtcbiAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0ge307XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNDb250cm9scyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNBdHRyaWJ1dGVzID0gWydkaXNhYmxlZCcsICdyZXF1aXJlZCcsICdoaWRkZW4nXTtcbiAgICB0aGlzLmdyb3VwcyA9IG51bGw7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmRlZmF1bHQtdmFsdWUnLCB0aGlzLl9vbkRlZmF1bHRWYWx1ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2w6Y2hhbmdlJywgdGhpcy5fb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmNvbnRyb2wtcmVhZHknLCB0aGlzLl9vbkNvbnRyb2xSZWFkeS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHNldCB2YWx1ZXModmFsdWVzKSB7XG4gICAgaWYgKCFkZWVwRXF1YWwodGhpcy5fdmFsdWVzLCB2YWx1ZXMpKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlcyA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5fdmFsdWVzID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHJlc2V0KHZhbHVlcyA9IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSBkZWVwQ2xvbmUodmFsdWVzIHx8IHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIHRoaXMuX3RvdWNoID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0RGlydHkoZmFsc2UpO1xuICAgIHRoaXMuZ2V0Q29udHJvbHMoKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblJlc2V0KCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdyZXNldCcpO1xuICB9XG5cbiAgcmVxdWVzdFZhbGlkYXRpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3ZhbGlkYXRlVGltZW91dCk7XG4gICAgdGhpcy5fdmFsaWRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICB0aGlzLl91cGRhdGVBY3Rpb25zKCk7XG4gICAgfSwgMzUwKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLl9vblN1Ym1pdCgpO1xuICB9XG5cbiAgX29uU3VibWl0KCkge1xuICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9pbml0aWFsVmFsdWVzID0gZGVlcENsb25lKHRoaXMuX3ZhbHVlcyk7XG4gICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc3VibWl0JywgeyB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywgdmFsaWRhdG9yUmVzdWx0cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZXJyb3InLCB7IHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXREaXJ0eShkaXJ0eSA9IHRydWUpIHtcbiAgICB0aGlzLmRpcnR5ID0gISFkaXJ0eTtcbiAgfVxuXG4gIF9zZXRUb3VjaCh0b3VjaCA9IHRydWUpIHtcbiAgICB0aGlzLl90b3VjaCA9ICEhdG91Y2g7XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIGlmICh0aGlzLmlzVG91Y2goKSkge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpcm0gJiYgdGhpcy5fY29uZmlybS5wcm9taXNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtLnByb21pc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gKHRoaXMuX2NvbmZpcm0gPSB7IHJlc29sdmUsIHJlamVjdCB9KSk7XG4gICAgICB0aGlzLl9jb25maXJtLnByb21pc2UgPSBwcm9taXNlO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9vbkNvbmZpcm1SZXNldCgpIHtcbiAgICBjb25zdCB7IHJlc29sdmUgfSA9IHRoaXMuX2NvbmZpcm07XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNldCgpO1xuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX29uQ29uZmlybUVkaXQoKSB7XG4gICAgdGhpcy5fY29uZmlybS5yZWplY3QodGhpcyk7XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odGhpcy52YWxpZGF0ZU9uUmVuZGVyKTtcbiAgfVxuXG4gIF9nZXRTdWJtaXRCdG4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc3VibWl0Jyk7XG4gIH1cblxuICBfZ2V0UmVzZXRCdG4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjcmVzZXQnKTtcbiAgfVxuXG4gIF9kaXNwYXRjaENoYW5nZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbmdlVGltZW91dCk7XG4gICAgdGhpcy5fY2hhbmdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlJywgeyB0YXJnZXQ6IHRoaXMsIHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0aW9uOiB0aGlzLl92YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIF9vbkRlZmF1bHRWYWx1ZSh7IGRldGFpbDogeyBjdXJyZW50VGFyZ2V0LCB2YWx1ZSwgY29udHJvbCB9IH0pIHtcbiAgICBpZiAoY29udHJvbC50eXBlID09PSAnaW50ZWdlcicgJiYgdmFsdWUgIT0gbnVsbCAmJiAoKHZhbHVlLnRyaW0gJiYgdmFsdWUubGVuZ3RoID4gMCkgfHwgdmFsdWUubGVuZ3RoID4gMCkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gICAgc2V0KHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCwgdmFsdWUpO1xuICB9XG5cbiAgX29uQ2hhbmdlKHsgZGV0YWlsOiB7IGN1cnJlbnRUYXJnZXQsIHZhbHVlLCBjb250cm9sIH0gfSkge1xuICAgIHRoaXMuX3NldFRvdWNoKHRydWUpO1xuICAgIGlmIChjb250cm9sLnR5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbnRWYWx1ZSA9IE51bWJlcih2YWx1ZSkudmFsdWVPZigpO1xuICAgICAgICBpZiAoIWlzTmFOKGludFZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gaW50VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdhcnJheScgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDAgJiYgIWNvbnRyb2wuZW51bSkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVsKHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldCh0aGlzLl92YWx1ZXMsIGN1cnJlbnRUYXJnZXQuaWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVEeW5hbWljQ29udHJvbHMoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3VwZGF0ZUFjdGlvbnMoKTtcbiAgICB0aGlzLl9kaXNwYXRjaENoYW5nZSgpO1xuICB9XG5cbiAgX29uQ29udHJvbFJlYWR5KGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IGUuZGV0YWlsLmNvbnRyb2w7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudDtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCBldmVudC5uYW1lLCB7IC4uLmV2ZW50LCAuLi5lLmRldGFpbCB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGFzQ29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5wdXNoKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVEeW5hbWljQ29udHJvbHMoKSB7XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5mb3JFYWNoKChjb250cm9sRWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgX3VwZGF0ZUR5bmFtaWNDb250cm9sKGNvbnRyb2xFbGVtZW50KSB7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzID0gdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgYXR0cmlidXRlKTtcbiAgICAgICAgaWYgKGlzKSB7XG4gICAgICAgICAgY29udHJvbEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgJycpO1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goY29udHJvbEVsZW1lbnQuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcGVyZm9ybVVwZGF0ZSgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmdldENvbnRyb2xzKCkubWFwKChlKSA9PiBlLnVwZGF0ZUNvbXBsZXRlKSk7XG4gICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIF9yZW5kZXJDb250cm9sKGtleSkge1xuICAgIC8vIFRoaXMgaXMgcmVxdWlyZSB0byBjbGVhbiBjYWNoZSBvZiA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbD5cbiAgICBjb25zdCBjb250cm9sID0geyAuLi50aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW2tleV0gfTtcbiAgICBjb25zdCBpc1JlcXVpcmVkID0gKHRoaXMuc2NoZW1hLnJlcXVpcmVkICYmIHRoaXMuc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKGtleSkpIHx8IHRoaXMuX2V2YWx1YXRlQ29uZGl0aW9uKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAodGhpcy5zY2hlbWEuZGlzYWJsZWQgJiYgdGhpcy5zY2hlbWEuZGlzYWJsZWQuaW5jbHVkZXMoa2V5KSkgfHwgdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgJ2Rpc2FibGVkJyk7XG4gICAgY29uc3QgaXNIaWRkZW4gPSB0aGlzLl9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCAnaGlkZGVuJyk7XG4gICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgY29uc3QgaXNSZWFkb25seSA9IHRoaXMucmVhZG9ubHkgfHwgY29udHJvbC5yZWFkT25seSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpc1dyaXRlT25seSA9IGNvbnRyb2wud3JpdGVPbmx5ID09PSB0cnVlO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywga2V5KTtcbiAgICByZXR1cm4gaHRtbGA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbFxuICAgICAgLmlkPVwiJHtrZXl9XCJcbiAgICAgIC5lcnJvcnM9XCIke3RoaXMuZXJyb3JzfVwiXG4gICAgICAuY29udHJvbD1cIiR7Y29udHJvbH1cIlxuICAgICAgLnNrZWxldG9uPVwiJHt0aGlzLnNrZWxldG9ufVwiXG4gICAgICAudmFsdWU9XCIke3ZhbHVlfVwiXG4gICAgICA/cmVhZG9ubHk9XCIke2lzUmVhZG9ubHl9XCJcbiAgICAgID93cml0ZW9ubHk9XCIke2lzV3JpdGVPbmx5fVwiXG4gICAgICA/cmVxdWlyZWQ9XCIke2lzUmVxdWlyZWR9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7aXNEaXNhYmxlZH1cIlxuICAgICAgP2hpZGRlbj1cIiR7aXNIaWRkZW59XCJcbiAgICA+PC9ndi1zY2hlbWEtZm9ybS1jb250cm9sPmA7XG4gIH1cblxuICBfaGFzQ29uZGl0aW9uKGNvbnRyb2wpIHtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZmluZCgoY29uZGl0aW9uKSA9PiBjb250cm9sWyd4LXNjaGVtYS1mb3JtJ11bY29uZGl0aW9uXSAhPSBudWxsKSAhPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uS2V5KSB7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSA9PSBudWxsIHx8IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVtjb25kaXRpb25LZXldID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29uZGl0aW9uID0gY29udHJvbFsneC1zY2hlbWEtZm9ybSddW2NvbmRpdGlvbktleV07XG4gICAgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiBpc24ndCBhbiBhcnJheSwgaWdub3JlIHRoZSBjb25kaXRpb25cbiAgICAgIGNvbnNvbGUud2FybihgJyR7Y29uZGl0aW9uS2V5fScgYXR0cmlidXRlIG9mICd4LXNjaGVtYS1mb3JtJyBzaG91bGQgYmUgYW4gYXJyYXlgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBjb25kaXRpb24pIHtcbiAgICAgIC8vIG9wZXJhdGlvbiBvbmx5IGhhdmUgb25lIG9wZXJhdG9yIHdpdGggYSBzaW5nbGUgb2JqZWN0IGNvbnRhaW5pbmcgb3BlcmFuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gT2JqZWN0LmtleXMob3BlcmF0aW9uKVswXTtcblxuICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICBjYXNlICckbmVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3RFcXVhbHNDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJG5vZGVmJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3REZWZDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGRlZic6XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRoaXMuX2V2YWx1YXRlRGVmQ29uZGl0aW9uKGNvbnRyb2wsIG9wZXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvciAnJHtvcGVyYXRvcn0nIG9uIGRpc2FibGUgY29uZGl0aW9uYCk7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdEVxdWFsc0NvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uKGNvbnRyb2wsIGNvbmRpdGlvbik7XG4gIH1cblxuICBfZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pWzBdO1xuICAgIGNvbnN0IG9wZXJhbmRzID0gY29uZGl0aW9uW29wZXJhdG9yXTtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhvcGVyYW5kcyk7XG4gICAgcmV0dXJuIG1vZGVsQXR0cmlidXRlc1xuICAgICAgLm1hcCgobW9kZWxBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdFZhbHVlID0gb3BlcmFuZHNbbW9kZWxBdHRyaWJ1dGVdO1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIGNvbnRyb2wudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlc3RWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFZhbHVlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRlc3RWYWx1ZTtcbiAgICAgIH0pXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IGFjYyB8fCBjdXJyZW50KTtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbilbMF07XG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGUgPSBjb25kaXRpb25bb3BlcmF0b3JdO1xuICAgIHJldHVybiBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSkgPT09IHVuZGVmaW5lZCB8fCBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSkgPT09IG51bGw7XG4gIH1cblxuICBfZXZhbHVhdGVEZWZDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKSB7XG4gICAgcmV0dXJuICF0aGlzLl9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pO1xuICB9XG5cbiAgX3JlbmRlclBhcnQoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpcm0pIHtcbiAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJjb25maXJtLWJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5UaGUgY29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgYW5kIGNhbm5vdCBiZSBzYXZlZC48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tYm94X2FjdGlvbnNcIj5cbiAgICAgICAgICA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlybVJlc2V0fVwiIG91dGxpbmVkIGljb249XCJnZW5lcmFsOnVwZGF0ZVwiIGRhbmdlcj5Mb3NlIGNoYW5nZXM8L2d2LWJ1dHRvbj5cbiAgICAgICAgICA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlybUVkaXR9XCIgaWNvbj1cImRlc2lnbjplZGl0XCI+RWRpdDwvZ3YtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvcGVydGllcykgOiBbXTtcbiAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzID0gW107XG5cbiAgICBpZiAodGhpcy5ncm91cHMpIHtcbiAgICAgIC8vIFJlbW92ZSB1bmRlZmluZWQgZ3JvdXAgaXRlbXNcbiAgICAgIGNvbnN0IGdyb3Vwc0NsZWFuZWQgPSB0aGlzLmdyb3Vwcy5yZWR1Y2UoKHByZXYsIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zRXhpc3RpbmdJblNjaGVtYUtleXMgPSBrZXlzLmZpbHRlcigoa2V5KSA9PiBbLi4uKGdyb3VwLml0ZW1zIHx8IFtdKV0uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgIHByZXYucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgaXRlbXM6IGl0ZW1zRXhpc3RpbmdJblNjaGVtYUtleXMgfHwgW10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIFtdKTtcblxuICAgICAgLy8gQWRkIG5vbiBncm91cGVkIGl0ZW1zIGluc2lkZSBkZWZhdWx0IGdyb3VwXG4gICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBncm91cHNDbGVhbmVkLmZpbmQoKGcpID0+IGcuZGVmYXVsdCkgfHwgeyBkZWZhdWx0OiB0cnVlLCBpdGVtczogW10gfTtcbiAgICAgIGNvbnN0IHppcEdyb3VwZWRJdGVtcyA9IGdyb3Vwc0NsZWFuZWQucmVkdWNlKChwcmV2LCBncm91cCkgPT4gWy4uLnByZXYsIC4uLmdyb3VwLml0ZW1zXSwgW10pO1xuICAgICAgZGVmYXVsdEdyb3VwLml0ZW1zID0ga2V5cy5maWx0ZXIoKGtleSkgPT4gIXppcEdyb3VwZWRJdGVtcy5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgcmV0dXJuIHJlcGVhdChcbiAgICAgICAgZ3JvdXBzQ2xlYW5lZCxcbiAgICAgICAgKGdyb3VwKSA9PlxuICAgICAgICAgIGh0bWxgJHtncm91cC5uYW1lXG4gICAgICAgICAgICA/IGh0bWxgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj4ke2dyb3VwLm5hbWV9PC9oMj5cbiAgICAgICAgICAgICAgICAke3JlcGVhdChncm91cC5pdGVtcywgKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX1gXG4gICAgICAgICAgICA6IHJlcGVhdChncm91cC5pdGVtcywgKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX0gYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgJHtyZXBlYXQoWzFdLCAoKSA9PlxuICAgICAgcmVwZWF0KFxuICAgICAgICBrZXlzLFxuICAgICAgICAoa2V5KSA9PiBrZXksXG4gICAgICAgIChrZXkpID0+IHRoaXMuX3JlbmRlckNvbnRyb2woa2V5KSxcbiAgICAgICksXG4gICAgKX1gO1xuICB9XG5cbiAgZ2V0Q29udHJvbHMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wnKSk7XG4gIH1cblxuICBnZXRDb250cm9sKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkfVwiXWApO1xuICB9XG5cbiAgX2dldEVycm9ycygpIHtcbiAgICByZXR1cm4gKHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMuZXJyb3JzIHx8IFtdKS5maWx0ZXIoKGVycm9yKSA9PiB7XG4gICAgICBsZXQgaWQgPSBgJHtlcnJvci5wcm9wZXJ0eS5yZXBsYWNlKCdpbnN0YW5jZS4nLCAnJyl9YDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShlcnJvci5hcmd1bWVudCkpIHtcbiAgICAgICAgaWQgPSBgJHtpZH0uJHtlcnJvci5hcmd1bWVudH1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcktleSA9IGB4LXNjaGVtYS1mb3JtLmVycm9ycy4ke2lkfS4ke2Vycm9yLm5hbWV9YDtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldCh0aGlzLnNjaGVtYSwgZXJyb3JLZXkpO1xuICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICF0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLmluY2x1ZGVzKGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIGlmICh0aGlzLnNjaGVtYSkge1xuICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmxvY2sgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZvcm1cbiAgICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUodGhpcy5fdmFsdWVzLCB7IC4uLnRoaXMuc2NoZW1hLCBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuZXJyb3JzID0gdGhpcy5fZ2V0RXJyb3JzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3JSZXN1bHRzO1xuICB9XG5cbiAgaXNWYWxpZCgpIHtcbiAgICBpZiAodGhpcy5fdmFsaWRhdG9yUmVzdWx0cy52YWxpZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9nZXRFcnJvcnMoKSA9PT0gMDtcbiAgfVxuXG4gIGlzVG91Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoIHx8ICh0aGlzLmRpcnR5ICYmIHRoaXMudmFsaWRhdGVPblJlbmRlcik7XG4gIH1cblxuICBjYW5TdWJtaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3VjaCgpICYmIHRoaXMuaXNWYWxpZCgpO1xuICB9XG5cbiAgX3VwZGF0ZUFjdGlvbnMoKSB7XG4gICAgY29uc3Qgc3VibWl0QnRuID0gdGhpcy5fZ2V0U3VibWl0QnRuKCk7XG4gICAgaWYgKHN1Ym1pdEJ0biAhPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5jYW5TdWJtaXQoKSkge1xuICAgICAgICB0aGlzLl9nZXRTdWJtaXRCdG4oKS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9nZXRTdWJtaXRCdG4oKS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc2V0QnRuID0gdGhpcy5fZ2V0UmVzZXRCdG4oKTtcbiAgICBpZiAocmVzZXRCdG4gIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgcmVzZXRCdG4ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRCdG4uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVDaGlsZHJlbih3aXRoVmFsaWRhdGlvbikge1xuICAgIGlmICh3aXRoVmFsaWRhdGlvbikge1xuICAgICAgdGhpcy5fdmFsaWRhdG9yUmVzdWx0cyA9IHt9O1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgdGhpcy5yZXF1ZXN0VmFsaWRhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cGRhdGVBY3Rpb25zVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fdXBkYXRlQWN0aW9ucygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUFjdGlvbnNUaW1lb3V0KTtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdfdmFsdWVzJykpIHtcbiAgICAgIHRoaXMuZ2V0Q29udHJvbHMoKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgIGNvbnRyb2wudmFsdWUgPSBnZXQodGhpcy5fdmFsdWVzLCBjb250cm9sLmlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVDaGlsZHJlbih0aGlzLnZhbGlkYXRlT25SZW5kZXIgJiYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX3ZhbHVlcycpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2NoZW1hJykpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRDb250cm9scygpLm1hcCgoZSkgPT4gZS51cGRhdGVDb21wbGV0ZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPGZvcm0gY2xhc3M9XCIke2NsYXNzTWFwKHsgc2Nyb2xsYWJsZTogdGhpcy5zY3JvbGxhYmxlIH0pfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBjb250YWluZXI6IHRydWUsIGNvbmZpcm06IHRoaXMuX2NvbmZpcm0gfSl9XCI+XG4gICAgICAgICR7dGhpcy5oYXNIZWFkZXIgPT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IHRpdGxlOiB0cnVlLCBjZW50ZXI6IHRoaXMuaGFzSGVhZGVyICYmICF0aGlzLmhhc0Zvb3RlciB9KX1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJ0aXRsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImhlYWRlci1sZWZ0XCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICR7dGhpcy5yZWFkb25seSA9PT0gdHJ1ZSB8fCB0aGlzLmhhc0Zvb3RlciA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgOiBodG1sYDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblJlc2V0fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZ2VuZXJhbDp1cGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblN1Ym1pdH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNvZGU6Y2hlY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLnRpdGxlPVwiJHt0aGlzLnN1Ym1pdExhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gYH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgOiAnJ31cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj4ke3RoaXMuc2NoZW1hICE9IG51bGwgPyB0aGlzLl9yZW5kZXJQYXJ0KCkgOiBodG1sYGB9PC9kaXY+XG4gICAgICAgICR7dGhpcy5oYXNGb290ZXIgPT09IHRydWUgJiYgdGhpcy5yZWFkb25seSAhPT0gdHJ1ZVxuICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uIGlkPVwicmVzZXRcIiBvdXRsaW5lZCBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblJlc2V0fVwiIGljb249XCJnZW5lcmFsOnVwZGF0ZVwiIHRpdGxlPVwiUmVzZXRcIj5SZXNldDwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBpZD1cInN1Ym1pdFwiIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uU3VibWl0fVwiIGljb249XCJjb2RlOmNoZWNrXCIgLnRpdGxlPVwiJHt0aGlzLnN1Ym1pdExhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgID4ke3RoaXMuc3VibWl0TGFiZWx9PC9ndi1idXR0b25cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5gO1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGVtcHR5LFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi1zY2hlbWEtZm9ybS0tYmdjLCAjZmZmZmZmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0ge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0uc2Nyb2xsYWJsZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcblxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYyk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgICAgICAgLyogZm9yIEZpcmVmb3ggKi9cbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlcixcbiAgICAgICAgLmZvb3RlcixcbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYyk7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGVudCB7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICAgICAvKiBmb3IgRmlyZWZveCAqL1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGVudCA+IGd2LXNjaGVtYS1mb3JtLWNvbnRyb2wge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0uc2Nyb2xsYWJsZSAuY29udGVudCB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmNvbnRlbnQgPiBndi1zY2hlbWEtZm9ybS1jb250cm9sLFxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmNvbnRlbnQgPiAuZ3JvdXAtdGl0bGUge1xuICAgICAgICAgIG1heC13aWR0aDogNzc1cHg7XG4gICAgICAgICAgd2lkdGg6IDk1JTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIsXG4gICAgICAgIC5mb290ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0NXB4O1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogMjZweDtcbiAgICAgICAgICAtLWd2LWljb24tLWM6ICNiZmJmYmY7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmZvb3RlciB7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyIC5sZWZ0LFxuICAgICAgICAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLmxlZnQsXG4gICAgICAgIC5mb290ZXIgLmxlZnQsXG4gICAgICAgIC5oZWFkZXIgLnJpZ2h0LFxuICAgICAgICAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC5yaWdodCxcbiAgICAgICAgLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZSB7XG4gICAgICAgICAgY29sb3I6ICMyODQ0NGY7XG4gICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLnRpdGxlLmNlbnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb25maXJtLWJveCB7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbmZpcm0tYm94X2FjdGlvbnMge1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb25maXJtIC5oZWFkZXIgLmxlZnQsXG4gICAgICAgIC5jb25maXJtIC5oZWFkZXIgLnJpZ2h0LFxuICAgICAgICAuY29uZmlybSAuZm9vdGVyIC5sZWZ0LFxuICAgICAgICAuY29uZmlybSAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ncm91cC10aXRsZSB7XG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1mb250LWNvbG9yLWRhcmspO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMjFweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjNlbTtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZ3YtdGhlbWUtZm9udC1jb2xvci1kYXJrKTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgXTtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1zY2hlbWEtZm9ybScsIEd2U2NoZW1hRm9ybSk7XG4iXX0=
646
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImdldCIsInNldCIsImRlbCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJjbGFzc01hcCIsInJlcGVhdCIsIlZhbGlkYXRvciIsImVtcHR5IiwiR3ZTY2hlbWFGb3JtIiwicHJvcGVydGllcyIsInNjaGVtYSIsInR5cGUiLCJPYmplY3QiLCJlcnJvcnMiLCJ2YWx1ZXMiLCJzdWJtaXRMYWJlbCIsIlN0cmluZyIsImhhc0Zvb3RlciIsIkJvb2xlYW4iLCJhdHRyaWJ1dGUiLCJoYXNIZWFkZXIiLCJfY29uZmlybSIsIl92YWx1ZXMiLCJkaXJ0eSIsInJlZmxlY3QiLCJoaWRlRGVwcmVjYXRlZCIsInZhbGlkYXRlT25SZW5kZXIiLCJfdmFsaWRhdG9yUmVzdWx0cyIsInNrZWxldG9uIiwiX3RvdWNoIiwicmVhZG9ubHkiLCJzY3JvbGxhYmxlIiwiZ3JvdXBzIiwiQXJyYXkiLCJjb25zdHJ1Y3RvciIsIl92YWxpZGF0b3IiLCJfaWdub3JlUHJvcGVydGllcyIsIl9keW5hbWljQ29udHJvbHMiLCJfZHluYW1pY0F0dHJpYnV0ZXMiLCJhZGRFdmVudExpc3RlbmVyIiwiX29uRGVmYXVsdFZhbHVlIiwiYmluZCIsIl9vbkNoYW5nZSIsIl9vbkNvbnRyb2xSZWFkeSIsIl9pbml0aWFsVmFsdWVzIiwicmVzZXQiLCJfc2V0RGlydHkiLCJnZXRDb250cm9scyIsImZvckVhY2giLCJzIiwicmVxdWVzdFVwZGF0ZSIsIl9vblJlc2V0IiwicmVxdWVzdFZhbGlkYXRpb24iLCJjbGVhclRpbWVvdXQiLCJfdmFsaWRhdGVUaW1lb3V0Iiwic2V0VGltZW91dCIsInZhbGlkYXRlIiwiX3VwZGF0ZUFjdGlvbnMiLCJzdWJtaXQiLCJfb25TdWJtaXQiLCJ2YWxpZGF0b3JSZXN1bHRzIiwiaXNWYWxpZCIsIl9zZXRUb3VjaCIsInRvdWNoIiwiY29uZmlybSIsImlzVG91Y2giLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfb25Db25maXJtUmVzZXQiLCJ1cGRhdGVDb21wbGV0ZSIsInRoZW4iLCJfb25Db25maXJtRWRpdCIsIl91cGRhdGVDaGlsZHJlbiIsIl9nZXRTdWJtaXRCdG4iLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsIl9nZXRSZXNldEJ0biIsIl9kaXNwYXRjaENoYW5nZSIsIl9jaGFuZ2VUaW1lb3V0IiwidGFyZ2V0IiwidmFsaWRhdGlvbiIsImRldGFpbCIsImN1cnJlbnRUYXJnZXQiLCJ2YWx1ZSIsImNvbnRyb2wiLCJ0cmltIiwibGVuZ3RoIiwicGFyc2VJbnQiLCJpZCIsImludFZhbHVlIiwiTnVtYmVyIiwidmFsdWVPZiIsImlzTmFOIiwiZW51bSIsImtleXMiLCJfdXBkYXRlRHluYW1pY0NvbnRyb2xzIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiY29udHJvbEVsZW1lbnQiLCJldmVudCIsIm5hbWUiLCJfaGFzQ29uZGl0aW9uIiwicHVzaCIsIl91cGRhdGVEeW5hbWljQ29udHJvbCIsImlzIiwiX2V2YWx1YXRlQ29uZGl0aW9uIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwicGVyZm9ybVVwZGF0ZSIsImFsbCIsIm1hcCIsIl9yZW5kZXJDb250cm9sIiwia2V5IiwiaXNSZXF1aXJlZCIsInJlcXVpcmVkIiwiaW5jbHVkZXMiLCJpc0Rpc2FibGVkIiwiZGlzYWJsZWQiLCJpc0hpZGRlbiIsImlzUmVhZG9ubHkiLCJyZWFkT25seSIsImlzV3JpdGVPbmx5Iiwid3JpdGVPbmx5IiwiZmluZCIsImNvbmRpdGlvbiIsImNvbmRpdGlvbktleSIsImlzQXJyYXkiLCJjb25zb2xlIiwid2FybiIsInJlc3VsdCIsIm9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiX2V2YWx1YXRlTm90RXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uIiwiX2V2YWx1YXRlRGVmQ29uZGl0aW9uIiwib3BlcmFuZHMiLCJtb2RlbEF0dHJpYnV0ZXMiLCJtb2RlbEF0dHJpYnV0ZSIsInRlc3RWYWx1ZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJfcmVuZGVyUGFydCIsImdyb3Vwc0NsZWFuZWQiLCJwcmV2IiwiZ3JvdXAiLCJpdGVtc0V4aXN0aW5nSW5TY2hlbWFLZXlzIiwiZmlsdGVyIiwiaXRlbXMiLCJkZWZhdWx0R3JvdXAiLCJnIiwiZGVmYXVsdCIsInppcEdyb3VwZWRJdGVtcyIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsIl9nZXRFcnJvcnMiLCJlcnJvciIsInByb3BlcnR5IiwicmVwbGFjZSIsImFyZ3VtZW50IiwiZXJyb3JLZXkiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJ2YWxpZCIsImNhblN1Ym1pdCIsInN1Ym1pdEJ0biIsInJlc2V0QnRuIiwid2l0aFZhbGlkYXRpb24iLCJfdXBkYXRlQWN0aW9uc1RpbWVvdXQiLCJ1cGRhdGVkIiwiY2hhbmdlZFByb3BlcnRpZXMiLCJoYXMiLCJnZXRVcGRhdGVDb21wbGV0ZSIsInJlbmRlciIsImNvbnRhaW5lciIsInRpdGxlIiwiY2VudGVyIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFVBQVQsRUFBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLEdBQVQsRUFBY0MsR0FBZCxFQUFtQkMsR0FBbkIsUUFBOEIsYUFBOUI7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TUFBQUEsTUFBTSxFQUFFLEtBQUtuSyxTQUFMLElBQWtCLENBQUMsS0FBS0g7QUFBL0MsS0FBRCxDQUZ0QixtR0FRRSxLQUFLYSxRQUFMLEtBQWtCLElBQWxCLElBQTBCLEtBQUtiLFNBQUwsS0FBbUIsSUFBN0MsR0FDRSxFQURGLEdBRUVyQixJQUFJLDhFQUtvQixLQUFLdUQsUUFMekIscUdBWW9CLEtBQUtRLFNBWnpCLCtCQWNVLEtBQUs1QyxXQWRmLHdCQVZSLFVBRE4sR0E4QkUsRUFoQ0cseUJBaUNnQixLQUFLTCxNQUFMLElBQWUsSUFBZixHQUFzQixLQUFLeUksV0FBTCxFQUF0QixHQUEyQ3ZKLElBQUksRUFqQy9ELFVBa0NMLEtBQUtxQixTQUFMLEtBQW1CLElBQW5CLElBQTJCLEtBQUthLFFBQUwsS0FBa0IsSUFBN0MsR0FDRWxDLElBQUksdUhBSXFELEtBQUt1RCxRQUoxRCxvR0FLNkMsS0FBS1EsU0FMbEQsK0JBSzBGLEtBQUs1QyxXQUwvRixLQU1PLEtBQUtBLFdBTlosNkJBRE4sR0FZRSxFQTlDRyxpQkFBWDtBQWlERDs7QUFFZ0IsYUFBTnlLLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0xqTCxLQURLLEVBRUw7QUFDQVYsSUFBQUEsR0FBRyxpMkRBSEUsQ0FBUDtBQXFLRDs7QUFoc0IwQztBQW1zQjdDNEwsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixnQkFBN0IsRUFBK0NuTCxZQUEvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sLCBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZ2V0LCBzZXQsIGRlbCB9IGZyb20gJ29iamVjdC1wYXRoJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgZGVlcEVxdWFsIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICdqc29uc2NoZW1hJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vc3R5bGVzL2VtcHR5JztcbmltcG9ydCAnLi9ndi1zY2hlbWEtZm9ybS1jb250cm9sJztcblxuLyoqXG4gKiBTY2hlbWEgZm9ybSBjb21wb25lbnRcbiAqXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06c3VibWl0IC0gZXZlbnQgd2hlbiB1c2VyIHN1Ym1pdCB2YWxpZCBmb3JtXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06ZXJyb3IgLSBldmVudCB3aGVuIHVzZXIgc3VibWl0IGludmFsaWQgZm9ybVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNoYW5nZSAtIGV2ZW50IHdoZW4gd2hlbiBmb3JtIGNoYW5nZVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNhbmNlbCAtIGV2ZW50IHdoZW4gdXNlciBjYW5jZWwgZm9ybVxuICpcbiAqIEBhdHRyIHtPYmplY3R9IHNjaGVtYSAtIHRoZSBzY2hlbWEgZm9ybSBjb25maWd1cmF0aW9uXG4gKiBAYXR0ciB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIG9mIGZpZWxkc1xuICogQGF0dHIge09iamVjdH0gZXJyb3JzIC0gdGhlIG1hcCBvZiBlcnJvcnMgYnkgaW5wdXQga2V5XG4gKiBAYXR0ciB7Qm9vbGVhbn0gdmFsaWRhdGUgLSB0byBmb3JjZSB2YWxpZGF0aW9uIG9uIGZpcnN0IHJlbmRlclxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gdHJ1ZSBpZiByZWFkb25seVxuICogQGF0dHIge0Jvb2xlYW59IHNjcm9sbGFibGUgLSB1c2VmdWwgZm9yIG1ha2luZyBjb250ZW50IHNjcm9sbGFibGUgd2l0aCBmaXhlZCBoZWFkZXJzIC8gZm9vdGVyc1xuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3Ytc2NoZW1hLWZvcm0tLWJnYz0jZmZmZmZmXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXNjaGVtYS1mb3JtLWNvbnRyb2wtLW09MC40cmVtXSAtIENvbnRyb2wgbWFyZ2luXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlNjaGVtYUZvcm0gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBlcnJvcnM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICB2YWx1ZXM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBzdWJtaXRMYWJlbDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGhhc0Zvb3RlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtZm9vdGVyJyB9LFxuICAgICAgaGFzSGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1oZWFkZXInIH0sXG4gICAgICBfY29uZmlybTogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIF92YWx1ZXM6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkaXJ0eTogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBoaWRlRGVwcmVjYXRlZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoaWRlLWRlcHJlY2F0ZWQnIH0sXG4gICAgICB2YWxpZGF0ZU9uUmVuZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3ZhbGlkYXRlLW9uLXJlbmRlcicgfSxcbiAgICAgIF92YWxpZGF0b3JSZXN1bHRzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgc2tlbGV0b246IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX3RvdWNoOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgZ3JvdXBzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oaWRlRGVwcmVjYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuc3VibWl0TGFiZWwgPSAnT2snO1xuICAgIHRoaXMuaGFzSGVhZGVyID0gZmFsc2U7XG4gICAgdGhpcy5oYXNGb290ZXIgPSBmYWxzZTtcbiAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0ge307XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNDb250cm9scyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNBdHRyaWJ1dGVzID0gWydkaXNhYmxlZCcsICdyZXF1aXJlZCcsICdoaWRkZW4nXTtcbiAgICB0aGlzLmdyb3VwcyA9IG51bGw7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmRlZmF1bHQtdmFsdWUnLCB0aGlzLl9vbkRlZmF1bHRWYWx1ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2w6Y2hhbmdlJywgdGhpcy5fb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmNvbnRyb2wtcmVhZHknLCB0aGlzLl9vbkNvbnRyb2xSZWFkeS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHNldCB2YWx1ZXModmFsdWVzKSB7XG4gICAgaWYgKCFkZWVwRXF1YWwodGhpcy5fdmFsdWVzLCB2YWx1ZXMpKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlcyA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5fdmFsdWVzID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHJlc2V0KHZhbHVlcyA9IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSBkZWVwQ2xvbmUodmFsdWVzIHx8IHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIHRoaXMuX3RvdWNoID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0RGlydHkoZmFsc2UpO1xuICAgIHRoaXMuZ2V0Q29udHJvbHMoKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblJlc2V0KCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdyZXNldCcpO1xuICB9XG5cbiAgcmVxdWVzdFZhbGlkYXRpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3ZhbGlkYXRlVGltZW91dCk7XG4gICAgdGhpcy5fdmFsaWRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICB0aGlzLl91cGRhdGVBY3Rpb25zKCk7XG4gICAgfSwgMzUwKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLl9vblN1Ym1pdCgpO1xuICB9XG5cbiAgX29uU3VibWl0KCkge1xuICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9pbml0aWFsVmFsdWVzID0gZGVlcENsb25lKHRoaXMuX3ZhbHVlcyk7XG4gICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc3VibWl0JywgeyB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywgdmFsaWRhdG9yUmVzdWx0cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZXJyb3InLCB7IHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXREaXJ0eShkaXJ0eSA9IHRydWUpIHtcbiAgICB0aGlzLmRpcnR5ID0gISFkaXJ0eTtcbiAgfVxuXG4gIF9zZXRUb3VjaCh0b3VjaCA9IHRydWUpIHtcbiAgICB0aGlzLl90b3VjaCA9ICEhdG91Y2g7XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIGlmICh0aGlzLmlzVG91Y2goKSkge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpcm0gJiYgdGhpcy5fY29uZmlybS5wcm9taXNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtLnByb21pc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gKHRoaXMuX2NvbmZpcm0gPSB7IHJlc29sdmUsIHJlamVjdCB9KSk7XG4gICAgICB0aGlzLl9jb25maXJtLnByb21pc2UgPSBwcm9taXNlO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9vbkNvbmZpcm1SZXNldCgpIHtcbiAgICBjb25zdCB7IHJlc29sdmUgfSA9IHRoaXMuX2NvbmZpcm07XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNldCgpO1xuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX29uQ29uZmlybUVkaXQoKSB7XG4gICAgdGhpcy5fY29uZmlybS5yZWplY3QodGhpcyk7XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odGhpcy52YWxpZGF0ZU9uUmVuZGVyKTtcbiAgfVxuXG4gIF9nZXRTdWJtaXRCdG4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc3VibWl0Jyk7XG4gIH1cblxuICBfZ2V0UmVzZXRCdG4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjcmVzZXQnKTtcbiAgfVxuXG4gIF9kaXNwYXRjaENoYW5nZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbmdlVGltZW91dCk7XG4gICAgdGhpcy5fY2hhbmdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlJywgeyB0YXJnZXQ6IHRoaXMsIHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0aW9uOiB0aGlzLl92YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIF9vbkRlZmF1bHRWYWx1ZSh7IGRldGFpbDogeyBjdXJyZW50VGFyZ2V0LCB2YWx1ZSwgY29udHJvbCB9IH0pIHtcbiAgICBpZiAoY29udHJvbC50eXBlID09PSAnaW50ZWdlcicgJiYgdmFsdWUgIT0gbnVsbCAmJiAoKHZhbHVlLnRyaW0gJiYgdmFsdWUubGVuZ3RoID4gMCkgfHwgdmFsdWUubGVuZ3RoID4gMCkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gICAgc2V0KHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCwgdmFsdWUpO1xuICB9XG5cbiAgX29uQ2hhbmdlKHsgZGV0YWlsOiB7IGN1cnJlbnRUYXJnZXQsIHZhbHVlLCBjb250cm9sIH0gfSkge1xuICAgIHRoaXMuX3NldFRvdWNoKHRydWUpO1xuICAgIGlmIChjb250cm9sLnR5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbnRWYWx1ZSA9IE51bWJlcih2YWx1ZSkudmFsdWVPZigpO1xuICAgICAgICBpZiAoIWlzTmFOKGludFZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gaW50VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdhcnJheScgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDAgJiYgIWNvbnRyb2wuZW51bSkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVsKHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldCh0aGlzLl92YWx1ZXMsIGN1cnJlbnRUYXJnZXQuaWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVEeW5hbWljQ29udHJvbHMoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3VwZGF0ZUFjdGlvbnMoKTtcbiAgICB0aGlzLl9kaXNwYXRjaENoYW5nZSgpO1xuICB9XG5cbiAgX29uQ29udHJvbFJlYWR5KGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IGUuZGV0YWlsLmNvbnRyb2w7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudDtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCBldmVudC5uYW1lLCB7IC4uLmV2ZW50LCAuLi5lLmRldGFpbCB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGFzQ29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5wdXNoKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVEeW5hbWljQ29udHJvbHMoKSB7XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5mb3JFYWNoKChjb250cm9sRWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgX3VwZGF0ZUR5bmFtaWNDb250cm9sKGNvbnRyb2xFbGVtZW50KSB7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzID0gdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgYXR0cmlidXRlKTtcbiAgICAgICAgaWYgKGlzKSB7XG4gICAgICAgICAgY29udHJvbEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgJycpO1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goY29udHJvbEVsZW1lbnQuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcGVyZm9ybVVwZGF0ZSgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmdldENvbnRyb2xzKCkubWFwKChlKSA9PiBlLnVwZGF0ZUNvbXBsZXRlKSk7XG4gICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIF9yZW5kZXJDb250cm9sKGtleSkge1xuICAgIC8vIFRoaXMgaXMgcmVxdWlyZSB0byBjbGVhbiBjYWNoZSBvZiA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbD5cbiAgICBjb25zdCBjb250cm9sID0geyAuLi50aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW2tleV0gfTtcbiAgICBjb25zdCBpc1JlcXVpcmVkID0gKHRoaXMuc2NoZW1hLnJlcXVpcmVkICYmIHRoaXMuc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKGtleSkpIHx8IHRoaXMuX2V2YWx1YXRlQ29uZGl0aW9uKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAodGhpcy5zY2hlbWEuZGlzYWJsZWQgJiYgdGhpcy5zY2hlbWEuZGlzYWJsZWQuaW5jbHVkZXMoa2V5KSkgfHwgdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgJ2Rpc2FibGVkJyk7XG4gICAgY29uc3QgaXNIaWRkZW4gPSB0aGlzLl9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCAnaGlkZGVuJyk7XG4gICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgY29uc3QgaXNSZWFkb25seSA9IHRoaXMucmVhZG9ubHkgfHwgY29udHJvbC5yZWFkT25seSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpc1dyaXRlT25seSA9IGNvbnRyb2wud3JpdGVPbmx5ID09PSB0cnVlO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywga2V5KTtcbiAgICByZXR1cm4gaHRtbGA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbFxuICAgICAgLmlkPVwiJHtrZXl9XCJcbiAgICAgIC5lcnJvcnM9XCIke3RoaXMuZXJyb3JzfVwiXG4gICAgICAuY29udHJvbD1cIiR7Y29udHJvbH1cIlxuICAgICAgLnNrZWxldG9uPVwiJHt0aGlzLnNrZWxldG9ufVwiXG4gICAgICAudmFsdWU9XCIke3ZhbHVlfVwiXG4gICAgICA/cmVhZG9ubHk9XCIke2lzUmVhZG9ubHl9XCJcbiAgICAgID93cml0ZW9ubHk9XCIke2lzV3JpdGVPbmx5fVwiXG4gICAgICA/cmVxdWlyZWQ9XCIke2lzUmVxdWlyZWR9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7aXNEaXNhYmxlZH1cIlxuICAgICAgP2hpZGRlbj1cIiR7aXNIaWRkZW59XCJcbiAgICA+PC9ndi1zY2hlbWEtZm9ybS1jb250cm9sPmA7XG4gIH1cblxuICBfaGFzQ29uZGl0aW9uKGNvbnRyb2wpIHtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZmluZCgoY29uZGl0aW9uKSA9PiBjb250cm9sWyd4LXNjaGVtYS1mb3JtJ11bY29uZGl0aW9uXSAhPSBudWxsKSAhPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uS2V5KSB7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSA9PSBudWxsIHx8IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVtjb25kaXRpb25LZXldID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29uZGl0aW9uID0gY29udHJvbFsneC1zY2hlbWEtZm9ybSddW2NvbmRpdGlvbktleV07XG4gICAgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiBpc24ndCBhbiBhcnJheSwgaWdub3JlIHRoZSBjb25kaXRpb25cbiAgICAgIGNvbnNvbGUud2FybihgJyR7Y29uZGl0aW9uS2V5fScgYXR0cmlidXRlIG9mICd4LXNjaGVtYS1mb3JtJyBzaG91bGQgYmUgYW4gYXJyYXlgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBjb25kaXRpb24pIHtcbiAgICAgIC8vIG9wZXJhdGlvbiBvbmx5IGhhdmUgb25lIG9wZXJhdG9yIHdpdGggYSBzaW5nbGUgb2JqZWN0IGNvbnRhaW5pbmcgb3BlcmFuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gT2JqZWN0LmtleXMob3BlcmF0aW9uKVswXTtcblxuICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICBjYXNlICckbmVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3RFcXVhbHNDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJG5vZGVmJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3REZWZDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGRlZic6XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRoaXMuX2V2YWx1YXRlRGVmQ29uZGl0aW9uKGNvbnRyb2wsIG9wZXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvciAnJHtvcGVyYXRvcn0nIG9uIGRpc2FibGUgY29uZGl0aW9uYCk7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdEVxdWFsc0NvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uKGNvbnRyb2wsIGNvbmRpdGlvbik7XG4gIH1cblxuICBfZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pWzBdO1xuICAgIGNvbnN0IG9wZXJhbmRzID0gY29uZGl0aW9uW29wZXJhdG9yXTtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhvcGVyYW5kcyk7XG4gICAgcmV0dXJuIG1vZGVsQXR0cmlidXRlc1xuICAgICAgLm1hcCgobW9kZWxBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdFZhbHVlID0gb3BlcmFuZHNbbW9kZWxBdHRyaWJ1dGVdO1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIGNvbnRyb2wudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlc3RWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFZhbHVlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRlc3RWYWx1ZTtcbiAgICAgIH0pXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IGFjYyB8fCBjdXJyZW50KTtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbilbMF07XG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGUgPSBjb25kaXRpb25bb3BlcmF0b3JdO1xuICAgIHJldHVybiBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSkgPT09IHVuZGVmaW5lZCB8fCBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSkgPT09IG51bGw7XG4gIH1cblxuICBfZXZhbHVhdGVEZWZDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKSB7XG4gICAgcmV0dXJuICF0aGlzLl9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pO1xuICB9XG5cbiAgX3JlbmRlclBhcnQoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpcm0pIHtcbiAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJjb25maXJtLWJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5UaGUgY29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgYW5kIGNhbm5vdCBiZSBzYXZlZC48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tYm94X2FjdGlvbnNcIj5cbiAgICAgICAgICA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlybVJlc2V0fVwiIG91dGxpbmVkIGljb249XCJnZW5lcmFsOnVwZGF0ZVwiIGRhbmdlcj5Mb3NlIGNoYW5nZXM8L2d2LWJ1dHRvbj5cbiAgICAgICAgICA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlybUVkaXR9XCIgaWNvbj1cImRlc2lnbjplZGl0XCI+RWRpdDwvZ3YtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvcGVydGllcykgOiBbXTtcbiAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzID0gW107XG5cbiAgICBpZiAodGhpcy5ncm91cHMpIHtcbiAgICAgIC8vIFJlbW92ZSB1bmRlZmluZWQgZ3JvdXAgaXRlbXNcbiAgICAgIGNvbnN0IGdyb3Vwc0NsZWFuZWQgPSB0aGlzLmdyb3Vwcy5yZWR1Y2UoKHByZXYsIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zRXhpc3RpbmdJblNjaGVtYUtleXMgPSBrZXlzLmZpbHRlcigoa2V5KSA9PiBbLi4uKGdyb3VwLml0ZW1zIHx8IFtdKV0uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgIHByZXYucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgaXRlbXM6IGl0ZW1zRXhpc3RpbmdJblNjaGVtYUtleXMgfHwgW10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIFtdKTtcblxuICAgICAgLy8gQWRkIG5vbiBncm91cGVkIGl0ZW1zIGluc2lkZSBkZWZhdWx0IGdyb3VwXG4gICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBncm91cHNDbGVhbmVkLmZpbmQoKGcpID0+IGcuZGVmYXVsdCkgfHwgeyBkZWZhdWx0OiB0cnVlLCBpdGVtczogW10gfTtcbiAgICAgIGNvbnN0IHppcEdyb3VwZWRJdGVtcyA9IGdyb3Vwc0NsZWFuZWQucmVkdWNlKChwcmV2LCBncm91cCkgPT4gWy4uLnByZXYsIC4uLmdyb3VwLml0ZW1zXSwgW10pO1xuICAgICAgZGVmYXVsdEdyb3VwLml0ZW1zID0ga2V5cy5maWx0ZXIoKGtleSkgPT4gIXppcEdyb3VwZWRJdGVtcy5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgcmV0dXJuIHJlcGVhdChcbiAgICAgICAgZ3JvdXBzQ2xlYW5lZCxcbiAgICAgICAgKGdyb3VwKSA9PlxuICAgICAgICAgIGh0bWxgJHtncm91cC5uYW1lXG4gICAgICAgICAgICA/IGh0bWxgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj4ke2dyb3VwLm5hbWV9PC9oMj5cbiAgICAgICAgICAgICAgICAke3JlcGVhdChncm91cC5pdGVtcywgKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX1gXG4gICAgICAgICAgICA6IHJlcGVhdChncm91cC5pdGVtcywgKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX0gYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgJHtyZXBlYXQoWzFdLCAoKSA9PlxuICAgICAgcmVwZWF0KFxuICAgICAgICBrZXlzLFxuICAgICAgICAoa2V5KSA9PiBrZXksXG4gICAgICAgIChrZXkpID0+IHRoaXMuX3JlbmRlckNvbnRyb2woa2V5KSxcbiAgICAgICksXG4gICAgKX1gO1xuICB9XG5cbiAgZ2V0Q29udHJvbHMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wnKSk7XG4gIH1cblxuICBnZXRDb250cm9sKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkfVwiXWApO1xuICB9XG5cbiAgX2dldEVycm9ycygpIHtcbiAgICByZXR1cm4gKHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMuZXJyb3JzIHx8IFtdKS5maWx0ZXIoKGVycm9yKSA9PiB7XG4gICAgICBsZXQgaWQgPSBgJHtlcnJvci5wcm9wZXJ0eS5yZXBsYWNlKCdpbnN0YW5jZS4nLCAnJyl9YDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShlcnJvci5hcmd1bWVudCkpIHtcbiAgICAgICAgaWQgPSBgJHtpZH0uJHtlcnJvci5hcmd1bWVudH1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcktleSA9IGB4LXNjaGVtYS1mb3JtLmVycm9ycy4ke2lkfS4ke2Vycm9yLm5hbWV9YDtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldCh0aGlzLnNjaGVtYSwgZXJyb3JLZXkpO1xuICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICF0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLmluY2x1ZGVzKGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIGlmICh0aGlzLnNjaGVtYSkge1xuICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmxvY2sgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZvcm1cbiAgICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUodGhpcy5fdmFsdWVzLCB7IC4uLnRoaXMuc2NoZW1hLCBhZGRpdGlvbmFsUHJvcGVydGllczoge30gfSk7XG4gICAgICB0aGlzLmVycm9ycyA9IHRoaXMuX2dldEVycm9ycygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yUmVzdWx0cztcbiAgfVxuXG4gIGlzVmFsaWQoKSB7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMudmFsaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZ2V0RXJyb3JzKCkgPT09IDA7XG4gIH1cblxuICBpc1RvdWNoKCkge1xuICAgIHJldHVybiB0aGlzLl90b3VjaCB8fCAodGhpcy5kaXJ0eSAmJiB0aGlzLnZhbGlkYXRlT25SZW5kZXIpO1xuICB9XG5cbiAgY2FuU3VibWl0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVG91Y2goKSAmJiB0aGlzLmlzVmFsaWQoKTtcbiAgfVxuXG4gIF91cGRhdGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IHN1Ym1pdEJ0biA9IHRoaXMuX2dldFN1Ym1pdEJ0bigpO1xuICAgIGlmIChzdWJtaXRCdG4gIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuY2FuU3VibWl0KCkpIHtcbiAgICAgICAgdGhpcy5fZ2V0U3VibWl0QnRuKCkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZ2V0U3VibWl0QnRuKCkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXNldEJ0biA9IHRoaXMuX2dldFJlc2V0QnRuKCk7XG4gICAgaWYgKHJlc2V0QnRuICE9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgIHJlc2V0QnRuLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0QnRuLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfdXBkYXRlQ2hpbGRyZW4od2l0aFZhbGlkYXRpb24pIHtcbiAgICBpZiAod2l0aFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB7fTtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgIHRoaXMucmVxdWVzdFZhbGlkYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlQWN0aW9uc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3VwZGF0ZUFjdGlvbnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVBY3Rpb25zVGltZW91dCk7XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX3ZhbHVlcycpKSB7XG4gICAgICB0aGlzLmdldENvbnRyb2xzKCkuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywgY29udHJvbC5pZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odGhpcy52YWxpZGF0ZU9uUmVuZGVyICYmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ192YWx1ZXMnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NjaGVtYScpKSk7XG4gIH1cblxuICBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZ2V0Q29udHJvbHMoKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxmb3JtIGNsYXNzPVwiJHtjbGFzc01hcCh7IHNjcm9sbGFibGU6IHRoaXMuc2Nyb2xsYWJsZSB9KX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgY29udGFpbmVyOiB0cnVlLCBjb25maXJtOiB0aGlzLl9jb25maXJtIH0pfVwiPlxuICAgICAgICAke3RoaXMuaGFzSGVhZGVyID09PSB0cnVlXG4gICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyB0aXRsZTogdHJ1ZSwgY2VudGVyOiB0aGlzLmhhc0hlYWRlciAmJiAhdGhpcy5oYXNGb290ZXIgfSl9XCI+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJoZWFkZXItbGVmdFwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAke3RoaXMucmVhZG9ubHkgPT09IHRydWUgfHwgdGhpcy5oYXNGb290ZXIgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogaHRtbGA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImdlbmVyYWw6dXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25TdWJtaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjb2RlOmNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aXRsZT1cIiR7dGhpcy5zdWJtaXRMYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IGB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICAgIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+JHt0aGlzLnNjaGVtYSAhPSBudWxsID8gdGhpcy5fcmVuZGVyUGFydCgpIDogaHRtbGBgfTwvZGl2PlxuICAgICAgICAke3RoaXMuaGFzRm9vdGVyID09PSB0cnVlICYmIHRoaXMucmVhZG9ubHkgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBpZD1cInJlc2V0XCIgb3V0bGluZWQgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldH1cIiBpY29uPVwiZ2VuZXJhbDp1cGRhdGVcIiB0aXRsZT1cIlJlc2V0XCI+UmVzZXQ8L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxndi1idXR0b24gaWQ9XCJzdWJtaXRcIiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblN1Ym1pdH1cIiBpY29uPVwiY29kZTpjaGVja1wiIC50aXRsZT1cIiR7dGhpcy5zdWJtaXRMYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICA+JHt0aGlzLnN1Ym1pdExhYmVsfTwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+YDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBlbXB0eSxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgICAtLWJnYzogdmFyKC0tZ3Ytc2NoZW1hLWZvcm0tLWJnYywgI2ZmZmZmZik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAgIC8qIGZvciBGaXJlZm94ICovXG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIsXG4gICAgICAgIC5mb290ZXIsXG4gICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgLyogZm9yIEZpcmVmb3ggKi9cbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQgPiBndi1zY2hlbWEtZm9ybS1jb250cm9sIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmNvbnRlbnQge1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5jb250ZW50ID4gZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCxcbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5jb250ZW50ID4gLmdyb3VwLXRpdGxlIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDc3NXB4O1xuICAgICAgICAgIHdpZHRoOiA5NSU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLFxuICAgICAgICAuZm9vdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgbWluLWhlaWdodDogNDVweDtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDI2cHg7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiAjYmZiZmJmO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgcGFkZGluZzogMCAwLjVyZW07XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5mb290ZXIge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvb3RlciAubGVmdCxcbiAgICAgICAgLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC5sZWZ0LFxuICAgICAgICAuZm9vdGVyIC5sZWZ0LFxuICAgICAgICAuaGVhZGVyIC5yaWdodCxcbiAgICAgICAgLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciAucmlnaHQsXG4gICAgICAgIC5mb290ZXIgLnJpZ2h0IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciAudGl0bGUge1xuICAgICAgICAgIGNvbG9yOiAjMjg0NDRmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZS5jZW50ZXIge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuY29uZmlybS1ib3gge1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb25maXJtLWJveF9hY3Rpb25zIHtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29uZmlybSAuaGVhZGVyIC5sZWZ0LFxuICAgICAgICAuY29uZmlybSAuaGVhZGVyIC5yaWdodCxcbiAgICAgICAgLmNvbmZpcm0gLmZvb3RlciAubGVmdCxcbiAgICAgICAgLmNvbmZpcm0gLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuZ3JvdXAtdGl0bGUge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZ3YtdGhlbWUtZm9udC1jb2xvci1kYXJrKTtcbiAgICAgICAgICBmb250LXNpemU6IDIxcHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4zZW07XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItZGFyayk7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytc2NoZW1hLWZvcm0nLCBHdlNjaGVtYUZvcm0pO1xuIl19
@@ -464,6 +464,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
464
464
 
465
465
  let name = policy.name;
466
466
  let description = '';
467
+ let condition = '';
467
468
  let configuration = {};
468
469
 
469
470
  let _id;
@@ -474,6 +475,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
474
475
  _id = detail.flowStep._id;
475
476
  name = detail.flowStep.name;
476
477
  description = detail.flowStep.description || '';
478
+ condition = detail.flowStep.condition || '';
477
479
  configuration = detail.flowStep.configuration;
478
480
  } else {
479
481
  _id = this._generateFlowStepId(targetFlow._id, detail.flowKey, detail.position);
@@ -486,6 +488,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
486
488
  name,
487
489
  policy: policy.id,
488
490
  description,
491
+ condition,
489
492
  enabled: true,
490
493
  configuration
491
494
  };
@@ -588,12 +591,12 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
588
591
  buildSchema({
589
592
  schema
590
593
  }) {
591
- const description = {
594
+ const commonDescription = {
592
595
  title: 'Description',
593
596
  description: 'Description of flow step',
594
597
  type: 'string'
595
598
  };
596
- const condition = {
599
+ const commonCondition = {
597
600
  title: 'Condition',
598
601
  description: 'Condition the execution of the flow step (support EL)',
599
602
  type: 'string',
@@ -605,9 +608,9 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
605
608
  if (schema) {
606
609
  const jsonSchema = typeof schema === 'string' ? JSON.parse(schema) : schema;
607
610
  const properties = {
608
- description,
611
+ commonDescription,
609
612
  ...(this.hasConditionalSteps ? {
610
- condition
613
+ commonCondition
611
614
  } : {}),
612
615
  ...jsonSchema.properties
613
616
  };
@@ -618,9 +621,9 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
618
621
 
619
622
  return {
620
623
  properties: {
621
- description,
624
+ commonDescription,
622
625
  ...(this.hasConditionalSteps ? {
623
- condition
626
+ commonCondition
624
627
  } : {})
625
628
  }
626
629
  };
@@ -757,8 +760,8 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
757
760
  configuration
758
761
  };
759
762
  const _initialValues = { ...step.configuration,
760
- description: step.description,
761
- condition: step.condition
763
+ commonDescription: step.description,
764
+ commonCondition: step.condition
762
765
  };
763
766
  this._currentFlowStep = { ...currentFlowStep,
764
767
  step,
@@ -898,18 +901,18 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
898
901
 
899
902
  _writeFlowStep(values) {
900
903
  const {
901
- description,
902
- condition,
904
+ commonDescription,
905
+ commonCondition,
903
906
  ...configuration
904
907
  } = values;
905
908
 
906
- if (this._currentFlowStep.step._new || this._currentFlowStep.step.description !== description || this._currentFlowStep.step.condition !== condition || !deepEqual(this._currentFlowStep.step.configuration, configuration)) {
909
+ if (this._currentFlowStep.step._new || this._currentFlowStep.step.description !== commonDescription || this._currentFlowStep.step.condition !== commonCondition || !deepEqual(this._currentFlowStep.step.configuration, configuration)) {
907
910
  const flow = this._findFlowById(this._currentFlowStep.flow._id);
908
911
 
909
912
  const position = flow[this._currentFlowStep.group].findIndex(step => step._id === this._currentFlowStep.step._id);
910
913
 
911
- flow[this._currentFlowStep.group][position].description = description;
912
- flow[this._currentFlowStep.group][position].condition = condition;
914
+ flow[this._currentFlowStep.group][position].description = commonDescription;
915
+ flow[this._currentFlowStep.group][position].condition = commonCondition;
913
916
  flow[this._currentFlowStep.group][position].configuration = deepClone(configuration);
914
917
  delete flow[this._currentFlowStep.group][position]._new;
915
918
  flow[this._currentFlowStep.group][position]._dirty = true;
@@ -1159,7 +1162,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
1159
1162
  _renderFlowStepForm(readonlyMode) {
1160
1163
  const values = this._currentFlowStep._values || this._currentFlowStep._initialValues;
1161
1164
  const groups = [{
1162
- items: ['description', 'condition']
1165
+ items: ['commonDescription', 'commonCondition']
1163
1166
  }, {
1164
1167
  name: i18n('gv-policy-studio.policy-settings'),
1165
1168
  default: true
@@ -1775,4 +1778,4 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
1775
1778
 
1776
1779
  }
1777
1780
  window.customElements.define('gv-policy-studio', GvPolicyStudio);
1778
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtcG9saWN5LXN0dWRpby5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsIm1ldGhvZHMiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiaTE4biIsImVtcHR5IiwiY2FjaGUiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJLZXlib2FyZEVsZW1lbnQiLCJLRVlTIiwiRkxPV19TVEVQX0ZPUk1fSUQiLCJHdlBvbGljeVN0dWRpbyIsInByb3BlcnRpZXMiLCJwb2xpY2llcyIsInR5cGUiLCJBcnJheSIsInNlcnZpY2VzIiwiT2JqZWN0IiwicmVzb3VyY2VUeXBlcyIsImF0dHJpYnV0ZSIsInByb3BlcnR5UHJvdmlkZXJzIiwiZHluYW1pY1Byb3BlcnR5U2NoZW1hIiwidGFiSWQiLCJTdHJpbmciLCJfdGFiSWQiLCJkZWZpbml0aW9uIiwiX2RlZmluaXRpb24iLCJkb2N1bWVudGF0aW9uIiwiZmxvd1NjaGVtYSIsImNvbmZpZ3VyYXRpb25TY2hlbWEiLCJfY29uZmlndXJhdGlvblNjaGVtYSIsImNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbiIsImlzRGlydHkiLCJCb29sZWFuIiwicmVmbGVjdCIsIl9kcmFnUG9saWN5IiwiX2Ryb3BQb2xpY3kiLCJzZWxlY3RlZEZsb3dzSWQiLCJfc2VsZWN0ZWRGbG93c0lkIiwiX2N1cnJlbnRQb2xpY3lJZCIsIl9zZWFyY2hQb2xpY3lRdWVyeSIsIl9zZWFyY2hGbG93UXVlcnkiLCJfZmxvd1N0ZXBTY2hlbWEiLCJfY3VycmVudEZsb3dTdGVwIiwiX3BvbGljeUZpbHRlciIsIl9mbG93RmlsdGVyIiwiX2N1cnJlbnRBc2tDb25maXJtYXRpb24iLCJoYXNQcm9wZXJ0aWVzIiwiX2hhc1Byb3BlcnRpZXMiLCJoYXNSZXNvdXJjZXMiLCJoYXNQb2xpY3lGaWx0ZXIiLCJmbG93c1RpdGxlIiwic29ydGFibGUiLCJjYW5BZGQiLCJyZWFkb25seSIsInJlYWRvbmx5UGxhbnMiLCJjYW5EZWJ1ZyIsIl9jYW5EZWJ1ZyIsImRlYnVnUmVzcG9uc2UiLCJoYXNDb25kaXRpb25hbFN0ZXBzIiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJmbG93cyIsIl90YWJzIiwiaWQiLCJ0aXRsZSIsImljb24iLCJ2YWx1ZSIsInRoZW4iLCJyZXF1ZXN0VXBkYXRlIiwiX2Zsb3dGaWx0ZXJPcHRpb25zIiwiZGVmaW5lZFBsYW5zIiwibGVuZ3RoIiwiX3BvbGljeUZpbHRlck9wdGlvbnMiLCJzcGxpY2UiLCJvbktleWJvYXJkIiwiaXNQcmVzc2VkIiwiU2hpZnQiLCJDdHJsIiwiU3BhY2UiLCJzZWFyY2giLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsImZvY3VzIiwiaW5jbHVkZXMiLCJfZ2VuZXJhdGVGbG93c0lkIiwicmVzb3VyY2VzIiwiX2dlbmVyYXRlSWQiLCJwbGFucyIsIm1hcCIsInBsYW4iLCJfZ2VuZXJhdGVQbGFuRmxvd3NJZCIsIl9pbml0aWFsRGVmaW5pdGlvbiIsIl9zZWxlY3RGaXJzdEZsb3ciLCJpc0FycmF5IiwiZmlsdGVyIiwiX2ZpbmRGbG93QnlJZCIsIl91cGRhdGVTZWxlY3RlZEZsb3dzIiwiZGlzcGF0Y2giLCJjYW5kaWRhdGUiLCJkZWZpbmVkRmxvd3MiLCJfaWQiLCJmaW5kIiwiX2dldEZsb3dFbGVtZW50IiwiZmxvd0lkIiwiX29uRHJhZ0VuZFBvbGljeSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZSIsIm9uRHJhZ0VuZCIsIl9vbkRyb3BQb2xpY3kiLCJkZXRhaWwiLCJfYXNrVG9WYWxpZGF0ZUZvcm1zIiwicG9saWN5IiwidGFyZ2V0RmxvdyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJfbmV3IiwiZmxvd1N0ZXAiLCJfZ2VuZXJhdGVGbG93U3RlcElkIiwiZmxvd0tleSIsInBvc2l0aW9uIiwiZW5hYmxlZCIsInNvdXJjZUZsb3ciLCJzb3VyY2VGbG93SWQiLCJzb3VyY2VQb3NpdGlvbiIsInNvdXJjZUZsb3dLZXkiLCJzdGVwIiwiZ3JvdXAiLCJzY2hlbWEiLCJidWlsZFNjaGVtYSIsIl9zZXRDdXJyZW50Rmxvd1N0ZXAiLCJjdXJyZW50Rmxvd0Zvcm0iLCJfZ2V0Rmxvd1N0ZXBGb3JtIiwiZGlydHkiLCJjYW5jZWxFZGl0Iiwic2V0VGltZW91dCIsIl9lZGl0Rmxvd1N0ZXAiLCJmbG93IiwidXBkYXRlQ29tcGxldGUiLCJmbG93RWxlbWVudCIsInNlbGVjdGVkU3RlcElkIiwiX2RpcnR5IiwiZ3ZGbG93IiwicmVtb3ZlQ2FuZGlkYXRlIiwiX29uRGVsZXRlUG9saWN5IiwidGFyZ2V0IiwiZWRpdGluZyIsIl9jbG9zZUZsb3dTdGVwRm9ybSIsIl9vbkRlc2lnbiIsIl9jaGFuZ2VUYWIiLCJfc3BsaXRNYWluVmlld3MiLCJjb25kaXRpb24iLCJqc29uU2NoZW1hIiwiSlNPTiIsInBhcnNlIiwiY3VycmVudEZsb3dTdGVwIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIl9vbk9wZW5Eb2N1bWVudGF0aW9uIiwiX21heGltaXplVG9wVmlldyIsIl9vbkVkaXRGbG93U3RlcCIsIl9nZXRSZXNpemFibGVWaWV3cyIsIm1heGltaXplVG9wIiwiX21heGltaXplQm90dG9tVmlldyIsIm1heGltaXplQm90dG9tIiwic3BsaXQiLCJfb25DaGFuZ2VGbG93U3RlcFN0YXRlIiwiX29uQ2xvc2VGbG93U3RlcEZvcm0iLCJlcnIiLCJmb3JjZSIsIlByb21pc2UiLCJhbGwiLCJfc3VibWl0T3JDb25maXJtRm9ybXMiLCJmb3JtcyIsInIiLCJfYnVpbGREZWZpbml0aW9uVG9TYXZlIiwiZ2V0Q2hpbGRyZW4iLCJfY2hlY2tDdXJyZW50Rmxvd1N0ZXAiLCJFcnJvciIsImZsb3dTdGVwU2NoZW1hIiwiX2luaXRpYWxWYWx1ZXMiLCJzY29wZSIsIl9lbnVtIiwiZW51bSIsImZpbHRlcmVkIiwiZGVmYXVsdCIsIl92YWx1ZXMiLCJfcmVmcmVzaCIsImNsb3NlU3RlcEZvcm0iLCJfb25TZWxlY3RGbG93cyIsIl9vbkNsb3NlRG9jdW1lbnRhdGlvbiIsIl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbU1lbnUiLCJnZXRTZWxlY3RlZEZsb3ciLCJfZmV0Y2hEb2N1bWVudGF0aW9uIiwiX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tRm9ybSIsInJlbW92ZUl0ZW0iLCJfZmluZEZsb3dDb2xsZWN0aW9uIiwicGxhbnNGbG93cyIsInJlZHVjZSIsImFjYyIsInZhbCIsImNvbmNhdCIsImluZGV4Iiwic2VsZWN0ZWRGbG93SWQiLCJfb25UYXJnZXRQb2xpY3kiLCJfb25DaGFuZ2VGbG93U3RlcCIsInZhbHVlcyIsIl93cml0ZUZsb3dTdGVwIiwiZmluZEluZGV4IiwiX29uU3VibWl0Rmxvd1N0ZXAiLCJjIiwiX29uQ2FuY2VsRmxvdyIsIl9vblN1Ym1pdEZsb3ciLCJzZWxlY3RlZEZsb3ciLCJhc3NpZ24iLCJfY3JlYXRlRmxvd0Zyb21TY2hlbWEiLCJzZWxlY3RlZEZsb3dVcGRhdGVkIiwiX29uQ2FuY2VsRmxvd01vZGUiLCJfb25TdWJtaXRGbG93TW9kZSIsIl9vbkNoYW5nZVRhYiIsIl9jaGFuZ2VUYWJWYWxpZGF0b3IiLCJmcm9tIiwidG8iLCJjb21wb25lbnQiLCJjb25maXJtIiwicmVzb2x2ZSIsIl9vbkRyYWdTdGFydEZsb3dTdGVwIiwiX3JlbmRlckZsb3dFbXB0eVN0YXRlIiwicmVhZG9ubHlNb2RlIiwiX29uQWRkRmxvdyIsIl9yZW5kZXJGbG93IiwiaGFzRW1wdHlTdGF0ZSIsImJpbmQiLCJfb25GZXRjaFJlc291cmNlcyIsImV2ZW50IiwiY3VycmVudFRhcmdldCIsInJlZ2V4VHlwZXMiLCJvcHRpb25zIiwiZGVmaW5lZFJlc291cmNlcyIsInJlc291cmNlIiwiUmVnRXhwIiwidGVzdCIsInJlc291cmNlVHlwZSIsInJvdyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInBpY3R1cmUiLCJpdGVtIiwiZWxlbWVudCIsIl9yZW5kZXJQb2xpY3kiLCJfcmVuZGVyRmxvd1N0ZXBGb3JtIiwiY29udGVudCIsImltYWdlIiwiX29uUmVzZXRGbG93U3RlcCIsInJlc2V0IiwibGlzdCIsInByZWZpeCIsImlzRmxvdyIsInByZSIsInN0ZXBJbmRleCIsInBvc3QiLCJnZXRVcGRhdGVDb21wbGV0ZSIsInNob3VsZFVwZGF0ZSIsImNoYW5nZWRQcm9wZXJ0aWVzIiwiaGFzIiwiZHJhZ1BvbGljeSIsImRyb3BQb2xpY3kiLCJ1cGRhdGVkIiwicHJvcHMiLCJncm91cHMiLCJpdGVtcyIsInNldEl0ZW0iLCJfb25EZWxldGVGbG93IiwiX2RlbGV0ZUZsb3ciLCJkZWZpbmVkUHJvcGVydGllcyIsIl9vbkR1cGxpY2F0ZUZsb3ciLCJfYWRkRmxvdyIsInBsYW5JbmRleCIsInAiLCJpIiwiX29uQ2hhbmdlRmxvd1N0YXRlIiwiX29uQWRkRmxvd1BsYW4iLCJjb2xsZWN0aW9uIiwiZHVwbGljYXRlIiwicHVzaCIsIm5ld0Zsb3ciLCJfaW5zdGFudGlhdGUiLCJwcm9wZXJ0aWVzRGVmaW5pdGlvbiIsImluaXRpYXRvciIsInByb3BlcnR5Iiwia2V5Iiwia2V5cyIsImVudHJ5IiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInNlbGVjdGVkRmxvd3MiLCJfZmluZEZsb3dJbmRleCIsImYiLCJfb25SZW9yZGVyRmxvd3MiLCJuZXdPcmRlciIsIl9vblNlYXJjaFBvbGljeSIsIl9vbkNsZWFyUG9saWN5IiwiX29uU2VhcmNoRmxvd3MiLCJfb25DbGVhckZsb3dzIiwiX29uUmVzZXRBbGwiLCJfZmlsdGVyTm90VmFsaWRTdGVwIiwiX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzIiwibyIsImNvcHkiLCJzdGFydHNXaXRoIiwiZm9ybSIsImlzVmFsaWQiLCJzdWJtaXQiLCJnZXRQcm9wZXJ0aWVzRWxlbWVudCIsImNsb3NlUHJvbWlzZXMiLCJjdXJyZW50U3RlcCIsInNhdmVkIiwiX2RlZmluaXRpb25TYXZlZCIsIl9idWlsZERlZmluaXRpb25Ub1NlbmQiLCJkZWZpbml0aW9uVG9TYXZlIiwiX29uU2F2ZUFsbCIsImNhdGNoIiwiY29uc29sZSIsImVycm9yIiwiX29uRGVidWciLCJyZXF1ZXN0RXZlbnQiLCJyZXF1ZXN0IiwiZmlsdGVyZWRGbG93cyIsImZpbHRlcmVkUGxhbnMiLCJfb25GaWx0ZXJGbG93cyIsIl9nZXRGaWx0ZXJlZFBvbGljaWVzIiwib25SZXF1ZXN0Iiwib25SZXNwb25zZSIsIl9vbkZpbHRlclBvbGljaWVzIiwiX3JlbmRlckRlc2lnbiIsIl9yZW5kZXJGbG93Rm9ybSIsIl9yZW5kZXJEZWJ1ZyIsInJlc3BvbnNlIiwiaXNMb2FkaW5nIiwicGF0aCIsIm1ldGhvZCIsIl9yZW5kZXJDb25maWd1cmF0aW9uRm9ybSIsIl9vblJlc291cmNlc0NoYW5nZSIsIl9vblByb3BlcnRpZXNDaGFuZ2UiLCJfb25TYXZlUHJvdmlkZXIiLCJwcm92aWRlciIsIl9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5IiwicmVuZGVyIiwiX2dldFJlYWRvbmx5TW9kZUZvckRlc2lnbiIsImZsb3dQbGFuIiwiY29tcGFyZWRGbG93IiwiY29tcGFyZWRGbG93UGxhbiIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLElBQWQsRUFBb0JDLFVBQXBCLFFBQXNDLEtBQXRDO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixlQUF4QjtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLE9BQU8sb0JBQVA7QUFDQSxPQUFPLGtCQUFQO0FBQ0EsT0FBTyx3QkFBUDtBQUNBLE9BQU8sK0JBQVA7QUFDQSxPQUFPLGlDQUFQO0FBQ0EsT0FBTyw2QkFBUDtBQUNBLE9BQU8sNkJBQVA7QUFDQSxPQUFPLHNCQUFQO0FBQ0EsT0FBTyxxQkFBUDtBQUNBLE9BQU8sV0FBUDtBQUNB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LEVBQW1CO0FBQ2pCLGFBQU8sS0FBUDtBQUNEOztBQUVELFVBQU07QUFBRXRRLE1BQUFBLElBQUksRUFBRXVRO0FBQVIsUUFBNkIsS0FBSzNKLG1CQUFMLENBQXlCMEosWUFBWSxDQUFDM1AsR0FBdEMsQ0FBbkM7O0FBQ0EsV0FBTzRQLGdCQUFnQixJQUFJLEtBQUsxUyxhQUFoQztBQUNEOztBQXB1RDZEO0FBdXVEaEUyUyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGtCQUE3QixFQUFpRHpWLGNBQWpEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnLi4vbGliL3N0dWRpbyc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnLi4vbGliL2kxOG4nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1idXR0b24nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pY29uJztcbmltcG9ydCAnLi4vbW9sZWN1bGVzL2d2LW9wdGlvbic7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1kb2N1bWVudGF0aW9uJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXJlc2l6YWJsZS12aWV3cyc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybSc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1odHRwLWNsaWVudCc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi10YWJzJztcbmltcG9ydCAnLi4vbW9sZWN1bGVzL2d2LXJvdyc7XG5pbXBvcnQgJy4vZ3YtZmxvdyc7XG5pbXBvcnQgJy4vZ3YtZmxvdy1zdGVwJztcbmltcG9ydCAnLi9ndi1wb2xpY3ktc3R1ZGlvLW1lbnUnO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuLi9zdHlsZXMvZW1wdHknO1xuaW1wb3J0IHsgY2FjaGUgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9jYWNoZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGRlZXBFcXVhbCB9IGZyb20gJy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBLZXlib2FyZEVsZW1lbnQsIEtFWVMgfSBmcm9tICcuLi9taXhpbnMva2V5Ym9hcmQtZWxlbWVudCc7XG5cbmNvbnN0IEZMT1dfU1RFUF9GT1JNX0lEID0gJ2Zsb3ctc3RlcC1mb3JtJztcblxuLyoqXG4gKiAgU3R1ZGlvIFBvbGljeSBjb21wb25lbnRcbiAqXG4gKiDimqDvuI8gVGhpcyBjb21wb25lbnQgaXMgYmFzZWQgb24gYGFzY2lpZG9jdG9yYCwgYGhpZ2hsaWdodC5qc2AgYW5kIGBhc2NpaWRvY3Rvci1oaWdobGlnaHQuanNgLlxuICogVG8gdXNlIHRoaXMgY29tcG9uZW50IGluIHlvdXIgcHJvamVjdCBiZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBvclxuICogaW5zdGFsbCB0aGVtIHdpdGg6IGBucG0gaW5zdGFsbCBhc2NpaWRvY3RvciBoaWdobGlnaHQuanMgYXNjaWlkb2N0b3ItaGlnaGxpZ2h0LmpzIC0tc2F2ZWBcbiAqXG4gKiBAZmlyZXMgZ3YtcG9saWN5LXN0dWRpbzpzZWxlY3QtcG9saWN5IC0gU2VsZWN0IHBvbGljeSBldmVudFxuICogQGZpcmVzIGd2LXBvbGljeS1zdHVkaW86c2F2ZSAtIEV2ZW50IHNlbnQgd2hlbiBcIlNhdmVcIiBidXR0b24gaXMgY2xpY2tlZCwgaXQgY29udGFpbnMgdGhlIHdob2xlIGRlZmluaXRpb24gb2YgdGhlIEFQSVxuICogQGZpcmVzIGd2LXBvbGljeS1zdHVkaW86ZGVidWcgLSBFdmVudCBzZW50IHdoZW4gdmFsaWRhdGlvbiBidXR0b24gb2YgdGhlICdUcnkgaXQnIHRhYiBpcyBjbGlja2VkLCBpdCBjb250YWlucyB0aGUgd2hvbGUgZGVmaW5pdGlvbiBvZiB0aGUgQVBJIGFuZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyeSBpdCByZXF1ZXN0LlxuICpcbiAqIEBhdHRyIHtBcnJheX0gcG9saWNpZXMgLSBQb2xpY2llcyBhdmFpbGFibGVcbiAqIEBhdHRyIHtBcnJheX0gc2VydmljZXMgLSBTZXJ2aWNlcyBhdmFpbGFibGVcbiAqIEBhdHRyIHtBcnJheX0gcmVzb3VyY2VUeXBlcyAtIFJlc291cmNlcyB0eXBlcyBhdmFpbGFibGVcbiAqIEBhdHRyIHtBcnJheX0gcHJvcGVydHlQcm92aWRlcnMgLSBQcm92aWRlcnMgb2YgcHJvcGVydGllc1xuICogQGF0dHIge0FycmF5fSBkeW5hbWljUHJvcGVydHlTY2hlbWEgLSBTY2hlbWEgZm9yIHRoZSBkeW5hbWljIHByb3BlcnR5IGZvcm1cbiAqIEBhdHRyIHtTdHJpbmd9IHRhYklkIC0gQ3VycmVudCB0YWJJZCB0byBkaXNwbGF5IChkZXNpZ24sIHNldHRpbmdzLCBwcm9wZXJ0aWVzIG9yIHJlc291cmNlcylcbiAqIEBhdHRyIHtPYmplY3R9IGRlZmluaXRpb24gLSBUaGUgZGVmaW5pdGlvbiBvZiBmbG93c1xuICogQGF0dHIge09iamVjdH0gZG9jdW1lbnRhdGlvbiAtIFRoZSBkb2N1bWVudGF0aW9uIHRvIGRpc3BsYXlcbiAqIEBhdHRyIHtPYmplY3R9IGZsb3dTY2hlbWEgLSBUaGUgZmxvdyBmb3JtIGNvbmZpZ3VyYXRpb24gdG8gZGlzcGxheSBpbiBndi1zY2hlbWEtZm9ybSBjb21wb25lbnRcbiAqIEBhdHRyIHtPYmplY3R9IGNvbmZpZ3VyYXRpb25TY2hlbWEgLSBUaGUgZm9ybSBjb25maWd1cmF0aW9uIHRvIGRpc3BsYXkgaW4gZ3Ytc2NoZW1hLWZvcm0gY29tcG9uZW50XG4gKiBAYXR0ciB7T2JqZWN0fSBjb25maWd1cmF0aW9uSW5mb3JtYXRpb24gLSBUaGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhcGkgY29uZmlndXJhdGlvbiB0YWJcbiAqIEBhdHRyIHtCb29sZWFufSBpc0RpcnR5IC0gdHJ1ZSBpZiBjb21wb25lbnQgaXMgZGlydHlcbiAqIEBhdHRyIHtBcnJheX0gc2VsZWN0ZWRGbG93c0lkIC0gVGhlIHNlbGVjdGVkIGZsb3dzIGlkXG4gKiBAYXR0ciB7Qm9vbGVhbn0gc29ydGFibGUgLSB0cnVlIGlmIGZsb3dzIGFyZSBzb3J0YWJsZVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gdHJ1ZSBpZiByZWFkb25seVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5LXBsYW5zIC0gdHJ1ZSBpZiBwbGFucycgZmxvd3MgY2FuJ3QgYmUgbW9kaWZpZWRcbiAqIEBhdHRyIHtCb29sZWFufSBjYW4tYWRkIC0gdHJ1ZSBpZiB1c2VyIGNhbiBhZGQgZmxvd1xuICogQGF0dHIge1N0cmluZ30gZmxvd3NUaXRsZSAtIGZsb3dzIG1lbnUgdGl0bGVcbiAqIEBhdHRyIHtCb29sZWFufSBoYXMtcG9saWN5LWZpbHRlciAtIHRydWUgaWYgcG9saWNpZXMgaGF2ZSBvblJlcXVlc3Qvb25SZXNwb25zZSBwcm9wZXJ0aWVzXG4gKiBAYXR0ciB7Qm9vbGVhbn0gY2FuLWRlYnVnIC0gdHJ1ZSBpZiBkZWJ1ZyB0YWIgc2hvdWxkIGJlIGRpc3BsYXllZFxuICogQGF0dHIge09iamVjdH0gZGVidWdSZXNwb25zZSAtIHRydWUgaWYgZGVidWcgdGFiIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAqIEBhdHRyIHtCb29sZWFufSBoYXMtY29uZGl0aW9uYWwtc3RlcHMgLSB0cnVlIGlmIHN0ZXBzIGNhbiBiZSBjb25kaXRpb25lZFxuICovXG5leHBvcnQgY2xhc3MgR3ZQb2xpY3lTdHVkaW8gZXh0ZW5kcyBLZXlib2FyZEVsZW1lbnQoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvbGljaWVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBzZXJ2aWNlczogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHJlc291cmNlVHlwZXM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Jlc291cmNlLXR5cGVzJyB9LFxuICAgICAgcHJvcGVydHlQcm92aWRlcnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Byb3BlcnR5LXByb3ZpZGVycycgfSxcbiAgICAgIGR5bmFtaWNQcm9wZXJ0eVNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2R5bmFtaWMtcHJvcGVydHktc2NoZW1hJyB9LFxuICAgICAgdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICd0YWItaWQnIH0sXG4gICAgICBfdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWZpbml0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgX2RlZmluaXRpb246IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkb2N1bWVudGF0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgZmxvd1NjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2Zsb3ctc2NoZW1hJyB9LFxuICAgICAgY29uZmlndXJhdGlvblNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2NvbmZpZ3VyYXRpb24tc2NoZW1hJyB9LFxuICAgICAgX2NvbmZpZ3VyYXRpb25TY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBjb25maWd1cmF0aW9uSW5mb3JtYXRpb246IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjb25maWd1cmF0aW9uLWluZm9ybWF0aW9uJyB9LFxuICAgICAgaXNEaXJ0eTogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdkaXJ0eScsIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIF9kcmFnUG9saWN5OiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Ryb3BQb2xpY3k6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBzZWxlY3RlZEZsb3dzSWQ6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3NlbGVjdGVkLWZsb3dzLWlkJyB9LFxuICAgICAgX3NlbGVjdGVkRmxvd3NJZDogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2N1cnJlbnRQb2xpY3lJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hQb2xpY3lRdWVyeTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hGbG93UXVlcnk6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmxvd1N0ZXBTY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfY3VycmVudEZsb3dTdGVwOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3BvbGljeUZpbHRlcjogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Zsb3dGaWx0ZXI6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9jdXJyZW50QXNrQ29uZmlybWF0aW9uOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGhhc1Byb3BlcnRpZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXByb3BlcnRpZXMnIH0sXG4gICAgICBfaGFzUHJvcGVydGllczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBoYXNSZXNvdXJjZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXJlc291cmNlcycgfSxcbiAgICAgIGhhc1BvbGljeUZpbHRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcG9saWN5LWZpbHRlcicgfSxcbiAgICAgIGZsb3dzVGl0bGU6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdmbG93cy10aXRsZScgfSxcbiAgICAgIHNvcnRhYmxlOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIGNhbkFkZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdjYW4tYWRkJyB9LFxuICAgICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcmVhZG9ubHlQbGFuczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdyZWFkb25seS1wbGFucycgfSxcbiAgICAgIGNhbkRlYnVnOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2Nhbi1kZWJ1ZycgfSxcbiAgICAgIF9jYW5EZWJ1ZzogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWJ1Z1Jlc3BvbnNlOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZGVidWctcmVzcG9uc2UnIH0sXG4gICAgICBoYXNDb25kaXRpb25hbFN0ZXBzOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1jb25kaXRpb25hbC1zdGVwcycgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGVtcHR5LFxuICAgICAgbWV0aG9kcyxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAtLWhlaWdodDogdmFyKC0tZ3YtcG9saWN5LXN0dWRpby0taCwgY2FsYygxMDB2aCAtIDMycHgpKTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgLS1oZWlnaHQtaW4tdGFiczogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMjVweCk7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94IHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZXNpZ24sXG4gICAgICAgIC5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtcmVzaXphYmxlLXZpZXdzIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0YWJsZS1uYW1lIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdGFibGUtbmFtZSBzcGFuIHtcbiAgICAgICAgICBjb2xvcjogI2JmYmZiZjtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybV9fY29udHJvbCB7XG4gICAgICAgICAgbWFyZ2luOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICBndi1pbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lLmRpcnR5IHtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZSBndi1pY29uIHtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDI0cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1wYXRoIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRpdGxlX21ldGhvZHMge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAudHdvLWNvbHMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5sZWZ0LW1lbnUge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yaWdodC1tZW51IHtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2NvbnRhaW5lciB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBoZWlnaHQ6IDk5JTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2Zvcm0ge1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctc3RlcF9fZm9ybS10aXRsZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtdGFicyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyxcbiAgICAgICAgZ3YtcHJvcGVydGllcyxcbiAgICAgICAgZ3YtcmVzb3VyY2VzIHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXByb3BlcnRpZXMsXG4gICAgICAgIGd2LXJlc291cmNlcyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wcm9wZXJ0aWVzLnByb3BlcnRpZXMge1xuICAgICAgICAgIC0tZ3YtcHJvcGVydGllcy10YWJsZS0tY29sbWc6IDEwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYXBpLXNldHRpbmdzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRlYnVnIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbiB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9faWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCk7XG4gICAgICAgICAgLS1ndi1pY29uLW9wYWNpdHktLWM6IHZhcigtLWd2LXRoZW1lLWNvbG9yLWluZm8tbGlnaHQsICM2NGI1ZjYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZSxcbiAgICAgICAgLmRlYnVnLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KTtcbiAgICAgICAgICBtYXJnaW46IDE1cHg7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXNldHRpbmdzIGd2LXNjaGVtYS1mb3JtIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW5wdXQge1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtIDA7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMsXG4gICAgICAgIC5zZWFyY2gtcG9saWNpZXMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1wb2xpY2llcyB7XG4gICAgICAgICAgbWFyZ2luOiAxLjVyZW0gMC41cmVtIDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LWJ1dHRvbi5idG4tbGFyZ2UsXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LW9wdGlvbiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtIDE1cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZmJmYmY7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgLnRpdGxlIHtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4zcmVtO1xuICAgICAgICAgIGNvbG9yOiAjYmZiZmJmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgd2lkdGg6IDI0MHB4O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDI1cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgPiAqLFxuICAgICAgICAuc2VhcmNoLXBvbGljaWVzID4gKiB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLnBvbGljaWVzID0gW107XG4gICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gW107XG4gICAgdGhpcy50YWJJZCA9ICdkZXNpZ24nO1xuICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkID0gW107XG4gICAgdGhpcy5mbG93c1RpdGxlID0gJ0Zsb3dzJztcbiAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb24gPSB7XG4gICAgICBmbG93czogW10sXG4gICAgfTtcbiAgICB0aGlzLl90YWJzID0gW3sgaWQ6ICdkZXNpZ24nLCB0aXRsZTogJ0Rlc2lnbicsIGljb246ICduYXZpZ2F0aW9uOmV4Y2hhbmdlJyB9XTtcbiAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB0aGlzLl9mbG93RmlsdGVyID0gW107XG4gIH1cblxuICBzZXQgaGFzUHJvcGVydGllcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcHJvcGVydGllcycpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdwcm9wZXJ0aWVzJywgdGl0bGU6ICdQcm9wZXJ0aWVzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2hhc1Byb3BlcnRpZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0aWVzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc291cmNlcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcmVzb3VyY2VzJykudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RhYnMgPSBbLi4udGhpcy5fdGFicywgeyBpZDogJ3Jlc291cmNlcycsIHRpdGxlOiAnUmVzb3VyY2VzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjNScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGNhbkRlYnVnKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdkZWJ1ZycsIHRpdGxlOiAnVHJ5IGl0JywgaWNvbjogJ2NvbnRlbnQ6c2VuZCcgfV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9mbG93RmlsdGVyT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kZWZpbmVkUGxhbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBpZDogJ2FwaScsIHRpdGxlOiAnQXBpJywgaWNvbjogJ3Nob3BwaW5nOmJveCMzJyB9LFxuICAgICAgICB7IGlkOiAncGxhbicsIHRpdGxlOiAnUGxhbnMnLCBpY29uOiAnc2hvcHBpbmc6c2FsZSMyJyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgaGFzUG9saWN5RmlsdGVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zID0gW1xuICAgICAgICB7IGlkOiAnb25SZXF1ZXN0JywgdGl0bGU6ICdSZXF1ZXN0JywgaWNvbjogJ25hdmlnYXRpb246YXJyb3ctZnJvbS1sZWZ0JyB9LFxuICAgICAgICB7IGlkOiAnb25SZXNwb25zZScsIHRpdGxlOiAnUmVzcG9uc2UnLCBpY29uOiAnbmF2aWdhdGlvbjphcnJvdy1mcm9tLXJpZ2h0JyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgY29uZmlndXJhdGlvblNjaGVtYSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFicy5zcGxpY2UoMSwgMCwgeyBpZDogJ3NldHRpbmdzJywgdGl0bGU6ICdDb25maWd1cmF0aW9uJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMicgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblNjaGVtYSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbmZpZ3VyYXRpb25TY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb25TY2hlbWE7XG4gIH1cblxuICBvbktleWJvYXJkKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzUHJlc3NlZChLRVlTLlNoaWZ0LCBLRVlTLkN0cmwsIEtFWVMuU3BhY2UpKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoLXBvbGljeScpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3NlYXJjaC1mbG93Jyk7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBzZWFyY2guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldCB0YWJJZCh0YWJJZCkge1xuICAgIGlmICh0YWJJZCAhPSBudWxsICYmIFsnZGVzaWduJywgJ3NldHRpbmdzJywgJ3Byb3BlcnRpZXMnLCAncmVzb3VyY2VzJywgJ2RlYnVnJ10uaW5jbHVkZXModGFiSWQpKSB7XG4gICAgICB0aGlzLl90YWJJZCA9IHRhYklkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90YWJJZCA9ICdkZXNpZ24nO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSWQ7XG4gIH1cblxuICBzZXQgZGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKGRlZmluaXRpb24uZmxvd3MpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZ2VuZXJhdGVJZCgncmVzb3VyY2UtJywgZGVmaW5pdGlvbi5yZXNvdXJjZXMpO1xuICAgICAgY29uc3QgcGxhbnMgPVxuICAgICAgICBkZWZpbml0aW9uLnBsYW5zID09IG51bGxcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBkZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93czogdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICB0aGlzLl9pbml0aWFsRGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgZmxvd3MsIHJlc291cmNlcywgcGxhbnMgfTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5faW5pdGlhbERlZmluaXRpb24pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3coKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEZsb3dzSWQoc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3NJZCAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRGbG93c0lkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRGbG93c0lkID0gc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gICAgICBpZiAoc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCAhPT0gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRmxvd3NJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gIH1cblxuICBfdXBkYXRlU2VsZWN0ZWRGbG93cyhzZWxlY3RlZEZsb3dzSWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IHNlbGVjdGVkRmxvd3NJZDtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QtZmxvd3MnLCB7IGZsb3dzOiB0aGlzLnNlbGVjdGVkRmxvd3NJZCB9KTtcbiAgfVxuXG4gIF9zZWxlY3RGaXJzdEZsb3coZGlzcGF0Y2ggPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCBjYW5kaWRhdGUgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZGVmaW5lZEZsb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZWZpbmVkRmxvd3NbMF0uX2lkICE9IG51bGwpIHtcbiAgICAgICAgY2FuZGlkYXRlID0gdGhpcy5kZWZpbmVkRmxvd3NbMF07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGVmaW5lZFBsYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MgIT0gbnVsbCAmJiBwbGFuLmZsb3dzLmxlbmd0aCA+IDAgJiYgcGxhbi5mbG93c1swXS5faWQgIT0gbnVsbCk7XG4gICAgICAgIGlmIChwbGFuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlID0gcGxhbi5mbG93c1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW2NhbmRpZGF0ZS5faWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IFtjYW5kaWRhdGUuX2lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9nZXRGbG93RWxlbWVudChmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7Zmxvd0lkfVwiXWApO1xuICB9XG5cbiAgX29uRHJhZ0VuZFBvbGljeSgpIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGUpID0+IGUub25EcmFnRW5kKCkpO1xuICB9XG5cbiAgYXN5bmMgX29uRHJvcFBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICBjb25zdCBwb2xpY3kgPSBkZXRhaWwucG9saWN5O1xuICAgICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcblxuICAgICAgbGV0IG5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICAgIGxldCBfaWQ7XG4gICAgICBsZXQgX25ldyA9IGZhbHNlO1xuICAgICAgaWYgKGRldGFpbC5mbG93U3RlcCkge1xuICAgICAgICBfaWQgPSBkZXRhaWwuZmxvd1N0ZXAuX2lkO1xuICAgICAgICBuYW1lID0gZGV0YWlsLmZsb3dTdGVwLm5hbWU7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmRlc2NyaXB0aW9uIHx8ICcnO1xuICAgICAgICBjb25maWd1cmF0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmNvbmZpZ3VyYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfaWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQodGFyZ2V0Rmxvdy5faWQsIGRldGFpbC5mbG93S2V5LCBkZXRhaWwucG9zaXRpb24pO1xuICAgICAgICBfbmV3ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxvd1N0ZXAgPSB7IF9pZCwgX25ldywgbmFtZSwgcG9saWN5OiBwb2xpY3kuaWQsIGRlc2NyaXB0aW9uLCBlbmFibGVkOiB0cnVlLCBjb25maWd1cmF0aW9uIH07XG4gICAgICBjb25zdCBzb3VyY2VGbG93ID0gZGV0YWlsLnNvdXJjZUZsb3dJZCAhPSBudWxsID8gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5zb3VyY2VGbG93SWQpIDogdGFyZ2V0RmxvdztcblxuICAgICAgaWYgKGRldGFpbC5zb3VyY2VQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkZXRhaWwuc291cmNlRmxvd0tleSAmJiBkZXRhaWwuc291cmNlRmxvd0tleSAhPT0gZGV0YWlsLmZsb3dLZXkpIHtcbiAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5zb3VyY2VGbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAhPSBudWxsICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCA9PT0gX2lkKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXAgPSBkZXRhaWwuZmxvd0tleTtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdXBkYXRlIHNjaGVtYSBhZnRlciBjaGFuZ2UgcmVxdWVzdCB0byByZXNwb25zZSBvciBpbnZlcnNlXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmJ1aWxkU2NoZW1hKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKHRoaXMuX2N1cnJlbnRGbG93U3RlcCwgc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2dldEZsb3dFbGVtZW50KHRhcmdldEZsb3cuX2lkKS5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkZXRhaWwucG9zaXRpb24gPiBkZXRhaWwuc291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICAgIHNvdXJjZUZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwuc291cmNlUG9zaXRpb24sIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yY2UgUmVmcmVzaCBzb3VyY2UgZmxvdyBlbGVtZW50IHdoZW4gbW92ZSB0byBvdGhlciBmbG93XG4gICAgICAgIGlmICh0YXJnZXRGbG93Ll9pZCAhPT0gc291cmNlRmxvdy5faWQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGbG93RWxlbWVudCh0YXJnZXRGbG93Ll9pZCkucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGbG93Rm9ybSA9IHRoaXMuX2dldEZsb3dTdGVwRm9ybSgpO1xuICAgICAgICBpZiAoY3VycmVudEZsb3dGb3JtID09IG51bGwgfHwgY3VycmVudEZsb3dGb3JtLmRpcnR5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgbGV0IHN0ZXAgPSB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XVtkZXRhaWwucG9zaXRpb25dO1xuICAgICAgICAgIGlmIChzdGVwID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gY29uZmlybSBsb3NlIGNoYW5nZSBhZnRlciBkcm9wIHBvbGljeVxuICAgICAgICAgICAgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbiAtIDFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkZXRhaWwuY2FuY2VsRWRpdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VkaXRGbG93U3RlcCh7IHN0ZXAsIHBvbGljeSwgZmxvdzogdGFyZ2V0RmxvdywgZ3JvdXA6IGRldGFpbC5mbG93S2V5IH0pO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsb3dFbGVtZW50ID0gdGhpcy5fZ2V0Rmxvd0VsZW1lbnQodGFyZ2V0Rmxvdy5faWQpO1xuICAgICAgICAgICAgICAgIGZsb3dFbGVtZW50LnNlbGVjdGVkU3RlcElkID0gc3RlcC5faWQ7XG4gICAgICAgICAgICAgICAgZmxvd0VsZW1lbnQucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgc291cmNlRmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZ3ZGbG93KSA9PiBndkZsb3cucmVtb3ZlQ2FuZGlkYXRlKCkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RyYWdQb2xpY3kgPSBudWxsO1xuICAgICAgICB0aGlzLl9kcm9wUG9saWN5ID0gbnVsbDtcbiAgICAgIH0sIDApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRlbGV0ZVBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcbiAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAxKTtcbiAgICB0YXJnZXRGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICBpZiAoZGV0YWlsLnRhcmdldC5lZGl0aW5nKSB7XG4gICAgICB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZ2V0Rmxvd0VsZW1lbnQoZGV0YWlsLmZsb3dJZCkucmVxdWVzdFVwZGF0ZSgpO1xuICB9XG5cbiAgX29uRGVzaWduKCkge1xuICAgIHRoaXMuX2NoYW5nZVRhYignZGVzaWduJyk7XG4gICAgdGhpcy5fc3BsaXRNYWluVmlld3MoKTtcbiAgfVxuXG4gIGJ1aWxkU2NoZW1hKHsgc2NoZW1hIH0pIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHtcbiAgICAgIHRpdGxlOiAnRGVzY3JpcHRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiBvZiBmbG93IHN0ZXAnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfTtcbiAgICBjb25zdCBjb25kaXRpb24gPSB7XG4gICAgICB0aXRsZTogJ0NvbmRpdGlvbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NvbmRpdGlvbiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmbG93IHN0ZXAgKHN1cHBvcnQgRUwpJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgJ3gtc2NoZW1hLWZvcm0nOiB7XG4gICAgICAgICdleHByZXNzaW9uLWxhbmd1YWdlJzogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCBqc29uU2NoZW1hID0gdHlwZW9mIHNjaGVtYSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNjaGVtYSkgOiBzY2hlbWE7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0geyBkZXNjcmlwdGlvbiwgLi4uKHRoaXMuaGFzQ29uZGl0aW9uYWxTdGVwcyA/IHsgY29uZGl0aW9uIH0gOiB7fSksIC4uLmpzb25TY2hlbWEucHJvcGVydGllcyB9O1xuICAgICAgcmV0dXJuIHsgLi4uanNvblNjaGVtYSwgcHJvcGVydGllcyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7IGRlc2NyaXB0aW9uLCAuLi4odGhpcy5oYXNDb25kaXRpb25hbFN0ZXBzID8geyBjb25kaXRpb24gfSA6IHt9KSB9IH07XG4gIH1cblxuICBhc3luYyBfZWRpdEZsb3dTdGVwKHsgc3RlcCwgZmxvdywgcG9saWN5LCBncm91cCB9KSB7XG4gICAgaWYgKHN0ZXApIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRQb2xpY3lJZCA9IHBvbGljeS5pZDtcbiAgICAgIGNvbnN0IGN1cnJlbnRGbG93U3RlcCA9IHsgZmxvdywgc3RlcCwgcG9saWN5LCBncm91cCB9O1xuICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5idWlsZFNjaGVtYShwb2xpY3kpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKGN1cnJlbnRGbG93U3RlcCwgc2NoZW1hKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbZmxvdy5faWRdKTtcbiAgICAgICAgdGhpcy5fc3BsaXRNYWluVmlld3MoKTtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdndi1wb2xpY3ktc3R1ZGlvOmtlZXAtZG9jdW1lbnRhdGlvbi1jbG9zZScpID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICB0aGlzLl9tYXhpbWl6ZVRvcFZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25FZGl0Rmxvd1N0ZXAoeyBkZXRhaWw6IHsgc3RlcCwgZmxvdywgcG9saWN5LCBncm91cCB9IH0pIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdEZsb3dTdGVwKHsgc3RlcCwgZmxvdywgcG9saWN5LCBncm91cCB9KTtcbiAgfVxuXG4gIF9nZXRSZXNpemFibGVWaWV3cygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2d2LXJlc2l6YWJsZS12aWV3cycpO1xuICB9XG5cbiAgX21heGltaXplVG9wVmlldygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQubGVuZ3RoIDw9IDEpIHtcbiAgICAgIHRoaXMuX2dldFJlc2l6YWJsZVZpZXdzKCkubWF4aW1pemVUb3AoKTtcbiAgICB9XG4gIH1cblxuICBfbWF4aW1pemVCb3R0b21WaWV3KCkge1xuICAgIHRoaXMuX2dldFJlc2l6YWJsZVZpZXdzKCkubWF4aW1pemVCb3R0b20oKTtcbiAgfVxuXG4gIF9zcGxpdE1haW5WaWV3cygpIHtcbiAgICB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpLnNwbGl0KCk7XG4gIH1cblxuICBfb25DaGFuZ2VGbG93U3RlcFN0YXRlKHsgZGV0YWlsIH0pIHtcbiAgICBjb25zdCB0YXJnZXRGbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5mbG93SWQpO1xuICAgIGNvbnN0IHN0ZXAgPSB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XVtkZXRhaWwucG9zaXRpb25dO1xuICAgIHN0ZXAuZW5hYmxlZCA9IGRldGFpbC5lbmFibGVkO1xuICAgIHRhcmdldEZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgX29uQ2xvc2VGbG93U3RlcEZvcm0oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfY2xvc2VGbG93U3RlcEZvcm0oZm9yY2UgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuX3NldEN1cnJlbnRGbG93U3RlcChudWxsLCBudWxsLCBmb3JjZSk7XG4gIH1cblxuICBhc3luYyBfYXNrVG9WYWxpZGF0ZUZvcm1zKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSB0cnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpLnRoZW4oKGZvcm1zKSA9PiB7XG4gICAgICAgIGlmIChmb3Jtcy5maWx0ZXIoKHIpID0+IHIgIT0gbnVsbCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuX2RlZmluaXRpb24gPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NhdmUoKTtcbiAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgICAgICAgIC8vIFJlZnJlc2ggaWYgbG9zZSBjaGFuZ2VzIGxvc3QgY3VycmVudCBzdGVwIHNlbGVjdGlvblxuICAgICAgICAgIHJldHVybiB0aGlzLl9jaGVja0N1cnJlbnRGbG93U3RlcCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGUpID0+IGUucmVxdWVzdFVwZGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvcm1zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGZvcm1zO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc2sgYWxyZWFkeSB3YWl0aW5nJyk7XG4gIH1cblxuICBhc3luYyBfc2V0Q3VycmVudEZsb3dTdGVwKGN1cnJlbnRGbG93U3RlcCwgZmxvd1N0ZXBTY2hlbWEsIGZvcmNlID0gZmFsc2UpIHtcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWEgPSBkZWVwQ2xvbmUoZmxvd1N0ZXBTY2hlbWEpO1xuICAgIGlmIChjdXJyZW50Rmxvd1N0ZXAgIT0gbnVsbCkge1xuICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9XG4gICAgICAgIHR5cGVvZiBjdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gSlNPTi5wYXJzZShjdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uKVxuICAgICAgICAgIDogY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbjtcbiAgICAgIGNvbnN0IHN0ZXAgPSB7IC4uLmN1cnJlbnRGbG93U3RlcC5zdGVwLCBjb25maWd1cmF0aW9uIH07XG5cbiAgICAgIGNvbnN0IF9pbml0aWFsVmFsdWVzID0geyAuLi5zdGVwLmNvbmZpZ3VyYXRpb24sIGRlc2NyaXB0aW9uOiBzdGVwLmRlc2NyaXB0aW9uLCBjb25kaXRpb246IHN0ZXAuY29uZGl0aW9uIH07XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPSB7IC4uLmN1cnJlbnRGbG93U3RlcCwgc3RlcCwgX2luaXRpYWxWYWx1ZXMgfTtcblxuICAgICAgaWYgKGZsb3dTdGVwU2NoZW1hICYmIGZsb3dTdGVwU2NoZW1hLnByb3BlcnRpZXMuc2NvcGUpIHtcbiAgICAgICAgY29uc3QgX2VudW0gPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtO1xuICAgICAgICBpZiAoX2VudW0uZmluZCgoc2NvcGUpID0+IFsnUkVRVUVTVCcsICdSRVFVRVNUX0NPTlRFTlQnLCAnUkVTUE9OU0UnLCAnUkVTUE9OU0VfQ09OVEVOVCddLmluY2x1ZGVzKHNjb3BlKSkgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwID09PSAncHJlJyA/IFsnUkVRVUVTVCcsICdSRVFVRVNUX0NPTlRFTlQnXSA6IFsnUkVTUE9OU0UnLCAnUkVTUE9OU0VfQ09OVEVOVCddO1xuICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW0gPSBfZW51bS5maWx0ZXIoKHNjb3BlKSA9PiBmaWx0ZXJlZC5pbmNsdWRlcyhzY29wZSkpO1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbi5zY29wZTtcbiAgICAgICAgICBpZiAoc2NvcGUgPT0gbnVsbCB8fCAhc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bS5pbmNsdWRlcyhzY29wZSkpIHtcbiAgICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmRlZmF1bHQgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbi5zY29wZSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX2luaXRpYWxWYWx1ZXMuc2NvcGUgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzLnNjb3BlID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mbG93U3RlcFNjaGVtYSA9IHNjaGVtYTtcbiAgfVxuXG4gIF9yZWZyZXNoKGNsb3NlU3RlcEZvcm0gPSB0cnVlKSB7XG4gICAgaWYgKGNsb3NlU3RlcEZvcm0pIHtcbiAgICAgIHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb24pO1xuICB9XG5cbiAgYXN5bmMgX29uU2VsZWN0Rmxvd3MoeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgdGhpcy5fb25DbG9zZURvY3VtZW50YXRpb24oKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoZGV0YWlsLmZsb3dzKTtcbiAgICAgIHRoaXMuX29uRGVzaWduKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tTWVudSh7IGRldGFpbDogeyBwb2xpY3kgfSB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50YXRpb24gPT0gbnVsbCB8fCB0aGlzLmRvY3VtZW50YXRpb24uaWQgIT09IHBvbGljeS5pZCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50UG9saWN5SWQgPSBwb2xpY3kuaWQ7XG4gICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkRmxvdygpKSB7XG4gICAgICAgICAgdGhpcy5fc3BsaXRNYWluVmlld3MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9tYXhpbWl6ZUJvdHRvbVZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdmZXRjaC1kb2N1bWVudGF0aW9uJywgeyBwb2xpY3kgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIF9mZXRjaERvY3VtZW50YXRpb24ocG9saWN5KSB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRhdGlvbiA9PSBudWxsIHx8IHRoaXMuZG9jdW1lbnRhdGlvbi5pZCAhPT0gcG9saWN5LmlkKSB7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdmZXRjaC1kb2N1bWVudGF0aW9uJywgeyBwb2xpY3kgfSk7XG4gICAgfVxuICB9XG5cbiAgX29uT3BlbkRvY3VtZW50YXRpb24oKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAmJiB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAucG9saWN5KSB7XG4gICAgICB0aGlzLl9mZXRjaERvY3VtZW50YXRpb24odGhpcy5fY3VycmVudEZsb3dTdGVwLnBvbGljeSk7XG4gICAgfVxuICB9XG5cbiAgX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tRm9ybSgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZ3YtcG9saWN5LXN0dWRpbzprZWVwLWRvY3VtZW50YXRpb24tY2xvc2UnKTtcbiAgICB0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uKCk7XG4gIH1cblxuICBfZmluZEZsb3dDb2xsZWN0aW9uKGZsb3dJZCkge1xuICAgIGNvbnN0IHBsYW4gPSB0aGlzLmRlZmluZWRQbGFucy5maW5kKChwbGFuKSA9PiBwbGFuLmZsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpICE9IG51bGwpO1xuICAgIHJldHVybiB7IHBsYW4sIGZsb3dzOiBwbGFuICE9IG51bGwgPyBwbGFuLmZsb3dzIDogdGhpcy5kZWZpbmVkRmxvd3MgfTtcbiAgfVxuXG4gIF9maW5kRmxvd0J5SWQoZmxvd0lkKSB7XG4gICAgbGV0IGZsb3cgPSB0aGlzLmRlZmluZWRGbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKTtcbiAgICBpZiAoZmxvdyA9PSBudWxsKSB7XG4gICAgICBjb25zdCBwbGFuc0Zsb3dzID0gdGhpcy5kZWZpbmVkUGxhbnMubWFwKChwbGFuKSA9PiBwbGFuLmZsb3dzKS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MuY29uY2F0KHZhbCksIFtdKTtcbiAgICAgIGZsb3cgPSBwbGFuc0Zsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpO1xuICAgIH1cbiAgICByZXR1cm4gZmxvdztcbiAgfVxuXG4gIGdldFNlbGVjdGVkRmxvdyhpbmRleCA9IDApIHtcbiAgICBjb25zdCBzZWxlY3RlZEZsb3dJZCA9IHRoaXMuc2VsZWN0ZWRGbG93c0lkW2luZGV4XTtcbiAgICByZXR1cm4gdGhpcy5fZmluZEZsb3dCeUlkKHNlbGVjdGVkRmxvd0lkKTtcbiAgfVxuXG4gIF9vblRhcmdldFBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZHJhZ1BvbGljeSA9IGRldGFpbDtcbiAgICB9XG4gIH1cblxuICBfb25DaGFuZ2VGbG93U3RlcCh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMgPSBkZXRhaWwudmFsdWVzO1xuICB9XG5cbiAgX3dyaXRlRmxvd1N0ZXAodmFsdWVzKSB7XG4gICAgY29uc3QgeyBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCAuLi5jb25maWd1cmF0aW9uIH0gPSB2YWx1ZXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX25ldyB8fFxuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuZGVzY3JpcHRpb24gIT09IGRlc2NyaXB0aW9uIHx8XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25kaXRpb24gIT09IGNvbmRpdGlvbiB8fFxuICAgICAgIWRlZXBFcXVhbCh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uKVxuICAgICkge1xuICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZCh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZmxvdy5faWQpO1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF0uZmluZEluZGV4KChzdGVwKSA9PiBzdGVwLl9pZCA9PT0gdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX2lkKTtcblxuICAgICAgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmNvbmZpZ3VyYXRpb24gPSBkZWVwQ2xvbmUoY29uZmlndXJhdGlvbik7XG4gICAgICBkZWxldGUgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5fbmV3O1xuICAgICAgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5fZGlydHkgPSB0cnVlO1xuICAgICAgZmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5mbG93ID0gZmxvdztcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwID0gZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25TdWJtaXRGbG93U3RlcCh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fd3JpdGVGbG93U3RlcChkZXRhaWwudmFsdWVzKTtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RVcGRhdGUoJ19kZWZpbml0aW9uJyk7XG4gICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGMpID0+IGMucmVxdWVzdFVwZGF0ZSgpKTtcbiAgfVxuXG4gIF9vbkNhbmNlbEZsb3coKSB7XG4gICAgdGhpcy5fb25EZXNpZ24oKTtcbiAgfVxuXG4gIF9vblN1Ym1pdEZsb3coeyBkZXRhaWw6IHsgdmFsdWVzIH0gfSkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCk7XG4gICAgY29uc3QgX3ZhbHVlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKCksIHZhbHVlcyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93VXBkYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIHNlbGVjdGVkRmxvdywgX3ZhbHVlcyk7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VsZWN0ZWRGbG93LCBzZWxlY3RlZEZsb3dVcGRhdGVkKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RlZEZsb3csIHNlbGVjdGVkRmxvd1VwZGF0ZWQsIHsgX2RpcnR5OiB0cnVlIH0pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBfb25DYW5jZWxGbG93TW9kZSgpIHtcbiAgICB0aGlzLl9vbkRlc2lnbigpO1xuICB9XG5cbiAgX29uU3VibWl0Rmxvd01vZGUoeyBkZXRhaWw6IHsgdmFsdWVzIH0gfSkge1xuICAgIHRoaXMuX2RlZmluaXRpb25bJ2Zsb3ctbW9kZSddID0gdmFsdWVzWydmbG93LW1vZGUnXSB8fCAnREVGQVVMVCc7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9yZWZyZXNoKCk7XG4gIH1cblxuICBfb25DaGFuZ2VUYWIoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX2NoYW5nZVRhYihkZXRhaWwudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgX2NoYW5nZVRhYlZhbGlkYXRvcih7IGZyb20sIHRvIH0pIHtcbiAgICBpZiAoZnJvbSA9PT0gJ3Byb3BlcnRpZXMnKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcHJvcGVydGllcycpO1xuICAgICAgaWYgKGNvbXBvbmVudC5kaXJ0eSkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LmNvbmZpcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZyb20gPT09ICdyZXNvdXJjZXMnKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcmVzb3VyY2VzJyk7XG4gICAgICBpZiAoY29tcG9uZW50LmRpcnR5KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY29uZmlybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBfY2hhbmdlVGFiKHRhYklkKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy50YWJJZCA9IHRhYklkO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlLXRhYicsIHRoaXMudGFiSWQpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRyYWdTdGFydEZsb3dTdGVwKGZsb3csIHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9kcm9wUG9saWN5ID0gZGV0YWlsO1xuICAgICAgdGhpcy5fZHJhZ1BvbGljeSA9IGRldGFpbDtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRmxvd0VtcHR5U3RhdGUocmVhZG9ubHlNb2RlKSB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiZW1wdHlcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIFNlbGVjdCBhIGZsb3dcbiAgICAgICAgJHtyZWFkb25seU1vZGUgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgb3IgPGd2LWJ1dHRvbiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkFkZEZsb3d9XCIgb3V0bGluZWQgaWNvbj1cImNvZGU6cGx1c1wiIGxhcmdlPmRlc2lnbiBuZXcgb25lPC9ndi1idXR0b24+YFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckZsb3coaW5kZXggPSAwLCBoYXNFbXB0eVN0YXRlID0gdHJ1ZSwgcmVhZG9ubHlNb2RlKSB7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KGluZGV4KTtcbiAgICBpZiAoZmxvdykge1xuICAgICAgY29uc3QgeyBwbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvdy5faWQpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwSWQgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPyB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQgOiBudWxsO1xuICAgICAgcmV0dXJuIGh0bWxgIDxndi1mbG93XG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgLmlkPVwiJHtmbG93Ll9pZH1cIlxuICAgICAgICAuZmxvdz1cIiR7Zmxvd31cIlxuICAgICAgICAucGxhbj1cIiR7cGxhbn1cIlxuICAgICAgICAucG9saWNpZXM9XCIke3RoaXMucG9saWNpZXN9XCJcbiAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgLmRyYWdQb2xpY3k9XCIke3RoaXMuX2RyYWdQb2xpY3l9XCJcbiAgICAgICAgLmRyb3BQb2xpY3k9XCIke3RoaXMuX2Ryb3BQb2xpY3l9XCJcbiAgICAgICAgLnNlbGVjdGVkU3RlcElkPVwiJHtzZWxlY3RlZFN0ZXBJZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICA/aGFzLXBvbGljeS1maWx0ZXI9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbH1cIlxuICAgICAgICBmbG93cy10aXRsZT1cIiR7dGhpcy5mbG93c1RpdGxlfVwiXG4gICAgICAgIEBndi1mbG93OmRyYWctc3RhcnQ9XCIke3RoaXMuX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAuYmluZCh0aGlzLCBmbG93KX1cIlxuICAgICAgICBAZ3YtZmxvdzplZGl0PVwiJHt0aGlzLl9vbkVkaXRGbG93U3RlcH1cIlxuICAgICAgICBAZ3YtZmxvdzpjaGFuZ2Utc3RhdGU9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZX1cIlxuICAgICAgICBAZ3YtZmxvdzpkcm9wPVwiJHt0aGlzLl9vbkRyb3BQb2xpY3l9XCJcbiAgICAgICAgQGd2LWZsb3c6ZGVsZXRlPVwiJHt0aGlzLl9vbkRlbGV0ZVBvbGljeX1cIlxuICAgICAgPjwvZ3YtZmxvdz5gO1xuICAgIH0gZWxzZSBpZiAoaGFzRW1wdHlTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckZsb3dFbXB0eVN0YXRlKHJlYWRvbmx5TW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBodG1sYGA7XG4gIH1cblxuICBfb25GZXRjaFJlc291cmNlcyhldmVudCkge1xuICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCwgcmVnZXhUeXBlcyB9ID0gZXZlbnQuZGV0YWlsO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRlZmluZWRSZXNvdXJjZXNcbiAgICAgIC5maWx0ZXIoKHJlc291cmNlKSA9PiByZWdleFR5cGVzID09IG51bGwgfHwgbmV3IFJlZ0V4cChyZWdleFR5cGVzKS50ZXN0KHJlc291cmNlLnR5cGUpKVxuICAgICAgLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHRoaXMucmVzb3VyY2VUeXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmlkID09PSByZXNvdXJjZS50eXBlKTtcbiAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3Ytcm93Jyk7XG4gICAgICAgIGNvbnN0IHBpY3R1cmUgPSByZXNvdXJjZVR5cGUuaWNvbiA/IHJlc291cmNlVHlwZS5pY29uIDogbnVsbDtcbiAgICAgICAgcm93Lml0ZW0gPSB7IHBpY3R1cmUsIG5hbWU6IHJlc291cmNlLm5hbWUgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50OiByb3csXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLm5hbWUsXG4gICAgICAgICAgaWQ6IHJlc291cmNlLnR5cGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICBjdXJyZW50VGFyZ2V0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgX3JlbmRlclBvbGljeShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5fZmxvd1N0ZXBTY2hlbWEgJiYgdGhpcy5kb2N1bWVudGF0aW9uKSB7XG4gICAgICByZXR1cm4gaHRtbGA8Z3YtcmVzaXphYmxlLXZpZXdzIGRpcmVjdGlvbj1cImhvcml6b250YWxcIiBuby1vdmVyZmxvdz5cbiAgICAgICAgPGRpdiBzbG90PVwidG9wXCI+JHt0aGlzLl9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKX08L2Rpdj5cbiAgICAgICAgPGRpdiBzbG90PVwiYm90dG9tXCI+XG4gICAgICAgICAgPGd2LWRvY3VtZW50YXRpb25cbiAgICAgICAgICAgIC50ZXh0PVwiJHt0aGlzLmRvY3VtZW50YXRpb24uY29udGVudH1cIlxuICAgICAgICAgICAgLmltYWdlPVwiJHt0aGlzLmRvY3VtZW50YXRpb24uaW1hZ2V9XCJcbiAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgQGd2LWRvY3VtZW50YXRpb246Y2xvc2U9XCIke3RoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9ufVwiXG4gICAgICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2d2LXJlc2l6YWJsZS12aWV3cz5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudGF0aW9uKSB7XG4gICAgICByZXR1cm4gaHRtbGA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAudGV4dD1cIiR7dGhpcy5kb2N1bWVudGF0aW9uLmNvbnRlbnR9XCJcbiAgICAgICAgLmltYWdlPVwiJHt0aGlzLmRvY3VtZW50YXRpb24uaW1hZ2V9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgIEBndi1kb2N1bWVudGF0aW9uOmNsb3NlPVwiJHt0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbn1cIlxuICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxvd1N0ZXBTY2hlbWEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9nZXRGbG93U3RlcEZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAjJHtGTE9XX1NURVBfRk9STV9JRH1gKTtcbiAgfVxuXG4gIF9vblJlc2V0Rmxvd1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzO1xuICAgICAgdGhpcy5fZ2V0Rmxvd1N0ZXBGb3JtKCkucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBfZ2VuZXJhdGVGbG93c0lkKGxpc3QsIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVJZCgnZicsIGxpc3QsIGZvcmNlLCB0cnVlKTtcbiAgfVxuXG4gIF9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVJZChwbGFuLmlkLCBwbGFuLmZsb3dzLCBmb3JjZSwgdHJ1ZSk7XG4gIH1cblxuICBfZ2VuZXJhdGVGbG93U3RlcElkKGZsb3dJZCwgZmxvd0tleSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gYCR7Zmxvd0lkfV8ke2Zsb3dLZXl9XyR7cG9zaXRpb259YDtcbiAgfVxuXG4gIF9nZW5lcmF0ZUlkKHByZWZpeCwgbGlzdCwgZm9yY2UgPSBmYWxzZSwgaXNGbG93ID0gZmFsc2UpIHtcbiAgICBpZiAobGlzdCkge1xuICAgICAgcmV0dXJuIGxpc3QubWFwKChlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBfaWQgPSBgJHtwcmVmaXh9XyR7aW5kZXh9YDtcbiAgICAgICAgaWYgKGlzRmxvdykge1xuICAgICAgICAgIGlmIChlLnByZSkge1xuICAgICAgICAgICAgZS5wcmUuZm9yRWFjaCgoc3RlcCwgc3RlcEluZGV4KSA9PiAoc3RlcC5faWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQoX2lkLCAncHJlJywgc3RlcEluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZS5wb3N0KSB7XG4gICAgICAgICAgICBlLnBvc3QuZm9yRWFjaCgoc3RlcCwgc3RlcEluZGV4KSA9PiAoc3RlcC5faWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQoX2lkLCAncG9zdCcsIHN0ZXBJbmRleCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlIHx8IGUuX2lkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5lLCBfaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldENoaWxkcmVuKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykpLFxuICAgICAgLi4uQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtcmVzaXphYmxlLXZpZXdzJykpLFxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZ2V0Q2hpbGRyZW4oKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIC8vIEp1c3QgcmVmcmVzaCBndi1mbG93IGNvbXBvbmVudHNcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdfZHJhZ1BvbGljeScpKSB7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGZsb3cpID0+IChmbG93LmRyYWdQb2xpY3kgPSB0aGlzLl9kcmFnUG9saWN5KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ19kcm9wUG9saWN5JykpIHtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuZHJvcFBvbGljeSA9IHRoaXMuX2Ryb3BQb2xpY3kpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gIH1cblxuICB1cGRhdGVkKHByb3BzKSB7XG4gICAgaWYgKHByb3BzLmhhcygnZG9jdW1lbnRhdGlvbicpICYmIHRoaXMuZG9jdW1lbnRhdGlvbiAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuc2VsZWN0ZWRGbG93c0lkWzBdXSk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyB8fCB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX2luaXRpYWxWYWx1ZXM7XG5cbiAgICBjb25zdCBncm91cHMgPSBbeyBpdGVtczogWydkZXNjcmlwdGlvbicsICdjb25kaXRpb24nXSB9LCB7IG5hbWU6IGkxOG4oJ2d2LXBvbGljeS1zdHVkaW8ucG9saWN5LXNldHRpbmdzJyksIGRlZmF1bHQ6IHRydWUgfV07XG4gICAgcmV0dXJuIGh0bWxgJHtjYWNoZShcbiAgICAgIHRoaXMuX2Zsb3dTdGVwU2NoZW1hICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcFxuICAgICAgICA/IGh0bWxgPGRpdiBjbGFzcz1cImZsb3ctc3RlcF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvdy1zdGVwX19mb3JtXCI+XG4gICAgICAgICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgICAgICAgIC5pZD1cIiR7RkxPV19TVEVQX0ZPUk1fSUR9XCJcbiAgICAgICAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLl9mbG93U3RlcFNjaGVtYX1cIlxuICAgICAgICAgICAgICAgIC5pY29uPVwiZGVzaWduOmVkaXRcIlxuICAgICAgICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZS1vbi1yZW5kZXJcbiAgICAgICAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICAgICAgICAuZGlydHk9XCIke3RoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzICE9IG51bGx9XCJcbiAgICAgICAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAuZ3JvdXBzPVwiJHtncm91cHN9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2hhbmdlPVwiJHt0aGlzLl9vbkNoYW5nZUZsb3dTdGVwfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnJlc2V0PVwiJHt0aGlzLl9vblJlc2V0Rmxvd1N0ZXB9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06ZmV0Y2gtcmVzb3VyY2VzPVwiJHt0aGlzLl9vbkZldGNoUmVzb3VyY2VzfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93U3RlcH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBzbG90PVwidGl0bGVcIiBjbGFzcz1cImZsb3ctc3RlcF9fZm9ybS10aXRsZVwiPiR7dGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBzbG90PVwiaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cImdlbmVyYWw6Y2xvc2VcIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkNsb3NlRmxvd1N0ZXBGb3JtfVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2xvdD1cImhlYWRlci1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJob21lOmJvb2tcIlxuICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRvY3VtZW50YXRpb24gIT0gbnVsbH1cIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm19XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBkb2N1bWVudGF0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIDogJycsXG4gICAgKX1gO1xuICB9XG5cbiAgX29uQ2xvc2VEb2N1bWVudGF0aW9uKCkge1xuICAgIHRoaXMuZG9jdW1lbnRhdGlvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9tYXhpbWl6ZVRvcFZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgX29uRGVsZXRlRmxvdyh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgZmxvd0lkID0gZGV0YWlsLmNvbnRlbnQuX2lkO1xuICAgIGNvbnN0IHsgZmxvd3MgfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93SWQpO1xuICAgIGNvbnN0IGZsb3cgPSBmbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKTtcbiAgICB0aGlzLl9kZWxldGVGbG93KGZsb3dzLCBmbG93KTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkRmxvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA/IHRoaXMuX2RlZmluaXRpb24uZmxvd3MgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUGxhbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5wbGFucyA/IHRoaXMuX2RlZmluaXRpb24ucGxhbnMgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUmVzb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzID8gdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUHJvcGVydGllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgPyB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgOiBbXTtcbiAgfVxuXG4gIGFzeW5jIF9vbkR1cGxpY2F0ZUZsb3coeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgY29uc3QgZmxvd0lkID0gZGV0YWlsLmNvbnRlbnQuX2lkO1xuICAgICAgY29uc3QgeyBwbGFuLCBmbG93cyB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGZsb3dJZCk7XG4gICAgICB0aGlzLl9hZGRGbG93KGZsb3dzLCB0aGlzLl9maW5kRmxvd0J5SWQoZmxvd0lkKSk7XG4gICAgICBpZiAocGxhbiAhPSBudWxsKSB7XG4gICAgICAgIGxldCBwbGFuSW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLmRlZmluZWRQbGFucy5maW5kKChwLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKHAuaWQgPT09IHBsYW4uaWQpIHtcbiAgICAgICAgICAgIHBsYW5JbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGxhbi5mbG93cyA9IGZsb3dzO1xuICAgICAgICB0aGlzLmRlZmluZWRQbGFuc1twbGFuSW5kZXhdLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5kZWZpbmVkUGxhbnNbcGxhbkluZGV4XS5mbG93c1tmbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuX2RlZmluaXRpb24uZmxvd3NbdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGF0ZSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuY29udGVudC5faWQpO1xuICAgIGZsb3cuZW5hYmxlZCA9IGRldGFpbC5lbmFibGVkO1xuICAgIGZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgX29uQWRkRmxvd1BsYW4oeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIHRoaXMuX2FkZEZsb3codGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MpO1xuICAgICAgdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHRoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzW3RoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uQWRkRmxvdygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG5cbiAgICAgIHRoaXMuX2FkZEZsb3codGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKHRoaXMuX2RlZmluaXRpb24uZmxvd3MpO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5fZGVmaW5pdGlvbi5mbG93c1t0aGlzLl9kZWZpbml0aW9uLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2FkZEZsb3coY29sbGVjdGlvbiwgZHVwbGljYXRlID0gbnVsbCkge1xuICAgIGNvbnN0IGZsb3cgPVxuICAgICAgZHVwbGljYXRlID09IG51bGxcbiAgICAgICAgPyB0aGlzLl9jcmVhdGVGbG93RnJvbVNjaGVtYSgpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4uZHVwbGljYXRlLFxuICAgICAgICAgICAgX2lkOiBudWxsLFxuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGlkIHRvIGF2b2lkIGlzc3VlIHdpdGggQU0gdGhhdCBwZXJzaXN0cyB0aGUgSURcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgX2RpcnR5OiB0cnVlLFxuICAgICAgICAgIH07XG5cbiAgICBjb2xsZWN0aW9uLnB1c2goZmxvdyk7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxuXG4gIF9jcmVhdGVGbG93RnJvbVNjaGVtYSgpIHtcbiAgICBjb25zdCBuZXdGbG93ID0ge1xuICAgICAgbmFtZTogJycsXG4gICAgICBwcmU6IFtdLFxuICAgICAgcG9zdDogW10sXG4gICAgICBfZGlydHk6IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW50aWF0ZSh0aGlzLmZsb3dTY2hlbWEucHJvcGVydGllcywgbmV3Rmxvdyk7XG4gIH1cblxuICBfaW5zdGFudGlhdGUocHJvcGVydGllc0RlZmluaXRpb24sIGluaXRpYXRvciA9IHt9KSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB7IC4uLmluaXRpYXRvciB9O1xuXG4gICAgaWYgKHByb3BlcnRpZXNEZWZpbml0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzRGVmaW5pdGlvbikpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBwcm9wZXJ0aWVzRGVmaW5pdGlvbltrZXldO1xuXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSB0aGlzLl9pbnN0YW50aWF0ZShlbnRyeS5wcm9wZXJ0aWVzLCAoaW5pdGlhdG9yID0ge30pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGVudHJ5LmRlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICBfZGVsZXRlRmxvdyhjb2xsZWN0aW9uLCBmbG93KSB7XG4gICAgY29uc3QgaW5kZXggPSBjb2xsZWN0aW9uLmluZGV4T2YoZmxvdyk7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvd3MgPSB0aGlzLnNlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGZsb3dJZCkgPT4gZmxvd0lkICE9PSBmbG93Ll9pZCk7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3MubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKHNlbGVjdGVkRmxvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2NoYW5nZVRhYignZGVzaWduJyk7XG4gICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfZmluZEZsb3dJbmRleChsaXN0LCBpZCkge1xuICAgIGxldCBpbmRleCA9IG51bGw7XG4gICAgbGlzdC5maW5kKChmLCBpKSA9PiB7XG4gICAgICBpZiAoZi5faWQgPT09IGlkKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgYXN5bmMgX29uUmVvcmRlckZsb3dzKHsgZGV0YWlsOiB7IHBsYW4gfSB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIGlmIChwbGFuICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmV3T3JkZXIgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQubWFwKChmbG93SWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maW5kRmxvd0luZGV4KHBsYW4uZmxvd3MsIGZsb3dJZCk7XG4gICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gbmV3T3JkZXJbaW5kZXhdLl9pZCA6IGZsb3dJZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGxhbi5mbG93cyA9IG5ld09yZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3T3JkZXIgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cywgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbmRGbG93SW5kZXgodGhpcy5fZGVmaW5pdGlvbi5mbG93cywgZmxvd0lkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBuZXdPcmRlcltpbmRleF0uX2lkIDogZmxvd0lkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gbmV3T3JkZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgX29uU2VhcmNoUG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9zZWFyY2hQb2xpY3lRdWVyeSA9IGRldGFpbDtcbiAgfVxuXG4gIF9vbkNsZWFyUG9saWN5KCkge1xuICAgIHRoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5ID0gbnVsbDtcbiAgfVxuXG4gIF9vblNlYXJjaEZsb3dzKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9zZWFyY2hGbG93UXVlcnkgPSBkZXRhaWw7XG4gIH1cblxuICBfb25DbGVhckZsb3dzKCkge1xuICAgIHRoaXMuX3NlYXJjaEZsb3dRdWVyeSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBfb25SZXNldEFsbCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9pbml0aWFsRGVmaW5pdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2ZpbHRlck5vdFZhbGlkU3RlcChzdGVwKSB7XG4gICAgcmV0dXJuIHN0ZXAuX25ldyAhPT0gdHJ1ZTtcbiAgfVxuXG4gIF9yZW1vdmVQcml2YXRlUHJvcGVydGllcyhvKSB7XG4gICAgY29uc3QgY29weSA9IHsgLi4ubyB9O1xuICAgIE9iamVjdC5rZXlzKG8pXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdfJykpXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjb3B5W2tleV07XG4gICAgICB9KTtcbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIF9zdWJtaXRPckNvbmZpcm1Gb3JtcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1zY2hlbWEtZm9ybScpXVxuICAgICAgLmZpbHRlcigoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gZm9ybS5pc1ZhbGlkKCk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzVmFsaWQ7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZm9ybSkgPT4gZm9ybS5jb25maXJtKCkpO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllc0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1wcm9wZXJ0aWVzJyk7XG4gIH1cblxuICBhc3luYyBfY2hlY2tDdXJyZW50Rmxvd1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgY29uc3QgY2xvc2VQcm9taXNlcyA9IHRoaXMuc2VsZWN0ZWRGbG93c0lkXG4gICAgICAgIC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZmxvd0lkKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U3RlcCA9IFsuLi5mbG93LnByZSwgLi4uZmxvdy5wb3N0XS5maW5kKChzdGVwKSA9PiBzdGVwLl9pZCA9PT0gdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX2lkKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0ZXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gbnVsbCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHNhdmVkKCkge1xuICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgIHRoaXMuX2luaXRpYWxEZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uU2F2ZWQgPSBudWxsO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGVja0N1cnJlbnRGbG93U3RlcCgpO1xuICAgICAgdGhpcy5kZWZpbmVkUGxhbnMuZm9yRWFjaCgocGxhbikgPT4ge1xuICAgICAgICBwbGFuLmZsb3dzLmZvckVhY2goKGZsb3cpID0+IChmbG93Ll9kaXJ0eSA9IGZhbHNlKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGVmaW5lZEZsb3dzLmZvckVhY2goKGZsb3cpID0+IChmbG93Ll9kaXJ0eSA9IGZhbHNlKSk7XG4gICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgIH1cbiAgfVxuXG4gIF9idWlsZERlZmluaXRpb25Ub1NhdmUoKSB7XG4gICAgLy8gQ29weSBkZWZpbml0aW9uIGFuZCByZW1vdmUgaW52YWxpZCBzdGVwXG4gICAgLy8gS2VlcCBwcml2YXRlIHByb3BlcnRpZXMgbGlrZSBfaWQgYW5kIG90aGVycyBzdHVmZiB1c2VmdWwgZm9yIHJlbmRlclxuICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5tYXAoKGZsb3cpID0+IHtcbiAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICByZXR1cm4gZmxvdztcbiAgICB9KTtcblxuICAgIGxldCBkZWZpbml0aW9uID0geyAuLi50aGlzLl9kZWZpbml0aW9uLCBmbG93cyB9O1xuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucGxhbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnMgPSB0aGlzLl9kZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICBjb25zdCBmbG93cyA9IHBsYW4uZmxvd3MubWFwKChmbG93KSA9PiB7XG4gICAgICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICAgICAgcmV0dXJuIGZsb3c7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93cyB9O1xuICAgICAgfSk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwbGFucyB9O1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIF9idWlsZERlZmluaXRpb25Ub1NlbmQoZGVmaW5pdGlvblRvU2F2ZSkge1xuICAgIC8vIENvcHkgZGVmaW5pdGlvbiBhbmQgcmVtb3ZlIGFsbCBwcml2YXRlIHByb3BlcnRpZXNcbiAgICBjb25zdCBmbG93cyA9IGRlZmluaXRpb25Ub1NhdmUuZmxvd3MubWFwKChmKSA9PiB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMoZik7XG4gICAgICBmbG93LnByZSA9IGZsb3cucHJlLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIHJldHVybiBmbG93O1xuICAgIH0pO1xuXG4gICAgbGV0IGRlZmluaXRpb24gPSB7IC4uLnRoaXMuX2RlZmluaXRpb24sIGZsb3dzIH07XG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucGxhbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnMgPSBkZWZpbml0aW9uVG9TYXZlLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICBjb25zdCBmbG93cyA9IHBsYW4uZmxvd3MubWFwKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKGYpO1xuICAgICAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gZmxvdztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IC4uLnBsYW4sIGZsb3dzIH07XG4gICAgICB9KTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHBsYW5zIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwcm9wZXJ0aWVzIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCByZXNvdXJjZXMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIF9vblNhdmVBbGwoKSB7XG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcykge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzRWxlbWVudCgpLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25TYXZlZCA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TZW5kKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NhdmUnLCB7IGRlZmluaXRpb24sIHNlcnZpY2VzOiB0aGlzLnNlcnZpY2VzIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtwb2xpY3ktc3R1ZGlvXSBFcnJvciBvbiBzYXZlYCwgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX29uRGVidWcocmVxdWVzdEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcykge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzRWxlbWVudCgpLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NlbmQodGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCkpO1xuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkZWJ1ZycsIHsgZGVmaW5pdGlvbiwgc2VydmljZXM6IHRoaXMuc2VydmljZXMsIHJlcXVlc3Q6IHJlcXVlc3RFdmVudC5kZXRhaWwucmVxdWVzdCB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbcG9saWN5LXN0dWRpb10gRXJyb3Igb24gZGVidWdgLCBlcnIpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRGbG93cygpIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5sZW5ndGggPT09IDAgfHwgdGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcygnYXBpJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluZWRGbG93cztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRQbGFucygpIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5sZW5ndGggPT09IDAgfHwgdGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcygncGxhbicpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbmVkUGxhbnM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX29uRmlsdGVyRmxvd3MoeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKGRldGFpbC5pZCkpIHtcbiAgICAgIHRoaXMuX2Zsb3dGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtkZXRhaWwuaWRdO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRGaWx0ZXJlZFBvbGljaWVzKCkge1xuICAgIGlmICh0aGlzLl9wb2xpY3lGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9saWNpZXMuZmlsdGVyKChwb2xpY3kpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAocG9saWN5Lm9uUmVxdWVzdCAmJiB0aGlzLl9wb2xpY3lGaWx0ZXIuaW5jbHVkZXMoJ29uUmVxdWVzdCcpKSB8fCAocG9saWN5Lm9uUmVzcG9uc2UgJiYgdGhpcy5fcG9saWN5RmlsdGVyLmluY2x1ZGVzKCdvblJlc3BvbnNlJykpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucG9saWNpZXM7XG4gIH1cblxuICBfb25GaWx0ZXJQb2xpY2llcyh7IGRldGFpbCB9KSB7XG4gICAgaWYgKHRoaXMuX3BvbGljeUZpbHRlci5pbmNsdWRlcyhkZXRhaWwuaWQpKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcG9saWN5RmlsdGVyID0gW2RldGFpbC5pZF07XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckRlc2lnbihyZWFkb25seU1vZGUpIHtcbiAgICByZXR1cm4gaHRtbGAgPGRpdiBpZD1cImRlc2lnblwiIHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJkZXNpZ25cIj5cbiAgICAgIDxndi1yZXNpemFibGUtdmlld3Mgbm8tb3ZlcmZsb3c+XG4gICAgICAgIDxkaXYgc2xvdD1cInRvcFwiPiR7dGhpcy5fcmVuZGVyRmxvdygwLCB0cnVlLCByZWFkb25seU1vZGUpfTwvZGl2PlxuXG4gICAgICAgIDxkaXYgc2xvdD1cImJvdHRvbVwiPlxuICAgICAgICAgICR7dGhpcy5fcmVuZGVyRmxvdygxLCBmYWxzZSwgcmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJQb2xpY3kocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJGbG93Rm9ybShyZWFkb25seU1vZGUpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPlxuICAgICAgJHtyZWFkb25seU1vZGUgIT09IHRydWVcbiAgICAgICAgPyBodG1sYDxndi1wb2xpY3ktc3R1ZGlvLW1lbnVcbiAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtbWVudVwiXG4gICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgIC5wb2xpY2llcz1cIiR7dGhpcy5fZ2V0RmlsdGVyZWRQb2xpY2llcygpfVwiXG4gICAgICAgICAgICAuc2VsZWN0ZWRJZHM9XCIke1t0aGlzLl9jdXJyZW50UG9saWN5SWRdfVwiXG4gICAgICAgICAgICAucXVlcnk9XCIke3RoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5fVwiXG4gICAgICAgICAgICA/aGFzLXBvbGljeS1maWx0ZXI9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbH1cIlxuICAgICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6dGFyZ2V0LXBvbGljeT1cIiR7dGhpcy5fb25UYXJnZXRQb2xpY3l9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZmV0Y2gtZG9jdW1lbnRhdGlvbj1cIiR7dGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51fVwiXG4gICAgICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmRyYWdlbmQtcG9saWN5PVwiJHt0aGlzLl9vbkRyYWdFbmRQb2xpY3l9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cInNlYXJjaC1wb2xpY2llc1wiPlxuICAgICAgICAgICAgICAke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gaHRtbGA8Z3Ytb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgICAgICAub3B0aW9ucz1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9uc31cIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICAudmFsdWU9XCIke3RoaXMuX3BvbGljeUZpbHRlcn1cIlxuICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICBAZ3Ytb3B0aW9uOnNlbGVjdD1cIiR7dGhpcy5fb25GaWx0ZXJQb2xpY2llc31cIlxuICAgICAgICAgICAgICAgICAgPjwvZ3Ytb3B0aW9uPmBcbiAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgICA8Z3YtaW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1wb2xpY3lcIlxuICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHBvbGljaWVzIChTaGlmdCArIEN0cmwgKyBTcGFjZSlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgQGd2LWlucHV0OmlucHV0PVwiJHt0aGlzLl9vblNlYXJjaFBvbGljeX1cIlxuICAgICAgICAgICAgICAgIEBndi1pbnB1dDpjbGVhcj1cIiR7dGhpcy5fb25DbGVhclBvbGljeX1cIlxuICAgICAgICAgICAgICA+PC9ndi1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZ3YtcG9saWN5LXN0dWRpby1tZW51PmBcbiAgICAgICAgOiAnJ31cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckRlYnVnKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlc3BvbnNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IHRoaXMuZGVidWdSZXNwb25zZSA/IHRoaXMuZGVidWdSZXNwb25zZS5pc0xvYWRpbmcgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuZGVidWdSZXNwb25zZSAmJiB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdCA/IHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0LnBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlICYmIHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0ID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QubWV0aG9kIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYDxndi1odHRwLWNsaWVudFxuICAgICAgaWQ9XCJkZWJ1Z1wiXG4gICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICBjbGFzcz1cImRlYnVnXCJcbiAgICAgIEBndi1odHRwLWNsaWVudDpzZW5kPVwiJHt0aGlzLl9vbkRlYnVnfVwiXG4gICAgICAucmVzcG9uc2U9XCIke3Jlc3BvbnNlfVwiXG4gICAgICAucGF0aD1cIiR7cGF0aH1cIlxuICAgICAgLm1ldGhvZD1cIiR7bWV0aG9kfVwiXG4gICAgICA/bG9hZGluZz1cIiR7aXNMb2FkaW5nfVwiXG4gICAgPlxuICAgIDwvZ3YtaHR0cC1jbGllbnQ+YDtcbiAgfVxuXG4gIF9yZW5kZXJDb25maWd1cmF0aW9uRm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uU2NoZW1hKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gaHRtbGAgPGRpdiBpZD1cInNldHRpbmdzXCIgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImFwaS1zZXR0aW5nc1wiIEBkcmFnb3Zlcj1cIiR7dGhpcy5fb25EZXNpZ259XCI+XG4gICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuY29uZmlndXJhdGlvblNjaGVtYX1cIlxuICAgICAgICAgIGlkPVwiYXBpLXNldHRpbmdzLWZvcm1cIlxuICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICBoYXMtZm9vdGVyXG4gICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOmNhbmNlbD1cIiR7dGhpcy5fb25DYW5jZWxGbG93TW9kZX1cIlxuICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd01vZGV9XCJcbiAgICAgICAgPlxuICAgICAgICAgICR7IXRoaXMuY29uZmlndXJhdGlvbkluZm9ybWF0aW9uXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvblwiIHNsb3Q9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGd2LWljb24gY2xhc3M9XCJhcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2ljb25cIiB0aXRsZT1cIkluZm9cIiBzaGFwZT1cImNvZGU6aW5mb1wiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxibG9ja3F1b3RlIGNsYXNzPVwiYXBpLXNldHRpbmdzLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlXCI+JHt0aGlzLmNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbn08L2Jsb2NrcXVvdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX3JlbmRlckZsb3dGb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLmZsb3dTY2hlbWEgJiYgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgPT0gbnVsbCAmJiB0aGlzLmRvY3VtZW50YXRpb24gPT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygpO1xuICAgICAgaWYgKGZsb3cpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGVlcENsb25lKGZsb3cpO1xuICAgICAgICByZXR1cm4gaHRtbGA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbG93LXNldHRpbmdzXCI+XG4gICAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLmZsb3dTY2hlbWF9XCJcbiAgICAgICAgICAgIGlkPVwic2V0dGluZ3MtZm9ybVwiXG4gICAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2FuY2VsPVwiJHt0aGlzLl9vbkNhbmNlbEZsb3d9XCJcbiAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd31cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cInRpdGxlXCIgY2xhc3M9XCJmbG93LXN0ZXBfX2Zvcm0tdGl0bGVcIj5GbG93IGNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICA8L2d2LXNjaGVtYS1mb3JtPlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc291cmNlc0NoYW5nZSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uLnJlc291cmNlcyA9IGRldGFpbC5yZXNvdXJjZXM7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblByb3BlcnRpZXNDaGFuZ2UoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuZGVmaW5pdGlvbi5wcm9wZXJ0aWVzID0gZGV0YWlsLnByb3BlcnRpZXM7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblNhdmVQcm92aWRlcih7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5zZXJ2aWNlc1snZHluYW1pYy1wcm9wZXJ0eSddID0gZGV0YWlsLnByb3ZpZGVyO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfb25Td2l0Y2hFbmNyeXB0ZWRQcm9wZXJ0eSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCByZWFkb25seU1vZGUgPSB0aGlzLl9nZXRSZWFkb25seU1vZGVGb3JEZXNpZ24oKTtcblxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJib3hcIj5cbiAgICAgIDxndi1wb2xpY3ktc3R1ZGlvLW1lbnVcbiAgICAgICAgY2xhc3M9XCJsZWZ0LW1lbnVcIlxuICAgICAgICAuYXBpLW5hbWU9XCIke3RoaXMuX2RlZmluaXRpb24ubmFtZX1cIlxuICAgICAgICAuZmxvd3M9XCIke3RoaXMuZmlsdGVyZWRGbG93c31cIlxuICAgICAgICAucGxhbnM9XCIke3RoaXMuZmlsdGVyZWRQbGFuc31cIlxuICAgICAgICAuc2VsZWN0ZWRJZHM9XCIke3RoaXMuc2VsZWN0ZWRGbG93c0lkfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICA/c29ydGFibGU9XCIke3RoaXMuc29ydGFibGUgJiYgdGhpcy5yZWFkb25seSAhPT0gdHJ1ZX1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgP3JlYWRvbmx5UGxhbnM9XCIke3RoaXMucmVhZG9ubHlQbGFuc31cIlxuICAgICAgICBmbG93cy10aXRsZT1cIiR7dGhpcy5mbG93c1RpdGxlfVwiXG4gICAgICAgIC5xdWVyeT1cIiR7dGhpcy5fc2VhcmNoRmxvd1F1ZXJ5fVwiXG4gICAgICAgID9jYW4tYWRkPVwiJHt0aGlzLmNhbkFkZCAmJiAhdGhpcy5yZWFkb25seX1cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnJlb3JkZXItZmxvd3M9XCIke3RoaXMuX29uUmVvcmRlckZsb3dzfVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6Y2hhbmdlLWZsb3ctc3RhdGU9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0YXRlfVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6YWRkLWZsb3c9XCIke3RoaXMuX29uQWRkRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmFkZC1mbG93LXBsYW49XCIke3RoaXMuX29uQWRkRmxvd1BsYW59XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpkZWxldGUtZmxvdz1cIiR7dGhpcy5fb25EZWxldGVGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZHVwbGljYXRlLWZsb3c9XCIke3RoaXMuX29uRHVwbGljYXRlRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnNlbGVjdC1mbG93cz1cIiR7dGhpcy5fb25TZWxlY3RGbG93c31cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aGlzLl9kZWZpbml0aW9uLm5hbWV9PC9kaXY+XG4gICAgICAgICAgJHt0aGlzLl9mbG93RmlsdGVyT3B0aW9ucyAhPSBudWxsXG4gICAgICAgICAgICA/IGh0bWxgPGd2LW9wdGlvblxuICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIC5vcHRpb25zPVwiJHt0aGlzLl9mbG93RmlsdGVyT3B0aW9uc31cIlxuICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAudmFsdWU9XCIke3RoaXMuX2Zsb3dGaWx0ZXJ9XCJcbiAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgIEBndi1vcHRpb246c2VsZWN0PVwiJHt0aGlzLl9vbkZpbHRlckZsb3dzfVwiXG4gICAgICAgICAgICAgID48L2d2LW9wdGlvbj5gXG4gICAgICAgICAgICA6ICcnfVxuICAgICAgICAgIDxndi1pbnB1dFxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICBpZD1cInNlYXJjaC1mbG93XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGZsb3dzIChDdHJsICsgU3BhY2UpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgIEBndi1pbnB1dDppbnB1dD1cIiR7dGhpcy5fb25TZWFyY2hGbG93c31cIlxuICAgICAgICAgICAgQGd2LWlucHV0OmNsZWFyPVwiJHt0aGlzLl9vbkNsZWFyRmxvd3N9XCJcbiAgICAgICAgICA+PC9ndi1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgJHt0aGlzLnJlYWRvbmx5ICE9PSB0cnVlXG4gICAgICAgICAgPyBodG1sYCA8ZGl2IHNsb3Q9XCJmb290ZXJcIiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1sYXJnZVwiXG4gICAgICAgICAgICAgICAgLmRpc2FibGVkPVwiJHshdGhpcy5pc0RpcnR5IHx8IHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblNhdmVBbGx9XCJcbiAgICAgICAgICAgICAgICA+U2F2ZTwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBsaW5rIC5kaXNhYmxlZD1cIiR7IXRoaXMuaXNEaXJ0eSB8fCB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uUmVzZXRBbGx9XCJcbiAgICAgICAgICAgICAgICA+UmVzZXQ8L2d2LWJ1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZ3YtcG9saWN5LXN0dWRpby1tZW51PlxuXG4gICAgICA8Z3YtdGFic1xuICAgICAgICAudmFsdWU9XCIke3RoaXMudGFiSWR9XCJcbiAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX3RhYnN9XCJcbiAgICAgICAgLmRpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgIEBndi10YWJzOmNoYW5nZT1cIiR7dGhpcy5fb25DaGFuZ2VUYWJ9XCJcbiAgICAgICAgLnZhbGlkYXRvcj1cIiR7dGhpcy5fY2hhbmdlVGFiVmFsaWRhdG9yLmJpbmQodGhpcyl9XCJcbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9yZW5kZXJEZXNpZ24ocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJDb25maWd1cmF0aW9uRm9ybShyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckRlYnVnKCl9XG4gICAgICAgIDxndi1wcm9wZXJ0aWVzXG4gICAgICAgICAgaWQ9XCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgICAgY2xhc3M9XCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICAucHJvdmlkZXI9XCIke3RoaXMuc2VydmljZXNbJ2R5bmFtaWMtcHJvcGVydHknXX1cIlxuICAgICAgICAgIEBndi1wcm9wZXJ0aWVzOmNoYW5nZT1cIiR7dGhpcy5fb25Qcm9wZXJ0aWVzQ2hhbmdlfVwiXG4gICAgICAgICAgQGd2LXByb3BlcnRpZXM6c2F2ZS1wcm92aWRlcj1cIiR7dGhpcy5fb25TYXZlUHJvdmlkZXJ9XCJcbiAgICAgICAgICBAZ3YtcHJvcGVydGllczpzd2l0Y2gtZW5jcnlwdGVkPVwiJHt0aGlzLl9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5fVwiXG4gICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICBlbmNyeXB0YWJsZT1cInRydWVcIlxuICAgICAgICAgIC5wcm9wZXJ0aWVzPVwiJHt0aGlzLmRlZmluZWRQcm9wZXJ0aWVzfVwiXG4gICAgICAgICAgLnByb3ZpZGVycz1cIiR7dGhpcy5wcm9wZXJ0eVByb3ZpZGVyc31cIlxuICAgICAgICAgIC5keW5hbWljUHJvcGVydHlTY2hlbWE9XCIke3RoaXMuZHluYW1pY1Byb3BlcnR5U2NoZW1hfVwiXG4gICAgICAgID48L2d2LXByb3BlcnRpZXM+XG4gICAgICAgIDxndi1yZXNvdXJjZXNcbiAgICAgICAgICBpZD1cInJlc291cmNlc1wiXG4gICAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICAgIGNsYXNzPVwicmVzb3VyY2VzXCJcbiAgICAgICAgICBAZ3YtcmVzb3VyY2VzOmNoYW5nZT1cIiR7dGhpcy5fb25SZXNvdXJjZXNDaGFuZ2V9XCJcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgIC5yZXNvdXJjZXM9XCIke3RoaXMuZGVmaW5lZFJlc291cmNlc31cIlxuICAgICAgICAgIC50eXBlcz1cIiR7dGhpcy5yZXNvdXJjZVR5cGVzfVwiXG4gICAgICAgID48L2d2LXJlc291cmNlcz5cbiAgICAgIDwvZ3YtdGFicz5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgZGVzaWduIHZpZXcgc2hvdWxkIGJlIGluIHJlYWRvbmx5IG1vZGUgb3Igbm90XG4gICAqIEl0IGlzIGluIHJlYWRvbmx5IG1vZGUgaWY6XG4gICAqICB0aGUgcmVhZG9ubHkgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqICBPUlxuICAgKiAgdGhlIG1haW4gc2VsZWN0ZWQgZmxvdyBiZWxvbmdzIHRvIGEgcGxhbiBhbmQgdGhlIHJlYWRvbmx5LXBsYW5zIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiAgT1JcbiAgICogIHRoZSBzZWNvbmQgZmxvdyBmb3IgY29tcGFyaXNvbiBiZWxvbmdzIHRvIGEgcGxhbiBhbmQgdGhlIHJlYWRvbmx5LXBsYW5zIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnwqfHt0eXBlOiBCb29sZWFuQ29uc3RydWN0b3J9fHthdHRyaWJ1dGU6IHN0cmluZywgdHlwZTogQm9vbGVhbkNvbnN0cnVjdG9yfXx7dHlwZTogKn18e2F0dHJpYnV0ZTogc3RyaW5nLCB0eXBlOiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRSZWFkb25seU1vZGVGb3JEZXNpZ24oKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygwKTtcbiAgICBpZiAoIWZsb3cpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBsYW46IGZsb3dQbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvdy5faWQpO1xuICAgIGNvbnN0IHJlYWRvbmx5TW9kZSA9IGZsb3dQbGFuICYmIHRoaXMucmVhZG9ubHlQbGFucztcbiAgICBpZiAocmVhZG9ubHlNb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wYXJlZEZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygxKTtcbiAgICBpZiAoIWNvbXBhcmVkRmxvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGxhbjogY29tcGFyZWRGbG93UGxhbiB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGNvbXBhcmVkRmxvdy5faWQpO1xuICAgIHJldHVybiBjb21wYXJlZEZsb3dQbGFuICYmIHRoaXMucmVhZG9ubHlQbGFucztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1wb2xpY3ktc3R1ZGlvJywgR3ZQb2xpY3lTdHVkaW8pO1xuIl19
1781
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtcG9saWN5LXN0dWRpby5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsIm1ldGhvZHMiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiaTE4biIsImVtcHR5IiwiY2FjaGUiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJLZXlib2FyZEVsZW1lbnQiLCJLRVlTIiwiRkxPV19TVEVQX0ZPUk1fSUQiLCJHdlBvbGljeVN0dWRpbyIsInByb3BlcnRpZXMiLCJwb2xpY2llcyIsInR5cGUiLCJBcnJheSIsInNlcnZpY2VzIiwiT2JqZWN0IiwicmVzb3VyY2VUeXBlcyIsImF0dHJpYnV0ZSIsInByb3BlcnR5UHJvdmlkZXJzIiwiZHluYW1pY1Byb3BlcnR5U2NoZW1hIiwidGFiSWQiLCJTdHJpbmciLCJfdGFiSWQiLCJkZWZpbml0aW9uIiwiX2RlZmluaXRpb24iLCJkb2N1bWVudGF0aW9uIiwiZmxvd1NjaGVtYSIsImNvbmZpZ3VyYXRpb25TY2hlbWEiLCJfY29uZmlndXJhdGlvblNjaGVtYSIsImNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbiIsImlzRGlydHkiLCJCb29sZWFuIiwicmVmbGVjdCIsIl9kcmFnUG9saWN5IiwiX2Ryb3BQb2xpY3kiLCJzZWxlY3RlZEZsb3dzSWQiLCJfc2VsZWN0ZWRGbG93c0lkIiwiX2N1cnJlbnRQb2xpY3lJZCIsIl9zZWFyY2hQb2xpY3lRdWVyeSIsIl9zZWFyY2hGbG93UXVlcnkiLCJfZmxvd1N0ZXBTY2hlbWEiLCJfY3VycmVudEZsb3dTdGVwIiwiX3BvbGljeUZpbHRlciIsIl9mbG93RmlsdGVyIiwiX2N1cnJlbnRBc2tDb25maXJtYXRpb24iLCJoYXNQcm9wZXJ0aWVzIiwiX2hhc1Byb3BlcnRpZXMiLCJoYXNSZXNvdXJjZXMiLCJoYXNQb2xpY3lGaWx0ZXIiLCJmbG93c1RpdGxlIiwic29ydGFibGUiLCJjYW5BZGQiLCJyZWFkb25seSIsInJlYWRvbmx5UGxhbnMiLCJjYW5EZWJ1ZyIsIl9jYW5EZWJ1ZyIsImRlYnVnUmVzcG9uc2UiLCJoYXNDb25kaXRpb25hbFN0ZXBzIiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJmbG93cyIsIl90YWJzIiwiaWQiLCJ0aXRsZSIsImljb24iLCJ2YWx1ZSIsInRoZW4iLCJyZXF1ZXN0VXBkYXRlIiwiX2Zsb3dGaWx0ZXJPcHRpb25zIiwiZGVmaW5lZFBsYW5zIiwibGVuZ3RoIiwiX3BvbGljeUZpbHRlck9wdGlvbnMiLCJzcGxpY2UiLCJvbktleWJvYXJkIiwiaXNQcmVzc2VkIiwiU2hpZnQiLCJDdHJsIiwiU3BhY2UiLCJzZWFyY2giLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsImZvY3VzIiwiaW5jbHVkZXMiLCJfZ2VuZXJhdGVGbG93c0lkIiwicmVzb3VyY2VzIiwiX2dlbmVyYXRlSWQiLCJwbGFucyIsIm1hcCIsInBsYW4iLCJfZ2VuZXJhdGVQbGFuRmxvd3NJZCIsIl9pbml0aWFsRGVmaW5pdGlvbiIsIl9zZWxlY3RGaXJzdEZsb3ciLCJpc0FycmF5IiwiZmlsdGVyIiwiX2ZpbmRGbG93QnlJZCIsIl91cGRhdGVTZWxlY3RlZEZsb3dzIiwiZGlzcGF0Y2giLCJjYW5kaWRhdGUiLCJkZWZpbmVkRmxvd3MiLCJfaWQiLCJmaW5kIiwiX2dldEZsb3dFbGVtZW50IiwiZmxvd0lkIiwiX29uRHJhZ0VuZFBvbGljeSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZSIsIm9uRHJhZ0VuZCIsIl9vbkRyb3BQb2xpY3kiLCJkZXRhaWwiLCJfYXNrVG9WYWxpZGF0ZUZvcm1zIiwicG9saWN5IiwidGFyZ2V0RmxvdyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImNvbmRpdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJfbmV3IiwiZmxvd1N0ZXAiLCJfZ2VuZXJhdGVGbG93U3RlcElkIiwiZmxvd0tleSIsInBvc2l0aW9uIiwiZW5hYmxlZCIsInNvdXJjZUZsb3ciLCJzb3VyY2VGbG93SWQiLCJzb3VyY2VQb3NpdGlvbiIsInNvdXJjZUZsb3dLZXkiLCJzdGVwIiwiZ3JvdXAiLCJzY2hlbWEiLCJidWlsZFNjaGVtYSIsIl9zZXRDdXJyZW50Rmxvd1N0ZXAiLCJjdXJyZW50Rmxvd0Zvcm0iLCJfZ2V0Rmxvd1N0ZXBGb3JtIiwiZGlydHkiLCJjYW5jZWxFZGl0Iiwic2V0VGltZW91dCIsIl9lZGl0Rmxvd1N0ZXAiLCJmbG93IiwidXBkYXRlQ29tcGxldGUiLCJmbG93RWxlbWVudCIsInNlbGVjdGVkU3RlcElkIiwiX2RpcnR5IiwiZ3ZGbG93IiwicmVtb3ZlQ2FuZGlkYXRlIiwiX29uRGVsZXRlUG9saWN5IiwidGFyZ2V0IiwiZWRpdGluZyIsIl9jbG9zZUZsb3dTdGVwRm9ybSIsIl9vbkRlc2lnbiIsIl9jaGFuZ2VUYWIiLCJfc3BsaXRNYWluVmlld3MiLCJjb21tb25EZXNjcmlwdGlvbiIsImNvbW1vbkNvbmRpdGlvbiIsImpzb25TY2hlbWEiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50Rmxvd1N0ZXAiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiX29uT3BlbkRvY3VtZW50YXRpb24iLCJfbWF4aW1pemVUb3BWaWV3IiwiX29uRWRpdEZsb3dTdGVwIiwiX2dldFJlc2l6YWJsZVZpZXdzIiwibWF4aW1pemVUb3AiLCJfbWF4aW1pemVCb3R0b21WaWV3IiwibWF4aW1pemVCb3R0b20iLCJzcGxpdCIsIl9vbkNoYW5nZUZsb3dTdGVwU3RhdGUiLCJfb25DbG9zZUZsb3dTdGVwRm9ybSIsImVyciIsImZvcmNlIiwiUHJvbWlzZSIsImFsbCIsIl9zdWJtaXRPckNvbmZpcm1Gb3JtcyIsImZvcm1zIiwiciIsIl9idWlsZERlZmluaXRpb25Ub1NhdmUiLCJnZXRDaGlsZHJlbiIsIl9jaGVja0N1cnJlbnRGbG93U3RlcCIsIkVycm9yIiwiZmxvd1N0ZXBTY2hlbWEiLCJfaW5pdGlhbFZhbHVlcyIsInNjb3BlIiwiX2VudW0iLCJlbnVtIiwiZmlsdGVyZWQiLCJkZWZhdWx0IiwiX3ZhbHVlcyIsIl9yZWZyZXNoIiwiY2xvc2VTdGVwRm9ybSIsIl9vblNlbGVjdEZsb3dzIiwiX29uQ2xvc2VEb2N1bWVudGF0aW9uIiwiX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tTWVudSIsImdldFNlbGVjdGVkRmxvdyIsIl9mZXRjaERvY3VtZW50YXRpb24iLCJfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21Gb3JtIiwicmVtb3ZlSXRlbSIsIl9maW5kRmxvd0NvbGxlY3Rpb24iLCJwbGFuc0Zsb3dzIiwicmVkdWNlIiwiYWNjIiwidmFsIiwiY29uY2F0IiwiaW5kZXgiLCJzZWxlY3RlZEZsb3dJZCIsIl9vblRhcmdldFBvbGljeSIsIl9vbkNoYW5nZUZsb3dTdGVwIiwidmFsdWVzIiwiX3dyaXRlRmxvd1N0ZXAiLCJmaW5kSW5kZXgiLCJfb25TdWJtaXRGbG93U3RlcCIsImMiLCJfb25DYW5jZWxGbG93IiwiX29uU3VibWl0RmxvdyIsInNlbGVjdGVkRmxvdyIsImFzc2lnbiIsIl9jcmVhdGVGbG93RnJvbVNjaGVtYSIsInNlbGVjdGVkRmxvd1VwZGF0ZWQiLCJfb25DYW5jZWxGbG93TW9kZSIsIl9vblN1Ym1pdEZsb3dNb2RlIiwiX29uQ2hhbmdlVGFiIiwiX2NoYW5nZVRhYlZhbGlkYXRvciIsImZyb20iLCJ0byIsImNvbXBvbmVudCIsImNvbmZpcm0iLCJyZXNvbHZlIiwiX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAiLCJfcmVuZGVyRmxvd0VtcHR5U3RhdGUiLCJyZWFkb25seU1vZGUiLCJfb25BZGRGbG93IiwiX3JlbmRlckZsb3ciLCJoYXNFbXB0eVN0YXRlIiwiYmluZCIsIl9vbkZldGNoUmVzb3VyY2VzIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwicmVnZXhUeXBlcyIsIm9wdGlvbnMiLCJkZWZpbmVkUmVzb3VyY2VzIiwicmVzb3VyY2UiLCJSZWdFeHAiLCJ0ZXN0IiwicmVzb3VyY2VUeXBlIiwicm93IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicGljdHVyZSIsIml0ZW0iLCJlbGVtZW50IiwiX3JlbmRlclBvbGljeSIsIl9yZW5kZXJGbG93U3RlcEZvcm0iLCJjb250ZW50IiwiaW1hZ2UiLCJfb25SZXNldEZsb3dTdGVwIiwicmVzZXQiLCJsaXN0IiwicHJlZml4IiwiaXNGbG93IiwicHJlIiwic3RlcEluZGV4IiwicG9zdCIsImdldFVwZGF0ZUNvbXBsZXRlIiwic2hvdWxkVXBkYXRlIiwiY2hhbmdlZFByb3BlcnRpZXMiLCJoYXMiLCJkcmFnUG9saWN5IiwiZHJvcFBvbGljeSIsInVwZGF0ZWQiLCJwcm9wcyIsImdyb3VwcyIsIml0ZW1zIiwic2V0SXRlbSIsIl9vbkRlbGV0ZUZsb3ciLCJfZGVsZXRlRmxvdyIsImRlZmluZWRQcm9wZXJ0aWVzIiwiX29uRHVwbGljYXRlRmxvdyIsIl9hZGRGbG93IiwicGxhbkluZGV4IiwicCIsImkiLCJfb25DaGFuZ2VGbG93U3RhdGUiLCJfb25BZGRGbG93UGxhbiIsImNvbGxlY3Rpb24iLCJkdXBsaWNhdGUiLCJwdXNoIiwibmV3RmxvdyIsIl9pbnN0YW50aWF0ZSIsInByb3BlcnRpZXNEZWZpbml0aW9uIiwiaW5pdGlhdG9yIiwicHJvcGVydHkiLCJrZXkiLCJrZXlzIiwiZW50cnkiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwic2VsZWN0ZWRGbG93cyIsIl9maW5kRmxvd0luZGV4IiwiZiIsIl9vblJlb3JkZXJGbG93cyIsIm5ld09yZGVyIiwiX29uU2VhcmNoUG9saWN5IiwiX29uQ2xlYXJQb2xpY3kiLCJfb25TZWFyY2hGbG93cyIsIl9vbkNsZWFyRmxvd3MiLCJfb25SZXNldEFsbCIsIl9maWx0ZXJOb3RWYWxpZFN0ZXAiLCJfcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMiLCJvIiwiY29weSIsInN0YXJ0c1dpdGgiLCJmb3JtIiwiaXNWYWxpZCIsInN1Ym1pdCIsImdldFByb3BlcnRpZXNFbGVtZW50IiwiY2xvc2VQcm9taXNlcyIsImN1cnJlbnRTdGVwIiwic2F2ZWQiLCJfZGVmaW5pdGlvblNhdmVkIiwiX2J1aWxkRGVmaW5pdGlvblRvU2VuZCIsImRlZmluaXRpb25Ub1NhdmUiLCJfb25TYXZlQWxsIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJfb25EZWJ1ZyIsInJlcXVlc3RFdmVudCIsInJlcXVlc3QiLCJmaWx0ZXJlZEZsb3dzIiwiZmlsdGVyZWRQbGFucyIsIl9vbkZpbHRlckZsb3dzIiwiX2dldEZpbHRlcmVkUG9saWNpZXMiLCJvblJlcXVlc3QiLCJvblJlc3BvbnNlIiwiX29uRmlsdGVyUG9saWNpZXMiLCJfcmVuZGVyRGVzaWduIiwiX3JlbmRlckZsb3dGb3JtIiwiX3JlbmRlckRlYnVnIiwicmVzcG9uc2UiLCJpc0xvYWRpbmciLCJwYXRoIiwibWV0aG9kIiwiX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtIiwiX29uUmVzb3VyY2VzQ2hhbmdlIiwiX29uUHJvcGVydGllc0NoYW5nZSIsIl9vblNhdmVQcm92aWRlciIsInByb3ZpZGVyIiwiX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHkiLCJyZW5kZXIiLCJfZ2V0UmVhZG9ubHlNb2RlRm9yRGVzaWduIiwiZmxvd1BsYW4iLCJjb21wYXJlZEZsb3ciLCJjb21wYXJlZEZsb3dQbGFuIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxPQUFULFFBQXdCLGVBQXhCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGFBQXJCO0FBQ0EsT0FBTyxvQkFBUDtBQUNBLE9BQU8sa0JBQVA7QUFDQSxPQUFPLHdCQUFQO0FBQ0EsT0FBTywrQkFBUDtBQUNBLE9BQU8saUNBQVA7QUFDQSxPQUFPLDZCQUFQO0FBQ0EsT0FBTyw2QkFBUDtBQUNBLE9BQU8sc0JB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R0FBOUIsQ0FBM0I7O0FBQ0EsVUFBTW1JLFlBQVksR0FBR3lILFFBQVEsSUFBSSxLQUFLMVMsYUFBdEM7O0FBQ0EsUUFBSWlMLFlBQUosRUFBa0I7QUFDaEIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTTBILFlBQVksR0FBRyxLQUFLOUosZUFBTCxDQUFxQixDQUFyQixDQUFyQjs7QUFDQSxRQUFJLENBQUM4SixZQUFMLEVBQW1CO0FBQ2pCLGFBQU8sS0FBUDtBQUNEOztBQUVELFVBQU07QUFBRXhRLE1BQUFBLElBQUksRUFBRXlRO0FBQVIsUUFBNkIsS0FBSzNKLG1CQUFMLENBQXlCMEosWUFBWSxDQUFDN1AsR0FBdEMsQ0FBbkM7O0FBQ0EsV0FBTzhQLGdCQUFnQixJQUFJLEtBQUs1UyxhQUFoQztBQUNEOztBQXR1RDZEO0FBeXVEaEU2UyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGtCQUE3QixFQUFpRDNWLGNBQWpEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnLi4vbGliL3N0dWRpbyc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnLi4vbGliL2kxOG4nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1idXR0b24nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pY29uJztcbmltcG9ydCAnLi4vbW9sZWN1bGVzL2d2LW9wdGlvbic7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1kb2N1bWVudGF0aW9uJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXJlc2l6YWJsZS12aWV3cyc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybSc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1odHRwLWNsaWVudCc7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi10YWJzJztcbmltcG9ydCAnLi4vbW9sZWN1bGVzL2d2LXJvdyc7XG5pbXBvcnQgJy4vZ3YtZmxvdyc7XG5pbXBvcnQgJy4vZ3YtZmxvdy1zdGVwJztcbmltcG9ydCAnLi9ndi1wb2xpY3ktc3R1ZGlvLW1lbnUnO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuLi9zdHlsZXMvZW1wdHknO1xuaW1wb3J0IHsgY2FjaGUgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9jYWNoZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGRlZXBFcXVhbCB9IGZyb20gJy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBLZXlib2FyZEVsZW1lbnQsIEtFWVMgfSBmcm9tICcuLi9taXhpbnMva2V5Ym9hcmQtZWxlbWVudCc7XG5cbmNvbnN0IEZMT1dfU1RFUF9GT1JNX0lEID0gJ2Zsb3ctc3RlcC1mb3JtJztcblxuLyoqXG4gKiAgU3R1ZGlvIFBvbGljeSBjb21wb25lbnRcbiAqXG4gKiDimqDvuI8gVGhpcyBjb21wb25lbnQgaXMgYmFzZWQgb24gYGFzY2lpZG9jdG9yYCwgYGhpZ2hsaWdodC5qc2AgYW5kIGBhc2NpaWRvY3Rvci1oaWdobGlnaHQuanNgLlxuICogVG8gdXNlIHRoaXMgY29tcG9uZW50IGluIHlvdXIgcHJvamVjdCBiZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBvclxuICogaW5zdGFsbCB0aGVtIHdpdGg6IGBucG0gaW5zdGFsbCBhc2NpaWRvY3RvciBoaWdobGlnaHQuanMgYXNjaWlkb2N0b3ItaGlnaGxpZ2h0LmpzIC0tc2F2ZWBcbiAqXG4gKiBAZmlyZXMgZ3YtcG9saWN5LXN0dWRpbzpzZWxlY3QtcG9saWN5IC0gU2VsZWN0IHBvbGljeSBldmVudFxuICogQGZpcmVzIGd2LXBvbGljeS1zdHVkaW86c2F2ZSAtIEV2ZW50IHNlbnQgd2hlbiBcIlNhdmVcIiBidXR0b24gaXMgY2xpY2tlZCwgaXQgY29udGFpbnMgdGhlIHdob2xlIGRlZmluaXRpb24gb2YgdGhlIEFQSVxuICogQGZpcmVzIGd2LXBvbGljeS1zdHVkaW86ZGVidWcgLSBFdmVudCBzZW50IHdoZW4gdmFsaWRhdGlvbiBidXR0b24gb2YgdGhlICdUcnkgaXQnIHRhYiBpcyBjbGlja2VkLCBpdCBjb250YWlucyB0aGUgd2hvbGUgZGVmaW5pdGlvbiBvZiB0aGUgQVBJIGFuZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyeSBpdCByZXF1ZXN0LlxuICpcbiAqIEBhdHRyIHtBcnJheX0gcG9saWNpZXMgLSBQb2xpY2llcyBhdmFpbGFibGVcbiAqIEBhdHRyIHtBcnJheX0gc2VydmljZXMgLSBTZXJ2aWNlcyBhdmFpbGFibGVcbiAqIEBhdHRyIHtBcnJheX0gcmVzb3VyY2VUeXBlcyAtIFJlc291cmNlcyB0eXBlcyBhdmFpbGFibGVcbiAqIEBhdHRyIHtBcnJheX0gcHJvcGVydHlQcm92aWRlcnMgLSBQcm92aWRlcnMgb2YgcHJvcGVydGllc1xuICogQGF0dHIge0FycmF5fSBkeW5hbWljUHJvcGVydHlTY2hlbWEgLSBTY2hlbWEgZm9yIHRoZSBkeW5hbWljIHByb3BlcnR5IGZvcm1cbiAqIEBhdHRyIHtTdHJpbmd9IHRhYklkIC0gQ3VycmVudCB0YWJJZCB0byBkaXNwbGF5IChkZXNpZ24sIHNldHRpbmdzLCBwcm9wZXJ0aWVzIG9yIHJlc291cmNlcylcbiAqIEBhdHRyIHtPYmplY3R9IGRlZmluaXRpb24gLSBUaGUgZGVmaW5pdGlvbiBvZiBmbG93c1xuICogQGF0dHIge09iamVjdH0gZG9jdW1lbnRhdGlvbiAtIFRoZSBkb2N1bWVudGF0aW9uIHRvIGRpc3BsYXlcbiAqIEBhdHRyIHtPYmplY3R9IGZsb3dTY2hlbWEgLSBUaGUgZmxvdyBmb3JtIGNvbmZpZ3VyYXRpb24gdG8gZGlzcGxheSBpbiBndi1zY2hlbWEtZm9ybSBjb21wb25lbnRcbiAqIEBhdHRyIHtPYmplY3R9IGNvbmZpZ3VyYXRpb25TY2hlbWEgLSBUaGUgZm9ybSBjb25maWd1cmF0aW9uIHRvIGRpc3BsYXkgaW4gZ3Ytc2NoZW1hLWZvcm0gY29tcG9uZW50XG4gKiBAYXR0ciB7T2JqZWN0fSBjb25maWd1cmF0aW9uSW5mb3JtYXRpb24gLSBUaGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhcGkgY29uZmlndXJhdGlvbiB0YWJcbiAqIEBhdHRyIHtCb29sZWFufSBpc0RpcnR5IC0gdHJ1ZSBpZiBjb21wb25lbnQgaXMgZGlydHlcbiAqIEBhdHRyIHtBcnJheX0gc2VsZWN0ZWRGbG93c0lkIC0gVGhlIHNlbGVjdGVkIGZsb3dzIGlkXG4gKiBAYXR0ciB7Qm9vbGVhbn0gc29ydGFibGUgLSB0cnVlIGlmIGZsb3dzIGFyZSBzb3J0YWJsZVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gdHJ1ZSBpZiByZWFkb25seVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5LXBsYW5zIC0gdHJ1ZSBpZiBwbGFucycgZmxvd3MgY2FuJ3QgYmUgbW9kaWZpZWRcbiAqIEBhdHRyIHtCb29sZWFufSBjYW4tYWRkIC0gdHJ1ZSBpZiB1c2VyIGNhbiBhZGQgZmxvd1xuICogQGF0dHIge1N0cmluZ30gZmxvd3NUaXRsZSAtIGZsb3dzIG1lbnUgdGl0bGVcbiAqIEBhdHRyIHtCb29sZWFufSBoYXMtcG9saWN5LWZpbHRlciAtIHRydWUgaWYgcG9saWNpZXMgaGF2ZSBvblJlcXVlc3Qvb25SZXNwb25zZSBwcm9wZXJ0aWVzXG4gKiBAYXR0ciB7Qm9vbGVhbn0gY2FuLWRlYnVnIC0gdHJ1ZSBpZiBkZWJ1ZyB0YWIgc2hvdWxkIGJlIGRpc3BsYXllZFxuICogQGF0dHIge09iamVjdH0gZGVidWdSZXNwb25zZSAtIHRydWUgaWYgZGVidWcgdGFiIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAqIEBhdHRyIHtCb29sZWFufSBoYXMtY29uZGl0aW9uYWwtc3RlcHMgLSB0cnVlIGlmIHN0ZXBzIGNhbiBiZSBjb25kaXRpb25lZFxuICovXG5leHBvcnQgY2xhc3MgR3ZQb2xpY3lTdHVkaW8gZXh0ZW5kcyBLZXlib2FyZEVsZW1lbnQoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvbGljaWVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBzZXJ2aWNlczogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHJlc291cmNlVHlwZXM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Jlc291cmNlLXR5cGVzJyB9LFxuICAgICAgcHJvcGVydHlQcm92aWRlcnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Byb3BlcnR5LXByb3ZpZGVycycgfSxcbiAgICAgIGR5bmFtaWNQcm9wZXJ0eVNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2R5bmFtaWMtcHJvcGVydHktc2NoZW1hJyB9LFxuICAgICAgdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICd0YWItaWQnIH0sXG4gICAgICBfdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWZpbml0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgX2RlZmluaXRpb246IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkb2N1bWVudGF0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgZmxvd1NjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2Zsb3ctc2NoZW1hJyB9LFxuICAgICAgY29uZmlndXJhdGlvblNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2NvbmZpZ3VyYXRpb24tc2NoZW1hJyB9LFxuICAgICAgX2NvbmZpZ3VyYXRpb25TY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBjb25maWd1cmF0aW9uSW5mb3JtYXRpb246IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjb25maWd1cmF0aW9uLWluZm9ybWF0aW9uJyB9LFxuICAgICAgaXNEaXJ0eTogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdkaXJ0eScsIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIF9kcmFnUG9saWN5OiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Ryb3BQb2xpY3k6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBzZWxlY3RlZEZsb3dzSWQ6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3NlbGVjdGVkLWZsb3dzLWlkJyB9LFxuICAgICAgX3NlbGVjdGVkRmxvd3NJZDogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2N1cnJlbnRQb2xpY3lJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hQb2xpY3lRdWVyeTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hGbG93UXVlcnk6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmxvd1N0ZXBTY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfY3VycmVudEZsb3dTdGVwOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3BvbGljeUZpbHRlcjogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Zsb3dGaWx0ZXI6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9jdXJyZW50QXNrQ29uZmlybWF0aW9uOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGhhc1Byb3BlcnRpZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXByb3BlcnRpZXMnIH0sXG4gICAgICBfaGFzUHJvcGVydGllczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBoYXNSZXNvdXJjZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXJlc291cmNlcycgfSxcbiAgICAgIGhhc1BvbGljeUZpbHRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcG9saWN5LWZpbHRlcicgfSxcbiAgICAgIGZsb3dzVGl0bGU6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdmbG93cy10aXRsZScgfSxcbiAgICAgIHNvcnRhYmxlOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIGNhbkFkZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdjYW4tYWRkJyB9LFxuICAgICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcmVhZG9ubHlQbGFuczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdyZWFkb25seS1wbGFucycgfSxcbiAgICAgIGNhbkRlYnVnOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2Nhbi1kZWJ1ZycgfSxcbiAgICAgIF9jYW5EZWJ1ZzogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWJ1Z1Jlc3BvbnNlOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZGVidWctcmVzcG9uc2UnIH0sXG4gICAgICBoYXNDb25kaXRpb25hbFN0ZXBzOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1jb25kaXRpb25hbC1zdGVwcycgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGVtcHR5LFxuICAgICAgbWV0aG9kcyxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAtLWhlaWdodDogdmFyKC0tZ3YtcG9saWN5LXN0dWRpby0taCwgY2FsYygxMDB2aCAtIDMycHgpKTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgLS1oZWlnaHQtaW4tdGFiczogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMjVweCk7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94IHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZXNpZ24sXG4gICAgICAgIC5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtcmVzaXphYmxlLXZpZXdzIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0YWJsZS1uYW1lIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdGFibGUtbmFtZSBzcGFuIHtcbiAgICAgICAgICBjb2xvcjogI2JmYmZiZjtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybV9fY29udHJvbCB7XG4gICAgICAgICAgbWFyZ2luOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICBndi1pbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lLmRpcnR5IHtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZSBndi1pY29uIHtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDI0cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1wYXRoIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRpdGxlX21ldGhvZHMge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAudHdvLWNvbHMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5sZWZ0LW1lbnUge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yaWdodC1tZW51IHtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2NvbnRhaW5lciB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBoZWlnaHQ6IDk5JTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2Zvcm0ge1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctc3RlcF9fZm9ybS10aXRsZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtdGFicyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyxcbiAgICAgICAgZ3YtcHJvcGVydGllcyxcbiAgICAgICAgZ3YtcmVzb3VyY2VzIHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXByb3BlcnRpZXMsXG4gICAgICAgIGd2LXJlc291cmNlcyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wcm9wZXJ0aWVzLnByb3BlcnRpZXMge1xuICAgICAgICAgIC0tZ3YtcHJvcGVydGllcy10YWJsZS0tY29sbWc6IDEwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYXBpLXNldHRpbmdzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRlYnVnIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbiB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9faWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCk7XG4gICAgICAgICAgLS1ndi1pY29uLW9wYWNpdHktLWM6IHZhcigtLWd2LXRoZW1lLWNvbG9yLWluZm8tbGlnaHQsICM2NGI1ZjYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZSxcbiAgICAgICAgLmRlYnVnLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KTtcbiAgICAgICAgICBtYXJnaW46IDE1cHg7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXNldHRpbmdzIGd2LXNjaGVtYS1mb3JtIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW5wdXQge1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtIDA7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMsXG4gICAgICAgIC5zZWFyY2gtcG9saWNpZXMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1wb2xpY2llcyB7XG4gICAgICAgICAgbWFyZ2luOiAxLjVyZW0gMC41cmVtIDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LWJ1dHRvbi5idG4tbGFyZ2UsXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LW9wdGlvbiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtIDE1cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZmJmYmY7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgLnRpdGxlIHtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4zcmVtO1xuICAgICAgICAgIGNvbG9yOiAjYmZiZmJmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgd2lkdGg6IDI0MHB4O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDI1cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgPiAqLFxuICAgICAgICAuc2VhcmNoLXBvbGljaWVzID4gKiB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLnBvbGljaWVzID0gW107XG4gICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gW107XG4gICAgdGhpcy50YWJJZCA9ICdkZXNpZ24nO1xuICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkID0gW107XG4gICAgdGhpcy5mbG93c1RpdGxlID0gJ0Zsb3dzJztcbiAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb24gPSB7XG4gICAgICBmbG93czogW10sXG4gICAgfTtcbiAgICB0aGlzLl90YWJzID0gW3sgaWQ6ICdkZXNpZ24nLCB0aXRsZTogJ0Rlc2lnbicsIGljb246ICduYXZpZ2F0aW9uOmV4Y2hhbmdlJyB9XTtcbiAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB0aGlzLl9mbG93RmlsdGVyID0gW107XG4gIH1cblxuICBzZXQgaGFzUHJvcGVydGllcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcHJvcGVydGllcycpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdwcm9wZXJ0aWVzJywgdGl0bGU6ICdQcm9wZXJ0aWVzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2hhc1Byb3BlcnRpZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0aWVzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc291cmNlcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcmVzb3VyY2VzJykudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RhYnMgPSBbLi4udGhpcy5fdGFicywgeyBpZDogJ3Jlc291cmNlcycsIHRpdGxlOiAnUmVzb3VyY2VzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjNScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGNhbkRlYnVnKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdkZWJ1ZycsIHRpdGxlOiAnVHJ5IGl0JywgaWNvbjogJ2NvbnRlbnQ6c2VuZCcgfV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9mbG93RmlsdGVyT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kZWZpbmVkUGxhbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBpZDogJ2FwaScsIHRpdGxlOiAnQXBpJywgaWNvbjogJ3Nob3BwaW5nOmJveCMzJyB9LFxuICAgICAgICB7IGlkOiAncGxhbicsIHRpdGxlOiAnUGxhbnMnLCBpY29uOiAnc2hvcHBpbmc6c2FsZSMyJyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgaGFzUG9saWN5RmlsdGVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zID0gW1xuICAgICAgICB7IGlkOiAnb25SZXF1ZXN0JywgdGl0bGU6ICdSZXF1ZXN0JywgaWNvbjogJ25hdmlnYXRpb246YXJyb3ctZnJvbS1sZWZ0JyB9LFxuICAgICAgICB7IGlkOiAnb25SZXNwb25zZScsIHRpdGxlOiAnUmVzcG9uc2UnLCBpY29uOiAnbmF2aWdhdGlvbjphcnJvdy1mcm9tLXJpZ2h0JyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgY29uZmlndXJhdGlvblNjaGVtYSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFicy5zcGxpY2UoMSwgMCwgeyBpZDogJ3NldHRpbmdzJywgdGl0bGU6ICdDb25maWd1cmF0aW9uJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMicgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblNjaGVtYSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbmZpZ3VyYXRpb25TY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb25TY2hlbWE7XG4gIH1cblxuICBvbktleWJvYXJkKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzUHJlc3NlZChLRVlTLlNoaWZ0LCBLRVlTLkN0cmwsIEtFWVMuU3BhY2UpKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoLXBvbGljeScpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3NlYXJjaC1mbG93Jyk7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBzZWFyY2guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldCB0YWJJZCh0YWJJZCkge1xuICAgIGlmICh0YWJJZCAhPSBudWxsICYmIFsnZGVzaWduJywgJ3NldHRpbmdzJywgJ3Byb3BlcnRpZXMnLCAncmVzb3VyY2VzJywgJ2RlYnVnJ10uaW5jbHVkZXModGFiSWQpKSB7XG4gICAgICB0aGlzLl90YWJJZCA9IHRhYklkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90YWJJZCA9ICdkZXNpZ24nO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSWQ7XG4gIH1cblxuICBzZXQgZGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKGRlZmluaXRpb24uZmxvd3MpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZ2VuZXJhdGVJZCgncmVzb3VyY2UtJywgZGVmaW5pdGlvbi5yZXNvdXJjZXMpO1xuICAgICAgY29uc3QgcGxhbnMgPVxuICAgICAgICBkZWZpbml0aW9uLnBsYW5zID09IG51bGxcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBkZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93czogdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICB0aGlzLl9pbml0aWFsRGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgZmxvd3MsIHJlc291cmNlcywgcGxhbnMgfTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5faW5pdGlhbERlZmluaXRpb24pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3coKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEZsb3dzSWQoc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3NJZCAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRGbG93c0lkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRGbG93c0lkID0gc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gICAgICBpZiAoc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCAhPT0gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRmxvd3NJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gIH1cblxuICBfdXBkYXRlU2VsZWN0ZWRGbG93cyhzZWxlY3RlZEZsb3dzSWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IHNlbGVjdGVkRmxvd3NJZDtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QtZmxvd3MnLCB7IGZsb3dzOiB0aGlzLnNlbGVjdGVkRmxvd3NJZCB9KTtcbiAgfVxuXG4gIF9zZWxlY3RGaXJzdEZsb3coZGlzcGF0Y2ggPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCBjYW5kaWRhdGUgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZGVmaW5lZEZsb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZWZpbmVkRmxvd3NbMF0uX2lkICE9IG51bGwpIHtcbiAgICAgICAgY2FuZGlkYXRlID0gdGhpcy5kZWZpbmVkRmxvd3NbMF07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGVmaW5lZFBsYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MgIT0gbnVsbCAmJiBwbGFuLmZsb3dzLmxlbmd0aCA+IDAgJiYgcGxhbi5mbG93c1swXS5faWQgIT0gbnVsbCk7XG4gICAgICAgIGlmIChwbGFuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlID0gcGxhbi5mbG93c1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW2NhbmRpZGF0ZS5faWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IFtjYW5kaWRhdGUuX2lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9nZXRGbG93RWxlbWVudChmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7Zmxvd0lkfVwiXWApO1xuICB9XG5cbiAgX29uRHJhZ0VuZFBvbGljeSgpIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGUpID0+IGUub25EcmFnRW5kKCkpO1xuICB9XG5cbiAgYXN5bmMgX29uRHJvcFBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICBjb25zdCBwb2xpY3kgPSBkZXRhaWwucG9saWN5O1xuICAgICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcblxuICAgICAgbGV0IG5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgbGV0IGNvbmRpdGlvbiA9ICcnO1xuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICAgIGxldCBfaWQ7XG4gICAgICBsZXQgX25ldyA9IGZhbHNlO1xuICAgICAgaWYgKGRldGFpbC5mbG93U3RlcCkge1xuICAgICAgICBfaWQgPSBkZXRhaWwuZmxvd1N0ZXAuX2lkO1xuICAgICAgICBuYW1lID0gZGV0YWlsLmZsb3dTdGVwLm5hbWU7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmRlc2NyaXB0aW9uIHx8ICcnO1xuICAgICAgICBjb25kaXRpb24gPSBkZXRhaWwuZmxvd1N0ZXAuY29uZGl0aW9uIHx8ICcnO1xuICAgICAgICBjb25maWd1cmF0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmNvbmZpZ3VyYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfaWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQodGFyZ2V0Rmxvdy5faWQsIGRldGFpbC5mbG93S2V5LCBkZXRhaWwucG9zaXRpb24pO1xuICAgICAgICBfbmV3ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxvd1N0ZXAgPSB7IF9pZCwgX25ldywgbmFtZSwgcG9saWN5OiBwb2xpY3kuaWQsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24sIGVuYWJsZWQ6IHRydWUsIGNvbmZpZ3VyYXRpb24gfTtcbiAgICAgIGNvbnN0IHNvdXJjZUZsb3cgPSBkZXRhaWwuc291cmNlRmxvd0lkICE9IG51bGwgPyB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLnNvdXJjZUZsb3dJZCkgOiB0YXJnZXRGbG93O1xuXG4gICAgICBpZiAoZGV0YWlsLnNvdXJjZVBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGRldGFpbC5zb3VyY2VGbG93S2V5ICYmIGRldGFpbC5zb3VyY2VGbG93S2V5ICE9PSBkZXRhaWwuZmxvd0tleSkge1xuICAgICAgICAgIHNvdXJjZUZsb3dbZGV0YWlsLnNvdXJjZUZsb3dLZXldLnNwbGljZShkZXRhaWwuc291cmNlUG9zaXRpb24sIDEpO1xuICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwICE9IG51bGwgJiYgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX2lkID09PSBfaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cCA9IGRldGFpbC5mbG93S2V5O1xuICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB1cGRhdGUgc2NoZW1hIGFmdGVyIGNoYW5nZSByZXF1ZXN0IHRvIHJlc3BvbnNlIG9yIGludmVyc2VcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuYnVpbGRTY2hlbWEodGhpcy5fY3VycmVudEZsb3dTdGVwLnBvbGljeSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50Rmxvd1N0ZXAodGhpcy5fY3VycmVudEZsb3dTdGVwLCBzY2hlbWEsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rmxvd0VsZW1lbnQodGFyZ2V0Rmxvdy5faWQpLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGRldGFpbC5wb3NpdGlvbiA+IGRldGFpbC5zb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMCwgZmxvd1N0ZXApO1xuICAgICAgICAgICAgc291cmNlRmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5zb3VyY2VQb3NpdGlvbiwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZUZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwuc291cmNlUG9zaXRpb24sIDEpO1xuICAgICAgICAgICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMCwgZmxvd1N0ZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGb3JjZSBSZWZyZXNoIHNvdXJjZSBmbG93IGVsZW1lbnQgd2hlbiBtb3ZlIHRvIG90aGVyIGZsb3dcbiAgICAgICAgaWYgKHRhcmdldEZsb3cuX2lkICE9PSBzb3VyY2VGbG93Ll9pZCkge1xuICAgICAgICAgIHRoaXMuX2dldEZsb3dFbGVtZW50KHRhcmdldEZsb3cuX2lkKS5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgY29uc3QgY3VycmVudEZsb3dGb3JtID0gdGhpcy5fZ2V0Rmxvd1N0ZXBGb3JtKCk7XG4gICAgICAgIGlmIChjdXJyZW50Rmxvd0Zvcm0gPT0gbnVsbCB8fCBjdXJyZW50Rmxvd0Zvcm0uZGlydHkgIT09IHRydWUpIHtcbiAgICAgICAgICBsZXQgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbl07XG4gICAgICAgICAgaWYgKHN0ZXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2hlbiBjb25maXJtIGxvc2UgY2hhbmdlIGFmdGVyIGRyb3AgcG9saWN5XG4gICAgICAgICAgICBzdGVwID0gdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV1bZGV0YWlsLnBvc2l0aW9uIC0gMV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRldGFpbC5jYW5jZWxFZGl0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZWRpdEZsb3dTdGVwKHsgc3RlcCwgcG9saWN5LCBmbG93OiB0YXJnZXRGbG93LCBncm91cDogZGV0YWlsLmZsb3dLZXkgfSk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxvd0VsZW1lbnQgPSB0aGlzLl9nZXRGbG93RWxlbWVudCh0YXJnZXRGbG93Ll9pZCk7XG4gICAgICAgICAgICAgICAgZmxvd0VsZW1lbnQuc2VsZWN0ZWRTdGVwSWQgPSBzdGVwLl9pZDtcbiAgICAgICAgICAgICAgICBmbG93RWxlbWVudC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0YXJnZXRGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgICBzb3VyY2VGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKS5mb3JFYWNoKChndkZsb3cpID0+IGd2Rmxvdy5yZW1vdmVDYW5kaWRhdGUoKSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fZHJhZ1BvbGljeSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2Ryb3BQb2xpY3kgPSBudWxsO1xuICAgICAgfSwgMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX29uRGVsZXRlUG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICBjb25zdCB0YXJnZXRGbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5mbG93SWQpO1xuICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDEpO1xuICAgIHRhcmdldEZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIGlmIChkZXRhaWwudGFyZ2V0LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9nZXRGbG93RWxlbWVudChkZXRhaWwuZmxvd0lkKS5yZXF1ZXN0VXBkYXRlKCk7XG4gIH1cblxuICBfb25EZXNpZ24oKSB7XG4gICAgdGhpcy5fY2hhbmdlVGFiKCdkZXNpZ24nKTtcbiAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICB9XG5cbiAgYnVpbGRTY2hlbWEoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IGNvbW1vbkRlc2NyaXB0aW9uID0ge1xuICAgICAgdGl0bGU6ICdEZXNjcmlwdGlvbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG9mIGZsb3cgc3RlcCcsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9O1xuICAgIGNvbnN0IGNvbW1vbkNvbmRpdGlvbiA9IHtcbiAgICAgIHRpdGxlOiAnQ29uZGl0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ29uZGl0aW9uIHRoZSBleGVjdXRpb24gb2YgdGhlIGZsb3cgc3RlcCAoc3VwcG9ydCBFTCknLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAneC1zY2hlbWEtZm9ybSc6IHtcbiAgICAgICAgJ2V4cHJlc3Npb24tbGFuZ3VhZ2UnOiB0cnVlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IGpzb25TY2hlbWEgPSB0eXBlb2Ygc2NoZW1hID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2NoZW1hKSA6IHNjaGVtYTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7IGNvbW1vbkRlc2NyaXB0aW9uLCAuLi4odGhpcy5oYXNDb25kaXRpb25hbFN0ZXBzID8geyBjb21tb25Db25kaXRpb24gfSA6IHt9KSwgLi4uanNvblNjaGVtYS5wcm9wZXJ0aWVzIH07XG4gICAgICByZXR1cm4geyAuLi5qc29uU2NoZW1hLCBwcm9wZXJ0aWVzIH07XG4gICAgfVxuICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHsgY29tbW9uRGVzY3JpcHRpb24sIC4uLih0aGlzLmhhc0NvbmRpdGlvbmFsU3RlcHMgPyB7IGNvbW1vbkNvbmRpdGlvbiB9IDoge30pIH0gfTtcbiAgfVxuXG4gIGFzeW5jIF9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0pIHtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgdGhpcy5fY3VycmVudFBvbGljeUlkID0gcG9saWN5LmlkO1xuICAgICAgY29uc3QgY3VycmVudEZsb3dTdGVwID0geyBmbG93LCBzdGVwLCBwb2xpY3ksIGdyb3VwIH07XG4gICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmJ1aWxkU2NoZW1hKHBvbGljeSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50Rmxvd1N0ZXAoY3VycmVudEZsb3dTdGVwLCBzY2hlbWEpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFtmbG93Ll9pZF0pO1xuICAgICAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJykgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX29uT3BlbkRvY3VtZW50YXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuX21heGltaXplVG9wVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vbkVkaXRGbG93U3RlcCh7IGRldGFpbDogeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0gfSkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0pO1xuICB9XG5cbiAgX2dldFJlc2l6YWJsZVZpZXdzKCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcmVzaXphYmxlLXZpZXdzJyk7XG4gIH1cblxuICBfbWF4aW1pemVUb3BWaWV3KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPD0gMSkge1xuICAgICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5tYXhpbWl6ZVRvcCgpO1xuICAgIH1cbiAgfVxuXG4gIF9tYXhpbWl6ZUJvdHRvbVZpZXcoKSB7XG4gICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5tYXhpbWl6ZUJvdHRvbSgpO1xuICB9XG5cbiAgX3NwbGl0TWFpblZpZXdzKCkge1xuICAgIHRoaXMuX2dldFJlc2l6YWJsZVZpZXdzKCkuc3BsaXQoKTtcbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGVwU3RhdGUoeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG4gICAgY29uc3Qgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbl07XG4gICAgc3RlcC5lbmFibGVkID0gZGV0YWlsLmVuYWJsZWQ7XG4gICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBfb25DbG9zZUZsb3dTdGVwRm9ybSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbG9zZUZsb3dTdGVwRm9ybShmb3JjZSA9IGZhbHNlKSB7XG4gICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKG51bGwsIG51bGwsIGZvcmNlKTtcbiAgfVxuXG4gIGFzeW5jIF9hc2tUb1ZhbGlkYXRlRm9ybXMoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSkudGhlbigoZm9ybXMpID0+IHtcbiAgICAgICAgaWYgKGZvcm1zLmZpbHRlcigocikgPT4gciAhPSBudWxsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpO1xuICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgICAgICAgLy8gUmVmcmVzaCBpZiBsb3NlIGNoYW5nZXMgbG9zdCBjdXJyZW50IHN0ZXAgc2VsZWN0aW9uXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQ3VycmVudEZsb3dTdGVwKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gZm9ybXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzayBhbHJlYWR5IHdhaXRpbmcnKTtcbiAgfVxuXG4gIGFzeW5jIF9zZXRDdXJyZW50Rmxvd1N0ZXAoY3VycmVudEZsb3dTdGVwLCBmbG93U3RlcFNjaGVtYSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IGRlZXBDbG9uZShmbG93U3RlcFNjaGVtYSk7XG4gICAgaWYgKGN1cnJlbnRGbG93U3RlcCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgOiBjdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uO1xuICAgICAgY29uc3Qgc3RlcCA9IHsgLi4uY3VycmVudEZsb3dTdGVwLnN0ZXAsIGNvbmZpZ3VyYXRpb24gfTtcblxuICAgICAgY29uc3QgX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnN0ZXAuY29uZmlndXJhdGlvbiwgY29tbW9uRGVzY3JpcHRpb246IHN0ZXAuZGVzY3JpcHRpb24sIGNvbW1vbkNvbmRpdGlvbjogc3RlcC5jb25kaXRpb24gfTtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9IHsgLi4uY3VycmVudEZsb3dTdGVwLCBzdGVwLCBfaW5pdGlhbFZhbHVlcyB9O1xuXG4gICAgICBpZiAoZmxvd1N0ZXBTY2hlbWEgJiYgZmxvd1N0ZXBTY2hlbWEucHJvcGVydGllcy5zY29wZSkge1xuICAgICAgICBjb25zdCBfZW51bSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW07XG4gICAgICAgIGlmIChfZW51bS5maW5kKChzY29wZSkgPT4gWydSRVFVRVNUJywgJ1JFUVVFU1RfQ09OVEVOVCcsICdSRVNQT05TRScsICdSRVNQT05TRV9DT05URU5UJ10uaW5jbHVkZXMoc2NvcGUpKSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXAgPT09ICdwcmUnID8gWydSRVFVRVNUJywgJ1JFUVVFU1RfQ09OVEVOVCddIDogWydSRVNQT05TRScsICdSRVNQT05TRV9DT05URU5UJ107XG4gICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bSA9IF9lbnVtLmZpbHRlcigoc2NvcGUpID0+IGZpbHRlcmVkLmluY2x1ZGVzKHNjb3BlKSk7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLnNjb3BlO1xuICAgICAgICAgIGlmIChzY29wZSA9PSBudWxsIHx8ICFzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtLmluY2x1ZGVzKHNjb3BlKSkge1xuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZGVmYXVsdCA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLnNjb3BlID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5faW5pdGlhbFZhbHVlcy5zY29wZSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMuc2NvcGUgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2Zsb3dTdGVwU2NoZW1hID0gc2NoZW1hO1xuICB9XG5cbiAgX3JlZnJlc2goY2xvc2VTdGVwRm9ybSA9IHRydWUpIHtcbiAgICBpZiAoY2xvc2VTdGVwRm9ybSkge1xuICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvbik7XG4gIH1cblxuICBhc3luYyBfb25TZWxlY3RGbG93cyh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICB0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbigpO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhkZXRhaWwuZmxvd3MpO1xuICAgICAgdGhpcy5fb25EZXNpZ24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51KHsgZGV0YWlsOiB7IHBvbGljeSB9IH0pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRhdGlvbiA9PSBudWxsIHx8IHRoaXMuZG9jdW1lbnRhdGlvbi5pZCAhPT0gcG9saWN5LmlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQb2xpY3lJZCA9IHBvbGljeS5pZDtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCkpIHtcbiAgICAgICAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX21heGltaXplQm90dG9tVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2ZldGNoLWRvY3VtZW50YXRpb24nLCB7IHBvbGljeSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgX2ZldGNoRG9jdW1lbnRhdGlvbihwb2xpY3kpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudGF0aW9uID09IG51bGwgfHwgdGhpcy5kb2N1bWVudGF0aW9uLmlkICE9PSBwb2xpY3kuaWQpIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2ZldGNoLWRvY3VtZW50YXRpb24nLCB7IHBvbGljeSB9KTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuRG9jdW1lbnRhdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpIHtcbiAgICAgIHRoaXMuX2ZldGNoRG9jdW1lbnRhdGlvbih0aGlzLl9jdXJyZW50Rmxvd1N0ZXAucG9saWN5KTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21Gb3JtKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdndi1wb2xpY3ktc3R1ZGlvOmtlZXAtZG9jdW1lbnRhdGlvbi1jbG9zZScpO1xuICAgIHRoaXMuX29uT3BlbkRvY3VtZW50YXRpb24oKTtcbiAgfVxuXG4gIF9maW5kRmxvd0NvbGxlY3Rpb24oZmxvd0lkKSB7XG4gICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCkgIT0gbnVsbCk7XG4gICAgcmV0dXJuIHsgcGxhbiwgZmxvd3M6IHBsYW4gIT0gbnVsbCA/IHBsYW4uZmxvd3MgOiB0aGlzLmRlZmluZWRGbG93cyB9O1xuICB9XG5cbiAgX2ZpbmRGbG93QnlJZChmbG93SWQpIHtcbiAgICBsZXQgZmxvdyA9IHRoaXMuZGVmaW5lZEZsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpO1xuICAgIGlmIChmbG93ID09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBsYW5zRmxvd3MgPSB0aGlzLmRlZmluZWRQbGFucy5tYXAoKHBsYW4pID0+IHBsYW4uZmxvd3MpLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYy5jb25jYXQodmFsKSwgW10pO1xuICAgICAgZmxvdyA9IHBsYW5zRmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCk7XG4gICAgfVxuICAgIHJldHVybiBmbG93O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRGbG93KGluZGV4ID0gMCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvd0lkID0gdGhpcy5zZWxlY3RlZEZsb3dzSWRbaW5kZXhdO1xuICAgIHJldHVybiB0aGlzLl9maW5kRmxvd0J5SWQoc2VsZWN0ZWRGbG93SWQpO1xuICB9XG5cbiAgX29uVGFyZ2V0UG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9kcmFnUG9saWN5ID0gZGV0YWlsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGVwKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyA9IGRldGFpbC52YWx1ZXM7XG4gIH1cblxuICBfd3JpdGVGbG93U3RlcCh2YWx1ZXMpIHtcbiAgICBjb25zdCB7IGNvbW1vbkRlc2NyaXB0aW9uLCBjb21tb25Db25kaXRpb24sIC4uLmNvbmZpZ3VyYXRpb24gfSA9IHZhbHVlcztcbiAgICBpZiAoXG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5fbmV3IHx8XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5kZXNjcmlwdGlvbiAhPT0gY29tbW9uRGVzY3JpcHRpb24gfHxcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmRpdGlvbiAhPT0gY29tbW9uQ29uZGl0aW9uIHx8XG4gICAgICAhZGVlcEVxdWFsKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb24pXG4gICAgKSB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5mbG93Ll9pZCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXS5maW5kSW5kZXgoKHN0ZXApID0+IHN0ZXAuX2lkID09PSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQpO1xuXG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmRlc2NyaXB0aW9uID0gY29tbW9uRGVzY3JpcHRpb247XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmNvbmRpdGlvbiA9IGNvbW1vbkNvbmRpdGlvbjtcbiAgICAgIGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXVtwb3NpdGlvbl0uY29uZmlndXJhdGlvbiA9IGRlZXBDbG9uZShjb25maWd1cmF0aW9uKTtcbiAgICAgIGRlbGV0ZSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLl9uZXc7XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLl9kaXJ0eSA9IHRydWU7XG4gICAgICBmbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLmZsb3cgPSBmbG93O1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAgPSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vblN1Ym1pdEZsb3dTdGVwKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl93cml0ZUZsb3dTdGVwKGRldGFpbC52YWx1ZXMpO1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdFVwZGF0ZSgnX2RlZmluaXRpb24nKTtcbiAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoYykgPT4gYy5yZXF1ZXN0VXBkYXRlKCkpO1xuICB9XG5cbiAgX29uQ2FuY2VsRmxvdygpIHtcbiAgICB0aGlzLl9vbkRlc2lnbigpO1xuICB9XG5cbiAgX29uU3VibWl0Rmxvdyh7IGRldGFpbDogeyB2YWx1ZXMgfSB9KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coKTtcbiAgICBjb25zdCBfdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY3JlYXRlRmxvd0Zyb21TY2hlbWEoKSwgdmFsdWVzKTtcbiAgICBjb25zdCBzZWxlY3RlZEZsb3dVcGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc2VsZWN0ZWRGbG93LCBfdmFsdWVzKTtcbiAgICBpZiAoIWRlZXBFcXVhbChzZWxlY3RlZEZsb3csIHNlbGVjdGVkRmxvd1VwZGF0ZWQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHNlbGVjdGVkRmxvdywgc2VsZWN0ZWRGbG93VXBkYXRlZCwgeyBfZGlydHk6IHRydWUgfSk7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNhbmNlbEZsb3dNb2RlKCkge1xuICAgIHRoaXMuX29uRGVzaWduKCk7XG4gIH1cblxuICBfb25TdWJtaXRGbG93TW9kZSh7IGRldGFpbDogeyB2YWx1ZXMgfSB9KSB7XG4gICAgdGhpcy5fZGVmaW5pdGlvblsnZmxvdy1tb2RlJ10gPSB2YWx1ZXNbJ2Zsb3ctbW9kZSddIHx8ICdERUZBVUxUJztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgfVxuXG4gIF9vbkNoYW5nZVRhYih7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fY2hhbmdlVGFiKGRldGFpbC52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBfY2hhbmdlVGFiVmFsaWRhdG9yKHsgZnJvbSwgdG8gfSkge1xuICAgIGlmIChmcm9tID09PSAncHJvcGVydGllcycpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1wcm9wZXJ0aWVzJyk7XG4gICAgICBpZiAoY29tcG9uZW50LmRpcnR5KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY29uZmlybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZnJvbSA9PT0gJ3Jlc291cmNlcycpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1yZXNvdXJjZXMnKTtcbiAgICAgIGlmIChjb21wb25lbnQuZGlydHkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5jb25maXJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9jaGFuZ2VUYWIodGFiSWQpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnRhYklkID0gdGFiSWQ7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UtdGFiJywgdGhpcy50YWJJZCk7XG4gICAgfVxuICB9XG5cbiAgX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAoZmxvdywgeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2Ryb3BQb2xpY3kgPSBkZXRhaWw7XG4gICAgICB0aGlzLl9kcmFnUG9saWN5ID0gZGV0YWlsO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJGbG93RW1wdHlTdGF0ZShyZWFkb25seU1vZGUpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJlbXB0eVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgU2VsZWN0IGEgZmxvd1xuICAgICAgICAke3JlYWRvbmx5TW9kZSAhPT0gdHJ1ZVxuICAgICAgICAgID8gaHRtbGBvciA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQWRkRmxvd31cIiBvdXRsaW5lZCBpY29uPVwiY29kZTpwbHVzXCIgbGFyZ2U+ZGVzaWduIG5ldyBvbmU8L2d2LWJ1dHRvbj5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyRmxvdyhpbmRleCA9IDAsIGhhc0VtcHR5U3RhdGUgPSB0cnVlLCByZWFkb25seU1vZGUpIHtcbiAgICBjb25zdCBmbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coaW5kZXgpO1xuICAgIGlmIChmbG93KSB7XG4gICAgICBjb25zdCB7IHBsYW4gfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93Ll9pZCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFN0ZXBJZCA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcCA/IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCA6IG51bGw7XG4gICAgICByZXR1cm4gaHRtbGAgPGd2LWZsb3dcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAuaWQ9XCIke2Zsb3cuX2lkfVwiXG4gICAgICAgIC5mbG93PVwiJHtmbG93fVwiXG4gICAgICAgIC5wbGFuPVwiJHtwbGFufVwiXG4gICAgICAgIC5wb2xpY2llcz1cIiR7dGhpcy5wb2xpY2llc31cIlxuICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAuZHJhZ1BvbGljeT1cIiR7dGhpcy5fZHJhZ1BvbGljeX1cIlxuICAgICAgICAuZHJvcFBvbGljeT1cIiR7dGhpcy5fZHJvcFBvbGljeX1cIlxuICAgICAgICAuc2VsZWN0ZWRTdGVwSWQ9XCIke3NlbGVjdGVkU3RlcElkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgID9oYXMtcG9saWN5LWZpbHRlcj1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsfVwiXG4gICAgICAgIGZsb3dzLXRpdGxlPVwiJHt0aGlzLmZsb3dzVGl0bGV9XCJcbiAgICAgICAgQGd2LWZsb3c6ZHJhZy1zdGFydD1cIiR7dGhpcy5fb25EcmFnU3RhcnRGbG93U3RlcC5iaW5kKHRoaXMsIGZsb3cpfVwiXG4gICAgICAgIEBndi1mbG93OmVkaXQ9XCIke3RoaXMuX29uRWRpdEZsb3dTdGVwfVwiXG4gICAgICAgIEBndi1mbG93OmNoYW5nZS1zdGF0ZT1cIiR7dGhpcy5fb25DaGFuZ2VGbG93U3RlcFN0YXRlfVwiXG4gICAgICAgIEBndi1mbG93OmRyb3A9XCIke3RoaXMuX29uRHJvcFBvbGljeX1cIlxuICAgICAgICBAZ3YtZmxvdzpkZWxldGU9XCIke3RoaXMuX29uRGVsZXRlUG9saWN5fVwiXG4gICAgICA+PC9ndi1mbG93PmA7XG4gICAgfSBlbHNlIGlmIChoYXNFbXB0eVN0YXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRmxvd0VtcHR5U3RhdGUocmVhZG9ubHlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9vbkZldGNoUmVzb3VyY2VzKGV2ZW50KSB7XG4gICAgY29uc3QgeyBjdXJyZW50VGFyZ2V0LCByZWdleFR5cGVzIH0gPSBldmVudC5kZXRhaWw7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmaW5lZFJlc291cmNlc1xuICAgICAgLmZpbHRlcigocmVzb3VyY2UpID0+IHJlZ2V4VHlwZXMgPT0gbnVsbCB8fCBuZXcgUmVnRXhwKHJlZ2V4VHlwZXMpLnRlc3QocmVzb3VyY2UudHlwZSkpXG4gICAgICAubWFwKChyZXNvdXJjZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZVR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaWQgPT09IHJlc291cmNlLnR5cGUpO1xuICAgICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdndi1yb3cnKTtcbiAgICAgICAgY29uc3QgcGljdHVyZSA9IHJlc291cmNlVHlwZS5pY29uID8gcmVzb3VyY2VUeXBlLmljb24gOiBudWxsO1xuICAgICAgICByb3cuaXRlbSA9IHsgcGljdHVyZSwgbmFtZTogcmVzb3VyY2UubmFtZSB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IHJvdyxcbiAgICAgICAgICB2YWx1ZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgICBpZDogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIGN1cnJlbnRUYXJnZXQub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBfcmVuZGVyUG9saWN5KHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLl9mbG93U3RlcFNjaGVtYSAmJiB0aGlzLmRvY3VtZW50YXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxndi1yZXNpemFibGUtdmlld3MgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIG5vLW92ZXJmbG93PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJ0b3BcIj4ke3RoaXMuX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpfTwvZGl2PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJib3R0b21cIj5cbiAgICAgICAgICA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgLnRleHQ9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5jb250ZW50fVwiXG4gICAgICAgICAgICAuaW1hZ2U9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5pbWFnZX1cIlxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICBAZ3YtZG9jdW1lbnRhdGlvbjpjbG9zZT1cIiR7dGhpcy5fb25DbG9zZURvY3VtZW50YXRpb259XCJcbiAgICAgICAgICA+PC9ndi1kb2N1bWVudGF0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50YXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxndi1kb2N1bWVudGF0aW9uXG4gICAgICAgIC50ZXh0PVwiJHt0aGlzLmRvY3VtZW50YXRpb24uY29udGVudH1cIlxuICAgICAgICAuaW1hZ2U9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5pbWFnZX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgQGd2LWRvY3VtZW50YXRpb246Y2xvc2U9XCIke3RoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9ufVwiXG4gICAgICA+PC9ndi1kb2N1bWVudGF0aW9uPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbG93U3RlcFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX2dldEZsb3dTdGVwRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYCMke0ZMT1dfU1RFUF9GT1JNX0lEfWApO1xuICB9XG5cbiAgX29uUmVzZXRGbG93U3RlcCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXM7XG4gICAgICB0aGlzLl9nZXRGbG93U3RlcEZvcm0oKS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIF9nZW5lcmF0ZUZsb3dzSWQobGlzdCwgZm9yY2UgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUlkKCdmJywgbGlzdCwgZm9yY2UsIHRydWUpO1xuICB9XG5cbiAgX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbiwgZm9yY2UgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUlkKHBsYW4uaWQsIHBsYW4uZmxvd3MsIGZvcmNlLCB0cnVlKTtcbiAgfVxuXG4gIF9nZW5lcmF0ZUZsb3dTdGVwSWQoZmxvd0lkLCBmbG93S2V5LCBwb3NpdGlvbikge1xuICAgIHJldHVybiBgJHtmbG93SWR9XyR7Zmxvd0tleX1fJHtwb3NpdGlvbn1gO1xuICB9XG5cbiAgX2dlbmVyYXRlSWQocHJlZml4LCBsaXN0LCBmb3JjZSA9IGZhbHNlLCBpc0Zsb3cgPSBmYWxzZSkge1xuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gbGlzdC5tYXAoKGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IF9pZCA9IGAke3ByZWZpeH1fJHtpbmRleH1gO1xuICAgICAgICBpZiAoaXNGbG93KSB7XG4gICAgICAgICAgaWYgKGUucHJlKSB7XG4gICAgICAgICAgICBlLnByZS5mb3JFYWNoKChzdGVwLCBzdGVwSW5kZXgpID0+IChzdGVwLl9pZCA9IHRoaXMuX2dlbmVyYXRlRmxvd1N0ZXBJZChfaWQsICdwcmUnLCBzdGVwSW5kZXgpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlLnBvc3QpIHtcbiAgICAgICAgICAgIGUucG9zdC5mb3JFYWNoKChzdGVwLCBzdGVwSW5kZXgpID0+IChzdGVwLl9pZCA9IHRoaXMuX2dlbmVyYXRlRmxvd1N0ZXBJZChfaWQsICdwb3N0Jywgc3RlcEluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yY2UgfHwgZS5faWQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmUsIF9pZCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKSksXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1yZXNpemFibGUtdmlld3MnKSksXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRDaGlsZHJlbigpLm1hcCgoZSkgPT4gZS51cGRhdGVDb21wbGV0ZSkpO1xuICB9XG5cbiAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7XG4gICAgLy8gSnVzdCByZWZyZXNoIGd2LWZsb3cgY29tcG9uZW50c1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ19kcmFnUG9saWN5JykpIHtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuZHJhZ1BvbGljeSA9IHRoaXMuX2RyYWdQb2xpY3kpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX2Ryb3BQb2xpY3knKSkge1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKS5mb3JFYWNoKChmbG93KSA9PiAoZmxvdy5kcm9wUG9saWN5ID0gdGhpcy5fZHJvcFBvbGljeSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHVwZGF0ZWQocHJvcHMpIHtcbiAgICBpZiAocHJvcHMuaGFzKCdkb2N1bWVudGF0aW9uJykgJiYgdGhpcy5kb2N1bWVudGF0aW9uICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZEZsb3dzSWQubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5zZWxlY3RlZEZsb3dzSWRbMF1dKTtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRmxvd1N0ZXBGb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzIHx8IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5faW5pdGlhbFZhbHVlcztcblxuICAgIGNvbnN0IGdyb3VwcyA9IFt7IGl0ZW1zOiBbJ2NvbW1vbkRlc2NyaXB0aW9uJywgJ2NvbW1vbkNvbmRpdGlvbiddIH0sIHsgbmFtZTogaTE4bignZ3YtcG9saWN5LXN0dWRpby5wb2xpY3ktc2V0dGluZ3MnKSwgZGVmYXVsdDogdHJ1ZSB9XTtcbiAgICByZXR1cm4gaHRtbGAke2NhY2hlKFxuICAgICAgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgJiYgdGhpcy5fY3VycmVudEZsb3dTdGVwXG4gICAgICAgID8gaHRtbGA8ZGl2IGNsYXNzPVwiZmxvdy1zdGVwX19jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG93LXN0ZXBfX2Zvcm1cIj5cbiAgICAgICAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgICAgICAgLmlkPVwiJHtGTE9XX1NURVBfRk9STV9JRH1cIlxuICAgICAgICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuX2Zsb3dTdGVwU2NoZW1hfVwiXG4gICAgICAgICAgICAgICAgLmljb249XCJkZXNpZ246ZWRpdFwiXG4gICAgICAgICAgICAgICAgaGFzLWhlYWRlclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLW9uLXJlbmRlclxuICAgICAgICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgICAgICAgIC5kaXJ0eT1cIiR7dGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMgIT0gbnVsbH1cIlxuICAgICAgICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgICAgICAgIC5ncm91cHM9XCIke2dyb3Vwc31cIlxuICAgICAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpjaGFuZ2U9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0ZXB9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06cmVzZXQ9XCIke3RoaXMuX29uUmVzZXRGbG93U3RlcH1cIlxuICAgICAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpmZXRjaC1yZXNvdXJjZXM9XCIke3RoaXMuX29uRmV0Y2hSZXNvdXJjZXN9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06c3VibWl0PVwiJHt0aGlzLl9vblN1Ym1pdEZsb3dTdGVwfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IHNsb3Q9XCJ0aXRsZVwiIGNsYXNzPVwiZmxvdy1zdGVwX19mb3JtLXRpdGxlXCI+JHt0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICAgIHNsb3Q9XCJoZWFkZXItbGVmdFwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiZ2VuZXJhbDpjbG9zZVwiXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ2xvc2VGbG93U3RlcEZvcm19XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBzbG90PVwiaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cImhvbWU6Ym9va1wiXG4gICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZG9jdW1lbnRhdGlvbiAhPSBudWxsfVwiXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tRm9ybX1cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJPcGVuIGRvY3VtZW50YXRpb25cIlxuICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9ndi1zY2hlbWEtZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgOiAnJyxcbiAgICApfWA7XG4gIH1cblxuICBfb25DbG9zZURvY3VtZW50YXRpb24oKSB7XG4gICAgdGhpcy5kb2N1bWVudGF0aW9uID0gbnVsbDtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwID09IG51bGwpIHtcbiAgICAgIHRoaXMuX21heGltaXplVG9wVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ3YtcG9saWN5LXN0dWRpbzprZWVwLWRvY3VtZW50YXRpb24tY2xvc2UnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBfb25EZWxldGVGbG93KHsgZGV0YWlsIH0pIHtcbiAgICBjb25zdCBmbG93SWQgPSBkZXRhaWwuY29udGVudC5faWQ7XG4gICAgY29uc3QgeyBmbG93cyB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGZsb3dJZCk7XG4gICAgY29uc3QgZmxvdyA9IGZsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpO1xuICAgIHRoaXMuX2RlbGV0ZUZsb3coZmxvd3MsIGZsb3cpO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRGbG93cygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID8gdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA6IFtdO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRQbGFucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLnBsYW5zID8gdGhpcy5fZGVmaW5pdGlvbi5wbGFucyA6IFtdO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRSZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgPyB0aGlzLl9kZWZpbml0aW9uLnJlc291cmNlcyA6IFtdO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyA/IHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyA6IFtdO1xuICB9XG5cbiAgYXN5bmMgX29uRHVwbGljYXRlRmxvdyh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICBjb25zdCBmbG93SWQgPSBkZXRhaWwuY29udGVudC5faWQ7XG4gICAgICBjb25zdCB7IHBsYW4sIGZsb3dzIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvd0lkKTtcbiAgICAgIHRoaXMuX2FkZEZsb3coZmxvd3MsIHRoaXMuX2ZpbmRGbG93QnlJZChmbG93SWQpKTtcbiAgICAgIGlmIChwbGFuICE9IG51bGwpIHtcbiAgICAgICAgbGV0IHBsYW5JbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHAsIGkpID0+IHtcbiAgICAgICAgICBpZiAocC5pZCA9PT0gcGxhbi5pZCkge1xuICAgICAgICAgICAgcGxhbkluZGV4ID0gaTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBwbGFuLmZsb3dzID0gZmxvd3M7XG4gICAgICAgIHRoaXMuZGVmaW5lZFBsYW5zW3BsYW5JbmRleF0uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIHRydWUpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLmRlZmluZWRQbGFuc1twbGFuSW5kZXhdLmZsb3dzW2Zsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5fZGVmaW5pdGlvbi5mbG93c1t0aGlzLl9kZWZpbml0aW9uLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbmdlRmxvd1N0YXRlKHsgZGV0YWlsIH0pIHtcbiAgICBjb25zdCBmbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5jb250ZW50Ll9pZCk7XG4gICAgZmxvdy5lbmFibGVkID0gZGV0YWlsLmVuYWJsZWQ7XG4gICAgZmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBfb25BZGRGbG93UGxhbih7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgICAgdGhpcy5fYWRkRmxvdyh0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XS5mbG93cyk7XG4gICAgICB0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XS5mbG93cyA9IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQodGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0pO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3NbdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MubGVuZ3RoIC0gMV0uX2lkXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25BZGRGbG93KCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgdGhpcy5fYWRkRmxvdyh0aGlzLl9kZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLl9kZWZpbml0aW9uLmZsb3dzW3RoaXMuX2RlZmluaXRpb24uZmxvd3MubGVuZ3RoIC0gMV0uX2lkXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfYWRkRmxvdyhjb2xsZWN0aW9uLCBkdXBsaWNhdGUgPSBudWxsKSB7XG4gICAgY29uc3QgZmxvdyA9XG4gICAgICBkdXBsaWNhdGUgPT0gbnVsbFxuICAgICAgICA/IHRoaXMuX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKClcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi5kdXBsaWNhdGUsXG4gICAgICAgICAgICBfaWQ6IG51bGwsXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgaWQgdG8gYXZvaWQgaXNzdWUgd2l0aCBBTSB0aGF0IHBlcnNpc3RzIHRoZSBJRFxuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICBfZGlydHk6IHRydWUsXG4gICAgICAgICAgfTtcblxuICAgIGNvbGxlY3Rpb24ucHVzaChmbG93KTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG5cbiAgX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKCkge1xuICAgIGNvbnN0IG5ld0Zsb3cgPSB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHByZTogW10sXG4gICAgICBwb3N0OiBbXSxcbiAgICAgIF9kaXJ0eTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlKHRoaXMuZmxvd1NjaGVtYS5wcm9wZXJ0aWVzLCBuZXdGbG93KTtcbiAgfVxuXG4gIF9pbnN0YW50aWF0ZShwcm9wZXJ0aWVzRGVmaW5pdGlvbiwgaW5pdGlhdG9yID0ge30pIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHsgLi4uaW5pdGlhdG9yIH07XG5cbiAgICBpZiAocHJvcGVydGllc0RlZmluaXRpb24pIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BlcnRpZXNEZWZpbml0aW9uKSkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHByb3BlcnRpZXNEZWZpbml0aW9uW2tleV07XG5cbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IHRoaXMuX2luc3RhbnRpYXRlKGVudHJ5LnByb3BlcnRpZXMsIChpbml0aWF0b3IgPSB7fSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gZW50cnkuZGVmYXVsdDtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIF9kZWxldGVGbG93KGNvbGxlY3Rpb24sIGZsb3cpIHtcbiAgICBjb25zdCBpbmRleCA9IGNvbGxlY3Rpb24uaW5kZXhPZihmbG93KTtcbiAgICBjb2xsZWN0aW9uLnNwbGljZShpbmRleCwgMSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93cyA9IHRoaXMuc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoZmxvd0lkKSA9PiBmbG93SWQgIT09IGZsb3cuX2lkKTtcbiAgICBpZiAoc2VsZWN0ZWRGbG93cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3Moc2VsZWN0ZWRGbG93cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdEZpcnN0Rmxvdyh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fY2hhbmdlVGFiKCdkZXNpZ24nKTtcbiAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9maW5kRmxvd0luZGV4KGxpc3QsIGlkKSB7XG4gICAgbGV0IGluZGV4ID0gbnVsbDtcbiAgICBsaXN0LmZpbmQoKGYsIGkpID0+IHtcbiAgICAgIGlmIChmLl9pZCA9PT0gaWQpIHtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhc3luYyBfb25SZW9yZGVyRmxvd3MoeyBkZXRhaWw6IHsgcGxhbiB9IH0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgaWYgKHBsYW4gIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuZXdPcmRlciA9IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbiwgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbmRGbG93SW5kZXgocGxhbi5mbG93cywgZmxvd0lkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBuZXdPcmRlcltpbmRleF0uX2lkIDogZmxvd0lkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwbGFuLmZsb3dzID0gbmV3T3JkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdPcmRlciA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzLCB0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkLm1hcCgoZmxvd0lkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmluZEZsb3dJbmRleCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzLCBmbG93SWQpO1xuICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT0gbnVsbCA/IG5ld09yZGVyW2luZGV4XS5faWQgOiBmbG93SWQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSBuZXdPcmRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfb25TZWFyY2hQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5ID0gZGV0YWlsO1xuICB9XG5cbiAgX29uQ2xlYXJQb2xpY3koKSB7XG4gICAgdGhpcy5fc2VhcmNoUG9saWN5UXVlcnkgPSBudWxsO1xuICB9XG5cbiAgX29uU2VhcmNoRmxvd3MoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX3NlYXJjaEZsb3dRdWVyeSA9IGRldGFpbDtcbiAgfVxuXG4gIF9vbkNsZWFyRmxvd3MoKSB7XG4gICAgdGhpcy5fc2VhcmNoRmxvd1F1ZXJ5ID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIF9vblJlc2V0QWxsKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgdGhpcy5kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxEZWZpbml0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfZmlsdGVyTm90VmFsaWRTdGVwKHN0ZXApIHtcbiAgICByZXR1cm4gc3RlcC5fbmV3ICE9PSB0cnVlO1xuICB9XG5cbiAgX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKG8pIHtcbiAgICBjb25zdCBjb3B5ID0geyAuLi5vIH07XG4gICAgT2JqZWN0LmtleXMobylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ18nKSlcbiAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIGNvcHlba2V5XTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBjb3B5O1xuICB9XG5cbiAgX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtJyldXG4gICAgICAuZmlsdGVyKChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBmb3JtLmlzVmFsaWQoKTtcbiAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNWYWxpZDtcbiAgICAgIH0pXG4gICAgICAubWFwKChmb3JtKSA9PiBmb3JtLmNvbmZpcm0oKSk7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2d2LXByb3BlcnRpZXMnKTtcbiAgfVxuXG4gIGFzeW5jIF9jaGVja0N1cnJlbnRGbG93U3RlcCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgICBjb25zdCBjbG9zZVByb21pc2VzID0gdGhpcy5zZWxlY3RlZEZsb3dzSWRcbiAgICAgICAgLm1hcCgoZmxvd0lkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChmbG93SWQpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gWy4uLmZsb3cucHJlLCAuLi5mbG93LnBvc3RdLmZpbmQoKHN0ZXApID0+IHN0ZXAuX2lkID09PSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQpO1xuICAgICAgICAgIGlmIChjdXJyZW50U3RlcCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChwKSA9PiBwICE9PSBudWxsKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChjbG9zZVByb21pc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc2F2ZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgdGhpcy5faW5pdGlhbERlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvblNhdmVkKTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvblNhdmVkKTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb25TYXZlZCA9IG51bGw7XG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoZWNrQ3VycmVudEZsb3dTdGVwKCk7XG4gICAgICB0aGlzLmRlZmluZWRQbGFucy5mb3JFYWNoKChwbGFuKSA9PiB7XG4gICAgICAgIHBsYW4uZmxvd3MuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuX2RpcnR5ID0gZmFsc2UpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kZWZpbmVkRmxvd3MuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuX2RpcnR5ID0gZmFsc2UpKTtcbiAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgfVxuICB9XG5cbiAgX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpIHtcbiAgICAvLyBDb3B5IGRlZmluaXRpb24gYW5kIHJlbW92ZSBpbnZhbGlkIHN0ZXBcbiAgICAvLyBLZWVwIHByaXZhdGUgcHJvcGVydGllcyBsaWtlIF9pZCBhbmQgb3RoZXJzIHN0dWZmIHVzZWZ1bCBmb3IgcmVuZGVyXG4gICAgY29uc3QgZmxvd3MgPSB0aGlzLl9kZWZpbml0aW9uLmZsb3dzLm1hcCgoZmxvdykgPT4ge1xuICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgIHJldHVybiBmbG93O1xuICAgIH0pO1xuXG4gICAgbGV0IGRlZmluaXRpb24gPSB7IC4uLnRoaXMuX2RlZmluaXRpb24sIGZsb3dzIH07XG5cbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5wbGFucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwbGFucyA9IHRoaXMuX2RlZmluaXRpb24ucGxhbnMubWFwKChwbGFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGZsb3dzID0gcGxhbi5mbG93cy5tYXAoKGZsb3cpID0+IHtcbiAgICAgICAgICBmbG93LnByZSA9IGZsb3cucHJlLmZpbHRlcih0aGlzLl9maWx0ZXJOb3RWYWxpZFN0ZXApO1xuICAgICAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgICAgICByZXR1cm4gZmxvdztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IC4uLnBsYW4sIGZsb3dzIH07XG4gICAgICB9KTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHBsYW5zIH07XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgX2J1aWxkRGVmaW5pdGlvblRvU2VuZChkZWZpbml0aW9uVG9TYXZlKSB7XG4gICAgLy8gQ29weSBkZWZpbml0aW9uIGFuZCByZW1vdmUgYWxsIHByaXZhdGUgcHJvcGVydGllc1xuICAgIGNvbnN0IGZsb3dzID0gZGVmaW5pdGlvblRvU2F2ZS5mbG93cy5tYXAoKGYpID0+IHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyhmKTtcbiAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgcmV0dXJuIGZsb3c7XG4gICAgfSk7XG5cbiAgICBsZXQgZGVmaW5pdGlvbiA9IHsgLi4udGhpcy5fZGVmaW5pdGlvbiwgZmxvd3MgfTtcbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5wbGFucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwbGFucyA9IGRlZmluaXRpb25Ub1NhdmUucGxhbnMubWFwKChwbGFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGZsb3dzID0gcGxhbi5mbG93cy5tYXAoKGYpID0+IHtcbiAgICAgICAgICBjb25zdCBmbG93ID0gdGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMoZik7XG4gICAgICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgICAgIHJldHVybiBmbG93O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4ucGxhbiwgZmxvd3MgfTtcbiAgICAgIH0pO1xuICAgICAgZGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgcGxhbnMgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHByb3BlcnRpZXMgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHJlc291cmNlcyB9O1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgX29uU2F2ZUFsbCgpIHtcbiAgICBpZiAodGhpcy5oYXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmdldFByb3BlcnRpZXNFbGVtZW50KCkuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvblNhdmVkID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCk7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NlbmQodGhpcy5fZGVmaW5pdGlvblNhdmVkKTtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc2F2ZScsIHsgZGVmaW5pdGlvbiwgc2VydmljZXM6IHRoaXMuc2VydmljZXMgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3BvbGljeS1zdHVkaW9dIEVycm9yIG9uIHNhdmVgLCBlcnIpO1xuICAgICAgfSk7XG4gIH1cblxuICBfb25EZWJ1ZyhyZXF1ZXN0RXZlbnQpIHtcbiAgICBpZiAodGhpcy5oYXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmdldFByb3BlcnRpZXNFbGVtZW50KCkuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2VuZCh0aGlzLl9idWlsZERlZmluaXRpb25Ub1NhdmUoKSk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2RlYnVnJywgeyBkZWZpbml0aW9uLCBzZXJ2aWNlczogdGhpcy5zZXJ2aWNlcywgcmVxdWVzdDogcmVxdWVzdEV2ZW50LmRldGFpbC5yZXF1ZXN0IH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtwb2xpY3ktc3R1ZGlvXSBFcnJvciBvbiBkZWJ1Z2AsIGVycik7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZEZsb3dzKCkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKCdhcGknKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmaW5lZEZsb3dzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFBsYW5zKCkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKCdwbGFuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluZWRQbGFucztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfb25GaWx0ZXJGbG93cyh7IGRldGFpbCB9KSB7XG4gICAgaWYgKHRoaXMuX2Zsb3dGaWx0ZXIuaW5jbHVkZXMoZGV0YWlsLmlkKSkge1xuICAgICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mbG93RmlsdGVyID0gW2RldGFpbC5pZF07XG4gICAgfVxuICB9XG5cbiAgX2dldEZpbHRlcmVkUG9saWNpZXMoKSB7XG4gICAgaWYgKHRoaXMuX3BvbGljeUZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb2xpY2llcy5maWx0ZXIoKHBvbGljeSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChwb2xpY3kub25SZXF1ZXN0ICYmIHRoaXMuX3BvbGljeUZpbHRlci5pbmNsdWRlcygnb25SZXF1ZXN0JykpIHx8IChwb2xpY3kub25SZXNwb25zZSAmJiB0aGlzLl9wb2xpY3lGaWx0ZXIuaW5jbHVkZXMoJ29uUmVzcG9uc2UnKSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wb2xpY2llcztcbiAgfVxuXG4gIF9vbkZpbHRlclBvbGljaWVzKHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fcG9saWN5RmlsdGVyLmluY2x1ZGVzKGRldGFpbC5pZCkpIHtcbiAgICAgIHRoaXMuX3BvbGljeUZpbHRlciA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbZGV0YWlsLmlkXTtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRGVzaWduKHJlYWRvbmx5TW9kZSkge1xuICAgIHJldHVybiBodG1sYCA8ZGl2IGlkPVwiZGVzaWduXCIgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImRlc2lnblwiPlxuICAgICAgPGd2LXJlc2l6YWJsZS12aWV3cyBuby1vdmVyZmxvdz5cbiAgICAgICAgPGRpdiBzbG90PVwidG9wXCI+JHt0aGlzLl9yZW5kZXJGbG93KDAsIHRydWUsIHJlYWRvbmx5TW9kZSl9PC9kaXY+XG5cbiAgICAgICAgPGRpdiBzbG90PVwiYm90dG9tXCI+XG4gICAgICAgICAgJHt0aGlzLl9yZW5kZXJGbG93KDEsIGZhbHNlLCByZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlclBvbGljeShyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckZsb3dGb3JtKHJlYWRvbmx5TW9kZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9ndi1yZXNpemFibGUtdmlld3M+XG4gICAgICAke3JlYWRvbmx5TW9kZSAhPT0gdHJ1ZVxuICAgICAgICA/IGh0bWxgPGd2LXBvbGljeS1zdHVkaW8tbWVudVxuICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1tZW51XCJcbiAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgLnBvbGljaWVzPVwiJHt0aGlzLl9nZXRGaWx0ZXJlZFBvbGljaWVzKCl9XCJcbiAgICAgICAgICAgIC5zZWxlY3RlZElkcz1cIiR7W3RoaXMuX2N1cnJlbnRQb2xpY3lJZF19XCJcbiAgICAgICAgICAgIC5xdWVyeT1cIiR7dGhpcy5fc2VhcmNoUG9saWN5UXVlcnl9XCJcbiAgICAgICAgICAgID9oYXMtcG9saWN5LWZpbHRlcj1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsfVwiXG4gICAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTp0YXJnZXQtcG9saWN5PVwiJHt0aGlzLl9vblRhcmdldFBvbGljeX1cIlxuICAgICAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpmZXRjaC1kb2N1bWVudGF0aW9uPVwiJHt0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbU1lbnV9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZHJhZ2VuZC1wb2xpY3k9XCIke3RoaXMuX29uRHJhZ0VuZFBvbGljeX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cImhlYWRlclwiIGNsYXNzPVwic2VhcmNoLXBvbGljaWVzXCI+XG4gICAgICAgICAgICAgICR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyBodG1sYDxndi1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgICAgIC5vcHRpb25zPVwiJHt0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zfVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fcG9saWN5RmlsdGVyfVwiXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICAgIEBndi1vcHRpb246c2VsZWN0PVwiJHt0aGlzLl9vbkZpbHRlclBvbGljaWVzfVwiXG4gICAgICAgICAgICAgICAgICA+PC9ndi1vcHRpb24+YFxuICAgICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICAgIDxndi1pbnB1dFxuICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLXBvbGljeVwiXG4gICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgcG9saWNpZXMgKFNoaWZ0ICsgQ3RybCArIFNwYWNlKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICBAZ3YtaW5wdXQ6aW5wdXQ9XCIke3RoaXMuX29uU2VhcmNoUG9saWN5fVwiXG4gICAgICAgICAgICAgICAgQGd2LWlucHV0OmNsZWFyPVwiJHt0aGlzLl9vbkNsZWFyUG9saWN5fVwiXG4gICAgICAgICAgICAgID48L2d2LWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9ndi1wb2xpY3ktc3R1ZGlvLW1lbnU+YFxuICAgICAgICA6ICcnfVxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyRGVidWcoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmRlYnVnUmVzcG9uc2UgPyB0aGlzLmRlYnVnUmVzcG9uc2UucmVzcG9uc2UgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLmlzTG9hZGluZyA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlICYmIHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0ID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QucGF0aCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmRlYnVnUmVzcG9uc2UgJiYgdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QgPyB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdC5tZXRob2QgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGh0bWxgPGd2LWh0dHAtY2xpZW50XG4gICAgICBpZD1cImRlYnVnXCJcbiAgICAgIHNsb3Q9XCJjb250ZW50XCJcbiAgICAgIGNsYXNzPVwiZGVidWdcIlxuICAgICAgQGd2LWh0dHAtY2xpZW50OnNlbmQ9XCIke3RoaXMuX29uRGVidWd9XCJcbiAgICAgIC5yZXNwb25zZT1cIiR7cmVzcG9uc2V9XCJcbiAgICAgIC5wYXRoPVwiJHtwYXRofVwiXG4gICAgICAubWV0aG9kPVwiJHttZXRob2R9XCJcbiAgICAgID9sb2FkaW5nPVwiJHtpc0xvYWRpbmd9XCJcbiAgICA+XG4gICAgPC9ndi1odHRwLWNsaWVudD5gO1xuICB9XG5cbiAgX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25TY2hlbWEpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZXBDbG9uZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgICAgIHJldHVybiBodG1sYCA8ZGl2IGlkPVwic2V0dGluZ3NcIiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiYXBpLXNldHRpbmdzXCIgQGRyYWdvdmVyPVwiJHt0aGlzLl9vbkRlc2lnbn1cIj5cbiAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgLnNjaGVtYT1cIiR7dGhpcy5jb25maWd1cmF0aW9uU2NoZW1hfVwiXG4gICAgICAgICAgaWQ9XCJhcGktc2V0dGluZ3MtZm9ybVwiXG4gICAgICAgICAgLnZhbHVlcz1cIiR7dmFsdWVzfVwiXG4gICAgICAgICAgaGFzLWhlYWRlclxuICAgICAgICAgIGhhcy1mb290ZXJcbiAgICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2FuY2VsPVwiJHt0aGlzLl9vbkNhbmNlbEZsb3dNb2RlfVwiXG4gICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93TW9kZX1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHshdGhpcy5jb25maWd1cmF0aW9uSW5mb3JtYXRpb25cbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBpLXNldHRpbmdzLWluZm9ybWF0aW9uXCIgc2xvdD1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Z3YtaWNvbiBjbGFzcz1cImFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9faWNvblwiIHRpdGxlPVwiSW5mb1wiIHNoYXBlPVwiY29kZTppbmZvXCI+PC9ndi1pY29uPlxuICAgICAgICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3M9XCJhcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2Jsb2NrcXVvdGVcIj4ke3RoaXMuY29uZmlndXJhdGlvbkluZm9ybWF0aW9ufTwvYmxvY2txdW90ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgPC9ndi1zY2hlbWEtZm9ybT5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYGA7XG4gIH1cblxuICBfcmVuZGVyRmxvd0Zvcm0ocmVhZG9ubHlNb2RlKSB7XG4gICAgaWYgKHRoaXMuZmxvd1NjaGVtYSAmJiB0aGlzLl9mbG93U3RlcFNjaGVtYSA9PSBudWxsICYmIHRoaXMuZG9jdW1lbnRhdGlvbiA9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCk7XG4gICAgICBpZiAoZmxvdykge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBkZWVwQ2xvbmUoZmxvdyk7XG4gICAgICAgIHJldHVybiBodG1sYDxkaXYgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImZsb3ctc2V0dGluZ3NcIj5cbiAgICAgICAgICA8Z3Ytc2NoZW1hLWZvcm1cbiAgICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuZmxvd1NjaGVtYX1cIlxuICAgICAgICAgICAgaWQ9XCJzZXR0aW5ncy1mb3JtXCJcbiAgICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgICAgaGFzLWhlYWRlclxuICAgICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpjYW5jZWw9XCIke3RoaXMuX29uQ2FuY2VsRmxvd31cIlxuICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzbG90PVwidGl0bGVcIiBjbGFzcz1cImZsb3ctc3RlcF9fZm9ybS10aXRsZVwiPkZsb3cgY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX29uUmVzb3VyY2VzQ2hhbmdlKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLmRlZmluaXRpb24ucmVzb3VyY2VzID0gZGV0YWlsLnJlc291cmNlcztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgX29uUHJvcGVydGllc0NoYW5nZSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uLnByb3BlcnRpZXMgPSBkZXRhaWwucHJvcGVydGllcztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgX29uU2F2ZVByb3ZpZGVyKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLnNlcnZpY2VzWydkeW5hbWljLXByb3BlcnR5J10gPSBkZXRhaWwucHJvdmlkZXI7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5KHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHJlYWRvbmx5TW9kZSA9IHRoaXMuX2dldFJlYWRvbmx5TW9kZUZvckRlc2lnbigpO1xuXG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImJveFwiPlxuICAgICAgPGd2LXBvbGljeS1zdHVkaW8tbWVudVxuICAgICAgICBjbGFzcz1cImxlZnQtbWVudVwiXG4gICAgICAgIC5hcGktbmFtZT1cIiR7dGhpcy5fZGVmaW5pdGlvbi5uYW1lfVwiXG4gICAgICAgIC5mbG93cz1cIiR7dGhpcy5maWx0ZXJlZEZsb3dzfVwiXG4gICAgICAgIC5wbGFucz1cIiR7dGhpcy5maWx0ZXJlZFBsYW5zfVwiXG4gICAgICAgIC5zZWxlY3RlZElkcz1cIiR7dGhpcy5zZWxlY3RlZEZsb3dzSWR9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgID9zb3J0YWJsZT1cIiR7dGhpcy5zb3J0YWJsZSAmJiB0aGlzLnJlYWRvbmx5ICE9PSB0cnVlfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgICA/cmVhZG9ubHlQbGFucz1cIiR7dGhpcy5yZWFkb25seVBsYW5zfVwiXG4gICAgICAgIGZsb3dzLXRpdGxlPVwiJHt0aGlzLmZsb3dzVGl0bGV9XCJcbiAgICAgICAgLnF1ZXJ5PVwiJHt0aGlzLl9zZWFyY2hGbG93UXVlcnl9XCJcbiAgICAgICAgP2Nhbi1hZGQ9XCIke3RoaXMuY2FuQWRkICYmICF0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6cmVvcmRlci1mbG93cz1cIiR7dGhpcy5fb25SZW9yZGVyRmxvd3N9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpjaGFuZ2UtZmxvdy1zdGF0ZT1cIiR7dGhpcy5fb25DaGFuZ2VGbG93U3RhdGV9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTphZGQtZmxvdz1cIiR7dGhpcy5fb25BZGRGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6YWRkLWZsb3ctcGxhbj1cIiR7dGhpcy5fb25BZGRGbG93UGxhbn1cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmRlbGV0ZS1mbG93PVwiJHt0aGlzLl9vbkRlbGV0ZUZsb3d9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpkdXBsaWNhdGUtZmxvdz1cIiR7dGhpcy5fb25EdXBsaWNhdGVGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6c2VsZWN0LWZsb3dzPVwiJHt0aGlzLl9vblNlbGVjdEZsb3dzfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgc2xvdD1cImhlYWRlclwiIGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RoaXMuX2RlZmluaXRpb24ubmFtZX08L2Rpdj5cbiAgICAgICAgICAke3RoaXMuX2Zsb3dGaWx0ZXJPcHRpb25zICE9IG51bGxcbiAgICAgICAgICAgID8gaHRtbGA8Z3Ytb3B0aW9uXG4gICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX2Zsb3dGaWx0ZXJPcHRpb25zfVwiXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fZmxvd0ZpbHRlcn1cIlxuICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgQGd2LW9wdGlvbjpzZWxlY3Q9XCIke3RoaXMuX29uRmlsdGVyRmxvd3N9XCJcbiAgICAgICAgICAgICAgPjwvZ3Ytb3B0aW9uPmBcbiAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgPGd2LWlucHV0XG4gICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgIGlkPVwic2VhcmNoLWZsb3dcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgZmxvd3MgKEN0cmwgKyBTcGFjZSlcIlxuICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgQGd2LWlucHV0OmlucHV0PVwiJHt0aGlzLl9vblNlYXJjaEZsb3dzfVwiXG4gICAgICAgICAgICBAZ3YtaW5wdXQ6Y2xlYXI9XCIke3RoaXMuX29uQ2xlYXJGbG93c31cIlxuICAgICAgICAgID48L2d2LWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICAke3RoaXMucmVhZG9ubHkgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgIDxkaXYgc2xvdD1cImZvb3RlclwiIGNsYXNzPVwiZm9vdGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxhcmdlXCJcbiAgICAgICAgICAgICAgICAuZGlzYWJsZWQ9XCIkeyF0aGlzLmlzRGlydHkgfHwgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uU2F2ZUFsbH1cIlxuICAgICAgICAgICAgICAgID5TYXZlPC9ndi1idXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Z3YtYnV0dG9uIGxpbmsgLmRpc2FibGVkPVwiJHshdGhpcy5pc0RpcnR5IHx8IHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCIgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldEFsbH1cIlxuICAgICAgICAgICAgICAgID5SZXNldDwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICA6ICcnfVxuICAgICAgPC9ndi1wb2xpY3ktc3R1ZGlvLW1lbnU+XG5cbiAgICAgIDxndi10YWJzXG4gICAgICAgIC52YWx1ZT1cIiR7dGhpcy50YWJJZH1cIlxuICAgICAgICAub3B0aW9ucz1cIiR7dGhpcy5fdGFic31cIlxuICAgICAgICAuZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgQGd2LXRhYnM6Y2hhbmdlPVwiJHt0aGlzLl9vbkNoYW5nZVRhYn1cIlxuICAgICAgICAudmFsaWRhdG9yPVwiJHt0aGlzLl9jaGFuZ2VUYWJWYWxpZGF0b3IuYmluZCh0aGlzKX1cIlxuICAgICAgPlxuICAgICAgICAke3RoaXMuX3JlbmRlckRlc2lnbihyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtKHJlYWRvbmx5TW9kZSl9ICR7dGhpcy5fcmVuZGVyRGVidWcoKX1cbiAgICAgICAgPGd2LXByb3BlcnRpZXNcbiAgICAgICAgICBpZD1cInByb3BlcnRpZXNcIlxuICAgICAgICAgIHNsb3Q9XCJjb250ZW50XCJcbiAgICAgICAgICBjbGFzcz1cInByb3BlcnRpZXNcIlxuICAgICAgICAgIC5wcm92aWRlcj1cIiR7dGhpcy5zZXJ2aWNlc1snZHluYW1pYy1wcm9wZXJ0eSddfVwiXG4gICAgICAgICAgQGd2LXByb3BlcnRpZXM6Y2hhbmdlPVwiJHt0aGlzLl9vblByb3BlcnRpZXNDaGFuZ2V9XCJcbiAgICAgICAgICBAZ3YtcHJvcGVydGllczpzYXZlLXByb3ZpZGVyPVwiJHt0aGlzLl9vblNhdmVQcm92aWRlcn1cIlxuICAgICAgICAgIEBndi1wcm9wZXJ0aWVzOnN3aXRjaC1lbmNyeXB0ZWQ9XCIke3RoaXMuX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHl9XCJcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgIGVuY3J5cHRhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgLnByb3BlcnRpZXM9XCIke3RoaXMuZGVmaW5lZFByb3BlcnRpZXN9XCJcbiAgICAgICAgICAucHJvdmlkZXJzPVwiJHt0aGlzLnByb3BlcnR5UHJvdmlkZXJzfVwiXG4gICAgICAgICAgLmR5bmFtaWNQcm9wZXJ0eVNjaGVtYT1cIiR7dGhpcy5keW5hbWljUHJvcGVydHlTY2hlbWF9XCJcbiAgICAgICAgPjwvZ3YtcHJvcGVydGllcz5cbiAgICAgICAgPGd2LXJlc291cmNlc1xuICAgICAgICAgIGlkPVwicmVzb3VyY2VzXCJcbiAgICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZXNcIlxuICAgICAgICAgIEBndi1yZXNvdXJjZXM6Y2hhbmdlPVwiJHt0aGlzLl9vblJlc291cmNlc0NoYW5nZX1cIlxuICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgLnJlc291cmNlcz1cIiR7dGhpcy5kZWZpbmVkUmVzb3VyY2VzfVwiXG4gICAgICAgICAgLnR5cGVzPVwiJHt0aGlzLnJlc291cmNlVHlwZXN9XCJcbiAgICAgICAgPjwvZ3YtcmVzb3VyY2VzPlxuICAgICAgPC9ndi10YWJzPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBkZXNpZ24gdmlldyBzaG91bGQgYmUgaW4gcmVhZG9ubHkgbW9kZSBvciBub3RcbiAgICogSXQgaXMgaW4gcmVhZG9ubHkgbW9kZSBpZjpcbiAgICogIHRoZSByZWFkb25seSBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRydWVcbiAgICogIE9SXG4gICAqICB0aGUgbWFpbiBzZWxlY3RlZCBmbG93IGJlbG9uZ3MgdG8gYSBwbGFuIGFuZCB0aGUgcmVhZG9ubHktcGxhbnMgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqICBPUlxuICAgKiAgdGhlIHNlY29uZCBmbG93IGZvciBjb21wYXJpc29uIGJlbG9uZ3MgdG8gYSBwbGFuIGFuZCB0aGUgcmVhZG9ubHktcGxhbnMgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufCp8e3R5cGU6IEJvb2xlYW5Db25zdHJ1Y3Rvcn18e2F0dHJpYnV0ZTogc3RyaW5nLCB0eXBlOiBCb29sZWFuQ29uc3RydWN0b3J9fHt0eXBlOiAqfXx7YXR0cmlidXRlOiBzdHJpbmcsIHR5cGU6ICp9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJlYWRvbmx5TW9kZUZvckRlc2lnbigpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KDApO1xuICAgIGlmICghZmxvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGxhbjogZmxvd1BsYW4gfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93Ll9pZCk7XG4gICAgY29uc3QgcmVhZG9ubHlNb2RlID0gZmxvd1BsYW4gJiYgdGhpcy5yZWFkb25seVBsYW5zO1xuICAgIGlmIChyZWFkb25seU1vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVkRmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KDEpO1xuICAgIGlmICghY29tcGFyZWRGbG93KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwbGFuOiBjb21wYXJlZEZsb3dQbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oY29tcGFyZWRGbG93Ll9pZCk7XG4gICAgcmV0dXJuIGNvbXBhcmVkRmxvd1BsYW4gJiYgdGhpcy5yZWFkb25seVBsYW5zO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXBvbGljeS1zdHVkaW8nLCBHdlBvbGljeVN0dWRpbyk7XG4iXX0=