@ditojs/admin 2.9.0 → 2.9.1

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.
@@ -7587,18 +7587,19 @@ const Nu = L.component("DitoDraggable", {
7587
7587
  methods: {
7588
7588
  onStart(e) {
7589
7589
  var t, s, n;
7590
- this.isDragging = !0, (s = (t = this.options).onStart) == null || s.call(t, e), (n = this.mouseEvents) == null || n.remove();
7590
+ (s = (t = this.options).onStart) == null || s.call(t, e), this.isDragging = !0, (n = this.mouseEvents) == null || n.remove();
7591
7591
  },
7592
7592
  onEnd(e) {
7593
7593
  var t, s;
7594
- (s = (t = this.options).onEnd) == null || s.call(t, e), this.mouseEvents = this.domOn(this.$el, {
7594
+ (s = (t = this.options).onEnd) == null || s.call(t, e), this.mouseEvents = this.domOn(document, {
7595
7595
  mousedown: this.onMouse,
7596
7596
  mousemove: this.onMouse,
7597
7597
  mouseleave: this.onMouse
7598
7598
  });
7599
7599
  },
7600
7600
  onMouse() {
7601
- this.isDragging = !1, this.mouseEvents.remove(), this.mouseEvents = null;
7601
+ var e;
7602
+ this.isDragging = !1, (e = this.mouseEvents) == null || e.remove(), this.mouseEvents = null;
7602
7603
  }
7603
7604
  }
7604
7605
  }), Au = /* @__PURE__ */ w(Nu, [["render", qu]]);
@@ -10907,4 +10908,4 @@ function Jc(e, t) {
10907
10908
  export {
10908
10909
  Ep as default
10909
10910
  };
10910
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2FnZW50LmpzIiwiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy90cmlnZ2VyLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU3Bpbm5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9OYXZpZ2F0aW9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TaWRlYmFyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvcGF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9VcGxvYWRGaWxlLnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RyYWdnYWJsZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL0RpdG9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZURhdGUudnVlIiwiLi4vc3JjL3V0aWxzL3JvdXRlLmpzIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy9taXhpbnMvVGV4dE1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL2RpcmVjdGl2ZXMvcmVzaXplLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHVzZXItYWdlbnQgcGFyc2VyIHdhcyBsaWZ0ZWQgZnJvbSBQYXBlci5qczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXBlcmpzL3BhcGVyLmpzL2Jsb2IvY2MxNTY5Njc1MDAzNWFiMDBlMDBjNjRjN2M5NWRhYTJjODVlZmUwMS9zcmMvY29yZS9QYXBlclNjb3BlLmpzI0w3NS1MMTA3XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVzZXJBZ2VudCh1c2VyQWdlbnQgPSAnJykge1xuICBjb25zdCBhZ2VudCA9IHt9XG4gIC8vIFVzZSByZXBsYWNlKCkgdG8gZ2V0IGFsbCBtYXRjaGVzLCBhbmQgZGVhbCB3aXRoIENocm9tZS9XZWJraXQgb3ZlcmxhcDpcbiAgY29uc3QgdWEgPSB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBbb3NdID1cbiAgICAvKGlwaG9uZXxpcGFkfGxpbnV4OyBhbmRyb2lkfGRhcndpbnx3aW58bWFjfGxpbnV4fGZyZWVic2R8c3Vub3MpLy5leGVjKFxuICAgICAgdWFcbiAgICApIHx8IFtdXG4gIGNvbnN0IHBsYXRmb3JtID0gKFxuICAgIHtcbiAgICAgICdkYXJ3aW4nOiAnbWFjJyxcbiAgICAgICdpcGhvbmUnOiAnaW9zJyxcbiAgICAgICdpcGFkJzogJ2lvcycsXG4gICAgICAnbGludXg7IGFuZHJvaWQnOiAnYW5kcm9pZCdcbiAgICB9W29zXSB8fFxuICAgIG9zXG4gIClcbiAgaWYgKHBsYXRmb3JtKSB7XG4gICAgYWdlbnQucGxhdGZvcm0gPSBwbGF0Zm9ybVxuICAgIGFnZW50W3BsYXRmb3JtXSA9IHRydWVcbiAgfVxuICB1YS5yZXBsYWNlKFxuICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXx3ZWJraXR8ZmlyZWZveHxtc2llfHRyaWRlbnQpXFwvP1xccyooWy5cXGRdKykoPzouKnZlcnNpb25cXC8oWy5cXGRdKykpPyg/Oi4qcnY6dj8oWy5cXGRdKykpPy9nLFxuICAgIChtYXRjaCwgYnJvd3NlciwgdjEsIHYyLCBydikgPT4ge1xuICAgICAgLy8gRG8gbm90IHNldCBhZGRpdGlvbmFsIGJyb3dzZXJzIG9uY2UgY2hyb21lIGlzIGRldGVjdGVkLlxuICAgICAgaWYgKCFhZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHJ2IHx8IHYyIHx8IHYxXG4gICAgICAgIGlmICghYWdlbnQudmVyc2lvbiB8fCBicm93c2VyICE9PSAnc2FmYXJpJykge1xuICAgICAgICAgIC8vIFVzZSB0aGUgdmVyc2lvbiB3ZSBnZXQgZm9yIHdlYmtpdCBmb3IgU2FmYXJpLCB3aGljaCBpcyBhY3R1YWxseVxuICAgICAgICAgIC8vIFRoZSBTYWZhcmkgdmVyc2lvbiwgZS5nLiAxNi4wXG4gICAgICAgICAgYWdlbnQudmVyc2lvbiA9IHZlcnNpb25cbiAgICAgICAgICBhZ2VudC52ZXJzaW9uTnVtYmVyID0gcGFyc2VGbG9hdCh2ZXJzaW9uKVxuICAgICAgICB9XG4gICAgICAgIGFnZW50LmJyb3dzZXIgPSBicm93c2VyXG4gICAgICAgIGFnZW50W2Jyb3dzZXJdID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgKVxuICBpZiAoYWdlbnQuY2hyb21lKSB7XG4gICAgLy8gQ2FuJ3QgaGF2ZSBpdCBib3RoIHdheXMsIENocm9tZS5cbiAgICBkZWxldGUgYWdlbnQud2Via2l0XG4gIH1cbiAgcmV0dXJuIGFnZW50XG59XG4iLCJpbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IHBhcnNlVXNlckFnZW50IH0gZnJvbSAnLi91dGlscy9hZ2VudCdcblxuZXhwb3J0IGRlZmF1bHQgcmVhY3RpdmUoe1xuICB0aXRsZTogJycsXG4gIHJvdXRlQ29tcG9uZW50czogW10sXG4gIHVzZXI6IG51bGwsXG4gIGFnZW50OiBwYXJzZVVzZXJBZ2VudChuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnKSxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn0pXG4iLCJpbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbikge1xuICByZXR1cm4gZGF0YVBhdGhcbiAgICA/IGAke2RhdGFQYXRofS8ke3Rva2VufWBcbiAgICA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICBwYXRoPy5wb3AoKVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBuZXN0ZWQgPyBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSA6IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgaWYgKHBhdGgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCB0b2tlbi4gSWYgaXQncyBhIG51bWJlciwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW5cbiAgICAvLyBhcnJheSBhbmQgbmVlZCB0byByZW1vdmUgbW9yZSB0b2tlbnMgdW50aWwgd2UgbWVldCB0aGUgYWN0dWFsIHBhcmVudDpcbiAgICBsZXQgdG9rZW5cbiAgICBkbyB7XG4gICAgICB0b2tlbiA9IHBhdGgucG9wKClcbiAgICB9IHdoaWxlICh0b2tlbiAhPSBudWxsICYmIGlzSW50ZWdlcigrdG9rZW4pKVxuICAgIC8vIElmIHRoZSByZW1vdmVkIHRva2VuIGlzIHZhbGlkLCB3ZSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGF0YTpcbiAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhOYW1lKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIHJldHVybiB0b2tlbiA9PSBudWxsIHx8IGlzSW50ZWdlcigrdG9rZW4pID8gbnVsbCA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhJbmRleChkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICBjb25zdCBpbmRleCA9IHRva2VuID09IG51bGwgPyBudWxsIDogK3Rva2VuXG4gIHJldHVybiBpc0ludGVnZXIoaW5kZXgpID8gaW5kZXggOiBudWxsXG59XG5cbmxldCB0ZW1wb3JhcnlJZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZW1wb3JhcnlJZChkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGlkcyBhcmUgbWFya2VkIHdpdGggYSAnQCcgYXQgdGhlIGJlZ2lubmluZy5cbiAgZGF0YVtpZEtleV0gPSBgQCR7Kyt0ZW1wb3JhcnlJZH1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBvcmFyeUlkKGlkKSB7XG4gIHJldHVybiAvXkAvLnRlc3QoaWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7XG4gIGdldEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtLFxuICBnZXRJdGVtLFxuICBnZXRMYXN0RGF0YVBhdGhOYW1lLFxuICBnZXRMYXN0RGF0YVBhdGhJbmRleFxufSBmcm9tICcuL3V0aWxzL2RhdGEuanMnXG5cbmNvbnN0IHsgaGFzT3duUHJvcGVydHkgfSA9IE9iamVjdC5wcm90b3R5cGVcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KHRvUmF3KGNvbnRleHQpKVxuICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHxcbiAgICAgIG51bGxcbiAgICApXG4gICAgcmV0dXJuIGl0ZW0gIT09IHRoaXMuaXRlbSA/IGl0ZW0gOiBudWxsXG4gIH1cblxuICBnZXQgcm9vdEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncm9vdERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncHJvY2Vzc2VkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdChuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgaWYgKHBhcnNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsTm9kZSgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmlzTW91bnRlZCA/IHRoaXMuJGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBudWxsXG4gICAgICByZXR1cm4gbm9kZT8ubWF0Y2hlcygnLmRpdG8tbGFiZWwnKSA/IG5vZGUgOiBudWxsXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmc/XG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYXN5bmMgc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LnNjcm9sbEludG9WaWV3Py4oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uZm9jdXM/LigpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uYmx1cj8uKClcbiAgICB9LFxuXG4gICAgZ2V0Rm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVswXSA/PyB0aGlzXG4gICAgICByZXR1cm4gZWxlbWVudC4kZWwgPz8gZWxlbWVudFxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1c1NjaGVtYSgpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIGF3YWl0IHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIGF3YWl0IHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuYmx1ckVsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmJsdXIoKVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBwYXJzZSByZWN1cnNpb246XG4gICAgICAgICAgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucGFyc2VkVmFsdWUgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChpdGVtLCBnZXRJdGVtSWQgPSBudWxsKSB7XG4gIGNvbnN0IHJhdyA9IHRvUmF3KGl0ZW0pXG4gIGxldCBpZCA9IHVpZE1hcC5nZXQocmF3KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpZXdzKHVucmVzb2x2ZWRWaWV3cykge1xuICByZXR1cm4gcmVzb2x2ZVNjaGVtYXModW5yZXNvbHZlZFZpZXdzLCBhc3luYyAoc2NoZW1hLCB1bndyYXBNb2R1bGUpID0+IHtcbiAgICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlKVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgaXNNZW51KHNjaGVtYSkpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGEgbmFtZSBmb3Igc3ViLW1lbnVzIGZyb20gdGhlaXIgbGFiZWwgaWYgaXQncyBtaXNzaW5nLlxuICAgICAgLy8gTk9URTogVGhpcyBpcyBuZXZlciBhY3R1YWxseSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUsIGJ1dCB0aGV5IG5lZWRcbiAgICAgIC8vIGEgbmFtZSBieSB3aGljaCB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgcGFyZW50IG9iamVjdC5cbiAgICAgIHNjaGVtYS5uYW1lID0gY2FtZWxpemUoc2NoZW1hLmxhYmVsKVxuICAgICAgc2NoZW1hLml0ZW1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoc2NoZW1hLml0ZW1zKVxuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVmlld3Modmlld3MpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2aWV3cykucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHNjaGVtYV0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpIHtcbiAgLy8gUmVzb2x2ZXMgYXN5bmMgc2NoZW1hIGNvbXBvbmVudHMgYW5kIGFkZHMgRGl0b01peGluIGFuZCBUeXBlTWl4aW4gdG8gdGhlbS5cbiAgbGV0IHsgY29tcG9uZW50IH0gPSBzY2hlbWFcbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudCA9IGF3YWl0IHJlc29sdmVTY2hlbWEoY29tcG9uZW50LCB0cnVlKVxuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgd2FybmluZzogXCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZVxuICAgICAgLy8gb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBhbmQgc2hvdWxkXG4gICAgICAvLyBiZSBhdm9pZGVkIGJ5IG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIGBtYXJrUmF3YFwiOlxuICAgICAgc2NoZW1hLmNvbXBvbmVudCA9IG1hcmtSYXcoe1xuICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgIG1peGluczogW0RpdG9NaXhpbiwgVHlwZU1peGluLCAuLi4oY29tcG9uZW50Lm1peGlucyB8fCBbXSldXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcykge1xuICAvLyBgc2NoZW1hc2AgYXJlIG9mIHRoZSBzYW1lIHBvc3NpYmxlIGZvcm1zIGFzIHBhc3NlZCB0byBgZ2V0TmFtZWRTY2hlbWFzKClgXG4gIGF3YWl0IG1hcENvbmN1cnJlbnRseShPYmplY3QudmFsdWVzKHNjaGVtYXMgfHwge30pLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDBcbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGNvbnN0IHByb2Nlc3MgPSAoY29tcG9uZW50LCBuYW1lLCByZWxhdGl2ZUxldmVsKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHByb2Nlc3NTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIGFwaSxcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsICsgcmVsYXRpdmVMZXZlbFxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgcHJvY2VzcylcbiAgaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksIHByb2Nlc3MpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICBhcGksXG4gIHNjaGVtYSxcbiAgbmFtZSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAvLyBBbHNvIHByb2Nlc3MgbmVzdGVkIHBhbmVsIHNjaGVtYXMuXG4gICAgbWFwQ29uY3VycmVudGx5KFxuICAgICAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHBhbmVsLCByb3V0ZXMsIGxldmVsKVxuICAgICksXG4gICAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsXG4gICAgKVxuICBdKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSAnJykge1xuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGgpXG4gIGxldCBjaGlsZHJlbiA9IFtdXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbilcbiAgfSBlbHNlIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgIGNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpLm1hcChhc3luYyAoW25hbWUsIGl0ZW1dKSA9PlxuICAgICAgICBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgaXRlbSwgbmFtZSwgc2NoZW1hLmZ1bGxQYXRoKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdGg6IHNjaGVtYS5mdWxsUGF0aCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgbGV0IGRlZmF1bHRzID0gYXBpLmRlZmF1bHRzW3NjaGVtYS50eXBlXVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0cykpIHtcbiAgICAgIGRlZmF1bHRzID0gZGVmYXVsdHMoc2NoZW1hKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSBhc3NpZ25EZWVwbHkodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aCA9IG51bGwpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpbi5cbiAgc2NoZW1hLm5hbWUgPz89IG5hbWVcbiAgc2NoZW1hLnBhdGggPz89IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG4gIGlmIChmdWxsUGF0aCAhPT0gbnVsbCkge1xuICAgIHNjaGVtYS5mdWxsUGF0aCA9IGAke2Z1bGxQYXRofS8ke3NjaGVtYS5wYXRofWBcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIGZvcm0gPT5cbiAgICAgIHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgICApXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgZm9ybSA9IHtcbiAgICAgIHR5cGU6ICdmb3JtJyxcbiAgICAgIGNvbXBvbmVudHNcbiAgICB9XG4gIH1cblxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybShhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NUYWIoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNUYWIoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWIgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzUGFuZWwoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNQYW5lbChzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhbmVsIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpIHtcbiAgY29uc3QgeyB0YWJzLCBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAodGFicykge1xuICAgIHNjaGVtYS50YWJzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICB0YWJzLFxuICAgICAgdGFiID0+IHByb2Nlc3NUYWIoYXBpLCB0YWIpXG4gICAgKVxuICB9XG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICBwYW5lbHMsXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzUGFuZWwoYXBpLCBwYW5lbClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCh2aWV3U2NoZW1hLCBoYXNGb3JtU2NoZW1hKSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC5mbGF0dGVuZWRWaWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAhIWdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgaWQsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIGNvbnN0IHBhdGggPSBpc1NpbmdsZUNvbXBvbmVudFZpZXcodmlldylcbiAgICAgID8gdmlldy5mdWxsUGF0aFxuICAgICAgOiBgJHt2aWV3LmZ1bGxQYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGNvbnRleHQgJiYgZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zIH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGNvbnN0IHsgbmFtZSwgY29tcGFjdCwgY2xpcGJvYXJkLCB0YWJzLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgICBpZiAoY29tcG9uZW50cyB8fCB0YWJzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgZm9ybXMgdG8gc3RhbmQtYWxvbmUgZm9ybXMsIHN1cHBvcnRpbmcgYG5hbWVgLFxuICAgICAgLy8gYGNvbXBhY3RgLCBgY2xpcGJvYXJkYCwgYHRhYnNgIGFuZCBgY29tcG9uZW50c2Agc2V0dGluZ3MuXG4gICAgICBmb3JtID0geyB0eXBlOiAnZm9ybScsIG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoY29udGV4dCAmJiBpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEubmVzdGVkIHx8IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEsIGdlbmVyYXRlTGFiZWxzKSB7XG4gIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICByZXR1cm4gKFxuICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAhIWxhYmVsIHx8XG4gICAgICBnZW5lcmF0ZUxhYmVscyAmJiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZW5lcmF0ZUxhYmVsXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0U3BhY2luZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFNwYWNpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZhbHVlKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIHNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYsIGNvbnRleHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgIGRlZiA9IGRlZihjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gZGVmXG4gIH1cblxuICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhbHVlID0gdmFsdWUoY29udGV4dClcbiAgfVxuICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgc2NoZW1hLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSAmJiAoXG4gICAgICAhaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHx8XG4gICAgICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY29tcG9uZW50ID0+XG4gICAgICAgIHNob3VsZFJlbmRlclNjaGVtYShjb21wb25lbnQsIGNvbnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPVxuICAgIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8IHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKFxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhXG4gICAgICB9KVxuICAgIClcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSB0byB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2FsbGluZ1xuICAgICAgLy8gcGFyc2UoKTpcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gb2YgYGRhdGFbbmFtZV1gLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgcm9vdERhdGEsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhLCBzY2hlbWFPbmx5LCB0YXJnZXQgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGF0YVBhdGggPVxuICAgICAgICAgICAgICBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogaXRlbURhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1EYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjb21wb25lbnREYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGZvciAoY29uc3QgdGFiIG9mIGdldFRhYlNjaGVtYXMoc2NoZW1hKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKHNjaGVtYXMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPVxuICAgICAgICAgICAgICBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgKVxuICAgIDogaXNPYmplY3Qoc2NoZW1hcylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oZ2V0VHlwZShzY2hlbWFPclR5cGUpKSA/P1xuICAgIG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxFbnRyeShzY2hlbWEsIGRhdGFQYXRoID0gbnVsbCwgdGFiQ29tcG9uZW50ID0gbnVsbCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgZGF0YVBhdGggIT0gbnVsbCAmJiBzY2hlbWEubmFtZVxuICAgICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cmllcyhcbiAgcGFuZWxTY2hlbWFzLFxuICBkYXRhUGF0aCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZGF0YVBhdGggIT0gbnVsbCA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpIDogbnVsbCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcGFuZWxFbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYlNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnRhYnMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnBhbmVscyA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLnBhbmVscykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGggPSBudWxsLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgcmVzb3VyY2UgPSBpc09iamVjdChyZXNvdXJjZSlcbiAgICA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpXG4gICAgICA/IHsgLi4uZGVmcywgcGF0aDogcmVzb3VyY2UgfVxuICAgICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgICAgLi4ucGlja0J5KFxuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKSxcbiAgICAgICAgaWQ6IGAke2lkfWBcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgZXF1YWxzLFxuICBsYWJlbGl6ZSxcbiAgaHlwaGVuYXRlLFxuICBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQge1xuICBmbGF0dGVuVmlld3MsXG4gIGdldFNjaGVtYVZhbHVlLFxuICBzaG91bGRSZW5kZXJTY2hlbWFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICBjb25zdCBzZWxmID0gKCkgPT4gdGhpc1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogc2VsZixcbiAgICAgICAgICAkZGF0YUNvbXBvbmVudDogc2VsZlxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW5WaWV3cyh0aGlzLnZpZXdzKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kcmVmcy5yb290XG4gICAgfSxcblxuICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICBwYXJlbnRDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Q29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0b3JlXG4gICAgfSxcblxuICAgIHJlbW92ZUNoaWxkU3RvcmUoa2V5LCBpbmRleCkge1xuICAgICAgLy8gR0V0IHRoZSBjaGlsZC1zdG9yZSBmaXJzdCwgc28gdGhhdCBpbmRpY2VzIGNhbiBiZSB0cmFuc2ZlcnJlZCBvdmVyXG4gICAgICAvLyB0ZW1wb3JhcnkgaWQgY2hhbmdlcyBkdXJpbmcgcGVyc2lzdGVuY2UuXG4gICAgICB0aGlzLmdldENoaWxkU3RvcmUoa2V5LCBpbmRleClcbiAgICAgIHRoaXMucmVtb3ZlU3RvcmUoa2V5KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgc2NoZW1hID0gdGhpcy5zY2hlbWEsXG4gICAgICAgIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrID0gdHJ1ZVxuICAgICAgfSA9IHt9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBkZWZhdWx0OiBpc0Z1bmN0aW9uKGRlZikgPyAoKSA9PiBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgaW50ZXJuYWwgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvblxuICAgICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgbmV4dFVpZCA9IDBcbiIsIi8vIEEgbWluaS1yZXBsaWNhdGlvbiBvZiB2dWUncyBpbnRlcm5hbCBgcmVzb2x2ZU1lcmdlZE9wdGlvbnMoKWAgYnV0IG9ubHlcbi8vIGhhbmRsaW5nIG91ciBvd24gYWRkZWQgb3B0aW9ucyBwcm9wZXJ0aWVzIGFuZCBtZXJnaW5nIHRoZW0gZWFybHkgaW5zdGVhZFxuLy8gb2YgbGF6aWx5LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMob3B0aW9ucykge1xuICBjb25zdCB7IG1peGlucyB9ID0gb3B0aW9uc1xuICByZXR1cm4gbWl4aW5zIHx8IG9wdGlvbnMuZXh0ZW5kc1xuICAgID8gbWVyZ2VPcHRpb25zKFxuICAgICAgICB7IC4uLm9wdGlvbnMgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIDogb3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tKSB7XG4gIGlmIChmcm9tLmV4dGVuZHMpIHtcbiAgICBtZXJnZU9wdGlvbnModG8sIGZyb20uZXh0ZW5kcylcbiAgfVxuICBpZiAoZnJvbS5taXhpbnMpIHtcbiAgICBmb3IgKGNvbnN0IG1peGluIG9mIGZyb20ubWl4aW5zKSB7XG4gICAgICBtZXJnZU9wdGlvbnModG8sIG1peGluKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBkaXRvT3B0aW9uS2V5cykge1xuICAgIGlmIChrZXkgaW4gZnJvbSkge1xuICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuY29uc3QgZGl0b09wdGlvbktleXMgPSBbXG4gICdkZWZhdWx0VmFsdWUnLFxuICAnZGVmYXVsdE5lc3RlZCcsXG4gICdkZWZhdWx0VmlzaWJsZScsXG4gICdnZW5lcmF0ZUxhYmVsJyxcbiAgJ2V4Y2x1ZGVWYWx1ZScsXG4gICdpZ25vcmVNaXNzaW5nVmFsdWUnLFxuICAnb21pdFNwYWNpbmcnLFxuICAnZm9ybWF0VmFsdWUnLFxuICAncGFyc2VWYWx1ZScsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICB3aGlsZSAoKHBvc2l0aW9uID09PSBudWxsIHx8IHBvcyA8PSBwb3NpdGlvbikgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHBvcyArPSBwYXJ0c1tpbmRleCsrXT8ubGVuZ3RoID8/IDBcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHBvcywgaW5kZXggfVxuICB9XG5cbiAgLy8gVGltZSBzdGFydHMgYXQgaW5kZXggNiwgZHVlIHRvIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGRhdGUuXG4gIGNvbnN0IG9mZnNldCA9ICFkYXRlID8gZ2V0UG9zaXRpb24obnVsbCwgNikucG9zaXRpb24gOiAwXG4gIHBvc2l0aW9uICs9IG9mZnNldFxuXG4gIGxldCB7IGluZGV4IH0gPSBnZXRQb3NpdGlvbihwb3NpdGlvbilcblxuICBjb25zdCBpc1VTID0gbG9jYWxlID09PSAnZW4tVVMnXG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICBpc1VTID8gJ21vbnRoJyA6ICdkYXknLFxuICAgIG51bGwsXG4gICAgaXNVUyA/ICdkYXknIDogJ21vbnRoJyxcbiAgICBudWxsLFxuICAgICd5ZWFyJyxcbiAgICBudWxsLFxuICAgICdob3VyJyxcbiAgICBudWxsLFxuICAgICdtaW51dGUnLFxuICAgIG51bGwsXG4gICAgJ3NlY29uZCcsXG4gICAgbnVsbCxcbiAgICAnbWlsbGlzZWNvbmQnXG4gIF1cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAodmFsdWVzW2luZGV4XSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRQb3NpdGlvbihudWxsLCBpbmRleCkucG9zaXRpb24gLSBvZmZzZXRcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFydHNbaW5kZXhdLmxlbmd0aFxuICAgICAgcmV0dXJuIHsgbmFtZTogdmFsdWVzW2luZGV4XSwgc3RhcnQsIGVuZCB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSA9IHRydWUsIHRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IHN0cmluZz8uc3BsaXQoLyhbXFxzLiw6L10rKS8pIHx8IFtdXG4gIGlmICghZGF0ZSkge1xuICAgIC8vIEFkZCBkdW1teSBkYXRlIHBhcnRzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYSB0aW1lLW9ubHkgZGF0ZS5cbiAgICBwYXJ0cy51bnNoaWZ0KCcxJywgJy4nLCAnMScsICcuJywgJzIwMDAnLCAnICcpXG4gIH1cbiAgaWYgKCF0aW1lICYmIHBhcnRzLmxlbmd0aCA+IDUpIHtcbiAgICBwYXJ0cy5sZW5ndGggPSA1XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pIHtcbiAgY29uc3QgdmFsdWUgPSArbW9udGhcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgLSAxXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtb250aC50cmltKCkudG9Mb3dlckNhc2UoKVxuICBpZiAobWF0Y2gubGVuZ3RoIDwgMykgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvcnRGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgY29uc3QgbG9uZ0Zvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpLCAxKVxuICAgIGlmIChcbiAgICAgIHNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpIHx8XG4gICAgICBsb25nRm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkYXRlLnN0YXRlICE9PSAnZGlzYWJsZWQnICYmIHNlbGVjdERhdGUoZGF0ZS5kYXRlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyhcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVzY3JpYmVEYXRlLCBhbHRlckRhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzLCB1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGUoZGVzY3JpYmVEYXRlKGRhdGUpLCB0cnVlKVxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JylcbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0sIHRydWUpXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0sIHRydWUpXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKFxuICAgICAgZGF0ZSxcbiAgICAgIHsgeWVhciwgbW9udGgsIGRheSB9ID0geyB5ZWFyOiB0cnVlLCBtb250aDogdHJ1ZSwgZGF5OiB0cnVlIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlID0gdGhpcy5jdXJyZW50TW9kZSwgdXBkYXRlID0gZmFsc2UgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KG5vdylcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldHMsIGV2ZW50cykge1xuICB0YXJnZXRzID1cbiAgICB0YXJnZXRzIGluc3RhbmNlb2YgTm9kZUxpc3RcbiAgICAgID8gQXJyYXkuZnJvbSh0YXJnZXRzKVxuICAgICAgOiBhc0FycmF5KHRhcmdldHMpXG5cbiAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFdmVudHMoLi4uZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXZlbnQucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50Py5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGNvbXBvbmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyhjb21wb25lbnQudGFyZ2V0KVxuICAgID8gY29tcG9uZW50LiRyZWZzW2NvbXBvbmVudC50YXJnZXRdXG4gICAgOiBjb21wb25lbnQudGFyZ2V0XG4gIHJldHVybiB0YXJnZXQ/LiRlbCA/PyB0YXJnZXRcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwiYGRpdG8tJHt0cmFuc2l0aW9ufWBcIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzLCBjb21iaW5lRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcbiAgICAgIGZvY3VzRXZlbnRzOiBudWxsLFxuICAgICAgY2xvc2VFdmVudHM6IG51bGwsXG4gICAgICBwb3B1cEV2ZW50czogbnVsbCxcbiAgICAgIGJsdXJUaW1lcjogbnVsbCxcbiAgICAgIG1vdXNlTGVhdmVUaW1lcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH0sXG5cbiAgICB0cmlnZ2VyVGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vblNob3dQb3B1cCh0bykpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy50cmlnZ2VyVGFyZ2V0Py5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyXG4gICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YXJnZXQgPT09ICdwb3B1cCcgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBhZGRGb2N1c0V2ZW50cyhwYXJlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGxldCBpbnB1dFxuXG4gICAgICByZXR1cm4gY29tYmluZUV2ZW50cyhcbiAgICAgICAgYWRkRXZlbnRzKHRhcmdldHMsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIGFsbG93IGNsaWNrZWQgaW5wdXRzIHRvIGdyYWIgZm9jdXNcbiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy4kcmVmcy5wb3B1cC5tYXRjaGVzKCc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICBhZGRFdmVudHMocGFyZW50LCB7XG4gICAgICAgICAgbW91c2Vkb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJy5kaXRvLWJ1dHRvbi1jbGVhcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdGhpcy4kcmVmcy50cmlnZ2VyXG4gICAgICAgICAgICAgIC8vIE1hcmsgdHJpZ2dlciBpbnB1dCBhcyByZWFkb25seSBzbyBpdCBjYW4ndCBsb29zZSBmb2N1cyB3aGlsZVxuICAgICAgICAgICAgICAvLyB1c2VyIGRvZXMgb3RoZXIgbW91c2UtYWN0aXZpdGllcyBpbiBwb3B1cC5cbiAgICAgICAgICAgICAgaW5wdXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICAgICAgICAgIGlmIChpbnB1dCAmJiAhaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICd0cnVlJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIG90aGVyIGV2ZW50cyB0byB1cGRhdGUgaW5wdXQgYmVmb3JlIGl0XG4gICAgICAgICAgICAgIC8vIGJlY29tZXMgZWRpdGFibGUgYW5kIHN0aWxsIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvblNob3dQb3B1cChzaG93KSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy4kcmVmcy5wb3B1cClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2Nzcyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1pbnB1dCg6Y2xhc3M9XCJjbGFzc2VzXCIpXG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLmNsYXNzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dFxuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oXG4gIDpjbGFzcz1ge1xuICAgIFsnZGl0by1pY29uLS0nICsgbmFtZV06IHRydWUsXG4gICAgJ2RpdG8taWNvbi0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9YFxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLS0jeyRuYW1lfSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1pY29uIHtcbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQgJiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAkYm9yZGVyLXdpZHRoO1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHdpZHRoOiAyZW07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGNvbG9yOiAkY29sb3ItZ3JleTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIEBhdC1yb290IC5kaXRvLWlucHV0OmZvY3VzLXdpdGhpbiAmIHtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQsIGVuZCB9KSB7XG4gIGlmIChpbnB1dD8uc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBpbnB1dC5mb2N1cygpXG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAmJiAnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0XG4gICAgPyB7IHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmQgfVxuICAgIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICAgIEBzZWxlY3Q9XCJzaG93UG9wdXAgPSBmYWxzZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGUsXG4gICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dCk/LnN0YXJ0XG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCAmJiAhdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7IGNhbGVuZGFyIH0gPSB0aGlzLiRyZWZzXG4gICAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IG1vZGUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChwb3NpdGlvbikgfHwge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbW9kZSAmJlxuICAgICAgICAgICAgICBjYWxlbmRhci5uYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlLCB1cGRhdGU6IHRydWUgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogOGVtO1xuICB9XG59XG5cbi5kaXRvLWRhdGUtcGlja2VyLXBvcHVwIHtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuPC9zdHlsZT5cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2xvY2tcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIocmVmPVwiaG91clwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKHJlZj1cIm1pbnV0ZVwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKHJlZj1cInNlY29uZFwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IGFsdGVyRGF0ZSwgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgZGF0ZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlnbm9yZU5leHRDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZm9jdXNlZCAmJlxuICAgICAgICAhdGhpcy5pZ25vcmVOZXh0Q2hhbmdlICYmXG4gICAgICAgIHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgIH1cbiAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IGZhbHNlXG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChzbW9vdGgpIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IChcbiAgICAgICAgICAgIHRhcmdldC5zY3JvbGxIZWlnaHQgL1xuICAgICAgICAgICAgLy8gRmlyc3QgYW5kIGxhc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW4uXG4gICAgICAgICAgICAodGFyZ2V0LmNoaWxkRWxlbWVudENvdW50ICsgNilcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpXG4gICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXQuc2Nyb2xsVG9wIC0gdG9wKVxuICAgICAgICAgIHRhcmdldC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBiZWhhdmlvcjogc21vb3RoICYmIGRpc3RhbmNlIDwgMTAwID8gJ3Ntb290aCcgOiAnYXV0bydcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHNlbGVjdGlvbi5zdGFydCkgfHwge31cbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXSArIHN0ZXBcbiAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLiRyZWZzW25hbWVdLmNoaWxkRWxlbWVudENvdW50XG4gICAgICAgICAgICAgIHRoaXNbbmFtZV0gPVxuICAgICAgICAgICAgICAgIHZhbHVlIDwgMFxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZSArIGNvdW50XG4gICAgICAgICAgICAgICAgICA6IHZhbHVlID49IGNvdW50XG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUgLSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmQpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gaW5wdXRcbiAgICAgICAgbGV0IHBvcyA9IHNlbGVjdGlvbi5zdGFydFxuXG4gICAgICAgIGNvbnN0IGlzRGlnaXQgPSBjaGFyID0+ICFpc05hTihwYXJzZUludChjaGFyLCAxMCkpXG5cbiAgICAgICAgaWYgKGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBpZiAoaXNEaWdpdChldmVudC5rZXkpICYmIHBvcyA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOicgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSkgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MrK1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIG5leHQgZGlnaXQgc28gdGhlIGV2ZW50IG92ZXJyaWRlcyBpdCBpbnN0ZWFkIG9mIGluc2VydGluZ1xuICAgICAgICAgICAgLy8gbmV3IGNoYXJzLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmIChcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyArIDFdKSB8fFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykubGVuZ3RoXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBsZW5ndGgpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKVxuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwb3MgPT09IDEgfHxcbiAgICAgICAgICAgIFsnICcsICc6J10uaW5jbHVkZXModmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBvcyA9PT0gdmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcy0tXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgICgodmFsdWVbcG9zIC0gMV0gPz8gJycpICsgJzAwJykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmXG4gICAgICAgICAgICAgICFpc0RpZ2l0KCt2YWx1ZVtwb3MgKyAxXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHJlbW92aW5nIHRoZSBmaXJzdCBvZiB0d28gZGlnaXRzLCByZXBsYWNlIHdpdGggMFxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHBvcykgKyAnMCcgKyB2YWx1ZS5zbGljZShwb3MpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogNmVtO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbWF4LXdpZHRoOiAxNjBweDtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuXG4kdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHg7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci13aWR0aDogMCAxcHggMDtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgfVxuXG4gIHVsIHtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICBwYWRkaW5nOiAwIDE3cHggMCAwO1xuICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcblxuICAgICYgPiBsaSB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbiAgICAgIH1cblxuICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICYuc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihyZWY9XCJwaWNrZXJcIilcbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5uZXIoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgICBEYXRlUGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dEYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgVGltZVBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93VGltZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQsIERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2xvc2VkTW9kZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdE9wdGlvbnM6IGZvcm1hdCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0IH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWVcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dC5pbnB1dFxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGFzc2lnbkRlZXBseShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGZvcm1hdDogKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA9PlxuICAgICAgICAgICAgICB0eXBlID09PSAnbGl0ZXJhbCcgJiYgL1xcYmF0XFxiLy50ZXN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gJywgJ1xuICAgICAgICAgICAgICAgIDogdGhpcy5mb3JtYXQ/LmRhdGU/LmZvcm1hdD8uKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA/PyB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5mb3JtYXRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdGltZUluZGV4KCkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3VycmVudFRleHRcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0ZXh0Lm1hdGNoKC8oW1xcU10rXFxzKikkLyk/LlsxXVxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAtIHRpbWUubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgaWYgKHRvZ2dsZSAmJiAodGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51cGRhdGVQb3B1cHMoKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlKGV2ZW50KVxuICAgICAgdGhpcy4kcmVmc1ttb2RlXS5vbktleURvd24oZXZlbnQpXG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBtb2RlXG4gICAgICB9IGVsc2UgaWYgKG1vZGUgIT09IHRoaXMuY2xvc2VkTW9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcyhtb2RlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNb2RlKGV2ZW50ID0gbnVsbCkge1xuICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICBjb25zdCB7IGhvcjogc3RlcCB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIHJldHVybiB0aGlzLnRpbWVJbmRleCA9PT0gbnVsbCB8fCBzdGFydCArIHN0ZXAgPCB0aGlzLnRpbWVJbmRleFxuICAgICAgICA/ICdkYXRlJ1xuICAgICAgICA6ICd0aW1lJ1xuICAgIH0sXG5cbiAgICB1cGRhdGVQb3B1cHMobW9kZSA9IHRoaXMuZ2V0TW9kZSgpKSB7XG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnNob3dEYXRlID0gbW9kZSA9PT0gJ2RhdGUnXG4gICAgICB0aGlzLnNob3dUaW1lID0gbW9kZSA9PT0gJ3RpbWUnXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJl9faW5wdXQge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBtaW4td2lkdGg6IDEyZW07XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlcixcbiAgLmRpdG8tdGltZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZVxuICAgICkgMFxuICAgIHwgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9ICh0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9ucztcbiAgICAgIH1cblxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWNoZWNrZWQnOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVMZXZlbCgpIHtcbiAgICAgIGxldCBsZXZlbCA9IDBcbiAgICAgIGxldCByb3V0ZUNvbXBvbmVudCA9IHRoaXNcbiAgICAgIHdoaWxlICgocm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICBjb25zdCB7IHBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGVtcGxhdGVQYXRoXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5zbGljZSgwLCB0ZW1wbGF0ZVBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBjcmVhdGVGb2N1c1RyYXAgfSBmcm9tICdmb2N1cy10cmFwJztcbmltcG9ydCB7IHVucmVmRWxlbWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBgJHtzZXR0aW5ncy53aWR0aH1weGAgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICBnZW5lcmF0ZUxhYmVsc1xuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlRm9jdXNUcmFwIH0sXG4gIGVtaXRzOiBbJ3JlbW92ZSddLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHNldHRpbmdzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlhbG9nJyxcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBmb2N1c1RyYXBPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICBmYWxsYmFja0ZvY3VzOiAoKSA9PiB0aGlzLiRyZWZzLmRpYWxvZyxcbiAgICAgICAgb25EZWFjdGl2YXRlOiB0aGlzLmNhbmNlbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmICgodGhpcy5oYXNDYW5jZWwgfHwgIXRoaXMuaGFzQnV0dG9ucykgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW1vdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdyZW1vdmUnKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAvLyBXaGVuIGNhbmNlbGxpbmcsIHJlc29sdmUgYXMgYHVuZGVmaW5lZGAgc28gd2UgY2FuIGhhdmUgZGlhbG9nc1xuICAgICAgLy8gcmV0dXJuaW5nIG51bGwgYXMgYSBkZWZpbmVkIHZhbHVlIGFzIHdlbGwuXG4gICAgICB0aGlzLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuY2FuY2VsKClcbiAgICB9LFxuXG4gICAgb25Nb3VzZVVwKCkge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY2xpY2tUb0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgZGlzcGxheTogZmxleDtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRpYWxvZztcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLy8gVE9ETzogYCZfX2lubmVyYFxuICBmb3JtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgsIDQ4MHB4KTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IC0ycHggcmdiYSgyNywgMzMsIDU4LCAwLjQpO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kaWFsb2ctbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cztcblxuICBmb3JtIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWZyb20sXG4uZGl0by1kaWFsb2ctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdChcbiAgOmRhdGEtYWdlbnQtYnJvd3Nlcj1cImFwcFN0YXRlLmFnZW50LmJyb3dzZXJcIlxuICA6ZGF0YS1hZ2VudC1wbGF0Zm9ybT1cImFwcFN0YXRlLmFnZW50LnBsYXRmb3JtXCJcbiAgOmRhdGEtYWdlbnQtdmVyc2lvbj1cImFwcFN0YXRlLmFnZW50LnZlcnNpb25OdW1iZXJcIlxuKVxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uKG5hbWU9XCJkaXRvLWRyYWdcIilcbiAgICAuZGl0by1kcmFnLW92ZXJsYXkoXG4gICAgICB2LWlmPVwiaXNEcmFnZ2luZ0ZpbGVzXCJcbiAgICApXG4gIFRyYW5zaXRpb25Hcm91cChuYW1lPVwiZGl0by1kaWFsb2dcIilcbiAgICBEaXRvRGlhbG9nKFxuICAgICAgdi1mb3I9XCIoZGlhbG9nLCBrZXkpIGluIGRpYWxvZ3NcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6Y29tcG9uZW50cz1cImRpYWxvZy5jb21wb25lbnRzXCJcbiAgICAgIDpidXR0b25zPVwiZGlhbG9nLmJ1dHRvbnNcIlxuICAgICAgOnByb21pc2U9XCJkaWFsb2cucHJvbWlzZVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZy5kYXRhXCJcbiAgICAgIDpzZXR0aW5ncz1cImRpYWxvZy5zZXR0aW5nc1wiXG4gICAgICBAcmVtb3ZlPVwicmVtb3ZlRGlhbG9nKGtleSlcIlxuICAgIClcbiAgRGl0b05hdmlnYXRpb25cbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtcmVzaXplPVwib25SZXNpemVQYWdlXCJcbiAgICA6Y2xhc3M9XCJwYWdlQ2xhc3Nlc1wiXG4gIClcbiAgICBEaXRvSGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgIFJvdXRlclZpZXdcbiAgRGl0b1NpZGViYXJcbiAgICBEaXRvQWNjb3VudChcbiAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICApXG4gICAgYS5kaXRvLWxvZ2luKFxuICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgIClcbiAgICAgIHNwYW4gTG9naW5cbiAgLmRpdG8tZmlsbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlbGVnYXRlIGFzIHRpcHB5RGVsZWdhdGUgfSBmcm9tICd0aXBweS5qcydcbmltcG9ydCB7IGFzQXJyYXksIG1hcENvbmN1cnJlbnRseSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogJycsXG4gICAgICBvbkNyZWF0ZShpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGluc3RhbmNlLnJlZmVyZW5jZS5kYXRhc2V0LmluZm8pXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEcmFnQW5kRHJvcCgpIHtcbiAgICAgIC8vIFRoaXMgY29kZSBvbmx5IGhhcHBlbnMgdGhlIHZpc3VhbCBlZmZlY3RzIGFyb3VuZCBkcmFnZ2luZyBhbmQgZHJvcHBpbmdcbiAgICAgIC8vIGZpbGVzIGludG8gYSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudC4gVGhlIGFjdHVhbCB1cGxvYWRpbmcgaXNcbiAgICAgIC8vIGhhbmRsZWQgYnkgdGhlIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50IGl0c2VsZi5cblxuICAgICAgbGV0IGRyYWdDb3VudCA9IDBcbiAgICAgIGxldCB1cGxvYWRzID0gW11cblxuICAgICAgY29uc3QgdG9nZ2xlRHJvcFRhcmdldENsYXNzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdXBsb2FkIG9mIHVwbG9hZHMpIHtcbiAgICAgICAgICB1cGxvYWRcbiAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgLmNsYXNzTGlzdC50b2dnbGUoJ2RpdG8tZHJvcC10YXJnZXQnLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgIHVwbG9hZHMgPSBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldERyYWdnaW5nRmlsZXMgPSBlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZXMgPSBlbmFibGVkXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdG9nZ2xlRHJvcFRhcmdldENsYXNzKHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MoZmFsc2UpLCAxNTApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBkcmFnZW50ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHVwbG9hZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGl0by11cGxvYWQnKVxuICAgICAgICAgICAgY29uc3QgaGFzVXBsb2FkcyA9IHVwbG9hZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBoYXNVcGxvYWRzID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoaGFzVXBsb2Fkcykge1xuICAgICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkcmFnQ291bnQrK1xuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdsZWF2ZTogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudC0tXG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnb3ZlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyb3AgPSBldmVudC50YXJnZXQuY2xvc2VzdChcbiAgICAgICAgICAgICAgJy5kaXRvLWNvbnRhaW5lcjpoYXMoLmRpdG8tdXBsb2FkKSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gY2FuRHJvcCA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKCFjYW5Ecm9wKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJvcDogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudCA9IDBcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuYXBpLFxuICAgICAgICAgICAgeyB0eXBlOiAnZGlhbG9nJywgY29tcG9uZW50cyB9LFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBjbGljayBldmVudCBpcyBhZGRlZCBpbiBEaXRvRGlhbG9nLmJ1dHRvblNjaGVtYXMoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB0ZXh0OiAnTG9naW4nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVWaWV3cyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlcy5mbGF0KClcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9LFxuXG4gICAgb25SZXNpemVQYWdlKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1wYWdlIHtcbiAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aH07XG4gIC0tbWF4LXBhZ2Utd2lkdGg6IGNhbGModmFyKC0tbWF4LWNvbnRlbnQtd2lkdGgpICsgMiAqICN7JGNvbnRlbnQtcGFkZGluZ30pO1xuXG4gIGZsZXg6IDAgMSB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIG1pbi13aWR0aDogMCU7XG4gIG1heC13aWR0aDogdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLy8gRm9yIC5kaXRvLWhlYWRlciBmdWxsLXdpZHRoIGJhY2tncm91bmQuXG5cbiAgJi0td2lkZSB7XG4gICAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aC13aWRlfTtcbiAgfVxufVxuXG4uZGl0by1maWxsIHtcbiAgZmxleDogMTtcblxuICAuZGl0by1oZWFkZXIge1xuICAgIHNwYW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tYWNjb3VudCxcbi5kaXRvLWxvZ2luIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1kcmFnLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG59XG5cbi5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgLS1zaGFkb3ctYWxwaGE6IDAuMjU7XG5cbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheSArIDE7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgdmFyKC0tc2hhZG93LWFscGhhKSkpO1xufVxuXG4uZGl0by1kcmFnLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRyYWctbGVhdmUtYWN0aXZlIHtcbiAgJGR1cmF0aW9uOiAwLjE1cztcblxuICB0cmFuc2l0aW9uOiBvcGFjaXR5ICRkdXJhdGlvbiwgYmFja2Ryb3AtZmlsdGVyICRkdXJhdGlvbjtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIHRyYW5zaXRpb246IGZpbHRlciAkZHVyYXRpb247XG4gIH1cbn1cblxuLmRpdG8tZHJhZy1lbnRlci1mcm9tLFxuLmRpdG8tZHJhZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwKTtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIC0tc2hhZG93LWFscGhhOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tbWVudShcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiB3aWR0aCA/IGAke3dpZHRofXB4YCA6IG51bGwgfVwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwiaXRlbSBpbiBpdGVtc1wiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoaXRlbSlcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6aHJlZj1cImdldEl0ZW1IcmVmKGl0ZW0pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51LWxpbmsnKVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrSXRlbShpdGVtKVwiXG4gICAgICApIHt7IGdldExhYmVsKGl0ZW0pIH19XG4gICAgICBEaXRvTWVudShcbiAgICAgICAgdi1pZj1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUnKVwiXG4gICAgICAgIDppdGVtcz1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6cGF0aD1cImdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTWVudScsIHtcbiAgcHJvcHM6IHtcbiAgICBpdGVtczoge1xuICAgICAgdHlwZTogW09iamVjdCwgQXJyYXldLFxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICB9LFxuICAgIHBhdGg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAwXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtQ2xhc3MoaXRlbSwgc3ViTWVudUNsYXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3ViTWVudUNsYXNzXTogISFpdGVtLml0ZW1zLFxuICAgICAgICAnZGl0by1hY3RpdmUnOiB0aGlzLmlzQWN0aXZlSXRlbShpdGVtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtUGF0aChpdGVtLCBmaXJzdENoaWxkKSB7XG4gICAgICBjb25zdCBwYXRoID0gaXRlbS5wYXRoID8gYCR7dGhpcy5wYXRofS8ke2l0ZW0ucGF0aH1gIDogbnVsbFxuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgcGF0aCAmJiBpdGVtLml0ZW1zXG4gICAgICAgID8gYCR7cGF0aH0ke3RoaXMuZ2V0SXRlbVBhdGgoT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKVswXSwgZmFsc2UpfWBcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1IcmVmKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICByZXR1cm4gcGF0aCA/IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpLmhyZWYgOiBudWxsXG4gICAgfSxcblxuICAgIGlzQWN0aXZlSXRlbShpdGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLiRyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5nZXRJdGVtUGF0aChpdGVtLCBmYWxzZSkpIHx8XG4gICAgICAgIGl0ZW0uaXRlbXMgJiYgT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKS5zb21lKHRoaXMuaXNBY3RpdmVJdGVtKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvbkNsaWNrSXRlbShpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gICRpdGVtLWhlaWdodDogJG1lbnUtZm9udC1zaXplICsgMiAqICRtZW51LXBhZGRpbmctdmVyO1xuXG4gIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZTtcbiAgcGFkZGluZzogMCAkbWVudS1zcGFjaW5nO1xuXG4gIGxpIHtcbiAgICAmOmhhcyguZGl0by1zdWItbWVudTpub3QoLmRpdG8tYWN0aXZlKSkge1xuICAgICAgLy8gUG9wLW91dCBzdWItbWVudXMgb24gaG92ZXI6XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgICAgICAgIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS13aWR0aCkgKyAyICogJG1lbnUtc3BhY2luZykpXG4gICAgICAgICAgICB0cmFuc2xhdGVZKC0kaXRlbS1oZWlnaHQpO1xuXG4gICAgICAgICAgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgLmRpdG8tbGluayB7XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCB0byBub3QgbG9vc2UgdGhlIGhvdmVyIHdoZW4gbW92aW5nIG92ZXIgaXQuXG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IC0yICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIHdpZHRoOiAyICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIGhlaWdodDogJGl0ZW0taGVpZ2h0O1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAuZGl0by1zdWItbWVudS1saW5rLFxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXJnaW4tdG9wOiAkbWVudS1zcGFjaW5nO1xuXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGFscGhhOiAtMC4zKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbilcbiAgLy8tIFRPRE86IENvbnZlcnQgdG8gQkVNXG4gIC52LXB1bHNlLnYtcHVsc2UxKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTFdXCIpXG4gIC52LXB1bHNlLnYtcHVsc2UyKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTJdXCIpXG4gIC52LXB1bHNlLnYtcHVsc2UzKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTNdXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBvbmx5IGNsYXNzZXNcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgd2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICAgIG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICAgIGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXkge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIFJvdXRlckxpbmsuZGl0by1icmVhZGNydW1iKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp0bz1cImNvbXBvbmVudC5wYXRoXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgLy8tIFRlbGVwb3J0IHRhcmdldCBmb3IgYC5kaXRvLXNjaGVtYS1oZWFkZXJgOlxuICAuZGl0by1oZWFkZXJfX3RlbGVwb3J0XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9TcGlubmVyIGZyb20gJy4vRGl0b1NwaW5uZXIudnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9IZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgRGl0b1NwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayB0byBzZXQgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBEaXRvU3Bpbm5lci5cbiAgICAvLyBQYXNzIHRoZW0gb24gdGhyb3VnaCB0aGUgdGVtcGxhdGUgaW5zdGVhZCFcbiAgICBjb25zdCB7IHByb3BzIH0gPSBEaXRvU3Bpbm5lclxuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWhlYWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRoZWFkZXItZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmOjphZnRlciB7XG4gICAgLy8gU2V0IHRoZSBmdWxsLXdpZHRoIGhlYWRlciBiYWNrZ3JvdW5kIHRvIHRoZSBoZWFkZXIgY29sb3IuXG4gICAgY29udGVudDogJyc7XG4gICAgaW5zZXQ6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyYWlsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgaGVpZ2h0OiAzZW07XG5cbiAgICB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgJGFuZ2xlOiAzM2RlZztcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHNwYW4ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMXB4O1xuICAgICAgICBoZWlnaHQ6IDAuNzVlbTtcbiAgICAgICAgcmlnaHQ6IC0wLjI1ZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNwaW5uZXIge1xuICAgIG1hcmdpbi10b3A6ICRoZWFkZXItcGFkZGluZy12ZXI7XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJl9fdGVsZXBvcnQge1xuICAgIC8vIEFsaWduIHRoZSB0ZWxlcG9ydGVkIHNjaGVtYSBoZWFkZXJzIG9uIHRvcCBvZiB0byB0aGUgaGVhZGVyIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBwYWRkaW5nOiAwICRoZWFkZXItcGFkZGluZy1ob3I7XG4gICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC8vIC4uLmJ1dCBtb3ZlIHRoZW0gdG8gdGhlIGNoaWxkcmVuLlxuICAgID4gKiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW5hdmlnYXRpb24uZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsodG89XCIvXCIpIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIERpdG9NZW51LmRpdG8tc2Nyb2xsKDppdGVtcz1cInZpZXdzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTmF2aWdhdGlvbicsIHt9KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbmF2aWdhdGlvbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIGZsZXg6IDAgMCBtaW4tY29udGVudDtcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuXG4gIGgxIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgLmRpdG8tbGluayB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuY2xhc3MpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLnN0eWxlKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICAuZGl0by1sYWJlbF9faW5uZXIoXG4gICAgdi1pZj1cInRleHQgfHwgcHJlZml4ZXMubGVuZ3RoID4gMCB8fCBzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3ByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoXG4gICAgICB2LWlmPVwidGV4dFwiXG4gICAgICA6Zm9yPVwiZGF0YVBhdGhcIlxuICAgICAgdi1odG1sPVwidGV4dFwiXG4gICAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3N1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgLmRpdG8taW5mbyhcbiAgICAgIHYtaWY9XCJpbmZvXCJcbiAgICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTGFiZWwnLCB7XG4gIGVtaXRzOiBbJ29wZW4nXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGluZm86IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8geyBvbkNsaWNrOiB0aGlzLm9uQ2xpY2sgfSA6IHt9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZy1oYWxmOyAvLyBXaGVuIGlubGluZWQuXG5cbiAgJjpoYXMoLmRpdG8tc2NoZW1hLWhlYWRlcikge1xuICAgIC8vIFRoZSBjb250YWluZXIncyBsYWJlbCBpcyB1c2VkIGFzIHRlbGVwb3J0IGZvciBhIG5lc3RlZCBzZWN0aW9uIG9yIG9iamVjdFxuICAgIC8vIGxhYmVsLiBIaWRlIGAmX19pbm5lcmAsIGFzIGl0IGlzIGJlIGR1cGxpY2F0ZWQgaW5zaWRlIHRoZSBuZXN0ZWQgbGFiZWwuXG4gICAgPiAjeyRzZWxmfV9faW5uZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmOm5vdCg6aGFzKCsgLmRpdG8tdGFicykpIHtcbiAgICAvLyBUYWtlIGZ1bGwgd2lkdGggYnV0IG9ubHkgaWYgdGhlcmUgYXJlbid0IGFsc28gdGFicyB0byBiZSBjZW50ZXJlZC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBsYWJlbCxcbiAgJl9fcHJlZml4LFxuICAmX19zdWZmaXgge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gICZfX3ByZWZpeCArIGxhYmVsLFxuICBsYWJlbCArICZfX3N1ZmZpeCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci4gQnV0IHdlIGNhbiBvbmx5XG4gICAgLy8gZG8gc28gaWYgdGhlcmUgaXMndCBhbHNvIGEgY2hldnJvbiBvciBvdGhlciBVWCBlbGVtZW50cyBiZXNpZGVzIGl0LlxuICAgICY6aGFzKD4gI3skc2VsZn1fX2lubmVyOm9ubHktY2hpbGQpIHtcbiAgICAgIGZsZXg6IDE7IC8vIFdoZW4gaW4gYC5kaXRvLXNjaGVtYS1oZWFkZXJgLlxuXG4gICAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8taW5mbyB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMzVlbTtcbiAgfVxufVxuXG5hLmRpdG8tbGFiZWwge1xuICAmOmhvdmVyIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyO1xuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0XG4gICAgLy8gbGF5b3V0cyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWNvbXBhY3Qge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgPiAuZGl0by1jb250YWluZXI6bm90KC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwpIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSxcbiAgZ2V0SXRlbUlkLFxuICBnZXRJdGVtVWlkLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1TdG9yZShzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGRTdG9yZSh0aGlzLmdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSwgaW5kZXgpXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8gLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgICBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgIDsoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgIShpdGVtTGFiZWwgaW4gaXRlbSkpIHtcbiAgICAgICAgLy8gYGl0ZW1MYWJlbGAgY2FuIGJlIGJvdGggYSBrZXksIG9yIHNpbXBseSBhIGxhYmVsLlxuICAgICAgICB0ZXh0ID0gaXRlbUxhYmVsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICA/ICh0ZXh0ID0gYCR7aW5kZXggKyAxfWApXG4gICAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdFxuICAgICAgICA/IHRleHQgfHwgcHJlZml4IHx8IHN1ZmZpeFxuICAgICAgICAgID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBzY3JvbGxhYmxlLCAnZGl0by1zY2hlbWEtLW9wZW4nOiBvcGVuZWQgfVwiXG4gIHYtYmluZD1cIiRhdHRyc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJoYXNIZWFkZXJcIlxuICAgIDp0bz1cImhlYWRlclRlbGVwb3J0XCJcbiAgICA6ZGlzYWJsZWQ9XCIhaGVhZGVyVGVsZXBvcnRcIlxuICApXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgRGl0b0xhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIClcbiAgICAgIFRyYW5zaXRpb24oXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgbmFtZT1cImRpdG8tZmFkZVwiXG4gICAgICApXG4gICAgICAgIERpdG9UYWJzKFxuICAgICAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgKVxuICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgdi1pZj1cImNsaXBib2FyZFwiXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnQoXG4gICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgIHJlZj1cImNvbnRlbnRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwnOiBzY3JvbGxhYmxlIH1cIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgKVxuICAgICAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fdGFiKFxuICAgICAgICAgICAgdi1pZj1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgICAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX21haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZVwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgKVxuICBzbG90KFxuICAgIHYtaWY9XCJpbmxpbmVkICYmICFoYXNIZWFkZXJcIlxuICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICApXG5zbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbE5vZGU6IHsgdHlwZTogSFRNTEVsZW1lbnQsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjdXJyZW50VGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUYWIgfHwgdGhpcy5kZWZhdWx0VGFiIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWxlY3RlZFRhYikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSBzZWxlY3RlZFRhYlxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBjb25zdCB0YWJzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpLmZpbHRlcih0aGlzLnNob3VsZFJlbmRlclNjaGVtYSlcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGRlZmF1bHRUYWIgfSBvZiB0YWJzKSB7XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYikgPyBkZWZhdWx0VGFiKHRoaXMuY29udGV4dCkgOiBkZWZhdWx0VGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJzdCA/Pz0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmQgPz8gbnVsbFxuICAgIH0sXG5cbiAgICBoYXNIZWFkZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCB8fCB0aGlzLmhhc1RhYnMgfHwgISF0aGlzLmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBoZWFkZXJUZWxlcG9ydCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm9vdFNjaGVtYVxuICAgICAgICA/ICcuZGl0by1oZWFkZXJfX3RlbGVwb3J0J1xuICAgICAgICA6IHRoaXMubGFiZWxOb2RlXG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnREYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1Jvb3RTY2hlbWEoKSB7XG4gICAgICAvLyBTZWN0aW9uIHNjaGVtYXMgY2FuIHNoYXJlIHRoZSByb290IGRhdGFQYXRoIGJ1dCB0aGV5IGFyZSBpbmxpbmVkLlxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVBhdGggPT09ICcnICYmICF0aGlzLmlubGluZWRcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0Lmhhc0Vycm9ycylcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5UYWJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzVGFicyAmJiB0aGlzLmlzUm9vdFNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHdpZGU6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICckcm91dGUuaGFzaCc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcihoYXNoKSB7XG4gICAgICAgIC8vIFJlbWVtYmVyIHRoZSBjdXJyZW50IHBhdGggdG8ga25vdyBpZiB0YWIgY2hhbmdlcyBzaG91bGQgc3RpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCwgYnV0IHJlbW92ZSB0aGUgdHJhaWxpbmcgYC9jcmVhdGVgIG9yIGAvOmlkYCBmcm9tIGl0IHNvIHRoYXRcbiAgICAgICAgLy8gdGFicyBpbmZvcm1zIHRoYXQgc3RheSBvcGVuIGFmdGVyIGNyZWF0aW9uIHN0aWxsIHdvcmsuXG4gICAgICAgIGlmICh0aGlzLmhhc01haW5UYWJzKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgICdzZWxlY3RlZFRhYicoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIGlmICh0aGlzLmhhc01haW5UYWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKHRoaXMudGFic1tzZWxlY3RlZFRhYl0pXG4gICAgICAgICAgPyBzZWxlY3RlZFRhYlxuICAgICAgICAgIDogdGhpcy5kZWZhdWx0VGFiXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiID8gYCMke3RhYn1gIDogbnVsbCB9KVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzRXJyb3JzKSB7XG4gICAgICAgIHRoaXMucmVwb3NpdGlvbkVycm9ycygpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gJ2RpdG8tcGFnZS0td2lkZSdcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ29wZW4nLCB7IGNvbnRleHQ6IHsgb3BlbiB9IH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBvcGVuIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IG9wZW5cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBvc2l0aW9uRXJyb3JzKCkge1xuICAgICAgLy8gRmlyZSBhIGZha2Ugc2Nyb2xsIGV2ZW50IHRvIGZvcmNlIHRoZSByZXBvc2l0aW9uaW5nIG9mIGVycm9yIHRvb2x0aXBzLFxuICAgICAgLy8gYXMgb3RoZXJ3aXNlIHRoZXkgc29tZXRpbWVzIGRvbid0IHNob3cgdXAgaW4gdGhlIHJpZ2h0IHBsYWNlIGluaXRpYWxseVxuICAgICAgLy8gd2hlbiBjaGFuZ2luZyB0YWJzLlxuICAgICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy4kcmVmcy5jb250ZW50LmNsb3Nlc3QoJy5kaXRvLXNjcm9sbCcpXG4gICAgICBjb25zdCBkaXNwYXRjaCA9ICgpID0+IHNjcm9sbENvbnRhaW5lci5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc2Nyb2xsJykpXG4gICAgICBkaXNwYXRjaCgpXG4gICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSBgJi0tbGFiZWwtdmVydGljYWxgIGJhc2VkIGxheW91dCBjaGFuZ2VzLlxuICAgICAgc2V0VGltZW91dChkaXNwYXRjaCwgMClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhbiBzZXRcbiAgICAgIC8vIGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0VmFsdWVzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdFZhbHVlcyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgIGlmICghZXF1YWxzKHRoaXMuZGF0YVtuYW1lXSwgZGF0YVtuYW1lXSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IGRhdGFbbmFtZV1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICByb290RGF0YTogdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICByZWdpc3RyeVt1aWRdID0gZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyeVt1aWRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IChlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdKVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgPiAuZGl0by1zY2hlbWEtaGVhZGVyICsgLmRpdG8tc2NoZW1hLWNvbnRlbnQgPiAuZGl0by1wYW5lIHtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAmOmhhcyg+IC5kaXRvLXNjaGVtYS1jb250ZW50ICsgLmRpdG8tZWRpdC1idXR0b25zKSB7XG4gICAgLy8gRGlzcGxheSB0aGUgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpnZW5lcmF0ZUxhYmVscz1cIiFpc0NvbXBhY3RcIlxuICA6bGFiZWxOb2RlPVwibGFiZWxOb2RlXCJcbiAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbilcbiAgLy8tIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzY2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8tIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWFJbmxpbmVkJywge1xuICBlbWl0czogWydkZWxldGUnXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiBpc1NpbmdsZUNvbXBvbmVudFxuICB9YFxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1ge1xuICAgICAgc2NoZW1hLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgIG5lc3RlZCxcbiAgICAgIHN0b3JlXG4gICAgfSwgaW5kZXggaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC8vIC1Vc2UgPHNwYW4+IGZvciAuZGl0by1icmVhayBzbyB3ZSBjYW4gdXNlIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWBcbiAgICAvLyBzZWxlY3Rvci5cbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgcmVmPVwiY29udGFpbmVyc1wiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOmRhdGEtaW5kZXg9XCJpbmRleFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgOnZlcnRpY2FsTGFiZWxzPVwiaXNJbkxhYmVsZWRSb3coaW5kZXgpXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgKVxuICAgIHNwYW4uZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfSxcblxuICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzKCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcblxuICAgICAgY29uc3QgaXNMYXN0SW5Sb3cgPSBpbmRleCA9PiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24oaW5kZXgpLnRvcCA+IHBvc2l0aW9uc1tpbmRleF0udG9wXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZmluZE5leHRQb3NpdGlvbiA9IGluZGV4ID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0pIHJldHVybiBwb3NpdGlvbnNbaV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gW11cbiAgICAgIGxldCByb3cgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcm93LnB1c2goaW5kZXgpXG4gICAgICAgIGlmIChpc0xhc3RJblJvdyhpbmRleCkpIHtcbiAgICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgICAgIHJvdyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgbGV0IGhhc0xhYmVsc0luUm93ID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uPy5oZWlnaHQgPiAyICYmIChcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZS5tYXRjaGVzKCc6aGFzKD4gLmRpdG8tbGFiZWwpJykgfHxcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZVxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzKCcuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBuZXN0ZWQgc2NoZW1hcywgZS5nLiAnc2VjdGlvbicgb3IgJ29iamVjdCcgYW5kXG4gICAgICAgICAgICAvLyBkZXRlY3QgbGFiZWxzIHRoZXJlIHRvby5cbiAgICAgICAgICAgIGhhc0xhYmVsc0luUm93ID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF0gPSBoYXNMYWJlbHNJblJvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb21wb25lbnRTY2hlbWFzLmxlbmd0aCcobGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPSBsZW5ndGhcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFuZSgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy4kcmVmcy5jb250YWluZXJzKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci4kZWxcbiAgICAgICAgICBjb25zdCBpbmRleCA9ICtub2RlLmRhdGFzZXQuaW5kZXhcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZylcbiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZm9udFNpemUpXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIDIgKiBwYWRkaW5nXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaW5kZXhdID1cbiAgICAgICAgICAgIGhlaWdodCA8PSAwXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHRvcDogYm91bmRzLnksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNJbkxhYmVsZWRSb3coaW5kZXgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRzZWxmOiAmO1xuICAkcm9vdC1wYWRkaW5nOiAkY29udGVudC1wYWRkaW5nIC0gJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgOlxuICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZV9fbWFpbmAsXG4gIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICBmbGV4OiAwJTtcblxuICAmX19tYWluIHtcbiAgICBmbGV4OiAxMDAlO1xuICB9XG5cbiAgLmRpdG8tc2Nyb2xsID4gJiB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIHBhZGRpbmc6ICRyb290LXBhZGRpbmc7XG5cbiAgICAmI3skc2VsZn0tLXNpbmdsZSB7XG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICAgIH1cblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBtYXJnaW4tdG9wOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICZfX3RhYiArICZfX21haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZi5cbiAgICAgIG1hcmdpbjogKC0kcm9vdC1wYWRkaW5nKSAkZm9ybS1zcGFjaW5nLWhhbGYgJHJvb3QtcGFkZGluZztcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAvLyBOZWVkZWQgZm9ybXMgd2l0aCBzdGlja3kgbWFpbiBidXR0b25zLlxuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgLmRpdG8tYnJlYWsge1xuICAgIC8vIGAuZGl0by1icmVha2AgaXMgcmVuZGVyZWQgYXMgPHNwYW4+IHNvIHdlIGNhbiB1c2UgdGhlXG4gICAgLy8gYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYCBzZWxlY3RvciB0byBtYXRjaCB0aGUgZmlyc3QgY29udGFpbmVyXG4gICAgLy8gZXZlbiBpZiBpdCBoYXMgYSBicmVhayBiZWZvcmUgaXQuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMTAwJTtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzZXNcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZXNcIlxuKVxuICBUZWxlcG9ydChcbiAgICB2LWlmPVwiaXNNb3VudGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgRGl0b0xhYmVsKFxuICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgOmNsYXNzPVwibGF5b3V0Q2xhc3Nlc1wiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDppbmZvPVwiaW5mb1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cInR5cGVDb21wb25lbnRcIlxuICAgIHJlZj1cImNvbXBvbmVudFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3Nlc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOndpZHRoPVwid2lkdGhcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJjb21iaW5lZEJhc2lzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7XG4gIGdldEFsbFBhbmVsRW50cmllcyxcbiAgZ2V0VHlwZUNvbXBvbmVudCxcbiAgaGFzTGFiZWwsXG4gIG9taXRTcGFjaW5nXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZlcnRpY2FsTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEudHlwZSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gaGFzTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGZsZXhHcm93KCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLndpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZmxleFNocmluaygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICByZXR1cm4gdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICB9LFxuXG4gICAgZmxleEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgcmV0dXJuIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpXG4gICAgICAgID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKVxuICAgICAgICAgID8gcGFyc2VGbG9hdCh3aWR0aCkgLyAxMDAgLy8gcGVyY2VudGFnZSAtPiBmcmFjdGlvblxuICAgICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgLy8gZnJhY3Rpb25cbiAgICB9LFxuXG4gICAgY29tYmluZWRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHsgYWNjdW11bGF0ZWRCYXNpcywgZmxleEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYWNjdW11bGF0ZWRCYXNpcykgJiYgaXNOdW1iZXIoZmxleEJhc2lzKVxuICAgICAgICA/IGFjY3VtdWxhdGVkQmFzaXMgKiBmbGV4QmFzaXNcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjbGFzc2VzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tY29udGFpbmVyJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXNpbmdsZWBdOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9ycyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWxhYmVsLXZlcnRpY2FsYF06IHRoaXMudmVydGljYWxMYWJlbHMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1vbWl0LXNwYWNpbmdgXTogb21pdFNwYWNpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oaXNTdHJpbmcoY2xhc3NlcykgPyB7IFtjbGFzc2VzXTogdHJ1ZSB9IDogY2xhc3NlcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udGFpbmVyU3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBmbGV4QmFzaXMsIGNvbWJpbmVkQmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLWdyb3cnOiB0aGlzLmZsZXhHcm93ID8gMSA6IDAsXG4gICAgICAgICctLXNocmluayc6IHRoaXMuZmxleFNocmluayA/IDEgOiAwLFxuICAgICAgICAnLS1iYXNpcyc6IGlzTnVtYmVyKGZsZXhCYXNpcykgPyBgJHtmbGV4QmFzaXMgKiAxMDB9JWAgOiBmbGV4QmFzaXMsXG4gICAgICAgICctLWJhc2lzLW1vYmlsZSc6XG4gICAgICAgICAgaXNOdW1iZXIoY29tYmluZWRCYXNpcykgJiYgY29tYmluZWRCYXNpcyA8PSAwLjI1XG4gICAgICAgICAgICA/IGAke2ZsZXhCYXNpcyAqIDIwMH0lYFxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgLi4udGhpcy5sYXlvdXRDbGFzc2VzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxheW91dENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogdGhpcy53aWR0aCA9PT0gJ2ZpbGwnIHx8IHRoaXMuZmxleEJhc2lzICE9PSAnYXV0bycsXG4gICAgICAgICdkaXRvLXdpZHRoLWdyb3cnOiB0aGlzLmZsZXhHcm93LFxuICAgICAgICAnZGl0by13aWR0aC1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGdldEFsbFBhbmVsRW50cmllcyhcbiAgICAgICAgdGhpcy5hcGksXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB0aGlzLiRyZWZzLmNvbXBvbmVudCxcbiAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb250YWluZXIge1xuICAtLWdyb3c6IDA7XG4gIC0tc2hyaW5rOiAxO1xuICAtLWJhc2lzOiBhdXRvO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogdmFyKC0tZ3JvdykgdmFyKC0tc2hyaW5rKSB2YXIoLS1iYXNpcyk7XG4gIGZsZXgtZmxvdzogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIC5kaXRvLXBhbmUgPiAmIHtcbiAgICAuZGl0by1wYWdlLS13aWR0aC04MCAmIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIGZsZXgtYmFzaXM6IHZhcigtLWJhc2lzLW1vYmlsZSwgdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiB5ZWxsb3c7XG4gICAgfVxuXG4gICAgLmRpdG8tcGFnZS0td2lkdGgtNjAgJiB7XG4gICAgICBmbGV4LWJhc2lzOiBjYWxjKDIgKiB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IG9yYW5nZTtcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC05OSAmIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiB5ZWxsb3c7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtNjAgJiB7XG4gICAgICBmbGV4LWJhc2lzOiBjYWxjKDIgKiB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IG9yYW5nZTtcbiAgICB9XG4gIH1cblxuICAmOmVtcHR5IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgJi0tc2luZ2xlIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbTtcbiAgICAvLyBKdXN0IGxpa2Ugb24gRGl0b1BhbmUsIGNsZWFyIHNldHRpbmdzIGZyb20gYWJvdmUuXG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLWxhYmVsLXZlcnRpY2FsIHtcbiAgICAvLyBGb3IgcGxhaW4gY29tcG9uZW50cyB3aXRob3V0IGxhYmVscyBpbiByb3dzIHdpdGggb3RoZXIgY29tcG9uZW50cyB0aGF0XG4gICAgLy8gaGF2ZSBsYWJlbHMsIGFkZCBzb21lIHNwYWNpbmcgdG8gdGhlIHRvcCB0byBhbGlnbiB3aXRoIHRoZSBvdGhlclxuICAgIC8vIGNvbXBvbmVudHMgKGUuZy4gIGJ1dHRvbnMpOlxuICAgID4gLmRpdG8tY29tcG9uZW50OmZpcnN0LWNoaWxkOm5vdCguZGl0by1zZWN0aW9uLCAuZGl0by1saXN0LCAuZGl0by1vYmplY3QpIHtcbiAgICAgIG1hcmdpbi10b3A6ICRpbnB1dC1oZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgJi0tb21pdC1zcGFjaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4vLyB0eXBlIGNvbXBvbmVudHMgY2FuIG92ZXJyaWRlIGAuZGl0by13aWR0aC1maWxsYCBjbGFzcyAoZmlsdGVyIHByZWNlZGVuY2UpLlxuLmRpdG8tY29tcG9uZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuZGl0by1jaGVja2JveCxcbiAgICAmLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRhYnNcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICApXG4gICAgYS5kaXRvLWxpbmsoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IG1vZGVsVmFsdWUgPT09IGtleSB9XCJcbiAgICAgIEBjbGljaz1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGtleSlcIlxuICAgICkge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFicycsIHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFicyB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tbGluayB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBpbiBtYWluIGhlYWRlcjpcbiAgICAuZGl0by1oZWFkZXIgJiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHQ7XG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW47XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICB9XG5cbiAgICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBpbnNpZGUgYSBpbmxpbmUgc2NoZW1hOlxuICAgIC5kaXRvLXNjaGVtYS1pbmxpbmVkICYsXG4gICAgLmRpdG8tbGFiZWwgJiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICB9XG5cbiAgICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItY29sb3I6IGNvbG9yLmFkanVzdCgkY29sb3ItYWN0aXZlLCAkbGlnaHRuZXNzOiAtMTAlKTtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShwYW5lbFNjaGVtYSlcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBEaXRvU2NoZW1hLmRpdG8tcGFuZWxfX3NjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICBnZW5lcmF0ZUxhYmVsc1xuICApXG4gICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgIGgyLmRpdG8tcGFuZWxfX2hlYWRlcig6Y2xhc3M9XCJ7ICdkaXRvLXBhbmVsX19oZWFkZXItLXN0aWNreSc6IHN0aWNreSB9XCIpXG4gICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJwYW5lbEJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIClcbiAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgIERpdG9CdXR0b25zKFxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHBhbmVsQnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVsQnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgPiAuZGl0by1wYW5lIHtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgICAgIH1cblxuICAgICAgLmRpdG8tcGFuZSB7XG4gICAgICAgIG1hcmdpbjogLSRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAgICAgICAmLmRpdG8tcGFuZS0tc2luZ2xlIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1zaW5nbGUpIHtcbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCBoYXNTbG90Q29udGVudCgkc2xvdHMuZGVmYXVsdClcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBEaXRvVm5vZGUoOnZub2RlPVwidm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaGFzU2xvdENvbnRlbnQsIGhhc1ZOb2RlQ29udGVudCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNEcmFnZ2FibGVEaXNhYmxlZCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRWRpdGFibGVEaXNhYmxlZCB9XCJcbiAgICA6dG89XCJlZGl0UGF0aCA/IHsgcGF0aDogZWRpdFBhdGggfSA6IHt9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgOmRpc2FibGVkPVwiaXNDcmVhdGFibGVEaXNhYmxlZFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImlzRGVsZXRhYmxlRGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5lZGl0UGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2VkaXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuY3JlYXRlUGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2NyZWF0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1NjaGVtYU9wdGlvbihuYW1lKSB7XG4gICAgICAvLyBBbGwgb3B0aW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybSBiYXNpcyBieSBzZXR0aW5nXG4gICAgICAvLyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgIG9yIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZShuYW1lLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIHRlbXBsYXRlKFxuICAgIHYtaWY9XCJzaG93UHVsbGRvd25cIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cImlzRm9ybUNyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvd1NjaGVtYShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlLWlmPVwiaXNGb3JtQ3JlYXRhYmxlKGZvcm1zLmRlZmF1bHQpXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gVGhlIG5leHQgZm91ciBwcm9wcyBhcmUgdGhlcmUgZm9yIGBEaXRvQ29udGV4dGAgYW5kIHRoZSBgY29udGV4dCgpYFxuICAgIC8vIGdldHRlciBpbiBgRGl0b01peGluYC5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhleSBiZSBtb3ZlZCB0byBzaGFyZWQgbWl4aW4gdGhhdCBkZWZpbmVzIHRoZW0gYXMgcmVxdWlyZWRcbiAgICAvLyBhbmQgYWxzbyBwcm92aWRlcyB0aGUgYGNvbnRleHQoKWAgZ2V0dGVyLCBwZXJoYXBzIGBDb250ZXh0TWl4aW5gP1xuICAgIC8vIGBzY2hlbWFgIGNvdWxkIGJlIGluY2x1ZGVkIGFzIHdlbGwsIGFuZCBgQ29udGV4dE1peGluYCBjb3VsZCBiZSB1c2VkIGluXG4gICAgLy8gYERpdG9Gb3JtYCwgYERpdG9WaWV3YCwgYERpdG9QYW5lbGAsIGBEaXRvU2NoZW1hYCwgYERpdG9FZGl0QnV0dG9uc2AsXG4gICAgLy8gZXRjPyBCdXQgdGhlIHByb2JsZW0gd2l0aCB0aGUgcm9vdCBjb21wb25lbnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlXG4gICAgLy8gdGhlc2UgcHJvcHMuIFdlIGNvdWxkIGFkZCBhIGBjb250ZXh0QXR0cmlidXRlcygpYCBnZXR0ZXIgZm9yIGVhc3kgcGFzc2luZ1xuICAgIC8vIG9uIGFzIGB2LWJpbmQ9XCJjb250ZXh0QXR0cmlidXRlc1wiYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICBjb25zdCBmb3JtcyA9IE9iamVjdC52YWx1ZXModGhpcy5mb3JtcylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChmb3Jtcy5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHQpICYmXG4gICAgICAgIGZvcm1zLnNvbWUodGhpcy5pc0Zvcm1DcmVhdGFibGUpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pc0Zvcm1DcmVhdGFibGUoZm9ybSkgJiYgIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgY2xpcGJvYXJkRGF0YSB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PlxuICAgICAgICAgICAgcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoaGFzRGF0YSkge1xuICAgICAgICB0aGlzLmNvcHlFbmFibGVkID0gaGFzRGF0YVxuICAgICAgfVxuICAgIH0sXG4gICAgJ2FwcFN0YXRlLmNsaXBib2FyZERhdGEnOiAndXBkYXRlUGFzdGUnXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhXG4gICAgICBpZiAoIXRoaXMucGFzdGVFbmFibGVkICYmIHRoaXMuYXBwU3RhdGUuYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpIC8vIERvbid0IHJlcG9ydFxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGFcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyBSZXBvcnRcbiAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNsaXBib2FyZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBpc1Jvb3RGb3JtIH1cIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNjcm9sbGFibGU9XCJpc1Jvb3RGb3JtXCJcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4oXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1idXR0b25zLXN0aWNreSc6IGlzUm9vdEZvcm0gfVwiXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGVcbiAgICAgICAgICAvLyByaWdodCB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgICApIHx8IHt9XG4gICAgICApIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIGFzc2lnbkRlZXBseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuaXNNdXRhdGluZyAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdEZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaXNOZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFJlbG9hZCBmb3JtIGRhdGEgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eSBpbiBzYW1lIGZvcm0uXG4gICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhPy5wYXJhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyYW0gJiZcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgZHVlIHRvIGBmbHVzaDogJ3Bvc3QnYC5cbiAgICAgICAgICBmcm9tLm1hdGNoZWRbMF0ucGF0aCA9PT0gdG8ubWF0Y2hlZFswXS5wYXRoICYmIC8vIFN0YXlpbmcgb24gc2FtZSBmb3JtXG4gICAgICAgICAgZnJvbS5wYXJhbXNbcGFyYW1dICE9PSAnY3JlYXRlJyAmJiAvLyBCdXQgaGF2ZW4ndCBiZWVuIGNyZWF0aW5nXG4gICAgICAgICAgdG8ucGFyYW1zW3BhcmFtXSAhPT0gZnJvbS5wYXJhbXNbcGFyYW1dIC8vIEdvaW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID0gbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm1OZXN0ZWQnLCB7XG4gIGV4dGVuZHM6IERpdG9Gb3JtXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZm9ybS1uZXN0ZWQge1xuICAmLFxuICAuZGl0by1zY3JvbGwge1xuICAgIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgICkge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlwcHkgZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGlwOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVFcnJvcnMpXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLnRpcD8uZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZUVycm9ycygpIHtcbiAgICAgIGxldCB7IHRpcCB9ID0gdGhpc1xuICAgICAgdGlwPy5oaWRlKClcbiAgICAgIGlmICh0aGlzLmVycm9ycykge1xuICAgICAgICB0aXAgPSB0aGlzLnRpcCA/Pz0gbWFya1Jhdyh0aXBweSh0aGlzLiRlbC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKSkpXG4gICAgICAgIHRpcC5zZXRQcm9wcyh7XG4gICAgICAgICAgY29udGVudDogdGhpcy5lcnJvcnMuam9pbignXFxuJyksXG4gICAgICAgICAgdGhlbWU6ICdlcnJvcicsXG4gICAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgICAgYXBwZW5kVG86ICdwYXJlbnQnLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBvZmZzZXQ6IFszLCAzXSwgLy8gMS8yIGZvcm0tc3BhY2luZ1xuICAgICAgICAgIHpJbmRleDogJydcbiAgICAgICAgfSlcbiAgICAgICAgdGlwLnBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB0aXAuaGlkZSgpKVxuICAgICAgICB0aXAuc2hvdygpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZXJyb3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgdWwge1xuICAgIGNvbG9yOiAkY29sb3ItZXJyb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2NvcGVzXG4gIFJvdXRlckxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgIGN1c3RvbVxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY29wZXMge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICBtaW4td2lkdGg6IDNlbTtcbiAgICBmbGV4OiAwIDEgYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1yaWdodDogMWVtO1xuICAgIH1cblxuICAgICYgKyAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfSAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAmOmZvY3VzIHtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblBhZ2luYXRpb24oXG4gIHYtbW9kZWw6cGFnZT1cInBhZ2VcIlxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSAtIDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RHJhZ2dhYmxlT3B0aW9ucyhmb3JjZUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWRyYWdnYWJsZSdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogYCR7cHJlZml4fV9fZHJhZ2AsXG4gICAgICAgIGNob3NlbkNsYXNzOiBgJHtwcmVmaXh9X19jaG9zZW5gLFxuICAgICAgICBnaG9zdENsYXNzOiBgJHtwcmVmaXh9X19naG9zdGAsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6IGAke3ByZWZpeH1fX2ZhbGxiYWNrYCxcbiAgICAgICAgZm9yY2VGYWxsYmFjayxcbiAgICAgICAgb25TdGFydDogdGhpcy5vblN0YXJ0RHJhZyxcbiAgICAgICAgb25FbmQ6IHRoaXMub25FbmREcmFnXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcihcbiAgICB2LWlmPVwibGFiZWxcIlxuICApXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKFxuICAgICAgICB2LWlmPVwiZGV0YWlsc1wiXG4gICAgICApIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYoXG4gICAgICB2LWVsc2VcbiAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBEaXRvTGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICBEaXRvRHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnModHJ1ZSlcIlxuICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGNoaWxkcmVuTGlzdCA9IHZhbHVlKVwiXG4gIClcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vLSBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmVlSXRlbScsIHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBTb3J0YWJsZU1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcihcbiAgICAgICAgICBjaGlsZHJlblNjaGVtYSxcbiAgICAgICAgICBjaGlsZHJlbkxpc3QubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBudW1DaGlsZHJlbiAmJlxuICAgICAgICBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBPdmVycmlkZSBkZWZhdWx0IGlubGluZS1mbGV4IHBvc2l0aW9uaW5nLlxuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkLWZpbGVcbiAgLmRpdG8tdGh1bWJuYWlsKFxuICAgIHYtaWY9XCJ0aHVtYm5haWxcIlxuICAgIDpjbGFzcz1cImBkaXRvLXRodW1ibmFpbC0tJHt0aHVtYm5haWx9YFwiXG4gIClcbiAgICAuZGl0by10aHVtYm5haWxfX2lubmVyXG4gICAgICBpbWcoXG4gICAgICAgIHYtaWY9XCJzb3VyY2VcIlxuICAgICAgICA6c3JjPVwic291cmNlXCJcbiAgICAgICAgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdGh1bWJuYWlsX190eXBlKFxuICAgICAgICB2LWVsc2VcbiAgICAgIClcbiAgICAgICAgc3BhbiB7eyB0eXBlIH19XG4gIHNwYW4ge3sgZmlsZS5uYW1lIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVXBsb2FkRmlsZScsIHtcbiAgcHJvcHM6IHtcbiAgICBmaWxlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aHVtYm5haWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGh1bWJuYWlsVXJsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkVXJsOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFRZUEVTW3RoaXMuZmlsZS50eXBlXSB8fFxuICAgICAgICB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpLnRvVXBwZXJDYXNlKClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc291cmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkVXJsIHx8IHRoaXMudGh1bWJuYWlsVXJsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2ZpbGUudXBsb2FkLmZpbGUnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyKGZpbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudGh1bWJuYWlsICYmIGZpbGU/LnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gcmVhZGVyLnJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBUWVBFUyA9IHtcbiAgJ3RleHQvcGxhaW4nOiAnVFhUJyxcbiAgJ3RleHQvaHRtbCc6ICdIVE1MJyxcbiAgJ3RleHQvY3NzJzogJ0NTUycsXG4gICd0ZXh0L2phdmFzY3JpcHQnOiAnSlMnLFxuICAnaW1hZ2UvanBlZyc6ICdKUEcnLFxuICAnaW1hZ2UvcG5nJzogJ1BORycsXG4gICdpbWFnZS9naWYnOiAnR0lGJyxcbiAgJ2ltYWdlL3N2Zyt4bWwnOiAnU1ZHJyxcbiAgJ21vdmllL21wNCc6ICdNUDQnLFxuICAnYXVkaW8vbXBlZyc6ICdNUDMnLFxuICAnYXBwbGljYXRpb24vanNvbic6ICdKU09OJyxcbiAgJ2FwcGxpY2F0aW9uL3htbCc6ICdYTUwnLFxuICAnYXBwbGljYXRpb24vcGRmJzogJ1BERicsXG4gICdhcHBsaWNhdGlvbi96aXAnOiAnWklQJ1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2FzczptYXRoJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZC1maWxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4uZGl0by10aHVtYm5haWwge1xuICAkc2VsZjogJjtcblxuICAvLyBTbWFsbCBzaXplIGJ5IGRlZmF1bHRcbiAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gIC0tY29ybmVyLXNpemU6IGNhbGModmFyKC0tbWF4LXNpemUpIC8gNSk7XG4gIC0tc2hhZG93LXNpemU6IDFweDtcbiAgLS1taW4tc2l6ZTogY2FsYygyICogdmFyKC0tY29ybmVyLXNpemUpKTtcbiAgLS1tYXJnaW46IDBlbTtcbiAgLS1kcm9wLXNoYWRvdzogZHJvcC1zaGFkb3coXG4gICAgMCBjYWxjKHZhcigtLXNoYWRvdy1zaXplKSAqIDAuNzUpIHZhcigtLXNoYWRvdy1zaXplKSAje3JnYmEoXG4gICAgICAgICRjb2xvci1ibGFjayxcbiAgICAgICAgMC40XG4gICAgICApfVxuICApO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICBmaWx0ZXI6IHZhcigtLWRyb3Atc2hhZG93KTtcblxuICAmLS1zbWFsbCB7XG4gICAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDBlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxcHg7XG4gIH1cblxuICAmLS1tZWRpdW0ge1xuICAgIC0tbWF4LXNpemU6ICN7MiAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwLjI1ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMS41cHg7XG4gIH1cblxuICAmLS1sYXJnZSB7XG4gICAgLS1tYXgtc2l6ZTogI3s0ICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuNWVtO1xuICAgIC0tc2hhZG93LXNpemU6IDIuNXB4O1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgY2xpcC1wYXRoOiBwb2x5Z29uKFxuICAgICAgMCAwLFxuICAgICAgY2FsYygxMDAlIC0gdmFyKC0tY29ybmVyLXNpemUpKSAwLFxuICAgICAgMTAwJSB2YXIoLS1jb3JuZXItc2l6ZSksXG4gICAgICAxMDAlIDEwMCUsXG4gICAgICAwIDEwMCVcbiAgICApO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHdpZHRoOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG4gICAgICBoZWlnaHQ6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgI2ZmZmZmZiwgI2VlZWVlZSA0MCUsICNkZGRkZGQgNTAlKTtcbiAgICAgIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuICAgIH1cbiAgfVxuXG4gICZfX3R5cGUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICAgIGFzcGVjdC1yYXRpbzogMyAvIDQ7XG5cbiAgICBzcGFuIHtcbiAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWdyZXl9O1xuXG4gICAgICBmb250LXNpemU6IG1pbih2YXIoLS1mb250LXNpemUpLCAjezEuMjUgKiAkZm9udC1zaXplfSk7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xuXG4gICAgICAjeyRzZWxmfTpub3QoI3skc2VsZn0tLXNtYWxsKSAmIHtcbiAgICAgICAgcGFkZGluZzogMCBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1mb250LXNpemUpIC8gNCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9LS1tZWRpdW0gJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0fTtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLWxhcmdlICYge1xuICAgICAgICAtLWNvbG9yOiAjeyRjb2xvci1saWdodGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC8vIFNWRyBpbWFnZXMgbmVlZCAxMDAlIHNldHRpbmdzIHRvIHNjYWxlIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1heC13aWR0aDogdmFyKC0tbWF4LXNpemUpO1xuICAgIG1heC1oZWlnaHQ6IHZhcigtLW1heC1zaXplKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fb2JqUmVzdCA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB1c2VTb3J0YWJsZShlbCwgbGlzdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBzb3J0YWJsZTtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50IH0gPSBfYSwgcmVzZXRPcHRpb25zID0gX19vYmpSZXN0KF9hLCBbXCJkb2N1bWVudFwiXSk7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQpXG4gICAgICByZXR1cm47XG4gICAgc29ydGFibGUgPSBuZXcgU29ydGFibGUodGFyZ2V0LCBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgZGVmYXVsdE9wdGlvbnMpLCByZXNldE9wdGlvbnMpKTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlID09IG51bGwgPyB2b2lkIDAgOiBzb3J0YWJsZS5kZXN0cm95KCk7XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCB9O1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bykge1xuICBjb25zdCBhcnJheSA9IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpKTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VTb3J0YWJsZVwiLFxuICBtb2RlbDoge1xuICAgIC8vIENvbXBhdGlibGUgd2l0aCB2dWUyXG4gICAgcHJvcDogXCJtb2RlbFZhbHVlXCIsXG4gICAgZXZlbnQ6IFwidXBkYXRlOm1vZGVsVmFsdWVcIlxuICB9LFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJkaXZcIlxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBsaXN0ID0gdXNlVk1vZGVsKHByb3BzLCBcIm1vZGVsVmFsdWVcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHJlYWN0aXZlKHVzZVNvcnRhYmxlKHRhcmdldCwgbGlzdCwgcHJvcHMub3B0aW9ucykpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMudGFnLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoZGF0YSkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VTb3J0YWJsZSB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblVzZVNvcnRhYmxlLmRpdG8tZHJhZ2dhYmxlKFxuICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1kcmFnZ2FibGUtLWRyYWdnaW5nJzogaXNEcmFnZ2luZyB9XCJcbiAgOnRhZz1cInRhZ1wiXG4gIDptb2RlbFZhbHVlPVwibW9kZWxWYWx1ZVwiXG4gIDpvcHRpb25zPVwieyAuLi5vcHRpb25zLCBvblN0YXJ0LCBvbkVuZCB9XCJcbiAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgJGV2ZW50KVwiXG4pXG4gIHNsb3RcbmNvbXBvbmVudChcbiAgdi1lbHNlXG4gIDppcz1cInRhZ1wiXG4pXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50J1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IFVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EcmFnZ2FibGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VTb3J0YWJsZSB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRyYWdnYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW91c2VFdmVudHM6IG51bGwsXG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydChldmVudCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5vcHRpb25zLm9uU3RhcnQ/LihldmVudClcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgfSxcblxuICAgIG9uRW5kKGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25FbmQ/LihldmVudClcbiAgICAgIC8vIEtlZXAgYGlzRHJhZ2dpbmdgIHRydWUgdW50aWwgdGhlIG5leHQgbW91c2UgaW50ZXJhY3Rpb24gc28gdGhhdFxuICAgICAgLy8gY29uZnVzZWQgaG92ZXIgc3RhdGVzIGFyZSBjbGVhcmVkIGJlZm9yZSByZW1vdmluZyB0aGUgaG92ZXIgY2F0Y2hlci5cbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSB0aGlzLmRvbU9uKHRoaXMuJGVsLCB7XG4gICAgICAgIG1vdXNlZG93bjogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZW1vdmU6IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2VsZWF2ZTogdGhpcy5vbk1vdXNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbk1vdXNlKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIHRoaXMubW91c2VFdmVudHMucmVtb3ZlKClcbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZHJhZ2dhYmxlIHtcbiAgLy8gT3ZlcmxheSBhIGhvdmVyIGNhdGNoZXIgd2hpbGUgd2UncmUgZHJhZ2dpbmcgdG8gcHJldmVudCBob3ZlciBzdGF0ZXMgZnJvbVxuICAvLyBnZXR0aW5nIHN0dWNrIC8gY29uZnVzZWQuIFNhZmFyaSBzdHJ1Z2dsZXMgd2l0aCB0aGlzLCBzbyBkaXNhYmxlIGl0IHRoZXJlLlxuICBAaW5jbHVkZSBicm93c2VyLXF1ZXJ5KCgnY2hyb21lJywgJ2ZpcmVmb3gnKSkge1xuICAgICY6aGFzKCZfX2Nob3NlbiksXG4gICAgJi0tZHJhZ2dpbmcge1xuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgID4gOmZpcnN0LWNoaWxkOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGluc2V0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9fZmFsbGJhY2sge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAycHggNHB4ICRjb2xvci1zaGFkb3cpO1xuXG4gICAgLy8gTmVzdGVkIDx0ZD4gbmVlZCB0byBhbHNvIHN3aXRjaCB0byBgZGlzcGxheTogZmxleGAgc3R5bGUgZHVyaW5nIGRyYWdnaW5nLlxuICAgICYsXG4gICAgdGQge1xuICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgPiAqIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0U3BhY2luZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0aXRsZVwiXG4gIDpjbGFzcz1cImJ1dHRvbkNsYXNzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIC5kaXRvLWJ1dHRvbl9fdGV4dChcbiAgICB2LWlmPVwidGV4dFwiXG4gICkge3sgdGV4dCB9fVxuICAuZGl0by1pbmZvKFxuICAgIHYtaWY9XCIhbGFiZWwgJiYgaW5mb1wiXG4gICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2J1dHRvbicsICdzdWJtaXQnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdXG4gICAgICB9LFxuXG4gICAgICBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYiA/IGBkaXRvLWJ1dHRvbi0ke3RoaXMudmVyYn1gIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSksXG5cbiAgICAgIHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH0sXG5cbiAgICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1idXR0b24ge1xuICAkc2VsZjogJjtcblxuICAmX190ZXh0IHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jaGVja2JveFxuICBpbnB1dChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fD0gcmVhY3RpdmUoe1xuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAwLFxuICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgIH0pKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgdmFsdWUgb25jZVxuICAgICAgICAvLyBgcmVzb2x2ZUNvdW50ZXJgIHJlYWNoZXMgemVyby4gQ291bnRpbmcgaXMgbmVlZGVkIGJlY2F1c2UgZGVwZW5kaW5nXG4gICAgICAgIC8vIG9uIHRoZSB1c2Ugb2YgZGF0YSBhbmQgcmVhY3Rpdml0eSwgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGNvbXB1dGVkXG4gICAgICAgIC8vIGdldHRlciBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGEgaXMgY2hhbmdpbmcuIENsZWFyaW5nIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyBkYXRhIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnMgYW5kIG9ubHlcbiAgICAgICAgLy8gcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZSByZWV2YWx1YXRpb246XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGlmICgtLWFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPT09IDApIHtcbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICAvLyBVc2UgYSB0aW1lb3V0IHRvIGFsbG93IGFscmVhZHkgcmVzb2x2ZWQgcHJvbWlzZXMgdG8gcmV0dXJuIGRhdGEgd2l0aG91dFxuICAgICAgLy8gc2hvd2luZyBhIGxvYWRpbmcgaW5kaWNhdG9yLlxuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucyksIDApXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNWaWV3U2NoZW1hLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplLFxuICBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmXG4gICAgICAgICAgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLmxhYmVsS2V5YCAvIGBvcHRpb25MYWJlbEtleWA/XG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMudmFsdWVLZXlgIC8gYG9wdGlvblZhbHVlS2V5YD9cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBlZGl0YWJsZSAmJlxuICAgICAgICAgIGhhc1ZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lZGl0YWJsZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgPyBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuc2VsZWN0ZWRWYWx1ZSwgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbChuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgLmRpdG8tY2hlY2tib3hcbiAgICAgICAgaW5wdXQoXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImNvZGVcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvZGUge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEZvciBwcm9wZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIC5jb2RlZmxhc2sge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgLy8gSWdub3JlIHRoZSBwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fcHJlIHtcbiAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19jb2RlLFxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICB9XG5cbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1jb2xvcihcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgLmRpdG8taW5wdXQoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCIpXG4gICAgICBpbnB1dChcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIFNrZXRjaFBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlQWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGVGaWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXRDb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ0Bsazc3L3Z1ZTMtY29sb3InXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRIZXhWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwge31cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOT1RFOiB2dWUzLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgICAgICBmb3JtYXRcbiAgICAgICAgKVxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZCB8fFxuICAgICAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0FscGhhYD9cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dHNgP1xuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplO1xuJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aDtcblxuLmRpdG8tY29sb3Ige1xuICAuZGl0by1pbnB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcGlja2VyIHtcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXByZXZpZXcge1xuICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeTtcbiAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcblxuICAgICYsXG4gICAgZGl2IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlU2NoZW1hQ29tcG9uZW50KClgLiBUaGlzXG4vLyBjYW4gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIGF3YWl0IHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vLSBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbiddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICdzY2hlbWEnLCB7XG4gICAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlXG4gICAgICAgICAgICAgIC8vIGB2YWx1ZWAgZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvXG4gICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgcmVzb2x2ZWQgZGF0YSB0d2ljZS5cbiAgICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmZvcm1hdD1cImZvcm1hdHNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3BcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYVxuICAgIC8vIGJldHRlciB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseVxuICAgIC8vIHN1cHBvcnRlZCBhdHRyaWJ1dGVzKVxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkYXRlVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGZvcm1hdGAsIG9uY2UgYHNjaGVtYS5mb3JtYXQoKWAgd2FzIHJlbW92ZWQgdG9cbiAgICAgIC8vIGBmb3JtYXRWYWx1ZSgpYC5cbiAgICAgIGZvcm1hdHM6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXRzJywge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIGdldChmb3JtYXRzKSB7XG4gICAgICAgICAgY29uc3QgeyBkYXRlLCB0aW1lIH0gPSBhc3NpZ25EZWVwbHkoe30sIHRoaXMuYXBpLmZvcm1hdHMsIGZvcm1hdHMpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IFsnZGF0ZScsICdkYXRldGltZSddLmluY2x1ZGVzKHRoaXMudHlwZSkgPyBkYXRlIDogbnVsbCxcbiAgICAgICAgICAgIHRpbWU6IFsndGltZScsICdkYXRldGltZSddLmluY2x1ZGVzKHRoaXMudHlwZSkgPyB0aW1lIDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgICB9W3R5cGVdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gKFxuICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbF0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC8vIGRlY29kZSBhbGwgdGhlc2UgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXNcbiAgICAgIC8vIHZ1ZS1yb3V0ZXIncyBvd24gcXVlcnkgZW5jb2RpbmcuXG4gICAgICAucmVwbGFjZUFsbCgvJSg/OjIxfDI0fDI4fDI5fDJDfDJGfDNBfDNCfDNEfDNGfDQwKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSb3V0ZSh7IHBhdGgsIHF1ZXJ5LCBoYXNoIH0pIHtcbiAgLy8gUHJlc2VydmUgYGhpc3Rvcnkuc3RhdGVgLCBzZWU6XG4gIC8vIGh0dHBzOi8vcm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3VzYWdlLW9mLWhpc3Rvcnktc3RhdGVcbiAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoXG4gICAgaGlzdG9yeS5zdGF0ZSxcbiAgICBudWxsLFxuICAgIGAke1xuICAgICAgbG9jYXRpb24ub3JpZ2luXG4gICAgfSR7XG4gICAgICBwYXRoID8/IGxvY2F0aW9uLnBhdGhuYW1lXG4gICAgfT8ke1xuICAgICAgcXVlcnkgPyBmb3JtYXRRdWVyeShxdWVyeSkgOiBsb2NhdGlvbi5zZWFyY2guc2xpY2UoMSlcbiAgICB9JHtcbiAgICAgIGhhc2ggPz8gbG9jYXRpb24uaGFzaFxuICAgIH1gXG4gIClcbn1cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVwbGFjZVJvdXRlIH0gZnJvbSAnLi4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFJlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycywgYnV0IGRvbid0IHRyaWdnZXIgYSByb3V0ZVxuICAgICAgICAgIC8vIGNoYW5nZSwgYXMgdGhhdCB3b3VsZCBjYXVzZSB0aGUgbGlzdCB0byByZWxvYWQuXG4gICAgICAgICAgcmVwbGFjZVJvdXRlKHsgcXVlcnkgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSAmJiBmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGxldCByZW1vdmVkID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtU3RvcmUodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCAmJiBtYXRjaGVkWzBdLm5hbWUgIT09ICdjYXRjaC1hbGwnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXJcbiAgICAgICAgICAgICAgICAucHVzaCh7IHBhdGggfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTmVzdGVkICR7XG4gICAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gJ2xpc3RzJ1xuICAgICAgICAgICAgOiB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICAgID8gJ29iamVjdHMnXG4gICAgICAgICAgICAgIDogJ3NjaGVtYSdcbiAgICAgICAgfSBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlc2BcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+XG4gICAgICAgIHBhcmFtXG4gICAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnRGl0b0Zvcm1OZXN0ZWQnIDogJ0RpdG9Gb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIH0gZnJvbSAnLi9zY2hlbWEnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICAndGV4dCcoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHdpZHRoOiAnMi81JyxcbiAgICAgICAgICAgIG9wdGlvbnM6IGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzMvNScgOiAnZmlsbCcsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgY29uc3QgZGF0ZXRpbWUgPSB7XG4gICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgd2lkdGg6ICcxLzInLFxuICAgICAgZm9ybWF0czoge1xuICAgICAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBkYXRldGltZSxcbiAgICAgIHRvOiBkYXRldGltZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsdGVyc1BhbmVsKGFwaSwgZmlsdGVycywgZGF0YVBhdGgsIHF1ZXJ5KSB7XG4gIGNvbnN0IHsgc3RpY2t5LCAuLi5maWx0ZXJTY2hlbWFzIH0gPSBmaWx0ZXJzXG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc3RpY2t5LFxuXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBxdWVyeS52YWx1ZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzOiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJTY2hlbWFzKSxcbiAgICBidXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhmYWxzZSksXG4gICAgcGFuZWxCdXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyh0cnVlKSxcblxuICAgIGV2ZW50czoge1xuICAgICAgY2hhbmdlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgIH0sXG5cbiAgICAgIGhhc0ZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHF1ZXJ5LnZhbHVlID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5LnZhbHVlLFxuICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKClcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBwYW5lbClcbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNCdXR0b25zKHNtYWxsKSB7XG4gIHJldHVybiB7XG4gICAgY2xlYXI6IHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0NsZWFyJyxcbiAgICAgIGRpc2FibGVkOiAoeyBzY2hlbWFDb21wb25lbnQgfSkgPT4gIXNjaGVtYUNvbXBvbmVudC5oYXNGaWx0ZXJzLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAvLyBTaW5jZSBwYW5lbCBidXR0b25zIGFyZSBvdXRzaWRlIG9mIHRoZSBzY2hlbWEsIHdlIG5lZWQgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIHNjaGVtYSBjb21wb25lbnQgcmVjZWl2ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZSBldmVudCBiZWxvdzpcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuY2xlYXJGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJtaXQ6IHtcbiAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0ZpbHRlcicsXG4gICAgICB2aXNpYmxlOiAhc21hbGwsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCB3aWR0aCwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS50eXBlID0gJ2Zvcm0nXG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLXN0aWNreShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIGNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGFwaSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIC8vIFBhc3MgYSBjb21wdXRlZCB2YWx1ZSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgY29tcHV0ZWQoe1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQucXVlcnlcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIGlkLCB0aGlzLmNvbnRleHQpIHx8XG4gICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2lkfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gICRzZWxmOiAmO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGY7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc2NvcGVzLFxuICAgIC5kaXRvLXBhZ2luYXRpb24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zaW5nbGUge1xuICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLy8gTWFrZSBzaW5nbGUgbGlzdCBoZWFkZXIsIG5hdmlnYXRpb24gYW5kIGJ1dHRvbnMgc3RpY2t5IHRvIHRoZSB0b3AgYW5kXG4gICAgLy8gYm90dG9tOlxuICAgICN7JHNlbGZ9X19oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogMDtcbiAgICAgIG1hcmdpbi10b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgcGFkZGluZy10b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgKyAuZGl0by10YWJsZSB7XG4gICAgICAgIC5kaXRvLXRhYmxlLWhlYWQge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgdG9wOiBjYWxjKCRpbnB1dC1oZWlnaHQgKyAkY29udGVudC1wYWRkaW5nICsgJGNvbnRlbnQtcGFkZGluZy1oYWxmKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b0xhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KFxuICA6bGFiZWw9XCJ2YWx1ZVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICApXG4gICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICA6a2V5PVwibmFtZVwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgKVxuICAgICAgICBJY29uKDpuYW1lPVwiaWNvblwiKVxuICBFZGl0b3JDb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGh5cGhlbmF0ZSwgZGVib3VuY2UsIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgSWNvblxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgY29tbWFuZDogJ3NldFBhcmFncmFwaCdcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhZHZhbmNlZE5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5tYXJrQnV0dG9ucyxcbiAgICAgICAgdGhpcy5iYXNpY05vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLmFkdmFuY2VkTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMudG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShlZGl0b3IgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZWRpdG9yLmdldEhUTUwoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChlZGl0b3IpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICBEb2N1bWVudCxcbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBIYXJkQnJlYWssIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG4gICAgICBjb25zdCB7IGNvbW1hbmRzIH0gPSB0aGlzLmVkaXRvclxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBjb21tYW5kLCBhdHRyaWJ1dGVzLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbW1hbmQgPz89XG4gICAgICAgICAgICAgIG5hbWUgaW4gY29tbWFuZHNcbiAgICAgICAgICAgICAgICA/IG5hbWVcbiAgICAgICAgICAgICAgICA6IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmIChjb21tYW5kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gYXR0cmlidXRlcyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKClbY29tbWFuZF0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogYXBwbHkoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKG5hbWUpID8gJ2hpc3RvcnknIDogbmFtZVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKG5hbWUpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbW1hbmQsIGF0dHJpYnV0ZSwgdmFsdWVzLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuYmx1cigpXG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBTbWFsbCA9IE1hcmsuY3JlYXRlKHtcbiAgbmFtZTogJ3NtYWxsJyxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFt7IHRhZzogJ3NtYWxsJyB9XVxuICB9LFxuXG4gIHJlbmRlckhUTUwoKSB7XG4gICAgcmV0dXJuIFsnc21hbGwnLCAwXVxuICB9LFxuXG4gIGFkZENvbW1hbmRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXRTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHVuc2V0U21hbGw6XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgTGlua1dpdGhUaXRsZSA9IExpbmsuZXh0ZW5kKHtcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgc2NoZW1hOiB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGhyZWY6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VIVE1MKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgIGdldEF0dHJzOiBlbGVtZW50ID0+ICh7XG4gICAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICByZW5kZXJIVE1MKG5vZGUpIHtcbiAgICAgIHJldHVybiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1hcmt1cCB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1yZXNpemUge1xuICAgIEBleHRlbmQgJWljb24tcmVzaXplO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdW5zZXQ7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiAxZW07XG4gICAgaGVpZ2h0OiAxZW07XG4gIH1cblxuICAuUHJvc2VNaXJyb3Ige1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLmRpdG8tbWFya3VwLWVkaXRvciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIG1hcmdpbi10b3A6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIHAsXG4gIHVsLFxuICBvbCxcbiAgcHJlLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFyZW0gMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICB9XG5cbiAgcHJlIHtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgcCBjb2RlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjNyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gIH1cblxuICBhIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IGJsdWU7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICB1bCxcbiAgb2wge1xuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICAmID4gcCxcbiAgICAmID4gb2wsXG4gICAgJiA+IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbXVsdGlzZWxlY3RcbiAgLmRpdG8tbXVsdGlzZWxlY3RfX2lubmVyXG4gICAgVnVlTXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdtdWx0aXNlbGVjdC0tbXVsdGlwbGUnOiBtdWx0aXBsZSxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1sb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWhpZ2hsaWdodCc6IHNob3dIaWdobGlnaHRcbiAgICAgIH1gXG4gICAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZ1BsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIlxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b21MYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFja0J5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwVmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbFNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyT25TZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZU9uU2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gKFxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkP1xuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgbGV0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGlzQm9vbGVhbihwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IHVuZGVmaW5lZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gc2VhcmNoYWJsZSAmJiB0YWdnYWJsZVxuICAgICAgICAgID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICAgIDogc2VhcmNoYWJsZVxuICAgICAgICAgICAgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgIH0sXG5cbiAgICBzaG93SGlnaGxpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMuZWxlbWVudC5wb2ludGVyRGlydHlcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgIG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gdG8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuZGVhY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0IHtcbiAgICAkc2VsZjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgIC0taW5wdXQtd2lkdGg6IDEwMCU7XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLWJsYWNrO1xuXG4gICAgJi0tbXVsdGlwbGUge1xuICAgICAgLS1pbnB1dC13aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICAmX190YWdzIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMDtcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luO1xuXG4gICAgICAuZGl0by1oYXMtZXJyb3JzICYge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtO1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICBoZWlnaHQ6IGNhbGMoJGlucHV0LWhlaWdodCAtIDIgKiAkdGFnLXBhZGRpbmcpO1xuICAgIH1cblxuICAgICZfX3RhZ3Mtd3JhcCB7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIH1cblxuICAgICZfX3NpbmdsZSxcbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICAgZmxleDogMSAwIDAlO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50O1xuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAmX190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBFbmZvcmNlIGFjdHVhbCBsaW5lLWhlaWdodCBmb3IgcG9zaXRpb25pbmcuXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NlbGVjdCxcbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAmX19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGg7XG4gICAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aDtcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX3NlbGVjdCB7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMik7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fb3B0aW9uIHtcbiAgICAgICRvcHRpb246IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0O1xuICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzaG93IHRoZSBoaWdobGlnaHQgb25jZSB0aGUgcHVsbGRvd24gaGFzIHJlY2VpdmVkIG1vdXNlIG9yXG4gICAgICAvLyBrZXlib2FyZCBpbnRlcmFjdGlvbiwgaW4gd2hpY2ggY2FzZSBgJi0taGlnaGxpZ2h0YCB3aWxsIGJlIHNldCxcbiAgICAgIC8vIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYHBvaW50ZXJEaXJ0eWAgaW4gdnVlLW11bHRpc2VsZWN0LlxuICAgICAgLy8gVW50aWwgdGhlbiwgY2xlYXIgdGhlIGhpZ2hsaWdodCBzdHlsZSwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYWxzb1xuICAgICAgLy8gZGlzYWJsZWQgb3Igc2VsZWN0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBzdHlsZS5cbiAgICAgIEBhdC1yb290ICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0taGlnaGxpZ2h0KVxuICAgICAgICAgICN7JG9wdGlvbn06bm90KCN7JG9wdGlvbn0tLWRpc2FibGVkKTpub3QoI3skb3B0aW9ufS0tc2VsZWN0ZWQpIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJi0taGlnaGxpZ2h0IHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICN7bGFzdC1zZWxlY3RvcigmKX0ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLXNlbGVjdGVkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAmI3skb3B0aW9ufS0taGlnaGxpZ2h0IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICZfX3RhZy1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoO1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2xlYXI7XG5cbiAgICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzLFxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJjpub3QoJi0tYWJvdmUpICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAoLSRib3JkZXItd2lkdGgpIDAgMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWJvdmUgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46IDAgMCAoLSRib3JkZXItd2lkdGgpO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hY3RpdmUge1xuICAgICAgI3skc2VsZn1fX3BsYWNlaG9sZGVyIHtcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19zaW5nbGUsXG4gICAgICAjeyRzZWxmfV9faW5wdXQge1xuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgICYjeyRzZWxmfS0tYWJvdmUge1xuICAgICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYtLWxvYWRpbmcge1xuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgLy8gRG9uJ3Qgc2hvdyBzdGVwcyBpZiB0aGUgaW5wdXQgaXMgYWxzbyBjbGVhcmFibGUsIHNpbmNlIHRoZSBzdGVwIGJ1dHRvbnNcbiAgICAgIC8vIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgY2xlYXIgYnV0dG9uLlxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlclxuICAgICAgICAgID8gJ2FueSdcbiAgICAgICAgICA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPVxuICAgICAgICAgIG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID1cbiAgICAgICAgICBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICA7W3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by1udW1iZXIoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIC8vLSBOT1RFOiBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIG9ubHkgaGFuZGxlIHRoZSBjcmVhdGUgYnV0dG9uIG91dHNpZGUgb2YgdGhlXG4gIC8vLSBzY2hlbWEsIHRoZSBlZGl0IGJ1dHRvbnMgaW5zaWRlIGFyZSBoYW5kbGVkIGJ5IGBEaXRvU2NoZW1hSW5saW5lZGAuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb2JqZWN0TGFiZWwoKSB7XG4gICAgICAvLyBPbmx5IHNob3cgYSBsYWJlbCBpZiB0aGUgb2JqZWN0IGlzIGNvbGxhcHNpYmxlLlxuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgPyB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5vYmplY3REYXRhLCB7IGFzT2JqZWN0OiB0cnVlIH0pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW9iamVjdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWluLXdpZHRoOiBtaW4tY29udGVudDtcblxuICAuZGl0by1vYmplY3QtY29udGVudCB7XG4gICAgZmxleDogMCAxIDEwMCU7XG4gIH1cblxuICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRTcGFjaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZVsxXSAtIHJhbmdlWzBdIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcmFkaW8tYnV0dG9ucyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2VjdGlvbig6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tLWxhYmVsbGVkJzogISFzY2hlbWEubGFiZWwgfVwiKVxuICBEaXRvU2NoZW1hSW5saW5lZC5kaXRvLXNlY3Rpb25fX3NjaGVtYShcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLS1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzICRlYXNlLW91dC1xdWFydDtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgICAmOmhhcyguZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBGb3IgYW5pbWF0aW9uIHB1cnBvc2VzLCBtb3ZlIHRoZSBwYWRkaW5nIHRvIHRoZSBjb250YWluZWQgcGFuZXMuXG4gICAgLmRpdG8tcGFuZSB7XG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICAmOmhhcyg+IC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWw6Zmlyc3Qtb2YtdHlwZSkge1xuICAgICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICAgIHBhZGRpbmctdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICAuZGl0by1zZWxlY3RfX2lubmVyXG4gICAgc2VsZWN0KFxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKTtcblxuLmRpdG8tc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBzZWxlY3Qge1xuICAgIEBleHRlbmQgJWlucHV0O1xuXG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuXG4gIC8vIGAmX19faW5uZXJgIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBlZGl0IGJ1dHRvbnMgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGVcbiAgLy8gc2VsZWN0OlxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuU3dpdGNoQnV0dG9uLmRpdG8tc3dpdGNoKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIHRyaW06IGdldFNjaGVtYUFjY2Vzc29yKCd0cmltJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIGlmIChzY2hlbWEudHJpbSAmJiB2YWx1ZSAhPSBudWxsICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgLy8gVGV4dCBmaWVsZHMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhIGBTdHJpbmdgIHZhbHVlIHdoZW4gYGZvcm1hdCgpYFxuICAgICAgLy8gd2l0aG91dCBgcGFyc2UoKWAgaXMgdXNlZC5cbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG1peGluczogW1RleHRNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIC8vLSBJbiBvcmRlciB0byBoYW5kbGUgdXBsb2FkIGJ1dHRvbnMgaW4gbXVsdGlwbGUgcG9zc2libGUgcGxhY2VzLCBkZXBlbmRpbmdcbiAgLy8tIG9uIHdoZXRoZXIgdGhleSBoYW5kbGUgc2luZ2xlIG9yIG11bHRpcGxlIHVwbG9hZHMsIHJlbmRlciB0aGUgdXBsb2FkXG4gIC8vLSBjb21wb25lbnQgaW52aXNpYmx5IGF0IHRoZSByb290LCBhbmQgZGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50cyB0byBpdCBmcm9tXG4gIC8vLSB0aGUgYnV0dG9ucyByZW5kZXJlZCBmdXJ0aGVyIGJlbG93LiBMdWNraWx5IHRoaXMgd29ya3Mgc3VycHJpc2luZ2x5IHdlbGwuXG4gIFZ1ZVVwbG9hZC5kaXRvLXVwbG9hZF9faW5wdXQoXG4gICAgcmVmPVwidXBsb2FkXCJcbiAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICA6ZHJvcD1cIiRlbD8uY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcIlxuICAgIDpkcm9wRGlyZWN0b3J5PVwidHJ1ZVwiXG4gICAgQGlucHV0LWZpbHRlcj1cIm9uSW5wdXRGaWx0ZXJcIlxuICAgIEBpbnB1dC1maWxlPVwib25JbnB1dEZpbGVcIlxuICApXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gYERpdG9UYWJsZUhlYWRgXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gRmlsZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB2LW1vZGVsPVwiZmlsZXNcIlxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLm5hbWVcIlxuICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2UtaWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBhKFxuICAgICAgICAgICAgICA6ZG93bmxvYWQ9XCJmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICA6aHJlZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zaXplIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc3RhdHVzXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCIhbXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgIHRmb290KFxuICAgICAgdi1pZj1cIm11bHRpcGxlIHx8IGlzVXBsb2FkQWN0aXZlIHx8ICFoYXNGaWxlc1wiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaGFzRmlsZXNcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICB1cGxvYWRUaXRsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ1VwbG9hZCBGaWxlcycgOiAnVXBsb2FkIEZpbGUnXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWRVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIHRodW1ibmFpbFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHRodW1ibmFpbHM6IGdldFNjaGVtYUFjY2Vzc29yKCd0aHVtYm5haWxzJywge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPz8gISF0aGlzLnNjaGVtYS50aHVtYm5haWxVcmxcbiAgICAgIH0sXG4gICAgICBnZXQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA9PT0gdHJ1ZSA/ICdtZWRpdW0nIDogdGh1bWJuYWlscyB8fCBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBoYXNGaWxlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzVXBsb2FkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5oYXNVcGxvYWRzICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1VwbG9hZHMgJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgK2ZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpc1VwbG9hZFJlYWR5KHJlYWR5KSB7XG4gICAgICBpZiAocmVhZHkpIHtcbiAgICAgICAgLy8gQXV0by11cGxvYWQuXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5hY3RpdmUgPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb3JtYXRGaWxlU2l6ZSxcblxuICAgIGdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICA/IG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICA6IHRoaXMuY29udGV4dFxuICAgIH0sXG5cbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXIodGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIGdldERvd25sb2FkVXJsKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gZmlsZS51cmxcbiAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICA6ICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdkb3dubG9hZFVybCcsIHtcbiAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAhZmlsZS51cGxvYWQgfHwgZmlsZS51cGxvYWQuc3VjY2Vzc1xuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3RodW1ibmFpbFVybCcsIHtcbiAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpXG4gICAgICAgICAgfSkgfHwgKFxuICAgICAgICAgICAgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgICAgICAgICAgID8gZmlsZS51cmxcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChcbiAgICAgICAgZmlsZSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0gbmV3RmlsZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIGNvbnN0IHRleHQgPSAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuICAgICAgICAgICAgfVtlcnJvcl0gfHxcbiAgICAgICAgICAgIGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsdGVyKG5ld0ZpbGUgLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5kb3dubG9hZFVybHNbaW5kZXhdKVxuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXG4gICAgICAgIHRoaXMuZG93bmxvYWQoe1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrVXBsb2FkKGV2ZW50KSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnQgdG8gdGhlIGhpZGRlbiBmaWxlIGlucHV0LlxuICAgICAgdGhpcy51cGxvYWQuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IGV2ZW50LmNvbnN0cnVjdG9yKGV2ZW50LnR5cGUsIGV2ZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKCh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAoIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsKSlcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by11cGxvYWQge1xuICAuZGl0by10YWJsZSB7XG4gICAgdHIsXG4gICAgLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cblxuICAmX19zaXplLFxuICAmX19zdGF0dXMge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmICZfX2lucHV0IHtcbiAgICAvLyBTZWUgYG9uQ2xpY2tVcGxvYWQoKWAgbWV0aG9kIGZvciBkZXRhaWxzLlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIC5kaXRvLXByb2dyZXNzIHtcbiAgICAgIGZsZXg6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgb2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfSxcblxuICB1bm1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLnVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZXNpemVTdXBwb3J0ZWQgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnXG5cbmNvbnN0IG9ic2VydmVycyA9IHt9XG5cbmNsYXNzIE9ic2VydmVyIHtcbiAgY29uc3RydWN0b3Ioa2V5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5rZXkgPSBrZXlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5vYnNlcnZlciA9IGlzUmVzaXplU3VwcG9ydGVkXG4gICAgICA/IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuaGFuZGxlKGVudHJpZXMpKVxuICAgICAgOiBudWxsXG4gICAgdGhpcy5oYW5kbGVyc0J5Tm9kZSA9IG5ldyBXZWFrTWFwKClcbiAgICB0aGlzLm5vZGVDb3VudCA9IDBcbiAgfVxuXG4gIG9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGxldCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgaGFuZGxlcnMgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuc2V0KG5vZGUsIGhhbmRsZXJzKVxuICAgICAgdGhpcy5vYnNlcnZlcj8ub2JzZXJ2ZShub2RlLCB0aGlzLm9wdGlvbnMpXG4gICAgICB0aGlzLm5vZGVDb3VudCsrXG4gICAgfVxuICAgIGhhbmRsZXJzLmFkZChoYW5kbGVyKVxuICB9XG5cbiAgdW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKGhhbmRsZXJzPy5kZWxldGUoaGFuZGxlcikgJiYgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5kZWxldGUobm9kZSlcbiAgICAgIHRoaXMub2JzZXJ2ZXI/LnVub2JzZXJ2ZShub2RlKVxuICAgICAgaWYgKC0tdGhpcy5ub2RlQ291bnQgPT09IDApIHtcbiAgICAgICAgZGVsZXRlIG9ic2VydmVyc1t0aGlzLmtleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGUoZW50cmllcykge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChlbnRyeS50YXJnZXQpXG4gICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgdGFyZ2V0OiBlbnRyeS50YXJnZXQsXG4gICAgICAgICAgY29udGVudFJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIC8vIFVzZSBgYXNBcnJheWAgc2luY2UgRmlyZWZveCBiZWZvcmUgdjkyIHJldHVybnMgdGhlc2UgYXMgb2JqZWN0czpcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBhc0FycmF5KGVudHJ5LmJvcmRlckJveFNpemUpLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmNvbnRlbnRCb3hTaXplKSxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmRldmljZVBpeGVsQ29udGVudEJveFNpemUpXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcihldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRPYnNlcnZlcih7IGJveCA9ICdjb250ZW50LWJveCcgfSA9IHt9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgYm94IH1cbiAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zKVxuICAgIG9ic2VydmVyc1trZXldIHx8PSBuZXcgT2JzZXJ2ZXIoa2V5LCBvcHRpb25zKVxuICAgIHJldHVybiBvYnNlcnZlcnNba2V5XVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ2FwcGx5JywgJ2FwcGxpZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdyZW1vdmUnLCAncmVtb3ZlZCcsXG4gICdjbGVhcicsICdjbGVhcmVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCcsXG4gICdsb2dpbicsICdsb2dnZWQgaW4nXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgeyBjcmVhdGVBcHAsIGggYXMgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciwgY3JlYXRlV2ViSGlzdG9yeSB9IGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICdAa3l2Zy92dWUzLW5vdGlmaWNhdGlvbidcbmltcG9ydCB7XG4gIGlzU3RyaW5nLFxuICBpc0Fic29sdXRlVXJsLFxuICBhc3NpZ25EZWVwbHksXG4gIGh5cGhlbmF0ZSxcbiAgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzLFxuICBkZXByZWNhdGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgUmVzaXplRGlyZWN0aXZlIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBhc3NpZ25EZWVwbHkoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBhc3NpZ25EZWVwbHkoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgZGVmaW5pdGlvbiBvZiBkZWZhdWx0cyBmb3IgYWRtaW4gY29tcG9uZW50IHR5cGVzLCBuZXN0ZWQgcGVyIHR5cGU6XG4gICAgLy8gYXBpLmRlZmF1bHRzID0ge1xuICAgIC8vICAgJ211bHRpc2VsZWN0Jzoge1xuICAgIC8vICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgLy8gICB9LFxuICAgIC8vICAgJ2Zha2UtdHlwZSc6IHNjaGVtYSA9PiB7XG4gICAgLy8gICAgIC8vIFJldHVybiBkZWZhdWx0cywgb3IgZGlyZWN0bHkgbW9kaWZ5IHRoZSBzY2hlbWE6XG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCB7XG4gICAgLy8gICAgICAgdHlwZTogJ3JlYWwtdHlwZScsXG4gICAgLy8gICAgICAgZm9ybWF0OiAoeyB2YWx1ZSB9KSA9PiBgRm9ybWF0dGVkICR7dmFsdWV9YCxcbiAgICAvLyAgICAgICBwcm9jZXNzOiAoeyB2YWx1ZSB9KSA9PiBgUHJvY2Vzc2VkICR7dmFsdWV9YFxuICAgIC8vICAgICB9KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5kZWZhdWx0cyB8fD0ge31cblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICBhcGkudXNlcnMgPSB1c2Vyc1xuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9ICh0aGlzLmFwcCA9IGNyZWF0ZUFwcCh7XG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIERpdG9Sb290LFxuICAgICAgICBWdWVOb3RpZmljYXRpb25zLFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLlxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAuLi50eXBlc1xuICAgICAgfSxcblxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6ICgpID0+XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgICByZWY6ICdyb290JyxcbiAgICAgICAgICBjbGFzczogZGl0by5zZXR0aW5ncy5yb290Q2xhc3MsXG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0pXG4gICAgfSkpXG5cbiAgICAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHMgb2YgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHJlbmRlciBmdW5jdGlvbnMgYnlcbiAgICAvLyBzZXR0aW5nIGEgY3VzdG9tIGVycm9yIGhhbmRsZXIuXG4gICAgYXBwLmNvbmZpZy5lcnJvckhhbmRsZXIgPSBjb25zb2xlLmVycm9yXG5cbiAgICBhcHAudXNlKFZ1ZU5vdGlmaWNhdGlvbnMsIHtcbiAgICAgIG5hbWU6ICdub3RpZnknLFxuICAgICAgY29tcG9uZW50TmFtZTogJ1Z1ZU5vdGlmaWNhdGlvbnMnXG4gICAgfSlcblxuICAgIGFwcC5kaXJlY3RpdmUoJ3Jlc2l6ZScsIFJlc2l6ZURpcmVjdGl2ZSlcblxuICAgIGFwcC51c2UoXG4gICAgICBjcmVhdGVSb3V0ZXIoe1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgY2F0Y2gtYWxsIHJvdXRlLCB0byBiZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIHJvdXRlc1xuICAgICAgICAvLyBvbmNlIHRoZSBzY2hlbWFzIGFyZSBsb2FkZWQsIHRvIHByZXZlbnQgdnVlLXJvdXRlciBmcm9tIGNvbXBsYWluaW5nLFxuICAgICAgICAvLyBzZWU6IGByZXNvbHZlVmlld3MoKWAgaW4gYERpdG9Sb290YCBmb3IgdGhlIGFjdHVhbCByb3V0ZSBzZXR1cC5cbiAgICAgICAgcm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NhdGNoLWFsbCcsXG4gICAgICAgICAgICBwYXRoOiAnLzpfKC4qKScsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaGlzdG9yeTogY3JlYXRlV2ViSGlzdG9yeShkaXRvLmJhc2UpLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGl0by1hcHAnKVxuICAgIGFwcC5tb3VudChlbClcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke1xuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0XG4gICAgICB9KWBcbiAgICApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvbiAyMDIyLTExLTAxLFxuICAvLyByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShcbiAgICAgIGByZXF1ZXN0LnBhcmFtcyBpcyBkZXByZWNhdGVkLiBVc2UgYWN0aW9uLm1ldGhvZCBhbmQgYWN0aW9uLnBhdGggaW5zdGVhZC5gXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXNBcGlVcmwgPSBhcGkuaXNBcGlVcmwodXJsKVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnkgfSksIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpVXJsICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOlxuICAgICAgaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICAgID8gJ2luY2x1ZGUnXG4gICAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG4iXSwibmFtZXMiOlsicGFyc2VVc2VyQWdlbnQiLCJ1c2VyQWdlbnQiLCJhZ2VudCIsInVhIiwib3MiLCJwbGF0Zm9ybSIsIm1hdGNoIiwiYnJvd3NlciIsInYxIiwidjIiLCJydiIsInZlcnNpb24iLCJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInRvUmF3IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJpdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsImVtYWlsIiwiaXNFbWFpbCIsImhvc3RuYW1lIiwiaXNIb3N0bmFtZSIsImRvbWFpbiIsImlzRG9tYWluIiwiaW50ZWdlciIsIm1heCIsIm1pbiIsInBhc3N3b3JkIiwicmFuZ2UiLCJyZXF1aXJlZCIsInNldHRpbmdzIiwidXJsIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImtleU9yRGF0YVBhdGgiLCJ0eXBlIiwiZGVmIiwiaXNTdHJpbmciLCJuYW1lIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsImNvbXB1dGVWYWx1ZSIsImZvcm1hdCIsInBhcnNlIiwic2NoZW1hQ29tcG9uZW50Iiwibm9kZSIsImV2ZW50cyIsImNhbWVsaXplIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsIl9iIiwiZWxlbWVudCIsImFzQXJyYXkiLCJ1aWRNYXAiLCJ1aWQiLCJnZXRVaWQiLCJnZXRJdGVtSWQiLCJyYXciLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJkZWZhdWx0cyIsInN1YkdyYXBoIiwicGFydCIsInNjaGVtYSIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJpbnRlcm5hbCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwidG9TdHJpbmciLCJ0b0RhdGUiLCJ0b0FycmF5IiwidG9PYmplY3QiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwicmVnaXN0ZXJUeXBlQ29tcG9uZW50IiwiZ2V0VHlwZUNvbXBvbmVudCIsImFsbG93TnVsbCIsIml0ZXJhdGVTY2hlbWFDb21wb25lbnRzIiwic2NoZW1hcyIsImlzU2luZ2xlQ29tcG9uZW50VmlldyIsImlzU2NoZW1hIiwiaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJnZXRUYWJTY2hlbWFzIiwiZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCIsInNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiaXNGb3JtIiwiaXNWaWV3IiwiaXNUYWIiLCJpc1BhbmVsIiwiaXNNZW51IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJyZXNvbHZlVmlld3MiLCJ1bnJlc29sdmVkVmlld3MiLCJmbGF0dGVuVmlld3MiLCJ2aWV3cyIsInJlc29sdmVTY2hlbWFDb21wb25lbnQiLCJtYXJrUmF3IiwiRGl0b01peGluIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImFwaSIsInJvdXRlcyIsImxldmVsIiwicHJvbWlzZXMiLCJwcm9jZXNzIiwicmVsYXRpdmVMZXZlbCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJwcm9jZXNzU2NoZW1hRGVmYXVsdHMiLCJwYW5lbCIsImdldFR5cGVPcHRpb25zIiwicHJvY2Vzc1ZpZXciLCJmdWxsUGF0aCIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImNoaWxkcmVuIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJhc3NpZ25EZWVwbHkiLCJwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMiLCJmb3JtcyIsImdldEZvcm1TY2hlbWFzIiwiZm9ybSIsInByb2Nlc3NGb3JtcyIsImNvbXBvbmVudHMiLCJwcm9jZXNzRm9ybSIsInByb2Nlc3NUYWIiLCJwcm9jZXNzUGFuZWwiLCJ0YWJzIiwicGFuZWxzIiwidGFiIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImhhc1ZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsImhhc0xhYmVsIiwiZ2VuZXJhdGVMYWJlbHMiLCJsYWJlbCIsIm9taXRTcGFjaW5nIiwiZ2V0U2NoZW1hVmFsdWUiLCJjb252ZXJ0ZWQiLCJzaG91bGRSZW5kZXJTY2hlbWEiLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYSIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwiZ2V0Q29udGV4dCIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsIml0ZW1EYXRhUGF0aCIsInByb2Nlc3NlZEl0ZW0iLCJnZXROYW1lZFNjaGVtYXMiLCJhcnJheSIsInRvU2NoZW1hIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImJ1dHRvbnMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsRW50cnkiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYXMiLCJwYW5lbEVudHJpZXMiLCJnZXRBbGxQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYSIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbVVpZCIsImhhc1Jlc291cmNlIiwiZ2V0UmVzb3VyY2UiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJzZWxmIiwibmV4dFVpZCIsImxhYmVsaXplIiwic3RvcmUiLCJvbGRLZXkiLCJ2ZXJiIiwicXVlcnkiLCJtZXRob2QiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImJvZHkiLCJnZXRDb21wdXRlZEFjY2Vzc29yIiwiZ2V0dGVyIiwiY29tcHV0ZWQiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJwYXJhbXMiLCJyZXNvbHZlTWVyZ2VkT3B0aW9ucyIsIm1peGlucyIsIm1lcmdlT3B0aW9ucyIsInRvIiwiZnJvbSIsIm1peGluIiwiZGl0b09wdGlvbktleXMiLCJEaXRvQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsImRlc2NyaWJlRGF0ZSIsImRhdGUiLCJhbHRlckRhdGUiLCJvdmVycmlkZXMiLCJwYXJzZURhdGUiLCJzdHJpbmciLCJ0aW1lIiwidGltZURlZmF1bHQiLCJkYXkiLCJzZXAxIiwibW9udGgiLCJzZXAyIiwieWVhciIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImdldERhdGVQYXJ0cyIsImdldE1vbnRoSW5kZXgiLCJpc1ZhbGlkVGltZVBhcnQiLCJnZXREYXRlUGFydEF0UG9zaXRpb24iLCJwb3NpdGlvbiIsInBhcnRzIiwiZ2V0UG9zaXRpb24iLCJsZW5ndGgiLCJwb3MiLCJvZmZzZXQiLCJpc1VTIiwic3RhcnQiLCJlbmQiLCJzaG9ydEZvcm1hdCIsImxvbmdGb3JtYXQiLCJpIiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibW9kZSIsInVwZGF0ZSIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJlbnRlciIsInN0YXJ0WWVhciIsImZpcnN0RGF5V2VlayIsIm51bURheXMiLCJwcmV2TW9udGgiLCJwcmV2TW9udGhOdW1EYXlzIiwibm93IiwiaXNEYXkiLCJzdGF0ZSIsIm5leHRNb250aE5lZWQiLCJuZXh0TW9udGgiLCJsb2NhbGVOYW1lcyIsIm5hbWVzIiwiYWRkRXZlbnRzIiwidGFyZ2V0cyIsImhhbmRsZXIiLCJjb21iaW5lRXZlbnRzIiwiZ2V0S2V5IiwiZ2V0S2V5TmF2aWdhdGlvbiIsImdldFRhcmdldCIsImNsYXNzZXMiLCJzaG93IiwidHJpZ2dlciIsInBvcHVwIiwiX2MiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsImlucHV0IiwiXyIsInNpemUiLCJnZXRMZW5ndGgiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsInNldFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJJY29uIiwiZGVmYXVsdEZvcm1hdHMiLCJnZXREYXRlUGFydCIsImNhbGVuZGFyIiwidG9nZ2xlIiwic2VsZWN0aW9uIiwic21vb3RoIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsImRpc3RhbmNlIiwiY291bnQiLCJpc0RpZ2l0IiwiY2hhciIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwidHJhbnNpdGlvbiIsImRpc2FibGVkIiwidGV4dCIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsIm1vZGVsVmFsdWUiLCJUcmFuc2l0aW9uSGVpZ2h0IiwiZW5hYmxlZCIsInNsb3RzIiwiY3JlYXRlRWxlbWVudCIsIlRyYW5zaXRpb24iLCJwcm9wcyIsInNldFN0eWxlIiwic3R5bGUiLCJuZXh0VGltZW91dCIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzVk5vZGVDb250ZW50Iiwidm5vZGUiLCJDb21tZW50IiwiaGFzU2xvdENvbnRlbnQiLCJzbG90IiwidXNlU2xvdHMiLCJEb21NaXhpbiIsInJlbW92ZSIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJyb3V0ZUNvbXBvbmVudCIsIm1hdGNoZWQiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsImlzTG9hZGluZyIsIlVzZUZvY3VzVHJhcCIsImRlZmluZUNvbXBvbmVudCIsInRyYXAiLCJhY3RpdmF0ZSIsImRlYWN0aXZhdGUiLCJ1bnJlZkVsZW1lbnQiLCJjcmVhdGVGb2N1c1RyYXAiLCJvblNjb3BlRGlzcG9zZSIsImgiLCJkaWFsb2dEYXRhIiwiRGl0b0RpYWxvZyIsInByZWZpeCIsInRpcHB5RGVsZWdhdGUiLCJpbnN0YW5jZSIsImVyciIsImRyYWdDb3VudCIsInVwbG9hZHMiLCJ0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MiLCJ1cGxvYWQiLCJzZXREcmFnZ2luZ0ZpbGVzIiwiaGFzVXBsb2FkcyIsImNhbkRyb3AiLCJ0aXRsZSIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImR1cmF0aW9uIiwicmVqZWN0IiwiZGlhbG9nSWQiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJzdWJNZW51Q2xhc3MiLCJmaXJzdENoaWxkIiwiRGl0b1NwaW5uZXIiLCJjb2xvciIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiY29udGVudCIsImFzT2JqZWN0IiwiSXRlbU1peGluIiwiaXRlbUlkIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJzdWZmaXgiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJzZWxlY3RlZFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImhhc2giLCJkYXRhUGF0aE9yTmFtZSIsInNjcm9sbENvbnRhaW5lciIsImRpc3BhdGNoIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInBhbmUiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3dpdGhEaXJlY3RpdmVzIiwiX0ZyYWdtZW50IiwiX2N0eCIsIm5lc3RlZERhdGFQYXRoIiwiX2hvaXN0ZWRfMSIsIl9jcmVhdGVCbG9jayIsIl9jb21wb25lbnRfRGl0b0NvbnRhaW5lciIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImJ1dHRvbiIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJoYXNEYXRhIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiJHNjaGVtYSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInRpcCIsInRpcHB5Iiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfcmVuZGVyTGlzdCIsIl9jb21wb25lbnRfRGl0b0xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9EaXRvVGFibGVDZWxsIiwiX2NvbXBvbmVudF9EaXRvRHJhZ2dhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIlRZUEVTIiwiZmlsZSIsInJlYWRlciIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsInByb3AiLCJfX29ialJlc3QiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwidGltZXIiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJEYXRlVGltZVBpY2tlciIsImZvcm1hdHMiLCJmb3JtYXRRdWVyeSIsInZhbCIsInJlcGxhY2VSb3V0ZSIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJkcmFnZ2FibGUiLCJjb2xsYXBzaWJsZSIsInJlbW92ZWQiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZXRpbWUiLCJjcmVhdGVGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwic3RpY2t5IiwiZmlsdGVyU2NoZW1hcyIsInBhcnNlRmlsdGVyc0RhdGEiLCJjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyIsImNyZWF0ZUZpbHRlcnNCdXR0b25zIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJzbWFsbCIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiX2NvbXBvbmVudF9EaXRvVGFibGVIZWFkIiwiX2NvbXBvbmVudF9EaXRvU2NoZW1hSW5saW5lZCIsIl9yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIl9jb21wb25lbnRfRGl0b0VkaXRCdXR0b25zIiwiX2hvaXN0ZWRfOSIsImZpbHRlcnNEYXRhUGF0aCIsIkVkaXRvckNvbnRlbnQiLCJlZGl0b3IiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwib25VcGRhdGUiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJjb21tYW5kcyIsImFkZEJ1dHRvbiIsImljb24iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsImF0dHJpYnV0ZSIsIk1hcmsiLCJMaW5rIiwiX2NvbXBvbmVudF9WdWVNdWx0aXNlbGVjdCIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIlN3aXRjaEJ1dHRvbiIsIlRleHRNaXhpbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJ0aHVtYm5haWxzIiwicmVhZHkiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImJsb2IiLCJmaWxlcyIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsIkRpdG9BZG1pbiIsImRpdG8iLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiZGVwcmVjYXRlIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHTyxTQUFTQSxHQUFlQyxJQUFZLElBQUk7QUFDN0MsUUFBTUMsSUFBUSxDQUFFLEdBRVZDLElBQUtGLEVBQVUsWUFBYSxHQUM1QixDQUFDRyxDQUFFLElBQ1Asa0VBQWtFO0FBQUEsSUFDaEVEO0FBQUEsRUFDTixLQUFTLENBQUUsR0FDSEUsSUFDSjtBQUFBLElBQ0UsUUFBVTtBQUFBLElBQ1YsUUFBVTtBQUFBLElBQ1YsTUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsRUFDbkIsRUFBQ0QsQ0FBRSxLQUNKQTtBQUVGLFNBQUlDLE1BQ0ZILEVBQU0sV0FBV0csR0FDakJILEVBQU1HLENBQVEsSUFBSSxLQUVwQkYsRUFBRztBQUFBLElBQ0Q7QUFBQSxJQUNBLENBQUNHLEdBQU9DLEdBQVNDLEdBQUlDLEdBQUlDLE1BQU87QUFFOUIsVUFBSSxDQUFDUixFQUFNLFFBQVE7QUFDakIsY0FBTVMsSUFBVUQsS0FBTUQsS0FBTUQ7QUFDNUIsU0FBSSxDQUFDTixFQUFNLFdBQVdLLE1BQVksY0FHaENMLEVBQU0sVUFBVVMsR0FDaEJULEVBQU0sZ0JBQWdCLFdBQVdTLENBQU8sSUFFMUNULEVBQU0sVUFBVUssR0FDaEJMLEVBQU1LLENBQU8sSUFBSTtBQUFBO0FBQUEsSUFFcEI7QUFBQSxFQUNGLEdBQ0dMLEVBQU0sVUFFUixPQUFPQSxFQUFNLFFBRVJBO0FBQ1Q7QUMzQ0EsTUFBQVUsS0FBZUMsR0FBUztBQUFBLEVBQ3RCLE9BQU87QUFBQSxFQUNQLGlCQUFpQixDQUFFO0FBQUEsRUFDbkIsTUFBTTtBQUFBLEVBQ04sT0FBT2IsR0FBZSxVQUFVLGFBQWEsRUFBRTtBQUFBLEVBQy9DLFdBQVcsQ0FBRTtBQUFB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
10911
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2FnZW50LmpzIiwiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy90cmlnZ2VyLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU3Bpbm5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9OYXZpZ2F0aW9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TaWRlYmFyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvcGF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9VcGxvYWRGaWxlLnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RyYWdnYWJsZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL0RpdG9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZURhdGUudnVlIiwiLi4vc3JjL3V0aWxzL3JvdXRlLmpzIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy9taXhpbnMvVGV4dE1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL2RpcmVjdGl2ZXMvcmVzaXplLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHVzZXItYWdlbnQgcGFyc2VyIHdhcyBsaWZ0ZWQgZnJvbSBQYXBlci5qczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXBlcmpzL3BhcGVyLmpzL2Jsb2IvY2MxNTY5Njc1MDAzNWFiMDBlMDBjNjRjN2M5NWRhYTJjODVlZmUwMS9zcmMvY29yZS9QYXBlclNjb3BlLmpzI0w3NS1MMTA3XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVzZXJBZ2VudCh1c2VyQWdlbnQgPSAnJykge1xuICBjb25zdCBhZ2VudCA9IHt9XG4gIC8vIFVzZSByZXBsYWNlKCkgdG8gZ2V0IGFsbCBtYXRjaGVzLCBhbmQgZGVhbCB3aXRoIENocm9tZS9XZWJraXQgb3ZlcmxhcDpcbiAgY29uc3QgdWEgPSB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBbb3NdID1cbiAgICAvKGlwaG9uZXxpcGFkfGxpbnV4OyBhbmRyb2lkfGRhcndpbnx3aW58bWFjfGxpbnV4fGZyZWVic2R8c3Vub3MpLy5leGVjKFxuICAgICAgdWFcbiAgICApIHx8IFtdXG4gIGNvbnN0IHBsYXRmb3JtID0gKFxuICAgIHtcbiAgICAgICdkYXJ3aW4nOiAnbWFjJyxcbiAgICAgICdpcGhvbmUnOiAnaW9zJyxcbiAgICAgICdpcGFkJzogJ2lvcycsXG4gICAgICAnbGludXg7IGFuZHJvaWQnOiAnYW5kcm9pZCdcbiAgICB9W29zXSB8fFxuICAgIG9zXG4gIClcbiAgaWYgKHBsYXRmb3JtKSB7XG4gICAgYWdlbnQucGxhdGZvcm0gPSBwbGF0Zm9ybVxuICAgIGFnZW50W3BsYXRmb3JtXSA9IHRydWVcbiAgfVxuICB1YS5yZXBsYWNlKFxuICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXx3ZWJraXR8ZmlyZWZveHxtc2llfHRyaWRlbnQpXFwvP1xccyooWy5cXGRdKykoPzouKnZlcnNpb25cXC8oWy5cXGRdKykpPyg/Oi4qcnY6dj8oWy5cXGRdKykpPy9nLFxuICAgIChtYXRjaCwgYnJvd3NlciwgdjEsIHYyLCBydikgPT4ge1xuICAgICAgLy8gRG8gbm90IHNldCBhZGRpdGlvbmFsIGJyb3dzZXJzIG9uY2UgY2hyb21lIGlzIGRldGVjdGVkLlxuICAgICAgaWYgKCFhZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHJ2IHx8IHYyIHx8IHYxXG4gICAgICAgIGlmICghYWdlbnQudmVyc2lvbiB8fCBicm93c2VyICE9PSAnc2FmYXJpJykge1xuICAgICAgICAgIC8vIFVzZSB0aGUgdmVyc2lvbiB3ZSBnZXQgZm9yIHdlYmtpdCBmb3IgU2FmYXJpLCB3aGljaCBpcyBhY3R1YWxseVxuICAgICAgICAgIC8vIFRoZSBTYWZhcmkgdmVyc2lvbiwgZS5nLiAxNi4wXG4gICAgICAgICAgYWdlbnQudmVyc2lvbiA9IHZlcnNpb25cbiAgICAgICAgICBhZ2VudC52ZXJzaW9uTnVtYmVyID0gcGFyc2VGbG9hdCh2ZXJzaW9uKVxuICAgICAgICB9XG4gICAgICAgIGFnZW50LmJyb3dzZXIgPSBicm93c2VyXG4gICAgICAgIGFnZW50W2Jyb3dzZXJdID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgKVxuICBpZiAoYWdlbnQuY2hyb21lKSB7XG4gICAgLy8gQ2FuJ3QgaGF2ZSBpdCBib3RoIHdheXMsIENocm9tZS5cbiAgICBkZWxldGUgYWdlbnQud2Via2l0XG4gIH1cbiAgcmV0dXJuIGFnZW50XG59XG4iLCJpbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IHBhcnNlVXNlckFnZW50IH0gZnJvbSAnLi91dGlscy9hZ2VudCdcblxuZXhwb3J0IGRlZmF1bHQgcmVhY3RpdmUoe1xuICB0aXRsZTogJycsXG4gIHJvdXRlQ29tcG9uZW50czogW10sXG4gIHVzZXI6IG51bGwsXG4gIGFnZW50OiBwYXJzZVVzZXJBZ2VudChuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnKSxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn0pXG4iLCJpbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbikge1xuICByZXR1cm4gZGF0YVBhdGhcbiAgICA/IGAke2RhdGFQYXRofS8ke3Rva2VufWBcbiAgICA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICBwYXRoPy5wb3AoKVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBuZXN0ZWQgPyBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSA6IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgaWYgKHBhdGgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCB0b2tlbi4gSWYgaXQncyBhIG51bWJlciwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW5cbiAgICAvLyBhcnJheSBhbmQgbmVlZCB0byByZW1vdmUgbW9yZSB0b2tlbnMgdW50aWwgd2UgbWVldCB0aGUgYWN0dWFsIHBhcmVudDpcbiAgICBsZXQgdG9rZW5cbiAgICBkbyB7XG4gICAgICB0b2tlbiA9IHBhdGgucG9wKClcbiAgICB9IHdoaWxlICh0b2tlbiAhPSBudWxsICYmIGlzSW50ZWdlcigrdG9rZW4pKVxuICAgIC8vIElmIHRoZSByZW1vdmVkIHRva2VuIGlzIHZhbGlkLCB3ZSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGF0YTpcbiAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhOYW1lKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIHJldHVybiB0b2tlbiA9PSBudWxsIHx8IGlzSW50ZWdlcigrdG9rZW4pID8gbnVsbCA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhJbmRleChkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICBjb25zdCBpbmRleCA9IHRva2VuID09IG51bGwgPyBudWxsIDogK3Rva2VuXG4gIHJldHVybiBpc0ludGVnZXIoaW5kZXgpID8gaW5kZXggOiBudWxsXG59XG5cbmxldCB0ZW1wb3JhcnlJZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZW1wb3JhcnlJZChkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGlkcyBhcmUgbWFya2VkIHdpdGggYSAnQCcgYXQgdGhlIGJlZ2lubmluZy5cbiAgZGF0YVtpZEtleV0gPSBgQCR7Kyt0ZW1wb3JhcnlJZH1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBvcmFyeUlkKGlkKSB7XG4gIHJldHVybiAvXkAvLnRlc3QoaWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7XG4gIGdldEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtLFxuICBnZXRJdGVtLFxuICBnZXRMYXN0RGF0YVBhdGhOYW1lLFxuICBnZXRMYXN0RGF0YVBhdGhJbmRleFxufSBmcm9tICcuL3V0aWxzL2RhdGEuanMnXG5cbmNvbnN0IHsgaGFzT3duUHJvcGVydHkgfSA9IE9iamVjdC5wcm90b3R5cGVcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KHRvUmF3KGNvbnRleHQpKVxuICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHxcbiAgICAgIG51bGxcbiAgICApXG4gICAgcmV0dXJuIGl0ZW0gIT09IHRoaXMuaXRlbSA/IGl0ZW0gOiBudWxsXG4gIH1cblxuICBnZXQgcm9vdEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncm9vdERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncHJvY2Vzc2VkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdChuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgaWYgKHBhcnNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsTm9kZSgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmlzTW91bnRlZCA/IHRoaXMuJGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBudWxsXG4gICAgICByZXR1cm4gbm9kZT8ubWF0Y2hlcygnLmRpdG8tbGFiZWwnKSA/IG5vZGUgOiBudWxsXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmc/XG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYXN5bmMgc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LnNjcm9sbEludG9WaWV3Py4oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uZm9jdXM/LigpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uYmx1cj8uKClcbiAgICB9LFxuXG4gICAgZ2V0Rm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVswXSA/PyB0aGlzXG4gICAgICByZXR1cm4gZWxlbWVudC4kZWwgPz8gZWxlbWVudFxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1c1NjaGVtYSgpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIGF3YWl0IHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIGF3YWl0IHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuYmx1ckVsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmJsdXIoKVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBwYXJzZSByZWN1cnNpb246XG4gICAgICAgICAgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucGFyc2VkVmFsdWUgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChpdGVtLCBnZXRJdGVtSWQgPSBudWxsKSB7XG4gIGNvbnN0IHJhdyA9IHRvUmF3KGl0ZW0pXG4gIGxldCBpZCA9IHVpZE1hcC5nZXQocmF3KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpZXdzKHVucmVzb2x2ZWRWaWV3cykge1xuICByZXR1cm4gcmVzb2x2ZVNjaGVtYXModW5yZXNvbHZlZFZpZXdzLCBhc3luYyAoc2NoZW1hLCB1bndyYXBNb2R1bGUpID0+IHtcbiAgICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlKVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgaXNNZW51KHNjaGVtYSkpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGEgbmFtZSBmb3Igc3ViLW1lbnVzIGZyb20gdGhlaXIgbGFiZWwgaWYgaXQncyBtaXNzaW5nLlxuICAgICAgLy8gTk9URTogVGhpcyBpcyBuZXZlciBhY3R1YWxseSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUsIGJ1dCB0aGV5IG5lZWRcbiAgICAgIC8vIGEgbmFtZSBieSB3aGljaCB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgcGFyZW50IG9iamVjdC5cbiAgICAgIHNjaGVtYS5uYW1lID0gY2FtZWxpemUoc2NoZW1hLmxhYmVsKVxuICAgICAgc2NoZW1hLml0ZW1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoc2NoZW1hLml0ZW1zKVxuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVmlld3Modmlld3MpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2aWV3cykucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHNjaGVtYV0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpIHtcbiAgLy8gUmVzb2x2ZXMgYXN5bmMgc2NoZW1hIGNvbXBvbmVudHMgYW5kIGFkZHMgRGl0b01peGluIGFuZCBUeXBlTWl4aW4gdG8gdGhlbS5cbiAgbGV0IHsgY29tcG9uZW50IH0gPSBzY2hlbWFcbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudCA9IGF3YWl0IHJlc29sdmVTY2hlbWEoY29tcG9uZW50LCB0cnVlKVxuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgd2FybmluZzogXCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZVxuICAgICAgLy8gb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBhbmQgc2hvdWxkXG4gICAgICAvLyBiZSBhdm9pZGVkIGJ5IG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIGBtYXJrUmF3YFwiOlxuICAgICAgc2NoZW1hLmNvbXBvbmVudCA9IG1hcmtSYXcoe1xuICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgIG1peGluczogW0RpdG9NaXhpbiwgVHlwZU1peGluLCAuLi4oY29tcG9uZW50Lm1peGlucyB8fCBbXSldXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcykge1xuICAvLyBgc2NoZW1hc2AgYXJlIG9mIHRoZSBzYW1lIHBvc3NpYmxlIGZvcm1zIGFzIHBhc3NlZCB0byBgZ2V0TmFtZWRTY2hlbWFzKClgXG4gIGF3YWl0IG1hcENvbmN1cnJlbnRseShPYmplY3QudmFsdWVzKHNjaGVtYXMgfHwge30pLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDBcbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGNvbnN0IHByb2Nlc3MgPSAoY29tcG9uZW50LCBuYW1lLCByZWxhdGl2ZUxldmVsKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHByb2Nlc3NTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIGFwaSxcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsICsgcmVsYXRpdmVMZXZlbFxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgcHJvY2VzcylcbiAgaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksIHByb2Nlc3MpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICBhcGksXG4gIHNjaGVtYSxcbiAgbmFtZSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAvLyBBbHNvIHByb2Nlc3MgbmVzdGVkIHBhbmVsIHNjaGVtYXMuXG4gICAgbWFwQ29uY3VycmVudGx5KFxuICAgICAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHBhbmVsLCByb3V0ZXMsIGxldmVsKVxuICAgICksXG4gICAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsXG4gICAgKVxuICBdKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSAnJykge1xuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGgpXG4gIGxldCBjaGlsZHJlbiA9IFtdXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbilcbiAgfSBlbHNlIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgIGNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpLm1hcChhc3luYyAoW25hbWUsIGl0ZW1dKSA9PlxuICAgICAgICBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgaXRlbSwgbmFtZSwgc2NoZW1hLmZ1bGxQYXRoKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdGg6IHNjaGVtYS5mdWxsUGF0aCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgbGV0IGRlZmF1bHRzID0gYXBpLmRlZmF1bHRzW3NjaGVtYS50eXBlXVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0cykpIHtcbiAgICAgIGRlZmF1bHRzID0gZGVmYXVsdHMoc2NoZW1hKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSBhc3NpZ25EZWVwbHkodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aCA9IG51bGwpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpbi5cbiAgc2NoZW1hLm5hbWUgPz89IG5hbWVcbiAgc2NoZW1hLnBhdGggPz89IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG4gIGlmIChmdWxsUGF0aCAhPT0gbnVsbCkge1xuICAgIHNjaGVtYS5mdWxsUGF0aCA9IGAke2Z1bGxQYXRofS8ke3NjaGVtYS5wYXRofWBcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIGZvcm0gPT5cbiAgICAgIHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgICApXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgZm9ybSA9IHtcbiAgICAgIHR5cGU6ICdmb3JtJyxcbiAgICAgIGNvbXBvbmVudHNcbiAgICB9XG4gIH1cblxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybShhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NUYWIoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNUYWIoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWIgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzUGFuZWwoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNQYW5lbChzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhbmVsIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpIHtcbiAgY29uc3QgeyB0YWJzLCBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAodGFicykge1xuICAgIHNjaGVtYS50YWJzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICB0YWJzLFxuICAgICAgdGFiID0+IHByb2Nlc3NUYWIoYXBpLCB0YWIpXG4gICAgKVxuICB9XG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICBwYW5lbHMsXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzUGFuZWwoYXBpLCBwYW5lbClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCh2aWV3U2NoZW1hLCBoYXNGb3JtU2NoZW1hKSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC5mbGF0dGVuZWRWaWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAhIWdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgaWQsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIGNvbnN0IHBhdGggPSBpc1NpbmdsZUNvbXBvbmVudFZpZXcodmlldylcbiAgICAgID8gdmlldy5mdWxsUGF0aFxuICAgICAgOiBgJHt2aWV3LmZ1bGxQYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGNvbnRleHQgJiYgZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zIH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGNvbnN0IHsgbmFtZSwgY29tcGFjdCwgY2xpcGJvYXJkLCB0YWJzLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgICBpZiAoY29tcG9uZW50cyB8fCB0YWJzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgZm9ybXMgdG8gc3RhbmQtYWxvbmUgZm9ybXMsIHN1cHBvcnRpbmcgYG5hbWVgLFxuICAgICAgLy8gYGNvbXBhY3RgLCBgY2xpcGJvYXJkYCwgYHRhYnNgIGFuZCBgY29tcG9uZW50c2Agc2V0dGluZ3MuXG4gICAgICBmb3JtID0geyB0eXBlOiAnZm9ybScsIG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoY29udGV4dCAmJiBpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEubmVzdGVkIHx8IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEsIGdlbmVyYXRlTGFiZWxzKSB7XG4gIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICByZXR1cm4gKFxuICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAhIWxhYmVsIHx8XG4gICAgICBnZW5lcmF0ZUxhYmVscyAmJiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZW5lcmF0ZUxhYmVsXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0U3BhY2luZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFNwYWNpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZhbHVlKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIHNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYsIGNvbnRleHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgIGRlZiA9IGRlZihjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gZGVmXG4gIH1cblxuICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhbHVlID0gdmFsdWUoY29udGV4dClcbiAgfVxuICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgc2NoZW1hLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSAmJiAoXG4gICAgICAhaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHx8XG4gICAgICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY29tcG9uZW50ID0+XG4gICAgICAgIHNob3VsZFJlbmRlclNjaGVtYShjb21wb25lbnQsIGNvbnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPVxuICAgIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8IHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKFxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhXG4gICAgICB9KVxuICAgIClcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSB0byB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2FsbGluZ1xuICAgICAgLy8gcGFyc2UoKTpcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gb2YgYGRhdGFbbmFtZV1gLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgcm9vdERhdGEsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhLCBzY2hlbWFPbmx5LCB0YXJnZXQgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGF0YVBhdGggPVxuICAgICAgICAgICAgICBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogaXRlbURhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1EYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjb21wb25lbnREYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGZvciAoY29uc3QgdGFiIG9mIGdldFRhYlNjaGVtYXMoc2NoZW1hKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKHNjaGVtYXMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPVxuICAgICAgICAgICAgICBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgKVxuICAgIDogaXNPYmplY3Qoc2NoZW1hcylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oZ2V0VHlwZShzY2hlbWFPclR5cGUpKSA/P1xuICAgIG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxFbnRyeShzY2hlbWEsIGRhdGFQYXRoID0gbnVsbCwgdGFiQ29tcG9uZW50ID0gbnVsbCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgZGF0YVBhdGggIT0gbnVsbCAmJiBzY2hlbWEubmFtZVxuICAgICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cmllcyhcbiAgcGFuZWxTY2hlbWFzLFxuICBkYXRhUGF0aCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZGF0YVBhdGggIT0gbnVsbCA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpIDogbnVsbCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcGFuZWxFbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYlNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnRhYnMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnBhbmVscyA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLnBhbmVscykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGggPSBudWxsLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgcmVzb3VyY2UgPSBpc09iamVjdChyZXNvdXJjZSlcbiAgICA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpXG4gICAgICA/IHsgLi4uZGVmcywgcGF0aDogcmVzb3VyY2UgfVxuICAgICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgICAgLi4ucGlja0J5KFxuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKSxcbiAgICAgICAgaWQ6IGAke2lkfWBcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgZXF1YWxzLFxuICBsYWJlbGl6ZSxcbiAgaHlwaGVuYXRlLFxuICBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQge1xuICBmbGF0dGVuVmlld3MsXG4gIGdldFNjaGVtYVZhbHVlLFxuICBzaG91bGRSZW5kZXJTY2hlbWFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICBjb25zdCBzZWxmID0gKCkgPT4gdGhpc1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogc2VsZixcbiAgICAgICAgICAkZGF0YUNvbXBvbmVudDogc2VsZlxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW5WaWV3cyh0aGlzLnZpZXdzKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kcmVmcy5yb290XG4gICAgfSxcblxuICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICBwYXJlbnRDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Q29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0b3JlXG4gICAgfSxcblxuICAgIHJlbW92ZUNoaWxkU3RvcmUoa2V5LCBpbmRleCkge1xuICAgICAgLy8gR0V0IHRoZSBjaGlsZC1zdG9yZSBmaXJzdCwgc28gdGhhdCBpbmRpY2VzIGNhbiBiZSB0cmFuc2ZlcnJlZCBvdmVyXG4gICAgICAvLyB0ZW1wb3JhcnkgaWQgY2hhbmdlcyBkdXJpbmcgcGVyc2lzdGVuY2UuXG4gICAgICB0aGlzLmdldENoaWxkU3RvcmUoa2V5LCBpbmRleClcbiAgICAgIHRoaXMucmVtb3ZlU3RvcmUoa2V5KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgc2NoZW1hID0gdGhpcy5zY2hlbWEsXG4gICAgICAgIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrID0gdHJ1ZVxuICAgICAgfSA9IHt9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBkZWZhdWx0OiBpc0Z1bmN0aW9uKGRlZikgPyAoKSA9PiBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgaW50ZXJuYWwgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvblxuICAgICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgbmV4dFVpZCA9IDBcbiIsIi8vIEEgbWluaS1yZXBsaWNhdGlvbiBvZiB2dWUncyBpbnRlcm5hbCBgcmVzb2x2ZU1lcmdlZE9wdGlvbnMoKWAgYnV0IG9ubHlcbi8vIGhhbmRsaW5nIG91ciBvd24gYWRkZWQgb3B0aW9ucyBwcm9wZXJ0aWVzIGFuZCBtZXJnaW5nIHRoZW0gZWFybHkgaW5zdGVhZFxuLy8gb2YgbGF6aWx5LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMob3B0aW9ucykge1xuICBjb25zdCB7IG1peGlucyB9ID0gb3B0aW9uc1xuICByZXR1cm4gbWl4aW5zIHx8IG9wdGlvbnMuZXh0ZW5kc1xuICAgID8gbWVyZ2VPcHRpb25zKFxuICAgICAgICB7IC4uLm9wdGlvbnMgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIDogb3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tKSB7XG4gIGlmIChmcm9tLmV4dGVuZHMpIHtcbiAgICBtZXJnZU9wdGlvbnModG8sIGZyb20uZXh0ZW5kcylcbiAgfVxuICBpZiAoZnJvbS5taXhpbnMpIHtcbiAgICBmb3IgKGNvbnN0IG1peGluIG9mIGZyb20ubWl4aW5zKSB7XG4gICAgICBtZXJnZU9wdGlvbnModG8sIG1peGluKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBkaXRvT3B0aW9uS2V5cykge1xuICAgIGlmIChrZXkgaW4gZnJvbSkge1xuICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuY29uc3QgZGl0b09wdGlvbktleXMgPSBbXG4gICdkZWZhdWx0VmFsdWUnLFxuICAnZGVmYXVsdE5lc3RlZCcsXG4gICdkZWZhdWx0VmlzaWJsZScsXG4gICdnZW5lcmF0ZUxhYmVsJyxcbiAgJ2V4Y2x1ZGVWYWx1ZScsXG4gICdpZ25vcmVNaXNzaW5nVmFsdWUnLFxuICAnb21pdFNwYWNpbmcnLFxuICAnZm9ybWF0VmFsdWUnLFxuICAncGFyc2VWYWx1ZScsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICB3aGlsZSAoKHBvc2l0aW9uID09PSBudWxsIHx8IHBvcyA8PSBwb3NpdGlvbikgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHBvcyArPSBwYXJ0c1tpbmRleCsrXT8ubGVuZ3RoID8/IDBcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHBvcywgaW5kZXggfVxuICB9XG5cbiAgLy8gVGltZSBzdGFydHMgYXQgaW5kZXggNiwgZHVlIHRvIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGRhdGUuXG4gIGNvbnN0IG9mZnNldCA9ICFkYXRlID8gZ2V0UG9zaXRpb24obnVsbCwgNikucG9zaXRpb24gOiAwXG4gIHBvc2l0aW9uICs9IG9mZnNldFxuXG4gIGxldCB7IGluZGV4IH0gPSBnZXRQb3NpdGlvbihwb3NpdGlvbilcblxuICBjb25zdCBpc1VTID0gbG9jYWxlID09PSAnZW4tVVMnXG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICBpc1VTID8gJ21vbnRoJyA6ICdkYXknLFxuICAgIG51bGwsXG4gICAgaXNVUyA/ICdkYXknIDogJ21vbnRoJyxcbiAgICBudWxsLFxuICAgICd5ZWFyJyxcbiAgICBudWxsLFxuICAgICdob3VyJyxcbiAgICBudWxsLFxuICAgICdtaW51dGUnLFxuICAgIG51bGwsXG4gICAgJ3NlY29uZCcsXG4gICAgbnVsbCxcbiAgICAnbWlsbGlzZWNvbmQnXG4gIF1cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAodmFsdWVzW2luZGV4XSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRQb3NpdGlvbihudWxsLCBpbmRleCkucG9zaXRpb24gLSBvZmZzZXRcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFydHNbaW5kZXhdLmxlbmd0aFxuICAgICAgcmV0dXJuIHsgbmFtZTogdmFsdWVzW2luZGV4XSwgc3RhcnQsIGVuZCB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSA9IHRydWUsIHRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IHN0cmluZz8uc3BsaXQoLyhbXFxzLiw6L10rKS8pIHx8IFtdXG4gIGlmICghZGF0ZSkge1xuICAgIC8vIEFkZCBkdW1teSBkYXRlIHBhcnRzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYSB0aW1lLW9ubHkgZGF0ZS5cbiAgICBwYXJ0cy51bnNoaWZ0KCcxJywgJy4nLCAnMScsICcuJywgJzIwMDAnLCAnICcpXG4gIH1cbiAgaWYgKCF0aW1lICYmIHBhcnRzLmxlbmd0aCA+IDUpIHtcbiAgICBwYXJ0cy5sZW5ndGggPSA1XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pIHtcbiAgY29uc3QgdmFsdWUgPSArbW9udGhcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgLSAxXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtb250aC50cmltKCkudG9Mb3dlckNhc2UoKVxuICBpZiAobWF0Y2gubGVuZ3RoIDwgMykgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvcnRGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgY29uc3QgbG9uZ0Zvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpLCAxKVxuICAgIGlmIChcbiAgICAgIHNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpIHx8XG4gICAgICBsb25nRm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkYXRlLnN0YXRlICE9PSAnZGlzYWJsZWQnICYmIHNlbGVjdERhdGUoZGF0ZS5kYXRlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyhcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVzY3JpYmVEYXRlLCBhbHRlckRhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzLCB1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGUoZGVzY3JpYmVEYXRlKGRhdGUpLCB0cnVlKVxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JylcbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0sIHRydWUpXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0sIHRydWUpXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKFxuICAgICAgZGF0ZSxcbiAgICAgIHsgeWVhciwgbW9udGgsIGRheSB9ID0geyB5ZWFyOiB0cnVlLCBtb250aDogdHJ1ZSwgZGF5OiB0cnVlIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlID0gdGhpcy5jdXJyZW50TW9kZSwgdXBkYXRlID0gZmFsc2UgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KG5vdylcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldHMsIGV2ZW50cykge1xuICB0YXJnZXRzID1cbiAgICB0YXJnZXRzIGluc3RhbmNlb2YgTm9kZUxpc3RcbiAgICAgID8gQXJyYXkuZnJvbSh0YXJnZXRzKVxuICAgICAgOiBhc0FycmF5KHRhcmdldHMpXG5cbiAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFdmVudHMoLi4uZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXZlbnQucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50Py5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGNvbXBvbmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyhjb21wb25lbnQudGFyZ2V0KVxuICAgID8gY29tcG9uZW50LiRyZWZzW2NvbXBvbmVudC50YXJnZXRdXG4gICAgOiBjb21wb25lbnQudGFyZ2V0XG4gIHJldHVybiB0YXJnZXQ/LiRlbCA/PyB0YXJnZXRcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwiYGRpdG8tJHt0cmFuc2l0aW9ufWBcIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzLCBjb21iaW5lRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcbiAgICAgIGZvY3VzRXZlbnRzOiBudWxsLFxuICAgICAgY2xvc2VFdmVudHM6IG51bGwsXG4gICAgICBwb3B1cEV2ZW50czogbnVsbCxcbiAgICAgIGJsdXJUaW1lcjogbnVsbCxcbiAgICAgIG1vdXNlTGVhdmVUaW1lcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH0sXG5cbiAgICB0cmlnZ2VyVGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vblNob3dQb3B1cCh0bykpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy50cmlnZ2VyVGFyZ2V0Py5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyXG4gICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YXJnZXQgPT09ICdwb3B1cCcgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBhZGRGb2N1c0V2ZW50cyhwYXJlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGxldCBpbnB1dFxuXG4gICAgICByZXR1cm4gY29tYmluZUV2ZW50cyhcbiAgICAgICAgYWRkRXZlbnRzKHRhcmdldHMsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIGFsbG93IGNsaWNrZWQgaW5wdXRzIHRvIGdyYWIgZm9jdXNcbiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy4kcmVmcy5wb3B1cC5tYXRjaGVzKCc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICBhZGRFdmVudHMocGFyZW50LCB7XG4gICAgICAgICAgbW91c2Vkb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJy5kaXRvLWJ1dHRvbi1jbGVhcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdGhpcy4kcmVmcy50cmlnZ2VyXG4gICAgICAgICAgICAgIC8vIE1hcmsgdHJpZ2dlciBpbnB1dCBhcyByZWFkb25seSBzbyBpdCBjYW4ndCBsb29zZSBmb2N1cyB3aGlsZVxuICAgICAgICAgICAgICAvLyB1c2VyIGRvZXMgb3RoZXIgbW91c2UtYWN0aXZpdGllcyBpbiBwb3B1cC5cbiAgICAgICAgICAgICAgaW5wdXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICAgICAgICAgIGlmIChpbnB1dCAmJiAhaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICd0cnVlJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIG90aGVyIGV2ZW50cyB0byB1cGRhdGUgaW5wdXQgYmVmb3JlIGl0XG4gICAgICAgICAgICAgIC8vIGJlY29tZXMgZWRpdGFibGUgYW5kIHN0aWxsIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvblNob3dQb3B1cChzaG93KSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy4kcmVmcy5wb3B1cClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2Nzcyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1pbnB1dCg6Y2xhc3M9XCJjbGFzc2VzXCIpXG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLmNsYXNzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dFxuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oXG4gIDpjbGFzcz1ge1xuICAgIFsnZGl0by1pY29uLS0nICsgbmFtZV06IHRydWUsXG4gICAgJ2RpdG8taWNvbi0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9YFxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLS0jeyRuYW1lfSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1pY29uIHtcbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQgJiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAkYm9yZGVyLXdpZHRoO1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHdpZHRoOiAyZW07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGNvbG9yOiAkY29sb3ItZ3JleTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIEBhdC1yb290IC5kaXRvLWlucHV0OmZvY3VzLXdpdGhpbiAmIHtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQsIGVuZCB9KSB7XG4gIGlmIChpbnB1dD8uc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBpbnB1dC5mb2N1cygpXG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAmJiAnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0XG4gICAgPyB7IHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmQgfVxuICAgIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICAgIEBzZWxlY3Q9XCJzaG93UG9wdXAgPSBmYWxzZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGUsXG4gICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dCk/LnN0YXJ0XG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCAmJiAhdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7IGNhbGVuZGFyIH0gPSB0aGlzLiRyZWZzXG4gICAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IG1vZGUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChwb3NpdGlvbikgfHwge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbW9kZSAmJlxuICAgICAgICAgICAgICBjYWxlbmRhci5uYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlLCB1cGRhdGU6IHRydWUgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogOGVtO1xuICB9XG59XG5cbi5kaXRvLWRhdGUtcGlja2VyLXBvcHVwIHtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuPC9zdHlsZT5cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2xvY2tcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIocmVmPVwiaG91clwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKHJlZj1cIm1pbnV0ZVwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKHJlZj1cInNlY29uZFwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IGFsdGVyRGF0ZSwgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgZGF0ZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlnbm9yZU5leHRDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZm9jdXNlZCAmJlxuICAgICAgICAhdGhpcy5pZ25vcmVOZXh0Q2hhbmdlICYmXG4gICAgICAgIHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgIH1cbiAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IGZhbHNlXG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChzbW9vdGgpIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IChcbiAgICAgICAgICAgIHRhcmdldC5zY3JvbGxIZWlnaHQgL1xuICAgICAgICAgICAgLy8gRmlyc3QgYW5kIGxhc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW4uXG4gICAgICAgICAgICAodGFyZ2V0LmNoaWxkRWxlbWVudENvdW50ICsgNilcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpXG4gICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXQuc2Nyb2xsVG9wIC0gdG9wKVxuICAgICAgICAgIHRhcmdldC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBiZWhhdmlvcjogc21vb3RoICYmIGRpc3RhbmNlIDwgMTAwID8gJ3Ntb290aCcgOiAnYXV0bydcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHNlbGVjdGlvbi5zdGFydCkgfHwge31cbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXSArIHN0ZXBcbiAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLiRyZWZzW25hbWVdLmNoaWxkRWxlbWVudENvdW50XG4gICAgICAgICAgICAgIHRoaXNbbmFtZV0gPVxuICAgICAgICAgICAgICAgIHZhbHVlIDwgMFxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZSArIGNvdW50XG4gICAgICAgICAgICAgICAgICA6IHZhbHVlID49IGNvdW50XG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUgLSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmQpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gaW5wdXRcbiAgICAgICAgbGV0IHBvcyA9IHNlbGVjdGlvbi5zdGFydFxuXG4gICAgICAgIGNvbnN0IGlzRGlnaXQgPSBjaGFyID0+ICFpc05hTihwYXJzZUludChjaGFyLCAxMCkpXG5cbiAgICAgICAgaWYgKGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBpZiAoaXNEaWdpdChldmVudC5rZXkpICYmIHBvcyA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOicgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSkgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MrK1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIG5leHQgZGlnaXQgc28gdGhlIGV2ZW50IG92ZXJyaWRlcyBpdCBpbnN0ZWFkIG9mIGluc2VydGluZ1xuICAgICAgICAgICAgLy8gbmV3IGNoYXJzLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmIChcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyArIDFdKSB8fFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykubGVuZ3RoXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBsZW5ndGgpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKVxuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwb3MgPT09IDEgfHxcbiAgICAgICAgICAgIFsnICcsICc6J10uaW5jbHVkZXModmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBvcyA9PT0gdmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcy0tXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgICgodmFsdWVbcG9zIC0gMV0gPz8gJycpICsgJzAwJykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmXG4gICAgICAgICAgICAgICFpc0RpZ2l0KCt2YWx1ZVtwb3MgKyAxXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHJlbW92aW5nIHRoZSBmaXJzdCBvZiB0d28gZGlnaXRzLCByZXBsYWNlIHdpdGggMFxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHBvcykgKyAnMCcgKyB2YWx1ZS5zbGljZShwb3MpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogNmVtO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbWF4LXdpZHRoOiAxNjBweDtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuXG4kdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHg7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci13aWR0aDogMCAxcHggMDtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgfVxuXG4gIHVsIHtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICBwYWRkaW5nOiAwIDE3cHggMCAwO1xuICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcblxuICAgICYgPiBsaSB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbiAgICAgIH1cblxuICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICYuc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihyZWY9XCJwaWNrZXJcIilcbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5uZXIoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgICBEYXRlUGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dEYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgVGltZVBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93VGltZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQsIERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2xvc2VkTW9kZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdE9wdGlvbnM6IGZvcm1hdCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0IH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWVcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dC5pbnB1dFxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGFzc2lnbkRlZXBseShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGZvcm1hdDogKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA9PlxuICAgICAgICAgICAgICB0eXBlID09PSAnbGl0ZXJhbCcgJiYgL1xcYmF0XFxiLy50ZXN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gJywgJ1xuICAgICAgICAgICAgICAgIDogdGhpcy5mb3JtYXQ/LmRhdGU/LmZvcm1hdD8uKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA/PyB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5mb3JtYXRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdGltZUluZGV4KCkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3VycmVudFRleHRcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0ZXh0Lm1hdGNoKC8oW1xcU10rXFxzKikkLyk/LlsxXVxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAtIHRpbWUubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgaWYgKHRvZ2dsZSAmJiAodGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51cGRhdGVQb3B1cHMoKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlKGV2ZW50KVxuICAgICAgdGhpcy4kcmVmc1ttb2RlXS5vbktleURvd24oZXZlbnQpXG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBtb2RlXG4gICAgICB9IGVsc2UgaWYgKG1vZGUgIT09IHRoaXMuY2xvc2VkTW9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcyhtb2RlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNb2RlKGV2ZW50ID0gbnVsbCkge1xuICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICBjb25zdCB7IGhvcjogc3RlcCB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIHJldHVybiB0aGlzLnRpbWVJbmRleCA9PT0gbnVsbCB8fCBzdGFydCArIHN0ZXAgPCB0aGlzLnRpbWVJbmRleFxuICAgICAgICA/ICdkYXRlJ1xuICAgICAgICA6ICd0aW1lJ1xuICAgIH0sXG5cbiAgICB1cGRhdGVQb3B1cHMobW9kZSA9IHRoaXMuZ2V0TW9kZSgpKSB7XG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnNob3dEYXRlID0gbW9kZSA9PT0gJ2RhdGUnXG4gICAgICB0aGlzLnNob3dUaW1lID0gbW9kZSA9PT0gJ3RpbWUnXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJl9faW5wdXQge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBtaW4td2lkdGg6IDEyZW07XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlcixcbiAgLmRpdG8tdGltZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZVxuICAgICkgMFxuICAgIHwgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9ICh0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9ucztcbiAgICAgIH1cblxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWNoZWNrZWQnOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVMZXZlbCgpIHtcbiAgICAgIGxldCBsZXZlbCA9IDBcbiAgICAgIGxldCByb3V0ZUNvbXBvbmVudCA9IHRoaXNcbiAgICAgIHdoaWxlICgocm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICBjb25zdCB7IHBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGVtcGxhdGVQYXRoXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5zbGljZSgwLCB0ZW1wbGF0ZVBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBjcmVhdGVGb2N1c1RyYXAgfSBmcm9tICdmb2N1cy10cmFwJztcbmltcG9ydCB7IHVucmVmRWxlbWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBgJHtzZXR0aW5ncy53aWR0aH1weGAgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICBnZW5lcmF0ZUxhYmVsc1xuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlRm9jdXNUcmFwIH0sXG4gIGVtaXRzOiBbJ3JlbW92ZSddLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHNldHRpbmdzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlhbG9nJyxcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBmb2N1c1RyYXBPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICBmYWxsYmFja0ZvY3VzOiAoKSA9PiB0aGlzLiRyZWZzLmRpYWxvZyxcbiAgICAgICAgb25EZWFjdGl2YXRlOiB0aGlzLmNhbmNlbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmICgodGhpcy5oYXNDYW5jZWwgfHwgIXRoaXMuaGFzQnV0dG9ucykgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW1vdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdyZW1vdmUnKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAvLyBXaGVuIGNhbmNlbGxpbmcsIHJlc29sdmUgYXMgYHVuZGVmaW5lZGAgc28gd2UgY2FuIGhhdmUgZGlhbG9nc1xuICAgICAgLy8gcmV0dXJuaW5nIG51bGwgYXMgYSBkZWZpbmVkIHZhbHVlIGFzIHdlbGwuXG4gICAgICB0aGlzLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuY2FuY2VsKClcbiAgICB9LFxuXG4gICAgb25Nb3VzZVVwKCkge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY2xpY2tUb0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgZGlzcGxheTogZmxleDtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRpYWxvZztcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLy8gVE9ETzogYCZfX2lubmVyYFxuICBmb3JtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgsIDQ4MHB4KTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IC0ycHggcmdiYSgyNywgMzMsIDU4LCAwLjQpO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kaWFsb2ctbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cztcblxuICBmb3JtIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWZyb20sXG4uZGl0by1kaWFsb2ctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdChcbiAgOmRhdGEtYWdlbnQtYnJvd3Nlcj1cImFwcFN0YXRlLmFnZW50LmJyb3dzZXJcIlxuICA6ZGF0YS1hZ2VudC1wbGF0Zm9ybT1cImFwcFN0YXRlLmFnZW50LnBsYXRmb3JtXCJcbiAgOmRhdGEtYWdlbnQtdmVyc2lvbj1cImFwcFN0YXRlLmFnZW50LnZlcnNpb25OdW1iZXJcIlxuKVxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uKG5hbWU9XCJkaXRvLWRyYWdcIilcbiAgICAuZGl0by1kcmFnLW92ZXJsYXkoXG4gICAgICB2LWlmPVwiaXNEcmFnZ2luZ0ZpbGVzXCJcbiAgICApXG4gIFRyYW5zaXRpb25Hcm91cChuYW1lPVwiZGl0by1kaWFsb2dcIilcbiAgICBEaXRvRGlhbG9nKFxuICAgICAgdi1mb3I9XCIoZGlhbG9nLCBrZXkpIGluIGRpYWxvZ3NcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6Y29tcG9uZW50cz1cImRpYWxvZy5jb21wb25lbnRzXCJcbiAgICAgIDpidXR0b25zPVwiZGlhbG9nLmJ1dHRvbnNcIlxuICAgICAgOnByb21pc2U9XCJkaWFsb2cucHJvbWlzZVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZy5kYXRhXCJcbiAgICAgIDpzZXR0aW5ncz1cImRpYWxvZy5zZXR0aW5nc1wiXG4gICAgICBAcmVtb3ZlPVwicmVtb3ZlRGlhbG9nKGtleSlcIlxuICAgIClcbiAgRGl0b05hdmlnYXRpb25cbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtcmVzaXplPVwib25SZXNpemVQYWdlXCJcbiAgICA6Y2xhc3M9XCJwYWdlQ2xhc3Nlc1wiXG4gIClcbiAgICBEaXRvSGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgIFJvdXRlclZpZXdcbiAgRGl0b1NpZGViYXJcbiAgICBEaXRvQWNjb3VudChcbiAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICApXG4gICAgYS5kaXRvLWxvZ2luKFxuICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgIClcbiAgICAgIHNwYW4gTG9naW5cbiAgLmRpdG8tZmlsbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlbGVnYXRlIGFzIHRpcHB5RGVsZWdhdGUgfSBmcm9tICd0aXBweS5qcydcbmltcG9ydCB7IGFzQXJyYXksIG1hcENvbmN1cnJlbnRseSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogJycsXG4gICAgICBvbkNyZWF0ZShpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGluc3RhbmNlLnJlZmVyZW5jZS5kYXRhc2V0LmluZm8pXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEcmFnQW5kRHJvcCgpIHtcbiAgICAgIC8vIFRoaXMgY29kZSBvbmx5IGhhcHBlbnMgdGhlIHZpc3VhbCBlZmZlY3RzIGFyb3VuZCBkcmFnZ2luZyBhbmQgZHJvcHBpbmdcbiAgICAgIC8vIGZpbGVzIGludG8gYSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudC4gVGhlIGFjdHVhbCB1cGxvYWRpbmcgaXNcbiAgICAgIC8vIGhhbmRsZWQgYnkgdGhlIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50IGl0c2VsZi5cblxuICAgICAgbGV0IGRyYWdDb3VudCA9IDBcbiAgICAgIGxldCB1cGxvYWRzID0gW11cblxuICAgICAgY29uc3QgdG9nZ2xlRHJvcFRhcmdldENsYXNzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdXBsb2FkIG9mIHVwbG9hZHMpIHtcbiAgICAgICAgICB1cGxvYWRcbiAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgLmNsYXNzTGlzdC50b2dnbGUoJ2RpdG8tZHJvcC10YXJnZXQnLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgIHVwbG9hZHMgPSBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldERyYWdnaW5nRmlsZXMgPSBlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZXMgPSBlbmFibGVkXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdG9nZ2xlRHJvcFRhcmdldENsYXNzKHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MoZmFsc2UpLCAxNTApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBkcmFnZW50ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHVwbG9hZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGl0by11cGxvYWQnKVxuICAgICAgICAgICAgY29uc3QgaGFzVXBsb2FkcyA9IHVwbG9hZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBoYXNVcGxvYWRzID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoaGFzVXBsb2Fkcykge1xuICAgICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkcmFnQ291bnQrK1xuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdsZWF2ZTogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudC0tXG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnb3ZlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyb3AgPSBldmVudC50YXJnZXQuY2xvc2VzdChcbiAgICAgICAgICAgICAgJy5kaXRvLWNvbnRhaW5lcjpoYXMoLmRpdG8tdXBsb2FkKSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gY2FuRHJvcCA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKCFjYW5Ecm9wKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJvcDogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudCA9IDBcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuYXBpLFxuICAgICAgICAgICAgeyB0eXBlOiAnZGlhbG9nJywgY29tcG9uZW50cyB9LFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBjbGljayBldmVudCBpcyBhZGRlZCBpbiBEaXRvRGlhbG9nLmJ1dHRvblNjaGVtYXMoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB0ZXh0OiAnTG9naW4nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVWaWV3cyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlcy5mbGF0KClcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9LFxuXG4gICAgb25SZXNpemVQYWdlKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1wYWdlIHtcbiAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aH07XG4gIC0tbWF4LXBhZ2Utd2lkdGg6IGNhbGModmFyKC0tbWF4LWNvbnRlbnQtd2lkdGgpICsgMiAqICN7JGNvbnRlbnQtcGFkZGluZ30pO1xuXG4gIGZsZXg6IDAgMSB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIG1pbi13aWR0aDogMCU7XG4gIG1heC13aWR0aDogdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLy8gRm9yIC5kaXRvLWhlYWRlciBmdWxsLXdpZHRoIGJhY2tncm91bmQuXG5cbiAgJi0td2lkZSB7XG4gICAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aC13aWRlfTtcbiAgfVxufVxuXG4uZGl0by1maWxsIHtcbiAgZmxleDogMTtcblxuICAuZGl0by1oZWFkZXIge1xuICAgIHNwYW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tYWNjb3VudCxcbi5kaXRvLWxvZ2luIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1kcmFnLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG59XG5cbi5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgLS1zaGFkb3ctYWxwaGE6IDAuMjU7XG5cbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheSArIDE7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgdmFyKC0tc2hhZG93LWFscGhhKSkpO1xufVxuXG4uZGl0by1kcmFnLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRyYWctbGVhdmUtYWN0aXZlIHtcbiAgJGR1cmF0aW9uOiAwLjE1cztcblxuICB0cmFuc2l0aW9uOiBvcGFjaXR5ICRkdXJhdGlvbiwgYmFja2Ryb3AtZmlsdGVyICRkdXJhdGlvbjtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIHRyYW5zaXRpb246IGZpbHRlciAkZHVyYXRpb247XG4gIH1cbn1cblxuLmRpdG8tZHJhZy1lbnRlci1mcm9tLFxuLmRpdG8tZHJhZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwKTtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIC0tc2hhZG93LWFscGhhOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tbWVudShcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiB3aWR0aCA/IGAke3dpZHRofXB4YCA6IG51bGwgfVwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwiaXRlbSBpbiBpdGVtc1wiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoaXRlbSlcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6aHJlZj1cImdldEl0ZW1IcmVmKGl0ZW0pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51LWxpbmsnKVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrSXRlbShpdGVtKVwiXG4gICAgICApIHt7IGdldExhYmVsKGl0ZW0pIH19XG4gICAgICBEaXRvTWVudShcbiAgICAgICAgdi1pZj1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUnKVwiXG4gICAgICAgIDppdGVtcz1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6cGF0aD1cImdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTWVudScsIHtcbiAgcHJvcHM6IHtcbiAgICBpdGVtczoge1xuICAgICAgdHlwZTogW09iamVjdCwgQXJyYXldLFxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICB9LFxuICAgIHBhdGg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAwXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtQ2xhc3MoaXRlbSwgc3ViTWVudUNsYXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3ViTWVudUNsYXNzXTogISFpdGVtLml0ZW1zLFxuICAgICAgICAnZGl0by1hY3RpdmUnOiB0aGlzLmlzQWN0aXZlSXRlbShpdGVtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtUGF0aChpdGVtLCBmaXJzdENoaWxkKSB7XG4gICAgICBjb25zdCBwYXRoID0gaXRlbS5wYXRoID8gYCR7dGhpcy5wYXRofS8ke2l0ZW0ucGF0aH1gIDogbnVsbFxuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgcGF0aCAmJiBpdGVtLml0ZW1zXG4gICAgICAgID8gYCR7cGF0aH0ke3RoaXMuZ2V0SXRlbVBhdGgoT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKVswXSwgZmFsc2UpfWBcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1IcmVmKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICByZXR1cm4gcGF0aCA/IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpLmhyZWYgOiBudWxsXG4gICAgfSxcblxuICAgIGlzQWN0aXZlSXRlbShpdGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLiRyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5nZXRJdGVtUGF0aChpdGVtLCBmYWxzZSkpIHx8XG4gICAgICAgIGl0ZW0uaXRlbXMgJiYgT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKS5zb21lKHRoaXMuaXNBY3RpdmVJdGVtKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvbkNsaWNrSXRlbShpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gICRpdGVtLWhlaWdodDogJG1lbnUtZm9udC1zaXplICsgMiAqICRtZW51LXBhZGRpbmctdmVyO1xuXG4gIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZTtcbiAgcGFkZGluZzogMCAkbWVudS1zcGFjaW5nO1xuXG4gIGxpIHtcbiAgICAmOmhhcyguZGl0by1zdWItbWVudTpub3QoLmRpdG8tYWN0aXZlKSkge1xuICAgICAgLy8gUG9wLW91dCBzdWItbWVudXMgb24gaG92ZXI6XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgICAgICAgIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS13aWR0aCkgKyAyICogJG1lbnUtc3BhY2luZykpXG4gICAgICAgICAgICB0cmFuc2xhdGVZKC0kaXRlbS1oZWlnaHQpO1xuXG4gICAgICAgICAgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgLmRpdG8tbGluayB7XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCB0byBub3QgbG9vc2UgdGhlIGhvdmVyIHdoZW4gbW92aW5nIG92ZXIgaXQuXG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IC0yICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIHdpZHRoOiAyICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIGhlaWdodDogJGl0ZW0taGVpZ2h0O1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAuZGl0by1zdWItbWVudS1saW5rLFxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXJnaW4tdG9wOiAkbWVudS1zcGFjaW5nO1xuXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGFscGhhOiAtMC4zKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbilcbiAgLy8tIFRPRE86IENvbnZlcnQgdG8gQkVNXG4gIC52LXB1bHNlLnYtcHVsc2UxKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTFdXCIpXG4gIC52LXB1bHNlLnYtcHVsc2UyKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTJdXCIpXG4gIC52LXB1bHNlLnYtcHVsc2UzKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTNdXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBvbmx5IGNsYXNzZXNcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgd2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICAgIG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICAgIGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXkge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIFJvdXRlckxpbmsuZGl0by1icmVhZGNydW1iKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp0bz1cImNvbXBvbmVudC5wYXRoXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgLy8tIFRlbGVwb3J0IHRhcmdldCBmb3IgYC5kaXRvLXNjaGVtYS1oZWFkZXJgOlxuICAuZGl0by1oZWFkZXJfX3RlbGVwb3J0XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9TcGlubmVyIGZyb20gJy4vRGl0b1NwaW5uZXIudnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9IZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgRGl0b1NwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayB0byBzZXQgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBEaXRvU3Bpbm5lci5cbiAgICAvLyBQYXNzIHRoZW0gb24gdGhyb3VnaCB0aGUgdGVtcGxhdGUgaW5zdGVhZCFcbiAgICBjb25zdCB7IHByb3BzIH0gPSBEaXRvU3Bpbm5lclxuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWhlYWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRoZWFkZXItZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmOjphZnRlciB7XG4gICAgLy8gU2V0IHRoZSBmdWxsLXdpZHRoIGhlYWRlciBiYWNrZ3JvdW5kIHRvIHRoZSBoZWFkZXIgY29sb3IuXG4gICAgY29udGVudDogJyc7XG4gICAgaW5zZXQ6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyYWlsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgaGVpZ2h0OiAzZW07XG5cbiAgICB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgJGFuZ2xlOiAzM2RlZztcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHNwYW4ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMXB4O1xuICAgICAgICBoZWlnaHQ6IDAuNzVlbTtcbiAgICAgICAgcmlnaHQ6IC0wLjI1ZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNwaW5uZXIge1xuICAgIG1hcmdpbi10b3A6ICRoZWFkZXItcGFkZGluZy12ZXI7XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJl9fdGVsZXBvcnQge1xuICAgIC8vIEFsaWduIHRoZSB0ZWxlcG9ydGVkIHNjaGVtYSBoZWFkZXJzIG9uIHRvcCBvZiB0byB0aGUgaGVhZGVyIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBwYWRkaW5nOiAwICRoZWFkZXItcGFkZGluZy1ob3I7XG4gICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC8vIC4uLmJ1dCBtb3ZlIHRoZW0gdG8gdGhlIGNoaWxkcmVuLlxuICAgID4gKiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW5hdmlnYXRpb24uZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsodG89XCIvXCIpIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIERpdG9NZW51LmRpdG8tc2Nyb2xsKDppdGVtcz1cInZpZXdzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTmF2aWdhdGlvbicsIHt9KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbmF2aWdhdGlvbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIGZsZXg6IDAgMCBtaW4tY29udGVudDtcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuXG4gIGgxIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgLmRpdG8tbGluayB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuY2xhc3MpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLnN0eWxlKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICAuZGl0by1sYWJlbF9faW5uZXIoXG4gICAgdi1pZj1cInRleHQgfHwgcHJlZml4ZXMubGVuZ3RoID4gMCB8fCBzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3ByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoXG4gICAgICB2LWlmPVwidGV4dFwiXG4gICAgICA6Zm9yPVwiZGF0YVBhdGhcIlxuICAgICAgdi1odG1sPVwidGV4dFwiXG4gICAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3N1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgLmRpdG8taW5mbyhcbiAgICAgIHYtaWY9XCJpbmZvXCJcbiAgICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTGFiZWwnLCB7XG4gIGVtaXRzOiBbJ29wZW4nXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGluZm86IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8geyBvbkNsaWNrOiB0aGlzLm9uQ2xpY2sgfSA6IHt9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZy1oYWxmOyAvLyBXaGVuIGlubGluZWQuXG5cbiAgJjpoYXMoLmRpdG8tc2NoZW1hLWhlYWRlcikge1xuICAgIC8vIFRoZSBjb250YWluZXIncyBsYWJlbCBpcyB1c2VkIGFzIHRlbGVwb3J0IGZvciBhIG5lc3RlZCBzZWN0aW9uIG9yIG9iamVjdFxuICAgIC8vIGxhYmVsLiBIaWRlIGAmX19pbm5lcmAsIGFzIGl0IGlzIGJlIGR1cGxpY2F0ZWQgaW5zaWRlIHRoZSBuZXN0ZWQgbGFiZWwuXG4gICAgPiAjeyRzZWxmfV9faW5uZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmOm5vdCg6aGFzKCsgLmRpdG8tdGFicykpIHtcbiAgICAvLyBUYWtlIGZ1bGwgd2lkdGggYnV0IG9ubHkgaWYgdGhlcmUgYXJlbid0IGFsc28gdGFicyB0byBiZSBjZW50ZXJlZC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBsYWJlbCxcbiAgJl9fcHJlZml4LFxuICAmX19zdWZmaXgge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gICZfX3ByZWZpeCArIGxhYmVsLFxuICBsYWJlbCArICZfX3N1ZmZpeCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci4gQnV0IHdlIGNhbiBvbmx5XG4gICAgLy8gZG8gc28gaWYgdGhlcmUgaXMndCBhbHNvIGEgY2hldnJvbiBvciBvdGhlciBVWCBlbGVtZW50cyBiZXNpZGVzIGl0LlxuICAgICY6aGFzKD4gI3skc2VsZn1fX2lubmVyOm9ubHktY2hpbGQpIHtcbiAgICAgIGZsZXg6IDE7IC8vIFdoZW4gaW4gYC5kaXRvLXNjaGVtYS1oZWFkZXJgLlxuXG4gICAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8taW5mbyB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMzVlbTtcbiAgfVxufVxuXG5hLmRpdG8tbGFiZWwge1xuICAmOmhvdmVyIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyO1xuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0XG4gICAgLy8gbGF5b3V0cyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWNvbXBhY3Qge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgPiAuZGl0by1jb250YWluZXI6bm90KC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwpIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSxcbiAgZ2V0SXRlbUlkLFxuICBnZXRJdGVtVWlkLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1TdG9yZShzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGRTdG9yZSh0aGlzLmdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSwgaW5kZXgpXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8gLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgICBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgIDsoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgIShpdGVtTGFiZWwgaW4gaXRlbSkpIHtcbiAgICAgICAgLy8gYGl0ZW1MYWJlbGAgY2FuIGJlIGJvdGggYSBrZXksIG9yIHNpbXBseSBhIGxhYmVsLlxuICAgICAgICB0ZXh0ID0gaXRlbUxhYmVsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICA/ICh0ZXh0ID0gYCR7aW5kZXggKyAxfWApXG4gICAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdFxuICAgICAgICA/IHRleHQgfHwgcHJlZml4IHx8IHN1ZmZpeFxuICAgICAgICAgID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBzY3JvbGxhYmxlLCAnZGl0by1zY2hlbWEtLW9wZW4nOiBvcGVuZWQgfVwiXG4gIHYtYmluZD1cIiRhdHRyc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJoYXNIZWFkZXJcIlxuICAgIDp0bz1cImhlYWRlclRlbGVwb3J0XCJcbiAgICA6ZGlzYWJsZWQ9XCIhaGVhZGVyVGVsZXBvcnRcIlxuICApXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgRGl0b0xhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIClcbiAgICAgIFRyYW5zaXRpb24oXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgbmFtZT1cImRpdG8tZmFkZVwiXG4gICAgICApXG4gICAgICAgIERpdG9UYWJzKFxuICAgICAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgKVxuICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgdi1pZj1cImNsaXBib2FyZFwiXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnQoXG4gICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgIHJlZj1cImNvbnRlbnRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwnOiBzY3JvbGxhYmxlIH1cIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgKVxuICAgICAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fdGFiKFxuICAgICAgICAgICAgdi1pZj1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgICAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX21haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZVwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgKVxuICBzbG90KFxuICAgIHYtaWY9XCJpbmxpbmVkICYmICFoYXNIZWFkZXJcIlxuICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICApXG5zbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbE5vZGU6IHsgdHlwZTogSFRNTEVsZW1lbnQsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjdXJyZW50VGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUYWIgfHwgdGhpcy5kZWZhdWx0VGFiIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWxlY3RlZFRhYikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSBzZWxlY3RlZFRhYlxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBjb25zdCB0YWJzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpLmZpbHRlcih0aGlzLnNob3VsZFJlbmRlclNjaGVtYSlcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGRlZmF1bHRUYWIgfSBvZiB0YWJzKSB7XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYikgPyBkZWZhdWx0VGFiKHRoaXMuY29udGV4dCkgOiBkZWZhdWx0VGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJzdCA/Pz0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmQgPz8gbnVsbFxuICAgIH0sXG5cbiAgICBoYXNIZWFkZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCB8fCB0aGlzLmhhc1RhYnMgfHwgISF0aGlzLmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBoZWFkZXJUZWxlcG9ydCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm9vdFNjaGVtYVxuICAgICAgICA/ICcuZGl0by1oZWFkZXJfX3RlbGVwb3J0J1xuICAgICAgICA6IHRoaXMubGFiZWxOb2RlXG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnREYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1Jvb3RTY2hlbWEoKSB7XG4gICAgICAvLyBTZWN0aW9uIHNjaGVtYXMgY2FuIHNoYXJlIHRoZSByb290IGRhdGFQYXRoIGJ1dCB0aGV5IGFyZSBpbmxpbmVkLlxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVBhdGggPT09ICcnICYmICF0aGlzLmlubGluZWRcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0Lmhhc0Vycm9ycylcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5UYWJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzVGFicyAmJiB0aGlzLmlzUm9vdFNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHdpZGU6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICckcm91dGUuaGFzaCc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcihoYXNoKSB7XG4gICAgICAgIC8vIFJlbWVtYmVyIHRoZSBjdXJyZW50IHBhdGggdG8ga25vdyBpZiB0YWIgY2hhbmdlcyBzaG91bGQgc3RpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCwgYnV0IHJlbW92ZSB0aGUgdHJhaWxpbmcgYC9jcmVhdGVgIG9yIGAvOmlkYCBmcm9tIGl0IHNvIHRoYXRcbiAgICAgICAgLy8gdGFicyBpbmZvcm1zIHRoYXQgc3RheSBvcGVuIGFmdGVyIGNyZWF0aW9uIHN0aWxsIHdvcmsuXG4gICAgICAgIGlmICh0aGlzLmhhc01haW5UYWJzKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgICdzZWxlY3RlZFRhYicoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIGlmICh0aGlzLmhhc01haW5UYWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKHRoaXMudGFic1tzZWxlY3RlZFRhYl0pXG4gICAgICAgICAgPyBzZWxlY3RlZFRhYlxuICAgICAgICAgIDogdGhpcy5kZWZhdWx0VGFiXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiID8gYCMke3RhYn1gIDogbnVsbCB9KVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzRXJyb3JzKSB7XG4gICAgICAgIHRoaXMucmVwb3NpdGlvbkVycm9ycygpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gJ2RpdG8tcGFnZS0td2lkZSdcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ29wZW4nLCB7IGNvbnRleHQ6IHsgb3BlbiB9IH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBvcGVuIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IG9wZW5cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBvc2l0aW9uRXJyb3JzKCkge1xuICAgICAgLy8gRmlyZSBhIGZha2Ugc2Nyb2xsIGV2ZW50IHRvIGZvcmNlIHRoZSByZXBvc2l0aW9uaW5nIG9mIGVycm9yIHRvb2x0aXBzLFxuICAgICAgLy8gYXMgb3RoZXJ3aXNlIHRoZXkgc29tZXRpbWVzIGRvbid0IHNob3cgdXAgaW4gdGhlIHJpZ2h0IHBsYWNlIGluaXRpYWxseVxuICAgICAgLy8gd2hlbiBjaGFuZ2luZyB0YWJzLlxuICAgICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy4kcmVmcy5jb250ZW50LmNsb3Nlc3QoJy5kaXRvLXNjcm9sbCcpXG4gICAgICBjb25zdCBkaXNwYXRjaCA9ICgpID0+IHNjcm9sbENvbnRhaW5lci5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc2Nyb2xsJykpXG4gICAgICBkaXNwYXRjaCgpXG4gICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSBgJi0tbGFiZWwtdmVydGljYWxgIGJhc2VkIGxheW91dCBjaGFuZ2VzLlxuICAgICAgc2V0VGltZW91dChkaXNwYXRjaCwgMClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhbiBzZXRcbiAgICAgIC8vIGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0VmFsdWVzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdFZhbHVlcyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgIGlmICghZXF1YWxzKHRoaXMuZGF0YVtuYW1lXSwgZGF0YVtuYW1lXSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IGRhdGFbbmFtZV1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICByb290RGF0YTogdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICByZWdpc3RyeVt1aWRdID0gZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyeVt1aWRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IChlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdKVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgPiAuZGl0by1zY2hlbWEtaGVhZGVyICsgLmRpdG8tc2NoZW1hLWNvbnRlbnQgPiAuZGl0by1wYW5lIHtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAmOmhhcyg+IC5kaXRvLXNjaGVtYS1jb250ZW50ICsgLmRpdG8tZWRpdC1idXR0b25zKSB7XG4gICAgLy8gRGlzcGxheSB0aGUgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpnZW5lcmF0ZUxhYmVscz1cIiFpc0NvbXBhY3RcIlxuICA6bGFiZWxOb2RlPVwibGFiZWxOb2RlXCJcbiAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbilcbiAgLy8tIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzY2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8tIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWFJbmxpbmVkJywge1xuICBlbWl0czogWydkZWxldGUnXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiBpc1NpbmdsZUNvbXBvbmVudFxuICB9YFxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1ge1xuICAgICAgc2NoZW1hLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgIG5lc3RlZCxcbiAgICAgIHN0b3JlXG4gICAgfSwgaW5kZXggaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC8vIC1Vc2UgPHNwYW4+IGZvciAuZGl0by1icmVhayBzbyB3ZSBjYW4gdXNlIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWBcbiAgICAvLyBzZWxlY3Rvci5cbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgcmVmPVwiY29udGFpbmVyc1wiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOmRhdGEtaW5kZXg9XCJpbmRleFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgOnZlcnRpY2FsTGFiZWxzPVwiaXNJbkxhYmVsZWRSb3coaW5kZXgpXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgKVxuICAgIHNwYW4uZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfSxcblxuICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzKCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcblxuICAgICAgY29uc3QgaXNMYXN0SW5Sb3cgPSBpbmRleCA9PiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24oaW5kZXgpLnRvcCA+IHBvc2l0aW9uc1tpbmRleF0udG9wXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZmluZE5leHRQb3NpdGlvbiA9IGluZGV4ID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0pIHJldHVybiBwb3NpdGlvbnNbaV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gW11cbiAgICAgIGxldCByb3cgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcm93LnB1c2goaW5kZXgpXG4gICAgICAgIGlmIChpc0xhc3RJblJvdyhpbmRleCkpIHtcbiAgICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgICAgIHJvdyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgbGV0IGhhc0xhYmVsc0luUm93ID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uPy5oZWlnaHQgPiAyICYmIChcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZS5tYXRjaGVzKCc6aGFzKD4gLmRpdG8tbGFiZWwpJykgfHxcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZVxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzKCcuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBuZXN0ZWQgc2NoZW1hcywgZS5nLiAnc2VjdGlvbicgb3IgJ29iamVjdCcgYW5kXG4gICAgICAgICAgICAvLyBkZXRlY3QgbGFiZWxzIHRoZXJlIHRvby5cbiAgICAgICAgICAgIGhhc0xhYmVsc0luUm93ID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF0gPSBoYXNMYWJlbHNJblJvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb21wb25lbnRTY2hlbWFzLmxlbmd0aCcobGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPSBsZW5ndGhcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFuZSgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy4kcmVmcy5jb250YWluZXJzKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci4kZWxcbiAgICAgICAgICBjb25zdCBpbmRleCA9ICtub2RlLmRhdGFzZXQuaW5kZXhcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZylcbiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZm9udFNpemUpXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIDIgKiBwYWRkaW5nXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaW5kZXhdID1cbiAgICAgICAgICAgIGhlaWdodCA8PSAwXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHRvcDogYm91bmRzLnksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNJbkxhYmVsZWRSb3coaW5kZXgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRzZWxmOiAmO1xuICAkcm9vdC1wYWRkaW5nOiAkY29udGVudC1wYWRkaW5nIC0gJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgOlxuICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZV9fbWFpbmAsXG4gIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICBmbGV4OiAwJTtcblxuICAmX19tYWluIHtcbiAgICBmbGV4OiAxMDAlO1xuICB9XG5cbiAgLmRpdG8tc2Nyb2xsID4gJiB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIHBhZGRpbmc6ICRyb290LXBhZGRpbmc7XG5cbiAgICAmI3skc2VsZn0tLXNpbmdsZSB7XG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICAgIH1cblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBtYXJnaW4tdG9wOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICZfX3RhYiArICZfX21haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZi5cbiAgICAgIG1hcmdpbjogKC0kcm9vdC1wYWRkaW5nKSAkZm9ybS1zcGFjaW5nLWhhbGYgJHJvb3QtcGFkZGluZztcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAvLyBOZWVkZWQgZm9ybXMgd2l0aCBzdGlja3kgbWFpbiBidXR0b25zLlxuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgLmRpdG8tYnJlYWsge1xuICAgIC8vIGAuZGl0by1icmVha2AgaXMgcmVuZGVyZWQgYXMgPHNwYW4+IHNvIHdlIGNhbiB1c2UgdGhlXG4gICAgLy8gYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYCBzZWxlY3RvciB0byBtYXRjaCB0aGUgZmlyc3QgY29udGFpbmVyXG4gICAgLy8gZXZlbiBpZiBpdCBoYXMgYSBicmVhayBiZWZvcmUgaXQuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMTAwJTtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzZXNcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZXNcIlxuKVxuICBUZWxlcG9ydChcbiAgICB2LWlmPVwiaXNNb3VudGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgRGl0b0xhYmVsKFxuICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgOmNsYXNzPVwibGF5b3V0Q2xhc3Nlc1wiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDppbmZvPVwiaW5mb1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cInR5cGVDb21wb25lbnRcIlxuICAgIHJlZj1cImNvbXBvbmVudFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3Nlc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOndpZHRoPVwid2lkdGhcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJjb21iaW5lZEJhc2lzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7XG4gIGdldEFsbFBhbmVsRW50cmllcyxcbiAgZ2V0VHlwZUNvbXBvbmVudCxcbiAgaGFzTGFiZWwsXG4gIG9taXRTcGFjaW5nXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZlcnRpY2FsTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEudHlwZSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gaGFzTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGZsZXhHcm93KCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLndpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZmxleFNocmluaygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICByZXR1cm4gdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICB9LFxuXG4gICAgZmxleEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgcmV0dXJuIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpXG4gICAgICAgID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKVxuICAgICAgICAgID8gcGFyc2VGbG9hdCh3aWR0aCkgLyAxMDAgLy8gcGVyY2VudGFnZSAtPiBmcmFjdGlvblxuICAgICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgLy8gZnJhY3Rpb25cbiAgICB9LFxuXG4gICAgY29tYmluZWRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHsgYWNjdW11bGF0ZWRCYXNpcywgZmxleEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYWNjdW11bGF0ZWRCYXNpcykgJiYgaXNOdW1iZXIoZmxleEJhc2lzKVxuICAgICAgICA/IGFjY3VtdWxhdGVkQmFzaXMgKiBmbGV4QmFzaXNcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjbGFzc2VzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tY29udGFpbmVyJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXNpbmdsZWBdOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9ycyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWxhYmVsLXZlcnRpY2FsYF06IHRoaXMudmVydGljYWxMYWJlbHMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1vbWl0LXNwYWNpbmdgXTogb21pdFNwYWNpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oaXNTdHJpbmcoY2xhc3NlcykgPyB7IFtjbGFzc2VzXTogdHJ1ZSB9IDogY2xhc3NlcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udGFpbmVyU3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBmbGV4QmFzaXMsIGNvbWJpbmVkQmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLWdyb3cnOiB0aGlzLmZsZXhHcm93ID8gMSA6IDAsXG4gICAgICAgICctLXNocmluayc6IHRoaXMuZmxleFNocmluayA/IDEgOiAwLFxuICAgICAgICAnLS1iYXNpcyc6IGlzTnVtYmVyKGZsZXhCYXNpcykgPyBgJHtmbGV4QmFzaXMgKiAxMDB9JWAgOiBmbGV4QmFzaXMsXG4gICAgICAgICctLWJhc2lzLW1vYmlsZSc6XG4gICAgICAgICAgaXNOdW1iZXIoY29tYmluZWRCYXNpcykgJiYgY29tYmluZWRCYXNpcyA8PSAwLjI1XG4gICAgICAgICAgICA/IGAke2ZsZXhCYXNpcyAqIDIwMH0lYFxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgLi4udGhpcy5sYXlvdXRDbGFzc2VzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxheW91dENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogdGhpcy53aWR0aCA9PT0gJ2ZpbGwnIHx8IHRoaXMuZmxleEJhc2lzICE9PSAnYXV0bycsXG4gICAgICAgICdkaXRvLXdpZHRoLWdyb3cnOiB0aGlzLmZsZXhHcm93LFxuICAgICAgICAnZGl0by13aWR0aC1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGdldEFsbFBhbmVsRW50cmllcyhcbiAgICAgICAgdGhpcy5hcGksXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB0aGlzLiRyZWZzLmNvbXBvbmVudCxcbiAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb250YWluZXIge1xuICAtLWdyb3c6IDA7XG4gIC0tc2hyaW5rOiAxO1xuICAtLWJhc2lzOiBhdXRvO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogdmFyKC0tZ3JvdykgdmFyKC0tc2hyaW5rKSB2YXIoLS1iYXNpcyk7XG4gIGZsZXgtZmxvdzogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIC5kaXRvLXBhbmUgPiAmIHtcbiAgICAuZGl0by1wYWdlLS13aWR0aC04MCAmIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIGZsZXgtYmFzaXM6IHZhcigtLWJhc2lzLW1vYmlsZSwgdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiB5ZWxsb3c7XG4gICAgfVxuXG4gICAgLmRpdG8tcGFnZS0td2lkdGgtNjAgJiB7XG4gICAgICBmbGV4LWJhc2lzOiBjYWxjKDIgKiB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IG9yYW5nZTtcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC05OSAmIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiB5ZWxsb3c7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtNjAgJiB7XG4gICAgICBmbGV4LWJhc2lzOiBjYWxjKDIgKiB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IG9yYW5nZTtcbiAgICB9XG4gIH1cblxuICAmOmVtcHR5IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgJi0tc2luZ2xlIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbTtcbiAgICAvLyBKdXN0IGxpa2Ugb24gRGl0b1BhbmUsIGNsZWFyIHNldHRpbmdzIGZyb20gYWJvdmUuXG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLWxhYmVsLXZlcnRpY2FsIHtcbiAgICAvLyBGb3IgcGxhaW4gY29tcG9uZW50cyB3aXRob3V0IGxhYmVscyBpbiByb3dzIHdpdGggb3RoZXIgY29tcG9uZW50cyB0aGF0XG4gICAgLy8gaGF2ZSBsYWJlbHMsIGFkZCBzb21lIHNwYWNpbmcgdG8gdGhlIHRvcCB0byBhbGlnbiB3aXRoIHRoZSBvdGhlclxuICAgIC8vIGNvbXBvbmVudHMgKGUuZy4gIGJ1dHRvbnMpOlxuICAgID4gLmRpdG8tY29tcG9uZW50OmZpcnN0LWNoaWxkOm5vdCguZGl0by1zZWN0aW9uLCAuZGl0by1saXN0LCAuZGl0by1vYmplY3QpIHtcbiAgICAgIG1hcmdpbi10b3A6ICRpbnB1dC1oZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgJi0tb21pdC1zcGFjaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4vLyB0eXBlIGNvbXBvbmVudHMgY2FuIG92ZXJyaWRlIGAuZGl0by13aWR0aC1maWxsYCBjbGFzcyAoZmlsdGVyIHByZWNlZGVuY2UpLlxuLmRpdG8tY29tcG9uZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuZGl0by1jaGVja2JveCxcbiAgICAmLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRhYnNcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICApXG4gICAgYS5kaXRvLWxpbmsoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IG1vZGVsVmFsdWUgPT09IGtleSB9XCJcbiAgICAgIEBjbGljaz1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGtleSlcIlxuICAgICkge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFicycsIHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFicyB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tbGluayB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBpbiBtYWluIGhlYWRlcjpcbiAgICAuZGl0by1oZWFkZXIgJiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHQ7XG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW47XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICB9XG5cbiAgICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBpbnNpZGUgYSBpbmxpbmUgc2NoZW1hOlxuICAgIC5kaXRvLXNjaGVtYS1pbmxpbmVkICYsXG4gICAgLmRpdG8tbGFiZWwgJiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICB9XG5cbiAgICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItY29sb3I6IGNvbG9yLmFkanVzdCgkY29sb3ItYWN0aXZlLCAkbGlnaHRuZXNzOiAtMTAlKTtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShwYW5lbFNjaGVtYSlcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBEaXRvU2NoZW1hLmRpdG8tcGFuZWxfX3NjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICBnZW5lcmF0ZUxhYmVsc1xuICApXG4gICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgIGgyLmRpdG8tcGFuZWxfX2hlYWRlcig6Y2xhc3M9XCJ7ICdkaXRvLXBhbmVsX19oZWFkZXItLXN0aWNreSc6IHN0aWNreSB9XCIpXG4gICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJwYW5lbEJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIClcbiAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgIERpdG9CdXR0b25zKFxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHBhbmVsQnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVsQnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgPiAuZGl0by1wYW5lIHtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgICAgIH1cblxuICAgICAgLmRpdG8tcGFuZSB7XG4gICAgICAgIG1hcmdpbjogLSRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAgICAgICAmLmRpdG8tcGFuZS0tc2luZ2xlIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1zaW5nbGUpIHtcbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCBoYXNTbG90Q29udGVudCgkc2xvdHMuZGVmYXVsdClcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBEaXRvVm5vZGUoOnZub2RlPVwidm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaGFzU2xvdENvbnRlbnQsIGhhc1ZOb2RlQ29udGVudCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNEcmFnZ2FibGVEaXNhYmxlZCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRWRpdGFibGVEaXNhYmxlZCB9XCJcbiAgICA6dG89XCJlZGl0UGF0aCA/IHsgcGF0aDogZWRpdFBhdGggfSA6IHt9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgOmRpc2FibGVkPVwiaXNDcmVhdGFibGVEaXNhYmxlZFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImlzRGVsZXRhYmxlRGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5lZGl0UGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2VkaXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuY3JlYXRlUGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2NyZWF0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1NjaGVtYU9wdGlvbihuYW1lKSB7XG4gICAgICAvLyBBbGwgb3B0aW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybSBiYXNpcyBieSBzZXR0aW5nXG4gICAgICAvLyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgIG9yIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZShuYW1lLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIHRlbXBsYXRlKFxuICAgIHYtaWY9XCJzaG93UHVsbGRvd25cIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cImlzRm9ybUNyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvd1NjaGVtYShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlLWlmPVwiaXNGb3JtQ3JlYXRhYmxlKGZvcm1zLmRlZmF1bHQpXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gVGhlIG5leHQgZm91ciBwcm9wcyBhcmUgdGhlcmUgZm9yIGBEaXRvQ29udGV4dGAgYW5kIHRoZSBgY29udGV4dCgpYFxuICAgIC8vIGdldHRlciBpbiBgRGl0b01peGluYC5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhleSBiZSBtb3ZlZCB0byBzaGFyZWQgbWl4aW4gdGhhdCBkZWZpbmVzIHRoZW0gYXMgcmVxdWlyZWRcbiAgICAvLyBhbmQgYWxzbyBwcm92aWRlcyB0aGUgYGNvbnRleHQoKWAgZ2V0dGVyLCBwZXJoYXBzIGBDb250ZXh0TWl4aW5gP1xuICAgIC8vIGBzY2hlbWFgIGNvdWxkIGJlIGluY2x1ZGVkIGFzIHdlbGwsIGFuZCBgQ29udGV4dE1peGluYCBjb3VsZCBiZSB1c2VkIGluXG4gICAgLy8gYERpdG9Gb3JtYCwgYERpdG9WaWV3YCwgYERpdG9QYW5lbGAsIGBEaXRvU2NoZW1hYCwgYERpdG9FZGl0QnV0dG9uc2AsXG4gICAgLy8gZXRjPyBCdXQgdGhlIHByb2JsZW0gd2l0aCB0aGUgcm9vdCBjb21wb25lbnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlXG4gICAgLy8gdGhlc2UgcHJvcHMuIFdlIGNvdWxkIGFkZCBhIGBjb250ZXh0QXR0cmlidXRlcygpYCBnZXR0ZXIgZm9yIGVhc3kgcGFzc2luZ1xuICAgIC8vIG9uIGFzIGB2LWJpbmQ9XCJjb250ZXh0QXR0cmlidXRlc1wiYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICBjb25zdCBmb3JtcyA9IE9iamVjdC52YWx1ZXModGhpcy5mb3JtcylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChmb3Jtcy5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHQpICYmXG4gICAgICAgIGZvcm1zLnNvbWUodGhpcy5pc0Zvcm1DcmVhdGFibGUpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pc0Zvcm1DcmVhdGFibGUoZm9ybSkgJiYgIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgY2xpcGJvYXJkRGF0YSB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PlxuICAgICAgICAgICAgcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoaGFzRGF0YSkge1xuICAgICAgICB0aGlzLmNvcHlFbmFibGVkID0gaGFzRGF0YVxuICAgICAgfVxuICAgIH0sXG4gICAgJ2FwcFN0YXRlLmNsaXBib2FyZERhdGEnOiAndXBkYXRlUGFzdGUnXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhXG4gICAgICBpZiAoIXRoaXMucGFzdGVFbmFibGVkICYmIHRoaXMuYXBwU3RhdGUuYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpIC8vIERvbid0IHJlcG9ydFxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGFcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyBSZXBvcnRcbiAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNsaXBib2FyZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBpc1Jvb3RGb3JtIH1cIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNjcm9sbGFibGU9XCJpc1Jvb3RGb3JtXCJcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4oXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1idXR0b25zLXN0aWNreSc6IGlzUm9vdEZvcm0gfVwiXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGVcbiAgICAgICAgICAvLyByaWdodCB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgICApIHx8IHt9XG4gICAgICApIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIGFzc2lnbkRlZXBseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuaXNNdXRhdGluZyAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdEZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaXNOZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFJlbG9hZCBmb3JtIGRhdGEgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eSBpbiBzYW1lIGZvcm0uXG4gICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhPy5wYXJhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyYW0gJiZcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgZHVlIHRvIGBmbHVzaDogJ3Bvc3QnYC5cbiAgICAgICAgICBmcm9tLm1hdGNoZWRbMF0ucGF0aCA9PT0gdG8ubWF0Y2hlZFswXS5wYXRoICYmIC8vIFN0YXlpbmcgb24gc2FtZSBmb3JtXG4gICAgICAgICAgZnJvbS5wYXJhbXNbcGFyYW1dICE9PSAnY3JlYXRlJyAmJiAvLyBCdXQgaGF2ZW4ndCBiZWVuIGNyZWF0aW5nXG4gICAgICAgICAgdG8ucGFyYW1zW3BhcmFtXSAhPT0gZnJvbS5wYXJhbXNbcGFyYW1dIC8vIEdvaW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID0gbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm1OZXN0ZWQnLCB7XG4gIGV4dGVuZHM6IERpdG9Gb3JtXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZm9ybS1uZXN0ZWQge1xuICAmLFxuICAuZGl0by1zY3JvbGwge1xuICAgIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgICkge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlwcHkgZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGlwOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVFcnJvcnMpXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLnRpcD8uZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZUVycm9ycygpIHtcbiAgICAgIGxldCB7IHRpcCB9ID0gdGhpc1xuICAgICAgdGlwPy5oaWRlKClcbiAgICAgIGlmICh0aGlzLmVycm9ycykge1xuICAgICAgICB0aXAgPSB0aGlzLnRpcCA/Pz0gbWFya1Jhdyh0aXBweSh0aGlzLiRlbC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKSkpXG4gICAgICAgIHRpcC5zZXRQcm9wcyh7XG4gICAgICAgICAgY29udGVudDogdGhpcy5lcnJvcnMuam9pbignXFxuJyksXG4gICAgICAgICAgdGhlbWU6ICdlcnJvcicsXG4gICAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgICAgYXBwZW5kVG86ICdwYXJlbnQnLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBvZmZzZXQ6IFszLCAzXSwgLy8gMS8yIGZvcm0tc3BhY2luZ1xuICAgICAgICAgIHpJbmRleDogJydcbiAgICAgICAgfSlcbiAgICAgICAgdGlwLnBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB0aXAuaGlkZSgpKVxuICAgICAgICB0aXAuc2hvdygpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZXJyb3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgdWwge1xuICAgIGNvbG9yOiAkY29sb3ItZXJyb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2NvcGVzXG4gIFJvdXRlckxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgIGN1c3RvbVxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY29wZXMge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICBtaW4td2lkdGg6IDNlbTtcbiAgICBmbGV4OiAwIDEgYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1yaWdodDogMWVtO1xuICAgIH1cblxuICAgICYgKyAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfSAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAmOmZvY3VzIHtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblBhZ2luYXRpb24oXG4gIHYtbW9kZWw6cGFnZT1cInBhZ2VcIlxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSAtIDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RHJhZ2dhYmxlT3B0aW9ucyhmb3JjZUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWRyYWdnYWJsZSdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogYCR7cHJlZml4fV9fZHJhZ2AsXG4gICAgICAgIGNob3NlbkNsYXNzOiBgJHtwcmVmaXh9X19jaG9zZW5gLFxuICAgICAgICBnaG9zdENsYXNzOiBgJHtwcmVmaXh9X19naG9zdGAsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6IGAke3ByZWZpeH1fX2ZhbGxiYWNrYCxcbiAgICAgICAgZm9yY2VGYWxsYmFjayxcbiAgICAgICAgb25TdGFydDogdGhpcy5vblN0YXJ0RHJhZyxcbiAgICAgICAgb25FbmQ6IHRoaXMub25FbmREcmFnXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcihcbiAgICB2LWlmPVwibGFiZWxcIlxuICApXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKFxuICAgICAgICB2LWlmPVwiZGV0YWlsc1wiXG4gICAgICApIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYoXG4gICAgICB2LWVsc2VcbiAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBEaXRvTGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICBEaXRvRHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnModHJ1ZSlcIlxuICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGNoaWxkcmVuTGlzdCA9IHZhbHVlKVwiXG4gIClcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vLSBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmVlSXRlbScsIHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBTb3J0YWJsZU1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcihcbiAgICAgICAgICBjaGlsZHJlblNjaGVtYSxcbiAgICAgICAgICBjaGlsZHJlbkxpc3QubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBudW1DaGlsZHJlbiAmJlxuICAgICAgICBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBPdmVycmlkZSBkZWZhdWx0IGlubGluZS1mbGV4IHBvc2l0aW9uaW5nLlxuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkLWZpbGVcbiAgLmRpdG8tdGh1bWJuYWlsKFxuICAgIHYtaWY9XCJ0aHVtYm5haWxcIlxuICAgIDpjbGFzcz1cImBkaXRvLXRodW1ibmFpbC0tJHt0aHVtYm5haWx9YFwiXG4gIClcbiAgICAuZGl0by10aHVtYm5haWxfX2lubmVyXG4gICAgICBpbWcoXG4gICAgICAgIHYtaWY9XCJzb3VyY2VcIlxuICAgICAgICA6c3JjPVwic291cmNlXCJcbiAgICAgICAgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdGh1bWJuYWlsX190eXBlKFxuICAgICAgICB2LWVsc2VcbiAgICAgIClcbiAgICAgICAgc3BhbiB7eyB0eXBlIH19XG4gIHNwYW4ge3sgZmlsZS5uYW1lIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVXBsb2FkRmlsZScsIHtcbiAgcHJvcHM6IHtcbiAgICBmaWxlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aHVtYm5haWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGh1bWJuYWlsVXJsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkVXJsOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFRZUEVTW3RoaXMuZmlsZS50eXBlXSB8fFxuICAgICAgICB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpLnRvVXBwZXJDYXNlKClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc291cmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkVXJsIHx8IHRoaXMudGh1bWJuYWlsVXJsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2ZpbGUudXBsb2FkLmZpbGUnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyKGZpbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudGh1bWJuYWlsICYmIGZpbGU/LnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gcmVhZGVyLnJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBUWVBFUyA9IHtcbiAgJ3RleHQvcGxhaW4nOiAnVFhUJyxcbiAgJ3RleHQvaHRtbCc6ICdIVE1MJyxcbiAgJ3RleHQvY3NzJzogJ0NTUycsXG4gICd0ZXh0L2phdmFzY3JpcHQnOiAnSlMnLFxuICAnaW1hZ2UvanBlZyc6ICdKUEcnLFxuICAnaW1hZ2UvcG5nJzogJ1BORycsXG4gICdpbWFnZS9naWYnOiAnR0lGJyxcbiAgJ2ltYWdlL3N2Zyt4bWwnOiAnU1ZHJyxcbiAgJ21vdmllL21wNCc6ICdNUDQnLFxuICAnYXVkaW8vbXBlZyc6ICdNUDMnLFxuICAnYXBwbGljYXRpb24vanNvbic6ICdKU09OJyxcbiAgJ2FwcGxpY2F0aW9uL3htbCc6ICdYTUwnLFxuICAnYXBwbGljYXRpb24vcGRmJzogJ1BERicsXG4gICdhcHBsaWNhdGlvbi96aXAnOiAnWklQJ1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2FzczptYXRoJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZC1maWxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4uZGl0by10aHVtYm5haWwge1xuICAkc2VsZjogJjtcblxuICAvLyBTbWFsbCBzaXplIGJ5IGRlZmF1bHRcbiAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gIC0tY29ybmVyLXNpemU6IGNhbGModmFyKC0tbWF4LXNpemUpIC8gNSk7XG4gIC0tc2hhZG93LXNpemU6IDFweDtcbiAgLS1taW4tc2l6ZTogY2FsYygyICogdmFyKC0tY29ybmVyLXNpemUpKTtcbiAgLS1tYXJnaW46IDBlbTtcbiAgLS1kcm9wLXNoYWRvdzogZHJvcC1zaGFkb3coXG4gICAgMCBjYWxjKHZhcigtLXNoYWRvdy1zaXplKSAqIDAuNzUpIHZhcigtLXNoYWRvdy1zaXplKSAje3JnYmEoXG4gICAgICAgICRjb2xvci1ibGFjayxcbiAgICAgICAgMC40XG4gICAgICApfVxuICApO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICBmaWx0ZXI6IHZhcigtLWRyb3Atc2hhZG93KTtcblxuICAmLS1zbWFsbCB7XG4gICAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDBlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxcHg7XG4gIH1cblxuICAmLS1tZWRpdW0ge1xuICAgIC0tbWF4LXNpemU6ICN7MiAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwLjI1ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMS41cHg7XG4gIH1cblxuICAmLS1sYXJnZSB7XG4gICAgLS1tYXgtc2l6ZTogI3s0ICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuNWVtO1xuICAgIC0tc2hhZG93LXNpemU6IDIuNXB4O1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgY2xpcC1wYXRoOiBwb2x5Z29uKFxuICAgICAgMCAwLFxuICAgICAgY2FsYygxMDAlIC0gdmFyKC0tY29ybmVyLXNpemUpKSAwLFxuICAgICAgMTAwJSB2YXIoLS1jb3JuZXItc2l6ZSksXG4gICAgICAxMDAlIDEwMCUsXG4gICAgICAwIDEwMCVcbiAgICApO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHdpZHRoOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG4gICAgICBoZWlnaHQ6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgI2ZmZmZmZiwgI2VlZWVlZSA0MCUsICNkZGRkZGQgNTAlKTtcbiAgICAgIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuICAgIH1cbiAgfVxuXG4gICZfX3R5cGUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICAgIGFzcGVjdC1yYXRpbzogMyAvIDQ7XG5cbiAgICBzcGFuIHtcbiAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWdyZXl9O1xuXG4gICAgICBmb250LXNpemU6IG1pbih2YXIoLS1mb250LXNpemUpLCAjezEuMjUgKiAkZm9udC1zaXplfSk7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xuXG4gICAgICAjeyRzZWxmfTpub3QoI3skc2VsZn0tLXNtYWxsKSAmIHtcbiAgICAgICAgcGFkZGluZzogMCBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1mb250LXNpemUpIC8gNCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9LS1tZWRpdW0gJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0fTtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLWxhcmdlICYge1xuICAgICAgICAtLWNvbG9yOiAjeyRjb2xvci1saWdodGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC8vIFNWRyBpbWFnZXMgbmVlZCAxMDAlIHNldHRpbmdzIHRvIHNjYWxlIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1heC13aWR0aDogdmFyKC0tbWF4LXNpemUpO1xuICAgIG1heC1oZWlnaHQ6IHZhcigtLW1heC1zaXplKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fb2JqUmVzdCA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB1c2VTb3J0YWJsZShlbCwgbGlzdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBzb3J0YWJsZTtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50IH0gPSBfYSwgcmVzZXRPcHRpb25zID0gX19vYmpSZXN0KF9hLCBbXCJkb2N1bWVudFwiXSk7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQpXG4gICAgICByZXR1cm47XG4gICAgc29ydGFibGUgPSBuZXcgU29ydGFibGUodGFyZ2V0LCBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgZGVmYXVsdE9wdGlvbnMpLCByZXNldE9wdGlvbnMpKTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlID09IG51bGwgPyB2b2lkIDAgOiBzb3J0YWJsZS5kZXN0cm95KCk7XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCB9O1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bykge1xuICBjb25zdCBhcnJheSA9IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpKTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VTb3J0YWJsZVwiLFxuICBtb2RlbDoge1xuICAgIC8vIENvbXBhdGlibGUgd2l0aCB2dWUyXG4gICAgcHJvcDogXCJtb2RlbFZhbHVlXCIsXG4gICAgZXZlbnQ6IFwidXBkYXRlOm1vZGVsVmFsdWVcIlxuICB9LFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJkaXZcIlxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBsaXN0ID0gdXNlVk1vZGVsKHByb3BzLCBcIm1vZGVsVmFsdWVcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHJlYWN0aXZlKHVzZVNvcnRhYmxlKHRhcmdldCwgbGlzdCwgcHJvcHMub3B0aW9ucykpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMudGFnLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoZGF0YSkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VTb3J0YWJsZSB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblVzZVNvcnRhYmxlLmRpdG8tZHJhZ2dhYmxlKFxuICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1kcmFnZ2FibGUtLWRyYWdnaW5nJzogaXNEcmFnZ2luZyB9XCJcbiAgOnRhZz1cInRhZ1wiXG4gIDptb2RlbFZhbHVlPVwibW9kZWxWYWx1ZVwiXG4gIDpvcHRpb25zPVwieyAuLi5vcHRpb25zLCBvblN0YXJ0LCBvbkVuZCB9XCJcbiAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgJGV2ZW50KVwiXG4pXG4gIHNsb3RcbmNvbXBvbmVudChcbiAgdi1lbHNlXG4gIDppcz1cInRhZ1wiXG4pXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50J1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IFVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EcmFnZ2FibGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VTb3J0YWJsZSB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRyYWdnYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW91c2VFdmVudHM6IG51bGwsXG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uU3RhcnQ/LihldmVudClcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgfSxcblxuICAgIG9uRW5kKGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25FbmQ/LihldmVudClcbiAgICAgIC8vIEtlZXAgYGlzRHJhZ2dpbmdgIHRydWUgdW50aWwgdGhlIG5leHQgbW91c2UgaW50ZXJhY3Rpb24gc28gdGhhdFxuICAgICAgLy8gY29uZnVzZWQgaG92ZXIgc3RhdGVzIGFyZSBjbGVhcmVkIGJlZm9yZSByZW1vdmluZyB0aGUgaG92ZXIgY2F0Y2hlci5cbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlZG93bjogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZW1vdmU6IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2VsZWF2ZTogdGhpcy5vbk1vdXNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbk1vdXNlKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRyYWdnYWJsZSB7XG4gIC8vIE92ZXJsYXkgYSBob3ZlciBjYXRjaGVyIHdoaWxlIHdlJ3JlIGRyYWdnaW5nIHRvIHByZXZlbnQgaG92ZXIgc3RhdGVzIGZyb21cbiAgLy8gZ2V0dGluZyBzdHVjayAvIGNvbmZ1c2VkLiBTYWZhcmkgc3RydWdnbGVzIHdpdGggdGhpcywgc28gZGlzYWJsZSBpdCB0aGVyZS5cbiAgQGluY2x1ZGUgYnJvd3Nlci1xdWVyeSgoJ2Nocm9tZScsICdmaXJlZm94JykpIHtcbiAgICAmOmhhcygmX19jaG9zZW4pLFxuICAgICYtLWRyYWdnaW5nIHtcbiAgICAgID4gKiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICA+IDpmaXJzdC1jaGlsZDo6YWZ0ZXIge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBpbnNldDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX2ZhbGxiYWNrIHtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDRweCAkY29sb3Itc2hhZG93KTtcblxuICAgIC8vIE5lc3RlZCA8dGQ+IG5lZWQgdG8gYWxzbyBzd2l0Y2ggdG8gYGRpc3BsYXk6IGZsZXhgIHN0eWxlIGR1cmluZyBkcmFnZ2luZy5cbiAgICAmLFxuICAgIHRkIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAgID4gKiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBEaXRvVk5vZGUoeyB2bm9kZSB9KSB7XG4gIHJldHVybiB2bm9kZVxufVxuXG5EaXRvVk5vZGUucHJvcHMgPSB7XG4gIHZub2RlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Zub2RlJywgRGl0b1ZOb2RlKVxuPC9zY3JpcHQ+XG4iLCIvLyBEaXRvVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlXG4vLyBjb21wb25lbnRzIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBEaXRvVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciBgeyB0eXBlOiAnY29tcG9uZW50JyB9YFxuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0ZW5kczogRGl0b0NvbXBvbmVudCxcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFNwYWNpbmc6IGZhbHNlLFxuXG4gIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQsXG5cbiAgZ2V0OiBnZXRUeXBlQ29tcG9uZW50LFxuXG4gIHJlZ2lzdGVyKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoXG4gICAgICBgRGl0b1R5cGUke2NhbWVsaXplKHR5cGVzWzBdLCB0cnVlKX1gLFxuICAgICAgZGVmaW5pdGlvblxuICAgIClcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGl0bGVcIlxuICA6Y2xhc3M9XCJidXR0b25DbGFzc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICAuZGl0by1idXR0b25fX3RleHQoXG4gICAgdi1pZj1cInRleHRcIlxuICApIHt7IHRleHQgfX1cbiAgLmRpdG8taW5mbyhcbiAgICB2LWlmPVwiIWxhYmVsICYmIGluZm9cIlxuICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydidXR0b24nLCAnc3VibWl0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBleGNsdWRlVmFsdWU6IHRydWUsXG4gICAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gICAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmVyYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXVxuICAgICAgfSxcblxuICAgICAgYnV0dG9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmIgPyBgZGl0by1idXR0b24tJHt0aGlzLnZlcmJ9YCA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgIH0pLFxuXG4gICAgICB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9LFxuXG4gICAgICBpbmZvOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5mbycsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9KSxcblxuICAgICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgLy8gQG92ZXJyaWRlXG4gICAgICBnZXRFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9XG4gICAgICB9LFxuXG4gICAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYnV0dG9uIHtcbiAgJHNlbGY6ICY7XG5cbiAgJl9fdGV4dCB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2hlY2tib3hcbiAgaW5wdXQoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveCB7XG4gIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9ICh0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHw9IHJlYWN0aXZlKHtcbiAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlXG4gICAgICB9KSlcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy4odGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQodGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPSByZXNvbHZlQ291bnRlclxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgLy8gVXNlIGEgdGltZW91dCB0byBhbGxvdyBhbHJlYWR5IHJlc29sdmVkIHByb21pc2VzIHRvIHJldHVybiBkYXRhIHdpdGhvdXRcbiAgICAgIC8vIHNob3dpbmcgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpLCAwKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzVmlld1NjaGVtYSwgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZSxcbiAgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJlxuICAgICAgICAgIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gKHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlKVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICAgIGlucHV0KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIClcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbiB8fCBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94ZXMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJjb2RlXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICF0aGlzLmZvY3VzZWQgfHxcbiAgICAgICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZTtcbiRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGg7XG5cbi5kaXRvLWNvbG9yIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGlucHV0IHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXBpY2tlciB7XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIH1cblxuICAuZGl0by1jb2xvci1wcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3k7XG4gICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG5cbiAgICAmLFxuICAgIGRpdiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgICAvLyBNb2RpZnlpbmcgYHRoaXMuZGF0YWAgYmVsb3cgdHJpZ2dlcnMgYW5vdGhlciBjYWxsIG9mIHRoZVxuICAgICAgICAgICAgICAvLyBgdmFsdWVgIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0b1xuICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGVcbiAgY29tcG9uZW50KFxuICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgIDpmb3JtYXQ9XCJmb3JtYXRzXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0RhdGUsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGFcbiAgICAvLyBiZXR0ZXIgd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHlcbiAgICAvLyBzdXBwb3J0ZWQgYXR0cmlidXRlcylcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZGF0ZVZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gVE9ETzogUmVuYW1lIHRvIGBmb3JtYXRgLCBvbmNlIGBzY2hlbWEuZm9ybWF0KClgIHdhcyByZW1vdmVkIHRvXG4gICAgICAvLyBgZm9ybWF0VmFsdWUoKWAuXG4gICAgICBmb3JtYXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0cycsIHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICBnZXQoZm9ybWF0cykge1xuICAgICAgICAgIGNvbnN0IHsgZGF0ZSwgdGltZSB9ID0gYXNzaWduRGVlcGx5KHt9LCB0aGlzLmFwaS5mb3JtYXRzLCBmb3JtYXRzKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlOiBbJ2RhdGUnLCAnZGF0ZXRpbWUnXS5pbmNsdWRlcyh0aGlzLnR5cGUpID8gZGF0ZSA6IG51bGwsXG4gICAgICAgICAgICB0aW1lOiBbJ3RpbWUnLCAnZGF0ZXRpbWUnXS5pbmNsdWRlcyh0aGlzLnR5cGUpID8gdGltZSA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgICAgfVt0eXBlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuICAgIGhpc3Rvcnkuc3RhdGUsXG4gICAgbnVsbCxcbiAgICBgJHtcbiAgICAgIGxvY2F0aW9uLm9yaWdpblxuICAgIH0ke1xuICAgICAgcGF0aCA/PyBsb2NhdGlvbi5wYXRobmFtZVxuICAgIH0/JHtcbiAgICAgIHF1ZXJ5ID8gZm9ybWF0UXVlcnkocXVlcnkpIDogbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpXG4gICAgfSR7XG4gICAgICBoYXNoID8/IGxvY2F0aW9uLmhhc2hcbiAgICB9YFxuICApXG59XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IHJlcGxhY2VSb3V0ZSB9IGZyb20gJy4uL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLFxuICBwcm9jZXNzRm9ybXMsXG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIGdldFZpZXdTY2hlbWEsXG4gIGlzQ29tcGFjdCxcbiAgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSxcbiAgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyBkYXRhICYmIGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgJiYgZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbVN0b3JlKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggJiYgbWF0Y2hlZFswXS5uYW1lICE9PSAnY2F0Y2gtYWxsJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lc3RlZCAke1xuICAgICAgICAgIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/ICdsaXN0cydcbiAgICAgICAgICAgIDogdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgICA/ICdvYmplY3RzJ1xuICAgICAgICAgICAgICA6ICdzY2hlbWEnXG4gICAgICAgIH0gY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXNgXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PlxuICAgICAgICBwYXJhbVxuICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ0RpdG9Gb3JtTmVzdGVkJyA6ICdEaXRvRm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyB9IGZyb20gJy4vc2NoZW1hJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB3aWR0aDogJzIvNScsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICczLzUnIDogJ2ZpbGwnLFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIGNvbnN0IGRhdGV0aW1lID0ge1xuICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogZGF0ZXRpbWUsXG4gICAgICB0bzogZGF0ZXRpbWVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCBxdWVyeSkge1xuICBjb25zdCB7IHN0aWNreSwgLi4uZmlsdGVyU2NoZW1hcyB9ID0gZmlsdGVyc1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICB0eXBlOiAncGFuZWwnLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHN0aWNreSxcblxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcXVlcnkudmFsdWVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50czogY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVyU2NoZW1hcyksXG4gICAgYnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnMoZmFsc2UpLFxuICAgIHBhbmVsQnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnModHJ1ZSksXG5cbiAgICBldmVudHM6IHtcbiAgICAgIGNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICB9LFxuXG4gICAgICBoYXNGaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBxdWVyeS52YWx1ZSA9IHtcbiAgICAgICAgICAuLi5xdWVyeS52YWx1ZSxcbiAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVycyxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgcGFuZWwpXG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhzbWFsbCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyOiB7XG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdDbGVhcicsXG4gICAgICBkaXNhYmxlZDogKHsgc2NoZW1hQ29tcG9uZW50IH0pID0+ICFzY2hlbWFDb21wb25lbnQuaGFzRmlsdGVycyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgLy8gU2luY2UgcGFuZWwgYnV0dG9ucyBhcmUgb3V0c2lkZSBvZiB0aGUgc2NoZW1hLCB3ZSBuZWVkIHRvIHVzZSB0aGVcbiAgICAgICAgICAvLyBzY2hlbWEgY29tcG9uZW50IHJlY2VpdmVkIGZyb20gdGhlIGluaXRpYWxpemUgZXZlbnQgYmVsb3c6XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmNsZWFyRmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3VibWl0OiB7XG4gICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdGaWx0ZXInLFxuICAgICAgdmlzaWJsZTogIXNtYWxsLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhnZXROYW1lZFNjaGVtYXMoZmlsdGVycykgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgd2lkdGgsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0udHlwZSA9ICdmb3JtJ1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyc1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1saXN0X19oZWFkZXIoXG4gICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgKVxuICAgIERpdG9TY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLy0gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vLSBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBEaXRvUGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgRGl0b1RhYmxlSGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAobGlzdERhdGEgPSB2YWx1ZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdERhdGFcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgIClcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoOmNvbHNwYW49XCJudW1Db2x1bW5zXCIpXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICApXG4gIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBEaXRvRWRpdEJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1zdGlja3koXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluLCBTb3J0YWJsZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEsIGRhdGFQYXRoLCBjb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRmlsdGVyc1BhbmVsKFxuICAgICAgICBhcGksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAvLyBQYXNzIGEgY29tcHV0ZWQgdmFsdWUgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgIGNvbXB1dGVkKHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LnF1ZXJ5XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNQYWdpbmF0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGUgJiYgdGhpcy50b3RhbCA+IHRoaXMucGFnaW5hdGVcbiAgICB9LFxuXG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5idXR0b25TY2hlbWFzIHx8IHRoaXMuY3JlYXRhYmxlKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCBpZCwgdGhpcy5jb250ZXh0KSB8fFxuICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtpZH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEuY29sdW1ucyksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxpc3Qge1xuICAkc2VsZjogJjtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcblxuICAgIC8vIE1ha2Ugc2luZ2xlIGxpc3QgaGVhZGVyLCBuYXZpZ2F0aW9uIGFuZCBidXR0b25zIHN0aWNreSB0byB0aGUgdG9wIGFuZFxuICAgIC8vIGJvdHRvbTpcbiAgICAjeyRzZWxmfV9faGVhZGVyIHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIHBhZGRpbmctdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICsgLmRpdG8tdGFibGUge1xuICAgICAgICAuZGl0by10YWJsZS1oZWFkIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICAgIHRvcDogY2FsYygkaW5wdXQtaGVpZ2h0ICsgJGNvbnRlbnQtcGFkZGluZyArICRjb250ZW50LXBhZGRpbmctaGFsZik7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9MYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudChcbiAgOmxhYmVsPVwidmFsdWVcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tbGFiZWwtY29tcG9uZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAyZW07XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW1hcmt1cCg6aWQ9XCJkYXRhUGF0aFwiKVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgIClcbiAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFVuZGVybGluZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcbi8vIE5vZGVzOlxuaW1wb3J0IHsgQmxvY2txdW90ZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUnXG5pbXBvcnQgeyBDb2RlQmxvY2sgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrJ1xuaW1wb3J0IHsgSGFyZEJyZWFrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGFyZC1icmVhaydcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJ1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbFJ1bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ob3Jpem9udGFsLXJ1bGUnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCdcbmltcG9ydCB7IEJ1bGxldExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWxsZXQtbGlzdCdcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGlzdC1pdGVtJ1xuLy8gVE9ETzpcbi8vIGltcG9ydCB7IEltYWdlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnXG4vLyBpbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbidcbi8vIGltcG9ydCB7IENvZGVCbG9ja0hpZ2hsaWdodCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2staGlnaGxpZ2h0J1xuLy8gaW1wb3J0IHsgVGFibGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZSdcbi8vIGltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnXG4vLyBpbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcidcbi8vIGltcG9ydCB7IFRhYmxlTm9kZXMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1ub2Rlcydcbi8vIGltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93J1xuLy8gaW1wb3J0IHsgVGFza0xpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWxpc3QnXG4vLyBpbXBvcnQgeyBUYXNrSXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2staXRlbSdcbi8vIFRvb2xzOlxuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXG5cbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBoeXBoZW5hdGUsIGRlYm91bmNlLCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEljb25cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogZWRpdG9yID0+IHRoaXMub25DbGlja0xpbmsoZWRpdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAgIGNvbW1hbmQ6ICdzZXRQYXJhZ3JhcGgnXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWR2YW5jZWROb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMubWFya0J1dHRvbnMsXG4gICAgICAgIHRoaXMuYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy5hZHZhbmNlZE5vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLnRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZWRpdG9yID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGVkaXRvci5nZXRIVE1MKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZWRpdG9yKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5nZXRFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhlZGl0b3IpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZ2V0TWFya0F0dHJpYnV0ZXModGhpcy5lZGl0b3Iuc3RhdGUsICdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cmlidXRlc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCxcbiAgICAgICAgICAvLyBwcmVmaXggaXQgd2l0aCBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cHM6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0TGluayh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnVuc2V0TGluaygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gRXNzZW50aWFsczpcbiAgICAgICAgRG9jdW1lbnQsXG4gICAgICAgIFRleHQsXG4gICAgICAgIFBhcmFncmFwaCwgLy8gYnV0dG9uIGNhbiBiZSBjb250cm9sbGVkLCBidXQgbm9kZSBuZWVkcyB0byBiZSBvbi5cblxuICAgICAgICAvLyBNYXJrczogYHNjaGVtYS5tYXJrc2BcbiAgICAgICAgbWFya3MuYm9sZCAmJiBCb2xkLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgSXRhbGljLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgVW5kZXJsaW5lLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgU3RyaWtlLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBTbWFsbCxcbiAgICAgICAgbWFya3MuY29kZSAmJiBDb2RlLFxuICAgICAgICBtYXJrcy5saW5rICYmIExpbmtXaXRoVGl0bGUsXG5cbiAgICAgICAgLy8gTm9kZXM6IGBzY2hlbWEubm9kZXNgXG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgQmxvY2txdW90ZSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIENvZGVCbG9jayxcbiAgICAgICAgSGFyZEJyZWFrLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgSGVhZGluZy5jb25maWd1cmUoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIEhvcml6b250YWxSdWxlLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgTGlzdEl0ZW0sXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgQnVsbGV0TGlzdCxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgT3JkZXJlZExpc3QsXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9JdGVtLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvTGlzdCxcblxuICAgICAgICAvLyBUb29sczogYHNjaGVtYS50b29sc2BcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBIaXN0b3J5XG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuICAgICAgY29uc3QgeyBjb21tYW5kcyB9ID0gdGhpcy5lZGl0b3JcblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgYXR0cmlidXRlcywgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiB0aGlzLmVkaXRvci5pc0FjdGl2ZShuYW1lLCBhdHRyaWJ1dGVzKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBjb21tYW5kID8/PVxuICAgICAgICAgICAgICBuYW1lIGluIGNvbW1hbmRzXG4gICAgICAgICAgICAgICAgPyBuYW1lXG4gICAgICAgICAgICAgICAgOiBgdG9nZ2xlJHtjYW1lbGl6ZShuYW1lLCB0cnVlKX1gXG4gICAgICAgICAgICBpZiAoY29tbWFuZCBpbiBjb21tYW5kcykge1xuICAgICAgICAgICAgICBjb25zdCBhcHBseSA9IGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpW2NvbW1hbmRdKGF0dHJpYnV0ZXMpLmZvY3VzKCkucnVuKClcbiAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgID8gb25DbGljayh0aGlzLmVkaXRvciwgYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICA6IGFwcGx5KGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhuYW1lKSA/ICdoaXN0b3J5JyA6IG5hbWVcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShuYW1lKVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjb21tYW5kLCBhdHRyaWJ1dGUsIHZhbHVlcywgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBbYXR0cmlidXRlXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGNvbW1hbmQsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmJsdXIoKVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgU21hbGwgPSBNYXJrLmNyZWF0ZSh7XG4gIG5hbWU6ICdzbWFsbCcsXG5cbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbeyB0YWc6ICdzbWFsbCcgfV1cbiAgfSxcblxuICByZW5kZXJIVE1MKCkge1xuICAgIHJldHVybiBbJ3NtYWxsJywgMF1cbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0U21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHRvZ2dsZVNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB1bnNldFNtYWxsOlxuICAgICAgICAoKSA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpXG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IExpbmtXaXRoVGl0bGUgPSBMaW5rLmV4dGVuZCh7XG4gIGluY2x1c2l2ZTogZmFsc2UsXG4gIHNjaGVtYToge1xuICAgIGF0dHJzOiB7XG4gICAgICBocmVmOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiAoe1xuICAgICAgICAgICAgaHJlZjogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgcmVuZGVySFRNTChub2RlKSB7XG4gICAgICByZXR1cm4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tYXJrdXAge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcmVzaXplIHtcbiAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHVuc2V0O1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMWVtO1xuICAgIGhlaWdodDogMWVtO1xuICB9XG5cbiAgLlByb3NlTWlycm9yIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLW1hcmt1cC1lZGl0b3Ige1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICBtYXJnaW4tdG9wOiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucy10b29sYmFyIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBwLFxuICB1bCxcbiAgb2wsXG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbiAgfVxuXG4gIGNvZGUge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgfVxuXG4gIHByZSB7XG4gICAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG5cbiAgICBjb2RlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIHAgY29kZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC4zcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICB9XG5cbiAgYSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGNvbG9yOiBibHVlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cblxuICBsaSB7XG4gICAgJiA+IHAsXG4gICAgJiA+IG9sLFxuICAgICYgPiB1bCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlcjtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW11bHRpc2VsZWN0XG4gIC5kaXRvLW11bHRpc2VsZWN0X19pbm5lclxuICAgIFZ1ZU11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnbXVsdGlzZWxlY3QtLW11bHRpcGxlJzogbXVsdGlwbGUsXG4gICAgICAgICdtdWx0aXNlbGVjdC0tbG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1oaWdobGlnaHQnOiBzaG93SGlnaGxpZ2h0XG4gICAgICB9YFxuICAgICAgOnNob3dMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWdQbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCJcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tTGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2tCeT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cExhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cFZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWxTZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZVNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhck9uU2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2VPblNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIEBjbG9zZT1cIm9uQ2xvc2VcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0+IChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZD9cbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGxldCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChpc0Jvb2xlYW4ocGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyB1bmRlZmluZWQgOiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNlYXJjaGFibGUgJiYgdGFnZ2FibGVcbiAgICAgICAgICA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICA6IHNlYXJjaGFibGVcbiAgICAgICAgICAgID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogcGxhY2Vob2xkZXJcbiAgICB9LFxuXG4gICAgc2hvd0hpZ2hsaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLmVsZW1lbnQucG9pbnRlckRpcnR5XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIHRvIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmRlYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbk9wZW4oKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgZmlyZSBibHVyIGV2ZW50cyB3aGlsZSB0aGUgbXVsdGlzZWxlY3QgaXMgb3BlbiAoc2VlXG4gICAgICAvLyBiZWxvdyksIHdlIG5lZWQgdG8gZG8gaXQgaGVyZSwgd2hlbiBpdCdzIGFjdHVhbGx5IGNsb3NlZC5cbiAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMuZWxlbWVudC5pc09wZW4pIHtcbiAgICAgICAgVHlwZU1peGluLm1ldGhvZHMub25CbHVyLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0LmNzcyc7XG5cbiRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuJHRhZy1pY29uLXdpZHRoOiAxLjhlbTtcbiR0YWctbWFyZ2luOiAycHg7XG4kdGFnLXBhZGRpbmc6IDNweDtcbiR0YWctbGluZS1oZWlnaHQ6IDFlbTtcblxuLmRpdG8tbXVsdGlzZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdCB7XG4gICAgJHNlbGY6IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAtLWlucHV0LXdpZHRoOiAxMDAlO1xuXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci1ibGFjaztcblxuICAgICYtLW11bHRpcGxlIHtcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG87XG4gICAgfVxuXG4gICAgJl9fdGFncyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDA7XG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpbjtcblxuICAgICAgLmRpdG8taGFzLWVycm9ycyAmIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW47XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgaGVpZ2h0OiBjYWxjKCRpbnB1dC1oZWlnaHQgLSAyICogJHRhZy1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAmX190YWdzLXdyYXAge1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAmX19zaW5nbGUsXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQge1xuICAgICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudDtcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gJl9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gRW5mb3JjZSBhY3R1YWwgbGluZS1oZWlnaHQgZm9yIHBvc2l0aW9uaW5nLlxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zZWxlY3QsXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggJl9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGg7XG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGg7XG4gICAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19zZWxlY3Qge1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX29wdGlvbiB7XG4gICAgICAkb3B0aW9uOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgc2hvdyB0aGUgaGlnaGxpZ2h0IG9uY2UgdGhlIHB1bGxkb3duIGhhcyByZWNlaXZlZCBtb3VzZSBvclxuICAgICAgLy8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24sIGluIHdoaWNoIGNhc2UgYCYtLWhpZ2hsaWdodGAgd2lsbCBiZSBzZXQsXG4gICAgICAvLyB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBwb2ludGVyRGlydHlgIGluIHZ1ZS1tdWx0aXNlbGVjdC5cbiAgICAgIC8vIFVudGlsIHRoZW4sIGNsZWFyIHRoZSBoaWdobGlnaHQgc3R5bGUsIGJ1dCBvbmx5IGlmIGl0IGlzbid0IGFsc29cbiAgICAgIC8vIGRpc2FibGVkIG9yIHNlbGVjdGVkLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgc3R5bGUuXG4gICAgICBAYXQtcm9vdCAjeyRzZWxmfTpub3QoI3skc2VsZn0tLWhpZ2hsaWdodClcbiAgICAgICAgICAjeyRvcHRpb259Om5vdCgjeyRvcHRpb259LS1kaXNhYmxlZCk6bm90KCN7JG9wdGlvbn0tLXNlbGVjdGVkKSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICYtLWhpZ2hsaWdodCB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAje2xhc3Qtc2VsZWN0b3IoJil9IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1zZWxlY3RlZCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgJiN7JG9wdGlvbn0tLWhpZ2hsaWdodCB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLWRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmX190YWctaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aDtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNsZWFyO1xuXG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFncyxcbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICY6bm90KCYtLWFib3ZlKSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogKC0kYm9yZGVyLXdpZHRoKSAwIDA7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFib3ZlICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAwIDAgKC0kYm9yZGVyLXdpZHRoKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWN0aXZlIHtcbiAgICAgICN7JHNlbGZ9X19wbGFjZWhvbGRlciB7XG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fc2luZ2xlLFxuICAgICAgI3skc2VsZn1fX2lucHV0IHtcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICAmI3skc2VsZn0tLWFib3ZlIHtcbiAgICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLS1sb2FkaW5nIHtcbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgdmFsdWUgIT09ICcnXG4gICAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQodmFsdWUsIDEwKVxuICAgICAgICAgICAgICA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIC8vIERvbid0IHNob3cgc3RlcHMgaWYgdGhlIGlucHV0IGlzIGFsc28gY2xlYXJhYmxlLCBzaW5jZSB0aGUgc3RlcCBidXR0b25zXG4gICAgICAvLyB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGNsZWFyIGJ1dHRvbi5cbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICA/ICdhbnknXG4gICAgICAgICAgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID1cbiAgICAgICAgICBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9XG4gICAgICAgICAgbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgO1t0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ251bWJlcicsICdpbnRlZ2VyJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4vLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG5pbnB1dFt0eXBlPSdudW1iZXInXTpub3QoW3N0ZXBdKSB7XG4gICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8tIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpsYWJlbD1cIm9iamVjdExhYmVsXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICAvLy0gTk9URTogYERpdG9FZGl0QnV0dG9uc2AgaGVyZSBvbmx5IGhhbmRsZSB0aGUgY3JlYXRlIGJ1dHRvbiBvdXRzaWRlIG9mIHRoZVxuICAvLy0gc2NoZW1hLCB0aGUgZWRpdCBidXR0b25zIGluc2lkZSBhcmUgaGFuZGxlZCBieSBgRGl0b1NjaGVtYUlubGluZWRgLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9iamVjdExhYmVsKCkge1xuICAgICAgLy8gT25seSBzaG93IGEgbGFiZWwgaWYgdGhlIG9iamVjdCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgID8gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMub2JqZWN0RGF0YSwgeyBhc09iamVjdDogdHJ1ZSB9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1vYmplY3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogbWluLWNvbnRlbnQ7XG5cbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICB9XG5cbiAgPiAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0U3BhY2luZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHJhbmdlID8gcmFuZ2VbMV0gLSByYW5nZVswXSA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJ1xufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXJhZGlvLWJ1dHRvbnMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNlY3Rpb24oOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLS1sYWJlbGxlZCc6ICEhc2NoZW1hLmxhYmVsIH1cIilcbiAgRGl0b1NjaGVtYUlubGluZWQuZGl0by1zZWN0aW9uX19zY2hlbWEoXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWN0aW9uIHtcbiAgJi0tbGFiZWxsZWQge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyAkZWFzZS1vdXQtcXVhcnQ7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICAgJjpoYXMoLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgfVxuXG4gICAgLy8gRm9yIGFuaW1hdGlvbiBwdXJwb3NlcywgbW92ZSB0aGUgcGFkZGluZyB0byB0aGUgY29udGFpbmVkIHBhbmVzLlxuICAgIC5kaXRvLXBhbmUge1xuICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRvcCBzcGFjaW5nIHdoZW4gdGhlIGZpcnN0IHJvdyBoYXMgbGFiZWxzLlxuICAgICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgLmRpdG8tc2VsZWN0X19pbm5lclxuICAgIHNlbGVjdChcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIikge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMik7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgc2VsZWN0IHtcbiAgICBAZXh0ZW5kICVpbnB1dDtcblxuICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4gIH1cblxuICAvLyBgJl9fX2lubmVyYCBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgZWRpdCBidXR0b25zIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlXG4gIC8vIHNlbGVjdDpcbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICBzZWxlY3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRgP1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zbGlkZXIge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXJhbmdlIHtcbiAgICBmbGV4OiBhdXRvO1xuICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpO1xuICB9XG5cbiAgLmRpdG8tbnVtYmVyIHtcbiAgICBib3JkZXI6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblN3aXRjaEJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmltOiBnZXRTY2hlbWFBY2Nlc3NvcigndHJpbScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICBpZiAoc2NoZW1hLnRyaW0gJiYgdmFsdWUgIT0gbnVsbCAmJiBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIC8vIFRleHQgZmllbGRzIGRvbid0IG5lY2Vzc2FyaWx5IGhhdmUgYSBgU3RyaW5nYCB2YWx1ZSB3aGVuIGBmb3JtYXQoKWBcbiAgICAgIC8vIHdpdGhvdXQgYHBhcnNlKClgIGlzIHVzZWQuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLXRleHQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgW1xuICAgICd0ZXh0JyxcbiAgICAnZW1haWwnLFxuICAgICd1cmwnLFxuICAgICdob3N0bmFtZScsXG4gICAgJ2RvbWFpbicsXG4gICAgJ3RlbCcsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnY3JlZGl0Y2FyZCdcbiAgXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1RleHRNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuICAgIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgICAgICB9W3RoaXMudHlwZV0gfHxcbiAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgaW5wdXRWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgICB9W3RoaXMudHlwZV1cbiAgICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGV4dGFyZWEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcmVzaXplOiBub25lO1xuICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArICN7MiAqICRpbnB1dC1wYWRkaW5nLXZlcn0pO1xuXG4gICYuZGl0by1yZXNpemFibGUge1xuICAgIHJlc2l6ZTogdmVydGljYWw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1saXN0XG4gIERpdG9TY29wZXMoXG4gICAgdi1pZj1cInNjb3Blc1wiXG4gICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICApXG4gIC5kaXRvLXRyZWUtcGFuZWxcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8tIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgUm91dGVyVmlld1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQge1xuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWyd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICAgIHByb3ZpZGUoKSB7XG4gICAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICAgIH0sXG5cbiAgICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgICAgfSxcblxuICAgICAgZWRpdFBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZFxuICAgICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgICAgfSxcblxuICAgICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWwsXG4gICAgICBuZXN0ZWQgPSB0cnVlLFxuICAgICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgICAgcHJvY2VzcyA9IG51bGxcbiAgICApIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgIGFwaSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgIGZsYXR0ZW4sXG4gICAgICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjYWxsIGBwcm9jZXNzU2NoZW1hKClgIGZvciB0aGUgbmVzdGVkIHRyZWUgbGlzdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgICAgICBhcGksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ubmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZFJvdXRlcyxcbiAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICB9LFxuXG4gICAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1saXN0IHtcbiAgQGV4dGVuZCAlZmllbGQ7XG5cbiAgLmRpdG8tdHJlZS1wYW5lbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICA+IC5kaXRvLXRyZWUtaXRlbSB7XG4gICAgICBmbGV4OiAxIDEgMjUlO1xuICAgIH1cblxuICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAwIDEgNzUlO1xuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXVwbG9hZFxuICAvLy0gSW4gb3JkZXIgdG8gaGFuZGxlIHVwbG9hZCBidXR0b25zIGluIG11bHRpcGxlIHBvc3NpYmxlIHBsYWNlcywgZGVwZW5kaW5nXG4gIC8vLSBvbiB3aGV0aGVyIHRoZXkgaGFuZGxlIHNpbmdsZSBvciBtdWx0aXBsZSB1cGxvYWRzLCByZW5kZXIgdGhlIHVwbG9hZFxuICAvLy0gY29tcG9uZW50IGludmlzaWJseSBhdCB0aGUgcm9vdCwgYW5kIGRlbGVnYXRlIHRoZSBjbGljayBldmVudHMgdG8gaXQgZnJvbVxuICAvLy0gdGhlIGJ1dHRvbnMgcmVuZGVyZWQgZnVydGhlciBiZWxvdy4gTHVja2lseSB0aGlzIHdvcmtzIHN1cnByaXNpbmdseSB3ZWxsLlxuICBWdWVVcGxvYWQuZGl0by11cGxvYWRfX2lucHV0KFxuICAgIHJlZj1cInVwbG9hZFwiXG4gICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgIDppbnB1dElkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cG9zdEFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgOmRyb3A9XCIkZWw/LmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXCJcbiAgICA6ZHJvcERpcmVjdG9yeT1cInRydWVcIlxuICAgIEBpbnB1dC1maWx0ZXI9XCJvbklucHV0RmlsdGVyXCJcbiAgICBAaW5wdXQtZmlsZT1cIm9uSW5wdXRGaWxlXCJcbiAgKVxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIGBEaXRvVGFibGVIZWFkYFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIEZpbGVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWlzVXBsb2FkQWN0aXZlXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5uYW1lXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlLWlmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYShcbiAgICAgICAgICAgICAgOmRvd25sb2FkPVwiZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgOmhyZWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc2l6ZSB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpIH19XG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3N0YXR1c1xuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCBpc1VwbG9hZEFjdGl2ZSB8fCAhaGFzRmlsZXNcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWhhc0ZpbGVzXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgdXBsb2FkVGl0bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdVcGxvYWQgRmlsZXMnIDogJ1VwbG9hZCBGaWxlJ1xuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIGRvd25sb2FkVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICB0aHVtYm5haWxVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB0aHVtYm5haWxzOiBnZXRTY2hlbWFBY2Nlc3NvcigndGh1bWJuYWlscycsIHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID8/ICEhdGhpcy5zY2hlbWEudGh1bWJuYWlsVXJsXG4gICAgICB9LFxuICAgICAgZ2V0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPT09IHRydWUgPyAnbWVkaXVtJyA6IHRodW1ibmFpbHMgfHwgbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaGFzRmlsZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc1VwbG9hZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaGFzVXBsb2FkcyAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNVcGxvYWRzICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArICtmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgaXNVcGxvYWRSZWFkeShyZWFkeSkge1xuICAgICAgaWYgKHJlYWR5KSB7XG4gICAgICAgIC8vIEF1dG8tdXBsb2FkLlxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGxvYWQuYWN0aXZlID0gdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9ybWF0RmlsZVNpemUsXG5cbiAgICBnZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgPyBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLmNvbnRleHRcbiAgICB9LFxuXG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBnZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGZpbGUudXJsXG4gICAgICAgID8gZmlsZS51cmxcbiAgICAgICAgOiAhZmlsZS51cGxvYWQgfHwgZmlsZS51cGxvYWQuc3VjY2Vzc1xuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZG93bmxvYWRVcmwnLCB7XG4gICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0VGh1bWJuYWlsVXJsKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCd0aHVtYm5haWxVcmwnLCB7XG4gICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KVxuICAgICAgICAgIH0pIHx8IChcbiAgICAgICAgICAgIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbGUgJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IG5ld0ZpbGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcbiAgICAgICAgICAgIH1bZXJyb3JdIHx8XG4gICAgICAgICAgICBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICApXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuZG93bmxvYWRVcmxzW2luZGV4XSlcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgICB0aGlzLmRvd25sb2FkKHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGlja1VwbG9hZChldmVudCkge1xuICAgICAgLy8gRGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50IHRvIHRoZSBoaWRkZW4gZmlsZSBpbnB1dC5cbiAgICAgIHRoaXMudXBsb2FkLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBldmVudC5jb25zdHJ1Y3RvcihldmVudC50eXBlLCBldmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcCgoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gKCF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkIHtcbiAgLmRpdG8tdGFibGUge1xuICAgIHRyLFxuICAgIC5kaXRvLWNlbGwtZWRpdC1idXR0b25zIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgJl9fc2l6ZSxcbiAgJl9fc3RhdHVzIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJiAmX19pbnB1dCB7XG4gICAgLy8gU2VlIGBvbkNsaWNrVXBsb2FkKClgIG1ldGhvZCBmb3IgZGV0YWlscy5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gICZfX2Zvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAuZGl0by1wcm9ncmVzcyB7XG4gICAgICBmbGV4OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIG9ic2VydmVSZXNpemUobm9kZSwgYmluZGluZy52YWx1ZSwgYmluZGluZy5hcmcpXG4gIH0sXG5cbiAgdW5tb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICB1bm9ic2VydmVSZXNpemUobm9kZSwgYmluZGluZy52YWx1ZSwgYmluZGluZy5hcmcpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVSZXNpemUobm9kZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICBPYnNlcnZlci5nZXRPYnNlcnZlcihvcHRpb25zKS5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm9ic2VydmVSZXNpemUobm9kZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICBPYnNlcnZlci5nZXRPYnNlcnZlcihvcHRpb25zKS51bm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGNvbnN0IGlzUmVzaXplU3VwcG9ydGVkID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJ1xuXG5jb25zdCBvYnNlcnZlcnMgPSB7fVxuXG5jbGFzcyBPYnNlcnZlciB7XG4gIGNvbnN0cnVjdG9yKGtleSwgb3B0aW9ucykge1xuICAgIHRoaXMua2V5ID0ga2V5XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBpc1Jlc2l6ZVN1cHBvcnRlZFxuICAgICAgPyBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLmhhbmRsZShlbnRyaWVzKSlcbiAgICAgIDogbnVsbFxuICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUgPSBuZXcgV2Vha01hcCgpXG4gICAgdGhpcy5ub2RlQ291bnQgPSAwXG4gIH1cblxuICBvYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBsZXQgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChub2RlKVxuICAgIGlmICghaGFuZGxlcnMpIHtcbiAgICAgIGhhbmRsZXJzID0gbmV3IFNldCgpXG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLnNldChub2RlLCBoYW5kbGVycylcbiAgICAgIHRoaXMub2JzZXJ2ZXI/Lm9ic2VydmUobm9kZSwgdGhpcy5vcHRpb25zKVxuICAgICAgdGhpcy5ub2RlQ291bnQrK1xuICAgIH1cbiAgICBoYW5kbGVycy5hZGQoaGFuZGxlcilcbiAgfVxuXG4gIHVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChub2RlKVxuICAgIGlmIChoYW5kbGVycz8uZGVsZXRlKGhhbmRsZXIpICYmIGhhbmRsZXJzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuZGVsZXRlKG5vZGUpXG4gICAgICB0aGlzLm9ic2VydmVyPy51bm9ic2VydmUobm9kZSlcbiAgICAgIGlmICgtLXRoaXMubm9kZUNvdW50ID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBvYnNlcnZlcnNbdGhpcy5rZXldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlKGVudHJpZXMpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQoZW50cnkudGFyZ2V0KVxuICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgIHRhcmdldDogZW50cnkudGFyZ2V0LFxuICAgICAgICAgIGNvbnRlbnRSZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICAvLyBVc2UgYGFzQXJyYXlgIHNpbmNlIEZpcmVmb3ggYmVmb3JlIHY5MiByZXR1cm5zIHRoZXNlIGFzIG9iamVjdHM6XG4gICAgICAgICAgYm9yZGVyQm94U2l6ZTogYXNBcnJheShlbnRyeS5ib3JkZXJCb3hTaXplKSxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogYXNBcnJheShlbnRyeS5jb250ZW50Qm94U2l6ZSksXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogYXNBcnJheShlbnRyeS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgICAgIGhhbmRsZXIoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0T2JzZXJ2ZXIoeyBib3ggPSAnY29udGVudC1ib3gnIH0gPSB7fSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGJveCB9XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICBvYnNlcnZlcnNba2V5XSB8fD0gbmV3IE9ic2VydmVyKGtleSwgb3B0aW9ucylcbiAgICByZXR1cm4gb2JzZXJ2ZXJzW2tleV1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdhcHBseScsICdhcHBsaWVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAncmVtb3ZlJywgJ3JlbW92ZWQnLFxuICAnY2xlYXInLCAnY2xlYXJlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnLFxuICAnbG9naW4nLCAnbG9nZ2VkIGluJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IHsgY3JlYXRlQXBwLCBoIGFzIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZVdlYkhpc3RvcnkgfSBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAnQGt5dmcvdnVlMy1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZyxcbiAgaXNBYnNvbHV0ZVVybCxcbiAgYXNzaWduRGVlcGx5LFxuICBoeXBoZW5hdGUsXG4gIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0cyxcbiAgZGVwcmVjYXRlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc2l6ZURpcmVjdGl2ZSBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICcuL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gYXNzaWduRGVlcGx5KHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gYXNzaWduRGVlcGx5KHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IGRlZmluaXRpb24gb2YgZGVmYXVsdHMgZm9yIGFkbWluIGNvbXBvbmVudCB0eXBlcywgbmVzdGVkIHBlciB0eXBlOlxuICAgIC8vIGFwaS5kZWZhdWx0cyA9IHtcbiAgICAvLyAgICdtdWx0aXNlbGVjdCc6IHtcbiAgICAvLyAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIC8vICAgfSxcbiAgICAvLyAgICdmYWtlLXR5cGUnOiBzY2hlbWEgPT4ge1xuICAgIC8vICAgICAvLyBSZXR1cm4gZGVmYXVsdHMsIG9yIGRpcmVjdGx5IG1vZGlmeSB0aGUgc2NoZW1hOlxuICAgIC8vICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgIC8vICAgICAgIHR5cGU6ICdyZWFsLXR5cGUnLFxuICAgIC8vICAgICAgIGZvcm1hdDogKHsgdmFsdWUgfSkgPT4gYEZvcm1hdHRlZCAke3ZhbHVlfWAsXG4gICAgLy8gICAgICAgcHJvY2VzczogKHsgdmFsdWUgfSkgPT4gYFByb2Nlc3NlZCAke3ZhbHVlfWBcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkuZGVmYXVsdHMgfHw9IHt9XG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgYXBpLnVzZXJzID0gdXNlcnNcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSAodGhpcy5hcHAgPSBjcmVhdGVBcHAoe1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEaXRvUm9vdCxcbiAgICAgICAgVnVlTm90aWZpY2F0aW9ucyxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgLi4udHlwZXNcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgICAgcmVmOiAncm9vdCcsXG4gICAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9KVxuICAgIH0pKVxuXG4gICAgLy8gUHJldmVudCBlbmRsZXNzIGxvb3BzIG9mIGVycm9yIG1lc3NhZ2VzIGR1cmluZyByZW5kZXIgZnVuY3Rpb25zIGJ5XG4gICAgLy8gc2V0dGluZyBhIGN1c3RvbSBlcnJvciBoYW5kbGVyLlxuICAgIGFwcC5jb25maWcuZXJyb3JIYW5kbGVyID0gY29uc29sZS5lcnJvclxuXG4gICAgYXBwLnVzZShWdWVOb3RpZmljYXRpb25zLCB7XG4gICAgICBuYW1lOiAnbm90aWZ5JyxcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJ1xuICAgIH0pXG5cbiAgICBhcHAuZGlyZWN0aXZlKCdyZXNpemUnLCBSZXNpemVEaXJlY3RpdmUpXG5cbiAgICBhcHAudXNlKFxuICAgICAgY3JlYXRlUm91dGVyKHtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIGNhdGNoLWFsbCByb3V0ZSwgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbCByb3V0ZXNcbiAgICAgICAgLy8gb25jZSB0aGUgc2NoZW1hcyBhcmUgbG9hZGVkLCB0byBwcmV2ZW50IHZ1ZS1yb3V0ZXIgZnJvbSBjb21wbGFpbmluZyxcbiAgICAgICAgLy8gc2VlOiBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICAgIHJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICAgICAgcGF0aDogJy86XyguKiknLFxuICAgICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KVxuICAgIClcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKFxuICAgICAgYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgfSlgXG4gICAgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICBgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczpcbiAgICAgIGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgICA/ICdpbmNsdWRlJ1xuICAgICAgICA6ICdzYW1lLW9yaWdpbidcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfT8ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuIl0sIm5hbWVzIjpbInBhcnNlVXNlckFnZW50IiwidXNlckFnZW50IiwiYWdlbnQiLCJ1YSIsIm9zIiwicGxhdGZvcm0iLCJtYXRjaCIsImJyb3dzZXIiLCJ2MSIsInYyIiwicnYiLCJ2ZXJzaW9uIiwiYXBwU3RhdGUiLCJyZWFjdGl2ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiaGFzT3duUHJvcGVydHkiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ0b1JhdyIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiaXRlbSIsIm9wdGlvbnMiLCJsb2NhdGlvbiIsInJlc291cmNlIiwiRW1pdHRlck1peGluIiwiZXZlbnQiLCJjYWxsYmFjayIsImlzQXJyYXkiLCJldiIsImlzUGxhaW5PYmplY3QiLCJsaXN0ZW5lcnMiLCJjYWxsYmFja3MiLCJvbiIsImFyZ3MiLCJlbnRyeSIsIl9hIiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJjcmVkaXRjYXJkIiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJzZXR0aW5ncyIsInVybCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdGlvbnMiLCJ2YWxpZGF0ZSIsIm1lc3NhZ2UiLCJhZGRMYWJlbCIsImVycm9ycyIsImZvY3VzIiwiZ2V0U2NoZW1hQWNjZXNzb3IiLCJrZXlPckRhdGFQYXRoIiwidHlwZSIsImRlZiIsImlzU3RyaW5nIiwibmFtZSIsImdldFN0b3JlQWNjZXNzb3IiLCJUeXBlTWl4aW4iLCJjb21wdXRlVmFsdWUiLCJmb3JtYXQiLCJwYXJzZSIsInNjaGVtYUNvbXBvbmVudCIsIm5vZGUiLCJldmVudHMiLCJjYW1lbGl6ZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImFkZCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbklucHV0Iiwib25DaGFuZ2UiLCJfYiIsImVsZW1lbnQiLCJhc0FycmF5IiwidWlkTWFwIiwidWlkIiwiZ2V0VWlkIiwiZ2V0SXRlbUlkIiwicmF3IiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwiZGVmYXVsdHMiLCJzdWJHcmFwaCIsInBhcnQiLCJzY2hlbWEiLCJyZWxhdGVkRGF0YVBhdGgiLCJuYW5vaWQiLCJmbGF0dGVuIiwiZ3JhcGgiLCJlbnRyaWVzIiwiJHNldHRpbmdzIiwic3ViS2V5Iiwic291cmNlU2NoZW1hIiwiY2xpcGJvYXJkIiwiaW50ZXJuYWwiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsInRvT2JqZWN0IiwidG9SZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyIsInNjaGVtYXMiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJpc1NjaGVtYSIsIml0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiZ2V0VGFiU2NoZW1hcyIsImZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50IiwiaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImlzRm9ybSIsImlzVmlldyIsImlzVGFiIiwiaXNQYW5lbCIsImlzTWVudSIsImdldFNjaGVtYUlkZW50aWZpZXIiLCJyZXNvbHZlU2NoZW1hIiwidW53cmFwTW9kdWxlIiwiaXNQcm9taXNlIiwiaXNNb2R1bGUiLCJrZXlzIiwicmVzb2x2ZVNjaGVtYXMiLCJ1bnJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVJdGVtIiwibWFwQ29uY3VycmVudGx5IiwicmVzb2x2ZVZpZXdzIiwidW5yZXNvbHZlZFZpZXdzIiwiZmxhdHRlblZpZXdzIiwidmlld3MiLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50IiwibWFya1JhdyIsIkRpdG9NaXhpbiIsInJlc29sdmVTY2hlbWFDb21wb25lbnRzIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJhcGkiLCJyb3V0ZXMiLCJsZXZlbCIsInByb21pc2VzIiwicHJvY2VzcyIsInJlbGF0aXZlTGV2ZWwiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwicHJvY2Vzc1NjaGVtYURlZmF1bHRzIiwicGFuZWwiLCJnZXRUeXBlT3B0aW9ucyIsInByb2Nlc3NWaWV3IiwiZnVsbFBhdGgiLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJjaGlsZHJlbiIsInByb2Nlc3NOZXN0ZWRTY2hlbWFzIiwiYXNzaWduRGVlcGx5IiwicHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIiwiZm9ybXMiLCJnZXRGb3JtU2NoZW1hcyIsImZvcm0iLCJwcm9jZXNzRm9ybXMiLCJjb21wb25lbnRzIiwicHJvY2Vzc0Zvcm0iLCJwcm9jZXNzVGFiIiwicHJvY2Vzc1BhbmVsIiwidGFicyIsInBhbmVscyIsInRhYiIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld0Zvcm1TY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsImdldFZpZXdTY2hlbWEiLCJoYXNWaWV3U2NoZW1hIiwiZ2V0Vmlld0VkaXRQYXRoIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJoYXNMYWJlbCIsImdlbmVyYXRlTGFiZWxzIiwibGFiZWwiLCJvbWl0U3BhY2luZyIsImdldFNjaGVtYVZhbHVlIiwiY29udmVydGVkIiwic2hvdWxkUmVuZGVyU2NoZW1hIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsInNldERlZmF1bHRWYWx1ZXMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsInJvb3REYXRhIiwiY29tcHV0ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImEiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsImdldENvbnRleHQiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJpdGVtRGF0YVBhdGgiLCJwcm9jZXNzZWRJdGVtIiwiZ2V0TmFtZWRTY2hlbWFzIiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJidXR0b25zIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbEVudHJ5IiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWFzIiwicGFuZWxFbnRyaWVzIiwiZ2V0QWxsUGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWEiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1VaWQiLCJoYXNSZXNvdXJjZSIsImdldFJlc291cmNlIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5Iiwic2VsZiIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInN0b3JlIiwib2xkS2V5IiwidmVyYiIsInF1ZXJ5IiwibWV0aG9kIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJib2R5IiwiZ2V0Q29tcHV0ZWRBY2Nlc3NvciIsImdldHRlciIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwicGFyYW1zIiwicmVzb2x2ZU1lcmdlZE9wdGlvbnMiLCJtaXhpbnMiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJtaXhpbiIsImRpdG9PcHRpb25LZXlzIiwiRGl0b0NvbXBvbmVudCIsImRlZmluaXRpb24iLCJkZXNjcmliZURhdGUiLCJkYXRlIiwiYWx0ZXJEYXRlIiwib3ZlcnJpZGVzIiwicGFyc2VEYXRlIiwic3RyaW5nIiwidGltZSIsInRpbWVEZWZhdWx0IiwiZGF5Iiwic2VwMSIsIm1vbnRoIiwic2VwMiIsInllYXIiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJnZXREYXRlUGFydHMiLCJnZXRNb250aEluZGV4IiwiaXNWYWxpZFRpbWVQYXJ0IiwiZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIiwicG9zaXRpb24iLCJwYXJ0cyIsImdldFBvc2l0aW9uIiwibGVuZ3RoIiwicG9zIiwib2Zmc2V0IiwiaXNVUyIsInN0YXJ0IiwiZW5kIiwic2hvcnRGb3JtYXQiLCJsb25nRm9ybWF0IiwiaSIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJ1cGRhdGUiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwiZW50ZXIiLCJzdGFydFllYXIiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsIm5vdyIsImlzRGF5Iiwic3RhdGUiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsInRhcmdldHMiLCJoYW5kbGVyIiwiY29tYmluZUV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJnZXRUYXJnZXQiLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsIl9jIiwiZWwiLCJib3VuZHMiLCJ0cmlnZ2VyTGVmdCIsInRyaWdnZXJUb3AiLCJ0cmlnZ2VyV2lkdGgiLCJ0cmlnZ2VySGVpZ2h0IiwicG9wdXBXaWR0aCIsInBvcHVwSGVpZ2h0IiwicGFydDEiLCJwYXJ0MiIsIndpbldpZHRoIiwid2luSGVpZ2h0IiwibGVmdCIsInRvcCIsInRyaWdnZXJCb3VuZHMiLCJpbnB1dCIsIl8iLCJzaXplIiwiZ2V0TGVuZ3RoIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJzZXRTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiSWNvbiIsImRlZmF1bHRGb3JtYXRzIiwiZ2V0RGF0ZVBhcnQiLCJjYWxlbmRhciIsInRvZ2dsZSIsInNlbGVjdGlvbiIsInNtb290aCIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJkaXN0YW5jZSIsImNvdW50IiwiaXNEaWdpdCIsImNoYXIiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInRyYW5zaXRpb24iLCJkaXNhYmxlZCIsInRleHQiLCJwYWdlIiwicGFnZVNpemUiLCJjdXJyZW50UGFnZVNpemUiLCJzaG93UHJldiIsInNob3dOZXh0IiwidG90YWwiLCJjdXJyZW50UGFnZSIsInNob3dMZW5ndGgiLCJudW1QYWdlcyIsInBhZ2VSYW5nZSIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJpc0xvYWRpbmciLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRpdG9EaWFsb2ciLCJwcmVmaXgiLCJ0aXBweURlbGVnYXRlIiwiaW5zdGFuY2UiLCJlcnIiLCJkcmFnQ291bnQiLCJ1cGxvYWRzIiwidG9nZ2xlRHJvcFRhcmdldENsYXNzIiwidXBsb2FkIiwic2V0RHJhZ2dpbmdGaWxlcyIsImhhc1VwbG9hZHMiLCJjYW5Ecm9wIiwidGl0bGUiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsInJlamVjdCIsImRpYWxvZ0lkIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJhZGRSb3V0ZXMiLCJyb3V0ZXIiLCJyZW1vdmVycyIsInJvdXRlIiwic3ViTWVudUNsYXNzIiwiZmlyc3RDaGlsZCIsIkRpdG9TcGlubmVyIiwiY29sb3IiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsIml0ZW1JZCIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwic2VsZWN0ZWRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJoYXNoIiwiZGF0YVBhdGhPck5hbWUiLCJzY3JvbGxDb250YWluZXIiLCJkaXNwYXRjaCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9jdHgiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJfaG9pc3RlZF8yIiwicG9zaXRpb25zIiwiaXNMYXN0SW5Sb3ciLCJmaW5kTmV4dFBvc2l0aW9uIiwicm93cyIsInJvdyIsInZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzIiwiaGFzTGFiZWxzSW5Sb3ciLCJjb250YWluZXIiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiYWNjdW11bGF0ZWRCYXNpcyIsImZsZXhCYXNpcyIsImNvbWJpbmVkQmFzaXMiLCJidXR0b24iLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwiaGFzRGF0YSIsInJlcG9ydCIsImpzb24iLCJkZWluZGVudCIsIiRzY2hlbWEiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJyZXNvbHZlUGF0aCIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwicGFyYW0iLCJtYWluU2NoZW1hQ29tcG9uZW50IiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJ0aXAiLCJ0aXBweSIsInNjb3BlIiwiUGFnaW5hdGlvbiIsIlNvcnRhYmxlTWl4aW4iLCJmb3JjZUZhbGxiYWNrIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJfbm9ybWFsaXplU3R5bGUiLCJfY2FjaGUiLCJfd2l0aE1vZGlmaWVycyIsIiRldmVudCIsIl9ub3JtYWxpemVDbGFzcyIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX3RvRGlzcGxheVN0cmluZyIsIl9ob2lzdGVkXzUiLCJfaG9pc3RlZF83IiwiX21lcmdlUHJvcHMiLCJfaG9pc3RlZF84IiwiX3JlbmRlckxpc3QiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJUWVBFUyIsImZpbGUiLCJyZWFkZXIiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJwcm9wIiwiX19vYmpSZXN0IiwidXNlU29ydGFibGUiLCJzb3J0YWJsZSIsImRvY3VtZW50IiwiZGVmYXVsdERvY3VtZW50IiwicmVzZXRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJlIiwibW92ZUFycmF5RWxlbWVudCIsIlNvcnRhYmxlIiwic3RvcCIsInRyeU9uTW91bnRlZCIsInRyeU9uU2NvcGVEaXNwb3NlIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsInRpbWVyIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRzIiwiZm9ybWF0UXVlcnkiLCJ2YWwiLCJyZXBsYWNlUm91dGUiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJnZXRQYXRoV2l0aFBhcmFtIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsIm9uVXBkYXRlIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiY29tbWFuZHMiLCJhZGRCdXR0b24iLCJpY29uIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiTGluayIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJUZXh0TWl4aW4iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidGh1bWJuYWlscyIsInJlYWR5IiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJibG9iIiwiZmlsZXMiLCJSZXNpemVEaXJlY3RpdmUiLCJiaW5kaW5nIiwib2JzZXJ2ZVJlc2l6ZSIsInVub2JzZXJ2ZVJlc2l6ZSIsIk9ic2VydmVyIiwiaXNSZXNpemVTdXBwb3J0ZWQiLCJvYnNlcnZlcnMiLCJib3giLCJEaXRvQWRtaW4iLCJkaXRvIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImRlcHJlY2F0ZSIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR08sU0FBU0EsR0FBZUMsSUFBWSxJQUFJO0FBQzdDLFFBQU1DLElBQVEsQ0FBRSxHQUVWQyxJQUFLRixFQUFVLFlBQWEsR0FDNUIsQ0FBQ0csQ0FBRSxJQUNQLGtFQUFrRTtBQUFBLElBQ2hFRDtBQUFBLEVBQ04sS0FBUyxDQUFFLEdBQ0hFLElBQ0o7QUFBQSxJQUNFLFFBQVU7QUFBQSxJQUNWLFFBQVU7QUFBQSxJQUNWLE1BQVE7QUFBQSxJQUNSLGtCQUFrQjtBQUFBLEVBQ25CLEVBQUNELENBQUUsS0FDSkE7QUFFRixTQUFJQyxNQUNGSCxFQUFNLFdBQVdHLEdBQ2pCSCxFQUFNRyxDQUFRLElBQUksS0FFcEJGLEVBQUc7QUFBQSxJQUNEO0FBQUEsSUFDQSxDQUFDRyxHQUFPQyxHQUFTQyxHQUFJQyxHQUFJQyxNQUFPO0FBRTlCLFVBQUksQ0FBQ1IsRUFBTSxRQUFRO0FBQ2pCLGNBQU1TLElBQVVELEtBQU1ELEtBQU1EO0FBQzVCLFNBQUksQ0FBQ04sRUFBTSxXQUFXSyxNQUFZLGNBR2hDTCxFQUFNLFVBQVVTLEdBQ2hCVCxFQUFNLGdCQUFnQixXQUFXUyxDQUFPLElBRTFDVCxFQUFNLFVBQVVLLEdBQ2hCTCxFQUFNSyxDQUFPLElBQUk7QUFBQTtBQUFBLElBRXBCO0FBQUEsRUFDRixHQUNHTCxFQUFNLFVBRVIsT0FBT0EsRUFBTSxRQUVSQTtBQUNUO0FDM0NBLE1BQUFVLEtBQWVDLEdBQVM7QUFBQSxFQUN0QixPQUFPO0FBQUEsRUFDUCxpQkFBaUIsQ0FBRTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNOLE9BQU9iLEdBQWUsVUFBVSxhQUFhLEVBQUU7QUFBQSxFQUMvQyxXQUFXLENBQUU7QUFBQTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUNqQixDQUFDO0FDSk0sU0FBU2MsRUFBZUMsR0FBVUMsR0FBTztBQUM5QyxTQUFPRCxJQUNILEdBQUdBLEtBQVlDLE1BQ2ZBO0FBQ047QUFFTyxTQUFTQyxHQUFvQkYsR0FBVTtBQUM1QyxRQUFNRyxJQUFPQyxHQUFjSixDQUFRO0FBQ25DLFNBQUFHLEtBQUEsUUFBQUEsRUFBTSxPQUNDQTtBQUNUO0FBTU8sU0FBU0UsR0FBa0JMLEdBQVVNLElBQVMsSUFBTztBQUMxRCxTQUFPQSxJQUFTSixHQUFvQkYsQ0FBUSxJQUFJSSxHQUFjSixDQUFRO0FBQ3hFO0FBRU8sU0FBU08sR0FBZ0JQLEdBQVVNLElBQVMsSUFBTztBQUN4RCxTQUFPRSxHQUFrQkgsR0FBa0JMLEdBQVVNLENBQU0sQ0FBQztBQUM5RDtBQUVPLFNBQVNHLEdBQXdCVCxHQUFVTSxJQUFTLElBQU87QUFDaEUsUUFBTUgsSUFBT0UsR0FBa0JMLEdBQVVNLENBQU07QUFDL0MsTUFBSUgsR0FBTTtBQUdSLFFBQUlGO0FBQ0o7QUFDRSxNQUFBQSxJQUFRRSxFQUFLLElBQUs7QUFBQSxXQUNYRixLQUFTLFFBQVFTLEdBQVUsQ0FBQ1QsQ0FBSztBQUUxQyxRQUFJQSxLQUFTO0FBQ1gsYUFBT0U7QUFBQTtBQUdYLFNBQU87QUFDVDtBQUVPLFNBQVNRLEdBQXNCWCxHQUFVTSxJQUFTLElBQU87QUFDOUQsU0FBT0UsR0FBa0JDLEdBQXdCVCxHQUFVTSxDQUFNLENBQUM7QUFDcEU7QUFFTyxTQUFTTSxHQUFRQyxHQUFVYixHQUFVTSxJQUFTLElBQU87QUFDMUQsUUFBTUgsSUFBT0UsR0FBa0JMLEdBQVVNLENBQU07QUFDL0MsU0FBT0gsSUFBT1csR0FBbUJELEdBQVVWLENBQUksSUFBSTtBQUNyRDtBQUVPLFNBQVNZLEdBQWNGLEdBQVViLEdBQVVNLElBQVMsSUFBTztBQUNoRSxRQUFNSCxJQUFPTSxHQUF3QlQsR0FBVU0sQ0FBTTtBQUNyRCxTQUFPSCxJQUFPVyxHQUFtQkQsR0FBVVYsQ0FBSSxJQUFJO0FBQ3JEO0FBRU8sU0FBU2EsR0FBcUJoQixHQUFVO0FBQzdDLFFBQU1HLElBQU9DLEdBQWNKLENBQVE7QUFDbkMsU0FBT0csRUFBS0EsRUFBSyxTQUFTLENBQUM7QUFDN0I7QUFFTyxTQUFTYyxHQUFvQmpCLEdBQVU7QUFDNUMsUUFBTUMsSUFBUWUsR0FBcUJoQixDQUFRO0FBQzNDLFNBQU9DLEtBQVMsUUFBUVMsR0FBVSxDQUFDVCxDQUFLLElBQUksT0FBT0E7QUFDckQ7QUFFTyxTQUFTaUIsR0FBcUJsQixHQUFVO0FBQzdDLFFBQU1DLElBQVFlLEdBQXFCaEIsQ0FBUSxHQUNyQ21CLElBQVFsQixLQUFTLE9BQU8sT0FBTyxDQUFDQTtBQUN0QyxTQUFPUyxHQUFVUyxDQUFLLElBQUlBLElBQVE7QUFDcEM7QUFFQSxJQUFJQyxLQUFjO0FBQ1gsU0FBU0MsR0FBZUMsR0FBTUMsSUFBUSxNQUFNO0FBRWpELEVBQUFELEVBQUtDLENBQUssSUFBSSxJQUFJLEVBQUVIO0FBQ3RCO0FBRU8sU0FBU0ksR0FBY0MsR0FBSTtBQUNoQyxTQUFPLEtBQUssS0FBS0EsQ0FBRTtBQUNyQjtBQUVPLFNBQVNDLEdBQVlKLEdBQU1DLElBQVEsTUFBTTtBQUU5QyxVQUFPRCxLQUFBLGdCQUFBQSxFQUFPQyxPQUFVLFFBQVEsT0FBTyxLQUFLRCxDQUFJLEVBQUUsV0FBVztBQUMvRDtBQ2hGQSxNQUFNLEVBQUUsZ0JBQUFLLEdBQWMsSUFBSyxPQUFPLFdBUzVCQyxLQUFXLG9CQUFJLFFBQVM7QUFFOUIsU0FBU0MsRUFBSUMsR0FBU0MsR0FBS0MsR0FBYztBQUN2QyxRQUFNQyxJQUFTTCxHQUFTLElBQUlNLEdBQU1KLENBQU8sQ0FBQyxHQUNwQ0ssSUFBUUYsRUFBT0YsQ0FBRztBQUV4QixTQUFPSSxNQUFVLFVBQWFSLEdBQWUsS0FBS00sR0FBUUYsQ0FBRyxJQUN6REksSUFDQUMsRUFBV0osQ0FBWSxJQUNyQkEsRUFBYyxJQUNkQTtBQUNSO0FBRUEsU0FBU0ssR0FBSVAsR0FBU0MsR0FBS0ksR0FBTztBQUNoQyxFQUFBUCxHQUFTLElBQUlNLEdBQU1KLENBQU8sQ0FBQyxFQUFFQyxDQUFHLElBQUlJO0FBQ3RDO0FBRWUsTUFBTUcsRUFBWTtBQUFBLEVBQy9CLFlBQVlDLEdBQVdULEdBQVM7QUFFOUIsSUFBQUEsSUFBVUEsSUFDTk0sRUFBV04sQ0FBTyxJQUNoQkEsRUFBUyxJQUNULEVBQUUsR0FBR0EsRUFBUyxJQUNoQixDQUFFLEdBR05BLEVBQVEsV0FBUkEsRUFBUSxTQUFXLEtBQ25CQSxFQUFRLFlBQVlTO0FBSXBCLFVBQU1OLElBQVMsT0FBTyxlQUFlSCxHQUFTUyxDQUFTO0FBRXZELElBQUFYLEdBQVMsSUFBSSxNQUFNSyxDQUFNO0FBQUEsRUFDMUI7QUFBQSxFQUVELE9BQU8sSUFBSU0sR0FBV1QsR0FBUztBQUM3QixXQUFPQSxhQUFtQlEsSUFDdEJSLElBQ0EsSUFBSVEsRUFBWUMsR0FBV1QsQ0FBTztBQUFBLEVBQ3ZDO0FBQUE7QUFBQTtBQUFBLEVBSUQsSUFBSSxTQUFTO0FBQ1gsV0FBT0QsRUFBSSxNQUFNLFVBQVUsRUFBSTtBQUFBLEVBQ2hDO0FBQUEsRUFFRCxJQUFJLFNBQVM7QUFDWCxXQUFPQSxFQUFJLE1BQU0sVUFBVSxJQUFJO0FBQUEsRUFDaEM7QUFBQSxFQUVELElBQUksUUFBUTtBQUNWLFdBQU9BLEVBQUksTUFBTSxTQUFTLE1BQVM7QUFBQSxFQUNwQztBQUFBLEVBRUQsSUFBSSxXQUFXO0FBQ2IsV0FBT0EsRUFBSSxNQUFNLFlBQVksRUFBRTtBQUFBLEVBQ2hDO0FBQUEsRUFFRCxJQUFJLE9BQU87QUFDVCxXQUFPQSxFQUFJLE1BQU0sUUFBUSxNQUFNWixHQUFvQixLQUFLLFFBQVEsQ0FBQztBQUFBLEVBQ2xFO0FBQUEsRUFFRCxJQUFJLFFBQVE7QUFDVixXQUFPWSxFQUFJLE1BQU0sU0FBUyxNQUFNWCxHQUFxQixLQUFLLFFBQVEsQ0FBQztBQUFBLEVBQ3BFO0FBQUEsRUFFRCxJQUFJLGVBQWU7QUFDakIsV0FBT1gsR0FBZ0IsS0FBSyxVQUFVLEtBQUssTUFBTTtBQUFBLEVBQ2xEO0FBQUEsRUFFRCxJQUFJLHFCQUFxQjtBQUN2QixXQUFPSSxHQUFzQixLQUFLLFVBQVUsS0FBSyxNQUFNO0FBQUEsRUFDeEQ7QUFBQSxFQUVELElBQUksWUFBWTtBQUNkLFdBQU9PLEdBQXFCLEtBQUssWUFBWTtBQUFBLEVBQzlDO0FBQUEsRUFFRCxJQUFJLGtCQUFrQjtBQUNwQixXQUFPQSxHQUFxQixLQUFLLGtCQUFrQjtBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLRCxJQUFJLE9BQU87QUFDVCxXQUFPVztBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBUSxNQUN2QmpCLEdBQVEsS0FBSyxVQUFVLEtBQUssVUFBVSxLQUFLLE1BQU07QUFBQSxJQUNsRDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFELElBQUksYUFBYTtBQUNmLFVBQU00QixJQUNKekIsR0FBYyxLQUFLLFVBQVUsS0FBSyxVQUFVLEtBQUssTUFBTSxLQUN2RDtBQUVGLFdBQU95QixNQUFTLEtBQUssT0FBT0EsSUFBTztBQUFBLEVBQ3BDO0FBQUEsRUFFRCxJQUFJLFdBQVc7QUFDYixXQUFPWCxFQUFJLE1BQU0sWUFBWSxJQUFJO0FBQUEsRUFDbEM7QUFBQSxFQUVELElBQUksZ0JBQWdCO0FBQ2xCLFdBQU9BLEVBQUksTUFBTSxpQkFBaUIsSUFBSTtBQUFBLEVBQ3ZDO0FBQUEsRUFFRCxJQUFJLGdCQUFnQjtBQUNsQixXQUFPQSxFQUFJLE1BQU0saUJBQWlCLElBQUk7QUFBQSxFQUN2QztBQUFBLEVBRUQsSUFBSSxPQUFPO0FBQ1QsV0FBT0EsRUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLEVBQzlCO0FBQUEsRUFFRCxJQUFJLE1BQU07QUFDUixXQUFPQSxFQUFJLE1BQU0sT0FBTyxJQUFJO0FBQUEsRUFDN0I7QUFBQSxFQUVELElBQUksUUFBUTtBQUNWLFdBQU9BLEVBQUksTUFBTSxTQUFTLElBQUk7QUFBQSxFQUMvQjtBQUFBLEVBRUQsSUFBSSxpQkFBaUI7QUFDbkIsV0FBT0EsRUFBSSxNQUFNLGtCQUFrQixJQUFJO0FBQUEsRUFDeEM7QUFBQSxFQUVELElBQUksWUFBWTtBQUNkLFdBQU9BLEVBQUksTUFBTSxhQUFhLElBQUk7QUFBQSxFQUNuQztBQUFBLEVBRUQsSUFBSSxZQUFZO0FBQ2QsV0FBT0EsRUFBSSxNQUFNLGFBQWEsSUFBSTtBQUFBLEVBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLRCxJQUFJLFlBQVk7QUFDZCxXQUFPQSxFQUFJLE1BQU0sYUFBYSxJQUFJO0FBQUEsRUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXRCxJQUFJLGtCQUFrQjtBQUNwQixXQUFPQSxFQUFJLE1BQU0sbUJBQW1CLElBQUk7QUFBQSxFQUN6QztBQUFBLEVBRUQsSUFBSSxnQkFBZ0I7QUFDbEIsV0FBT0EsRUFBSSxNQUFNLGlCQUFpQixJQUFJO0FBQUEsRUFDdkM7QUFBQSxFQUVELElBQUksZ0JBQWdCO0FBQ2xCLFdBQU9BLEVBQUksTUFBTSxpQkFBaUIsSUFBSTtBQUFBLEVBQ3ZDO0FBQUEsRUFFRCxJQUFJLGtCQUFrQjtBQUNwQixXQUFPQSxFQUFJLE1BQU0sbUJBQW1CLElBQUk7QUFBQSxFQUN6QztBQUFBLEVBRUQsSUFBSSxpQkFBaUI7QUFDbkIsV0FBT0EsRUFBSSxNQUFNLGtCQUFrQixJQUFJO0FBQUEsRUFDeEM7QUFBQSxFQUVELElBQUksb0JBQW9CO0FBQ3RCLFdBQU9BLEVBQUksTUFBTSxxQkFBcUIsSUFBSTtBQUFBLEVBQzNDO0FBQUEsRUFFRCxJQUFJLGtCQUFrQjtBQUNwQixXQUFPQSxFQUFJLE1BQU0sbUJBQW1CLElBQUk7QUFBQSxFQUN6QztBQUFBO0FBQUE7QUFBQSxFQUlELElBQUksU0FBUztBQUNYLFdBQU9BLEVBQUksTUFBTSxVQUFVLE1BQVM7QUFBQSxFQUNyQztBQUFBLEVBRUQsSUFBSSxVQUFVO0FBQ1osV0FBT0EsRUFBSSxNQUFNLFdBQVcsTUFBUztBQUFBLEVBQ3RDO0FBQUEsRUFFRCxJQUFJLE9BQU87QUFDVCxXQUFPQSxFQUFJLE1BQU0sUUFBUSxNQUFTO0FBQUEsRUFDbkM7QUFBQTtBQUFBO0FBQUEsRUFJRCxJQUFJLFFBQVE7QUFDVixXQUFPQSxFQUFJLE1BQU0sU0FBUyxNQUFTO0FBQUEsRUFDcEM7QUFBQTtBQUFBO0FBQUEsRUFJRCxJQUFJLFFBQVE7QUFDVixXQUFPQSxFQUFJLE1BQU0sU0FBUyxNQUFTO0FBQUEsRUFDcEM7QUFBQSxFQUVELElBQUksY0FBYztBQUNoQixXQUFPQSxFQUFJLE1BQU0sZUFBZSxFQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBSUQsSUFBSSxVQUFVO0FBQ1osV0FBTyxDQUFBWSxNQUFXLEtBQUssVUFBVSxRQUFRQSxDQUFPO0FBQUEsRUFDakQ7QUFBQSxFQUVELElBQUksU0FBUztBQUNYLFdBQU8sQ0FBQ04sR0FBT00sTUFBWSxLQUFLLFVBQVUsT0FBT04sR0FBT00sQ0FBTztBQUFBLEVBQ2hFO0FBQUEsRUFFRCxJQUFJLFdBQVc7QUFDYixXQUFPLENBQUFDLE1BQVksS0FBSyxVQUFVLFNBQVNBLENBQVE7QUFBQSxFQUNwRDtBQUFBLEVBRUQsSUFBSSxXQUFXO0FBQ2IsV0FBTyxDQUFBRCxNQUFXLEtBQUssVUFBVSxTQUFTQSxDQUFPO0FBQUEsRUFDbEQ7QUFBQSxFQUVELElBQUksaUJBQWlCO0FBQ25CLFdBQU8sQ0FBQUUsTUFBWSxLQUFLLFVBQVUsZUFBZUEsQ0FBUTtBQUFBLEVBQzFEO0FBQUEsRUFFRCxJQUFJLFNBQVM7QUFDWCxXQUFPLENBQUFGLE1BQVc7QUFDaEIsV0FBSyxVQUFVLE9BQU9BLENBQU8sR0FDN0JKLEdBQUksTUFBTSxlQUFlLEVBQUk7QUFBQSxJQUM5QjtBQUFBLEVBQ0Y7QUFDSDtBQ3ZRQSxNQUFlTyxLQUFBO0FBQUEsRUFDYixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsV0FBVztBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT1AsR0FBR0MsR0FBT0MsR0FBVTtBQUNsQixVQUFJQyxFQUFRRixDQUFLO0FBQ2YsbUJBQVdHLEtBQU1IO0FBQ2YsZUFBSyxHQUFHRyxHQUFJRixDQUFRO0FBQUEsZUFFYkcsR0FBY0osQ0FBSztBQUM1QixtQkFBV2QsS0FBT2M7QUFDaEIsZUFBSyxHQUFHZCxHQUFLYyxFQUFNZCxDQUFHLENBQUM7QUFBQSxXQUVwQjtBQUNMLGNBQU1tQixJQUFhLEtBQUssY0FBTCxLQUFLLFlBQWMsdUJBQU8sT0FBTyxJQUFJLElBQ2xELEVBQUUsV0FBQUMsRUFBUyxJQUFNRCxFQUFBTCxPQUFBSyxFQUFBTCxLQUFxQjtBQUFBLFVBQzFDLFdBQVcsQ0FBRTtBQUFBLFVBQ2IsT0FBTyxDQUFFO0FBQUEsUUFDbkI7QUFDUSxRQUFBTSxFQUFVLEtBQUtMLENBQVE7QUFBQTtBQUV6QixhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsS0FBS0QsR0FBT0MsR0FBVTtBQUNwQixZQUFNTSxJQUFLLElBQUlDLE9BQ2IsS0FBSyxJQUFJUixHQUFPTyxDQUFFLEdBQ1hOLEVBQVMsTUFBTSxNQUFNTyxDQUFJO0FBRWxDLGFBQUFELEVBQUcsV0FBV04sR0FDUCxLQUFLLEdBQUdELEdBQU9PLENBQUU7QUFBQSxJQUN6QjtBQUFBLElBRUQsSUFBSVAsR0FBT0MsR0FBVTs7QUFDbkIsVUFBSSxDQUFDLFVBQVU7QUFFYixlQUFPLEtBQUs7QUFBQSxlQUNIQyxFQUFRRixDQUFLO0FBQ3RCLG1CQUFXRyxLQUFNSDtBQUNmLGVBQUssSUFBSUcsR0FBSUYsQ0FBUTtBQUFBLGVBRWRHLEdBQWNKLENBQUs7QUFDNUIsbUJBQVdkLEtBQU9jO0FBQ2hCLGVBQUssSUFBSWQsR0FBS2MsRUFBTWQsQ0FBRyxDQUFDO0FBQUEsV0FFckI7QUFFTCxjQUFNdUIsS0FBUUMsSUFBQSxLQUFLLGNBQUwsZ0JBQUFBLEVBQWlCVjtBQUMvQixZQUFJUztBQUNGLGNBQUksQ0FBQ1I7QUFFSCxtQkFBTyxLQUFLLFVBQVVELENBQUs7QUFBQSxlQUN0QjtBQUVMLGtCQUFNLEVBQUUsV0FBQU0sRUFBUyxJQUFLRyxHQUNoQm5DLElBQVFnQyxFQUFVO0FBQUE7QUFBQSxjQUV0QixDQUFBSyxNQUFNQSxNQUFPVixLQUFZVSxFQUFHLGFBQWFWO0FBQUEsWUFDMUM7QUFDRCxZQUFJM0IsTUFBVSxNQUNaZ0MsRUFBVSxPQUFPaEMsR0FBTyxDQUFDO0FBQUE7QUFBQTtBQUtqQyxhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsS0FBSzBCLE1BQVVRLEdBQU07O0FBRW5CLFlBQU1DLEtBQVFDLElBQUEsS0FBSyxjQUFMLGdCQUFBQSxFQUFpQlY7QUFDL0IsVUFBSVMsR0FBTztBQUNULGNBQU0sRUFBRSxPQUFBRyxHQUFPLFdBQUFOLEVBQVMsSUFBS0c7QUFDN0IsZUFBTyxJQUFJLFFBQVEsQ0FBQUksTUFBVztBQUM1QixnQkFBTUMsSUFBTyxZQUFZO0FBR3ZCLGtCQUFNTCxJQUFRRyxFQUFNLE1BQU87QUFDM0IsZ0JBQUlILEdBQU87QUFDVCxrQkFBSU07QUFDSix5QkFBV2QsS0FBWUs7QUFDckIsb0JBQUk7QUFDRix3QkFBTVUsSUFBTSxNQUFNZixFQUFTLE1BQU0sTUFBTVEsRUFBTSxJQUFJO0FBQ2pELGtCQUFJTyxNQUFRLFdBQ1ZELElBQVNDO0FBQUEsZ0JBRVosU0FBUUMsR0FBUDtBQUNBLDBCQUFRO0FBQUEsb0JBQ04sbUNBQW1DakI7QUFBQSxvQkFDbkNpQjtBQUFBLGtCQUNEO0FBQUEsZ0JBQ0Y7QUFJSCxjQUFBUixFQUFNLFFBQVFNLENBQU0sR0FDcEJELEVBQU07QUFBQTtBQUFBLFVBRVQ7QUFDRCxVQUFBRixFQUFNLEtBQUssRUFBRSxNQUFBSixHQUFNLFNBQUFLLEVBQU8sQ0FBRSxHQUd4QkQsRUFBTSxXQUFXLEtBQ25CRSxFQUFNO0FBQUEsUUFFbEIsQ0FBUztBQUFBO0FBQUEsSUFFSjtBQUFBO0FBQUEsSUFHRCxhQUFhZCxHQUFPOztBQUNsQixVQUFJRSxFQUFRRixDQUFLLEdBQUc7QUFDbEIsbUJBQVdHLEtBQU1IO0FBQ2YsY0FBSSxDQUFDLEtBQUssYUFBYUcsQ0FBRTtBQUN2QixtQkFBTztBQUdYLGVBQU9ILEVBQU0sU0FBUztBQUFBO0FBRXRCLGVBQU8sQ0FBQyxHQUFDVSxJQUFBLEtBQUssY0FBTCxRQUFBQSxFQUFpQlY7QUFBQSxJQUU3QjtBQUFBLElBRUQsU0FBU0EsR0FBT2tCLEdBQVE7QUFDdEIsVUFBSUE7QUFDRixZQUFJaEIsRUFBUUYsQ0FBSztBQUNmLHFCQUFXRyxLQUFNSDtBQUNmLGlCQUFLLFNBQVNHLEdBQUllLENBQU07QUFBQTtBQUcxQixlQUFLLEdBQUdsQixHQUFPLElBQUlRLE1BQVNVLEVBQU8sS0FBS2xCLEdBQU8sR0FBR1EsQ0FBSSxDQUFDO0FBRzNELGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNILEdDbkphVyxLQUFhO0FBQUEsRUFDeEIsVUFBVSxDQUFBN0IsTUFBUzhCLEdBQWE5QixDQUFLO0FBQUEsRUFDckMsU0FBUztBQUNYLEdDTGErQixLQUFXO0FBQUEsRUFDdEIsVUFBVSxDQUFDL0IsR0FBTytCLE1BQWE7QUFDN0IsVUFBTTNFLElBQVEyRSxNQUFhLE1BQU0sTUFBTSxNQUFNQTtBQUM3QyxXQUFPLElBQUksT0FBTyxvQkFBb0IzRSxNQUFVLEVBQUUsS0FBSzRDLENBQUs7QUFBQSxFQUM3RDtBQUFBLEVBRUQsU0FBUyxDQUFDQSxHQUFPK0IsTUFDZixtQ0FDRSxDQUFDQSxLQUFZQSxNQUFhLE1BQU0sS0FBS0E7QUFFM0MsR0NSYUMsS0FBUTtBQUFBLEVBQ25CLFVBQVUsQ0FBQWhDLE1BQVNpQyxHQUFRakMsQ0FBSztBQUFBLEVBQ2hDLFNBQVM7QUFDWCxHQ0hha0MsS0FBVztBQUFBLEVBQ3RCLFVBQVUsQ0FBQWxDLE1BQVNtQyxHQUFXbkMsQ0FBSztBQUFBLEVBQ25DLFNBQVM7QUFDWCxHQ0hhb0MsS0FBUztBQUFBLEVBQ3BCLFVBQVUsQ0FBQXBDLE1BQVNxQyxHQUFTckMsQ0FBSztBQUFBLEVBQ2pDLFNBQVM7QUFDWCxHQ0hhc0MsS0FBVTtBQUFBLEVBQ3JCLFVBQVUsQ0FBQXRDLE1BQVN6QixHQUFVeUIsQ0FBSztBQUFBLEVBQ2xDLFNBQVM7QUFDWCxHQ0xhdUMsS0FBTTtBQUFBLEVBQ2pCLFVBQVUsQ0FBQ3ZDLEdBQU91QyxNQUFRdkMsS0FBU3VDO0FBQUEsRUFDbkMsUUFBUXZDLEdBQU91QyxHQUFLO0FBQ2xCLFdBQU8sV0FBV0E7QUFBQSxFQUNuQjtBQUNILEdDTGFDLEtBQU07QUFBQSxFQUNqQixVQUFVLENBQUN4QyxHQUFPd0MsTUFBUXhDLEtBQVN3QztBQUFBLEVBQ25DLFFBQVF4QyxHQUFPd0MsR0FBSztBQUNsQixXQUFPLFdBQVdBO0FBQUEsRUFDbkI7QUFDSCxHQ0xhQyxLQUFXO0FBQUE7QUFBQTtBQUFBLEVBR3RCLFVBQVUsTUFBTTtBQUNsQixHQ0phQyxLQUFRO0FBQUEsRUFDbkIsVUFBVSxDQUFDMUMsR0FBTyxDQUFDd0MsR0FBS0QsQ0FBRyxNQUFNdkMsS0FBU3dDLEtBQU94QyxLQUFTdUM7QUFBQSxFQUMxRCxRQUFRdkMsR0FBTyxDQUFDd0MsR0FBS0QsQ0FBRyxHQUFHO0FBQ3pCLFdBQU8sbUJBQW1CQyxTQUFXRDtBQUFBLEVBQ3RDO0FBQ0gsR0NMYUksS0FBVztBQUFBLEVBQ3RCLFVBQVUsQ0FBQzNDLEdBQU80QyxHQUFVLEVBQUUsVUFBQUgsRUFBVSxNQUNyQ3pDLEtBQVMsUUFBUUEsTUFBVTtBQUFBO0FBQUEsRUFHM0J5QyxLQUFZekMsTUFBVTtBQUFBLEVBRXpCLFNBQVM7QUFBQSxFQUNULFNBQVM7QUFDWCxHQ1BhNkMsS0FBTTtBQUFBLEVBQ2pCLFVBQVUsQ0FBQTdDLE1BQVM4QyxHQUFNOUMsQ0FBSztBQUFBLEVBQzlCLFNBQVM7QUFDWDs7Ozs7Ozs7Ozs7Ozs7OENDRGUrQyxLQUFBO0FBQUEsRUFDYixPQUFPLENBQUMsUUFBUTtBQUFBLEVBRWhCLE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsTUFDVCxhQUFhO0FBQUEsTUFDYixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLFlBQVk7QUFDVixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGtCQUFrQjtBQUNoQixXQUFLLFlBQVksSUFDakIsS0FBSyxVQUFVLElBQ2YsS0FBSyxjQUFjLElBQ25CLEtBQUssVUFBVSxJQUNmLEtBQUssWUFBYTtBQUFBLElBQ25CO0FBQUEsSUFFRCxTQUFTQyxJQUFTLElBQU07QUFDdEIsVUFBSUMsSUFBVTtBQUNkLE1BQUlELEtBQ0YsS0FBSyxZQUFhO0FBRXBCLFlBQU0sRUFBRSxPQUFBaEQsRUFBSyxJQUFLO0FBRWxCLGlCQUFXLENBQUNrRCxHQUFNQyxDQUFPLEtBQUssT0FBTyxRQUFRLEtBQUssV0FBVyxHQUFHO0FBRTlELGNBQU1DLElBQVlDLEdBQVlILENBQUk7QUFDbEMsWUFBSUUsTUFBY0EsRUFBVSxXQUFXcEQsS0FBUyxPQUFPO0FBQ3JELGdCQUFNLEVBQUUsVUFBQXNELEdBQVUsU0FBQUMsRUFBTyxJQUFLSDtBQUM5QixjQUFJLENBQUNFLEVBQVN0RCxHQUFPbUQsR0FBUyxLQUFLLFdBQVcsTUFDNUNGLElBQVUsSUFDTkQsSUFBUTtBQUNWLGtCQUFNckIsSUFBUTFCLEVBQVdzRCxDQUFPLElBQzVCQSxFQUFRdkQsR0FBT21ELEdBQVMsSUFBSSxJQUM1Qkk7QUFDSixpQkFBSyxTQUFTNUIsR0FBTyxFQUFJO0FBQUE7QUFBQTtBQUFBO0FBS2pDLGFBQUlxQixNQUNGLEtBQUssY0FBYyxJQUNuQixLQUFLLFVBQVVDLElBRVZBO0FBQUEsSUFDUjtBQUFBLElBRUQsU0FBUztBQUNQLGFBQU8sS0FBSyxTQUFTLEVBQUs7QUFBQSxJQUMzQjtBQUFBLElBRUQsY0FBYztBQUNaLFdBQUssWUFBWSxJQUVqQixLQUFLLFlBQWE7QUFBQSxJQUNuQjtBQUFBLElBRUQsWUFBWTtBQUNWLFdBQUssVUFBVSxJQUNmLEtBQUssY0FBYyxJQUNuQixLQUFLLFVBQVUsSUFFZixLQUFLLFlBQWE7QUFBQSxJQUNuQjtBQUFBLElBRUQsU0FBU3RCLEdBQU82QixJQUFXLElBQU87QUFDaEMsV0FBSyxXQUFMLEtBQUssU0FBVyxDQUFFLElBQ2RBLE1BRUY3QixJQUFRLE9BRE0sS0FBSyxTQUFTLEtBQUssZUFBZSxLQUFLLGNBQ3ZCQSxPQUVoQyxLQUFLLE9BQU8sS0FBS0EsQ0FBSyxHQUN0QixLQUFLLE1BQU0sVUFBVSxLQUFLLE1BQU07QUFBQSxJQUNqQztBQUFBLElBRUQscUJBQXFCOEIsR0FBUUMsR0FBTztBQUVsQyxXQUFLLFNBQVMsQ0FBRTtBQUNoQixpQkFBVyxFQUFFLFNBQUFILEVBQVMsS0FBSUU7QUFDeEIsYUFBSyxTQUFTRixHQUFTLEVBQUk7QUFFN0IsYUFBSUcsS0FDRixLQUFLLGVBQWdCLEdBRWhCO0FBQUEsSUFDUjtBQUFBLElBRUQsWUFBWTtBQUNWLGFBQU8sS0FBSyxTQUFTLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ3pDO0FBQUEsSUFFRCxjQUFjO0FBQ1osV0FBSyxTQUFTLE1BQ2QsS0FBSyxNQUFNLFVBQVUsS0FBSyxNQUFNO0FBQUEsSUFDakM7QUFBQSxFQUNGO0FBQ0g7QUN4R08sU0FBU0MsRUFDZEMsR0FDQSxFQUFFLE1BQUFDLEdBQU0sU0FBU0MsR0FBSyxLQUFBcEUsR0FBSyxLQUFBUSxHQUFLLFVBQUFTLElBQVcsR0FBSSxJQUFLLENBQUUsR0FDdEQ7QUFHQSxFQUFJb0QsRUFBU0gsQ0FBYSxLQUFLQSxFQUFjLFNBQVMsR0FBRyxNQUN2REEsSUFBZ0IzRixHQUFjMkYsQ0FBYTtBQUc3QyxRQUFNSSxJQUFPM0YsR0FBa0J1RixDQUFhO0FBQzVDLFNBQU87QUFBQSxJQUNMLE1BQU07QUFHSixZQUFNNUQsSUFDSixDQUFDTixLQUFPQSxFQUFJLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUlqQixLQUFLLGFBQWFzRSxLQUFRLEtBQUssWUFDN0IsS0FBSyxVQUFVQSxDQUFJLElBQ25CLEtBQUssZUFBZUosR0FBZTtBQUFBLFVBQ2pDLE1BQUFDO0FBQUEsVUFDQSxTQUFTQztBQUFBLFVBQ1QsVUFBQW5EO0FBQUEsUUFDaEIsQ0FBZTtBQUFBLFVBQ0g7QUFDTixhQUFPakIsSUFBTUEsRUFBSSxLQUFLLE1BQU1NLENBQUssSUFBSUE7QUFBQSxJQUN0QztBQUFBLElBRUQsSUFBSUEsR0FBTztBQUNULE1BQUlFLElBQ0ZBLEVBQUksS0FBSyxNQUFNRixDQUFLLEtBRXBCLEtBQUssY0FBTCxLQUFLLFlBQWMsQ0FBRSxJQUNyQixLQUFLLFVBQVVnRSxDQUFJLElBQUloRTtBQUFBLElBRTFCO0FBQUEsRUFDRjtBQUNIO0FBRU8sU0FBU2lFLEdBQWlCRCxHQUFNLEVBQUUsU0FBU0YsR0FBSyxLQUFBcEUsR0FBSyxLQUFBUSxFQUFLLElBQUcsSUFBSTtBQUN0RSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQ0osVUFBSUYsSUFBUSxLQUFLLFNBQVNnRSxDQUFJO0FBQzlCLGFBQUloRSxNQUFVLFVBQWE4RCxNQUFRLFdBRWpDOUQsSUFBUUMsRUFBVzZELENBQUcsSUFBSUEsRUFBSSxLQUFLLElBQUksSUFBSUEsR0FFM0MsS0FBS0UsQ0FBSSxJQUFJaEUsR0FFYixLQUFLLFNBQVNnRSxDQUFJLElBSWJ0RSxJQUFNQSxFQUFJLEtBQUssTUFBTU0sQ0FBSyxJQUFJQTtBQUFBLElBQ3RDO0FBQUEsSUFFRCxJQUFJQSxHQUFPO0FBR1QsT0FBSSxDQUFDRSxNQUFRRixJQUFRRSxFQUFJLEtBQUssTUFBTUYsQ0FBSyxPQUFPLFdBQzlDLEtBQUssU0FBU2dFLEdBQU1oRSxDQUFLO0FBQUEsSUFFNUI7QUFBQSxFQUNGO0FBQ0g7QUNsRUEsTUFBZWtFLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ25CLEVBQWU7QUFBQSxFQUV4QixPQUFPO0FBQUEsSUFDTCxRQUFRLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBO0FBQUE7QUFBQSxJQUd4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQzFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsVUFBVSxHQUFNO0FBQUEsSUFDL0MsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3ZDLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxNQUFNLEdBQUcsU0FBUyxLQUFNO0FBQUEsSUFDaEQsT0FBTyxFQUFFLE1BQU0sUUFBUSxTQUFTLEtBQU07QUFBQSxJQUN0QyxRQUFRLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQ3pDLFFBQVEsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFNO0FBQUEsSUFDeEMsVUFBVSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUMzQyxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsRUFDbEQ7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxhQUFhO0FBQUEsTUFDYixTQUFTO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLE9BQU87QUFDTCxhQUFPLEtBQUssT0FBTztBQUFBLElBQ3BCO0FBQUEsSUFFRCxPQUFPO0FBQ0wsYUFBTyxLQUFLLE9BQU87QUFBQSxJQUNwQjtBQUFBLElBRUQsVUFBVTtBQUNSLGFBQU8sSUFBSTVDLEVBQVksTUFBTSxFQUFFLFFBQVEsS0FBSyxRQUFRO0FBQUEsSUFDckQ7QUFBQSxJQUVELE9BQU87QUFBQSxNQUNMLE1BQU07QUFDSixjQUFNSCxJQUFRbUU7QUFBQSxVQUNaLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEVBQUUsV0FBVyxLQUFNO0FBQUEsUUFDcEIsR0FDSyxFQUFFLFFBQUFDLE1BQVcsS0FBSztBQUN4QixlQUFPQSxJQUNIQSxFQUFPLElBQUlqRSxFQUFZLE1BQU0sRUFBRSxPQUFBSCxFQUFPLENBQUEsQ0FBQyxJQUN2Q0E7QUFBQSxNQUNMO0FBQUEsTUFFRCxJQUFJQSxHQUFPO0FBQ1QsY0FBTSxFQUFFLE9BQUFxRSxNQUFVLEtBQUs7QUFDdkIsUUFBSUEsTUFDRnJFLElBQVFxRSxFQUFNLElBQUlsRSxFQUFZLE1BQU0sRUFBRSxPQUFBSCxFQUFLLENBQUUsQ0FBQyxJQUVoRCxLQUFLLGNBQWNBLEdBRW5CLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSUE7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxJQUVELGFBQWE7QUFDWCxZQUFNYixJQUFPUCxHQUFjLEtBQUssVUFBVSxLQUFLLFVBQVUsS0FBSyxNQUFNO0FBQ3BFLGFBQU9PLE1BQVMsS0FBSyxPQUFPQSxJQUFPO0FBQUEsSUFDcEM7QUFBQSxJQUVELGdCQUFnQjtBQUlkLFlBQU0sRUFBRSxpQkFBQW1GLEVBQWUsSUFBSztBQUM1QixhQUFPN0Y7QUFBQSxRQUNMNkYsRUFBZ0I7QUFBQTtBQUFBLFFBRWhCLEtBQUssU0FBUyxNQUFNQSxFQUFnQixTQUFTLE1BQU07QUFBQSxRQUNuRCxLQUFLO0FBQUEsTUFDTjtBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUEsSUFJRCxPQUFPO0FBQ0wsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBLElBRUQsYUFBYTtBQUNYLGFBQU8sS0FBSztBQUFBLElBQ2I7QUFBQSxJQUVELFdBQVc7QUFDVCxhQUFPLEtBQUs7QUFBQSxJQUNiO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxhQUFPLEtBQUs7QUFBQSxJQUNiO0FBQUEsSUFFRCxZQUFZO0FBQ1YsWUFBTUMsSUFBTyxLQUFLLFlBQVksS0FBSyxJQUFJLHlCQUF5QjtBQUNoRSxhQUFPQSxLQUFBLFFBQUFBLEVBQU0sUUFBUSxpQkFBaUJBLElBQU87QUFBQSxJQUM5QztBQUFBLElBRUQsU0FBU1osRUFBa0IsV0FBVztBQUFBLE1BQ3BDLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFDUixlQUFPLEtBQUssU0FBUztBQUFBLE1BQ3RCO0FBQUEsSUFDUCxDQUFLO0FBQUE7QUFBQSxJQUdELFNBQVNBLEVBQWtCLFdBQVc7QUFBQSxNQUNwQyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDZixDQUFLO0FBQUEsSUFFRCxVQUFVQSxFQUFrQixZQUFZO0FBQUEsTUFDdEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ2YsQ0FBSztBQUFBO0FBQUEsSUFHRCxVQUFVQSxFQUFrQixZQUFZO0FBQUEsTUFDdEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ2YsQ0FBSztBQUFBLElBRUQsV0FBV0EsRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNmLENBQUs7QUFBQTtBQUFBLElBR0QsV0FBV0EsRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNmLENBQUs7QUFBQSxJQUVELGFBQWFBLEVBQWtCLGVBQWU7QUFBQSxNQUM1QyxNQUFNO0FBQUEsSUFDWixDQUFLO0FBQUEsSUFFRCxjQUFjQSxFQUFrQixnQkFBZ0I7QUFBQSxNQUM5QyxNQUFNO0FBQUEsSUFDWixDQUFLO0FBQUEsSUFFRCxTQUFTOztBQUNQLFlBQU1hLElBQVMsS0FBSyxVQUFXO0FBSy9CLGlCQUFXOUQsS0FBUyxPQUFPLEtBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQSxDQUFFO0FBQ3RELFFBQUE4RCxFQUFBcEQsSUFBTyxLQUFLcUQsR0FBUy9ELEdBQU8sRUFBSSxTQUFoQzhELEVBQUFwRCxLQUF5QyxNQUFNO0FBQzdDLGVBQUssVUFBVVYsQ0FBSztBQUFBLFFBQ3JCO0FBRUgsYUFBTzhEO0FBQUEsSUFDUjtBQUFBLElBRUQsYUFBYTtBQUNYLFlBQU0sRUFBRSxhQUFBRSxHQUFhLFdBQUFDLEVBQVcsSUFBRyxLQUFLLFVBRWxDQyxJQUFhO0FBQUEsUUFDakIsR0FBRyxLQUFLO0FBQUEsUUFDUixVQUFVLEtBQUs7QUFBQSxNQUNoQjtBQUVELGFBQUlGLE1BQ0ZFLEVBQVcsT0FBTyxLQUFLLE1BQ25CLEtBQUssVUFDUEEsRUFBVyxRQUFRLEtBQUssUUFFMUJBLEVBQVcsV0FBVyxLQUFLLFVBQzNCQSxFQUFXLFlBQVksS0FBSyxXQUN4QkQsTUFDRkMsRUFBVyxjQUFjLEtBQUssYUFDOUJBLEVBQVcsZUFBZSxLQUFLLGdCQUk1QkE7QUFBQSxJQUNSO0FBQUEsSUFFRCxjQUFjO0FBQ1osWUFBTXZCLElBQWMsRUFBRSxHQUFHLEtBQUssZUFBYyxFQUFJO0FBQ2hELE1BQUksS0FBSyxhQUNQQSxFQUFZLFdBQVc7QUFHekIsaUJBQVcsQ0FBQ3pELEdBQUtJLENBQUssS0FBSyxPQUFPLFFBQVEsS0FBSyxPQUFPLFNBQVMsQ0FBQSxDQUFFO0FBQy9ELFFBQUlBLE1BQVUsU0FDWixPQUFPcUQsRUFBWXpELENBQUcsSUFFdEJ5RCxFQUFZekQsQ0FBRyxJQUFJSTtBQUd2QixhQUFPcUQ7QUFBQSxJQUNSO0FBQUEsSUFFRCxrQkFBa0I7QUFDaEIsYUFBTyxLQUFLLGFBQWEsS0FBSyxTQUFTO0FBQUEsSUFDeEM7QUFBQSxFQUNGO0FBQUEsRUFFRCxVQUFVO0FBQ1IsU0FBSyxVQUFVLEVBQUksR0FDbkIsS0FBSyxrQkFBbUI7QUFBQSxFQUN6QjtBQUFBLEVBRUQsWUFBWTtBQUNWLFNBQUssVUFBVSxFQUFLO0FBQUEsRUFDckI7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLFVBQVV3QixHQUFLO0FBRWIsTUFBSSxLQUFLLFVBQ1AsS0FBSyxnQkFBZ0IsbUJBQW1CLE1BQU1BLENBQUc7QUFBQSxJQUVwRDtBQUFBO0FBQUEsSUFHRCxZQUFZO0FBQ1YsWUFBTSxFQUFFLFNBQUFDLEdBQVMsUUFBQUMsR0FBUSxTQUFBQyxHQUFTLFVBQUFDLEVBQVUsSUFBRztBQUMvQyxhQUFPLEVBQUUsU0FBQUgsR0FBUyxRQUFBQyxHQUFRLFNBQUFDLEdBQVMsVUFBQUMsRUFBVTtBQUFBLElBQzlDO0FBQUE7QUFBQSxJQUdELGlCQUFpQjtBQUNmLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQSxJQUdELE1BQU0saUJBQWlCOztBQUNyQixZQUFNLEtBQUssWUFBYSxJQUN4QkMsS0FBQTlELElBQUEsS0FBSyxnQkFBaUIsTUFBdEIsZ0JBQUFBLEVBQXdCLG1CQUF4QixRQUFBOEQsRUFBQSxLQUFBOUQsR0FBeUM7QUFBQSxRQUN2QyxVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsTUFDZjtBQUFBLElBQ0s7QUFBQTtBQUFBLElBR0QsZUFBZTs7QUFDYixPQUFBOEQsS0FBQTlELElBQUEsS0FBSyxnQkFBaUIsTUFBdEIsZ0JBQUFBLEVBQXdCLFVBQXhCLFFBQUE4RCxFQUFBLEtBQUE5RDtBQUFBLElBQ0Q7QUFBQTtBQUFBLElBR0QsY0FBYzs7QUFDWixPQUFBOEQsS0FBQTlELElBQUEsS0FBSyxnQkFBaUIsTUFBdEIsZ0JBQUFBLEVBQXdCLFNBQXhCLFFBQUE4RCxFQUFBLEtBQUE5RDtBQUFBLElBQ0Q7QUFBQSxJQUVELGtCQUFrQjtBQUNoQixZQUFNK0QsSUFBVUMsRUFBUSxLQUFLLE1BQU0sT0FBTyxFQUFFLENBQUMsS0FBSztBQUNsRCxhQUFPRCxFQUFRLE9BQU9BO0FBQUEsSUFDdkI7QUFBQSxJQUVELE1BQU0sY0FBYzs7QUFFbEIsWUFBTSxLQUFLLGdCQUFnQixNQUFPLEdBQ2xDLFFBQU0vRCxJQUFBLEtBQUssaUJBQUwsZ0JBQUFBLEVBQW1CO0FBQUEsSUFDMUI7QUFBQSxJQUVELE1BQU0sUUFBUTtBQUNaLFlBQU0sS0FBSyxZQUFhLEdBQ3hCLEtBQUssZUFBZ0IsR0FDckIsS0FBSyxhQUFjO0FBQUEsSUFDcEI7QUFBQSxJQUVELE9BQU87QUFDTCxXQUFLLFlBQWE7QUFBQSxJQUNuQjtBQUFBLElBRUQsUUFBUTtBQUNOLFdBQUssUUFBUSxNQUNiLEtBQUssS0FBTSxHQUNYLEtBQUssU0FBVTtBQUFBLElBQ2hCO0FBQUEsSUFFRCxVQUFVO0FBQ1IsV0FBSyxVQUFVLElBQ2YsS0FBSyxZQUFhLEdBQ2xCLEtBQUssVUFBVSxPQUFPO0FBQUEsSUFDdkI7QUFBQSxJQUVELFNBQVM7QUFDUCxXQUFLLFVBQVUsSUFDZixLQUFLLFNBQVUsR0FDZixLQUFLLFVBQVUsTUFBTTtBQUFBLElBQ3RCO0FBQUEsSUFFRCxVQUFVO0FBQ1IsV0FBSyxVQUFXLEdBQ2hCLEtBQUssVUFBVSxPQUFPO0FBQUEsSUFDdkI7QUFBQSxJQUVELFdBQVc7QUFDVCxXQUFLLFVBQVcsR0FDaEIsS0FBSyxVQUFVLFVBQVU7QUFBQSxRQUN2QixTQUFTO0FBQUE7QUFBQSxVQUVQLE9BQU8sS0FBSyxnQkFBZ0IsU0FBWSxLQUFLLGNBQWMsS0FBSztBQUFBLFFBQ2pFO0FBQUE7QUFBQSxRQUVELFFBQVEsS0FBSztBQUFBLE1BQ3JCLENBQU87QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNILEdDN1RNaUUsS0FBUyxvQkFBSSxRQUFTO0FBRzVCLElBQUlDLEtBQU07QUFDSCxTQUFTQyxHQUFPbEYsR0FBTW1GLElBQVksTUFBTTtBQUM3QyxRQUFNQyxJQUFNMUYsR0FBTU0sQ0FBSTtBQUN0QixNQUFJZixJQUFLK0YsR0FBTyxJQUFJSSxDQUFHO0FBQ3ZCLFNBQUtuRyxNQUNIQSxLQUFLa0csS0FBQSxnQkFBQUEsRUFBWW5GLE9BQVMsSUFBSSxFQUFFaUYsTUFDaENELEdBQU8sSUFBSUksR0FBS25HLENBQUUsSUFFYkE7QUFDVDtBQ1dPLE1BQU1vRyxHQUFZO0FBQUEsRUFBbEI7QUFDTCxJQUFBQyxHQUFBLGVBQVEsQ0FBRTtBQUNWLElBQUFBLEdBQUEsb0JBQWEsQ0FBRTtBQUFBO0FBQUEsRUFFZixJQUFJOUgsR0FBVStFLEdBQVVnRCxHQUFVO0FBQ2hDLElBQUEvSCxJQUFXSSxHQUFjSixDQUFRO0FBQ2pDLFFBQUlnSSxJQUFXLEtBQUs7QUFDcEIsZUFBV0MsS0FBUWpJLEdBQVU7QUFDM0IsWUFBTStCLElBQU1yQixHQUFVLENBQUN1SCxDQUFJLElBQUksTUFBTUE7QUFDckMsTUFBQUQsSUFBV0EsRUFBQWpHLE9BQUFpRyxFQUFBakcsS0FBa0IsQ0FBRTtBQUFBO0FBRWpDLElBQUFpRyxFQUFTLFlBQVk7QUFBQSxNQUNuQixHQUFHRDtBQUFBO0FBQUEsTUFDSCxHQUFHQyxFQUFTO0FBQUEsTUFDWixHQUFHakQ7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVS9FLEdBQVVrSSxHQUFRO0FBRzFCLFNBQUssSUFBSWxJLEdBQVUsRUFBRSxNQUFNLFVBQVUsUUFBQWtJLEtBQVUsRUFBRSxTQUFTLElBQU87QUFBQSxFQUNsRTtBQUFBLEVBRUQsaUJBQWlCbEksR0FBVTtBQUN6QixTQUFLLElBQUlBLEdBQVU7QUFBQSxNQUNqQixTQUFTO0FBQUEsTUFDVCxXQUFXLEtBQUssbUJBQW1CQSxDQUFRO0FBQUEsSUFDakQsQ0FBSztBQUFBLEVBQ0Y7QUFBQSxFQUVELFlBQVlBLEdBQVVtSSxHQUFpQkQsR0FBUTtBQUM3QyxTQUFLLElBQUlsSSxHQUFVO0FBQUEsTUFDakIsTUFBTTtBQUFBLE1BQ04sUUFBQWtJO0FBQUEsTUFDQSxVQUFVLENBQUMsQ0FBQ0M7QUFBQSxNQUNaLFdBQVcsS0FBSyxtQkFBbUJBLENBQWU7QUFBQSxJQUN4RCxDQUFLO0FBQUEsRUFDRjtBQUFBLEVBRUQsbUJBQW1CbkksR0FBVTs7QUFDM0IsV0FBT0EsS0FDRnVELElBQUEsS0FBSyxZQUFMdkQsT0FBQXVELEVBQUF2RCxLQUE4Qm9JLEdBQU8sQ0FBQyxLQUN2QztBQUFBLEVBQ0w7QUFBQSxFQUVELFVBQVU7QUFDUixVQUFNQyxJQUFVLENBQUFDLE1BQVM7QUFDdkIsWUFBTUMsSUFBVSxDQUFFO0FBQ2xCLGlCQUFXLENBQUN4RyxHQUFLLEVBQUUsV0FBQXlHLEdBQVcsR0FBR1IsRUFBVSxDQUFBLEtBQUssT0FBTyxRQUFRTSxDQUFLLEdBQUc7QUFDckUsUUFBSUUsS0FDRkQsRUFBUSxLQUFLLENBQUN4RyxHQUFLeUcsQ0FBUyxDQUFDO0FBRS9CLG1CQUFXLENBQUNDLEdBQVExRCxDQUFRLEtBQUtzRCxFQUFRTCxDQUFRO0FBQy9DLFVBQUFPLEVBQVEsS0FBSyxDQUFDLEdBQUd4RyxLQUFPMEcsS0FBVTFELENBQVEsQ0FBQztBQUFBO0FBRy9DLGFBQU93RDtBQUFBLElBQ1I7QUFFRCxXQUFPRixFQUFRLEtBQUssS0FBSztBQUFBLEVBQzFCO0FBQUEsRUFFRCxRQUFRSyxHQUFjcEgsR0FBTSxFQUFFLFFBQUF5QyxFQUFNLEdBQUk7QUFDdEMsVUFBTTRFLElBQVk1RSxNQUFXO0FBQzdCLElBQUk0RSxLQUNGLE9BQU9ySCxFQUFLb0gsRUFBYSxTQUFTLElBQUk7QUFFeEMsZUFBVyxDQUFDMUksR0FBVStFLENBQVEsS0FBSyxLQUFLLFFBQU8sR0FBSTtBQUNqRCxZQUFNLEVBQUUsTUFBQWlCLEdBQU0sUUFBQWtDLEdBQVEsVUFBQVUsR0FBVSxTQUFBQyxHQUFTLFdBQUFDLEVBQVMsSUFBSy9ELEdBQ2pEZ0UsSUFBUy9DLE1BQVMsVUFDbEJnRCxJQUFXaEQsTUFBUztBQUMxQixVQUFJK0MsS0FBVUMsS0FBWUosR0FBVTtBQUNsQyxjQUFNSyxJQUFTbkksR0FBbUJRLEdBQU10QixHQUFVLE1BQU0sSUFBSSxHQUN0RGtKLElBQVdQLEtBQWFJLEtBQVUsQ0FBQ0YsR0FDbkNNLElBQ0pSLE1BQ0VLLEtBQVlKLEtBQ1pHLEtBQVVGO0FBR2QsbUJBQVcxRyxLQUFTb0YsRUFBUTBCLENBQU0sRUFBRSxLQUFJLEdBQUk7QUFDMUMsZ0JBQU0xSCxJQUNKd0gsS0FBVWIsRUFBTyxTQUNqQmMsS0FBWWQsRUFBTyxZQUNuQjtBQUVGLGNBQUl6RyxJQUFLVSxLQUFBLGdCQUFBQSxFQUFRWjtBQUNqQixjQUFJRSxLQUFNLFNBQ0p5SCxLQUNGLE9BQU8vRyxFQUFNWixDQUFLLEdBRWhCNEgsS0FBZTNILEdBQWNDLENBQUUsSUFBRztBQUNwQyxZQUFJRCxHQUFjQyxDQUFFLE1BQ2xCQSxJQUFLQSxFQUFHLE1BQU0sQ0FBQztBQUVqQixrQkFBTTJILEtBQVNUO0FBQUE7QUFBQSxjQUVYcEg7QUFBQTtBQUFBO0FBQUEsY0FFQXdILElBQ0UsUUFDQTtBQUFBLGVBQ0FNLElBQVdWLElBQ2IsSUFBSWxIO0FBQUE7QUFBQTtBQUFBLGNBR0pxSCxJQUNFLEdBQUdBLEtBQWFySCxNQUNoQkE7QUFBQTtBQUNOLFlBQUFVLEVBQU1pSCxFQUFNLElBQUlDLEdBQ1pELE9BQVc3SCxLQUNiLE9BQU9ZLEVBQU1aLENBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU85QixXQUFPRDtBQUFBLEVBQ1I7QUFDSDtBQ3RJQSxNQUFNZ0ksS0FBZTtBQUFBLEVBQ25CLFNBQVNDO0FBQUEsRUFDVCxRQUFRQztBQUFBLEVBQ1IsUUFBUXREO0FBQUEsRUFDUixNQUFNdUQ7QUFBQSxFQUNOLE9BQU8xRztBQUFBLEVBQ1AsUUFBUTJHO0FBQUEsRUFDUixRQUFRQztBQUFBLEVBQ1IsVUFBVXZIO0FBQ1osR0FJTXdILEtBQVksQ0FBQXpILE1BQVMsQ0FBQyxDQUFDQSxHQUN2QjBILEtBQVcsQ0FBQTFILE1BQVMsQ0FBQ0EsR0FDckIySCxLQUFXLENBQUEzSCxNQUFTLE9BQU9BLENBQUssR0FFaEM0SCxLQUFTLENBQUE1SCxNQUNic0gsR0FBT3RILENBQUssSUFDUkEsSUFDQSxJQUFJLEtBQUtBLENBQUssR0FFZDZILEtBQVUsQ0FBQTdILE1BQ2RZLEVBQVFaLENBQUssSUFDVEEsSUFDQStELEVBQVMvRCxDQUFLLElBQ1pBLEVBQU0sTUFBTSxHQUFHLElBQ2ZvRixFQUFRcEYsQ0FBSyxHQUVmOEgsS0FBVyxDQUFBOUgsTUFDZnVILEVBQVN2SCxDQUFLLElBQ1ZBO0FBQUE7QUFBQTtBQUFBLEVBR0FBLE1BQVUsS0FDUixDQUFFLElBQ0Y7QUFBQSxHQUVGK0gsS0FBVyxDQUFBL0gsTUFDZndILEdBQVN4SCxDQUFLLElBQ1ZBLElBQ0EsSUFBSSxPQUFPQSxDQUFLLEdBRWhCZ0ksS0FBaUI7QUFBQSxFQUNyQixTQUFTUDtBQUFBLEVBQ1QsUUFBUUM7QUFBQSxFQUNSLFFBQVFDO0FBQUEsRUFDUixNQUFNQztBQUFBLEVBQ04sT0FBT0M7QUFBQSxFQUNQLFFBQVFDO0FBQUEsRUFDUixRQUFRQztBQUNWO0FBRU8sU0FBU0UsR0FBZUMsR0FBT2xJLEdBQU87O0FBRTNDLE1BQUlrSSxLQUFTbEksS0FBUztBQUNwQixlQUFXNkQsS0FBUXFFO0FBQ2pCLFdBQUk5RyxJQUFBK0YsR0FBYXRELEVBQUssVUFBbEIsUUFBQXpDLEVBQUEsS0FBQStGLElBQTBCbkg7QUFDNUIsZUFBTztBQUFBO0FBSWIsU0FBTztBQUNUO0FBRU8sU0FBU21JLEdBQVl0RSxHQUFNN0QsR0FBTztBQUN2QyxRQUFNb0ksSUFBWXZFLEtBQVFtRSxHQUFlbkUsRUFBSyxRQUFRQSxDQUFJO0FBQzFELFNBQU91RSxJQUFZQSxFQUFVcEksQ0FBSyxJQUFJQTtBQUN4QztBQ3pEQSxNQUFNcUksS0FBaUIsQ0FBRSxHQUNuQkMsS0FBc0IsQ0FBRTtBQUV2QixTQUFTQyxHQUFzQjFFLEdBQU16RCxHQUFXO0FBQ3JELEVBQUFpSSxHQUFleEUsQ0FBSSxJQUFJekQ7QUFDekI7QUFFTyxTQUFTb0ksR0FBaUIzRSxHQUFNNEUsSUFBWSxJQUFPO0FBQ3hELFFBQU1ySSxJQUFZaUksR0FBZXhFLENBQUksS0FBSztBQUMxQyxNQUFJLENBQUN6RCxLQUFhLENBQUNxSSxLQUFhLENBQUNILEdBQW9CekUsQ0FBSTtBQUV2RCxVQUFBeUUsR0FBb0J6RSxDQUFJLElBQUksSUFDdEIsSUFBSSxNQUFNLGlDQUFpQ0EsSUFBTztBQUUxRCxTQUFPekQ7QUFDVDtBQUVPLFNBQVNzSSxHQUF3QkMsR0FBU2hJLEdBQVU7QUFDekQsYUFBV29GLEtBQVU0QztBQUNuQixRQUFJQyxHQUFzQjdDLENBQU0sR0FBRztBQUNqQyxZQUFNckUsSUFBTWYsRUFBU29GLEVBQU8sV0FBV0EsRUFBTyxNQUFNLENBQUM7QUFDckQsVUFBSXJFLE1BQVE7QUFDVixlQUFPQTtBQUFBLGVBRUFtSCxHQUFTOUMsQ0FBTTtBQUN4QixpQkFBVyxDQUFDL0IsR0FBTTVELENBQVMsS0FBSyxPQUFPLFFBQVEyRixFQUFPLGNBQWMsQ0FBQSxDQUFFLEdBQUc7QUFDdkUsY0FBTXJFLElBQU1mLEVBQVNQLEdBQVc0RCxHQUFNLENBQUM7QUFDdkMsWUFBSXRDLE1BQVE7QUFDVixpQkFBT0E7QUFBQTtBQUtqQjtBQUVPLFNBQVNvSCxHQUE4Qi9DLEdBQVFwRixHQUFVO0FBQzlELFNBQU9vRixJQUNIMkMsR0FBd0IsQ0FBQzNDLEdBQVEsR0FBR2dELEdBQWNoRCxDQUFNLENBQUMsR0FBR3BGLENBQVEsSUFDcEU7QUFDTjtBQUVPLFNBQVNxSSxHQUEwQmpELEdBQVFwRixHQUFVO0FBQzFELFNBQ0VtSTtBQUFBLElBQ0UvQztBQUFBLElBQ0EsQ0FBQTNGLE1BQWNPLEVBQVNQLENBQVMsSUFBSUEsSUFBWTtBQUFBLEVBQ3RELEtBQVM7QUFFVDtBQUVPLFNBQVM2SSxHQUEwQmxELEdBQVFwRixHQUFVO0FBQzFELFNBQ0VtSTtBQUFBLElBQ0UvQztBQUFBLElBQ0EsQ0FBQTNGLE1BQWNPLEVBQVNQLENBQVMsSUFBSSxLQUFPO0FBQUEsRUFDakQsS0FBUztBQUVUO0FBV08sU0FBUzhJLEdBQTBCbkQsR0FBUTtBQUNoRCxTQUFPa0QsR0FBMEJsRCxHQUFRLE1BQU0sRUFBSSxLQUFLO0FBQzFEO0FBRU8sU0FBUzhDLEdBQVM5QyxHQUFRO0FBQy9CLFNBQU93QixFQUFTeEIsQ0FBTSxLQUFLaEMsRUFBU2dDLEVBQU8sSUFBSTtBQUNqRDtBQUVPLFNBQVNvRCxHQUFPcEQsR0FBUTtBQUM3QixTQUFPOEMsR0FBUzlDLENBQU0sS0FBS0EsRUFBTyxTQUFTO0FBQzdDO0FBRU8sU0FBU3FELEdBQU9yRCxHQUFRO0FBQzdCLFNBQU84QyxHQUFTOUMsQ0FBTSxLQUFLQSxFQUFPLFNBQVM7QUFDN0M7QUFFTyxTQUFTc0QsR0FBTXRELEdBQVE7QUFDNUIsU0FBTzhDLEdBQVM5QyxDQUFNLEtBQUtBLEVBQU8sU0FBUztBQUM3QztBQUVPLFNBQVN1RCxHQUFRdkQsR0FBUTtBQUM5QixTQUFPOEMsR0FBUzlDLENBQU0sS0FBS0EsRUFBTyxTQUFTO0FBQzdDO0FBRU8sU0FBU3dELEdBQU94RCxHQUFRO0FBQzdCLFNBQU84QyxHQUFTOUMsQ0FBTSxLQUFLQSxFQUFPLFNBQVM7QUFDN0M7QUFFTyxTQUFTeUQsR0FBb0J6RCxHQUFRO0FBQzFDLFNBQU8sS0FBSyxVQUFVQSxDQUFNO0FBQzlCO0FBRU8sZUFBZTBELEdBQWMxRCxHQUFRMkQsSUFBZSxJQUFPO0FBT2hFLE1BTkl6SixFQUFXOEYsQ0FBTSxNQUNuQkEsSUFBU0EsRUFBUSxJQUVmNEQsR0FBVTVELENBQU0sTUFDbEJBLElBQVMsTUFBTUEsSUFFYjZELEdBQVM3RCxDQUFNLE1BRWpCQSxJQUFTLEVBQUUsR0FBR0EsRUFBUSxHQUVsQixDQUFDQSxFQUFPLFNBQVMyRCxLQUFnQjNELEVBQU8sV0FBVTtBQUNwRCxVQUFNOEQsSUFBTyxPQUFPLEtBQUs5RCxDQUFNO0FBQy9CLFFBQUk4RCxFQUFLLFdBQVcsR0FBRztBQUNyQixZQUFNN0YsSUFBTzZGLEVBQUssQ0FBQztBQUNuQixNQUFBOUQsSUFBU0EsRUFBTy9CLENBQUksR0FDaEJBLE1BQVMsY0FDWCtCLEVBQU8sT0FBTy9CO0FBQUE7QUFBQTtBQUt0QixTQUFPK0I7QUFDVDtBQUVPLGVBQWUrRCxHQUNwQkMsR0FDQUMsSUFBY1AsSUFDZDtBQUNBLE1BQUlkLElBQVUxSSxFQUFXOEosQ0FBaUIsSUFDdENBLEVBQW1CLElBQ25CQTtBQUNKLFNBQUFwQixJQUFVLE1BQU1jLEdBQWNkLEdBQVMsRUFBSyxHQUN4Qy9ILEVBQVErSCxDQUFPLElBR2pCQSxJQUFVLE9BQU87QUFBQSxJQUNmLE1BQU1zQjtBQUFBLE1BQ0p0QjtBQUFBLE1BQ0EsT0FBTXRJLE1BQVE7QUFDWixjQUFNMEYsSUFBUyxNQUFNaUUsRUFBWTNKLEdBQU0sRUFBSTtBQUMzQyxlQUFPLENBQUMwRixFQUFPLE1BQU1BLENBQU07QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxFQUNGLElBQ1F3QixFQUFTb0IsQ0FBTyxNQUN6QkEsSUFBVSxPQUFPO0FBQUEsSUFDZixNQUFNc0I7QUFBQSxNQUNKLE9BQU8sUUFBUXRCLENBQU87QUFBQSxNQUN0QixPQUFPLENBQUMvSSxHQUFLUyxDQUFJLE1BQU07QUFDckIsY0FBTTBGLElBQVMsTUFBTWlFLEVBQVkzSixHQUFNLEVBQUk7QUFDM0MsZUFBTyxDQUFDVCxHQUFLbUcsQ0FBTTtBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsSUFFSTRDO0FBQ1Q7QUFFTyxlQUFldUIsR0FBYUMsR0FBaUI7QUFDbEQsU0FBT0wsR0FBZUssR0FBaUIsT0FBT3BFLEdBQVEyRCxPQUNwRDNELElBQVMsTUFBTTBELEdBQWMxRCxHQUFRMkQsQ0FBWSxHQUM3QyxDQUFDM0QsRUFBTyxRQUFRd0QsR0FBT3hELENBQU0sTUFJL0JBLEVBQU8sT0FBT3RCLEdBQVNzQixFQUFPLEtBQUssR0FDbkNBLEVBQU8sUUFBUSxNQUFNK0QsR0FBZS9ELEVBQU8sS0FBSyxJQUUzQ0EsRUFDUjtBQUNIO0FBRU8sU0FBU3FFLEdBQWFDLEdBQU87QUFDbEMsU0FBTyxPQUFPO0FBQUEsSUFDWixPQUFPLFFBQVFBLENBQUssRUFBRTtBQUFBLE1BQ3BCLENBQUNqRSxHQUFTLENBQUN4RyxHQUFLbUcsQ0FBTSxPQUNoQndELEdBQU94RCxDQUFNLElBQ2ZLLEVBQVEsS0FBSyxHQUFHLE9BQU8sUUFBUUwsRUFBTyxLQUFLLENBQUMsSUFFNUNLLEVBQVEsS0FBSyxDQUFDeEcsR0FBS21HLENBQU0sQ0FBQyxHQUVyQks7QUFBQSxNQUVULENBQUU7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNIO0FBRU8sZUFBZWtFLEdBQXVCdkUsR0FBUTtBQUVuRCxNQUFJLEVBQUUsV0FBQTNGLEVBQVMsSUFBSzJGO0FBQ3BCLEVBQUkzRixNQUNGQSxJQUFZLE1BQU1xSixHQUFjckosR0FBVyxFQUFJLEdBQzNDQSxNQUlGMkYsRUFBTyxZQUFZd0UsR0FBUTtBQUFBLElBQ3pCLEdBQUduSztBQUFBLElBQ0gsUUFBUSxDQUFDb0ssSUFBV3RHLElBQVcsR0FBSTlELEVBQVUsVUFBVSxDQUFBLENBQUc7QUFBQSxFQUNsRSxDQUFPO0FBR1A7QUFFTyxlQUFlcUssR0FBd0I5QixHQUFTO0FBRXJELFFBQU1zQixHQUFnQixPQUFPLE9BQU90QixLQUFXLENBQUEsQ0FBRSxHQUFHMkIsRUFBc0I7QUFDNUU7QUFFTyxlQUFlSSxHQUNwQkMsR0FDQTVFLEdBQ0E2RSxJQUFTLE1BQ1RDLElBQVEsR0FDUjtBQUNBLFFBQU1DLElBQVcsQ0FBRSxHQUNiQyxJQUFVLENBQUMzSyxHQUFXNEQsR0FBTWdILE1BQWtCO0FBQ2xELElBQUFGLEVBQVM7QUFBQSxNQUNQRztBQUFBLFFBQ0VOO0FBQUEsUUFDQXZLO0FBQUEsUUFDQTREO0FBQUEsUUFDQTRHO0FBQUEsUUFDQUMsSUFBUUc7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFRCxFQUFBbEMsR0FBOEIvQyxHQUFRZ0YsQ0FBTyxHQUM3Q3JDLEdBQXdCd0MsR0FBZ0JuRixDQUFNLEdBQUdnRixDQUFPLEdBRXhELE1BQU0sUUFBUSxJQUFJRCxDQUFRO0FBQzVCO0FBRU8sZUFBZUcsR0FDcEJOLEdBQ0E1RSxHQUNBL0IsR0FDQTRHLElBQVMsTUFDVEMsSUFBUSxHQUNSOztBQUNBLEVBQUFNLEdBQXNCUixHQUFLNUUsQ0FBTSxHQUVqQyxNQUFNLFFBQVEsSUFBSTtBQUFBO0FBQUEsSUFFaEJrRTtBQUFBLE1BQ0VpQixHQUFnQm5GLENBQU07QUFBQSxNQUN0QixDQUFBcUYsTUFBU1YsR0FBd0JDLEdBQUtTLEdBQU9SLEdBQVFDLENBQUs7QUFBQSxJQUMzRDtBQUFBO0FBQUEsS0FFRDNGLEtBQUE5RCxJQUFBaUssR0FBZXRGLENBQU0sTUFBckIsZ0JBQUEzRSxFQUF3QixrQkFBeEIsZ0JBQUE4RCxFQUFBO0FBQUEsTUFBQTlEO0FBQUEsTUFDRXVKO0FBQUEsTUFDQTVFO0FBQUEsTUFDQS9CO0FBQUEsTUFDQTRHO0FBQUEsTUFDQUM7QUFBQTtBQUFBLEVBRU4sQ0FBRztBQUNIO0FBRU8sZUFBZVMsR0FBWWxMLEdBQVd1SyxHQUFLNUUsR0FBUS9CLEdBQU11SCxJQUFXLElBQUk7QUFDN0UsRUFBQUosR0FBc0JSLEdBQUs1RSxDQUFNLEdBQ2pDeUYsR0FBbUJiLEdBQUs1RSxHQUFRL0IsR0FBTXVILENBQVE7QUFDOUMsTUFBSUUsSUFBVyxDQUFFO0FBQ2pCLE1BQUlyQyxHQUFPckQsQ0FBTTtBQUNmLFVBQU0yRixHQUFxQmYsR0FBSzVFLENBQU0sR0FDdEMsTUFBTTJFLEdBQXdCQyxHQUFLNUUsR0FBUTBGLENBQVE7QUFBQSxXQUMxQ2xDLEdBQU94RCxDQUFNO0FBQ3RCLElBQUEwRixJQUFXLE1BQU0sUUFBUTtBQUFBLE1BQ3ZCLE9BQU8sUUFBUTFGLEVBQU8sS0FBSyxFQUFFO0FBQUEsUUFBSSxPQUFPLENBQUMvQixHQUFNM0QsQ0FBSSxNQUNqRGlMLEdBQVlsTCxHQUFXdUssR0FBS3RLLEdBQU0yRCxHQUFNK0IsRUFBTyxRQUFRO0FBQUEsTUFDeEQ7QUFBQSxJQUNGO0FBQUE7QUFFRCxVQUFNLElBQUksTUFBTSx5QkFBeUJ5RCxHQUFvQnpELENBQU0sSUFBSTtBQUV6RSxTQUFPO0FBQUEsSUFDTCxNQUFNQSxFQUFPO0FBQUEsSUFDYixVQUFBMEY7QUFBQSxJQUNBLFdBQUFyTDtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osS0FBQXVLO0FBQUEsTUFDQSxRQUFBNUU7QUFBQSxJQUNEO0FBQUEsRUFDRjtBQUNIO0FBRU8sU0FBU29GLEdBQXNCUixHQUFLNUUsR0FBUTtBQUNqRCxNQUFJSCxJQUFXK0UsRUFBSSxTQUFTNUUsRUFBTyxJQUFJO0FBQ3ZDLE1BQUlILE1BQ0UzRixFQUFXMkYsQ0FBUSxNQUNyQkEsSUFBV0EsRUFBU0csQ0FBTSxJQUV4QndCLEVBQVMzQixDQUFRO0FBQ25CLGVBQVcsQ0FBQ2hHLEdBQUtJLENBQUssS0FBSyxPQUFPLFFBQVE0RixDQUFRO0FBQ2hELE1BQUlHLEVBQU9uRyxDQUFHLE1BQU0sU0FDbEJtRyxFQUFPbkcsQ0FBRyxJQUFJSSxJQUVkK0YsRUFBT25HLENBQUcsSUFBSStMLEdBQWEzTCxHQUFPK0YsRUFBT25HLENBQUcsQ0FBQztBQUt2RDtBQUVPLFNBQVNnTSxHQUE0QmpCLEdBQUs1RSxHQUFRO0FBS3ZELEVBQUErQyxHQUE4Qi9DLEdBQVEsQ0FBQTNGLE1BQWE7QUFDakQsSUFBQStLLEdBQXNCUixHQUFLdkssQ0FBUztBQUNwQyxVQUFNeUwsSUFBUUMsR0FBZTFMLENBQVM7QUFDdEMsZUFBVzJMLEtBQVEsT0FBTyxPQUFPRixDQUFLO0FBQ3BDLE1BQUFELEdBQTRCakIsR0FBS29CLENBQUk7QUFBQSxFQUUzQyxDQUFHO0FBQ0g7QUFFTyxTQUFTUCxHQUFtQmIsR0FBSzVFLEdBQVEvQixHQUFNdUgsSUFBVyxNQUFNO0FBRXJFLEVBQUF4RixFQUFPLFNBQVBBLEVBQU8sT0FBUy9CLElBQ2hCK0IsRUFBTyxTQUFQQSxFQUFPLE9BQVM0RSxFQUFJLGNBQWMzRyxDQUFJLElBQ2xDdUgsTUFBYSxTQUNmeEYsRUFBTyxXQUFXLEdBQUd3RixLQUFZeEYsRUFBTztBQUU1QztBQUVPLGVBQWVpRyxHQUFhckIsR0FBSzVFLEdBQVE4RSxHQUFPO0FBRXJELE1BQUksRUFBRSxNQUFBa0IsR0FBTSxPQUFBRixHQUFPLFlBQUFJLEVBQVksSUFBR2xHO0FBQ2xDLEVBQUk4RixJQUNGQSxJQUFROUYsRUFBTyxRQUFRLE1BQU0rRDtBQUFBLElBQWUrQjtBQUFBLElBQU8sQ0FBQUUsTUFDakRHLEdBQVl2QixHQUFLb0IsQ0FBSTtBQUFBLEVBQ3RCLElBQ1FBLElBQ1RBLElBQU9oRyxFQUFPLE9BQU8sTUFBTW1HLEdBQVl2QixHQUFLb0IsQ0FBSSxJQUN2Q3hFLEVBQVMwRSxDQUFVLE1BRzVCRixJQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixZQUFBRTtBQUFBLEVBQ0QsSUFHSEosVUFBVSxFQUFFLFNBQVNFLEVBQU07QUFDM0IsUUFBTU4sSUFBVyxDQUFFO0FBQ25CLGFBQVdNLEtBQVEsT0FBTyxPQUFPRixDQUFLO0FBQ3BDLFVBQU1uQixHQUF3QkMsR0FBS29CLEdBQU1OLEdBQVVaLENBQUs7QUFFMUQsU0FBT1k7QUFDVDtBQUVPLGVBQWVTLEdBQVl2QixHQUFLNUUsR0FBUTtBQUU3QyxNQURBQSxJQUFTLE1BQU0wRCxHQUFjMUQsR0FBUSxFQUFJLEdBQ3JDLENBQUNvRCxHQUFPcEQsQ0FBTTtBQUNoQixVQUFNLElBQUksTUFBTSx5QkFBeUJ5RCxHQUFvQnpELENBQU0sSUFBSTtBQUV6RSxTQUFBb0YsR0FBc0JSLEdBQUs1RSxDQUFNLEdBQ2pDLE1BQU0yRixHQUFxQmYsR0FBSzVFLENBQU0sR0FDL0JBO0FBQ1Q7QUFFTyxlQUFlb0csR0FBV3hCLEdBQUs1RSxHQUFRO0FBRTVDLE1BREFBLElBQVMsTUFBTTBELEdBQWMxRCxHQUFRLEVBQUksR0FDckMsQ0FBQ3NELEdBQU10RCxDQUFNO0FBQ2YsVUFBTSxJQUFJLE1BQU0sd0JBQXdCeUQsR0FBb0J6RCxDQUFNLElBQUk7QUFFeEUsU0FBQW9GLEdBQXNCUixHQUFLNUUsQ0FBTSxHQUMxQkE7QUFDVDtBQUVPLGVBQWVxRyxHQUFhekIsR0FBSzVFLEdBQVE7QUFFOUMsTUFEQUEsSUFBUyxNQUFNMEQsR0FBYzFELEdBQVEsRUFBSSxHQUNyQyxDQUFDdUQsR0FBUXZELENBQU07QUFDakIsVUFBTSxJQUFJLE1BQU0sMEJBQTBCeUQsR0FBb0J6RCxDQUFNLElBQUk7QUFFMUUsU0FBQW9GLEdBQXNCUixHQUFLNUUsQ0FBTSxHQUMxQkE7QUFDVDtBQUVPLGVBQWUyRixHQUFxQmYsR0FBSzVFLEdBQVE7QUFDdEQsUUFBTSxFQUFFLE1BQUFzRyxHQUFNLFFBQUFDLEVBQU0sSUFBS3ZHO0FBQ3pCLEVBQUlzRyxNQUNGdEcsRUFBTyxPQUFPLE1BQU0rRDtBQUFBLElBQ2xCdUM7QUFBQSxJQUNBLENBQUFFLE1BQU9KLEdBQVd4QixHQUFLNEIsQ0FBRztBQUFBLEVBQzNCLElBRUNELE1BQ0Z2RyxFQUFPLFNBQVMsTUFBTStEO0FBQUEsSUFDcEJ3QztBQUFBLElBQ0EsQ0FBQWxCLE1BQVNnQixHQUFhekIsR0FBS1MsQ0FBSztBQUFBLEVBQ2pDO0FBRUw7QUFFTyxTQUFTb0IsR0FBY3pHLEdBQVE7QUFHcEMsU0FDRThDLEdBQVM5QyxDQUFNLEtBQ2Z3QixFQUFTeEIsRUFBTyxRQUFRQSxFQUFPLFNBQVNBLEVBQU8sVUFBVTtBQUU3RDtBQUVPLFNBQVMwRyxHQUF1QjFHLEdBQVE7QUFDN0MsU0FDRThDLEdBQVM5QyxDQUFNLEtBQ2YsT0FBTyxNQUFLQSxLQUFBLGdCQUFBQSxFQUFRLFVBQVMsQ0FBRSxDQUFBLEVBQUUsU0FBUztBQUU5QztBQUVPLFNBQVM2QyxHQUFzQjdDLEdBQVE7QUFDNUMsU0FDRXFELEdBQU9yRCxDQUFNLEtBQ2J3QixFQUFTeEIsRUFBTyxTQUFTO0FBRTdCO0FBRU8sU0FBUzJHLEdBQWtCM0csR0FBUXBHLEdBQVM7QUFDakQsUUFBTSxFQUFFLE1BQUFnTixFQUFJLElBQUs1RyxHQUNYNkcsSUFBYUQsS0FBUWhOLEVBQVEsZUFBZWdOLENBQUk7QUFDdEQsU0FBT0M7QUFBQTtBQUFBLEVBR0g1RCxHQUEwQjRELEdBQVlKLEVBQWEsS0FBSztBQUU5RDtBQUVPLFNBQVNLLEdBQWM5RyxHQUFRcEcsR0FBUztBQUM3QyxTQUFPK00sR0FBa0IzRyxHQUFRcEcsQ0FBTyxJQUNwQ0EsRUFBUSxlQUFlb0csRUFBTyxJQUFJLElBQ2xDO0FBQ047QUFFTyxTQUFTK0csR0FBYy9HLEdBQVFwRyxHQUFTO0FBQzdDLFNBQU8sQ0FBQyxDQUFDa04sR0FBYzlHLEdBQVFwRyxDQUFPO0FBQ3hDO0FBRU8sU0FBU29OLEdBQWdCaEgsR0FBUXpHLEdBQUlLLEdBQVM7QUFDbkQsUUFBTWdOLElBQU9FLEdBQWM5RyxHQUFRcEcsQ0FBTztBQUMxQyxTQUFJZ04sSUFJSyxHQUhNL0QsR0FBc0IrRCxDQUFJLElBQ25DQSxFQUFLLFdBQ0wsR0FBR0EsRUFBSyxZQUFZQSxFQUFLLFVBQ1hyTixNQUViO0FBQ1Q7QUFFTyxTQUFTd00sR0FBZS9GLEdBQVFwRyxHQUFTcU4sR0FBWTtBQUMxRCxRQUFNSixJQUFhak4sS0FBVytNLEdBQWtCM0csR0FBUXBHLENBQU87QUFDL0QsTUFBSWlOO0FBQ0YsSUFBQTdHLElBQVM2RztBQUFBLFdBQ0E3RyxFQUFPO0FBQ2hCLFVBQU0sSUFBSSxNQUFNLGtCQUFrQkEsRUFBTyxPQUFPO0FBR2xELE1BQUksRUFBRSxNQUFBZ0csR0FBTSxPQUFBRixFQUFLLElBQUs5RjtBQUN0QixNQUFJLENBQUNnRyxLQUFRLENBQUNGLEdBQU87QUFDbkIsVUFBTSxFQUFFLE1BQUE3SCxHQUFNLFNBQUFpSixHQUFTLFdBQUF6RyxHQUFXLE1BQUE2RixHQUFNLFlBQUFKLEVBQVUsSUFBS2xHO0FBQ3ZELFFBQUlrRyxLQUFjSTtBQUdoQixNQUFBTixJQUFPLEVBQUUsTUFBTSxRQUFRLE1BQUEvSCxHQUFNLFNBQUFpSixHQUFTLFdBQUF6RyxHQUFXLE1BQUE2RixHQUFNLFlBQUFKLEVBQVk7QUFBQTtBQUduRSxhQUFPLENBQUU7QUFBQTtBQUdiLFNBQUFKLFVBQVUsRUFBRSxTQUFTRSxFQUFNLElBQ3BCLE9BQU87QUFBQSxJQUNaLE9BQU8sUUFBUUYsQ0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDaEksR0FBTWtJLENBQUksT0FFaENwTSxLQUFXTSxFQUFXOEwsRUFBSyxVQUFVLE1BQ3ZDQSxJQUFPO0FBQUEsTUFDTCxHQUFHQTtBQUFBLE1BQ0gsWUFBWUEsRUFBSyxXQUFXcE0sQ0FBTztBQUFBLElBQ3BDLElBRUksQ0FBQ2tFLElBQU1tSixLQUFBLGdCQUFBQSxFQUFhakIsT0FBU0EsQ0FBSSxFQUN6QztBQUFBLEVBQ0Y7QUFDSDtBQUVPLFNBQVNtQixHQUEyQnJCLEdBQU94TCxHQUFNO0FBQ3RELFNBQU93TCxFQUFNeEwsS0FBQSxnQkFBQUEsRUFBTSxJQUFJLEtBQUt3TCxFQUFNLFdBQVc7QUFDL0M7QUFFTyxTQUFTc0IsR0FBa0JwSCxHQUFRMUYsR0FBTVYsR0FBUztBQUN2RCxTQUFPdU4sR0FBMkJwQixHQUFlL0YsR0FBUXBHLENBQU8sR0FBR1UsQ0FBSTtBQUN6RTtBQUVPLFNBQVMrTSxHQUFVckgsR0FBUTtBQUNoQyxTQUFPLENBQUMsQ0FBQ0EsRUFBTztBQUNsQjtBQUVPLFNBQVNzSCxHQUFVdEgsR0FBUTtBQUNoQyxTQUFPLENBQUMsRUFBRUEsRUFBTyxXQUFXQSxFQUFPO0FBQ3JDO0FBRU8sU0FBU3VILEdBQVN2SCxHQUFROztBQUMvQixTQUFPLENBQUMsRUFBRUEsRUFBTyxZQUFVM0UsSUFBQWlLLEdBQWV0RixDQUFNLE1BQXJCLGdCQUFBM0UsRUFBd0IsbUJBQWtCO0FBQ3ZFO0FBRU8sU0FBU21NLEdBQVN4SCxHQUFReUgsR0FBZ0I7O0FBQy9DLFFBQU0sRUFBRSxPQUFBQyxFQUFLLElBQUsxSDtBQUNsQixTQUNFMEgsTUFBVSxPQUNSLENBQUMsQ0FBQ0EsS0FDRkQsT0FBa0JwTSxJQUFBaUssR0FBZXRGLENBQU0sTUFBckIsZ0JBQUEzRSxFQUF3QjtBQUdoRDtBQUVPLFNBQVNzTSxHQUFZM0gsR0FBUTs7QUFDbEMsU0FBTyxDQUFDLEdBQUMzRSxJQUFBaUssR0FBZXRGLENBQU0sTUFBckIsUUFBQTNFLEVBQXdCO0FBQ25DO0FBRU8sU0FBU3VNLEdBQ2QvSixHQUNBLEVBQUUsTUFBQUMsR0FBTSxRQUFBa0MsR0FBUSxVQUFBcEYsSUFBVyxJQUFNLFNBQVNtRCxHQUFLLFNBQUFuRSxFQUFPLElBQUssQ0FBRSxHQUM3RDtBQUNBLFFBQU11SSxJQUFRckUsS0FBUXVCLEVBQVF2QixDQUFJO0FBR2xDLE1BQUk3RCxJQUFRK0YsSUFDUm5GLEVBQVFnRCxDQUFhLElBQ25CakYsR0FBbUJvSCxHQUFRbkMsR0FBZSxNQUFBO0FBQUEsR0FBZSxJQUN6RG1DLEVBQU9uQyxDQUFhLElBQ3RCO0FBRUosTUFBSTVELE1BQVUsVUFBYThELE1BQVE7QUFDakMsV0FBSW5ELEtBQVlWLEVBQVc2RCxDQUFHLEtBQUssQ0FBQ21FLEdBQWVDLEdBQU9wRSxDQUFHLE1BRTNEQSxJQUFNQSxFQUFJbkUsQ0FBTyxJQUVabUU7QUFHVCxNQUFJbUUsR0FBZUMsR0FBT2xJLENBQUs7QUFDN0IsV0FBT0E7QUFRVCxNQUpJVyxLQUFZVixFQUFXRCxDQUFLLE1BQzlCQSxJQUFRQSxFQUFNTCxDQUFPLElBR25CdUksS0FBU2xJLEtBQVMsUUFBUSxDQUFDaUksR0FBZUMsR0FBT2xJLENBQUs7QUFDeEQsZUFBVzZELEtBQVFxRSxHQUFPO0FBQ3hCLFlBQU0wRixJQUFZekYsR0FBWXRFLEdBQU03RCxDQUFLO0FBQ3pDLFVBQUk0TixNQUFjNU47QUFDaEIsZUFBTzROO0FBQUE7QUFJYixTQUFPNU47QUFDVDtBQUVPLFNBQVM2TixHQUFtQjlILEdBQVFwRyxHQUFTO0FBQ2xELFNBQ0VnTyxHQUFlLE1BQU07QUFBQSxJQUNuQixNQUFNO0FBQUEsSUFDTixRQUFBNUg7QUFBQSxJQUNBLFNBQUFwRztBQUFBLElBQ0EsU0FBUztBQUFBLEVBQ2YsQ0FBSyxNQUNDLENBQUN1SixHQUEwQm5ELENBQU0sS0FDakNrRDtBQUFBLElBQTBCbEQ7QUFBQSxJQUFRLENBQUEzRixNQUNoQ3lOLEdBQW1Cek4sR0FBV1QsQ0FBTztBQUFBLEVBQ3RDO0FBR1A7QUFFTyxTQUFTbU8sR0FBZ0IvSCxHQUFROztBQU10QyxRQUFNbEcsSUFBZWtHLEVBQU8sU0FDdEIvRixJQUNKSCxNQUFpQixTQUNiQSxLQUNBdUIsSUFBQWlLLEdBQWV0RixDQUFNLE1BQXJCLGdCQUFBM0UsRUFBd0I7QUFDOUIsU0FBT25CLEVBQVdELENBQUssSUFDbkJBLEVBQU0rRixDQUFNLElBQ1pnSSxHQUFNL04sQ0FBSztBQUNqQjtBQUVPLFNBQVNnTyxHQUFtQmpJLEdBQVE7O0FBQ3pDLFFBQU1rSSxJQUFjNUMsR0FBZXRGLENBQU07QUFDekMsU0FBTyxDQUFDLEVBQ05rSSxLQUFBLFFBQUFBLEVBQWEsaUJBQWdCN00sSUFBQTZNLEtBQUEsZ0JBQUFBLEVBQWEsdUJBQWIsUUFBQTdNLEVBQUEsS0FBQTZNLEdBQWtDbEk7QUFFbkU7QUFFTyxTQUFTbUksR0FBaUJuSSxHQUFRNUcsSUFBTyxDQUFBLEdBQUlpQixHQUFXO0FBVzdELFNBQU8rTjtBQUFBLElBQ0xwSTtBQUFBLElBQ0E1RztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFab0IsQ0FBQzRHLEdBQVE1RyxHQUFNNkUsTUFBUztBQUM1QyxNQUFJLEVBQUVBLEtBQVE3RSxNQUFTLENBQUM2TyxHQUFtQmpJLENBQU0sTUFDL0M1RyxFQUFLNkUsQ0FBSSxJQUFJOEosR0FBZ0IvSCxDQUFNO0FBQUEsSUFFdEM7QUFBQSxJQVVDO0FBQUEsSUFoQmMsRUFBRSxXQUFBM0YsR0FBVyxVQUFVakIsRUFBTTtBQUFBLEVBa0I1QztBQUNIO0FBRU8sU0FBU2dGLEdBQWE0QixHQUFRNUcsR0FBTTZFLEdBQU1uRyxHQUFVO0FBQUEsRUFDekQsV0FBQXVDLElBQVk7QUFBQSxFQUNaLFVBQUFnTyxJQUFXaE8sS0FBQSxnQkFBQUEsRUFBVztBQUN4QixJQUFJLElBQUk7QUFDTixRQUFNLEVBQUUsU0FBQWlPLEVBQU8sSUFBS3RJO0FBQ3BCLE1BQUlzSSxHQUFTO0FBQ1gsVUFBTXJPLElBQVFxTztBQUFBLE1BQ1osSUFBSWxPLEVBQVlDLEdBQVc7QUFBQSxRQUN6QixRQUFBMkY7QUFBQTtBQUFBO0FBQUEsUUFHQSxPQUFPNUcsRUFBSzZFLENBQUk7QUFBQSxRQUNoQixNQUFBQTtBQUFBLFFBQ0EsTUFBQTdFO0FBQUEsUUFDQSxVQUFBdEI7QUFBQSxRQUNBLFVBQUF1UTtBQUFBLE1BQ1IsQ0FBTztBQUFBLElBQ0Y7QUFDRCxJQUFJcE8sTUFBVSxXQUdaYixFQUFLNkUsQ0FBSSxJQUFJaEU7QUFBQTtBQUlqQixTQUFJLEVBQUVnRSxLQUFRN0UsTUFBUyxDQUFDNk8sR0FBbUJqSSxDQUFNLE1BQy9DNUcsRUFBSzZFLENBQUksSUFBSThKLEdBQWdCL0gsQ0FBTSxJQUk5QjVHLEVBQUs2RSxDQUFJO0FBQ2xCO0FBRUEsU0FBU3NLLEdBQVUvSCxHQUFjbEcsR0FBTUMsR0FBUztBQUM5QyxNQUFJQSxFQUFRLFlBQVk7QUFDdEIsVUFBTWlPLElBQU8sQ0FBRSxHQUNULEVBQUUsT0FBQW5QLElBQVEsTUFBTSxVQUFBb1AsRUFBVSxJQUFHakksR0FDN0JqSCxJQUFLZSxFQUFLakIsQ0FBSztBQUNyQixXQUFJRSxNQUFPLFdBQ1RpUCxFQUFLblAsQ0FBSyxJQUFJRSxJQUdabU4sR0FBdUJsRyxDQUFZLE1BQ3JDZ0ksRUFBSyxPQUFPbE8sRUFBSyxPQUVmbU8sTUFDRkQsRUFBS0MsQ0FBUSxJQUFJbk8sRUFBS21PLENBQVEsSUFFekJEO0FBQUE7QUFFUCxXQUFPLEVBQUUsR0FBR2xPLEVBQU07QUFFdEI7QUFFTyxTQUFTb08sR0FBWTFJLEdBQVFRLEdBQWNwSCxHQUFNdEIsR0FBVTtBQUFBLEVBQ2hFLFdBQUF1QztBQUFBLEVBQ0EsVUFBQWdPO0FBQUEsRUFDQSxZQUFBTTtBQUFBO0FBQUEsRUFDQSxRQUFBOU07QUFDRixJQUFJLElBQUk7QUFDTixRQUFNdEIsSUFBVSxFQUFFLFdBQUFGLEdBQVcsVUFBQWdPLEdBQVUsWUFBQU0sR0FBWSxRQUFBOU0sRUFBUSxHQUNyRCtNLElBQWdCTCxHQUFVL0gsR0FBY3BILEdBQU1tQixDQUFPLEdBQ3JENkYsSUFBUSxJQUFJVCxHQUFhO0FBcUYvQixTQUFBeUk7QUFBQSxJQUNFcEk7QUFBQSxJQUNBNUc7QUFBQSxJQUNBdEI7QUFBQSxJQUNBOFE7QUFBQSxJQXZGb0IsQ0FBQzVJLEdBQVE1RyxHQUFNNkUsR0FBTW5HLEdBQVU4USxNQUFrQjtBQUNyRSxVQUFJM08sSUFBUW1FLEdBQWE0QixHQUFRNUcsR0FBTTZFLEdBQU1uRyxHQUFVeUMsQ0FBTztBQUc5RCxVQUFJTSxFQUFRWixDQUFLLEdBQUc7QUFDbEIsY0FBTSxFQUFFLGdCQUFBNE8sR0FBZ0IsVUFBQUosSUFBVSxPQUFBcFAsSUFBUSxLQUFNLElBQUcyRztBQUNuRCxRQUFJNkksSUFDRjVPLElBQVFBLEVBQU0sSUFBSSxDQUFBbUIsT0FBVTtBQUFBLFVBQzFCLENBQUN5TixDQUFjLEdBQUd6TjtBQUFBLFFBQzVCLEVBQVUsSUFHRm5CLElBQVEsQ0FBQyxHQUFHQSxDQUFLLEdBRWZ3TyxNQUFZNU0sTUFBVyxlQUl6QjVCLEVBQU0sS0FBSyxDQUFDNk8sR0FBR0MsT0FBTTtBQUNuQixnQkFBTUMsS0FBTUYsS0FBQSxnQkFBQUEsRUFBSXpQLElBQ1Y0UCxLQUFNRixNQUFBLGdCQUFBQSxHQUFJMVA7QUFDaEIsaUJBQU8yUCxNQUFPLFFBQVExUCxHQUFjMFAsRUFBRyxJQUNuQyxJQUNBQyxNQUFPLFFBQVEzUCxHQUFjMlAsRUFBRyxJQUM5QixLQUNBRCxLQUFNQztBQUFBLFFBQ3RCLENBQVM7QUFBQTtBQUdMLE1BQUFMLEVBQWMzSyxDQUFJLElBQUloRTtBQUFBLElBQ3ZCO0FBQUEsSUFFb0IsQ0FBQytGLEdBQVE1RyxHQUFNNkUsR0FBTW5HLEdBQVU4USxNQUFrQjtBQUNwRSxZQUFNLEVBQUUsZ0JBQUFDLEdBQWdCLFNBQUFLLEdBQVMsU0FBQWxFLEdBQVMsSUFBR2hGO0FBQzdDLFVBQUkvRixJQUFRMk8sRUFBYzNLLENBQUk7QUFFOUIsWUFBTWlLLElBQWM1QyxHQUFldEYsQ0FBTSxHQUduQ21KLEtBQWEsTUFDakIsSUFBSS9PLEVBQVlDLEdBQVc7QUFBQSxRQUN6QixRQUFBMkY7QUFBQSxRQUNBLE9BQUEvRjtBQUFBLFFBQ0EsTUFBQWdFO0FBQUEsUUFDQSxNQUFBN0U7QUFBQSxRQUNBLFVBQUF0QjtBQUFBLFFBQ0EsVUFBVXlDLEVBQVE7QUFBQTtBQUFBO0FBQUEsUUFHbEIsZUFBQXFPO0FBQUEsTUFDUixDQUFPO0FBSUgsTUFBSUMsS0FBa0JoTyxFQUFRWixDQUFLLE1BQ2pDQSxJQUFRQSxFQUFNLElBQUksQ0FBQUYsT0FBVUEsR0FBTzhPLENBQWMsQ0FBQztBQUtwRCxZQUFNTyxLQUFlbEIsS0FBQSxnQkFBQUEsRUFBYTtBQUNsQyxNQUFJa0IsT0FDRm5QLElBQVFtUCxHQUFhcEosR0FBUS9GLEdBQU9uQyxHQUFVc0ksQ0FBSyxJQUtqRDRFLE9BQ0YvSyxJQUFRK0ssR0FBUW1FLElBQVksSUFJNUJqQixLQUFBLFFBQUFBLEVBQWE7QUFBQSxNQUViZ0IsTUFBWSxNQUNaaFAsRUFBV2dQLENBQU8sS0FBS0EsRUFBUUMsR0FBVSxDQUFFLElBRTNDLE9BQU9QLEVBQWMzSyxDQUFJLElBRXpCMkssRUFBYzNLLENBQUksSUFBSWhFO0FBQUEsSUFFekI7QUFBQSxJQVNDTTtBQUFBLEVBQ0QsR0FFTTZGLEVBQU0sUUFBUUksR0FBY29JLEdBQWVyTyxDQUFPO0FBQzNEO0FBRU8sU0FBUzZOLEdBQ2RwSSxHQUNBNUcsR0FDQXRCLEdBQ0E4USxHQUNBUyxHQUNBQyxHQUNBL08sR0FDQTtBQUNBLFFBQU1nUCxJQUFvQixDQUFBckQsTUFBYztBQUN0QyxVQUFNc0QsSUFBYyxDQUFDMVIsR0FBVUMsTUFDN0JELEtBQVksT0FDUkQsRUFBZUMsR0FBVUMsQ0FBSyxJQUM5QjtBQUVOLFFBQUltTztBQUNGLGlCQUFXLENBQUNqSSxHQUFNd0wsQ0FBZSxLQUFLLE9BQU8sUUFBUXZELENBQVU7QUFDN0QsWUFBSSxDQUFDcUIsR0FBU2tDLENBQWU7QUFFM0IsVUFBQXJCO0FBQUEsWUFDRXFCO0FBQUEsWUFDQXJRO0FBQUEsWUFDQXRCO0FBQUEsWUFDQThRO0FBQUEsWUFDQVM7QUFBQSxZQUNBQztBQUFBLFlBQ0EvTztBQUFBLFVBQ0Q7QUFBQSxhQUNJO0FBQ0wsZ0JBQU1tUCxJQUFvQkYsRUFBWTFSLEdBQVVtRyxDQUFJLEdBRTlDMEwsSUFBYyxDQUFDclAsR0FBTXJCLElBQVEsU0FBUzs7QUFDMUMsa0JBQU0yUSxJQUNKM1EsTUFBVSxPQUNOdVEsRUFBWUUsR0FBbUJ6USxDQUFLLElBQ3BDeVEsR0FDQTlQLElBQVUsSUFBSVEsRUFBWUcsRUFBUSxXQUFXO0FBQUEsY0FDakQsUUFBUWtQO0FBQUEsY0FDUixNQUFNblA7QUFBQSxjQUNOLE9BQU9BO0FBQUEsY0FDUCxVQUFVc1A7QUFBQSxjQUNWLE9BQUEzUTtBQUFBLGNBQ0EsVUFBVXNCLEVBQVE7QUFBQSxZQUNoQyxDQUFhLEdBS0t1TCxRQUhKekssSUFBQWlLLEdBQWVtRSxDQUFlLE1BQTlCLGdCQUFBcE8sRUFBaUMsZ0NBQ2pDMEssSUFFcUIwRCxHQUFpQjdQLENBQU8sR0FDekNvTSxJQUFPbUIsR0FBMkJyQixJQUFPeEwsQ0FBSTtBQUNuRCxnQkFBSTBMLEdBQU07QUFDUixvQkFBTTZELEtBQWdCakIsSUFDbEJMLEdBQVVrQixHQUFpQm5QLEdBQU1DLENBQU8sSUFDeEM7QUFDSixxQkFBTzZOO0FBQUEsZ0JBQ0xwQztBQUFBLGdCQUNBMUw7QUFBQSxnQkFDQXNQO0FBQUEsZ0JBQ0FDO0FBQUEsZ0JBQ0FSO0FBQUEsZ0JBQ0FDO0FBQUEsZ0JBQ0EvTztBQUFBLGNBQ0Q7QUFBQTtBQUlELHFCQUFPLEVBQUUsR0FBR0QsRUFBTTtBQUFBLFVBRXJCO0FBRUQsVUFBQStPLEtBQUEsUUFBQUE7QUFBQSxZQUNFSTtBQUFBLFlBQ0FyUTtBQUFBLFlBQ0E2RTtBQUFBLFlBQ0F5TDtBQUFBLFlBQ0FkO0FBQUE7QUFHRixjQUFJM08sSUFBUTJPLElBQWdCQSxFQUFjM0ssQ0FBSSxJQUFJN0UsRUFBSzZFLENBQUk7QUFDM0QsVUFBSWhFLEtBQVMsUUFBUXdNLEdBQWNnRCxDQUFlLE1BRTVDNU8sRUFBUVosQ0FBSyxJQUVmQSxJQUFRMk8sSUFDSjNPLEVBQU0sSUFBSTBQLENBQVcsSUFDckIxUCxFQUFNLFFBQVEwUCxDQUFXLElBRTdCMVAsSUFBUTBQLEVBQVkxUCxDQUFLLEdBRXZCMk8sTUFDRkEsRUFBYzNLLENBQUksSUFBSWhFLEtBSTFCcVAsS0FBQSxRQUFBQTtBQUFBLFlBQ0VHO0FBQUEsWUFDQXJRO0FBQUEsWUFDQTZFO0FBQUEsWUFDQXlMO0FBQUEsWUFDQWQ7QUFBQTtBQUFBO0FBQUEsRUFLVDtBQUVELEVBQUFXLEVBQWtCdkosRUFBTyxVQUFVO0FBQ25DLGFBQVd3RyxLQUFPeEQsR0FBY2hELENBQU07QUFDcEMsSUFBQXVKLEVBQWtCL0MsRUFBSSxVQUFVO0FBRWxDLGFBQVduQixLQUFTRixHQUFnQm5GLENBQU07QUFDeEMsSUFBQXVKLEVBQWtCbEUsRUFBTSxVQUFVO0FBR3BDLFNBQU91RCxLQUFpQnhQO0FBQzFCO0FBRU8sU0FBUzBRLEdBQWdCbEgsR0FBUy9DLEdBQVU7QUFDakQsUUFBTWtDLElBQVcsQ0FBQ2dJLEdBQU9DLE1BQ2hCRCxFQUFNLFNBQVMsSUFDbEJBLEVBQU0sT0FBTyxDQUFDaFEsR0FBUUUsTUFBVTtBQUM5QixVQUFNK0YsSUFBU2dLLEVBQVMvUCxDQUFLO0FBQzdCLFdBQUkrRixNQUNGakcsRUFBT2lHLEVBQU8sSUFBSSxJQUNoQkEsS0FBVUgsSUFDTixFQUFFLEdBQUdBLEdBQVUsR0FBR0csRUFBUSxJQUMxQkEsSUFFRGpHO0FBQUEsRUFDUixHQUFFLEVBQUUsSUFDTDtBQUdOLFNBQU9jLEVBQVErSCxDQUFPLElBQ2xCYjtBQUFBLElBQVNhO0FBQUEsSUFBUyxDQUFBM0ksTUFDaEJ1SCxFQUFTdkgsQ0FBSyxJQUNWQSxJQUNBO0FBQUEsTUFDRSxNQUFNeUUsR0FBU3pFLEdBQU8sRUFBSztBQUFBLElBQzVCO0FBQUEsRUFDTixJQUNEdUgsRUFBU29CLENBQU8sSUFDZGI7QUFBQSxJQUNFLE9BQU8sUUFBUWEsQ0FBTztBQUFBLElBQ3RCLENBQUMsQ0FBQzNFLEdBQU1oRSxDQUFLLE1BQ1h1SCxFQUFTdkgsQ0FBSyxJQUNWO0FBQUEsTUFDRSxNQUFBZ0U7QUFBQSxNQUNBLEdBQUdoRTtBQUFBLElBQ0osSUFDRCtELEVBQVMvRCxDQUFLLElBQ1o7QUFBQSxNQUNFLE1BQUFnRTtBQUFBLE1BQ0EsT0FBT2hFO0FBQUEsSUFDUixJQUNEO0FBQUEsRUFDVCxJQUNEO0FBQ1I7QUFFTyxTQUFTZ1EsR0FBaUJDLEdBQVM7QUFDeEMsU0FBT0o7QUFBQSxJQUNMSTtBQUFBLElBQ0EsRUFBRSxNQUFNLFNBQVU7QUFBQTtBQUFBLEVBQ25CO0FBQ0g7QUFFQSxTQUFTQyxHQUFRQyxHQUFjO0FBQzdCLFNBQU81SSxFQUFTNEksQ0FBWSxJQUFJQSxFQUFhLE9BQU9BO0FBQ3REO0FBRU8sU0FBUzlFLEdBQWU4RSxHQUFjO0FBQzNDLFNBQU8zSCxHQUFpQjBILEdBQVFDLENBQVksR0FBRyxFQUFJLEtBQUs7QUFDMUQ7QUFFTyxTQUFTQyxHQUFjRCxHQUFjOztBQUMxQyxXQUNFakwsS0FBQTlELElBQUFpSyxHQUFlOEUsQ0FBWSxNQUEzQixnQkFBQS9PLEVBQThCLGtCQUE5QixnQkFBQThELEVBQUEsS0FBQTlELEdBQThDOE8sR0FBUUMsQ0FBWSxPQUNsRTtBQUVKO0FBRU8sU0FBU0UsR0FBY3RLLEdBQVFsSSxJQUFXLE1BQU15UyxJQUFlLE1BQU07QUFDMUUsU0FBT3ZLLElBQ0g7QUFBQSxJQUNFLFFBQUFBO0FBQUE7QUFBQTtBQUFBLElBR0EsVUFDRWxJLEtBQVksUUFBUWtJLEVBQU8sT0FDdkJuSSxFQUFlQyxHQUFVa0ksRUFBTyxJQUFJLElBQ3BDbEk7QUFBQSxJQUNOLGNBQUF5UztBQUFBLEVBQ0QsSUFDRDtBQUNOO0FBRU8sU0FBU0MsR0FDZEMsR0FDQTNTLElBQVcsTUFDWHlTLElBQWUsTUFDZkcsSUFBZSxDQUFFLEdBQ2pCO0FBQ0EsTUFBSUQ7QUFDRixlQUFXLENBQUM1USxHQUFLbUcsQ0FBTSxLQUFLLE9BQU8sUUFBUXlLLENBQVksR0FBRztBQUN4RCxZQUFNclAsSUFBUWtQO0FBQUEsUUFDWnRLO0FBQUEsUUFDQWxJLEtBQVksT0FBT0QsRUFBZUMsR0FBVStCLENBQUcsSUFBSTtBQUFBLFFBQ25EMFE7QUFBQSxNQUNEO0FBQ0QsTUFBSW5QLEtBQ0ZzUCxFQUFhLEtBQUt0UCxDQUFLO0FBQUE7QUFJN0IsU0FBT3NQO0FBQ1Q7QUFFTyxTQUFTMUgsR0FBY2hELEdBQVE7QUFDcEMsU0FBT0EsS0FBQSxRQUFBQSxFQUFRLE9BQU8sT0FBTyxPQUFPQSxFQUFPLElBQUksSUFBSSxDQUFFO0FBQ3ZEO0FBRU8sU0FBU21GLEdBQWdCbkYsR0FBUTtBQUN0QyxTQUFPQSxLQUFBLFFBQUFBLEVBQVEsU0FBUyxPQUFPLE9BQU9BLEVBQU8sTUFBTSxJQUFJLENBQUU7QUFDM0Q7QUFFTyxTQUFTMkssR0FDZC9GLEdBQ0E1RSxHQUNBbEksSUFBVyxNQUNYdUMsSUFBWSxNQUNaa1EsSUFBZSxNQUNmOztBQUNBLFFBQU1LLEtBQWN6TCxLQUFBOUQsSUFBQWlLLEdBQWV0RixDQUFNLE1BQXJCLGdCQUFBM0UsRUFBd0IsbUJBQXhCLGdCQUFBOEQsRUFBQTtBQUFBLElBQUE5RDtBQUFBLElBQ2xCdUo7QUFBQSxJQUNBNUU7QUFBQSxJQUNBbEk7QUFBQSxJQUNBdUM7QUFBQSxLQUVJcVEsSUFBZUUsSUFDakIsQ0FBQ04sR0FBY00sR0FBYTlTLEdBQVV5UyxDQUFZLENBQUMsSUFDbkQsQ0FBRTtBQUdOLFNBQUFDLEdBQWdCeEssS0FBQSxnQkFBQUEsRUFBUSxRQUFRbEksR0FBVXlTLEdBQWNHLENBQVksR0FDN0RBO0FBQ1Q7QUFFTyxTQUFTRyxHQUFlVCxHQUFjO0FBQzNDLFNBQU9DLEdBQWNELENBQVksTUFBTTtBQUN6QztBQUVPLFNBQVNVLEdBQWFWLEdBQWM7QUFDekMsU0FBT0MsR0FBY0QsQ0FBWSxNQUFNO0FBQ3pDO0FBRU8sU0FBUzNLLEdBQVVlLEdBQWNsRyxHQUFNO0FBQzVDLFFBQU1mLElBQUtlLEVBQUtrRyxFQUFhLFNBQVMsSUFBSTtBQUMxQyxTQUFPakgsS0FBTSxPQUFPLE9BQU9BLENBQUUsSUFBSTtBQUNuQztBQUVPLFNBQVN3UixHQUFXdkssR0FBY2xHLEdBQU07QUFLN0MsU0FBT2tGLEdBQU9sRixHQUFNLENBQUFBLE1BQVFtRixHQUFVZSxHQUFjbEcsQ0FBSSxDQUFDO0FBQzNEO0FDampDTyxTQUFTMFEsR0FBWWhMLEdBQVE7QUFDbEMsU0FBTyxDQUFDLENBQUNpTCxHQUFZakwsRUFBTyxRQUFRO0FBQ3RDO0FBRU8sU0FBU2lMLEdBQVl4USxHQUFVb0YsSUFBVyxJQUFJOztBQUNuRCxRQUFNLEVBQUUsUUFBQXFMLEdBQVEsR0FBR0MsRUFBSSxJQUFLdEw7QUFDNUIsU0FBQXBGLElBQVcrRyxFQUFTL0csQ0FBUSxJQUN4QixFQUFFLEdBQUcwUSxHQUFNLEdBQUcxUSxFQUFVLElBQ3hCdUQsRUFBU3ZELENBQVEsSUFDZixFQUFFLEdBQUcwUSxHQUFNLE1BQU0xUSxFQUFVLElBQzNCLE1BSUpBLEtBQ0F5USxNQUFXLFVBQ1h6USxFQUFTLFdBQVcsVUFDcEIsR0FBQ1ksSUFBQVosRUFBUyxTQUFULFFBQUFZLEVBQWUsV0FBVyxVQUUzQlosRUFBUyxTQUFTeVEsR0FDYnpRLEVBQVMsU0FDWkEsRUFBUyxPQUFPLE9BR2JBO0FBQ1Q7QUFFTyxTQUFTMlEsR0FBa0I3UixHQUFJa0IsR0FBVTtBQUM5QyxTQUFPbEIsS0FBTSxTQUFRa0IsS0FBQSxnQkFBQUEsRUFBVSxVQUFTLGVBQ3BDO0FBQUEsSUFDRSxNQUFNO0FBQUEsSUFDTixHQUFHNFE7QUFBQSxNQUNENVE7QUFBQSxNQUNBLENBQUNSLEdBQU9KLE1BQVEsQ0FBQyxVQUFVLFFBQVEsUUFBUSxFQUFFLFNBQVNBLENBQUc7QUFBQSxJQUMxRDtBQUFBLElBQ0QsSUFBSSxHQUFHTjtBQUFBLEVBQ1IsSUFDRDtBQUNOO0FDbkJBLE1BQWVrTCxLQUFBO0FBQUEsRUFDYixRQUFRLENBQUMvSixFQUFZO0FBQUEsRUFFckIsUUFBUTtBQUFBLElBQ047QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQ1IsVUFBTTRRLElBQU8sTUFBTTtBQUNuQixXQUFPLEtBQUssZUFDUjtBQUFBLE1BQ0Usa0JBQWtCQTtBQUFBLE1BQ2xCLGdCQUFnQkE7QUFBQSxJQUNqQixJQUNEO0FBQUEsTUFDRSxrQkFBa0JBO0FBQUEsSUFDbkI7QUFBQSxFQUNOO0FBQUEsRUFFRCxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsVUFBQTNUO0FBQUEsTUFDQSxXQUFXO0FBQUEsTUFDWCxXQUFXO0FBQUE7QUFBQSxJQUNaO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsZUFBZTtBQUViLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxlQUFlOztBQUNiLGNBQU8wRCxJQUFBLEtBQUssU0FBTCxnQkFBQUEsRUFBVztBQUFBLElBQ25CO0FBQUEsSUFFRCxPQUFPO0FBQ0wsYUFBTzFELEdBQVM7QUFBQSxJQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS0QsUUFBUTtBQUNOLGFBQU8sS0FBSyxPQUFRO0FBQUEsSUFDckI7QUFBQSxJQUVELFFBQVE7QUFDTixhQUFPLEtBQUssT0FBUTtBQUFBLElBQ3JCO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUFPME0sR0FBYSxLQUFLLEtBQUs7QUFBQSxJQUMvQjtBQUFBLElBRUQsY0FBYztBQUNaLGFBQU8sS0FBSyxhQUFjO0FBQUEsSUFDM0I7QUFBQSxJQUVELFNBQVM7QUFDUCxhQUFPLEtBQUssSUFBSTtBQUFBLElBQ2pCO0FBQUEsSUFFRCxVQUFVO0FBQ1IsYUFBTyxJQUFJakssRUFBWSxNQUFNLEVBQUUsUUFBUSxHQUFLLENBQUU7QUFBQSxJQUMvQztBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLElBQ3pCO0FBQUE7QUFBQTtBQUFBLElBSUQsa0JBQWtCO0FBQ2hCLGFBQU8sS0FBSyxpQkFBa0I7QUFBQSxJQUMvQjtBQUFBLElBRUQsa0JBQWtCO0FBQ2hCLGFBQU8sS0FBSyxpQkFBa0I7QUFBQSxJQUMvQjtBQUFBLElBRUQsaUJBQWlCO0FBQ2YsYUFBTyxLQUFLLGdCQUFpQjtBQUFBLElBQzlCO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxZQUFNQyxJQUFZLEtBQUs7QUFDdkIsYUFBT0EsS0FBQSxRQUFBQSxFQUFXLFNBQVNBLElBQVk7QUFBQSxJQUN4QztBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsWUFBTUEsSUFBWSxLQUFLO0FBQ3ZCLGFBQU9BLEtBQUEsUUFBQUEsRUFBVyxTQUFTQSxJQUFZO0FBQUEsSUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtELGdCQUFnQjtBQUNkLGFBQU8sS0FBSyxlQUFlLE9BQU8sS0FBSyxlQUFnQjtBQUFBLElBQ3hEO0FBQUEsSUFFRCxrQkFBa0I7QUFDaEIsYUFBTyxLQUFLLGlCQUFrQjtBQUFBLElBQy9CO0FBQUEsSUFFRCxvQkFBb0I7QUFDbEIsYUFBTyxLQUFLLG1CQUFvQjtBQUFBLElBQ2pDO0FBQUEsSUFFRCxrQkFBa0I7QUFDaEIsYUFBTyxLQUFLLGlCQUFrQjtBQUFBLElBQy9CO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUFPLEtBQUssZ0JBQWlCO0FBQUEsSUFDOUI7QUFBQSxJQUVELGVBQWU7QUFDYixhQUFPLEtBQUssY0FBZTtBQUFBLElBQzVCO0FBQUEsSUFFRCx3QkFBd0I7O0FBQ3RCLGNBQU9nQixJQUFBLEtBQUssb0JBQUwsZ0JBQUFBLEVBQXNCLGdCQUFnQjtBQUFBLElBQzlDO0FBQUEsSUFFRCx1QkFBdUI7O0FBQ3JCLGNBQU9BLElBQUEsS0FBSyxtQkFBTCxnQkFBQUEsRUFBcUIsZ0JBQWdCO0FBQUEsSUFDN0M7QUFBQSxJQUVELHNCQUFzQjs7QUFDcEIsY0FBT0EsSUFBQSxLQUFLLGtCQUFMLGdCQUFBQSxFQUFvQixnQkFBZ0I7QUFBQSxJQUM1QztBQUFBO0FBQUE7QUFBQSxJQUlELFdBQVc7O0FBQ1QsY0FBT0EsSUFBQSxLQUFLLGtCQUFMLGdCQUFBQSxFQUFvQjtBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVTtBQUNSLFNBQUssWUFBWTtBQUFBLEVBQ2xCO0FBQUEsRUFFRCxlQUFlO0FBQ2IsVUFBTWtFLElBQU1nTTtBQUNaLFdBQU8sZUFBZSxNQUFNLFFBQVEsRUFBRSxLQUFLLE1BQU1oTSxHQUFLO0FBQUEsRUFDdkQ7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLFVBQUFpTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVVBLFNBQVMzUixHQUFLO0FBQ1osYUFBTyxLQUFLLE1BQU1BLENBQUc7QUFBQSxJQUN0QjtBQUFBLElBRUQsU0FBU0EsR0FBS0ksR0FBTztBQUNuQixrQkFBSyxNQUFNSixDQUFHLElBQUlJLEdBQ1hBO0FBQUEsSUFDUjtBQUFBLElBRUQsWUFBWUosR0FBSztBQUNmLGFBQU8sS0FBSyxNQUFNQSxDQUFHO0FBQUEsSUFDdEI7QUFBQSxJQUVELG1CQUFtQlosR0FBTzs7QUFDeEIsY0FBT29DLElBQUEsS0FBSyxNQUFNLGlCQUFYLGdCQUFBQSxFQUEwQnBDO0FBQUEsSUFDbEM7QUFBQSxJQUVELG1CQUFtQkEsR0FBT1ksR0FBSzs7QUFDN0IsT0FBQXdCLElBQUEsS0FBSyxPQUFNLGlCQUFYQSxFQUFXLGVBQWlCLENBQUUsSUFDOUIsS0FBSyxNQUFNLGFBQWFwQyxDQUFLLElBQUlZO0FBQUEsSUFDbEM7QUFBQSxJQUVELGNBQWNBLEdBQUtaLEdBQU87QUFDeEIsVUFBSXdTLElBQVEsS0FBSyxTQUFTNVIsQ0FBRztBQUM3QixVQUFJLENBQUM0UixLQUFTeFMsS0FBUyxNQUFNO0FBSTNCLGNBQU15UyxJQUFTLEtBQUssbUJBQW1CelMsQ0FBSztBQUM1QyxRQUFBd1MsSUFBUSxLQUFLLFNBQVNDLENBQU0sR0FDeEJELE1BQ0YsS0FBSyxTQUFTNVIsR0FBSzRSLENBQUssR0FDeEIsS0FBSyxZQUFZQyxDQUFNO0FBQUE7QUFHM0IsYUFBS0QsTUFDSEEsSUFBUSxLQUFLLFNBQVM1UixHQUFLakMsR0FBUyxDQUFFLENBQUEsQ0FBQyxHQUNuQ3FCLEtBQVMsUUFDWCxLQUFLLG1CQUFtQkEsR0FBT1ksQ0FBRyxJQUcvQjRSO0FBQUEsSUFDUjtBQUFBLElBRUQsaUJBQWlCNVIsR0FBS1osR0FBTztBQUczQixXQUFLLGNBQWNZLEdBQUtaLENBQUssR0FDN0IsS0FBSyxZQUFZWSxDQUFHO0FBQUEsSUFDckI7QUFBQSxJQUVELGVBQ0VnRSxHQUNBO0FBQUEsTUFDRSxNQUFBQztBQUFBLE1BQ0EsU0FBU0M7QUFBQSxNQUNULFFBQUFpQyxJQUFTLEtBQUs7QUFBQSxNQUNkLFNBQUFwRyxJQUFVLEtBQUs7QUFBQSxNQUNmLFVBQUFnQixJQUFXO0FBQUEsSUFDbkIsSUFBVSxDQUFFLEdBQ047QUFDQSxhQUFPZ04sR0FBZS9KLEdBQWU7QUFBQSxRQUNuQyxNQUFBQztBQUFBLFFBQ0EsUUFBQWtDO0FBQUEsUUFDQSxTQUFBcEc7QUFBQSxRQUNBLFVBQUFnQjtBQUFBLFFBQ0EsU0FBU1YsRUFBVzZELENBQUcsSUFBSSxNQUFNQSxFQUFJLEtBQUssSUFBSSxJQUFJQTtBQUFBLE1BQzFELENBQU87QUFBQSxJQUNGO0FBQUEsSUFFRCxTQUFTaUMsR0FBUS9CLEdBQU07QUFDckIsYUFBTytCLElBQ0gsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLFFBQVEsUUFBQUEsR0FBUSxLQUNyRHdMLEdBQVN2TixLQUFRK0IsRUFBTyxJQUFJLElBQzVCd0wsR0FBU3ZOLENBQUksS0FBSztBQUFBLElBQ3ZCO0FBQUEsSUFFRCxvQkFBb0IwTixHQUFNO0FBQ3hCLGFBQU87QUFBQSxRQUNMLE9BQU8sZUFBZUE7QUFBQSxRQUN0QixPQUFPSCxHQUFTRyxDQUFJO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQUE7QUFBQSxJQUdELGFBQWFDLEdBQU87QUFDbEIsYUFBTztBQUFBLFFBQ0wsT0FBQUE7QUFBQTtBQUFBLFFBRUEsTUFBTSxLQUFLLE9BQU87QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFBQSxJQUVELG1CQUFtQjVMLElBQVMsTUFBTTtBQUNoQyxhQUFPOEgsR0FBbUI5SCxHQUFRLEtBQUssT0FBTztBQUFBLElBQy9DO0FBQUEsSUFFRCxpQkFBaUJBLElBQVMsTUFBTTtBQUM5QixhQUFPLEtBQUssZUFBZSxXQUFXO0FBQUEsUUFDcEMsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsUUFBQUE7QUFBQSxNQUNSLENBQU87QUFBQSxJQUNGO0FBQUEsSUFFRCxvQkFBb0JBLElBQVMsTUFBTTtBQUNqQyxhQUFPLEtBQUssZUFBZSxZQUFZO0FBQUEsUUFDckMsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsUUFBQUE7QUFBQSxNQUNSLENBQU87QUFBQSxJQUNGO0FBQUEsSUFFRCxnQkFBZ0J2RixHQUFVOztBQUN4QixhQUFBQSxJQUFXd1EsR0FBWXhRLENBQVEsR0FHM0JBLEVBQVMsV0FBVyxXQUN0QkEsRUFBUyxVQUFTWSxJQUFBLEtBQUssa0JBQUwsZ0JBQUFBLEVBQW9CLFdBRWpDLEtBQUssSUFBSSxVQUFVLElBQUk0UCxHQUFZeFEsQ0FBUSxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUVELGVBQWVBLEdBQVU7QUFDdkIsWUFBTXFDLElBQU0sS0FBSyxnQkFBZ0JyQyxDQUFRO0FBQ3pDLGFBQU9xQyxJQUFNLEtBQUssSUFBSSxVQUFVLEVBQUUsS0FBQUEsR0FBSyxPQUFPckMsRUFBUyxNQUFPLENBQUEsSUFBSTtBQUFBLElBQ25FO0FBQUEsSUFFRCxNQUFNLFlBQVksRUFBRSxRQUFBb1IsR0FBUSxLQUFBL08sR0FBSyxVQUFBckMsR0FBVSxPQUFBbVIsR0FBTyxNQUFBeFMsR0FBTSxVQUFBc0gsS0FBWTtBQUNsRSxNQUFBNUQsVUFBUSxLQUFLLGdCQUFnQnJDLENBQVEsSUFDckNvUixVQUFXcFIsS0FBQSxnQkFBQUEsRUFBVTtBQUNyQixZQUFNcVIsSUFBWSxDQUFDcEwsS0FBWSxLQUFLLElBQUksU0FBUzVELENBQUc7QUFDcEQsTUFBSWdQLEtBQ0YsTUFBTSxLQUFLLGNBQWMsV0FBWTtBQUV2QyxZQUFNQyxJQUFXLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxRQUFBRixHQUFRLEtBQUEvTyxHQUFLLE1BQUExRCxHQUFNLE9BQUF3UyxHQUFPO0FBRXBFLGFBQ0VFLEtBQ0FELE1BQVcsV0FDWEcsR0FBT3ZSLEdBQVUyUSxHQUFrQixLQUFLLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEtBRWhFLE1BQU0sS0FBSyxjQUFjLFVBQVcsR0FFL0JXO0FBQUEsSUFDUjtBQUFBLElBRUQsV0FBVyxFQUFFLFlBQUE3RixHQUFZLFNBQUFnRSxHQUFTLE1BQUE5USxHQUFNLFVBQUF5RCxFQUFRLEdBQUk7QUFDbEQsYUFBTyxLQUFLLGNBQWMsV0FBVztBQUFBLFFBQ25DLFlBQUFxSjtBQUFBLFFBQ0EsU0FBQWdFO0FBQUEsUUFDQSxNQUFBOVE7QUFBQSxRQUNBLFVBQUF5RDtBQUFBLE1BQ1IsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUVELFFBQVEsRUFBRSxPQUFBb1AsR0FBTyxHQUFHMVIsS0FBVztBQUs3QixZQUFNMlIsSUFDSkQsS0FDQTtBQUFBLFFBQ0UsUUFBUSxLQUFLO0FBQUEsUUFDYixPQUFPLEtBQUs7QUFBQSxNQUNiLEVBQUNBLENBQUssR0FFSEUsSUFBWUQsS0FBQSxnQkFBQUEsRUFBYSxXQUV6QkUsSUFDSkQsS0FDQSxHQUNFNVIsRUFBUSxVQUFVLFNBRWxCQSxFQUFRO0FBQUE7QUFBQSxNQUlSLEtBQUssVUFBVUEsRUFBUSxTQUFTQSxFQUFRLFVBQVUsRUFBRSxLQUVwRCxLQUFLLFVBQVVBLEVBQVEsUUFBUSxFQUFFO0FBR3JDLFVBQUk0UixLQUFjQyxLQUFZRDtBQUM1QixlQUFPQSxFQUFVQyxDQUFRO0FBSTNCLFlBQU16USxJQUFNLEtBQUssWUFBWXBCLENBQU8sRUFDakMsS0FBSyxDQUFBd1IsTUFBWUEsRUFBUyxJQUFJLEVBQzlCLE1BQU0sQ0FBQW5RLE1BQVM7O0FBRWQsY0FBTXhDLEtBQU9pQyxJQUFBTyxFQUFNLGFBQU4sZ0JBQUFQLEVBQWdCO0FBQzdCLGNBQU1qQyxJQUNGLE9BQU8sT0FBTyxJQUFJLE1BQU1BLEVBQUssT0FBTyxHQUFHQSxDQUFJLElBQzNDd0M7QUFBQSxNQUNkLENBQVM7QUFDSCxhQUFJdVEsTUFDRkEsRUFBVUMsQ0FBUSxJQUFJelEsSUFFakJBO0FBQUEsSUFDUjtBQUFBLElBRUQsT0FBTzFCLEdBQU87QUFBQSxNQUNaLFFBQUFvUyxJQUFTLEtBQUssSUFBSTtBQUFBLE1BQ2xCLFVBQUF4TSxJQUFXLEtBQUssSUFBSTtBQUFBLE1BQ3BCLEdBQUd0RjtBQUFBLElBQ0osSUFBRyxJQUFJO0FBQ04sYUFBTzhELEdBQU9wRSxHQUFPO0FBQUEsUUFDbkIsUUFBQW9TO0FBQUEsUUFDQSxVQUFBeE07QUFBQSxRQUNBLEdBQUd0RjtBQUFBLE1BQ1gsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUVELE1BQU0sU0FBU0MsR0FBVTtBQUN2QixhQUFPLEtBQUssUUFBUSxLQUFLQSxDQUFRO0FBQUEsSUFDbEM7QUFBQSxJQUVELFNBQVNELElBQVUsSUFBSTs7QUFDckIsTUFBSXlELEVBQVN6RCxDQUFPLE1BQ2xCQSxJQUFVLEVBQUUsS0FBS0EsRUFBUztBQUc1QixZQUFNdU8sSUFBSSxTQUFTLGNBQWMsR0FBRztBQUNwQyxNQUFBQSxFQUFFLFFBQU96TixJQUFBZCxFQUFRLFFBQVIsUUFBQWMsRUFBYSxXQUFXLFdBQzdCZCxFQUFRLE1BQ1IsS0FBSyxJQUFJLFVBQVVBLENBQU8sR0FDOUJ1TyxFQUFFLFdBQVd2TyxFQUFRLFlBQVk7QUFDakMsWUFBTSxFQUFFLE1BQUErUixFQUFJLElBQUs7QUFDakIsTUFBQUEsRUFBSyxZQUFZeEQsQ0FBQyxHQUNsQkEsRUFBRSxNQUFPLEdBQ1R3RCxFQUFLLFlBQVl4RCxDQUFDO0FBQUEsSUFDbkI7QUFBQSxJQUVELE9BQU92TyxHQUFTO0FBQ2QsV0FBSyxjQUFjLE9BQU9BLENBQU87QUFBQSxJQUNsQztBQUFBLElBRUQscUJBQXFCO0FBQ25CLFdBQUssY0FBYyxtQkFBb0I7QUFBQSxJQUN4QztBQUFBLElBRUQsb0JBQW9CO0FBQ2xCLFdBQUssYUFBYyxHQUNuQixLQUFLLGNBQWUsR0FDcEIsS0FBSyxZQUFhO0FBQUEsSUFDbkI7QUFBQSxJQUVELGVBQWU7QUFDYixpQkFBVyxDQUFDVixHQUFLSSxDQUFLLEtBQUssT0FBTyxRQUFRLEtBQUssT0FBTyxXQUFXLENBQUEsQ0FBRTtBQUNqRSxRQUFJQyxFQUFXRCxDQUFLLElBQ2xCLEtBQUtKLENBQUcsSUFBSUksSUFFWixRQUFRLE1BQU0sOEJBQThCSixNQUFRSSxHQUFPO0FBQUEsSUFHaEU7QUFBQSxJQUVELGdCQUFnQjtBQUNkLFlBQU1zUyxJQUFzQixDQUFDLEVBQUUsS0FBQTVTLEdBQUssS0FBQVEsRUFBRyxNQUFPO0FBQzVDLGNBQU1xUyxJQUFTQyxHQUFTLE1BQU05UyxFQUFJLEtBQUssSUFBSSxDQUFDO0FBQzVDLGVBQU87QUFBQSxVQUNMLEtBQUssTUFBTTZTLEVBQU87QUFBQSxVQUNsQixLQUFLclMsSUFBTSxDQUFBRixNQUFTRSxFQUFJLEtBQUssTUFBTUYsQ0FBSyxJQUFJO0FBQUEsUUFDN0M7QUFBQSxNQUNGO0FBRUQsaUJBQVcsQ0FBQ0osR0FBS1MsQ0FBSSxLQUFLLE9BQU8sUUFBUSxLQUFLLE9BQU8sWUFBWSxDQUFBLENBQUUsR0FBRztBQUNwRSxjQUFNb1MsSUFBV3hTLEVBQVdJLENBQUksSUFDNUJpUyxFQUFvQixFQUFFLEtBQUtqUyxHQUFNLElBQ2pDa0gsRUFBU2xILENBQUksS0FBS0osRUFBV0ksRUFBSyxHQUFHLElBQ25DaVMsRUFBb0JqUyxDQUFJLElBQ3hCO0FBQ04sUUFBSW9TLElBQ0YsT0FBTyxlQUFlLE1BQU03UyxHQUFLNlMsQ0FBUSxJQUV6QyxRQUFRO0FBQUEsVUFDTix5Q0FBeUM3UyxNQUFRUztBQUFBLFFBQ2xEO0FBQUE7QUFBQSxJQUdOO0FBQUEsSUFFRCxjQUFjO0FBQ1osWUFBTSxFQUFFLE9BQUFxUyxHQUFPLFFBQUFsTyxFQUFRLElBQUcsS0FBSztBQUMvQixVQUFJa08sR0FBTztBQUNULGNBQU1DLElBQVcxUyxFQUFXeVMsQ0FBSyxJQUFJQSxFQUFNLEtBQUssSUFBSSxJQUFJQTtBQUN4RCxRQUFJbkwsRUFBU29MLENBQVEsS0FHbkIsS0FBSyxVQUFVLE1BQU07QUFDbkIscUJBQVcsQ0FBQy9TLEdBQUtlLENBQVEsS0FBSyxPQUFPLFFBQVFnUyxDQUFRLEdBQUc7QUFFdEQsa0JBQU1DLElBQU8sS0FBSyxnQkFBZ0IsbUJBQW1CaFQsQ0FBRyxJQUNwRCxRQUFRQSxNQUNSQTtBQUNKLGlCQUFLLE9BQU9nVCxHQUFNalMsQ0FBUTtBQUFBO0FBQUEsUUFFeEMsQ0FBVztBQUFBO0FBSUwsWUFBTWtTLElBQVcsQ0FBQ2pULEdBQUtjLEdBQU9DLE1BQWE7QUFDekMsUUFBSVYsRUFBV1UsQ0FBUSxJQUNyQixLQUFLLEdBQUdtUyxHQUFVcFMsQ0FBSyxHQUFHQyxDQUFRLElBRWxDLFFBQVEsTUFBTSw2QkFBNkJmLE1BQVFlLEdBQVU7QUFBQSxNQUVoRTtBQUVELFVBQUk2RDtBQUNGLG1CQUFXLENBQUM1RSxHQUFLSSxDQUFLLEtBQUssT0FBTyxRQUFRd0UsQ0FBTTtBQUM5QyxVQUFBcU8sRUFBU2pULEdBQUtBLEdBQUtJLENBQUs7QUFNNUIsaUJBQVcsQ0FBQ0osR0FBS0ksQ0FBSyxLQUFLLE9BQU8sUUFBUSxLQUFLLE1BQU07QUFDbkQsUUFBSSxXQUFXLEtBQUtKLENBQUcsS0FDckJpVCxFQUFTalQsR0FBS0EsRUFBSSxNQUFNLENBQUMsR0FBR0ksQ0FBSztBQUFBLElBR3RDO0FBQUEsSUFFRCxNQUFNLFVBQVVVLEdBQU87QUFBQSxNQUNyQixTQUFBZixJQUFVO0FBQUEsTUFDVixRQUFBc1IsSUFBUztBQUFBLElBQ1YsSUFBRyxJQUFJO0FBQ04sWUFBTThCLElBQWUsS0FBSyxhQUFhclMsQ0FBSyxHQUN0Q3NTLElBQXFCL0IsS0FBQSxnQkFBQUEsRUFBUSxhQUFhdlE7QUFDaEQsVUFBSXFTLEtBQWdCQyxHQUFvQjtBQUt0QyxRQUFJLENBQUMsUUFBUSxRQUFRLEVBQUUsU0FBU3RTLENBQUssS0FDbkMsTUFBTSxLQUFLLFVBQVc7QUFHeEIsY0FBTXdPLElBQWEsTUFBT3ZQLElBQVVRLEVBQVksSUFBSSxNQUFNUixDQUFPLEdBQzNEK0IsSUFBTXFSLElBQ1IsTUFBTSxLQUFLLEtBQUtyUyxHQUFPd08sRUFBVSxDQUFFLElBQ25DO0FBRUosZUFBSThELEtBQXNCdFIsTUFBUSxNQUNoQ3VQLEVBQU8sS0FBS3ZRLEdBQU93TyxHQUFZLEdBRTFCeE47QUFBQTtBQUFBLElBRVY7QUFBQSxJQUVELGdCQUFnQmhCLEdBQU91UyxHQUFRO0FBQzdCLGFBQU8sS0FBSyxnQkFBZ0IsVUFBVXZTLEdBQU91UyxDQUFNO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBQ0g7QUFFQSxJQUFJM0IsS0FBVTtBQ3ZpQlAsU0FBUzRCLEdBQXFCNVMsR0FBUztBQUM1QyxRQUFNLEVBQUUsUUFBQTZTLEVBQU0sSUFBSzdTO0FBQ25CLFNBQU82UyxLQUFVN1MsRUFBUSxVQUNyQjhTO0FBQUEsSUFDRSxFQUFFLEdBQUc5UyxFQUFTO0FBQUEsSUFDZEE7QUFBQSxFQUNELElBQ0RBO0FBQ047QUFFTyxTQUFTOFMsR0FBYUMsR0FBSUMsR0FBTTtBQUlyQyxNQUhJQSxFQUFLLFdBQ1BGLEdBQWFDLEdBQUlDLEVBQUssT0FBTyxHQUUzQkEsRUFBSztBQUNQLGVBQVdDLEtBQVNELEVBQUs7QUFDdkIsTUFBQUYsR0FBYUMsR0FBSUUsQ0FBSztBQUcxQixhQUFXM1QsS0FBTzRUO0FBQ2hCLElBQUk1VCxLQUFPMFQsTUFDVEQsRUFBR3pULENBQUcsSUFBSTBULEVBQUsxVCxDQUFHO0FBR3RCLFNBQU95VDtBQUNUO0FBRUEsTUFBTUcsS0FBaUI7QUFBQSxFQUNyQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQSxFQUdBO0FBQUEsRUFDQTtBQUNGLEdDNUNNdkgsS0FBYSxDQUFFLEdBR053SCxJQUFBO0FBQUEsRUFDYixRQUFRLENBQUNqSixFQUFTO0FBQUE7QUFBQSxFQUVwQixZQUFFeUI7QUFBQUEsRUFFQSxVQUFVakksR0FBTTBQLEdBQVk7QUFXMUIsUUFWSUEsTUFDRTVTLEdBQWM0UyxDQUFVLE1BQzFCQSxJQUFhUixHQUFxQjtBQUFBLE1BQ2hDLFNBQVM7QUFBQSxNQUNULE1BQUFsUDtBQUFBLE1BQ0EsR0FBRzBQO0FBQUEsSUFDYixDQUFTLElBRUh6SCxHQUFXakksQ0FBSSxJQUFJMFAsSUFFakIsRUFBRTFQLEtBQVFpSTtBQUNaLFlBQU0sSUFBSSxNQUFNLGNBQWNqSSxtQkFBc0I7QUFFdEQsV0FBT2lJLEdBQVdqSSxDQUFJO0FBQUEsRUFDdkI7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGtCQUFBd0U7QUFBQSxFQUNEO0FBQ0g7QUNqQ08sU0FBU21MLEdBQWFDLEdBQU07QUFDakMsU0FBTztBQUFBLElBQ0wsT0FBTUEsS0FBQSxnQkFBQUEsRUFBTSxrQkFBaUI7QUFBQSxJQUM3QixRQUFPQSxLQUFBLGdCQUFBQSxFQUFNLGVBQWM7QUFBQSxJQUMzQixNQUFLQSxLQUFBLGdCQUFBQSxFQUFNLGNBQWE7QUFBQSxJQUN4QixPQUFNQSxLQUFBLGdCQUFBQSxFQUFNLGVBQWM7QUFBQSxJQUMxQixTQUFRQSxLQUFBLGdCQUFBQSxFQUFNLGlCQUFnQjtBQUFBLElBQzlCLFNBQVFBLEtBQUEsZ0JBQUFBLEVBQU0saUJBQWdCO0FBQUEsSUFDOUIsY0FBYUEsS0FBQSxnQkFBQUEsRUFBTSxzQkFBcUI7QUFBQSxFQUN6QztBQUNIO0FBRU8sU0FBU0MsR0FBVUQsR0FBTUUsSUFBWSxJQUFJO0FBQzlDLFNBQU8sSUFBSSxLQUFLLEdBQUcsT0FBTyxPQUFPLEVBQUUsR0FBR0gsR0FBYUMsQ0FBSSxHQUFHLEdBQUdFLEVBQVMsQ0FBRSxDQUFDO0FBQzNFO0FBRU8sU0FBU0MsR0FBVUMsR0FBUTtBQUFBLEVBQ2hDLFFBQUE1QixJQUFTO0FBQUEsRUFDVCxNQUFBd0IsSUFBTztBQUFBLEVBQ1AsTUFBQUssSUFBTztBQUNULElBQUksSUFBSTtBQUNOLFFBQU1DLElBQWNELElBQU8sT0FBTztBQUNsQyxNQUFJO0FBQUEsSUFDRkU7QUFBQSxJQUNBQztBQUFBLElBQ0FDO0FBQUEsSUFDQUM7QUFBQSxJQUNBQztBQUFBLElBQ0o7QUFBQSxJQUNJQyxJQUFPTjtBQUFBLElBQ1g7QUFBQSxJQUNJTyxJQUFTUDtBQUFBLElBQ2I7QUFBQSxJQUNJUSxJQUFTUjtBQUFBLElBQ2I7QUFBQSxJQUNJUyxJQUFjVDtBQUFBLEVBQ2YsSUFBR1UsR0FBYVosR0FBUSxFQUFFLE1BQUFKLEdBQU0sTUFBQUssRUFBSSxDQUFFO0FBQ3ZDLE1BQUlNLEtBQVFBLEVBQUssVUFBVSxHQUFHO0FBQzVCLElBQUluQyxNQUFXLFdBQVdnQyxNQUFTLE9BQU9FLE1BQVMsUUFFaEQsQ0FBQ0gsR0FBS0UsQ0FBSyxJQUFJLENBQUNBLEdBQU9GLENBQUcsSUFFN0JFLElBQVFRLEdBQWNSLEdBQU8sRUFBRSxRQUFBakMsRUFBTSxDQUFFO0FBQ3ZDLFVBQU0wQyxJQUFrQixDQUFBaFAsTUFBUUEsTUFBUyxRQUFRQSxFQUFLLFdBQVc7QUFDakUsUUFDRXVPLE1BQVUsU0FDUixDQUFDSixLQUNDYSxFQUFnQk4sQ0FBSSxLQUNwQk0sRUFBZ0JMLENBQU0sS0FDdEJLLEVBQWdCSixDQUFNO0FBSTFCLGFBQU8sSUFBSTtBQUFBLFFBQ1QsQ0FBQ0g7QUFBQSxRQUNELENBQUNGO0FBQUEsUUFDRCxDQUFDRjtBQUFBLFFBQ0QsQ0FBQ0s7QUFBQSxRQUNELENBQUNDO0FBQUEsUUFDRCxDQUFDQztBQUFBLFFBQ0QsQ0FBQ0M7QUFBQSxNQUNGO0FBQUE7QUFHTCxTQUFPO0FBQ1Q7QUFFTyxTQUFTSSxHQUFzQmYsR0FBUWdCLEdBQVU7QUFBQSxFQUN0RCxRQUFBNUMsSUFBUztBQUFBLEVBQ1QsTUFBQXdCLElBQU87QUFBQSxFQUNQLE1BQUFLLElBQU87QUFDVCxJQUFJLElBQUk7QUFDTixRQUFNZ0IsSUFBUUwsR0FBYVosR0FBUSxFQUFFLE1BQUFKLEdBQU0sTUFBQUssRUFBSSxDQUFFLEdBRTNDaUIsSUFBYyxDQUFDRixHQUFVRyxJQUFTRixFQUFNLFdBQVc7O0FBQ3ZELFFBQUlHLElBQU0sR0FDTnBXLElBQVE7QUFFWixZQUFRZ1csTUFBYSxRQUFRSSxLQUFPSixNQUFhaFcsSUFBUW1XO0FBQ3ZELE1BQUFDLE9BQU9oVSxJQUFBNlQsRUFBTWpXLEdBQU8sTUFBYixnQkFBQW9DLEVBQWdCLFdBQVU7QUFFbkMsV0FBTyxFQUFFLFVBQVVnVSxHQUFLLE9BQUFwVyxFQUFPO0FBQUEsRUFDaEMsR0FHS3FXLElBQVV6QixJQUF1QyxJQUFoQ3NCLEVBQVksTUFBTSxDQUFDLEVBQUU7QUFDNUMsRUFBQUYsS0FBWUs7QUFFWixNQUFJLEVBQUUsT0FBQXJXLEVBQUssSUFBS2tXLEVBQVlGLENBQVE7QUFFcEMsUUFBTU0sSUFBT2xELE1BQVcsU0FDbEJ0TCxJQUFTO0FBQUEsSUFDYndPLElBQU8sVUFBVTtBQUFBLElBQ2pCO0FBQUEsSUFDQUEsSUFBTyxRQUFRO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFDRCxTQUFPdFc7QUFDTCxRQUFJOEgsRUFBTzlILENBQUssR0FBRztBQUNqQixZQUFNdVcsSUFBUUwsRUFBWSxNQUFNbFcsQ0FBSyxFQUFFLFdBQVdxVyxHQUM1Q0csSUFBTUQsSUFBUU4sRUFBTWpXLENBQUssRUFBRTtBQUNqQyxhQUFPLEVBQUUsTUFBTThILEVBQU85SCxDQUFLLEdBQUcsT0FBQXVXLEdBQU8sS0FBQUMsRUFBSztBQUFBO0FBRzlDLFNBQU87QUFDVDtBQUVBLFNBQVNaLEdBQWFaLEdBQVEsRUFBRSxNQUFBSixJQUFPLElBQU0sTUFBQUssSUFBTyxHQUFNLElBQUcsSUFBSTtBQUMvRCxRQUFNZ0IsS0FBUWpCLEtBQUEsZ0JBQUFBLEVBQVEsTUFBTSxtQkFBa0IsQ0FBRTtBQUNoRCxTQUFLSixLQUVIcUIsRUFBTSxRQUFRLEtBQUssS0FBSyxLQUFLLEtBQUssUUFBUSxHQUFHLEdBRTNDLENBQUNoQixLQUFRZ0IsRUFBTSxTQUFTLE1BQzFCQSxFQUFNLFNBQVMsSUFFVkE7QUFDVDtBQUVBLFNBQVNKLEdBQWNSLEdBQU8sRUFBRSxRQUFBakMsSUFBUyxRQUFPLElBQUssQ0FBQSxHQUFJO0FBQ3ZELFFBQU1wUyxJQUFRLENBQUNxVTtBQUNmLE1BQUksQ0FBQyxNQUFNclUsQ0FBSztBQUNkLFdBQU9BLElBQVE7QUFFakIsUUFBTTVDLElBQVFpWCxFQUFNLEtBQUksRUFBRyxZQUFhO0FBQ3hDLE1BQUlqWCxFQUFNLFNBQVM7QUFBRyxXQUFPO0FBQzdCLFFBQU1xWSxJQUFjLElBQUksS0FBSyxlQUFlckQsR0FBUSxFQUFFLE9BQU8sU0FBUyxHQUNoRXNELElBQWEsSUFBSSxLQUFLLGVBQWV0RCxHQUFRLEVBQUUsT0FBTyxRQUFRO0FBQ3BFLFdBQVN1RCxJQUFJLEdBQUdBLElBQUksSUFBSUEsS0FBSztBQUMzQixVQUFNL0IsSUFBTyxJQUFJLEtBQUssS0FBTStCLEdBQUcsQ0FBQztBQUNoQyxRQUNFRixFQUFZLE9BQU83QixDQUFJLEVBQUUsWUFBYSxFQUFDLFdBQVd4VyxDQUFLLEtBQ3ZEc1ksRUFBVyxPQUFPOUIsQ0FBSSxFQUFFLFlBQWEsRUFBQyxXQUFXeFcsQ0FBSztBQUV0RCxhQUFPdVk7QUFBQTtBQUdYLFNBQU87QUFDVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQzFES0MsS0FBVTtBQUFBLEVBQ2IsT0FBTyxDQUFDLHFCQUFxQixRQUFRO0FBQUEsRUFFckMsT0FBTztBQUFBLElBQ0wsWUFBWSxFQUFFLE1BQU0sTUFBTSxTQUFTLEtBQU07QUFBQSxJQUN6QyxRQUFRLEVBQUUsTUFBTSxRQUFRLFNBQVMsUUFBUztBQUFBLElBQzFDLGNBQWMsRUFBRSxNQUFNLFVBQVUsU0FBUyxNQUFNLEdBQU87QUFBQSxJQUN0RCxNQUFNLEVBQUUsTUFBTSxRQUFRLFNBQVMsTUFBTTtBQUFBLEVBQ3RDO0FBQUEsRUFFRCxPQUFPO0FBQ0wsVUFBTSxFQUFFLGNBQUFDLEdBQWMsWUFBQUMsTUFBZUMsR0FBZSxLQUFLLE1BQU07QUFDL0QsV0FBTztBQUFBLE1BQ0wsY0FBQUY7QUFBQSxNQUNBLFlBQUFDO0FBQUEsTUFDQSxXQUFXLENBQUU7QUFBQSxNQUNiLFdBQVcsQ0FBRTtBQUFBLE1BQ2IsY0FDRSxLQUFLO0FBQUEsTUFFTGpDLEdBQVUsb0JBQUksUUFBUSxFQUFFLE1BQU0sR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLGFBQWEsRUFBQSxDQUFHO0FBQUEsTUFFekUsYUFBYSxLQUFLO0FBQUEsSUFDcEI7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQUEsSUFDTCxXQUFXUixHQUFJQyxHQUFNO0FBQ25CLE1BQUksQ0FBQ0QsS0FBTyxDQUFDQyxNQUNYLEtBQUssZUFBZUQsS0FBTSxvQkFBSSxLQUFLLEdBQ25DLEtBQUssZ0JBQWdCO0FBQUEsSUFFeEI7QUFBQSxJQUVELGFBQWFBLEdBQUlDLEdBQU07QUFDckIsTUFBSSxDQUFDRCxLQUFPLENBQUNDLEtBQ1gsS0FBSyxnQkFBZ0I7QUFBQSxJQUV4QjtBQUFBLElBRUQsY0FBYztBQUFBLElBRWQsS0FBSzBDLEdBQU07QUFDVCxXQUFLLGNBQWNBO0FBQUEsSUFDckI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQ1IsU0FBSyxnQkFBZ0I7QUFBQSxFQUN0QjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsY0FBYzNCLEdBQU87QUFDbkIsYUFBTztBQUFBLFFBQ0wsNkJBQ0UsS0FBSyxjQUNMQSxNQUFVLEtBQUssV0FBVyxjQUMxQixLQUFLLGFBQWEsWUFBVyxNQUFPLEtBQUssV0FBVyxZQUFZO0FBQUEsUUFFbEUsOEJBQThCQSxNQUFVLEtBQUssYUFBYSxTQUFTO0FBQUEsTUFDckU7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhRSxHQUFNO0FBQ2pCLGFBQU87QUFBQSxRQUNMLDZCQUNFLEtBQUssY0FBY0EsTUFBUyxLQUFLLFdBQVcsWUFBWTtBQUFBLFFBRTFELDhCQUE4QkEsTUFBUyxLQUFLLGFBQWEsWUFBWTtBQUFBLE1BQ3ZFO0FBQUEsSUFDRDtBQUFBLElBRUQsUUFBUVQsR0FBV21DLElBQVMsSUFBTztBQUNqQyxXQUFLLGVBQWVwQyxHQUFVLEtBQUssY0FBY0MsQ0FBUyxHQUN0RG1DLEtBQ0YsS0FBSyxNQUFNLHFCQUFxQixLQUFLLFlBQVk7QUFBQSxJQUVwRDtBQUFBLElBRUQsV0FBV0MsR0FBTTtBQUNmLFdBQUssUUFBUTtBQUFBLFFBQ1gsTUFBTSxLQUFLLGFBQWEsZ0JBQWdCQSxJQUFPO0FBQUEsT0FDaEQ7QUFBQSxJQUNGO0FBQUEsSUFFRCxRQUFRRixHQUFNO0FBQ1osV0FBSyxjQUFjQTtBQUFBLElBQ3BCO0FBQUEsSUFFRCxVQUFVRSxHQUFNO0FBQ2QsWUFBTSxFQUFFLGNBQUFDLE1BQWlCLE1BQ25CLEVBQUUsTUFBQTVCLEdBQU0sT0FBQUYsRUFBTSxJQUFJLEtBQUs7QUFBQSxRQUMzQjhCLEVBQWEsWUFBYTtBQUFBLFFBQzFCQSxFQUFhLFNBQVEsSUFBS0Q7QUFBQSxNQUM1QjtBQUNBLFdBQUssUUFBUTtBQUFBLFFBQ1gsT0FBQTdCO0FBQUEsUUFDQSxLQUFLLEtBQUs7QUFBQSxVQUNSLEtBQUssZUFBZUUsR0FBTUYsQ0FBSztBQUFBLFVBQy9CLEtBQUssYUFBYSxRQUFRO0FBQUEsUUFDNUI7QUFBQSxPQUNEO0FBQUEsSUFDRjtBQUFBLElBRUQsU0FBUzZCLEdBQU07QUFDYixXQUFLLFFBQVE7QUFBQSxRQUNYLE1BQU0sS0FBSyxhQUFhLGdCQUFnQkE7QUFBQSxPQUN6QztBQUFBLElBQ0Y7QUFBQSxJQUVELFdBQVd0QyxHQUFNO0FBQ2YsV0FBSyxRQUFRRCxHQUFhQyxDQUFJLEdBQUcsRUFBSSxHQUNyQyxLQUFLLE1BQU0sUUFBUTtBQUFBLElBQ3BCO0FBQUEsSUFFRCxZQUFZUyxHQUFPO0FBQ2pCLFdBQUssUUFBUSxLQUFLLEdBR2xCLEtBQUssUUFBUSxFQUFFLE9BQUFBLEdBQU8sS0FBSyxFQUFHLEdBQUUsRUFBSTtBQUFBLElBQ3JDO0FBQUEsSUFFRCxXQUFXRSxHQUFNO0FBQ2YsV0FBSyxRQUFRLE9BQU8sR0FDcEIsS0FBSyxRQUFRLEVBQUUsTUFBQUEsRUFBRyxHQUFLLEVBQUk7QUFBQSxJQUM1QjtBQUFBLElBRUQsYUFBYUEsR0FBTUYsR0FBTztBQUN4QixhQUFJQSxJQUFRLE1BQ1ZFLEtBQ0FGLElBQVEsS0FDQ0EsSUFBUSxNQUNqQkUsS0FDQUYsSUFBUSxLQUVILEVBQUUsTUFBQUUsR0FBTSxPQUFBRixFQUFNO0FBQUEsSUFDdEI7QUFBQSxJQUVELGFBQ0VULEdBQ0EsRUFBRSxNQUFBVyxHQUFNLE9BQUFGLEdBQU8sS0FBQUYsTUFBUSxFQUFFLE1BQU0sSUFBTSxPQUFPLElBQU0sS0FBSyxHQUFLLEdBQzVEO0FBQ0EsYUFBT1AsRUFBSyxlQUFlLEtBQUssUUFBUTtBQUFBLFFBQ3RDLE1BQU1XLEtBQVE7QUFBQSxRQUNkLE9BQU9GLEtBQVM7QUFBQSxRQUNoQixLQUFLRixLQUFPO0FBQUEsT0FDYjtBQUFBLElBQ0Y7QUFBQSxJQUVELGVBQWVQLEdBQU07QUFDbkIsWUFBTVcsSUFBTyxLQUFLLHFCQUFxQlgsRUFBSyxZQUFXLENBQUU7QUFDekQsYUFBTyxHQUFHVyxPQUFVQSxJQUFPO0FBQUEsSUFDNUI7QUFBQSxJQUVELGVBQWVBLEdBQU1GLEdBQU87QUFDMUIsYUFBTyxJQUFJLEtBQUtFLEdBQU1GLElBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUTtBQUFBLElBQzdDO0FBQUEsSUFFRCxxQkFBcUJFLEdBQU07QUFFekIsYUFBTyxDQUFDLEdBRFFBLEVBQUssU0FBUyxFQUNYLE1BQU0sR0FBRyxFQUFFO0FBQUEsSUFDL0I7QUFBQSxJQUVELFNBQVMsRUFBRSxNQUFBMkIsR0FBTSxPQUFBRSxHQUFPLE1BQUFKLElBQU8sS0FBSyxhQUFhLFFBQUFDLElBQVMsTUFBUztBQUNqRSxZQUFNLEVBQUUsY0FBQUUsTUFBaUI7QUFDekIsVUFBSUQsR0FBTTtBQUNSLGdCQUFRRixHQUFJO0FBQUEsVUFDVixLQUFLO0FBQ0gsaUJBQUssUUFBUSxFQUFFLEtBQUtHLEVBQWEsWUFBWUQsRUFBTSxHQUFFRCxDQUFNO0FBQzNEO0FBQUEsVUFDRixLQUFLO0FBQ0gsaUJBQUssUUFBUSxFQUFFLE9BQU9FLEVBQWEsYUFBYUQsRUFBTSxHQUFFRCxDQUFNO0FBQzlEO0FBQUEsVUFDRixLQUFLO0FBQ0gsaUJBQUssUUFBUSxFQUFFLE1BQU1FLEVBQWEsZ0JBQWdCRCxFQUFNLEdBQUVELENBQU07QUFDaEU7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLGlCQUNFRyxHQUFPO0FBQ2hCLGdCQUFRLEtBQUssYUFBVztBQUFBLFVBQ3RCLEtBQUs7QUFDSCxpQkFBSyxXQUFXRCxDQUFZO0FBQzVCO0FBQUEsVUFDRixLQUFLO0FBQ0gsaUJBQUssUUFBUSxLQUFLO0FBQ2xCO0FBQUEsVUFDRixLQUFLO0FBQ0gsaUJBQUssUUFBUSxPQUFPO0FBQ3BCO0FBQUEsUUFDSjtBQUNBLGVBQU87QUFBQTtBQUFBLElBRVY7QUFBQSxJQUVELGtCQUFrQjtBQUNoQixXQUFLLFlBQVksQ0FBQyxHQUNsQixLQUFLLFlBQVksQ0FBQztBQUVsQixZQUFNLEVBQUUsY0FBQUEsTUFBaUIsTUFDbkI1QixJQUFPNEIsRUFBYSxZQUFZLEdBQ2hDOUIsSUFBUThCLEVBQWEsU0FBUyxHQUM5QkUsSUFBWSxLQUFLLHFCQUFxQjlCLENBQUk7QUFDaEQsZUFBU29CLElBQUksR0FBR0EsSUFBSSxJQUFJQTtBQUN0QixhQUFLLFVBQVUsS0FBS1UsSUFBWVYsQ0FBQztBQUduQyxVQUFJVyxJQURzQixJQUFJLEtBQUsvQixHQUFNRixHQUFPLENBQUMsRUFDWixPQUFNLElBQUs7QUFDaEQsTUFBSWlDLE1BQWlCLE1BQ25CQSxJQUFlO0FBRWpCLFlBQU1DLElBQVUsS0FBSyxlQUFlaEMsR0FBTUYsQ0FBSztBQUMvQyxVQUFJaUMsSUFBZSxHQUFHO0FBQ3BCLGNBQU1FLElBQVksS0FBSyxhQUFhakMsR0FBTUYsSUFBUSxDQUFDLEdBQzdDb0MsSUFBbUIsS0FBSztBQUFBLFVBQzVCRCxFQUFVO0FBQUEsVUFDVkEsRUFBVTtBQUFBLFFBQ1o7QUFDQSxpQkFBU2IsSUFBSSxHQUFHQSxJQUFJVyxHQUFjWCxLQUFLO0FBQ3JDLGdCQUFNeEIsSUFBTXNDLElBQW1CSCxJQUFlWCxJQUFJLEdBQzVDL0IsSUFBTyxJQUFJLEtBQUs0QyxFQUFVLE1BQU1BLEVBQVUsT0FBT3JDLENBQUc7QUFDMUQsZUFBSyxVQUFVLEtBQUs7QUFBQSxZQUNsQixNQUFNQTtBQUFBLFlBQ04sTUFBQVA7QUFBQSxZQUNBLE9BQU8sS0FBSyxhQUFhQSxDQUFJLElBQUksYUFBYTtBQUFBLFdBQy9DO0FBQUE7QUFBQTtBQUlMLFlBQU04QyxJQUFNLG9CQUFJLEtBQUs7QUFDckIsZUFBU2YsSUFBSSxHQUFHQSxLQUFLWSxHQUFTWixLQUFLO0FBQ2pDLGNBQU0vQixJQUFPLElBQUksS0FBS1csR0FBTUYsR0FBT3NCLENBQUMsR0FDOUJnQixJQUFRLENBQUEvQyxNQUNaQSxLQUNBQSxFQUFLLFFBQU8sTUFBTytCLEtBQ25CL0IsRUFBSyxZQUFXLE1BQU9XLEtBQ3ZCWCxFQUFLLFNBQVEsTUFBT1MsR0FFaEJ1QyxJQUFRRCxFQUFNLEtBQUssVUFBVSxJQUMvQixXQUNBQSxFQUFNRCxDQUFHLElBQ1AsVUFDQSxLQUFLLGFBQWE5QyxDQUFJLElBQ3BCLGFBQ0ErQyxFQUFNUixDQUFZLElBQ2hCLFlBQ0E7QUFDVixhQUFLLFVBQVUsS0FBSztBQUFBLFVBQ2xCLE1BQU1SO0FBQUEsVUFDTixNQUFBL0I7QUFBQSxVQUNBLE9BQUFnRDtBQUFBLFNBQ0Q7QUFBQTtBQUdILFlBQU1DLElBQWdCLEtBQUssS0FBSyxVQUFVO0FBQzFDLFVBQUlBLElBQWdCLEdBQUc7QUFDckIsY0FBTUMsSUFBWSxLQUFLLGFBQWF2QyxHQUFNRixJQUFRLENBQUM7QUFDbkQsaUJBQVNzQixJQUFJLEdBQUdBLEtBQUtrQixHQUFlbEIsS0FBSztBQUN2QyxnQkFBTS9CLElBQU8sSUFBSSxLQUFLa0QsRUFBVSxNQUFNQSxFQUFVLE9BQU9uQixDQUFDLEdBQ2xEaUIsSUFBUSxLQUFLLGFBQWFoRCxDQUFJLElBQUksYUFBYTtBQUNyRCxlQUFLLFVBQVUsS0FBSztBQUFBLFlBQ2xCLE1BQU0rQjtBQUFBLFlBQ04sTUFBQS9CO0FBQUEsWUFDQSxPQUFBZ0Q7QUFBQSxXQUNEO0FBQUE7QUFBQTtBQUFBLElBR1A7QUFBQSxFQUNGO0FBQ0YsR0FFTUcsS0FBYyxDQUFDO0FBR3JCLFNBQVNoQixHQUFlM0QsR0FBUTtBQUM5QixNQUFJNEUsSUFBUUQsR0FBWTNFLENBQU07QUFDOUIsTUFBSSxDQUFDNEUsR0FBTztBQUNWLFVBQU1uQixJQUFlLENBQUM7QUFDdEIsYUFBU0YsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEtBQUs7QUFDMUIsWUFBTS9CLElBQU8sSUFBSSxLQUFLLEdBQUcsR0FBRytCLENBQUM7QUFDN0IsTUFBQUUsRUFBYSxLQUFLO0FBQUEsUUFDaEIsTUFBTWpDLEVBQUssZUFBZXhCLEdBQVEsRUFBRSxTQUFTLFFBQVE7QUFBQSxRQUNyRCxPQUFPd0IsRUFBSyxlQUFleEIsR0FBUSxFQUFFLFNBQVMsU0FBUztBQUFBLE9BQ3hEO0FBQUE7QUFFSCxVQUFNMEQsSUFBYSxDQUFDO0FBQ3BCLGFBQVNILElBQUksR0FBR0EsS0FBSyxJQUFJQSxLQUFLO0FBQzVCLFlBQU0vQixJQUFPLElBQUksS0FBSyxHQUFHK0IsR0FBRyxDQUFDO0FBQzdCLE1BQUFHLEVBQVcsS0FBSztBQUFBLFFBQ2QsTUFBTWxDLEVBQUssZUFBZXhCLEdBQVEsRUFBRSxPQUFPLFFBQVE7QUFBQSxRQUNuRCxPQUFPd0IsRUFBSyxlQUFleEIsR0FBUSxFQUFFLE9BQU8sU0FBUztBQUFBLE9BQ3REO0FBQUE7QUFFSCxJQUFBNEUsSUFBUUQsR0FBWTNFLENBQU0sSUFBSTtBQUFBLE1BQzVCLGNBQUF5RDtBQUFBLE1BQ0EsWUFBQUM7QUFBQSxJQUNGO0FBQUE7QUFFRixTQUFPa0I7QUFDVDs7QUNqWU8sU0FBU0MsR0FBVUMsR0FBUzFTLEdBQVE7QUFDekMsRUFBQTBTLElBQ0VBLGFBQW1CLFdBQ2YsTUFBTSxLQUFLQSxDQUFPLElBQ2xCOVIsRUFBUThSLENBQU87QUFFckIsYUFBVyxDQUFDclQsR0FBTXNULENBQU8sS0FBSyxPQUFPLFFBQVEzUyxDQUFNO0FBQ2pELGVBQVc1QyxLQUFVc1Y7QUFDbkIsTUFBQXRWLEVBQU8saUJBQWlCaUMsR0FBTXNULEdBQVMsRUFBSztBQUloRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQ1AsaUJBQVcsQ0FBQ3RULEdBQU1zVCxDQUFPLEtBQUssT0FBTyxRQUFRM1MsQ0FBTTtBQUNqRCxtQkFBVzVDLEtBQVVzVjtBQUNuQixVQUFBdFYsRUFBTyxvQkFBb0JpQyxHQUFNc1QsR0FBUyxFQUFLO0FBQUEsSUFHcEQ7QUFBQSxFQUNGO0FBQ0g7QUFFTyxTQUFTQyxNQUFpQjVTLEdBQVE7QUFDdkMsU0FBTztBQUFBLElBQ0wsU0FBUztBQUNQLGlCQUFXOUQsS0FBUzhEO0FBQ2xCLFFBQUE5RCxFQUFNLE9BQVE7QUFBQSxJQUVqQjtBQUFBLEVBQ0Y7QUFDSDtBQUVPLFNBQVMyVyxHQUFPM1csR0FBTztBQUM1QixTQUFPO0FBQUEsSUFDTCxJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsRUFDUixFQUFJQSxLQUFBLGdCQUFBQSxFQUFPLE9BQU87QUFDbEI7QUFFTyxTQUFTNFcsR0FBaUI1VyxHQUFPO0FBQ3RDLFFBQU1kLElBQU15WCxHQUFPM1csQ0FBSztBQUN4QixTQUFPO0FBQUEsSUFDTCxLQUFLLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRyxFQUFDZCxDQUFHLEtBQUs7QUFBQSxJQUNwQyxLQUFLLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRyxFQUFDQSxDQUFHLEtBQUs7QUFBQSxJQUNqQyxPQUFPQSxNQUFRO0FBQUEsRUFDaEI7QUFDSDtBQ2xETyxTQUFTMlgsR0FBVW5YLEdBQVc7QUFDbkMsUUFBTXdCLElBQVNtQyxFQUFTM0QsRUFBVSxNQUFNLElBQ3BDQSxFQUFVLE1BQU1BLEVBQVUsTUFBTSxJQUNoQ0EsRUFBVTtBQUNkLFVBQU93QixLQUFBLGdCQUFBQSxFQUFRLFFBQU9BO0FBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3VEQSxNQUFLZ1UsS0FBVTtBQUFBLEVBQ2IsT0FBTyxDQUFDLGFBQWE7QUFBQSxFQUVyQixPQUFPO0FBQUEsSUFDTCxTQUFTLEVBQUUsTUFBTSxRQUFRLFNBQVMsUUFBUztBQUFBLElBQzNDLFlBQVksRUFBRSxNQUFNLFFBQVEsU0FBUyxRQUFTO0FBQUEsSUFDOUMsV0FBVyxFQUFFLE1BQU0sUUFBUSxTQUFTLFNBQVU7QUFBQSxJQUM5QyxNQUFNLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQ3ZDLFVBQVUsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDM0MsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLFdBQVcsR0FBRyxTQUFTLEtBQU07QUFBQSxJQUN0RCxhQUFhLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQzVDLFFBQVEsRUFBRSxNQUFNLFFBQVEsU0FBUyxFQUFHO0FBQUEsSUFDcEMsWUFBWSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU07QUFBQSxJQUM1QyxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFNO0FBQUEsSUFDdEQsWUFBWSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM3QyxPQUFPLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQ3hDLFdBQVcsRUFBRSxNQUFNLFFBQVEsU0FBUyxFQUFFO0FBQUEsRUFDdkM7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxXQUFXLEtBQUs7QUFBQSxNQUNoQixnQkFBZ0IsS0FBSztBQUFBLE1BQ3JCLGFBQWE7QUFBQSxNQUNiLGFBQWE7QUFBQSxNQUNiLGFBQWE7QUFBQSxNQUNiLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsZUFBZTtBQUNiLGFBQU87QUFBQSxRQUNMLHlCQUF5QixLQUFLO0FBQUEsTUFDaEM7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhO0FBQ1gsWUFBTTRCLElBQVU7QUFBQSxRQUNkLENBQUMsY0FBYzFFLEdBQVUsS0FBSyxTQUFTLEdBQUcsR0FBRztBQUFBLE1BQy9DO0FBQ0EsYUFBSSxLQUFLLGdCQUNQMEUsRUFBUSxLQUFLLFdBQVcsSUFBSSxLQUV2QkE7QUFBQSxJQUNSO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTyxLQUFLLFNBQVMsWUFBWSxLQUFLLFdBQVc7QUFBQSxJQUNsRDtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBT0QsR0FBVSxJQUFJO0FBQUEsSUFDdkI7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQUEsSUFDTCxLQUFLRSxHQUFNO0FBQ1QsV0FBSyxZQUFZQSxLQUFRLEtBQUs7QUFBQSxJQUMvQjtBQUFBLElBRUQsVUFBVXBFLEdBQUlDLEdBQU07QUFDbEIsTUFBSUQsSUFBS0MsTUFDUCxLQUFLLE1BQU0sZUFBZUQsQ0FBRSxHQUM1QixLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVlBLENBQUUsQ0FBQztBQUFBLElBRTdDO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUNSLFVBQU0sRUFBRSxTQUFBcUUsR0FBUyxPQUFBQyxFQUFRLElBQUUsS0FBSztBQUNoQyxJQUFJLEtBQUssWUFBWSxZQUNuQixLQUFLLGNBQWMsS0FBSyxlQUFlLEtBQUssaUJBQWlCRCxDQUFPLElBR2xFLEtBQUssd0JBQXdCLENBQUMsS0FBSyxlQUlyQyxLQUFLLGNBQWNULEdBQVUsUUFBUTtBQUFBLE1BQ25DLFNBQVMsQ0FBQXZXLE1BQVM7O0FBQ2hCLFFBQ0UsS0FBSyxhQUNMLENBQUNpWCxFQUFNLFNBQVNqWCxFQUFNLE1BQU0sS0FDNUIsQ0FBQ2dYLEVBQVEsU0FBU2hYLEVBQU0sTUFBTSxLQUM5QixHQUFDVSxJQUFBLEtBQUssa0JBQUwsUUFBQUEsRUFBb0IsU0FBU1YsRUFBTSxhQUVwQyxLQUFLLFlBQVk7QUFBQSxNQUVwQjtBQUFBLE1BRUQsTUFBTSxNQUFNO0FBQ1YsYUFBSyxZQUFZO0FBQUEsTUFDbkI7QUFBQSxLQUNELElBR0MsS0FBSyxlQUNQLEtBQUssWUFBWTtBQUFBLEVBRXBCO0FBQUEsRUFFRCxVQUFVO0FBQ1IsU0FBSyxZQUFZLEtBQUs7QUFBQSxFQUN2QjtBQUFBLEVBRUQsWUFBWTs7QUFDVixLQUFBVSxJQUFBLEtBQUssZ0JBQUwsUUFBQUEsRUFBa0IsV0FDbEI4RCxJQUFBLEtBQUssZ0JBQUwsUUFBQUEsRUFBa0IsV0FDbEIwUyxJQUFBLEtBQUssZ0JBQUwsUUFBQUEsRUFBa0I7QUFBQSxFQUNuQjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsaUJBQWlCO0FBQ2YsWUFBTSxFQUFFLFNBQUFGLEdBQVMsT0FBQUMsRUFBUSxJQUFFLEtBQUs7QUFDaEMsVUFBSSxLQUFLLFFBQVFBLEVBQU0sZ0JBQWdCLEdBQUc7QUFDeEMsbUJBQVcsTUFBTSxLQUFLLGVBQWMsR0FBSSxDQUFDO0FBQ3pDO0FBQUE7QUFHRixZQUFNL1YsSUFBUyxLQUFLLGlCQUFpQjhWLEdBRS9CRyxJQUFLLEtBQUssV0FBVyxVQUFVSCxJQUFVQyxFQUFNO0FBQ3JELE1BQUlFLE1BQ0ZBLEVBQUcsTUFBTSxRQUFRLGlCQUFpQmpXLENBQU0sRUFBRTtBQUc1QyxZQUFNa1csSUFBU2xXLEVBQU8sc0JBQXNCLEdBQ3RDbVcsSUFBY0QsRUFBTyxPQUFPLE9BQU8sU0FDbkNFLElBQWFGLEVBQU8sTUFBTSxPQUFPLFNBQ2pDRyxJQUFlSCxFQUFPLE9BQ3RCSSxJQUFnQkosRUFBTyxRQUN2QkssSUFBYVIsRUFBTSxhQUNuQlMsSUFBY1QsRUFBTTtBQUUxQixVQUFJLENBQUNVLEdBQU9DLENBQUssSUFBSSxLQUFLLGVBQWUsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4RCxVQUFJLEtBQUssWUFBWTtBQUNuQixjQUFNQyxJQUFXLE9BQU8sWUFDbEJDLElBQVksT0FBTztBQUN6QixRQUFJSCxNQUFVLFFBQ1JMLElBQWFJLE1BQ2ZDLElBQVEsWUFFREEsTUFBVSxXQUNmRyxJQUFZUixJQUFhRSxJQUFnQkUsTUFDM0NDLElBQVEsU0FFREEsTUFBVSxTQUNmTixJQUFjSSxNQUNoQkUsSUFBUSxXQUVEQSxNQUFVLFdBQ2ZFLElBQVdSLElBQWNFLElBQWVFLE1BQzFDRSxJQUFRLFNBSVJDLE1BQVUsUUFDUkUsSUFBWVIsSUFBYUksTUFDM0JFLElBQVEsWUFFREEsTUFBVSxXQUNmTixJQUFhRSxJQUFnQkUsTUFDL0JFLElBQVEsU0FFREEsTUFBVSxTQUNmQyxJQUFXUixJQUFjSSxNQUMzQkcsSUFBUSxXQUVEQSxNQUFVLFdBQ2ZQLElBQWNFLElBQWVFLE1BQy9CRyxJQUFRO0FBQUE7QUFLZCxVQUFJRyxJQUFPLEdBQ1BDLElBQU07QUFDVixjQUFRTCxHQUFLO0FBQUEsUUFDWCxLQUFLO0FBQ0gsVUFBQUssS0FBT047QUFDUDtBQUFBLFFBQ0YsS0FBSztBQUNILFVBQUFLLEtBQVFOO0FBQ1I7QUFBQSxRQUNGLEtBQUs7QUFDSCxVQUFBTSxLQUFRUjtBQUNSO0FBQUEsUUFDRixLQUFLO0FBQ0gsVUFBQVMsS0FBT1I7QUFDUDtBQUFBLE1BQ0o7QUFDQSxjQUFRSSxHQUFLO0FBQUEsUUFDWCxLQUFLO0FBQ0gsVUFBQUcsS0FBUU4sSUFBYUY7QUFDckI7QUFBQSxRQUNGLEtBQUs7QUFDSCxVQUFBUyxLQUFPTixJQUFjRjtBQUNyQjtBQUFBLE1BQ0o7QUFRQSxVQVBJLEtBQUssVUFDSEcsTUFBVSxRQUNaSyxLQUFPUixJQUNFRyxNQUFVLGFBQ25CSyxLQUFPUixLQUdQdFcsTUFBVzhWLEdBQVM7QUFDdEIsY0FBTWlCLElBQWdCakIsRUFBUSxzQkFBc0I7QUFDcEQsUUFBQWUsS0FBUVYsSUFBY1ksRUFBYyxNQUNwQ0QsS0FBT1YsSUFBYVcsRUFBYztBQUFBO0FBRXBDLE1BQUFoQixFQUFNLE1BQU0sT0FBTyxHQUFHYyxPQUN0QmQsRUFBTSxNQUFNLE1BQU0sR0FBR2U7QUFBQSxJQUN0QjtBQUFBLElBRUQsZUFBZXpILEdBQVE7QUFDckIsWUFBTWlHLElBQVVqRyxFQUFPLGlCQUFpQixpQkFBaUI7QUFDekQsVUFBSTJIO0FBRUosYUFBT3hCO0FBQUEsUUFDTEgsR0FBVUMsR0FBUztBQUFBLFVBQ2pCLE9BQU8sTUFBTTtBQUNYLGlCQUFLLFlBQVksSUFDakIsYUFBYSxLQUFLLFNBQVM7QUFBQSxVQUM1QjtBQUFBLFVBRUQsTUFBTSxNQUFNO0FBRVYsaUJBQUssWUFBWSxXQUFXLE1BQU07QUFDaEMsY0FBSyxLQUFLLE1BQU0sTUFBTSxRQUFRLGVBQWUsTUFDM0MsS0FBSyxZQUFZO0FBQUEsWUFFcEIsR0FBRSxDQUFDO0FBQUEsVUFDTjtBQUFBLFFBQ0YsQ0FBQztBQUFBLFFBRURELEdBQVVoRyxHQUFRO0FBQUEsVUFDaEIsV0FBVyxDQUFBdlEsTUFBUztBQUNsQixZQUFLQSxFQUFNLE9BQU8sUUFBUSx5QkFBeUIsTUFDakRBLEVBQU0sZUFBZSxHQUNyQkEsRUFBTSxnQkFBZ0IsSUFFbkJBLEVBQU0sT0FBTyxRQUFRLG9CQUFvQixNQUk1Q2tZLEtBSGdCLEtBQUssaUJBQWlCLEtBQUssTUFBTSxTQUdqQyxjQUFjLGlCQUFpQixHQUMzQ0EsS0FBUyxDQUFDQSxFQUFNLGFBQWEsVUFBVSxJQUN6Q0EsRUFBTSxhQUFhLFlBQVksTUFBTSxJQUVyQ0EsSUFBUTtBQUFBLFVBR2I7QUFBQSxVQUVELFNBQVMsQ0FBQWxZLE1BQVM7QUFDaEIsWUFBSWtZLEtBR0YsV0FBVyxNQUFNO0FBQ2YsY0FBQUEsRUFBTSxnQkFBZ0IsVUFBVSxHQUMzQmxZLEVBQU0sT0FBTyxRQUFRLHlCQUF5QixLQUNqRGtZLEVBQU0sTUFBTSxHQUVkQSxJQUFRO0FBQUEsWUFDVCxHQUFFLENBQUM7QUFBQSxVQUVSO0FBQUEsU0FDRDtBQUFBLE1BQ0g7QUFBQSxJQUNEO0FBQUEsSUFFRCxZQUFZbkIsR0FBTTs7QUFDaEIsTUFBSUEsS0FDRSxLQUFLLFlBQVksWUFDbkIsS0FBSyxjQUFjLEtBQUssZUFBZSxLQUFLLE1BQU0sS0FBSyxJQUV6RCxLQUFLLGVBQWUsT0FFcEJyVyxJQUFBLEtBQUssZ0JBQUwsUUFBQUEsRUFBa0IsVUFDbEIsS0FBSyxjQUFjO0FBQUEsSUFFdEI7QUFBQSxJQUVELFVBQVU7QUFDUixNQUFLLEtBQUssYUFDUixLQUFLLFlBQVk7QUFBQSxJQUVwQjtBQUFBLElBRUQsUUFBUWdWLEdBQU87QUFDYixNQUFLLEtBQUssYUFDUixhQUFhLEtBQUssZUFBZSxHQUM3QkEsSUFDRixLQUFLLFlBQVksS0FFYixLQUFLLFlBQ1AsS0FBSyxrQkFBa0IsV0FBVyxNQUFNO0FBQ3RDLGFBQUssWUFBWTtBQUFBLE1BQ25CLEdBQUcsS0FBSyxTQUFTLElBRWpCLEtBQUssWUFBWTtBQUFBLElBSXpCO0FBQUEsRUFDRjtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN1ZBLE1BQUtSLEtBQVU7QUFBQSxFQUNiLE9BQU8sQ0FBQyxtQkFBbUI7QUFBQSxFQUMzQixjQUFjO0FBQUEsRUFFZCxPQUFPO0FBQUEsSUFDTCxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsTUFBTSxHQUFHLFNBQVMsS0FBTTtBQUFBLElBQ3JELE1BQU0sRUFBRSxNQUFNLFFBQVEsU0FBUyxPQUFRO0FBQUEsSUFDdkMsSUFBSSxFQUFFLE1BQU0sUUFBUSxTQUFTLEtBQU07QUFBQSxJQUNuQyxNQUFNLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQ3JDLE9BQU8sRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDdEMsVUFBVSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUMzQyxVQUFVLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzNDLFdBQVcsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDNUMsYUFBYSxFQUFFLE1BQU0sUUFBUSxTQUFTLEtBQU07QUFBQSxJQUM1QyxjQUFjLEVBQUUsTUFBTSxRQUFRLFNBQVMsTUFBTTtBQUFBLEVBQzlDO0FBQUEsRUFFRCxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsY0FBYyxLQUFLO0FBQUEsTUFDbkIsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLElBQ1g7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixVQUFVO0FBQ1IsYUFBTyxLQUFLLE9BQU87QUFBQSxJQUNwQjtBQUFBLElBRUQsYUFBYTtBQUNYLFlBQU0sRUFBRSxPQUFPaUQsR0FBRyxHQUFHalUsRUFBYSxJQUFFLEtBQUs7QUFDekMsYUFBT0E7QUFBQSxJQUNSO0FBQUEsSUFFRCxRQUFRO0FBQ04sYUFBTyxLQUFLLE1BQU07QUFBQSxJQUNuQjtBQUFBLElBRUQsT0FBTztBQUVMLFlBQU0sRUFBRSxNQUFBa1UsR0FBTSxLQUFBdFcsR0FBSyxLQUFBRCxFQUFJLElBQUksS0FBSyxRQUMxQndXLElBQVksQ0FBQS9ZLE1BQVVBLEtBQVMsT0FBTyxHQUFHQSxJQUFRLFNBQVM7QUFDaEUsYUFBTzhZLEtBQVFDLEVBQVV2VyxDQUFHLEtBQUt1VyxFQUFVeFcsQ0FBRyxLQUFLO0FBQUEsSUFDckQ7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQUEsSUFDTCxXQUFXOFEsR0FBSUMsR0FBTTtBQUNuQixNQUFJRCxNQUFPQyxNQUNULEtBQUssZUFBZUQ7QUFBQSxJQUV2QjtBQUFBLElBRUQsYUFBYThDLEdBQWM7QUFDekIsTUFBSUEsTUFBaUIsS0FBSyxjQUN4QixLQUFLLE1BQU0scUJBQXFCQSxDQUFZO0FBQUEsSUFFaEQ7QUFBQSxFQUNEO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxRQUFRO0FBQ04sV0FBSyxNQUFNLE1BQU07QUFBQSxJQUNsQjtBQUFBLElBRUQsT0FBTztBQUNMLFdBQUssTUFBTSxLQUFLO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBQ0Y7O0FDekZTLFNBQUE2QyxFQUFBLEdBQUFDLEVBQUEsS0FBQTtBQUFBOzs7Ozs7QUFPVCxNQUFLckQsS0FBVTtBQUFBLEVBQ2IsT0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLElBQ1g7QUFBQSxJQUNELFVBQVU7QUFBQSxNQUNSLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUNGO0FDckJPLFNBQVNzRCxHQUFhTixHQUFPLEVBQUUsT0FBQXJELEdBQU8sS0FBQUMsRUFBRyxHQUFJO0FBQ2xELEVBQUlvRCxLQUFBLFFBQUFBLEVBQU8sc0JBQ1RBLEVBQU0sTUFBTyxHQUNiQSxFQUFNLGtCQUFrQnJELEdBQU9DLENBQUc7QUFFdEM7QUFFTyxTQUFTMkQsR0FBYVAsR0FBTztBQUNsQyxTQUFPQSxLQUFTLG9CQUFvQkEsSUFDaEMsRUFBRSxPQUFPQSxFQUFNLGdCQUFnQixLQUFLQSxFQUFNLGFBQWMsSUFDeEQ7QUFDTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMkNBLE1BQUtoRCxLQUFVO0FBQUEsRUFDYixZQUFZLEVBQUUsU0FBQXdELElBQVMsVUFBQUMsSUFBVSxZQUFBQyxJQUFZLE1BQUFDLEdBQU07QUFBQSxFQUNuRCxPQUFPLENBQUMscUJBQXFCLGVBQWUsVUFBVSxTQUFTLE1BQU07QUFBQSxFQUNyRSxjQUFjO0FBQUEsRUFFZCxPQUFPO0FBQUEsSUFDTCxZQUFZLEVBQUUsTUFBTSxNQUFNLFNBQVMsS0FBTTtBQUFBLElBQ3pDLFlBQVksRUFBRSxNQUFNLFFBQVEsU0FBUyxRQUFTO0FBQUEsSUFDOUMsV0FBVyxFQUFFLE1BQU0sUUFBUSxTQUFTLGNBQWU7QUFBQSxJQUNuRCxhQUFhLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQzVDLE1BQU0sRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDdkMsVUFBVSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUMzQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsV0FBVyxHQUFHLFNBQVMsVUFBVztBQUFBLElBQzNELFFBQVEsRUFBRSxNQUFNLFFBQVEsU0FBUyxRQUFTO0FBQUEsSUFDMUMsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUyxPQUFPO0FBQUEsUUFDZCxNQUFNQyxHQUFlO0FBQUEsUUFDckIsTUFBTTtBQUFBO0lBRVQ7QUFBQSxJQUNELGNBQWMsRUFBRSxNQUFNLFVBQVUsU0FBUyxNQUFNLEdBQU07QUFBQSxFQUN0RDtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLGNBQWMsS0FBSztBQUFBLE1BQ25CLFdBQVcsS0FBSztBQUFBLE1BQ2hCLGNBQWM7QUFBQSxJQUNoQjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLFVBQVU7QUFDUixhQUFPLEtBQUssZ0JBQWdCLEtBQUs7QUFBQSxJQUNsQztBQUFBLElBRUQsUUFBUTs7QUFDTixjQUFPcFksSUFBQW1XLEdBQVUsSUFBSSxNQUFkLGdCQUFBblcsRUFBaUIsY0FBYztBQUFBLElBQ3ZDO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxhQUFPO0FBQUEsUUFDTCxRQUFRLEtBQUs7QUFBQSxRQUNiLEdBQUcsS0FBSztBQUFBLE1BQ1Y7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhO0FBQUEsTUFDWCxNQUFNO0FBQ0osZUFBT2dELEdBQU8sS0FBSyxjQUFjLEtBQUssYUFBYSxLQUFLO0FBQUEsTUFDekQ7QUFBQSxNQUVELElBQUlwRSxHQUFPO0FBQ1QsY0FBTTRULElBQU9HLEdBQVUvVCxHQUFPLEtBQUssYUFBYTtBQUNoRCxRQUFJNFQsTUFDRixLQUFLLGVBQWVBO0FBQUEsTUFFeEI7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsV0FBV1AsR0FBSUMsR0FBTTtBQUNuQixNQUFJLENBQUNELEtBQU8sQ0FBQ0MsTUFDWCxLQUFLLGVBQWVEO0FBQUEsSUFFdkI7QUFBQSxJQUVELGFBQWFyVCxHQUFPO0FBQ2xCLE1BQUksQ0FBQ0EsS0FBVSxDQUFDLEtBQUssZUFDbkIsS0FBSyxNQUFNLHFCQUFxQkEsQ0FBSyxHQUNyQyxLQUFLLE1BQU0sVUFBVUEsQ0FBSztBQUFBLElBRTdCO0FBQUEsSUFFRCxLQUFLeVgsR0FBTTtBQUNULFdBQUssWUFBWUE7QUFBQSxJQUNsQjtBQUFBLElBRUQsVUFBVXBFLEdBQUlDLEdBQU07QUFDbEIsTUFBSUQsSUFBS0MsS0FDUCxLQUFLLE1BQU0sZUFBZUQsQ0FBRTtBQUFBLElBRS9CO0FBQUEsSUFFRCxRQUFRQSxHQUFJQyxHQUFNO0FBQ2hCLE1BQUlELElBQUtDLEtBQ1AsS0FBSyxNQUFNRCxJQUFLLFVBQVUsTUFBTTtBQUFBLElBRXBDO0FBQUEsRUFDRDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsUUFBUTNQLEdBQU87QUFDYixXQUFLLGVBQWVBLEdBQ3BCLEtBQUssWUFBWUE7QUFBQSxJQUNsQjtBQUFBLElBRUQsVUFBVWhELEdBQU87O0FBQ2YsWUFBTSxFQUFFLEtBQUt3VixHQUFNLE9BQUFFLE1BQVVrQixHQUFpQjVXLENBQUs7QUFDbkQsVUFBSXdWLEtBQVFFLEdBQU87QUFDakIsUUFBQTFWLEVBQU0sZUFBZTtBQUVyQixjQUFNc1UsS0FBVzVULElBQUErWCxHQUFhLEtBQUssS0FBSyxNQUF2QixnQkFBQS9YLEVBQTBCLE9BQ3JDcVksSUFBYyxDQUFBekUsTUFDbEJELEdBQXNCLEtBQUssYUFBYUMsR0FBVSxLQUFLLGFBQWE7QUFFdEUsWUFBSWtCLEtBQVEsQ0FBQyxLQUFLO0FBQ2hCLGVBQUssWUFBWTtBQUFBLGFBQ1o7QUFDTCxnQkFBTSxFQUFFLFVBQUF3RCxNQUFhLEtBQUs7QUFDMUIsY0FBSUEsR0FBVTtBQUNaLGtCQUFNLEVBQUUsTUFBTTFELEdBQU0sT0FBQVQsRUFBUSxJQUFFa0UsRUFBWXpFLENBQVEsS0FBSyxDQUFDO0FBQ3hELFlBQ0VnQixLQUNBMEQsRUFBUyxTQUFTLEVBQUUsTUFBQXhELEdBQU0sT0FBQUUsR0FBTyxNQUFBSixHQUFNLFFBQVEsSUFBTSxLQUVyRCxLQUFLLFVBQVUsTUFBTWtELEdBQWEsS0FBSyxPQUFPTyxFQUFZbEUsQ0FBSyxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUsxRTtBQUFBLElBRUQsWUFBWW9FLEdBQVE7QUFDbEIsV0FBSyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUNBLEtBQVUsQ0FBQyxLQUFLLFlBQ2pELEtBQUssYUFDUCxLQUFLLE1BQU07QUFBQSxJQUVkO0FBQUEsSUFFRCxRQUFRO0FBQ04sV0FBSyxNQUFNLE1BQU07QUFBQSxJQUNsQjtBQUFBLElBRUQsT0FBTztBQUNMLFdBQUssTUFBTSxLQUFLO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BIQSxNQUFLL0QsS0FBVTtBQUFBLEVBQ2IsWUFBWSxFQUFFLFNBQUF3RCxJQUFTLFlBQUFFLElBQVksTUFBQUMsR0FBTTtBQUFBLEVBQ3pDLE9BQU8sQ0FBQyxxQkFBcUIsZUFBZSxVQUFVLFNBQVMsTUFBTTtBQUFBLEVBQ3JFLGNBQWM7QUFBQSxFQUVkLE9BQU87QUFBQSxJQUNMLFlBQVksRUFBRSxNQUFNLE1BQU0sU0FBUyxLQUFNO0FBQUEsSUFDekMsWUFBWSxFQUFFLE1BQU0sUUFBUSxTQUFTLFFBQVM7QUFBQSxJQUM5QyxXQUFXLEVBQUUsTUFBTSxRQUFRLFNBQVMsY0FBZTtBQUFBLElBQ25ELGFBQWEsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDNUMsTUFBTSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUN2QyxVQUFVLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzNDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxXQUFXLEdBQUcsU0FBUyxVQUFXO0FBQUEsSUFDM0QsUUFBUSxFQUFFLE1BQU0sUUFBUSxTQUFTLFFBQVM7QUFBQSxJQUMxQyxRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTLE9BQU87QUFBQSxRQUNkLE1BQU1DLEdBQWU7QUFBQSxRQUNyQixNQUFNO0FBQUE7SUFFVDtBQUFBLElBQ0QsY0FBYyxFQUFFLE1BQU0sVUFBVSxTQUFTLE1BQU0sR0FBTztBQUFBLElBQ3RELGdCQUFnQixFQUFFLE1BQU0sVUFBVSxTQUFTLE1BQU0sR0FBTztBQUFBLElBQ3hELGdCQUFnQixFQUFFLE1BQU0sVUFBVSxTQUFTLE1BQU0sR0FBTTtBQUFBLEVBQ3hEO0FBQUEsRUFFRCxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsY0FBYyxLQUFLO0FBQUEsTUFDbkIsV0FBVyxLQUFLO0FBQUEsTUFDaEIsY0FBYztBQUFBLE1BQ2Qsa0JBQWtCO0FBQUEsSUFDcEI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixVQUFVO0FBQ1IsYUFBTyxLQUFLLGdCQUFnQixLQUFLO0FBQUEsSUFDbEM7QUFBQSxJQUVELFFBQVE7O0FBQ04sY0FBT3BZLElBQUFtVyxHQUFVLElBQUksTUFBZCxnQkFBQW5XLEVBQWlCLGNBQWM7QUFBQSxJQUN2QztBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTztBQUFBLFFBQ0wsUUFBUSxLQUFLO0FBQUEsUUFDYixHQUFHLEtBQUs7QUFBQSxNQUNWO0FBQUEsSUFDRDtBQUFBLElBRUQsYUFBYTtBQUFBLE1BQ1gsTUFBTTtBQUNKLGVBQU9nRCxHQUFPLEtBQUssY0FBYyxLQUFLLGFBQWEsS0FBSztBQUFBLE1BQ3pEO0FBQUEsTUFFRCxJQUFJcEUsR0FBTztBQUNULGNBQU00VCxJQUFPRyxHQUFVL1QsR0FBTyxLQUFLLGFBQWE7QUFDaEQsUUFBSTRULE1BQ0YsS0FBSyxlQUFlQTtBQUFBLE1BRXhCO0FBQUEsSUFDRDtBQUFBLElBRUQsY0FBYztBQUNaLGFBQ0UsS0FBSztBQUFBO0FBQUE7QUFBQSxNQUlMQyxHQUFVLG9CQUFJLFFBQVEsRUFBRSxNQUFNLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxhQUFhLEVBQUEsQ0FBRztBQUFBLElBRTFFO0FBQUEsSUFFRCxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQ0osZUFBTyxLQUFLLFlBQVksU0FBUztBQUFBLE1BQ2xDO0FBQUEsTUFFRCxJQUFJVyxHQUFNO0FBQ1IsYUFBSyxRQUFRLEVBQUUsTUFBQUEsR0FBTTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRDtBQUFBLElBRUQsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUNKLGVBQU8sS0FBSyxZQUFZLFdBQVc7QUFBQSxNQUNwQztBQUFBLE1BRUQsSUFBSUMsR0FBUTtBQUNWLGFBQUssUUFBUSxFQUFFLFFBQUFBLEdBQVE7QUFBQSxNQUN6QjtBQUFBLElBQ0Q7QUFBQSxJQUVELFFBQVE7QUFBQSxNQUNOLE1BQU07QUFDSixlQUFPLEtBQUssWUFBWSxXQUFXO0FBQUEsTUFDcEM7QUFBQSxNQUVELElBQUlDLEdBQVE7QUFDVixhQUFLLFFBQVEsRUFBRSxRQUFBQSxHQUFRO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsV0FBV3JCLEdBQUlDLEdBQU07QUFDbkIsTUFBSSxDQUFDRCxLQUFPLENBQUNDLE1BQ1gsS0FBSyxlQUFlRCxHQUNwQixLQUFLLFVBQVUsRUFBSTtBQUFBLElBRXRCO0FBQUEsSUFFRCxhQUFhclQsR0FBTztBQUNsQixNQUFJLENBQUNBLEtBQVUsQ0FBQyxLQUFLLGVBQ25CLEtBQUssTUFBTSxxQkFBcUJBLENBQUssR0FDckMsS0FBSyxNQUFNLFVBQVVBLENBQUssR0FDMUIsS0FBSyxVQUFVLEVBQUk7QUFBQSxJQUV0QjtBQUFBLElBRUQsY0FBYztBQUNaLFlBQU0sRUFBRSxPQUFBNFksRUFBTSxJQUFJLE1BQ1pnQixJQUFZVCxHQUFhUCxDQUFLO0FBQ3BDLE1BQ0UsS0FBSyxXQUNMLENBQUMsS0FBSyxvQkFDTmdCLEVBQVUsVUFBVUEsRUFBVSxPQUU5QixLQUFLLFVBQVUsTUFBTVYsR0FBYU4sR0FBT2dCLENBQVMsQ0FBQyxHQUVyRCxLQUFLLG1CQUFtQjtBQUFBLElBQ3pCO0FBQUEsSUFFRCxLQUFLbkMsR0FBTTtBQUNULFdBQUssWUFBWUE7QUFBQSxJQUNsQjtBQUFBLElBRUQsVUFBVXBFLEdBQUlDLEdBQU07QUFDbEIsTUFBSUQsS0FDRixLQUFLLFVBQVUsRUFBSyxHQUVsQkEsSUFBS0MsS0FDUCxLQUFLLE1BQU0sZUFBZUQsQ0FBRTtBQUFBLElBRS9CO0FBQUEsSUFFRCxRQUFRQSxHQUFJQyxHQUFNO0FBQ2hCLE1BQUlELElBQUtDLEtBQ1AsS0FBSyxNQUFNRCxJQUFLLFVBQVUsTUFBTTtBQUFBLElBRXBDO0FBQUEsRUFDRDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsUUFBUXJULEdBQU87QUFDYixjQUFRLE1BQU1BLEdBQU8sTUFBTSxFQUFFO0FBQUEsSUFDOUI7QUFBQSxJQUVELFFBQVE4VCxHQUFXO0FBQ2pCLFdBQUssZUFBZUQsR0FBVSxLQUFLLGFBQWE7QUFBQSxRQUM5QyxHQUFHQztBQUFBLFFBQ0gsYUFBYTtBQUFBLE9BQ2Q7QUFBQSxJQUNGO0FBQUEsSUFFRCxVQUFVK0YsR0FBUTtBQUNoQixZQUFNQyxJQUFTLENBQUNDLEdBQUsvWixNQUFVO0FBQzdCLGNBQU00QixJQUFTLEtBQUssTUFBTW1ZLENBQUc7QUFDN0IsWUFBSW5ZLEdBQVE7QUFDVixnQkFBTW9ZLElBQ0pwWSxFQUFPO0FBQUEsV0FFTkEsRUFBTyxvQkFBb0IsSUFFeEI4VyxJQUFNLEtBQUssTUFBTTFZLElBQVFnYSxDQUFVLEdBQ25DQyxJQUFXLEtBQUssSUFBSXJZLEVBQU8sWUFBWThXLENBQUc7QUFDaEQsVUFBQTlXLEVBQU8sU0FBUztBQUFBLFlBQ2QsS0FBQThXO0FBQUEsWUFDQSxVQUFVbUIsS0FBVUksSUFBVyxNQUFNLFdBQVc7QUFBQSxXQUNqRDtBQUFBO0FBQUEsTUFFTDtBQUNBLFdBQUssVUFBVSxNQUFNO0FBQ25CLFFBQUFILEVBQU8sUUFBUSxLQUFLLElBQUksR0FDeEJBLEVBQU8sVUFBVSxLQUFLLE1BQU0sR0FDNUJBLEVBQU8sVUFBVSxLQUFLLE1BQU07QUFBQSxPQUM3QjtBQUFBLElBQ0Y7QUFBQSxJQUVELFFBQVFwVyxHQUFPO0FBQ2IsV0FBSyxlQUFlQSxHQUNwQixLQUFLLFlBQVlBO0FBQUEsSUFDbEI7QUFBQSxJQUVELFVBQVVoRCxHQUFPO0FBQ2YsWUFBTSxFQUFFLE9BQUFrWSxFQUFNLElBQUksTUFDWmdCLElBQVlULEdBQWFQLENBQUssR0FDOUIsRUFBRSxLQUFLMUMsR0FBTSxPQUFBRSxNQUFVa0IsR0FBaUI1VyxDQUFLO0FBQ25ELFVBQUl3VixLQUFRRSxHQUFPO0FBQ2pCLFFBQUExVixFQUFNLGVBQWU7QUFFckIsY0FBTStZLElBQWMsQ0FBQXpFLE1BQ2xCRCxHQUFzQixLQUFLLGFBQWFDLEdBQVUsS0FBSyxhQUFhO0FBRXRFLFlBQUlrQjtBQUNGLGNBQUksQ0FBQyxLQUFLO0FBQ1IsaUJBQUssWUFBWTtBQUFBLGVBQ1o7QUFDTCxrQkFBTSxFQUFFLE1BQUFsUyxHQUFNLE9BQUF1UixFQUFNLElBQUlrRSxFQUFZRyxFQUFVLEtBQUssS0FBSyxDQUFDO0FBQ3pELGdCQUFJNVYsR0FBTTtBQUNSLG9CQUFNaEUsSUFBUSxLQUFLZ0UsQ0FBSSxJQUFJa1MsR0FDckJnRSxJQUFRLEtBQUssTUFBTWxXLENBQUksRUFBRTtBQUMvQixtQkFBS0EsQ0FBSSxJQUNQaEUsSUFBUSxJQUNKQSxJQUFRa2EsSUFDUmxhLEtBQVNrYSxJQUNQbGEsSUFBUWthLElBQ1JsYSxHQUNSLEtBQUssbUJBQW1CLElBQ3hCLEtBQUssVUFBVSxNQUFNa1osR0FBYU4sR0FBT2EsRUFBWWxFLENBQUssQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBRzNELFVBQUlhLE1BQ1QsS0FBSyxZQUFZO0FBQUEsaUJBRVZ3RCxFQUFVLFVBQVVBLEVBQVUsS0FBSztBQUM1QyxjQUFNLEVBQUUsT0FBQTVaLE1BQVU0WTtBQUNsQixZQUFJeEQsSUFBTXdFLEVBQVU7QUFFcEIsY0FBTU8sSUFBVSxDQUFBQyxNQUFRLENBQUMsTUFBTSxTQUFTQSxHQUFNLEVBQUUsQ0FBQztBQUVqRCxZQUFJMVosRUFBTSxJQUFJLFdBQVc7QUFDdkIsY0FBSXlaLEVBQVF6WixFQUFNLEdBQUcsS0FBSzBVLElBQU1wVixFQUFNO0FBQ3BDLFlBQ0VBLEVBQU1vVixDQUFHLE1BQU0sT0FDZitFLEVBQVFuYSxFQUFNb1YsSUFBTSxDQUFDLENBQUMsS0FDdEIrRSxFQUFRbmEsRUFBTW9WLElBQU0sQ0FBQyxDQUFDLEtBRXRCQSxLQUtBK0UsRUFBUW5hLEVBQU1vVixDQUFHLENBQUMsTUFDaEIrRSxFQUFRbmEsRUFBTW9WLElBQU0sQ0FBQyxDQUFDLEtBQ3RCK0UsRUFBUW5hLEVBQU1vVixJQUFNLENBQUMsQ0FBQyxPQUd4QndELEVBQU0sUUFDSjVZLEVBQU0sTUFBTSxHQUFHb1YsQ0FBRyxJQUNsQnBWLEVBQU0sTUFBTW9WLElBQU0sQ0FBQyxHQUVyQjhELEdBQWFOLEdBQU8sRUFBRSxPQUFPeEQsR0FBSyxLQUFLQSxHQUFLO0FBQUEsZUFFekM7QUFDTCxrQkFBTUQsSUFBUy9RLEdBQU8sS0FBSyxjQUFjLEtBQUssYUFBYSxFQUFFO0FBQzdELFlBQUlwRSxFQUFNLFdBQVdtVixJQUNuQnpVLEVBQU0sZUFBZSxJQUNaVixFQUFNLFNBQVNtVixNQUN4QnlELEVBQU0sUUFBUTVZLEVBQU0sTUFBTSxHQUFHbVYsQ0FBTSxHQUNuQytELEdBQWFOLEdBQU9nQixDQUFTLEdBQzdCbFosRUFBTSxlQUFlO0FBQUE7QUFBQTtBQUdwQixVQUFJQSxFQUFNLFFBQVEsZ0JBRXJCMFUsTUFBUSxLQUNSLENBQUMsS0FBSyxHQUFHLEVBQUUsU0FBU3BWLEVBQU1vVixJQUFNLENBQUMsQ0FBQyxPQUdoQ0EsTUFBUXBWLEVBQU0sVUFDZEEsRUFBTW9WLENBQUcsTUFBTSxPQUVmQSxLQUNBd0QsRUFBTSxRQUNKNVksRUFBTSxNQUFNLEdBQUdvVixDQUFHLE1BQ2hCcFYsRUFBTW9WLElBQU0sQ0FBQyxLQUFLLE1BQU0sUUFDMUJwVixFQUFNLE1BQU1vVixJQUFNLENBQUMsR0FFckI4RCxHQUFhTixHQUFPLEVBQUUsT0FBT3hELEdBQUssS0FBS0EsR0FBSyxLQUU1QytFLEVBQVFuYSxFQUFNb1YsQ0FBRyxDQUFDLEtBQ2xCLENBQUMrRSxFQUFRLENBQUNuYSxFQUFNb1YsSUFBTSxDQUFDLENBQUMsTUFHeEJ3RCxFQUFNLFFBQVE1WSxFQUFNLE1BQU0sR0FBR29WLENBQUcsSUFBSSxNQUFNcFYsRUFBTSxNQUFNb1YsQ0FBRyxHQUN6RDhELEdBQWFOLEdBQU8sRUFBRSxPQUFPeEQsR0FBSyxLQUFLQSxHQUFLO0FBQUE7QUFBQSxJQUtyRDtBQUFBLElBRUQsWUFBWXVFLEdBQVE7QUFDbEIsV0FBSyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUNBLEtBQVUsQ0FBQyxLQUFLLFlBQ2pELEtBQUssYUFDUCxLQUFLLE1BQU07QUFBQSxJQUVkO0FBQUEsSUFFRCxRQUFRO0FBQ04sV0FBSyxNQUFNLE1BQU07QUFBQSxJQUNsQjtBQUFBLElBRUQsT0FBTztBQUNMLFdBQUssTUFBTSxLQUFLO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNVVBLE1BQUsvRCxLQUFVO0FBQUEsRUFDYixZQUFZLEVBQUUsWUFBQTBELElBQVksWUFBQWUsSUFBWSxZQUFBQyxJQUFZLE1BQUFmLEdBQU07QUFBQSxFQUN4RCxPQUFPLENBQUMscUJBQXFCLFVBQVUsU0FBUyxNQUFNO0FBQUEsRUFDdEQsY0FBYztBQUFBLEVBRWQsT0FBTztBQUFBLElBQ0wsWUFBWSxFQUFFLE1BQU0sTUFBTSxTQUFTLEtBQU07QUFBQSxJQUN6QyxZQUFZLEVBQUUsTUFBTSxRQUFRLFNBQVMsUUFBUztBQUFBLElBQzlDLGFBQWEsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDNUMsVUFBVSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUMzQyxRQUFRLEVBQUUsTUFBTSxRQUFRLFNBQVMsUUFBUztBQUFBLElBQzFDLFFBQVEsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFLO0FBQUEsRUFDdkM7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxjQUFjLEtBQUs7QUFBQSxNQUNuQixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixjQUFjO0FBQUEsTUFDZCxhQUFhO0FBQUEsTUFDYixhQUFhO0FBQUEsTUFDYixZQUFZO0FBQUEsSUFDZDtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLGFBQWE7QUFDWCxZQUFNLEVBQUUsWUFBQWdCLEdBQVksVUFBQUMsR0FBVSxRQUFBcEksR0FBUSxlQUFlaE8sRUFBSyxJQUFNO0FBQ2hFLGFBQU8sRUFBRSxZQUFBbVcsR0FBWSxVQUFBQyxHQUFVLFFBQUFwSSxHQUFRLFFBQUFoTyxFQUFPO0FBQUEsSUFDL0M7QUFBQSxJQUVELFVBQVU7QUFDUixhQUFPLEtBQUssZ0JBQWdCLEtBQUssWUFBWSxLQUFLO0FBQUEsSUFDbkQ7QUFBQSxJQUVELFFBQVE7QUFDTixhQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsSUFDekI7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQU91SDtBQUFBLFFBQ0w7QUFBQSxVQUNFLFFBQVEsS0FBSztBQUFBLFVBQ2IsTUFBTTZOLEdBQWU7QUFBQSxVQUNyQixNQUFNQSxHQUFlO0FBQUEsUUFDdEI7QUFBQSxRQUNEO0FBQUEsVUFDRSxNQUFNO0FBQUEsWUFDSixPQUFPO0FBQUEsWUFDUCxRQUFRLENBQUN4WixHQUFPNkQsR0FBTXZELE1BQU87O0FBQzNCLHFCQUFBdUQsTUFBUyxhQUFhLFNBQVMsS0FBSzdELENBQUssSUFDckMsU0FDQTRYLEtBQUExUyxLQUFBOUQsSUFBQSxLQUFLLFdBQUwsZ0JBQUFBLEVBQWEsU0FBYixnQkFBQThELEVBQW1CLFdBQW5CLGdCQUFBMFMsRUFBQSxLQUFBMVMsR0FBNEJsRixHQUFPNkQsR0FBTXZELE9BQVlOO0FBQUE7QUFBQSxVQUM3RDtBQUFBLFFBQ0Q7QUFBQSxRQUNELEtBQUs7QUFBQSxNQUNQO0FBQUEsSUFDRDtBQUFBLElBRUQsWUFBWTs7QUFDVixZQUFNeWEsSUFBTyxLQUFLO0FBQ2xCLFVBQUlBLEdBQU07QUFDUixjQUFNeEcsS0FBTzdTLElBQUFxWixFQUFLLE1BQU0sYUFBYSxNQUF4QixnQkFBQXJaLEVBQTRCO0FBQ3pDLFlBQUk2UztBQUNGLGlCQUFPd0csRUFBSyxTQUFTeEcsRUFBSztBQUFBO0FBRzlCLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxhQUFhO0FBQUEsTUFDWCxNQUFNO0FBQ0osZUFBTzdQLEdBQU8sS0FBSyxjQUFjLEtBQUssYUFBYSxLQUFLO0FBQUEsTUFDekQ7QUFBQSxNQUVELElBQUlwRSxHQUFPO0FBQ1QsY0FBTTRULElBQU9HLEdBQVUvVCxHQUFPLEtBQUssYUFBYTtBQUNoRCxZQUFJNFQsR0FBTTtBQUNSLGdCQUFNZ0csSUFBWVQsR0FBYSxLQUFLLEtBQUs7QUFDekMsZUFBSyxlQUFldkYsR0FDcEIsS0FBSyxVQUFVLE1BQU1zRixHQUFhLEtBQUssT0FBT1UsQ0FBUyxDQUFDO0FBQUE7QUFBQSxNQUU1RDtBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQUEsSUFDTCxXQUFXdkcsR0FBSUMsR0FBTTtBQUNuQixNQUFJLENBQUNELEtBQU8sQ0FBQ0MsTUFDWCxLQUFLLGVBQWVEO0FBQUEsSUFFdkI7QUFBQSxJQUVELGFBQWFyVCxHQUFPO0FBQ2xCLE1BQUksQ0FBQ0EsS0FBVSxDQUFDLEtBQUssZUFDbkIsS0FBSyxNQUFNLHFCQUFxQkEsQ0FBSyxHQUNyQyxLQUFLLE1BQU0sVUFBVUEsQ0FBSztBQUFBLElBRTdCO0FBQUEsSUFFRCxRQUFRcVQsR0FBSUMsR0FBTTtBQUNoQixNQUFJRCxJQUFLQyxLQUNQLEtBQUssTUFBTUQsSUFBSyxVQUFVLE1BQU07QUFBQSxJQUVwQztBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLFFBQVEzUCxHQUFPO0FBQ2IsV0FBSyxlQUFlQSxHQUNoQkEsSUFDRixLQUFLLGFBQWEsS0FFbEIsS0FBSyxXQUFXLElBQ2hCLEtBQUssV0FBVztBQUFBLElBRW5CO0FBQUEsSUFFRCxZQUFZaVcsR0FBUTtBQUNsQixNQUFJQSxNQUFXLEtBQUssWUFBWSxLQUFLLGFBQ25DLEtBQUssV0FBVyxJQUNoQixLQUFLLFdBQVcsTUFDTixLQUFLLGFBQ2YsS0FBSyxNQUFNLEdBQ1gsc0JBQXNCLE1BQU0sS0FBSyxjQUFjO0FBQUEsSUFFbEQ7QUFBQSxJQUVELFVBQVVqWixHQUFPO0FBQ2YsWUFBTXNWLElBQU8sS0FBSyxRQUFRdFYsQ0FBSztBQUMvQixXQUFLLE1BQU1zVixDQUFJLEVBQUUsVUFBVXRWLENBQUssR0FDNUJBLEVBQU0sbUJBQ1IsS0FBSyxhQUFhc1YsSUFDVEEsTUFBUyxLQUFLLGNBQ3ZCLEtBQUssYUFBYUEsQ0FBSTtBQUFBLElBRXpCO0FBQUEsSUFFRCxRQUFRdFYsSUFBUSxNQUFNO0FBQ3BCLFlBQU0sRUFBRSxPQUFBNlUsRUFBUSxJQUFFNEQsR0FBYSxLQUFLLEtBQUssR0FDbkMsRUFBRSxLQUFLakQsTUFBU29CLEdBQWlCNVcsQ0FBSztBQUM1QyxhQUFPLEtBQUssY0FBYyxRQUFRNlUsSUFBUVcsSUFBTyxLQUFLLFlBQ2xELFNBQ0E7QUFBQSxJQUNMO0FBQUEsSUFFRCxhQUFhRixJQUFPLEtBQUssV0FBVztBQUNsQyxNQUFJQSxNQUNGLEtBQUssYUFBYSxPQUVwQixLQUFLLFdBQVdBLE1BQVMsUUFDekIsS0FBSyxXQUFXQSxNQUFTO0FBQUEsSUFDMUI7QUFBQSxJQUVELFFBQVE7QUFDTixXQUFLLE1BQU0sTUFBTTtBQUFBLElBQ2xCO0FBQUEsSUFFRCxPQUFPO0FBQ0wsV0FBSyxNQUFNLEtBQUs7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hNQSxNQUFLSixLQUFVO0FBQUEsRUFDYixPQUFPLENBQUMsYUFBYTtBQUFBLEVBRXJCLE9BQU87QUFBQSxJQUNMLE9BQU8sRUFBRSxNQUFNLFFBQVEsU0FBUyxFQUFHO0FBQUEsSUFDbkMsTUFBTSxFQUFFLE1BQU0sUUFBUSxTQUFTLEVBQUc7QUFBQSxJQUNsQyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsR0FBSTtBQUFBLElBQ3ZDLFdBQVcsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFLO0FBQUEsRUFDM0M7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxXQUFXLENBQUU7QUFBQSxNQUNiLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUNWLGlCQUFpQixLQUFLO0FBQUEsTUFDdEIsYUFBYSxLQUFLO0FBQUEsSUFDcEI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixRQUFRO0FBQ04sY0FBUSxLQUFLLGNBQWMsS0FBSyxLQUFLLGtCQUFrQjtBQUFBLElBQ3hEO0FBQUEsSUFFRCxPQUFPO0FBQ0wsYUFBTyxLQUFLLElBQUksS0FBSyxRQUFRLEtBQUssa0JBQWtCLEdBQUcsS0FBSyxLQUFLO0FBQUEsSUFDbkU7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFFVixLQUFLOEUsR0FBTTtBQUNULFdBQUssY0FBY0E7QUFBQSxJQUNwQjtBQUFBLElBRUQsU0FBU0MsR0FBVTtBQUNqQixXQUFLLGtCQUFrQkE7QUFBQSxJQUN4QjtBQUFBLElBRUQsZ0JBQWdCQyxHQUFpQjtBQUMvQixXQUFLLFdBQVcsS0FBSyxLQUFLLEtBQUssUUFBUUEsQ0FBZSxHQUNsRCxLQUFLLGNBQWMsS0FBSyxhQUMxQixLQUFLLGNBQWMsS0FBSyxXQUUxQixLQUFLLGdCQUFnQjtBQUFBLElBQ3RCO0FBQUEsSUFFRCxZQUFZdkgsR0FBSUMsR0FBTTtBQUNwQixNQUFJRCxNQUFPQyxNQUNULEtBQUssZ0JBQWdCLEdBQ3JCLEtBQUssTUFBTSxlQUFlRCxDQUFFO0FBQUEsSUFFaEM7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQ1IsU0FBSyxjQUFjLEtBQUssTUFDeEIsS0FBSyxrQkFBa0IsS0FBSztBQUFBLEVBQzdCO0FBQUEsRUFFRCxVQUFVO0FBQ1IsU0FBSyxnQkFBZ0I7QUFBQSxFQUN0QjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsWUFBWXFILEdBQU07QUFDaEIsTUFBSUEsRUFBSyxTQUFTLENBQUNBLEVBQUssWUFBWUEsRUFBSyxVQUFVLEtBQUssZ0JBQ3RELEtBQUssY0FBY0EsRUFBSztBQUFBLElBRTNCO0FBQUEsSUFFRCxhQUFhQSxHQUFNO0FBQ2pCLFlBQU1sRCxJQUFVO0FBQUEsUUFDZCxpQkFBaUJrRCxFQUFLO0FBQUEsTUFDeEI7QUFDQSxhQUFJQSxFQUFLLFNBQ1BsRCxFQUFRLGVBQWVrRCxFQUFLLE1BQU0sSUFBSSxLQUVqQ2xEO0FBQUEsSUFDUjtBQUFBLElBRUQsa0JBQWtCO0FBQ2hCLFlBQU0sRUFBRSxVQUFBcUQsR0FBVSxVQUFBQyxHQUFVLE9BQUFDLEdBQU8saUJBQUFILEdBQWlCLGFBQUFJLEVBQVUsSUFBTSxNQUM5REMsSUFBYUosSUFBV0MsSUFBVyxHQUNuQ0ksSUFBWSxLQUFLLFdBQVcsS0FBSyxLQUFLSCxJQUFRSCxDQUFlO0FBRW5FLFVBQUlyRixJQUFRLEdBQ1JDLElBQU07QUFDVixNQUFJMEYsS0FBWUQsSUFDZHpGLElBQU0wRixJQUNHRixLQUFlSCxJQUFXLElBQ25DckYsSUFBTXlGLElBQ0dELEtBQWVFLElBQVdKLEtBQ25DdEYsSUFBTTBGLEdBQ04zRixJQUFRMkYsSUFBV0QsSUFBYSxNQUVoQzFGLElBQVF5RixJQUFjSCxHQUN0QnJGLElBQU13RixJQUFjRjtBQUd0QixZQUFNSyxJQUFZLENBQUM7QUFDbkIsTUFBQUEsRUFBVSxLQUFLO0FBQUEsUUFDYixPQUFPSCxJQUFjO0FBQUEsUUFDckIsTUFBTTtBQUFBLFFBQ04sVUFBVUEsS0FBZTtBQUFBLE9BQzFCLEdBQ0d6RixLQUFTLEtBQ1g0RixFQUFVLEtBQUssRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBRWxDNUYsSUFBUSxLQUNWNEYsRUFBVSxLQUFLO0FBQUEsUUFDYixPQUFPLEtBQUssSUFBSSxHQUFHSCxJQUFjLEVBQUU7QUFBQSxRQUNuQyxNQUFNO0FBQUEsT0FDUDtBQUVILGVBQVNyRixJQUFJSixHQUFPSSxLQUFLSCxHQUFLRztBQUM1QixRQUFBd0YsRUFBVSxLQUFLO0FBQUEsVUFDYixPQUFPeEY7QUFBQSxVQUNQLE1BQU1BO0FBQUEsVUFDTixRQUFRQSxNQUFNcUY7QUFBQSxTQUNmO0FBRUgsTUFBSXhGLElBQU0wRixJQUFXLEtBQ25CQyxFQUFVLEtBQUs7QUFBQSxRQUNiLE9BQU8sS0FBSyxJQUFJRCxHQUFVRixJQUFjLEVBQUU7QUFBQSxRQUMxQyxNQUFNO0FBQUEsT0FDUCxHQUVDeEYsS0FBTzBGLElBQVcsS0FDcEJDLEVBQVUsS0FBSyxFQUFFLE9BQU9ELEdBQVUsTUFBTUEsR0FBVSxHQUVwREMsRUFBVSxLQUFLO0FBQUEsUUFDYixPQUFPSCxJQUFjO0FBQUEsUUFDckIsTUFBTTtBQUFBLFFBQ04sVUFBVUEsS0FBZUU7QUFBQSxPQUMxQixHQUVELEtBQUssWUFBWUM7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3SUEsTUFBS3ZGLEtBQVU7QUFBQSxFQUNiLE9BQU8sQ0FBQyxxQkFBcUIsUUFBUTtBQUFBLEVBQ3JDLGNBQWM7QUFBQSxFQUVkLE9BQU87QUFBQSxJQUNMLFlBQVksRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDN0MsSUFBSSxFQUFFLE1BQU0sUUFBUSxTQUFTLEtBQU07QUFBQSxJQUNuQyxNQUFNLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQ3JDLFVBQVUsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDM0MsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLE9BQU8sR0FBRyxTQUFTLEdBQU07QUFBQSxFQUNuRDtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFNBQVMsS0FBSztBQUFBLElBQ2hCO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsVUFBVTtBQUNSLGFBQU87QUFBQSxRQUNMLEtBQUssT0FBTztBQUFBLFFBQ1o7QUFBQSxVQUNFLGdCQUFnQixLQUFLO0FBQUEsVUFDckIsaUJBQWlCLEtBQUs7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxJQUNEO0FBQUEsSUFFRCxTQUFTO0FBQ1AsWUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFBd0YsR0FBUyxXQUFBQyxFQUFVLElBQUksQ0FBQyxFQUFBLElBQU0sTUFFMUNsRyxJQUFTLEtBQUssSUFBSSxHQUFHaUcsS0FBQSxnQkFBQUEsRUFBUyxRQUFRQyxLQUFBLGdCQUFBQSxFQUFXLE1BQU07QUFDN0QsYUFBTztBQUFBLFFBQ0wsa0JBQWtCbEcsSUFBUyxHQUFHQSxJQUFTLFdBQVc7QUFBQSxNQUNwRDtBQUFBLElBQ0Q7QUFBQSxJQUVELGFBQWE7QUFDWCxZQUFNLEVBQUUsT0FBTzBELEdBQUcsR0FBR2pVLEVBQWEsSUFBRSxLQUFLO0FBQ3pDLGFBQU9BO0FBQUEsSUFDVDtBQUFBLEVBQ0Q7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLFdBQVcwVyxHQUFZO0FBQ3JCLFdBQUssVUFBVUE7QUFBQSxJQUNoQjtBQUFBLElBRUQsUUFBUUYsR0FBUztBQUNmLE1BQUlBLE1BQVksS0FBSyxlQUNuQixLQUFLLE1BQU0scUJBQXFCQSxDQUFPLEdBQ3ZDLEtBQUssTUFBTSxVQUFVQSxDQUFPO0FBQUEsSUFFaEM7QUFBQSxFQUNEO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxRQUFRO0FBQ04sV0FBSyxNQUFNLE1BQU0sTUFBTTtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNGO0FDeEZBLFNBQVNHLEdBQWlCLEVBQUUsU0FBQUMsS0FBVyxFQUFFLE9BQUFDLEVBQUksR0FBSztBQUNoRCxTQUFPRCxJQUNIRSxHQUFjQyxJQUFZQyxJQUFPSCxDQUFLLElBQ3RDQSxFQUFNLFFBQVE7QUFDcEI7QUFFQUYsR0FBaUIsUUFBUTtBQUFBLEVBQ3ZCLFNBQVMsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFLO0FBQzFDO0FBRUEsTUFBSzNGLEtBQWEyRixJQUVaTSxLQUFXLENBQUMxVyxHQUFTMlcsTUFBVSxPQUFPLE9BQU8zVyxFQUFRLE9BQU8yVyxDQUFLLEdBRWpFQyxLQUFjLENBQUFwYixNQUFZLFdBQVdBLEdBQVUsQ0FBQyxHQUdoRHFiLEtBQWUsQ0FBQTdXLE1BQVcsaUJBQWlCQSxDQUFPLEVBQUUsUUFFcER5VyxLQUFRO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFFTixhQUFhelcsR0FBUztBQUlwQixJQUFBNFcsR0FBWSxNQUFNRixHQUFTMVcsR0FBUyxFQUFFLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFBQSxFQUN0RDtBQUFBLEVBRUQsUUFBUUEsR0FBUztBQUtmLFVBQU0sRUFBRSxPQUFBOFcsTUFBVSxpQkFBaUI5VyxDQUFPO0FBQzFDLElBQUEwVyxHQUFTMVcsR0FBUztBQUFBLE1BQ2hCLE9BQUE4VztBQUFBLE1BQ0EsVUFBVTtBQUFBLE1BQ1YsWUFBWTtBQUFBLE1BQ1osUUFBUTtBQUFBLEtBQ1QsR0FDREYsR0FBWSxNQUFNO0FBQ2hCLFlBQU0sRUFBRSxRQUFBRyxNQUFXLGlCQUFpQi9XLENBQU87QUFDM0MsTUFBQTBXLEdBQVMxVyxHQUFTO0FBQUEsUUFDaEIsT0FBTztBQUFBLFFBQ1AsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osUUFBUTtBQUFBLE9BQ1QsR0FDRDZXLEdBQWE3VyxDQUFPLEdBQ3BCNFcsR0FBWSxNQUFNRixHQUFTMVcsR0FBUyxFQUFFLFFBQUErVyxFQUFRLENBQUEsQ0FBQztBQUFBLEtBQ2hEO0FBQUEsRUFDRjtBQUFBLEVBRUQsUUFBUS9XLEdBQVM7QUFDZixVQUFNLEVBQUUsUUFBQStXLE1BQVcsaUJBQWlCL1csQ0FBTztBQUMzQyxJQUFBMFcsR0FBUzFXLEdBQVMsRUFBRSxRQUFBK1csR0FBUSxHQUM1QkYsR0FBYTdXLENBQU8sR0FDcEI0VyxHQUFZLE1BQU1GLEdBQVMxVyxHQUFTLEVBQUUsUUFBUSxFQUFBLENBQUcsQ0FBQztBQUFBLEVBQ3BEO0FBQ0Y7QUM3RE8sU0FBU2dYLEdBQWdCQyxHQUFPO0FBQ3JDLFNBQU9BLEtBQVNoWCxFQUFRZ1gsQ0FBSyxFQUFFLEtBQUssQ0FBQUEsTUFBU0EsRUFBTSxTQUFTQyxFQUFPO0FBQ3JFO0FBRU8sU0FBU0MsR0FBZUMsR0FBTVgsSUFBUSxJQUFJO0FBQy9DLFNBQUFXLElBQU94WSxFQUFTd1ksQ0FBSSxJQUFJQyxHQUFVLEVBQUNELENBQUksSUFBSUEsR0FDcENKLEdBQWdCSSxLQUFBLGdCQUFBQSxFQUFPWCxFQUFNO0FBQ3RDO0FDTkEsTUFBZWEsS0FBQTtBQUFBLEVBQ2IsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLGFBQWEsQ0FBRTtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUFBLEVBRUQsWUFBWTtBQUNWLGVBQVcsRUFBRSxRQUFBQyxPQUFZLEtBQUs7QUFDNUIsTUFBQUEsRUFBUTtBQUVWLFNBQUssY0FBYyxDQUFFO0FBQUEsRUFDdEI7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLE1BQU12WCxHQUFTdEIsR0FBTXNULEdBQVM7QUFDNUIsWUFBTTFWLElBQVN3VjtBQUFBLFFBQ2I5UjtBQUFBLFFBQ0FvQyxFQUFTMUQsQ0FBSSxJQUFJQSxJQUFPLEVBQUUsQ0FBQ0EsQ0FBSSxHQUFHc1QsRUFBUztBQUFBLE1BQzVDO0FBQ0Qsa0JBQUssWUFBWSxLQUFLMVYsQ0FBTSxHQUNyQkE7QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNIO0FDNUJlLE1BQU1rYixHQUFTO0FBQUEsRUFDNUIsV0FBV0MsR0FBTztBQUNoQixRQUFJLEtBQUs7QUFDUCxpQkFBV0MsS0FBUUQ7QUFDakIsWUFBSSxLQUFLLE1BQU0sU0FBU0MsQ0FBSTtBQUMxQixpQkFBTztBQUFBO0FBSWIsV0FBTztBQUFBLEVBQ1I7QUFDSDtBQ1ZBLE1BQWVDLEtBQUE7QUFBQSxFQUNiLFVBQVU7QUFDUixXQUFPO0FBQUEsTUFDTCx3QkFBd0IsTUFBTTtBQUFBLElBQy9CO0FBQUEsRUFDRjtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLGtCQUFrQixDQUFFO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixzQkFBc0I7QUFDcEIsYUFBTyxLQUFLLGlCQUFpQixDQUFDO0FBQUEsSUFDL0I7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUE7QUFBQTtBQUFBLElBR1AseUJBQXlCeFksR0FBaUJPLEdBQUs7QUFDN0MsWUFBTSxFQUFFLGtCQUFBa1ksRUFBZ0IsSUFBSztBQUM3QixNQUFJbFksSUFDRmtZLEVBQWlCLEtBQUt6WSxDQUFlLElBRXJDeVksRUFBaUIsT0FBT0EsRUFBaUIsUUFBUXpZLENBQWUsR0FBRyxDQUFDO0FBQUEsSUFFdkU7QUFBQSxFQUNGO0FBQ0gsR0M3QmUwWSxLQUFBO0FBQUEsRUFDYixRQUFRLENBQUNGLEVBQWlCO0FBQUEsRUFFMUIsVUFBVTtBQUFBLElBQ1IsU0FBUztBQUNQLGFBQU8sS0FBSyxpQkFBaUIsUUFBUSxDQUFDLEVBQUUsUUFBQXJaLEVBQVEsTUFBS0EsS0FBVSxFQUFFO0FBQUEsSUFDbEU7QUFBQSxJQUVELFlBQVk7QUFDVixhQUFPLEtBQUssaUJBQWlCLEtBQUssQ0FBQXdaLE1BQU1BLEVBQUcsU0FBUztBQUFBLElBQ3JEO0FBQUEsSUFFRCxVQUFVO0FBQ1IsYUFBTyxLQUFLLGlCQUFpQixLQUFLLENBQUFBLE1BQU1BLEVBQUcsT0FBTztBQUFBLElBQ25EO0FBQUEsSUFFRCxVQUFVO0FBQ1IsYUFBTyxLQUFLLGlCQUFpQixNQUFNLENBQUFBLE1BQU1BLEVBQUcsT0FBTztBQUFBLElBQ3BEO0FBQUEsSUFFRCxjQUFjO0FBQ1osYUFBTyxLQUFLLGlCQUFpQixNQUFNLENBQUFBLE1BQU1BLEVBQUcsT0FBTztBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsWUFBWTdmLEdBQU80RixJQUFTLElBQU07QUFDaEMsYUFBTyxLQUFLLGlCQUFpQixNQUFNLENBQUFpYSxNQUFNQSxFQUFHLFlBQVk3ZixHQUFPNEYsQ0FBTSxDQUFDO0FBQUEsSUFDdkU7QUFBQSxJQUVELFVBQVU1RixHQUFPO0FBQ2YsYUFBTyxLQUFLLGlCQUFpQixNQUFNLENBQUE2ZixNQUFNQSxFQUFHLFVBQVU3ZixDQUFLLENBQUM7QUFBQSxJQUM3RDtBQUFBLElBRUQsa0JBQWtCO0FBQ2hCLFdBQUssaUJBQWlCLFFBQVEsQ0FBQTZmLE1BQU1BLEVBQUcsZ0JBQWUsQ0FBRTtBQUFBLElBQ3pEO0FBQUEsSUFFRCxjQUFjO0FBQ1osV0FBSyxpQkFBaUIsUUFBUSxDQUFBQSxNQUFNQSxFQUFHLFlBQVcsQ0FBRTtBQUFBLElBQ3JEO0FBQUEsSUFFRCxxQkFBcUJ4WixHQUFRQyxHQUFPO0FBQ2xDLFdBQUssaUJBQWlCO0FBQUEsUUFDcEIsQ0FBQXVaLE1BQU1BLEVBQUcscUJBQXFCeFosR0FBUUMsQ0FBSztBQUFBLE1BQzVDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDSCxHQy9DZXdaLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ0YsRUFBYztBQUFBLEVBRXZCLFVBQVU7QUFDUixXQUFPO0FBQUEsTUFDTCxpQkFBaUIsTUFBTTtBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlSLE9BQU8sQ0FBRTtBQUFBLE1BQ1QsV0FBVyxDQUFFO0FBQUE7QUFBQSxJQUNkO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsaUJBQWlCO0FBRWYsYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELGFBQWE7QUFDWCxVQUFJblMsSUFBUSxHQUNSc1MsSUFBaUI7QUFDckIsYUFBUUEsSUFBaUJBLEVBQWUsZ0JBQWdCO0FBQ3RELFFBQUF0UztBQUVGLGFBQU9BO0FBQUEsSUFDUjtBQUFBLElBRUQsY0FBYztBQUNaLGFBQU8sS0FBSyxPQUFPLFFBQVEsS0FBSyxVQUFVO0FBQUEsSUFDM0M7QUFBQSxJQUVELGNBQWM7QUFFWixZQUFNLEVBQUUsU0FBQXVTLE1BQVksS0FBSztBQUN6QixhQUFPLEtBQUssZ0JBQWdCQSxFQUFRQSxFQUFRLFNBQVMsQ0FBQztBQUFBLElBQ3ZEO0FBQUEsSUFFRCxzQkFBc0I7QUFHcEIsWUFBTSxFQUFFLFNBQUFBLE1BQVksS0FBSztBQUN6QixlQUFTekgsSUFBSXlILEVBQVEsU0FBUyxHQUFHekgsS0FBSyxHQUFHQSxLQUFLO0FBQzVDLGNBQU0wSCxJQUFTRCxFQUFRekgsQ0FBQztBQUN4QixZQUFJLENBQUMwSCxFQUFPLEtBQUs7QUFDZixpQkFBTyxLQUFLLGdCQUFnQkE7QUFBQTtBQUdoQyxhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNsQjtBQUFBLElBRUQsU0FBUztBQUNQLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxPQUFPOztBQUNMLGNBQU9qYyxJQUFBLEtBQUssZ0JBQUwsZ0JBQUFBLEVBQWtCO0FBQUEsSUFDMUI7QUFBQSxJQUVELE9BQU87O0FBQ0wsYUFBTyxLQUFLLGNBQWFBLElBQUEsS0FBSyxnQkFBTCxnQkFBQUEsRUFBa0IsSUFBSTtBQUFBLElBQ2hEO0FBQUEsSUFFRCxRQUFRO0FBQ04sYUFBTyxLQUFLLFNBQVMsS0FBSyxNQUFNO0FBQUEsSUFDakM7QUFBQSxJQUVELGFBQWE7QUFDWCxZQUFNLEVBQUUsWUFBQWtjLEVBQVUsSUFBSyxLQUFLLFVBQVUsQ0FBRTtBQUN4QyxhQUFPQSxLQUFjLEdBQUcsS0FBSyxvQkFBb0IsS0FBSztBQUFBLElBQ3ZEO0FBQUEsSUFFRCxtQkFBbUI7QUFDakIsYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELFFBQVE7O0FBSU4sYUFBTyxLQUFLLE9BQU8sUUFBT2xjLElBQUEsS0FBSyxTQUFMLGdCQUFBQSxFQUFXLEtBQUssS0FBSztBQUFBLElBQ2hEO0FBQUE7QUFBQSxJQUdELGFBQWE7QUFDWCxhQUFPO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFBQSxFQUVELGtCQUFrQmlTLEdBQUlDLEdBQU05UixHQUFNO0FBQ2hDLHlCQUFNLGtCQUFrQjZSLEdBQUlDLEdBQU05UjtBQUFBLEVBQ25DO0FBQUEsRUFFRCxpQkFBaUI2UixHQUFJQyxHQUFNOVIsR0FBTTtBQUMvQix5QkFBTSxrQkFBa0I2UixHQUFJQyxHQUFNOVI7QUFBQSxFQUNuQztBQUFBLEVBRUQsVUFBVTtBQUlSLFNBQUssU0FBUyxnQkFBZ0IsS0FBSyxJQUFJO0FBQUEsRUFDeEM7QUFBQSxFQUVELFlBQVk7QUFDVixVQUFNLEVBQUUsaUJBQUErYixNQUFvQixLQUFLO0FBQ2pDLElBQUFBLEVBQWdCLE9BQU9BLEVBQWdCLFFBQVEsSUFBSSxHQUFHLENBQUM7QUFBQSxFQUN4RDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1Asa0JBQWtCbEssR0FBSUMsR0FBTTlSLEdBQU07QUFDaEMsVUFBSWdjLElBQUs7QUFnQlQ7QUFBQTtBQUFBO0FBQUEsTUFYRWxLLEVBQUssS0FBSyxXQUFXLEtBQUssSUFBSSxLQUM5QixDQUFDRCxFQUFHLEtBQUssV0FBVyxLQUFLLElBQUk7QUFBQSxNQUU3QkMsRUFBSyxTQUFTRCxFQUFHLFNBQ2YsS0FBSyxrQkFBa0JBLEdBQUlDLENBQUk7QUFBQTtBQUFBO0FBQUEsTUFJL0JELEVBQUcsS0FBSyxVQUFVQyxFQUFLLEtBQUssWUFJMUIsS0FBSyxhQUlQa0ssSUFDRSxLQUFLLGVBQ0wsS0FBSyxZQUFhLElBS2hCLEtBQUssWUFDUEEsSUFBSyxPQUFPO0FBQUEsUUFDVixtREFDRSxLQUFLLE1BQU07QUFBQSxNQUVkLEtBSVBoYyxFQUFLZ2MsQ0FBRTtBQUFBLElBQ1I7QUFBQSxJQUVELGFBQWFDLEdBQWM7QUFJekIsWUFBTSxFQUFFLE1BQUF6ZixNQUFTLEtBQUs7QUFDdEIsYUFBT3lmLElBQ0h6ZixFQUNHLE1BQU0sR0FBRyxFQUNULE1BQU0sR0FBR3lmLEVBQWEsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUN2QyxLQUFLLEdBQUcsSUFDWHpmO0FBQUEsSUFDTDtBQUFBLElBRUQsYUFBYUEsR0FBTTtBQUNqQixhQUFPLEdBQUcsS0FBSyxRQUFRQTtBQUFBLElBQ3hCO0FBQUEsSUFFRCxrQkFBa0JxVixHQUFJQyxHQUFNO0FBRTFCLFlBQU1vSyxJQUFXLEtBQUssS0FBSyxNQUFNLFlBQVksRUFBRSxDQUFDO0FBQ2hELGFBQU8sQ0FBQ0MsR0FBZ0J0SyxFQUFHLE1BQU1DLEVBQUssSUFBSSxFQUFFLFdBQVdvSyxDQUFRO0FBQUEsSUFDaEU7QUFBQSxFQUNGO0FBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hKQSxXQUFrQmpLLEVBQWMsVUFBVSxZQUFTO0FBQUEsRUFDakQsUUFBUSxDQUFDeUosRUFBVTtBQUFBLEVBRW5CLFVBQVU7QUFFUixXQUFPO0FBQUEsTUFDTCxrQkFBa0IsTUFBTTs7QUFBQSxpQkFBQTliLElBQUEsS0FBSyxrQkFBTCxnQkFBQUEsRUFBb0Isb0JBQW1CO0FBQUE7QUFBQSxNQUMvRCxvQkFBb0IsTUFBTTs7QUFBQSxpQkFBQUEsSUFBQSxLQUFLLGtCQUFMLGdCQUFBQSxFQUFvQixzQkFBcUI7QUFBQTtBQUFBLElBQ3JFO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQTtBQUFBLE1BRUwsV0FBVztBQUFBO0FBQUE7QUFBQSxNQUdYLE1BQU0sQ0FBQztBQUFBLElBQ1Q7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixTQUFTO0FBQ1AsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNsQjtBQUFBLElBRUQsT0FBTztBQUNMLGFBQU8sS0FBSyxPQUFPO0FBQUEsSUFDcEI7QUFBQSxJQUVELFNBQVM7QUFDUCxhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsd0JBQXdCO0FBQ3RCLGFBQU93SCxHQUFzQixLQUFLLE1BQU07QUFBQSxJQUN6QztBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLLG9CQUFvQix1QkFBdUIsS0FBSyxJQUFJO0FBQUEsSUFDakU7QUFBQSxJQUVELGFBQWE7QUFDWCxZQUFNLEVBQUUsV0FBQXhJLEdBQVcsR0FBRzJGLE1BQVcsS0FBSztBQUd0QyxhQUFPLEtBQUssd0JBQ1I7QUFBQSxRQUNFLEdBQUdBO0FBQUEsUUFDSCxZQUFZO0FBQUEsVUFDVixDQUFDQSxFQUFPLElBQUksR0FBRztBQUFBLFlBQ2IsTUFBTUEsRUFBTztBQUFBLFlBQ2IsT0FBTztBQUFBLFlBQ1AsR0FBRzNGO0FBQUEsVUFDTDtBQUFBLFFBQ0Y7QUFBQSxNQUNGLElBQ0EyRjtBQUFBLElBQ0w7QUFBQSxJQUVELGVBQWU7QUFDYixhQUFPa0QsR0FBMEIsS0FBSyxZQUFZOEgsRUFBVztBQUFBLElBQy9EO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsT0FBT3NDLEdBQUlDLEdBQU07QUFFZixNQUFJLEtBQUssa0JBQWtCRCxHQUFJQyxDQUFJLE1BQ2pDLEtBQUssWUFBWSxJQUNqQixLQUFLLE9BQU8sQ0FBQztBQUFBLElBRWpCO0FBQUEsRUFDRDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsUUFBUW5VLEdBQU07QUFDWixXQUFLLE9BQU9BO0FBQUEsSUFDYjtBQUFBLElBRUQsYUFBYW5CLEdBQU07QUFFakIsYUFBTyxLQUFLLHdCQUNSLEtBQUssT0FDTCxHQUFHLEtBQUssUUFBUUE7QUFBQSxJQUNyQjtBQUFBLElBRUQsV0FBVzRmLEdBQVc7QUFDcEIsV0FBSyxZQUFZLENBQUMsQ0FBQ0E7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDRixDQUFDLGlEQzVIS0MsS0FBK0MsZ0JBQUFDLEdBQWdCO0FBQUEsRUFDbkUsTUFBTTtBQUFBLEVBQ04sT0FBTyxDQUFDLE1BQU0sU0FBUztBQUFBLEVBQ3ZCLE1BQU1sQyxHQUFPLEVBQUUsT0FBQUgsS0FBUztBQUN0QixRQUFJc0M7QUFDSixVQUFNbmMsSUFBU21ZLE1BQ1RpRSxJQUFXLE1BQU1ELEtBQVFBLEVBQUssU0FBUSxHQUN0Q0UsSUFBYSxNQUFNRixLQUFRQSxFQUFLLFdBQVU7QUFDaEQsV0FBQXJMO0FBQUEsTUFDRSxNQUFNd0wsR0FBYXRjLENBQU07QUFBQSxNQUN6QixDQUFDaVcsTUFBTztBQUNOLFFBQUtBLE1BRUxrRyxJQUFPSSxHQUFnQnRHLEdBQUkrRCxFQUFNLFdBQVcsQ0FBRSxDQUFBLEdBQzlDb0M7TUFDRDtBQUFBLE1BQ0QsRUFBRSxPQUFPLE9BQVE7QUFBQSxJQUN2QixHQUNJSSxHQUFlLE1BQU1ILEVBQVUsQ0FBRSxHQUMxQixNQUFNO0FBQ1gsVUFBSXhDLEVBQU07QUFDUixlQUFPNEMsR0FBRXpDLEVBQU0sTUFBTSxPQUFPLEVBQUUsS0FBS2hhLEtBQVU2WixFQUFNLFFBQU8sQ0FBRTtBQUFBLElBQ3BFO0FBQUEsRUFDRztBQUNILENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1dELFdBQWtCaEksRUFBYyxVQUFVLGNBQVc7QUFBQSxFQUNuRCxRQUFRLENBQUNnSixFQUFRO0FBQUEsRUFDakIsWUFBWSxFQUFFLGNBQUFvQixHQUFjO0FBQUEsRUFDNUIsT0FBTyxDQUFDLFFBQVE7QUFBQSxFQUVoQixVQUFVO0FBQ1IsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLE1BQU07QUFBQSxJQUMxQjtBQUFBLEVBQ0Q7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLFlBQVksRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDNUMsU0FBUyxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN6QyxTQUFTLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3pDLE1BQU0sRUFBRSxNQUFNLFFBQVEsU0FBUyxPQUFPLENBQUUsR0FBRztBQUFBLElBQzNDLFVBQVU7QUFBQSxNQUNSLE1BQU07QUFBQSxNQUNOLFNBQVMsT0FBTztBQUFBLFFBQ2QsT0FBTztBQUFBLFFBQ1AsY0FBYztBQUFBO0lBRWxCO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUVMLFVBQU1TLElBQWF2USxHQUFNLEtBQUssSUFBSTtBQUNsQyxlQUFXbk8sS0FBTyxLQUFLO0FBQ3JCLE1BQU1BLEtBQU8wZSxNQUNYQSxFQUFXMWUsQ0FBRyxJQUFJO0FBR3RCLFdBQU87QUFBQSxNQUNMLFlBQUEwZTtBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixrQkFBa0I7QUFDaEIsYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELFNBQVM7QUFDUCxhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixZQUFZLEtBQUs7QUFBQSxNQUNuQjtBQUFBLElBQ0Q7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQU8sT0FBTztBQUFBLFFBQ1osT0FBTyxRQUFRdE8sR0FBaUIsS0FBSyxPQUFPLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQSxVQUc3QyxDQUFDLENBQUNwUSxHQUFLbUcsQ0FBTSxPQUNQbkcsTUFBUSxZQUFZLENBQUNtRyxFQUFPLFdBQzlCQSxJQUFTO0FBQUEsWUFDUCxHQUFHQTtBQUFBLFlBQ0gsUUFBUTtBQUFBLGNBQ04sT0FBTyxNQUFNLEtBQUssT0FBTztBQUFBLFlBQzNCO0FBQUEsVUFDRixJQUVLLENBQUNuRyxHQUFLbUcsQ0FBTTtBQUFBLFFBRXZCO0FBQUEsTUFDRjtBQUFBLElBQ0Q7QUFBQSxJQUVELG1CQUFtQjtBQUNqQixhQUFPO0FBQUEsUUFDTCxXQUFXO0FBQUEsUUFDWCxlQUFlLE1BQU0sS0FBSyxNQUFNO0FBQUEsUUFDaEMsY0FBYyxLQUFLO0FBQUEsTUFDckI7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTyxPQUFPLEtBQUssS0FBSyxhQUFhLEVBQUUsU0FBUztBQUFBLElBQ2pEO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBTyxDQUFDLENBQUMsS0FBSyxjQUFjO0FBQUEsSUFDOUI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQ1IsU0FBSyxNQUFNLFFBQVE7QUFBQSxNQUNqQixPQUFPLENBQUFyRixNQUFTO0FBQ2QsU0FBSyxLQUFLLGFBQWEsQ0FBQyxLQUFLLGVBQWVBLEVBQU0sWUFBWSxNQUM1RCxLQUFLLE9BQU87QUFBQSxNQUVoQjtBQUFBLEtBQ0Q7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxTQUFTO0FBQ1AsV0FBSyxNQUFNLFFBQVE7QUFBQSxJQUNwQjtBQUFBLElBRUQsUUFBUVYsR0FBTztBQUNiLFdBQUssUUFBUSxRQUFRQSxDQUFLLEdBQzFCLEtBQUssT0FBTztBQUFBLElBQ2I7QUFBQSxJQUVELE9BQU9BLEdBQU87QUFDWixXQUFLLFFBQVEsT0FBT0EsQ0FBSyxHQUN6QixLQUFLLE9BQU87QUFBQSxJQUNiO0FBQUEsSUFFRCxTQUFTO0FBQ1AsV0FBSyxRQUFRLEtBQUssVUFBVTtBQUFBLElBQzdCO0FBQUEsSUFFRCxTQUFTO0FBR1AsV0FBSyxRQUFRLE1BQVM7QUFBQSxJQUN2QjtBQUFBLElBRUQsUUFBUTtBQUNOLFdBQUssT0FBTztBQUFBLElBQ2I7QUFBQSxJQUVELFlBQVk7QUFDVixNQUFJLEtBQUssU0FBUyxnQkFDaEIsS0FBSyxNQUFNO0FBQUEsSUFFZjtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVHRCxXQUFrQnlULEVBQWMsVUFBVSxZQUFTO0FBQUEsRUFDakQsUUFBUSxDQUFDZ0osRUFBUTtBQUFBLEVBQ2pCLFlBQVksRUFBRSxZQUFBOEIsR0FBWTtBQUFBLEVBRTFCLFVBQVU7QUFDUixXQUFPO0FBQUEsTUFDTCxRQUFRLE1BQU0sS0FBSztBQUFBLElBQ3JCO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLFFBQVEsVUFBVSxPQUFPLEdBQUcsVUFBVSxHQUFNO0FBQUEsSUFDdEUsU0FBUyxFQUFFLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBRSxHQUFFO0FBQUEsRUFDOUM7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxlQUFlLENBQUU7QUFBQSxNQUNqQixjQUFjO0FBQUEsTUFDZCxTQUFTLENBQUU7QUFBQSxNQUNYLFdBQVc7QUFBQSxNQUNYLGNBQWM7QUFBQSxNQUNkLFlBQVk7QUFBQSxNQUNaLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLLE1BQU07QUFBQSxJQUNuQjtBQUFBLElBRUQsWUFBWTtBQUNWLGFBQU8sS0FBSyxlQUFlO0FBQUEsSUFDNUI7QUFBQSxJQUVELGNBQWM7QUFDWixZQUFNQyxJQUFTO0FBR2YsYUFBTztBQUFBLFFBQ0wsS0FBSyxTQUFTO0FBQUEsUUFDZDtBQUFBLFVBQ0UsQ0FBQyxHQUFHQSxhQUFrQixHQUFHLEtBQUssYUFBYSxNQUFlO0FBQUEsVUFDMUQsQ0FBQyxHQUFHQSxhQUFrQixHQUFHLEtBQUssYUFBYSxNQUFlO0FBQUEsUUFDNUQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFDUixTQUFLLFNBQVMsUUFBUSxTQUFTLFNBQVMsaUJBR3hDLEtBQUssU0FBUyxrQkFBa0IsQ0FBQztBQUFBLEVBQ2xDO0FBQUEsRUFFRCxNQUFNLFVBQVU7QUFDZCxTQUFLLGlCQUFpQixHQUV0QkMsR0FBYyxLQUFLLEtBQUs7QUFBQSxNQUN0QixRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxVQUFVLENBQUFsYSxNQUFRQSxFQUFLLFFBQVEsWUFBWTtBQUFBLE1BQzNDLFdBQVc7QUFBQSxNQUNYLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVNtYSxHQUFVO0FBQ2pCLFFBQUFBLEVBQVMsV0FBV0EsRUFBUyxVQUFVLFFBQVEsSUFBSTtBQUFBLE1BQ3JEO0FBQUEsS0FDRCxHQUlELEtBQUssTUFBTSxVQUFVO0FBQUEsTUFDbkIsT0FBTyxDQUFBaGUsTUFBUztBQUNkLFFBQUtBLEVBQU0sT0FBTyxRQUFRLGFBQWEsTUFDckMsS0FBSyxTQUFTLGNBQWM7QUFBQSxNQUUvQjtBQUFBLE1BRUQsT0FBTyxDQUFBQSxNQUFTO0FBQ2QsUUFBSUEsRUFBTSxTQUFTLFVBQ2pCLEtBQUssU0FBUyxjQUFjO0FBQUEsTUFFaEM7QUFBQSxLQUNEO0FBRUQsUUFBSTtBQUNGLFdBQUssYUFBYSxJQUNkLE1BQU0sS0FBSyxjQUNiLE1BQU0sS0FBSyxhQUFhLElBRXhCLE1BQU0sS0FBSyxNQUFNO0FBQUEsSUFFbkIsU0FBT2llLEdBQVA7QUFDQSxjQUFRLE1BQU1BLENBQUc7QUFBQSxJQUNuQjtBQUNBLFNBQUssYUFBYTtBQUFBLEVBQ25CO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxtQkFBbUI7QUFLakIsVUFBSUMsSUFBWSxHQUNaQyxJQUFVLENBQUM7QUFFZixZQUFNQyxJQUF3QixDQUFBdEQsTUFBVztBQUN2QyxtQkFBV3VELEtBQVVGO0FBQ25CLFVBQUFFLEVBQ0csUUFBUSxpQkFBaUIsRUFDekIsVUFBVSxPQUFPLG9CQUFvQnZELENBQU87QUFFakQsUUFBS0EsTUFDSHFELElBQVUsQ0FBQztBQUFBLE1BRWYsR0FFTUcsSUFBbUIsQ0FBQXhELE1BQVc7QUFDbEMsYUFBSyxrQkFBa0JBLEdBQ25CQSxJQUNGc0QsRUFBc0IsRUFBSSxJQUUxQixXQUFXLE1BQU1BLEVBQXNCLEVBQUssR0FBRyxHQUFHO0FBQUEsTUFFdEQ7QUFFQSxXQUFLLE1BQU0sVUFBVTtBQUFBLFFBQ25CLFdBQVcsQ0FBQXBlLE1BQVM7QUFDbEIsY0FBSSxDQUFDa2UsS0FBYWxlLEVBQU0sY0FBYztBQUNwQyxZQUFBbWUsSUFBVSxTQUFTLGlCQUFpQixjQUFjO0FBQ2xELGtCQUFNSSxJQUFhSixFQUFRLFNBQVM7QUFFcEMsZ0JBREFuZSxFQUFNLGFBQWEsZ0JBQWdCdWUsSUFBYSxTQUFTLFFBQ3JEQTtBQUNGLGNBQUFELEVBQWlCLEVBQUk7QUFBQSxpQkFDaEI7QUFDTCxjQUFBdGUsRUFBTSxlQUFlLEdBQ3JCQSxFQUFNLGdCQUFnQjtBQUN0QjtBQUFBO0FBQUE7QUFHSixVQUFBa2U7QUFBQSxRQUNEO0FBQUEsUUFFRCxXQUFXLENBQUFsZSxNQUFTO0FBQ2xCLFVBQUFrZSxLQUNJLENBQUNBLEtBQWFsZSxFQUFNLGdCQUN0QnNlLEVBQWlCLEVBQUs7QUFBQSxRQUV6QjtBQUFBLFFBRUQsVUFBVSxDQUFBdGUsTUFBUztBQUNqQixjQUFJQSxFQUFNLGNBQWM7QUFDdEIsa0JBQU13ZSxJQUFVeGUsRUFBTSxPQUFPO0FBQUEsY0FDM0I7QUFBQSxZQUNGO0FBQ0EsWUFBQUEsRUFBTSxhQUFhLGFBQWF3ZSxJQUFVLFNBQVMsUUFDOUNBLE1BQ0h4ZSxFQUFNLGVBQWUsR0FDckJBLEVBQU0sZ0JBQWdCO0FBQUE7QUFBQSxRQUczQjtBQUFBLFFBRUQsTUFBTSxDQUFBQSxNQUFTO0FBQ2IsVUFBQWtlLElBQVksR0FDUmxlLEVBQU0sZ0JBQ1JzZSxFQUFpQixFQUFLO0FBQUEsUUFFMUI7QUFBQSxPQUNEO0FBQUEsSUFDRjtBQUFBLElBRUQsT0FBTyxFQUFFLE1BQUFuYixJQUFPLFFBQVEsT0FBQXNiLEdBQU8sTUFBQTFFLEVBQUssSUFBSSxJQUFJO0FBQzFDLE1BQUEwRSxVQUNFO0FBQUEsUUFDRSxTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVixFQUFDdGIsQ0FBSSxLQUNOLGlCQUVGNFcsSUFBTyxNQUNMclYsRUFBUXFWLENBQUksRUFBRSxLQUFLLFVBQVUsUUFDeEIsUUFBUSxlQUFlLE1BQU07QUFDcEMsWUFBTTJFLElBQ0o7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWLEVBQUN2YixDQUFJLEtBQ047QUFHRixjQUFRdWIsQ0FBRyxFQUFFQyxHQUFVNUUsQ0FBSSxDQUFDO0FBQzVCLFlBQU0sRUFBRSxlQUFBNkUsSUFBZ0IsR0FBSyxJQUFJLEtBQUs7QUFDdEMsVUFBSUEsR0FBZTtBQUtqQixjQUFNLEVBQUUsZ0JBQUFDLElBQWlCLEdBQUMsSUFBTUQsR0FDMUJFLEtBQVksS0FBSy9FLEVBQUssU0FBUzBFLEVBQU0sVUFBVUk7QUFDckQsYUFBSyxRQUFRLEVBQUUsTUFBQTFiLEdBQU0sT0FBQXNiLEdBQU8sTUFBQTFFLEdBQU0sVUFBQStFLEdBQVU7QUFBQTtBQUFBLElBRS9DO0FBQUEsSUFFRCxxQkFBcUI7QUFDbkIsV0FBSyxjQUFjLFdBQVc7QUFBQSxJQUMvQjtBQUFBLElBRUQsZ0JBQWdCNUIsR0FBVztBQUN6QixXQUFLLGdCQUFnQkEsSUFBWSxJQUFJO0FBQUEsSUFDdEM7QUFBQSxJQUVELFdBQVcsRUFBRSxZQUFBM1IsR0FBWSxTQUFBZ0UsR0FBUyxNQUFBOVEsR0FBTSxVQUFBeUQsRUFBTyxHQUFLO0FBSWxELGFBQU8sSUFBSTtBQUFBO0FBQUEsUUFFVCxPQUFPckIsR0FBU2tlLE1BQVc7QUFFekIsZ0JBQU03VSxJQUFTLENBQUM7QUFPaEIsY0FOQSxNQUFNRjtBQUFBLFlBQ0osS0FBSztBQUFBLFlBQ0wsRUFBRSxNQUFNLFVBQVUsWUFBQXVCLEVBQVk7QUFBQSxZQUM5QnJCO0FBQUEsWUFDQTtBQUFBLFVBQ0YsR0FDSUEsRUFBTyxTQUFTO0FBQ2xCLGtCQUFNLElBQUk7QUFBQSxjQUNSO0FBQUEsWUFDRjtBQUVGLGdCQUFNaEwsSUFBTSxVQUFVLEVBQUU4ZjtBQUN4QixlQUFLLFFBQVE5ZixDQUFHLElBQUk7QUFBQSxZQUNsQixZQUFBcU07QUFBQSxZQUNBLFNBQUFnRTtBQUFBLFlBQ0EsTUFBQTlRO0FBQUEsWUFDQSxVQUFBeUQ7QUFBQSxZQUNBLFNBQVMsRUFBRSxTQUFBckIsR0FBUyxRQUFBa2UsRUFBTztBQUFBLFVBQzdCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhN2YsR0FBSztBQUNoQixhQUFPLEtBQUssUUFBUUEsQ0FBRztBQUFBLElBQ3hCO0FBQUEsSUFFRCxNQUFNLFFBQVE7O0FBQ1osV0FBSyxhQUFhO0FBQ2xCLFlBQU07QUFBQSxRQUNKLHNCQUFBK2Y7QUFBQSxRQUNBLG9CQUFBQztBQUFBLFVBQ0UsS0FBSyxRQUFRLFNBQVMsQ0FBQyxHQUNyQkMsSUFBWSxNQUFNLEtBQUssV0FBVztBQUFBLFFBQ3RDLFlBQVk7QUFBQSxVQUNWLFVBQVU7QUFBQSxZQUNSLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNaO0FBQUEsVUFDRCxVQUFVO0FBQUEsWUFDUixNQUFNO0FBQUEsVUFDUDtBQUFBLFVBQ0QsR0FBR0Y7QUFBQSxRQUNKO0FBQUEsUUFDRCxTQUFTO0FBQUEsVUFDUCxRQUFRO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUE7QUFBQSxVQUVQO0FBQUEsVUFFRCxPQUFPO0FBQUEsWUFDTCxNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsVUFDUjtBQUFBLFFBQ0Y7QUFBQSxPQUNEO0FBQ0QsVUFBSUU7QUFDRixZQUFJO0FBQ0YsZ0JBQU0vTixJQUFXLE1BQU0sS0FBSyxZQUFZO0FBQUEsWUFDdEMsVUFBVSxLQUFLLElBQUksTUFBTTtBQUFBLFlBQ3pCLE1BQU0rTjtBQUFBLFlBQ04sVUFBVTtBQUFBLFdBQ1g7QUFDRCxVQUFJRCxJQUNGLFNBQVMsUUFBUUEsQ0FBa0IsS0FFbkMsS0FBSyxRQUFROU4sRUFBUyxLQUFLLElBQUksR0FDL0IsTUFBTSxLQUFLLGFBQWE7QUFBQSxRQUUxQixTQUFPNk0sR0FBUDtBQUNBLGdCQUFNaGQsS0FBUXVELEtBQUE5RCxJQUFBdWQsRUFBSSxhQUFKLGdCQUFBdmQsRUFBYyxTQUFkLGdCQUFBOEQsRUFBb0I7QUFDbEMsZUFBSyxPQUFPO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFNdkQsS0FBU2dkO0FBQUEsV0FDaEIsR0FDSWhkLEtBQ0gsUUFBUSxNQUFNZ2QsR0FBS0EsRUFBSSxRQUFRLEdBRWpDLEtBQUssTUFBTTtBQUFBLFFBQ2I7QUFBQSxJQUVIO0FBQUEsSUFFRCxlQUFlO0FBQ2IsYUFBTyxLQUFLLFNBQVMsR0FBRztBQUFBLElBQ3pCO0FBQUEsSUFFRCxNQUFNLFNBQVM7QUFDYixVQUFJO0FBS0YsU0FKaUIsTUFBTSxLQUFLLFlBQVk7QUFBQSxVQUN0QyxVQUFVLEtBQUssSUFBSSxNQUFNO0FBQUEsVUFDekIsVUFBVTtBQUFBLFNBQ1gsR0FDWSxLQUFLLFlBQ2hCLEtBQUssUUFBUSxJQUFJLEdBQ2pCLEtBQUssYUFBYTtBQUFBLE1BRXBCLFNBQU9BLEdBQVA7QUFDQSxnQkFBUSxNQUFNQSxDQUFHO0FBQUEsTUFDbkI7QUFBQSxJQUNEO0FBQUEsSUFFRCxNQUFNLFlBQVk7QUFDaEIsVUFBSW1CLElBQU87QUFDWCxVQUFJO0FBS0YsUUFBQUEsS0FKaUIsTUFBTSxLQUFLLFlBQVk7QUFBQSxVQUN0QyxVQUFVLEtBQUssSUFBSSxNQUFNO0FBQUEsVUFDekIsVUFBVTtBQUFBLFNBQ1gsR0FDZSxLQUFLLFFBQVE7QUFBQSxNQUM3QixTQUFPbkIsR0FBUDtBQUNBLGFBQUssT0FBTztBQUFBLFVBQ1YsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFVBQ1AsTUFBTUE7QUFBQSxTQUNQO0FBQUEsTUFDSDtBQUNBLGtCQUFLLFFBQVFtQixDQUFJLEdBQ1ZBO0FBQUEsSUFDUjtBQUFBLElBRUQsUUFBUUEsR0FBTTtBQUNaLFdBQUssU0FBUyxPQUNaQSxLQUNBLE9BQU8sZUFBZUEsR0FBTW5ELEdBQVMsU0FBUyxHQUczQ21ELE1BQ0gsS0FBSyxnQkFBZ0IsQ0FBQyxHQUN0QixLQUFLLGFBQWE7QUFBQSxJQUVyQjtBQUFBLElBRUQsTUFBTSxhQUFhO0FBQ2pCLE1BQU0sTUFBTSxLQUFLLFVBQVMsS0FDeEIsTUFBTSxLQUFLLE1BQU07QUFBQSxJQUVwQjtBQUFBLElBRUQsTUFBTSxlQUFlOztBQUNuQixVQUFJO0FBQ0YsYUFBSyxnQkFBZ0IsTUFBTTVWLEdBQWEsS0FBSyxlQUFlO0FBQUEsTUFDNUQsU0FBT3ZJLEdBQVA7QUFDQSxlQUFLQSxFQUFNLFdBQ1QsUUFBUSxNQUFNQSxDQUFLLEdBRWQsS0FBSyxNQUFNO0FBQUEsTUFDcEI7QUFFQSxZQUFNaUosSUFBUyxNQUFNWDtBQUFBLFFBQ25CLE9BQU8sUUFBUSxLQUFLLGFBQWE7QUFBQSxRQUNqQyxDQUFDLENBQUNqRyxHQUFNK0IsQ0FBTSxNQUFNdUYsR0FBWXlVLElBQVUsS0FBSyxLQUFLaGEsR0FBUS9CLENBQUk7QUFBQSxNQUNsRSxHQUdNLEVBQUUsVUFBQXVILE1BQWEsS0FBSztBQUMxQixPQUFBbkssSUFBQSxLQUFLLGlCQUFMLFFBQUFBLEVBQUEsWUFDQSxLQUFLLGVBQWU0ZSxHQUFVLEtBQUssU0FBUztBQUFBLFFBQzFDO0FBQUEsVUFDRSxNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsVUFDTixZQUFZLENBQUM7QUFBQSxRQUNkO0FBQUEsUUFDRCxHQUFHcFYsRUFBTyxLQUFLO0FBQUEsT0FDaEIsR0FDRCxLQUFLLFFBQVEsUUFBUVcsQ0FBUTtBQUFBLElBQzlCO0FBQUEsSUFFRCxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQUEwUSxFQUFNLEVBQUEsR0FBSztBQUN2QyxXQUFLLFlBQVlBO0FBQUEsSUFDbkI7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQUl5RCxLQUFXO0FBRWYsU0FBU00sR0FBVUMsR0FBUXJWLEdBQVE7QUFDakMsUUFBTXNWLElBQVcsQ0FBQztBQUNsQixhQUFXQyxLQUFTdlYsR0FBUTtBQUMxQixVQUFNOFIsSUFBU3VELEVBQU8sU0FBU0UsQ0FBSztBQUNwQyxJQUFBRCxFQUFTLEtBQUt4RCxDQUFNO0FBQUE7QUFHdEIsU0FBTyxNQUFNO0FBQ1gsZUFBV0EsS0FBVXdEO0FBQ25CLE1BQUF4RCxFQUFPO0FBQUEsRUFFWDtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Y0EsV0FBa0JqSixFQUFjLFVBQVUsWUFBUztBQUFBLEVBQ2pELE9BQU87QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNMLE1BQU0sQ0FBQyxRQUFRLEtBQUs7QUFBQSxNQUNwQixTQUFTLE1BQU0sQ0FBQztBQUFBLElBQ2pCO0FBQUEsSUFDRCxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWDtBQUFBLEVBQ0Q7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxPQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBQXdJLEVBQU0sRUFBQSxHQUFLO0FBQ25DLE1BQUlBLE1BQ0YsS0FBSyxRQUFRQTtBQUFBLElBRWhCO0FBQUEsSUFFRCxhQUFhNWIsR0FBTStmLEdBQWM7QUFDL0IsYUFBTztBQUFBLFFBQ0wsQ0FBQ0EsQ0FBWSxHQUFHLENBQUMsQ0FBQy9mLEVBQUs7QUFBQSxRQUN2QixlQUFlLEtBQUssYUFBYUEsQ0FBSTtBQUFBLE1BQ3ZDO0FBQUEsSUFDRDtBQUFBLElBRUQsWUFBWUEsR0FBTWdnQixHQUFZO0FBQzVCLFlBQU1yaUIsSUFBT3FDLEVBQUssT0FBTyxHQUFHLEtBQUssUUFBUUEsRUFBSyxTQUFTO0FBQ3ZELGFBQU9nZ0IsS0FBY3JpQixLQUFRcUMsRUFBSyxRQUM5QixHQUFHckMsSUFBTyxLQUFLLFlBQVksT0FBTyxPQUFPcUMsRUFBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUssTUFDOURyQztBQUFBLElBQ0w7QUFBQSxJQUVELFlBQVlxQyxHQUFNO0FBQ2hCLFlBQU1yQyxJQUFPLEtBQUssWUFBWXFDLEdBQU0sRUFBSTtBQUN4QyxhQUFPckMsSUFBTyxLQUFLLFFBQVEsUUFBUUEsQ0FBSSxFQUFFLE9BQU87QUFBQSxJQUNqRDtBQUFBLElBRUQsYUFBYXFDLEdBQU07QUFDakIsYUFDRSxLQUFLLE9BQU8sS0FBSyxXQUFXLEtBQUssWUFBWUEsR0FBTSxFQUFLLENBQUMsS0FDekRBLEVBQUssU0FBUyxPQUFPLE9BQU9BLEVBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxZQUFZO0FBQUEsSUFFakU7QUFBQSxJQUVELFlBQVlBLEdBQU07QUFDaEIsWUFBTXJDLElBQU8sS0FBSyxZQUFZcUMsR0FBTSxFQUFJO0FBQ3hDLE1BQUlyQyxLQUNGLEtBQUssUUFBUSxLQUFLLEVBQUUsTUFBQUEsR0FBTSxPQUFPLElBQU07QUFBQSxJQUUzQztBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0VELE1BQUs0WCxLQUFVO0FBQUEsRUFDYixPQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDVjtBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1Y7QUFBQSxJQUNELE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNWO0FBQUEsSUFDRCxRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDVjtBQUFBLElBQ0QsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1g7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBRUwsV0FBTztBQUFBLE1BQ0wsY0FBYztBQUFBLFFBQ1osaUJBQWlCLEtBQUs7QUFBQSxRQUN0QixPQUFPLEtBQUs7QUFBQSxRQUNaLFFBQVEsS0FBSztBQUFBLFFBQ2IsUUFBUSxLQUFLO0FBQUEsUUFDYixjQUFjLEtBQUs7QUFBQSxRQUNuQixTQUFTO0FBQUEsUUFDVCxlQUFlO0FBQUEsUUFDZixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxRQUN6Qix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0QsZUFBZTtBQUFBLFFBQ2IsZ0JBQWdCO0FBQUEsTUFDakI7QUFBQSxNQUNELGVBQWU7QUFBQSxRQUNiLGdCQUFnQjtBQUFBLE1BQ2pCO0FBQUEsTUFDRCxlQUFlO0FBQUEsUUFDYixnQkFBZ0I7QUFBQSxNQUNsQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9CQSxXQUFrQm5DLEVBQWMsVUFBVSxjQUFXO0FBQUEsRUFDbkQsWUFBWSxFQUFFLGFBQUE2TSxHQUFhO0FBQUEsRUFFM0IsT0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1Y7QUFBQSxJQUNELFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsUUFBUTtBQUNOLGFBQU8sS0FBSyxTQUFTLGdCQUFnQjtBQUFBLFFBQ25DLENBQUFsZ0IsTUFBYSxDQUFDLENBQUNBLEVBQVU7QUFBQSxNQUMzQjtBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQ1IsVUFBTTtBQUFBLE1BQ0osTUFBQTBZLElBQU87QUFBQSxNQUNQLE9BQUF5SCxJQUFRO0FBQUEsSUFDVixJQUFJLEtBQUssV0FBVyxDQUFDLEdBR2YsRUFBRSxPQUFBM0UsRUFBSSxJQUFNMEU7QUFDbEIsSUFBQTFFLEVBQU0sS0FBSyxVQUFVOUMsR0FDckI4QyxFQUFNLE1BQU0sVUFBVTJFO0FBQUEsRUFDdkI7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLG1CQUFtQm5nQixHQUFXO0FBQzVCLGFBQU87QUFBQSxRQUNMLGNBQWNBLEVBQVU7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0RELE1BQUt3VixLQUFhbkMsRUFBYyxVQUFVLGtCQUFpQixDQUFBLENBQUE7Ozs7Ozs7Ozs7Ozs7O0FDRzNELFdBQWtCQSxFQUFjLFVBQVUsZUFBWTtBQUFBLEVBQ3BELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixVQUFVO0FBQ1IsWUFBTStLLElBQVM7QUFHZixhQUFPO0FBQUEsUUFDTCxDQUFDLEdBQUdBLGFBQWtCLEdBQUcsS0FBSyxlQUFlO0FBQUEsUUFDN0MsQ0FBQyxHQUFHQSxhQUFrQixHQUFHLEtBQUssZ0JBQWdCLE1BQWU7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsT0FBQXZDLEVBQU0sRUFBQSxHQUFLO0FBQzFDLFdBQUssZUFBZUE7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFDRixDQUFDLGlEQ25DY3VFLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQy9ELEVBQVE7QUFBQSxFQUVqQixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsVUFBVTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sV0FBVztBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFVBQ04sV0FBVyxNQUFNO0FBQ2YsaUJBQUssZ0JBQWdCLEVBQUssR0FDMUIsS0FBSyxTQUFTLFNBQVMsT0FBUTtBQUFBLFVBQ2hDO0FBQUEsVUFFRCxTQUFTLE1BQU07QUFDYixZQUFJLEtBQUssa0JBQWtCLElBQUksS0FDN0IsS0FBSyxTQUFTLFNBQVMsT0FBUTtBQUFBLFVBRWxDO0FBQUEsUUFDRjtBQUFBLFFBQ0QsVUFBVTtBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1Asb0JBQW9CemMsR0FBTztBQUN6QixNQUFLQSxJQUlILEtBQUssWUFBWSxNQUhqQixLQUFLLGdCQUFnQixFQUFJLEdBQ3pCLEtBQUssWUFBWTtBQUFBLElBSXBCO0FBQUEsSUFFRCxrQkFBa0JBLEdBQU87QUFDdkIsWUFBTSxFQUFFLFdBQUF5Z0IsTUFBYyxLQUFLO0FBQzNCLFVBQUksQ0FBQyxLQUFLLGFBQWFBLEtBQWMsS0FBSyxJQUFLLElBQUdBLElBQVk7QUFDNUQsb0JBQUssZ0JBQWdCLEVBQUssR0FDdEJ6Z0IsS0FDRixLQUFLLGlCQUFpQkEsQ0FBSyxHQUV0QjtBQUFBLElBRVY7QUFBQSxJQUVELG1CQUE4QjtBQUFBLElBRTdCO0FBQUEsSUFFRCxnQkFBZ0IwZ0IsR0FBTTtBQUNwQixXQUFLLFNBQVMsT0FBT0EsR0FDckIsS0FBSyxTQUFTLFlBQVlBLElBQU8sS0FBSyxJQUFHLElBQUssR0FDMUNBLE1BQ0YsS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxTQUFTLE1BQU07QUFBQSxJQUVyRTtBQUFBLEVBQ0Y7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6Q0EsV0FBa0JqTixFQUFjLFVBQVUsZUFBWTtBQUFBLEVBQ3BELFFBQVEsQ0FBQytNLEVBQWE7QUFBQSxFQUV0QixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsT0FBTztBQUFBLFFBQ0wsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLE1BQ1Y7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsaUJBQWlCeGdCLEdBQU87QUFDdEIsY0FBUUEsR0FBSztBQUFBLFFBQ1gsS0FBSztBQUNILGVBQUssY0FBYyxPQUFPO0FBQzFCO0FBQUEsUUFDRixLQUFLO0FBQ0gsa0JBQVEsS0FBSywwQkFBMEI7QUFDdkM7QUFBQSxNQUNKO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7O0FDL0JELFdBQWtCeVQsRUFBYyxVQUFVLGVBQVk7QUFBQSxFQUNwRCxPQUFPO0FBQUEsSUFDTCxLQUFLLEVBQUUsTUFBTSxRQUFRLFNBQVMsT0FBUTtBQUFBLElBQ3RDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxNQUFNLEdBQUcsU0FBUyxLQUFLO0FBQUEsRUFDbEQ7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLFVBQVU7QUFDUixZQUFNLEVBQUUsU0FBQWtOLEVBQVEsSUFBSTtBQUNwQixhQUFPcFosRUFBU29aLENBQU8sSUFBSUEsSUFBVSxFQUFFLE1BQU1BLEVBQVE7QUFBQSxJQUN0RDtBQUFBLElBRUQsVUFBVTtBQUNSLGFBQU87QUFBQSxRQUNMLEdBQUdDLEdBQVMsS0FBSyxPQUFPLEtBQUs7QUFBQSxRQUM3QixHQUFHQSxHQUFTLEtBQUssUUFBUSxLQUFLO0FBQUEsTUFDaEM7QUFBQSxJQUNEO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBTztBQUFBLFFBQ0wsR0FBR0EsR0FBUyxLQUFLLE9BQU8sS0FBSztBQUFBLFFBQzdCLEdBQUdBLEdBQVMsS0FBSyxRQUFRLEtBQUs7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELFNBQVNBLEdBQVM1Z0IsR0FBTztBQUN2QixTQUFPb0YsRUFBUXBGLENBQUssRUFBRSxPQUFPLENBQUNGLEdBQVFxQixPQUNoQzRDLEVBQVM1QyxDQUFLLElBQ2hCckIsRUFBT3FCLENBQUssSUFBSSxLQUNQb0csRUFBU3BHLENBQUssS0FDdkIsT0FBTyxPQUFPckIsR0FBUXFCLENBQUssR0FFdEJyQixJQUNOLEVBQUU7QUFDUDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1RBLFdBQWtCMlQsRUFBYyxVQUFVLGFBQVU7QUFBQSxFQUNsRCxPQUFPLENBQUMsTUFBTTtBQUFBLEVBRWQsT0FBTztBQUFBLElBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLE1BQU0sR0FBRyxTQUFTLEtBQU07QUFBQSxJQUNoRCxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQ3pDLFdBQVcsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDNUMsYUFBYSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM5QyxNQUFNLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBSztBQUFBLEVBQ3JDO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixNQUFNO0FBQ0osYUFBTyxLQUFLLGNBQWMsTUFBTTtBQUFBLElBQ2pDO0FBQUEsSUFFRCxPQUFPO0FBQ0wsWUFBTSxFQUFFLE9BQUFoRyxFQUFNLElBQUk7QUFDbEIsYUFBT2xHLEVBQVNrRyxDQUFLLElBQUlBLEtBQUEsZ0JBQUFBLEVBQU8sT0FBT0E7QUFBQSxJQUN4QztBQUFBLElBRUQsV0FBVzs7QUFDVCxhQUFPckksR0FBUWhFLElBQUEsS0FBSyxVQUFMLGdCQUFBQSxFQUFZLE1BQU07QUFBQSxJQUNsQztBQUFBLElBRUQsV0FBVzs7QUFDVCxhQUFPZ0UsR0FBUWhFLElBQUEsS0FBSyxVQUFMLGdCQUFBQSxFQUFZLE1BQU07QUFBQSxJQUNsQztBQUFBLElBRUQsYUFBYTtBQUNYLGFBQU8sS0FBSyxjQUFjLEVBQUUsU0FBUyxLQUFLLFFBQU0sSUFBTSxDQUFDO0FBQUEsSUFDeEQ7QUFBQSxJQUVELFdBQVc7QUFDVCxhQUFPLEtBQUssU0FBUyxnQkFBZ0I7QUFBQSxJQUN2QztBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLFVBQVU7QUFDUixXQUFLLFNBQVMsY0FBYyxNQUM1QixLQUFLLE1BQU0sUUFBUSxLQUFLLFNBQVM7QUFBQSxJQUNuQztBQUFBLEVBQ0Y7QUFDRixDQUFDLGlEQzNFY3lmLEtBQUE7QUFBQSxFQUNiLFNBQVM7QUFBQSxJQUNQLG1CQUFBMVQ7QUFBQSxJQUVBLFlBQUEyRDtBQUFBLElBRUEsVUFBVXZLLEdBQWNsRyxHQUFNckIsSUFBUSxNQUFNO0FBQzFDLGFBQU8sS0FBSyxlQUFlQSxNQUFVLE9BQ2pDLE9BQU9BLENBQUssSUFDWndHLEdBQVVlLEdBQWNsRyxDQUFJO0FBQUEsSUFDakM7QUFBQSxJQUVELGdCQUFnQmtHLEdBQWN2SCxHQUFPO0FBQ25DLFVBQUksRUFBRSxVQUFBbkIsRUFBUSxJQUFLO0FBQ25CLGFBQUkwSSxNQUFpQixLQUFLLFdBQ3hCMUksSUFBV0QsRUFBZUMsR0FBVTBJLEVBQWEsSUFBSSxJQUVuRHZILEtBQVMsU0FDWG5CLElBQVdELEVBQWVDLEdBQVVtQixDQUFLLElBRXBDbkI7QUFBQSxJQUNSO0FBQUEsSUFFRCxhQUFhMEksR0FBY2xHLEdBQU1yQixHQUFPO0FBQ3RDLGFBQU8sS0FBSyxjQUFjLEtBQUssV0FBV3VILEdBQWNsRyxDQUFJLEdBQUdyQixDQUFLO0FBQUEsSUFDckU7QUFBQSxJQUVELGdCQUFnQnVILEdBQWNsRyxHQUFNckIsR0FBTztBQUN6QyxXQUFLLGlCQUFpQixLQUFLLFdBQVd1SCxHQUFjbEcsQ0FBSSxHQUFHckIsQ0FBSztBQUFBLElBQ2pFO0FBQUEsSUFFRCxnQkFBZ0J1SCxHQUFjcEgsR0FBTTJoQixHQUFRO0FBQzFDLFlBQU05aEIsSUFBUSxLQUFLO0FBQUE7QUFBQSxRQUVmOGhCO0FBQUEsVUFDQTNoQixLQUFBLGdCQUFBQSxFQUFNO0FBQUEsUUFDSixDQUFDa0IsR0FBTXJCLE1BQ0wsS0FBSyxVQUFVdUgsR0FBY2xHLEdBQU1yQixDQUFLLE1BQU04aEI7QUFBQTtBQUd0RCxhQUFPOWhCLE1BQVUsS0FBS0EsSUFBUTtBQUFBLElBQy9CO0FBQUEsSUFFRCxhQUFhdUgsR0FBY2xHLEdBQU07QUFBQSxNQUMvQixPQUFBckIsSUFBUTtBQUFBLE1BQ1IsVUFBQStoQixJQUFXO0FBQUEsTUFDWCxVQUFBSCxJQUFXO0FBQUEsSUFDWixJQUFHLElBQUk7QUFDTixZQUFNLEVBQUUsV0FBQUksRUFBUyxJQUFLemE7QUFDdEIsVUFBSSxDQUFDbEcsS0FBUSxDQUFDMGdCLEtBQVlDLE1BQWM7QUFDdEMsZUFBTztBQUdULFVBQUluakI7QUFDSixZQUFNMFIsSUFBYyxNQUNqQjFSLFVBQWEsS0FBSyxnQkFBZ0IwSSxHQUFjdkgsQ0FBSztBQUV4RCxVQUFJaWlCO0FBQ0osWUFBTUMsSUFBZSxNQUNsQkQsVUFBYyxLQUFLO0FBQUEsUUFDbEI5VCxHQUFrQjVHLEdBQWNsRyxHQUFNLEtBQUssT0FBTztBQUFBLE1BQzVEO0FBRU0sVUFBSW9hLEdBQ0ErRCxHQUNBMkM7QUFDSixVQUFJbGhCLEVBQVcrZ0IsQ0FBUyxHQUFHO0FBQ3pCLGNBQU12VCxJQUFRdVQsRUFBVTtBQUFBLFVBQ3RCO0FBQUEsVUFDQSxJQUFJN2dCLEVBQVksTUFBTTtBQUFBLFlBQ3BCLFFBQVE7QUFBQSxZQUNSLE1BQU1FO0FBQUEsWUFDTixPQUFPQTtBQUFBLFlBQ1AsT0FBQXJCO0FBQUEsWUFFQSxJQUFJLFdBQVc7QUFDYixxQkFBT3VRLEVBQWE7QUFBQSxZQUNyQjtBQUFBLFlBRUQsSUFBSSxZQUFZO0FBQ2QscUJBQU8yUixFQUFjO0FBQUEsWUFDdEI7QUFBQSxVQUNiLENBQVc7QUFBQSxRQUNGO0FBQ0QsUUFBSTNaLEVBQVNrRyxDQUFLLElBQ2QsRUFBRSxNQUFBZ04sR0FBTSxRQUFBK0QsR0FBUSxRQUFBMkMsRUFBTSxJQUFLMVQsSUFFN0JnTixJQUFPaE4sR0FHVHNULElBQVc7QUFBQSxpQkFDRmhkLEVBQVNpZCxDQUFTLEtBQUssRUFBRUEsS0FBYTNnQjtBQUUvQyxRQUFBb2EsSUFBT3VHO0FBQUEsV0FDRjtBQUtMLGNBQU0sRUFBRSxTQUFBSSxFQUFPLElBQUs3YSxHQUNkM0csSUFDSm1FLEVBQVNpZCxDQUFTLEtBQUtBLEtBQ3ZCblEsR0FBYXRLLENBQVksS0FBSzZhLEtBQVcsT0FBTyxLQUFLQSxDQUFPLEVBQUUsQ0FBQyxLQUMvRDtBQUVGLFFBQUEzRyxJQUFPcGEsRUFBS1QsQ0FBRztBQUFBO0FBRWpCLFlBQU15aEIsSUFBVyxDQUFDLENBQUM1RztBQVVuQixVQVJJQSxLQUFRLFNBRVZzRyxJQUFXLElBQ1h0RyxJQUNFNUosR0FBYXRLLENBQVksS0FBS3ZILE1BQVUsT0FDbkN5YixJQUFPLEdBQUd6YixJQUFRLE1BQ25CLEtBRUoraEIsR0FBVTtBQUNaLGNBQU1FLElBQVlDLEVBQWM7QUFDaEMsUUFBSUQsTUFHRnhHLElBQU8sR0FBR3dHLEtBQWFJLElBQVcsSUFBSTVHLE9BQVVBO0FBQUE7QUFHcEQsYUFBT21HLElBQ0huRyxLQUFRK0QsS0FBVTJDLElBQ2hCLEVBQUUsTUFBQTFHLEdBQU0sUUFBQStELEdBQVEsUUFBQTJDLEVBQVEsSUFDeEIsT0FDRjFHO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQkEsV0FBa0JoSCxFQUFjLFVBQVUsY0FBVztBQUFBLEVBQ25ELFFBQVEsQ0FBQ29OLEVBQVM7QUFBQSxFQUNsQixZQUFZLEVBQUV0RixrQkFBQUEsR0FBa0I7QUFBQSxFQUNoQyxjQUFjO0FBQUEsRUFFZCxVQUFVO0FBQ1IsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLE1BQU07QUFBQSxJQUMxQjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFFBQVE7QUFBQSxJQUNOO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsR0FBSTtBQUFBLElBQ3ZDLE1BQU0sRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDckMsTUFBTSxFQUFFLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBRSxHQUFHO0FBQUEsSUFDM0MsT0FBTyxFQUFFLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBRSxHQUFHO0FBQUEsSUFDNUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLE1BQU0sR0FBRyxTQUFTLEtBQU07QUFBQSxJQUNoRCxTQUFTLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzFDLFVBQVUsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDM0MsV0FBVyxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM1QyxhQUFhLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzlDLFlBQVksRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDN0MsWUFBWSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM3QyxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDakQsV0FBVyxFQUFFLE1BQU0sYUFBYSxTQUFTLEtBQU07QUFBQSxJQUMvQyxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsU0FBUyxFQUFFO0FBQUEsRUFDOUM7QUFBQSxFQUVELE9BQU87QUFDTCxVQUFNLEVBQUUsTUFBQXBjLE1BQVMsS0FBSztBQUN0QixXQUFPO0FBQUE7QUFBQSxNQUVMLEdBQ0VBLEtBQVFjLEVBQVdkLENBQUksSUFDbkJBLEVBQUssS0FBSyxPQUFPLElBQ2pCQTtBQUFBLE1BRU4sWUFBWTtBQUFBLE1BQ1osb0JBQW9CLENBQUU7QUFBQSxNQUN0QixlQUFlLENBQUU7QUFBQSxNQUNqQixnQkFBZ0IsQ0FBQztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1Isa0JBQWtCO0FBRWhCLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCx3QkFBd0I7QUFJdEIsYUFBTyxLQUFLLGFBQWEsT0FBTyxLQUFLLGdCQUFnQjtBQUFBLElBQ3REO0FBQUEsSUFFRCxlQUFlO0FBQ2IsYUFBT29SLEdBQWdCLEtBQUssT0FBTyxRQUFRLEVBQUU7QUFBQSxJQUM5QztBQUFBLElBRUQsT0FBTztBQUNMLGFBQU9WLEdBQWdCLEtBQUssT0FBTyxJQUFJO0FBQUEsSUFDeEM7QUFBQSxJQUVELGFBQWE7QUFBQSxNQUNYLE1BQU07QUFDSixlQUFPLEtBQUssY0FBYyxLQUFLLGNBQWM7QUFBQSxNQUM5QztBQUFBLE1BRUQsSUFBSXlSLEdBQWE7QUFDZixhQUFLLGFBQWFBO0FBQUEsTUFDcEI7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhO0FBQ1gsVUFBSUMsSUFBUTtBQUNaLFVBQUksS0FBSyxNQUFNO0FBQ2IsY0FBTWxWLElBQU8sT0FBTyxPQUFPLEtBQUssSUFBSSxFQUFFLE9BQU8sS0FBSyxrQkFBa0I7QUFDcEUsbUJBQVcsRUFBRSxNQUFBckksR0FBTSxZQUFBd2QsRUFBUyxLQUFPblYsR0FBTTtBQUN2QyxjQUFJcE0sRUFBV3VoQixDQUFVLElBQUlBLEVBQVcsS0FBSyxPQUFPLElBQUlBO0FBQ3RELG1CQUFPeGQ7QUFFVCxVQUFBdWQsVUFBVXZkO0FBQUE7QUFBQTtBQUdkLGFBQU91ZDtBQUFBLElBQ1I7QUFBQSxJQUVELFlBQVk7O0FBQ1YsZUFBT25nQixJQUFBLEtBQUssV0FBTCxnQkFBQUEsRUFBYSxjQUFhO0FBQUEsSUFDbEM7QUFBQSxJQUVELFlBQVk7QUFDVixhQUFPLEtBQUssWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNoRDtBQUFBLElBRUQsaUJBQWlCO0FBQ2YsYUFBTyxLQUFLLGVBQ1IsMkJBQ0EsS0FBSztBQUFBLElBQ1Y7QUFBQSxJQUVELGFBQWE7QUFDWCxZQUFNakMsSUFBT1AsR0FBYyxLQUFLLFVBQVUsS0FBSyxVQUFVLEVBQUs7QUFDOUQsYUFBT08sTUFBUyxLQUFLLE9BQU9BLElBQU87QUFBQSxJQUNwQztBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLLFlBQVksRUFBRSxRQUFRLFVBQVUsWUFBWSxJQUFNO0FBQUEsSUFDL0Q7QUFBQSxJQUVELGVBQWU7QUFBQSxNQUNiLE1BQU07QUFDSixlQUFPLEtBQUssWUFBWSxFQUFFLFFBQVEsYUFBYSxZQUFZLElBQU07QUFBQSxNQUNsRTtBQUFBLE1BRUQsSUFBSUEsR0FBTTtBQUNSLGFBQUssUUFBUUEsQ0FBSTtBQUFBLE1BQ25CO0FBQUEsSUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUQsT0FBTztBQUNMLGFBQU8sS0FBSztBQUFBLElBQ2I7QUFBQSxJQUVELGFBQWE7QUFDWCxhQUFPLEtBQUs7QUFBQSxJQUNiO0FBQUEsSUFFRCxXQUFXO0FBQ1QsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBLElBRUQsWUFBWTtBQUNWLGFBQU8sS0FBSztBQUFBLFFBQ1YsS0FBSyxrQkFBa0IsS0FBSyxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU87QUFBQSxNQUNuRTtBQUFBLElBQ0Q7QUFBQSxJQUVELGVBQWU7QUFFYixhQUFPLEtBQUssYUFBYSxNQUFNLENBQUMsS0FBSztBQUFBLElBQ3RDO0FBQUEsSUFFRCxVQUFVO0FBQ1IsYUFBTyxLQUFLLGNBQWMsQ0FBQThkLE1BQU1BLEVBQUcsT0FBTztBQUFBLElBQzNDO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBTyxLQUFLLGNBQWMsQ0FBQUEsTUFBTUEsRUFBRyxTQUFTO0FBQUEsSUFDN0M7QUFBQSxJQUVELFVBQVU7QUFDUixhQUFPLEtBQUssZUFBZSxDQUFBQSxNQUFNQSxFQUFHLE9BQU87QUFBQSxJQUM1QztBQUFBLElBRUQsY0FBYztBQUNaLGFBQU8sS0FBSyxlQUFlLENBQUFBLE1BQU1BLEVBQUcsV0FBVztBQUFBLElBQ2hEO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBTyxLQUFLLGNBQWMsQ0FBQUEsTUFBTUEsRUFBRyxTQUFTO0FBQUEsSUFDN0M7QUFBQSxJQUVELFVBQVU7QUFDUixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsV0FBVztBQUNULGFBQU8sQ0FBQyxDQUFDLEtBQUssU0FBUyxLQUFLO0FBQUEsSUFDN0I7QUFBQSxJQUVELFVBQVU7QUFDUixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsY0FBYztBQUNaLGFBQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUM3QjtBQUFBLElBRUQsY0FBYztBQUNaLFlBQU0sRUFBRSxZQUFBaFIsTUFBZSxLQUFLO0FBQzVCLGFBQU8sQ0FBQyxDQUFDQSxLQUFjLE9BQU8sS0FBS0EsQ0FBVSxFQUFFLFNBQVM7QUFBQSxJQUN6RDtBQUFBLElBRUQsUUFBUWhJLEdBQWlCLFVBQVU7QUFBQSxNQUNqQyxVQUFVO0FBQ1IsZUFBTyxDQUFDLEtBQUs7QUFBQSxNQUNmO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTyxPQUFPLE9BQU8sS0FBSyxrQkFBa0I7QUFBQSxJQUM3QztBQUFBLElBRUQsUUFBUTtBQUNOLGFBQU8sT0FBTyxPQUFPLEtBQUssYUFBYTtBQUFBLElBQ3hDO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBTyxPQUFPLE9BQU8sS0FBSyxjQUFjO0FBQUEsSUFDekM7QUFBQSxJQUVELHVCQUF1QjtBQUNyQixhQUFPLEtBQUssdUJBQXVCLEtBQUssa0JBQWtCO0FBQUEsSUFDM0Q7QUFBQSxJQUVELGtCQUFrQjtBQUNoQixhQUFPLEtBQUssdUJBQXVCLEtBQUssYUFBYTtBQUFBLElBQ3REO0FBQUEsSUFFRCxtQkFBbUI7QUFDakIsYUFBTyxLQUFLLHVCQUF1QixLQUFLLGNBQWM7QUFBQSxJQUN2RDtBQUFBLElBRUQsTUFBTU4sRUFBa0IsUUFBUTtBQUFBLE1BQzlCLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxLQUNWO0FBQUEsRUFDRjtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsZUFBZTtBQUFBLE1BQ2IsV0FBVztBQUFBO0FBQUEsTUFFWCxPQUFPO0FBQUEsTUFDUCxRQUFROGQsR0FBTTtBQUlaLFFBQUksS0FBSyxnQkFDUCxLQUFLLGNBQWFBLEtBQUEsZ0JBQUFBLEVBQU0sTUFBTSxPQUFNO0FBQUEsTUFFeEM7QUFBQSxJQUNEO0FBQUEsSUFFRCxZQUFjSCxHQUFhO0FBQ3pCLFVBQUksS0FBSyxhQUFhO0FBQ3BCLGNBQU0vVSxJQUFNLEtBQUssbUJBQW1CLEtBQUssS0FBSytVLENBQVcsQ0FBQyxJQUN0REEsSUFDQSxLQUFLO0FBQ1QsYUFBSyxRQUFRLFFBQVEsRUFBRSxNQUFNL1UsSUFBTSxJQUFJQSxNQUFRLE1BQU07QUFBQTtBQUV2RCxNQUFJLEtBQUssYUFDUCxLQUFLLGlCQUFpQjtBQUFBLElBRTFCO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUNSLFNBQUssVUFBVSxFQUFJLEdBQ25CLEtBQUssa0JBQWtCLEdBRXZCLEtBQUssU0FBUyxVQUFVLEtBQUsscUJBQXFCLEdBQ2xELEtBQUssVUFBVSxZQUFZLEdBQ3ZCLEtBQUssY0FBYyxLQUFLLFNBQzFCLEtBQUssU0FBUyxZQUFZO0FBQUEsRUFFN0I7QUFBQSxFQUVELFlBQVk7QUFDVixTQUFLLFVBQVUsU0FBUyxHQUN4QixLQUFLLFVBQVUsRUFBSyxHQUNoQixLQUFLLGNBQWMsS0FBSyxTQUMxQixLQUFLLFNBQVMsWUFBWTtBQUFBLEVBRTdCO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCx3QkFBd0IxTyxHQUFVO0FBQ2hDLGFBQU8sS0FBSyxzQkFBc0IsS0FBSyxzQkFBc0JBLENBQVE7QUFBQSxJQUN0RTtBQUFBLElBRUQsdUJBQXVCQSxHQUFVO0FBQy9CLGFBQU8sS0FBSyx3QkFBd0JBLENBQVEsRUFBRSxDQUFDLEtBQUs7QUFBQSxJQUNyRDtBQUFBLElBRUQsb0JBQW9CQSxHQUFVO0FBQzVCLGFBQU8sS0FBSyxrQkFBa0IsS0FBSyxzQkFBc0JBLENBQVE7QUFBQSxJQUNsRTtBQUFBLElBRUQsbUJBQW1CbUcsR0FBTTtBQUN2QixhQUFPLEtBQUssb0JBQW9CQSxDQUFJLEVBQUUsQ0FBQyxLQUFLO0FBQUEsSUFDN0M7QUFBQSxJQUVELGNBQWMwZCxHQUFnQjtBQUM1QixhQUFPLEtBQUssWUFBWSxLQUFLLHNCQUFzQkEsQ0FBYztBQUFBLElBQ2xFO0FBQUEsSUFFRCxhQUFhQSxHQUFnQjtBQUMzQixhQUFPLEtBQUssY0FBY0EsQ0FBYyxFQUFFLENBQUMsS0FBSztBQUFBLElBQ2pEO0FBQUEsSUFFRCxvQkFBb0I3akIsR0FBVTtBQUM1QixhQUFPLEtBQUssc0JBQXNCLEtBQUssa0JBQWtCQSxDQUFRO0FBQUEsSUFDbEU7QUFBQSxJQUVELG1CQUFtQkEsR0FBVTtBQUMzQixhQUFPLEtBQUssb0JBQW9CQSxDQUFRLEVBQUUsQ0FBQyxLQUFLO0FBQUEsSUFDakQ7QUFBQSxJQUVELFVBQVU2akIsR0FBZ0I7QUFDeEIsYUFBTyxLQUFLLFlBQVksS0FBSyxrQkFBa0JBLENBQWM7QUFBQSxJQUM5RDtBQUFBLElBRUQsU0FBU0EsR0FBZ0I7QUFDdkIsYUFBTyxLQUFLLFVBQVVBLENBQWMsRUFBRSxDQUFDLEtBQUs7QUFBQSxJQUM3QztBQUFBLElBRUQsY0FBYy9nQixHQUFVO0FBQ3RCLGFBQU8sS0FBSyxlQUFlLEtBQUssV0FBVyxLQUFLQSxDQUFRO0FBQUEsSUFDekQ7QUFBQSxJQUVELGVBQWVBLEdBQVU7QUFDdkIsYUFBTyxLQUFLLGVBQWUsS0FBSyxXQUFXLE1BQU1BLENBQVE7QUFBQSxJQUMxRDtBQUFBLElBRUQsT0FBTytmLEdBQU07QUFDWCxXQUFLLFVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFBQSxFQUFHLEdBQUssSUFReEMsQ0FBQyxLQUFLLFVBQVVBLEtBQVEsS0FBSyxZQUFXLE9BQzFDLEtBQUssU0FBU0E7QUFBQSxJQUVqQjtBQUFBLElBRUQsV0FBVztBQUNULFdBQUssVUFBVSxRQUFRO0FBQUEsSUFDeEI7QUFBQSxJQUVELGtCQUFrQjtBQUNoQixpQkFBV3RnQixLQUFhLEtBQUs7QUFDM0IsUUFBQUEsRUFBVSxnQkFBZ0I7QUFBQSxJQUU3QjtBQUFBLElBRUQsY0FBYztBQUNaLGlCQUFXQSxLQUFhLEtBQUs7QUFDM0IsUUFBQUEsRUFBVSxZQUFZO0FBQUEsSUFFekI7QUFBQSxJQUVELG1CQUFtQjtBQUlqQixZQUFNdWhCLElBQWtCLEtBQUssTUFBTSxRQUFRLFFBQVEsY0FBYyxHQUMzREMsSUFBVyxNQUFNRCxFQUFnQixjQUFjLElBQUksTUFBTSxRQUFRLENBQUM7QUFDeEUsTUFBQUMsRUFBUyxHQUVULFdBQVdBLEdBQVUsQ0FBQztBQUFBLElBQ3ZCO0FBQUEsSUFFRCxRQUFROztBQUNOLGtCQUFLLFNBQVMsS0FDUHhnQixJQUFBLEtBQUssMEJBQUwsZ0JBQUFBLEVBQTRCO0FBQUEsSUFDcEM7QUFBQSxJQUVELFlBQVloRSxHQUFPNEYsSUFBUyxJQUFNO0FBQ2hDLFlBQU0sRUFBRSxzQkFBQTZlLEVBQXFCLElBQUk7QUFDakMsVUFBSUM7QUFDSixVQUFJMWtCLEdBQU87QUFDVCxjQUFNMmtCLElBQVE5aEIsRUFBVzdDLENBQUssSUFDMUJBLElBQ0FvSyxHQUFTcEssQ0FBSyxJQUNaLENBQUE0a0IsTUFBUzVrQixFQUFNLEtBQUs0a0IsQ0FBSyxJQUN6QjtBQUNOLFFBQUFGLElBQVlDLElBQ1IsT0FBTyxLQUFLRixDQUFvQixFQUFFLE9BQU9FLENBQUssSUFDOUNuaEIsRUFBUXhELENBQUssSUFDWEEsSUFDQSxDQUFDQSxDQUFLO0FBQUE7QUFFZCxNQUFJNEYsS0FDRixLQUFLLFlBQVk7QUFFbkIsVUFBSUMsSUFBVSxJQUNWc2UsSUFBUTtBQUNaLE1BQUFPLFVBQWMsT0FBTyxLQUFLRCxDQUFvQjtBQUM5QyxpQkFBV2hrQixLQUFZaWtCLEdBQVc7QUFDaEMsY0FBTTdWLElBQWEsS0FBSyx3QkFBd0JwTyxDQUFRO0FBQ3hELG1CQUFXdUMsS0FBYTZMO0FBQ3RCLFVBQUs3TCxFQUFVLFNBQVM0QyxDQUFNLE1BRXhCQSxLQUFVdWUsS0FDWm5oQixFQUFVLGVBQWUsR0FFM0JtaEIsSUFBUSxJQUNSdGUsSUFBVTtBQUFBO0FBSWhCLGFBQUlELEtBQVUsQ0FBQ0MsS0FDYixLQUFLLGFBQWEsR0FFYkE7QUFBQSxJQUNSO0FBQUEsSUFFRCxVQUFVN0YsR0FBTztBQUNmLGFBQU8sS0FBSyxZQUFZQSxHQUFPLEVBQUs7QUFBQSxJQUNyQztBQUFBLElBRUQsTUFBTSxxQkFBcUJxRyxHQUFRQyxHQUFPOztBQUN4QyxXQUFLLFlBQVk7QUFDakIsVUFBSTZkLElBQVE7QUFDWixZQUFNVSxJQUFZLENBQUM7QUFDbkIsaUJBQVcsQ0FBQ3BrQixHQUFVcWtCLENBQUksS0FBSyxPQUFPLFFBQVF6ZSxDQUFNLEdBQUc7QUFHckQsY0FBTTBlLElBQWUsS0FBSyxhQUN0QnZrQixFQUFlLEtBQUssVUFBVUMsQ0FBUSxJQUN0Q0EsR0FJRXVrQixJQUFnQm5rQixHQUFja2tCLENBQVk7QUFDaEQsWUFBSUUsSUFBUTtBQUNaLGNBQU1wVyxJQUFhLEtBQUssd0JBQXdCbVcsQ0FBYTtBQUM3RCxtQkFBV2hpQixLQUFhNkw7QUFDdEIsVUFBSTdMLEVBQVUscUJBQXFCOGhCLEdBQU1YLEtBQVM3ZCxDQUFLLE1BQ3JEMmUsSUFBUSxJQUNSZCxJQUFRO0FBR1osWUFBSSxDQUFDYyxHQUFPO0FBSVYsZ0JBQU1DLElBQVdGLEVBQWMsSUFBSTtBQUNuQyxpQkFBT0EsRUFBYyxTQUFTLEtBQUc7QUFDL0Isa0JBQU1uVyxJQUFhLEtBQUssd0JBQXdCbVcsQ0FBYTtBQUM3RCx1QkFBV2hpQixLQUFhNkw7QUFDdEIsa0JBQ0UsUUFBTTdLLElBQUFoQixFQUFVLHdCQUFWLGdCQUFBZ0IsRUFBQTtBQUFBLGdCQUFBaEI7QUFBQSxnQkFDSitoQjtBQUFBLGdCQUNBLENBQUFJLE1BQWlCO0FBQ2Ysc0JBQUlGLElBQVE7QUFDWiw2QkFBV2ppQixLQUFhbWlCLEdBQWU7QUFDckMsMEJBQU1MLElBQU96ZSxFQUFPckQsRUFBVSxRQUFRO0FBQ3RDLG9CQUNFOGhCLEtBQ0E5aEIsRUFBVSxxQkFBcUI4aEIsR0FBTVgsS0FBUzdkLENBQUssTUFFbkQyZSxJQUFRLElBQ1JkLElBQVE7QUFBQTtBQUdaLHlCQUFPYztBQUFBLGdCQUNUO0FBQUE7QUFPRjtBQUlKLFlBQUFELEVBQWMsSUFBSTtBQUFBO0FBSXBCLGdCQUFNSixJQUFRelEsR0FBUytRLENBQVE7QUFDL0IscUJBQVczRCxLQUFPdUQsR0FBTTtBQUN0QixrQkFBTTFELElBQVN3RCxJQUNYLGFBQWFBLE1BQ2IsT0FBTyxLQUFLO0FBQ2hCLFlBQUFDLEVBQVUsS0FBSyxHQUFHekQsS0FBVUcsRUFBSSxTQUFTO0FBQUE7QUFBQTtBQUc3QyxRQUFBNEMsSUFBUTtBQUFBO0FBRVYsTUFBS0EsS0FDSCxLQUFLLGFBQWFVLEVBQVUsS0FBSztBQUFBLENBQUksQ0FBQztBQUFBLElBRXpDO0FBQUEsSUFFRCxhQUFhMWUsR0FBUztBQUNwQixXQUFLLE9BQU87QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU1BLEtBQVc7QUFBQSxPQUNsQjtBQUFBLElBQ0Y7QUFBQSxJQUVELFlBQVk7QUFJVixhQUFPLE9BQU8sS0FBSyxNQUFNMkssR0FBaUIsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQ2hFLEtBQUssWUFBWTtBQUFBLElBQ2xCO0FBQUEsSUFFRCxRQUFRL08sR0FBTTtBQUNaLGlCQUFXNkUsS0FBUTdFO0FBQ2pCLFlBQUk2RSxLQUFRLEtBQUssUUFFWCxDQUFDK04sR0FBTyxLQUFLLEtBQUsvTixDQUFJLEdBQUc3RSxFQUFLNkUsQ0FBSSxDQUFDLEdBQUc7QUFFeEMsZUFBSyxLQUFLQSxDQUFJLElBQUk3RSxFQUFLNkUsQ0FBSTtBQUMzQixxQkFBVzVELEtBQWEsS0FBSyxvQkFBb0I0RCxDQUFJO0FBQ25ELFlBQUE1RCxFQUFVLFVBQVU7QUFBQTtBQUFBLElBSzdCO0FBQUEsSUFFRCxXQUFXakIsR0FBTTtBQUlmLFlBQU1vUCxJQUFPLENBQUM7QUFDZCxpQkFBVyxDQUFDdkssR0FBTWhFLENBQUssS0FBSyxPQUFPLFFBQVFiLENBQUk7QUFDN0MsU0FBSXlCLEVBQVFaLENBQUssS0FBS3VILEVBQVN2SCxDQUFLLE1BQ2YsS0FBSyxvQkFBb0JnRSxDQUFJLEVBQ2pDLEtBQUssQ0FBQTVELE1BQWFBLEVBQVUsWUFBWSxNQUl6RG1PLEVBQUt2SyxDQUFJLElBQUloRTtBQUVmLGFBQU91TztBQUFBLElBQ1I7QUFBQSxJQUVELFlBQVksRUFBRSxRQUFBM00sSUFBUyxhQUFhLFlBQUE4TSxJQUFhLEdBQU8sSUFBRSxJQUFJO0FBQzVELGFBQU9EO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTDtBQUFBO0FBQUE7QUFBQSxVQUdFLFVBQVUsS0FBSztBQUFBLFVBQ2YsV0FBVztBQUFBLFVBQ1gsWUFBQUM7QUFBQSxVQUNBLFFBQUE5TTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRDtBQUFBLElBRUQsVUFBVWlELEdBQUs7O0FBR2IsT0FBQXpELElBQUEsS0FBSyx1QkFBd0IsTUFBN0IsUUFBQUEsRUFBK0IseUJBQXlCLE1BQU15RDtBQUFBLElBQy9EO0FBQUEsSUFFRCxtQkFBbUJ6RSxHQUFXeUUsR0FBSzs7QUFDakMsV0FBSyxlQUFlLEtBQUssb0JBQW9CekUsR0FBV3lFLENBQUcsSUFFM0R6RCxJQUFBLEtBQUssMEJBQUwsUUFBQUEsRUFBNEIsbUJBQW1CaEIsR0FBV3lFO0FBQUEsSUFDM0Q7QUFBQSxJQUVELGNBQWMyZCxHQUFNM2QsR0FBSztBQUN2QixXQUFLLGVBQWUsS0FBSyxlQUFlMmQsR0FBTTNkLENBQUc7QUFBQSxJQUNsRDtBQUFBLElBRUQsZUFBZXVHLEdBQU92RyxHQUFLO0FBQ3pCLFdBQUssZUFBZSxLQUFLLGdCQUFnQnVHLEdBQU92RyxDQUFHO0FBQUEsSUFDcEQ7QUFBQSxJQUVELGVBQWU0ZCxHQUFVdGhCLEdBQU8wRCxHQUFLO0FBQ25DLFlBQU1TLElBQU1uRSxFQUFNO0FBQ2xCLE1BQUkwRCxJQUNGNGQsRUFBU25kLENBQUcsSUFBSW5FLElBRWhCLE9BQU9zaEIsRUFBU25kLENBQUc7QUFBQSxJQUV0QjtBQUFBLElBRUQsdUJBQXVCbWQsR0FBVTtBQUMvQixhQUFPLE9BQU8sT0FBT0EsQ0FBUSxFQUFFLE9BQU8sQ0FBQ0MsR0FBbUJ2aEIsTUFBVTtBQUdsRSxjQUFNLEVBQUUsVUFBQXRELEVBQVMsSUFBSXNEO0FBRXJCLGdCQURpQnVoQixFQUFBN2tCLE9BQUE2a0IsRUFBQTdrQixLQUFnQyxDQUFBLElBQ3pDLEtBQUtzRCxDQUFLLEdBQ1h1aEI7QUFBQSxNQUNSLEdBQUUsRUFBRTtBQUFBLElBQ047QUFBQSxJQUVELFlBQVlBLEdBQW1CN2tCLEdBQVU7QUFDdkMsYUFBT1EsR0FBa0JSLENBQVEsRUFBRSxXQUFXLEtBQUssUUFBUSxJQUN2RCxLQUFLLHNCQUFzQjZrQixHQUFtQjdrQixDQUFRLElBQ3RELEtBQUssa0JBQWtCNmtCLEdBQW1CN2tCLENBQVE7QUFBQSxJQUN2RDtBQUFBLElBRUQsc0JBQXNCNmtCLEdBQW1CN2tCLEdBQVU7QUFDakQsYUFBTzZrQixFQUFrQnJrQixHQUFrQlIsQ0FBUSxDQUFDLEtBQUssQ0FBQztBQUFBLElBQzNEO0FBQUEsSUFFRCxrQkFBa0I2a0IsR0FBbUIxZSxHQUFNO0FBQ3pDLGFBQU8wZSxFQUFrQjlrQixFQUFlLEtBQUssVUFBVW9HLENBQUksQ0FBQyxLQUFLLENBQUM7QUFBQSxJQUNwRTtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pzQkQsTUFBSzRSLEtBQWFuQyxFQUFjLFVBQVUscUJBQWtCO0FBQUEsRUFDMUQsT0FBTyxDQUFDLFFBQVE7QUFBQSxFQUVoQixPQUFPO0FBQUEsSUFDTCxRQUFRLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3hDLFVBQVUsRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDMUMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxNQUFNLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3RDLE9BQU8sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdkMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLE1BQU0sR0FBRyxTQUFTLEtBQU07QUFBQSxJQUNoRCxVQUFVLEVBQUUsTUFBTSxTQUFTLFVBQVUsR0FBTTtBQUFBLElBQzNDLFdBQVcsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDNUMsYUFBYSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM5QyxXQUFXLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzVDLFVBQVUsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDM0MsV0FBVyxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM1QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQ3pDLFdBQVcsRUFBRSxNQUFNLGFBQWEsU0FBUyxLQUFNO0FBQUEsSUFDL0Msa0JBQWtCLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBSztBQUFBLEVBQ2pEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixZQUFZO0FBQ1YsYUFBT3JHLEdBQVUsS0FBSyxNQUFNO0FBQUEsSUFDN0I7QUFBQSxJQUVELFdBQVc7QUFDVCxhQUFPLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBQ0YsQ0FBQzs7RUM1RFUsT0FBQTs7O0VBQUEsT0FBQTs7OzswREFBQXVWLEdBQUEzSixFQUFBLEdBQUFDLEVBQUEsT0FBQTtBQUFBOzs7OztLQU5ORCxFQUFBLEVBQUEsR0FBQUMsRUFNTTJKLFdBQUFDLEVBQUEsa0JBQUEsQ0FBQTtBQUFBLE1BTmEsUUFBQTljO0FBQUEsTUFBQSxVQUFBbEk7QUFBQSxNQUFBLGdCQUFBaWxCO0FBQUEsTUFBQSxRQUFBM2tCO0FBQUEsTUFBQSxPQUFBcVQ7QUFBQSxPQU1qQnhTO01BQUkrRyxFQUFBLFVBQUEsWUFBQWlULEtBQUFDLEVBQUEsUUFBQThKLEVBQUE7TUFBQUYsRUFBQSxtQkFBQTljLENBQUEsVUFBQWlkLEVBQUFDLEdBQUE7QUFBQTtRQUFBLEtBQUE7QUFBQSxRQUFBLEtBQUFIO0FBQUEsUUFBQSxjQUFBOWpCO0FBQUEsUUFBQSxRQUFBK0c7QUFBQSxRQUFBLFVBQUFsSTtBQUFBLFFBQUEsTUFBQWdsQixFQUFBO0FBQUEsUUFBQSxNQUFBQSxFQUFBO0FBQUEsUUFBQSxPQUFBclI7QUFBQSxRQUFBLFFBQUFxUixFQUFBO0FBQUEsUUFBQSxRQUFBMWtCO0FBQUEsUUFBQSxVQUFBMGtCLEVBQUE7QUFBQSxRQUFBLGdCQUFBQSxFQUFBO0FBQUEsUUFBQSxnQkFBQUEsRUFBQSxlQUFBN2pCLENBQUE7QUFBQSxRQUFBLGtCQUFBNmpCLEVBQUE7QUFBQTtNQUFBOWMsRUFBQSxVQUFBLFdBQUFpVCxLQUFBQyxFQUFBLFFBQUFpSyxFQUFBOzs7Ozs7QUF5Q1gsV0FBa0J6UCxFQUFjLFVBQVUsWUFBUztBQUFBLEVBQ2pELFVBQVU7QUFDUixXQUFPO0FBQUEsTUFDTCxlQUFlLE1BQU0sS0FBSztBQUFBLElBQzVCO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsR0FBSTtBQUFBLElBQ3ZDLE1BQU0sRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDckMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3ZDLEtBQUssRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDcEMsUUFBUSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUN6QyxVQUFVLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzNDLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUNqRCxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFLO0FBQUEsRUFDakQ7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxXQUFXLENBQUM7QUFBQSxJQUNkO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsZUFBZTtBQUNiLGFBQU8sS0FBSyxNQUFNLE9BQU8sS0FBSyxjQUFjO0FBQUEsSUFDN0M7QUFBQSxJQUVELG1CQUFtQjs7QUFRakIsWUFBTTdFLEtBQWlCeE4sSUFBQSxLQUFLLGlCQUFMLGdCQUFBQSxFQUFtQjtBQUMxQyxhQUFPLE9BQU8sVUFBUThELElBQUEsS0FBSyxXQUFMLGdCQUFBQSxFQUFhLGVBQWMsQ0FBRSxDQUFBLEVBQUU7QUFBQSxRQUNuRCxDQUFDLENBQUNsQixHQUFNK0IsQ0FBTSxNQUFNO0FBRWxCLFVBQUFBLEVBQU8sT0FBTy9CO0FBRWQsZ0JBQU03RixJQUFTbVAsR0FBU3ZILENBQU0sR0FDeEIrYyxJQUFpQmxsQixFQUFlLEtBQUssVUFBVW9HLENBQUk7QUFDekQsaUJBQU87QUFBQSxZQUNMLFFBQUErQjtBQUFBLFlBQ0EsVUFDRTVILEtBQVUsQ0FBQ3lRLElBQ1BrVSxJQUNBLEtBQUs7QUFBQSxZQUNYLGdCQUFBQTtBQUFBLFlBQ0EsUUFBQTNrQjtBQUFBLFlBQ0EsT0FBTyxLQUFLLGNBQWM2RixDQUFJO0FBQUEsVUFDaEM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Q7QUFBQSxJQUVELG9CQUFvQjtBQUNsQixhQUFPLEtBQUssVUFBVSxLQUFLLGlCQUFpQixXQUFXO0FBQUEsSUFDeEQ7QUFBQSxJQUVELDBCQUEwQjtBQUN4QixZQUFNLEVBQUUsV0FBQW1mLEVBQVEsSUFBTSxNQUVoQkMsSUFBYyxDQUFBcGtCLE1BQ2xCbWtCLEVBQVVua0IsQ0FBSyxNQUNiQSxNQUFVbWtCLEVBQVUsU0FBUyxLQUM3QkUsRUFBaUJya0IsQ0FBSyxFQUFFLE1BQU1ta0IsRUFBVW5rQixDQUFLLEVBQUUsTUFJN0Nxa0IsSUFBbUIsQ0FBQXJrQixNQUFTO0FBQ2hDLGlCQUFTMlcsSUFBSTNXLElBQVEsR0FBRzJXLElBQUl3TixFQUFVLFFBQVF4TjtBQUM1QyxjQUFJd04sRUFBVXhOLENBQUM7QUFBRyxtQkFBT3dOLEVBQVV4TixDQUFDO0FBRXRDLGVBQU87QUFBQSxNQUNULEdBRU0yTixJQUFPLENBQUM7QUFDZCxVQUFJQyxJQUFNLENBQUM7QUFDWCxlQUFTdmtCLElBQVEsR0FBR0EsSUFBUW1rQixFQUFVLFFBQVFua0I7QUFDNUMsUUFBQXVrQixFQUFJLEtBQUt2a0IsQ0FBSyxHQUNWb2tCLEVBQVlwa0IsQ0FBSyxNQUNuQnNrQixFQUFLLEtBQUtDLENBQUcsR0FDYkEsSUFBTSxDQUFDO0FBR1gsTUFBSUEsRUFBSSxTQUFTLEtBQ2ZELEVBQUssS0FBS0MsQ0FBRztBQUdmLFlBQU1DLElBQTBCLENBQUM7QUFFakMsaUJBQVdELEtBQU9ELEdBQU07QUFDdEIsWUFBSUcsSUFBaUI7QUFDckIsbUJBQVd6a0IsS0FBU3VrQixHQUFLO0FBQ3ZCLGdCQUFNdk8sSUFBVyxLQUFLLFVBQVVoVyxDQUFLO0FBQ3JDLGVBQ0VnVyxLQUFBLGdCQUFBQSxFQUFVLFVBQVMsTUFDakJBLEVBQVMsS0FBSyxRQUFRLHFCQUFxQixLQUMzQ0EsRUFBUyxLQUNOLFFBQVEsaUJBQWlCLEVBQ3pCLFFBQVEsaUNBQWlDLElBRTlDO0FBR0EsWUFBQXlPLElBQWlCO0FBQ2pCO0FBQUE7QUFBQTtBQUdKLG1CQUFXemtCLEtBQVN1a0I7QUFDbEIsVUFBQUMsRUFBd0J4a0IsQ0FBSyxJQUFJeWtCO0FBQUE7QUFJckMsYUFBT0Q7QUFBQSxJQUNUO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsMEJBQTBCck8sR0FBUTtBQUNoQyxXQUFLLFVBQVUsU0FBU0E7QUFBQSxJQUMxQjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFDUixTQUFLLFVBQVUsRUFBSTtBQUFBLEVBQ3BCO0FBQUEsRUFFRCxZQUFZO0FBQ1YsU0FBSyxVQUFVLEVBQUs7QUFBQSxFQUNyQjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsVUFBVXRRLEdBQUs7QUFDYixXQUFLLGdCQUFnQixjQUFjLE1BQU1BLENBQUc7QUFBQSxJQUM3QztBQUFBLElBRUQsUUFBUTtBQUNOLFVBQUksS0FBSztBQUNQLGVBQU8sS0FBSyxRQUFRLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxPQUFPO0FBQUEsSUFFcEQ7QUFBQSxJQUVELGVBQWU7QUFDYixXQUFLLFVBQVUsTUFBTTtBQUNuQixtQkFBVzZlLEtBQWEsS0FBSyxNQUFNLFlBQVk7QUFDN0MsZ0JBQU1uZixJQUFPbWYsRUFBVSxLQUNqQjFrQixJQUFRLENBQUN1RixFQUFLLFFBQVEsT0FDdEJ1VCxJQUFTdlQsRUFBSyxzQkFBc0IsR0FDcEN1WCxJQUFRLGlCQUFpQnZYLENBQUksR0FDN0JvZixJQUFVLFdBQVc3SCxFQUFNLE9BQU8sR0FDbEM4SCxJQUFXLFdBQVc5SCxFQUFNLFFBQVEsR0FDcENJLElBQVNwRSxFQUFPLFNBQVMsSUFBSTZMO0FBQ25DLGVBQUssVUFBVTNrQixDQUFLLElBQ2xCa2QsS0FBVSxJQUNOLE9BQ0E7QUFBQSxZQUNFLEtBQUtwRSxFQUFPO0FBQUEsWUFDWixRQUFRb0UsSUFBUzBIO0FBQUEsWUFDakIsTUFBQXJmO0FBQUEsVUFDRjtBQUFBO0FBQUEsT0FFVDtBQUFBLElBQ0Y7QUFBQSxJQUVELGVBQWV2RixHQUFPO0FBQ3BCLGFBQU8sQ0FBQyxDQUFDLEtBQUssd0JBQXdCQSxDQUFLO0FBQUEsSUFDN0M7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQ2hPTSxTQUFTNmtCLEdBQWM3akIsR0FBTztBQUNuQyxRQUFNNUMsSUFDSjJHLEVBQVMvRCxDQUFLLEtBQ2RBLEVBQU0sTUFBTSxzQ0FBc0M7QUFFcEQsTUFBSTVDLEdBQU87QUFDVCxVQUFNLENBQUcsRUFBQTBtQixHQUFVQyxDQUFPLElBQUkzbUI7QUFDOUIsV0FBTyxXQUFXMG1CLENBQVEsSUFBSSxXQUFXQyxDQUFPO0FBQUE7QUFFaEQsV0FBTyxXQUFXL2pCLENBQUs7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNkNBLFdBQWtCeVQsRUFBYyxVQUFVLGlCQUFjO0FBQUEsRUFDdEQsT0FBTztBQUFBLElBQ0wsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsR0FBSTtBQUFBLElBQ3ZDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsVUFBVSxHQUFNO0FBQUEsSUFDL0MsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3ZDLFFBQVEsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDekMsUUFBUSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxTQUFTLFVBQVUsR0FBTTtBQUFBLElBQzNDLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUNqRCxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDakQsa0JBQWtCLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBSztBQUFBLEVBQ2pEO0FBQUEsRUFFRCxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixVQUFVO0FBQ1IsYUFBTyxJQUFJdFQsRUFBWSxNQUFNLEVBQUUsUUFBUSxLQUFLLFFBQVE7QUFBQSxJQUNyRDtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBT3FJLEdBQWlCLEtBQUssT0FBTyxJQUFJO0FBQUEsSUFDekM7QUFBQSxJQUVELFdBQVc7QUFDVCxhQUFPK0UsR0FBUyxLQUFLLFFBQVEsS0FBSyxjQUFjO0FBQUEsSUFDakQ7QUFBQSxJQUVELFFBQVE7QUFDTixhQUFPLEtBQUssV0FBVyxLQUFLLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUNyRDtBQUFBLElBRUQsZ0JBQWdCO0FBRWQsYUFBTyxLQUFLLFNBQVMsS0FBSyxXQUFXO0FBQUEsSUFDdEM7QUFBQSxJQUVELE1BQU01SixFQUFrQixRQUFRO0FBQUEsTUFDOUIsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLElBRUQsT0FBT0EsRUFBa0IsU0FBUztBQUFBLE1BQ2hDLE1BQU0sQ0FBQyxRQUFRLE1BQU07QUFBQSxNQUNyQixVQUFVOztBQUNSLGdCQUFPdkMsSUFBQSxLQUFLLGtCQUFMLGdCQUFBQSxFQUFvQjtBQUFBLE1BQzVCO0FBQUEsTUFDRCxJQUFJNmEsR0FBTztBQUVULGVBQU9BLE1BQVUsU0FDYixJQUNBbFksRUFBU2tZLENBQUssSUFDWkEsRUFBTSxNQUFNLG1CQUFtQixFQUFFLENBQUMsSUFDbENBO0FBQUEsTUFDUjtBQUFBLElBQ0YsQ0FBQztBQUFBLElBRUQsZUFBZXRZLEVBQWtCLFNBQVM7QUFBQSxNQUN4QyxNQUFNO0FBQUEsTUFDTixJQUFJc1ksR0FBTztBQUNULGVBQU9sWSxFQUFTa1ksQ0FBSyxLQUNqQkEsRUFBTSxNQUFNLGFBQWEsRUFBRSxDQUFDLEtBQUs7QUFBQSxNQUV2QztBQUFBLElBQ0YsQ0FBQztBQUFBLElBRUQsa0JBQWtCdFksRUFBa0IsV0FBVztBQUFBLE1BQzdDLE1BQU07QUFBQSxNQUNOLFVBQVU7O0FBQ1IsZ0JBQU92QyxJQUFBLEtBQUssa0JBQUwsZ0JBQUFBLEVBQW9CO0FBQUEsTUFDN0I7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUVELG1CQUFtQnVDLEVBQWtCLFlBQVk7QUFBQSxNQUMvQyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxJQUFJNlcsR0FBVTtBQUNaLGVBQU9BLEtBQVksS0FBSztBQUFBLE1BQzFCO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFFRCxXQUFXO0FBRVQsYUFDRSxLQUFLLGtCQUFrQixPQUN2QixLQUFLLFVBQVU7QUFBQSxJQUVsQjtBQUFBLElBRUQsYUFBYTtBQUVYLGFBQU8sS0FBSyxrQkFBa0I7QUFBQSxJQUMvQjtBQUFBLElBRUQsWUFBWTtBQUNWLFlBQU15QixJQUFRLEtBQUs7QUFFbkIsYUFBTyxDQUFDLE1BQU0sUUFBUSxNQUFNLEVBQUUsU0FBU0EsQ0FBSyxJQUN4QyxTQUNBLEtBQUssS0FBS0EsQ0FBSyxJQUNiLFdBQVdBLENBQUssSUFBSSxNQUNwQixRQUFRLEtBQUtBLENBQUssSUFDaEJBLElBQ0E0SCxHQUFjNUgsQ0FBSztBQUFBLElBQzVCO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxZQUFNLEVBQUUsa0JBQUErSCxHQUFrQixXQUFBQyxFQUFVLElBQUk7QUFDeEMsYUFBTzVjLEdBQVMyYyxDQUFnQixLQUFLM2MsR0FBUzRjLENBQVMsSUFDbkRELElBQW1CQyxJQUNuQjtBQUFBLElBQ0w7QUFBQSxJQUVELG1CQUFtQjtBQUNqQixZQUFNLEVBQUUsT0FBT3pNLEVBQVUsSUFBRSxLQUFLLFFBQzFCZ0gsSUFBUztBQUNmLGFBQU87QUFBQSxRQUNMLENBQUMsR0FBR0EsV0FBZ0IsR0FBRyxLQUFLO0FBQUEsUUFDNUIsaUJBQWlCLEtBQUs7QUFBQSxRQUN0QixtQkFBbUIsQ0FBQyxDQUFDLEtBQUs7QUFBQSxRQUMxQixDQUFDLEdBQUdBLG1CQUF3QixHQUFHLEtBQUs7QUFBQSxRQUNwQyxDQUFDLEdBQUdBLGlCQUFzQixHQUFHOVEsR0FBWSxLQUFLLE1BQU07QUFBQSxRQUNwRCxHQUFJM0osRUFBU3lULENBQU8sSUFBSSxFQUFFLENBQUNBLENBQU8sR0FBRyxHQUFLLElBQUlBO0FBQUEsTUFDaEQ7QUFBQSxJQUNEO0FBQUEsSUFFRCxrQkFBa0I7QUFDaEIsWUFBTSxFQUFFLFdBQUF5TSxHQUFXLGVBQUFDLEVBQWMsSUFBSTtBQUNyQyxhQUFPO0FBQUEsUUFDTCxVQUFVLEtBQUssV0FBVyxJQUFJO0FBQUEsUUFDOUIsWUFBWSxLQUFLLGFBQWEsSUFBSTtBQUFBLFFBQ2xDLFdBQVc3YyxHQUFTNGMsQ0FBUyxJQUFJLEdBQUdBLElBQVksU0FBU0E7QUFBQSxRQUN6RCxrQkFDRTVjLEdBQVM2YyxDQUFhLEtBQUtBLEtBQWlCLE9BQ3hDLEdBQUdELElBQVksU0FDZjtBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBQUEsSUFFRCxtQkFBbUI7QUFDakIsYUFBTztBQUFBLFFBQ0wsZUFBZSxLQUFLO0FBQUEsUUFDcEIsR0FBRyxLQUFLO0FBQUEsTUFDVjtBQUFBLElBQ0Q7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQU87QUFBQSxRQUNMLG1CQUFtQixLQUFLLFVBQVUsVUFBVSxLQUFLLGNBQWM7QUFBQSxRQUMvRCxtQkFBbUIsS0FBSztBQUFBLFFBQ3hCLHFCQUFxQixLQUFLO0FBQUEsTUFDNUI7QUFBQSxJQUNEO0FBQUEsSUFFRCxlQUFlO0FBQ2IsYUFBT3ZUO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLLE1BQU07QUFBQSxRQUNYLEtBQUs7QUFBQSxNQUNQO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLFNBQVNqTixHQUFRO0FBQ2YsV0FBSyxTQUFTQTtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7Ozs7OztBQ3pORCxXQUFrQmdRLEVBQWMsVUFBVSxZQUFTO0FBQUEsRUFDakQsT0FBTyxDQUFDLG1CQUFtQjtBQUFBLEVBQzNCLE9BQU87QUFBQSxJQUNMLE1BQU0sRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDckMsWUFBWSxFQUFFLE1BQU0sUUFBUSxTQUFTLEtBQUs7QUFBQSxFQUM1QztBQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN5QkQsV0FBa0JBLEVBQWMsVUFBVSxhQUFVO0FBQUEsRUFDbEQsUUFBUSxDQUFDdUosRUFBYztBQUFBLEVBRXZCLFVBQVU7QUFDUixXQUFPO0FBQUEsTUFDTCxpQkFBaUIsTUFBTTtBQUFBLE1BQ3ZCLGVBQWUsTUFBTSxLQUFLO0FBQUEsSUFDNUI7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQUEsSUFDTCxRQUFRLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3hDLFVBQVUsRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDMUMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxNQUFNLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3RDLE9BQU8sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdkMsVUFBVSxFQUFFLE1BQU0sU0FBUyxVQUFVLEdBQU07QUFBQSxJQUMzQyxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFLO0FBQUEsRUFDbEQ7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxTQUFTO0FBQUEsSUFDWDtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLGlCQUFpQjtBQUNmLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxlQUFlO0FBQ2IsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBT2hOLEdBQWlCLEtBQUssT0FBTyxPQUFPO0FBQUEsSUFDNUM7QUFBQSxJQUVELHFCQUFxQjtBQUNuQixhQUFPQSxHQUFpQixLQUFLLE9BQU8sWUFBWTtBQUFBLElBQ2pEO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBTyxLQUFLLE9BQU8sVUFBVSxLQUFLO0FBQUEsSUFDbkM7QUFBQSxJQUVELGFBQWE7QUFDWCxhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsWUFBWTtBQUNWLGFBQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUM3QjtBQUFBLElBRUQsY0FBYztBQUNaLFVBQUksS0FBSztBQUNQLGVBQU8sS0FBSztBQUNQO0FBR0wsY0FBTSxFQUFFLE1BQUE3USxHQUFNLEdBQUc0RyxFQUFTLElBQUUsS0FBSztBQUNqQyxlQUFPQTtBQUFBO0FBQUEsSUFFVjtBQUFBLElBRUQsV0FBVztBQUVULGFBQU8sS0FBSyxhQUFhLFNBQVM7QUFBQSxJQUNuQztBQUFBLElBRUQsZ0JBQWdCO0FBSWQsYUFBTyxLQUFLLGFBQWEsS0FBSyxXQUFXLEtBQUssZ0JBQWdCO0FBQUEsSUFDL0Q7QUFBQSxJQUVELFNBQVNwQyxFQUFrQixXQUFXO0FBQUEsTUFDcEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLElBRUQsUUFBUUEsRUFBa0IsVUFBVTtBQUFBLE1BQ2xDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxLQUNWO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVTtBQUNSLFNBQUssVUFBVSxFQUFJO0FBR25CLFVBQU0sRUFBRSxNQUFBeEUsTUFBUyxLQUFLO0FBQ3RCLElBQUlBLE1BQ0YsS0FBSyxVQUFVYyxFQUFXZCxDQUFJLElBQzFCQSxFQUFLLEtBQUssT0FBTyxJQUNqQkE7QUFBQSxFQUVQO0FBQUEsRUFFRCxZQUFZO0FBQ1YsU0FBSyxVQUFVLEVBQUs7QUFBQSxFQUNyQjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsVUFBVTBGLEdBQUs7QUFHYixXQUFLLGdCQUFnQixlQUFlLE1BQU1BLENBQUc7QUFBQSxJQUMvQztBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4SUQsV0FBa0I0TyxFQUFjLFVBQVUsY0FBVztBQUFBLEVBQ25ELE9BQU87QUFBQSxJQUNMLFFBQVEsRUFBRSxNQUFNLE9BQU8sU0FBUyxLQUFNO0FBQUEsSUFDdEMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxNQUFNLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3RDLE9BQU8sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdkMsVUFBVSxFQUFFLE1BQU0sU0FBUyxVQUFVLEdBQUs7QUFBQSxFQUMzQztBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsWUFBWTVWLEdBQVV5UyxHQUFjO0FBR2xDLGFBQU9BLElBQWUsR0FBR0EsRUFBYSxPQUFPelMsTUFBYUE7QUFBQSxJQUM1RDtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05ELFdBQWtCNFYsRUFBYyxVQUFVLGVBQVk7QUFBQSxFQUNwRCxTQUFTO0FBQUEsSUFDUCxlQUFlLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsU0FBUyxFQUFFLE1BQU0sUUFBUSxTQUFTLEtBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsR0FBSTtBQUFBLElBQ3ZDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsU0FBUyxLQUFNO0FBQUEsSUFDOUMsTUFBTSxFQUFFLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBRSxHQUFHO0FBQUEsSUFDM0MsT0FBTyxFQUFFLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBRSxHQUFHO0FBQUEsSUFDNUMsVUFBVSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU07QUFBQSxFQUMzQztBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsZ0JBQWdCO0FBRWQsWUFBTSxFQUFFLFVBQUE1VixHQUFVLFNBQUFvUyxFQUFNLElBQU07QUFDOUIsYUFBT0EsSUFDSCxPQUFPLE9BQU9BLENBQU8sRUFBRSxPQUFPLENBQUN0SCxHQUFTd2IsT0FDdEN4YixFQUFRL0ssRUFBZUMsR0FBVXNtQixFQUFPLElBQUksQ0FBQyxJQUFJQSxHQUMxQ3hiLElBQ04sRUFBRSxJQUNMO0FBQUEsSUFDTjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGdCQUFBMlQ7QUFBQSxJQUNBLGlCQUFBSDtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pCRCxNQUFLdkcsS0FBYW5DLEVBQWMsVUFBVSxtQkFBZ0I7QUFBQSxFQUN4RCxPQUFPLENBQUMsUUFBUTtBQUFBLEVBRWhCLE9BQU87QUFBQSxJQUNMLFNBQVMsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDeEMsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQzFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsU0FBUyxLQUFNO0FBQUEsSUFDOUMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3ZDLFVBQVUsRUFBRSxNQUFNLFNBQVMsVUFBVSxHQUFNO0FBQUEsSUFDM0MsV0FBVyxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM1QyxVQUFVLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzNDLFdBQVcsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDNUMsV0FBVyxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUM1QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQ3pDLFlBQVksRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFLO0FBQUEsRUFDM0M7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLFlBQVk7QUFDVixhQUFPLEtBQUssU0FBUyxLQUFLLE9BQU8sSUFBSTtBQUFBLElBQ3RDO0FBQUEsSUFFRCxzQkFBc0I7QUFDcEIsYUFBTyxLQUFLLFlBQVksQ0FBQyxLQUFLLGdCQUFnQixXQUFXO0FBQUEsSUFDMUQ7QUFBQSxJQUVELHNCQUFzQjtBQUNwQixhQUFPLEtBQUssWUFBWSxDQUFDLEtBQUssZ0JBQWdCLFdBQVc7QUFBQSxJQUMxRDtBQUFBLElBRUQscUJBQXFCO0FBQ25CLGFBQ0UsS0FBSyxZQUNMLENBQUMsS0FBSyxZQUNOLENBQUMsS0FBSyxnQkFBZ0IsVUFBVTtBQUFBLElBRW5DO0FBQUEsSUFFRCxzQkFBc0I7QUFDcEIsYUFDRSxLQUFLLFlBQ0wsQ0FBQyxLQUFLLGNBQ04sQ0FBQyxLQUFLLGdCQUFnQixXQUFXO0FBQUEsSUFFcEM7QUFBQSxJQUVELG1CQUFtQjs7QUFDakI7QUFBQTtBQUFBLFVBRUVyUyxJQUFBLEtBQUssT0FBTyxjQUFaLGdCQUFBQSxFQUF1QjtBQUFBO0FBQUEsUUFHckIsS0FBSyxhQUNMLEdBQUdnakIsR0FBVyxLQUFLLE1BQU0sTUFBTSxLQUFLLEtBQUssZUFFM0M7QUFBQTtBQUFBLElBRUo7QUFBQSxFQUNEO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxnQkFBZ0JwZ0IsR0FBTTtBQUdwQixhQUFPLEtBQUssZUFBZUEsR0FBTTtBQUFBLFFBQy9CLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxPQUNWO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25GRCxNQUFLNFIsS0FBYW5DLEVBQWMsVUFBVSxvQkFBaUI7QUFBQSxFQUN6RCxRQUFRLENBQUMrTSxFQUFhO0FBQUEsRUFFdEIsT0FBTztBQUFBLElBQ0wsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVV4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQzFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsU0FBUyxLQUFNO0FBQUEsSUFDOUMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3ZDLE1BQU0sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdEMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxNQUFNLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQ3JDLFVBQVUsRUFBRSxNQUFNLFNBQVMsVUFBVSxHQUFLO0FBQUEsRUFDM0M7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLFFBQVE7QUFDTixhQUFPMVUsR0FBZSxLQUFLLFFBQVEsS0FBSyxPQUFPO0FBQUEsSUFDaEQ7QUFBQSxJQUVELFlBQVk7QUFDVixhQUFPdUIsR0FBVSxLQUFLLE1BQU07QUFBQSxJQUM3QjtBQUFBLElBRUQsZUFBZTtBQUNiLFlBQU14QixJQUFRLE9BQU8sT0FBTyxLQUFLLEtBQUs7QUFDdEMsY0FDR0EsRUFBTSxTQUFTLEtBQUssQ0FBQyxLQUFLLE1BQU0sWUFDakNBLEVBQU0sS0FBSyxLQUFLLGVBQWU7QUFBQSxJQUVuQztBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGdCQUFnQkUsR0FBTTtBQUdwQixhQUNFLEtBQUssbUJBQW1CQSxDQUFJLEtBQzVCLEtBQUssZUFBZSxhQUFhO0FBQUEsUUFDL0IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsUUFBUUE7QUFBQSxPQUNUO0FBQUEsSUFFSjtBQUFBLElBRUQsV0FBV0EsR0FBTWxJLElBQU8sTUFBTTtBQUM1QixVQUFJLEtBQUssZ0JBQWdCa0ksQ0FBSSxLQUFLLENBQUMsS0FBSyxvQkFBb0JBLENBQUk7QUFDOUQsUUFBSSxLQUFLLFlBQ1AsS0FBSyxnQkFBZ0IsV0FBV0EsR0FBTWxJLENBQUksSUFFMUMsS0FBSyxRQUFRLEtBQUs7QUFBQSxVQUNoQixNQUFNLEdBQUcsS0FBSztBQUFBLFVBQ2QsT0FBTyxFQUFFLE1BQUFBLEVBQUs7QUFBQSxTQUNmO0FBQUE7QUFHSCxjQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFBQSxJQUU5RDtBQUFBLElBRUQsYUFBYWtJLEdBQU1sSSxHQUFNO0FBQ3ZCLGFBQU87QUFBQSxRQUNMLENBQUMsYUFBYUEsR0FBTSxHQUFHO0FBQUEsUUFDdkIsaUJBQWlCLEtBQUssb0JBQW9Ca0ksQ0FBSTtBQUFBLE1BQ2hEO0FBQUEsSUFDRDtBQUFBLElBRUQsaUJBQWlCbEksR0FBTTtBQUNyQixXQUFLLFdBQVcsS0FBSyxNQUFNQSxDQUFJLEdBQUdBLENBQUksR0FDdEMsS0FBSyxnQkFBZ0IsRUFBSztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUZELFdBQWtCNFAsRUFBYyxVQUFVLGlCQUFjO0FBQUEsRUFDdEQsUUFBUSxDQUFDZ0osRUFBUTtBQUFBLEVBRWpCLE9BQU87QUFBQSxJQUNMLFdBQVcsRUFBRSxNQUFNLENBQUMsU0FBUyxNQUFNLEdBQUcsVUFBVSxHQUFNO0FBQUEsSUFDdEQsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQzFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsU0FBUyxLQUFLO0FBQUEsRUFDOUM7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxhQUFhO0FBQUEsTUFDYixjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixtQkFBbUI7QUFDakIsYUFBT2xWLEVBQVMsS0FBSyxTQUFTLElBQUksS0FBSyxZQUFZLENBQUM7QUFBQSxJQUNyRDtBQUFBLElBRUQsV0FBVztBQUNULFlBQU0sRUFBRSxNQUFBZ0gsTUFBUyxLQUFLO0FBQ3RCLGFBQU9BLElBQ0gsQ0FBQThWLE1BQ0U5VixFQUFLLEtBQUssTUFBTSxJQUFJcE8sRUFBWSxNQUFNLEVBQUUsZUFBQWtrQixFQUFjLENBQUMsQ0FBQyxJQUMxRCxDQUFBQSxNQUFpQnRXLEdBQU1zVyxDQUFhO0FBQUEsSUFDekM7QUFBQSxJQUVELFlBQVk7QUFDVixZQUFNLEVBQUUsT0FBQUMsTUFBVSxLQUFLO0FBQ3ZCLGFBQU9BLElBQ0gsQ0FBQUQsTUFDRUMsRUFBTSxLQUFLLE1BQU0sSUFBSW5rQixFQUFZLE1BQU0sRUFBRSxlQUFBa2tCLEVBQWMsQ0FBQyxDQUFDLElBQzNELENBQUFBLE1BQWlCQTtBQUFBLElBQ3ZCO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsMkJBQTJCO0FBQUE7QUFBQSxNQUV6QixXQUFXO0FBQUEsTUFDWCxRQUFRRSxHQUFTO0FBQ2YsYUFBSyxjQUFjQTtBQUFBLE1BQ3JCO0FBQUEsSUFDRDtBQUFBLElBQ0QsMEJBQTBCO0FBQUEsRUFDM0I7QUFBQSxFQUVELFVBQVU7QUFHUixTQUFLLE1BQU0sVUFBVSxFQUFFLE1BQU0sS0FBSyxhQUFhLEdBQy9DLEtBQUssTUFBTSxRQUFRLEVBQUUsT0FBTyxLQUFLLGFBQWE7QUFBQSxFQUMvQztBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsTUFBTSxpQkFBaUJDLEdBQVE7O0FBRTdCLFVBQUksRUFBRSxlQUFBSCxNQUFrQixLQUFLO0FBQzdCLFVBQUk7QUFDRixjQUFNSSxJQUFPLFFBQU12ZixLQUFBOUQsSUFBQSxVQUFVLGNBQVYsZ0JBQUFBLEVBQXFCLGFBQXJCLGdCQUFBOEQsRUFBQSxLQUFBOUQ7QUFDbkIsUUFBSXFqQixNQUNGSixJQUFnQixLQUFLLE1BQU1JLENBQUk7QUFBQSxNQUVqQyxTQUFPOUYsR0FBUDtBQUNBLFFBQUk2RixNQUNGLFFBQVEsTUFBTTdGLEdBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPLEdBQ3BDQSxFQUFJLFNBQVMsaUJBQ2YsTUFBTStGO0FBQUE7QUFBQSxnQkFFRi9GLEVBQUk7QUFBQSxhQUNQO0FBQUEsTUFHUDtBQUNBLFlBQU0sRUFBRSxTQUFBZ0csR0FBUyxHQUFHeGxCLE1BQVNrbEIsS0FBaUIsQ0FBQztBQUMvQyxhQUFPTSxNQUFZLEtBQUssT0FBTyxPQUFPeGxCLElBQU87QUFBQSxJQUM5QztBQUFBLElBRUQsTUFBTSxjQUFjO0FBRWxCLFVBREEsS0FBSyxlQUFlLENBQUMsQ0FBQyxLQUFLLFNBQVMsZUFDaEMsQ0FBQyxLQUFLLGdCQUFnQixLQUFLLFNBQVMsTUFBTSxRQUFRO0FBR3BELGNBQU1BLElBQU8sTUFBTSxLQUFLLGlCQUFpQixFQUFLO0FBQzlDLGFBQUssZUFBZSxDQUFDLENBQUNBO0FBQUE7QUFBQSxJQUV6QjtBQUFBLElBRUQsTUFBTSxTQUFTOztBQUNiLFVBQUlBLElBQU8sS0FBSyxnQkFBZ0I7QUFDaEMsVUFBSTtBQUNGLFFBQUlBLE1BQ0ZBLElBQU87QUFBQSxVQUNMLFNBQVMsS0FBSyxPQUFPO0FBQUEsVUFDckIsR0FBRyxLQUFLLFNBQVNBLENBQUk7QUFBQSxRQUN2QixJQUdGLEtBQUssU0FBUyxnQkFBZ0JBLEdBQzlCLEtBQUssZUFBZTtBQUNwQixZQUFJO0FBQ0YsZ0JBQU1zbEIsSUFBTyxLQUFLLFVBQVV0bEIsR0FBTSxNQUFNLENBQUM7QUFDekMsa0JBQU0rRixLQUFBOUQsSUFBQSxVQUFVLGNBQVYsZ0JBQUFBLEVBQXFCLGNBQXJCLGdCQUFBOEQsRUFBQSxLQUFBOUQsR0FBaUNxakI7QUFBQSxRQUN2QyxTQUFPOUYsR0FBUDtBQUNBLGtCQUFRLE1BQU1BLEdBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPO0FBQUEsUUFDMUM7QUFBQSxNQUNBLFNBQU9oZCxHQUFQO0FBQ0EsZ0JBQVEsTUFBTUEsQ0FBSyxHQUNuQixNQUFNQSxFQUFNLE9BQU87QUFBQSxNQUNyQjtBQUFBLElBQ0Q7QUFBQSxJQUVELE1BQU0sVUFBVTtBQUNkLFVBQUl4QyxJQUFPLE1BQU0sS0FBSyxpQkFBaUIsRUFBSTtBQUMzQyxNQUFBQSxJQUFPQSxLQUFRLEtBQUssVUFBVUEsQ0FBSSxHQUM5QkEsTUFDRixLQUFLLGdCQUFnQixnQkFBZ0JBO0FBQUEsSUFFekM7QUFBQSxFQUNGO0FBQ0YsQ0FBQyxpRENwSmN5bEIsS0FBQTtBQUFBLEVBQ2IsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFdBQVc7QUFBQSxJQUNaO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsV0FBV2hILEdBQVcsRUFBRSxZQUFBaUgsSUFBYSxJQUFPLFlBQUFDLElBQWEsR0FBTyxJQUFHLElBQUk7QUFDckUsTUFBSSxDQUFDLEtBQUssWUFBWSxDQUFDbEgsTUFFckIsS0FBSyxZQUFZLENBQUMsQ0FBQ0EsR0FDZmlILEtBQ0YsS0FBSyxjQUFjLGdCQUFnQmpILENBQVMsR0FFMUNrSCxLQUNGLEtBQUssY0FBYyxXQUFXLEtBQUssU0FBUztBQUFBLElBR2pEO0FBQUEsRUFDRjtBQUNILEdDZGVDLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ2xFLElBQVcrRCxFQUFZO0FBQUEsRUFFaEMsVUFBVTtBQUNSLFdBQU87QUFBQSxNQUNMLG9CQUFvQixNQUFNO0FBQUE7QUFBQSxNQUUxQixRQUFRLE1BQU0sS0FBSztBQUFBLE1BQ25CLGNBQWMsTUFBTSxLQUFLO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBQUEsRUFFRCxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixvQkFBb0I7QUFDbEIsYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELFdBQVc7QUFHVCxhQUFPLEtBQUssWUFBYTtBQUFBLElBQzFCO0FBQUEsSUFFRCxlQUFlO0FBRWIsYUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLElBQ2Y7QUFBQSxJQUVELGNBQWM7QUFLWixhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsY0FBYztBQUtaLFlBQU03WSxJQUFPLEtBQUs7QUFDbEIsYUFDRSxDQUFDLEtBQUssZ0JBQ04sQ0FBQyxLQUFLLGVBQ05BLE1BQ0VBLEVBQUssZUFDTEEsRUFBSztBQUFBLElBR1Y7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQ0UsS0FBSyxlQUNIO0FBQUEsSUFJTDtBQUFBLElBRUQsYUFBYTtBQUNYLGFBQ0UsQ0FBQyxLQUFLLGVBQ04sQ0FBQyxLQUFLO0FBQUEsSUFFVDtBQUFBO0FBQUEsSUFHRCxVQUFVO0FBRVIsYUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLElBQ2Y7QUFBQSxJQUVELFFBQVE7QUFHTixhQUFPLEtBQUssU0FBVTtBQUFBLElBQ3ZCO0FBQUEsSUFFRCxrQkFBa0I7QUFFaEIsWUFBTSxFQUFFLFVBQVVpWixFQUFRLElBQUcsS0FBSztBQUNsQyxVQUFJLEtBQUssZ0JBQWdCQSxHQUFRO0FBQy9CLGNBQU0sRUFBRSxNQUFBdEssSUFBTyxFQUFHLElBQUcsS0FBSyxTQUFTLENBQUUsR0FDL0JuRixJQUFRbUYsSUFBT3NLO0FBQ3JCLGVBQU8sQ0FBQ3pQLEdBQU9BLElBQVF5UCxJQUFTLENBQUM7QUFBQTtBQUVuQyxhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsY0FBYztBQUNaLFlBQU10aUIsSUFBUSxLQUFLLGlCQUNiLEVBQUUsTUFBQWdZLEdBQU0sR0FBRy9JLEVBQU8sSUFBRyxLQUFLLFNBQVMsQ0FBRTtBQUMzQyxhQUFPO0FBQUEsUUFDTCxHQUFHQTtBQUFBO0FBQUEsUUFDSCxHQUFJalAsS0FBUztBQUFBO0FBQUE7QUFBQSxVQUdYLE9BQU9BLEVBQU0sS0FBSyxHQUFHO0FBQUEsUUFDL0I7QUFBQSxNQUNPO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFVBQVU7QUFFUixLQUFJLEtBQUssZ0JBQWdCLEtBQUssZUFDNUIsS0FBSyxVQUFXO0FBQUEsRUFFbkI7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGNBQWM7O0FBR1osYUFBT3NPLElBQVk1UCxJQUFBLEtBQUssaUJBQUwsZ0JBQUFBLEVBQW1CLFVBQVU7QUFBQSxRQUM5QyxNQUFNO0FBQUEsUUFDTixVQUFROEQsSUFBQSxLQUFLLHdCQUFMLGdCQUFBQSxFQUEwQixhQUFZO0FBQUEsTUFDdEQsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUVELFdBQVc7QUFDVCxZQUFNK2YsSUFBUSxLQUFLLE9BQVE7QUFDM0IsYUFBTyxLQUFLLGNBQ1I7QUFBQSxRQUNFLEdBQUdBO0FBQUE7QUFBQSxRQUVILFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxRQUNULE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxNQUNWLElBQ0RBO0FBQUEsSUFDTDtBQUFBO0FBQUEsSUFHRCxZQUFZO0FBQ1YsV0FBSyxhQUFhO0FBQUEsSUFDbkI7QUFBQTtBQUFBLElBR0QsUUFBUTlsQixHQUFNO0FBQ1osV0FBSyxhQUFhQTtBQUFBLElBQ25CO0FBQUEsSUFFRCxZQUFZO0FBSVYsV0FBSyxXQUFZO0FBQUEsSUFDbEI7QUFBQSxJQUVELGFBQWE7QUFDWCxNQUFJLEtBQUssZUFDSCxLQUFLLFVBQ1AsS0FBSyxXQUFZLElBRWpCLEtBQUssU0FBUyxFQUFJO0FBQUEsSUFHdkI7QUFBQSxJQUVELGFBQWE7QUFDWCxXQUFLLFNBQVMsRUFBSztBQUFBLElBQ3BCO0FBQUEsSUFFRCxTQUFTK2xCLEdBQU87QUFDZCxNQUFLLEtBQUssZ0JBQ0pBLEtBQ0YsS0FBSyxVQUFXLEdBRWxCLEtBQUssWUFBYTtBQUFBLElBRXJCO0FBQUEsSUFFRCxXQUFXbmYsR0FBUWxDLEdBQU07QUFDdkIsYUFBT3FLLEdBQWlCbkksR0FBUWxDLElBQU8sRUFBRSxNQUFBQSxFQUFNLElBQUcsQ0FBRSxHQUFFLElBQUk7QUFBQSxJQUMzRDtBQUFBLElBRUQsY0FBYztBQUNaLFlBQU04TixJQUFRLEtBQUs7QUFDbkIsV0FBSyxjQUFjLEVBQUUsUUFBUSxPQUFPLE9BQUFBLEtBQVMsQ0FBQ2dOLEdBQUs3TSxNQUFhOztBQUM5RCxZQUFJNk07QUFDRixjQUFJN00sR0FBVTtBQUNaLGtCQUFNLEVBQUUsTUFBQTNTLEVBQUksSUFBSzJTO0FBQ2pCLGlCQUNFM1MsS0FBQSxnQkFBQUEsRUFBTSxVQUFTLHdCQUNmaUMsSUFBQSxLQUFLLG1CQUFMLFFBQUFBLEVBQUEsV0FBc0JqQyxFQUFLO0FBRTNCLHFCQUFPO0FBQ0YsZ0JBQUksS0FBSyxvQkFBb0IyUyxDQUFRO0FBRzFDLHFCQUFPO0FBQUE7QUFBQTtBQUlYLGVBQUssUUFBUUEsRUFBUyxJQUFJLEdBQzFCLEtBQUssZ0JBQWdCLE1BQU07QUFBQSxNQUVyQyxDQUFPO0FBQUEsSUFDRjtBQUFBLElBRUQsa0JBQWtCQSxHQUFVO0FBQzFCLGNBQU9BLEtBQUEsZ0JBQUFBLEVBQVUsWUFBVztBQUFBLElBQzdCO0FBQUEsSUFFRCxvQkFBb0JBLEdBQVU7QUFDNUIsY0FBT0EsS0FBQSxnQkFBQUEsRUFBVSxZQUFXO0FBQUEsSUFDN0I7QUFBQSxJQUVELE1BQU0sY0FDSjtBQUFBLE1BQ0UsUUFBQUY7QUFBQSxNQUNBLFVBQUFwUixJQUFXLEtBQUs7QUFBQSxNQUNoQixPQUFBbVI7QUFBQSxNQUNBLE1BQUF4UztBQUFBLElBQ0QsR0FDRHdCLEdBQ0E7QUFDQSxZQUFNd2tCLElBQWlCO0FBQUEsUUFDckIsWUFBWTtBQUFBO0FBQUEsUUFDWixZQUFZLEtBQUs7QUFBQTtBQUFBLE1BQ2xCO0FBQ0QsV0FBSyxXQUFXLElBQU1BLENBQWM7QUFDcEMsWUFBTUMsSUFBVSxFQUFFLFFBQUF4VCxHQUFRLFVBQUFwUixHQUFVLE1BQUFyQixHQUFNLE9BQUF3UyxFQUFPO0FBQ2pELFVBQUk7QUFDRixjQUFNRyxJQUFXLE1BQU0sS0FBSyxZQUFZc1QsQ0FBTztBQUcvQyxRQUFBemtCLEVBQVMsTUFBTW1SLENBQVE7QUFBQSxNQUN4QixTQUFRblEsR0FBUDtBQUVBLGNBQU0sRUFBRSxVQUFBbVEsRUFBUSxJQUFLblE7QUFDckIsWUFBSSxDQUFDaEIsRUFBU2dCLEdBQU9tUSxDQUFRLEdBQUc7QUFDOUIsZ0JBQU0zUyxJQUFPMlMsS0FBQSxnQkFBQUEsRUFBVSxNQUNqQnFOLElBQVFwYixFQUFTNUUsS0FBQSxnQkFBQUEsRUFBTSxJQUFJLElBQzdCb1MsR0FBU3BTLEVBQUssSUFBSSxJQUNsQixTQUNFc2IsS0FBT3RiLEtBQUEsZ0JBQUFBLEVBQU0sWUFBV3dDO0FBQzlCLGVBQUssT0FBTyxFQUFFLE1BQU0sU0FBUyxPQUFBd2QsR0FBTyxNQUFBMUUsR0FBTTtBQUFBO0FBQUEsTUFFN0M7QUFDRCxXQUFLLFdBQVcsSUFBTzBLLENBQWM7QUFBQSxJQUN0QztBQUFBLElBRUQsZUFBZWhCLEdBQVF2UyxHQUFRO0FBRTdCLGFBQ0UsQ0FBQyxRQUFRLE9BQU8sT0FBTyxFQUFFLFNBQVNBLENBQU07QUFBQTtBQUFBLE9BR3RDdVMsRUFBTyxlQUFlLENBQUMsWUFBWSxNQUFNLENBQUMsS0FDMUNBLEVBQU87QUFBQSxJQUdaO0FBQUEsSUFFRCxNQUFNLE9BQU9BLEdBQVE7QUFDbkIsWUFBTTNqQixJQUFXd1EsR0FBWW1ULEVBQU8sT0FBTyxVQUFVO0FBQUEsUUFDbkQsUUFBUSxLQUFLO0FBQUEsTUFDckIsQ0FBTztBQUNELFVBQUkzakIsR0FBVTtBQUNaLGNBQU0sRUFBRSxRQUFBb1IsRUFBTSxJQUFLcFIsR0FDYnJCLElBQU8sS0FBSyxlQUFlZ2xCLEdBQVF2UyxDQUFNO0FBQy9DLGVBQU8sS0FBSyxlQUFldVMsR0FBUTNqQixHQUFVb1IsR0FBUXpTLENBQUk7QUFBQTtBQUUzRCxhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsTUFBTSxlQUFlZ2xCLEdBQVEzakIsR0FBVW9SLEdBQVF6UyxHQUFNO0FBQUEsTUFDbkQsU0FBQWttQixJQUFVO0FBQUEsTUFDVixXQUFBQztBQUFBLE1BQ0EsU0FBQUM7QUFBQSxNQUNBLGVBQUFDLElBQWdCLE1BQ2QsS0FBSyxPQUFPO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsTUFDaEIsQ0FBUztBQUFBLE1BQ0gsYUFBQUMsSUFBYyxDQUFBOWpCLE1BQ1osS0FBSyxPQUFPO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsVUFDSix5QkFBeUJBLElBQVEsTUFBTTtBQUFBLFdBQ3ZDQSxLQUFBLGdCQUFBQSxFQUFPLFlBQVdBO0FBQUEsUUFDbkI7QUFBQSxNQUNYLENBQVM7QUFBQSxJQUNKLElBQUcsSUFBSTtBQUNOLGFBQU8sSUFBSSxRQUFRLENBQUFKLE1BQVc7QUFDNUIsYUFBSztBQUFBLFVBQ0gsRUFBRSxRQUFBcVEsR0FBUSxVQUFBcFIsR0FBVSxNQUFBckIsRUFBTTtBQUFBLFVBQzFCLE9BQU93ZixHQUFLN00sTUFBYTtBQUN2QixrQkFBTTNTLElBQU8yUyxLQUFBLGdCQUFBQSxFQUFVO0FBQ3ZCLGdCQUFJNk0sR0FBSztBQUVQLG9CQUFNbGIsSUFBUyxLQUFLLGtCQUFrQnFPLENBQVEsS0FBSzNTLEVBQUs7QUFDeEQsa0JBQUlzRTtBQUNGLHNCQUFNLEtBQUsscUJBQXFCQSxHQUFRLEVBQUk7QUFBQSxtQkFDdkM7QUFDTCxzQkFBTTlCLElBQVE0RixFQUFTcEksQ0FBSSxJQUFJQSxJQUFPd2Y7QUFDdEMsZ0JBQUE0RyxLQUFBLFFBQUFBLEVBQVU1akIsSUFDVixNQUFNLEtBQUssZ0JBQWdCd2lCLEdBQVEsU0FBUztBQUFBLGtCQUMxQyxRQUFRc0I7QUFBQSxrQkFDUixPQUFBOWpCO0FBQUEsZ0JBQ2xCLENBQWlCO0FBQUE7QUFFSCxjQUFBSixFQUFRLEVBQUs7QUFBQTtBQUliLGNBQUk4akIsS0FBV2xtQixLQUNiLEtBQUssUUFBUUEsQ0FBSSxHQUVuQm1tQixLQUFBLFFBQUFBLEtBQ0EsTUFBTSxLQUFLLGdCQUFnQm5CLEdBQVEsV0FBVztBQUFBLGdCQUM1QyxRQUFRcUI7QUFBQSxjQUN4QixDQUFlLEdBQ0Rqa0IsRUFBUSxFQUFJO0FBQUEsVUFFZjtBQUFBLFFBQ0Y7QUFBQSxNQUNULENBQU87QUFBQSxJQUNGO0FBQUEsSUFFRCxNQUFNLGdCQUFnQjRpQixHQUFRempCLEdBQU8sRUFBRSxRQUFBc0MsR0FBUSxPQUFBckIsRUFBSyxHQUFJO0FBR3RELFlBQU1oQyxJQUFVLElBQUlRLEVBQVlna0IsR0FBUTtBQUFBLFFBQ3RDLFFBQVE7QUFBQSxRQUNSLE1BQU0sS0FBSztBQUFBLFFBQ1gsV0FBVyxLQUFLO0FBQUEsUUFDaEIsT0FBQXhpQjtBQUFBLE1BQ1IsQ0FBTyxHQUNLRCxJQUFNLE1BQU15aUIsRUFBTyxVQUFVempCLEdBQU8sRUFBRSxTQUFBZixHQUFTO0FBQ3JELGFBQ0VxRDtBQUFBLE1BRUF0QixNQUFRO0FBQUE7QUFBQSxNQUdSLENBQUMvQixFQUFRLGVBRVRxRCxFQUFPckIsQ0FBSyxHQUVQRDtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0g7QUM5V08sU0FBU2drQixHQUFZMW5CLEdBQU07QUFHaEMsU0FBTyxJQUFJLElBQUksUUFBUUEsR0FBTSxFQUFFO0FBQ2pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3dEQSxXQUFrQnlWLEVBQWMsVUFBVSxZQUFTO0FBQUEsRUFDakQsUUFBUSxDQUFDeUosSUFBWTZILEVBQWE7QUFBQSxFQUVsQyxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsYUFBYTtBQUFBLE1BQ2IsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLE1BQ1gsUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixRQUFRO0FBSU4sWUFBTUUsSUFBUSxLQUFLLFNBQVMsR0FDdEIsRUFBRSxZQUFBVSxHQUFZLGNBQUFDLEVBQWEsSUFBSTtBQUNyQyxhQUFPO0FBQUEsUUFDTCxHQUFHWDtBQUFBLFFBQ0gsUUFBUVUsSUFBYVYsRUFBTSxTQUFTQSxFQUFNO0FBQUEsUUFDMUMsV0FBV1UsSUFBYVYsRUFBTSxVQUFVQSxFQUFNO0FBQUEsUUFDOUMsUUFBUVcsSUFBZVgsRUFBTSxTQUFTQSxFQUFNO0FBQUEsUUFDNUMsV0FBV1csSUFBZVgsRUFBTSxZQUFZQSxFQUFNO0FBQUEsTUFDcEQ7QUFBQSxJQUNEO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFDRSxLQUFLO0FBQUEsUUFDSCxLQUFLO0FBQUE7QUFBQTtBQUFBLFFBR0wsS0FBSyxRQUFRLEVBQUUsTUFBTSxLQUFLLEtBQU07QUFBQSxRQUNoQyxLQUFLO0FBQUEsV0FDRixDQUFDO0FBQUEsSUFFVDtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBT2pWO0FBQUEsUUFDTHJFO0FBQUEsVUFDRTtBQUFBLFlBQ0UsUUFBUTtBQUFBLGNBQ04sTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLGdCQUNOLE9BQU8sTUFBTSxLQUFLLE9BQU87QUFBQSxjQUMzQjtBQUFBLFlBQ0Q7QUFBQSxZQUVELFFBQVEsQ0FBQyxLQUFLLGNBQWM7QUFBQSxjQUMxQixNQUFNO0FBQUE7QUFBQSxjQUVOLFdBQVc7QUFBQSxjQUNYLFFBQVE7QUFBQSxnQkFDTixPQUFPLENBQUMsRUFBRSxXQUFXd1ksUUFBYUEsRUFBTyxPQUFPO0FBQUEsY0FDbEQ7QUFBQSxZQUNGO0FBQUEsVUFDRDtBQUFBLFVBQ0QsS0FBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTyxLQUFLLGFBQWEsTUFBTSxDQUFDLEtBQUs7QUFBQSxJQUN0QztBQUFBLElBRUQsV0FBVztBQUNULGFBQU8sS0FBSyxlQUFlLEtBQUs7QUFBQSxJQUNqQztBQUFBLElBRUQsY0FBYztBQUNaLGFBQU8sQ0FBQyxLQUFLO0FBQUEsSUFDZDtBQUFBLElBRUQsYUFBYTtBQUVYLGFBQU8sS0FBSyxVQUFVO0FBQUEsSUFDdkI7QUFBQSxJQUVELFVBQVU7O0FBQ1IsYUFBTyxDQUFDLEtBQUssY0FBYyxDQUFDLEdBQUMvaUIsSUFBQSxLQUFLLHdCQUFMLFFBQUFBLEVBQTBCO0FBQUEsSUFDeEQ7QUFBQSxJQUVELGFBQWE7QUFJWCxhQUFPLENBQUMsQ0FBQyxLQUFLLGFBQWE7QUFBQSxJQUM1QjtBQUFBLElBRUQsY0FBYzs7QUFDWixlQUFPQSxJQUFBLEtBQUssd0JBQUwsZ0JBQUFBLEVBQTBCLGdCQUFlO0FBQUEsSUFDakQ7QUFBQSxJQUVELE9BQU87QUFFTCxhQUFPLEtBQUssT0FBTyxNQUFNO0FBQUEsSUFDMUI7QUFBQSxJQUVELFNBQVM7QUFDUCxhQUFPLEtBQUssYUFDUixPQUNBLEtBQUssU0FBUztBQUFBLElBQ25CO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBTyxLQUFLLGFBQWEsU0FBUztBQUFBLElBQ25DO0FBQUEsSUFFRCxXQUFXO0FBQ1QsWUFBTVosSUFBVyxLQUFLLFlBQVk7QUFDbEMsYUFBTzJRLEdBQWtCLEtBQUssUUFBUTNRLENBQVEsS0FBS0E7QUFBQSxJQUNwRDtBQUFBLElBRUQsbUJBQW1CO0FBQ2pCLGFBQU80akIsR0FBVyxLQUFLLGFBQWEsS0FBSyxNQUFNLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUN4RTtBQUFBLElBRUQsT0FBTztBQVNMLGFBQU8sS0FBSyxlQUFlLEtBQUssY0FBYyxLQUFLLGlCQUFpQjtBQUFBLElBQ3JFO0FBQUEsSUFFRCxXQUFXO0FBQ1QsYUFBTyxLQUFLLGdCQUFnQixLQUFLLGFBQWE7QUFBQSxJQUMvQztBQUFBLElBRUQsYUFBYTtBQU1YLFVBQUlqbEIsSUFBTyxLQUFLLGNBQWMsS0FBSyxxQkFBcUIsT0FBTztBQUMvRCxVQUFJQSxHQUFNO0FBR1IsY0FBTTBtQixJQUFZNW5CO0FBQUEsVUFDaEIsS0FBSyxnQkFBZ0IsS0FBSyxvQkFBb0I7QUFBQSxRQUNoRCxHQUdNNm5CLElBQVksS0FBSyxZQUFZLEtBQUssTUFBTSxHQUFHLEdBQzNDQyxJQUFhRCxFQUFVLE1BQU1BLEVBQVUsU0FBU0QsRUFBVSxNQUFNO0FBR3RFLGFBQUssWUFBWTtBQUNqQixjQUFNRyxJQUFlSCxFQUFVQSxFQUFVLFNBQVMsQ0FBQztBQUNuRCxRQUFJalYsR0FBZSxLQUFLLFlBQVksS0FBS29WLE1BQWlCLFlBSXhESCxFQUFVO0FBRVosaUJBQVMsSUFBSSxHQUFHSSxJQUFJSixFQUFVLFFBQVEsSUFBSUksS0FBSzltQixHQUFNLEtBQUs7QUFDeEQsZ0JBQU0rbUIsSUFBV0wsRUFBVSxDQUFDLEdBRXRCam1CLElBQU0sT0FBTyxLQUFLbW1CLEVBQVcsQ0FBQyxDQUFDLElBQ2pDRyxNQUFhLFdBQ1gsT0FDQSxLQUFLLGdCQUFnQixLQUFLLGNBQWMvbUIsR0FBTSttQixDQUFRLElBQ3hEQTtBQUdKLFVBQUksTUFBTUQsSUFBSSxJQUdaLEtBQUssWUFBWXJtQixJQUVqQlQsSUFBT0EsRUFBS1MsQ0FBRztBQUFBO0FBQUE7QUFJckIsYUFBT1Q7QUFBQSxJQUNSO0FBQUEsSUFFRCxnQkFBZ0I7QUFJZCxVQUNFLEtBQUssZUFDTCxLQUFLLGVBQWUsVUFDcEIsS0FBSyxjQUNMLEtBQUssY0FBYyxNQUNuQjtBQUNBLFlBQUlBLElBQU8sS0FBSyxXQUFXLEtBQUssU0FBUztBQUN6QyxlQUFLLEtBQUssZUFLUixLQUFLLGFBQWFBLElBQU80TyxHQUFNNU8sQ0FBSSxJQUduQ0EsTUFBUyxRQUNULENBQUMsS0FBSyxjQUNOeVIsR0FBZSxLQUFLLFlBQVksS0FLaEMsS0FBSyxRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsS0FBSyxlQUFlLEdBRTVDelI7QUFBQTtBQUVULGFBQU8sS0FBSztBQUFBLElBQ2I7QUFBQTtBQUFBLElBR0QsVUFBVTtBQUNSLGFBQU8sQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNmO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBTyxLQUFLLGFBQWEsS0FBSyxjQUFjLEtBQUssTUFBTSxFQUFFLFVBQVUsSUFBTTtBQUFBLElBQzNFO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBO0FBQUEsTUFFTixPQUFPO0FBQUEsTUFDUCxRQUFRa1UsR0FBSUMsR0FBTTs7QUFFaEIsY0FBTTZTLEtBQVEva0IsSUFBQSxLQUFLLFNBQUwsZ0JBQUFBLEVBQVc7QUFDekIsUUFDRStrQixLQUNBLEtBQUs7QUFBQSxRQUVMN1MsRUFBSyxRQUFRLENBQUMsRUFBRSxTQUFTRCxFQUFHLFFBQVEsQ0FBQyxFQUFFO0FBQUEsUUFDdkNDLEVBQUssT0FBTzZTLENBQUssTUFBTTtBQUFBLFFBQ3ZCOVMsRUFBRyxPQUFPOFMsQ0FBSyxNQUFNN1MsRUFBSyxPQUFPNlMsQ0FBSyxLQUV0QyxLQUFLLFNBQVMsRUFBSTtBQUFBLE1BRXRCO0FBQUEsSUFDRDtBQUFBLElBRUQsWUFBWTtBQUFBO0FBQUEsSUFFWixRQUFRO0FBQUEsRUFDVDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsZ0JBQWdCemxCLEdBQU91UyxHQUFRO0FBQzdCLGFBQU8sS0FBSyxvQkFBb0IsVUFBVXZTLEdBQU91UyxDQUFNO0FBQUEsSUFDeEQ7QUFBQSxJQUVELGdCQUFnQmtOLEdBQU87QUFFckIsYUFBTyxLQUFLLElBQUk7QUFBQSxRQUNkLEtBQUssS0FFRixPQUFPQSxFQUFNLFNBQVMsSUFBSUEsRUFBTSxLQUFLLFVBQVUsQ0FBQztBQUFBLE1BQ3JEO0FBQUEsSUFDRDtBQUFBO0FBQUEsSUFHRCxZQUFZO0FBQ1YsTUFBSSxLQUFLLGFBQ1AsS0FBSyxnQkFBTCxLQUFLLGNBQWdCLEtBQUssV0FBVyxLQUFLLFFBQVEsS0FBSyxJQUFJLEtBRTNELEtBQUssV0FBVztBQUFBLElBRW5CO0FBQUEsSUFFRCxjQUFjaGhCLEdBQU07QUFDbEIsVUFBSSxLQUFLLGNBQWMsS0FBSyxjQUFjLE1BQU07QUFDOUMsY0FBTSxFQUFFLHFCQUFBaW5CLEVBQWtCLElBQU07QUFDaEMsb0JBQUssV0FBVyxLQUFLLFNBQVMsSUFBSUEsRUFBb0IsV0FBV2puQixDQUFJLEdBQ3JFaW5CLEVBQW9CLFNBQVMsR0FDdEI7QUFBQTtBQUVULGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxjQUFjam5CLEdBQU07O0FBQ2xCLGFBQU95UixHQUFlLEtBQUssWUFBWSxJQUNuQyxLQUFLLGNBQWN6UixDQUFJLElBQ3ZCLENBQUMsR0FBQ2lDLElBQUEsS0FBSyxlQUFMLFFBQUFBLEVBQWlCLEtBQUtqQztBQUFBLElBQzdCO0FBQUE7QUFBQSxJQUdELFlBQVk7QUFDVixXQUFLLFFBQVEsSUFBSTtBQUFBLElBQ2xCO0FBQUE7QUFBQSxJQUdELFFBQVFBLEdBQU07QUFFWixNQUFJLEtBQUssY0FFUCxLQUFLLGNBQWNBLENBQUksS0FFdkIsS0FBSyxjQUFjLE1BQ25CLEtBQUssYUFBYUE7QUFBQSxJQUVyQjtBQUFBLElBRUQsZ0JBQWdCa1UsR0FBSUMsR0FBTTtBQUV4QixNQUFJRCxNQUFPQyxNQUNULEtBQUssYUFBYTtBQUFBLElBRXJCO0FBQUEsSUFFRCxNQUFNLFNBQVM7QUFDYixhQUFPLEtBQUssTUFBTTtBQUFBLElBQ25CO0FBQUEsSUFFRCxNQUFNLFFBQVE7QUFDWixhQUFPLEtBQUssU0FBUyxLQUFLLHFCQUFxQixJQUFJO0FBQUEsSUFDcEQ7QUFBQSxJQUVELGNBQWMrUyxJQUFVLElBQU07QUFDNUIsYUFBTyxLQUFLLGFBQ1JBLElBQ0UsV0FDQSxZQUNGQSxJQUNFLFdBQ0E7QUFBQSxJQUNQO0FBQUEsSUFFRCxNQUFNLE9BQU9sQyxHQUFRLEVBQUUsVUFBQTdnQixJQUFXLElBQU0sV0FBQWdqQixJQUFZLEdBQVEsSUFBRSxJQUFJO0FBQ2hFLFVBQUloakIsS0FBWSxDQUFDLEtBQUs7QUFDcEIsZUFBTztBQUdULFlBQU1pakIsSUFBVSxDQUFBRixNQUFXLEtBQUssTUFBTSxLQUFLLGNBQWNBLENBQU8sQ0FBQyxHQUczREcsSUFBaUJ4VixHQUFZbVQsRUFBTyxPQUFPLFVBQVU7QUFBQSxRQUN6RCxRQUFRLEtBQUs7QUFBQSxPQUNkLEdBQ0szakIsSUFBV2dtQixLQUFrQixLQUFLLFVBQ2xDNVUsS0FBU3BSLEtBQUEsZ0JBQUFBLEVBQVUsV0FBVSxLQUFLLFFBQ2xDckIsSUFBTyxLQUFLLGVBQWVnbEIsR0FBUXZTLENBQU07QUFDL0MsVUFBSTZVO0FBNkRKLFVBNURJLENBQUNELEtBQWtCLEtBQUssY0FDMUJDLElBQVUsTUFBTSxLQUFLLGdCQUFnQnRDLEdBQVEzakIsR0FBVW9SLEdBQVF6UyxHQUFNO0FBQUEsUUFDbkUsV0FBVyxNQUFNLEtBQUssZ0JBQWdCLEtBQUssY0FBYSxDQUFFO0FBQUEsUUFDMUQsU0FBUyxDQUFBd0MsTUFDUCxLQUFLLGdCQUFnQixTQUFTO0FBQUEsVUFDNUIsU0FBUyxFQUFFLE9BQUFBLEVBQU07QUFBQSxRQUNuQixDQUFDO0FBQUEsUUFDSCxlQUFlLE1BQU07QUFDbkIsZ0JBQU0rUCxJQUFPNlUsRUFBUSxFQUFLO0FBQzFCLGVBQUssT0FBTztBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sT0FBTyxLQUFLLGFBQ1IsUUFBUW5DLEdBQVcxUyxDQUFJLE1BQ3ZCLFVBQVUwUyxHQUFXMVMsQ0FBSTtBQUFBLFlBQzdCLE1BQU07QUFBQSxjQUNKLEtBQUssYUFDRCxHQUFHLEtBQUssaUJBQWlCQSxPQUN6QixjQUFjLEtBQUssa0JBQWtCQTtBQUFBLGNBQ3pDLEtBQUs7QUFBQSxZQUNQO0FBQUEsV0FDRDtBQUFBLFFBQ0Y7QUFBQSxRQUNELGFBQWEsTUFBTTtBQUNqQixnQkFBTUEsSUFBTzZVLEVBQVEsRUFBSTtBQUN6QixlQUFLLE9BQU87QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLE1BQU0sYUFBYTdVLEtBQVEsS0FBSztBQUFBLFdBQ2pDO0FBQUEsUUFDSDtBQUFBLE9BQ0QsSUFFRCtVLElBQVUsTUFBTSxLQUFLLGVBQWV0QyxHQUFRM2pCLEdBQVVvUixHQUFRelMsR0FBTTtBQUFBLFFBQ2xFLFNBQVM7QUFBQSxRQUNULFdBQVcsTUFBTSxLQUFLLGdCQUFnQixLQUFLLGNBQWEsQ0FBRTtBQUFBLFFBQzFELFNBQVMsQ0FBQXdDLE1BQ1AsS0FBSyxnQkFBZ0IsU0FBUztBQUFBLFVBQzVCLFNBQVMsRUFBRSxPQUFBQSxFQUFNO0FBQUEsUUFDbkIsQ0FBQztBQUFBLFFBQ0gsZUFBZSxNQUFNO0FBQ25CLGdCQUFNK1AsSUFBTzZVLEVBQVEsRUFBSztBQUMxQixlQUFLLE9BQU87QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE9BQU8sZ0JBQWdCbkMsR0FBVzFTLENBQUk7QUFBQSxZQUN0QyxNQUFNLEdBQUcsS0FBSyxpQkFBaUJBO0FBQUEsV0FDaEM7QUFBQSxRQUNGO0FBQUEsUUFDRCxhQUFhLENBQUEvUCxNQUFTO0FBQ3BCLGdCQUFNK1AsSUFBTzZVLEVBQVEsRUFBSTtBQUN6QixlQUFLLE9BQU87QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxjQUNKLGFBQWE3VSxLQUFRLEtBQUssWUFBWS9QLElBQVEsTUFBTTtBQUFBLGVBQ3BEQSxLQUFBLGdCQUFBQSxFQUFPLFlBQVdBO0FBQUEsWUFDcEI7QUFBQSxXQUNEO0FBQUEsUUFDSDtBQUFBLE9BQ0QsR0FFQzhrQjtBQUVGLFlBREEsS0FBSyxnQkFBZ0IsR0FDakJILEtBQWFuQyxFQUFPO0FBQ3RCLGVBQUssTUFBTTtBQUFBLGlCQUNGLEtBQUssWUFBWTtBQUUxQixnQkFBTTdrQixJQUFLLEtBQUssVUFBVSxLQUFLLFFBQVEsS0FBSyxJQUFJO0FBQ2hELGVBQUssUUFBUSxRQUFRLEVBQUUsTUFBTW9tQixHQUFZLEdBQUcsS0FBSyxXQUFXcG1CLEdBQUksR0FBRztBQUFBO0FBQUE7QUFHdkUsYUFBT21uQjtBQUFBLElBQ1I7QUFBQSxJQUVELE1BQU0sZ0JBQWdCdEMsR0FBUXVDLEdBQVdDLEdBQVN4bkIsR0FBTTtBQUFBLE1BQ3RELFdBQUFtbUI7QUFBQSxNQUNBLFNBQUFDO0FBQUEsTUFDQSxlQUFBQztBQUFBLE1BQ0EsYUFBQUM7QUFBQSxJQUNGLEdBQUc7QUFFRCxZQUFNZ0IsSUFBVSxLQUFLLGFBQ2pCLEtBQUssY0FBY3RuQixDQUFJLElBQ3ZCLEtBQUssY0FBY0EsQ0FBSTtBQUMzQixVQUFJc25CO0FBQ0YsUUFBQW5CLEtBQUEsUUFBQUEsS0FDQSxNQUFNLEtBQUssZ0JBQWdCbkIsR0FBUSxXQUFXO0FBQUEsVUFDNUMsUUFBUXFCO0FBQUEsU0FDVDtBQUFBLFdBQ0k7QUFDTCxjQUFNN2pCLElBQVE7QUFDZCxRQUFBNGpCLEtBQUEsUUFBQUEsRUFBVTVqQixJQUNWLE1BQU0sS0FBSyxnQkFBZ0J3aUIsR0FBUSxTQUFTO0FBQUEsVUFDMUMsUUFBUXNCO0FBQUEsVUFDUixPQUFBOWpCO0FBQUEsU0FDRDtBQUFBO0FBRUgsYUFBTzhrQjtBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQ3hmRCxNQUFLN1EsS0FBYW5DLEVBQWMsVUFBVSxrQkFBZTtBQUFBLEVBQ3ZELFNBQVNtVDtBQUNYLENBQUM7Ozs7Ozs7Ozs7O0FDU0QsV0FBa0JuVCxFQUFjLFVBQVUsY0FBVztBQUFBLEVBQ25ELE9BQU87QUFBQSxJQUNMLFFBQVEsRUFBRSxNQUFNLE9BQU8sU0FBUyxLQUFLO0FBQUEsRUFDdEM7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0Q7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLFNBQVM7QUFDUCxXQUFLLFVBQVUsS0FBSyxZQUFZO0FBQUEsSUFDbEM7QUFBQSxFQUNEO0FBQUEsRUFFRCxZQUFZOztBQUNWLEtBQUFyUyxJQUFBLEtBQUssUUFBTCxRQUFBQSxFQUFVO0FBQUEsRUFDWDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsZUFBZTtBQUNiLFVBQUksRUFBRSxLQUFBeWxCLE1BQVE7QUFDZCxNQUFBQSxLQUFBLFFBQUFBLEVBQUssUUFDRCxLQUFLLFdBQ1BBLElBQU0sS0FBSyxRQUFMLEtBQUssTUFBUXRjLEdBQVF1YyxHQUFNLEtBQUssSUFBSSxRQUFRLGlCQUFpQixDQUFDLENBQUMsSUFDckVELEVBQUksU0FBUztBQUFBLFFBQ1gsU0FBUyxLQUFLLE9BQU8sS0FBSztBQUFBLENBQUk7QUFBQSxRQUM5QixPQUFPO0FBQUEsUUFDUCxTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxlQUFlO0FBQUEsVUFDYixXQUFXO0FBQUEsWUFDVDtBQUFBLGNBQ0UsTUFBTTtBQUFBLGNBQ04sU0FBUztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBQUEsUUFDRDtBQUFBLFFBQ0QsYUFBYTtBQUFBLFFBQ2IsYUFBYTtBQUFBLFFBQ2IsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUFBO0FBQUEsUUFDYixRQUFRO0FBQUEsT0FDVCxHQUNEQSxFQUFJLE9BQU8saUJBQWlCLGFBQWEsTUFBTUEsRUFBSSxNQUFNLEdBQ3pEQSxFQUFJLEtBQUs7QUFBQSxJQUViO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9DRCxXQUFrQnBULEVBQWMsVUFBVSxjQUFXO0FBQUEsRUFDbkQsT0FBTztBQUFBLElBQ0wsT0FBTyxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN2QyxRQUFRLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBSztBQUFBLEVBQ3hDO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxhQUFhc1QsR0FBTztBQUNsQixZQUFNcFYsSUFBUSxFQUFFLEdBQUcsS0FBSyxPQUFPLE9BQU9vVixFQUFNLEtBQUs7QUFDakQsYUFBSXBWLEVBQU0sU0FDUkEsRUFBTSxPQUFPLElBRVIsS0FBSyxhQUFhQSxDQUFLO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBQ0YsQ0FBQzs7Ozs7Ozs7OztBQ3ZCRCxNQUFLaUUsS0FBYW5DLEVBQWMsVUFBVSxrQkFBZTtBQUFBLEVBQ3ZELFlBQVksRUFBRSxZQUFBdVQsR0FBWTtBQUFBLEVBRTFCLE9BQU87QUFBQSxJQUNMLE9BQU8sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdkMsT0FBTyxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN2QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBSztBQUFBLEVBQ3ZDO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixNQUFNO0FBQUEsTUFDSixNQUFNO0FBQ0osZ0JBQVEsQ0FBQyxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQUEsTUFDbEM7QUFBQSxNQUVELElBQUl0TSxHQUFNO0FBQ1IsUUFBSSxLQUFLLFNBQVNBLEtBQ2hCLEtBQUssUUFBUTtBQUFBLFVBQ1gsS0FBSyxhQUFhO0FBQUEsWUFDaEIsR0FBRyxLQUFLO0FBQUEsWUFDUixNQUFNQSxJQUFPO0FBQUEsV0FDZDtBQUFBLFFBQ0g7QUFBQSxNQUVKO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDLGlEQ3ZDY3VNLEtBQUE7QUFBQSxFQUNiLE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxZQUFZO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLG9CQUFvQkMsSUFBZ0IsSUFBTztBQUN6QyxZQUFNMUksSUFBUztBQUNmLGFBQU87QUFBQSxRQUNMLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLFdBQVcsR0FBR0E7QUFBQSxRQUNkLGFBQWEsR0FBR0E7QUFBQSxRQUNoQixZQUFZLEdBQUdBO0FBQUEsUUFDZixlQUFlLEdBQUdBO0FBQUEsUUFDbEIsZUFBQTBJO0FBQUEsUUFDQSxTQUFTLEtBQUs7QUFBQSxRQUNkLE9BQU8sS0FBSztBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBQUEsSUFFRCxjQUFjO0FBQ1osV0FBSyxhQUFhO0FBQUEsSUFDbkI7QUFBQSxJQUVELFVBQVUsRUFBRSxVQUFBQyxHQUFVLFVBQUFDLEtBQVk7QUFDaEMsV0FBSyxhQUFhLElBQ2RELE1BQWFDLEtBQ2YsS0FBSyxTQUFVO0FBQUEsSUFFbEI7QUFBQSxJQUVELFlBQVk3Z0IsR0FBYzhnQixHQUFNQyxHQUFpQjtBQUMvQyxZQUFNLEVBQUUsVUFBQTlZLEVBQVEsSUFBS2pJO0FBQ3JCLFVBQUlpSSxHQUFVO0FBR1osY0FBTTZHLEtBQVNpUyxLQUFBLGdCQUFBQSxFQUFrQixPQUFNO0FBQ3ZDLGlCQUFTLElBQUksR0FBRyxJQUFJRCxFQUFLLFFBQVE7QUFDL0IsVUFBQUEsRUFBSyxDQUFDLEVBQUU3WSxDQUFRLElBQUksSUFBSTZHO0FBQUE7QUFHNUIsYUFBT2dTO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDSDs7RUM3Q1UsT0FBQTs7O0VBQUEsT0FBQTs7O0VBQUEsT0FBQTs7O0VBQUEsT0FBQTs7O0VBQUEsT0FBQTs7OztBQUFBLFNBQUFyTyxFQUFBLEdBQUFDLEVBQUEsT0FBQTtBQUFBOzs7OztJQUFKLE9BQUlzTyxFQUFBMUUsRUFBQSxRQUFBLEtBQUEsRUFBQSxXQUFBQSxFQUFBLE9BQUE7QUFBQTtJQUFBQSxFQUFBLFNBQUE3SixLQUFBQyxFQUFBLE9BQUFpSyxJQUFBO0FBQUEsTUFBQUwsRUFBQSxtQkFBQTVKLEVBQUEsT0FBQTtBQUFBO1FBQUEsT0FBQTtBQUFBLFFBQUEsU0FBQXVPLEVBQUEsQ0FBQSxNQUFBQSxFQUFBLENBQUEsSUFBQUMsRUFBQSxDQUFBQyxNQUFBN0UsRUFBQSxTQUFBLENBQUFBLEVBQUEsUUFBQSxDQUFBLE1BQUEsQ0FBQTtBQUFBO1FBQUFBLEVBQUEsbUJBQUE1SixFQUFBLE9BQUE7QUFBQTtVQUFBLE9BQUEwTyxFQUFBLENBQUEsZ0JBQUEsRUFBQSxhQUFBOUUsRUFBQSxPQUFBLENBQUEsQ0FBQTtBQUFBO1FBQUErRSxFQUFBLE9BQUE7QUFBQSxVQUFBLE9BQUE7QUFBQSxVQUFBLFdBQUEvRSxFQUFBO0FBQUE7UUFBQUEsRUFBQSxnQkFBQTVKLEVBQUEsT0FBQTRPLElBQUFDLEVBQUFqRixFQUFBLE9BQUEsR0FBQSxDQUFBO2FBQUE3SixLQUFBQyxFQUFBLE9BQUE4TyxJQUFBO0FBQUEsUUFBQUgsRUFBQSxPQUFBO0FBQUEsVUFBQSxPQUFBO0FBQUEsVUFBQSxXQUFBL0UsRUFBQTtBQUFBOztNQUFBQSxFQUFBLGtCQUFBN0osS0FBQUMsRUFBQSxPQUFBK08sSUFBQTtBQUFBLFFBQUFuRixFQUFBLGFBQUE3SixLQUFBQyxFQUFBLEtBQUFnUCxFQUFBO0FBQUE7VUFBQSxPQUFBO0FBQUEsV0FBQXBGLEVBQUEsb0JBQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsR0FBQSxNQUFBLEVBQUE7UUFBQUEsRUFBQSxZQUFBN0osS0FBQUMsRUFBQSxVQUFBZ1AsRUFBQTtBQUFBO1VBQUEsT0FBQTtBQUFBLFVBQUEsTUFBQTtBQUFBLFdBQUFwRixFQUFBLG9CQUFBQSxFQUFBLE1BQUEsSUFBQSxHQUFBO0FBQUEsVUFBQSxtQ0FBQUEsRUFBQSxVQUFBQSxFQUFBLE9BQUEsR0FBQTNoQixDQUFBO0FBQUE7UUFBQTJoQixFQUFBLGFBQUE3SixLQUFBQyxFQUFBLFVBQUFnUCxFQUFBO0FBQUE7VUFBQSxPQUFBO0FBQUEsVUFBQSxNQUFBO0FBQUEsV0FBQXBGLEVBQUEsb0JBQUFBLEVBQUEsTUFBQSxNQUFBLEdBQUE7QUFBQSxVQUFBLG1DQUFBQSxFQUFBLFlBQUFBLEVBQUEsU0FBQSxHQUFBM2hCLENBQUE7QUFBQTs7O0lBQUEyaEIsRUFBQSxhQUFBRixHQUFBM0osRUFBQSxHQUFBQyxFQUFBLFNBQUFpUCxJQUFBO0FBQUEsY0FBQWpQLEVBQUEySixHQUFBLE1BQUF1RixFQUFBdEYsRUFBQSxZQUFBLENBQUFQLFlBQUFySixFQUFBLE1BQUEsTUFBQTtBQUFBLFFBQUEyTyxFQUFBLE1BQUEsTUFBQTtBQUFBLFVBQUF0RixFQUFBLFVBQUEsV0FBQVUsRUFBQW9GLEdBQUE7QUFBQTtZQUFBLFVBQUF2RixFQUFBLG9CQUFBUCxDQUFBO0FBQUEsWUFBQSxPQUFBTyxFQUFBLFNBQUFQLENBQUE7QUFBQTs7UUFBQStGLEVBQUFDLEdBQUE7QUFBQSxVQUFBLE1BQUFoRztBQUFBLFVBQUEsUUFBQUE7QUFBQSxVQUFBLFVBQUFPLEVBQUEsb0JBQUFQLENBQUE7QUFBQSxVQUFBLE1BQUFPLEVBQUE7QUFBQSxVQUFBLE1BQUFBLEVBQUE7QUFBQSxVQUFBLE9BQUFBLEVBQUE7QUFBQSxVQUFBLFVBQUFBLEVBQUE7QUFBQTs7O1VBQUFBLEVBQUEsTUFBQTtBQUFBO0lBQUFBLEVBQUEseUJBQUFHLEVBQUF1RixHQUFBO0FBQUE7TUFBQSxZQUFBMUYsRUFBQSxZQUFBQSxFQUFBLGdCQUFBQSxFQUFBLFlBQUE7QUFBQSxNQUFBLFNBQUFBLEVBQUEsb0JBQUEsRUFBQTtBQUFBLE1BQUEsV0FBQUEsRUFBQTtBQUFBLE1BQUEsdUJBQUEyRSxFQUFBLENBQUEsTUFBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQXhuQixNQUFBNmlCLEVBQUEsZUFBQTdpQjtBQUFBO2lCQUFBLE1BQUE7QUFBQSxTQUFBZ1osRUFBQSxFQUFBLEdBQUFDLEVBQUEySixHQUFBLE1BQUF1RixFQUFBdEYsRUFBQSxlQUFBLENBQUF4aUIsR0FBQXJCLFlBQUFna0IsRUFBQXdGLEdBQUE7QUFBQSxVQUFBLEtBQUEzRixFQUFBLFdBQUFBLGtCQUFBeGlCLEVBQUEsSUFBQTtBQUFBLFVBQUEsUUFBQXdpQixFQUFBO0FBQUEsVUFBQSxVQUFBQSxFQUFBLGdCQUFBQSxFQUFBLGdCQUFBN2pCLENBQUE7QUFBQSxVQUFBLE1BQUFxQixFQUFBO0FBQUEsVUFBQSxNQUFBQSxFQUFBO0FBQUEsVUFBQSxNQUFBQSxFQUFBO0FBQUEsVUFBQSxRQUFBQSxFQUFBO0FBQUEsVUFBQSxXQUFBd2lCLEVBQUE7QUFBQSxVQUFBLE9BQUFBLGVBQUFBLEVBQUEsZ0JBQUF4aUIsRUFBQSxNQUFBLEVBQUEsT0FBQXJCLEdBQUE7QUFBQSxVQUFBLE9BQUE2akIsRUFBQSxRQUFBO0FBQUE7Ozs7VUFBQUEsRUFBQSxNQUFBO0FBQUE7OztBQXlHVixXQUFrQnBQLEVBQWMsVUFBVSxnQkFBYTtBQUFBLEVBQ3JELFFBQVEsQ0FBQ29OLElBQVdvRyxFQUFhO0FBQUEsRUFDakMsUUFBUSxDQUFDLFdBQVc7QUFBQSxFQUVwQixPQUFPO0FBQUEsSUFDTCxRQUFRLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3hDLFVBQVUsRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDMUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLE1BQU0sR0FBRyxTQUFTLEtBQU07QUFBQSxJQUM5QyxNQUFNLEVBQUUsTUFBTSxRQUFRLFNBQVMsR0FBSTtBQUFBLElBQ25DLE1BQU0sRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFPO0FBQUEsSUFDdkMsUUFBUSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU87QUFBQSxJQUN6QyxXQUFXLEVBQUUsTUFBTSxTQUFTLFNBQVMsR0FBTztBQUFBLElBQzVDLE9BQU8sRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFNO0FBQUEsSUFDdEMsT0FBTyxFQUFFLE1BQU0sUUFBUSxTQUFTLEVBQUU7QUFBQSxFQUNuQztBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFFBQVEsS0FBSyxRQUFRLEtBQUssT0FBTztBQUFBLElBQ25DO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsT0FBTztBQUNMLGFBQU8sS0FBSyxVQUFVO0FBQUEsSUFDdkI7QUFBQSxJQUVELFFBQVE7QUFDTixhQUFPLEtBQUssVUFBVTtBQUFBLElBQ3ZCO0FBQUEsSUFFRCxXQUFXO0FBQ1QsYUFBTyxLQUFLLFVBQVU7QUFBQSxJQUN2QjtBQUFBLElBRUQsYUFBYTtBQUNYLGFBQU87QUFBQSxRQUNMLEdBQUcsS0FBSztBQUFBLFFBQ1IsUUFBUSxLQUFLO0FBQUEsTUFDZjtBQUFBLElBQ0Q7QUFBQSxJQUVELGFBQWE7QUFDWCxhQUFPcFgsR0FBZ0IsS0FBSyxPQUFPLFVBQVU7QUFBQSxJQUM5QztBQUFBO0FBQUEsSUFHRCxpQkFBaUI7QUFDZixhQUFPLEtBQUssT0FBTztBQUFBLElBQ3BCO0FBQUEsSUFFRCxlQUFlOztBQUNiLFlBQU03TCxLQUFPNUMsSUFBQSxLQUFLLG1CQUFMLGdCQUFBQSxFQUFxQjtBQUNsQyxhQUFPNEMsS0FBUSxLQUFLLEtBQUtBLENBQUk7QUFBQSxJQUM5QjtBQUFBLElBRUQsb0JBQW9COztBQUNsQixlQUNFNUMsSUFBQSxLQUFLLGlCQUFMLGdCQUFBQSxFQUFtQixVQUFTLEtBQzVCLEtBQUssZUFBZSxhQUFhO0FBQUEsUUFDL0IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsUUFBUSxLQUFLO0FBQUEsT0FDZDtBQUFBLElBRUo7QUFBQSxJQUVELGNBQWM7O0FBQ1osZUFBT0EsSUFBQSxLQUFLLGlCQUFMLGdCQUFBQSxFQUFtQixXQUFVO0FBQUEsSUFDckM7QUFBQSxJQUVELGdCQUFnQjs7QUFDZCxlQUFPQSxJQUFBLEtBQUssZUFBTCxnQkFBQUEsRUFBaUIsV0FBVTtBQUFBLElBQ25DO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTyxLQUFLLGdCQUFnQixLQUFLO0FBQUEsSUFDbEM7QUFBQSxJQUVELGdCQUFnQjtBQUNkLFlBQU0sRUFBRSxnQkFBQXFuQixHQUFnQixjQUFBQyxFQUFhLElBQUk7QUFDekMsVUFBSUQsS0FBa0JDLEdBQWM7QUFDbEMsY0FBTSxFQUFFLFVBQUFDLE1BQWEsS0FBSyxXQUNwQkMsSUFBZSxDQUFDLEtBQUssUUFBUUgsRUFBZTtBQUVsRCxlQUFPLEtBQUs7QUFBQSxVQUNWQTtBQUFBLFVBQ0FDLEVBQWEsSUFBSSxDQUFDdnBCLEdBQU1ILE1BQVU7QUFDaEMsa0JBQU1oQixJQUNKeXFCLEVBQWUsUUFDZixHQUFHLEtBQUssUUFBUUEsRUFBZSxRQUFRenBCLEtBRW5DMGhCLElBQ0prSTtBQUFBLFlBRUFELEVBQVMsV0FBVzNxQixDQUFJLEtBQUtBLEVBQUssU0FBUzJxQixFQUFTO0FBR3RELG1CQUFPO0FBQUEsY0FDTCxNQUFBeHBCO0FBQUEsY0FDQSxNQUFBbkI7QUFBQSxjQUNBLE1BQUEwaUI7QUFBQSxjQUNBLFFBTGFpSSxNQUFhM3FCO0FBQUEsWUFNNUI7QUFBQSxXQUNEO0FBQUEsUUFDSDtBQUFBO0FBRUYsYUFBTyxDQUFDO0FBQUEsSUFDVDtBQUFBLElBRUQsVUFBVTtBQUNSLFlBQU0sRUFBRSxhQUFBNnFCLEVBQVUsSUFBTTtBQUN4QixhQUNFQSxLQUNBLEdBQUdBLEtBQ0RBLE1BQWdCLElBQUksU0FBUztBQUFBLElBR2xDO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUFPLEtBQUssYUFBYSxLQUFLLFlBQVksS0FBSztBQUFBLElBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1ELFdBQVdsbEIsRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULElBQUltbEIsR0FBVztBQUNiLGVBQU9BLEtBQWF0YyxHQUFjLEtBQUssTUFBTTtBQUFBLE1BQy9DO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFFRCxVQUFVN0ksRUFBa0IsWUFBWTtBQUFBLE1BQ3RDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULElBQUlvbEIsR0FBVTtBQUNaLGVBQU9BLEtBQVl2YyxHQUFjLEtBQUssTUFBTTtBQUFBLE1BQzlDO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFFRCxXQUFXN0ksRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxLQUNWO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1Asb0JBQW9CMmUsR0FBVTtBQUM1QixhQUFPMWtCLEVBQWUsS0FBSyxVQUFVMGtCLEVBQVMsSUFBSTtBQUFBLElBQ25EO0FBQUEsSUFFRCxTQUFTO0FBR1AsV0FBSyxRQUFRLEtBQUs7QUFBQSxRQUNoQixNQUFNLEdBQUcsS0FBSyxVQUFVLE9BQU8sS0FBSztBQUFBO0FBQUEsUUFFcEMsT0FBTyxLQUFLLE9BQU87QUFBQSxPQUNwQjtBQUFBLElBQ0Y7QUFBQSxJQUVELFdBQVc7QUFBQSxJQUVWO0FBQUEsSUFFRCxXQUFXO0FBQ1QsV0FBSyxVQUFVLFNBQVM7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25QRCxXQUFrQjdPLEVBQWMsVUFBVSxpQkFBYztBQUFBLEVBQ3RELE9BQU87QUFBQSxJQUNMLE9BQU8sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdkMsU0FBUyxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN6QyxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsVUFBVSxHQUFLO0FBQUEsRUFDakQ7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLE9BQU87QUFDTCxZQUFNdVYsS0FBUyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sS0FBSztBQUNsRCxhQUFPO0FBQUEsUUFDTCxNQUFNQSxFQUFNLENBQUM7QUFBQSxRQUNiLE9BQU9BLEVBQU0sQ0FBQztBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGVBQWVDLEdBQVE7QUFDckIsYUFBTyxlQUFlblcsR0FBVW1XLEVBQU8sSUFBSTtBQUFBLElBQzVDO0FBQUEsSUFFRCxhQUFhQSxHQUFRO0FBQ25CLGFBQU8sS0FBSyxLQUFLLFNBQVNBLEVBQU8sT0FDN0IsNEJBQTRCLEtBQUssS0FBSyxVQUN0QztBQUFBLElBQ0w7QUFBQSxJQUVELFlBQVlBLEdBQVE7QUFFbEIsWUFBTUQsSUFDSixLQUFLLEtBQUssU0FBU0MsRUFBTyxRQUFRLEtBQUssS0FBSyxVQUFVLFFBQ2xELFNBQ0E7QUFDTixhQUFPLEtBQUssYUFBYTtBQUFBLFFBQ3ZCLEdBQUcsS0FBSztBQUFBLFFBQ1IsT0FBTyxHQUFHQSxFQUFPLFFBQVFEO0FBQUEsT0FDMUI7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hERCxXQUFrQnZWLEVBQWMsVUFBVSxpQkFBYztBQUFBLEVBQ3RELE9BQU87QUFBQSxJQUNMLE1BQU0sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdEMsUUFBUSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN4QyxVQUFVLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQzFDLE1BQU0sRUFBRSxNQUFNLFFBQVEsVUFBVSxHQUFNO0FBQUEsSUFDdEMsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBTTtBQUFBLElBQ3ZDLFFBQVEsRUFBRSxNQUFNLFNBQVMsU0FBUyxHQUFNO0FBQUEsSUFDeEMsVUFBVSxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQU07QUFBQSxFQUMzQztBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsV0FBV3BULEdBQU07QUFDZixZQUFNLEVBQUUsTUFBQTJELEdBQU0sUUFBQWtsQixFQUFPLElBQUksS0FBSyxNQUN4QmxwQixJQUFRSyxFQUFLMkQsQ0FBSTtBQUN2QixhQUFPa2xCLElBQ0hBLEVBQU87QUFBQSxRQUNMO0FBQUEsUUFDQSxJQUFJL29CLEVBQVksTUFBTTtBQUFBLFVBQ3BCLE1BQUE2RDtBQUFBLFVBQ0EsT0FBQWhFO0FBQUEsVUFDQSxNQUFNSztBQUFBLFVBQ04sVUFBVXpDLEVBQWUsS0FBSyxVQUFVb0csQ0FBSTtBQUFBLFNBQzdDO0FBQUEsTUFDSCxJQUNBbWxCLEdBQVducEIsQ0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcENELE1BQUs0VixLQUFhbkMsRUFBYyxVQUFVLGtCQUFlO0FBQUEsRUFDdkQsT0FBTztBQUFBLElBQ0wsTUFBTSxFQUFFLE1BQU0sUUFBUSxVQUFVLEdBQU07QUFBQSxJQUN0QyxXQUFXLEVBQUUsTUFBTSxRQUFRLFNBQVMsS0FBTTtBQUFBLElBQzFDLGNBQWMsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFLO0FBQUEsRUFDN0M7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxXQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLE9BQU87QUFDTCxhQUNFMlYsR0FBTSxLQUFLLEtBQUssSUFBSSxLQUNwQixLQUFLLEtBQUssS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFLLEVBQUMsWUFBWTtBQUFBLElBRS9DO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBTyxLQUFLLGFBQWEsS0FBSztBQUFBLElBQ2hDO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsb0JBQW9CO0FBQUEsTUFDbEIsV0FBVztBQUFBLE1BQ1gsUUFBUUMsR0FBTTtBQUNaLFlBQUksS0FBSyxjQUFhQSxLQUFBLFFBQUFBLEVBQU0sS0FBSyxXQUFXLFlBQVc7QUFDckQsZ0JBQU1DLElBQVMsSUFBSSxXQUFXO0FBQzlCLFVBQUFBLEVBQU8sU0FBUyxNQUFNO0FBQ3BCLGlCQUFLLFlBQVlBLEVBQU87QUFBQSxVQUMxQixHQUNBQSxFQUFPLGNBQWNELENBQUk7QUFBQTtBQUV6QixlQUFLLFlBQVk7QUFBQSxNQUVyQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQyxHQUVLRCxLQUFRO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxhQUFhO0FBQUEsRUFDYixZQUFZO0FBQUEsRUFDWixtQkFBbUI7QUFBQSxFQUNuQixjQUFjO0FBQUEsRUFDZCxhQUFhO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixpQkFBaUI7QUFBQSxFQUNqQixhQUFhO0FBQUEsRUFDYixjQUFjO0FBQUEsRUFDZCxvQkFBb0I7QUFBQSxFQUNwQixtQkFBbUI7QUFBQSxFQUNuQixtQkFBbUI7QUFBQSxFQUNuQixtQkFBbUI7QUFDckI7QUM5RUEsSUFBSUcsS0FBWSxPQUFPLGdCQUNuQkMsS0FBc0IsT0FBTyx1QkFDN0JDLEtBQWUsT0FBTyxVQUFVLGdCQUNoQ0MsS0FBZSxPQUFPLFVBQVUsc0JBQ2hDQyxLQUFrQixDQUFDQyxHQUFLaHFCLEdBQUtJLE1BQVVKLEtBQU9ncUIsSUFBTUwsR0FBVUssR0FBS2hxQixHQUFLLEVBQUUsWUFBWSxJQUFNLGNBQWMsSUFBTSxVQUFVLElBQU0sT0FBQUksRUFBTyxDQUFBLElBQUk0cEIsRUFBSWhxQixDQUFHLElBQUlJLEdBQ3RKNnBCLEtBQWlCLENBQUNoYixHQUFHQyxNQUFNO0FBQzdCLFdBQVNnYixLQUFRaGIsTUFBTUEsSUFBSSxDQUFBO0FBQ3pCLElBQUkyYSxHQUFhLEtBQUszYSxHQUFHZ2IsQ0FBSSxLQUMzQkgsR0FBZ0I5YSxHQUFHaWIsR0FBTWhiLEVBQUVnYixDQUFJLENBQUM7QUFDcEMsTUFBSU47QUFDRixhQUFTTSxLQUFRTixHQUFvQjFhLENBQUM7QUFDcEMsTUFBSTRhLEdBQWEsS0FBSzVhLEdBQUdnYixDQUFJLEtBQzNCSCxHQUFnQjlhLEdBQUdpYixHQUFNaGIsRUFBRWdiLENBQUksQ0FBQztBQUV0QyxTQUFPamI7QUFDVCxHQUNJa2IsS0FBWSxDQUFDbmpCLEdBQVFxSSxNQUFZO0FBQ25DLE1BQUlyTixJQUFTLENBQUE7QUFDYixXQUFTa29CLEtBQVFsakI7QUFDZixJQUFJNmlCLEdBQWEsS0FBSzdpQixHQUFRa2pCLENBQUksS0FBSzdhLEVBQVEsUUFBUTZhLENBQUksSUFBSSxNQUM3RGxvQixFQUFPa29CLENBQUksSUFBSWxqQixFQUFPa2pCLENBQUk7QUFDOUIsTUFBSWxqQixLQUFVLFFBQVE0aUI7QUFDcEIsYUFBU00sS0FBUU4sR0FBb0I1aUIsQ0FBTTtBQUN6QyxNQUFJcUksRUFBUSxRQUFRNmEsQ0FBSSxJQUFJLEtBQUtKLEdBQWEsS0FBSzlpQixHQUFRa2pCLENBQUksTUFDN0Rsb0IsRUFBT2tvQixDQUFJLElBQUlsakIsRUFBT2tqQixDQUFJO0FBRWhDLFNBQU9sb0I7QUFDVDtBQUNBLFNBQVNvb0IsR0FBWW5TLEdBQUl3UCxHQUFNL21CLElBQVUsQ0FBQSxHQUFJO0FBQzNDLE1BQUkycEI7QUFDSixRQUFNN29CLElBQUtkLEdBQVMsRUFBRSxVQUFBNHBCLElBQVdDLEdBQWlCLElBQUcvb0IsR0FBSWdwQixJQUFlTCxHQUFVM29CLEdBQUksQ0FBQyxVQUFVLENBQUMsR0FDNUZpcEIsSUFBaUI7QUFBQSxJQUNyQixVQUFVLENBQUNDLE1BQU07QUFDZixNQUFBQyxHQUFpQmxELEdBQU1pRCxFQUFFLFVBQVVBLEVBQUUsUUFBUTtBQUFBLElBQzlDO0FBQUEsRUFDTCxHQUNRL1UsSUFBUSxNQUFNO0FBQ2xCLFVBQU0zVCxJQUFTLE9BQU9pVyxLQUFPLFdBQVdxUyxLQUFZLE9BQU8sU0FBU0EsRUFBUyxjQUFjclMsQ0FBRSxJQUFJcUcsR0FBYXJHLENBQUU7QUFDaEgsSUFBS2pXLE1BRUxxb0IsSUFBVyxJQUFJTyxHQUFTNW9CLEdBQVFpb0IsR0FBZUEsR0FBZSxDQUFBLEdBQUlRLENBQWMsR0FBR0QsQ0FBWSxDQUFDO0FBQUEsRUFDcEcsR0FDUUssSUFBTyxNQUFNUixLQUFZLE9BQU8sU0FBU0EsRUFBUztBQUN4RCxTQUFBUyxHQUFhblYsQ0FBSyxHQUNsQm9WLEdBQWtCRixDQUFJLEdBQ2YsRUFBRSxNQUFBQSxHQUFNLE9BQUFsVjtBQUNqQjtBQUNBLFNBQVNnVixHQUFpQmxELEdBQU0vVCxHQUFNRCxHQUFJO0FBQ3hDLFFBQU12RCxJQUFROGEsR0FBUXZELENBQUk7QUFDMUIsTUFBSWhVLEtBQU0sS0FBS0EsSUFBS3ZELEVBQU0sUUFBUTtBQUNoQyxVQUFNM0ssSUFBVTJLLEVBQU0sT0FBT3dELEdBQU0sQ0FBQyxFQUFFLENBQUM7QUFDdkMsSUFBQXVYLEdBQVMsTUFBTS9hLEVBQU0sT0FBT3VELEdBQUksR0FBR2xPLENBQU8sQ0FBQztBQUFBO0FBRS9DO0FBRUEsTUFBTTJsQixLQUE4QyxnQkFBQWhOLEdBQWdCO0FBQUEsRUFDbEUsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBO0FBQUEsSUFFTCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsRUFDUjtBQUFBLEVBQ0QsT0FBTztBQUFBLElBQ0wsWUFBWTtBQUFBLE1BQ1YsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLElBQ1g7QUFBQSxJQUNELEtBQUs7QUFBQSxNQUNILE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNWO0FBQUEsSUFDRCxTQUFTO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsSUFDWDtBQUFBLEVBQ0Y7QUFBQSxFQUNELE1BQU1sQyxHQUFPLEVBQUUsT0FBQUgsS0FBUztBQUN0QixVQUFNNEwsSUFBTzBELEdBQVVuUCxHQUFPLFlBQVksR0FDcENoYSxJQUFTbVksTUFDVDVhLElBQU94QixHQUFTcXNCLEdBQVlwb0IsR0FBUXlsQixHQUFNekwsRUFBTSxPQUFPLENBQUM7QUFDOUQsV0FBTyxNQUFNO0FBQ1gsVUFBSUgsRUFBTTtBQUNSLGVBQU80QyxHQUFFekMsRUFBTSxLQUFLLEVBQUUsS0FBS2hhLEVBQVEsR0FBRTZaLEVBQU0sUUFBUXRjLENBQUksQ0FBQztBQUFBLElBQ2hFO0FBQUEsRUFDRztBQUNILENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRUQsV0FBa0JzVSxFQUFjLFVBQVUsaUJBQWM7QUFBQSxFQUN0RCxRQUFRLENBQUNnSixFQUFRO0FBQUEsRUFDakIsWUFBWSxFQUFFLGFBQUFxTyxHQUFhO0FBQUEsRUFDM0IsT0FBTyxDQUFDLG1CQUFtQjtBQUFBLEVBRTNCLE9BQU87QUFBQSxJQUNMLFlBQVk7QUFBQSxNQUNWLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxJQUNYO0FBQUEsSUFDRCxLQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDVjtBQUFBLElBQ0QsU0FBUztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLElBQ1g7QUFBQSxJQUNELFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRDtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLGFBQWE7QUFBQSxNQUNiLFlBQVk7QUFBQSxJQUNkO0FBQUEsRUFDRDtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsUUFBUXBxQixHQUFPOztBQUNiLE9BQUF3RSxLQUFBOUQsSUFBQSxLQUFLLFNBQVEsWUFBYixRQUFBOEQsRUFBQSxLQUFBOUQsR0FBdUJWLElBQ3ZCLEtBQUssYUFBYSxLQUNsQmtYLElBQUEsS0FBSyxnQkFBTCxRQUFBQSxFQUFrQjtBQUFBLElBQ25CO0FBQUEsSUFFRCxNQUFNbFgsR0FBTzs7QUFDWCxPQUFBd0UsS0FBQTlELElBQUEsS0FBSyxTQUFRLFVBQWIsUUFBQThELEVBQUEsS0FBQTlELEdBQXFCVixJQUdyQixLQUFLLGNBQWMsS0FBSyxNQUFNLFVBQVU7QUFBQSxRQUN0QyxXQUFXLEtBQUs7QUFBQSxRQUNoQixXQUFXLEtBQUs7QUFBQSxRQUNoQixZQUFZLEtBQUs7QUFBQSxPQUNsQjtBQUFBLElBQ0Y7QUFBQSxJQUVELFVBQVU7O0FBQ1IsV0FBSyxhQUFhLEtBQ2xCVSxJQUFBLEtBQUssZ0JBQUwsUUFBQUEsRUFBa0IsVUFDbEIsS0FBSyxjQUFjO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQzFFRCxTQUFTNHBCLEdBQVUsRUFBRSxPQUFBNU8sS0FBUztBQUM1QixTQUFPQTtBQUNUO0FBRUE0TyxHQUFVLFFBQVE7QUFBQSxFQUNoQixPQUFPLEVBQUUsTUFBTSxRQUFRLFVBQVUsR0FBSztBQUN4QztBQUVBLE1BQUtwVixLQUFhbkMsRUFBYyxVQUFVLGFBQWF1WCxFQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQ0g5Q0MsSUFBQTtBQUFBLEVBQ2IsU0FBU3hYO0FBQUEsRUFDVCxRQUFRLENBQUN2UCxFQUFTO0FBQUEsRUFFbEIsYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQSxFQUdYLGNBQWM7QUFBQSxFQUNkLGVBQWU7QUFBQSxFQUNmLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQSxFQUNmLGNBQWM7QUFBQSxFQUNkLG9CQUFvQjtBQUFBLEVBQ3BCLGFBQWE7QUFBQSxFQUViLFdBQVd1UCxFQUFjO0FBQUEsRUFFekIsS0FBS2pMO0FBQUEsRUFFTCxTQUFTTixHQUFPd0wsSUFBYSxJQUFJO0FBQy9CLElBQUF4TCxJQUFROUMsRUFBUThDLENBQUs7QUFDckIsVUFBTTlILElBQVksS0FBSztBQUFBLE1BQ3JCLFdBQVdxRSxHQUFTeUQsRUFBTSxDQUFDLEdBQUcsRUFBSTtBQUFBLE1BQ2xDd0w7QUFBQSxJQUNEO0FBQ0QsZUFBVzdQLEtBQVFxRTtBQUNqQixNQUFBSyxHQUFzQjFFLEdBQU16RCxDQUFTO0FBRXZDLFdBQU9BO0FBQUEsRUFDUjtBQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCQSxNQUFLd1YsS0FBYXNWLEVBQWtCO0FBQUEsRUFDbEMsQ0FBQyxVQUFVLFFBQVE7QUFBQTtBQUFBLEVBRW5CO0FBQUEsSUFDRSxjQUFjLE1BQUE7QUFBQTtBQUFBO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFFZixVQUFVO0FBQUEsTUFDUixPQUFPO0FBQ0wsZUFBTyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFDNUI7QUFBQSxNQUVELGNBQWM7QUFDWixlQUFPLEtBQUssT0FBTyxlQUFlLEtBQUssU0FBUztBQUFBLE1BQ2pEO0FBQUEsTUFFRCxNQUFNdm5CLEVBQWtCLFFBQVE7QUFBQSxRQUM5QixNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsTUFFRCxRQUFRO0FBQ04sZUFBTyxLQUFLLFFBQVE0TixHQUFTLEtBQUssSUFBSTtBQUFBLE1BQ3ZDO0FBQUEsTUFFRCxNQUFNNU4sRUFBa0IsUUFBUTtBQUFBLFFBQzlCLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxNQUVELFdBQVdBLEVBQWtCLGFBQWE7QUFBQSxRQUN4QyxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsT0FDVjtBQUFBLElBQ0Y7QUFBQSxJQUVELFNBQVM7QUFBQTtBQUFBLE1BRVAsWUFBWTtBQUNWLGNBQU0sRUFBRSxTQUFBbUIsR0FBUyxRQUFBQyxHQUFRLFNBQUFvbUIsRUFBUSxJQUFJO0FBQ3JDLGVBQU8sRUFBRSxTQUFBcm1CLEdBQVMsUUFBQUMsR0FBUSxTQUFBb21CLEVBQVE7QUFBQSxNQUNuQztBQUFBLE1BRUQsTUFBTSxPQUFPN3FCLEdBQVM7O0FBQ3BCLGdCQUFPYyxJQUFBLEtBQUssc0JBQUwsZ0JBQUFBLEVBQXdCLE9BQU8sTUFBTWQ7QUFBQSxNQUM3QztBQUFBLE1BRUQsTUFBTSxVQUFVO0FBS2QsUUFKWSxNQUFNLEtBQUssVUFBVSxTQUFTO0FBQUEsVUFDeEMsUUFBUSxLQUFLO0FBQUEsU0FDZCxNQUdTO0FBQUEsUUFDUnlRLEdBQVksS0FBSyxNQUFNLEtBRXZCLE1BQU0sS0FBSyxPQUFPO0FBQUEsTUFFdEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7Ozs7Ozs7Ozs7O0FDdkVBLFdBQWtCbWEsRUFBa0IsU0FBUyxZQUFTO0FBQUEsRUFDcEQsYUFBYTtBQUNmLENBQUMsaURDTmNFLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ3hHLEVBQVk7QUFBQSxFQUVyQixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsV0FBVztBQUFBLE1BQ1gsa0JBQWtCLENBQUU7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGlCQUFpQjdlLEdBQVEvQixHQUFNO0FBQUEsTUFDN0IsZ0JBQUFxbkIsSUFBaUI7QUFBQSxNQUNqQixHQUFHbEc7QUFBQSxJQUNKLElBQUcsSUFBSTs7QUFDTixNQUFLNWQsRUFBU3hCLENBQU0sTUFDbEJBLElBQVMsRUFBRSxNQUFNQSxFQUFRO0FBRTNCLFVBQUksRUFBRSxNQUFBNUcsSUFBTyxRQUFXLFVBQUF0QixJQUFXLEtBQU0sSUFBR2tJO0FBRTVDLFlBQU11bEIsS0FBY2xxQixJQUFBLEtBQUssa0JBQUw0QyxPQUFBNUMsRUFBQTRDLEtBQWdDckcsR0FBUztBQUFBLFFBQzNELG9CQUFvQjtBQUFBLFFBQ3BCLGdCQUFnQjtBQUFBLFFBQ2hCLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNuQixDQUFPO0FBTUQsV0FGQXVILElBQUFvbUIsRUFBVyx1QkFBWCxRQUFBcG1CLEVBQUEsS0FBQW9tQixHQUFnQyxLQUFLLFVBRWpDQSxFQUFXLGlCQUFpQixHQUFHO0FBUWpDLGNBQU0sRUFBRSxjQUFBQyxFQUFZLElBQUtEO0FBQ3pCLGVBQUksRUFBRUEsRUFBVyxtQkFBbUIsTUFDbENBLEVBQVcsZUFBZSxPQUVyQkM7QUFBQTtBQUdULFVBQUlELEVBQVc7QUFDYixRQUFBbnNCLElBQU87QUFBQSxlQUNFQSxHQUFNO0FBQ2YsWUFBSWMsRUFBV2QsQ0FBSSxHQUFHO0FBQ3BCLGdCQUFNc0MsSUFBU3RDLEVBQUssS0FBSyxPQUFPO0FBT2hDLFVBQUljLEVBQVd3QixDQUFNLEtBQ25CNnBCLEVBQVcscUJBQXFCbnNCLEdBQ2hDQSxJQUFPc0MsRUFBTyxLQUFLLE9BQU8sS0FFMUJ0QyxJQUFPc0M7QUFBQTtBQUdYLFFBQUlrSSxHQUFVeEssQ0FBSSxNQU1oQm1zQixFQUFXLFlBQVksSUFDdkIsS0FBSyxZQUFZbnNCLEdBQU1nbUIsQ0FBYyxFQUFFLEtBQUssQ0FBQWhtQixNQUFRO0FBQ2xELFVBQUFtc0IsRUFBVyxpQkFBaUJELEdBQzVCQyxFQUFXLGVBQWVuc0IsR0FDMUJtc0IsRUFBVyxZQUFZO0FBQUEsUUFDbkMsQ0FBVyxHQUVEbnNCLElBQU87QUFBQTtBQUVKLFFBQUl0QixNQUNUc0IsSUFBT1I7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMTixHQUFrQixHQUFHLEtBQUssWUFBWVIsR0FBVTtBQUFBLFFBQ2pEO0FBRUgsYUFBT3NCO0FBQUEsSUFDUjtBQUFBLElBRUQsTUFBTSxZQUFZcXNCLEdBQU1yRyxJQUFpQixJQUFJO0FBRzNDLFlBQU1zRyxJQUFRLFdBQVcsTUFBTSxLQUFLLFdBQVcsSUFBTXRHLENBQWMsR0FBRyxDQUFDO0FBQ3ZFLFVBQUlobUIsSUFBTztBQUNYLFVBQUk7QUFDRixRQUFBQSxJQUFPLE9BQU9jLEVBQVd1ckIsQ0FBSSxJQUFJQSxFQUFJLElBQUtBO0FBQUEsTUFDM0MsU0FBUTdwQixHQUFQO0FBQ0EsYUFBSyxTQUFTQSxFQUFNLFdBQVdBLENBQUs7QUFBQSxNQUNyQztBQUNELDBCQUFhOHBCLENBQUssR0FDbEIsS0FBSyxXQUFXLElBQU90RyxDQUFjLEdBQzlCaG1CO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDSCxHQ2xHZXVzQixLQUFBO0FBQUEsRUFDYixRQUFRLENBQUNOLEVBQVM7QUFBQSxFQUVsQixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixlQUFlO0FBQUEsTUFDYixNQUFNO0FBQ0osY0FBTU8sSUFBZSxDQUFBM3JCLE1BQ25CLEtBQUssU0FDRCxLQUFLLFVBQVVBLENBQUssSUFDbEIsS0FBSyxrQkFBa0JBLENBQUssSUFDNUIsT0FDRkEsR0FDQUEsSUFBUVksRUFBUSxLQUFLLEtBQUssSUFDNUIsS0FBSyxNQUFNLElBQUkrcUIsQ0FBWSxFQUFFLE9BQU8sQ0FBQTNyQixNQUFTQSxNQUFVLElBQUksSUFDM0QyckIsRUFBYSxLQUFLLEtBQUs7QUFDM0I7QUFBQTtBQUFBLFVBRUUsS0FBSyxVQUNMLEtBQUs7QUFBQSxXQUVIM3JCLE1BQVUsUUFBUSxLQUFLLFVBQVU7QUFBQTtBQUFBLFVBR2pDVCxHQUFZLEtBQUssS0FBSyxPQUt4QixLQUFLLGdCQUFnQlMsSUFFaEJBO0FBQUE7QUFBQSxNQUNSO0FBQUEsTUFFRCxJQUFJQSxHQUFPO0FBQ1QsY0FBTTRyQixJQUFVLENBQUE1ckIsTUFDZCxLQUFLLFNBQ0QsS0FBSyxrQkFBa0JBLENBQUssSUFDNUJBO0FBQ04sYUFBSyxRQUFRWSxFQUFRWixDQUFLLElBQ3RCQSxFQUFNLElBQUk0ckIsQ0FBTyxJQUNqQkEsRUFBUTVyQixDQUFLO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUFPLEtBQUssa0JBQWtCLEtBQUssYUFBYTtBQUFBLElBQ2pEO0FBQUEsSUFFRCxVQUFVO0FBQ1IsWUFBTWIsSUFBTyxLQUFLLGlCQUFpQixLQUFLLE9BQU8sU0FBUyxXQUFXO0FBQUEsUUFDakUsZ0JBQWdCO0FBQUEsTUFDakIsQ0FBQSxLQUFLLENBQUU7QUFDUixVQUFJLENBQUN5QixFQUFRekIsQ0FBSTtBQUNmLGNBQU0sSUFBSSxNQUFNLDBDQUEwQ0EsR0FBTTtBQUlsRSxrQkFBSyxhQUFhQSxFQUFLLFNBQVMsR0FDekIsS0FBSyxlQUFlQSxDQUFJO0FBQUEsSUFDaEM7QUFBQSxJQUVELGdCQUFnQjtBQUdkLGFBQU8sS0FBSztBQUFBLElBQ2I7QUFBQSxJQUVELFFBQVF3RSxFQUFrQixVQUFVO0FBQUE7QUFBQSxNQUVsQyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUE7QUFBQTtBQUFBLE1BR1QsVUFBVTtBQUFBLElBQ2hCLENBQUs7QUFBQSxJQUVELFNBQVNBLEVBQWtCLFdBQVc7QUFBQSxNQUNwQyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDZixDQUFLO0FBQUE7QUFBQSxJQUdELGFBQWFBLEVBQWtCLGlCQUFpQjtBQUFBLE1BQzlDLE1BQU0sQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUN2QixTQUFTO0FBQUEsTUFDVCxJQUFJOEosR0FBTztBQUdULGVBQ0VBLEtBQ0EsS0FBSyxhQUFhLE9BQU8sS0FDekI7QUFBQSxNQUVIO0FBQUEsSUFDUCxDQUFLO0FBQUE7QUFBQSxJQUdELGFBQWE5SixFQUFrQixpQkFBaUI7QUFBQSxNQUM5QyxNQUFNLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDdkIsU0FBUztBQUFBLE1BQ1QsSUFBSTNELEdBQU87QUFHVCxlQUNFQSxLQUNBLEtBQUssVUFBVSxRQUNmLEtBQUssYUFBYSxPQUFPLEtBQ3pCO0FBQUEsTUFFSDtBQUFBLElBQ1AsQ0FBSztBQUFBO0FBQUEsSUFHRCxjQUFjMkQsRUFBa0IsVUFBVTtBQUFBLE1BQ3hDLE1BQU0sQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUN2QixTQUFTO0FBQUEsTUFDVCxJQUFJa29CLEdBQVE7QUFDVixZQUFJQSxHQUFRO0FBQ1YsZ0JBQU0sRUFBRSxRQUFBQyxHQUFRLFVBQUFDLE1BQWE5ckIsRUFBVzRyQixDQUFNLElBQzFDLEVBQUUsUUFBUUEsRUFBUSxJQUNsQkE7QUFDSixpQkFBT0UsSUFBV0MsR0FBY0YsR0FBUUMsQ0FBUSxJQUFJRDtBQUFBO0FBQUEsTUFFdkQ7QUFBQSxJQUNQLENBQUs7QUFBQSxJQUVELFVBQVVub0IsRUFBa0IsWUFBWTtBQUFBLE1BQ3RDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULElBQUlvbEIsR0FBVTtBQUNaLGVBQ0VBLEtBQ0FqYyxHQUFjLEtBQUssUUFBUSxLQUFLLE9BQU87QUFBQSxNQUUxQztBQUFBLElBQ1AsQ0FBSztBQUFBLElBRUQsV0FBVztBQUNULGFBQU8sS0FBSyxZQUFZLEtBQUssZ0JBQ3pCQyxHQUFnQixLQUFLLFFBQVEsS0FBSyxlQUFlLEtBQUssT0FBTyxJQUM3RDtBQUFBLElBQ0w7QUFBQSxJQUVELGVBQWU7QUFDYixhQUFPLEtBQUssVUFBVSxVQUFVO0FBQUEsSUFDakM7QUFBQSxJQUVELGlCQUFpQjtBQUNmLGFBQU8sS0FBSyxVQUFVLFlBQVk7QUFBQSxJQUNuQztBQUFBLEVBQ0Y7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGFBQWFuTixHQUFLO0FBQ2hCLFlBQU0sQ0FBQ3FzQixDQUFNLElBQUksS0FBSztBQUN0QixhQUFPMWtCLEVBQVMwa0IsQ0FBTSxLQUFLcnNCLEtBQU9xc0IsSUFBU3JzQixJQUFNO0FBQUEsSUFDbEQ7QUFBQSxJQUVELGVBQWVVLEdBQVM7QUFDdEIsVUFBSUEsRUFBUSxRQUFRO0FBQ2xCLFlBQUksS0FBSztBQU1QLHFCQUFXMnJCLEtBQVUzckI7QUFDbkIsWUFBTSxRQUFRMnJCLEtBQ1ovc0IsR0FBZStzQixHQUFRLElBQUk7QUFJakMsWUFBSSxLQUFLLFNBQVM7QUFDaEIsZ0JBQU1DLElBQVUsQ0FBRTtBQUNsQixVQUFBNXJCLElBQVVBLEVBQVE7QUFBQSxZQUNoQixDQUFDNnJCLEdBQVNGLE1BQVc7QUFDbkIsb0JBQU1HLElBQVFILEVBQU8sS0FBSyxPQUFPO0FBQ2pDLGtCQUFJOXFCLElBQVErcUIsRUFBUUUsQ0FBSztBQUN6QixxQkFBS2pyQixNQUNIQSxJQUFRK3FCLEVBQVFFLENBQUssSUFBSTtBQUFBLGdCQUN2QixDQUFDLEtBQUssWUFBWSxHQUFHQTtBQUFBLGdCQUNyQixDQUFDLEtBQUssY0FBYyxHQUFHLENBQUU7QUFBQSxjQUMxQixHQUNERCxFQUFRLEtBQUtockIsQ0FBSyxJQUVwQkEsRUFBTSxRQUFRLEtBQUs4cUIsQ0FBTSxHQUNsQkU7QUFBQSxZQUNSO0FBQUEsWUFDRCxDQUFFO0FBQUEsVUFDSDtBQUFBO0FBQUE7QUFHTCxhQUFPN3JCO0FBQUEsSUFDUjtBQUFBLElBRUQsVUFBVTJyQixHQUFRO0FBQ2hCLGFBQU8sQ0FBQyxDQUFDLEtBQUssa0JBQWtCLEtBQUssa0JBQWtCQSxDQUFNLENBQUM7QUFBQSxJQUMvRDtBQUFBLElBRUQsa0JBQWtCanNCLEdBQU87QUFDdkIsWUFBTXFzQixJQUFhLENBQUMvckIsR0FBU04sR0FBT3NzQixNQUFZO0FBRzlDLG1CQUFXTCxLQUFVM3JCO0FBQ25CLGNBQUlnc0IsR0FBUztBQUNYLGtCQUFNakssSUFBUWdLLEVBQVdKLEVBQU8sU0FBU2pzQixHQUFPLElBQUk7QUFDcEQsZ0JBQUlxaUI7QUFDRixxQkFBT0E7QUFBQSxxQkFFQXJpQixNQUFVLEtBQUssa0JBQWtCaXNCLENBQU07QUFDaEQsbUJBQU9BO0FBQUEsTUFHWjtBQUVELGFBQU8sS0FBSyxjQUNSSSxFQUFXLEtBQUssZUFBZXJzQixHQUFPLEtBQUssT0FBTyxJQUNsREE7QUFBQSxJQUNMO0FBQUEsSUFFRCxrQkFBa0Jpc0IsR0FBUTtBQUN4QixZQUFNLEVBQUUsYUFBQU0sRUFBVyxJQUFLO0FBQ3hCLGFBQU94b0IsRUFBU3dvQixDQUFXLElBQ3ZCTixLQUFBLGdCQUFBQSxFQUFTTSxLQUNUdHNCLEVBQVdzc0IsQ0FBVyxJQUNwQkEsRUFBWSxJQUFJcHNCLEVBQVksTUFBTSxFQUFFLFFBQUE4ckIsRUFBUSxDQUFBLENBQUMsSUFDN0NBO0FBQUEsSUFDUDtBQUFBLElBRUQsa0JBQWtCQSxHQUFRO0FBQ3hCLFlBQU0sRUFBRSxhQUFBTyxFQUFXLElBQUs7QUFDeEIsYUFBT3pvQixFQUFTeW9CLENBQVcsSUFDdkJQLEtBQUEsZ0JBQUFBLEVBQVNPLEtBQ1R2c0IsRUFBV3VzQixDQUFXLElBQ3BCQSxFQUFZLElBQUlyc0IsRUFBWSxNQUFNLEVBQUUsUUFBQThyQixFQUFRLENBQUEsQ0FBQyxJQUM3QzFhLEdBQVMsR0FBRzBhLEdBQVE7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFBQSxFQUVELGFBQWFsbUIsR0FBUS9GLEdBQU9uQyxHQUFVc0ksR0FBTzs7QUFDM0MsUUFBSUosRUFBTyxRQUFRO0FBSWpCLFlBQU0vSCxLQUFPb0QsSUFBQTJFLEVBQU8sWUFBUCxnQkFBQTNFLEVBQWdCLFVBQ3ZCNEUsSUFBa0JoSSxJQUNwQkssR0FBa0IsR0FBR1IsS0FBWUcsR0FBTSxJQUN2QztBQUNKLE1BQUFtSSxFQUFNLFlBQVl0SSxHQUFVbUksR0FBaUJELENBQU0sR0FDL0NDLEtBQ0ZHLEVBQU0saUJBQWlCSCxDQUFlO0FBSXhDLFlBQU15bUIsSUFBZ0IsQ0FBQXpzQixNQUFVQSxLQUFRLEVBQUUsSUFBSUEsRUFBTSxHQUFJO0FBRXhELE1BQUFBLElBQVFZLEVBQVFaLENBQUssSUFDakJBLEVBQU0sSUFBSXlzQixDQUFhLElBQ3ZCQSxFQUFjenNCLENBQUs7QUFBQTtBQUV6QixXQUFPQTtBQUFBLEVBQ1I7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblFBLFdBQWtCa3JCLEVBQWtCLFNBQVMsY0FBVztBQUFBLEVBQ3RELFFBQVEsQ0FBQ1EsRUFBWTtBQUFBLEVBRXJCLGFBQWE7QUFBQSxFQUNiLGNBQWMsQ0FBRTtBQUFBLEVBQ2hCLGNBQWM7QUFBQSxFQUVkLFVBQVU7QUFBQSxJQUNSLGlCQUFpQjtBQUFBLE1BQ2YsTUFBTTtBQUNKLGdCQUFRLEtBQUssaUJBQWlCLENBQUUsR0FBRSxPQUFPLENBQUExckIsTUFBU0EsQ0FBSztBQUFBLE1BQ3hEO0FBQUEsTUFFRCxJQUFJaXNCLEdBQVE7QUFDVixhQUFLLGdCQUFnQkEsS0FBVSxDQUFDO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7OztBQzdCRCxXQUFrQmYsRUFBa0IsU0FBUyxRQUFLO0FBQUEsRUFDaEQsUUFBUSxDQUFDek8sRUFBUTtBQUFBLEVBRWpCLFVBQVU7QUFBQSxJQUNSLFFBQVE7QUFDTixhQUFPLEtBQUssT0FBTyxTQUFTO0FBQUEsSUFDN0I7QUFBQSxJQUVELFFBQVE7QUFDTixhQUFPLGdCQUFnQixLQUFLO0FBQUEsSUFDOUI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQ1IsVUFBTWlRLElBQVEsSUFBSUMsR0FBVSxLQUFLLE1BQU0sTUFBTTtBQUFBLE1BQzNDLFVBQVUsS0FBSyxPQUFPLFlBQVk7QUFBQSxNQUNsQyxTQUFTLEtBQUssT0FBTyxjQUFjO0FBQUEsTUFDbkMsYUFBYTtBQUFBLEtBQ2Q7QUFFRCxRQUFJQyxJQUFVLElBQ1ZDLElBQWMsSUFDZEMsSUFBZTtBQUVuQixVQUFNN25CLElBQVcsTUFBTTtBQUNyQixNQUFJLENBQUMsS0FBSyxXQUFXMm5CLE1BQ25CQSxJQUFVLElBQ1YsS0FBSyxTQUFTO0FBQUEsSUFFbEIsR0FFTTluQixJQUFVLE1BQU0sS0FBSyxRQUFRLEdBRTdCQyxJQUFTLE1BQU07QUFDbkIsV0FBSyxPQUFPLEdBQ1pFLEVBQVM7QUFBQSxJQUNYO0FBRUEsU0FBSyxNQUFNLEtBQUssTUFBTSxLQUFLLGNBQWMsVUFBVSxHQUFHO0FBQUEsTUFDcEQsT0FBT0g7QUFBQSxNQUNQLE1BQU1DO0FBQUEsS0FDUDtBQUVELFVBQU1nb0IsSUFBVSxDQUFBQyxNQUFRO0FBQ3RCLE1BQUlBLE1BQVNOLEVBQU0sU0FDakJJLElBQWUsSUFDZkosRUFBTSxXQUFXTSxDQUFJO0FBQUEsSUFFekIsR0FFTUMsSUFBVyxDQUFBanRCLE1BQVM7QUFDeEIsTUFBSUEsTUFBVSxLQUFLLFVBQ2pCNnNCLElBQWMsSUFDZCxLQUFLLFFBQVE3c0IsR0FDYjRzQixJQUFVLElBQ1YzbkIsRUFBUztBQUFBLElBRWI7QUFFQSxJQUFBeW5CLEVBQU0sU0FBUyxDQUFBMXNCLE1BQVM7QUFDdEIsTUFBSThzQixJQUNGQSxJQUFlLEtBRWZHLEVBQVNqdEIsQ0FBSztBQUFBLEtBRWpCLEdBRUQsS0FBSyxPQUFPLFNBQVMsQ0FBQUEsTUFBUztBQUM1QixNQUFJNnNCLElBQ0ZBLElBQWMsS0FFZEUsRUFBUS9zQixLQUFTLEVBQUU7QUFBQSxLQUV0QixHQUVEK3NCLEVBQVEsS0FBSyxTQUFTLEVBQUU7QUFBQSxFQUN6QjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsZUFBZTs7QUFDYixPQUFBM3JCLElBQUEsS0FBSyxJQUFJLGNBQWMsVUFBVSxNQUFqQyxRQUFBQSxFQUFvQztBQUFBLElBQ3JDO0FBQUEsSUFFRCxjQUFjOztBQUNaLE9BQUFBLElBQUEsS0FBSyxJQUFJLGNBQWMsVUFBVSxNQUFqQyxRQUFBQSxFQUFvQztBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVERCxXQUFrQjhwQixFQUFrQixTQUFTLFNBQU07QUFBQSxFQUNqRCxZQUFZLEVBQUUsU0FBQTlSLElBQU8sY0FBRThULEdBQWM7QUFBQSxFQUVyQyxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsV0FBVztBQUFBLE1BQ1gsbUJBQW1CO0FBQUEsSUFDckI7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixZQUFZO0FBQUEsTUFDVixNQUFNO0FBQ0osZUFBTyxLQUFLLFNBQVMsQ0FBQztBQUFBLE1BQ3ZCO0FBQUEsTUFFRCxJQUFJbHRCLEdBQU87QUFDVCxjQUFNb0UsSUFBUyxLQUFLLGFBQ2R4RSxJQUNKO0FBQUE7QUFBQSxVQUVFLE1BQUtJLEtBQUEsZ0JBQUFBLEVBQU8sS0FBSSxJQUFJLFNBQVM7QUFBQSxVQUM3QixLQUFLO0FBQUEsUUFDTixFQUFDb0UsQ0FBTSxLQUNSQTtBQUVGLFFBQUl4RSxJQUNGLEtBQUssUUFBUUksRUFBTUosQ0FBRyxJQUV0QixLQUFLLFFBQVF1dEIsR0FBVW50QixDQUFLLEVBQUUsU0FBU29FLENBQU0sR0FFL0MsS0FBSyxTQUFTO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQUEsSUFFRCxVQUFVO0FBQUEsTUFDUixNQUFNO0FBQ0osWUFBSSxLQUFLLFNBQVM7QUFHaEIsZUFBSyxvQkFBb0I7QUFBQSxpQkFFekIsQ0FBQyxLQUFLLFdBQ04sS0FBSyxNQUFNLFFBQVEsYUFBYSxVQUFVLEdBQzFDO0FBQ0EsZ0JBQU1tYyxJQUFRNE0sR0FBVSxLQUFLLEtBQUs7QUFDbEMsVUFBSTVNLEVBQU0sY0FHUixLQUFLLG9CQUFvQkEsRUFDdEIsU0FBU0EsRUFBTSxTQUFRLElBQUssSUFBSSxTQUFTLE1BQU0sRUFDL0MsTUFBTSxDQUFDLEVBQ1AsWUFBWTtBQUFBO0FBR25CLGVBQU8sS0FBSztBQUFBLE1BQ2I7QUFBQSxNQUVELElBQUl2Z0IsR0FBTztBQUNULGFBQUssb0JBQW9CQTtBQUFBLE1BQzNCO0FBQUEsSUFDRDtBQUFBO0FBQUE7QUFBQSxJQUlELGFBQWEyRCxFQUFrQixVQUFVO0FBQUEsTUFDdkMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBO0FBQUEsSUFHRCxPQUFPQSxFQUFrQixTQUFTO0FBQUEsTUFDaEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBO0FBQUEsSUFHRCxRQUFRQSxFQUFrQixVQUFVO0FBQUEsTUFDbEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLElBRUQsU0FBU0EsRUFBa0IsV0FBVztBQUFBLE1BQ3BDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBRUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLEtBQ0Q7QUFBQSxFQUNIO0FBQ0YsQ0FBQzs7OztBQzlIRCxXQUFrQnVuQixFQUFrQixTQUFTLGFBQVU7QUFBQTtBQUFBO0FBQUEsRUFHckQsY0FBYyxNQUFBO0FBQUE7QUFBQTtBQUFBLEVBQ2Qsb0JBQW9CLENBQUFubEIsTUFBVSxFQUFFLGFBQWFBO0FBQUEsRUFFN0MsTUFBTSxjQUFjNEUsR0FBSzVFLEdBQVE7QUFDL0IsVUFBTXVFLEdBQXVCdkUsQ0FBTTtBQUFBLEVBQ3JDO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ1ZELE1BQUs2UCxLQUFhc1YsRUFBa0I7QUFBQSxFQUNsQyxDQUFDLFlBQVksUUFBUSxRQUFRO0FBQUE7QUFBQSxFQUU3QjtBQUFBLElBQ0UsUUFBUSxDQUFDRSxFQUFTO0FBQUEsSUFFbEIsY0FBYyxNQUFBO0FBQUE7QUFBQTtBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFFaEIsVUFBVTtBQUFBLE1BQ1IsT0FBTztBQUFBLFFBQ0wsTUFBTTtBQUNKLGdCQUFNLEVBQUUsUUFBQXJsQixFQUFPLElBQUk7QUFDbkIsY0FBSUEsRUFBTyxRQUFRQSxFQUFPLFVBQVU7QUFDbEMsa0JBQU0vRixJQUFRLEtBQUssaUJBQWlCK0YsR0FBUSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FJcEQsZ0JBQWdCO0FBQUEsYUFDakI7QUFHRCxpQkFBSyxLQUFLLEtBQUssSUFBSSxJQUFJL0Y7QUFBQTtBQUV6QixpQkFBT2tFLEdBQVUsU0FBUyxNQUFNLElBQUksS0FBSyxJQUFJO0FBQUEsUUFDOUM7QUFBQSxRQUVELElBQUlsRSxHQUFPO0FBQ1QsVUFBQWtFLEdBQVUsU0FBUyxNQUFNLElBQUksS0FBSyxNQUFNbEUsQ0FBSztBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxQkEsTUFBSzRWLEtBQWFzVixFQUFrQjtBQUFBLEVBQ2xDLENBQUMsUUFBUSxZQUFZLE1BQU07QUFBQTtBQUFBLEVBRTNCO0FBQUEsSUFDRSxZQUFZLEVBQUUsWUFBQTdRLElBQVksWUFBQUMsSUFBWSxnQkFBQThTLEdBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJdEQsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBLElBRVgsVUFBVTtBQUFBLE1BQ1IsV0FBVztBQUFBLFFBQ1QsTUFBTTtBQUNKLGdCQUFNLEVBQUUsT0FBQXB0QixFQUFNLElBQUk7QUFDbEIsaUJBQU9BLEtBQVEsSUFBSSxLQUFLQSxDQUFLO0FBQUEsUUFDOUI7QUFBQSxRQUVELElBQUlBLEdBQU87QUFDVCxlQUFLLFFBQVFBO0FBQUEsUUFDZjtBQUFBLE1BQ0Q7QUFBQTtBQUFBO0FBQUEsTUFJRCxTQUFTMkQsRUFBa0IsV0FBVztBQUFBLFFBQ3BDLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULElBQUkwcEIsR0FBUztBQUNYLGdCQUFNLEVBQUUsTUFBQXpaLEdBQU0sTUFBQUssRUFBSyxJQUFJdEksR0FBYSxDQUFFLEdBQUUsS0FBSyxJQUFJLFNBQVMwaEIsQ0FBTztBQUNqRSxpQkFBTztBQUFBLFlBQ0wsTUFBTSxDQUFDLFFBQVEsVUFBVSxFQUFFLFNBQVMsS0FBSyxJQUFJLElBQUl6WixJQUFPO0FBQUEsWUFDeEQsTUFBTSxDQUFDLFFBQVEsVUFBVSxFQUFFLFNBQVMsS0FBSyxJQUFJLElBQUlLLElBQU87QUFBQSxVQUMxRDtBQUFBLFFBQ0Y7QUFBQSxPQUNEO0FBQUEsSUFDRjtBQUFBLElBRUQsU0FBUztBQUFBLE1BQ1AsYUFBYXBRLEdBQU07QUFDakIsZUFBTztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sTUFBTTtBQUFBLFVBQ04sVUFBVTtBQUFBLFFBQ1gsRUFBQ0EsQ0FBSTtBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBQUEsSUFFRCxhQUFha0MsR0FBUS9GLEdBQU87QUFDMUIsYUFBT3NILEdBQU90SCxDQUFLLElBQUlBLEVBQU0sWUFBWSxJQUFJQTtBQUFBLElBQy9DO0FBQUEsRUFDRjtBQUNGO0FDNUVPLFNBQVNzdEIsR0FBWTNiLEdBQU87QUFDakMsUUFBTXZMLElBQVV1TCxJQUNaL1EsRUFBUStRLENBQUssSUFDWEEsSUFDQSxPQUFPLFFBQVFBLENBQUssSUFDdEIsQ0FBRTtBQUNOLFNBQ0UsSUFBSTtBQUFBO0FBQUE7QUFBQSxJQUdGdkwsRUFBUTtBQUFBLE1BQ04sQ0FBQ0EsR0FBUyxDQUFDeEcsR0FBS0ksQ0FBSyxNQUFNO0FBQ3pCLG1CQUFXdXRCLEtBQU9ub0IsRUFBUXBGLENBQUs7QUFDN0IsVUFBQW9HLEVBQVEsS0FBSyxDQUFDeEcsR0FBSzJ0QixDQUFHLENBQUM7QUFFekIsZUFBT25uQjtBQUFBLE1BQ1I7QUFBQSxNQUNELENBQUU7QUFBQSxJQUNIO0FBQUEsRUFDRixFQUNFLFNBQVUsRUFHVixXQUFXLDBDQUEwQyxrQkFBa0I7QUFFOUU7QUFFTyxTQUFTb25CLEdBQWEsRUFBRSxNQUFBeHZCLEdBQU0sT0FBQTJULEdBQU8sTUFBQThQLEVBQUksR0FBSTtBQUdsRCxVQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUjtBQUFBLElBQ0EsR0FDRSxTQUFTLFNBRVR6akIsS0FBUSxTQUFTLFlBRWpCMlQsSUFBUTJiLEdBQVkzYixDQUFLLElBQUksU0FBUyxPQUFPLE1BQU0sQ0FBQyxJQUVwRDhQLEtBQVEsU0FBUztBQUFBLEVBRXBCO0FBQ0g7QUNkQSxNQUFlZ00sS0FBQTtBQUFBLEVBQ2IsUUFBUSxDQUFDNU0sSUFBV2tFLElBQWVqSSxFQUFpQjtBQUFBLEVBRXBELGFBQWEvVyxHQUFRO0FBQ25CLFdBQU84SyxHQUFhOUssQ0FBTSxJQUFJLENBQUEsSUFBSztBQUFBLEVBQ3BDO0FBQUEsRUFFRCxVQUFVO0FBQ1IsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLE1BQU07QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxtQkFBbUI7QUFBQSxNQUNuQixzQkFBc0I7QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLGtCQUFrQjtBQUNoQixhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsaUJBQWlCO0FBQ2YsYUFBTzZLLEdBQWUsS0FBSyxJQUFJO0FBQUEsSUFDaEM7QUFBQSxJQUVELGVBQWU7QUFDYixhQUFPQyxHQUFhLEtBQUssSUFBSTtBQUFBLElBQzlCO0FBQUE7QUFBQSxJQUdELFVBQVU7QUFDUixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsVUFBVTtBQUdSLGFBQU8sS0FBSyxXQUFXLENBQUMsS0FBSztBQUFBLElBQzlCO0FBQUEsSUFFRCxXQUFXO0FBQ1QsYUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLElBQ2Y7QUFBQSxJQUVELGlCQUFpQjtBQUNmLGFBQU8sS0FBSyxPQUFPO0FBQUEsSUFDcEI7QUFBQSxJQUVELFVBQVU7QUFBQSxNQUNSLE1BQU07QUFDSixZQUFJMVIsSUFBTyxLQUFLO0FBQ2hCLFFBQUksS0FBSyxpQkFFUEEsSUFBT0EsS0FBUSxPQUFPLENBQUNBLENBQUksSUFBSSxDQUFFLElBSWpDQSxJQUFPLEtBQUssZUFBZUEsQ0FBSSxLQUFLQSxHQUV0Q0EsVUFBUyxDQUFFO0FBQ1gsY0FBTSxFQUFFLGdCQUFBeVAsRUFBYyxJQUFLO0FBQzNCLGVBQUlBLEtBQ0UsS0FBSyx1QkFLUCxLQUFLLHVCQUF1QixLQUs1QixLQUFLLG9CQUFvQnpQLEVBQUssSUFBSSxDQUFBYSxPQUFVO0FBQUEsVUFDMUMsQ0FBQzRPLENBQWMsR0FBRzVPO0FBQUEsUUFDaEMsRUFBYyxHQUVHLEtBQUsscUJBRVBiO0FBQUEsTUFDUjtBQUFBLE1BRUQsSUFBSUEsR0FBTTtBQUNSLFFBQUksS0FBSyxpQkFDUCxLQUFLLG9CQUFvQkEsSUFFekIsS0FBSyxRQUFRLEtBQUssaUJBQ2RBLEtBQVFBLEVBQUssU0FBUyxJQUNwQkEsRUFBSyxDQUFDLElBQ04sT0FDRkE7QUFBQSxNQUVQO0FBQUEsSUFDRjtBQUFBLElBRUQsWUFBWTtBQUFBLE1BQ1YsTUFBTTtBQUdKLGVBQU8sS0FBSyxTQUFTLENBQUMsS0FBSztBQUFBLE1BQzVCO0FBQUEsTUFFRCxJQUFJQSxHQUFNO0FBQ1IsYUFBSyxXQUFXQSxJQUFPLENBQUNBLENBQUksSUFBSSxDQUFFO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBQUEsSUFFRCxlQUFlO0FBRWIsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBLElBRUQsT0FBTztBQUVMLGFBQU8sS0FBSyxlQUFlLGFBQWEsS0FBSyxPQUFPLElBQUk7QUFBQSxJQUN6RDtBQUFBLElBRUQsZUFBZTtBQUNiLFlBQU0sRUFBRSxjQUFjNnBCLEVBQUssSUFBSztBQUNoQyxhQUFPQSxJQUFRLEVBQUUsT0FBQUEsRUFBSyxJQUFLLENBQUU7QUFBQSxJQUM5QjtBQUFBLElBRUQsT0FBTy9rQixHQUFpQixTQUFTO0FBQUEsTUFDL0IsSUFBSTBOLEdBQU87QUFDVCxlQUFPO0FBQUEsVUFDTCxHQUFHLEtBQUs7QUFBQSxVQUNSLEdBQUdBO0FBQUEsUUFDSjtBQUFBLE1BQ0Y7QUFBQSxNQUVELElBQUlBLEdBQU87O0FBSVQsY0FBTTtBQUFBLFVBQ0osT0FBQW9WLEtBQVEzbEIsSUFBQSxLQUFLLGlCQUFMLGdCQUFBQSxFQUFtQjtBQUFBLFVBQzNCLE1BQUFzWixJQUFPLEtBQUssT0FBTztBQUFBLFFBQ3BCLElBQUcsS0FBSztBQUVULGVBQUEvSSxJQUFRO0FBQUEsVUFDTixHQUFHLEtBQUs7QUFBQSxVQUNSLEdBQUlvVixLQUFTLFFBQVEsRUFBRSxPQUFBQTtVQUN2QixHQUFJck0sS0FBUSxRQUFRLEVBQUUsTUFBQUE7VUFDdEIsR0FBRy9JO0FBQUEsUUFDSixHQUNJSSxHQUFPSixHQUFPLEtBQUssT0FBTyxLQUFLLEtBR2xDNmIsR0FBYSxFQUFFLE9BQUE3YixHQUFPLEdBRWpCQTtBQUFBLE1BQ1I7QUFBQSxJQUNQLENBQUs7QUFBQSxJQUVELE9BQU8xTixHQUFpQixPQUFPO0FBQUEsSUFFL0IsVUFBVTtBQUNSLGFBQU80TCxHQUFnQixLQUFLLE9BQU8sT0FBTztBQUFBLElBQzNDO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBT0EsR0FBZ0IsS0FBSyxPQUFPLE1BQU07QUFBQSxJQUMxQztBQUFBLElBRUQsZUFBZTtBQUNiLFVBQUkwUixJQUFRO0FBQ1osVUFBSSxLQUFLO0FBQ1AsbUJBQVd3RixLQUFTLE9BQU8sT0FBTyxLQUFLLE1BQU0sR0FBRztBQUM5QyxjQUFJQSxFQUFNO0FBQ1IsbUJBQU9BO0FBRVQsVUFBS3hGLE1BQ0hBLElBQVF3RjtBQUFBO0FBSWQsYUFBT3hGO0FBQUEsSUFDUjtBQUFBLElBRUQsZUFBZTtBQUNiLFVBQUksS0FBSztBQUNQLG1CQUFXMEgsS0FBVSxPQUFPLE9BQU8sS0FBSyxPQUFPLEdBQUc7QUFDaEQsZ0JBQU0sRUFBRSxhQUFBeUUsRUFBVyxJQUFLekU7QUFDeEIsY0FBSXlFLEdBQWE7QUFDZixrQkFBTUMsSUFBWTVwQixFQUFTMnBCLENBQVcsSUFBSUEsSUFBYztBQUN4RCxtQkFBTyxHQUFHekUsRUFBTyxRQUFRMEU7QUFBQTtBQUFBO0FBSS9CLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTztBQUFBLFFBQ0wsR0FBRyxLQUFLO0FBQUEsUUFDUixRQUFRLEtBQUs7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLElBRUQsUUFBUTtBQUNOLGFBQU8sT0FBTyxPQUFPN2hCLEdBQWUsS0FBSyxRQUFRLEtBQUssT0FBTyxDQUFDO0FBQUEsSUFDL0Q7QUFBQTtBQUFBO0FBQUEsSUFJRCxPQUFPO0FBQ0wsYUFBT2UsR0FBYyxLQUFLLFFBQVEsS0FBSyxPQUFPO0FBQUEsSUFDL0M7QUFBQSxJQUVELGNBQWM7QUFDWixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsZ0JBQWdCO0FBQ2QsYUFBT21ELEdBQWlCLEtBQUssT0FBTyxPQUFPO0FBQUEsSUFDNUM7QUFBQSxJQUVELFlBQVk7QUFDVixhQUFPLEtBQUssTUFBTSxNQUFNNUMsRUFBUztBQUFBLElBQ2xDO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBT0MsR0FBVSxLQUFLLE1BQU07QUFBQSxJQUM3QjtBQUFBLElBRUQsVUFBVTFKLEVBQWtCLFlBQVk7QUFBQSxNQUN0QyxNQUFNO0FBQUEsSUFDWixDQUFLO0FBQUEsSUFFRCxRQUFRQSxFQUFrQixVQUFVO0FBQUEsTUFDbEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ2YsQ0FBSztBQUFBLElBRUQsV0FBV0EsRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULElBQUltbEIsR0FBVztBQUNiLGVBQU9BLEtBQWF0YyxHQUFjLEtBQUssTUFBTSxJQUN6QyxLQUFLLGlCQUNILENBQUMsS0FBSyxRQUNOLEtBQ0Y7QUFBQSxNQUNMO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxVQUFVN0ksRUFBa0IsWUFBWTtBQUFBLE1BQ3RDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULElBQUlvbEIsR0FBVTtBQUNaLGVBQU9BLEtBQVksQ0FBQyxLQUFLO0FBQUEsTUFDMUI7QUFBQSxJQUNQLENBQUs7QUFBQSxJQUVELFdBQVdwbEIsRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNmLENBQUs7QUFBQSxJQUVELFdBQVdBLEVBQWtCLGFBQWE7QUFBQSxNQUN4QyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxJQUFJaXFCLEdBQVc7QUFDYixlQUFPLEtBQUssZ0JBQWdCLEtBQUssU0FBUyxTQUFTLEtBQUtBO0FBQUEsTUFDekQ7QUFBQSxJQUNQLENBQUs7QUFBQSxJQUVELGFBQWFqcUIsRUFBa0IsZUFBZTtBQUFBLE1BQzVDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQTtBQUFBLE1BQ1QsSUFBSWtxQixHQUFhO0FBQ2YsZUFBTyxLQUFLLGFBQWEsQ0FBQyxFQUFFQSxLQUFlLEtBQUssY0FBYztBQUFBLE1BQy9EO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxXQUFXbHFCLEVBQWtCLGFBQWE7QUFBQSxNQUN4QyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDZixDQUFLO0FBQUEsRUFDRjtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsT0FBTzBQLEdBQUlDLEdBQU07QUFDZixNQUFJLEtBQUssZ0JBQWdCQSxFQUFLLFNBQVNELEVBQUcsUUFBUUMsRUFBSyxTQUFTRCxFQUFHLFNBR2pFLEtBQUssUUFBUUEsRUFBRyxPQUNoQixLQUFLLFNBQVMsRUFBSztBQUFBLElBRXRCO0FBQUEsSUFFRCxtQkFBbUI7QUFBQSxNQUNqQixNQUFNO0FBQUEsTUFDTixRQUFRQSxHQUFJQyxHQUFNO0FBQ2hCLGNBQU0sRUFBRSxnQkFBQTFFLEVBQWMsSUFBSztBQUUzQixRQUFJQSxLQUFrQjBFLE1BQVMsU0FLN0IsS0FBSyx1QkFBdUIsSUFDNUIsS0FBSyxRQUFRRCxFQUFHLElBQUksQ0FBQXZULE1BQVVBLEVBQU84TyxDQUFjLENBQUM7QUFBQSxNQUV2RDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxZQUFZO0FBQ1YsV0FBSyxRQUFRLEtBQUssT0FBTyxPQUN6QixLQUFLLFdBQVk7QUFBQSxJQUNsQjtBQUFBO0FBQUEsSUFHRCxZQUFZO0FBQ1YsV0FBSyxRQUFRLEdBQ2IsS0FBSyxRQUFRO0FBQUEsSUFDZDtBQUFBO0FBQUEsSUFHRCxRQUFRelAsR0FBTTtBQU1aLE1BQ0UsQ0FBQ0EsS0FDRCxLQUFLLGdCQUFnQnlCLEVBQVF6QixDQUFJLEtBQ2pDLEtBQUssa0JBQWtCb0ksRUFBU3BJLENBQUksSUFFcEMsS0FBSyxRQUFRQSxJQUNKLEtBQUssZUFBZUEsQ0FBSSxLQUl4Qm9JLEVBQVNwSSxDQUFJLEtBQUssS0FBSyxZQUdoQyxLQUFLLGNBQWMsUUFBUUEsQ0FBSTtBQUFBLElBRWxDO0FBQUEsSUFFRCxlQUFlQSxHQUFNO0FBQ25CLFVBQ0UsS0FBSyxnQkFDTG9JLEVBQVNwSSxDQUFJLEtBQ2JrSSxHQUFTbEksRUFBSyxLQUFLLEtBQ25CeUIsRUFBUXpCLEVBQUssT0FBTztBQUlwQixvQkFBSyxRQUFRQSxFQUFLLE9BQ2xCLEtBQUssUUFBUUEsRUFBSyxTQUNYLEtBQUs7QUFBQSxJQUVmO0FBQUEsSUFFRCxXQUFXNEcsR0FBUWxDLEdBQU07QUFDdkIsWUFBTXhELElBQU8sS0FBSyxXQUFXMEYsR0FBUWxDLENBQUk7QUFDekMsYUFBSSxLQUFLLGlCQUNQLEtBQUssYUFBYXhELElBRWxCLEtBQUssU0FBUyxLQUFLQSxDQUFJLEdBRXJCLEtBQUssZUFDUCxLQUFLLFVBQVUsTUFBTSxLQUFLLG9CQUFvQixFQUFFLENBQUMsR0FFbkQsS0FBSyxTQUFVLEdBQ1JBO0FBQUEsSUFDUjtBQUFBLElBRUQsV0FBV0EsR0FBTXJCLEdBQU87QUFDdEIsVUFBSTh1QixJQUFVO0FBQ2QsVUFBSSxLQUFLO0FBQ1AsYUFBSyxhQUFhLE1BQ2xCQSxJQUFVO0FBQUEsV0FDTDtBQUNMLGNBQU0sRUFBRSxVQUFBQyxFQUFRLElBQUs7QUFDckIsUUFBSS91QixLQUFTLE1BQ1grdUIsRUFBUyxPQUFPL3VCLEdBQU8sQ0FBQyxHQUN4Qjh1QixJQUFVO0FBQUE7QUFHZCxNQUFJQSxNQUNGLEtBQUssZ0JBQWdCLEtBQUssUUFBUXp0QixHQUFNckIsQ0FBSyxHQUM3QyxLQUFLLFNBQVU7QUFBQSxJQUVsQjtBQUFBLElBRUQsV0FBV3FCLEdBQU1yQixHQUFPO0FBQ3RCLFlBQU15TyxJQUNKcE4sS0FDQSxLQUFLLGFBQWEsS0FBSyxRQUFRQSxHQUFNO0FBQUEsUUFDbkMsT0FBQXJCO0FBQUEsUUFDQSxVQUFVO0FBQUEsTUFDcEIsQ0FBUyxHQUdHZ0UsSUFBUyxNQUNiLEtBQUssT0FBTztBQUFBLFFBQ1YsTUFBTSxLQUFLLGNBQWMsU0FBUztBQUFBLFFBQ2xDLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxVQUNKLEdBQUd5SyxTQUFhLEtBQUssTUFBTTtBQUFBLFVBQzNCLEtBQUs7QUFBQSxRQUNOO0FBQUEsTUFDWCxDQUFTO0FBRUgsVUFDRXBOLEtBQ0EsT0FBTztBQUFBLFFBQ0wseUJBQXlCLEtBQUssTUFBTSxVQUFVb047QUFBQSxNQUMvQztBQUVELFlBQUksS0FBSztBQUNQLGVBQUssV0FBV3BOLEdBQU1yQixDQUFLLEdBQzNCZ0UsRUFBUTtBQUFBLGFBQ0g7QUFDTCxnQkFBTThkLElBQVMsS0FBSyxVQUFVLEtBQUssUUFBUXpnQixHQUFNckIsQ0FBSyxHQUNoRHdCLElBQVcyUSxHQUFrQjJQLEdBQVEsS0FBSyxRQUFRO0FBQ3hELFVBQUl0Z0IsS0FDRixLQUFLLGNBQWMsRUFBRSxRQUFRLFVBQVUsVUFBQUEsRUFBVSxHQUFFLENBQUFtZSxNQUFPO0FBQ3hELFlBQUtBLE1BQ0gsS0FBSyxXQUFXdGUsR0FBTXJCLENBQUssR0FDM0JnRSxFQUFRLElBRVYsS0FBSyxXQUFZO0FBQUEsVUFDL0IsQ0FBYTtBQUFBO0FBQUEsSUFJUjtBQUFBLElBRUQsbUJBQW1CaEUsR0FBTztBQUN4QixZQUFNLEVBQUUsa0JBQUErZCxFQUFnQixJQUFLLE1BQ3ZCLEVBQUUsUUFBQTVILEVBQU0sSUFBSzRIO0FBQ25CLGFBQU9BLEdBQW1CL2QsSUFBUW1XLElBQVVBLEtBQVVBLENBQU07QUFBQSxJQUM3RDtBQUFBLElBRUQsb0JBQW9CblcsR0FBTztBQUN6QixZQUFNc0YsSUFBa0IsS0FBSyxtQkFBbUJ0RixDQUFLO0FBQ3JELE1BQUlzRixNQUNGQSxFQUFnQixTQUFTO0FBQUEsSUFFNUI7QUFBQSxJQUVELE1BQU0sb0JBQW9CekcsR0FBVW13QixHQUFZO0FBQzlDLFVBQUksS0FBSyxhQUFhO0FBQ3BCLGNBQU1odkIsSUFBUW5CLEVBQVMsV0FBVyxLQUFLLFFBQVEsSUFDM0MsS0FBSyxlQUNISSxHQUFjSixFQUFTLE1BQU0sS0FBSyxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQzlELElBQ0Y7QUFDSixZQUFJbUIsTUFBVSxRQUFRcUksR0FBUyxDQUFDckksQ0FBSyxHQUFHO0FBQ3RDLGdCQUFNc0YsSUFBa0IsS0FBSyxtQkFBbUIsQ0FBQ3RGLENBQUs7QUFDdEQsY0FBSXNGLEdBQWlCO0FBQ25CLGtCQUFNLEVBQUUsUUFBQTJwQixFQUFNLElBQUszcEI7QUFDbkIsWUFBSzJwQixNQUNIM3BCLEVBQWdCLFNBQVMsSUFDekIsTUFBTSxLQUFLLFVBQVc7QUFFeEIsa0JBQU0ySCxJQUFhM0gsRUFBZ0Isd0JBQXdCekcsQ0FBUTtBQUNuRSxnQkFBSW9PLEVBQVcsU0FBUyxPQUFNK2hCLEtBQUEsZ0JBQUFBLEVBQWEvaEIsT0FBZTtBQUN4RCxxQkFBTztBQUVQLFlBQUEzSCxFQUFnQixTQUFTMnBCO0FBQUE7QUFBQTtBQUFBO0FBS2pDLGFBQU8sS0FBSyx5QkFBeUJwd0IsR0FBVW13QixDQUFVO0FBQUEsSUFDMUQ7QUFBQSxJQUVELHlCQUF5Qm53QixHQUFVbXdCLEdBQVk7QUFDN0MsYUFBTyxJQUFJLFFBQVEsQ0FBQ3pzQixHQUFTa2UsTUFBVztBQUN0QyxjQUFNeU8sSUFBaUIsTUFBTTtBQUczQixnQkFBTSxFQUFFLGlCQUFBM1EsTUFBb0IsS0FBSyxVQUMzQkosSUFBaUJJLEVBQWdCQSxFQUFnQixTQUFTLENBQUM7QUFDakUsVUFBQWhjLEdBQVF5c0IsS0FBQSxnQkFBQUEsRUFBYSxDQUFDN1EsQ0FBYyxPQUFNLEVBQUk7QUFBQSxRQUMvQyxHQUVLaUYsSUFBZ0Jua0IsR0FBY0osQ0FBUTtBQUc1QyxlQUFPdWtCLEVBQWMsU0FBUyxLQUFHO0FBQy9CLGdCQUFNcGtCLElBQU8sS0FBSyxlQUFlO0FBQUEsWUFDL0IsS0FBSyxJQUFJLGNBQWNLLEdBQWtCK2pCLENBQWEsQ0FBQztBQUFBLFVBQ3hELEdBRUssRUFBRSxTQUFBaEYsRUFBTyxJQUFLLEtBQUssUUFBUSxRQUFRcGYsQ0FBSTtBQUM3QyxVQUFJb2YsRUFBUSxVQUFVQSxFQUFRLENBQUMsRUFBRSxTQUFTLGdCQUNwQyxLQUFLLE9BQU8sU0FBU3BmLElBRXZCa3dCLEVBQWdCLElBR2hCLEtBQUssUUFDRixLQUFLLEVBQUUsTUFBQWx3QixHQUFNLEVBQ2IsTUFBTXloQixDQUFNLEVBR1osS0FBSyxNQUFNO0FBQ1YsaUJBQUssVUFBVXlPLENBQWM7QUFBQSxVQUMvQyxDQUFpQixJQUlQOUwsRUFBYyxJQUFLO0FBQUE7QUFFckIsUUFBQTdnQixFQUFRLEVBQUs7QUFBQSxNQUNyQixDQUFPO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBRUQsTUFBTSxjQUNKb0osR0FDQTVFLEdBQ0EvQixHQUNBNEcsR0FDQUMsR0FDQTFNLElBQVMsSUFDVCtILElBQVUsSUFDVjZFLElBQVUsTUFDVjtBQUNBLElBQUFTLEdBQW1CYixHQUFLNUUsR0FBUS9CLENBQUk7QUFDcEMsVUFBTW1xQixJQUFVOWdCLEdBQVV0SCxDQUFNO0FBQ2hDLFFBQUlvb0IsS0FBV3BvQixFQUFPO0FBQ3BCLFlBQU0sSUFBSTtBQUFBLFFBQ1IsVUFDRSxLQUFLLGVBQ0QsVUFDQSxLQUFLLGlCQUNILFlBQ0E7QUFBQSxNQUVUO0FBS0gsVUFBTW9nQixJQUFRLEtBQUt0YixJQUFRLEtBQ3JCdWpCLElBQU87QUFBQSxNQUNYLEtBQUF6akI7QUFBQSxNQUNBLFFBQUE1RTtBQUFBLElBQ0QsR0FDS3NvQixJQUFXO0FBQUEsTUFDZixHQUFHRDtBQUFBO0FBQUE7QUFBQSxNQUdILFNBQUFsb0I7QUFBQSxNQUNBLFFBQUEvSDtBQUFBLE1BQ0EsT0FBQWdvQjtBQUFBLElBQ0QsR0FDS21JLElBQWMsTUFBTXRpQixHQUFhckIsR0FBSzVFLEdBQVE4RSxDQUFLO0FBS3pELFFBSklFLEtBQ0YsTUFBTUEsRUFBUXVqQixHQUFhempCLElBQVEsQ0FBQyxHQUdsQzJCLEdBQWN6RyxDQUFNLEtBQUssQ0FBQ29vQixHQUFTO0FBQ3JDLFlBQU1JLElBQW1CLENBQUN2d0IsR0FBTW1vQixNQUM5QkEsSUFDSW5vQixJQUNFLEdBQUdBLE1BQVNtb0IsTUFDWixJQUFJQSxNQUNObm9CLEdBSUF3d0IsSUFBYTNqQixNQUFVLElBQUksS0FBSzlFLEVBQU8sTUFDdkMwb0IsSUFBWTtBQUFBO0FBQUE7QUFBQSxRQUdoQixNQUFNRixFQUFpQkMsR0FBWTNkLEdBQWE5SyxDQUFNLEtBQUtvZ0IsQ0FBSztBQUFBLFFBQ2hFLFdBQVcxUyxFQUFjO0FBQUEsVUFDdkJ0VixJQUFTLG1CQUFtQjtBQUFBLFFBQzdCO0FBQUEsUUFDRCxNQUFNa3dCO0FBQUEsTUFDUDtBQUNELE1BQUl6ZCxHQUFlN0ssQ0FBTSxLQUd2QjZFLEVBQU8sS0FBSztBQUFBLFFBQ1YsR0FBRzZqQjtBQUFBLFFBQ0gsTUFBTUYsRUFBaUJDLEdBQVlySSxDQUFLO0FBQUEsTUFDbEQsQ0FBUyxHQUVDcUksS0FFRjVqQixFQUFPLEtBQUs7QUFBQSxRQUNWLE1BQU00akI7QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLE1BQUFKO0FBQUEsTUFDVixDQUFTO0FBSUgsWUFBTSxDQUFDTSxHQUFZQyxDQUFTLElBQUlMLEVBQVk7QUFBQSxRQUMxQyxDQUFDNXNCLEdBQUt5ZSxPQUNKemUsRUFBSXllLEVBQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxFQUFFLEtBQUtBLENBQUssR0FDbkN6ZTtBQUFBLFFBRVQsQ0FBQyxDQUFBLEdBQUksQ0FBQSxDQUFFO0FBQUEsTUFDUjtBQU1ELFVBTElpdEIsRUFBVSxXQUNaRixFQUFVLFdBQVdFLElBRXZCL2pCLEVBQU8sS0FBSzZqQixDQUFTLEdBRWpCQyxFQUFXO0FBQ2IsbUJBQVdFLEtBQWNGO0FBQ3ZCLFVBQUE5akIsRUFBTyxLQUFLO0FBQUEsWUFDVixHQUFJZ2tCLEVBQVcsV0FBV0EsSUFBYUg7QUFBQSxZQUN2QyxNQUFNLEdBQUdBLEVBQVUsUUFBUUcsRUFBVztBQUFBLFlBQ3RDLE1BQU07QUFBQSxjQUNKLEdBQUdBLEVBQVc7QUFBQSxjQUNkLFNBQUExb0I7QUFBQSxZQUNEO0FBQUEsVUFDYixDQUFXO0FBQUE7QUFBQSxFQUlSO0FBQUEsRUFFRCxhQUFhSCxHQUFRL0YsR0FBT25DLEdBQVVzSSxHQUFPO0FBQzNDLFdBQUFBLEVBQU0sVUFBVXRJLEdBQVVrSSxDQUFNLEdBQ3pCL0Y7QUFBQSxFQUNSO0FBQ0gsR0N0cEJhNnVCLEtBQW1CO0FBQUEsRUFDOUIsS0FBTy9DLEdBQVE7QUFDYixVQUFNeHJCLElBQVU7QUFBQSxNQUNkO0FBQUEsUUFDRSxPQUFPO0FBQUEsUUFDUCxPQUFPO0FBQUEsTUFDUjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLE9BQU87QUFBQSxRQUNQLE9BQU87QUFBQSxNQUNSO0FBQUEsTUFDRDtBQUFBLFFBQ0UsT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLE1BQ1I7QUFBQSxNQUNEO0FBQUEsUUFDRSxPQUFPO0FBQUEsUUFDUCxPQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsTUFDTCxVQUFVd3JCLEVBQU8sWUFDYjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsU0FBU2xyQixFQUFRa3JCLEVBQU8sU0FBUyxJQUM3QnhyQixFQUFRO0FBQUEsVUFDTixDQUFBMnJCLE1BQVVILEVBQU8sVUFBVSxTQUFTRyxFQUFPLEtBQUs7QUFBQSxRQUNqRCxJQUNEM3JCO0FBQUEsUUFDSixXQUFXO0FBQUEsTUFDWixJQUNEO0FBQUEsTUFDSixNQUFNO0FBQUEsUUFDSixNQUFNO0FBQUEsUUFDTixPQUFPd3JCLEVBQU8sWUFBWSxRQUFRO0FBQUEsUUFDbEMsV0FBVztBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRUQsZUFBZTtBQUNiLFVBQU1nRCxJQUFXO0FBQUEsTUFDZixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUE7QUFBQSxRQUVQLE1BQU07QUFBQSxVQUNKLEtBQUs7QUFBQSxVQUNMLE9BQU87QUFBQSxVQUNQLE1BQU07QUFBQSxRQUNQO0FBQUEsTUFDRjtBQUFBLE1BQ0QsV0FBVztBQUFBLElBQ1o7QUFDRCxXQUFPO0FBQUEsTUFDTCxNQUFNQTtBQUFBLE1BQ04sSUFBSUE7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUNIO0FBRU8sU0FBU0MsR0FBbUJwa0IsR0FBS3FrQixHQUFTbnhCLEdBQVU4VCxHQUFPO0FBQ2hFLFFBQU0sRUFBRSxRQUFBc2QsR0FBUSxHQUFHQyxFQUFhLElBQUtGLEdBQy9CNWpCLElBQVE7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFFBQVF2TjtBQUFBO0FBQUEsSUFFUixVQUFVO0FBQUEsSUFDVixRQUFBb3hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLQSxPQUFPO0FBQ0wsYUFBT0U7QUFBQSxRQUNML2pCO0FBQUEsUUFDQXVHLEVBQU07QUFBQSxNQUNQO0FBQUEsSUFDRjtBQUFBLElBRUQsWUFBWXlkLEdBQXdCRixDQUFhO0FBQUEsSUFDakQsU0FBU0csR0FBcUIsRUFBSztBQUFBLElBQ25DLGNBQWNBLEdBQXFCLEVBQUk7QUFBQSxJQUV2QyxRQUFRO0FBQUEsTUFDTixTQUFTO0FBQ1AsYUFBSyxhQUFjO0FBQUEsTUFDcEI7QUFBQSxJQUNGO0FBQUEsSUFFRCxVQUFVO0FBQUEsTUFDUixVQUFVO0FBQ1IsZUFBT0MsR0FBa0IsS0FBSyxRQUFRLEtBQUssSUFBSTtBQUFBLE1BQ2hEO0FBQUEsTUFFRCxhQUFhO0FBQ1gsZUFBTyxLQUFLLFFBQVEsU0FBUztBQUFBLE1BQzlCO0FBQUEsSUFDRjtBQUFBLElBRUQsU0FBUztBQUFBLE1BQ1AsZUFBZTtBQUNiLFFBQUEzZCxFQUFNLFFBQVE7QUFBQSxVQUNaLEdBQUdBLEVBQU07QUFBQSxVQUNULFFBQVEsS0FBSztBQUFBO0FBQUEsVUFFYixNQUFNO0FBQUEsUUFDUDtBQUFBLE1BQ0Y7QUFBQSxNQUVELGVBQWU7QUFDYixhQUFLLFVBQVcsR0FDaEIsS0FBSyxhQUFjO0FBQUEsTUFDcEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNELFNBQUEvRixHQUE0QmpCLEdBQUtTLENBQUssR0FDL0JBO0FBQ1Q7QUFFQSxTQUFTaWtCLEdBQXFCRSxHQUFPO0FBQ25DLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLE1BQU1BLElBQVEsT0FBTztBQUFBLE1BQ3JCLFVBQVUsQ0FBQyxFQUFFLGlCQUFBanJCLFFBQXNCLENBQUNBLEVBQWdCO0FBQUEsTUFDcEQsUUFBUTtBQUFBLFFBQ04sTUFBTSxFQUFFLGlCQUFBQSxLQUFtQjtBQUd6QixVQUFBQSxFQUFnQixhQUFjO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBRUQsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTWlyQixJQUFRLE9BQU87QUFBQSxNQUNyQixTQUFTLENBQUNBO0FBQUEsTUFDVixRQUFRO0FBQUEsUUFDTixNQUFNLEVBQUUsaUJBQUFqckIsS0FBbUI7QUFDekIsVUFBQUEsRUFBZ0IsYUFBYztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0g7QUFFQSxTQUFTOHFCLEdBQXdCSixHQUFTOztBQUN4QyxRQUFNUSxJQUFRLENBQUU7QUFDaEIsYUFBVzFELEtBQVUsT0FBTyxPQUFPamMsR0FBZ0JtZixDQUFPLEtBQUssQ0FBQSxDQUFFLEdBQUc7QUFLbEUsVUFBTSxFQUFFLFFBQVFuckIsR0FBTSxPQUFBb1ksR0FBTyxHQUFHbFEsRUFBTSxJQUFHK2YsR0FDbkM3ZixJQUFhcEksS0FDZnpDLElBQUF5dEIsR0FBaUJockIsT0FBakIsZ0JBQUF6QyxFQUFBLEtBQUF5dEIsSUFBeUIvQyxLQUN6QkEsRUFBTztBQUNYLFFBQUk3ZixHQUFZO0FBQ2QsTUFBQUYsRUFBSyxPQUFPLFFBQ1pBLEVBQUssYUFBYSxDQUFFO0FBRXBCLGlCQUFXLENBQUNuTSxHQUFLUSxDQUFTLEtBQUssT0FBTyxRQUFRNkwsQ0FBVTtBQUN0RCxZQUFJN0wsR0FBVztBQUNiLGdCQUFNcU4sSUFBUXJOLEVBQVUsU0FBU21SLEdBQVNuUixFQUFVLFFBQVFSLENBQUc7QUFDL0QsVUFBQW1NLEVBQUssV0FBV25NLENBQUcsSUFBSTtBQUFBLFlBQ3JCLEdBQUdRO0FBQUEsWUFDSCxPQUFPO0FBQUEsWUFDUCxhQUFhcU47QUFBQSxVQUNkO0FBQUE7QUFHTCxNQUFBK2hCLEVBQU0xRCxFQUFPLElBQUksSUFBSTtBQUFBLFFBQ25CLE9BQU8vZixFQUFLO0FBQUEsUUFDWixNQUFNO0FBQUEsUUFDTixPQUFBa1E7QUFBQSxRQUNBLFNBQVMsT0FBTyxDQUFBO0FBQUEsUUFDaEIsTUFBQWxRO0FBQUEsUUFDQSxTQUFTO0FBQUEsTUFDVjtBQUFBO0FBRUQsWUFBTSxJQUFJO0FBQUEsUUFDUixtQkFBbUIrZixFQUFPLCtCQUErQmpvQjtBQUFBLE1BQzFEO0FBQUE7QUFHTCxTQUFPMnJCO0FBQ1Q7QUFFQSxTQUFTQyxHQUF1QjFwQixHQUFRL0IsR0FBTTs7QUFDNUMsUUFBTTVELElBQVkyRixFQUFPLFdBQVcvQixDQUFJO0FBQ3hDLFVBQU81QyxJQUFBaEIsS0FBQSxnQkFBQUEsRUFBVyxTQUFYLGdCQUFBZ0IsRUFBaUI7QUFDMUI7QUFFQSxTQUFTa3VCLEdBQWtCdnBCLEdBQVE1RyxHQUFNO0FBQ3ZDLFFBQU02dkIsSUFBVSxDQUFFO0FBQ2xCLGFBQVdockIsS0FBUTdFLEdBQU07QUFDdkIsVUFBTWdDLElBQVFoQyxFQUFLNkUsQ0FBSTtBQUN2QixRQUFJN0MsR0FBTztBQUVULFlBQU1ELElBQU8sT0FBTyxLQUFLdXVCLEdBQXVCMXBCLEdBQVEvQixDQUFJLENBQUMsRUFBRTtBQUFBLFFBQzdELENBQUFwRSxNQUFPdUIsRUFBTXZCLENBQUcsS0FBSztBQUFBLE1BQ3RCO0FBRUQsTUFBSXNCLEVBQUssS0FBSyxDQUFBbEIsTUFBU0EsTUFBVSxJQUFJLEtBQ25DZ3ZCLEVBQVEsS0FBSyxHQUFHaHJCLEtBQVE5QyxFQUFLLElBQUksS0FBSyxTQUFTLEVBQUUsS0FBSyxHQUFHLEdBQUc7QUFBQTtBQUFBO0FBSWxFLFNBQU84dEI7QUFDVDtBQUVBLFNBQVNHLEdBQWlCcHBCLEdBQVE0TCxHQUFPO0FBQ3ZDLFFBQU1xZCxJQUFVLENBQUU7QUFHbEIsTUFBSXJkO0FBQ0YsZUFBV21hLEtBQVUxbUIsRUFBUXVNLEVBQU0sTUFBTSxHQUFHO0FBQzFDLFlBQU0sQ0FBQSxFQUFHM04sR0FBTXlnQixDQUFJLElBQUlxSCxFQUFPLE1BQU0sY0FBYztBQUNsRCxVQUFJO0FBQ0YsUUFBQWtELEVBQVFockIsQ0FBSSxJQUFJb0IsRUFBUSxLQUFLLE1BQU0sSUFBSXFmLElBQU8sQ0FBQztBQUFBLE1BQ3ZELFFBQVE7QUFBQSxNQUFnQjtBQUFBO0FBR3RCLFFBQU1pTCxJQUFjLENBQUU7QUFDdEIsYUFBVzFyQixLQUFRK0IsRUFBTyxZQUFZO0FBQ3BDLFVBQU01RyxJQUFPLENBQUUsR0FHVCtCLElBQU84dEIsRUFBUWhyQixDQUFJO0FBQ3pCLFFBQUk5QyxHQUFNO0FBQ1IsWUFBTStLLElBQWF3akIsR0FBdUIxcEIsR0FBUS9CLENBQUk7QUFDdEQsVUFBSWlJLEdBQVk7QUFDZCxZQUFJak4sSUFBUTtBQUNaLG1CQUFXWSxLQUFPcU07QUFDaEIsVUFBQTlNLEVBQUtTLENBQUcsSUFBSXNCLEVBQUtsQyxHQUFPO0FBQUE7QUFBQTtBQUk5QixJQUFBMHdCLEVBQVkxckIsQ0FBSSxJQUFJN0U7QUFBQTtBQUV0QixTQUFPdXdCO0FBQ1Q7Ozs7Ozs7OztFQ3BQb0IsT0FBQTs7OztzQkFBQTFXLEVBQUEsR0FBQUMsRUFBQSxPQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEyTyxFQUFBLFNBQUE7QUFBQTs7Ozs7OztNQUFBL0UsRUFBQSxnQkFBYkcsRUFBYTJNLEdBQUE7QUFBQTtRQUFBLE9BQUE5TSxFQUFBO0FBQUEsUUFBQSxTQUFBQSxFQUFBO0FBQUEsUUFBQSxnQkFBQUEsRUFBQTtBQUFBO01BQUF3RixFQUFBRSxHQUFBO0FBQUEsUUFBQSxLQUFBO0FBQUEsUUFBQSxZQUFBMUYsRUFBQSxZQUFBQSxnQkFBQUEsRUFBQSxVQUFBQSxFQUFBLGVBQUE7QUFBQSxRQUFBLFNBQUFBLEVBQUEsb0JBQUE7QUFBQSxRQUFBLFdBQUFBLEVBQUE7QUFBQSxRQUFBLHVCQUFBMkUsRUFBQSxDQUFBLE1BQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUF4bkIsTUFBQTZpQixFQUFBLFdBQUE3aUI7QUFBQTttQkFBQSxNQUFBO0FBQUEsV0FBQWdaLEVBQUEsRUFBQSxHQUFBQyxFQUFBMkosR0FBQSxNQUFBdUYsRUFBQXRGLEVBQUEsVUFBQSxDQUFBeGlCLEdBQUFyQixZQUFBaWEsRUFBQSxNQUFBO0FBQUEsWUFBQSxJQUFBNEosRUFBQSxZQUFBN2pCLENBQUE7QUFBQSxZQUFBLEtBQUE2akIsRUFBQSxXQUFBQSxFQUFBLFFBQUF4aUIsQ0FBQTtBQUFBO1lBQUF3aUIsRUFBQSxrQkFBQTVKLEVBQUEySixHQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUF1RixFQUFBdEYsRUFBQSxTQUFBLENBQUFvRztjQUFBcEcsRUFBQSxtQkFBQW9HLENBQUEsVUFBQWpHLEVBQUFzRixHQUFBO0FBQUEsZ0JBQUEsS0FBQVcsRUFBQTtBQUFBLGdCQUFBLE9BQUF0QixFQUFBOUUsRUFBQSxhQUFBb0csQ0FBQSxDQUFBO0FBQUEsZ0JBQUEsTUFBQUE7QUFBQSxnQkFBQSxRQUFBcEcsRUFBQTtBQUFBLGdCQUFBLFVBQUFBLEVBQUEsWUFBQTdqQixDQUFBO0FBQUEsZ0JBQUEsTUFBQXFCO0FBQUEsZ0JBQUEsTUFBQXdpQixFQUFBO0FBQUEsZ0JBQUEsT0FBQUEsRUFBQTtBQUFBLGdCQUFBLFFBQUE7QUFBQSxnQkFBQSxVQUFBQSxFQUFBLFlBQUFBLEVBQUE7QUFBQTtvQ0FBQTVKLEVBQUEsTUFBQThPLElBQUE7QUFBQSxjQUFBbEYsRUFBQSxrQkFBQUcsRUFBQTRNLEdBQUE7QUFBQTtnQkFBQSxPQUFBL00sRUFBQSxhQUFBQSxVQUFBeGlCLEtBQUEsT0FBQXJCLEdBQUEsVUFBQSxJQUFBO0FBQUEsZ0JBQUEsUUFBQTZqQixFQUFBLGtCQUFBQSxVQUFBeGlCLEdBQUF3aUIsRUFBQSxPQUFBO0FBQUEsZ0JBQUEsVUFBQUEsRUFBQSxZQUFBN2pCLENBQUE7QUFBQSxnQkFBQSxNQUFBcUI7QUFBQSxnQkFBQSxNQUFBd2lCLEVBQUE7QUFBQSxnQkFBQSxPQUFBQSxFQUFBLGFBQUFBLFVBQUF4aUIsR0FBQXJCLENBQUE7QUFBQSxnQkFBQSxVQUFBNmpCLEVBQUEsWUFBQUEsRUFBQTtBQUFBLGdCQUFBLFdBQUFBLEVBQUE7QUFBQSxnQkFBQSxhQUFBQSxFQUFBO0FBQUEsZ0JBQUEsV0FBQUEsRUFBQTtBQUFBLGdCQUFBLFdBQUFBLEVBQUE7QUFBQSxnQkFBQSxVQUFBQSxFQUFBO0FBQUEsZ0JBQUEsVUFBQUEsRUFBQSxZQUFBeGlCLEdBQUFyQixDQUFBO0FBQUEsZ0JBQUEsVUFBQSxDQUFBMG9CLE1BQUE3RSxFQUFBLFdBQUF4aUIsR0FBQXJCLENBQUE7QUFBQSw2TEFBQTZqQixFQUFBLE9BQUEsa0JBQUFHLEVBQUE2TSxFQUFBaE4sRUFBQSxPQUFBLFNBQUEsR0FBQTtBQUFBO2dCQUFBLFVBQUFBLEVBQUEsWUFBQTdqQixDQUFBO0FBQUEsZ0JBQUEsTUFBQXFCO0FBQUEsZ0JBQUEsUUFBQTtBQUFBLG1EQUFBd2lCLEVBQUEsZUFBQTVKLEVBQUEsUUFBQTtBQUFBO2dCQUFBLFdBQUE0SixFQUFBLE9BQUFBLGFBQUF4aUIsR0FBQXJCLENBQUEsQ0FBQTtBQUFBLHVDQUFBaWEsRUFBQSxRQUFBO0FBQUE7Z0JBQUEsV0FBQTRKLEVBQUEsYUFBQUEsVUFBQXhpQixLQUFBLE9BQUFyQixHQUFBO0FBQUE7O1lBQUE2akIsRUFBQSxzQkFBQTdKLEtBQUFDLEVBQUEsTUFBQWlQLElBQUE7QUFBQSxjQUFBRyxFQUFBeUgsR0FBQTtBQUFBLGdCQUFBLFFBQUFqTixFQUFBLGtCQUFBQSxVQUFBeGlCLEdBQUF3aUIsRUFBQSxPQUFBO0FBQUEsZ0JBQUEsVUFBQUEsRUFBQSxZQUFBN2pCLENBQUE7QUFBQSxnQkFBQSxNQUFBcUI7QUFBQSxnQkFBQSxNQUFBd2lCLEVBQUE7QUFBQSxnQkFBQSxPQUFBQSxFQUFBLGFBQUFBLFVBQUF4aUIsR0FBQXJCLENBQUE7QUFBQSxnQkFBQSxVQUFBNmpCLEVBQUEsWUFBQUEsRUFBQTtBQUFBLGdCQUFBLFdBQUFBLEVBQUE7QUFBQSxnQkFBQSxXQUFBQSxFQUFBO0FBQUEsZ0JBQUEsVUFBQUEsRUFBQTtBQUFBLGdCQUFBLFVBQUFBLEVBQUEsWUFBQXhpQixHQUFBckIsQ0FBQTtBQUFBLGdCQUFBLFVBQUEsQ0FBQTBvQixNQUFBN0UsRUFBQSxXQUFBeGlCLEdBQUFyQixDQUFBO0FBQUE7Ozs7OztNQUFBNmpCLEVBQUEsbUJBQUFBLEVBQUEsZUFBQTVKLEVBQUEsU0FBQThXLElBQUE7QUFBQSxRQUFBbkksRUFBQSxNQUFBLE1BQUE7QUFBQSxVQUFBQSxFQUFBLE1BQUE7QUFBQSxZQUFBLE9BQUE7QUFBQSxZQUFBLFNBQUEvRSxFQUFBO0FBQUE7WUFBQXdGLEVBQUF5SCxHQUFBO0FBQUEsY0FBQSxTQUFBak4sRUFBQTtBQUFBLGNBQUEsUUFBQUEsRUFBQTtBQUFBLGNBQUEsVUFBQUEsRUFBQTtBQUFBLGNBQUEsTUFBQUEsRUFBQTtBQUFBLGNBQUEsTUFBQUEsRUFBQTtBQUFBLGNBQUEsT0FBQUEsRUFBQTtBQUFBLGNBQUEsVUFBQUEsRUFBQSxZQUFBQSxFQUFBO0FBQUEsY0FBQSxXQUFBQSxFQUFBO0FBQUEsY0FBQSxZQUFBQSxFQUFBO0FBQUE7Ozs7O0lBQUFBLEVBQUEsa0JBQUFBLEVBQUEsZUFBQUcsRUFBQThNLEdBQUE7QUFBQTtNQUFBLE9BQUE7QUFBQSxNQUFBLFNBQUFqTixFQUFBO0FBQUEsTUFBQSxRQUFBQSxFQUFBO0FBQUEsTUFBQSxVQUFBQSxFQUFBO0FBQUEsTUFBQSxNQUFBQSxFQUFBO0FBQUEsTUFBQSxNQUFBQSxFQUFBO0FBQUEsTUFBQSxPQUFBQSxFQUFBO0FBQUEsTUFBQSxVQUFBQSxFQUFBLFlBQUFBLEVBQUE7QUFBQSxNQUFBLFdBQUFBLEVBQUE7QUFBQSxNQUFBLFlBQUFBLEVBQUE7QUFBQTs7O0FBb0twQixXQUFrQnFJLEVBQWtCLFNBQVMsUUFBSztBQUFBLEVBQ2hELFFBQVEsQ0FBQ3VDLElBQWF4RyxFQUFhO0FBQUEsRUFFbkMsY0FBY3BqQixHQUFNO0FBRWxCLFdBQU9BO0FBQUEsRUFDUjtBQUFBLEVBRUQsZUFBZThHLEdBQUs1RSxHQUFRbEksR0FBVXVDLEdBQVc7QUFDL0MsVUFBTSxFQUFFLFNBQUE0dUIsTUFBWWpwQjtBQUdwQixRQUFJaXBCO0FBQ0YsYUFBT0Q7QUFBQSxRQUNMcGtCO0FBQUEsUUFDQXFrQjtBQUFBLFFBQ0FueEI7QUFBQTtBQUFBLFFBRUEyVSxHQUFTO0FBQUEsVUFDUCxNQUFNO0FBQ0osbUJBQU9wUyxFQUFVO0FBQUEsVUFDbEI7QUFBQSxVQUVELElBQUl1UixHQUFPO0FBRVQsa0JBQU1tYSxJQUFTLENBQUFsQyxNQUFPeFksR0FBT3dZLEdBQUssQ0FBQTVwQixNQUFTQSxNQUFVLE1BQVM7QUFDOUQsWUFBSytSLEdBQU8rWixFQUFPbmEsQ0FBSyxHQUFHbWEsRUFBTzFyQixFQUFVLEtBQUssQ0FBQyxNQUNoREEsRUFBVSxRQUFRdVIsR0FDbEJ2UixFQUFVLFNBQVMsRUFBSztBQUFBLFVBRTVCO0FBQUEsU0FDRDtBQUFBLE1BQ0g7QUFBQSxFQUVIO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixnQkFBZ0I7QUFDZCxhQUFPLEtBQUssWUFBWSxLQUFLLFFBQVEsS0FBSztBQUFBLElBQzNDO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUFPLENBQUMsRUFBRSxLQUFLLGlCQUFpQixLQUFLO0FBQUEsSUFDdEM7QUFBQSxJQUVELGlCQUFpQjtBQUNmLFlBQU0sRUFBRSxVQUFBMnRCLEVBQU8sSUFBTTtBQUNyQixhQUNFQSxFQUFTLFNBQVMsTUFDaEIsS0FBSyxZQUNMLEtBQUssYUFDTCxLQUFLO0FBQUEsSUFHVjtBQUFBLElBRUQscUJBQXFCO0FBQ25CLGFBQU8sQ0FBQyxLQUFLLGFBQWEsS0FBSztBQUFBLElBQ2hDO0FBQUEsSUFFRCxlQUFlO0FBQ2IsYUFBTyxFQUFFLEtBQUssU0FBUyxTQUFTO0FBQUEsSUFDakM7QUFBQSxJQUVELGFBQWE7QUFDWCxjQUNHLEtBQUssVUFBVSxPQUFPLEtBQUssS0FBSyxPQUFPLEVBQUUsU0FBUyxNQUNsRCxLQUFLLHFCQUFxQixJQUFJO0FBQUEsSUFFbkM7QUFBQSxFQUNEO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxZQUFZL3VCLEdBQU87QUFDakIsYUFBT3BCLEVBQWUsS0FBSyxVQUFVb0IsQ0FBSztBQUFBLElBQzNDO0FBQUEsSUFFRCxZQUFZcUIsR0FBTXJCLEdBQU87QUFDdkIsVUFBSSxLQUFLLFVBQVU7QUFDakIsY0FBTU0sSUFBSyxLQUFLLFVBQVUsS0FBSyxRQUFRZSxHQUFNckIsQ0FBSztBQUNsRCxlQUNFK04sR0FBZ0IsS0FBSyxRQUFRek4sR0FBSSxLQUFLLE9BQU8sS0FDN0MsR0FBRyxLQUFLLFFBQVFBO0FBQUE7QUFHcEIsYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELGFBQWEycEIsR0FBUTtBQUNuQixhQUFPLGFBQWFuVyxHQUFVbVcsRUFBTyxJQUFJO0FBQUEsSUFDMUM7QUFBQSxJQUVELFdBQVc1b0IsR0FBTXJCLEdBQU87QUFDdEIsYUFBTyxJQUFJbUIsRUFBWSxNQUFNO0FBQUEsUUFDM0IsTUFBTUU7QUFBQSxRQUNOLE9BQU9BO0FBQUEsUUFDUCxPQUFBckI7QUFBQSxRQUNBLFVBQVUsS0FBSyxZQUFZQSxDQUFLO0FBQUEsT0FDakM7QUFBQSxJQUNGO0FBQUEsSUFFRCxlQUFleUUsR0FBUTtBQUNyQixZQUFNdXNCLElBQWtCcHlCLEVBQWUsS0FBSyxVQUFVLFVBQVUsR0FDMUR3TixJQUFRLEtBQUssZ0JBQWdCLG1CQUFtQjRrQixDQUFlO0FBQ3JFLFVBQUk1a0I7QUFDRixlQUFBQSxFQUFNLHFCQUFxQjNILEdBQVEsRUFBSSxHQUNoQztBQUFBLElBRVg7QUFBQSxFQUNEO0FBQUEsRUFFRCxNQUFNLGNBQ0prSCxHQUNBNUUsR0FDQS9CLEdBQ0E0RyxHQUNBQyxHQUNBMU0sSUFBUyxJQUNUK0gsSUFBVSxJQUNWNkUsSUFBVSxNQUNWO0FBQ0EsVUFBTSxRQUFRLElBQUk7QUFBQSxNQUNoQlQsR0FBdUJ2RSxDQUFNO0FBQUEsTUFDN0IwRSxHQUF3QjFFLEVBQU8sT0FBTztBQUFBLE1BQ3RDMG5CLEdBQVk7QUFBQSxRQUNWOWlCO0FBQUEsUUFDQTVFO0FBQUEsUUFDQS9CO0FBQUEsUUFDQTRHO0FBQUEsUUFDQUM7QUFBQSxRQUNBMU07QUFBQSxRQUNBK0g7QUFBQSxRQUNBNkU7QUFBQSxNQUNGO0FBQUEsS0FDRDtBQUFBLEVBQ0g7QUFDRixDQUFDOzs7Ozs7Ozs7QUN0U0QsV0FBa0JtZ0IsRUFBa0IsU0FBUyxTQUFNO0FBQUEsRUFDakQsY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUNqQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDd0RELFdBQWtCQSxFQUFrQixTQUFTLFVBQU87QUFBQSxFQUNsRCxRQUFRLENBQUN6TyxFQUFRO0FBQUEsRUFDakIsWUFBWTtBQUFBLElBQ1YsZUFBQXdUO0FBQUEsSUFDQSxNQUFBMVc7QUFBQSxFQUNEO0FBQUEsRUFFRCxPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNEO0FBQUEsRUFFRCxVQUFVO0FBQUEsSUFDUixRQUFRO0FBQ04sYUFBTyxLQUFLLE9BQU8sU0FBUztBQUFBLElBQzdCO0FBQUEsSUFFRCxTQUFTO0FBQ1AsYUFBTztBQUFBLFFBQ0wsUUFBUSxLQUFLLFVBQVUsUUFBUSxLQUFLO0FBQUEsTUFDdEM7QUFBQSxJQUNEO0FBQUEsSUFFRCxjQUFjO0FBQ1osYUFBTyxLQUFLLFdBQVcsU0FBUztBQUFBLFFBQzlCLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxVQUNKLFNBQVMsQ0FBQTJXLE1BQVUsS0FBSyxZQUFZQSxDQUFNO0FBQUEsUUFDNUM7QUFBQSxPQUNEO0FBQUEsSUFDRjtBQUFBLElBRUQsbUJBQW1CO0FBQ2pCLGFBQU8sS0FBSyxXQUFXLFNBQVM7QUFBQSxRQUM5QixXQUFXO0FBQUEsVUFDVCxTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0QsU0FBUztBQUFBLFVBQ1AsV0FBVztBQUFBLFVBQ1gsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQUEsUUFDM0I7QUFBQSxPQUNEO0FBQUEsSUFDRjtBQUFBLElBRUQsc0JBQXNCO0FBQ3BCLGFBQU8sS0FBSyxXQUFXLFNBQVM7QUFBQSxRQUM5QixZQUFZO0FBQUEsUUFDWixhQUFhO0FBQUEsUUFDYixZQUFZO0FBQUEsUUFDWixXQUFXO0FBQUEsT0FDWjtBQUFBLElBQ0Y7QUFBQSxJQUVELGNBQWM7QUFDWixhQUFPLEtBQUssV0FBVyxTQUFTO0FBQUEsUUFDOUIsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLE9BQ1A7QUFBQSxJQUNGO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUFPO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsTUFDTixFQUFDLE9BQU8sQ0FBQWpnQixNQUFXQSxFQUFRLFNBQVMsQ0FBQztBQUFBLElBQ3ZDO0FBQUEsSUFFRCxlQUFlO0FBQ2IsYUFBTztBQUFBLFFBQ0wsb0JBQW9CO0FBQUEsVUFDbEIsVUFBWTtBQUFBLFVBQ1osVUFBWTtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsUUFDbEIsRUFBRSxLQUFLLFVBQVU7QUFBQSxNQUNuQjtBQUFBLElBQ0Q7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQU87QUFBQSxRQUNMLFVBQVUsQ0FBQyxLQUFLO0FBQUEsUUFDaEIsV0FBVyxLQUFLO0FBQUEsUUFDaEIsbUJBQW1CLENBQUMsS0FBSyxZQUFZO0FBQUEsUUFDckMsbUJBQW1CLENBQUMsS0FBSyxZQUFZO0FBQUEsUUFDckMsY0FBYyxLQUFLO0FBQUEsTUFDckI7QUFBQSxJQUNEO0FBQUEsSUFFRCxXQUFXdE0sRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxJQUVELFlBQVlBLEVBQWtCLGNBQWM7QUFBQSxNQUMxQyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUE7QUFBQSxJQUVYLENBQUM7QUFBQSxJQUVELGFBQWFBLEVBQWtCLGVBQWU7QUFBQSxNQUM1QyxNQUFNLENBQUMsUUFBUSxPQUFPO0FBQUEsTUFDdEIsU0FBUztBQUFBLE1BQ1QsSUFBSXdzQixHQUFhO0FBQ2YsZUFBTzVvQixFQUFTNG9CLENBQVcsSUFDdkJBLElBQ0E7QUFBQSxVQUNFLE9BQU8sQ0FBQyxDQUFDQTtBQUFBLFVBQ1QsT0FBTyxDQUFDLENBQUNBO0FBQUEsUUFDWDtBQUFBLE1BQ047QUFBQSxLQUNEO0FBQUEsRUFDRjtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLEVBQ2Q7QUFBQSxFQUVELFVBQVU7QUFDUixRQUFJdkQsSUFBVSxJQUNWQyxJQUFjO0FBRWxCLFVBQU01bkIsSUFBVyxNQUFNO0FBQ3JCLE1BQUksQ0FBQyxLQUFLLFdBQVcybkIsTUFDbkJBLElBQVUsSUFDVixLQUFLLFNBQVM7QUFBQSxJQUVsQixHQUVNOW5CLElBQVUsTUFBTSxLQUFLLFFBQVEsR0FFN0JDLElBQVMsTUFBTTtBQUNuQixXQUFLLE9BQU8sR0FDWkUsRUFBUztBQUFBLElBQ1gsR0FFTW1yQixJQUFvQnJFLEdBQVMsQ0FBQW1FLE1BQVU7QUFDM0MsTUFBQXJELElBQWMsSUFDZCxLQUFLLFFBQVFxRCxFQUFPLFFBQVEsR0FDNUJ0RCxJQUFVLElBQ1YzbkIsRUFBUztBQUFBLElBQ1YsR0FBRSxHQUFHLEdBRUFvckIsSUFBVyxDQUFDLEVBQUUsUUFBQUgsUUFBYTtBQUMvQixNQUFBRSxFQUFrQkYsQ0FBTSxHQUN4QixLQUFLLFFBQVE7QUFBQSxJQUNmO0FBRUEsU0FBSyxPQUFPLFNBQVMsQ0FBQWx3QixNQUFTO0FBQzVCLE1BQUk2c0IsSUFDRkEsSUFBYyxLQUVkLEtBQUssT0FBTyxXQUFXN3NCLEdBQU8sSUFBTyxLQUFLLFlBQVk7QUFBQSxLQUV6RCxHQUVELEtBQUssU0FBUyxJQUFJc3dCLEdBQU87QUFBQSxNQUN2QixHQUFHLEtBQUs7QUFBQSxNQUNSLFNBQUF4ckI7QUFBQSxNQUNBLFFBQUFDO0FBQUEsTUFDQSxVQUFBc3JCO0FBQUEsTUFDQSxZQUFZLEtBQUssY0FBZTtBQUFBLE1BQ2hDLFNBQVMsS0FBSyxTQUFTO0FBQUEsS0FDeEI7QUFBQSxFQUNGO0FBQUEsRUFFRCxZQUFZO0FBQ1YsU0FBSyxPQUFPLFFBQVE7QUFBQSxFQUNyQjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsYUFBYTN2QixHQUFPO0FBQ2xCLFlBQU02dkIsSUFBVyxDQUFDLEVBQUUsU0FBU0MsR0FBRyxTQUFTQyxTQUFTLEVBQUUsR0FBQUQsR0FBRyxHQUFBQztBQUV2RCxVQUFJQyxJQUFRSCxFQUFTN3ZCLENBQUssRUFBRSxHQUN4QndiLElBQVMsV0FBVyxpQkFBaUIsS0FBSyxNQUFNLE9BQU8sR0FBRyxFQUFFLE1BQU07QUFFdEUsWUFBTXlVLElBQVksQ0FBQWp3QixNQUFTO0FBQ3pCLGNBQU0sRUFBRSxHQUFBK3ZCLEVBQUUsSUFBSUYsRUFBUzd2QixDQUFLO0FBQzVCLFFBQUF3YixLQUFVdVUsSUFBSUMsR0FDZEEsSUFBUUQsR0FDUixLQUFLLFNBQVMsR0FBRyxLQUFLLElBQUl2VSxHQUFRLENBQUM7QUFBQSxNQUNyQyxHQUVNdkosSUFBVyxLQUFLLE1BQU0sVUFBVTtBQUFBLFFBQ3BDLFdBQUFnZTtBQUFBLFFBRUEsUUFBUWp3QixHQUFPO0FBQ2IsVUFBQWl3QixFQUFVandCLENBQUssR0FDZmlTLEVBQVMsT0FBTztBQUFBLFFBQ2xCO0FBQUEsT0FDRDtBQUFBLElBQ0Y7QUFBQSxJQUVELHNCQUFzQjtBQUNwQixXQUFLLE9BQU8sV0FBVyxLQUFLLGFBQWE7QUFBQSxJQUMxQztBQUFBLElBRUQsTUFBTSxZQUFZdWQsR0FBUTtBQUN4QixZQUFNdHJCLElBQWEsTUFBTSxLQUFLLGNBQWMsV0FBVztBQUFBLFFBQ3JELFlBQVk7QUFBQSxVQUNWLE1BQU07QUFBQSxZQUNKLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLFdBQVc7QUFBQSxVQUNaO0FBQUEsVUFDRCxPQUFPO0FBQUEsWUFDTCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0Q7QUFBQSxRQUNELFNBQVM7QUFBQSxVQUNQLFFBQVEsQ0FBRTtBQUFBLFVBQ1YsT0FBTyxFQUFFLE1BQU0sU0FBVTtBQUFBLFVBQ3pCLFFBQVE7QUFBQSxZQUNOLFFBQVE7QUFBQSxjQUNOLE1BQU0sRUFBRSxpQkFBQWdzQixLQUFtQjtBQUN6QixnQkFBQUEsRUFBZ0IsUUFBUSxJQUFJO0FBQUEsY0FDOUI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Q7QUFBQSxRQUNELE1BQU1DLEdBQWtCLEtBQUssT0FBTyxPQUFPLE1BQU07QUFBQSxPQUNsRDtBQUNELFVBQUlqc0IsR0FBWTtBQUNkLFlBQUksRUFBRSxNQUFBa3NCLEdBQU0sT0FBQTNSLEVBQU0sSUFBSXZhO0FBQ3RCLFlBQUlrc0I7QUFHRixjQUFJO0FBRUYsZ0JBQUksSUFBSUEsQ0FBSTtBQUFBLFVBQ2QsUUFBRTtBQUNBLFlBQUFBLElBQU8sV0FBV0E7QUFBQSxVQUNwQjtBQUVGLFFBQUFaLEVBQU8sU0FBUyxRQUFRLEVBQUUsTUFBQVksR0FBTSxPQUFBM1IsR0FBTztBQUFBO0FBQ2xDLFFBQUl2YSxNQUFlLFFBQ3hCc3JCLEVBQU8sU0FBUyxVQUFVO0FBQUEsSUFFN0I7QUFBQSxJQUVELGdCQUFnQjtBQUNkLFlBQU07QUFBQSxRQUNKLE9BQUFhLElBQVEsQ0FBRTtBQUFBLFFBQ1YsT0FBQUMsSUFBUSxDQUFFO0FBQUEsUUFDVixPQUFBQyxJQUFRLENBQUM7QUFBQSxNQUNULElBQUUsS0FBSztBQUNULGFBQU87QUFBQTtBQUFBLFFBRUxDO0FBQUEsUUFDQUM7QUFBQSxRQUNBQztBQUFBO0FBQUE7QUFBQSxRQUdBTCxFQUFNLFFBQVFNO0FBQUEsUUFDZE4sRUFBTSxVQUFVTztBQUFBLFFBQ2hCUCxFQUFNLGFBQWFRO0FBQUEsUUFDbkJSLEVBQU0sVUFBVVM7QUFBQSxRQUNoQlQsRUFBTSxTQUFTVTtBQUFBLFFBQ2ZWLEVBQU0sUUFBUVc7QUFBQSxRQUNkWCxFQUFNLFFBQVFZO0FBQUE7QUFBQSxRQUdkWCxFQUFNLGNBQWNZO0FBQUEsUUFDcEJaLEVBQU0sYUFBYWE7QUFBQSxRQUNuQkM7QUFBQTtBQUFBLFFBQ0FkLEVBQU0sV0FBV2UsR0FBUSxVQUFVLEVBQUUsUUFBUWYsRUFBTSxTQUFTO0FBQUEsUUFDNURBLEVBQU0sa0JBQWtCZ0I7QUFBQSxTQUN2QmhCLEVBQU0sZUFBZUEsRUFBTSxlQUFlaUI7QUFBQSxRQUMzQ2pCLEVBQU0sY0FBY2tCO0FBQUEsUUFDcEJsQixFQUFNLGVBQWVtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNckJsQixFQUFNLFdBQVdtQjtBQUFBLE1BQ2xCLEVBQUMsT0FBTyxDQUFBQyxNQUFhLENBQUMsQ0FBQ0EsQ0FBUztBQUFBLElBQ2xDO0FBQUEsSUFFRCxXQUFXQyxHQUFjQyxHQUFjO0FBQ3JDLFlBQU1sTCxJQUFPLENBQUMsR0FDUixFQUFFLFVBQUFtTCxNQUFhLEtBQUssUUFFcEJDLElBQVksQ0FBQyxFQUFFLE1BQUF6dUIsR0FBTSxNQUFBMHVCLEdBQU0sU0FBQUMsR0FBUyxZQUFBL3RCLEdBQVksU0FBQXVtQixRQUFjO0FBQ2xFLFFBQUE5RCxFQUFLLEtBQUs7QUFBQSxVQUNSLE1BQUFyakI7QUFBQSxVQUNBLE1BQUEwdUI7QUFBQSxVQUNBLFVBQVUsS0FBSyxPQUFPLFNBQVMxdUIsR0FBTVksQ0FBVTtBQUFBLFVBQy9DLFNBQVMsTUFBTTtBQUNiLFlBQUErdEIsVUFDRTN1QixLQUFRd3VCLElBQ0p4dUIsSUFDQSxTQUFTUyxHQUFTVCxHQUFNLEVBQUksTUFDOUIydUIsS0FBV0gsTUFHYnJILElBQ0lBLEVBQVEsS0FBSyxRQUFRdm1CLENBQVUsS0FIckIsQ0FBQUEsTUFDWixLQUFLLE9BQU8sUUFBUSt0QixDQUFPLEVBQUUvdEIsQ0FBVSxFQUFFLE1BQU8sRUFBQyxJQUFJLEdBRzdDQSxDQUFVO0FBQUEsVUFFeEI7QUFBQSxTQUNEO0FBQUEsTUFDSCxHQUVNaEMsSUFBVyxLQUFLLE9BQU8wdkIsQ0FBWTtBQUN6QyxVQUFJMXZCO0FBQ0YsbUJBQVcsQ0FBQ29CLEdBQU00dUIsQ0FBVyxLQUFLLE9BQU8sUUFBUUwsQ0FBWSxHQUFHO0FBQzlELGdCQUFNTSxJQUFjLENBQUMsUUFBUSxNQUFNLEVBQUUsU0FBUzd1QixDQUFJLElBQUksWUFBWUEsR0FDNURiLElBQVVQLEVBQVNpd0IsQ0FBVyxHQUM5QkgsSUFBTzVmLEdBQVU5TyxDQUFJO0FBQzNCLGNBQUliO0FBQ0YsZ0JBQUl5dkIsTUFBZ0I7QUFDbEIsY0FBQUgsRUFBVSxFQUFFLE1BQUF6dUIsR0FBTSxNQUFBMHVCLEdBQU07QUFBQSxxQkFDZm5yQixFQUFTcXJCLENBQVcsR0FBRztBQUNoQyxvQkFBTSxFQUFFLFNBQUFELEdBQVMsV0FBQUcsR0FBVyxRQUFBaHNCLEdBQVEsU0FBQXFrQixNQUFZeUg7QUFDaEQsa0JBQUlFO0FBQ0Ysb0JBQUlseUIsRUFBUWtHLENBQU0sS0FBS2xHLEVBQVF1QyxDQUFPO0FBRXBDLDZCQUFXbkQsS0FBUzhHO0FBQ2xCLG9CQUFJM0QsRUFBUSxTQUFTbkQsQ0FBSyxLQUN4Qnl5QixFQUFVO0FBQUEsc0JBQ1IsTUFBQXp1QjtBQUFBLHNCQUNBLE1BQU0sR0FBRzB1QixLQUFRMXlCO0FBQUEsc0JBQ2pCLFNBQUEyeUI7QUFBQSxzQkFDQSxZQUFZLEVBQUUsQ0FBQ0csQ0FBUyxHQUFHOXlCLEVBQU87QUFBQSxzQkFDbEMsU0FBQW1yQjtBQUFBLHFCQUNEO0FBQUE7QUFLUCxnQkFBQXNILEVBQVUsRUFBRSxNQUFBenVCLEdBQU0sTUFBQTB1QixHQUFNLFNBQUFDLEdBQVMsU0FBQXhILEdBQVM7QUFBQTtBQUFBO0FBQUE7QUFNcEQsYUFBTzlEO0FBQUEsSUFDUjtBQUFBLElBRUQsZUFBZTtBQUNiLFdBQUssT0FBTyxTQUFTLE1BQU07QUFBQSxJQUM1QjtBQUFBLElBRUQsY0FBYztBQUNaLFdBQUssT0FBTyxTQUFTLEtBQUs7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFDRixDQUFDLEdBRUtvSyxLQUFRc0IsR0FBSyxPQUFPO0FBQUEsRUFDeEIsTUFBTTtBQUFBLEVBRU4sWUFBWTtBQUNWLFdBQU8sQ0FBQyxFQUFFLEtBQUssU0FBUztBQUFBLEVBQ3pCO0FBQUEsRUFFRCxhQUFhO0FBQ1gsV0FBTyxDQUFDLFNBQVMsQ0FBQztBQUFBLEVBQ25CO0FBQUEsRUFFRCxjQUFjO0FBQ1osV0FBTztBQUFBLE1BQ0wsVUFDRSxDQUFBbnVCLE1BQ0EsQ0FBQyxFQUFFLFVBQUE0dEIsRUFBUyxNQUNIQSxFQUFTLFFBQVEsS0FBSyxNQUFNNXRCLENBQVU7QUFBQSxNQUVqRCxhQUNFLENBQUFBLE1BQ0EsQ0FBQyxFQUFFLFVBQUE0dEIsRUFBUyxNQUNIQSxFQUFTLFdBQVcsS0FBSyxNQUFNNXRCLENBQVU7QUFBQSxNQUVwRCxZQUNFLE1BQ0EsQ0FBQyxFQUFFLFVBQUE0dEIsRUFBUyxNQUNIQSxFQUFTLFVBQVUsS0FBSyxJQUFJO0FBQUEsSUFFekM7QUFBQSxFQUNGO0FBQ0YsQ0FBQyxHQUVLYixLQUFnQnFCLEdBQUssT0FBTztBQUFBLEVBQ2hDLFdBQVc7QUFBQSxFQUNYLFFBQVE7QUFBQSxJQUNOLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxRQUNKLFNBQVM7QUFBQSxNQUNWO0FBQUEsTUFDRCxPQUFPO0FBQUEsUUFDTCxTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Q7QUFBQSxJQUVELFlBQVk7QUFDVixhQUFPO0FBQUEsUUFDTDtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsVUFBVSxDQUFBN3RCLE9BQVk7QUFBQSxZQUNwQixNQUFNQSxFQUFRLGFBQWEsTUFBTTtBQUFBLFlBQ2pDLE9BQU9BLEVBQVEsYUFBYSxPQUFPO0FBQUE7UUFFdkM7QUFBQSxNQUNGO0FBQUEsSUFDRDtBQUFBLElBRUQsV0FBV1osR0FBTTtBQUNmLGFBQU8sQ0FBQyxLQUFLQSxFQUFLLE9BQU8sQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNGLENBQUM7OztnQkN2ZWlCLE9BQUF3ZSxJQUFBO0FBQUEsTUFBQSxPQUFBRyxJQUFBO0FBQUEsUUFBQStQLEdBQUFoTCxFQUFBO0FBQUE7Ozs7Ozs7O1FBQVIsWUFBUTtBQUFBLFFBQUEsYUFBQXBGLEVBQUE7QUFBQSxRQUFBLGdCQUFBO0FBQUEsUUFBQSxTQUFBQSxFQUFBLFlBQUFBLEVBQUEsaUJBQUEsQ0FBQTtBQUFBLFFBQUEsYUFBQUEsRUFBQTtBQUFBLFFBQUEsU0FBQUEsRUFBQTtBQUFBLFFBQUEsWUFBQUEsRUFBQTtBQUFBLFFBQUEsYUFBQUEsRUFBQTtBQUFBLFFBQUEsVUFBQUEsRUFBQTtBQUFBLFFBQUEsVUFBQUEsRUFBQTtBQUFBLFFBQUEsWUFBQUEsRUFBQTtBQUFBLFFBQUEsaUJBQUFBLEVBQUE7QUFBQSxRQUFBLGtCQUFBQSxFQUFBO0FBQUEsUUFBQSxnQkFBQUEsRUFBQTtBQUFBLFFBQUEsZ0JBQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUFBLEVBQUE7QUFBQSxTQUFBQSxFQUFBLFlBQUE7QUFBQSxRQUFBLFFBQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUFBLEVBQUE7QUFBQSxRQUFBLE9BQUFBLEVBQUE7QUFBQSxRQUFBLGdCQUFBQSxFQUFBO0FBQUE7TUFBQUEsRUFBQSx3QkFBQTVKLEVBQUEsVUFBQTtBQUFBO1FBQUEsT0FBQTtBQUFBLFFBQUEsTUFBQTtBQUFBLFFBQUEsVUFBQTRKLEVBQUE7QUFBQSxRQUFBLG1DQUFBQSxFQUFBLFNBQUFBLEVBQUEsTUFBQSxHQUFBM2hCLENBQUE7QUFBQTs7SUFBQTJoQixFQUFBLGlCQUFBRyxFQUFBOE0sR0FBQTtBQUFBO01BQUEsUUFBQWpOLEVBQUE7QUFBQSxNQUFBLFVBQUFBLEVBQUE7QUFBQSxNQUFBLE1BQUFBLEVBQUE7QUFBQSxNQUFBLE1BQUFBLEVBQUE7QUFBQSxNQUFBLE9BQUFBLEVBQUE7QUFBQSxNQUFBLFVBQUE7QUFBQSxNQUFBLFVBQUFBLEVBQUE7QUFBQSxNQUFBLFVBQUFBLEVBQUE7QUFBQTs7O0FBMkRsQixNQUFLak4sS0FBYXNWLEVBQWtCLFNBQVMsZUFBWTtBQUFBLEVBQ3ZELFFBQVEsQ0FBQ1EsRUFBWTtBQUFBLEVBQ3JCLFlBQVksRUFBRSxnQkFBQXdILEdBQWdCO0FBQUEsRUFFOUIsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLGlCQUFpQjtBQUFBLE1BQ2pCLFVBQVU7QUFBQSxJQUNaO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsaUJBQWlCO0FBQUEsTUFDZixNQUFNO0FBQ0osZUFBTyxLQUFLLFlBQ1AsS0FBSyxpQkFBaUIsQ0FBRSxHQUN0QjtBQUFBO0FBQUE7QUFBQSxVQUdDLENBQUFsekIsTUFDRSxLQUFLLGtCQUFrQkEsQ0FBSyxLQUFLLEtBQUssYUFBYUEsQ0FBSztBQUFBLFFBRTVELEVBR0MsT0FBTyxPQUFPLElBQ2pCLEtBQUs7QUFBQSxNQUNWO0FBQUEsTUFFRCxJQUFJaXNCLEdBQVE7QUFHVixhQUFLLGdCQUFnQixLQUFLLFlBQ3JCQSxLQUFVLENBQUEsR0FBSSxJQUFJLENBQUFqc0IsTUFBUyxLQUFLLGtCQUFrQkEsQ0FBSyxDQUFDLElBQ3pELEtBQUssa0JBQWtCaXNCLENBQU0sR0FDakMsS0FBSyxTQUFTO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxhQUFPLEtBQUssbUJBQW1CLEtBQUs7QUFBQSxJQUNyQztBQUFBLElBRUQsVUFBVXRvQixFQUFrQixZQUFZO0FBQUEsTUFDdEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLElBRUQsWUFBWUEsRUFBa0IsY0FBYztBQUFBLE1BQzFDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxJQUVELFVBQVVBLEVBQWtCLFlBQVk7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsSUFFRCxVQUFVQSxFQUFrQixZQUFZO0FBQUEsTUFDdEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLElBRUQsY0FBYztBQUNaLFVBQUksRUFBRSxhQUFBd3ZCLEdBQWEsWUFBQUMsR0FBWSxVQUFBQyxNQUFhLEtBQUs7QUFDakQsYUFBSWpzQixHQUFVK3JCLENBQVcsTUFDdkJBLElBQWNBLElBQWMsU0FBWSxPQUVuQ0EsTUFBZ0IsU0FDbkJDLEtBQWNDLElBQ1osbUJBQW1CLEtBQUssVUFDeEJELElBQ0Usb0JBQW9CLEtBQUssVUFDekIsU0FDSkQ7QUFBQSxJQUNMO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxhQUFPLEtBQUssYUFBYSxLQUFLLE1BQU0sUUFBUTtBQUFBLElBQzlDO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUNSLElBQUksS0FBSyxhQUdQLEtBQUssTUFBTTtBQUFBLEVBRWQ7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGFBQWFHLEdBQUs7QUFDaEIsVUFBSSxLQUFLLFVBQVU7QUFDakIsY0FBTSxFQUFFLGFBQUE5RyxHQUFhLGFBQUFELEVBQVksSUFBSSxNQUMvQk4sSUFDSk8sS0FBZUQsSUFDWDtBQUFBLFVBQ0UsQ0FBQ0MsQ0FBVyxHQUFHOEc7QUFBQTtBQUFBO0FBQUEsVUFHZixDQUFDL0csQ0FBVyxHQUFHK0c7QUFBQSxRQUNqQixJQUNBQTtBQUNOLG9CQUFLLFFBQVEsS0FBS3JILENBQU0sR0FDakJBO0FBQUE7QUFBQSxJQUVWO0FBQUEsSUFFRCxlQUFlO0FBQ2IsV0FBSyxNQUFNLFFBQVEsU0FBUztBQUFBLElBQzdCO0FBQUEsSUFFRCxjQUFjO0FBQ1osV0FBSyxNQUFNLFFBQVEsV0FBVztBQUFBLElBQy9CO0FBQUEsSUFFRCxTQUFTO0FBQ1AsV0FBSyxXQUFXO0FBQUEsSUFDakI7QUFBQSxJQUVELFVBQVU7QUFHUixNQUFJLEtBQUssV0FDUCxLQUFLLE9BQU87QUFBQSxJQUVmO0FBQUEsSUFFRCxTQUFTO0FBQ1AsTUFBSyxLQUFLLE1BQU0sUUFBUSxVQUN0Qi9uQixHQUFVLFFBQVEsT0FBTyxLQUFLLElBQUk7QUFBQSxJQUVyQztBQUFBLElBRUQsU0FBU292QixHQUFLO0FBQ1osWUFBTXJILElBQVMsS0FBSyxhQUFhcUgsQ0FBRztBQUNwQyxNQUFJckgsS0FDRixLQUFLLE1BQU0sS0FBSyxLQUFLLGtCQUFrQkEsQ0FBTSxDQUFDO0FBQUEsSUFFakQ7QUFBQSxJQUVELE1BQU0sZUFBZXRhLEdBQU87QUFDMUIsTUFBSSxLQUFLLGlCQUNIQSxLQUdGLEtBQUssa0JBQWtCLENBQUMsR0FDeEIsS0FBSyxrQkFBa0IsTUFBTSxLQUFLO0FBQUEsUUFDaEMsTUFBTSxLQUFLLGFBQWEsSUFBSXhSLEVBQVksTUFBTSxFQUFFLE9BQUF3UixFQUFNLENBQUMsQ0FBQztBQUFBLE1BQzFELEtBR0EsS0FBSyxrQkFBa0I7QUFBQSxJQUc3QjtBQUFBLEVBQ0Y7QUFDRixDQUFDLGlEQ3hOYzRoQixLQUFBO0FBQUEsRUFDYixVQUFVO0FBQUEsSUFDUixZQUFZO0FBQUEsTUFDVixNQUFNO0FBQ0osZUFBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFFBQVE7QUFBQSxNQUMzQztBQUFBLE1BRUQsSUFBSXZ6QixHQUFPO0FBQ1QsYUFBSyxRQUNIQSxNQUFVLEtBQ04sS0FBSyxZQUNILFNBQVNBLEdBQU8sRUFBRSxJQUNsQixXQUFXQSxDQUFLLElBQ2xCO0FBQUEsTUFDUDtBQUFBLElBQ0Y7QUFBQTtBQUFBLElBR0QsWUFBWTtBQUNWLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxZQUFZO0FBR1YsYUFBTyxLQUFLLFlBQ1IsT0FDQSxLQUFLLFFBQVEsUUFBUSxDQUFDLEtBQUssWUFDekIsUUFDQSxLQUFLO0FBQUEsSUFDWjtBQUFBLElBRUQsVUFBVTJELEVBQWtCLFlBQVk7QUFBQSxNQUN0QyxNQUFNO0FBQUEsSUFDWixDQUFLO0FBQUEsSUFFRCxNQUFNQSxFQUFrQixRQUFRO0FBQUEsTUFDOUIsTUFBTTtBQUFBLE1BQ04sSUFBSXVTLEdBQU07QUFFUixlQUFPLEtBQUssYUFBYUEsS0FBUSxPQUFPLEtBQUssS0FBS0EsQ0FBSSxJQUFJQTtBQUFBLE1BQzNEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxLQUFLdlMsRUFBa0IsT0FBTztBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLElBQUluQixHQUFLOztBQUNQLGVBQUFBLElBQ0VBLE1BQVEsVUFDSnBCLElBQUEsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLE1BQUssQ0FBRSxNQUE1QyxnQkFBQUEsRUFBZ0QsS0FDaERvQixHQUNDLEtBQUssYUFBYUEsS0FBTyxPQUFPLEtBQUssTUFBTUEsQ0FBRyxJQUFJQTtBQUFBLE1BQzFEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxLQUFLbUIsRUFBa0IsT0FBTztBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLElBQUlwQixHQUFLOztBQUNQLGVBQUFBLElBQ0VBLE1BQVEsVUFDSm5CLElBQUEsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLE1BQUssQ0FBRSxNQUE1QyxnQkFBQUEsRUFBZ0QsS0FDaERtQixHQUNDLEtBQUssYUFBYUEsS0FBTyxPQUFPLEtBQUssS0FBS0EsQ0FBRyxJQUFJQTtBQUFBLE1BQ3pEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxPQUFPb0IsRUFBa0IsU0FBUztBQUFBLE1BQ2hDLE1BQU07QUFBQSxNQUNOLE1BQU07QUFHSixjQUFNLEVBQUUsS0FBQW5CLEdBQUssS0FBQUQsRUFBRyxJQUFLO0FBQ3JCLGVBQU9DLEtBQU8sUUFBUUQsS0FBTyxPQUFPLENBQUNDLEdBQUtELENBQUcsSUFBSTtBQUFBLE1BQ2xEO0FBQUEsTUFFRCxJQUFJRyxHQUFPO0FBR1QsUUFBSTlCLEVBQVE4QixDQUFLLE1BQ2QsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUlBO0FBQUEsTUFFM0I7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxpQkFBaUI7QUFDZixZQUFNVyxJQUFjLENBQUUsR0FDaEIsRUFBRSxPQUFBWCxHQUFPLEtBQUFGLEdBQUssS0FBQUQsR0FBSyxVQUFBUixHQUFVLE1BQUFtVSxFQUFJLElBQUs7QUFXNUMsVUFWSXhULElBQ0ZXLEVBQVksUUFBUVgsS0FFaEJGLEtBQU8sU0FDVGEsRUFBWSxNQUFNYixJQUVoQkQsS0FBTyxTQUNUYyxFQUFZLE1BQU1kLEtBR2xCUixLQUFZO0FBQ2QsUUFBQXNCLEVBQVksV0FBV3RCO0FBQUEsZUFDZG1VLEdBQU07QUFDZixjQUFNblUsS0FBWSxHQUFHbVUsSUFBTyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSTtBQUNqRCxRQUFJblUsSUFBVyxJQUNic0IsRUFBWSxXQUFXdEIsSUFFdkJzQixFQUFZLFVBQVU7QUFBQTtBQUcxQixhQUFJLEtBQUssY0FDUEEsRUFBWSxVQUFVLEtBRWpCQTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0ZBLE1BQUt1UyxLQUFhc1YsRUFBa0I7QUFBQSxFQUNsQyxDQUFDLFVBQVUsU0FBUztBQUFBO0FBQUEsRUFFcEI7QUFBQSxJQUNFLFFBQVEsQ0FBQ3FJLEVBQVc7QUFBQSxJQUNwQixZQUFZLEVBQUUsWUFBQWphLEdBQVk7QUFBQSxJQUMxQixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFFWCxVQUFVO0FBQUEsTUFDUixZQUFZO0FBQ1YsZUFBTyxLQUFLLFNBQVM7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN5QkEsV0FBa0I0UixFQUFrQixTQUFTLFVBQU87QUFBQSxFQUNsRCxRQUFRLENBQUN1QyxFQUFXO0FBQUEsRUFFcEIsY0FBYzVwQixHQUFNO0FBRWxCLFdBQU9BO0FBQUEsRUFDUjtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsY0FBYztBQUVaLGFBQU8sS0FBSyxjQUNSLEtBQUssYUFBYSxLQUFLLFFBQVEsS0FBSyxZQUFZLEVBQUUsVUFBVSxJQUFNLElBQ2xFO0FBQUEsSUFDTjtBQUFBLEVBQ0Q7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGFBQWE7QUFDWCxhQUFPLElBQUkxRCxFQUFZLE1BQU0sRUFBRSxNQUFNLEtBQUssWUFBWTtBQUFBLElBQ3hEO0FBQUEsRUFDRDtBQUFBLEVBRUQsTUFBTSxjQUNKd0ssR0FDQTVFLEdBQ0EvQixHQUNBNEcsR0FDQUMsR0FDQTFNLElBQVMsSUFDVCtILElBQVUsSUFDVjZFLElBQVUsTUFDVjtBQUNBLFVBQU0sUUFBUSxJQUFJO0FBQUEsTUFDaEJULEdBQXVCdkUsQ0FBTTtBQUFBLE1BQzdCMG5CLEdBQVk7QUFBQSxRQUNWOWlCO0FBQUEsUUFDQTVFO0FBQUEsUUFDQS9CO0FBQUEsUUFDQTRHO0FBQUEsUUFDQUM7QUFBQSxRQUNBMU07QUFBQSxRQUNBK0g7QUFBQSxRQUNBNkU7QUFBQSxNQUNGO0FBQUEsS0FDRDtBQUFBLEVBQ0g7QUFDRixDQUFDLHNEQzNHaUJtZ0IsRUFBa0IsU0FBUyxTQUFNO0FBQUEsRUFDakQsY0FBYyxNQUFBO0FBQUE7QUFBQTtBQUFBLEVBQ2QsY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUFBLEVBQ2YsYUFBYTtBQUFBLEVBRWIsZUFBZXZnQixHQUFLNUUsR0FBUTtBQUcxQixVQUFNLEVBQUUsTUFBQS9CLEdBQU0sR0FBR29ILEVBQU0sSUFBSXJGO0FBQzNCLFdBQU9xRjtBQUFBLEVBQ1Q7QUFDRixDQUFDOzs7Ozs7Ozs7O0FDREQsV0FBa0I4ZixFQUFrQixTQUFTLFlBQVM7QUFBQSxFQUNwRCxRQUFRLENBQUNxSSxFQUFXO0FBQUEsRUFDcEIsVUFBVTtBQUFBLElBQ1IsZ0JBQWdCO0FBQ2QsVUFBSSxFQUFFLE9BQUF2ekIsR0FBTyxPQUFBMEMsR0FBTyxNQUFBd1QsRUFBTyxJQUFFO0FBQzdCLGFBQUlsVyxNQUFVLFFBQ1IwQyxNQUNGMUMsS0FBUzBDLEVBQU0sQ0FBQyxJQUVkd1QsTUFDRmxXLElBQVEsS0FBSyxNQUFNQSxJQUFRa1csQ0FBSSxJQUFJQSxNQUdyQ2xXLElBQVEsSUFFSEE7QUFBQSxJQUNSO0FBQUEsSUFFRCxjQUFjO0FBQ1osWUFBTSxFQUFFLE9BQUEwQyxFQUFNLElBQUk7QUFDbEIsYUFBT0EsSUFBUUEsRUFBTSxDQUFDLElBQUlBLEVBQU0sQ0FBQyxJQUFJO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkRCxXQUFrQndvQixFQUFrQixTQUFTLFNBQU07QUFBQSxFQUNqRCxRQUFRLENBQUNRLEVBQVk7QUFBQSxFQUVyQixhQUFhO0FBQUEsRUFDYixjQUFjO0FBQ2hCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1BELFdBQWtCUixFQUFrQixTQUFTLFdBQVE7QUFBQSxFQUNuRCxjQUFjLE1BQUE7QUFBQTtBQUFBO0FBQUEsRUFDZCxvQkFBb0IsQ0FBQW5sQixNQUFVLENBQUNBLEVBQU8sVUFBVSxFQUFFLGFBQWFBO0FBQUEsRUFDL0QsZUFBZTtBQUFBLEVBQ2YsZUFBZTtBQUFBLEVBRWYsVUFBVTtBQUFBLElBQ1IsT0FBTztBQUNMLGFBQU8sS0FBSyxTQUFTLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFDeEM7QUFBQSxJQUVELGFBQWFwQyxFQUFrQixlQUFlO0FBQUEsTUFDNUMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBO0FBQUEsTUFDVCxJQUFJa3FCLEdBQWE7QUFDZixlQUFPLENBQUMsRUFBRUEsS0FBZSxLQUFLLGNBQWM7QUFBQSxNQUM5QztBQUFBLElBQ0YsQ0FBQztBQUFBLElBRUQsV0FBV2xxQixFQUFrQixhQUFhO0FBQUEsTUFDeEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLEtBQ1Y7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxtQkFBQXdKO0FBQUEsRUFDRDtBQUFBLEVBRUQsTUFBTSxjQUFjeEMsR0FBSzVFLEdBQVEvQixHQUFNNEcsR0FBUUMsR0FBTztBQUVwRCxVQUFNSCxHQUF3QkMsR0FBSzVFLEdBQVE2RSxHQUFRQyxDQUFLO0FBQUEsRUFDMUQ7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDR0QsV0FBa0JxZ0IsRUFBa0IsU0FBUyxVQUFPO0FBQUEsRUFDbEQsUUFBUSxDQUFDUSxFQUFZO0FBQUEsRUFFckIsYUFBYTtBQUFBLEVBRWIsT0FBTztBQUNMLFdBQU87QUFBQTtBQUFBO0FBQUEsTUFHTCxVQUFVO0FBQUEsSUFDWjtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Q0QsV0FBa0JSLEVBQWtCLFNBQVMsVUFBTztBQUFBLEVBQ2xELFFBQVEsQ0FBQ3FJLEVBQVc7QUFBQSxFQUNwQixZQUFZLEVBQUUsWUFBQWphLEdBQVk7QUFBQSxFQUMxQixhQUFhO0FBQUEsRUFFYixVQUFVO0FBQUE7QUFBQSxJQUVSLE9BQU8zVixFQUFrQixTQUFTO0FBQUEsTUFDaEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLEtBQ1Y7QUFBQSxFQUNIO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7O0FDM0JELFdBQWtCdW5CLEVBQWtCLFNBQVMsVUFBTztBQUFBLEVBQ2xELGNBQWM7QUFBQSxFQUNkLGNBQWM7QUFBQSxFQUVkLFlBQVk7QUFBQSxJQUNWLGNBQUFzSTtBQUFBLEVBQ0Q7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLFNBQVM7QUFDUCxhQUFPLEtBQUssT0FBTztBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUNGLENBQUMsaURDdkJjQyxLQUFBO0FBQUEsRUFDYixVQUFVO0FBQUEsSUFDUixNQUFNOXZCLEVBQWtCLFFBQVE7QUFBQSxNQUM5QixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDZixDQUFLO0FBQUEsRUFDRjtBQUFBLEVBRUQsYUFBYW9DLEdBQVEvRixHQUFPO0FBQzFCLFdBQUkrRixFQUFPLFFBQVEvRixLQUFTLFFBQVErRCxFQUFTL0QsQ0FBSyxNQUdoREEsSUFBUUEsRUFBTSxLQUFNLElBRWxCQSxNQUFVLE9BQ1pBLElBQVE4TixHQUFnQi9ILENBQU0sSUFFekIvRjtBQUFBLEVBQ1I7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hBLE1BQU0wekIsS0FBaUIsb0JBRWxCOWQsS0FBYXNWLEVBQWtCO0FBQUEsRUFDbEM7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFBQTtBQUFBLEVBRUQ7QUFBQSxJQUNFLFFBQVEsQ0FBQ3VJLEVBQVM7QUFBQSxJQUNsQixZQUFZLEVBQUUsWUFBQW5hLEdBQVk7QUFBQSxJQUMxQixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFDWCxvQkFBb0IsQ0FBQXZULE1BQVVBLEVBQU8sU0FBUztBQUFBLElBRTlDLFVBQVU7QUFBQSxNQUNSLFlBQVk7QUFDVixlQUNFO0FBQUEsVUFDRSxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixRQUFRO0FBQUEsVUFDUixLQUFLLElBQUksS0FDWCxLQUFLO0FBQUEsTUFFUjtBQUFBLE1BRUQsWUFBWTtBQUFBLFFBQ1YsTUFBTTtBQUNKLGlCQUNFLEtBQUssU0FBUyxjQUNkLEtBQUssVUFBVSxVQUNmLENBQUMsS0FBSyxVQUVKMnRCLEtBQ0EsS0FBSztBQUFBLFFBQ1Y7QUFBQSxRQUVELElBQUkxekIsR0FBTztBQUNULGVBQUssUUFBUUE7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLElBQ0Q7QUFBQSxJQUVELFNBQVM7QUFBQSxNQUNQLGlCQUFpQjtBQUNmLGNBQU1rRCxJQUFPO0FBQUEsVUFDWCxPQUFPO0FBQUEsVUFDUCxLQUFLO0FBQUEsVUFDTCxVQUFVO0FBQUEsVUFDVixRQUFRO0FBQUEsVUFDUixVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsVUFDWixLQUFLLElBQUk7QUFDWCxlQUFPQSxJQUFPLEVBQUUsQ0FBQ0EsQ0FBSSxHQUFHLEdBQU8sSUFBRSxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7Ozs7Ozs7Ozs7OztBQ3BFQSxXQUFrQmdvQixFQUFrQixTQUFTLFlBQVM7QUFBQSxFQUNwRCxRQUFRLENBQUN1SSxFQUFTO0FBQUEsRUFDbEIsYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBLEVBRVgsVUFBVTtBQUFBLElBQ1IsUUFBUTtBQUNOLGFBQU8sS0FBSyxPQUFPLFNBQVM7QUFBQSxJQUM3QjtBQUFBLElBRUQsV0FBVzl2QixFQUFrQixhQUFhO0FBQUEsTUFDeEMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLEtBQ1Y7QUFBQSxFQUNIO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNERCxNQUFLaVMsS0FBYXNWLEVBQWtCO0FBQUEsRUFDbEMsQ0FBQyxhQUFhLGFBQWE7QUFBQTtBQUFBLEVBRTNCO0FBQUEsSUFDRSxRQUFRLENBQUN1QyxFQUFXO0FBQUEsSUFFcEIsVUFBVTtBQUNSLGFBQU8sRUFBRSxXQUFXLEtBQUs7QUFBQSxJQUMxQjtBQUFBLElBRUQsY0FBYzVwQixHQUFNO0FBQ2xCLGFBQU9BLE1BQVMsZ0JBQWdCLFdBQVc7QUFBQSxJQUM1QztBQUFBLElBRUQsVUFBVTtBQUFBLE1BQ1IsT0FBTzs7QUFFTCxnQkFBT3pDLElBQUEsS0FBSyxrQkFBTCxnQkFBQUEsRUFBb0I7QUFBQSxNQUM1QjtBQUFBLE1BRUQsV0FBVzs7QUFFVCxlQUFPLEtBQUssT0FBTyxLQUFLLE9BQU1BLElBQUEsS0FBSyxTQUFMLGdCQUFBQSxFQUFXLE1BQU07QUFBQSxNQUNoRDtBQUFBLE1BRUQsV0FBVztBQUNULGVBQU8sS0FBSyxlQUNSLEVBQUUsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sSUFDMUIsS0FBSztBQUFBLE1BQ1Y7QUFBQSxNQUVELGVBQWU7QUFHYixlQUFPLEtBQUssZUFDUixLQUFLLFNBQVMsTUFBTSxHQUFHLEtBQUssU0FBUyxTQUFTLEtBQUssS0FBSyxNQUFNLElBQzlELEtBQUs7QUFBQSxNQUNWO0FBQUEsTUFFRCxhQUFhO0FBQ1gsZUFBTyxLQUFLLGVBQ1I7QUFBQSxVQUNFLFVBQVU7QUFBQSxZQUNSLE1BQU0sS0FBSztBQUFBLFlBQ1gsR0FBRyxLQUFLO0FBQUEsVUFDVjtBQUFBLFFBQ0YsSUFDQSxLQUFLO0FBQUEsTUFDVjtBQUFBLE1BRUQsbUJBQW1CO0FBQ2pCLGNBQU11eUIsSUFBbUIsQ0FBQTV0QixNQUVyQnlHLEdBQWN6RyxDQUFNLE1BQ2xCLEtBQUssZUFBZSxZQUFZO0FBQUEsVUFDOUIsTUFBTTtBQUFBLFVBQ04sU0FBUztBQUFBLFVBQ1QsUUFBQUE7QUFBQSxRQUNGLENBQUMsS0FDREEsRUFBTyxZQUNQNHRCLEVBQWlCNXRCLEVBQU8sUUFBUTtBQUl0QyxlQUFPNHRCLEVBQWlCLEtBQUssTUFBTTtBQUFBLE1BQ3JDO0FBQUEsSUFDRDtBQUFBLElBRUQsTUFBTSxjQUNKaHBCLEdBQ0E1RSxHQUNBL0IsR0FDQTRHLEdBQ0FDLEdBQ0ExTSxJQUFTLElBQ1QrSCxJQUFVLElBQ1Y2RSxJQUFVLE1BQ1Y7QUFDQSxZQUFNLFFBQVEsSUFBSTtBQUFBLFFBQ2hCTixHQUF3QjFFLEVBQU8sVUFBVTtBQUFBLFFBQ3pDMG5CLEdBQVk7QUFBQSxVQUNWOWlCO0FBQUEsVUFDQTVFO0FBQUEsVUFDQS9CO0FBQUEsVUFDQTRHO0FBQUEsVUFDQUM7QUFBQSxVQUNBMU07QUFBQSxVQUNBK0g7QUFBQTtBQUFBLFVBRUEsQ0FBQ29vQixHQUFhempCLE1BQVU7QUFDdEIsa0JBQU0sRUFBRSxVQUFBWSxNQUFhMUY7QUFDckIsZ0JBQUkwRjtBQUVGLHFCQUFBQSxFQUFTLE9BQU8sYUFFVCxLQUFLO0FBQUEsZ0JBQ1ZkO0FBQUEsZ0JBQ0FjO0FBQUEsZ0JBQ0FBLEVBQVM7QUFBQSxnQkFDVDZpQjtBQUFBLGdCQUNBempCO0FBQUEsZ0JBQ0ExTTtBQUFBLGdCQUNBO0FBQUE7QUFBQSxnQkFDQTRNO0FBQUEsY0FDRjtBQUFBLFVBRUo7QUFBQSxRQUNGO0FBQUEsT0FDRDtBQUFBLElBQ0Y7QUFBQSxJQUVELDRCQUE0QmhGLEdBQVFwRyxHQUFTO0FBRzNDLFlBQU0sRUFBRSxVQUFBOEwsTUFBYTFGO0FBQ3JCLGFBQU8rRjtBQUFBLFFBQ0wvRjtBQUFBLFFBQ0FwRztBQUFBLFFBQ0E4TCxJQUNJLENBQUFNLE9BQVM7QUFBQSxVQUNQLEdBQUdBO0FBQUEsVUFDSCxZQUFZO0FBQUEsWUFDVixHQUFHQSxFQUFLO0FBQUEsWUFDUixDQUFDTixFQUFTLElBQUksR0FBR0E7QUFBQSxVQUNuQjtBQUFBLGFBRUY7QUFBQSxNQUNOO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQy9KTyxTQUFTbW9CLEdBQWU5YSxHQUFNO0FBQ25DLFNBQU8rYSxHQUFTL2EsR0FBTSxFQUFFLE1BQU0sR0FBRSxDQUFFO0FBQ3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZ0pBLFdBQWtCb1MsRUFBa0IsU0FBUyxVQUFPO0FBQUEsRUFDbEQsUUFBUSxDQUFDakUsRUFBYTtBQUFBLEVBQ3RCLFlBQVksRUFBRSxXQUFBNk0sR0FBVztBQUFBLEVBRXpCLE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxTQUFTLENBQUM7QUFBQSxJQUNaO0FBQUEsRUFDRDtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsU0FBUztBQUNQLGFBQU8sS0FBSyxNQUFNO0FBQUEsSUFDbkI7QUFBQSxJQUVELGNBQWM7QUFDWixhQUFPLEtBQUssV0FBVyxpQkFBaUI7QUFBQSxJQUN6QztBQUFBLElBRUQsUUFBUTtBQUNOLGFBQU9DLEdBQVEsS0FBSyxLQUFLO0FBQUEsSUFDMUI7QUFBQSxJQUVELGVBQWU7QUFDYixhQUFPLEtBQUssTUFBTSxJQUFJLENBQUMxSyxHQUFNcnFCLE1BQVUsS0FBSyxlQUFlcXFCLEdBQU1ycUIsQ0FBSyxDQUFDO0FBQUEsSUFDeEU7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQU8sS0FBSyxNQUFNLElBQUksQ0FBQ3FxQixHQUFNcnFCLE1BQVUsS0FBSyxnQkFBZ0JxcUIsR0FBTXJxQixDQUFLLENBQUM7QUFBQSxJQUN6RTtBQUFBLElBRUQsVUFBVTJFLEVBQWtCLFlBQVk7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUE7QUFBQSxNQUVULFVBQVU7QUFBQSxJQUNaLENBQUM7QUFBQSxJQUVELFlBQVlBLEVBQWtCLGNBQWM7QUFBQSxNQUMxQyxNQUFNLENBQUMsT0FBTyxRQUFRLE1BQU07QUFBQSxJQUM5QixDQUFDO0FBQUEsSUFFRCxRQUFRQSxFQUFrQixVQUFVO0FBQUEsTUFDbEMsTUFBTTtBQUFBLE1BQ04sSUFBSXF3QixHQUFRO0FBQ1YsZUFBT3B6QixFQUFRb3pCLENBQU0sSUFBSUEsRUFBTyxLQUFLLEdBQUcsSUFBSUE7QUFBQSxNQUM5QztBQUFBLElBQ0YsQ0FBQztBQUFBLElBRUQsU0FBU3J3QixFQUFrQixXQUFXO0FBQUEsTUFDcEMsTUFBTSxDQUFDLFFBQVEsTUFBTTtBQUFBLE1BQ3JCLElBQUlzd0IsR0FBUztBQUNYLGVBQU9BLElBQVVDLEdBQWNELENBQU8sSUFBSTtBQUFBLE1BQzVDO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFFRCxXQUFXdHdCLEVBQWtCLGFBQWE7QUFBQSxNQUN4QyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxJQUFJaXFCLEdBQVc7QUFDYixlQUFPQSxLQUFhLEtBQUssTUFBTSxTQUFTO0FBQUEsTUFDMUM7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUVELFdBQVdqcUIsRUFBa0IsYUFBYTtBQUFBLE1BQ3hDLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxJQUVELFFBQVFBLEVBQWtCLFVBQVU7QUFBQSxNQUNsQyxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsSUFFRCxZQUFZQSxFQUFrQixjQUFjO0FBQUEsTUFDMUMsTUFBTSxDQUFDLFNBQVMsTUFBTTtBQUFBLE1BQ3RCLFFBQVF3d0IsR0FBWTtBQUNsQixlQUFPQSxLQUFjLENBQUMsQ0FBQyxLQUFLLE9BQU87QUFBQSxNQUNwQztBQUFBLE1BQ0QsSUFBSUEsR0FBWTtBQUNkLGVBQU9BLE1BQWUsS0FBTyxXQUFXQSxLQUFjO0FBQUEsTUFDeEQ7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUVELFdBQVc7QUFDVCxhQUFPLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDNUI7QUFBQSxJQUVELGFBQWE7QUFDWCxhQUFPLEtBQUssUUFBUSxTQUFTO0FBQUEsSUFDOUI7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQ0UsS0FBSyxjQUNMLEVBQUUsS0FBSyxPQUFPLFVBQVUsS0FBSyxPQUFPO0FBQUEsSUFFdkM7QUFBQSxJQUVELGlCQUFpQjtBQUNmLGFBQU8sS0FBSyxjQUFjLEtBQUssT0FBTztBQUFBLElBQ3ZDO0FBQUEsSUFFRCxpQkFBaUI7QUFDZixhQUNFLEtBQUssUUFBUSxPQUFPLENBQUNwWixHQUFPc08sTUFBU3RPLElBQVEsQ0FBQ3NPLEVBQUssVUFBVSxDQUFDLElBQzlELEtBQUssUUFBUTtBQUFBLElBRWhCO0FBQUEsSUFFRCxhQUFhO0FBQ1gsYUFBTyxLQUFLLGVBQWU7QUFBQSxRQUN6QixNQUFNO0FBQUEsUUFDTixNQUFNLEtBQUssSUFBSSxjQUFjLEtBQUssUUFBUTtBQUFBLE9BQzNDO0FBQUEsSUFDSDtBQUFBLEVBQ0Q7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLGNBQWMrSyxHQUFPO0FBQ25CLE1BQUlBLEtBRUYsS0FBSyxVQUFVLE1BQU07QUFDbkIsYUFBSyxPQUFPLFNBQVM7QUFBQSxPQUN0QjtBQUFBLElBRUw7QUFBQSxFQUNEO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxnQkFBQVI7QUFBQSxJQUVBLGVBQWV2SyxHQUFNcnFCLEdBQU87QUFDMUIsYUFBTyxLQUFLLFdBQ1IsSUFBSW1CLEVBQVksTUFBTTtBQUFBLFFBQ3BCLE9BQU9rcEI7QUFBQSxRQUNQLE1BQU0sS0FBSztBQUFBLFFBQ1gsT0FBQXJxQjtBQUFBLFFBQ0EsVUFBVXBCLEVBQWUsS0FBSyxVQUFVb0IsQ0FBSztBQUFBLE9BQzlDLElBQ0QsS0FBSztBQUFBLElBQ1Y7QUFBQSxJQUVELFdBQVdxcUIsR0FBTXJxQixHQUFPO0FBQ3RCLGFBQU8sS0FBSyxPQUFPLEtBQUssZUFBZXFxQixHQUFNcnFCLENBQUssQ0FBQztBQUFBLElBQ3BEO0FBQUEsSUFFRCxlQUFlcXFCLEdBQU1ycUIsR0FBTztBQUMxQixhQUFPcXFCLEVBQUssTUFDUkEsRUFBSyxNQUNMLENBQUNBLEVBQUssVUFBVUEsRUFBSyxPQUFPLFVBQzFCLEtBQUssZUFBZSxlQUFlO0FBQUEsUUFDakMsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUyxLQUFLLGVBQWVBLEdBQU1ycUIsQ0FBSztBQUFBLE9BQ3pDLElBQ0Q7QUFBQSxJQUNQO0FBQUEsSUFFRCxnQkFBZ0JxcUIsR0FBTXJxQixHQUFPO0FBQzNCLGFBQU8sQ0FBQ3FxQixFQUFLLFVBQVVBLEVBQUssT0FBTyxVQUMvQixLQUFLLGVBQWUsZ0JBQWdCO0FBQUEsUUFDbEMsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUyxLQUFLLGVBQWVBLEdBQU1ycUIsQ0FBSztBQUFBLE9BQ3pDLE1BQ0NxcUIsRUFBSyxLQUFLLFdBQVcsUUFBUSxJQUN6QkEsRUFBSyxNQUNMLFFBRU47QUFBQSxJQUNMO0FBQUEsSUFFRCxXQUFXQSxHQUFNcnFCLEdBQU87QUFDdEIsWUFBTSxFQUFFLE1BQUFnRixFQUFLLElBQUlxbEI7QUFFakIsTUFDRUEsS0FDQSxPQUFPO0FBQUEsUUFDTCx5QkFBeUIsS0FBSyxNQUFNLFVBQVVybEI7QUFBQSxNQUNoRCxNQUVJLEtBQUssV0FDUCxLQUFLLE1BQU0sT0FBT2hGLEdBQU8sQ0FBQyxJQUUxQixLQUFLLFFBQVEsTUFFWHFxQixFQUFLLFVBQ1AsS0FBSyxPQUFPLE9BQU9BLEVBQUssTUFBTSxHQUVoQyxLQUFLLFNBQVMsR0FDZCxLQUFLLE9BQU87QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU0sR0FBR3JsQixTQUFZLEtBQUssTUFBTTtBQUFBLE9BQ2pDO0FBQUEsSUFFSjtBQUFBLElBRUQsYUFBYXFsQixHQUFNO0FBQ2pCLGFBQU8sS0FBSyxZQUFZLEtBQUssUUFDekIsS0FBSyxNQUFNLFVBQVUsQ0FBQXBNLE1BQU1BLEVBQUcsT0FBT29NLEVBQUssRUFBRSxJQUM1QztBQUFBLElBQ0w7QUFBQSxJQUVELFFBQVFBLEdBQU07QUFDWixNQUFJLEtBQUssV0FDSCxLQUFLLFFBQ1AsS0FBSyxNQUFNLEtBQUtBLENBQUksSUFFcEIsS0FBSyxRQUFRLENBQUNBLENBQUksSUFHcEIsS0FBSyxRQUFRQTtBQUFBLElBRWhCO0FBQUEsSUFFRCxZQUFZQSxHQUFNZ0wsR0FBUztBQUN6QixVQUFJLEtBQUssVUFBVTtBQUNqQixjQUFNcjFCLElBQVEsS0FBSyxhQUFhcXFCLENBQUk7QUFDcEMsUUFBSXJxQixLQUFTLE1BQ1BxMUIsSUFDRixLQUFLLE1BQU1yMUIsQ0FBSyxJQUFJcTFCLElBRXBCLEtBQUssTUFBTSxPQUFPcjFCLEdBQU8sQ0FBQztBQUFBO0FBSTlCLGFBQUssUUFBUXExQjtBQUFBLElBRWhCO0FBQUEsSUFFRCxXQUFXaEwsR0FBTTtBQUNmLFdBQUssWUFBWUEsR0FBTSxJQUFJO0FBQUEsSUFDNUI7QUFBQSxJQUVELFlBQVlnTCxHQUFTQyxHQUFTO0FBQzVCLFVBQUlELEtBQVcsQ0FBQ0MsR0FBUztBQUN2QixjQUFNLEVBQUUsSUFBQWgxQixHQUFJLE1BQUEwRSxHQUFNLE1BQUE4VSxFQUFPLElBQUV1YjtBQUMzQixhQUFLLFFBQVEsRUFBRSxJQUFBLzBCLEdBQUksTUFBQTBFLEdBQU0sTUFBQThVLEdBQU0sUUFBUXViLEdBQVM7QUFBQTtBQUVsRCxVQUFJQSxLQUFXQyxHQUFTO0FBQ3RCLGNBQU0sRUFBRSxTQUFBN04sR0FBUyxPQUFBOWtCLEVBQU0sSUFBSTB5QjtBQUMzQixZQUFJNU4sR0FBUztBQUNYLGVBQUssU0FBUztBQUNkLGdCQUFNNEMsSUFBT2dMLEVBQVEsU0FBUyxDQUFDO0FBQy9CLFVBQUloTCxLQUNGQSxFQUFLLFNBQVNnTCxHQUdkLEtBQUssWUFBWUEsR0FBU2hMLENBQUksS0FFOUIsS0FBSyxXQUFXZ0wsQ0FBTztBQUFBLG1CQUVoQjF5QixHQUFPO0FBQ2hCLGVBQUssV0FBVzB5QixDQUFPO0FBQ3ZCLGdCQUFNNVosSUFDSjtBQUFBLFlBQ0UsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsV0FBVywwQkFBMEI0WixFQUFRO0FBQUEsWUFDN0MsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsTUFBTSxzQkFBc0JULEdBQWVTLEVBQVEsSUFBSTtBQUFBLFlBQ3ZELFNBQVM7QUFBQSxVQUNWLEVBQUMxeUIsQ0FBSyxLQUNQLCtCQUErQkE7QUFFakMsZUFBSyxPQUFPO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFBOFk7QUFBQSxXQUNEO0FBQUE7QUFBQTtBQUFBLElBR047QUFBQSxJQUVELGNBQWM0WixHQUFpQzs7QUFDN0MsWUFBTUUsSUFBTUYsS0FBQSxnQkFBQUEsRUFBUztBQUNyQixPQUFJanpCLElBQUEsS0FBSyxJQUFJLFNBQVQsUUFBQUEsRUFBZSxlQUFlbXpCLEtBQU8sQ0FBQ0EsRUFBSSxvQkFDNUNBLEVBQUksa0JBQWtCO0FBQUEsSUFFekI7QUFBQSxJQUVELE1BQU0sZ0JBQWdCbEwsR0FBTXJxQixHQUFPO0FBQ2pDLFVBQUk7QUFFRixjQUFNdzFCLElBQU8sT0FESSxNQUFNLE1BQU0sS0FBSyxhQUFheDFCLENBQUssQ0FBQyxHQUN6QixLQUFLO0FBQ2pDLGFBQUssU0FBUztBQUFBLFVBQ1osVUFBVXFxQixFQUFLO0FBQUEsVUFDZixLQUFLLElBQUksZ0JBQWdCbUwsQ0FBSTtBQUFBLFNBQzlCO0FBQUEsTUFDRCxTQUFPN3lCLEdBQVA7QUFDQSxnQkFBUSxNQUFNQSxDQUFLO0FBQUEsTUFDckI7QUFBQSxJQUNEO0FBQUEsSUFFRCxjQUFjakIsR0FBTztBQUVuQixXQUFLLE9BQU8sSUFBSSxjQUFjLE9BQU8sRUFBRTtBQUFBLFFBQ3JDLElBQUlBLEVBQU0sWUFBWUEsRUFBTSxNQUFNQSxDQUFLO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQUFBLEVBRUQsYUFBYXFGLEdBQVEvRixHQUFPO0FBRTFCLFVBQU15MEIsSUFBUVYsR0FBUS96QixDQUFLLEVBQ3hCLElBQUksQ0FBQyxFQUFFLFFBQUErZSxHQUFRLEdBQUdzSyxFQUFNLE1BQU0sQ0FBQ3RLLEtBQVVBLEVBQU8sVUFBVXNLLElBQU8sSUFBSyxFQUN0RSxPQUFPLENBQUFBLE1BQVFBLENBQUk7QUFDdEIsV0FBT3RqQixFQUFPLFdBQVcwdUIsSUFBUUEsRUFBTSxDQUFDLEtBQUs7QUFBQSxFQUMvQztBQUNGLENBQUM7QUFFRCxTQUFTVixHQUFRL3pCLEdBQU87QUFDdEIsU0FBT0EsSUFBUW9GLEVBQVFwRixDQUFLLElBQUksQ0FBQztBQUNuQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0M5Y2UwMEIsS0FBQTtBQUFBLEVBQ2IsUUFBUW53QixHQUFNb3dCLEdBQVM7QUFDckIsSUFBQUMsR0FBY3J3QixHQUFNb3dCLEVBQVEsT0FBT0EsRUFBUSxHQUFHO0FBQUEsRUFDL0M7QUFBQSxFQUVELFVBQVVwd0IsR0FBTW93QixHQUFTO0FBQ3ZCLElBQUFFLEdBQWdCdHdCLEdBQU1vd0IsRUFBUSxPQUFPQSxFQUFRLEdBQUc7QUFBQSxFQUNqRDtBQUNIO0FBRU8sU0FBU0MsR0FBY3J3QixHQUFNNFMsR0FBUzdXLEdBQVM7QUFDcEQsRUFBQXcwQixHQUFTLFlBQVl4MEIsQ0FBTyxFQUFFLFFBQVFpRSxHQUFNNFMsQ0FBTztBQUNyRDtBQUVPLFNBQVMwZCxHQUFnQnR3QixHQUFNNFMsR0FBUzdXLEdBQVM7QUFDdEQsRUFBQXcwQixHQUFTLFlBQVl4MEIsQ0FBTyxFQUFFLFVBQVVpRSxHQUFNNFMsQ0FBTztBQUN2RDtBQUVPLE1BQU00ZCxLQUFvQixPQUFPLGlCQUFtQixLQUVyREMsS0FBWSxDQUFFO0FBRXBCLE1BQU1GLEdBQVM7QUFBQSxFQUNiLFlBQVlsMUIsR0FBS1UsR0FBUztBQUN4QixTQUFLLE1BQU1WLEdBQ1gsS0FBSyxVQUFVVSxHQUNmLEtBQUssV0FBV3kwQixLQUNaLElBQUksZUFBZSxDQUFBM3VCLE1BQVcsS0FBSyxPQUFPQSxDQUFPLENBQUMsSUFDbEQsTUFDSixLQUFLLGlCQUFpQixvQkFBSSxRQUFTLEdBQ25DLEtBQUssWUFBWTtBQUFBLEVBQ2xCO0FBQUEsRUFFRCxRQUFRN0IsR0FBTTRTLEdBQVM7O0FBQ3JCLFFBQUl4RSxJQUFXLEtBQUssZUFBZSxJQUFJcE8sQ0FBSTtBQUMzQyxJQUFLb08sTUFDSEEsSUFBVyxvQkFBSSxJQUFLLEdBQ3BCLEtBQUssZUFBZSxJQUFJcE8sR0FBTW9PLENBQVEsSUFDdEN2UixJQUFBLEtBQUssYUFBTCxRQUFBQSxFQUFlLFFBQVFtRCxHQUFNLEtBQUssVUFDbEMsS0FBSyxjQUVQb08sRUFBUyxJQUFJd0UsQ0FBTztBQUFBLEVBQ3JCO0FBQUEsRUFFRCxVQUFVNVMsR0FBTTRTLEdBQVM7O0FBQ3ZCLFVBQU14RSxJQUFXLEtBQUssZUFBZSxJQUFJcE8sQ0FBSTtBQUM3QyxJQUFJb08sS0FBQSxRQUFBQSxFQUFVLE9BQU93RSxNQUFZeEUsRUFBUyxTQUFTLE1BQ2pELEtBQUssZUFBZSxPQUFPcE8sQ0FBSSxJQUMvQm5ELElBQUEsS0FBSyxhQUFMLFFBQUFBLEVBQWUsVUFBVW1ELElBQ3JCLEVBQUUsS0FBSyxjQUFjLEtBQ3ZCLE9BQU95d0IsR0FBVSxLQUFLLEdBQUc7QUFBQSxFQUc5QjtBQUFBLEVBRUQsT0FBTzV1QixHQUFTO0FBQ2QsZUFBV2pGLEtBQVNpRixHQUFTO0FBQzNCLFlBQU11TSxJQUFXLEtBQUssZUFBZSxJQUFJeFIsRUFBTSxNQUFNO0FBQ3JELFVBQUl3UixHQUFVO0FBQ1osY0FBTWpTLElBQVE7QUFBQSxVQUNaLFFBQVFTLEVBQU07QUFBQSxVQUNkLGFBQWFBLEVBQU07QUFBQTtBQUFBLFVBRW5CLGVBQWVpRSxFQUFRakUsRUFBTSxhQUFhO0FBQUEsVUFDMUMsZ0JBQWdCaUUsRUFBUWpFLEVBQU0sY0FBYztBQUFBLFVBQzVDLDJCQUEyQmlFLEVBQVFqRSxFQUFNLHlCQUF5QjtBQUFBLFFBQ25FO0FBQ0QsbUJBQVdnVyxLQUFXeEU7QUFDcEIsVUFBQXdFLEVBQVF6VyxDQUFLO0FBQUE7QUFBQTtBQUFBLEVBSXBCO0FBQUEsRUFFRCxPQUFPLFlBQVksRUFBRSxLQUFBdTBCLElBQU0sY0FBYSxJQUFLLENBQUEsR0FBSTtBQUMvQyxVQUFNMzBCLElBQVUsRUFBRSxLQUFBMjBCLEVBQUssR0FDakJyMUIsSUFBTSxLQUFLLFVBQVVVLENBQU87QUFDbEMsV0FBQTAwQixHQUFBcDFCLE9BQUFvMUIsR0FBQXAxQixLQUFtQixJQUFJazFCLEdBQVNsMUIsR0FBS1UsQ0FBTyxJQUNyQzAwQixHQUFVcDFCLENBQUc7QUFBQSxFQUNyQjtBQUNIO0FDbEZBLE1BQWVxbEIsS0FBQTtBQUFBLEVBQ2I7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVU7QUFBQSxFQUNWO0FBQUEsRUFBVTtBQUFBLEVBQ1Y7QUFBQSxFQUFTO0FBQUEsRUFDVDtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBUztBQUNYLEVBQUUsT0FBTyxDQUFDQSxHQUFPdlQsT0FDZnVULEVBQU12VCxDQUFJLElBQUlBLEdBQ1B1VCxJQUNOLENBQUUsQ0FBQTtBQ0tVLE1BQU1pUSxHQUFVO0FBQUEsRUFDN0IsWUFBWXJkLEdBQUk7QUFBQTtBQUFBLElBRWQsTUFBQXNkLElBQU8sQ0FBRTtBQUFBLElBQ1QsS0FBQXhxQjtBQUFBLElBQ0EsT0FBQU4sSUFBUSxDQUFFO0FBQUEsSUFDVixHQUFHL0o7QUFBQSxFQUNKLElBQUcsSUFBSTtBQUNOLFNBQUssS0FBS3VYLEdBSVYsS0FBSyxNQUFNbE4sSUFBTWdCLEdBQWEsRUFBRSxNQUFNLE9BQU93cEIsRUFBSyxLQUFLeHFCLENBQUcsR0FDMUQsS0FBSyxVQUFVckssR0FHZnFLLEVBQUksV0FBSkEsRUFBSSxTQUFXLFVBQ2ZBLEVBQUksVUFBVWdCLEdBQWEsQ0FBRSxHQUFFNk4sSUFBZ0I3TyxFQUFJLE9BQU8sR0FDMURBLEVBQUksWUFBSkEsRUFBSSxVQUFZLENBQUFySyxNQUFXOGtCLEdBQVF6YSxHQUFLckssQ0FBTyxJQUMvQ3FLLEVBQUksY0FBSkEsRUFBSSxZQUFjLENBQUFySyxNQUFXODBCLEdBQVV6cUIsR0FBS3JLLENBQU8sSUFDbkRxSyxFQUFJLGFBQUpBLEVBQUksV0FBYSxDQUFBOUgsTUFBT3d5QixHQUFTMXFCLEdBQUs5SCxDQUFHLElBR3pDOEgsRUFBSSxrQkFBSkEsRUFBSSxnQkFBa0JBLEVBQUksaUJBQWlCbUksS0FBWSxDQUFBeWEsTUFBT0EsSUFDOUQ1aUIsRUFBSSxvQkFBSkEsRUFBSSxrQkFBb0JBLEVBQUksaUJBQWlCbEcsS0FBVyxDQUFBOG9CLE1BQU9BLElBaUIvRDVpQixFQUFJLGFBQUpBLEVBQUksV0FBYSxDQUFFO0FBbUJuQixVQUFNMnFCLElBQVF0a0IsR0FBWXJHLEVBQUksT0FBTztBQUFBLE1BQ25DLE1BQU07QUFBQSxJQUNQLENBQUEsS0FBSyxDQUFFO0FBQ1IsSUFBQTJxQixFQUFNLFFBQVF0a0IsR0FBWXNrQixFQUFNLFNBQVMsU0FBUztBQUFBLE1BQ2hELFFBQVE7QUFBQSxNQUNSLFFBQVFBO0FBQUEsSUFDZCxDQUFLLEdBQ0RBLEVBQU0sU0FBU3RrQixHQUFZc2tCLEVBQU0sVUFBVSxVQUFVO0FBQUEsTUFDbkQsUUFBUTtBQUFBLE1BQ1IsUUFBUUE7QUFBQSxJQUNkLENBQUssR0FDREEsRUFBTSxVQUFVdGtCLEdBQVlza0IsRUFBTSxXQUFXLFdBQVc7QUFBQSxNQUN0RCxRQUFRO0FBQUEsTUFDUixRQUFRQTtBQUFBLElBQ2QsQ0FBSyxHQUNEM3FCLEVBQUksUUFBUTJxQixHQVlaM3FCLEVBQUksWUFBWTtBQUFBLE1BQ2QsSUFBSW5LLEdBQVU7QUFDWixjQUFNMlcsSUFBVSxLQUFLM1csS0FBQSxnQkFBQUEsRUFBVSxJQUFJLEtBQUssS0FBSztBQUM3QyxlQUFPQSxLQUFZMlcsRUFBUSxLQUFLLE1BQU0zVyxDQUFRO0FBQUEsTUFDL0M7QUFBQSxNQUVELFFBQVFBLEdBQVU7QUFDaEIsY0FBTSswQixJQUFhLEtBQUssSUFBSS8wQixFQUFTLE1BQU07QUFDM0MsZUFBTyswQixJQUNILEdBQUdBLEtBQWMvMEIsRUFBUyxTQUMxQkEsRUFBUztBQUFBLE1BQ2Q7QUFBQSxNQUVELFdBQVdBLEdBQVU7QUFDbkIsZUFBTyxLQUFLLFFBQVFBLENBQVE7QUFBQSxNQUM3QjtBQUFBLE1BRUQsT0FBT0EsR0FBVTtBQUdmLGVBQU8sR0FBR0EsRUFBUyxRQUFRQSxFQUFTO0FBQUEsTUFDckM7QUFBQSxNQUVELE9BQU9BLEdBQVU7QUFFZixlQUFPLEdBQUcsS0FBSyxXQUFXQSxFQUFTLE1BQU0sWUFBWUEsRUFBUztBQUFBLE1BQy9EO0FBQUEsTUFFRCxHQUFHbUssRUFBSTtBQUFBLElBQ1IsR0FNREEsRUFBSSxVQUFVO0FBQUEsTUFDWixnQkFBZ0I7QUFBQSxNQUNoQixHQUFHQSxFQUFJO0FBQUEsSUFDUixHQUVHNUcsRUFBUzhULENBQUUsTUFDYkEsSUFBSyxTQUFTLGNBQWNBLENBQUU7QUFHaEMsVUFBTTJkLElBQU8sS0FBSyxNQUFNQyxHQUFVO0FBQUEsTUFDaEMsWUFBWTtBQUFBLFFBQ1YsVUFBQUM7QUFBQSxRQUNBLGtCQUFBQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSUEsR0FBRzFwQjtBQUFBLFFBQ0gsR0FBRy9EO0FBQUEsTUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0QsU0FBUztBQUFBLFFBQ1AsS0FBQXlDO0FBQUE7QUFBQTtBQUFBLFFBR0EsUUFBUSxNQUFNc2E7QUFBQTtBQUFBO0FBQUEsUUFHZCxRQUFRLE1BQU07QUFBQSxRQUFFO0FBQUEsUUFDaEIsY0FBYyxNQUFNO0FBQUEsUUFDcEIsa0JBQWtCLE1BQU07QUFBQSxRQUN4QixrQkFBa0IsTUFBTTtBQUFBLFFBQ3hCLHdCQUF3QixNQUFNO0FBQUEsUUFDOUIsaUJBQWlCLE1BQU07QUFBQSxRQUN2QixnQkFBZ0IsTUFBTTtBQUFBLFFBQ3RCLGtCQUFrQixNQUFNO0FBQUEsUUFDeEIsb0JBQW9CLE1BQU07QUFBQSxRQUMxQixrQkFBa0IsTUFBTTtBQUFBLFFBQ3hCLGlCQUFpQixNQUFNO0FBQUEsUUFDdkIsZUFBZSxNQUFNO0FBQUEsTUFDdEI7QUFBQSxNQUVELFFBQVEsTUFDTnZKLEdBQWNnYSxJQUFVO0FBQUEsUUFDdEIsS0FBSztBQUFBLFFBQ0wsT0FBT1AsRUFBSyxTQUFTO0FBQUEsUUFDckIsaUJBQWlCOXFCO0FBQUEsUUFDakIsU0FBQS9KO0FBQUEsTUFDVixDQUFTO0FBQUEsSUFDVCxDQUFLO0FBSUQsSUFBQWsxQixFQUFJLE9BQU8sZUFBZSxRQUFRLE9BRWxDQSxFQUFJLElBQUlHLElBQWtCO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sZUFBZTtBQUFBLElBQ3JCLENBQUssR0FFREgsRUFBSSxVQUFVLFVBQVVkLEVBQWUsR0FFdkNjLEVBQUk7QUFBQSxNQUNGSSxHQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJWCxRQUFRO0FBQUEsVUFDTjtBQUFBLFlBQ0UsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sWUFBWSxDQUFFO0FBQUEsVUFDZjtBQUFBLFFBQ0Y7QUFBQSxRQUNELFNBQVNDLEdBQWlCVixFQUFLLElBQUk7QUFBQSxRQUNuQyxpQkFBaUI7QUFBQSxRQUNqQixzQkFBc0I7QUFBQSxNQUM5QixDQUFPO0FBQUEsSUFDRixHQUVEdGQsRUFBRyxVQUFVLElBQUksVUFBVSxHQUMzQjJkLEVBQUksTUFBTTNkLENBQUU7QUFBQSxFQUNiO0FBQUEsRUFFRCxTQUFTaFUsR0FBTXZELEdBQVM7QUFDdEIsV0FBTzRxQixFQUFrQixTQUFTcm5CLEdBQU12RCxDQUFPO0FBQUEsRUFDaEQ7QUFDSDtBQUVBLE1BQU13MUIsV0FBcUIsTUFBTTtBQUFBLEVBQy9CLFlBQVloa0IsR0FBVTtBQUNwQjtBQUFBLE1BQ0Usb0NBQW9DQSxFQUFTLFdBQzNDQSxFQUFTO0FBQUEsSUFFWixHQUNELEtBQUssV0FBV0E7QUFBQSxFQUNqQjtBQUNIO0FBRUEsZUFBZXNULEdBQVF6YSxHQUFLO0FBQUEsRUFDMUIsS0FBQTlIO0FBQUEsRUFDQSxRQUFBK08sSUFBUztBQUFBO0FBQUE7QUFBQSxFQUdULFFBQUFxQixJQUFTO0FBQUEsRUFDVCxPQUFBdEIsSUFBUXNCLEtBQVU7QUFBQSxFQUNsQixTQUFBOGlCLElBQVU7QUFBQSxFQUNWLE1BQUE1MkIsSUFBTztBQUNULEdBQUc7O0FBQ0QsRUFBSThULEtBQ0YraUI7QUFBQSxJQUNFO0FBQUEsRUFDRDtBQUdILFFBQU1YLElBQVcxcUIsRUFBSSxTQUFTOUgsQ0FBRyxHQUUzQmlQLElBQVcsTUFBTSxNQUFNbkgsRUFBSSxVQUFVLEVBQUUsS0FBQTlILEdBQUssT0FBQThPLEVBQUssQ0FBRSxHQUFHO0FBQUEsSUFDMUQsUUFBUUMsRUFBTyxZQUFhO0FBQUEsSUFDNUIsR0FBSXpTLEtBQVEsRUFBRSxNQUFNLEtBQUssVUFBVUEsQ0FBSTtJQUN2QyxTQUFTO0FBQUEsTUFDUCxHQUFJazJCLEtBQVkxcUIsRUFBSTtBQUFBLE1BQ3BCLEdBQUdvckI7QUFBQSxJQUNKO0FBQUEsSUFDRCxhQUNFVixPQUFZajBCLElBQUF1SixFQUFJLFNBQUosUUFBQXZKLEVBQVUsZUFDbEIsWUFDQTtBQUFBLEVBQ1YsQ0FBRztBQU1ELE9BSkk4RCxJQUFBNE0sRUFBUyxRQUFRLElBQUksY0FBYyxNQUFuQyxRQUFBNU0sRUFBc0MsU0FBUyx3QkFDakQ0TSxFQUFTLE9BQU8sTUFBTUEsRUFBUyxLQUFNLElBR25DLENBQUNBLEVBQVM7QUFDWixVQUFNLElBQUlna0IsR0FBYWhrQixDQUFRO0FBRWpDLFNBQU9BO0FBQ1Q7QUFFQSxTQUFTdWpCLEdBQVMxcUIsR0FBSzlILEdBQUs7QUFDMUIsU0FBTyxDQUFDb3pCLEdBQWNwekIsQ0FBRyxLQUFLQSxFQUFJLFdBQVc4SCxFQUFJLEdBQUc7QUFDdEQ7QUFFQSxTQUFTeXFCLEdBQVV6cUIsR0FBSyxFQUFFLEtBQUE5SCxHQUFLLE9BQUE4TyxFQUFLLEdBQUk7QUFDdEMsRUFBS3NrQixHQUFjcHpCLENBQUcsTUFDcEJBLElBQU1xekIsR0FBWXZyQixFQUFJLEtBQUs5SCxDQUFHO0FBR2hDLFFBQU1ncEIsSUFBU3lCLEdBQVkzYixDQUFLO0FBQ2hDLFNBQU9rYSxJQUFTLEdBQUdocEIsS0FBT2dwQixNQUFXaHBCO0FBQ3ZDO0FBRUEsU0FBU3F6QixHQUFZQyxHQUFTQyxHQUFhO0FBRXpDLFNBQU8sR0FBR0QsRUFBUSxRQUFRLFFBQVEsRUFBRSxLQUFLQyxFQUFZLFFBQVEsUUFBUSxFQUFFO0FBQ3pFOyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOls0OSw4N119