@fairfox/polly 0.90.0 → 0.92.0

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.
Files changed (107) hide show
  1. package/dist/cli/polly.js +3 -3
  2. package/dist/cli/polly.js.map +3 -3
  3. package/dist/gallery/gallery.css +2 -2
  4. package/dist/gallery/gallery.js +248 -241
  5. package/dist/src/background/index.js +27 -11
  6. package/dist/src/background/index.js.map +2 -2
  7. package/dist/src/background/message-router.js +27 -11
  8. package/dist/src/background/message-router.js.map +2 -2
  9. package/dist/src/client/index.js +56 -56
  10. package/dist/src/client/index.js.map +4 -4
  11. package/dist/src/elysia/index.js +6 -6
  12. package/dist/src/elysia/index.js.map +3 -3
  13. package/dist/src/index.js +51 -23
  14. package/dist/src/index.js.map +3 -3
  15. package/dist/src/mesh.js +2 -2
  16. package/dist/src/mesh.js.map +3 -3
  17. package/dist/src/peer.js +6 -6
  18. package/dist/src/peer.js.map +3 -3
  19. package/dist/src/polly-ui/index.css +2 -2
  20. package/dist/src/polly-ui/markdown.js +1844 -1010
  21. package/dist/src/polly-ui/markdown.js.map +5 -5
  22. package/dist/src/polly-ui/styles.css +2 -2
  23. package/dist/src/shared/adapters/index.js +27 -11
  24. package/dist/src/shared/adapters/index.js.map +2 -2
  25. package/dist/src/shared/lib/context-helpers.js +27 -11
  26. package/dist/src/shared/lib/context-helpers.js.map +2 -2
  27. package/dist/src/shared/lib/message-bus.js +27 -11
  28. package/dist/src/shared/lib/message-bus.js.map +2 -2
  29. package/dist/src/shared/lib/resource.js +41 -13
  30. package/dist/src/shared/lib/resource.js.map +3 -3
  31. package/dist/src/shared/lib/state.js +41 -13
  32. package/dist/src/shared/lib/state.js.map +3 -3
  33. package/dist/src/shared/state/app-state.js +41 -13
  34. package/dist/src/shared/state/app-state.js.map +3 -3
  35. package/dist/tools/bdd/src/cli.js +20 -2
  36. package/dist/tools/bdd/src/cli.js.map +4 -4
  37. package/dist/tools/bdd/src/index.js +20 -2
  38. package/dist/tools/bdd/src/index.js.map +3 -3
  39. package/dist/tools/init/templates/pwa/package.json.template +2 -3
  40. package/dist/tools/mutate/src/args.d.ts +25 -3
  41. package/dist/tools/mutate/src/cli.js +3234 -312
  42. package/dist/tools/mutate/src/cli.js.map +32 -12
  43. package/dist/tools/mutate/src/config.d.ts +13 -2
  44. package/dist/tools/mutate/src/define.d.ts +76 -0
  45. package/dist/tools/mutate/src/engine/ast.d.ts +13 -0
  46. package/dist/tools/mutate/src/engine/baseline.d.ts +20 -0
  47. package/dist/tools/mutate/src/engine/cache.d.ts +32 -0
  48. package/dist/tools/mutate/src/engine/coverage.d.ts +60 -0
  49. package/dist/tools/mutate/src/engine/generate.d.ts +23 -0
  50. package/dist/tools/mutate/src/engine/graph.d.ts +11 -0
  51. package/dist/tools/mutate/src/engine/index.d.ts +16 -0
  52. package/dist/tools/mutate/src/engine/junit.d.ts +38 -0
  53. package/dist/tools/mutate/src/engine/operators.d.ts +14 -0
  54. package/dist/tools/mutate/src/engine/preload.d.ts +10 -0
  55. package/dist/tools/mutate/src/engine/preload.js +180 -0
  56. package/dist/tools/mutate/src/engine/preload.js.map +10 -0
  57. package/dist/tools/mutate/src/engine/probes.d.ts +12 -0
  58. package/dist/tools/mutate/src/engine/report-writer.d.ts +44 -0
  59. package/dist/tools/mutate/src/engine/runner.d.ts +31 -0
  60. package/dist/tools/mutate/src/engine/stray-writes.d.ts +25 -0
  61. package/dist/tools/mutate/src/engine/typecheck.d.ts +37 -0
  62. package/dist/tools/mutate/src/engine/types.d.ts +191 -0
  63. package/dist/tools/mutate/src/engine/verify-callsites.d.ts +9 -0
  64. package/dist/tools/mutate/src/engine/workdir.d.ts +16 -0
  65. package/dist/tools/mutate/src/engine-config.d.ts +7 -0
  66. package/dist/tools/mutate/src/index.d.ts +7 -3
  67. package/dist/tools/mutate/src/index.js +2701 -77
  68. package/dist/tools/mutate/src/index.js.map +26 -7
  69. package/dist/tools/mutate/src/ingest.d.ts +30 -1
  70. package/dist/tools/mutate/src/init.d.ts +2 -1
  71. package/dist/tools/mutate/src/migrate.d.ts +32 -0
  72. package/dist/tools/mutate/src/report.d.ts +3 -0
  73. package/dist/tools/mutate/src/run.d.ts +17 -8
  74. package/dist/tools/mutate/src/verify-matrix.d.ts +12 -15
  75. package/dist/tools/quality/src/cli.js +9 -9
  76. package/dist/tools/quality/src/cli.js.map +4 -4
  77. package/dist/tools/quality/src/index.js +9 -9
  78. package/dist/tools/quality/src/index.js.map +4 -4
  79. package/dist/tools/quality/src/no-tautology-ensures.d.ts +2 -2
  80. package/dist/tools/quality/src/plugins/import-checks.d.ts +1 -1
  81. package/dist/tools/test/src/adapters/index.js +3 -2
  82. package/dist/tools/test/src/adapters/index.js.map +3 -3
  83. package/dist/tools/test/src/coverage-policy/cli.d.ts +2 -2
  84. package/dist/tools/test/src/coverage-policy/cli.js +217 -17
  85. package/dist/tools/test/src/coverage-policy/cli.js.map +7 -5
  86. package/dist/tools/test/src/coverage-policy/index.d.ts +1 -1
  87. package/dist/tools/test/src/coverage-policy/index.js +213 -12
  88. package/dist/tools/test/src/coverage-policy/index.js.map +7 -5
  89. package/dist/tools/test/src/coverage-policy/mutate-targets.d.ts +29 -12
  90. package/dist/tools/test/src/e2e-mesh/index.js +6 -6
  91. package/dist/tools/test/src/e2e-mesh/index.js.map +4 -4
  92. package/dist/tools/test/src/e2e-relay/index.js +230 -226
  93. package/dist/tools/test/src/e2e-relay/index.js.map +7 -7
  94. package/dist/tools/test/src/index.js +3 -2
  95. package/dist/tools/test/src/index.js.map +3 -3
  96. package/dist/tools/test/src/visual/index.js +684 -511
  97. package/dist/tools/test/src/visual/index.js.map +11 -11
  98. package/dist/tools/verify/src/cli.js +294 -21
  99. package/dist/tools/verify/src/cli.js.map +9 -9
  100. package/dist/tools/verify/src/config.d.ts +57 -1
  101. package/dist/tools/verify/src/config.js +68 -3
  102. package/dist/tools/verify/src/config.js.map +4 -4
  103. package/dist/tools/verify/src/primitives/index.d.ts +34 -0
  104. package/package.json +30 -39
  105. package/dist/tools/verify/src/stryker/index.d.ts +0 -32
  106. package/dist/tools/verify/src/stryker/index.js +0 -86
  107. package/dist/tools/verify/src/stryker/index.js.map +0 -10
@@ -1,4 +1,4 @@
1
- // ../../node_modules/.bun/preact@10.29.1/node_modules/preact/dist/preact.module.js
1
+ // ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/dist/preact.module.js
2
2
  var n;
3
3
  var l;
4
4
  var u;
@@ -9,8 +9,8 @@ var o;
9
9
  var e;
10
10
  var f;
11
11
  var c;
12
- var s;
13
12
  var a;
13
+ var s;
14
14
  var h;
15
15
  var p;
16
16
  var v;
@@ -78,29 +78,29 @@ function H() {
78
78
  i.length = H.__r = 0;
79
79
  }
80
80
  }
81
- function L(n, l, u, t, i, r, o, e, f, c, s) {
82
- var a, h, p, v, y, _, g, m = t && t.__k || w, b = l.length;
83
- for (f = T(u, l, m, f, b), a = 0;a < b; a++)
84
- (p = u.__k[a]) != null && (h = p.__i != -1 && m[p.__i] || d, p.__i = a, _ = q(n, p, h, i, r, o, e, f, c, s), v = p.__e, p.ref && h.ref != p.ref && (h.ref && J(h.ref, null, p), s.push(p.ref, p.__c || v, p)), y == null && v != null && (y = v), (g = !!(4 & p.__u)) || h.__k === p.__k ? (f = j(p, f, n, g), g && h.__e && (h.__e = null)) : typeof p.type == "function" && _ !== undefined ? f = _ : v && (f = v.nextSibling), p.__u &= -7);
81
+ function L(n, l, u, t, i, r, o, e, f, c, a) {
82
+ var s, h, p, v, y, _, g = t && t.__k || w, m = l.length;
83
+ for (f = T(u, l, g, f, m), s = 0;s < m; s++)
84
+ (p = u.__k[s]) != null && (h = p.__i != -1 && g[p.__i] || d, p.__i = s, _ = q(n, p, h, i, r, o, e, f, c, a), v = p.__e, p.ref && h.ref != p.ref && (h.ref && J(h.ref, null, p), a.push(p.ref, p.__c || v, p)), y == null && v != null && (y = v), 4 & p.__u ? (f = j(p, f, n), h.__e && (h.__e = null)) : typeof p.type == "function" && _ !== undefined ? f = _ : v && (f = v.nextSibling), p.__u &= -7);
85
85
  return u.__e = y, f;
86
86
  }
87
87
  function T(n, l, u, t, i) {
88
- var r, o, e, f, c, s = u.length, a = s, h = 0;
88
+ var r, o, e, f, c, a = u.length, s = a, h = 0;
89
89
  for (n.__k = new Array(i), r = 0;r < i; r++)
90
- (o = l[r]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = n.__k[r] = x(null, o, null, null, null) : g(o) ? o = n.__k[r] = x(S, { children: o }, null, null, null) : o.constructor === undefined && o.__b > 0 ? o = n.__k[r] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : n.__k[r] = o, f = r + h, o.__ = n, o.__b = n.__b + 1, e = null, (c = o.__i = O(o, u, f, a)) != -1 && (a--, (e = u[c]) && (e.__u |= 2)), e == null || e.__v == null ? (c == -1 && (i > s ? h-- : i < s && h++), typeof o.type != "function" && (o.__u |= 4)) : c != f && (c == f - 1 ? h-- : c == f + 1 ? h++ : (c > f ? h-- : h++, o.__u |= 4))) : n.__k[r] = null;
91
- if (a)
92
- for (r = 0;r < s; r++)
90
+ (o = l[r]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = n.__k[r] = x(null, o, null, null, null) : g(o) ? o = n.__k[r] = x(S, { children: o }, null, null, null) : o.constructor === undefined && o.__b > 0 ? o = n.__k[r] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : n.__k[r] = o, f = r + h, o.__ = n, o.__b = n.__b + 1, e = null, (c = o.__i = O(o, u, f, s)) != -1 && (s--, (e = u[c]) && (e.__u |= 2)), e == null || e.__v == null ? (c == -1 && (i > a ? h-- : i < a && h++), typeof o.type != "function" && (o.__u |= 4)) : c != f && (c == f - 1 ? h-- : c == f + 1 ? h++ : (c > f ? h-- : h++, o.__u |= 4))) : n.__k[r] = null;
91
+ if (s)
92
+ for (r = 0;r < a; r++)
93
93
  (e = u[r]) != null && (2 & e.__u) == 0 && (e.__e == t && (t = $(e)), K(e, e));
94
94
  return t;
95
95
  }
96
- function j(n, l, u, t) {
97
- var i, r;
96
+ function j(n, l, u) {
97
+ var t, i;
98
98
  if (typeof n.type == "function") {
99
- for (i = n.__k, r = 0;i && r < i.length; r++)
100
- i[r] && (i[r].__ = n, l = j(i[r], l, u, t));
99
+ for (t = n.__k, i = 0;t && i < t.length; i++)
100
+ t[i] && (t[i].__ = n, l = j(t[i], l, u));
101
101
  return l;
102
102
  }
103
- n.__e != l && (t && (l && n.type && !l.parentNode && (l = $(n)), u.insertBefore(n.__e, l || null)), l = n.__e);
103
+ n.__e != l && (l && n.type && !l.parentNode && (l = $(n)), l = u.insertBefore(n.__e, l || null));
104
104
  do {
105
105
  l = l && l.nextSibling;
106
106
  } while (l != null && l.nodeType == 8);
@@ -112,10 +112,10 @@ function F(n, l) {
112
112
  }) : l.push(n)), l;
113
113
  }
114
114
  function O(n, l, u, t) {
115
- var i, r, o, { key: e, type: f } = n, c = l[u], s = c != null && (2 & c.__u) == 0;
116
- if (c === null && e == null || s && e == c.key && f == c.type)
115
+ var i, r, o, { key: e, type: f } = n, c = l[u], a = c != null && (2 & c.__u) == 0;
116
+ if (c === null && e == null || a && e == c.key && f == c.type)
117
117
  return u;
118
- if (t > (s ? 1 : 0)) {
118
+ if (t > (a ? 1 : 0)) {
119
119
  for (i = u - 1, r = u + 1;i >= 0 || r < l.length; )
120
120
  if ((c = l[o = i >= 0 ? i-- : r++]) != null && (2 & c.__u) == 0 && e == c.key && f == c.type)
121
121
  return o;
@@ -140,7 +140,7 @@ function N(n, l, u, t, i) {
140
140
  t && u[l] == t[l] || z(n.style, l, u[l]);
141
141
  }
142
142
  else if (l[0] == "o" && l[1] == "n")
143
- r = l != (l = l.replace(a, "$1")), o = l.toLowerCase(), l = o in n || l == "onFocusOut" || l == "onFocusIn" ? o.slice(2) : l.slice(2), n.l || (n.l = {}), n.l[l + r] = u, u ? t ? u[s] = t[s] : (u[s] = h, n.addEventListener(l, r ? v : p, r)) : n.removeEventListener(l, r ? v : p, r);
143
+ r = l != (l = l.replace(s, "$1")), o = l.toLowerCase(), l = o in n || l == "onFocusOut" || l == "onFocusIn" ? o.slice(2) : l.slice(2), n.l || (n.l = {}), n.l[l + r] = u, u ? t ? u[a] = t[a] : (u[a] = h, n.addEventListener(l, r ? v : p, r)) : n.removeEventListener(l, r ? v : p, r);
144
144
  else {
145
145
  if (i == "http://www.w3.org/2000/svg")
146
146
  l = l.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
@@ -158,58 +158,57 @@ function V(n) {
158
158
  var t = this.l[u.type + n];
159
159
  if (u[c] == null)
160
160
  u[c] = h++;
161
- else if (u[c] < t[s])
161
+ else if (u[c] < t[a])
162
162
  return;
163
163
  return t(l.event ? l.event(u) : u);
164
164
  }
165
165
  };
166
166
  }
167
- function q(n, u, t, i, r, o, e, f, c, s) {
168
- var a, h, p, v, y, d, _, k, x, M, $, I, P, A, H, T = u.type;
167
+ function q(n, u, t, i, r, o, e, f, c, a) {
168
+ var s, h, p, v, y, d, _, k, x, M, I, P, A, H, T, j, F = u.type;
169
169
  if (u.constructor !== undefined)
170
170
  return null;
171
- 128 & t.__u && (c = !!(32 & t.__u), o = [f = u.__e = t.__e]), (a = l.__b) && a(u);
171
+ 128 & t.__u && (c = !!(32 & t.__u), o = [f = u.__e = t.__e]), (s = l.__b) && s(u);
172
172
  n:
173
- if (typeof T == "function")
173
+ if (typeof F == "function") {
174
+ h = e.length;
174
175
  try {
175
- if (k = u.props, x = T.prototype && T.prototype.render, M = (a = T.contextType) && i[a.__c], $ = a ? M ? M.props.value : a.__ : i, t.__c ? _ = (h = u.__c = t.__c).__ = h.__E : (x ? u.__c = h = new T(k, $) : (u.__c = h = new C(k, $), h.constructor = T, h.render = Q), M && M.sub(h), h.state || (h.state = {}), h.__n = i, p = h.__d = true, h.__h = [], h._sb = []), x && h.__s == null && (h.__s = h.state), x && T.getDerivedStateFromProps != null && (h.__s == h.state && (h.__s = m({}, h.__s)), m(h.__s, T.getDerivedStateFromProps(k, h.__s))), v = h.props, y = h.state, h.__v = u, p)
176
- x && T.getDerivedStateFromProps == null && h.componentWillMount != null && h.componentWillMount(), x && h.componentDidMount != null && h.__h.push(h.componentDidMount);
176
+ if (x = u.props, M = F.prototype && F.prototype.render, I = (s = F.contextType) && i[s.__c], P = s ? I ? I.props.value : s.__ : i, t.__c ? k = (p = u.__c = t.__c).__ = p.__E : (M ? u.__c = p = new F(x, P) : (u.__c = p = new C(x, P), p.constructor = F, p.render = Q), I && I.sub(p), p.state || (p.state = {}), p.__n = i, v = p.__d = true, p.__h = [], p._sb = []), M && p.__s == null && (p.__s = p.state), M && F.getDerivedStateFromProps != null && (p.__s == p.state && (p.__s = m({}, p.__s)), m(p.__s, F.getDerivedStateFromProps(x, p.__s))), y = p.props, d = p.state, p.__v = u, v)
177
+ M && F.getDerivedStateFromProps == null && p.componentWillMount != null && p.componentWillMount(), M && p.componentDidMount != null && p.__h.push(p.componentDidMount);
177
178
  else {
178
- if (x && T.getDerivedStateFromProps == null && k !== v && h.componentWillReceiveProps != null && h.componentWillReceiveProps(k, $), u.__v == t.__v || !h.__e && h.shouldComponentUpdate != null && h.shouldComponentUpdate(k, h.__s, $) === false) {
179
- u.__v != t.__v && (h.props = k, h.state = h.__s, h.__d = false), u.__e = t.__e, u.__k = t.__k, u.__k.some(function(n) {
179
+ if (M && F.getDerivedStateFromProps == null && x !== y && p.componentWillReceiveProps != null && p.componentWillReceiveProps(x, P), u.__v == t.__v || !p.__e && p.shouldComponentUpdate != null && p.shouldComponentUpdate(x, p.__s, P) === false) {
180
+ u.__v != t.__v && (p.props = x, p.state = p.__s, p.__d = false), u.__e = t.__e, u.__k = t.__k, u.__k.some(function(n) {
180
181
  n && (n.__ = u);
181
- }), w.push.apply(h.__h, h._sb), h._sb = [], h.__h.length && e.push(h);
182
+ }), w.push.apply(p.__h, p._sb), p._sb = [], p.__h.length && e.push(p), f = $(t);
182
183
  break n;
183
184
  }
184
- h.componentWillUpdate != null && h.componentWillUpdate(k, h.__s, $), x && h.componentDidUpdate != null && h.__h.push(function() {
185
- h.componentDidUpdate(v, y, d);
185
+ p.componentWillUpdate != null && p.componentWillUpdate(x, p.__s, P), M && p.componentDidUpdate != null && p.__h.push(function() {
186
+ p.componentDidUpdate(y, d, _);
186
187
  });
187
188
  }
188
- if (h.context = $, h.props = k, h.__P = n, h.__e = false, I = l.__r, P = 0, x)
189
- h.state = h.__s, h.__d = false, I && I(u), a = h.render(h.props, h.state, h.context), w.push.apply(h.__h, h._sb), h._sb = [];
189
+ if (p.context = P, p.props = x, p.__P = n, p.__e = false, A = l.__r, H = 0, M)
190
+ p.state = p.__s, p.__d = false, A && A(u), s = p.render(p.props, p.state, p.context), w.push.apply(p.__h, p._sb), p._sb = [];
190
191
  else
191
192
  do {
192
- h.__d = false, I && I(u), a = h.render(h.props, h.state, h.context), h.state = h.__s;
193
- } while (h.__d && ++P < 25);
194
- h.state = h.__s, h.getChildContext != null && (i = m(m({}, i), h.getChildContext())), x && !p && h.getSnapshotBeforeUpdate != null && (d = h.getSnapshotBeforeUpdate(v, y)), A = a != null && a.type === S && a.key == null ? E(a.props.children) : a, f = L(n, g(A) ? A : [A], u, t, i, r, o, e, f, c, s), h.base = u.__e, u.__u &= -161, h.__h.length && e.push(h), _ && (h.__E = h.__ = null);
193
+ p.__d = false, A && A(u), s = p.render(p.props, p.state, p.context), p.state = p.__s;
194
+ } while (p.__d && ++H < 25);
195
+ p.state = p.__s, p.getChildContext != null && (i = m(m({}, i), p.getChildContext())), M && !v && p.getSnapshotBeforeUpdate != null && (_ = p.getSnapshotBeforeUpdate(y, d)), T = s != null && s.type === S && s.key == null ? E(s.props.children) : s, f = L(n, g(T) ? T : [T], u, t, i, r, o, e, f, c, a), p.base = u.__e, u.__u &= -161, p.__h.length && e.push(p), k && (p.__E = p.__ = null);
195
196
  } catch (n) {
196
- if (u.__v = null, c || o != null)
197
+ if (e.length = h, u.__v = null, c || o != null) {
197
198
  if (n.then) {
198
199
  for (u.__u |= c ? 160 : 128;f && f.nodeType == 8 && f.nextSibling; )
199
200
  f = f.nextSibling;
200
- o[o.indexOf(f)] = null, u.__e = f;
201
- } else {
202
- for (H = o.length;H--; )
203
- b(o[H]);
204
- B(u);
205
- }
206
- else
207
- u.__e = t.__e, u.__k = t.__k, n.then || B(u);
208
- l.__e(n, u, t);
201
+ o != null && (o[o.indexOf(f)] = null), u.__e = f;
202
+ } else if (o != null)
203
+ for (j = o.length;j--; )
204
+ b(o[j]);
205
+ } else
206
+ u.__e = t.__e;
207
+ u.__k == null && (u.__k = t.__k || []), n.then || B(u), l.__e(n, u, t);
209
208
  }
210
- else
211
- o == null && u.__v == t.__v ? (u.__k = t.__k, u.__e = t.__e) : f = u.__e = G(t.__e, u, t, i, r, o, e, c, s);
212
- return (a = l.diffed) && a(u), 128 & u.__u ? undefined : f;
209
+ } else
210
+ o == null && u.__v == t.__v ? (u.__k = t.__k, u.__e = t.__e) : f = u.__e = G(t.__e, u, t, i, r, o, e, c, a);
211
+ return (s = l.diffed) && s(u), 128 & u.__u ? undefined : f;
213
212
  }
214
213
  function B(n) {
215
214
  n && (n.__c && (n.__c.__e = true), n.__k && n.__k.some(B));
@@ -228,14 +227,14 @@ function D(n, u, t) {
228
227
  });
229
228
  }
230
229
  function E(n) {
231
- return typeof n != "object" || n == null || n.__b > 0 ? n : g(n) ? n.map(E) : m({}, n);
230
+ return typeof n != "object" || n == null || n.__b > 0 ? n : g(n) ? n.map(E) : n.constructor !== undefined ? null : m({}, n);
232
231
  }
233
- function G(u, t, i, r, o, e, f, c, s) {
234
- var a, h, p, v, y, w, _, m = i.props || d, { props: k, type: x } = t;
232
+ function G(u, t, i, r, o, e, f, c, a) {
233
+ var s, h, p, v, y, w, _, m = i.props || d, { props: k, type: x } = t;
235
234
  if (x == "svg" ? o = "http://www.w3.org/2000/svg" : x == "math" ? o = "http://www.w3.org/1998/Math/MathML" : o || (o = "http://www.w3.org/1999/xhtml"), e != null) {
236
- for (a = 0;a < e.length; a++)
237
- if ((y = e[a]) && "setAttribute" in y == !!x && (x ? y.localName == x : y.nodeType == 3)) {
238
- u = y, e[a] = null;
235
+ for (s = 0;s < e.length; s++)
236
+ if ((y = e[s]) && "setAttribute" in y == !!x && (x ? y.localName == x : y.nodeType == 3)) {
237
+ u = y, e[s] = null;
239
238
  break;
240
239
  }
241
240
  }
@@ -247,19 +246,19 @@ function G(u, t, i, r, o, e, f, c, s) {
247
246
  if (x == null)
248
247
  m === k || c && u.data == k || (u.data = k);
249
248
  else {
250
- if (e = e && n.call(u.childNodes), !c && e != null)
251
- for (m = {}, a = 0;a < u.attributes.length; a++)
252
- m[(y = u.attributes[a]).name] = y.value;
253
- for (a in m)
254
- y = m[a], a == "dangerouslySetInnerHTML" ? p = y : a == "children" || (a in k) || a == "value" && ("defaultValue" in k) || a == "checked" && ("defaultChecked" in k) || N(u, a, null, y, o);
255
- for (a in k)
256
- y = k[a], a == "children" ? v = y : a == "dangerouslySetInnerHTML" ? h = y : a == "value" ? w = y : a == "checked" ? _ = y : c && typeof y != "function" || m[a] === y || N(u, a, y, m[a], o);
249
+ if (e = x == "textarea" && k.defaultValue != null ? null : e && n.call(u.childNodes), !c && e != null)
250
+ for (m = {}, s = 0;s < u.attributes.length; s++)
251
+ m[(y = u.attributes[s]).name] = y.value;
252
+ for (s in m)
253
+ y = m[s], s == "dangerouslySetInnerHTML" ? p = y : s == "children" || (s in k) || s == "value" && ("defaultValue" in k) || s == "checked" && ("defaultChecked" in k) || N(u, s, null, y, o);
254
+ for (s in k)
255
+ y = k[s], s == "children" ? v = y : s == "dangerouslySetInnerHTML" ? h = y : s == "value" ? w = y : s == "checked" ? _ = y : c && typeof y != "function" || m[s] === y || N(u, s, y, m[s], o);
257
256
  if (h)
258
257
  c || p && (h.__html == p.__html || h.__html == u.innerHTML) || (u.innerHTML = h.__html), t.__k = [];
259
- else if (p && (u.innerHTML = ""), L(t.type == "template" ? u.content : u, g(v) ? v : [v], t, i, r, x == "foreignObject" ? "http://www.w3.org/1999/xhtml" : o, e, f, e ? e[0] : i.__k && $(i, 0), c, s), e != null)
260
- for (a = e.length;a--; )
261
- b(e[a]);
262
- c || (a = "value", x == "progress" && w == null ? u.removeAttribute("value") : w != null && (w !== u[a] || x == "progress" && !w || x == "option" && w != m[a]) && N(u, a, w, m[a], o), a = "checked", _ != null && _ != u[a] && N(u, a, _, m[a], o));
258
+ else if (p && (u.innerHTML = ""), L(t.type == "template" ? u.content : u, g(v) ? v : [v], t, i, r, x == "foreignObject" ? "http://www.w3.org/1999/xhtml" : o, e, f, e ? e[0] : i.__k && $(i, 0), c, a), e != null)
259
+ for (s = e.length;s--; )
260
+ b(e[s]);
261
+ c && x != "textarea" || (s = "value", x == "progress" && w == null ? u.removeAttribute("value") : w != null && (w !== u[s] || x == "progress" && !w || x == "option" && w != m[s]) && N(u, s, w, m[s], o), s = "checked", _ != null && _ != u[s] && N(u, s, _, m[s], o));
263
262
  }
264
263
  return u;
265
264
  }
@@ -283,7 +282,7 @@ function K(n, u, t) {
283
282
  } catch (n) {
284
283
  l.__e(n, u);
285
284
  }
286
- i.base = i.__P = null;
285
+ i.base = i.__P = i.__n = null;
287
286
  }
288
287
  if (i = n.__k)
289
288
  for (r = 0;r < i.length; r++)
@@ -295,7 +294,7 @@ function Q(n, l, u) {
295
294
  }
296
295
  function R(u, t, i) {
297
296
  var r, o, e, f;
298
- t == document && (t = document.documentElement), l.__ && l.__(u, t), o = (r = typeof i == "function") ? null : i && i.__k || t.__k, e = [], f = [], q(t, u = (!r && i || t).__k = k(S, null, [u]), o || d, d, t.namespaceURI, !r && i ? [i] : o ? null : t.firstChild ? n.call(t.childNodes) : null, e, !r && i ? i : o ? o.__e : t.firstChild, r, f), D(e, u, f);
297
+ t == document && (t = document.documentElement), l.__ && l.__(u, t), o = (r = typeof i == "function") ? null : i && i.__k || t.__k, e = [], f = [], q(t, u = (!r && i || t).__k = k(S, null, [u]), o || d, d, t.namespaceURI, !r && i ? [i] : o ? null : t.firstChild ? n.call(t.childNodes) : null, e, !r && i ? i : o ? o.__e : t.firstChild, r, f), D(e, u, f), u.props.children = null;
299
298
  }
300
299
  function X(n) {
301
300
  function l(n) {
@@ -339,9 +338,9 @@ n = w.slice, l = { __e: function(n, l, u, t) {
339
338
  this.__v && (this.__e = true, n && this.__h.push(n), A(this));
340
339
  }, C.prototype.render = S, i = [], o = typeof Promise == "function" ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, e = function(n, l) {
341
340
  return n.__v.__b - l.__v.__b;
342
- }, H.__r = 0, f = Math.random().toString(8), c = "__d" + f, s = "__a" + f, a = /(PointerCapture)$|Capture$/i, h = 0, p = V(false), v = V(true), y = 0;
341
+ }, H.__r = 0, f = Math.random().toString(8), c = "__d" + f, a = "__a" + f, s = /(PointerCapture)$|Capture$/i, h = 0, p = V(false), v = V(true), y = 0;
343
342
 
344
- // ../../node_modules/.bun/preact@10.29.1/node_modules/preact/hooks/dist/hooks.module.js
343
+ // ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/hooks/dist/hooks.module.js
345
344
  var t2;
346
345
  var r2;
347
346
  var u2;
@@ -354,17 +353,17 @@ var a2 = c2.__r;
354
353
  var v2 = c2.diffed;
355
354
  var l2 = c2.__c;
356
355
  var m2 = c2.unmount;
357
- var s2 = c2.__;
358
- function p2(n, t) {
356
+ var p2 = c2.__;
357
+ function s2(n, t) {
359
358
  c2.__h && c2.__h(r2, n, o2 || t), o2 = 0;
360
359
  var u = r2.__H || (r2.__H = { __: [], __h: [] });
361
360
  return n >= u.__.length && u.__.push({}), u.__[n];
362
361
  }
363
362
  function d2(n) {
364
- return o2 = 1, h2(D2, n);
363
+ return o2 = 1, y2(D2, n);
365
364
  }
366
- function h2(n, u, i) {
367
- var o = p2(t2++, 2);
365
+ function y2(n, u, i) {
366
+ var o = s2(t2++, 2);
368
367
  if (o.t = n, !o.__c && (o.__ = [i ? i(u) : D2(undefined, u), function(n) {
369
368
  var t = o.__N ? o.__N[0] : o.__[0], r = o.t(t, n);
370
369
  t !== r && (o.__N = [r, o.__[1]], o.__c.setState({}));
@@ -372,20 +371,18 @@ function h2(n, u, i) {
372
371
  var f = function(n, t, r) {
373
372
  if (!o.__c.__H)
374
373
  return true;
375
- var u = o.__c.__H.__.filter(function(n) {
376
- return n.__c;
377
- });
378
- if (u.every(function(n) {
379
- return !n.__N;
380
- }))
381
- return !c || c.call(this, n, t, r);
382
- var i = o.__c.props !== n;
383
- return u.some(function(n) {
374
+ var u = false, i = o.__c.props !== n;
375
+ if (o.__c.__H.__.some(function(n) {
384
376
  if (n.__N) {
377
+ u = true;
385
378
  var t = n.__[0];
386
379
  n.__ = n.__N, n.__N = undefined, t !== n.__[0] && (i = true);
387
380
  }
388
- }), c && c.call(this, n, t, r) || i;
381
+ }), c) {
382
+ var f = c.call(this, n, t, r);
383
+ return u ? f || i : f;
384
+ }
385
+ return !u || i;
389
386
  };
390
387
  r2.__f = true;
391
388
  var c = r2.shouldComponentUpdate, e = r2.componentWillUpdate;
@@ -399,8 +396,8 @@ function h2(n, u, i) {
399
396
  }
400
397
  return o.__N || o.__;
401
398
  }
402
- function y2(n, u) {
403
- var i = p2(t2++, 3);
399
+ function h2(n, u) {
400
+ var i = s2(t2++, 3);
404
401
  !c2.__s && C2(i.__H, u) && (i.__ = n, i.u = u, r2.__H.__h.push(i));
405
402
  }
406
403
  function A2(n) {
@@ -409,7 +406,7 @@ function A2(n) {
409
406
  }, []);
410
407
  }
411
408
  function T2(n, r) {
412
- var u = p2(t2++, 7);
409
+ var u = s2(t2++, 7);
413
410
  return C2(u.__H, r) && (u.__ = n(), u.__H = r, u.__h = n), u.__;
414
411
  }
415
412
  function q2(n, t) {
@@ -418,11 +415,11 @@ function q2(n, t) {
418
415
  }, t);
419
416
  }
420
417
  function x2(n) {
421
- var u = r2.context[n.__c], i = p2(t2++, 9);
418
+ var u = r2.context[n.__c], i = s2(t2++, 9);
422
419
  return i.c = n, u ? (i.__ == null && (i.__ = true, u.sub(r2)), u.props.value) : n.__;
423
420
  }
424
421
  function g2() {
425
- var n = p2(t2++, 11);
422
+ var n = s2(t2++, 11);
426
423
  if (!n.__) {
427
424
  for (var u = r2.__v;u !== null && !u.__m && u.__ !== null; )
428
425
  u = u.__;
@@ -445,7 +442,7 @@ function j2() {
445
442
  c2.__b = function(n) {
446
443
  r2 = null, e2 && e2(n);
447
444
  }, c2.__ = function(n, t) {
448
- n && t.__k && t.__k.__m && (n.__m = t.__k.__m), s2 && s2(n, t);
445
+ n && t.__k && t.__k.__m && (n.__m = t.__k.__m), p2 && p2(n, t);
449
446
  }, c2.__r = function(n) {
450
447
  a2 && a2(n), t2 = 0;
451
448
  var i = (r2 = n.__c).__H;
@@ -456,7 +453,7 @@ c2.__b = function(n) {
456
453
  v2 && v2(n);
457
454
  var t = n.__c;
458
455
  t && t.__H && (t.__H.__h.length && (f2.push(t) !== 1 && i2 === c2.requestAnimationFrame || ((i2 = c2.requestAnimationFrame) || w2)(j2)), t.__H.__.some(function(n) {
459
- n.u && (n.__H = n.u), n.u = undefined;
456
+ n.u && (n.__H = n.u, n.u = undefined);
460
457
  })), u2 = r2 = null;
461
458
  }, c2.__c = function(n, t) {
462
459
  t.some(function(n) {
@@ -505,24 +502,28 @@ function D2(n, t) {
505
502
  return typeof t == "function" ? t(n) : t;
506
503
  }
507
504
 
508
- // ../../node_modules/.bun/@preact+signals-core@1.14.2/node_modules/@preact/signals-core/dist/signals-core.module.js
505
+ // ../../node_modules/.bun/@preact+signals-core@1.14.4/node_modules/@preact/signals-core/dist/signals-core.module.js
509
506
  var i3 = Symbol.for("preact-signals");
510
507
  function t3() {
511
- if (!(s3 > 1)) {
508
+ if (!(v3 > 1)) {
512
509
  var i, t = false;
513
510
  (function() {
514
511
  var i = c3;
515
512
  c3 = undefined;
516
513
  while (i !== undefined) {
517
- if (i.S.v === i.v)
518
- i.S.i = i.i;
514
+ var t = i.S;
515
+ if (t.v === i.v) {
516
+ for (var n = t.t;n !== undefined; n = n.x)
517
+ if (n.i === i.i)
518
+ n.i = t.i;
519
+ }
519
520
  i = i.o;
520
521
  }
521
522
  })();
522
523
  while (h3 !== undefined) {
523
524
  var n = h3;
524
525
  h3 = undefined;
525
- v3++;
526
+ s3++;
526
527
  while (n !== undefined) {
527
528
  var r = n.u;
528
529
  n.u = undefined;
@@ -539,52 +540,54 @@ function t3() {
539
540
  n = r;
540
541
  }
541
542
  }
542
- v3 = 0;
543
- s3--;
543
+ s3 = 0;
544
+ v3--;
544
545
  if (t)
545
546
  throw i;
546
547
  } else
547
- s3--;
548
+ v3--;
548
549
  }
549
550
  function n2(i) {
550
- if (s3 > 0)
551
+ if (v3 > 0)
551
552
  return i();
552
553
  e3 = ++u3;
553
- s3++;
554
+ v3++;
554
555
  try {
555
556
  return i();
556
557
  } finally {
557
558
  t3();
558
559
  }
559
560
  }
560
- var r3 = undefined;
561
- function o3(i) {
562
- var t = r3;
561
+ var r3;
562
+ var o3 = undefined;
563
+ function f3(i) {
564
+ var t = o3, n = r3;
565
+ o3 = undefined;
563
566
  r3 = undefined;
564
567
  try {
565
568
  return i();
566
569
  } finally {
567
- r3 = t;
570
+ o3 = t;
571
+ r3 = n;
568
572
  }
569
573
  }
570
- var f3;
571
574
  var h3 = undefined;
572
- var s3 = 0;
573
575
  var v3 = 0;
576
+ var s3 = 0;
574
577
  var u3 = 0;
575
578
  var e3 = 0;
576
579
  var c3 = undefined;
577
580
  var d3 = 0;
578
581
  function a3(i) {
579
- if (r3 !== undefined) {
582
+ if (o3 !== undefined) {
580
583
  var t = i.n;
581
- if (t === undefined || t.t !== r3) {
582
- t = { i: 0, S: i, p: r3.s, n: undefined, t: r3, e: undefined, x: undefined, r: t };
583
- if (r3.s !== undefined)
584
- r3.s.n = t;
585
- r3.s = t;
584
+ if (t === undefined || t.t !== o3) {
585
+ t = { i: 0, S: i, p: o3.s, n: undefined, t: o3, e: undefined, x: undefined, r: t };
586
+ if (o3.s !== undefined)
587
+ o3.s.n = t;
588
+ o3.s = t;
586
589
  i.n = t;
587
- if (32 & r3.f)
590
+ if (32 & o3.f)
588
591
  i.S(t);
589
592
  return t;
590
593
  } else if (t.i === -1) {
@@ -593,10 +596,10 @@ function a3(i) {
593
596
  t.n.p = t.p;
594
597
  if (t.p !== undefined)
595
598
  t.p.n = t.n;
596
- t.p = r3.s;
599
+ t.p = o3.s;
597
600
  t.n = undefined;
598
- r3.s.n = t;
599
- r3.s = t;
601
+ o3.s.n = t;
602
+ o3.s = t;
600
603
  }
601
604
  return t;
602
605
  }
@@ -624,7 +627,7 @@ l3.prototype.S = function(i) {
624
627
  if (n !== undefined)
625
628
  n.e = i;
626
629
  else
627
- o3(function() {
630
+ f3(function() {
628
631
  var i;
629
632
  (i = t.W) == null || i.call(t);
630
633
  });
@@ -645,7 +648,7 @@ l3.prototype.U = function(i) {
645
648
  if (i === this.t) {
646
649
  this.t = r;
647
650
  if (r === undefined)
648
- o3(function() {
651
+ f3(function() {
649
652
  var i;
650
653
  (i = t.Z) == null || i.call(t);
651
654
  });
@@ -655,13 +658,10 @@ l3.prototype.U = function(i) {
655
658
  l3.prototype.subscribe = function(i) {
656
659
  var t = this;
657
660
  return j3(function() {
658
- var n = t.value, o = r3;
659
- r3 = undefined;
660
- try {
661
- i(n);
662
- } finally {
663
- r3 = o;
664
- }
661
+ var n = t.value;
662
+ f3(function() {
663
+ return i(n);
664
+ });
665
665
  }, { name: "sub" });
666
666
  };
667
667
  l3.prototype.valueOf = function() {
@@ -675,7 +675,7 @@ l3.prototype.toJSON = function() {
675
675
  };
676
676
  l3.prototype.peek = function() {
677
677
  var i = this;
678
- return o3(function() {
678
+ return f3(function() {
679
679
  return i.value;
680
680
  });
681
681
  };
@@ -686,10 +686,10 @@ Object.defineProperty(l3.prototype, "value", { get: function() {
686
686
  return this.v;
687
687
  }, set: function(i) {
688
688
  if (i !== this.v) {
689
- if (v3 > 100)
689
+ if (s3 > 100)
690
690
  throw new Error("Cycle detected");
691
691
  (function(i) {
692
- if (s3 !== 0 && v3 === 0) {
692
+ if (v3 !== 0 && s3 === 0) {
693
693
  if (i.l !== e3) {
694
694
  i.l = e3;
695
695
  c3 = { S: i, v: i.v, i: i.i, o: c3 };
@@ -699,7 +699,7 @@ Object.defineProperty(l3.prototype, "value", { get: function() {
699
699
  this.v = i;
700
700
  this.i++;
701
701
  d3++;
702
- s3++;
702
+ v3++;
703
703
  try {
704
704
  for (var n = this.t;n !== undefined; n = n.x)
705
705
  n.t.N();
@@ -750,14 +750,11 @@ function b2(i) {
750
750
  i.s = n;
751
751
  }
752
752
  function p3(i, t) {
753
- l3.call(this, undefined);
753
+ l3.call(this, undefined, t);
754
754
  this.x = i;
755
755
  this.s = undefined;
756
756
  this.g = d3 - 1;
757
757
  this.f = 4;
758
- this.W = t == null ? undefined : t.watched;
759
- this.Z = t == null ? undefined : t.unwatched;
760
- this.name = t == null ? undefined : t.name;
761
758
  }
762
759
  p3.prototype = new l3;
763
760
  p3.prototype.h = function() {
@@ -775,10 +772,10 @@ p3.prototype.h = function() {
775
772
  this.f &= -2;
776
773
  return true;
777
774
  }
778
- var i = r3;
775
+ var i = o3;
779
776
  try {
780
777
  _2(this);
781
- r3 = this;
778
+ o3 = this;
782
779
  var t = this.x();
783
780
  if (16 & this.f || this.v !== t || this.i === 0) {
784
781
  this.v = t;
@@ -790,7 +787,7 @@ p3.prototype.h = function() {
790
787
  this.f |= 16;
791
788
  this.i++;
792
789
  }
793
- r3 = i;
790
+ o3 = i;
794
791
  b2(this);
795
792
  this.f &= -2;
796
793
  return true;
@@ -838,9 +835,9 @@ function S2(i) {
838
835
  var n = i.m;
839
836
  i.m = undefined;
840
837
  if (typeof n == "function") {
841
- s3++;
842
- var o = r3;
843
- r3 = undefined;
838
+ v3++;
839
+ var r = o3;
840
+ o3 = undefined;
844
841
  try {
845
842
  n();
846
843
  } catch (t) {
@@ -849,7 +846,7 @@ function S2(i) {
849
846
  m3(i);
850
847
  throw t;
851
848
  } finally {
852
- r3 = o;
849
+ o3 = r;
853
850
  t3();
854
851
  }
855
852
  }
@@ -862,10 +859,10 @@ function m3(i) {
862
859
  S2(i);
863
860
  }
864
861
  function x3(i) {
865
- if (r3 !== this)
862
+ if (o3 !== this)
866
863
  throw new Error("Out-of-order effect");
867
864
  b2(this);
868
- r3 = i;
865
+ o3 = i;
869
866
  this.f &= -2;
870
867
  if (8 & this.f)
871
868
  m3(this);
@@ -878,8 +875,8 @@ function E2(i, t) {
878
875
  this.u = undefined;
879
876
  this.f = 32;
880
877
  this.name = t == null ? undefined : t.name;
881
- if (f3)
882
- f3.push(this);
878
+ if (r3)
879
+ r3.push(this);
883
880
  }
884
881
  E2.prototype.c = function() {
885
882
  var i = this.S();
@@ -902,9 +899,9 @@ E2.prototype.S = function() {
902
899
  this.f &= -9;
903
900
  S2(this);
904
901
  _2(this);
905
- s3++;
906
- var i = r3;
907
- r3 = this;
902
+ v3++;
903
+ var i = o3;
904
+ o3 = this;
908
905
  return x3.bind(this, i);
909
906
  };
910
907
  E2.prototype.N = function() {
@@ -935,10 +932,10 @@ function j3(i, t) {
935
932
  return r;
936
933
  }
937
934
 
938
- // ../../node_modules/.bun/@preact+signals@2.9.0+8ade602ed6c36360/node_modules/@preact/signals/dist/signals.module.js
935
+ // ../../node_modules/.bun/@preact+signals@2.11.3+6d480b93d497d3a1/node_modules/@preact/signals/dist/signals.module.js
939
936
  var l4;
940
- var d4;
941
937
  var h4;
938
+ var d4;
942
939
  var p4 = typeof window != "undefined" && !!window.__PREACT_SIGNALS_DEVTOOLS__;
943
940
  var m4 = [];
944
941
  var _3 = [];
@@ -949,17 +946,18 @@ function g4(i, r) {
949
946
  l[i] = r.bind(null, l[i] || function() {});
950
947
  }
951
948
  function b3(i) {
952
- if (h4) {
953
- var n = h4;
954
- h4 = undefined;
949
+ if (d4) {
950
+ var n = d4;
951
+ d4 = undefined;
955
952
  n();
956
953
  }
957
- h4 = i && i.S();
954
+ d4 = i && i.S();
958
955
  }
959
956
  function y4(i) {
960
- var n = this, t2 = i.data, e = useSignal(t2);
961
- e.value = t2;
962
- var f = T2(function() {
957
+ var n = this, t2 = i.data, f = useSignal(t2);
958
+ f.name = "ReactiveDom";
959
+ f.value = t2;
960
+ var e = T2(function() {
963
961
  var i = n, t2 = n.__v;
964
962
  while (t2 = t2.__)
965
963
  if (t2.__c) {
@@ -967,13 +965,13 @@ function y4(i) {
967
965
  break;
968
966
  }
969
967
  var o = g3(function() {
970
- var i = e.value.value;
968
+ var i = f.value.value;
971
969
  return i === 0 ? 0 : i === true ? "" : i || "";
972
- }), f = g3(function() {
970
+ }), e = g3(function() {
973
971
  return !Array.isArray(o.value) && !t(o.value);
974
972
  }), a = j3(function() {
975
973
  this.N = F2;
976
- if (f.value) {
974
+ if (e.value) {
977
975
  var n = o.value;
978
976
  if (i.__v && i.__v.__e && i.__v.__e.nodeType === 3)
979
977
  i.__v.__e.data = n;
@@ -983,8 +981,8 @@ function y4(i) {
983
981
  a();
984
982
  v.call(this);
985
983
  };
986
- return [f, o];
987
- }, []), a = f[0], v = f[1];
984
+ return [e, o];
985
+ }, []), a = e[0], v = e[1];
988
986
  return a.value ? v.peek() : v.value;
989
987
  }
990
988
  y4.displayName = "ReactiveTextNode";
@@ -995,16 +993,18 @@ Object.defineProperties(l3.prototype, { constructor: { configurable: true, value
995
993
  } } };
996
994
  } }, __b: { configurable: true, value: 1 } });
997
995
  g4("__b", function(i, n) {
996
+ b3();
997
+ h4 = undefined;
998
998
  if (typeof n.type == "string") {
999
999
  var r, t = n.props;
1000
1000
  for (var o in t)
1001
1001
  if (o !== "children") {
1002
- var e = t[o];
1003
- if (e instanceof l3) {
1002
+ var f = t[o];
1003
+ if (f instanceof l3) {
1004
1004
  if (!r)
1005
1005
  n.__np = r = {};
1006
- r[o] = e;
1007
- t[o] = e.peek();
1006
+ r[o] = f;
1007
+ t[o] = f.peek();
1008
1008
  }
1009
1009
  }
1010
1010
  }
@@ -1025,75 +1025,73 @@ g4("__r", function(i, n) {
1025
1025
  }, { name: n });
1026
1026
  r.c = i;
1027
1027
  return r;
1028
- }(function() {
1029
- var i;
1030
- if (p4)
1031
- (i = r.y) == null || i.call(r);
1032
- o.__$f |= 1;
1033
- o.setState({});
1034
- }, typeof n.type == "function" ? n.type.displayName || n.type.name : "");
1028
+ }(function(i) {
1029
+ return function() {
1030
+ var n;
1031
+ if (p4)
1032
+ (n = this.y) == null || n.call(this);
1033
+ i.__$f |= 1;
1034
+ i.setState({});
1035
+ };
1036
+ }(o), typeof n.type == "function" ? n.type.displayName || n.type.name : "");
1035
1037
  }
1036
- d4 = o;
1038
+ h4 = o;
1037
1039
  b3(r);
1038
1040
  }
1039
1041
  });
1040
1042
  g4("__e", function(i, n, r, t) {
1041
1043
  b3();
1042
- d4 = undefined;
1044
+ h4 = undefined;
1043
1045
  i(n, r, t);
1044
1046
  });
1045
1047
  g4("diffed", function(i, n) {
1046
1048
  b3();
1047
- d4 = undefined;
1049
+ h4 = undefined;
1048
1050
  var r;
1049
1051
  if (typeof n.type == "string" && (r = n.__e)) {
1050
- var { __np: t, props: o } = n;
1051
- if (t) {
1052
- var e = r.U;
1053
- if (e)
1054
- for (var f in e) {
1055
- var u = e[f];
1056
- if (u !== undefined && !(f in t)) {
1057
- u.d();
1058
- e[f] = undefined;
1059
- }
1052
+ var { __np: t, props: o } = n, f = r.U;
1053
+ if (f)
1054
+ for (var e in f) {
1055
+ var u = f[e];
1056
+ if (!(u === undefined || t && (e in t))) {
1057
+ u.d();
1058
+ f[e] = undefined;
1060
1059
  }
1061
- else {
1062
- e = {};
1063
- r.U = e;
1060
+ }
1061
+ if (t) {
1062
+ if (!f) {
1063
+ f = {};
1064
+ r.U = f;
1064
1065
  }
1065
1066
  for (var a in t) {
1066
- var c = e[a], v = t[a];
1067
+ var c = f[a], v = t[a];
1067
1068
  if (c === undefined) {
1068
- c = w4(r, a, v);
1069
- e[a] = c;
1069
+ c = w4(r, a, v, o);
1070
+ f[a] = c;
1070
1071
  } else
1071
1072
  c.o(v, o);
1072
1073
  }
1073
- for (var s in t)
1074
- o[s] = t[s];
1075
1074
  }
1076
1075
  }
1077
1076
  i(n);
1078
1077
  });
1079
1078
  function w4(i, n, r, t) {
1080
- var o = n in i && i.ownerSVGElement === undefined, e = y3(r), f = r.peek();
1079
+ var o = n in i && i.ownerSVGElement === undefined, f = y3(r);
1081
1080
  return { o: function(i, n) {
1082
- e.value = i;
1083
- f = i.peek();
1081
+ f.value = i;
1082
+ t = n;
1084
1083
  }, d: j3(function() {
1085
1084
  this.N = F2;
1086
- var r = e.value.value;
1087
- if (f !== r) {
1088
- f = undefined;
1085
+ var r = f.value.value;
1086
+ if (t[n] !== r) {
1087
+ t[n] = r;
1089
1088
  if (o)
1090
1089
  i[n] = r;
1091
1090
  else if (r != null && (r !== false || n[4] === "-"))
1092
1091
  i.setAttribute(n, r);
1093
1092
  else
1094
1093
  i.removeAttribute(n);
1095
- } else
1096
- f = undefined;
1094
+ }
1097
1095
  }) };
1098
1096
  }
1099
1097
  g4("unmount", function(i, n) {
@@ -1104,27 +1102,34 @@ g4("unmount", function(i, n) {
1104
1102
  if (t) {
1105
1103
  r.U = undefined;
1106
1104
  for (var o in t) {
1107
- var e = t[o];
1108
- if (e)
1109
- e.d();
1105
+ var f = t[o];
1106
+ if (f)
1107
+ f.d();
1110
1108
  }
1111
1109
  }
1112
1110
  }
1111
+ var e = n.__np;
1112
+ if (e) {
1113
+ var u = n.props;
1114
+ for (var a in e)
1115
+ u[a] = e[a];
1116
+ }
1113
1117
  n.__np = undefined;
1114
1118
  } else {
1115
- var f = n.__c;
1116
- if (f) {
1117
- var u = f.__$u;
1118
- if (u) {
1119
- f.__$u = undefined;
1120
- u.d();
1119
+ var c = n.__c;
1120
+ if (c) {
1121
+ c.__$f |= 8;
1122
+ var v = c.__$u;
1123
+ if (v) {
1124
+ c.__$u = undefined;
1125
+ v.d();
1121
1126
  }
1122
1127
  }
1123
1128
  }
1124
1129
  i(n);
1125
1130
  });
1126
1131
  g4("__h", function(i, n, r, t) {
1127
- if (t < 3 || t === 9)
1132
+ if (t < 3)
1128
1133
  n.__$f |= 2;
1129
1134
  i(n, r, t);
1130
1135
  });
@@ -1135,8 +1140,8 @@ C.prototype.shouldComponentUpdate = function(i, n) {
1135
1140
  for (var o in n)
1136
1141
  return true;
1137
1142
  if (this.__f || typeof this.u == "boolean" && this.u === true) {
1138
- var e = 2 & this.__$f;
1139
- if (!(t || e || 4 & this.__$f))
1143
+ var f = 2 & this.__$f;
1144
+ if (!(t || f || 4 & this.__$f))
1140
1145
  return true;
1141
1146
  if (1 & this.__$f)
1142
1147
  return true;
@@ -1146,8 +1151,8 @@ C.prototype.shouldComponentUpdate = function(i, n) {
1146
1151
  if (3 & this.__$f)
1147
1152
  return true;
1148
1153
  }
1149
- for (var f in i)
1150
- if (f !== "__source" && i[f] !== this.props[f])
1154
+ for (var e in i)
1155
+ if (e !== "__source" && i[e] !== this.props[e])
1151
1156
  return true;
1152
1157
  for (var u in this.props)
1153
1158
  if (!(u in i))
@@ -1162,7 +1167,7 @@ function useSignal(i, n) {
1162
1167
  function useComputed(i, n) {
1163
1168
  var r = A2(i);
1164
1169
  r.current = i;
1165
- d4.__$f |= 4;
1170
+ h4.__$f |= 4;
1166
1171
  return T2(function() {
1167
1172
  return g3(function() {
1168
1173
  return r.current();
@@ -1206,10 +1211,12 @@ function F2() {
1206
1211
  function useSignalEffect(i, n) {
1207
1212
  var r = A2(i);
1208
1213
  r.current = i;
1209
- y2(function() {
1214
+ var t = h4;
1215
+ h2(function() {
1210
1216
  return j3(function() {
1211
1217
  this.N = T4;
1212
- return r.current();
1218
+ if (!(t && 8 & t.__$f))
1219
+ return r.current();
1213
1220
  }, n);
1214
1221
  }, []);
1215
1222
  }
@@ -1517,7 +1524,7 @@ function createForm(config) {
1517
1524
  actions
1518
1525
  };
1519
1526
  }
1520
- // ../../node_modules/.bun/preact@10.29.1/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js
1527
+ // ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js
1521
1528
  var f4 = 0;
1522
1529
  function u4(e, t, n, o, i, u) {
1523
1530
  t || (t = {});
@@ -1609,11 +1616,11 @@ function ActionInput(props) {
1609
1616
  const [mode, setMode] = d2(live ? "edit" : "view");
1610
1617
  const [draft, setDraft] = d2(props.value);
1611
1618
  const inputRef = A2(null);
1612
- y2(() => {
1619
+ h2(() => {
1613
1620
  if (mode === "view")
1614
1621
  setDraft(props.value);
1615
1622
  }, [props.value, mode]);
1616
- y2(() => {
1623
+ h2(() => {
1617
1624
  if (mode === "edit" && !live && inputRef.current) {
1618
1625
  inputRef.current.focus();
1619
1626
  inputRef.current.select?.();
@@ -1871,10 +1878,10 @@ function Dropdown(props) {
1871
1878
  const triggerRef = A2(null);
1872
1879
  const idRef = A2(`polly-dropdown-${++dropdownCounter}`);
1873
1880
  const popoverId = idRef.current;
1874
- y2(() => {
1881
+ h2(() => {
1875
1882
  triggerRef.current?.setAttribute("popovertarget", popoverId);
1876
1883
  }, [popoverId]);
1877
- y2(() => {
1884
+ h2(() => {
1878
1885
  const menu = menuRef.current;
1879
1886
  if (!menu)
1880
1887
  return;
@@ -1888,7 +1895,7 @@ function Dropdown(props) {
1888
1895
  menu.removeEventListener("overlay:close", onOverlayClose);
1889
1896
  };
1890
1897
  }, [popoverId, isOpen]);
1891
- y2(() => {
1898
+ h2(() => {
1892
1899
  const menu = menuRef.current;
1893
1900
  const trigger = triggerRef.current;
1894
1901
  if (!menu || !trigger)
@@ -2787,7 +2794,7 @@ var ConfirmDialog_module_default = {
2787
2794
  confirm: "confirm_ZfTX4A",
2788
2795
  confirmDanger: "confirmDanger_ZfTX4A"
2789
2796
  };
2790
- // ../../node_modules/.bun/preact@10.29.1/node_modules/preact/compat/dist/compat.module.js
2797
+ // ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/compat/dist/compat.module.js
2791
2798
  function g5(n, t) {
2792
2799
  for (var e in t)
2793
2800
  n[e] = t[e];
@@ -2818,7 +2825,7 @@ l.__e = function(n, t, e, r) {
2818
2825
  if (n.then) {
2819
2826
  for (var u, o = t;o = o.__; )
2820
2827
  if ((u = o.__c) && u.__c)
2821
- return t.__e == null && (t.__e = e.__e, t.__k = e.__k), u.__c(n, t);
2828
+ return t.__e == null && (t.__e = e.__e, t.__k = e.__k || []), u.__c(n, t);
2822
2829
  }
2823
2830
  O2(n, t, e, r);
2824
2831
  };
@@ -2852,12 +2859,12 @@ l.unmount = function(n) {
2852
2859
  var e = t.__c, r = this;
2853
2860
  r.o == null && (r.o = []), r.o.push(e);
2854
2861
  var u = j4(r.__v), o = false, i = function() {
2855
- o || r.__z || (o = true, e.__R = null, u ? u(c) : c());
2862
+ o || r.__z || (o = true, e.__R = null, u ? u(f) : f());
2856
2863
  };
2857
2864
  e.__R = i;
2858
2865
  var l2 = e.__P;
2859
2866
  e.__P = null;
2860
- var c = function() {
2867
+ var f = function() {
2861
2868
  if (!--r.__u) {
2862
2869
  if (r.state.__a) {
2863
2870
  var n = r.state.__a;
@@ -2973,8 +2980,8 @@ l.vnode = function(n) {
2973
2980
  for (var i in t) {
2974
2981
  var l2 = t[i];
2975
2982
  if (!(i === "value" && ("defaultValue" in t) && l2 == null || Q2 && i === "children" && e === "noscript" || i === "class" || i === "className")) {
2976
- var c = i.toLowerCase();
2977
- i === "defaultValue" && "value" in t && t.value == null ? i = "value" : i === "download" && l2 === true ? l2 = "" : c === "translate" && l2 === "no" ? l2 = false : c[0] === "o" && c[1] === "n" ? c === "ondoubleclick" ? i = "ondblclick" : c !== "onchange" || e !== "input" && e !== "textarea" || X2(t.type) ? c === "onfocus" ? i = "onfocusin" : c === "onblur" ? i = "onfocusout" : J2.test(i) && (i = c) : c = i = "oninput" : o && G2.test(i) ? i = i.replace(K2, "-$&").toLowerCase() : l2 === null && (l2 = undefined), c === "oninput" && u[i = c] && (i = "oninputCapture"), u[i] = l2;
2983
+ var f = i.toLowerCase();
2984
+ i === "defaultValue" && "value" in t && t.value == null ? i = "value" : i === "download" && l2 === true ? l2 = "" : f === "translate" && l2 === "no" ? l2 = false : f[0] === "o" && f[1] === "n" ? f === "ondoubleclick" ? i = "ondblclick" : f !== "onchange" || e !== "input" && e !== "textarea" || X2(t.type) ? f === "onfocus" ? i = "onfocusin" : f === "onblur" ? i = "onfocusout" : J2.test(i) && (i = f) : f = i = "oninput" : o && G2.test(i) ? i = i.replace(K2, "-$&").toLowerCase() : l2 === null && (l2 = undefined), f === "oninput" && u[i = f] && (i = "oninputCapture"), u[i] = l2;
2978
2985
  }
2979
2986
  }
2980
2987
  e == "select" && (u.multiple && Array.isArray(u.value) && (u.value = F(t.children).forEach(function(n) {
@@ -2988,9 +2995,9 @@ var ln = l.__r;
2988
2995
  l.__r = function(n) {
2989
2996
  ln && ln(n), rn = n.__c;
2990
2997
  };
2991
- var cn = l.diffed;
2998
+ var fn = l.diffed;
2992
2999
  l.diffed = function(n) {
2993
- cn && cn(n);
3000
+ fn && fn(n);
2994
3001
  var { props: t, __e: e } = n;
2995
3002
  e != null && n.type === "textarea" && "value" in t && t.value !== e.value && (e.value = t.value == null ? "" : t.value), rn = null;
2996
3003
  };
@@ -3097,7 +3104,7 @@ var OverlayRoot_module_default = {
3097
3104
  // src/polly-ui/OverlayRoot.tsx
3098
3105
  function OverlayRoot() {
3099
3106
  const ref = A2(null);
3100
- y2(() => {
3107
+ h2(() => {
3101
3108
  let release = null;
3102
3109
  const dispose = j3(() => {
3103
3110
  if (hasOpenOverlay()) {
@@ -3141,14 +3148,14 @@ function Root2({ when, onClose, children, "aria-label": ariaLabel }) {
3141
3148
  const isOpen = typeof when === "boolean" ? when : when.value;
3142
3149
  const onCloseRef = A2(onClose);
3143
3150
  onCloseRef.current = onClose;
3144
- y2(() => {
3151
+ h2(() => {
3145
3152
  if (!isOpen) {
3146
3153
  setPortalNode(null);
3147
3154
  return;
3148
3155
  }
3149
3156
  setPortalNode(getOverlayRootNode());
3150
3157
  }, [isOpen]);
3151
- y2(() => {
3158
+ h2(() => {
3152
3159
  if (!isOpen || !portalNode)
3153
3160
  return;
3154
3161
  const entry = { id, onClose: () => onCloseRef.current?.() };
@@ -3866,10 +3873,10 @@ function Viewport(props) {
3866
3873
  const [portalNode, setPortalNode] = d2(null);
3867
3874
  const [paused, setPaused] = d2(false);
3868
3875
  const entries = errorState.value;
3869
- y2(() => {
3876
+ h2(() => {
3870
3877
  setPortalNode(getOverlayRootNode());
3871
3878
  }, []);
3872
- y2(() => {
3879
+ h2(() => {
3873
3880
  if (paused || entries.length === 0)
3874
3881
  return;
3875
3882
  const head = entries[0];
@@ -5497,5 +5504,5 @@ installEventDelegation(async (dispatch) => {
5497
5504
  var root = document.getElementById("app") ?? document.body;
5498
5505
  R(/* @__PURE__ */ u4(GalleryApp, {}, undefined, false, undefined, this), root);
5499
5506
 
5500
- //# debugId=0D2534F3978D9E0964756E2164756E21
5501
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvblNlbGVjdC50c3giLCAic3JjL3BvbGx5LXVpL0JhZGdlLnRzeCIsICJzcmMvcG9sbHktdWkvQnV0dG9uLnRzeCIsICJzcmMvcG9sbHktdWkvU3VyZmFjZS50c3giLCAic3JjL3BvbGx5LXVpL0NhcmQudHN4IiwgInNyYy9wb2xseS11aS9DaGVja2JveC50c3giLCAic3JjL3BvbGx5LXVpL0NsdXN0ZXIudHN4IiwgInNyYy9wb2xseS11aS9Db2RlLnRzeCIsICJzcmMvcG9sbHktdWkvQ29sbGFwc2libGUudHN4IiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3ByZWFjdEAxMC4yOS4xL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMscyxhLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LF8sZyxtPXQmJnQuX19rfHx3LGI9bC5sZW5ndGg7Zm9yKGY9VCh1LGwsbSxmLGIpLGE9MDthPGI7YSsrKW51bGwhPShwPXUuX19rW2FdKSYmKGg9LTEhPXAuX19pJiZtW3AuX19pXXx8ZCxwLl9faT1hLF89cShuLHAsaCxpLHIsbyxlLGYsYyxzKSx2PXAuX19lLHAucmVmJiZoLnJlZiE9cC5yZWYmJihoLnJlZiYmSihoLnJlZixudWxsLHApLHMucHVzaChwLnJlZixwLl9fY3x8dixwKSksbnVsbD09eSYmbnVsbCE9diYmKHk9diksKGc9ISEoNCZwLl9fdSkpfHxoLl9faz09PXAuX19rPyhmPWoocCxmLG4sZyksZyYmaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMscz11Lmxlbmd0aCxhPXMsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixhKSkmJihhLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+cz9oLS06aTxzJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihhKWZvcihyPTA7cjxzO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSx0KXt2YXIgaSxyO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSl7Zm9yKGk9bi5fX2sscj0wO2kmJnI8aS5sZW5ndGg7cisrKWlbcl0mJihpW3JdLl9fPW4sbD1qKGlbcl0sbCx1LHQpKTtyZXR1cm4gbH1uLl9fZSE9bCYmKHQmJihsJiZuLnR5cGUmJiFsLnBhcmVudE5vZGUmJihsPSQobikpLHUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKSxsPW4uX19lKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxzPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8cyYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihzPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UoYSxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVtzXT10W3NdOih1W3NdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFtzXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LGQsXyxrLHgsTSwkLEksUCxBLEgsVD11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxvPVtmPXUuX19lPXQuX19lXSksKGE9bC5fX2IpJiZhKHUpO246aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgVCl0cnl7aWYoaz11LnByb3BzLHg9VC5wcm90b3R5cGUmJlQucHJvdG90eXBlLnJlbmRlcixNPShhPVQuY29udGV4dFR5cGUpJiZpW2EuX19jXSwkPWE/TT9NLnByb3BzLnZhbHVlOmEuX186aSx0Ll9fYz9fPShoPXUuX19jPXQuX19jKS5fXz1oLl9fRTooeD91Ll9fYz1oPW5ldyBUKGssJCk6KHUuX19jPWg9bmV3IEMoaywkKSxoLmNvbnN0cnVjdG9yPVQsaC5yZW5kZXI9USksTSYmTS5zdWIoaCksaC5zdGF0ZXx8KGguc3RhdGU9e30pLGguX19uPWkscD1oLl9fZD0hMCxoLl9faD1bXSxoLl9zYj1bXSkseCYmbnVsbD09aC5fX3MmJihoLl9fcz1oLnN0YXRlKSx4JiZudWxsIT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKGguX19zPT1oLnN0YXRlJiYoaC5fX3M9bSh7fSxoLl9fcykpLG0oaC5fX3MsVC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoayxoLl9fcykpKSx2PWgucHJvcHMseT1oLnN0YXRlLGguX192PXUscCl4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9aC5jb21wb25lbnRXaWxsTW91bnQmJmguY29tcG9uZW50V2lsbE1vdW50KCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRNb3VudCYmaC5fX2gucHVzaChoLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHgmJm51bGw9PVQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZrIT09diYmbnVsbCE9aC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZoLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoaywkKSx1Ll9fdj09dC5fX3Z8fCFoLl9fZSYmbnVsbCE9aC5zaG91bGRDb21wb25lbnRVcGRhdGUmJiExPT09aC5zaG91bGRDb21wb25lbnRVcGRhdGUoayxoLl9fcywkKSl7dS5fX3YhPXQuX192JiYoaC5wcm9wcz1rLGguc3RhdGU9aC5fX3MsaC5fX2Q9ITEpLHUuX19lPXQuX19lLHUuX19rPXQuX19rLHUuX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189dSl9KSx3LnB1c2guYXBwbHkoaC5fX2gsaC5fc2IpLGguX3NiPVtdLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpO2JyZWFrIG59bnVsbCE9aC5jb21wb25lbnRXaWxsVXBkYXRlJiZoLmNvbXBvbmVudFdpbGxVcGRhdGUoayxoLl9fcywkKSx4JiZudWxsIT1oLmNvbXBvbmVudERpZFVwZGF0ZSYmaC5fX2gucHVzaChmdW5jdGlvbigpe2guY29tcG9uZW50RGlkVXBkYXRlKHYseSxkKX0pfWlmKGguY29udGV4dD0kLGgucHJvcHM9ayxoLl9fUD1uLGguX19lPSExLEk9bC5fX3IsUD0wLHgpaC5zdGF0ZT1oLl9fcyxoLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXTtlbHNlIGRve2guX19kPSExLEkmJkkodSksYT1oLnJlbmRlcihoLnByb3BzLGguc3RhdGUsaC5jb250ZXh0KSxoLnN0YXRlPWguX19zfXdoaWxlKGguX19kJiYrK1A8MjUpO2guc3RhdGU9aC5fX3MsbnVsbCE9aC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxoLmdldENoaWxkQ29udGV4dCgpKSkseCYmIXAmJm51bGwhPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihkPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUodix5KSksQT1udWxsIT1hJiZhLnR5cGU9PT1TJiZudWxsPT1hLmtleT9FKGEucHJvcHMuY2hpbGRyZW4pOmEsZj1MKG4sZyhBKT9BOltBXSx1LHQsaSxyLG8sZSxmLGMscyksaC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpLF8mJihoLl9fRT1oLl9fPW51bGwpfWNhdGNoKG4pe2lmKHUuX192PW51bGwsY3x8bnVsbCE9bylpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztvW28uaW5kZXhPZihmKV09bnVsbCx1Ll9fZT1mfWVsc2V7Zm9yKEg9by5sZW5ndGg7SC0tOyliKG9bSF0pO0IodSl9ZWxzZSB1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayxuLnRoZW58fEIodSk7bC5fX2Uobix1LHQpfWVsc2UgbnVsbD09byYmdS5fX3Y9PXQuX192Pyh1Ll9faz10Ll9fayx1Ll9fZT10Ll9fZSk6Zj11Ll9fZT1HKHQuX19lLHUsdCxpLHIsbyxlLGMscyk7cmV0dXJuKGE9bC5kaWZmZWQpJiZhKHUpLDEyOCZ1Ll9fdT92b2lkIDA6Zn1mdW5jdGlvbiBCKG4pe24mJihuLl9fYyYmKG4uX19jLl9fZT0hMCksbi5fX2smJm4uX19rLnNvbWUoQikpfWZ1bmN0aW9uIEQobix1LHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKUoodFtpXSx0WysraV0sdFsrK2ldKTtsLl9fYyYmbC5fX2ModSxuKSxuLnNvbWUoZnVuY3Rpb24odSl7dHJ5e249dS5fX2gsdS5fX2g9W10sbi5zb21lKGZ1bmN0aW9uKG4pe24uY2FsbCh1KX0pfWNhdGNoKG4pe2wuX19lKG4sdS5fX3YpfX0pfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIG58fG51bGw9PW58fG4uX19iPjA/bjpnKG4pP24ubWFwKEUpOm0oe30sbil9ZnVuY3Rpb24gRyh1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSx3LF8sbT1pLnByb3BzfHxkLGs9dC5wcm9wcyx4PXQudHlwZTtpZihcInN2Z1wiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiOlwibWF0aFwiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6b3x8KG89XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLG51bGwhPWUpZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigoeT1lW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIHk9PSEheCYmKHg/eS5sb2NhbE5hbWU9PXg6Mz09eS5ub2RlVHlwZSkpe3U9eSxlW2FdPW51bGw7YnJlYWt9aWYobnVsbD09dSl7aWYobnVsbD09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoayk7dT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobyx4LGsuaXMmJmspLGMmJihsLl9fbSYmbC5fX20odCxlKSxjPSExKSxlPW51bGx9aWYobnVsbD09eCltPT09a3x8YyYmdS5kYXRhPT1rfHwodS5kYXRhPWspO2Vsc2V7aWYoZT1lJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxhPTA7YTx1LmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyltWyh5PXUuYXR0cmlidXRlc1thXSkubmFtZV09eS52YWx1ZTtmb3IoYSBpbiBtKXk9bVthXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PWE/cD15OlwiY2hpbGRyZW5cIj09YXx8YSBpbiBrfHxcInZhbHVlXCI9PWEmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09YSYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LGEsbnVsbCx5LG8pO2ZvcihhIGluIGspeT1rW2FdLFwiY2hpbGRyZW5cIj09YT92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP2g9eTpcInZhbHVlXCI9PWE/dz15OlwiY2hlY2tlZFwiPT1hP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW2FdPT09eXx8Tih1LGEseSxtW2FdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxzKSxudWxsIT1lKWZvcihhPWUubGVuZ3RoO2EtLTspYihlW2FdKTtjfHwoYT1cInZhbHVlXCIsXCJwcm9ncmVzc1wiPT14JiZudWxsPT13P3UucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik6bnVsbCE9dyYmKHchPT11W2FdfHxcInByb2dyZXNzXCI9PXgmJiF3fHxcIm9wdGlvblwiPT14JiZ3IT1tW2FdKSYmTih1LGEsdyxtW2FdLG8pLGE9XCJjaGVja2VkXCIsbnVsbCE9XyYmXyE9dVthXSYmTih1LGEsXyxtW2FdLG8pKX1yZXR1cm4gdX1mdW5jdGlvbiBKKG4sdSx0KXt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX3U7aSYmbi5fX3UoKSxpJiZudWxsPT11fHwobi5fX3U9bih1KSl9ZWxzZSBuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBLKG4sdSx0KXt2YXIgaSxyO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT1uLl9fZXx8SihpLG51bGwsdSkpLG51bGwhPShpPW4uX19jKSl7aWYoaS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKG4pe2wuX19lKG4sdSl9aS5iYXNlPWkuX19QPW51bGx9aWYoaT1uLl9faylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0mJksoaVtyXSx1LHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4udHlwZSk7dHx8YihuLl9fZSksbi5fX2M9bi5fXz1uLl9fZT12b2lkIDB9ZnVuY3Rpb24gUShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBSKHUsdCxpKXt2YXIgcixvLGUsZjt0PT1kb2N1bWVudCYmKHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKHUsdCksbz0ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxlPVtdLGY9W10scSh0LHU9KCFyJiZpfHx0KS5fX2s9ayhTLG51bGwsW3VdKSxvfHxkLGQsdC5uYW1lc3BhY2VVUkksIXImJmk/W2ldOm8/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxlLCFyJiZpP2k6bz9vLl9fZTp0LmZpcnN0Q2hpbGQscixmKSxEKGUsdSxmKX1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLHM9XCJfX2FcIitmLGE9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscz1jLl9fO2Z1bmN0aW9uIHAobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEsaChELG4pfWZ1bmN0aW9uIGgobix1LGkpe3ZhciBvPXAodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT1vLl9fYy5wcm9wcyE9PW47cmV0dXJuIHUuc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLGMmJmMuY2FsbCh0aGlzLG4sdCxyKXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiB5KG4sdSl7dmFyIGk9cCh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cCh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXAodCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1wKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxzJiZzKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51KSxuLnU9dm9pZCAwfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLHkgYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8saCBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEocz4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe2lmKGkuUy52PT09aS52KWkuUy5pPWkuaTtpPWkub319KCk7d2hpbGUodm9pZCAwIT09aCl7dmFyIG49aDtoPXZvaWQgMDt2Kys7d2hpbGUodm9pZCAwIT09bil7dmFyIHI9bi51O24udT12b2lkIDA7bi5mJj0tMztpZighKDgmbi5mKSYmdyhuKSl0cnl7bi5jKCl9Y2F0Y2gobil7aWYoIXQpe2k9bjt0PSEwfX1uPXJ9fXY9MDtzLS07aWYodCl0aHJvdyBpfWVsc2Ugcy0tfWZ1bmN0aW9uIG4oaSl7aWYocz4wKXJldHVybiBpKCk7ZT0rK3U7cysrO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7dCgpfX12YXIgcj12b2lkIDA7ZnVuY3Rpb24gbyhpKXt2YXIgdD1yO3I9dm9pZCAwO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7cj10fX12YXIgZixoPXZvaWQgMCxzPTAsdj0wLHU9MCxlPTAsYz12b2lkIDAsZD0wO2Z1bmN0aW9uIGEoaSl7aWYodm9pZCAwIT09cil7dmFyIHQ9aS5uO2lmKHZvaWQgMD09PXR8fHQudCE9PXIpe3Q9e2k6MCxTOmkscDpyLnMsbjp2b2lkIDAsdDpyLGU6dm9pZCAwLHg6dm9pZCAwLHI6dH07aWYodm9pZCAwIT09ci5zKXIucy5uPXQ7ci5zPXQ7aS5uPXQ7aWYoMzImci5mKWkuUyh0KTtyZXR1cm4gdH1lbHNlIGlmKC0xPT09dC5pKXt0Lmk9MDtpZih2b2lkIDAhPT10Lm4pe3Qubi5wPXQucDtpZih2b2lkIDAhPT10LnApdC5wLm49dC5uO3QucD1yLnM7dC5uPXZvaWQgMDtyLnMubj10O3Iucz10fXJldHVybiB0fX19ZnVuY3Rpb24gbChpLHQpe3RoaXMudj1pO3RoaXMuaT0wO3RoaXMubj12b2lkIDA7dGhpcy50PXZvaWQgMDt0aGlzLmw9MDt0aGlzLlc9bnVsbD09dD92b2lkIDA6dC53YXRjaGVkO3RoaXMuWj1udWxsPT10P3ZvaWQgMDp0LnVud2F0Y2hlZDt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lfWwucHJvdG90eXBlLmJyYW5kPWk7bC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3JldHVybiEwfTtsLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXMsbj10aGlzLnQ7aWYobiE9PWkmJnZvaWQgMD09PWkuZSl7aS54PW47dGhpcy50PWk7aWYodm9pZCAwIT09biluLmU9aTtlbHNlIG8oZnVuY3Rpb24oKXt2YXIgaTtudWxsPT0oaT10LlcpfHxpLmNhbGwodCl9KX19O2wucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7dmFyIHQ9dGhpcztpZih2b2lkIDAhPT10aGlzLnQpe3ZhciBuPWkuZSxyPWkueDtpZih2b2lkIDAhPT1uKXtuLng9cjtpLmU9dm9pZCAwfWlmKHZvaWQgMCE9PXIpe3IuZT1uO2kueD12b2lkIDB9aWYoaT09PXRoaXMudCl7dGhpcy50PXI7aWYodm9pZCAwPT09cilvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5aKXx8aS5jYWxsKHQpfSl9fX07bC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7cmV0dXJuIGooZnVuY3Rpb24oKXt2YXIgbj10LnZhbHVlLG89cjtyPXZvaWQgMDt0cnl7aShuKX1maW5hbGx5e3I9b319LHtuYW1lOlwic3ViXCJ9KX07bC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlK1wiXCJ9O2wucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLnZhbHVlfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO3JldHVybiB0aGlzLnZ9LHNldDpmdW5jdGlvbihpKXtpZihpIT09dGhpcy52KXtpZih2PjEwMCl0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTshZnVuY3Rpb24oaSl7aWYoMCE9PXMmJjA9PT12KWlmKGkubCE9PWUpe2kubD1lO2M9e1M6aSx2OmkudixpOmkuaSxvOmN9fX0odGhpcyk7dGhpcy52PWk7dGhpcy5pKys7ZCsrO3MrKzt0cnl7Zm9yKHZhciBuPXRoaXMudDt2b2lkIDAhPT1uO249bi54KW4udC5OKCl9ZmluYWxseXt0KCl9fX19KTtmdW5jdGlvbiB5KGksdCl7cmV0dXJuIG5ldyBsKGksdCl9ZnVuY3Rpb24gdyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4paWYodC5TLmkhPT10Lml8fCF0LlMuaCgpfHx0LlMuaSE9PXQuaSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil7dmFyIG49dC5TLm47aWYodm9pZCAwIT09bil0LnI9bjt0LlMubj10O3QuaT0tMTtpZih2b2lkIDA9PT10Lm4pe2kucz10O2JyZWFrfX19ZnVuY3Rpb24gYihpKXt2YXIgdD1pLnMsbj12b2lkIDA7d2hpbGUodm9pZCAwIT09dCl7dmFyIHI9dC5wO2lmKC0xPT09dC5pKXt0LlMuVSh0KTtpZih2b2lkIDAhPT1yKXIubj10Lm47aWYodm9pZCAwIT09dC5uKXQubi5wPXJ9ZWxzZSBuPXQ7dC5TLm49dC5yO2lmKHZvaWQgMCE9PXQucil0LnI9dm9pZCAwO3Q9cn1pLnM9bn1mdW5jdGlvbiBwKGksdCl7bC5jYWxsKHRoaXMsdm9pZCAwKTt0aGlzLng9aTt0aGlzLnM9dm9pZCAwO3RoaXMuZz1kLTE7dGhpcy5mPTQ7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1wLnByb3RvdHlwZT1uZXcgbDtwLnByb3RvdHlwZS5oPWZ1bmN0aW9uKCl7dGhpcy5mJj0tMztpZigxJnRoaXMuZilyZXR1cm4hMTtpZigzMj09KDM2JnRoaXMuZikpcmV0dXJuITA7dGhpcy5mJj0tNTtpZih0aGlzLmc9PT1kKXJldHVybiEwO3RoaXMuZz1kO3RoaXMuZnw9MTtpZih0aGlzLmk+MCYmIXcodGhpcykpe3RoaXMuZiY9LTI7cmV0dXJuITB9dmFyIGk9cjt0cnl7Xyh0aGlzKTtyPXRoaXM7dmFyIHQ9dGhpcy54KCk7aWYoMTYmdGhpcy5mfHx0aGlzLnYhPT10fHwwPT09dGhpcy5pKXt0aGlzLnY9dDt0aGlzLmYmPS0xNzt0aGlzLmkrK319Y2F0Y2goaSl7dGhpcy52PWk7dGhpcy5mfD0xNjt0aGlzLmkrK31yPWk7Yih0aGlzKTt0aGlzLmYmPS0yO3JldHVybiEwfTtwLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mfD0zNjtmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlModCl9bC5wcm90b3R5cGUuUy5jYWxsKHRoaXMsaSl9O3AucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7aWYodm9pZCAwIT09dGhpcy50KXtsLnByb3RvdHlwZS5VLmNhbGwodGhpcyxpKTtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZiY9LTMzO2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KX19fTtwLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Njtmb3IodmFyIGk9dGhpcy50O3ZvaWQgMCE9PWk7aT1pLngpaS50Lk4oKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3ZhciBpPWEodGhpcyk7dGhpcy5oKCk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO2lmKDE2JnRoaXMuZil0aHJvdyB0aGlzLnY7cmV0dXJuIHRoaXMudn19KTtmdW5jdGlvbiBnKGksdCl7cmV0dXJuIG5ldyBwKGksdCl9ZnVuY3Rpb24gUyhpKXt2YXIgbj1pLm07aS5tPXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtzKys7dmFyIG89cjtyPXZvaWQgMDt0cnl7bigpfWNhdGNoKHQpe2kuZiY9LTI7aS5mfD04O20oaSk7dGhyb3cgdH1maW5hbGx5e3I9bzt0KCl9fX1mdW5jdGlvbiBtKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KTtpLng9dm9pZCAwO2kucz12b2lkIDA7UyhpKX1mdW5jdGlvbiB4KGkpe2lmKHIhPT10aGlzKXRocm93IG5ldyBFcnJvcihcIk91dC1vZi1vcmRlciBlZmZlY3RcIik7Yih0aGlzKTtyPWk7dGhpcy5mJj0tMjtpZig4JnRoaXMuZiltKHRoaXMpO3QoKX1mdW5jdGlvbiBFKGksdCl7dGhpcy54PWk7dGhpcy5tPXZvaWQgMDt0aGlzLnM9dm9pZCAwO3RoaXMudT12b2lkIDA7dGhpcy5mPTMyO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWU7aWYoZilmLnB1c2godGhpcyl9RS5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3ZhciBpPXRoaXMuUygpO3RyeXtpZig4JnRoaXMuZilyZXR1cm47aWYodm9pZCAwPT09dGhpcy54KXJldHVybjt2YXIgdD10aGlzLngoKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRoaXMubT10fWZpbmFsbHl7aSgpfX07RS5wcm90b3R5cGUuUz1mdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3RoaXMuZnw9MTt0aGlzLmYmPS05O1ModGhpcyk7Xyh0aGlzKTtzKys7dmFyIGk9cjtyPXRoaXM7cmV0dXJuIHguYmluZCh0aGlzLGkpfTtFLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Mjt0aGlzLnU9aDtoPXRoaXN9fTtFLnByb3RvdHlwZS5kPWZ1bmN0aW9uKCl7dGhpcy5mfD04O2lmKCEoMSZ0aGlzLmYpKW0odGhpcyl9O0UucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmQoKX07ZnVuY3Rpb24gaihpLHQpe3ZhciBuPW5ldyBFKGksdCk7dHJ5e24uYygpfWNhdGNoKGkpe24uZCgpO3Rocm93IGl9dmFyIHI9bi5kLmJpbmQobik7cltTeW1ib2wuZGlzcG9zZV09cjtyZXR1cm4gcn1mdW5jdGlvbiBDKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXRoaXM7cmV0dXJuIG4oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHIsW10uc2xpY2UuY2FsbCh0KSl9KX0pfX1mdW5jdGlvbiBPKCl7dmFyIGk9ZjtmPVtdO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWY7aWYoZiYmaSlpPWkuY29uY2F0KGYpO2Y9aTtyZXR1cm4gdH19dmFyIGs9ZnVuY3Rpb24oaSl7Zm9yKHZhciB0IGluIGkpe3ZhciBuPWlbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilpW3RdPUMobik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJiEoXCJicmFuZFwiaW4gbikpayhuKX19O2Z1bmN0aW9uIFQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbixyPU8oKTt0cnl7bj1pLmFwcGx5KHZvaWQgMCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfWNhdGNoKGkpe2Y9dm9pZCAwO3Rocm93IGl9ZmluYWxseXt0PXIoKX1rKG4pO25bU3ltYm9sLmRpc3Bvc2VdPUMoZnVuY3Rpb24oKXtpZih0KWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV0uZGlzcG9zZSgpO3Q9dm9pZCAwfSk7cmV0dXJuIG59fWV4cG9ydHtwIGFzIENvbXB1dGVkLEUgYXMgRWZmZWN0LGwgYXMgU2lnbmFsLEMgYXMgYWN0aW9uLG4gYXMgYmF0Y2gsZyBhcyBjb21wdXRlZCxUIGFzIGNyZWF0ZU1vZGVsLGogYXMgZWZmZWN0LHkgYXMgc2lnbmFsLG8gYXMgdW50cmFja2VkfTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLWNvcmUubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIGksb3B0aW9ucyBhcyBuLGlzVmFsaWRFbGVtZW50IGFzIHIsRnJhZ21lbnQgYXMgdH1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlTWVtbyBhcyBvLHVzZVJlZiBhcyBlLHVzZUVmZmVjdCBhcyBmfWZyb21cInByZWFjdC9ob29rc1wiO2ltcG9ydHtlZmZlY3QgYXMgdSxTaWduYWwgYXMgYSxjb21wdXRlZCBhcyBjLHNpZ25hbCBhcyB2LGJhdGNoIGFzIHN9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjtleHBvcnR7U2lnbmFsLGFjdGlvbixiYXRjaCxjb21wdXRlZCxjcmVhdGVNb2RlbCxlZmZlY3Qsc2lnbmFsLHVudHJhY2tlZH1mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO3ZhciBsLGQsaCxwPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93Ll9fUFJFQUNUX1NJR05BTFNfREVWVE9PTFNfXyxtPVtdLF89W107dShmdW5jdGlvbigpe2w9dGhpcy5OfSkoKTtmdW5jdGlvbiBnKGkscil7bltpXT1yLmJpbmQobnVsbCxuW2ldfHxmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGIoaSl7aWYoaCl7dmFyIG49aDtoPXZvaWQgMDtuKCl9aD1pJiZpLlMoKX1mdW5jdGlvbiB5KGkpe3ZhciBuPXRoaXMsdD1pLmRhdGEsZT11c2VTaWduYWwodCk7ZS52YWx1ZT10O3ZhciBmPW8oZnVuY3Rpb24oKXt2YXIgaT1uLHQ9bi5fX3Y7d2hpbGUodD10Ll9fKWlmKHQuX19jKXt0Ll9fYy5fXyRmfD00O2JyZWFrfXZhciBvPWMoZnVuY3Rpb24oKXt2YXIgaT1lLnZhbHVlLnZhbHVlO3JldHVybiAwPT09aT8wOiEwPT09aT9cIlwiOml8fFwiXCJ9KSxmPWMoZnVuY3Rpb24oKXtyZXR1cm4hQXJyYXkuaXNBcnJheShvLnZhbHVlKSYmIXIoby52YWx1ZSl9KSxhPXUoZnVuY3Rpb24oKXt0aGlzLk49RjtpZihmLnZhbHVlKXt2YXIgbj1vLnZhbHVlO2lmKGkuX192JiZpLl9fdi5fX2UmJjM9PT1pLl9fdi5fX2Uubm9kZVR5cGUpaS5fX3YuX19lLmRhdGE9bn19KSx2PW4uX18kdS5kO24uX18kdS5kPWZ1bmN0aW9uKCl7YSgpO3YuY2FsbCh0aGlzKX07cmV0dXJuW2Ysb119LFtdKSxhPWZbMF0sdj1mWzFdO3JldHVybiBhLnZhbHVlP3YucGVlaygpOnYudmFsdWV9eS5kaXNwbGF5TmFtZT1cIlJlYWN0aXZlVGV4dE5vZGVcIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2b2lkIDB9LHR5cGU6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSxwcm9wczp7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJue2RhdGE6e2dldCB2YWx1ZSgpe3JldHVybiBpLnZhbHVlfX19fX0sX19iOntjb25maWd1cmFibGU6ITAsdmFsdWU6MX19KTtnKFwiX19iXCIsZnVuY3Rpb24oaSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlKXt2YXIgcix0PW4ucHJvcHM7Zm9yKHZhciBvIGluIHQpaWYoXCJjaGlsZHJlblwiIT09byl7dmFyIGU9dFtvXTtpZihlIGluc3RhbmNlb2YgYSl7aWYoIXIpbi5fX25wPXI9e307cltvXT1lO3Rbb109ZS5wZWVrKCl9fX1pKG4pfSk7ZyhcIl9fclwiLGZ1bmN0aW9uKGksbil7aShuKTtpZihuLnR5cGUhPT10KXtiKCk7dmFyIHIsbz1uLl9fYztpZihvKXtvLl9fJGYmPS0yO2lmKHZvaWQgMD09PShyPW8uX18kdSkpby5fXyR1PXI9ZnVuY3Rpb24oaSxuKXt2YXIgcjt1KGZ1bmN0aW9uKCl7cj10aGlzfSx7bmFtZTpufSk7ci5jPWk7cmV0dXJuIHJ9KGZ1bmN0aW9uKCl7dmFyIGk7aWYocCludWxsPT0oaT1yLnkpfHxpLmNhbGwocik7by5fXyRmfD0xO28uc2V0U3RhdGUoe30pfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLmRpc3BsYXlOYW1lfHxuLnR5cGUubmFtZTpcIlwiKX1kPW87YihyKX19KTtnKFwiX19lXCIsZnVuY3Rpb24oaSxuLHIsdCl7YigpO2Q9dm9pZCAwO2kobixyLHQpfSk7ZyhcImRpZmZlZFwiLGZ1bmN0aW9uKGksbil7YigpO2Q9dm9pZCAwO3ZhciByO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJihyPW4uX19lKSl7dmFyIHQ9bi5fX25wLG89bi5wcm9wcztpZih0KXt2YXIgZT1yLlU7aWYoZSlmb3IodmFyIGYgaW4gZSl7dmFyIHU9ZVtmXTtpZih2b2lkIDAhPT11JiYhKGYgaW4gdCkpe3UuZCgpO2VbZl09dm9pZCAwfX1lbHNle2U9e307ci5VPWV9Zm9yKHZhciBhIGluIHQpe3ZhciBjPWVbYV0sdj10W2FdO2lmKHZvaWQgMD09PWMpe2M9dyhyLGEsdik7ZVthXT1jfWVsc2UgYy5vKHYsbyl9Zm9yKHZhciBzIGluIHQpb1tzXT10W3NdfX1pKG4pfSk7ZnVuY3Rpb24gdyhpLG4scix0KXt2YXIgbz1uIGluIGkmJnZvaWQgMD09PWkub3duZXJTVkdFbGVtZW50LGU9dihyKSxmPXIucGVlaygpO3JldHVybntvOmZ1bmN0aW9uKGksbil7ZS52YWx1ZT1pO2Y9aS5wZWVrKCl9LGQ6dShmdW5jdGlvbigpe3RoaXMuTj1GO3ZhciByPWUudmFsdWUudmFsdWU7aWYoZiE9PXIpe2Y9dm9pZCAwO2lmKG8paVtuXT1yO2Vsc2UgaWYobnVsbCE9ciYmKCExIT09cnx8XCItXCI9PT1uWzRdKSlpLnNldEF0dHJpYnV0ZShuLHIpO2Vsc2UgaS5yZW1vdmVBdHRyaWJ1dGUobil9ZWxzZSBmPXZvaWQgMH0pfX1nKFwidW5tb3VudFwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHI9bi5fX2U7aWYocil7dmFyIHQ9ci5VO2lmKHQpe3IuVT12b2lkIDA7Zm9yKHZhciBvIGluIHQpe3ZhciBlPXRbb107aWYoZSllLmQoKX19fW4uX19ucD12b2lkIDB9ZWxzZXt2YXIgZj1uLl9fYztpZihmKXt2YXIgdT1mLl9fJHU7aWYodSl7Zi5fXyR1PXZvaWQgMDt1LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzfHw5PT09dCluLl9fJGZ8PTI7aShuLHIsdCl9KTtpLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oaSxuKXtpZih0aGlzLl9fUilyZXR1cm4hMDt2YXIgcj10aGlzLl9fJHUsdD1yJiZ2b2lkIDAhPT1yLnM7Zm9yKHZhciBvIGluIG4pcmV0dXJuITA7aWYodGhpcy5fX2Z8fFwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy51JiYhMD09PXRoaXMudSl7dmFyIGU9MiZ0aGlzLl9fJGY7aWYoISh0fHxlfHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMSZ0aGlzLl9fJGYpcmV0dXJuITB9ZWxzZXtpZighKHR8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigzJnRoaXMuX18kZilyZXR1cm4hMH1mb3IodmFyIGYgaW4gaSlpZihcIl9fc291cmNlXCIhPT1mJiZpW2ZdIT09dGhpcy5wcm9wc1tmXSlyZXR1cm4hMDtmb3IodmFyIHUgaW4gdGhpcy5wcm9wcylpZighKHUgaW4gaSkpcmV0dXJuITA7cmV0dXJuITF9O2Z1bmN0aW9uIHVzZVNpZ25hbChpLG4pe3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIHYoaSxuKX0sW10pfWZ1bmN0aW9uIHVzZUNvbXB1dGVkKGksbil7dmFyIHI9ZShpKTtyLmN1cnJlbnQ9aTtkLl9fJGZ8PTQ7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gYyhmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX12YXIgaz1cInVuZGVmaW5lZFwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3NldFRpbWVvdXQ6ZnVuY3Rpb24oaSl7dmFyIG49ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocik7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodCk7aSgpfSxyPXNldFRpbWVvdXQobiwzNSksdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LHE9ZnVuY3Rpb24oaSl7cXVldWVNaWNyb3Rhc2soZnVuY3Rpb24oKXtxdWV1ZU1pY3JvdGFzayhpKX0pfTtmdW5jdGlvbiBBKCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9bS5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIFQoKXtpZigxPT09bS5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8aykoQSl9ZnVuY3Rpb24geCgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPV8uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBGKCl7aWYoMT09PV8ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHEpKHgpfWZ1bmN0aW9uIHVzZVNpZ25hbEVmZmVjdChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZihmdW5jdGlvbigpe3JldHVybiB1KGZ1bmN0aW9uKCl7dGhpcy5OPVQ7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfWZ1bmN0aW9uIE0oaSl7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBpKCl9LFtdKTtmKGZ1bmN0aW9uKCl7cmV0dXJuIG5bU3ltYm9sLmRpc3Bvc2VdfSxbbl0pO3JldHVybiBufWV4cG9ydHt1c2VDb21wdXRlZCxNIGFzIHVzZU1vZGVsLHVzZVNpZ25hbCx1c2VTaWduYWxFZmZlY3R9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEdsb2JhbCBlcnJvciBzdXJmYWNlIGZvciBhY3Rpb24gaGFuZGxlcnMuXG4gKlxuICogQWN0aW9ucyB0aGF0IGZhaWwgc2V0IHRoZSBlcnJvclN0YXRlIHNpZ25hbCB2aWEgYHN1Ym1pdEVycm9yYDsgYSBgPFRvYXN0PmBcbiAqIGNvbXBvbmVudCBjb25zdW1lcyB0aGF0IHNpZ25hbCBhbmQgcmVuZGVycyBhIGRpc21pc3NhYmxlIG1lc3NhZ2UuIEhhbmRsZXJzXG4gKiB0aGF0IGNhdGNoIGV4cGVjdGVkIGZhaWx1cmVzICh2YWxpZGF0aW9uLCBxdW90YSkgbWF5IGNhbGwgYHNldEVycm9yYCBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIEVycm9yU2V2ZXJpdHkgPSBcImVycm9yXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvckVudHJ5ID0ge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBFcnJvclNldmVyaXR5O1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGVycm9yU3RhdGUgPSBzaWduYWw8RXJyb3JFbnRyeVtdPihbXSk7XG5cbmxldCBuZXh0SWQgPSAwO1xuZnVuY3Rpb24gYWxsb2NJZCgpOiBzdHJpbmcge1xuICBuZXh0SWQgKz0gMTtcbiAgcmV0dXJuIGBwb2xseS1lcnItJHtuZXh0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9wdHM6IHsgc2V2ZXJpdHk/OiBFcnJvclNldmVyaXR5OyBhY3Rpb24/OiBzdHJpbmcgfSA9IHt9XG4pOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeTogRXJyb3JFbnRyeSA9IHtcbiAgICBpZDogYWxsb2NJZCgpLFxuICAgIG1lc3NhZ2UsXG4gICAgc2V2ZXJpdHk6IG9wdHMuc2V2ZXJpdHkgPz8gXCJlcnJvclwiLFxuICAgIGFjdGlvbjogb3B0cy5hY3Rpb24sXG4gICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuICBlcnJvclN0YXRlLnZhbHVlID0gWy4uLmVycm9yU3RhdGUudmFsdWUsIGVudHJ5XTtcbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcihpZD86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yU3RhdGUudmFsdWUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IGVycm9yU3RhdGUudmFsdWUuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBpZCk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYW4gYWN0aW9uJ3MgY2F0Y2ggYmxvY2suXG4gKiBMb2dzIHRoZSBhY3Rpb24gbmFtZSArIGVycm9yIGFuZCBzdXJmYWNlcyBhIHVzZXItdmlzaWJsZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibWl0RXJyb3IoYWN0aW9uOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gIHJldHVybiBzZXRFcnJvcihtZXNzYWdlLCB7IGFjdGlvbiwgc2V2ZXJpdHk6IFwiZXJyb3JcIiB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5IHJlZ2lzdHJ5LlxuICpcbiAqIFRyYWNrcyB0aGUgc3RhY2sgb2Ygb3BlbiBvdmVybGF5cyAobW9kYWxzLCBwb3BvdmVycywgY29uZmlybSBkaWFsb2dzKSBzb1xuICogRXNjYXBlIGNhbiBjbG9zZSB0aGUgdG9wbW9zdCBhbmQgYGRhdGEtb3ZlcmxheS1pZGAtYmFzZWQgRE9NIHNjYW5zIGhhdmVcbiAqIGEgbWlycm9yIGluIG1lbW9yeS4gRWFjaCBlbnRyeSBzdG9yZXMgYW4gaWQgcGx1cyBhbiBvcHRpb25hbCBjbG9zZVxuICogY2FsbGJhY2s7IGBjbG9zZVRvcE92ZXJsYXlgIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBwb3BzIHRoZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBzdGFjayA9IHNpZ25hbDxPdmVybGF5RW50cnlbXT4oW10pO1xuXG4vKiogQ3VycmVudCBvdmVybGF5IHN0YWNrIGFzIGEgcmVhZC1vbmx5IHNuYXBzaG90LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlTdGFjaygpOiByZWFkb25seSBPdmVybGF5RW50cnlbXSB7XG4gIHJldHVybiBzdGFjay52YWx1ZTtcbn1cblxuLyoqIElzIGFueSBvdmVybGF5IGN1cnJlbnRseSBvcGVuPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc09wZW5PdmVybGF5KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhY2sudmFsdWUubGVuZ3RoID4gMDtcbn1cblxuLyoqIFRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciB1bmRlZmluZWQgaWYgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc3RhY2sudmFsdWU7XG4gIHJldHVybiBzW3MubGVuZ3RoIC0gMV07XG59XG5cbi8qKiBQdXNoIGFuIG92ZXJsYXkgb250byB0aGUgc3RhY2suIFJldHVybnMgdGhlIHBvcHBlZCBlbnRyeSB3aGVuIGNsb3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoT3ZlcmxheShlbnRyeTogT3ZlcmxheUVudHJ5KTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gWy4uLnN0YWNrLnZhbHVlLCBlbnRyeV07XG59XG5cbi8qKiBQb3AgYSBzcGVjaWZpYyBvdmVybGF5IGJ5IGlkIChvciB0aGUgdG9wIGlmIG5vIGlkIGdpdmVuKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3BPdmVybGF5KGlkPzogc3RyaW5nKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICBpZiAocy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdG9wID0gc1tzLmxlbmd0aCAtIDFdO1xuICAgIHN0YWNrLnZhbHVlID0gcy5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuICBjb25zdCBpZHggPSBzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cnkgPSBzW2lkeF07XG4gIHN0YWNrLnZhbHVlID0gWy4uLnMuc2xpY2UoMCwgaWR4KSwgLi4ucy5zbGljZShpZHggKyAxKV07XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIENsb3NlIHRoZSB0b3Agb3ZlcmxheSBieSBjYWxsaW5nIGl0cyBvbkNsb3NlIGFuZCBwb3BwaW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlVG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b3AgPSB0b3BPdmVybGF5KCk7XG4gIGlmICghdG9wKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0b3Aub25DbG9zZT8uKCk7XG4gIHJldHVybiBwb3BPdmVybGF5KHRvcC5pZCk7XG59XG5cbi8qKiBSZXNldCB0aGUgc3RhY2suIEludGVuZGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE92ZXJsYXlTdGFjaygpOiB2b2lkIHtcbiAgc3RhY2sudmFsdWUgPSBbXTtcbn1cbiIsCiAgICAiLyoqXG4gKiBFdmVudCBkZWxlZ2F0aW9uIGNvcmUuXG4gKlxuICogT25lIGRvY3VtZW50IGxpc3RlbmVyIGRpc3BhdGNoZXMgYGRhdGEtYWN0aW9uYCBldmVudHMgdG8gdHlwZWQgaGFuZGxlcnMuXG4gKiBXYWxrcyB1cCB0aGUgRE9NIHdpdGggYGNsb3Nlc3QoJ1tkYXRhLWFjdGlvbl0nKWAsIHBhcnNlcyBgZGF0YS1hY3Rpb24tKmBcbiAqIGF0dHJpYnV0ZXMgaW50byBhIGNhbWVsQ2FzZSBvYmplY3QsIGFuZCBoYW5kcyB0aGUgZGlzcGF0Y2ggdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBGb3JtcyBhcmUgc2tpcHBlZCBvbiBjbGljayDigJQgYSBgPGZvcm0gZGF0YS1hY3Rpb249XCIuLi5cIj5gIHJlc3BvbmRzIHRvXG4gKiBzdWJtaXQgb25seSwgc28gY2xpY2tzIG9uIGZvcm0gY2hpbGRyZW4gZG9uJ3QgYnViYmxlIGludG8gaXRzIGFjdGlvbi5cbiAqIEVzY2FwZSBjbG9zZXMgdGhlIHRvcG1vc3Qgb3ZlcmxheSBieSBjYWxsaW5nIHRoZSBvdmVybGF5IHJlZ2lzdHJ5LlxuICogRW50ZXIvU3BhY2Ugb24gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzIHdpdGggYGRhdGEtYWN0aW9uYCBmaXJlIHRoZVxuICogYWN0aW9uIChTcGFjZSBpcyBwcmV2ZW50ZWQgdG8gc3RvcCBwYWdlIHNjcm9sbCkuIENsaWNrIG91dHNpZGUgYW55XG4gKiBgW2RhdGEtb3ZlcmxheS1pZF1gIGVsZW1lbnQgYWxzbyBwb3BzIHRoZSB0b3Agb3ZlcmxheS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZVRvcE92ZXJsYXkgYXMgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5LnRzXCI7XG5cbi8qKiBFbGVtZW50cyB0aGF0IG5hdGl2ZWx5IGZpcmUgY2xpY2sgb24gRW50ZXIvU3BhY2UuICovXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJVkVfVEFHUyA9IG5ldyBTZXQoW1wiQlVUVE9OXCIsIFwiQVwiLCBcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl0pO1xuXG4vKiogRXZlbnQgdHlwZXMgdGhhdCBtYXkgdHJpZ2dlciBhIGRhdGEtYWN0aW9uIGRpc3BhdGNoLiAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1wiY2xpY2tcIiwgXCJzdWJtaXRcIiwgXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSk7XG5cbi8qKiBQYXJzZWQgYWN0aW9uIGRpc3BhdGNoIOKAlCB3aGF0IHRoZSBydW50aW1lIHJlc29sdmVzIGJlZm9yZSBpbnZva2luZyBhIGhhbmRsZXIuICovXG5leHBvcnQgdHlwZSBBY3Rpb25EaXNwYXRjaCA9IHtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBldmVudDogRXZlbnQ7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG4vKipcbiAqIFBhcnNlIGBkYXRhLWFjdGlvbi0qYCBhdHRyaWJ1dGVzIGludG8gY2FtZWxDYXNlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBgZGF0YS1hY3Rpb24tdGV4dC1zZXQtaWQ9XCI0MlwiYCBiZWNvbWVzIGB7IHRleHRTZXRJZDogXCI0MlwiIH1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBY3Rpb25EYXRhKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBhdHRyIG9mIEFycmF5LmZyb20oZWxlbWVudC5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lXG4gICAgICAgIC5yZXBsYWNlKFwiZGF0YS1hY3Rpb24tXCIsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC8tKFthLXpdKS9nLCAoX206IHN0cmluZywgbGV0dGVyOiBzdHJpbmcpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIGRhdGFba2V5XSA9IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENsb3NlIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgZGlzcGF0Y2hpbmcgYG92ZXJsYXk6Y2xvc2VgIG9uIGl0cyBlbGVtZW50LlxuICogT3ZlcmxheXMgbWFyayB0aGVtc2VsdmVzIHdpdGggYGRhdGEtb3ZlcmxheS1pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogdm9pZCB7XG4gIGNvbnN0IG92ZXJsYXlzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICBcIltkYXRhLW92ZXJsYXktaWRdOnBvcG92ZXItb3BlbiwgZGlhbG9nW2RhdGEtb3ZlcmxheS1pZF1bb3Blbl1cIlxuICApO1xuICBpZiAob3ZlcmxheXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGNvbnN0IHRvcE92ZXJsYXkgPSBvdmVybGF5c1tvdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgaWYgKCF0b3BPdmVybGF5KSByZXR1cm47XG4gIHRvcE92ZXJsYXkuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvdmVybGF5OmNsb3NlXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBkZXRhaWw6IHsgaWQ6IHRvcE92ZXJsYXkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vdmVybGF5LWlkXCIpIH0sXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgRE9NIGV2ZW50IHRvIGFuIEFjdGlvbkRpc3BhdGNoLCBvciBudWxsIGlmIG5vIGRhdGEtYWN0aW9uIG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWN0aW9uKGV2ZW50OiBFdmVudCk6IEFjdGlvbkRpc3BhdGNoIHwgbnVsbCB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBudWxsO1xuICBjb25zdCBhY3Rpb25FbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1hY3Rpb25dXCIpO1xuICBpZiAoIShhY3Rpb25FbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBhY3Rpb25FbGVtZW50LnRhZ05hbWUgPT09IFwiRk9STVwiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiKTtcbiAgaWYgKCFhY3Rpb24pIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFjdGlvbixcbiAgICBlbGVtZW50OiBhY3Rpb25FbGVtZW50LFxuICAgIGV2ZW50LFxuICAgIGRhdGE6IHBhcnNlQWN0aW9uRGF0YShhY3Rpb25FbGVtZW50KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBmb3IgdGhlIGRlbGVnYXRpb24gc3lzdGVtLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCByZW1vdmVzIGV2ZXJ5IGxpc3RlbmVyIGl0IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxFdmVudERlbGVnYXRpb24oXG4gIG9uRGlzcGF0Y2g6IChkaXNwYXRjaDogQWN0aW9uRGlzcGF0Y2gpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgb25Fc2NhcGU/OiAoKSA9PiB2b2lkOyBvbk91dHNpZGVPdmVybGF5Q2xpY2s/OiAoKSA9PiB2b2lkIH0gPSB7fVxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGhhbmRsZUFjdGlvbkV2ZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgaWYgKGRpc3BhdGNoKSBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaWYgKG9wdGlvbnMub25Fc2NhcGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgaWYgKElOVEVSQUNUSVZFX1RBR1MuaGFzKHRhcmdldC50YWdOYW1lKSkgcmV0dXJuO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSByZXNvbHZlQWN0aW9uKGV2ZW50KTtcbiAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBjb25zdCBjbGlja2VkT3ZlcmxheSA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiW2RhdGEtb3ZlcmxheS1pZF1cIik7XG4gICAgaWYgKGNsaWNrZWRPdmVybGF5KSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiYnV0dG9uW3BvcG92ZXJ0YXJnZXRdXCIpKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMub25PdXRzaWRlT3ZlcmxheUNsaWNrKSB7XG4gICAgICBvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZVRvcFJlZ2lzdHJ5T3ZlcmxheSgpO1xuICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZUFjdGlvbkV2ZW50KTtcbiAgICB9XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBoYW5kbGVNb3VzZURvd24pO1xuICB9O1xufVxuIiwKICAgICIvKipcbiAqIEZvcm0gcHJpbWl0aXZlLlxuICpcbiAqIGBjcmVhdGVGb3JtYCByZXR1cm5zIGEgdHlwZWQgZm9ybSBzdG9yZTogcGVyLWZpZWxkIHNpZ25hbHMsIGFuIGFnZ3JlZ2F0ZWRcbiAqIHZhbHVlcyBzaWduYWwsIG9wZW4vY2xvc2Uvc3VibWl0IG1ldGhvZHMsIGFuZCB0aHJlZSBhdXRvLXJlZ2lzdGVyZWQgYWN0aW9uXG4gKiBoYW5kbGVycyAoYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YCkgdGhhdCBjYWxsZXJzIHNwcmVhZFxuICogaW50byB0aGVpciBnbG9iYWwgYWN0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIExpZmVjeWNsZTpcbiAqICAgb3BlbiAg4oaSIHJlc2V0cyBmaWVsZHMgdG8gaW5pdGlhbFZhbHVlcywgYXBwbGllcyBvbk9wZW4gb3ZlcnJpZGVzLFxuICogICAgICAgICAgIHNldHMgaXNPcGVuID0gdHJ1ZSwgcmVjb3JkcyBkYXRhLWFjdGlvbi0qIGRhdGEgaW4gb3BlblBhcmFtc1xuICogICB0eXBpbmcg4oaSIHVuY29udHJvbGxlZCBpbnB1dHMga2VlcCB0aGVpciBvd24gc3RhdGU7IGNvbnRyb2xsZWQgaW5wdXRzXG4gKiAgICAgICAgICAgd3JpdGUgZmllbGRzLlgudmFsdWUgZGlyZWN0bHlcbiAqICAgc3VibWl0IOKGkiByZWFkcyBGb3JtRGF0YSBmcm9tIHRoZSBmb3JtIGVsZW1lbnQsIG1lcmdlcyBpbnRvIGZpZWxkcyxcbiAqICAgICAgICAgICBydW5zIG9wdGlvbmFsIHZhbGlkYXRlLCBjYWxscyB1c2VyIG9uU3VibWl0IHdpdGggZmluYWwgdmFsdWVzLFxuICogICAgICAgICAgIGNsb3NlcyBvbiBzdWNjZXNzLCBzZXRzIGVycm9yU3RhdGUgb24gZmFpbHVyZVxuICogICBjbG9zZSAg4oaSIHJlc2V0cyBhbmQgc2V0cyBpc09wZW4gPSBmYWxzZVxuICogICBndWFyZCAg4oaSIGF1dG9ub21vdXMgZWZmZWN0OyBpZiBndWFyZCgpIHJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiwgY2xvc2UoKVxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHR5cGUgUmVhZG9ubHlTaWduYWwsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyBzdWJtaXRFcnJvciB9IGZyb20gXCIuL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIjtcblxuZnVuY3Rpb24gaXNGb3JtRWxlbWVudCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBIVE1MRm9ybUVsZW1lbnQge1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQ7XG4gIH1cbiAgY29uc3QgdCA9IHRhcmdldCBhcyB1bmtub3duIGFzIHsgdGFnTmFtZT86IHVua25vd24gfTtcbiAgcmV0dXJuIHR5cGVvZiB0LnRhZ05hbWUgPT09IFwic3RyaW5nXCIgJiYgdC50YWdOYW1lID09PSBcIkZPUk1cIjtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3VibWl0Q29udGV4dDxUVmFsdWVzLCBUU3RvcmVzPiA9IHtcbiAgdmFsdWVzOiBUVmFsdWVzO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29uZmlnPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgLyoqIFVzZWQgYXMgYWN0aW9uIG5hbWVzcGFjZTogYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBpbml0aWFsVmFsdWVzOiBUVmFsdWVzO1xuICBvblN1Ym1pdDogKGN0eDogRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogSW52b2tlZCBvbiBvcGVuOyByZXR1cm4gcGFydGlhbCBvdmVycmlkZXMgdG8gcHJlLXBvcHVsYXRlIGZpZWxkcy4gKi9cbiAgb25PcGVuPzogKGN0eDogRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+KSA9PiBQYXJ0aWFsPFRWYWx1ZXM+IHwgdW5kZWZpbmVkO1xuICAvKiogUmV0dXJucyBmYWxzZSB3aGlsZSBvcGVuIOKGkiBmb3JtIGF1dG8tY2xvc2VzIChlbnRpdHktZGVsZXRpb24gZ3VhcmQpLiAqL1xuICBndWFyZD86IChjdHg6IHsgc3RvcmVzOiBUU3RvcmVzIH0pID0+IGJvb2xlYW47XG4gIC8qKiBTeW5jaHJvbm91cyB2YWxpZGF0aW9uLiBSZXR1cm5pbmcga2V5cyBibG9ja3Mgc3VibWl0LiAqL1xuICB2YWxpZGF0ZT86ICh2YWx1ZXM6IFRWYWx1ZXMpID0+IFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdG9yZTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNPcGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmFsdWVzOiBSZWFkb25seVNpZ25hbDxUVmFsdWVzPjtcbiAgcmVhZG9ubHkgZmllbGRzOiB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgcmVhZG9ubHkgZXJyb3JzOiBSZWFkb25seVNpZ25hbDxQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+Pj47XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZzogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IG9wZW5QYXJhbXM6IFJlYWRvbmx5U2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gIGNsb3NlKCk6IHZvaWQ7XG4gIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIExhdGUtYmluZHMgc3RvcmVzOyByZXF1aXJlZCBiZWZvcmUgZ3VhcmQvb25PcGVuL29uU3VibWl0IGNhbiBhY2Nlc3Mgc3RvcmVzLiAqL1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG4gIC8qKiBBY3Rpb24gaGFuZGxlciBlbnRyaWVzLiBTcHJlYWQgaW50byB0aGUgdXNlcidzIEFjdGlvblJlZ2lzdHJ5LiAqL1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgY29uZmlnOiBGb3JtQ29uZmlnPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBGb3JtU3RvcmU8VFZhbHVlcywgVFN0b3Jlcz4ge1xuICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhjb25maWcuaW5pdGlhbFZhbHVlcykgYXMgdW5rbm93biBhcyAoa2V5b2YgVFZhbHVlcylbXTtcblxuICBjb25zdCBmaWVsZHMgPSB7fSBhcyB1bmtub3duIGFzIHsgW0sgaW4ga2V5b2YgVFZhbHVlc106IFNpZ25hbDxUVmFsdWVzW0tdPiB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICBmaWVsZHNba2V5XSA9IHNpZ25hbChjb25maWcuaW5pdGlhbFZhbHVlc1trZXldKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXB1dGVkPFRWYWx1ZXM+KCgpID0+IHtcbiAgICBjb25zdCB2ID0ge30gYXMgdW5rbm93biBhcyBUVmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgdltrZXldID0gZmllbGRzW2tleV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9KTtcblxuICBjb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBlcnJvcnMgPSBzaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+KHt9KTtcbiAgY29uc3Qgb3BlblBhcmFtcyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG5cbiAgbGV0IGdldFN0b3Jlc1JlZjogKCgpID0+IFRTdG9yZXMpIHwgbnVsbCA9IG51bGw7XG4gIGxldCBkaXNwb3NlR3VhcmRFZmZlY3Q6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3Jlc09yVGhyb3coKTogVFN0b3JlcyB7XG4gICAgaWYgKCFnZXRTdG9yZXNSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZvcm0gXCIke2NvbmZpZy5uYW1lfVwiIHVzZWQgYmVmb3JlIGJpbmRTdG9yZXMoKS4gQ2FsbCBmb3JtLmJpbmRTdG9yZXMoKCkgPT4geW91clN0b3JlcykgYXQgYXBwIGluaXQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3Jlc1JlZigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUb0luaXRpYWwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IGNvbmZpZy5pbml0aWFsVmFsdWVzW2tleV07XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IG9wZW4gYXBwbGllcyB0d28gbGF5ZXJzIG9mIG92ZXJyaWRlcyBwbHVzIG9wdGlvbmFsIG9uT3BlbiDigJQgYnJhbmNoeSBieSBkZXNpZ24uXG4gIGZ1bmN0aW9uIG9wZW4ob3ZlcnJpZGU/OiBQYXJ0aWFsPFRWYWx1ZXM+LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSk6IHZvaWQge1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHBhcmFtcztcbiAgICBpZiAoY29uZmlnLm9uT3BlbiAmJiBnZXRTdG9yZXNSZWYpIHtcbiAgICAgIGNvbnN0IG9uT3Blbk92ZXJyaWRlID0gY29uZmlnLm9uT3Blbih7IGRhdGE6IHBhcmFtcywgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCkgfSkgPz8ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvbk9wZW5PdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHN1Ym1pdCBmdW5uZWxzIEZvcm1EYXRhLCB2YWxpZGF0ZSwgb25TdWJtaXQsIGVycm9yU3RhdGUsIGFuZCBjbG9zZSDigJQgb25lLXBhdGgtcGVyLXN0YWdlIGJ5IGRlc2lnbi5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0KGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50ICYmIGlzRm9ybUVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgICBjb25zdCByYXcgPSBmZC5nZXQoa2V5IGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKHJhdyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkc1trZXldLnZhbHVlID0gU3RyaW5nKHJhdykgYXMgdW5rbm93biBhcyBUVmFsdWVzW3R5cGVvZiBrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZXMudmFsdWU7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IGNvbmZpZy52YWxpZGF0ZT8uKGN1cnJlbnQpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGVycm9ycy52YWx1ZSA9IHZhbGlkYXRpb25FcnJvcnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbmZpZy5vblN1Ym1pdCh7XG4gICAgICAgIHZhbHVlczogY3VycmVudCxcbiAgICAgICAgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCksXG4gICAgICB9KTtcbiAgICAgIGNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdWJtaXRFcnJvcihgJHtjb25maWcubmFtZX06c3VibWl0YCwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkIHtcbiAgICBnZXRTdG9yZXNSZWYgPSBnZXRTdG9yZXM7XG4gICAgZGlzcG9zZUd1YXJkRWZmZWN0Py4oKTtcbiAgICBjb25zdCBndWFyZEZuID0gY29uZmlnLmd1YXJkO1xuICAgIGlmIChndWFyZEZuKSB7XG4gICAgICBkaXNwb3NlR3VhcmRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkgcmV0dXJuO1xuICAgICAgICBpZiAoIWd1YXJkRm4oeyBzdG9yZXM6IGdldFN0b3JlcygpIH0pKSBjbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7XG4gICAgW2Ake2NvbmZpZy5uYW1lfTpvcGVuYF06ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgb3Blbih1bmRlZmluZWQsIGRhdGEpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpjbG9zZWBdOiAoKSA9PiB7XG4gICAgICBjbG9zZSgpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpzdWJtaXRgXTogYXN5bmMgKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgYXdhaXQgc3VibWl0KGV2ZW50KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgaXNPcGVuLFxuICAgIHZhbHVlcyxcbiAgICBmaWVsZHMsXG4gICAgZXJyb3JzLFxuICAgIGlzU3VibWl0dGluZyxcbiAgICBvcGVuUGFyYW1zLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgc3VibWl0LFxuICAgIGJpbmRTdG9yZXMsXG4gICAgYWN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wb3NlIG1hbnkgZm9ybXMgaW50byBhIHNpbmdsZSBzZXQ6IG1lcmdlZCBhY3Rpb25zLCBjbG9zZUFsbCwgb3BlbkZvcm0gc2lnbmFsLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU2V0PFRTdG9yZXM+ID0ge1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbiAgb3BlbkZvcm06IFJlYWRvbmx5U2lnbmFsPHN0cmluZyB8IG51bGw+O1xuICBjbG9zZUFsbCgpOiB2b2lkO1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVNldDxUU3RvcmVzPihcbiAgZm9ybXM6IHJlYWRvbmx5IEZvcm1TdG9yZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPltdXG4pOiBGb3JtU2V0PFRTdG9yZXM+IHtcbiAgY29uc3QgbWVyZ2VkOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICBPYmplY3QuYXNzaWduKG1lcmdlZCwgZm9ybS5hY3Rpb25zKTtcbiAgfVxuXG4gIGNvbnN0IG9wZW5Gb3JtID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtcykge1xuICAgICAgaWYgKGZvcm0uaXNPcGVuLnZhbHVlKSByZXR1cm4gZm9ybS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiBtZXJnZWQsXG4gICAgb3BlbkZvcm0sXG4gICAgY2xvc2VBbGwoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uY2xvc2UoKTtcbiAgICB9LFxuICAgIGJpbmRTdG9yZXMoZ2V0U3RvcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uYmluZFN0b3JlcyhnZXRTdG9yZXMpO1xuICAgIH0sXG4gIH07XG59XG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIHIsRnJhZ21lbnQgYXMgZX1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIHQ9L1tcIiY8XS87ZnVuY3Rpb24gbihyKXtpZigwPT09ci5sZW5ndGh8fCExPT09dC50ZXN0KHIpKXJldHVybiByO2Zvcih2YXIgZT0wLG49MCxvPVwiXCIsZj1cIlwiO248ci5sZW5ndGg7bisrKXtzd2l0Y2goci5jaGFyQ29kZUF0KG4pKXtjYXNlIDM0OmY9XCImcXVvdDtcIjticmVhaztjYXNlIDM4OmY9XCImYW1wO1wiO2JyZWFrO2Nhc2UgNjA6Zj1cIiZsdDtcIjticmVhaztkZWZhdWx0OmNvbnRpbnVlfW4hPT1lJiYobys9ci5zbGljZShlLG4pKSxvKz1mLGU9bisxfXJldHVybiBuIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksb312YXIgbz0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGY9MCxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdShlLHQsbixvLGksdSl7dHx8KHQ9e30pO3ZhciBhLGMscD10O2lmKFwicmVmXCJpbiBwKWZvcihjIGluIHA9e30sdClcInJlZlwiPT1jP2E9dFtjXTpwW2NdPXRbY107dmFyIGw9e3R5cGU6ZSxwcm9wczpwLGtleTpuLHJlZjphLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWYsX19pOi0xLF9fdTowLF9fc291cmNlOmksX19zZWxmOnV9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihhPWUuZGVmYXVsdFByb3BzKSlmb3IoYyBpbiBhKXZvaWQgMD09PXBbY10mJihwW2NdPWFbY10pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGwpLGx9ZnVuY3Rpb24gYShyKXt2YXIgdD11KGUse3RwbDpyLGV4cHJzOltdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpfSk7cmV0dXJuIHQua2V5PXQuX192LHR9dmFyIGM9e30scD0vW0EtWl0vZztmdW5jdGlvbiBsKGUsdCl7aWYoci5hdHRyKXt2YXIgZj1yLmF0dHIoZSx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgZilyZXR1cm4gZn1pZih0PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT09ciYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIudmFsdWVPZj9yLnZhbHVlT2YoKTpyfSh0KSxcInJlZlwiPT09ZXx8XCJrZXlcIj09PWUpcmV0dXJuXCJcIjtpZihcInN0eWxlXCI9PT1lJiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGk9XCJcIjtmb3IodmFyIHUgaW4gdCl7dmFyIGE9dFt1XTtpZihudWxsIT1hJiZcIlwiIT09YSl7dmFyIGw9XCItXCI9PXVbMF0/dTpjW3VdfHwoY1t1XT11LnJlcGxhY2UocCxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpKSxzPVwiO1wiO1wibnVtYmVyXCIhPXR5cGVvZiBhfHxsLnN0YXJ0c1dpdGgoXCItLVwiKXx8by50ZXN0KGwpfHwocz1cInB4O1wiKSxpPWkrbCtcIjpcIithK3N9fXJldHVybiBlKyc9XCInK24oaSkrJ1wiJ31yZXR1cm4gbnVsbD09dHx8ITE9PT10fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHxcIm9iamVjdFwiPT10eXBlb2YgdD9cIlwiOiEwPT09dD9lOmUrJz1cIicrbihcIlwiK3QpKydcIid9ZnVuY3Rpb24gcyhyKXtpZihudWxsPT1yfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIG51bGw7aWYoXCJvYmplY3RcIj09dHlwZW9mIHIpe2lmKHZvaWQgMD09PXIuY29uc3RydWN0b3IpcmV0dXJuIHI7aWYoaShyKSl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXT1zKHJbZV0pO3JldHVybiByfX1yZXR1cm4gbihcIlwiK3IpfWV4cG9ydHt1IGFzIGpzeCxsIGFzIGpzeEF0dHIsdSBhcyBqc3hERVYscyBhcyBqc3hFc2NhcGUsYSBhcyBqc3hUZW1wbGF0ZSx1IGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogU3RvcmUgYmFzZSArIFByZWFjdCBjb250ZXh0LlxuICpcbiAqIGBjcmVhdGVTdG9yZWAgaXMgYSB0aGluIGNvbnZlbnRpb24tZW5mb3JjZXI6IGEgdHlwZWQgYmFnIG9mIHNpZ25hbHNcbiAqIHBsdXMgbWV0aG9kcy4gQXBwcyB1c2UgaXQgdG8gZGVmaW5lIGRvbWFpbiBzdG9yZXMgd2hvc2Ugb25seSBwdWJsaWNcbiAqIG11dGF0aW9uIHN1cmZhY2UgaXMgbmFtZWQgbWV0aG9kcyAoYWN0aW9ucyBjYWxsIHRoZW07IGNvbXBvbmVudHMgcmVhZFxuICogc2lnbmFscyBhbmQgZGlzcGF0Y2ggYWN0aW9ucykuIE5vIGNsZXZlcm5lc3Mg4oCUIGEgbmFtZWQgcGF0dGVybiBtb3JlXG4gKiB0aGFuIGEgbGlicmFyeS5cbiAqXG4gKiBgU3RvcmVQcm92aWRlcmAgKyBgdXNlU3RvcmVzYCB3aXJlIHRoZSBzdG9yZXMgYmFnIGludG8gUHJlYWN0IGNvbnRleHRcbiAqIHNvIGNvbXBvbmVudHMgYW5kIHRoZSBkZWxlZ2F0aW9uIHJ1bnRpbWUgY2FuIHJlYWNoIGl0IHZpYSBhIHNpbmdsZSBob29rLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBoZWxwZXI7IGV4aXN0cyBzbyBkb21haW4gc3RvcmVzIGhhdmUgYSBjYW5vbmljYWwgY3JlYXRpb25cbiAqIGNhbGwgZXZlbiB0aG91Z2ggdGhlIGJhZyBpdHNlbGYgaXMgYSBwbGFpbiBvYmplY3QuIENlbnRyYWxpc2luZyBoZXJlXG4gKiBsZXRzIHVzIGhhbmcgYWRkaXRpb25hbCBiZWhhdmlvdXIgb2ZmIHRoZSBjYWxsIHNpdGUgbGF0ZXIgKGRlYnVnXG4gKiBpbnN0cnVtZW50YXRpb24sIGRldnRvb2xzKSB3aXRob3V0IGEgbWlncmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmU8VCBleHRlbmRzIG9iamVjdD4oaW5pdDogVCk6IFQge1xuICByZXR1cm4gaW5pdDtcbn1cblxuY29uc3QgU3RvcmVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDx1bmtub3duPihudWxsKTtcblxuZXhwb3J0IHR5cGUgU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+ID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIHN0b3JlczogVFN0b3Jlcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdG9yZVByb3ZpZGVyPFRTdG9yZXM+KHsgY2hpbGRyZW4sIHN0b3JlcyB9OiBTdG9yZVByb3ZpZGVyUHJvcHM8VFN0b3Jlcz4pIHtcbiAgcmV0dXJuIDxTdG9yZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0b3Jlc30+e2NoaWxkcmVufTwvU3RvcmVDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JlczxUU3RvcmVzPigpOiBUU3RvcmVzIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTdG9yZUNvbnRleHQpIGFzIHVua25vd24gYXMgVFN0b3JlcyB8IG51bGw7XG4gIGlmIChjdHggPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VTdG9yZXMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFN0b3JlUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25Gb3JtIOKAlCB3cmFwcyBhIG5hdGl2ZSA8Zm9ybT4gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4uXG4gKlxuICogUmVuZGVycyA8Zm9ybSBkYXRhLWFjdGlvbj1cIntmb3JtLm5hbWV9OnN1Ym1pdFwiPiBzbyB0aGUgaW5zdGFsbGVkXG4gKiBldmVudCBkZWxlZ2F0aW9uIGNhdGNoZXMgdGhlIHN1Ym1pdCBldmVudCBhbmQgZGlzcGF0Y2hlcyB0byB0aGVcbiAqIGZvcm0ncyBhdXRvLXJlZ2lzdGVyZWQgOnN1Ym1pdCBoYW5kbGVyLiBgYXJpYS1idXN5YCBtaXJyb3JzIHRoZVxuICogYGlzU3VibWl0dGluZ2Agc2lnbmFsIHNvIGNvbnN1bWVyIHN0eWxpbmcgY2FuIHJlc3BvbmQgd2l0aG91dCBleHRyYVxuICogd2lyaW5nLiBUaGUgZm9ybSBlbGVtZW50IGFsc28gZXhwb3NlcyBgZGF0YS1wb2xseS1hY3Rpb24tZm9ybWAgZm9yXG4gKiBzdGFibGUgc2VsZWN0b3IgaG9va3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtU3RvcmUgfSBmcm9tIFwiLi4vYWN0aW9ucy9mb3JtLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25Gb3JtLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgZm9ybTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+O1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvbkZvcm08VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+KFxuICBwcm9wczogQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgZm9ybSwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBjb21iaW5lZCA9IGNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJmb3JtXCJdfSAke2NsYXNzTmFtZX1gIDogY2xhc3Nlc1tcImZvcm1cIl07XG4gIHJldHVybiAoXG4gICAgPGZvcm1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtjb21iaW5lZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWZvcm09e2Zvcm0ubmFtZX1cbiAgICAgIGRhdGEtYWN0aW9uPXtgJHtmb3JtLm5hbWV9OnN1Ym1pdGB9XG4gICAgICBhcmlhLWJ1c3k9e2Zvcm0uaXNTdWJtaXR0aW5nLnZhbHVlfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXX1cbiAgICAgIG5vVmFsaWRhdGVcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb3JtPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEZpcmUgYSBuYW1lZCBhY3Rpb24gdGhyb3VnaCB0aGUgZ2xvYmFsIGV2ZW50LWRlbGVnYXRpb24gcmVnaXN0cnkuXG4gKlxuICogVGhlIEFjdGlvbiogcHJpbWl0aXZlcyAoPEFjdGlvbklucHV0PiwgPEFjdGlvblNlbGVjdD4pIGNvbW1pdCBieVxuICogY2xpY2tpbmcgYSBkZXRhY2hlZCBgPGJ1dHRvbiBkYXRhLWFjdGlvbj1cIuKAplwiPmAgY2FycnlpbmcgZGF0YS1hY3Rpb24tKlxuICogYXR0cmlidXRlczsgdGhlIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lciByb3V0ZXMgaXQgaW50byB0aGVcbiAqIGNvbnN1bWVyJ3MgYWN0aW9uIHJlZ2lzdHJ5IHdpdGggbm8gZXh0cmEgd2lyaW5nLiBDZW50cmFsaXNlZCBoZXJlIHNvXG4gKiBldmVyeSBBY3Rpb24qIHByaW1pdGl2ZSBkaXNwYXRjaGVzIGlkZW50aWNhbGx5LlxuICpcbiAqIEtleXMgaW4gYGRhdGFgIGFyZSBjYW1lbENhc2UgYW5kIGNvbnZlcnRlZCB0byBkYXNoLWNhc2UgYXR0cmlidXRlXG4gKiBuYW1lcyDigJQgYGFjdGlvbkRhdGE9e3sgdGFza0lkIH19YCBiZWNvbWVzIGBkYXRhLWFjdGlvbi10YXNrLWlkYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgaGlkZGVuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgaGlkZGVuLnNldEF0dHJpYnV0ZShcImRhdGEtYWN0aW9uXCIsIGFjdGlvbik7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgY29uc3QgZGFzaEtleSA9IGtleS5yZXBsYWNlKC9bQS1aXS9nLCAobSkgPT4gYC0ke20udG9Mb3dlckNhc2UoKX1gKTtcbiAgICBoaWRkZW4uc2V0QXR0cmlidXRlKGBkYXRhLWFjdGlvbi0ke2Rhc2hLZXl9YCwgdmFsdWUpO1xuICB9XG4gIGhpZGRlbi5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgaGlkZGVuLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgaGlkZGVuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgaGlkZGVuLnRhYkluZGV4ID0gLTE7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuKTtcbiAgdHJ5IHtcbiAgICBoaWRkZW4uY2xpY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBoaWRkZW4ucmVtb3ZlKCk7XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBwb2xseSMxMjU6IGRhdGEtKiAvIGFyaWEtKiBhdHRyaWJ1dGUgcGFzc3Rocm91Z2ggZm9yIFVJIHByaW1pdGl2ZXMuXG4gKlxuICogUHJpbWl0aXZlcyBhY2NlcHQgYSBmaXhlZCBwcm9wIHNldC4gV2l0aG91dCBwYXNzdGhyb3VnaCwgYSBjb25zdW1lclxuICogdGhhdCBuZWVkcyBhIGBkYXRhLSpgIHRlc3QgaG9vayBvciBhbiBgYXJpYS0qYCBhdHRyaWJ1dGUgb24gdGhlXG4gKiBwcmltaXRpdmUncyBvd24gZWxlbWVudCBoYXMgdG8gd3JhcCBpdCBpbiBhbiBleHRyYSBET00gbm9kZSDigJQgYSBzbWVsbC5cbiAqXG4gKiB7QGxpbmsgUGFzc3Rocm91Z2hBdHRyc30gd2lkZW5zIGEgcHJpbWl0aXZlJ3MgcHJvcHMgdG8gYWNjZXB0IGFueVxuICogYGRhdGEtKmAgLyBgYXJpYS0qYCBrZXk7IHtAbGluayBjb2xsZWN0UGFzc3Rocm91Z2h9IGdhdGhlcnMgdGhlbSBmb3JcbiAqIHNwcmVhZGluZyBvbnRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuIFNwcmVhZCB0aGUgcmVzdWx0ICpiZWZvcmUqXG4gKiB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgc28gYSBjb25zdW1lciBrZXkgY2FuIG5ldmVyIG92ZXJyaWRlXG4gKiBvbmUgdGhlIHByaW1pdGl2ZSBzZXRzIGl0c2VsZiAoYGRhdGEtcG9sbHktKmAsIGV0Yy4pLlxuICovXG5cbi8qKiBJbmRleCBzaWduYXR1cmVzIGxldHRpbmcgYSBwcmltaXRpdmUncyBwcm9wcyBhY2NlcHQgYXJiaXRyYXJ5XG4gKiAgYGRhdGEtKmAgYW5kIGBhcmlhLSpgIGF0dHJpYnV0ZXMsIHBsdXMgdGhlIHN0YW5kYXJkIGB0aXRsZWBcbiAqICBhdHRyaWJ1dGUg4oCUIGEgbmF0aXZlIHRvb2x0aXAgaXMgYSBET00gaG9vaywgbm90IHN0eWxpbmcsIHNvIGl0XG4gKiAgcmlkZXMgdGhlIHNhbWUgcGFzc3Rocm91Z2ggcGF0aCAocG9sbHkjMTM1KS4gKi9cbmV4cG9ydCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKiBOYXRpdmUgdG9vbHRpcCB0ZXh0LCBmb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIHJvb3QgZWxlbWVudC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG4vKiogS2V5cywgYmV5b25kIHRoZSBgZGF0YS0qYCAvIGBhcmlhLSpgIHByZWZpeGVzLCB0aGF0IHBhc3MgdGhyb3VnaC4gKi9cbmZ1bmN0aW9uIGlzUGFzc3Rocm91Z2hLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKSB8fCBrZXkgPT09IFwidGl0bGVcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGBkYXRhLSpgIC8gYGFyaWEtKmAgLyBgdGl0bGVgIGF0dHJpYnV0ZXMgZnJvbSBhIHByb3BzIG9iamVjdFxuICogc28gdGhleSBjYW4gYmUgc3ByZWFkIG9udG8gYSBwcmltaXRpdmUncyByb290IGVsZW1lbnQuIGB1bmRlZmluZWRgXG4gKiB2YWx1ZXMgYW5kIG5vbi1hdHRyaWJ1dGUgdmFsdWUgdHlwZXMgKGZ1bmN0aW9ucywgb2JqZWN0cykgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UGFzc3Rocm91Z2goXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmICghaXNQYXNzdGhyb3VnaEtleShrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgb3V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25JbnB1dCDigJQgZHVhbC1tb2RlIHZpZXcvZWRpdCBpbnB1dCB3aXRoIGFjdGlvbiBkaXNwYXRjaCBvbiBjb21taXQuXG4gKlxuICogVmlldyBtb2RlIHJlbmRlcnMgdGhlIGN1cnJlbnQgdmFsdWUgYXMgdGV4dCAob3B0aW9uYWxseSB0aHJvdWdoIGFcbiAqIGNhbGxlci1zdXBwbGllZCBgcmVuZGVyVmlld2AgZm9yIG1hcmtkb3duLCByaWNoIGZvcm1hdHRpbmcsIGV0Yy4pLlxuICogQ2xpY2ssIEVudGVyLCBvciBTcGFjZSBlbnRlcnMgZWRpdCBtb2RlLiBFZGl0IG1vZGUgaXMgYSBuYXRpdmUgaW5wdXRcbiAqIG9yIHRleHRhcmVhOyBjb21taXQgZmlyZXMgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uIHdpdGggYGRhdGEtYWN0aW9uLXZhbHVlYFxuICogYW5kIGBkYXRhLWFjdGlvbi1maWVsZGAgc2V0IGZyb20gRm9ybURhdGEtc2hhcGUgc2VtYW50aWNzLCBzbyB0aGVcbiAqIGV4aXN0aW5nIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlcyBpdCB3aXRoIG5vIGV4dHJhIHdpcmluZy5cbiAqXG4gKiBgc2F2ZU9uYCBwaWNrcyB0aGUgY29tbWl0IHRyaWdnZXI6XG4gKiAgIFwiYmx1clwiICAgICAgIGNvbW1pdCB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogICBcImVudGVyXCIgICAgICBjb21taXQgb24gRW50ZXIgKHNpbmdsZS1saW5lKSBvciBDbWQvQ3RybCtFbnRlciAobXVsdGktbGluZSlcbiAqICAgXCJjbWQtZW50ZXJcIiAgY29tbWl0IG9ubHkgb24gQ21kL0N0cmwrRW50ZXJcbiAqICAgXCJleHBsaWNpdFwiICAgbmV2ZXIgYXV0by1jb21taXQg4oCUIGNhbGxlciB3aXJlcyBhIHNhdmUgYnV0dG9uIHdpdGggZGF0YS1hY3Rpb25cbiAqICAgXCJpbnB1dFwiICAgICAgY29tbWl0IG9uIGV2ZXJ5IGtleXN0cm9rZSDigJQgZm9yIGZpbHRlci1hcy15b3UtdHlwZSBmaWVsZHM7XG4gKiAgICAgICAgICAgICAgICB0aGUgZmllbGQgc3RheXMgaW4gZWRpdCBtb2RlIHJhdGhlciB0aGFuIHRvZ2dsaW5nIHRvIHZpZXdcbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQg4oCUXG4gKiBcInRleHRcIiAoZGVmYXVsdCksIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJudW1iZXJcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIGEgZGF0ZVxuICogb3IgbnVtZXJpYyBmaWVsZCBjb21taXRzIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0gbGlrZSBhbnkgb3RoZXIuXG4gKlxuICogTGF5b3V0LXNoaWZ0LWZyZWU6IHZpZXcgYW5kIGVkaXQgbW9kZXMgc2hhcmUgcGFkZGluZywgYm9yZGVyIHdpZHRoLFxuICogZm9udCwgYW5kIGxpbmUtaGVpZ2h0IHNvIHRoZSB0b2dnbGUgY2F1c2VzIG5vIHJlZmxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25JbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkaXNwYXRjaEFjdGlvbiB9IGZyb20gXCIuL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFNhdmVPbiA9IFwiYmx1clwiIHwgXCJlbnRlclwiIHwgXCJjbWQtZW50ZXJcIiB8IFwiZXhwbGljaXRcIiB8IFwiaW5wdXRcIjtcbmV4cG9ydCB0eXBlIEFjdGlvbklucHV0VmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFR5cGUgPVxuICB8IFwidGV4dFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUgdG8gcmVuZGVyIGluIHZpZXcgbW9kZSBhbmQgc2VlZCB0aGUgZWRpdCBidWZmZXIuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBjb21taXQuIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxuZXcgdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIENvbW1pdCB0cmlnZ2VyLiBEZWZhdWx0OiBcImJsdXJcIi4gKi9cbiAgc2F2ZU9uPzogQWN0aW9uSW5wdXRTYXZlT247XG4gIHZhcmlhbnQ/OiBBY3Rpb25JbnB1dFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBBY3Rpb25JbnB1dFR5cGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBhdCBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBDdXN0b20gdmlldyByZW5kZXJlciDigJQgcmVjZWl2ZXMgdmFsdWUsIHJldHVybnMgVk5vZGUuICovXG4gIHJlbmRlclZpZXc/OiAodmFsdWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIC8qKiBMYWJlbCBhbm5vdW5jZWQgYnkgc2NyZWVuIHJlYWRlcnMgZm9yIHRoZSBlZGl0IGFmZm9yZGFuY2UuICovXG4gIGFyaWFMYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHR3byByZW5kZXIgYnJhbmNoZXMgdGltZXMgdHdvIHZhcmlhbnRzIHRpbWVzIGZpdmUgc2F2ZU9uIHRyaWdnZXJzOyBicmFuY2hpbmcgaXMgaW5oZXJlbnQgdG8gdGhlIHByaW1pdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25JbnB1dChwcm9wczogQWN0aW9uSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgdmFyaWFudCA9IHByb3BzLnZhcmlhbnQgPz8gXCJzaW5nbGVcIjtcbiAgY29uc3Qgc2F2ZU9uID0gcHJvcHMuc2F2ZU9uID8/IFwiYmx1clwiO1xuICAvLyBcImlucHV0XCIgbW9kZSBpcyBhIHBlcm1hbmVudGx5LWVkaXRhYmxlIGZpbHRlciBmaWVsZCDigJQgaXQgbmV2ZXIgaGFzIGFcbiAgLy8gdmlldyBtb2RlIHRvIHRvZ2dsZSBiYWNrIHRvLCBzbyBpdCBzdGFydHMgaW4gZWRpdC5cbiAgY29uc3QgbGl2ZSA9IHNhdmVPbiA9PT0gXCJpbnB1dFwiO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxcInZpZXdcIiB8IFwiZWRpdFwiPihsaXZlID8gXCJlZGl0XCIgOiBcInZpZXdcIik7XG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUocHJvcHMudmFsdWUpO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09IFwidmlld1wiKSBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgb24gbW91bnQgZm9yIGEgbGl2ZSBmaWx0ZXIgZmllbGQ7IG9ubHkgcHVsbCBmb2N1c1xuICAgIC8vIHdoZW4gdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgdG9nZ2xlZCBhIHZpZXcgZmllbGQgaW50byBlZGl0IG1vZGUuXG4gICAgaWYgKG1vZGUgPT09IFwiZWRpdFwiICYmICFsaXZlICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0Py4oKTtcbiAgICB9XG4gIH0sIFttb2RlLCBsaXZlXSk7XG5cbiAgY29uc3QgZW50ZXJFZGl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBzZXRNb2RlKFwiZWRpdFwiKTtcbiAgfSwgW3Byb3BzLmRpc2FibGVkLCBwcm9wcy52YWx1ZV0pO1xuXG4gIGNvbnN0IGNvbW1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXh0ICE9PSBwcm9wcy52YWx1ZSkge1xuICAgICAgICBkaXNwYXRjaEFjdGlvbihwcm9wcy5hY3Rpb24sIHsgLi4uKHByb3BzLmFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEEgbGl2ZSBmaWx0ZXIgZmllbGQgc3RheXMgZWRpdGFibGU7IGV2ZXJ5IG90aGVyIHRyaWdnZXIgcmV0dXJuc1xuICAgICAgLy8gdG8gdmlldyBtb2RlIG9uY2UgdGhlIHZhbHVlIGlzIGNvbW1pdHRlZC5cbiAgICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gICAgfSxcbiAgICBbcHJvcHMuYWN0aW9uLCBwcm9wcy5hY3Rpb25EYXRhLCBwcm9wcy52YWx1ZSwgbGl2ZV1cbiAgKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbGl2ZV0pO1xuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBrZXlib2FyZCBoYW5kbGVyIGVuY29kZXMgdGhlIHNhdmVPbiDDlyB2YXJpYW50IG1hdHJpeC5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBjb25zdCBjbWQgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgfSBlbHNlIGlmICgoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJtdWx0aVwiICYmIGNtZCkgfHwgc2F2ZU9uID09PSBcImNtZC1lbnRlclwiKSB7XG4gICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbW1pdChkcmFmdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInJvb3RcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wicm9vdFwiXTtcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZvcndhcmRlZCBvbnRvIHdoaWNoZXZlciBlbGVtZW50IGlzIHRoZSByb290XG4gIC8vIGZvciB0aGUgY3VycmVudCBtb2RlOyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luIG9uIGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChtb2RlID09PSBcInZpZXdcIikge1xuICAgIGNvbnN0IHJlbmRlcmVkID0gcHJvcHMucmVuZGVyVmlldyA/IHByb3BzLnJlbmRlclZpZXcocHJvcHMudmFsdWUpIDogcHJvcHMudmFsdWU7XG4gICAgY29uc3QgaXNFbXB0eSA9IHByb3BzLnZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiA8YnV0dG9uPiB3b3VsZCBzd2FsbG93IHRleHQgc2VsZWN0aW9uIGFuZCBhZGQgZGVmYXVsdCBzdHlsaW5nOyBkaXYgd2l0aCByb2xlPWJ1dHRvbiBpcyB0aGUgaW5saW5lLWVkaXQgaWRpb20uXG4gICAgICA8ZGl2XG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgY2xhc3M9e2Ake2NsYXNzTmFtZX0gJHtjbGFzc2VzW1widmlld1wiXX1gfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWlucHV0XG4gICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgZGF0YS1zdGF0ZT17aXNFbXB0eSA/IFwiZW1wdHlcIiA6IFwiZmlsbGVkXCJ9XG4gICAgICAgIGRhdGEtdmFyaWFudD17dmFyaWFudH1cbiAgICAgICAgdGFiSW5kZXg9e3Byb3BzLmRpc2FibGVkID8gLTEgOiAwfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17cHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwifVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBvbkNsaWNrPXtlbnRlckVkaXR9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiB8fCBlLmtleSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVudGVyRWRpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2lzRW1wdHkgJiYgcHJvcHMucGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJwbGFjZWhvbGRlclwiXX0+e3Byb3BzLnBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICByZW5kZXJlZFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAuLi5wYXNzdGhyb3VnaCxcbiAgICBjbGFzczogYCR7Y2xhc3Nlc1tcImVkaXRcIl19ICR7Y2xhc3Nlc1tcInJvb3RcIl19YCxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktYWN0aW9uLWlucHV0XCI6IHRydWUsXG4gICAgXCJkYXRhLXN0YXRlXCI6IFwiZWRpdGluZ1wiLFxuICAgIFwiZGF0YS12YXJpYW50XCI6IHZhcmlhbnQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiBkcmFmdCxcbiAgICBvbklucHV0OiAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgc2V0RHJhZnQobmV4dCk7XG4gICAgICBpZiAobGl2ZSkgY29tbWl0KG5leHQpO1xuICAgIH0sXG4gICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImJsdXJcIikgY29tbWl0KGRyYWZ0KTtcbiAgICAgIGVsc2UgaWYgKCFsaXZlKSBjYW5jZWwoKTtcbiAgICB9LFxuICAgIG9uS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogcHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwiLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgfTtcblxuICBpZiAodmFyaWFudCA9PT0gXCJtdWx0aVwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgPSBlbDtcbiAgICAgICAgfX1cbiAgICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICB9fVxuICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogTGF5b3V0IOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgbGF5b3V0aW5nIGNvbmNlcm5zLlxuICpcbiAqIEV2ZXJ5IG90aGVyIGNvbXBvbmVudCBpbiBAZmFpcmZveC9wb2xseS91aSAoYW5kIGV2ZXJ5IGNvbnN1bWVyIGFwcFxuICogdGhhdCBydW5zIGBwb2xseSBxdWFsaXR5IGNzcy1sYXlvdXRgKSByb3V0ZXMgZmxleC9ncmlkIGRlY2lzaW9uc1xuICogdGhyb3VnaCB0aGlzIGNvbXBvbmVudC4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyB0aGVcbiAqIHN0eWxlc2hlZXQgY2FuIHJlYWQgdGhlbSB1bmlmb3JtbHkgYW5kIHNvIGNvbnN1bWVycyBjYW4gb3ZlcnJpZGVcbiAqIGFueSBvZiB0aGVtIGluIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCB0b3VjaGluZyBzcGVjaWZpY2l0eS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCwgdHlwZSBSZWYgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5VXA/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUG9pbnRlci1lbnRlci9sZWF2ZSBvbiB0aGUgY29udGFpbmVyIGl0c2VsZiDigJQgYSBob3Zlci1zY29wZWQgYmVoYXZpb3VyXG4gICAqIHN1Y2ggYXMgcGF1c2luZyBhIHRpbWVyIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgYSBzdGFjay4gV2l0aG91dCB0aGVzZVxuICAgKiBhIGNvbXBvbmVudCB0aGF0IG5lZWRzIG9uZSBoYXMgdG8gcmVuZGVyIGl0cyBvd24gZWxlbWVudCBhbmQgd3JpdGUgaXRzXG4gICAqIG93biBncmlkLCB3aGljaCBpcyB0aGUgbG9vcGhvbGUgPExheW91dD4gZXhpc3RzIHRvIGNsb3NlLiAqL1xuICBvbk1vdXNlRW50ZXI/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbk1vdXNlTGVhdmU/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUmVmIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50LiBTYW1lIHJlYXNvbiBhcyB0aGUgaGFuZGxlcnMgYWJvdmU6IGEgZm9jdXNcbiAgICogdHJhcCBvciBhIG1lYXN1cmVtZW50IG5lZWRzIHRoZSBub2RlLCBhbmQgcmVmdXNpbmcgaXQgZm9yY2VzIHJhdyBDU1MuXG4gICAqXG4gICAqIE5hbWVkIGBlbGVtZW50UmVmYCwgbm90IGByZWZgOiBQcmVhY3QgbGlmdHMgYSBgcmVmYCBwcm9wIG9mZiBhIGZ1bmN0aW9uXG4gICAqIGNvbXBvbmVudCBpbnRvIHRoZSB2bm9kZSBhbmQgbmV2ZXIgcGFzc2VzIGl0IHRocm91Z2ggcHJvcHMsIHNvIGEgcGxhaW5cbiAgICogYHJlZmAgaGVyZSB3b3VsZCBiZSBzaWxlbnRseSBkcm9wcGVkLiBDYXVnaHQgYnkgTW9kYWwncyBvdmVybGF5IHRlc3Qg4oCUXG4gICAqIHRoZSBzdGFjayBzdG9wcGVkIHBvcHBpbmcgYmVjYXVzZSB0aGUgY2FsbGJhY2sgbmV2ZXIgcmFuLiAqL1xuICBlbGVtZW50UmVmPzogUmVmPEhUTUxFbGVtZW50PjtcblxuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzaXh0ZWVuIG9wdGlvbmFsIHByb3AtdG8tY3VzdG9tLXByb3BlcnR5IG1hcHBpbmdzOyBmbGF0IGFuZCBsaW5lYXIuXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KHByb3BzOiBMYXlvdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJkaXZcIixcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgY29udGVudHMsXG4gICAgc3ViZ3JpZCxcbiAgICBnYXAsXG4gICAgcGFkZGluZyxcbiAgICBoZWlnaHQsXG4gICAgbWluSGVpZ2h0LFxuICAgIG1heElubGluZVNpemUsXG4gICAganVzdGlmeUl0ZW1zLFxuICAgIGFsaWduSXRlbXMsXG4gICAganVzdGlmeUNvbnRlbnQsXG4gICAgYWxpZ25Db250ZW50LFxuICAgIGp1c3RpZnlTZWxmLFxuICAgIGFsaWduU2VsZixcbiAgICBhdXRvRmxvdyxcbiAgICBhdXRvUm93cyxcbiAgICBhdXRvQ29sdW1ucyxcbiAgICBzdGFja09uTW9iaWxlLFxuICAgIGlubGluZSxcbiAgICBjbGFzc05hbWUsXG4gICAgb25DbGljayxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlLFxuICAgIGVsZW1lbnRSZWYsXG4gICAgcm9sZSxcbiAgICB0YWJJbmRleCxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKGNvbnRlbnRzKSB7XG4gICAgc3R5bGVbXCJkaXNwbGF5XCJdID0gXCJjb250ZW50c1wiO1xuICB9IGVsc2UgaWYgKHN1YmdyaWQpIHtcbiAgICBzdHlsZVtcIi0tbC1jb2xcIl0gPSBcIjEgLyAtMVwiO1xuICAgIHN0eWxlW1wiLS1sLWNvbHNcIl0gPSBcInN1YmdyaWRcIjtcbiAgICBpZiAocGFkZGluZykgc3R5bGVbXCItLWwtcFwiXSA9IHBhZGRpbmc7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1sLWhcIl0gPSBoZWlnaHQ7XG4gICAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLWwtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gICAgaWYgKG1heElubGluZVNpemUpIHN0eWxlW1wiLS1sLW1pc1wiXSA9IG1heElubGluZVNpemU7XG4gICAgaWYgKHJvd3MpIHN0eWxlW1wiLS1sLXJvd3NcIl0gPSByb3dzO1xuICAgIGlmIChjb2x1bW5zKSBzdHlsZVtcIi0tbC1jb2xzXCJdID0gY29sdW1ucztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gICAgaWYgKGp1c3RpZnlJdGVtcykgc3R5bGVbXCItLWwtamlcIl0gPSBqdXN0aWZ5SXRlbXM7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoanVzdGlmeUNvbnRlbnQpIHN0eWxlW1wiLS1sLWpjXCJdID0ganVzdGlmeUNvbnRlbnQ7XG4gICAgaWYgKGFsaWduQ29udGVudCkgc3R5bGVbXCItLWwtYWNcIl0gPSBhbGlnbkNvbnRlbnQ7XG4gICAgaWYgKGF1dG9GbG93KSBzdHlsZVtcIi0tbC1mbG93XCJdID0gYXV0b0Zsb3c7XG4gICAgaWYgKGF1dG9Sb3dzKSBzdHlsZVtcIi0tbC1hcm93c1wiXSA9IGF1dG9Sb3dzO1xuICAgIGlmIChhdXRvQ29sdW1ucykgc3R5bGVbXCItLWwtYWNvbHNcIl0gPSBhdXRvQ29sdW1ucztcbiAgfVxuICBpZiAoanVzdGlmeVNlbGYpIHN0eWxlW1wiLS1sLWpzXCJdID0ganVzdGlmeVNlbGY7XG4gIGlmIChhbGlnblNlbGYpIHN0eWxlW1wiLS1sLWFzXCJdID0gYWxpZ25TZWxmO1xuXG4gIGNvbnN0IGJhc2VQYXJ0cyA9IFtjbGFzc2VzW1wibGF5b3V0XCJdXTtcbiAgaWYgKGlubGluZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChzdGFja09uTW9iaWxlKSBiYXNlUGFydHMucHVzaChjbGFzc2VzW1wic3RhY2tPbk1vYmlsZVwiXSk7XG4gIGNvbnN0IGJhc2VDbGFzcyA9IGJhc2VQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IGNvbWJpbmVkID0gY29udGVudHMgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUgPyBgJHtiYXNlQ2xhc3N9ICR7Y2xhc3NOYW1lfWAgOiBiYXNlQ2xhc3M7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgICAgLy8gYXR0cmlidXRlcyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzTmFtZTogY29tYmluZWQsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNlbGVjdFRyaWdnZXIg4oCUIHRoZSBsYWJlbC9jYXJldCByb3cgaW5zaWRlIGEgc2VsZWN0IHRyaWdnZXIgYm94LlxuICpcbiAqIGAudHJpZ2dlcmAgaW4gU2VsZWN0Lm1vZHVsZS5jc3Mgc3R5bGVzIHRoZSAqYm94KjogYm9yZGVyLCBwYWRkaW5nLFxuICogYG1pbi1ibG9jay1zaXplYCwgYW5kIGBhbGlnbi1jb250ZW50OiBjZW50ZXJgIHRvIGNlbnRyZSBvbmUgY2hpbGQgaW5cbiAqIGl0LiBJdCBkZWxpYmVyYXRlbHkgZGVjbGFyZXMgbm8gZmxleCBvciBncmlkIG9mIGl0cyBvd24g4oCUIHBvbGx5LXVpXG4gKiByb3V0ZXMgZXZlcnkgbGF5b3V0IGRlY2lzaW9uIHRocm91Z2ggPExheW91dD4g4oCUIHNvIHRoZSBjb21wb25lbnRcbiAqIHRoYXQgYXBwbGllcyBgLnRyaWdnZXJgIG11c3Qgc3VwcGx5IHRoZSByb3cuXG4gKlxuICogcG9sbHkjMTgwOiB0aGF0IHJ1bGUgd2FzIGNoYW5nZWQgZm9yIG9uZSBvZiBpdHMgdHdvIGNvbnN1bWVycy5cbiAqIDxTZWxlY3Q+IGdhaW5lZCBhIDxMYXlvdXQ+OyA8QWN0aW9uU2VsZWN0Piwgd2hpY2ggYXBwbGllcyB0aGUgc2FtZVxuICogY2xhc3MgdGhyb3VnaCBEcm9wZG93bidzIGB0cmlnZ2VyQ2xhc3NOYW1lYCwga2VwdCByZW5kZXJpbmcgdHdvIGJhcmVcbiAqIGlubGluZSBzcGFucywgc28gaXRzIGNhcmV0IHdyYXBwZWQgb250byBhIHNlY29uZCBsaW5lLiBOb3RoaW5nIHRpZWRcbiAqIHRoZSBzdHlsZXNoZWV0J3MgY29udHJhY3QgdG8gdGhlIGNvbXBvbmVudHMgdGhhdCBoYWQgdG8gc2F0aXNmeSBpdC5cbiAqIFRoaXMgbW9kdWxlIGlzIHRoYXQgdGllOiBvbmUgcm93LCBvbmUgZGVmaW5pdGlvbiwgYm90aCBjb25zdW1lcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4uL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFRyaWdnZXJQcm9wcyA9IHtcbiAgLyoqIFRleHQgaW4gdGhlIHRyaWdnZXIg4oCUIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVyIHRoZSBkcm9wZG93biBjYXJldCBiZXNpZGUgdGhlIGxhYmVsLiBPZmYgZm9yIGEgZGlzYWJsZWRcbiAgICogPEFjdGlvblNlbGVjdD4sIHdoaWNoIGlzIHN0YXRpYyB0ZXh0IHdpdGggbm8gbWVudSB0byBvcGVuLlxuICAgKi9cbiAgY2FyZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0aGUgcm93IHJlbmRlcnMgYXMuIGBzcGFuYCB3aGVyZSB0aGUgdHJpZ2dlciBib3ggaXMgaXRzZWxmXG4gICAqIHBocmFzaW5nIGNvbnRlbnQg4oCUIGEgZGlzYWJsZWQgPEFjdGlvblNlbGVjdD4gcmVuZGVycyBpdHMgYm94IGFzIGFcbiAgICogPHNwYW4+LCB3aGljaCBtYXkgbm90IGNvbnRhaW4gYSA8ZGl2Pi5cbiAgICovXG4gIGFzPzogXCJkaXZcIiB8IFwic3BhblwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIocHJvcHM6IFNlbGVjdFRyaWdnZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBsYWJlbCwgY2FyZXQgPSB0cnVlLCBhcyA9IFwiZGl2XCIgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPXthc31cbiAgICAgIGlubGluZVxuICAgICAgLy8gV2l0aG91dCBhIGNhcmV0IHRoZSBzZWNvbmQgdHJhY2sgd291bGQgc3RpbGwgY29udHJpYnV0ZSBpdHMgZ2FwLFxuICAgICAgLy8gcGFkZGluZyB0aGUgdHJpZ2dlciBieSA4cHggaXQgZG9lcyBub3QgbmVlZC5cbiAgICAgIGNvbHVtbnM9e2NhcmV0ID8gXCIxZnIgYXV0b1wiIDogXCIxZnJcIn1cbiAgICAgIHsuLi4oY2FyZXQgPyB7IGdhcDogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiB9IDoge30pfVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBtYXhJbmxpbmVTaXplPVwiMTAwJVwiXG4gICAgPlxuICAgICAgey8qIFRoZSAxZnIgdHJhY2sgYmxvY2tpZmllcyB0aGlzIHNwYW4sIHdoaWNoIGlzIHdoYXQgbGV0c1xuICAgICAgICAgIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2AgYXBwbHkgdG8gYSBsb25nIGxhYmVsLiAqL31cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfSBkYXRhLXBvbGx5LXNlbGVjdC1sYWJlbD5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICAge2NhcmV0ICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKlxuICogQm90aCBicmFuY2hlcyByZW5kZXIgdGhlaXIgbGFiZWwvY2FyZXQgcm93IHRocm91Z2ggPFNlbGVjdFRyaWdnZXI+LFxuICogdGhlIHNhbWUgcm93IDxTZWxlY3Q+IHVzZXMg4oCUIGAudHJpZ2dlcmAgc3R5bGVzIHRoZSBib3ggYW5kIHN1cHBsaWVzXG4gKiBubyBsYXlvdXQsIHNvIHRoZSBjb21wb25lbnQgb3dlcyBpdCBvbmUgKHBvbGx5IzE4MCkuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCB7IFNlbGVjdFRyaWdnZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPFNlbGVjdFRyaWdnZXIgYXM9XCJzcGFuXCIgY2FyZXQ9e2ZhbHNlfSBsYWJlbD17ZGlzcGxheVRleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9ezxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dH0gLz59XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIGhlaWdodCArIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLlxuICogVGhlIGJ1dHRvbiBpcyBhIGZsZXggY29udGFpbmVyLCBzbyBhbiBpY29uIGFuZCBhIGxhYmVsIGFyZSBpdHMgb3duXG4gKiBjaGlsZHJlbiB3aXRoIGEgYGdhcGAgYmV0d2VlbiB0aGVtLlxuICpcbiAqIEhlaWdodCBjb21lcyBmcm9tIC0tcG9sbHktY29udHJvbC1oZWlnaHQtKiwgbmV2ZXIgZnJvbSBwYWRkaW5nLCBzbyBhXG4gKiBCdXR0b24gaXMgZXhhY3RseSBhcyB0YWxsIGFzIGEgVGV4dElucHV0IG9yIGEgU2VsZWN0IGluIHRoZSBzYW1lIHJvdy5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIC8qKiBQdWxsIHRoZSBib3ggb3V0IGJ5IGl0cyBvd24gaW5saW5lIHBhZGRpbmcgc28gdGhlIExBQkVMIHNpdHMgb24gdGhlXG4gICAqIHRleHQgZWRnZSByYXRoZXIgdGhhbiB0aGUgYm94IGVkZ2UuIEZvciBhIGB0ZXJ0aWFyeWAgYnV0dG9uIGluIGEgdGV4dFxuICAgKiBjb2x1bW4sIHdoZXJlIHRoZSBpbnZpc2libGUgcGFkZGluZyBvdGhlcndpc2UgcmVhZHMgYXMgYW4gaW5kZW50XG4gICAqIGFnYWluc3QgdGhlIGNvcHkgYmVzaWRlIGl0LiBBIGJvcmRlcmVkIGJ1dHRvbiBzaG91bGQga2VlcCBpdHMgZGVmYXVsdFxuICAgKiBib3ggYWxpZ25tZW50IOKAlCB0aGUgYm9yZGVyIGlzIHdoYXQgbWFrZXMgdGhhdCBlZGdlIGxlZ2libGUuIFRoZSBoaXRcbiAgICogdGFyZ2V0IGlzIHVuY2hhbmdlZDsgb25seSB0aGUgYm94J3MgcG9zaXRpb24gaW4gdGhlIGxheW91dCBtb3Zlcy4gKi9cbiAgZmx1c2g/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBcImRhdGEtYWN0aW9uXCI/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGFjdGlvbi1wYXlsb2FkIGF0dHJpYnV0ZXMgdGhlIGV2ZW50IGRlbGVnYXRvciBwYXJzZXNcbiAgICogaW50byBgY3R4LmRhdGFgLiBgZGF0YS1hY3Rpb24tdGlkPVwidC0xN1wiYCBiZWNvbWVzIGB7IHRpZDogXCJ0LTE3XCIgfWAsXG4gICAqIGBkYXRhLWFjdGlvbi1pdGVtLWlkPVwi4oCmXCJgIGJlY29tZXMgYHsgaXRlbUlkOiBcIuKAplwiIH1gLCBhbmQgc28gb24uXG4gICAqIFR5cGVkIGFzIGFuIGluZGV4IHNpZ25hdHVyZSBzbyBldmVyeSBgZGF0YS1hY3Rpb24tKmAga2V5IHRoZVxuICAgKiBjb25zdW1lciBjYXJlcyBhYm91dCB0eXBlLWNoZWNrcyB3aXRob3V0IGEgQnV0dG9uLXNpZGUgZW51bWVyYXRpb24uICovXG4gIFthY3Rpb25EYXRhQXR0cjogYGRhdGEtYWN0aW9uLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnRlbnQvYWNjZXNzaWJpbGl0eSBkaW1lbnNpb24uIEEgdmlzaWJsZSB0ZXh0IGBsYWJlbGAgaXMgdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUsIHNvIGl0IG1ha2VzIGBhcmlhLWxhYmVsYCBvcHRpb25hbC4gQW4gaWNvbi1vbmx5XG4gKiBidXR0b24gaGFzIG5vIHRleHQgdG8gbmFtZSBpdCwgc28gYGFyaWEtbGFiZWxgIGlzIFJFUVVJUkVEIOKAlCB5b3VcbiAqIGNhbm5vdCBjb25zdHJ1Y3QgYW4gdW5uYW1lZCBpY29uIGJ1dHRvbi4gKEJ1dHRvbidzIGhvdmVyIHRpdGxlIHRoZW5cbiAqIGZhbGxzIGJhY2sgdG8gdGhhdCBhcmlhLWxhYmVsLCBzbyB0aGUgc2FtZSBwcm9wIGdpdmVzIGJvdGggdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUgYW5kIHRoZSB0b29sdGlwLilcbiAqL1xudHlwZSBMYWJlbGxlZENvbnRlbnQgPSB7XG4gIGxhYmVsOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgaWNvbj86IFZOb2RlO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG50eXBlIEljb25Pbmx5Q29udGVudCA9IHtcbiAgaWNvbjogVk5vZGU7XG4gIGxhYmVsPzogbmV2ZXI7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Db250ZW50ID0gTGFiZWxsZWRDb250ZW50IHwgSWNvbk9ubHlDb250ZW50O1xuXG50eXBlIEJ1dHRvbkVsZW1lbnQgPSB7XG4gIGhyZWY/OiBuZXZlcjtcbiAgdGFyZ2V0PzogbmV2ZXI7XG4gIHJlbD86IG5ldmVyO1xuICBkb3dubG9hZD86IG5ldmVyO1xuICB0eXBlPzogXCJidXR0b25cIiB8IFwic3VibWl0XCIgfCBcInJlc2V0XCI7XG59O1xuXG50eXBlIExpbmtFbGVtZW50ID0ge1xuICBocmVmOiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbiAgcmVsPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCA8YT4gc28gYSBCdXR0b24tYXMtbGluayBjYW4gb2ZmZXIgYSBmaWxlXG4gICAqIGRvd25sb2FkLiBBbiBlbXB0eSBzdHJpbmcgdXNlcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUuICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICB0eXBlPzogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBCdXR0b25Qcm9wcyA9IEJhc2VCdXR0b25Qcm9wcyAmIEJ1dHRvbkNvbnRlbnQgJiAoQnV0dG9uRWxlbWVudCB8IExpbmtFbGVtZW50KTtcblxuZnVuY3Rpb24gdGllckNsYXNzKHRpZXI6IEJ1dHRvblRpZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodGllciA9PT0gXCJwcmltYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclByaW1hcnlcIl07XG4gIGlmICh0aWVyID09PSBcInRlcnRpYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclRlcnRpYXJ5XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRpZXJTZWNvbmRhcnlcIl07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQ2xhc3MoY29sb3I6IEJ1dHRvbkNvbG9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbG9yID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckluZm9cIl07XG4gIGlmIChjb2xvciA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JTdWNjZXNzXCJdO1xuICBpZiAoY29sb3IgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yV2FybmluZ1wiXTtcbiAgaWYgKGNvbG9yID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yRGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzaXplQ2xhc3Moc2l6ZTogQnV0dG9uU2l6ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaXplID09PSBcInNtYWxsXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuU21hbGxcIl07XG4gIGlmIChzaXplID09PSBcImxhcmdlXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuTGFyZ2VcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBmbGF0IHByb3AtdG8tY2xhc3MgY29tcG9zaXRpb24gcGx1cyBvbmUgYW5jaG9yL2J1dHRvbiBicmFuY2g7IHNwbGl0dGluZyB3b3VsZCBqdXN0IGhpZGUgdGhlIG1hcHBpbmcuXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKHByb3BzOiBCdXR0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHRpZXIgPSBcInNlY29uZGFyeVwiLFxuICAgIGNvbG9yID0gXCJkZWZhdWx0XCIsXG4gICAgc2l6ZSA9IFwibm9ybWFsXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBjaXJjbGUgPSBmYWxzZSxcbiAgICBib3VuZGVkID0gZmFsc2UsXG4gICAgZmx1c2ggPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoZmx1c2gpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkZsdXNoXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIC8vIEFuIGljb24gYmVzaWRlIGEgbGFiZWwgaXMgYW4gYXJyYW5nZW1lbnQsIHNvIGl0IGdvZXMgdGhyb3VnaCA8TGF5b3V0Pi5cbiAgLy8gQSBsYWJlbCBvbiBpdHMgb3duIGlzIG5vdDogaXQgaXMgb25lIGlubGluZSBjaGlsZCB0aGF0IHRoZSBidXR0b24nc1xuICAvLyBhbGlnbi1jb250ZW50IGFuZCB0ZXh0LWFsaWduIGNlbnRyZSwgd2l0aCBubyBjb250YWluZXIgYXQgYWxsLlxuICBjb25zdCBjb250ZW50ID1cbiAgICBpY29uID09PSB1bmRlZmluZWQgPyAoXG4gICAgICBsYWJlbFxuICAgICkgOiAoXG4gICAgICA8TGF5b3V0IGlubGluZSBjb2x1bW5zPVwiYXV0byBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImljb25cIl19PntpY29ufTwvc3Bhbj5cbiAgICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgICA8L0xheW91dD5cbiAgICApO1xuXG4gIGNvbnN0IGRhdGFBY3Rpb24gPSBwcm9wc1tcImRhdGEtYWN0aW9uXCJdO1xuICBjb25zdCBhcmlhTGFiZWwgPSBwcm9wc1tcImFyaWEtbGFiZWxcIl07XG4gIC8vIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIGhvdmVyIHRvb2x0aXA6IGFuIGV4cGxpY2l0IHRpdGxlIHdpbnMsIGVsc2UgdGhlXG4gIC8vIHZpc2libGUgdGV4dCBsYWJlbCwgZWxzZSB0aGUgYWNjZXNzaWJsZSBuYW1lIOKAlCBzbyBhbiBpY29uLW9ubHkgYnV0dG9uXG4gIC8vICh3aGljaCBjYXJyaWVzIGFuIGFyaWEtbGFiZWwpIHN0aWxsIGdldHMgb25lLiBQYXNzIHRpdGxlPVwiXCIgdG8gb3B0IG91dC5cbiAgY29uc3QgcmVzb2x2ZWRUaXRsZSA9XG4gICAgdGl0bGUgPz9cbiAgICAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiICYmIGxhYmVsLmxlbmd0aCA+IDBcbiAgICAgID8gbGFiZWxcbiAgICAgIDogdHlwZW9mIGFyaWFMYWJlbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGFyaWFMYWJlbFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIC8vIENvbGxlY3QgZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGV4dHJhIHRoZSBjb25zdW1lciBwYXNzZWQgc28gdGhlXG4gIC8vIGV2ZW50IGRlbGVnYXRvciBjYW4gcmVhZCB0aGVtIG9mZiB0aGUgcmVuZGVyZWQgZWxlbWVudC4gV2l0aG91dFxuICAvLyB0aGlzLCBhbnl0aGluZyBiZXlvbmQgYGRhdGEtYWN0aW9uYCBpcyBzaWxlbnRseSBkcm9wcGVkIGFuZFxuICAvLyBoYW5kbGVycyBmaXJlIHdpdGggYW4gZW1wdHkgYGN0eC5kYXRhYC5cbiAgY29uc3QgYWN0aW9uRGF0YUF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYWN0aW9uRGF0YUF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoXCJocmVmXCIgaW4gcHJvcHMgJiYgcHJvcHMuaHJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGNsYXNzPXtidXR0b25DbGFzc31cbiAgICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICAgIGhyZWY9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaHJlZn1cbiAgICAgICAgdGFyZ2V0PXtcInRhcmdldFwiIGluIHByb3BzID8gcHJvcHMudGFyZ2V0IDogdW5kZWZpbmVkfVxuICAgICAgICByZWw9e1wicmVsXCIgaW4gcHJvcHMgPyBwcm9wcy5yZWwgOiB1bmRlZmluZWR9XG4gICAgICAgIGRvd25sb2FkPXtcImRvd25sb2FkXCIgaW4gcHJvcHMgPyBwcm9wcy5kb3dubG9hZCA6IHVuZGVmaW5lZH1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICAgIHsuLi5hY3Rpb25EYXRhQXR0cnN9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFR5cGU6IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiID1cbiAgICBcInR5cGVcIiBpbiBwcm9wcyAmJiBwcm9wcy50eXBlID8gcHJvcHMudHlwZSA6IFwiYnV0dG9uXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICB0aXRsZT17cmVzb2x2ZWRUaXRsZX1cbiAgICAgIHR5cGU9e3Jlc29sdmVkVHlwZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYnV0dG9uPXt0aWVyfVxuICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFN1cmZhY2Ug4oCUIHRoZSBvbmUgcHJpbWl0aXZlIHRoYXQgb3ducyB2aXN1YWwtc3VyZmFjZSBjb25jZXJucy5cbiAqXG4gKiBXaGVyZSBMYXlvdXQgZ292ZXJucyBzcGF0aWFsIGNvbmNlcm5zIChncmlkLCBmbGV4LCBnYXAsIGFsaWdubWVudCksXG4gKiBTdXJmYWNlIGdvdmVybnMgdGhlIGNocm9tZSB0aGF0IHNpdHMgb24gdG9wIG9mIGxheW91dDogcGFkZGluZyxcbiAqIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIGFuZCB0aGUgbmFycm93IHBvc2l0aW9uaW5nIGlkaW9tc1xuICogKHN0aWNreSBzdHJpcHMsIGZpeGVkIGZsb2F0aW5nIHBhbmVzKSB0aGF0IGNvbnN1bWVycyByZWFjaCBmb3IgaW5saW5lXG4gKiBzdHlsZXMgdG8gZXhwcmVzcy4gRXZlcnkgcHJvcCBtYXBzIHRvIGEgYC0tcG9sbHktKmAgdG9rZW4gdGhyb3VnaCBhXG4gKiBsb2NhbCBgLS1zLSpgIGN1c3RvbSBwcm9wZXJ0eSwgc28gY29uc3VtZXJzIGNhbiByZXRoZW1lIGFuIGluZGl2aWR1YWxcbiAqIFN1cmZhY2UgYnkgb3ZlcnJpZGluZyB0aGUgcG9sbHkgdG9rZW4gaW4gYHN0eWxlYCB3aXRob3V0IHRvdWNoaW5nIHRoZVxuICogcHJpbWl0aXZlJ3MgQ1NTLlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU3VyZmFjZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VWYXJpYW50ID1cbiAgfCBcInBsYWluXCJcbiAgfCBcInJhaXNlZFwiXG4gIHwgXCJzdW5rZW5cIlxuICB8IFwiYnViYmxlXCJcbiAgfCBcImNoaXBcIlxuICB8IFwiY2FsbG91dFwiXG4gIHwgXCJmbG9hdGluZ1wiXG4gIHwgXCJzdGlja3ktYmFyXCI7XG5cbnR5cGUgQmFja2dyb3VuZCA9IFwicmFpc2VkXCIgfCBcInN1bmtlblwiIHwgXCJ0cmFuc3BhcmVudFwiIHwgKHN0cmluZyAmIHt9KTtcbnR5cGUgUmFkaXVzID0gXCJub25lXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcImZ1bGxcIjtcbnR5cGUgQm9yZGVyID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwic3Ryb25nXCI7XG50eXBlIEJvcmRlcldpZHRoID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwibWVkaXVtXCIgfCBcInRoaWNrXCI7XG50eXBlIEJvcmRlclNpZGVzID1cbiAgfCBcImFsbFwiXG4gIHwgXCJibG9jay1zdGFydFwiXG4gIHwgXCJibG9jay1lbmRcIlxuICB8IFwiaW5saW5lLXN0YXJ0XCJcbiAgfCBcImlubGluZS1lbmRcIlxuICB8IFwiYmxvY2tcIlxuICB8IFwiaW5saW5lXCI7XG50eXBlIFNoYWRvdyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xudHlwZSBQb3NpdGlvbiA9IFwic3RhdGljXCIgfCBcInJlbGF0aXZlXCIgfCBcImFic29sdXRlXCIgfCBcInN0aWNreVwiIHwgXCJmaXhlZFwiO1xudHlwZSBCb3JkZXJTdHlsZSA9IFwic29saWRcIiB8IFwiZGFzaGVkXCI7XG50eXBlIE92ZXJmbG93ID0gXCJ2aXNpYmxlXCIgfCBcImhpZGRlblwiIHwgXCJhdXRvXCIgfCBcInNjcm9sbFwiO1xudHlwZSBTY2hlbWUgPSBcImRhcmtcIiB8IFwibGlnaHRcIjtcblxuLyoqXG4gKiBBcmJpdHJhcnkgYGRhdGEtKmAsIGBhcmlhLSpgLCBhbmQgYHRpdGxlYCBhdHRyaWJ1dGVzIGZvcndhcmRlZCB0byB0aGVcbiAqIHJlbmRlcmVkIGVsZW1lbnQgc28gY29uc3VtZXJzIChNb2RhbCwgVG9hc3QsIENhcmQsIGV0Yy4pIGNhbiBjb21wb3NlXG4gKiBTdXJmYWNlIHdpdGhvdXQgbG9zaW5nIERPTSBob29rcywgQVJJQSBzZW1hbnRpY3MsIG9yIGEgbmF0aXZlIHRvb2x0aXAuXG4gKi9cbmV4cG9ydCB0eXBlIFN1cmZhY2VEYXRhQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VyZmFjZVByb3BzID0gU3VyZmFjZURhdGFBdHRycyAmIHtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBhcnRpY2xlLCBhc2lkZSwgaGVhZGVyLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIE5hbWVkIHByZXNldCB0aGF0IHJlc29sdmVzIHRvIGEgZGVmYXVsdCBidW5kbGUgb2YgdGhlIHByb3BzIGJlbG93LiBFeHBsaWNpdCBwcm9wcyBvdmVycmlkZS4gKi9cbiAgdmFyaWFudD86IFN1cmZhY2VWYXJpYW50O1xuXG4gIC8qKiBBbnkgQ1NTIGxlbmd0aCwgdHlwaWNhbGx5IGB2YXIoLS1wb2xseS1zcGFjZS0qKWAuICovXG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWVkIHZhbHVlcyBtYXAgdG8gYHZhcigtLXBvbGx5LXN1cmZhY2UtKilgOyByYXcgc3RyaW5ncyBwYXNzIHRocm91Z2ggZm9yIG9uZS1vZmYgY29sb3Vycy4gKi9cbiAgYmFja2dyb3VuZD86IEJhY2tncm91bmQ7XG5cbiAgcmFkaXVzPzogUmFkaXVzO1xuICBib3JkZXI/OiBCb3JkZXI7XG4gIGJvcmRlcldpZHRoPzogQm9yZGVyV2lkdGg7XG4gIGJvcmRlclNpZGVzPzogQm9yZGVyU2lkZXM7XG4gIC8qKiBCb3JkZXIgbGluZSBzdHlsZS4gRGVmYXVsdDogYCdzb2xpZCdgLiAqL1xuICBib3JkZXJTdHlsZT86IEJvcmRlclN0eWxlO1xuICAvKiogQW55IENTUyBjb2xvdXIsIG92ZXJyaWRpbmcgdGhlIHRva2VuIHRoZSBgYm9yZGVyYCBwcm9wIHdvdWxkIHBpY2suXG4gICAqIEZvciBvbmUtb2ZmIHJpbmdzIChhIGN1dG91dCByaW5nLCBhIGZvY3VzIGhhbG8pIHRoYXQgbm8gc2VtYW50aWNcbiAgICogYm9yZGVyIHRva2VuIGV4cHJlc3Nlcy4gSW1wbGllcyBhIGJvcmRlciB3aWR0aCB3aGVuIG5vbmUgaXMgc2V0LiAqL1xuICBib3JkZXJDb2xvcj86IHN0cmluZztcbiAgc2hhZG93PzogU2hhZG93O1xuXG4gIC8qKlxuICAgKiBSZXRpbnQgdGhlIHRva2VuIHN1YnRyZWUgc28gZGVzY2VuZGFudCBgVGV4dGAvYEJ1dHRvbmAgcmVhZCB0aGVcbiAgICogcmlnaHQgY29udHJhc3Qgb24gYSBkYXJrIChvciBmb3JjZWQtbGlnaHQpIFN1cmZhY2Ug4oCUIGVycm9yXG4gICAqIGJhbm5lcnMsIGNhbWVyYSBvdmVybGF5cywgY2hhdCBidWJibGVzLiBTZXRzIGBkYXRhLXBvbGx5LXRoZW1lYCxcbiAgICogc28gZXZlcnkgYC0tcG9sbHktKmAgY29sb3VyIHRva2VuIGZsaXBzIGZvciB0aGUgc3VidHJlZTsgbm8gaW5saW5lXG4gICAqIGAtLXBvbGx5LXRleHRgIG92ZXJyaWRlIG5lZWRlZCAocG9sbHkjMTM1KS5cbiAgICovXG4gIHNjaGVtZT86IFNjaGVtZTtcblxuICAvKiogYCdub25lJ2AgbWFrZXMgYSBkZWNvcmF0aXZlIFN1cmZhY2UgKGEgc2Nhbi1mcmFtZSBvdmVybGF5KSBpZ25vcmVcbiAgICogdGhlIHBvaW50ZXIgc28gY2xpY2tzIGZhbGwgdGhyb3VnaCB0byB3aGF0IGlzIGJlaGluZCBpdC4gKi9cbiAgcG9pbnRlckV2ZW50cz86IFwibm9uZVwiIHwgXCJhdXRvXCI7XG5cbiAgLyoqIGRpc3BsYXk6IGlubGluZS1ibG9jayDigJQgU3VyZmFjZSBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGJsb2NrIHNpemUg4oCUIGEgU3VyZmFjZSB0aGF0IHNocmlua3MgdG8gY29udGVudCBidXQgaXMgY2FwcGVkLiAqL1xuICBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJmbG93IGJlaGF2aW91ci4gYCdhdXRvJ2AgbWFrZXMgYSBoZWlnaHQtY2FwcGVkIFN1cmZhY2Ugc2Nyb2xsLiAqL1xuICBvdmVyZmxvdz86IE92ZXJmbG93O1xuXG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG4gIC8qKiBBbnkgQ1NTIGluc2V0IHZhbHVlIChgJzAnYCwgYCdhdXRvIGF1dG8gMXJlbSAxcmVtJ2AsIGAnMXJlbSdgLCDigKYpLiAqL1xuICBpbnNldD86IHN0cmluZztcbiAgLyoqIENTUyB0cmFuc2Zvcm0g4oCUIGUuZy4gYCd0cmFuc2xhdGVYKC01MCUpJ2AgdG8gY2VudHJlIGEgZml4ZWQgYmFubmVyXG4gICAqIHBhaXJlZCB3aXRoIGBpbnNldDogJ+KApiBhdXRvIOKApiA1MCUnYC4gVGhlIHNhbmN0aW9uZWQgdHJhbnNmb3JtIGVzY2FwZS4gKi9cbiAgdHJhbnNmb3JtPzogc3RyaW5nO1xuICB6SW5kZXg/OiBudW1iZXI7XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLWluc3RhbmNlIG92ZXJyaWRlcy4gVGhlIHN1cHBvcnRlZCByZXRpbnQgcGF0aCBpcyB0byBzZXQgcG9sbHkgdG9rZW5zXG4gICAqIGhlcmUsIGUuZy4gYHN0eWxlPXt7IFwiLS1wb2xseS1zdXJmYWNlLXJhaXNlZFwiOiBcIiNmZWYzYzdcIiB9fWAuIFN1cmZhY2VcbiAgICogbWVyZ2VzIHRoaXMgaW50byBpdHMgb3duIGNvbXB1dGVkIHN0eWxlLlxuICAgKi9cbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcblxuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG59O1xuXG50eXBlIFZhcmlhbnREZWZhdWx0cyA9IFBhcnRpYWw8XG4gIFBpY2s8XG4gICAgU3VyZmFjZVByb3BzLFxuICAgIHwgXCJwYWRkaW5nXCJcbiAgICB8IFwiYmFja2dyb3VuZFwiXG4gICAgfCBcInJhZGl1c1wiXG4gICAgfCBcImJvcmRlclwiXG4gICAgfCBcImJvcmRlcldpZHRoXCJcbiAgICB8IFwiYm9yZGVyU2lkZXNcIlxuICAgIHwgXCJzaGFkb3dcIlxuICAgIHwgXCJpbmxpbmVcIlxuICAgIHwgXCJ3aWR0aFwiXG4gICAgfCBcImhlaWdodFwiXG4gICAgfCBcIm1pbkhlaWdodFwiXG4gICAgfCBcIm1heElubGluZVNpemVcIlxuICAgIHwgXCJwb3NpdGlvblwiXG4gICAgfCBcImluc2V0XCJcbiAgICB8IFwiekluZGV4XCJcbiAgPlxuPjtcblxuY29uc3QgdmFyaWFudERlZmF1bHRzOiBSZWNvcmQ8U3VyZmFjZVZhcmlhbnQsIFZhcmlhbnREZWZhdWx0cz4gPSB7XG4gIHBsYWluOiB7fSxcbiAgcmFpc2VkOiB7XG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBzaGFkb3c6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBzdW5rZW46IHtcbiAgICBiYWNrZ3JvdW5kOiBcInN1bmtlblwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGJ1YmJsZToge1xuICAgIGJhY2tncm91bmQ6IFwidmFyKC0tcG9sbHktc3VyZmFjZS1idWJibGUpXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgY2hpcDoge1xuICAgIGlubGluZTogdHJ1ZSxcbiAgICByYWRpdXM6IFwiZnVsbFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2UteHMpIHZhcigtLXBvbGx5LXNwYWNlLXNtKVwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGNhbGxvdXQ6IHtcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHJhZGl1czogXCJzbVwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBmbG9hdGluZzoge1xuICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgcmFkaXVzOiBcImxnXCIsXG4gICAgc2hhZG93OiBcImxnXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHpJbmRleDogOTk5OSxcbiAgfSxcbiAgXCJzdGlja3ktYmFyXCI6IHtcbiAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICBpbnNldDogXCIwIDAgYXV0byAwXCIsXG4gICAgYm9yZGVyU2lkZXM6IFwiYmxvY2stZW5kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGJnVmFsdWUoYjogQmFja2dyb3VuZCk6IHN0cmluZyB7XG4gIGlmIChiID09PSBcInJhaXNlZFwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXJhaXNlZClcIjtcbiAgaWYgKGIgPT09IFwic3Vua2VuXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2Utc3Vua2VuKVwiO1xuICBpZiAoYiA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gcmFkaXVzVmFsdWUocjogUmFkaXVzKTogc3RyaW5nIHtcbiAgaWYgKHIgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktcmFkaXVzLSR7cn0pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyQ29sb3JWYWx1ZShiOiBCb3JkZXIpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJub25lXCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIGlmIChiID09PSBcInN0cm9uZ1wiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXItc3Ryb25nKVwiO1xuICByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXIpXCI7XG59XG5cbmZ1bmN0aW9uIGJvcmRlcldpZHRoVmFsdWUodzogQm9yZGVyV2lkdGgpOiBzdHJpbmcge1xuICBpZiAodyA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1ib3JkZXItd2lkdGgtJHt3fSlgO1xufVxuXG5mdW5jdGlvbiBzaGFkb3dWYWx1ZShzOiBTaGFkb3cpOiBzdHJpbmcge1xuICBpZiAocyA9PT0gXCJub25lXCIpIHJldHVybiBcIm5vbmVcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1zaGFkb3ctJHtzfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJTaWRlc0NsYXNzKHNpZGVzOiBCb3JkZXJTaWRlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaWRlcyA9PT0gXCJhbGxcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2tcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmVcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmVcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nOyBmbGF0IGFuZCBsaW5lYXIsIG1pcnJvcnMgTGF5b3V0LnRzeC5cbmV4cG9ydCBmdW5jdGlvbiBTdXJmYWNlKHByb3BzOiBTdXJmYWNlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicGxhaW5cIiB9ID0gcHJvcHM7XG4gIGNvbnN0IHYgPSB2YXJpYW50RGVmYXVsdHNbdmFyaWFudF07XG5cbiAgY29uc3QgYXMgPSBwcm9wcy5hcyA/PyBcImRpdlwiO1xuICBjb25zdCBwYWRkaW5nID0gcHJvcHMucGFkZGluZyA/PyB2LnBhZGRpbmc7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kID8/IHYuYmFja2dyb3VuZDtcbiAgY29uc3QgcmFkaXVzID0gcHJvcHMucmFkaXVzID8/IHYucmFkaXVzO1xuICBjb25zdCBib3JkZXIgPSBwcm9wcy5ib3JkZXIgPz8gdi5ib3JkZXI7XG4gIGNvbnN0IGJvcmRlclNpZGVzID0gcHJvcHMuYm9yZGVyU2lkZXMgPz8gdi5ib3JkZXJTaWRlcyA/PyBcImFsbFwiO1xuICBjb25zdCBzaGFkb3cgPSBwcm9wcy5zaGFkb3cgPz8gdi5zaGFkb3c7XG4gIGNvbnN0IGlubGluZSA9IHByb3BzLmlubGluZSA/PyB2LmlubGluZTtcbiAgY29uc3Qgd2lkdGggPSBwcm9wcy53aWR0aCA/PyB2LndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBwcm9wcy5oZWlnaHQgPz8gdi5oZWlnaHQ7XG4gIGNvbnN0IG1pbkhlaWdodCA9IHByb3BzLm1pbkhlaWdodCA/PyB2Lm1pbkhlaWdodDtcbiAgY29uc3QgbWF4SW5saW5lU2l6ZSA9IHByb3BzLm1heElubGluZVNpemUgPz8gdi5tYXhJbmxpbmVTaXplO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uID8/IHYucG9zaXRpb247XG4gIGNvbnN0IGluc2V0ID0gcHJvcHMuaW5zZXQgPz8gdi5pbnNldDtcbiAgY29uc3QgekluZGV4ID0gcHJvcHMuekluZGV4ID8/IHYuekluZGV4O1xuICAvLyBwb2xseSMxMjYvIzEzNTogbm8gdmFyaWFudCBzZXRzIHRoZXNlLCBzbyB0aGV5IHJlc29sdmUgc3RyYWlnaHQgZnJvbSBwcm9wcy5cbiAgY29uc3QgeyBtYXhIZWlnaHQsIG92ZXJmbG93LCBib3JkZXJTdHlsZSwgdHJhbnNmb3JtLCBib3JkZXJDb2xvciwgc2NoZW1lLCBwb2ludGVyRXZlbnRzIH0gPSBwcm9wcztcblxuICAvLyBBIGJvcmRlcmVkIHN1cmZhY2UgbmVlZHMgYSB3aWR0aC4gSWYgdGhlIGNvbnN1bWVyIGFza2VkIGZvciBhIGJvcmRlciDigJRcbiAgLy8gYnkgbmFtZSBvciBieSByYXcgY29sb3VyIOKAlCBidXQgZGlkbid0IHBpY2sgYSB3aWR0aCwgaW5mZXIgJ2RlZmF1bHQnXG4gIC8vIHNvIHRoZSBib3JkZXIgcmVuZGVycy5cbiAgY29uc3Qgd2FudHNCb3JkZXIgPSAoYm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYm9yZGVyICE9PSBcIm5vbmVcIikgfHwgYm9yZGVyQ29sb3IgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aCA/PyB2LmJvcmRlcldpZHRoID8/ICh3YW50c0JvcmRlciA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLXMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChiYWNrZ3JvdW5kKSBzdHlsZVtcIi0tcy1iZ1wiXSA9IGJnVmFsdWUoYmFja2dyb3VuZCk7XG4gIGlmIChyYWRpdXMpIHN0eWxlW1wiLS1zLXJhZGl1c1wiXSA9IHJhZGl1c1ZhbHVlKHJhZGl1cyk7XG4gIGlmIChib3JkZXIpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yVmFsdWUoYm9yZGVyKTtcbiAgLy8gQSByYXcgYm9yZGVyQ29sb3Igd2lucyBvdmVyIHdoYXRldmVyIHRva2VuIGBib3JkZXJgIHJlc29sdmVkIHRvLlxuICBpZiAoYm9yZGVyQ29sb3IpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yO1xuICBpZiAoYm9yZGVyV2lkdGgpIHN0eWxlW1wiLS1zLWJvcmRlci13aWR0aFwiXSA9IGJvcmRlcldpZHRoVmFsdWUoYm9yZGVyV2lkdGgpO1xuICBpZiAoc2hhZG93KSBzdHlsZVtcIi0tcy1zaGFkb3dcIl0gPSBzaGFkb3dWYWx1ZShzaGFkb3cpO1xuICBpZiAoYm9yZGVyU3R5bGUpIHN0eWxlW1wiLS1zLWJvcmRlci1zdHlsZVwiXSA9IGJvcmRlclN0eWxlO1xuICBpZiAocG9pbnRlckV2ZW50cykgc3R5bGVbXCItLXMtcGVcIl0gPSBwb2ludGVyRXZlbnRzO1xuICBpZiAod2lkdGgpIHN0eWxlW1wiLS1zLXdcIl0gPSB3aWR0aDtcbiAgaWYgKGhlaWdodCkgc3R5bGVbXCItLXMtaFwiXSA9IGhlaWdodDtcbiAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLXMtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gIGlmIChtYXhIZWlnaHQpIHN0eWxlW1wiLS1zLW1heGhcIl0gPSBtYXhIZWlnaHQ7XG4gIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tcy1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICBpZiAob3ZlcmZsb3cpIHN0eWxlW1wiLS1zLW92ZXJmbG93XCJdID0gb3ZlcmZsb3c7XG4gIGlmIChwb3NpdGlvbikgc3R5bGVbXCItLXMtcG9zaXRpb25cIl0gPSBwb3NpdGlvbjtcbiAgaWYgKGluc2V0KSBzdHlsZVtcIi0tcy1pbnNldFwiXSA9IGluc2V0O1xuICBpZiAodHJhbnNmb3JtKSBzdHlsZVtcIi0tcy10cmFuc2Zvcm1cIl0gPSB0cmFuc2Zvcm07XG4gIGlmICh6SW5kZXggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCItLXMtelwiXSA9IFN0cmluZyh6SW5kZXgpO1xuXG4gIGlmIChwcm9wcy5zdHlsZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHByb3BzLnN0eWxlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cblxuICBjb25zdCBwYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtjbGFzc2VzW1wic3VyZmFjZVwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIHBhcnRzLnB1c2goYm9yZGVyU2lkZXNDbGFzcyhib3JkZXJTaWRlcykpO1xuICBpZiAocHJvcHMuY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKHByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXNzdGhyb3VnaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgY29uc3QgaXNEYXRhID0ga2V5LnN0YXJ0c1dpdGgoXCJkYXRhLVwiKTtcbiAgICBjb25zdCBpc0FyaWEgPSBrZXkuc3RhcnRzV2l0aChcImFyaWEtXCIpO1xuICAgIGlmICghaXNEYXRhICYmICFpc0FyaWEgJiYga2V5ICE9PSBcInRpdGxlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiZGF0YS1wb2xseS1zdXJmYWNlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiYXJpYS1sYWJlbFwiIHx8IGtleSA9PT0gXCJhcmlhLWxhYmVsbGVkYnlcIiB8fCBrZXkgPT09IFwiYXJpYS1kZXNjcmliZWRieVwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBwYXNzdGhyb3VnaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrOiBwcm9wcy5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duOiBwcm9wcy5vbktleURvd24sXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdGFiSW5kZXg6IHByb3BzLnRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1zdXJmYWNlXCI6IHZhcmlhbnQsXG4gICAgICBcImRhdGEtcG9sbHktdGhlbWVcIjogc2NoZW1lLFxuICAgICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgfSxcbiAgICBwcm9wcy5jaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENhcmQg4oCUIGNvbXBvdW5kIHByaW1pdGl2ZSB0aGF0IGNvbXBvc2VzIFN1cmZhY2UgZm9yIGVhY2ggbmFtZWQgc2xvdC5cbiAqXG4gKiBDYXJkIGlzIHRoZSBmaXJzdCBjb21wb3VuZCB0aGF0IGlzIHB1cmVseSBhIHJlLXNraW4gb2YgU3VyZmFjZSDigJQgbm9cbiAqIGJlaGF2aW91cmFsIGxheWVyLiBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgYXJlIGVhY2ggU3VyZmFjZXMgd2l0aFxuICogc2Vuc2libGUgZGVmYXVsdHM7IFJvb3QgaXMgYSByYWlzZWQgU3VyZmFjZSB0aGF0IHdyYXBzIHRoZW0uIEV2ZXJ5XG4gKiBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBjb25zdW1lcnMgcmV0aW50LCBvdmVycmlkZSwgb3JcbiAqIHJlYWNoIGZvciByYXcgcGFkZGluZyB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IFN1cmZhY2UsIHR5cGUgU3VyZmFjZVByb3BzIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZFByb3BzID0gU3VyZmFjZVByb3BzO1xuZXhwb3J0IHR5cGUgQ2FyZFNsb3RQcm9wcyA9IFN1cmZhY2VQcm9wcztcblxuZnVuY3Rpb24gUm9vdChwcm9wczogQ2FyZFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInJhaXNlZFwiLCByYWRpdXMgPSBcIm1kXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3ZhcmlhbnR9IHJhZGl1cz17cmFkaXVzfSBkYXRhLXBvbGx5LWNhcmQgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1lbmRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWhlYWRlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keShwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgcGFkZGluZz17cGFkZGluZ30gZGF0YS1wb2xseS1jYXJkLWJvZHkgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1zdGFydFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtZm9vdGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ2FyZCA9IHsgUm9vdCwgSGVhZGVyLCBCb2R5LCBGb290ZXIgfTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja2JveCDigJQgbmF0aXZlIGNoZWNrYm94IHdyYXBwZWQgaW4gYSBsYWJlbC5cbiAqXG4gKiBQYXNzIGEgcGxhaW4gYm9vbGVhbiBmb3IgY29udHJvbGxlZCB1c2UgKGNhbGxlciBsaXN0ZW5zIGVsc2V3aGVyZSksXG4gKiBvciBhIFNpZ25hbDxib29sZWFuPiB0byBoYXZlIHRoZSBwcmltaXRpdmUgYmluZCBpdHMgb3duIGNoYW5nZVxuICogbGlzdGVuZXIgYW5kIG11dGF0ZSB0aGUgc2lnbmFsIGRpcmVjdGx5LiBUaGUgbGFiZWwgd3JhcHMgdGhlIGlucHV0XG4gKiBzbyBjbGlja3MgYW55d2hlcmUgaW4gdGhlIHRhcmdldCBhcmVhIHRvZ2dsZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDaGVja2JveFByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbiB8IFNpZ25hbDxib29sZWFuPjtcbiAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTaWduYWw8Ym9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiBcInBlZWtcIiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KHByb3BzOiBDaGVja2JveFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKGNoZWNrZWQpKSB7XG4gICAgICBjaGVja2VkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrZWRWYWx1ZSA9IGlzU2lnbmFsKGNoZWNrZWQpID8gY2hlY2tlZC52YWx1ZSA6IGNoZWNrZWQ7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNoZWNrYm94XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dFxuICAgICAgYXM9XCJsYWJlbFwiXG4gICAgICBpbmxpbmVcbiAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNoZWNrYm94XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZFZhbHVlfVxuICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDbHVzdGVyIOKAlCB3cmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMuXG4gKlxuICogVGhlIGZsZXgtd3JhcCBjb3VudGVycGFydCB0byA8TGF5b3V0Pi4gV2hlcmUgTGF5b3V0IG93bnMgQ1NTIGdyaWRcbiAqIHRyYWNrcywgQ2x1c3RlciBvd25zIGEgcm93IG9mIGl0ZW1zIHRoYXQgZGlmZmVyIGluIHdpZHRoIGFuZCBtdXN0XG4gKiByZWZsb3cgYXMgc3BhY2UgcnVucyBvdXQg4oCUIGZpbHRlciBjaGlwcywgdGFnIGFuZCBiYWRnZSBsaXN0cywgZ3JvdXBzXG4gKiBvZiBzbWFsbCBidXR0b25zLiBJdGVtcyBrZWVwIGV2ZW4gc3BhY2luZyBvbiBib3RoIGF4ZXMgdmlhIGBnYXBgOyB0aGVcbiAqIHJvdyB3cmFwcyBhdXRvbWF0aWNhbGx5IGF0IG5hcnJvdyB3aWR0aHMuIExpa2UgTGF5b3V0LCBwcm9wcyBtYXAgdG9cbiAqIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGVtIGluIGFcbiAqIG1lZGlhIHF1ZXJ5IHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgc2Vjb25kIChhbmQgZmluYWwpIGxheW91dCBwcmltaXRpdmU6IGEgY29uc3VtZXIgbmV2ZXJcbiAqIHdyaXRlcyBgZGlzcGxheTogZmxleGAgb3IgYGRpc3BsYXk6IGdyaWRgIHRoZW1zZWx2ZXMg4oCUIGdyaWQgZ29lc1xuICogdGhyb3VnaCA8TGF5b3V0PiwgYSB3cmFwcGluZyBjbHVzdGVyIGdvZXMgdGhyb3VnaCA8Q2x1c3Rlcj4uXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DbHVzdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ2x1c3RlclByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIG5hdiwgdWwsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogU3BhY2UgYmV0d2VlbiBpdGVtcywgYm90aCBheGVzLiBUeXBpY2FsbHkgYSBgLS1wb2xseS1zcGFjZS0qYCB0b2tlbi4gKi9cbiAgZ2FwPzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBNYWluLWF4aXMgZGlzdHJpYnV0aW9uIOKAlCBtYXBzIHRvIGp1c3RpZnktY29udGVudC4gRGVmYXVsdDogc3RhcnQuICovXG4gIGp1c3RpZnk/OiBzdHJpbmc7XG4gIC8qKiBDcm9zcy1heGlzIGFsaWdubWVudCB3aXRoaW4gYSB3cmFwcGVkIHJvdyDigJQgbWFwcyB0byBhbGlnbi1pdGVtcy4gRGVmYXVsdDogY2VudGVyLiAqL1xuICBhbGlnbj86IHN0cmluZztcblxuICAvKiogUmVuZGVyIGFzIGlubGluZS1mbGV4IHNvIHRoZSBjbHVzdGVyIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2x1c3Rlcihwcm9wczogQ2x1c3RlclByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBhcyA9IFwiZGl2XCIsIGdhcCwgcGFkZGluZywganVzdGlmeSwgYWxpZ24sIGlubGluZSwgY2xhc3NOYW1lLCBpZCwgcm9sZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGdhcCkgc3R5bGVbXCItLWMtZ2FwXCJdID0gZ2FwO1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLWMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChqdXN0aWZ5KSBzdHlsZVtcIi0tYy1qY1wiXSA9IGp1c3RpZnk7XG4gIGlmIChhbGlnbikgc3R5bGVbXCItLWMtYWlcIl0gPSBhbGlnbjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2x1c3RlclwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcm9sZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS1jbHVzdGVyXCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvZGUg4oCUIGlubGluZSBtb25vc3BhY2UgY29kZSBzcGFuLlxuICpcbiAqIFJlbmRlcnMgYSBgPGNvZGU+YCB3aXRoIHRoZSBgLS1wb2xseS1mb250LW1vbm9gIHN0YWNrLCBhIGZhaW50IHN1bmtlblxuICogdGludCwgYW5kIHNudWcgcGFkZGluZyBzbyBhIGNvbnN1bWVyIG5ldmVyIGhhbmQtcm9sbHMgYSBgLm1vbm9gIGNsYXNzXG4gKiBmb3IgaW5saW5lIGNvZGUsIGlkZW50aWZpZXJzLCBvciBrZXlib2FyZCBoaW50cy4gRm9yIG11bHRpLWxpbmUgY29kZVxuICogYmxvY2tzLCBwYXNzIGBibG9ja2AsIHdoaWNoIHN3aXRjaGVzIHRvIGEgcHJlLXdyYXBwZWQgPHByZT48Y29kZT4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29kZS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENvZGVQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFJlbmRlciBhcyBhIGJsb2NrICg8cHJlPjxjb2RlPikgaW5zdGVhZCBvZiBhbiBpbmxpbmUgc3Bhbi4gKi9cbiAgYmxvY2s/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvZGUocHJvcHM6IENvZGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYmxvY2ssIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogc3ByZWFkIGZpcnN0OyB0aGUgZXhwbGljaXQgYXR0cmlidXRlcyBhZnRlclxuICAvLyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChibG9jaykge1xuICAgIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJibG9ja1wiXV07XG4gICAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8cHJlXG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktY29kZT1cImJsb2NrXCJcbiAgICAgID5cbiAgICAgICAgPGNvZGU+e2NoaWxkcmVufTwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29kZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8Y29kZVxuICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29kZT1cImlubGluZVwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvY29kZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2xsYXBzaWJsZSDigJQgbmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gd3JhcHBlci5cbiAqXG4gKiBVc2VzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gZGlzY2xvc3VyZSBzZW1hbnRpY3Mgc28ga2V5Ym9hcmQgYW5kXG4gKiBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBjb21lIGZyZWUuIFRoZSBhcnJvdyBpcyBhIHJlYWwgZWxlbWVudCwgbm90IGFcbiAqIDo6YmVmb3JlOiB0aGUgc3VtbWFyeSBpcyBhIHR3by10cmFjayA8TGF5b3V0PiwgYW5kIG5vIGxheW91dCBjb250YWluZXIgY2FuXG4gKiBhcnJhbmdlIGEgcHNldWRvLWVsZW1lbnQuIEl0IHJvdGF0ZXMgb24gb3Blbi5cbiAqIENvbG9ycywgc3BhY2luZywgYW5kIG1vdGlvbiBjb21lIGZyb20gdG9rZW5zOyBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBcbiAqIHplcm9lcyB0aGUgcm90YXRpb24gdmlhIHRoZSBtb3Rpb24gdG9rZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29sbGFwc2libGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDb2xsYXBzaWJsZVByb3BzID0ge1xuICAvKiogRGlzY2xvc3VyZSBoZWFkZXIuIEEgc3RyaW5nIGZvciB0aGUgY29tbW9uIGNhc2UsIG9yIGFueSBub2RlIOKAlFxuICAgKiBlLmcuIGEgbXV0ZWQsIHNtYWxsIDxUZXh0PiDigJQgd2hlbiB0aGUgaGVhZGVyIG5lZWRzIHN0eWxpbmcuICovXG4gIHN1bW1hcnk6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbi8qKiBJbnB1dCB0eXBlcyB3aG9zZSBTcGFjZS9FbnRlciBpcyBhbiBhY3RpdmF0aW9uLCBub3QgdGV4dCBlbnRyeSDigJQgdGhlc2VcbiAqIGtlZXAgdGhlaXIgb3duIGtleWJvYXJkIGJlaGF2aW91ciBhbmQgbXVzdCBub3QgYmUgZ3VhcmRlZC4gKi9cbmNvbnN0IE5PTl9URVhUX0lOUFVUX1RZUEVTID0gbmV3IFNldChbXG4gIFwiY2hlY2tib3hcIixcbiAgXCJyYWRpb1wiLFxuICBcImJ1dHRvblwiLFxuICBcInN1Ym1pdFwiLFxuICBcInJlc2V0XCIsXG4gIFwiZmlsZVwiLFxuICBcImltYWdlXCIsXG4gIFwicmFuZ2VcIixcbiAgXCJjb2xvclwiLFxuXSk7XG5cbi8qKiBJcyB0aGUgZXZlbnQgdGFyZ2V0IGEgZmllbGQgd2hlcmUgU3BhY2UvRW50ZXIgaW5zZXJ0cy9lZGl0cyB0ZXh0PyAqL1xuZnVuY3Rpb24gaXNUZXh0RW50cnlUYXJnZXQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgcmV0dXJuICFOT05fVEVYVF9JTlBVVF9UWVBFUy5oYXModGFyZ2V0LnR5cGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaHJvbWl1bSB0b2dnbGVzIGEgPGRldGFpbHM+IG9uIHRoZSBTcGFjZS9FbnRlciAqa2V5dXAqIG9mIGl0cyA8c3VtbWFyeT4sXG4gKiBldmVuIHdoZW4gZm9jdXMgc2l0cyBpbiBhIG5lc3RlZCB0ZXh0IGZpZWxkIOKAlCBzbyBldmVyeSBzcGFjZSB0eXBlZCBpbiBhblxuICogZWRpdGFibGUgaGVhZGVyIHdvdWxkIGNvbGxhcHNlIHRoZSBkaXNjbG9zdXJlLiBzdG9wUHJvcGFnYXRpb24gY2FuJ3Qgc3RvcFxuICogaXQgKHRoZSB0b2dnbGUgaXMgdGhlIHN1bW1hcnkncyBvd24gYWN0aXZhdGlvbiBiZWhhdmlvdXIsIG5vdCBhIGJ1YmJsaW5nXG4gKiBsaXN0ZW5lcikgYW5kIHByZXZlbnREZWZhdWx0IG9uICprZXlkb3duKiB3b3VsZCBzd2FsbG93IHRoZSBjaGFyYWN0ZXIuIFRoZVxuICogY2hhcmFjdGVyIGlzIGFscmVhZHkgaW5zZXJ0ZWQgYnkgdGhlIHRpbWUga2V5dXAgZmlyZXMsIHNvIGNhbmNlbGxpbmcgdGhlXG4gKiBrZXl1cCBkZWZhdWx0IGZvciB0ZXh0LWVudHJ5IGZpZWxkcyBraWxscyB0aGUgdG9nZ2xlIHdoaWxlIGxlYXZpbmcgdHlwaW5nXG4gKiB1bnRvdWNoZWQuIEJ1dHRvbnMvY2hlY2tib3gvcmFkaW8gZmFsbCB0aHJvdWdoIGFuZCBrZWVwIHRoZWlyIG93blxuICogYWN0aXZhdGlvbjsgdGhlIHN1bW1hcnkgaXRzZWxmIChubyBuZXN0ZWQgZmllbGQpIGtlZXBzIG5vcm1hbCBrZXlib2FyZFxuICogZGlzY2xvc3VyZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeUtleVVwKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50Pik6IHZvaWQge1xuICBpZiAoZXZlbnQua2V5ICE9PSBcIiBcIiAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuO1xuICBpZiAoIWlzVGV4dEVudHJ5VGFyZ2V0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHByb3BzOiBDb2xsYXBzaWJsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHN1bW1hcnksIGNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IGZhbHNlLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvbGxhcHNpYmxlXCJdXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxkZXRhaWxzXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBvcGVuPXtkZWZhdWx0T3Blbn1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29sbGFwc2libGVcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGFzPVwic3VtbWFyeVwiXG4gICAgICAgIGNvbHVtbnM9XCJhdXRvIDFmclwiXG4gICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJzdW1tYXJ5XCJdfVxuICAgICAgICBvbktleVVwPXtoYW5kbGVTdW1tYXJ5S2V5VXB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWFya2VyXCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInN1bW1hcnlDb250ZW50XCJdfT57c3VtbWFyeX08L3NwYW4+XG4gICAgICA8L0xheW91dD5cbiAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJjb250ZW50XCJdfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICApO1xufVxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxGcmFnbWVudCBhcyBTdHJpY3RNb2RlLGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlTGF5b3V0RWZmZWN0IGFzIHMsdXNlRWZmZWN0IGFzIGgsdXNlQ2FsbGJhY2sgYXMgdix1c2VDb250ZXh0IGFzIGQsdXNlRGVidWdWYWx1ZSBhcyBtLHVzZUlkIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyB5LHVzZU1lbW8gYXMgXyx1c2VSZWR1Y2VyIGFzIGIsdXNlUmVmIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gRShuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDKG4sdCl7dmFyIGU9dCgpLHI9YSh7dDp7X186ZSx1OnR9fSksdT1yWzBdLnQsbz1yWzFdO3JldHVybiBzKGZ1bmN0aW9uKCl7dS5fXz1lLHUudT10LFIodSkmJm8oe3Q6dX0pfSxbbixlLHRdKSxoKGZ1bmN0aW9uKCl7cmV0dXJuIFIodSkmJm8oe3Q6dX0pLG4oZnVuY3Rpb24oKXtSKHUpJiZvKHt0OnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gUihuKXt0cnl7cmV0dXJuISgodD1uLl9fKT09PShlPW4udSgpKSYmKDAhPT10fHwxL3Q9PTEvZSl8fHQhPXQmJmUhPWUpfWNhdGNoKG4pe3JldHVybiEwfXZhciB0LGV9ZnVuY3Rpb24geChuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLHhdfXZhciBJPXM7ZnVuY3Rpb24gTShuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBOKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZjtyZXR1cm4gdCE9bi5yZWYmJnQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8dCE9bi5yZWY6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1Ll9fZj11LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUudHlwZT1uLHV9KE0ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxNLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEY9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxMPXttYXA6Rixmb3JFYWNoOkYsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LE89ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO08obix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18mJm4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmKHQuX196PSEwKSx0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYzMiZuLl9fdSYmKG4udHlwZT1udWxsKSxVJiZVKG4pfSwoUC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLm8mJihyLm89W10pLHIuby5wdXNoKGUpO3ZhciB1PWooci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fHIuX196fHwobz0hMCxlLl9fUj1udWxsLHU/dShjKTpjKCkpfTtlLl9fUj1pO3ZhciBsPWUuX19QO2UuX19QPW51bGw7dmFyIGM9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1XKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLm8ucG9wKCk7KXQuX19QPWwsdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sUC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1WKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBIPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLmwuZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLmwuc2l6ZSkpZm9yKGU9bi5pO2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi5pPWU9ZVsyXX19O2Z1bmN0aW9uIFoobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBZKG4pe3ZhciBlPXRoaXMscj1uLmg7aWYoZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLnYpLGUudj1udWxsLGUuaD1udWxsfSxlLmgmJmUuaCE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSwhZS52KXtmb3IodmFyIHU9ZS5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXztlLmg9cixlLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sX19rOntfX206dS5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpyLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmguaW5zZXJ0QmVmb3JlKG4sdCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaC5yZW1vdmVDaGlsZChuKX19fW8odChaLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUudil9ZnVuY3Rpb24gJChuLGUpe3ZhciByPXQoWSx7X192Om4saDplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KEIucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPWoodC5fX3YpLHI9dC5sLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLEgodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxCLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMubC5zZXQodFtlXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gbi5jaGlsZHJlbn0sQi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbih0LGUpe0gobixlLHQpfSl9O3ZhciBxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxHPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSz0vW0EtWjAtOV0vZyxRPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxYPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIG5uKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIHRuKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBlbj1lLmV2ZW50O2UuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuJiYobj1lbihuKSksbi5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxuLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LG4ubmF0aXZlRXZlbnQ9bn07dmFyIHJuLHVuPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxvbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PWUuaW5kZXhPZihcIi1cIik7Zm9yKHZhciBpIGluIHQpe3ZhciBsPXRbaV07aWYoIShcInZhbHVlXCI9PT1pJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09bHx8USYmXCJjaGlsZHJlblwiPT09aSYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09aXx8XCJjbGFzc05hbWVcIj09PWkpKXt2YXIgYz1pLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PWkmJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/aT1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09aSYmITA9PT1sP2w9XCJcIjpcInRyYW5zbGF0ZVwiPT09YyYmXCJub1wiPT09bD9sPSExOlwib1wiPT09Y1swXSYmXCJuXCI9PT1jWzFdP1wib25kb3VibGVjbGlja1wiPT09Yz9pPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWN8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fFgodC50eXBlKT9cIm9uZm9jdXNcIj09PWM/aT1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1jP2k9XCJvbmZvY3Vzb3V0XCI6Si50ZXN0KGkpJiYoaT1jKTpjPWk9XCJvbmlucHV0XCI6byYmRy50ZXN0KGkpP2k9aS5yZXBsYWNlKEssXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09bCYmKGw9dm9pZCAwKSxcIm9uaW5wdXRcIj09PWMmJnVbaT1jXSYmKGk9XCJvbmlucHV0Q2FwdHVyZVwiKSx1W2ldPWx9fVwic2VsZWN0XCI9PWUmJih1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLG51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHVuKSk6dC5jbGFzc05hbWUmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxvbiYmb24obil9O3ZhciBsbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXtsbiYmbG4obikscm49bi5fX2N9O3ZhciBjbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtjbiYmY24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxybj1udWxsfTt2YXIgZm49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBybi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSxhbj1cIjE4LjMuMVwiO2Z1bmN0aW9uIHNuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBobihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiBkbihuKXtyZXR1cm4hIW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lJiYwPT1uLmRpc3BsYXlOYW1lLmluZGV4T2YoXCJNZW1vKFwiKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gaG4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBwbihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBfbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxibj1mdW5jdGlvbihuLHQpe3ZhciByPWUuZGVib3VuY2VSZW5kZXJpbmc7ZS5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihuKXtyZXR1cm4gbigpfTt2YXIgdT1uKHQpO3JldHVybiBlLmRlYm91bmNlUmVuZGVyaW5nPXIsdX0sU249aG4sZ249e3VzZVN0YXRlOmEsdXNlSWQ6cCx1c2VSZWR1Y2VyOmIsdXNlRWZmZWN0OmgsdXNlTGF5b3V0RWZmZWN0OnMsdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlVHJhbnNpdGlvbjprLHVzZURlZmVycmVkVmFsdWU6dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHN0YXJ0VHJhbnNpdGlvbjp4LHVzZVJlZjpTLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VNZW1vOl8sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHZlcnNpb246XCIxOC4zLjFcIixDaGlsZHJlbjpMLHJlbmRlcjpubixoeWRyYXRlOnRuLHVubW91bnRDb21wb25lbnRBdE5vZGU6cG4sY3JlYXRlUG9ydGFsOiQsY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OnNuLGNsb25lRWxlbWVudDptbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmhuLGlzRWxlbWVudDpTbixpc0ZyYWdtZW50OnZuLGlzTWVtbzpkbixmaW5kRE9NTm9kZTp5bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50Ok0sbWVtbzpOLGZvcndhcmRSZWY6RCxmbHVzaFN5bmM6Ym4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6X24sU3RyaWN0TW9kZTp1LFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmZufTtleHBvcnR7TCBhcyBDaGlsZHJlbixNIGFzIFB1cmVDb21wb25lbnQsUCBhcyBTdXNwZW5zZSxCIGFzIFN1c3BlbnNlTGlzdCxmbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtbiBhcyBjbG9uZUVsZW1lbnQsc24gYXMgY3JlYXRlRmFjdG9yeSwkIGFzIGNyZWF0ZVBvcnRhbCxnbiBhcyBkZWZhdWx0LHluIGFzIGZpbmRET01Ob2RlLGJuIGFzIGZsdXNoU3luYyxEIGFzIGZvcndhcmRSZWYsdG4gYXMgaHlkcmF0ZSxTbiBhcyBpc0VsZW1lbnQsdm4gYXMgaXNGcmFnbWVudCxkbiBhcyBpc01lbW8saG4gYXMgaXNWYWxpZEVsZW1lbnQseiBhcyBsYXp5LE4gYXMgbWVtbyxubiBhcyByZW5kZXIseCBhcyBzdGFydFRyYW5zaXRpb24scG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxfbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyx3IGFzIHVzZURlZmVycmVkVmFsdWUsSSBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQyBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxrIGFzIHVzZVRyYW5zaXRpb24sYW4gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEZvY3VzIHRyYXAuXG4gKlxuICogS2VlcHMgVGFiIC8gU2hpZnQrVGFiIGluc2lkZSBhIHJvb3QgZWxlbWVudC4gUmV0dXJucyBhIGNsZWFudXAgdGhhdFxuICogcmVzdG9yZXMgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgYWN0aXZlIGJlZm9yZSB0aGUgdHJhcCBtb3VudGVkLlxuICogU2ltcGxlIGFuZCBzeW5jaHJvbm91cyDigJQgYXNzdW1lcyBhIHNpbmdsZSBhY3RpdmUgdHJhcCBwZXIgT3ZlcmxheVJvb3RcbiAqIGFuZCBsZXRzIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGluIGBAZmFpcmZveC9wb2xseS9hY3Rpb25zYCBlbmZvcmNlIHRoYXRcbiAqIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAqL1xuXG5jb25zdCBGT0NVU0FCTEVfU0VMRUNUT1IgPSBbXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1oaWRkZW5dKVwiLFxuICBcInNlbGVjdDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJvYmplY3RcIixcbiAgXCJlbWJlZFwiLFxuICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXCJbY29udGVudGVkaXRhYmxlXVwiLFxuXS5qb2luKFwiLFwiKTtcblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlKHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEZPQ1VTQUJMRV9TRUxFQ1RPUikpO1xuICByZXR1cm4gbm9kZXMuZmlsdGVyKFxuICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpICYmIGVsLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEZvY3VzVHJhcChyb290OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZSA9IChcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbFxuICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvLyBNb3ZlIGZvY3VzIGludG8gdGhlIHJvb3QgaWYgaXQncyBub3QgYWxyZWFkeS5cbiAgY29uc3QgZm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZVswXSA/PyByb290O1xuICBpZiAoIXJvb3QuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICBmaXJzdC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiVGFiXCIpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZmlyc3RJdGVtIHx8ICFsYXN0SXRlbSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBpZiAoYWN0aXZlID09PSBmaXJzdEl0ZW0gfHwgIXJvb3QuY29udGFpbnMoYWN0aXZlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0SXRlbS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09PSBsYXN0SXRlbSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZpcnN0SXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgaWYgKHByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgcHJldmlvdXNBY3RpdmUuZm9jdXMoKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogU2Nyb2xsIGxvY2suXG4gKlxuICogUmVmZXJlbmNlLWNvdW50ZWQuIE11bHRpcGxlIG92ZXJsYXlzIGNhbiByZXF1ZXN0IGEgbG9jazsgdGhlIGJvZHlcbiAqIHN0YXlzIGxvY2tlZCB1bnRpbCBldmVyeSByZXF1ZXN0IHJlbGVhc2VzLiBBIHNjcm9sbGJhci1ndXR0ZXIgdG9rZW5cbiAqIGlzIHdyaXR0ZW4gYXQgYWNxdWlyZSB0aW1lIHNvIGNvbnRlbnQgYmVoaW5kIHRoZSBvdmVybGF5IGRvZXNuJ3RcbiAqIHJlZmxvdyB3aGVuIHRoZSBiYXIgZGlzYXBwZWFycy5cbiAqL1xuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNjcm9sbExvY2soKTogKCkgPT4gdm9pZCB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgZ3V0dGVyID0gd2luZG93LmlubmVyV2lkdGggLSBodG1sLmNsaWVudFdpZHRoO1xuICAgIGh0bWwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIiwgYCR7Z3V0dGVyfXB4YCk7XG4gICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIiwgXCJ0cnVlXCIpO1xuICB9XG4gIGNvdW50ICs9IDE7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICBjb3VudCAtPSAxO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIik7XG4gICAgICBodG1sLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5Um9vdCDigJQgcG9ydGFsIHRhcmdldCBmb3Igc3RhY2tlZCBvdmVybGF5cy5cbiAqXG4gKiBBcHBzIHJlbmRlciA8T3ZlcmxheVJvb3QgLz4gb25jZSwgdHlwaWNhbGx5IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZVxuICogYXBwIHJvb3QuIE1vZGFsLCBDb25maXJtRGlhbG9nLCBhbmQgVG9hc3QgcG9ydGFsIGludG8gdGhpcyBlbGVtZW50O1xuICogdGhlIHNjcm9sbCBsb2NrIHRvZ2dsZXMgYmFzZWQgb24gdGhlIG92ZXJsYXkgcmVnaXN0cnkgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBoYXNPcGVuT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGFjcXVpcmVTY3JvbGxMb2NrIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL092ZXJsYXlSb290Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXlSb290KCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGhhc09wZW5PdmVybGF5KCkpIHtcbiAgICAgICAgaWYgKCFyZWxlYXNlKSByZWxlYXNlID0gYWNxdWlyZVNjcm9sbExvY2soKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIHJlbGVhc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICByZWxlYXNlPy4oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzPXtjbGFzc2VzW1wicm9vdFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LW92ZXJsYXktcm9vdCAvPjtcbn1cblxuLyoqIEdldCB0aGUgbW91bnQgbm9kZSBmb3IgcG9ydGFsZWQgb3ZlcmxheXMuIFJldHVybnMgbnVsbCBiZWZvcmUgbW91bnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmxheVJvb3ROb2RlKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIltkYXRhLXBvbGx5LW92ZXJsYXktcm9vdF1cIik7XG59XG4iLAogICAgIi8qKlxuICogTW9kYWwg4oCUIGNvbXBvdW5kIGRpYWxvZyB3aXRoIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLFxuICogYW5kIG92ZXJsYXktc3RhY2sgaW50ZWdyYXRpb24uXG4gKlxuICogUm9vdCB0YWtlcyBhIGB3aGVuYCBzaWduYWwgKG9yIGJvb2xlYW4pLiBXaGVuIHRydXRoeSB0aGUgY29udGVudCBtb3VudHNcbiAqIGludG8gdGhlIE92ZXJsYXlSb290IHBvcnRhbCwgZm9jdXMgbW92ZXMgaW5zaWRlLCBUYWIgaXMgdHJhcHBlZCwgRXNjYXBlXG4gKiBmaXJlcyBgZGF0YS1hY3Rpb249XCJtb2RhbDpjbG9zZVwiYCAob3IgdGhlIG92ZXJsYXkgcmVnaXN0cnkncyBvbkNsb3NlXG4gKiBjYWxsYmFjayksIGFuZCB0aGUgYm9keSBzY3JvbGwgbG9ja3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkb25seVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUNvbnRleHQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlSWQsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBwb3BPdmVybGF5LCBwdXNoT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGluc3RhbGxGb2N1c1RyYXAgfSBmcm9tIFwiLi9pbnRlcm5hbC9mb2N1cy10cmFwLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG50eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGVJZDogc3RyaW5nO1xuICBkZXNjSWQ6IHN0cmluZztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBDdHggPSBjcmVhdGVDb250ZXh0PE1vZGFsQ29udGV4dCB8IG51bGw+KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VNb2RhbCgpOiBNb2RhbENvbnRleHQge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEN0eCk7XG4gIGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJNb2RhbCBzdWItY29tcG9uZW50cyBtdXN0IHJlbmRlciBpbnNpZGUgPE1vZGFsLlJvb3Q+XCIpO1xuICByZXR1cm4gY3R4O1xufVxuXG50eXBlIFJvb3RQcm9wcyA9IHtcbiAgd2hlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj4gfCBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBzb3VyY2U6IFwidGl0bGVcIiB1c2VzIHRoZSA8TW9kYWwuVGl0bGU+IGlkLCBvciBwYXNzIGFuIGV4cGxpY2l0IGxhYmVsLiAqL1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFJvb3QoeyB3aGVuLCBvbkNsb3NlLCBjaGlsZHJlbiwgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB9OiBSb290UHJvcHMpIHtcbiAgY29uc3QgaWQgPSB1c2VJZCgpO1xuICBjb25zdCB0aXRsZUlkID0gYCR7aWR9LXRpdGxlYDtcbiAgY29uc3QgZGVzY0lkID0gYCR7aWR9LWRlc2NgO1xuICBjb25zdCBtb3VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHR5cGVvZiB3aGVuID09PSBcImJvb2xlYW5cIiA/IHdoZW4gOiB3aGVuLnZhbHVlO1xuXG4gIC8vIENvbnN1bWVycyBhbG1vc3QgYWx3YXlzIHBhc3MgYW4gaW5saW5lIGNsb3N1cmUgZm9yIGBvbkNsb3NlYCwgc28gdGhlIHByb3BcbiAgLy8gaGFzIGEgbmV3IGlkZW50aXR5IG9uIGV2ZXJ5IHJlbmRlci4gS2VlcGluZyBpdCBpbiB0aGUgb3ZlcmxheSBlZmZlY3Qnc1xuICAvLyBkZXBlbmRlbmN5IGFycmF5IG1hZGUgdGhhdCBlZmZlY3QgdGVhciBkb3duIGFuZCByZS1pbnN0YWxsIHBlciByZW5kZXI6XG4gIC8vIGVhY2ggcnVuIHdyb3RlIHRoZSBgc3RhY2tgIHNpZ25hbCB0d2ljZSBhbmQgbW92ZWQgZm9jdXMgdHdpY2UsIGFuZCB0aGVcbiAgLy8gc2lnbmFsIHdyaXRlIHJlLXJlbmRlcmVkIHRoZSBzdWJzY3JpYmVyIHRoYXQgcHJvZHVjZWQgdGhlIG5leHQgY2xvc3VyZS5cbiAgLy8gVGhlIHJlc3VsdCB3YXMgYW4gdW5ib3VuZGVkIHJlbmRlciBsb29wIHRoYXQgcGlubmVkIHRoZSBtYWluIHRocmVhZFxuICAvLyAocG9sbHkjMTc3KS4gVGhlIGVmZmVjdCBub3cgcmVhZHMgdGhlIGxhdGVzdCBjYWxsYmFjayB0aHJvdWdoIGEgcmVmLCBzb1xuICAvLyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHRoZSB2YWx1ZXMgdGhhdCBnZW51aW5lbHkgcmUtb3BlbiB0aGUgb3ZlcmxheS5cbiAgY29uc3Qgb25DbG9zZVJlZiA9IHVzZVJlZihvbkNsb3NlKTtcbiAgb25DbG9zZVJlZi5jdXJyZW50ID0gb25DbG9zZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW2lzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHsgaWQsIG9uQ2xvc2U6ICgpID0+IG9uQ2xvc2VSZWYuY3VycmVudD8uKCkgfTtcbiAgICBwdXNoT3ZlcmxheShlbnRyeSk7XG4gICAgY29uc3QgZWwgPSBtb3VudFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsZWFudXAgPSBlbFxuICAgICAgPyBpbnN0YWxsRm9jdXNUcmFwKGVsKVxuICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgLyogbm8gcmVmIHlldCAqL1xuICAgICAgICB9O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBwb3BPdmVybGF5KGlkKTtcbiAgICB9O1xuICB9LCBbaXNPcGVuLCBwb3J0YWxOb2RlLCBpZF0pO1xuXG4gIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlPy4oKTtcbiAgfTtcblxuICBjb25zdCBjdHg6IE1vZGFsQ29udGV4dCA9IHsgaWQsIHRpdGxlSWQsIGRlc2NJZCwgY2xvc2UgfTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxDdHguUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGVsZW1lbnRSZWY9e21vdW50UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAganVzdGlmeUl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImNvbnRhaW5lclwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNvbnRlbnRcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtpZH1cbiAgICAgICAgZGF0YS1zdGF0ZT1cIm9wZW5cIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbCA/IHVuZGVmaW5lZCA6IHRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZGVzY0lkfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0xheW91dD5cbiAgICA8L0N0eC5Qcm92aWRlcj5cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBCYWNrZHJvcCgpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYmFja2Ryb3BcIl19IGRhdGEtcG9sbHktbW9kYWwtYmFja2Ryb3Agb25DbGljaz17Y2xvc2V9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICk7XG59XG5cbnR5cGUgQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIENvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdHlsZSB9OiBDb250ZW50UHJvcHMpIHtcbiAgY29uc3QgY2xzID0gY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInN1cmZhY2VcIl19ICR7Y2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wic3VyZmFjZVwiXTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICByYWRpdXM9XCJsZ1wiXG4gICAgICBzaGFkb3c9XCJsZ1wiXG4gICAgICBwb3NpdGlvbj1cInJlbGF0aXZlXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1zdXJmYWNlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3M9e2NsYXNzZXNbXCJoZWFkZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtaGVhZGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaGVhZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUaXRsZSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyB0aXRsZUlkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxoMiBpZD17dGl0bGVJZH0gY2xhc3M9e2NsYXNzZXNbXCJ0aXRsZVwiXX0gZGF0YS1wb2xseS1tb2RhbC10aXRsZT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2gyPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IGRlc2NJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtkZXNjSWR9IGNsYXNzPXtjbGFzc2VzW1wiYm9keVwiXX0gZGF0YS1wb2xseS1tb2RhbC1ib2R5PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzcz17Y2xhc3Nlc1tcImZvb3RlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1mb290ZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb290ZXI+XG4gICk7XG59XG5cbnR5cGUgQ2xvc2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogRmlyZSBhIHJlZ2lzdGVyZWQgZGF0YS1hY3Rpb24gaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbkNsb3NlIGNhbGxiYWNrLiAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDbG9zZSh7IGNoaWxkcmVuLCBhY3Rpb24gfTogQ2xvc2VQcm9wcykge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICBpZiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICBvbkNsaWNrPXtjbG9zZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IHtcbiAgUm9vdCxcbiAgQmFja2Ryb3AsXG4gIENvbnRlbnQsXG4gIEhlYWRlcixcbiAgVGl0bGUsXG4gIEJvZHksXG4gIEZvb3RlcixcbiAgQ2xvc2UsXG59O1xuIiwKICAgICIvKipcbiAqIENvbmZpcm1EaWFsb2cg4oCUIFByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbiBwcmltaXRpdmUuXG4gKlxuICogYGNvbmZpcm0oeyB0aXRsZSwgYm9keSwgZGFuZ2VyIH0pYCByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4uIE9wZW5zIHRoZVxuICogcmVuZGVyZWQgYDxDb25maXJtRGlhbG9nLkhvc3QgLz5gIG1vZGFsICh3aGljaCBtdXN0IGJlIG1vdW50ZWQgb25jZSBhdFxuICogdGhlIGFwcCByb290KS4gVXNlciBwaWNraW5nIGNvbmZpcm0gb3IgY2FuY2VsIHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogRXNjYXBlLCBiYWNrZHJvcCBjbGljaywgYW5kIGV4cGxpY2l0IGAuZGlzbWlzcygpYCByZXNvbHZlIGZhbHNlLlxuICovXG5cbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29uZmlybURpYWxvZy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsLnRzeFwiO1xuXG50eXBlIENvbmZpcm1SZXF1ZXN0ID0ge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBwZW5kaW5nID0gc2lnbmFsPENvbmZpcm1SZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG5jb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xubGV0IG5leHRJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIENvbmZpcm1PcHRpb25zID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpcm0ob3B0aW9uczogQ29uZmlybU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgbmV4dElkICs9IDE7XG4gICAgcGVuZGluZy52YWx1ZSA9IHtcbiAgICAgIGlkOiBuZXh0SWQsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGRhbmdlcjogb3B0aW9ucy5kYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IG9wdGlvbnMuY29uZmlybUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IG9wdGlvbnMuY2FuY2VsTGFiZWwsXG4gICAgICByZXNvbHZlLFxuICAgIH07XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3VsdDogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICBwZW5kaW5nLnZhbHVlID0gbnVsbDtcbiAgY3VycmVudC5yZXNvbHZlKHJlc3VsdCk7XG59XG5cbi8qKiBSZW5kZXJzIHRoZSBhY3RpdmUgY29uZmlybSBkaWFsb2cuIE1vdW50IG9uY2UgbmVhciB0aGUgYXBwIHJvb3QuICovXG5mdW5jdGlvbiBIb3N0KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxNb2RhbC5Sb290IHdoZW49e2lzT3Blbn0gb25DbG9zZT17KCkgPT4gY2xvc2UoZmFsc2UpfT5cbiAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLlRpdGxlPntjdXJyZW50LnRpdGxlfTwvTW9kYWwuVGl0bGU+XG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICB7Y3VycmVudC5ib2R5ID8gPE1vZGFsLkJvZHk+e2N1cnJlbnQuYm9keX08L01vZGFsLkJvZHk+IDogbnVsbH1cbiAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImVuZFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWFjdGlvbnNcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNhbmNlbFwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1jYW5jZWxcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UoZmFsc2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jYW5jZWxMYWJlbCA/PyBcIkNhbmNlbFwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y3VycmVudC5kYW5nZXIgPyBjbGFzc2VzW1wiY29uZmlybURhbmdlclwiXSA6IGNsYXNzZXNbXCJjb25maXJtXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLW9rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKHRydWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jb25maXJtTGFiZWwgPz8gXCJPS1wifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgIDwvTW9kYWwuUm9vdD5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbmZpcm1EaWFsb2cgPSB7IEhvc3QsIGNvbmZpcm0gfTtcbiIsCiAgICAiLyoqXG4gKiBGaWxlSW5wdXQg4oCUIGEgc3R5bGVkIHRyaWdnZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBwaWNrZXIuXG4gKlxuICogQSBmaWxlIGlzIGEgYmluYXJ5IG9iamVjdDogaXQgY2Fubm90IHJpZGUgYSBgZGF0YS1hY3Rpb25gIGF0dHJpYnV0ZVxuICogdGhlIHdheSBhIHN0cmluZyB2YWx1ZSBkb2VzLCBzbyBGaWxlSW5wdXQgaXMgdGhlIG9uZSBpbnB1dCBwcmltaXRpdmVcbiAqIHRoYXQgdGFrZXMgYSBjYWxsYmFjay4gYG9uRmlsZXNgIGZpcmVzIHdpdGggdGhlIGNob3NlbiBGaWxlTGlzdC4gVGhlXG4gKiBuYXRpdmUgPGlucHV0IHR5cGU9XCJmaWxlXCI+IHN0YXlzIGluIHRoZSBET00g4oCUIHZpc3VhbGx5IGhpZGRlbiBpbnNpZGVcbiAqIHRoZSA8bGFiZWw+IOKAlCBzbyB0aGUgd2hvbGUgY29udHJvbCBvcGVucyB0aGUgcGlja2VyIGFuZCByZW1haW5zXG4gKiBrZXlib2FyZC1hY2Nlc3NpYmxlIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0UHJvcHMgPSB7XG4gIC8qKiBGaXJlZCB3aXRoIHRoZSBjaG9zZW4gZmlsZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkO1xuICAvKiogVmlzaWJsZSB0cmlnZ2VyIHRleHQuIERlZmF1bHQ6ICdDaG9vc2UgZmlsZScuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogYGFjY2VwdGAgZmlsdGVyIGZvcndhcmRlZCB0byB0aGUgbmF0aXZlIGlucHV0IChlLmcuICdpbWFnZS8qJykuICovXG4gIGFjY2VwdD86IHN0cmluZztcbiAgLyoqIEFsbG93IHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dChwcm9wczogRmlsZUlucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgb25GaWxlcywgbGFiZWwgPSBcIkNob29zZSBmaWxlXCIsIGFjY2VwdCwgbXVsdGlwbGUsIGRpc2FibGVkLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIG9uRmlsZXMoZmlsZXMpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJmaWxlSW5wdXRcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpbGUtaW5wdXQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm5hdGl2ZVwiXX1cbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBIdG1sIOKAlCByZW5kZXIgdHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgcmF3IG1hcmt1cC5cbiAqXG4gKiBUaGUgZGVsaWJlcmF0ZSBlc2NhcGUgaGF0Y2ggZm9yIHRoZSByYXJlIHRoaW5nIHBvbGx5LXVpIGNhbm5vdFxuICogZXhwcmVzczogYSBsb2NhbGx5IGdlbmVyYXRlZCwgYWxyZWFkeS1zYWZlIFNWRyAoYSBRUiBjb2RlKSwgYVxuICogcHJlLXJlbmRlcmVkIGRpYWdyYW0uIFRoZSBjYWxsZXIgb3ducyBzYWZldHkg4oCUIGBodG1sYCBnb2VzIHN0cmFpZ2h0XG4gKiBpbnRvIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAsIHNvIGl0IE1VU1QgYmUgdHJ1c3RlZCBvciBzYW5pdGlzZWRcbiAqIGZpcnN0LiBGb3IgdW50cnVzdGVkIG1hcmtkb3duIHVzZSBgcmVuZGVyTWFya2Rvd25gLCB3aGljaCBzYW5pdGlzZXM7XG4gKiBmb3IgYW55dGhpbmcgYSBwcmltaXRpdmUgYWxyZWFkeSBjb3ZlcnMsIHVzZSB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBIdG1sUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogVHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgSFRNTC4gVGhlIGNhbGxlciBvd25zIGl0cyBzYWZldHkuICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIFBvbHltb3JwaGljIHdyYXBwZXIgZWxlbWVudCAoZGl2LCBzcGFuLCBmaWd1cmUsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKHByb3BzOiBIdG1sUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgaHRtbCwgYXMgPSBcImRpdlwiLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChhcywge1xuICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAvLyBhdHRyaWJ1dGVzIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgaWQsXG4gICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaHRtbFwiOiB0cnVlLFxuICAgIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbCDigJQgdGhpcyBwcmltaXRpdmUgSVMgdGhlIGRvY3VtZW50ZWQgdHJ1c3RlZC1tYXJrdXAgZXNjYXBlIGhhdGNoOyB0aGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogaHRtbCB9LFxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBMaW5rIOKAlCB0b2tlbi1zdHlsZWQgbmF2aWdhdGlvbmFsIGFuY2hvci5cbiAqXG4gKiBUaGUgcHJpbWl0aXZlIGZvciBwbGFpbiBoeXBlcmxpbmtzOiBodWIgYXBwLWdyaWQgY2FyZHMsIGEgZmlsZVxuICogZG93bmxvYWQsIGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gPEJ1dHRvbiBocmVmPiBpcyBmb3IgbGluay1zaGFwZWRcbiAqIEJVVFRPTlMg4oCUIGEgY2FsbCB0byBhY3Rpb24gd2VhcmluZyBidXR0b24gY2hyb21lOyA8TGluaz4gaXMgZm9yXG4gKiBpbmxpbmUsIHRleHR1YWwgbGlua3MgdGhhdCByZWFkIGFzIGxpbmtzLiBgZXh0ZXJuYWxgIG9wZW5zIGEgbmV3IHRhYlxuICogd2l0aCBgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiYDsgYGRvd25sb2FkYCBvZmZlcnMgdGhlIHRhcmdldCBhcyBhXG4gKiBmaWxlIChhbiBlbXB0eSBzdHJpbmcga2VlcHMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MaW5rLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGlua1Byb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBocmVmOiBzdHJpbmc7XG4gIC8qKiBPcGVuIGluIGEgbmV3IHRhYiB3aXRoIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIi4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogT2ZmZXIgdGhlIGhyZWYgYXMgYSBkb3dubG9hZDsgYW4gZW1wdHkgc3RyaW5nIGtlZXBzIGl0cyBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBEcm9wIHRoZSB1bmRlcmxpbmUgdW50aWwgaG92ZXIg4oCUIGZvciBsaW5rIGdyaWRzIGFuZCBjYXJkIGxpbmtzLiAqL1xuICBzdWJ0bGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExpbmsocHJvcHM6IExpbmtQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgaHJlZiwgZXh0ZXJuYWwsIGRvd25sb2FkLCBzdWJ0bGUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJsaW5rXCJdXTtcbiAgaWYgKHN1YnRsZSkgcGFydHMucHVzaChjbGFzc2VzW1wic3VidGxlXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9e2V4dGVybmFsID8gXCJfYmxhbmtcIiA6IHVuZGVmaW5lZH1cbiAgICAgIHJlbD17ZXh0ZXJuYWwgPyBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiA6IHVuZGVmaW5lZH1cbiAgICAgIGRvd25sb2FkPXtkb3dubG9hZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktbGlua1xuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogT3V0cHV0IOKAlCByZWFkLW9ubHksIG11bHRpLWxpbmUgZGlhZ25vc3RpYyB0ZXh0LlxuICpcbiAqIEZvciBwcm9ncmFtIG91dHB1dCBhIGNvbnN1bWVyIG11c3QgU0hPVyBidXQgbm90IGVkaXQ6IGEgbWVzaC1zdGF0ZVxuICogc25hcHNob3QsIGEgcGVyLXBlZXIgc3luYyB0YWJsZSwgYSByZWNvdmVyeSBibG9iLiA8VGV4dElucHV0PiBhbmRcbiAqIDxBY3Rpb25JbnB1dD4gYXJlIHNpbmdsZS1saW5lIGFuZCBlZGl0YWJsZTsgPENvZGU+IGlzIGZvciBjb2RlXG4gKiBzYW1wbGVzIGFuZCBuZXZlciB3cmFwcy4gPE91dHB1dD4gcmVuZGVycyBhIG1vbm9zcGFjZSA8cHJlPiB0aGF0XG4gKiB3cmFwcyBsb25nIGxpbmVzIGJ5IGRlZmF1bHQg4oCUIGEgZGlhZ25vc3RpYyBkdW1wIHNob3VsZCBzdGF5IG9uXG4gKiBzY3JlZW4g4oCUIHdpdGggYHNjcm9sbGAgdG8gc3dpdGNoIHRvIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5zdGVhZC5cbiAqXG4gKiBJdCBjYXJyaWVzIHRoZSBwb2xseSMxMjUgcGFzc3Rocm91Z2ggc3VyZmFjZSwgc28gYSBgZGF0YS1hY3Rpb25gXG4gKiBmb3IgYSB0YXAtdG8tc2VsZWN0LWFsbCBnZXN0dXJlIHJpZGVzIHN0cmFpZ2h0IG9udG8gdGhlIDxwcmU+XG4gKiAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdXRwdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFNjcm9sbCBsb25nIHVuYnJlYWthYmxlIGxpbmVzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHdyYXBwaW5nLiAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKiogTWFrZSB0aGUgYmxvY2sgZm9jdXNhYmxlIOKAlCBwYWlyIHdpdGggYSBgZGF0YS1hY3Rpb25gIHRhcCBnZXN0dXJlLiAqL1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXQocHJvcHM6IE91dHB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBzY3JvbGwsIHRhYkluZGV4LCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wib3V0cHV0XCJdXTtcbiAgaWYgKHNjcm9sbCkgcGFydHMucHVzaChjbGFzc2VzW1wic2Nyb2xsXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHByZVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1vdXRwdXRcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wcmU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2VsZWN0IOKAlCBkcm9wZG93biBvZiBvcHRpb25zIHdpdGggc2luZ2xlLSBvciBtdWx0aS1zZWxlY3Qgc2VtYW50aWNzLlxuICpcbiAqIENvbXBvc2VzIERyb3Bkb3duIGZvciB0aGUgbWVudSBhbmQgYSBuYXRpdmUgY2hlY2tib3ggaW4gZWFjaCBvcHRpb25cbiAqIHJvdyBmb3IgbXVsdGktc2VsZWN0LiBUaGUgYHNlbGVjdGVkYCBzdGF0ZSBpcyBhIFNpZ25hbDxTZXQ8VD4+O1xuICogc2luZ2xlLXNlbGVjdCByZXBsYWNlcyB0aGUgc2V0LCBtdWx0aS1zZWxlY3QgdG9nZ2xlcyBtZW1iZXJzaGlwLlxuICogTXVsdGktc2VsZWN0IG1vZGUgYWxzbyBzaG93cyBTZWxlY3QgQWxsIC8gQ2xlYXIgYWN0aW9uIGJ1dHRvbnMgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIG1lbnUuIFNpbmdsZS1zZWxlY3QgbW9kZSBjYW4gb3B0IGludG8gYGNsZWFyYWJsZWAsXG4gKiB3aGljaCBwcmVwZW5kcyBhIHBsYWNlaG9sZGVyLWxhYmVsbGVkIG9wdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gKiBzZWxlY3Rpb24gdG8gZW1wdHkg4oCUIGZvciBcIkFueSDigKZcIiBmaWx0ZXIgc2VtYW50aWNzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VDb21wdXRlZCwgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgU2VsZWN0VHJpZ2dlciB9IGZyb20gXCIuL2ludGVybmFsL3NlbGVjdC10cmlnZ2VyLnRzeFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uPFQgPSBzdHJpbmc+ID0geyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RQcm9wczxUID0gc3RyaW5nPiA9IHtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W107XG4gIHNlbGVjdGVkOiBTaWduYWw8U2V0PFQ+PjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaW5nbGUtc2VsZWN0IG9ubHk6IHByZXBlbmQgYW4gb3B0aW9uIGxhYmVsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyXG4gICAqIHRoYXQgcmV0dXJucyB0aGUgc2VsZWN0aW9uIHRvIGVtcHR5LiBXaXRob3V0IGl0LCBwaWNraW5nIGFuIG9wdGlvblxuICAgKiBpcyBhIHRyYXAg4oCUIG5vdGhpbmcgaW4gdGhlIGxpc3QgbGVhZHMgYmFjayB0byBcImFueVwiLiBVc2UgaXQgZm9yXG4gICAqIG9wdGlvbmFsIGZpbHRlcnMgKFwiQW55IHN0YWdlXCIpLCBub3QgcmVxdWlyZWQgZm9ybSBmaWVsZHNcbiAgICogKFwiU2VsZWN0IGEgdGVhbVwiKS4gSWdub3JlZCBpbiBtdWx0aS1zZWxlY3QsIHdoaWNoIGhhcyBDbGVhci5cbiAgICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gZm9ybWF0U2VsZWN0ZWQ8VD4oXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxuICBzZWxlY3RlZDogU2V0PFQ+LFxuICBtdWx0aVNlbGVjdDogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGVkLnNpemUgPT09IDApIHJldHVybiBcIlwiO1xuICBpZiAobXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWQuc2l6ZSA+IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQuc2l6ZX0gc2VsZWN0ZWRgO1xuICB9XG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChzZWxlY3RlZC5oYXMob3B0LnZhbHVlKSkgbGFiZWxzLnB1c2gob3B0LmxhYmVsKTtcbiAgfVxuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdDxUID0gc3RyaW5nPihwcm9wczogU2VsZWN0UHJvcHM8VD4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIHNlbGVjdGVkLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyID0gXCJTZWxlY3RcXHUyMDI2XCIsXG4gICAgbXVsdGlTZWxlY3QgPSBmYWxzZSxcbiAgICBjbGVhcmFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIHdpZGUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc09wZW4gPSB1c2VTaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlQ29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTZWxlY3RlZChvcHRpb25zLCBzZWxlY3RlZC52YWx1ZSwgbXVsdGlTZWxlY3QpO1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyB0ZXh0IDogcGxhY2Vob2xkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VDb21wdXRlZCgoKSA9PiBzZWxlY3RlZC52YWx1ZS5zaXplID09PSAwKTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25DbGljayA9ICh2YWx1ZTogVCk6IHZvaWQgPT4ge1xuICAgIGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgaWYgKG5leHQuaGFzKHZhbHVlKSkgbmV4dC5kZWxldGUodmFsdWUpO1xuICAgICAgZWxzZSBuZXh0LmFkZCh2YWx1ZSk7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChbdmFsdWVdKTtcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KG9wdGlvbnMubWFwKChvKSA9PiBvLnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gIH07XG5cbiAgLy8gVGhlIGNsZWFyIG9wdGlvbiBiZWhhdmVzIGxpa2UgYSBub3JtYWwgc2VsZWN0aW9uOiBwaWNrIGl0LCBtZW51IGNsb3Nlcy5cbiAgY29uc3QgaGFuZGxlQ2xlYXJPcHRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclBhcnRzID0gW2NsYXNzZXNbXCJ0cmlnZ2VyXCJdID8/IFwiXCJdO1xuICBpZiAoaXNFbXB0eS52YWx1ZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInBsYWNlaG9sZGVyXCJdID8/IFwiXCIpO1xuICBpZiAod2lkZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInRyaWdnZXJXaWRlXCJdID8/IFwiXCIpO1xuICBjb25zdCB0cmlnZ2VyQ2xhc3MgPSB0cmlnZ2VyUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCB0cmlnZ2VyQ29udGVudCA9IDxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dC52YWx1ZX0gLz47XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1zZWxlY3Q+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgdHJpZ2dlcj17dHJpZ2dlckNvbnRlbnR9XG4gICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgdHJpZ2dlckRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dC52YWx1ZX1cbiAgICAgICAgbXVsdGlTZWxlY3Q9e211bHRpU2VsZWN0fVxuICAgICAgPlxuICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfT5cbiAgICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbH0+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZUNsZWFyfT5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7IW11bHRpU2VsZWN0ICYmIGNsZWFyYWJsZSAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzRW1wdHkudmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgIGNsYXNzPXtcbiAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZVxuICAgICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1zZWxlY3QtY2xlYXJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyT3B0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLnZhbHVlLmhhcyhvcHQudmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG9wdENsYXNzID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgIGNsYXNzPXtvcHRDbGFzc31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3B0aW9uQ2xpY2sob3B0LnZhbHVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm9wdGlvbkNoZWNrXCJdfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0Ryb3Bkb3duPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNrZWxldG9uIOKAlCBzaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy5cbiAqXG4gKiBUaHJlZSB2YXJpYW50czogdGV4dCAoZnVsbC13aWR0aCwgMWVtIHRhbGwpLCByZWN0IChmdWxsLXdpZHRoLCAxMDBweFxuICogdGFsbCksIGNpcmNsZSAoNDB4NDApLiBBIENTUyBncmFkaWVudCBhbmltYXRlcyBsZWZ0LXRvLXJpZ2h0IG92ZXJcbiAqIDEuNXMuIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCB6ZXJvZXMgdGhlIGFuaW1hdGlvbiB2aWEgdGhlIHRva2VuXG4gKiBzeXN0ZW0uIENvbnN1bWVycyBzaXplIHZpYSB3aWR0aC9oZWlnaHQgcHJvcHMgKHB4IG51bWJlcnMgb3IgQ1NTXG4gKiBzdHJpbmdzKTsgZGVmYXVsdCBzaXppbmcgY29tZXMgZnJvbSB0aGUgdmFyaWFudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NrZWxldG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25WYXJpYW50ID0gXCJ0ZXh0XCIgfCBcInJlY3RcIiB8IFwiY2lyY2xlXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uUHJvcHMgPSB7XG4gIHZhcmlhbnQ/OiBTa2VsZXRvblZhcmlhbnQ7XG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVTaXplKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogU2tlbGV0b25WYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiY2lyY2xlXCIpIHJldHVybiBjbGFzc2VzW1wiY2lyY2xlXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJyZWN0XCIpIHJldHVybiBjbGFzc2VzW1wicmVjdFwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0ZXh0XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2tlbGV0b24ocHJvcHM6IFNrZWxldG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwidGV4dFwiLCB3aWR0aCwgaGVpZ2h0LCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHcgPSByZXNvbHZlU2l6ZSh3aWR0aCk7XG4gIGNvbnN0IGggPSByZXNvbHZlU2l6ZShoZWlnaHQpO1xuICBpZiAodyAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIndpZHRoXCJdID0gdztcbiAgaWYgKGggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJoZWlnaHRcIl0gPSBoO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiYXNlID0gY2xhc3Nlc1tcInNrZWxldG9uXCJdO1xuICBpZiAoYmFzZSkgcGFydHMucHVzaChiYXNlKTtcbiAgY29uc3QgdkNsYXNzID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodkNsYXNzKSBwYXJ0cy5wdXNoKHZDbGFzcyk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXNrZWxldG9uPXt2YXJpYW50fVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRhYnMg4oCUIGhvcml6b250YWwgbmF2IHdpdGggYWN0aXZlLXRhYiBhY2NlbnQuXG4gKlxuICogRWFjaCBidXR0b24gY2FycmllcyBgZGF0YS1hY3Rpb25gICh0aGUgY29uc3VtZXItcHJvdmlkZWQgYWN0aW9uIG5hbWUpXG4gKiBhbmQgYGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9YCBzbyB0aGUgZXZlbnQgZGVsZWdhdG9yIHJlc29sdmVzIHRoZVxuICogYWN0aXZhdGVkIHRhYi4gVGhlIGFjdGl2ZSB0YWIgZ2V0cyBgYXJpYS1jdXJyZW50PVwicGFnZVwiYCBhbmQgYVxuICogYm90dG9tLWJvcmRlciBhY2NlbnQuIFRoZSBuYXYgc2Nyb2xscyBob3Jpem9udGFsbHkgd2l0aCBhIGhpZGRlblxuICogc2Nyb2xsYmFyIGZvciBvdmVyZmxvdy4gSW50ZXJuYWwgYXJyYW5nZW1lbnQgdXNlcyA8TGF5b3V0PiwgcGFja2VkIHRvXG4gKiB0aGUgaW5saW5lIHN0YXJ0OiB0aGUgZ3JpZCBpcyAxMDAlIHdpZGUsIHNvIHdpdGhvdXQganVzdGlmeUNvbnRlbnQgdGhlXG4gKiBgYXV0b2AgdHJhY2tzIHN0cmV0Y2ggYW5kIGZvdXIgdGFicyBzcHJlYWQgYWNyb3NzIHRoZSB3aG9sZSBjb250YWluZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UYWJzLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGFiID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBkaXNhYmxlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVGFic1Byb3BzID0ge1xuICB0YWJzOiBUYWJbXTtcbiAgYWN0aXZlVGFiOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVGFicyhwcm9wczogVGFic1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHRhYnMsIGFjdGl2ZVRhYiwgYWN0aW9uLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRhYnNcIl0gPz8gXCJcIl07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8bmF2XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10YWJzXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBjb2x1bW5zPXtgcmVwZWF0KCR7dGFicy5sZW5ndGh9LCBhdXRvKWB9XG4gICAgICAgIGdhcD1cIjBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiZW5kXCJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJzdGFydFwiXG4gICAgICA+XG4gICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVUYWIgPT09IHRhYi5pZDtcbiAgICAgICAgICBjb25zdCB0YWJDbGFzcyA9IGlzQWN0aXZlID8gYCR7Y2xhc3Nlc1tcInRhYlwiXX0gJHtjbGFzc2VzW1wiYWN0aXZlXCJdfWAgOiBjbGFzc2VzW1widGFiXCJdO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e3RhYkNsYXNzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGFiLmRpc2FibGVkfVxuICAgICAgICAgICAgICBhcmlhLWN1cnJlbnQ9e2lzQWN0aXZlID8gXCJwYWdlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0YWIubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvbmF2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRleHQg4oCUIHR5cG9ncmFwaGljIHByaW1pdGl2ZSBmb3Igc2Vjb25kYXJ5LCBzaXplZCwgYW5kIHN0YXR1cyBjb3B5LlxuICpcbiAqIFJlbmRlcnMgc3VidGl0bGVzLCBjYXB0aW9ucywgZmllbGQgbGFiZWxzLCBlbXB0eS1zdGF0ZSBjb3B5LCBhbmRcbiAqIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2l0aG91dCB0aGUgY29uc3VtZXIgcmVhY2hpbmcgZm9yIGEgYHN0eWxlYFxuICogYXR0cmlidXRlIG9yIGEgaGFuZC1yb2xsZWQgY2xhc3MuIGB0b25lYCBtYXBzIHRvIHRoZSBzZW1hbnRpY1xuICogYC0tcG9sbHktdGV4dC0qYCBhbmQgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlsaWVzOyBgc2l6ZWAsXG4gKiBgd2VpZ2h0YCwgYGl0YWxpY2AsIGFuZCBgbGVhZGluZ2AgY292ZXIgdGhlIHJlbWFpbmluZyB0eXBvZ3JhcGhpY1xuICogYXhlcy4gYGFzYCBrZWVwcyB0aGUgZWxlbWVudCBwb2x5bW9ycGhpYyBzbyB0aGUgc2FtZSBwcmltaXRpdmUgYmFja3MgYVxuICogPHNwYW4+LCA8cD4sIDxsYWJlbD4sIG9yIDxmaWdjYXB0aW9uPi4gQSBuby1wcm9wIDxUZXh0PiBpcyBhbiBvcmRpbmFyeVxuICogPHNwYW4+IGF0IGJvZHkgc2l6ZSBhbmQgZGVmYXVsdCBjb2xvdXIuXG4gKlxuICogcG9sbHkjMTI1OiBhcmJpdHJhcnkgYGRhdGEtKmAgLyBgYXJpYS0qYCBhdHRyaWJ1dGVzIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50LCBzbyBhIFRleHQgdGhhdCBhbHNvIG5lZWRzIGEgdGVzdCBob29rIG9yIGFuXG4gKiBhMTF5IGF0dHJpYnV0ZSBzdGF5cyBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRUb25lID0gXCJkZWZhdWx0XCIgfCBcIm11dGVkXCIgfCBcImRhbmdlclwiIHwgXCJ3YXJuaW5nXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIFRleHRTaXplID0gXCJ4c1wiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJ4bFwiO1xuZXhwb3J0IHR5cGUgVGV4dFdlaWdodCA9IFwibm9ybWFsXCIgfCBcIm1lZGl1bVwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBUZXh0TGVhZGluZyA9IFwidGlnaHRcIiB8IFwiYmFzZVwiIHwgXCJsb29zZVwiO1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKHNwYW4sIHAsIGxhYmVsLCBmaWdjYXB0aW9uLCDigKYpLiBEZWZhdWx0cyB0byAnc3BhbicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDb2xvdXIgcm9sZS4gJ211dGVkJyBkZS1lbXBoYXNpc2VzOyAnZGFuZ2VyJy8nd2FybmluZycvJ3N1Y2Nlc3MnXG4gICAqIHJlbmRlciBzdGF0dXMgY29weSBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW5zLiBEZWZhdWx0OiAnZGVmYXVsdCcuICovXG4gIHRvbmU/OiBUZXh0VG9uZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgc2l6ZS4gRGVmYXVsdDogaW5oZXJpdCBmcm9tIGNvbnRleHQuICovXG4gIHNpemU/OiBUZXh0U2l6ZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgd2VpZ2h0LiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgd2VpZ2h0PzogVGV4dFdlaWdodDtcblxuICAvKiogSXRhbGljIGVtcGhhc2lzIOKAlCBmb3IgaGludHMgYW5kIGFzaWRlcyDigJQgd2l0aG91dCBhbiBpbmxpbmUgc3R5bGUuICovXG4gIGl0YWxpYz86IGJvb2xlYW47XG5cbiAgLyoqIExpbmUtdGhyb3VnaCDigJQgZm9yIGNvbXBsZXRlZCB0b2RvIGl0ZW1zIGFuZCBzdXBlcnNlZGVkIGNvcHkuICovXG4gIHN0cmlrZXRocm91Z2g/OiBib29sZWFuO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgbGluZSBoZWlnaHQuICdsb29zZScgc3VpdHMgbXVsdGktbGluZSBib2R5IGNvcHkuICovXG4gIGxlYWRpbmc/OiBUZXh0TGVhZGluZztcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHNvIDxUZXh0IGFzPVwibGFiZWxcIj4gY2FuIHBvaW50IGF0IGEgY29udHJvbC4gKi9cbiAgaHRtbEZvcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0KHByb3BzOiBUZXh0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwic3BhblwiLFxuICAgIHRvbmUgPSBcImRlZmF1bHRcIixcbiAgICBzaXplLFxuICAgIHdlaWdodCxcbiAgICBpdGFsaWMsXG4gICAgc3RyaWtldGhyb3VnaCxcbiAgICBsZWFkaW5nLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0ZXh0XCJdXTtcbiAgaWYgKHRvbmUgIT09IFwiZGVmYXVsdFwiKSBwYXJ0cy5wdXNoKGNsYXNzZXNbdG9uZV0pO1xuICBpZiAoc2l6ZSkgcGFydHMucHVzaChjbGFzc2VzW3NpemVdKTtcbiAgaWYgKHdlaWdodCkgcGFydHMucHVzaChjbGFzc2VzW3dlaWdodF0pO1xuICBpZiAoaXRhbGljKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpdGFsaWNcIl0pO1xuICBpZiAoc3RyaWtldGhyb3VnaCkgcGFydHMucHVzaChjbGFzc2VzW1wic3RyaWtldGhyb3VnaFwiXSk7XG4gIGlmIChsZWFkaW5nKSBwYXJ0cy5wdXNoKGNsYXNzZXNbbGVhZGluZ10pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzXG4gICAgICAvLyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBmb3I6IHByb3BzLmh0bWxGb3IsXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS10ZXh0XCI6IHRvbmUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNoYXJlZCBpbnB1dCBhMTF5IHdpcmluZy5cbiAqXG4gKiBSZXR1cm5zIGEgY29tbW9uIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgVGV4dElucHV0LCBBY3Rpb25JbnB1dCwgYW5kXG4gKiBhbnkgY29uc3VtZXItYnVpbHQgaW5wdXQgY2FuIHNwbGF0IG9udG8gaXRzIG5hdGl2ZSBlbGVtZW50LiBLZWVwc1xuICogYXJpYS0qIGFuZCBkYXRhLXBvbGx5LSogbmFtZXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhbWlseS5cbiAqL1xuXG5leHBvcnQgdHlwZSBJbnB1dEExMXlQcm9wcyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgaW52YWxpZD86IGJvb2xlYW47XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnB1dEExMXkocHJvcHM6IElucHV0QTExeVByb3BzKSB7XG4gIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaW5wdXRcIjogdHJ1ZSxcbiAgICBcImFyaWEtaW52YWxpZFwiOiBwcm9wcy5pbnZhbGlkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLXJlcXVpcmVkXCI6IHByb3BzLnJlcXVpcmVkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzLmRlc2NyaWJlZEJ5LFxuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHByb3BzLnJlYWRPbmx5LFxuICB9O1xuICBpZiAocHJvcHMuaW52YWxpZCkgYXR0cnNbXCJkYXRhLXN0YXRlXCJdID0gXCJpbnZhbGlkXCI7XG4gIHJldHVybiBhdHRycztcbn1cbiIsCiAgICAiLyoqXG4gKiBUZXh0SW5wdXQg4oCUIHBhc3NpdmUsIHNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQgd3JhcHBlci5cbiAqXG4gKiBEZXNpZ25lZCB0byBsaXZlIGluc2lkZSA8QWN0aW9uRm9ybT4uIFBhc3MgYSBwbGFpbiBzdHJpbmcgZm9yXG4gKiB1bmNvbnRyb2xsZWQgbW9kZSAoRm9ybURhdGEtb24tc3VibWl0IHBpY2tzIHVwIHRoZSB2YWx1ZSkgb3IgYVxuICogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQgbW9kZS4gRWl0aGVyIHdheSwgYTExeSBhdHRyaWJ1dGVzIGFyZVxuICogd2lyZWQgYnkgdGhlIHNoYXJlZCBpbnB1dC1iYXNlLCB0aGUgc3RhYmxlIGBbZGF0YS1wb2xseS1pbnB1dF1gIGhvb2tcbiAqIGlzIGFwcGxpZWQgZm9yIHN0eWxpbmcsIGFuZCBgaW52YWxpZGAgZmxpcHMgYGFyaWEtaW52YWxpZGAgYW5kXG4gKiBgZGF0YS1zdGF0ZT1cImludmFsaWRcImAgZm9yIGNvbnN1bWVyIHNlbGVjdG9ycy5cbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZSDigJQgXCJ0ZXh0XCIgKGRlZmF1bHQpLFxuICogXCJlbWFpbFwiLCBcIm51bWJlclwiLCBcImRhdGVcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIHRoZSBicm93c2VyIHN1cHBsaWVzIHRoZVxuICogcmlnaHQga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb24uIGBtaW5gL2BtYXhgL2BzdGVwYCBhcHBseSB0byB0aGVcbiAqIHNpbmdsZS1saW5lIHZhcmlhbnQgKGUuZy4gbnVtZXJpYyBvciBkYXRlIGJvdW5kcykgYW5kIGtlZXAgZmlsdGVyXG4gKiBmaWVsZHMgZnJvbSBiZWluZyB1bnZhbGlkYXRlZCBmcmVlIHRleHQuXG4gKlxuICogYGVycm9yYCwgd2hlbiBzdXBwbGllZCwgcmVuZGVycyBhIG1lc3NhZ2UgYmVuZWF0aCB0aGUgZmllbGQsIHdyYXBzIHRoZVxuICogY29udHJvbCBpbiBhIGxhYmVsbGVkIGdyb3VwLCBhbmQgYXV0by13aXJlcyBgYXJpYS1kZXNjcmliZWRieWAgcGx1cyB0aGVcbiAqIGludmFsaWQgc3RhdGUg4oCUIG5vIG1hbnVhbCBpZCBqdWdnbGluZy4gV2l0aG91dCBgZXJyb3JgIHRoZSBwcmltaXRpdmVcbiAqIHN0YXlzIGEgYmFyZSBuYXRpdmUgZWxlbWVudCwgZXhhY3RseSBhcyBiZWZvcmUsIHNvIGNvbnN1bWVycyB0aGF0IG93blxuICogdGhlaXIgb3duIHN1cnJvdW5kaW5nIHN0cnVjdHVyZSBhcmUgdW5hZmZlY3RlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBidWlsZElucHV0QTExeSB9IGZyb20gXCIuL2ludGVybmFsL2lucHV0LWJhc2UudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5cbi8qKiBOYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZXMgcG9sbHkncyBmaWx0ZXIvZm9ybSBmaWVsZHMgdXNlLiAqL1xuZXhwb3J0IHR5cGUgVGV4dElucHV0VHlwZSA9XG4gIHwgXCJ0ZXh0XCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIlxuICB8IFwic2VhcmNoXCJcbiAgfCBcInBhc3N3b3JkXCJcbiAgfCBcIm51bWJlclwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiO1xuXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQsIHN0cmluZyBmb3IgdW5jb250cm9sbGVkIGRlZmF1bHQuICovXG4gIHZhbHVlPzogU2lnbmFsPHN0cmluZz4gfCBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogVGV4dElucHV0VHlwZTtcbiAgLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBVcHBlciBib3VuZCBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogU3RlcCBncmFudWxhcml0eSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgc3RlcD86IG51bWJlciB8IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCDigJQgYSBoaW50IGJleW9uZCB0aGUgcGxhY2Vob2xkZXIvbGFiZWwuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZSByZW5kZXJlZCBiZW5lYXRoIHRoZSBmaWVsZC4gV2hlbiBwcmVzZW50IHRoZVxuICAgKiBwcmltaXRpdmUgd3JhcHMgdGhlIGNvbnRyb2wsIGxpbmtzIHRoZSBtZXNzYWdlIHZpYSBhcmlhLWRlc2NyaWJlZGJ5LFxuICAgKiBhbmQgbWFya3MgdGhlIGZpZWxkIGludmFsaWQuIE9taXQgaXQgdG8ga2VlcCBhIGJhcmUgbmF0aXZlIGVsZW1lbnQuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICByb3dzPzogbnVtYmVyO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBpc1NpZ25hbDxUPih2OiBTaWduYWw8VD4gfCBUIHwgdW5kZWZpbmVkKTogdiBpcyBTaWduYWw8VD4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdiAmJiBcInBlZWtcIiBpbiAodiBhcyB1bmtub3duIGFzIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0SW5wdXQocHJvcHM6IFRleHRJbnB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB2YXJpYW50ID0gcHJvcHMudmFyaWFudCA/PyBcInNpbmdsZVwiO1xuICAvLyBBbHdheXMgY2FsbGVkIHNvIGhvb2sgb3JkZXIgaXMgc3RhYmxlOyBvbmx5IHVzZWQgd2hlbiBgZXJyb3JgIGlzIHNldC5cbiAgY29uc3QgZXJyb3JJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IGhhc0Vycm9yID0gcHJvcHMuZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5lcnJvciAhPT0gXCJcIjtcblxuICBjb25zdCBkZXNjcmliZWRCeSA9XG4gICAgW3Byb3BzLmRlc2NyaWJlZEJ5LCBoYXNFcnJvciA/IGVycm9ySWQgOiB1bmRlZmluZWRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYTExeSA9IGJ1aWxkSW5wdXRBMTF5KHtcbiAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgIGlkOiBwcm9wcy5pZCxcbiAgICByZXF1aXJlZDogcHJvcHMucmVxdWlyZWQsXG4gICAgLy8gQW4gZXJyb3IgbWVzc2FnZSBpbXBsaWVzIHRoZSBmaWVsZCBpcyBpbnZhbGlkLlxuICAgIGludmFsaWQ6IHByb3BzLmludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgZGVzY3JpYmVkQnksXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRyb2xsZWQgPSBpc1NpZ25hbChwcm9wcy52YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gY29udHJvbGxlZCA/IChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIFNpZ25hbDxzdHJpbmc+KS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gY29udHJvbGxlZFxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAoKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiKTtcblxuICBjb25zdCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiaW5wdXRcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wiaW5wdXRcIl07XG5cbiAgY29uc3Qgb25JbnB1dCA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBpZiAoY29udHJvbGxlZCkge1xuICAgICAgKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb250cm9sID1cbiAgICB2YXJpYW50ID09PSBcIm11bHRpXCIgPyAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgICAgY2xhc3M9e2NsYXNzTmFtZX1cbiAgICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgICBkYXRhLXBvbGx5LWlucHV0LXZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgIHJvd3M9e3Byb3BzLnJvd3N9XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9BdXRvZm9jdXM6IG9wdC1pbiBwcm9wIOKAlCBjYWxsZXIgcmVxdWVzdHMgYXV0b2ZvY3VzIGV4cGxpY2l0bHkgKGUuZy4gZm9ybSBvcGVucyB0byB0aGlzIGZpZWxkKS5cbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XG4gICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAvPlxuICAgICkgOiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cInNpbmdsZVwiXG4gICAgICAgIG1pbj17cHJvcHMubWlufVxuICAgICAgICBtYXg9e3Byb3BzLm1heH1cbiAgICAgICAgc3RlcD17cHJvcHMuc3RlcH1cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKTtcblxuICBpZiAoIWhhc0Vycm9yKSByZXR1cm4gY29udHJvbDtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgY2xhc3NOYW1lPXtjbGFzc2VzW1wiZmllbGRcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWVsZD5cbiAgICAgIHtjb250cm9sfVxuICAgICAgPHNwYW4gaWQ9e2Vycm9ySWR9IHJvbGU9XCJhbGVydFwiIGNsYXNzPXtjbGFzc2VzW1wiZXJyb3JcIl19PlxuICAgICAgICB7cHJvcHMuZXJyb3J9XG4gICAgICA8L3NwYW4+XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVG9hc3Qg4oCUIGNvbnN1bWVyLWZhY2luZyBzdXJmYWNlIGZvciB0aGUgZ2xvYmFsIGVycm9yU3RhdGUuXG4gKlxuICogUmVuZGVycyBldmVyeSBlbnRyeSBvZiB0aGUgYGVycm9yU3RhdGVgIHNpZ25hbCBpbnRvIGEgdmlld3BvcnQgbW91bnRlZFxuICogaW5zaWRlIE92ZXJsYXlSb290LiBgYXJpYS1saXZlYCBpcyBwb2xpdGUgZm9yIGluZm8vd2FybmluZyBhbmRcbiAqIGFzc2VydGl2ZSBmb3IgZXJyb3Igc2V2ZXJpdHkuIEVhY2ggaXRlbSBhdXRvLWRpc21pc3NlcyBhZnRlclxuICogYGF1dG9EaXNtaXNzTXNgIHVubGVzcyB0aGUgdXNlciBob3ZlcnMgdGhlIHZpZXdwb3J0LiBDbGlja2luZyBhXG4gKiB0b2FzdCBvciBpdHMgY2xvc2UgYnV0dG9uIHJlbW92ZXMgdGhhdCBzaW5nbGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGNsZWFyRXJyb3IsIHR5cGUgRXJyb3JFbnRyeSwgZXJyb3JTdGF0ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdFZpZXdwb3J0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzTXM/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZXdwb3J0KHByb3BzOiBUb2FzdFZpZXdwb3J0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBhdXRvRGlzbWlzc01zID0gcHJvcHMuYXV0b0Rpc21pc3NNcyA/PyA1MDAwO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcGF1c2VkLCBzZXRQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlbnRyaWVzID0gZXJyb3JTdGF0ZS52YWx1ZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGF1c2VkIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgaGVhZCA9IGVudHJpZXNbMF07XG4gICAgaWYgKCFoZWFkKSByZXR1cm47XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckVycm9yKGhlYWQuaWQpO1xuICAgIH0sIGF1dG9EaXNtaXNzTXMpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3BhdXNlZCwgZW50cmllcywgYXV0b0Rpc21pc3NNc10pO1xuXG4gIGlmICghcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8TGF5b3V0XG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc2VzW1widmlld3BvcnRcIl19ICR7cHJvcHMuY2xhc3NOYW1lID8/IFwiXCJ9YC50cmltKCl9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvYXN0LXZpZXdwb3J0XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFBhdXNlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0UGF1c2VkKGZhbHNlKX1cbiAgICA+XG4gICAgICB7ZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoXG4gICAgICAgIDxUb2FzdEl0ZW0ga2V5PXtlbnRyeS5pZH0gZW50cnk9e2VudHJ5fSAvPlxuICAgICAgKSl9XG4gICAgPC9MYXlvdXQ+XG4gICk7XG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIFRvYXN0SXRlbSh7IGVudHJ5IH06IHsgZW50cnk6IEVycm9yRW50cnkgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgbGl2ZW5lc3MgPSBlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhc3NlcnRpdmVcIiA6IFwicG9saXRlXCI7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiaXRlbVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3QtaXRlbVxuICAgICAgZGF0YS1zZXZlcml0eT17ZW50cnkuc2V2ZXJpdHl9XG4gICAgICByb2xlPXtlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhbGVydFwiIDogXCJzdGF0dXNcIn1cbiAgICAgIGFyaWEtbGl2ZT17bGl2ZW5lc3N9XG4gICAgPlxuICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWVzc2FnZVwiXX0+e2VudHJ5Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgIGRhdGEtcG9sbHktdG9hc3QtY2xvc2VcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbGVhckVycm9yKGVudHJ5LmlkKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiXG4gICAgICAgID5cbiAgICAgICAgICDDl1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvYXN0ID0geyBWaWV3cG9ydCB9O1xuIiwKICAgICIvKipcbiAqIFRvZ2dsZSDigJQgc3dpdGNoLXJvbGUgY2hlY2tib3guXG4gKlxuICogQSB2aXN1YWxseS1oaWRkZW4gPGlucHV0IHJvbGU9XCJzd2l0Y2hcIj4gcGFpcmVkIHdpdGggYSBzdHlsZWQgdHJhY2tcbiAqIGFuZCB0aHVtYiBpbnNpZGUgYSA8bGFiZWw+LiBQYXNzaXZlOiB0aGUgY2FsbGVyIGRyaXZlcyBgY2hlY2tlZGAgYW5kXG4gKiBoYW5kbGVzIHN0YXRlIGNoYW5nZXMgdmlhIHRoZSBhY3Rpb24gcmVnaXN0cnkgKHdyYXAgdGhlIFRvZ2dsZSBpbiBhXG4gKiA8bGFiZWwgZGF0YS1hY3Rpb249XCIuLi5cIj4gb3IgYmluZCBhIHBhcmVudCBmb3JtJ3Mgc3VibWl0KS4gYTExeVxuICogYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIG5hdGl2ZSBpbnB1dDsgdGhlIGxhYmVsIHdyYXBzIHNvIGNsaWNrc1xuICogYW55d2hlcmUgaW4gdGhlIGNvbnRyb2wgdG9nZ2xlIHRoZSBpbnB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvZ2dsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZVByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGUocHJvcHM6IFRvZ2dsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIG5hbWUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widG9nZ2xlXCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz1cImxhYmVsXCJcbiAgICAgIGlubGluZVxuICAgICAgY29sdW1ucz1cImF1dG8gYXV0b1wiXG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBjbGFzc05hbWU9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2dnbGVcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgYXJpYS1jaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImlucHV0XCJdfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9e2NoZWNrZWQgPyBgJHtjbGFzc2VzW1widHJhY2tcIl19ICR7Y2xhc3Nlc1tcInRyYWNrQ2hlY2tlZFwiXX1gIDogY2xhc3Nlc1tcInRyYWNrXCJdfT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0aHVtYlwiXX0gJHtjbGFzc2VzW1widGh1bWJDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widGh1bWJcIl19XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLy8gU3RhdGUgcHJpbWl0aXZlcyB3aXRoIG9wdGlvbmFsIHN5bmMgYW5kIHBlcnNpc3RlbmNlXG5cbmltcG9ydCB7IGVmZmVjdCwgdHlwZSBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUJ1cyB9IGZyb20gXCIuL21lc3NhZ2UtYnVzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlQWRhcHRlciwgdHlwZSBTdG9yYWdlQWRhcHRlciB9IGZyb20gXCIuL3N0b3JhZ2UtYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlU3luY0FkYXB0ZXIsIHR5cGUgU3luY0FkYXB0ZXIgfSBmcm9tIFwiLi9zeW5jLWFkYXB0ZXJcIjtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIHByb21pc2UgZm9yIGh5ZHJhdGlvbiBjb250cm9sXG4gKi9cbnR5cGUgU2lnbmFsV2l0aExvYWRlZDxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBhbmQgLnZlcmlmeSBwcm9wZXJ0aWVzIGZvciB2ZXJpZmljYXRpb24gdHJhY2tpbmdcbiAqL1xudHlwZSBTaWduYWxXaXRoVmVyaWZ5PFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeTogVCB9O1xuXG50eXBlIFN0YXRlRW50cnk8VD4gPSB7XG4gIHNpZ25hbDogU2lnbmFsPFQ+O1xuICBjbG9jazogbnVtYmVyOyAvLyBMYW1wb3J0IGNsb2NrIGZvciBjYXVzYWwgb3JkZXJpbmdcbiAgbG9hZGVkOiBQcm9taXNlPHZvaWQ+O1xuICB1cGRhdGluZzogYm9vbGVhbjtcbn07XG5cbnR5cGUgU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IHtcbiAgLy8gTGVnYWN5IE1lc3NhZ2VCdXMgc3VwcG9ydCAoZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIHYyLjApXG4gIGJ1cz86IE1lc3NhZ2VCdXM7XG5cbiAgLy8gTmV3IGFkYXB0ZXIgc3lzdGVtIChyZWNvbW1lbmRlZClcbiAgc3RvcmFnZT86IFN0b3JhZ2VBZGFwdGVyOyAvLyBDdXN0b20gc3RvcmFnZSBhZGFwdGVyXG4gIHN5bmM/OiBTeW5jQWRhcHRlcjsgLy8gQ3VzdG9tIHN5bmMgYWRhcHRlclxuXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgZGVib3VuY2VNcz86IG51bWJlcjsgLy8gRGVib3VuY2Ugc3RvcmFnZSB3cml0ZXNcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUOyAvLyBSdW50aW1lIHR5cGUgdmFsaWRhdGlvblxuICB2ZXJpZnk/OiBib29sZWFuOyAvLyBFbmFibGUgdmVyaWZpY2F0aW9uIHRyYWNraW5nIChjcmVhdGVzIHBsYWluIG9iamVjdCBtaXJyb3IpXG59O1xuXG5jb25zdCBzdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFN0YXRlRW50cnk8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogU2hhcmVkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBBTkQgcGVyc2lzdGVkIHRvIHN0b3JhZ2VcbiAqXG4gKiBVc2VzIExhbXBvcnQgY2xvY2sgZm9yIGNvbmZsaWN0IHJlc29sdXRpb24uIFN0YXRlIGlzIGF1dG9tYXRpY2FsbHk6XG4gKiAtIExvYWRlZCBmcm9tIGNocm9tZS5zdG9yYWdlIG9uIGluaXRpYWxpemF0aW9uXG4gKiAtIFN5bmNlZCB0byBvdGhlciBjb250ZXh0cyB2aWEgYnJvYWRjYXN0IG1lc3NhZ2VzXG4gKiAtIFBlcnNpc3RlZCB0byBjaHJvbWUuc3RvcmFnZSBvbiBldmVyeSBjaGFuZ2VcbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHMgKHVzZSBjb250ZW50IHNjcmlwdCBzdGF0ZSBpbnN0ZWFkKVxuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZSAoZS5nLiwgXCJhcHAtc2V0dGluZ3NcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlIGlmIG5vdGhpbmcgaXMgaW4gc3RvcmFnZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChidXMsIGRlYm91bmNlTXMpXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgdGhhdCBzdGF5cyBpbiBzeW5jIGFjcm9zcyBhbGwgY29udGV4dHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRGVmaW5lIG9uY2UsIHVzZSBldmVyeXdoZXJlXG4gKiBjb25zdCBzZXR0aW5ncyA9ICRzaGFyZWRTdGF0ZShcInNldHRpbmdzXCIsIHsgdGhlbWU6IFwiZGFya1wiIH0pXG4gKlxuICogLy8gQ2hhbmdlcyBhdXRvbWF0aWNhbGx5IHN5bmNcbiAqIHNldHRpbmdzLnZhbHVlID0geyB0aGVtZTogXCJsaWdodFwiIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNoYXJlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeT86IFQgfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIFN5bmNlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgYnV0IE5PVCBwZXJzaXN0ZWRcbiAqXG4gKiBTdGF0ZSBpcyBicm9hZGNhc3QgdG8gYWxsIGNvbnRleHRzIGluIHJlYWwtdGltZSBidXQgcmVzZXRzIG9uIGV4dGVuc2lvbiByZWxvYWQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgc3luY2VkIGFjcm9zcyBjb250ZXh0cyAoYnV0IG5vdCBwZXJzaXN0ZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFRlbXBvcmFyeSBzaGFyZWQgc3RhdGVcbiAqIGNvbnN0IGFjdGl2ZVRhYklkID0gJHN5bmNlZFN0YXRlKFwiYWN0aXZlLXRhYlwiLCBudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3luY2VkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4ge1xuICByZXR1cm4gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogZmFsc2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBzdGF0ZTogcGVyc2lzdGVkIHRvIHN0b3JhZ2UgYnV0IE5PVCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzXG4gKlxuICogRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0YXRlLCBwZXJzaXN0ZWQgaW5kZXBlbmRlbnRseS5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgKHVzZSBwcmVmaXggbGlrZSBcInBvcHVwOnN0YXRlXCIgdG8gYXZvaWQgY29sbGlzaW9ucylcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBwZXJzaXN0ZWQgdG8gc3RvcmFnZSAoYnV0IG5vdCBzeW5jZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBwZXJzaXN0ZWQgc3RhdGVcbiAqIGNvbnN0IHBvcHVwU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJwb3B1cDpsYXN0LXBhbmVsXCIsIFwiaG9tZVwiKVxuICogY29uc3QgZGV2dG9vbHNTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcImRldnRvb2xzOmV4cGFuZGVkXCIsIHRydWUpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRwZXJzaXN0ZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogZmFsc2UsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogTG9jYWwgc3RhdGU6IG5vdCBzeW5jZWQsIG5vdCBwZXJzaXN0ZWQgKGxpa2UgcmVndWxhciBQcmVhY3Qgc2lnbmFsKVxuICpcbiAqIFNpbXBsZSByZWFjdGl2ZSBzdGF0ZSB0aGF0IGxpdmVzIG9ubHkgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cbiAqIFJlc2V0cyBvbiByZWxvYWQgb3IgY29udGV4dCByZXN0YXJ0LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYWxsIGNvbnRleHRzIChpbmNsdWRpbmcgcGFnZSBzY3JpcHRzKVxuICpcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgKGxvY2FsIG9ubHkpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIExvY2FsIFVJIHN0YXRlXG4gKiBjb25zdCBpc0xvYWRpbmcgPSAkc3RhdGUoZmFsc2UpXG4gKiBjb25zdCBlcnJvciA9ICRzdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3RhdGU8VD4oaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIHNpZ25hbChpbml0aWFsVmFsdWUpO1xufVxuXG4vKiogU2VydmVyLXNpZGUgYXV0aG9yaXRhdGl2ZSBzdGF0ZSwga2V5ZWQgZm9yIHN0YWJsZSBpZGVudGl0eSBhY3Jvc3MgdGhlXG4gKiAgcHJvY2Vzcy4gVW5saWtlIHRoZSBicm93c2VyIHByaW1pdGl2ZXMgaXQgZG9lcyBOT1Qgc3luYyBhY3Jvc3MgY29udGV4dHMgb3JcbiAqICBwZXJzaXN0IHRvIGNocm9tZS5zdG9yYWdlIOKAlCB0aGUgc2VydmVyIGhvbGRzIHRoZSBjYW5vbmljYWwgcmVwbGljYSBhbmQgaXNcbiAqICB0aGUgYWx3YXlzLW9uIHBlZXI7IGNvbm5lY3RlZCBjbGllbnRzIHJlY2VpdmUgZGVyaXZlZCB1cGRhdGVzIHRocm91Z2ggdGhlXG4gKiAgRWx5c2lhIGBwb2xseSgpYCBwbHVnaW4ncyBlZmZlY3QvYnJvYWRjYXN0IGxheWVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhpc1xuICogIHNpZ25hbCBkaXJlY3RseS4gVXNlZCBpbnNpZGUgYHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IC4uLiB9IH0gfSlgIGFuZFxuICogIHJlYWQgb24gdGhlIHJlcXVlc3QgY29udGV4dCBhcyBgcG9sbHlTdGF0ZS5zZXJ2ZXIuPGtleT4udmFsdWVgLiAqL1xuY29uc3Qgc2VydmVyU3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogUmVhY3RpdmUgc2VydmVyLW9ubHkgc3RhdGUuIFRoZSBmaXJzdCBjYWxsIGZvciBhIGBrZXlgIGNyZWF0ZXMgdGhlIHNpZ25hbDtcbiAqIGxhdGVyIGNhbGxzIHdpdGggdGhlIHNhbWUgYGtleWAgcmV0dXJuIHRoYXQgc2FtZSBzaWduYWwsIHNvIGEgbW9kdWxlIHRoYXRcbiAqIGRlY2xhcmVzIGl0cyBzZXJ2ZXIgc3RhdGUgb25jZSBnZXRzIGEgc3RhYmxlIHJlZmVyZW5jZSBldmVyeXdoZXJlIGl0IGlzXG4gKiByZWFkLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBzZXJ2ZXIgc3RhdGUgKGUuZy4gXCJkYlwiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIFZhbHVlIGhlbGQgdW50aWwgdGhlIHNlcnZlciBtdXRhdGVzIGl0XG4gKiBAcmV0dXJucyBBIHJlYWN0aXZlIHNpZ25hbCBob2xkaW5nIHRoZSBhdXRob3JpdGF0aXZlIHNlcnZlciB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyAkc2VydmVyU3RhdGUgfSBmcm9tIFwiQGZhaXJmb3gvcG9sbHlcIjtcbiAqXG4gKiBjb25zdCBkYiA9IHsgdG9kb3M6IHNpZ25hbChbXSksIG5leHRJZDogMSB9O1xuICogcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgZGI6ICRzZXJ2ZXJTdGF0ZShcImRiXCIsIGRiKSB9IH0gfSk7XG4gKiAvLyBpbiBhIGhhbmRsZXI6IGN0eC5wb2xseVN0YXRlLnNlcnZlci5kYi52YWx1ZS50b2Rvcy52YWx1ZSA9IFsuLi5dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzZXJ2ZXJTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICAvLyBUaGUgcmVnaXN0cnkgZXJhc2VzIFQgKGl0IHN0b3JlcyBTaWduYWw8dW5rbm93bj4pOyB0aGUga2V5IGlzIHRoZVxuICAvLyBjYWxsZXIncyBjb250cmFjdCB0aGF0IHRoZSBzdG9yZWQgc2lnbmFsIGNhcnJpZXMgdGhlaXIgVC5cbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3RpbmcgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuICBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LnNldChrZXksIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbnR5cGUgSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0gU3RhdGVPcHRpb25zPFQ+ICYge1xuICBlbmFibGVTeW5jOiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBzeW5jIChhdm9pZCBjb2xsaXNpb24gd2l0aCBzeW5jPzogU3luY0FkYXB0ZXIpXG4gIGVuYWJsZVBlcnNpc3Q6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHBlcnNpc3RlbmNlXG59O1xuXG4vLyBEZWVwIGVxdWFsaXR5IGNoZWNrIHRvIHByZXZlbnQgcmVkdW5kYW50IHVwZGF0ZXNcbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICAhZGVlcEVxdWFsKFxuICAgICAgICAoYSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLFxuICAgICAgICAoYiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzdG9yYWdlIGFuZCBzeW5jIGFkYXB0ZXJzIHdpdGggdGhyZWUtdGllciBwcmlvcml0eTpcbiAqIDEuIEV4cGxpY2l0IGFkYXB0ZXJzIGZyb20gb3B0aW9ucyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqIDIuIE1lc3NhZ2VCdXMgYWRhcHRlcnMgKGxlZ2FjeSwgZGVwcmVjYXRlZClcbiAqIDMuIEF1dG8tZGV0ZWN0ZWQgYWRhcHRlcnMgKGRlZmF1bHQgYmVoYXZpb3IpXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGFwdGVycyhvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9ucyk6IHtcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIgfCBudWxsO1xuICBzeW5jOiBTeW5jQWRhcHRlciB8IG51bGw7XG59IHtcbiAgLy8gUHJpb3JpdHkgMTogRXhwbGljaXQgYWRhcHRlcnMgKHBhcnRpYWwgb3IgZnVsbClcbiAgaWYgKG9wdGlvbnMuc3RvcmFnZSB8fCBvcHRpb25zLnN5bmMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5zdG9yYWdlIHx8IChvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCksXG4gICAgICBzeW5jOiBvcHRpb25zLnN5bmMgfHwgKG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMjogTWVzc2FnZUJ1cyAobGVnYWN5IHN1cHBvcnQpXG4gIC8vIE1lc3NhZ2VCdXMgZG9lc24ndCBwcm92aWRlIHN5bmMgYWRhcHRlciwgb25seSBDaHJvbWUgc3RvcmFnZVxuICBpZiAob3B0aW9ucy5idXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5idXMuYWRhcHRlcnMuc3RvcmFnZSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAzOiBBdXRvLWRldGVjdCBiYXNlZCBvbiBlbmFibGVTeW5jIGFuZCBlbmFibGVQZXJzaXN0IGZsYWdzXG4gIHJldHVybiB7XG4gICAgc3RvcmFnZTogb3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwsXG4gICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQsIG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zPFQ+KTogU2lnbmFsPFQ+IHtcbiAgLy8gUmV0dXJuIGV4aXN0aW5nIHNpZ25hbCBpZiBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgaWYgKHN0YXRlUmVnaXN0cnkuaGFzKGtleSkpIHtcbiAgICByZXR1cm4gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICB9XG5cbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG5cbiAgLy8gQ3JlYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgcmVxdWVzdGVkXG4gIGlmIChvcHRpb25zLnZlcmlmeSkge1xuICAgIC8vIENyZWF0ZSBwbGFpbiBvYmplY3QgbWlycm9yIGZvciB2ZXJpZmljYXRpb25cbiAgICBjb25zdCBtaXJyb3IgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGluaXRpYWxWYWx1ZSkpIGFzIHVua25vd24gYXMgVDtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPikudmVyaWZ5ID0gbWlycm9yO1xuICB9XG5cbiAgY29uc3QgZW50cnk6IFN0YXRlRW50cnk8VD4gPSB7XG4gICAgc2lnbmFsOiBzaWcsXG4gICAgY2xvY2s6IDAsXG4gICAgbG9hZGVkOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICB1cGRhdGluZzogZmFsc2UsXG4gIH07XG5cbiAgLy8gUmVzb2x2ZSBhZGFwdGVycyAoZXhwbGljaXQsIE1lc3NhZ2VCdXMsIG9yIGF1dG8tZGV0ZWN0KVxuICBjb25zdCBhZGFwdGVycyA9IHJlc29sdmVBZGFwdGVycyhvcHRpb25zKTtcblxuICAvLyBMb2FkIGZyb20gc3RvcmFnZSBpZiBwZXJzaXN0IGlzIGVuYWJsZWRcbiAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgZW50cnkubG9hZGVkID0gbG9hZEZyb21TdG9yYWdlKGtleSwgc2lnLCBlbnRyeSwgYWRhcHRlcnMuc3RvcmFnZSwgb3B0aW9ucy52YWxpZGF0b3IpO1xuICB9XG5cbiAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgaW5pdGlhbCBsb2FkXG4gIGVudHJ5LmxvYWRlZC50aGVuKCgpID0+IHtcbiAgICBsZXQgZGVib3VuY2VUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZSA9IHNpZy52YWx1ZTtcbiAgICBsZXQgaXNGaXJzdFJ1biA9IHRydWU7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogU3luYyBlZmZlY3QgcmVxdWlyZXMgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHN0YXRlIGNoYW5nZSBzY2VuYXJpb3NcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVhZCB0aGUgc2lnbmFsIEZJUlNULCBiZWZvcmUgYW55IGVhcmx5IHJldHVybiBjYW4gaGFwcGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWFjdCByZS1jb2xsZWN0cyBhbiBlZmZlY3QncyBkZXBlbmRlbmNpZXMgb24gZXZlcnkgcnVuLCBzbyBhIHJ1biB0aGF0XG4gICAgICAvLyByZXR1cm5zIHdpdGhvdXQgdG91Y2hpbmcgYHNpZy52YWx1ZWAgdW5zdWJzY3JpYmVzIHRoZSBlZmZlY3QgZm9yIGdvb2QuXG4gICAgICAvLyBUaGUgcnVuIGFuIGluY29taW5nIHN5bmMgbWVzc2FnZSB0cmlnZ2VycyBpcyBleGFjdGx5IHN1Y2ggYSBydW4uXG4gICAgICBjb25zdCB2YWx1ZSA9IHNpZy52YWx1ZTtcblxuICAgICAgLy8gU2tpcCBmaXJzdCBydW4gKGVmZmVjdCBmaXJlcyBpbW1lZGlhdGVseSBvbiByZWdpc3RyYXRpb24pXG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpc0ZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gaW5jb21pbmcgbWVzc2FnZSBpcyBiZWluZyBhcHBsaWVkLiBBZG9wdCBpdCBhcyB0aGUgYmFzZWxpbmUg4oCUIHRoaXNcbiAgICAgIC8vIGNvbnRleHQgbm93IGhvbGRzIGl0LCBzbyB0aGUgbmV4dCBsb2NhbCBjaGFuZ2UgaXMgYSBjaGFuZ2UgYWdhaW5zdCBpdCDigJRcbiAgICAgIC8vIGFuZCBkbyBub3QgYnJvYWRjYXN0LCB3aGljaCB3b3VsZCBlY2hvIGl0IGJhY2sgdG8gdGhlIHNlbmRlci5cbiAgICAgIGlmIChlbnRyeS51cGRhdGluZykge1xuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIGlmIChkZWVwRXF1YWwodmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiBlbmFibGVkXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5U2lnbmFsID0gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPjtcbiAgICAgICAgaWYgKHZlcmlmeVNpZ25hbC52ZXJpZnkpIHtcbiAgICAgICAgICAvLyBub3NlbWdyZXA6IGphdmFzY3JpcHQubGFuZy5zZWN1cml0eS5pbnNlY3VyZS1vYmplY3QtYXNzaWduLmluc2VjdXJlLW9iamVjdC1hc3NpZ24g4oCUIGludGVybmFsIG1pcnJvcjsgdmFsdWUgaXMgYSBkZWVwIEpTT04gY2xvbmUsIG5vdCBhcmJpdHJhcnkgZXh0ZXJuYWwgaW5wdXQuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih2ZXJpZnlTaWduYWwudmVyaWZ5LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBjbG9jayBtb25vdG9uaWNhbGx5XG4gICAgICBlbnRyeS5jbG9jaysrO1xuXG4gICAgICBjb25zdCBkb1VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgLy8gUGVyc2lzdCB0byBzdG9yYWdlXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgZW50cnkuY2xvY2ssIGFkYXB0ZXJzLnN0b3JhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG90aGVyIGNvbnRleHRzXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVN5bmMgJiYgYWRhcHRlcnMuc3luYykge1xuICAgICAgICAgIGJyb2FkY2FzdFVwZGF0ZShrZXksIHZhbHVlLCBlbnRyeS5jbG9jaywgYWRhcHRlcnMuc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIERlYm91bmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMuZGVib3VuY2VNcykge1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChkb1VwZGF0ZSwgb3B0aW9ucy5kZWJvdW5jZU1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgdXBkYXRlcyBmcm9tIG90aGVyIGNvbnRleHRzIChvbmx5IGlmIHN5bmMgZW5hYmxlZClcbiAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgLy8gQ29ubmVjdCBpZiBuZWVkZWQgKHNvbWUgYWRhcHRlcnMgcmVxdWlyZSBleHBsaWNpdCBjb25uZWN0aW9uKVxuICAgIGlmIChhZGFwdGVycy5zeW5jLmNvbm5lY3QpIHtcbiAgICAgIGFkYXB0ZXJzLnN5bmMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHN5bmMgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGFkYXB0ZXJzLnN5bmMub25NZXNzYWdlPFQ+KChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5rZXkgIT09IGtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvbGRDbG9jayA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICAvLyBMYW1wb3J0IGNsb2NrIHJ1bGU6IEFsd2F5cyB1cGRhdGUgdG8gbWF4KGxvY2FsLCByZWNlaXZlZClcbiAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIGNhdXNhbCBvcmRlcmluZyBldmVuIHdoZW4gcmVqZWN0aW5nIHVwZGF0ZXNcbiAgICAgIGVudHJ5LmNsb2NrID0gTWF0aC5tYXgoZW50cnkuY2xvY2ssIG1lc3NhZ2UuY2xvY2spO1xuXG4gICAgICAvLyBPbmx5IGFjY2VwdCB2YWx1ZSB1cGRhdGVzIGlmIHJlY2VpdmVkIGNsb2NrIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBvbGQgbG9jYWwgY2xvY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IGFwcGx5IGNhdXNhbGx5IG5ld2VyIHVwZGF0ZXNcbiAgICAgIGlmIChtZXNzYWdlLmNsb2NrID4gb2xkQ2xvY2spIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5jb21pbmcgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRvciAmJiAhb3B0aW9ucy52YWxpZGF0b3IobWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBSZWNlaXZlZCBpbnZhbGlkIHZhbHVlIGZyb20gc3luYyAoY2xvY2s6ICR7bWVzc2FnZS5jbG9ja30pYCxcbiAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgcmVkdW5kYW50IHVwZGF0ZXMgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICAgIGlmIChkZWVwRXF1YWwoZW50cnkuc2lnbmFsLnZhbHVlLCBtZXNzYWdlLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5VXBkYXRlKGVudHJ5LCBtZXNzYWdlLnZhbHVlIGFzIHVua25vd24gYXMgVCwgbWVzc2FnZS5jbG9jayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0ZVJlZ2lzdHJ5LnNldChrZXksIGVudHJ5IGFzIHVua25vd24gYXMgU3RhdGVFbnRyeTx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIEJhY2tmaWxsIGtleXMgYWRkZWQgdG8gdGhlIHN0YXRlIHNoYXBlIHNpbmNlIGEgdmFsdWUgd2FzIHBlcnNpc3RlZC5cbiAqXG4gKiBTdG9yZWQgcGxhaW4gb2JqZWN0cyBhcmUgc2hhbGxvdy1tZXJnZWQgb3ZlciB0aGUgY3VycmVudCBkZWZhdWx0cyBzbyB0aGF0IGFcbiAqIGZpZWxkIGFkZGVkIGluIGEgbGF0ZXIgcmVsZWFzZSByZWh5ZHJhdGVzIHRvIGl0cyBkZWZhdWx0IHJhdGhlciB0aGFuXG4gKiBgdW5kZWZpbmVkYC4gUHJpbWl0aXZlcyBhbmQgYXJyYXlzIGFyZSByZXBsYWNlZCB3aG9sZXNhbGUg4oCUIG1lcmdpbmcgdGhvc2VcbiAqIHdvdWxkIGNvcnJ1cHQgdGhlbS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlV2l0aERlZmF1bHRzPFQ+KGRlZmF1bHRzOiBULCBzdG9yZWQ6IHVua25vd24pOiBUIHtcbiAgLy8gUGVyc2lzdGVkIHZhbHVlcyBhcmUgdHJ1c3RlZCB0byBiZSB0aGUgVCB0aGlzIGtleSB3YXMgcmVnaXN0ZXJlZCB3aXRoO1xuICAvLyBzY2hlbWEgZHJpZnQgaXMgaGFuZGxlZCBieSB0aGUgbWVyZ2UsIG5vdCBieSBydW50aW1lIHZhbGlkYXRpb24uXG4gIGlmIChpc1BsYWluT2JqZWN0KGRlZmF1bHRzKSAmJiBpc1BsYWluT2JqZWN0KHN0b3JlZCkpIHtcbiAgICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4uc3RvcmVkIH0gYXMgdW5rbm93biBhcyBUO1xuICB9XG4gIHJldHVybiBzdG9yZWQgYXMgdW5rbm93biBhcyBUO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRnJvbVN0b3JhZ2U8VD4oXG4gIGtleTogc3RyaW5nLFxuICBzaWc6IFNpZ25hbDxUPixcbiAgZW50cnk6IFN0YXRlRW50cnk8VD4sXG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyLFxuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFRcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UuZ2V0KFtrZXksIGAke2tleX06Y2xvY2tgXSk7XG5cbiAgICBpZiAocmVzdWx0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2lnIHN0aWxsIGhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIGhlcmUsIHNvIGl0IGlzIHRoZSBkZWZhdWx0IGJhc2VcbiAgICAgIC8vIGZvciBiYWNrZmlsbGluZyBrZXlzIHRoZSBwZXJzaXN0ZWQgYmxvYiBwcmVkYXRlcy5cbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gcmVjb25jaWxlV2l0aERlZmF1bHRzKHNpZy5wZWVrKCksIHJlc3VsdFtrZXldKTtcblxuICAgICAgLy8gVmFsaWRhdGUgc3RvcmVkIHZhbHVlIGlmIHZhbGlkYXRvciBwcm92aWRlZFxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBpZiAodmFsaWRhdG9yKHN0b3JlZFZhbHVlKSkge1xuICAgICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFN0b3JlZCB2YWx1ZSBmYWlsZWQgdmFsaWRhdGlvbiwgdXNpbmcgaW5pdGlhbCB2YWx1ZWAsXG4gICAgICAgICAgICBzdG9yZWRWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0W2Ake2tleX06Y2xvY2tgXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRyeS5jbG9jayA9IHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gbG9hZCBzdGF0ZSBmcm9tIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJzaXN0VG9TdG9yYWdlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlLnNldCh7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgICBbYCR7a2V5fTpjbG9ja2BdOiBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIHBlcnNpc3Qgc3RhdGUgdG8gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJyb2FkY2FzdFVwZGF0ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN5bmM6IFN5bmNBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3luYy5icm9hZGNhc3Qoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGJyb2FkY2FzdCBzdGF0ZSB1cGRhdGU6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVVwZGF0ZTxUPihlbnRyeTogU3RhdGVFbnRyeTxUPiwgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIpOiB2b2lkIHtcbiAgZW50cnkudXBkYXRpbmcgPSB0cnVlO1xuICBlbnRyeS5zaWduYWwudmFsdWUgPSB2YWx1ZTtcbiAgZW50cnkuY2xvY2sgPSBjbG9jaztcbiAgZW50cnkudXBkYXRpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgc3RhdGUgYnkga2V5ICh1c2VmdWwgZm9yIHJldHJpZXZpbmcgc3RhdGUgd2l0aG91dCByZS1jcmVhdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRlQnlLZXk8VD4oa2V5OiBzdHJpbmcpOiBTaWduYWw8VD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIHJldHVybiBlbnRyeT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENsZWFyIHN0YXRlIHJlZ2lzdHJ5ICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclN0YXRlUmVnaXN0cnkoKTogdm9pZCB7XG4gIHN0YXRlUmVnaXN0cnkuY2xlYXIoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdGF0ZSBvd25lZCBieSB0aGUgY29tcG9uZW50IGdhbGxlcnkuXG4gKlxuICogVGhlIGdhbGxlcnkgaXMgYSBzdGFuZGFsb25lIGRldiBzdXJmYWNlIHdpdGggbm8gc2VydmVyIHN0YXRlLCBzbyB0aGVzZVxuICogc2lnbmFscyBzdGF5IG1vZHVsZS1sb2NhbCDigJQgdGhleSBuZXZlciBqb2luIGEgc3luY2VkIHN0b3JlIGJ1bmRsZS4gQWN0aW9uXG4gKiBoYW5kbGVycyAoYWN0aW9ucy50cykgcmVhY2ggdGhlbSBieSBpbXBvcnQsIHRoZSB3YXkgZWFsJ3Mgc2hvd2Nhc2UgZG9lcy5cbiAqIGByZXNldEdhbGxlcnlTdG9yZXMoKWAgZXhpc3RzIHNvIHRoZSBicm93c2VyL3Zpc3VhbCB0ZXN0IGNhbiBpc29sYXRlIHJ1bnMuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRm9ybSwgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7ICRzdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9zdGF0ZS50c1wiO1xuXG5leHBvcnQgdHlwZSBHYWxsZXJ5VGhlbWUgPSBcInN5c3RlbVwiIHwgXCJsaWdodFwiIHwgXCJkYXJrXCI7XG5cbi8qKiBUaGUgZ2FsbGVyeSdzIEFjdGlvbkZvcm0gYmluZHMgdG8gYW4gZW1wdHkgYnVuZGxlIOKAlCBubyBzdG9yZSBpcyB0b3VjaGVkLiAqL1xuZXhwb3J0IHR5cGUgR2FsbGVyeVN0b3JlcyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqIFRoZW1lIG92ZXJyaWRlLCBhcHBsaWVkIHRvIHRoZSBwYW5lbCBhcyBgZGF0YS1wb2xseS10aGVtZWAuIGBzeXN0ZW1gIG9taXRzXG4gKiAgdGhlIGF0dHJpYnV0ZSBhbmQgbGV0cyBgcHJlZmVycy1jb2xvci1zY2hlbWVgIGRlY2lkZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRoZW1lID0gJHN0YXRlPEdhbGxlcnlUaGVtZT4oXCJzeXN0ZW1cIik7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxNb2RhbD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlNb2RhbE9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8RHJvcGRvd24+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RHJvcGRvd25PcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0U2luZ2xlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgbXVsdGktc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0TXVsdGkgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBjbGVhcmFibGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gU3RhcnRzIGVtcHR5XG4gKiAgc28gdGhlIFwiQW55IOKAplwiIGNsZWFyIG9wdGlvbiBpcyB0aGUgYWN0aXZlIHJvdy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBsb25nLWxhYmVsIDxTZWxlY3Q+IHNwZWNpbWVuIChwb2xseSMxODApLiBUaGUgbGFiZWwgaXNcbiAqICB3aWRlciB0aGFuIGAtLXBvbGx5LWNvbnRyb2wtbWF4LXdpZHRoYCwgc28gdGhlIHRyaWdnZXIgbXVzdCB0cnVuY2F0ZSBpdFxuICogIHJhdGhlciB0aGFuIHdyYXAgdGhlIGNhcmV0IG9udG8gYSBzZWNvbmQgbGluZS4gRXZlcnkgc2hvcnQtbGFiZWwgc3BlY2ltZW5cbiAqICBwYXNzZWQgdGhyb3VnaG91dCB0aGF0IHJlZ3Jlc3Npb24uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RMb25nID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImxvbmdcIl0pKTtcbi8qKiBUaGUgbGl2ZSwgc2lnbmFsLWJvdW5kIDxDaGVja2JveD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDaGVja2VkID0gJHN0YXRlPGJvb2xlYW4+KHRydWUpO1xuLyoqIFRoZSBjb250cm9sbGVkIDxUZXh0SW5wdXQ+IHNwZWNpbWVuIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGV4dCA9ICRzdGF0ZTxzdHJpbmc+KFwiQ29udHJvbGxlZCB2YWx1ZVwiKTtcbi8qKiBMYXN0IHZhbHVlIGNvbW1pdHRlZCBieSB0aGUgPEFjdGlvbklucHV0PiAvIDxBY3Rpb25TZWxlY3Q+IHNwZWNpbWVucy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNvbW1pdHRlZCA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuLyoqIEFjdGl2ZSB0YWIgaWQgZm9yIHRoZSA8VGFicz4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUYWIgPSAkc3RhdGU8c3RyaW5nPihcIm92ZXJ2aWV3XCIpO1xuLyoqIE5hbWUgb2YgdGhlIGxhc3QgZmlsZSBwaWNrZWQgYnkgdGhlIDxGaWxlSW5wdXQ+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RmlsZU5hbWUgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcblxuLyoqXG4gKiBUaGUgZm9ybSBiZWhpbmQgdGhlIDxBY3Rpb25Gb3JtPiBzcGVjaW1lbi4gYGNyZWF0ZUZvcm1gIHJlcXVpcmVzIGBiaW5kU3RvcmVzYFxuICogYmVmb3JlIGEgc3VibWl0IGNhbiBydW47IGNsaWVudC50c3ggYmluZHMgaXQgdG8gdGhlIGVtcHR5IGdhbGxlcnkgYnVuZGxlIGF0XG4gKiBib290LiBJdHMgYC5hY3Rpb25zYCBhcmUgc3ByZWFkIGludG8gdGhlIHJlZ2lzdHJ5IChzZWUgYWN0aW9ucy50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBnYWxsZXJ5Rm9ybSA9IGNyZWF0ZUZvcm08eyBmdWxsTmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH0sIEdhbGxlcnlTdG9yZXM+KHtcbiAgbmFtZTogXCJnYWxsZXJ5LWZvcm1cIixcbiAgaW5pdGlhbFZhbHVlczogeyBmdWxsTmFtZTogXCJcIiwgZW1haWw6IFwiXCIgfSxcbiAgb25TdWJtaXQ6ICh7IHZhbHVlcyB9KSA9PiB7XG4gICAgc2V0RXJyb3IoXG4gICAgICBgQWN0aW9uRm9ybSBzdWJtaXR0ZWQg4oCUIG5hbWUgXCIke3ZhbHVlcy5mdWxsTmFtZSB8fCBcIihlbXB0eSlcIn1cIiwgYCArXG4gICAgICAgIGBlbWFpbCBcIiR7dmFsdWVzLmVtYWlsIHx8IFwiKGVtcHR5KVwifVwiLmAsXG4gICAgICB7IHNldmVyaXR5OiBcImluZm9cIiB9XG4gICAgKTtcbiAgfSxcbn0pO1xuXG4vKiogUmVzZXQgZXZlcnkgZ2FsbGVyeSBzaWduYWwgdG8gaXRzIGluaXRpYWwgdmFsdWUg4oCUIGZvciB0ZXN0IGlzb2xhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEdhbGxlcnlTdG9yZXMoKTogdm9pZCB7XG4gICRnYWxsZXJ5VGhlbWUudmFsdWUgPSBcInN5c3RlbVwiO1xuICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeURyb3Bkb3duT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdE11bHRpLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLnZhbHVlID0gbmV3IFNldCgpO1xuICAkZ2FsbGVyeVNlbGVjdExvbmcudmFsdWUgPSBuZXcgU2V0KFtcImxvbmdcIl0pO1xuICAkZ2FsbGVyeUNoZWNrZWQudmFsdWUgPSB0cnVlO1xuICAkZ2FsbGVyeVRleHQudmFsdWUgPSBcIkNvbnRyb2xsZWQgdmFsdWVcIjtcbiAgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSBcIuKAlFwiO1xuICAkZ2FsbGVyeVRhYi52YWx1ZSA9IFwib3ZlcnZpZXdcIjtcbiAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IFwi4oCUXCI7XG4gIGdhbGxlcnlGb3JtLmNsb3NlKCk7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9ucyBmb3IgdGhlIGdhbGxlcnkncyBpbnRlcmFjdGl2ZSBzcGVjaW1lbnMuIEV2ZXJ5IGhhbmRsZXIgZHJpdmVzIGFcbiAqIG1vZHVsZS1sb2NhbCBzaWduYWwgKHN0b3Jlcy50cykgb3IgYSBwb2xseSBvdmVybGF5IHByaW1pdGl2ZSDigJQgbm9uZSB0b3VjaGVzIGFcbiAqIHN0b3JlIGJ1bmRsZSwgc28gdGhlIGdhbGxlcnkgc3RheXMgYSBzZWxmLWNvbnRhaW5lZCBkZXYgc3VyZmFjZS4gU3ByZWFkaW5nXG4gKiBgZ2FsbGVyeUZvcm0uYWN0aW9uc2AgYWRkcyB0aGUgYXV0by1yZWdpc3RlcmVkIGBnYWxsZXJ5LWZvcm06e29wZW4sY2xvc2UsXG4gKiBzdWJtaXR9YCBoYW5kbGVycy4gY2xpZW50LnRzeCB3aXJlcyB0aGlzIHJlZ2lzdHJ5IGludG8gdGhlIGRvY3VtZW50IHZpYVxuICogYGluc3RhbGxFdmVudERlbGVnYXRpb25gLCBleGFjdGx5IGFzIGEgcmVhbCBjb25zdW1lciBhcHAgd291bGQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSwgRXJyb3JTZXZlcml0eSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRoZW1lLFxuICB0eXBlIEdhbGxlcnlTdG9yZXMsXG4gIHR5cGUgR2FsbGVyeVRoZW1lLFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbmNvbnN0IFRIRU1FUzogcmVhZG9ubHkgR2FsbGVyeVRoZW1lW10gPSBbXCJzeXN0ZW1cIiwgXCJsaWdodFwiLCBcImRhcmtcIl07XG5jb25zdCBTRVZFUklUSUVTOiByZWFkb25seSBFcnJvclNldmVyaXR5W10gPSBbXCJpbmZvXCIsIFwid2FybmluZ1wiLCBcImVycm9yXCJdO1xuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9BQ1RJT05TOiBBY3Rpb25SZWdpc3RyeTxHYWxsZXJ5U3RvcmVzPiA9IHtcbiAgLi4uZ2FsbGVyeUZvcm0uYWN0aW9ucyxcblxuICBcImdhbGxlcnk6c2V0LXRoZW1lXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gZGF0YVtcInRoZW1lXCJdO1xuICAgIGlmICh0aGVtZSA9PT0gXCJzeXN0ZW1cIiB8fCB0aGVtZSA9PT0gXCJsaWdodFwiIHx8IHRoZW1lID09PSBcImRhcmtcIikge1xuICAgICAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IHRoZW1lO1xuICAgIH1cbiAgfSxcblxuICBcImdhbGxlcnk6c2V0LXRhYlwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBpZCA9IGRhdGFbXCJpZFwiXTtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeVRhYi52YWx1ZSA9IGlkO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTptb2RhbC1vcGVuXCI6ICgpID0+IHtcbiAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IHRydWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbW1pdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFbXCJ2YWx1ZVwiXTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IHZhbHVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTp0b2FzdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBzZXZlcml0eSA9IFNFVkVSSVRJRVMuZmluZCgocykgPT4gcyA9PT0gZGF0YVtcInNldmVyaXR5XCJdKSA/PyBcImluZm9cIjtcbiAgICBzZXRFcnJvcihgVGhpcyBpcyBhICR7c2V2ZXJpdHl9IHRvYXN0IOKAlCBjbGljayBpdCBvciB3YWl0IGZvciBpdCB0byBkaXNtaXNzLmAsIHtcbiAgICAgIHNldmVyaXR5LFxuICAgIH0pO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb25maXJtXCI6IGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGRhbmdlciA9IGRhdGFbXCJkYW5nZXJcIl0gPT09IFwidHJ1ZVwiO1xuICAgIGNvbnN0IG9rID0gYXdhaXQgY29uZmlybSh7XG4gICAgICB0aXRsZTogZGFuZ2VyID8gXCJEZWxldGUgdGhpcyBpdGVtP1wiIDogXCJTYXZlIHlvdXIgY2hhbmdlcz9cIixcbiAgICAgIGJvZHk6IGRhbmdlclxuICAgICAgICA/IFwiVGhpcyBjYW5ub3QgYmUgdW5kb25lLiBUaGUgaXRlbSB3aWxsIGJlIHBlcm1hbmVudGx5IHJlbW92ZWQuXCJcbiAgICAgICAgOiBcIllvdXIgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXCIsXG4gICAgICBkYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IGRhbmdlciA/IFwiRGVsZXRlXCIgOiBcIlNhdmVcIixcbiAgICB9KTtcbiAgICBzZXRFcnJvcihgQ29uZmlybURpYWxvZyByZXNvbHZlZCAke1N0cmluZyhvayl9LmAsIHsgc2V2ZXJpdHk6IG9rID8gXCJpbmZvXCIgOiBcIndhcm5pbmdcIiB9KTtcbiAgfSxcbn07XG5cbi8qKiBUaGUgdGhlbWUgY3ljbGUsIGV4cG9zZWQgc28gdGhlIHBhbmVsIGNhbiByZW5kZXIgb25lIGJ1dHRvbiBwZXIgb3B0aW9uLiAqL1xuZXhwb3J0IHsgVEhFTUVTIH07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgY2F0YWxvZ3VlIOKAlCBvbmUgc2VjdGlvbiBwZXIgcG9sbHktdWkgcHJpbWl0aXZlLCBlYWNoIHJlbmRlcmluZ1xuICogdGhlIGNvbmZpZ3VyYXRpb25zIHdvcnRoIHNlZWluZy4gQWRhcHRlZCBmcm9tIGVhbCdzIHNob3djYXNlICh3aGljaCBjb25zdW1lc1xuICogdGhpcyB2ZXJ5IGxpYnJhcnkpLCByZXBvaW50ZWQgYXQgdGhlIGxvY2FsIHNvdXJjZSBzbyB0aGUgZ2FsbGVyeSByZW5kZXJzIHRoZVxuICogcHJpbWl0aXZlcyBleGFjdGx5IGFzIHRoZXkgc2hpcC5cbiAqXG4gKiBFdmVyeSBzZWN0aW9uIGNhcnJpZXMgYSBgY29tcG9uZW50YCBuYW1pbmcgdGhlIHBvbGx5LXVpIGV4cG9ydCBpdCBjb3ZlcnM7XG4gKiByZWdpc3RyeS1jb3ZlcmFnZS50cyBhc3NlcnRzIHRoYXQgZXZlcnkgY29tcG9uZW50IGluIHJlZ2lzdHJ5LmdlbmVyYXRlZC50c1xuICogaGFzIGEgc2VjdGlvbiBoZXJlLCBzbyBhIG5ldyBwcmltaXRpdmUgY2FuJ3QgbGFuZCB3aXRob3V0IGEgc3BlY2ltZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uRm9ybSxcbiAgQWN0aW9uSW5wdXQsXG4gIEFjdGlvblNlbGVjdCxcbiAgQmFkZ2UsXG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2hlY2tib3gsXG4gIENsdXN0ZXIsXG4gIENvZGUsXG4gIENvbGxhcHNpYmxlLFxuICBEcm9wZG93bixcbiAgRmlsZUlucHV0LFxuICBIdG1sLFxuICBMYXlvdXQsXG4gIExpbmssXG4gIE1vZGFsLFxuICBPdXRwdXQsXG4gIFNlbGVjdCxcbiAgU2tlbGV0b24sXG4gIFN1cmZhY2UsXG4gIFRhYnMsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVG9nZ2xlLFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNoZWNrZWQsXG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeURyb3Bkb3duT3BlbixcbiAgJGdhbGxlcnlGaWxlTmFtZSxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLFxuICAkZ2FsbGVyeVNlbGVjdExvbmcsXG4gICRnYWxsZXJ5U2VsZWN0TXVsdGksXG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUZXh0LFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKlxuICogT25lIGNhdGFsb2d1ZWQgZXhhbXBsZTogYSBzdGFnZSBob2xkaW5nIGxpdmUgY29tcG9uZW50KHMpIGFuZCBhIGNhcHRpb25cbiAqIG5hbWluZyB0aGUgY29uZmlndXJhdGlvbiBvbiBzaG93LiBgd2lkZWAgc3BhbnMgZXZlcnkgZ3JpZCBjb2x1bW4gZm9yXG4gKiBzcGVjaW1lbnMgdGhhdCBuZWVkIHRoZSByb29tIChsYXlvdXRzLCBmb3JtcywgY2FyZHMpLlxuICovXG5mdW5jdGlvbiBTcGVjaW1lbihwcm9wczogeyBjYXB0aW9uOiBzdHJpbmc7IHdpZGU/OiBib29sZWFuOyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwic3Vua2VuXCJcbiAgICAgIHJhZGl1cz1cIm1kXCJcbiAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICBjbGFzc05hbWU9e3Byb3BzLndpZGUgPyBcImdhbGxlcnktc3BlY2ltZW4gZ2FsbGVyeS1zcGVjaW1lbi0td2lkZVwiIDogXCJnYWxsZXJ5LXNwZWNpbWVuXCJ9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbGxlcnktc3RhZ2VcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiIGNsYXNzTmFtZT1cImdhbGxlcnktY29kZVwiPlxuICAgICAgICAgIHtwcm9wcy5jYXB0aW9ufVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbi8qKiBBIG5ldXRyYWwgZmlsbGVyIGJsb2NrIGZvciB0aGUgbGF5b3V0IHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIEJveChwcm9wczogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJyYWlzZWRcIiByYWRpdXM9XCJzbVwiIGJvcmRlcj1cImRlZmF1bHRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICA8VGV4dCBzaXplPVwic21cIj57cHJvcHMuY2hpbGRyZW59PC9UZXh0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuY29uc3QgU1RBUjogSlNYLkVsZW1lbnQgPSAoXG4gIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZ2FsbGVyeS1pY29uXCI+XG4gICAg4piFXG4gIDwvc3Bhbj5cbik7XG5cbi8qKlxuICogcG9sbHkjMTgwOiBhIGxhYmVsIHdpZGVyIHRoYW4gYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgLCBzaGFyZWQgYnkgdGhlXG4gKiA8U2VsZWN0PiBhbmQgPEFjdGlvblNlbGVjdD4gbG9uZy1sYWJlbCBzcGVjaW1lbnMgc28gdGhlIHR3byB0cmlnZ2VycyBtdXN0XG4gKiBtZWFzdXJlIHRoZSBzYW1lIGJveC4gRXZlcnkgY2F0YWxvZ3VlZCBTZWxlY3QgdXNlZCBhIHNob3J0IGxhYmVsLCB3aGljaCBpc1xuICogd2h5IGEgdHJpZ2dlciB0aGF0IGhhZCBsb3N0IGl0cyBsYXlvdXQgcm93IHN0aWxsIG1lYXN1cmVkIDQwcHggYW5kIHRoZVxuICogY2FyZXQgb25seSB3cmFwcGVkIGluIGEgY29uc3VtZXIgYXBwLlxuICovXG5jb25zdCBMT05HX1NFTEVDVF9MQUJFTCA9IFwiQSBkZWxpYmVyYXRlbHkgbG9uZyBvcHRpb24gbGFiZWwgdGhhdCBvdmVyZmxvd3MgdGhlIGNvbnRyb2wgbWF4IHdpZHRoXCI7XG5cbmNvbnN0IExPTkdfU0VMRUNUX09QVElPTlMgPSBbXG4gIHsgdmFsdWU6IFwibG9uZ1wiLCBsYWJlbDogTE9OR19TRUxFQ1RfTEFCRUwgfSxcbiAgeyB2YWx1ZTogXCJzaG9ydFwiLCBsYWJlbDogXCJTaG9ydFwiIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhbGxlcnlTZWN0aW9uIHtcbiAgLyoqIEFuY2hvciBpZCBmb3IgdGhlIGluLXBhZ2UgbmF2LiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogRGlzcGxheSBoZWFkaW5nLiAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogVGhlIHBvbGx5LXVpIGV4cG9ydCB0aGlzIHNlY3Rpb24gY292ZXJzIChtYXRjaGVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5KS4gKi9cbiAgY29tcG9uZW50OiBzdHJpbmc7XG4gIC8qKiBPbmUtbGluZSBkZXNjcmlwdGlvbi4gKi9cbiAgc3VtbWFyeTogc3RyaW5nO1xuICByZW5kZXI6ICgpID0+IEpTWC5FbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9TRUNUSU9OUzogcmVhZG9ubHkgR2FsbGVyeVNlY3Rpb25bXSA9IFtcbiAge1xuICAgIGlkOiBcImJhZGdlXCIsXG4gICAgdGl0bGU6IFwiQmFkZ2VcIixcbiAgICBjb21wb25lbnQ6IFwiQmFkZ2VcIixcbiAgICBzdW1tYXJ5OiBcIlNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC4gT25lIHZhcmlhbnQgcGVyIHNlbWFudGljIHRvbmUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcImRlZmF1bHRcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8QmFkZ2UgdmFyaWFudD17dn0+e3Z9PC9CYWRnZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJidXR0b25cIixcbiAgICB0aXRsZTogXCJCdXR0b25cIixcbiAgICBjb21wb25lbnQ6IFwiQnV0dG9uXCIsXG4gICAgc3VtbWFyeTogXCJJbnRlcmFjdGl2ZSBjb250cm9sLiBUaWVyIHNldHMgaW1wb3J0YW5jZSwgY29sb3Igb3ZlcmxheXMgbWVhbmluZywgc2l6ZSBzZXRzIHNjYWxlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0aWVyOiBwcmltYXJ5IC8gc2Vjb25kYXJ5IC8gdGVydGlhcnlcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJQcmltYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIlNlY29uZGFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIlRlcnRpYXJ5XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb2xvcjogZGVmYXVsdCAvIGluZm8gLyBzdWNjZXNzIC8gd2FybmluZyAvIGRhbmdlclwiPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkZWZhdWx0XCIgbGFiZWw9XCJEZWZhdWx0XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiSW5mb1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInN1Y2Nlc3NcIiBsYWJlbD1cIlN1Y2Nlc3NcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJ3YXJuaW5nXCIgbGFiZWw9XCJXYXJuaW5nXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGFuZ2VyXCIgbGFiZWw9XCJEYW5nZXJcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHNtYWxsIC8gbm9ybWFsIC8gbGFyZ2VcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGxhYmVsPVwiU21hbGxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cIm5vcm1hbFwiIGxhYmVsPVwiTm9ybWFsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJsYXJnZVwiIGxhYmVsPVwiTGFyZ2VcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpY29uICsgbGFiZWxcIj5cbiAgICAgICAgICA8QnV0dG9uIGljb249e1NUQVJ9IGxhYmVsPVwiV2l0aCBpY29uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaXJjbGUgKGljb24tb25seSBuZWVkcyBhcmlhLWxhYmVsKVwiPlxuICAgICAgICAgIDxCdXR0b24gY2lyY2xlIGFyaWEtbGFiZWw9XCJTdGFyXCIgbGFiZWw9e1NUQVJ9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHJlZiDigJQgcmVuZGVycyBhbiA8YT5cIj5cbiAgICAgICAgICA8QnV0dG9uIGhyZWY9XCIjYnV0dG9uXCIgdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiTGluayBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZ1bGxXaWR0aFwiIHdpZGU+XG4gICAgICAgICAgPEJ1dHRvbiBmdWxsV2lkdGggdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZ1bGwtd2lkdGggYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIFRoZSB0d28gcm93cyBzaGFyZSBhIGxlZnQgZWRnZSwgc28gdGhlIG9mZnNldCBpcyB0aGUgd2hvbGUgcG9pbnQ6XG4gICAgICAgICAgICB0aGUgZGVmYXVsdCBidXR0b24gYWxpZ25zIGl0cyBCT1ggdG8gdGhhdCBlZGdlIGFuZCBpdHMgbGFiZWwgc2l0c1xuICAgICAgICAgICAgYW4gaW5saW5lLXBhZGRpbmcgZnVydGhlciBpbjsgdGhlIGZsdXNoIG9uZSBwdXRzIHRoZSBMQUJFTCB0aGVyZS4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZmx1c2gg4oCUIGxhYmVsIG9uIHRoZSB0ZXh0IGVkZ2UsIGZvciBhIHRlcnRpYXJ5IGJ1dHRvbiBiZXNpZGUgY29weVwiIHdpZGU+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgICBBIGxpbmUgb2YgYm9keSBjb3B5IGZvciB0aGUgbGVmdCBlZGdlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPENsdXN0ZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgbGFiZWw9XCJEZWZhdWx0IOKAlCBib3ggYWxpZ25zXCIgLz5cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICAgIDxDbHVzdGVyPlxuICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGZsdXNoIGxhYmVsPVwiRmx1c2gg4oCUIGxhYmVsIGFsaWduc1wiIC8+XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dFwiLFxuICAgIHRpdGxlOiBcIlRleHRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dFwiLFxuICAgIHN1bW1hcnk6IFwiVHlwb2dyYXBoaWMgcHJpbWl0aXZlIOKAlCB0b25lLCBzaXplLCB3ZWlnaHQsIGl0YWxpYywgc3RyaWtldGhyb3VnaCwgYW5kIGxlYWRpbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRvbmU6IGRlZmF1bHQgLyBtdXRlZCAvIGRhbmdlciAvIHdhcm5pbmcgLyBzdWNjZXNzXCI+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRlZmF1bHRcIj5EZWZhdWx0PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPk11dGVkPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJkYW5nZXJcIj5EYW5nZXI8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIndhcm5pbmdcIj5XYXJuaW5nPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJzdWNjZXNzXCI+U3VjY2VzczwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiB4cyAvIHNtIC8gbWQgLyBsZyAvIHhsXCI+XG4gICAgICAgICAgeyhbXCJ4c1wiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcInhsXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgIDxUZXh0IGtleT17c30gc2l6ZT17c30+XG4gICAgICAgICAgICAgIHtzfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndlaWdodDogbm9ybWFsIC8gbWVkaXVtIC8gYm9sZFwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm5vcm1hbFwiPk5vcm1hbDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5NZWRpdW08L1RleHQ+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkJvbGQ8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaXRhbGljIC8gc3RyaWtldGhyb3VnaFwiPlxuICAgICAgICAgIDxUZXh0IGl0YWxpYz5JdGFsaWMgZW1waGFzaXM8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3RyaWtldGhyb3VnaD5TdHJ1Y2sgdGhyb3VnaDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2xlYWRpbmc9XCJsb29zZVwiIOKAlCBtdWx0aS1saW5lIGJvZHkgY29weScgd2lkZT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiBsZWFkaW5nPVwibG9vc2VcIj5cbiAgICAgICAgICAgIEEgcGFyYWdyYXBoIHJlbmRlcmVkIHdpdGggbG9vc2UgbGVhZGluZy4gUG9sbHkncyBUZXh0IHByaW1pdGl2ZSBiYWNrcyBldmVyeSBzcGFuLFxuICAgICAgICAgICAgcGFyYWdyYXBoLCBsYWJlbCwgYW5kIGNhcHRpb24gc28gY29uc3VtZXJzIG5ldmVyIHJlYWNoIGZvciBhIHJhdyBzdHlsZSBhdHRyaWJ1dGUgdG8gc2V0XG4gICAgICAgICAgICB0b25lLCBzaXplLCB3ZWlnaHQsIG9yIGxpbmUgaGVpZ2h0LlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2RlXCIsXG4gICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2RlXCIsXG4gICAgc3VtbWFyeTogXCJNb25vc3BhY2UgY29kZSDigJQgaW5saW5lIGJ5IGRlZmF1bHQsIG9yIGEgd3JhcHBlZCBibG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBSdW4gPENvZGU+cG9sbHkgZ2FsbGVyeTwvQ29kZT4gdG8gb3BlbiB0aGlzIHBhZ2UuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJsb2NrXCIgd2lkZT5cbiAgICAgICAgICA8Q29kZSBibG9jaz57J2NvbnN0IGdhbGxlcnkgPSB7XFxuICBzZXJ2ZWQ6IFwiYnkgcG9sbHlcIixcXG59Oyd9PC9Db2RlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxpbmtcIixcbiAgICB0aXRsZTogXCJMaW5rXCIsXG4gICAgY29tcG9uZW50OiBcIkxpbmtcIixcbiAgICBzdW1tYXJ5OiBcIkFuY2hvciBwcmltaXRpdmUg4oCUIHVuZGVybGluZSBieSBkZWZhdWx0LCB3aXRoIGV4dGVybmFsLCBzdWJ0bGUsIGFuZCBkb3dubG9hZCBtb2Rlcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdFwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiPkluLXBhZ2UgbGluazwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJleHRlcm5hbCDigJQgbmV3IHRhYiwgcmVsPW5vb3BlbmVyXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImh0dHBzOi8vZXhhbXBsZS5jb21cIiBleHRlcm5hbD5cbiAgICAgICAgICAgIEV4dGVybmFsIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3VidGxlIOKAlCB1bmRlcmxpbmUgb24gaG92ZXIgb25seVwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiIHN1YnRsZT5cbiAgICAgICAgICAgIFN1YnRsZSBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRvd25sb2FkXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImRhdGE6dGV4dC9wbGFpbixnYWxsZXJ5XCIgZG93bmxvYWQ9XCJnYWxsZXJ5LnR4dFwiPlxuICAgICAgICAgICAgRG93bmxvYWQgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdXJmYWNlXCIsXG4gICAgdGl0bGU6IFwiU3VyZmFjZVwiLFxuICAgIGNvbXBvbmVudDogXCJTdXJmYWNlXCIsXG4gICAgc3VtbWFyeTogXCJPd25zIHZpc3VhbCBjaHJvbWUg4oCUIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIHBvc2l0aW9uaW5nLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJwbGFpblwiLCBcInJhaXNlZFwiLCBcInN1bmtlblwiLCBcImJ1YmJsZVwiLCBcImNoaXBcIiwgXCJjYWxsb3V0XCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFN1cmZhY2UgdmFyaWFudD17dn0gcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIj57dn08L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50OiBcImZsb2F0aW5nXCIgLyBcInN0aWNreS1iYXJcIiBwaW4gdG8gdGhlIHZpZXdwb3J0IOKAlCBvbWl0dGVkIGhlcmUnPlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgUG9zaXRpb25hbCB2YXJpYW50cyBhcmUgcHJldmlld2VkIGluIGNvbnRleHQsIG5vdCBpbiBhIGdyaWQgY2VsbC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBFcXVhbCBzcXVhcmUgYm94ZXMuIFRoZSBsYWJlbCB1c2VkIHRvIHNpemUgZWFjaCBvbmUsIHNvIHRoZSBsYWRkZXJcbiAgICAgICAgICAgIHdhcyBjb21wYXJlZCBhY3Jvc3MgZml2ZSBkaWZmZXJlbnQgd2lkdGhzICg0Ni8zNS8zNi8yOC8zNSBweCkgYW5kXG4gICAgICAgICAgICBgZnVsbGAgcmVuZGVyZWQgYXMgYSBzdGFkaXVtIHRhbGxlciB0aGFuIGl0IHdhcyB3aWRlIHJhdGhlciB0aGFuIGFcbiAgICAgICAgICAgIGNpcmNsZS4gQSBzcXVhcmUgYm94IG1ha2VzIDk5OTlweCByZWFkIGFzIHRoZSBjaXJjbGUgaXQgaXMuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJhZGl1czogbm9uZSAvIHNtIC8gbWQgLyBsZyAvIGZ1bGxcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJzbVwiLCBcIm1kXCIsIFwibGdcIiwgXCJmdWxsXCJdIGFzIGNvbnN0KS5tYXAoKHIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlXG4gICAgICAgICAgICAgIGtleT17cn1cbiAgICAgICAgICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICAgICAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICByYWRpdXM9e3J9XG4gICAgICAgICAgICAgIHdpZHRoPVwiNTZweFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjU2cHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TGF5b3V0IGhlaWdodD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCIganVzdGlmeUl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3J9PC9UZXh0PlxuICAgICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJib3JkZXI6IG5vbmUgLyBkZWZhdWx0IC8gc3Ryb25nXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwiZGVmYXVsdFwiLCBcInN0cm9uZ1wiXSBhcyBjb25zdCkubWFwKChiKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZSBrZXk9e2J9IGJvcmRlcj17Yn0gcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntifTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIE9uIHRoZSBzdW5rZW4gY2FyZCBldmVyeSBzcGVjaW1lbiBzaXRzIG9uLCBhIHNvZnQgc2hhZG93IGxhbmRzIGdyZXlcbiAgICAgICAgICAgIG9uIGdyZXkgYW5kIG5vbmUgb2YgdGhlIHRocmVlIHN0ZXBzIHJlYWQuIFRoZXkgYXJlIGNhc3Qgb24gYSBwbGFpblxuICAgICAgICAgICAgc3VyZmFjZSBoZXJlLCBhbmQgZWFjaCBib3ggaXMgc3F1YXJlIGFuZCBlcXVhbCBzbyB0aGUgb25seSB0aGluZ1xuICAgICAgICAgICAgdGhhdCBkaWZmZXJzIGJldHdlZW4gdGhlbSBpcyB0aGUgc2hhZG93LiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaGFkb3c6IHNtIC8gbWQgLyBsZ1wiPlxuICAgICAgICAgIDxTdXJmYWNlIGJhY2tncm91bmQ9XCJ2YXIoLS1wb2xseS1zdXJmYWNlKVwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiPlxuICAgICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAgICAgIHsoW1wic21cIiwgXCJtZFwiLCBcImxnXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgICAgICA8U3VyZmFjZSBrZXk9e3N9IHZhcmlhbnQ9XCJyYWlzZWRcIiBzaGFkb3c9e3N9IHJhZGl1cz1cIm1kXCIgd2lkdGg9XCI1NnB4XCIgaGVpZ2h0PVwiNTZweFwiPlxuICAgICAgICAgICAgICAgICAgPExheW91dCBoZWlnaHQ9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiIGp1c3RpZnlJdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57c308L1RleHQ+XG4gICAgICAgICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjYXJkXCIsXG4gICAgdGl0bGU6IFwiQ2FyZFwiLFxuICAgIGNvbXBvbmVudDogXCJDYXJkXCIsXG4gICAgc3VtbWFyeTogXCJDb21wb3VuZCBvZiBTdXJmYWNlcyDigJQgYSByYWlzZWQgUm9vdCB3cmFwcGluZyBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgc2xvdHMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIkNhcmQuUm9vdCA+IEhlYWRlciAvIEJvZHkgLyBGb290ZXJcIiB3aWRlPlxuICAgICAgICA8Q2FyZC5Sb290IHBhZGRpbmc9XCIwXCI+XG4gICAgICAgICAgPENhcmQuSGVhZGVyIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cImJvbGRcIj5DYXJkIGhlYWRlcjwvVGV4dD5cbiAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgIDxDYXJkLkJvZHkgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIFRoZSBib2R5IHNsb3QgY2FycmllcyB0aGUgbWFpbiBjb250ZW50LiBFYWNoIHNsb3QgYWNjZXB0cyB0aGUgZnVsbCBTdXJmYWNlUHJvcHMsIHNvIGl0XG4gICAgICAgICAgICAgIGNhbiBiZSByZXRpbnRlZCBvciByZXBhZGRlZCB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L0NhcmQuQm9keT5cbiAgICAgICAgICA8Q2FyZC5Gb290ZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRm9vdGVyIGFjdGlvblwiIC8+XG4gICAgICAgICAgPC9DYXJkLkZvb3Rlcj5cbiAgICAgICAgPC9DYXJkLlJvb3Q+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJza2VsZXRvblwiLFxuICAgIHRpdGxlOiBcIlNrZWxldG9uXCIsXG4gICAgY29tcG9uZW50OiBcIlNrZWxldG9uXCIsXG4gICAgc3VtbWFyeTogXCJTaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy4gQW5pbWF0aW9uIGhvbm91cnMgcmVkdWNlZC1tb3Rpb24uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInRleHRcIiwgXCJyZWN0XCIsIFwiY2lyY2xlXCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9e3Z9IC8+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY3VzdG9tIHdpZHRoICsgaGVpZ2h0XCI+XG4gICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJyZWN0XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PXs2NH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdXRwdXRcIixcbiAgICB0aXRsZTogXCJPdXRwdXRcIixcbiAgICBjb21wb25lbnQ6IFwiT3V0cHV0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiTW9ub3NwYWNlIG91dHB1dCByZWdpb24gZm9yIGNvbW1hbmQgcmVzdWx0cyBvciBsb2dzIOKAlCB3cmFwcywgb3Igc2Nyb2xscyBob3Jpem9udGFsbHkuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHQg4oCUIHdyYXBzXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0PnBvbGx5IGdhbGxlcnkg4oaSIHNlcnZpbmcgYXQgaHR0cDovL2xvY2FsaG9zdDo0MzIxPC9PdXRwdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2Nyb2xsIOKAlCBzaW5nbGUgbG9uZyBsaW5lIHNjcm9sbHMgaW5zdGVhZCBvZiB3cmFwcGluZ1wiIHdpZGU+XG4gICAgICAgICAgPE91dHB1dCBzY3JvbGw+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJCBwb2xseSBnYWxsZXJ5IC0tYnVpbGQgLi9kaXN0L2dhbGxlcnkgICAjIG9uZSBsb25nIGxpbmUgdGhhdCBzY3JvbGxzIGhvcml6b250YWxseSByYXRoZXIgdGhhbiB3cmFwcGluZyBvbnRvIHRoZSBuZXh0IHJvd1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9PdXRwdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaHRtbFwiLFxuICAgIHRpdGxlOiBcIkh0bWxcIixcbiAgICBjb21wb25lbnQ6IFwiSHRtbFwiLFxuICAgIHN1bW1hcnk6IFwiUmVuZGVycyBhIHRydXN0ZWQgSFRNTCBzdHJpbmcuIFRoZSBjYWxsZXIgb3ducyBzYW5pdGlzYXRpb24g4oCUIG5ldmVyIHBhc3MgdXNlciBpbnB1dC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHRtbD17dHJ1c3RlZCBzdHJpbmd9XCIgd2lkZT5cbiAgICAgICAgPEh0bWwgaHRtbD1cIjxzdHJvbmc+Qm9sZDwvc3Ryb25nPiwgPGVtPml0YWxpYzwvZW0+LCBhbmQgYSA8Y29kZT5jb2RlIHNwYW48L2NvZGU+IGZyb20gYSB0cnVzdGVkIG1hcmt1cCBzdHJpbmcuXCIgLz5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbGxhcHNpYmxlXCIsXG4gICAgdGl0bGU6IFwiQ29sbGFwc2libGVcIixcbiAgICBjb21wb25lbnQ6IFwiQ29sbGFwc2libGVcIixcbiAgICBzdW1tYXJ5OiBcIk5hdGl2ZSA8ZGV0YWlscz4vPHN1bW1hcnk+IGRpc2Nsb3N1cmUg4oCUIGtleWJvYXJkIGFuZCBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBmcmVlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjbG9zZWQgYnkgZGVmYXVsdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJTaG93IG1vcmUgZGV0YWlsXCI+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbnRlbnQgaXMgcmV2ZWFsZWQgd2hlbiB0aGUgZGlzY2xvc3VyZSBpcyBvcGVuZWQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdE9wZW5cIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZSBzdW1tYXJ5PVwiT3BlbiBmcm9tIHRoZSBzdGFydFwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgPFRleHQ+VGhpcyBjb2xsYXBzaWJsZSByZW5kZXJzIGV4cGFuZGVkIG9uIGZpcnN0IHBhaW50LjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVkaXRhYmxlIGZpZWxkIGluIHRoZSBzdW1tYXJ5IOKAlCBTcGFjZS9FbnRlciBubyBsb25nZXIgY29sbGFwc2UgaXRcIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgICAgc3VtbWFyeT17XG4gICAgICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImdhbGxlcnktY29sbGFwc2libGUtc3VtbWFyeVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBhIHNwYWNlIGhlcmXigKZcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0PlRoZSBoZWFkZXIgZ3VhcmQgY2FuY2VscyB0aGUgZGlzY2xvc3VyZSB0b2dnbGUgZm9yIHRleHQtZW50cnkgZmllbGRzLjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxheW91dFwiLFxuICAgIHRpdGxlOiBcIkxheW91dFwiLFxuICAgIGNvbXBvbmVudDogXCJMYXlvdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJUaGUgZ3JpZCBwcmltaXRpdmUuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMg4oCUIG5vIGhhbmQtd3JpdHRlbiBmbGV4IG9yIGdyaWQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cIjFmciAxZnIgMWZyXCInIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2NvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCInIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiYXV0byAxZnIgYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxCb3g+YXV0bzwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+YXV0bzwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInN0YWNrT25Nb2JpbGUg4oCUIGNvbGxhcHNlcyB0byBvbmUgY29sdW1uIOKJpDY0MHB4XCIgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgc3RhY2tPbk1vYmlsZT5cbiAgICAgICAgICAgIDxCb3g+U2lkZSBieSBzaWRlLCB0aGVuIHN0YWNrZWQ8L0JveD5cbiAgICAgICAgICAgIDxCb3g+U2lkZSBieSBzaWRlLCB0aGVuIHN0YWNrZWQ8L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjbHVzdGVyXCIsXG4gICAgdGl0bGU6IFwiQ2x1c3RlclwiLFxuICAgIGNvbXBvbmVudDogXCJDbHVzdGVyXCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiV3JhcHBpbmcgcm93IG9mIHZhcmlhYmxlLXdpZHRoIGl0ZW1zIOKAlCBjaGlwcywgdGFncywgYnV0dG9uIGdyb3Vwcy4gUmVmbG93cyBhcyBzcGFjZSBydW5zIG91dC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZ2FwIOKAlCBpdGVtcyB3cmFwIG9udG8gbmV3IHJvd3NcIiB3aWRlPlxuICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICB7W1wiR3JvY2VyaWVzXCIsIFwiRXJyYW5kc1wiLCBcIkhvbWVcIiwgXCJHYXJkZW5cIiwgXCJGaW5hbmNlXCIsIFwiVHJhdmVsXCIsIFwiSGVhbHRoXCIsIFwiQWRtaW5cIl0ubWFwKFxuICAgICAgICAgICAgKHRhZykgPT4gKFxuICAgICAgICAgICAgICA8QmFkZ2Uga2V5PXt0YWd9IHZhcmlhbnQ9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAge3RhZ31cbiAgICAgICAgICAgICAgPC9CYWRnZT5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0YWJzXCIsXG4gICAgdGl0bGU6IFwiVGFic1wiLFxuICAgIGNvbXBvbmVudDogXCJUYWJzXCIsXG4gICAgc3VtbWFyeTogXCJIb3Jpem9udGFsIG5hdiB3aXRoIGFuIGFjdGl2ZS10YWIgYWNjZW50LiBEaXNwYXRjaGVzIGFuIGFjdGlvbiBwZXIgdGFiLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbnRlcmFjdGl2ZSDigJQgb25lIHRhYiBkaXNhYmxlZFwiIHdpZGU+XG4gICAgICAgIDxUYWJzXG4gICAgICAgICAgdGFicz17W1xuICAgICAgICAgICAgeyBpZDogXCJvdmVydmlld1wiLCBsYWJlbDogXCJPdmVydmlld1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFjdGl2aXR5XCIsIGxhYmVsOiBcIkFjdGl2aXR5XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwic2V0dGluZ3NcIiwgbGFiZWw6IFwiU2V0dGluZ3NcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJhcmNoaXZlZFwiLCBsYWJlbDogXCJBcmNoaXZlZFwiLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgYWN0aXZlVGFiPXskZ2FsbGVyeVRhYi52YWx1ZX1cbiAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OnNldC10YWJcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJHYWxsZXJ5IHRhYnNcIlxuICAgICAgICAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2hlY2tib3hcIixcbiAgICB0aXRsZTogXCJDaGVja2JveFwiLFxuICAgIGNvbXBvbmVudDogXCJDaGVja2JveFwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIGNoZWNrYm94IGluIGEgbGFiZWwuIEEgcGxhaW4gYm9vbGVhbiBpcyBjb250cm9sbGVkOyBhIFNpZ25hbCBiaW5kcyBpdHNlbGYuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInVuY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIlVuY2hlY2tlZFwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJDaGVja2VkXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkRpc2FibGVkXCIgY2hlY2tlZD17dHJ1ZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaGVja2VkPXtzaWduYWx9IOKAlCBjbGljayB0byB0b2dnbGVcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJCb3VuZCB0byBhIHNpZ25hbFwiIGNoZWNrZWQ9eyRnYWxsZXJ5Q2hlY2tlZH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b2dnbGVcIixcbiAgICB0aXRsZTogXCJUb2dnbGVcIixcbiAgICBjb21wb25lbnQ6IFwiVG9nZ2xlXCIsXG4gICAgc3VtbWFyeTogXCJTd2l0Y2gtcm9sZSBjaGVja2JveC4gUGFzc2l2ZSDigJQgdGhlIGNhbGxlciBkcml2ZXMgdGhlIGNoZWNrZWQgc3RhdGUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9mZlwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJPZmZcIiBjaGVja2VkPXtmYWxzZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvblwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJPblwiIGNoZWNrZWQ9e3RydWV9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRleHQtaW5wdXRcIixcbiAgICB0aXRsZTogXCJUZXh0SW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dElucHV0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiU2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dC4gQSBwbGFpbiBzdHJpbmcgaXMgdW5jb250cm9sbGVkOyBhIFNpZ25hbCBpcyBjb250cm9sbGVkLiBcIiArXG4gICAgICBcImlucHV0VHlwZSBwaWNrcyB0aGUgbmF0aXZlIGtleWJvYXJkIGFuZCB2YWxpZGF0aW9uOyBlcnJvciByZW5kZXJzIGEgbGlua2VkIG1lc3NhZ2UuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cInNpbmdsZVwiIHdpdGggcGxhY2Vob2xkZXInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tc2luZ2xlXCIgcGxhY2Vob2xkZXI9XCJUeXBlIGhlcmXigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbXVsdGlcIiB2YXJpYW50PVwibXVsdGlcIiByb3dzPXszfSBwbGFjZWhvbGRlcj1cIk11bHRpcGxlIGxpbmVz4oCmXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cImVtYWlsXCInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZW1haWxcIiBpbnB1dFR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiYWRhQGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cIm51bWJlclwiIHdpdGggbWluL21heC9zdGVwJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLW51bWJlclwiIGlucHV0VHlwZT1cIm51bWJlclwiIG1pbj17MH0gbWF4PXsxMH0gc3RlcD17MX0gdmFsdWU9XCI1XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlcnJvciDigJQgbGlua2VkIG1lc3NhZ2UsIG1hcmtzIGludmFsaWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWVycm9yXCIgdmFsdWU9XCJub3QtYW4tZW1haWxcIiBlcnJvcj1cIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludmFsaWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWludmFsaWRcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGludmFsaWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZGlzYWJsZWRcIiB2YWx1ZT1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJyZWFkT25seVwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tcmVhZG9ubHlcIiB2YWx1ZT1cIlJlYWQgb25seVwiIHJlYWRPbmx5IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidmFsdWU9e3NpZ25hbH0g4oCUIGNvbnRyb2xsZWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWNvbnRyb2xsZWRcIiB2YWx1ZT17JGdhbGxlcnlUZXh0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIlNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJTZWxlY3RcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJEcm9wZG93biBvZiBvcHRpb25zIGJvdW5kIHRvIGEgU2lnbmFsPFNldD4uIFNpbmdsZSByZXBsYWNlcywgbXVsdGkgdG9nZ2xlcy4gXCIgK1xuICAgICAgJ2NsZWFyYWJsZSBwcmVwZW5kcyBhbiBcIkFueSDigKZcIiByb3cgc28gYW4gb3B0aW9uYWwgZmlsdGVyIGhhcyBhIHBhdGggYmFjayB0byB1bnNldC4nLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaW5nbGUtc2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIG9uZVwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdFNpbmdsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsZWFyYWJsZSDigJQgc2luZ2xlLXNlbGVjdCB3aXRoIGFuIOKAnEFueSDigKbigJ0gcm93XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJGaWx0ZXIgYnlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBbnkgb2JqZWN0XCJcbiAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RDbGVhcmFibGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJtdWx0aVNlbGVjdFwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUGljayBzZXZlcmFsXCJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0XG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdE11bHRpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCDigJQgdHJ1bmNhdGVzLCBjYXJldCBzdGF5cyBvbiB0aGUgcm93IChwb2xseSMxODApXCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LXNlbGVjdC1sb25nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TG9uZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImZpbGUtaW5wdXRcIixcbiAgICB0aXRsZTogXCJGaWxlSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiRmlsZUlucHV0XCIsXG4gICAgc3VtbWFyeTogXCJTdHlsZWQgd3JhcHBlciBvdmVyIGEgbmF0aXZlIGZpbGUgcGlja2VyLiBIYW5kcyB0aGUgY2hvc2VuIEZpbGVMaXN0IHRvIG9uRmlsZXMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uRmlsZXMg4oCUIHBpY2sgYSBmaWxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgZmlsZVwiXG4gICAgICAgICAgICBvbkZpbGVzPXsoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IGZpbGVzWzBdPy5uYW1lID8/IFwi4oCUXCI7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYWNjZXB0ICsgbXVsdGlwbGVcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkNob29zZSBpbWFnZXNcIlxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJEaXNhYmxlZFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgb25GaWxlcz17KCkgPT4ge1xuICAgICAgICAgICAgICAvKiBkaXNhYmxlZCDigJQgbmV2ZXIgaW52b2tlZCAqL1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxhc3QgcGlja2VkIGZpbGVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBwaWNrZWQ6IDxDb2RlPnskZ2FsbGVyeUZpbGVOYW1lLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZHJvcGRvd25cIixcbiAgICB0aXRsZTogXCJEcm9wZG93blwiLFxuICAgIGNvbXBvbmVudDogXCJEcm9wZG93blwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkxvdy1sZXZlbCB0cmlnZ2VyICsgcG9wb3ZlciBwbHVtYmluZy4gVGhlIHByaW1pdGl2ZSBpdHNlbGYgaGFzIG5vIGNocm9tZSDigJQgXCIgK1xuICAgICAgXCJjb25zdW1lcnMgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSB3cmFwIGl0IHdpdGggdGhlIHN0eWxlZCB0cmlnZ2VyIGFuZCBjYXJldC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidHJpZ2dlciBkcmVzc2VkIHZpYSB0cmlnZ2VyQ2xhc3NOYW1lICsgZGF0YS1vcGVuXCI+XG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17JGdhbGxlcnlEcm9wZG93bk9wZW59XG4gICAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT1cImdhbGxlcnktZHJvcGRvd24tdHJpZ2dlclwiXG4gICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8c3Bhbj5PcGVuIG1lbnU8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2FsbGVyeS1kcm9wZG93bi1jYXJldFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0PkZpcnN0IGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5TZWNvbmQgaXRlbTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PlRoaXJkIGl0ZW08L1RleHQ+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24taW5wdXRcIixcbiAgICB0aXRsZTogXCJBY3Rpb25JbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25JbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiRHVhbC1tb2RlIHZpZXcvZWRpdCBmaWVsZC4gQ2xpY2sgdG8gZWRpdDsgY29tbWl0IGRpc3BhdGNoZXMgYW4gYWN0aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3NhdmVPbj1cImJsdXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkNsaWNrIHRvIGVkaXQsIGNvbW1pdHMgb24gYmx1clwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkJsdXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJlbnRlclwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiRWRpdCBhbmQgcHJlc3MgRW50ZXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiZW50ZXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRW50ZXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJkYXRlXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCIyMDI2LTA1LTIyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGlucHV0VHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJEYXRlIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkEgbG9uZ2VyLCBtdWx0aS1saW5lIHZhbHVlXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIk11bHRpLWxpbmUgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IGNvbW1pdHRlZCB2YWx1ZVwiIHdpZGU+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBMYXN0IGNvbW1pdHRlZDogPENvZGU+eyRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLXNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIkFjdGlvblNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBzdW1tYXJ5OiBcIlNpbmdsZS1zZWxlY3QgdGhhdCBjb21taXRzIGEgcGxhaW4gc3RyaW5nIHZhbHVlIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbW1pdHMgdmlhIGFjdGlvblwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUHJpb3JpdHlcIlxuICAgICAgICAgICAgdmFsdWU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWQg4oCUIHJlbmRlcnMgYXMgc3RhdGljIHRleHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwiaGlnaFwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibG93XCIsIGxhYmVsOiBcIkxvd1wiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibWVkaXVtXCIsIGxhYmVsOiBcIk1lZGl1bVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiaGlnaFwiLCBsYWJlbDogXCJIaWdoXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCDigJQgdHJ1bmNhdGVzLCBjYXJldCBzdGF5cyBvbiB0aGUgcm93IChwb2xseSMxODApXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgdmFsdWU9XCJsb25nXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsLCBkaXNhYmxlZCDigJQgb25lIHJvdyBhdCB0aGUgY29udHJvbCBoZWlnaHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nLWRpc2FibGVkXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICB2YWx1ZT1cImxvbmdcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlbXB0eSDigJQgdGhlIHBsYWNlaG9sZGVyIGlzIHRoZSBzYW1lIGJveCBhcyBhIHZhbHVlXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZy1lbXB0eVwiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e0xPTkdfU0VMRUNUX0xBQkVMfVxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndpZGUg4oCUIHNob3J0IGxhYmVsLCBzdGlsbCBvbmUgY2VudHJlZCByb3dcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC13aWRlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiV2lkZVwiXG4gICAgICAgICAgICB2YWx1ZT1cInNob3J0XCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB3aWRlXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24tZm9ybVwiLFxuICAgIHRpdGxlOiBcIkFjdGlvbkZvcm1cIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uRm9ybVwiLFxuICAgIHN1bW1hcnk6IFwiV3JhcHMgYSBuYXRpdmUgZm9ybSB3aXRoIHRoZSBhY3Rpb24gcGF0dGVybiDigJQgc3VibWl0IGRpc3BhdGNoZXMgdGhlIGZvcm0gaGFuZGxlci5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZm9ybSB3aXRoIFRleHRJbnB1dCBmaWVsZHMgKyBhIHN1Ym1pdCBCdXR0b25cIiB3aWRlPlxuICAgICAgICA8QWN0aW9uRm9ybSBmb3JtPXtnYWxsZXJ5Rm9ybX0gYXJpYS1sYWJlbD1cIkdhbGxlcnkgZGVtbyBmb3JtXCI+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLW5hbWVcIj5cbiAgICAgICAgICAgICAgRnVsbCBuYW1lXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLW5hbWVcIiBuYW1lPVwiZnVsbE5hbWVcIiBwbGFjZWhvbGRlcj1cIkFkYSBMb3ZlbGFjZVwiIC8+XG4gICAgICAgICAgICA8VGV4dCBhcz1cImxhYmVsXCIgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCIgaHRtbEZvcj1cImdhbGxlcnktZm9ybS1lbWFpbFwiPlxuICAgICAgICAgICAgICBFbWFpbFxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBpZD1cImdhbGxlcnktZm9ybS1lbWFpbFwiIG5hbWU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiYWRhQGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIHRpZXI9XCJwcmltYXJ5XCIgY29sb3I9XCJpbmZvXCIgbGFiZWw9XCJTdWJtaXRcIiAvPlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0FjdGlvbkZvcm0+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJtb2RhbFwiLFxuICAgIHRpdGxlOiBcIk1vZGFsXCIsXG4gICAgY29tcG9uZW50OiBcIk1vZGFsXCIsXG4gICAgc3VtbWFyeTogXCJDb21wb3VuZCBkaWFsb2cg4oCUIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLCBzY3JvbGwgbG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib3BlbnMgYSBwb3J0YWxsZWQgZGlhbG9nXCI+XG4gICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBkYXRhLWFjdGlvbj1cImdhbGxlcnk6bW9kYWwtb3BlblwiIGxhYmVsPVwiT3BlbiBtb2RhbFwiIC8+XG4gICAgICAgIDxNb2RhbC5Sb290XG4gICAgICAgICAgd2hlbj17JGdhbGxlcnlNb2RhbE9wZW59XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZW1vIG1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgICAgPE1vZGFsLlRpdGxlPk1vZGFsIHRpdGxlPC9Nb2RhbC5UaXRsZT5cbiAgICAgICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPE1vZGFsLkJvZHk+XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEZvY3VzIGlzIHRyYXBwZWQgaW5zaWRlIHRoZSBkaWFsb2csIEVzY2FwZSBjbG9zZXMgaXQsIHRoZSBiYWNrZHJvcCBjbGljayBjbG9zZXMgaXQsXG4gICAgICAgICAgICAgICAgYW5kIHRoZSBib2R5IHNjcm9sbCBpcyBsb2NrZWQgd2hpbGUgaXQgaXMgb3Blbi5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Nb2RhbC5Cb2R5PlxuICAgICAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgICAgPE1vZGFsLkNsb3NlPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkRvbmVcIiAvPlxuICAgICAgICAgICAgICA8L01vZGFsLkNsb3NlPlxuICAgICAgICAgICAgPC9Nb2RhbC5Gb290ZXI+XG4gICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICA8L01vZGFsLlJvb3Q+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb25maXJtLWRpYWxvZ1wiLFxuICAgIHRpdGxlOiBcIkNvbmZpcm1EaWFsb2dcIixcbiAgICBjb21wb25lbnQ6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIHN1bW1hcnk6IFwiUHJvbWlzZS1yZXR1cm5pbmcgY29uZmlybWF0aW9uLiBjb25maXJtKCkgcmVzb2x2ZXMgdHJ1ZSBvciBmYWxzZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29uZmlybSgpIOKAlCBzdGFuZGFyZFwiPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInNlY29uZGFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpjb25maXJtXCIgbGFiZWw9XCJDb25maXJtIGFuIGFjdGlvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29uZmlybSh7IGRhbmdlcjogdHJ1ZSB9KVwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tZGFuZ2VyPVwidHJ1ZVwiXG4gICAgICAgICAgICBsYWJlbD1cIkNvbmZpcm0gYSBkZWxldGlvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b2FzdFwiLFxuICAgIHRpdGxlOiBcIlRvYXN0XCIsXG4gICAgY29tcG9uZW50OiBcIlRvYXN0XCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIHRoZSBnbG9iYWwgZXJyb3JTdGF0ZSBzaWduYWwuIFNldmVyaXR5IHNldHMgdGhlIGFyaWEtbGl2ZSBwb2xpdGVuZXNzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJwdXNoIGEgdG9hc3QgYXQgZWFjaCBzZXZlcml0eVwiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJpbmZvXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cImluZm9cIlxuICAgICAgICAgICAgbGFiZWw9XCJJbmZvIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cIndhcm5pbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJXYXJuaW5nIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiZXJyb3JcIlxuICAgICAgICAgICAgbGFiZWw9XCJFcnJvciB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3ZlcmxheS1yb290XCIsXG4gICAgdGl0bGU6IFwiT3ZlcmxheVJvb3RcIixcbiAgICBjb21wb25lbnQ6IFwiT3ZlcmxheVJvb3RcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJJbmZyYXN0cnVjdHVyZSwgbm90IGEgdmlzdWFsIGNvbnRyb2wuIE1vdW50IGl0IG9uY2UgbmVhciB0aGUgYXBwIHJvb3Q7IE1vZGFsLCBUb2FzdCwgYW5kIFwiICtcbiAgICAgIFwiQ29uZmlybURpYWxvZyBwb3J0YWwgaW50byBpdC4gVGhlIGdhbGxlcnkgc2hlbGwgYWxyZWFkeSBtb3VudHMgb25lIOKAlCB0aGlzIHNlY3Rpb24gZG9jdW1lbnRzIGl0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJtb3VudGVkIG9uY2UgYXQgdGhlIGFwcCByb290XCIgd2lkZT5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgPENvZGU+e1wiPE92ZXJsYXlSb290IC8+XCJ9PC9Db2RlPiByZW5kZXJzIHRoZSBwb3J0YWwgdGFyZ2V0IHRoZSBvdmVybGF5IHByaW1pdGl2ZXMgbmVlZC5cbiAgICAgICAgICBXaXRob3V0IGl0LCB0aGUgTW9kYWwgLyBUb2FzdCAvIENvbmZpcm1EaWFsb2cgc3BlY2ltZW5zIGFib3ZlIHdvdWxkIGhhdmUgbm93aGVyZSB0b1xuICAgICAgICAgIHJlbmRlci4gSXQgZHJhd3Mgbm90aGluZyBpdHNlbGY7IHRoZSBnYWxsZXJ5IHNoZWxsIG1vdW50cyB0aGUgc2luZ2xlIGxpdmUgaW5zdGFuY2UuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbl07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgYXBwIHJvb3Qg4oCUIGEgc2luZ2xlIHNjcm9sbGFibGUgcGFnZSBjYXRhbG9ndWluZyBldmVyeSBwb2xseS11aVxuICogcHJpbWl0aXZlIGluIGl0cyBjb25maWd1cmF0aW9ucy4gQW4gaW4tcGFnZSBuYXYganVtcHMgYmV0d2VlbiBzZWN0aW9uczsgYVxuICogdGhlbWUgdG9nZ2xlIGZvcmNlcyBsaWdodC9kYXJrIG9uIHRoZSBwYW5lbCBzdWJ0cmVlIHZpYSBgZGF0YS1wb2xseS10aGVtZWBcbiAqIHNvIGJvdGggcGFsZXR0ZXMgY2FuIGJlIGluc3BlY3RlZCB3aXRob3V0IGNoYW5naW5nIHRoZSBPUyBzZXR0aW5nLlxuICpcbiAqIFRoZSBvdmVybGF5IGhvc3RzIChPdmVybGF5Um9vdCAvIFRvYXN0LlZpZXdwb3J0IC8gQ29uZmlybURpYWxvZy5Ib3N0KSBhcmVcbiAqIG1vdW50ZWQgaGVyZSBvbmNlLCBzbyB0aGUgTW9kYWwsIFRvYXN0LCBhbmQgQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgaGF2ZSBhXG4gKiBwb3J0YWwgdGFyZ2V0IOKAlCB0aGUgc2FtZSB3aXJpbmcgYSByZWFsIGNvbnN1bWVyIGFwcCBkb2VzIGF0IGl0cyByb290LlxuICovXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2x1c3RlcixcbiAgQ29uZmlybURpYWxvZyxcbiAgTGF5b3V0LFxuICBPdmVybGF5Um9vdCxcbiAgU3VyZmFjZSxcbiAgVGV4dCxcbiAgVG9hc3QsXG59IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7IFRIRU1FUyB9IGZyb20gXCIuL2FjdGlvbnMudHNcIjtcbmltcG9ydCB7IEdBTExFUllfU0VDVElPTlMsIHR5cGUgR2FsbGVyeVNlY3Rpb24gfSBmcm9tIFwiLi9zcGVjaW1lbnMudHN4XCI7XG5pbXBvcnQgeyAkZ2FsbGVyeVRoZW1lIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKiBBIGNhcGl0YWxpc2VkIGxhYmVsIGZvciBhIHRoZW1lIG9wdGlvbi4gKi9cbmZ1bmN0aW9uIHRoZW1lTGFiZWwodGhlbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0aGVtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoZW1lLnNsaWNlKDEpO1xufVxuXG4vKiogT25lIGNhdGFsb2d1ZWQgY29tcG9uZW50OiBhIGxhYmVsbGVkIGxhbmRtYXJrIHdpdGggYSBncmlkIG9mIHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIFNlY3Rpb24ocHJvcHM6IHsgc2VjdGlvbjogR2FsbGVyeVNlY3Rpb24gfSkge1xuICBjb25zdCB7IHNlY3Rpb24gfSA9IHByb3BzO1xuICBjb25zdCBoZWFkaW5nSWQgPSBgJHtzZWN0aW9uLmlkfS1oZWFkaW5nYDtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgYXM9XCJzZWN0aW9uXCJcbiAgICAgIGlkPXtzZWN0aW9uLmlkfVxuICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgIGNsYXNzTmFtZT1cImdhbGxlcnktc2VjdGlvblwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRpbmdJZH1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICA8aDIgaWQ9e2hlYWRpbmdJZH0gY2xhc3M9XCJnYWxsZXJ5LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICB7c2VjdGlvbi50aXRsZX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAge3NlY3Rpb24uc3VtbWFyeX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgY29sdW1ucz1cInJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTRyZW0pLCAxZnIpKVwiXG4gICAgICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtzZWN0aW9uLnJlbmRlcigpfVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdhbGxlcnlBcHAoKSB7XG4gIGNvbnN0IHRoZW1lID0gJGdhbGxlcnlUaGVtZS52YWx1ZTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwiY2xhbXAodmFyKC0tcG9sbHktc3BhY2Utc20pLCAzdncsIHZhcigtLXBvbGx5LXNwYWNlLXhsKSlcIlxuICAgICAgZGF0YS1nYWxsZXJ5LXBhbmVsPVwidHJ1ZVwiXG4gICAgICBkYXRhLXBvbGx5LXRoZW1lPXt0aGVtZSA9PT0gXCJzeXN0ZW1cIiA/IHVuZGVmaW5lZCA6IHRoZW1lfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCI+XG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiZ2FsbGVyeS10aXRsZVwiPlBvbGx5IFVJIGdhbGxlcnk8L2gxPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgRXZlcnkgPFRleHQgd2VpZ2h0PVwibWVkaXVtXCI+QGZhaXJmb3gvcG9sbHkvdWk8L1RleHQ+IHByaW1pdGl2ZSwgaW4gaXRzIGNvbmZpZ3VyYXRpb25zIOKAlFxuICAgICAgICAgICAgYSByZWZlcmVuY2UgZm9yIGJ1aWxkaW5nIHBvbGx5IGFwcHMsIGFuZCBhIHNpbmdsZSBzdXJmYWNlIGZvciBhY2Nlc3NpYmlsaXR5IGFuZFxuICAgICAgICAgICAgdmlzdWFsLXJlZ3Jlc3Npb24gY2hlY2tzLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgICAgPFN1cmZhY2UgdmFyaWFudD1cImNhbGxvdXRcIiByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICAgIFRoZW1lXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB7VEhFTUVTLm1hcCgodCkgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXt0fVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGllcj17dCA9PT0gdGhlbWUgPyBcInByaW1hcnlcIiA6IFwidGVydGlhcnlcIn1cbiAgICAgICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6c2V0LXRoZW1lXCJcbiAgICAgICAgICAgICAgICBkYXRhLWFjdGlvbi10aGVtZT17dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17dGhlbWVMYWJlbCh0KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgPC9TdXJmYWNlPlxuXG4gICAgICAgIDxuYXYgYXJpYS1sYWJlbD1cIkNvbXBvbmVudHNcIj5cbiAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIHtHQUxMRVJZX1NFQ1RJT05TLm1hcCgoc2VjdGlvbikgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtzZWN0aW9uLmlkfVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGllcj1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICBocmVmPXtgIyR7c2VjdGlvbi5pZH1gfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtzZWN0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L25hdj5cblxuICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhsKVwiPlxuICAgICAgICAgIHtHQUxMRVJZX1NFQ1RJT05TLm1hcCgoc2VjdGlvbikgPT4gKFxuICAgICAgICAgICAgPFNlY3Rpb24ga2V5PXtzZWN0aW9uLmlkfSBzZWN0aW9uPXtzZWN0aW9ufSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvTGF5b3V0PlxuXG4gICAgICB7LyogTW91bnRlZCBvbmNlIHNvIHRoZSBvdmVybGF5IHNwZWNpbWVucyBoYXZlIGEgcG9ydGFsIHRhcmdldC4gKi99XG4gICAgICA8T3ZlcmxheVJvb3QgLz5cbiAgICAgIDxUb2FzdC5WaWV3cG9ydCAvPlxuICAgICAgPENvbmZpcm1EaWFsb2cuSG9zdCAvPlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSdzIGJyb3dzZXIgZW50cnkgcG9pbnQuIEJ1bmRsZWQgYnkgc2VydmVyLnRzIChvbmUgQnVuLmJ1aWxkIHBhc3MpXG4gKiDigJQgaXRzIHRyYW5zaXRpdmUgYC5tb2R1bGUuY3NzYCBpbXBvcnRzIHBsdXMgdGhlIGdsb2JhbCBzdHlsZXNoZWV0cyBiZWxvdyBjb21lXG4gKiBvdXQgYXMgYSBzaW5nbGUgQ1NTIGFydGlmYWN0IHRoZSBzZXJ2ZXIgc2VydmVzIGFsb25nc2lkZSB0aGlzIHNjcmlwdC5cbiAqXG4gKiBCb290IG1pcnJvcnMgYSByZWFsIGNvbnN1bWVyIGFwcDogYmluZCB0aGUgZGVtbyBmb3JtLCBpbnN0YWxsIHRoZSBkb2N1bWVudFxuICogZXZlbnQgZGVsZWdhdGlvbiB0aGF0IHJvdXRlcyBgZGF0YS1hY3Rpb25gIGNsaWNrcy9zdWJtaXRzIGludG8gdGhlIGdhbGxlcnknc1xuICogYWN0aW9uIHJlZ2lzdHJ5LCB0aGVuIHJlbmRlci4gVGhlIG92ZXJsYXkgaG9zdHMgbGl2ZSBpbnNpZGUgPEdhbGxlcnlBcHAgLz4uXG4gKi9cblxuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgaW5zdGFsbEV2ZW50RGVsZWdhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9BQ1RJT05TIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR2FsbGVyeUFwcCB9IGZyb20gXCIuL2dhbGxlcnktYXBwLnRzeFwiO1xuaW1wb3J0IHsgdHlwZSBHYWxsZXJ5U3RvcmVzLCBnYWxsZXJ5Rm9ybSB9IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpL3RoZW1lLmNzc1wiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpL3N0eWxlcy5jc3NcIjtcbmltcG9ydCBcIi4vZ2FsbGVyeS5jc3NcIjtcblxuY29uc3Qgc3RvcmVzOiBHYWxsZXJ5U3RvcmVzID0ge307XG5nYWxsZXJ5Rm9ybS5iaW5kU3RvcmVzKCgpID0+IHN0b3Jlcyk7XG5cbmluc3RhbGxFdmVudERlbGVnYXRpb24oYXN5bmMgKGRpc3BhdGNoKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBHQUxMRVJZX0FDVElPTlNbZGlzcGF0Y2guYWN0aW9uXTtcbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBhd2FpdCBoYW5kbGVyKHtcbiAgICAgIHN0b3JlcyxcbiAgICAgIGV2ZW50OiBkaXNwYXRjaC5ldmVudCxcbiAgICAgIGVsZW1lbnQ6IGRpc3BhdGNoLmVsZW1lbnQsXG4gICAgICBkYXRhOiBkaXNwYXRjaC5kYXRhLFxuICAgIH0pO1xuICB9XG59KTtcblxuY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBw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LEVBQUUsTUFBTSxRQUFRLElBQUUsR0FBRSxJQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsSUFBRSxJQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsS0FBSSxFQUFFLE9BQUssTUFBSyxFQUFFLElBQUksVUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsS0FBRztBQUFBLFFBQU0sT0FBTSxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsTUFBSSxNQUFLLEtBQVMsS0FBTjtBQUFBLFVBQVEsSUFBRyxFQUFFLE1BQUs7QUFBQSxZQUFDLEtBQUksRUFBRSxPQUFLLElBQUUsTUFBSSxJQUFJLEtBQU0sRUFBRSxZQUFMLEtBQWUsRUFBRTtBQUFBLGNBQWEsSUFBRSxFQUFFO0FBQUEsWUFBWSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUcsTUFBSyxFQUFFLE1BQUk7QUFBQSxVQUFDLEVBQUs7QUFBQSxZQUFDLEtBQUksSUFBRSxFQUFFLE9BQU87QUFBQSxjQUFLLEVBQUUsRUFBRSxFQUFFO0FBQUEsWUFBRSxFQUFFLENBQUM7QUFBQTtBQUFBLFFBQU87QUFBQSxZQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxRQUFNLEVBQUUsQ0FBQztBQUFBLFFBQUUsRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDO0FBQUE7QUFBQSxJQUFPO0FBQUEsTUFBTSxLQUFOLFFBQVMsRUFBRSxPQUFLLEVBQUUsT0FBSyxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksRUFBRSxFQUFFLEtBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxRQUFPLElBQUUsRUFBRSxXQUFTLEVBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFTLFlBQUU7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFD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LE9BQU8sS0FBRyxFQUFFLEdBQUcsVUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxJQUFHLEVBQUUsSUFBRSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBTyxXQUFFLENBQUMsR0FBRSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksS0FBRyxFQUFFLEdBQUcsSUFBRyxJQUFFLEVBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxJQUFFLE1BQUksTUFBSSxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBSSxJQUFFLENBQUMsR0FBRSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxJQUFJO0FBQUEsUUFBSSxPQUFNO0FBQUEsTUFBRyxJQUFJLElBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxPQUFPLEVBQUU7QUFBQSxPQUFJO0FBQUEsTUFBRSxJQUFHLEVBQUUsTUFBTSxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUU7QUFBQSxPQUFJO0FBQUEsUUFBRSxPQUFNLENBQUMsS0FBRyxFQUFFLEtBQUssTUFBSyxHQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUUsSUFBSSxJQUFFLEVBQUUsSUFBSSxVQUFRO0FBQUEsTUFBRSxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxFQUFFLEtBQUk7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFLEdBQUc7QUFBQSxVQUFHLEVBQUUsS0FBRyxFQUFFLEtBQUksRUFBRSxNQUFTLFdBQUUsTUFBSSxFQUFFLEdBQUcsT0FBSyxJQUFFO0FBQUEsUUFBRztBQUFBLE9BQUUsR0FBRSxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDLEtBQUc7QUFBQTtBQUFBLElBQUcsR0FBRSxNQUFJO0FBQUEsSUFBRyxJQUFJLElBQUUsR0FBRSx1QkFBc0IsSUFBRSxHQUFFO0FBQUEsSUFBb0IsR0FBRSxzQkFBb0IsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLFFBQUMsSUFBSSxJQUFFO0FBQUEsUUFBRSxJQUFPLFdBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsT0FBRyxHQUFFLHdCQUFzQjtBQUFBLEVBQUM7QUFBQSxFQUFDLE9BQU8sRUFBRSxPQUFLLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxDQUFDLEdBQUUsT0FBSyxHQUFFLEVBQUUsS0FBSSxDQUFDLE1BQUksRUFBRSxLQUFHLEdBQUUsRUFBRSxJQUFFLEdBQUUsR0FBRSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQUE7QUFBbUYsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU0sRUFBQyxTQUFRLEVBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQztBQUFBO0FBQXVOLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxPQUFPLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsRUFBRSxHQUFFLEVBQUUsTUFBSSxHQUFFLEVBQUUsTUFBSSxJQUFHLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU87QUFBQSxLQUFHLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxHQUFFLFFBQVEsRUFBRSxNQUFLLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sRUFBRSxJQUFFLEdBQUUsS0FBUyxFQUFFLE1BQVIsU0FBYSxFQUFFLEtBQUcsTUFBRyxFQUFFLElBQUksRUFBQyxJQUFHLEVBQUUsTUFBTSxTQUFPLEVBQUU7QUFBQTtBQUFrTyxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxFQUFFO0FBQUEsRUFBRSxJQUFHLENBQUMsRUFBRSxJQUFHO0FBQUEsSUFBQyxTQUFRLElBQUUsR0FBRSxJQUFXLE1BQVAsUUFBVSxDQUFDLEVBQUUsT0FBWSxFQUFFLE9BQVQ7QUFBQSxNQUFhLElBQUUsRUFBRTtBQUFBLElBQUcsSUFBSSxJQUFFLEVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQyxHQUFFLENBQUM7QUFBQSxJQUFHLEVBQUUsS0FBRyxNQUFJLEVBQUUsS0FBRyxNQUFJLEVBQUU7QUFBQSxFQUFJO0FBQUEsRUFBQyxPQUFPLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxTQUFRLEVBQUUsSUFBRSxHQUFFLE1BQU0sS0FBRztBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsRUFBRSxPQUFLO0FBQUEsTUFBRSxJQUFHO0FBQUEsUUFBQyxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUEsUUFBRSxPQUFNLEdBQUU7QUFBQSxRQUFDLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBQSxFQUFFO0FBQUE7QUFBRSxHQUFFLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUUsTUFBSyxNQUFHLEdBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxLQUFHLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsTUFBSSxFQUFFLElBQUksTUFBSyxNQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDLEdBQUUsS0FBRTtBQUFBLEVBQUUsSUFBSSxLQUFHLEtBQUUsRUFBRSxLQUFLO0FBQUEsRUFBSSxNQUFJLE9BQUksTUFBRyxFQUFFLE1BQUksQ0FBQyxHQUFFLEdBQUUsTUFBSSxDQUFDLEdBQUUsRUFBRSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLEVBQUUsUUFBTSxFQUFFLEtBQUcsRUFBRSxNQUFLLEVBQUUsSUFBRSxFQUFFLE1BQVM7QUFBQSxHQUFFLE1BQUksRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLEtBQUUsS0FBSSxLQUFFO0FBQUEsR0FBRyxHQUFFLFNBQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFJLElBQUUsRUFBRTtBQUFBLEVBQUksS0FBRyxFQUFFLFFBQU0sRUFBRSxJQUFJLElBQUksV0FBYSxHQUFFLEtBQUssQ0FBQyxNQUFaLEtBQWUsT0FBSSxHQUFFLDJCQUF5QixLQUFFLEdBQUUsMEJBQXdCLElBQUcsRUFBQyxJQUFHLEVBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLEVBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsSUFBTztBQUFBLEdBQUUsSUFBRyxLQUFFLEtBQUU7QUFBQSxHQUFNLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLE9BQU0sQ0FBQyxFQUFFLE1BQUksR0FBRSxDQUFDO0FBQUEsT0FBRTtBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLEVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQztBQUFBLE9BQUcsR0FBRSxJQUFFLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEdBQUcsR0FBRSxNQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFHO0FBQUEsTUFBQyxHQUFFLENBQUM7QUFBQSxNQUFFLE9BQU0sR0FBRTtBQUFBLE1BQUMsSUFBRTtBQUFBO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBUyxXQUFFLEtBQUcsR0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBSSxJQUFJLEtBQWMsT0FBTyx5QkFBbkI7QUFBeUMsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxHQUFFLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxhQUFhLENBQUMsR0FBRSxNQUFHLHFCQUFxQixDQUFDLEdBQUUs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QUFJLElBQUU7QUFBQSxNQUFDLElBQUUsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQU8sV0FBRSxHQUFFLElBQUUsR0FBTyxXQUFFLEdBQU8sV0FBRSxHQUFFLEVBQUM7QUFBQSxNQUFFLElBQVksR0FBRSxNQUFOO0FBQUEsUUFBUSxHQUFFLEVBQUUsSUFBRTtBQUFBLE1BQUUsR0FBRSxJQUFFO0FBQUEsTUFBRSxFQUFFLElBQUU7QUFBQSxNQUFFLElBQUcsS0FBRyxHQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsT0FBTztBQUFBLElBQUMsRUFBTSxTQUFRLEVBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLElBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxRQUFDLEVBQUUsRUFBRSxJQUFFLEVBQUU7QUFBQSxRQUFFLElBQVksRUFBRSxNQUFOO0FBQUEsVUFBUSxFQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLElBQUUsR0FBRTtBQUFBLFFBQUUsRUFBRSxJQUFPO0FBQUEsUUFBRSxHQUFFLEVBQUUsSUFBRTtBQUFBLFFBQUUsR0FBRSxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsT0FBTztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFVBQVUsUUFBTTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTTtBQUFBO0FBQUksR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxNQUFJLEtBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxJQUFDLEVBQUUsSUFBRTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQU87QUFBQSxTQUFFLFFBQVEsR0FBRTtBQUFBLFFBQUMsSUFBSTtBQUFBLFNBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLE9BQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxNQUFRLEdBQUosR0FBVSxHQUFKLE1BQUU7QUFBQSxJQUFJLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxHQUFFLFFBQVEsR0FBRTtBQUFBLFVBQUMsSUFBSTtBQUFBLFdBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLFNBQUU7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFlBQVUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsT0FBTSxJQUFFO0FBQUEsSUFBRSxLQUFPO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBQyxFQUFFLENBQUM7QUFBQSxjQUFFO0FBQUEsTUFBUSxLQUFFO0FBQUE7QUFBQSxLQUFJLEVBQUMsTUFBSyxNQUFLLENBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxVQUFRLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsV0FBUyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSyxRQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsU0FBTyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSztBQUFBO0FBQU8sR0FBRSxVQUFVLE9BQUssUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLEdBQU07QUFBQTtBQUFHLE9BQU8sZUFBZSxHQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxHQUFHLEtBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBRTtBQUFBLE1BQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsS0FBRyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBTyxPQUFKLEtBQVcsT0FBSjtBQUFBLFFBQU0sSUFBRyxFQUFFLE1BQUksSUFBRTtBQUFBLFVBQUMsRUFBRSxJQUFFO0FBQUEsVUFBRSxLQUFFLEVBQUMsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBQztBQUFBLFFBQUM7QUFBQTtBQUFBLE9BQUcsSUFBSTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJLElBQUc7QUFBQSxNQUFDLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxjQUFFO0FBQUEsTUFBUSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUU7QUFBQSxNQUFFLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFFLEVBQUUsSUFBRTtBQUFBLElBQUcsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLE1BQUMsRUFBRSxJQUFFO0FBQUEsTUFBRTtBQUFBLElBQUs7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLElBQU87QUFBQSxFQUFFLE9BQWUsTUFBSixXQUFNO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBUSxFQUFFLE1BQVAsSUFBUztBQUFBLE1BQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxRQUFRLEVBQUUsRUFBRSxJQUFFO0FBQUEsSUFBQyxFQUFNO0FBQUEsVUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxNQUFRLEVBQUUsSUFBTztBQUFBLElBQUUsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsSUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxHQUFFLEtBQUssTUFBVSxTQUFDO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFFLEtBQUU7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFRLEtBQUssSUFBUSxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBVSxLQUFLLE9BQVcsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBO0FBQUssR0FBRSxZQUFVLElBQUk7QUFBRSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQVEsS0FBRyxLQUFLLE1BQWI7QUFBQSxJQUFnQixPQUFNO0FBQUEsRUFBRyxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsS0FBSyxNQUFJO0FBQUEsSUFBRSxPQUFNO0FBQUEsRUFBRyxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUUsSUFBRyxLQUFLLElBQUUsS0FBRyxDQUFDLEdBQUUsSUFBSSxHQUFFO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLE9BQU07QUFBQSxFQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFFLElBQUc7QUFBQSxJQUFDLEdBQUUsSUFBSTtBQUFBLElBQUUsS0FBRTtBQUFBLElBQUssSUFBSSxJQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsSUFBRyxLQUFHLEtBQUssS0FBRyxLQUFLLE1BQUksS0FBTyxLQUFLLE1BQVQsR0FBVztBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxLQUFLLEtBQUc7QUFBQSxNQUFJLEtBQUs7QUFBQSxJQUFHO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEtBQUssSUFBRTtBQUFBLElBQUUsS0FBSyxLQUFHO0FBQUEsSUFBRyxLQUFLO0FBQUE7QUFBQSxFQUFJLEtBQUU7QUFBQSxFQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRyxPQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRyxTQUFRLElBQUUsS0FBSyxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxNQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUFDO0FBQUEsRUFBQyxHQUFFLFVBQVUsRUFBRSxLQUFLLE1BQUssQ0FBQztBQUFBO0FBQUcsR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxJQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUEsSUFBRSxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsTUFBQyxLQUFLLEtBQUc7QUFBQSxNQUFJLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxJQUFFLEtBQUssSUFBRztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRSxTQUFRLElBQUUsS0FBSyxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxNQUFFLEVBQUUsRUFBRSxFQUFFO0FBQUEsRUFBQztBQUFBO0FBQUcsT0FBTyxlQUFlLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQUUsSUFBWSxNQUFKO0FBQUEsSUFBTSxFQUFFLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxLQUFHLEtBQUs7QUFBQSxJQUFFLE1BQU0sS0FBSztBQUFBLEVBQUUsT0FBTyxLQUFLO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBRSxFQUFFLElBQU87QUFBQSxFQUFFLElBQWUsT0FBTyxLQUFuQixZQUFxQjtBQUFBLElBQUM7QUFBQSxJQUFJLElBQUksSUFBRTtBQUFBLElBQUUsS0FBTztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUMsRUFBRTtBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxFQUFFLEtBQUc7QUFBQSxNQUFHLEVBQUUsS0FBRztBQUFBLE1BQUUsR0FBRSxDQUFDO0FBQUEsTUFBRSxNQUFNO0FBQUEsY0FBRTtBQUFBLE1BQVEsS0FBRTtBQUFBLE1BQUUsR0FBRTtBQUFBO0FBQUEsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsRUFBRSxFQUFFLElBQU87QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsR0FBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFHLE9BQUk7QUFBQSxJQUFLLE1BQU0sSUFBSSxNQUFNLHFCQUFxQjtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFFO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEdBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFHLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBSyxJQUFHO0FBQUEsSUFBRSxHQUFFLEtBQUssSUFBSTtBQUFBO0FBQUUsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsRUFBRSxJQUFHO0FBQUEsSUFBQyxJQUFHLElBQUUsS0FBSztBQUFBLE1BQUU7QUFBQSxJQUFPLElBQVksS0FBSyxNQUFUO0FBQUEsTUFBVztBQUFBLElBQU8sSUFBSSxJQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsSUFBZSxPQUFPLEtBQW5CO0FBQUEsTUFBcUIsS0FBSyxJQUFFO0FBQUEsWUFBRTtBQUFBLElBQVEsRUFBRTtBQUFBO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRyxHQUFFLElBQUk7QUFBQSxFQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUU7QUFBQSxFQUFJLElBQUksSUFBRTtBQUFBLEVBQUUsS0FBRTtBQUFBLEVBQUssT0FBTyxHQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxJQUFFLEtBQUssSUFBRztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUU7QUFBQSxFQUFJO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssS0FBRztBQUFBLEVBQUUsSUFBRyxFQUFFLElBQUUsS0FBSztBQUFBLElBQUcsR0FBRSxJQUFJO0FBQUE7QUFBRyxHQUFFLFVBQVUsVUFBUSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsRUFBRSxFQUFFO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEVBQUUsRUFBRTtBQUFBLElBQUUsTUFBTTtBQUFBO0FBQUEsRUFBRSxJQUFJLElBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQUUsRUFBRSxPQUFPLFdBQVM7QUFBQSxFQUFFLE9BQU87QUFBQTs7O0FDQXgxSSxJQUFJO0FBQUosSUFBTTtBQUFOLElBQVE7QUFBUixJQUFVLEtBQWUsT0FBTyxVQUFwQixlQUE0QixDQUFDLENBQUMsT0FBTztBQUFqRCxJQUE2RSxLQUFFLENBQUM7QUFBaEYsSUFBa0YsS0FBRSxDQUFDO0FBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUUsS0FBSztBQUFBLENBQUUsRUFBRTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsRUFBRSxLQUFHLEVBQUUsS0FBSyxNQUFLLEVBQUUsTUFBSSxRQUFRLEdBQUUsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFO0FBQUEsSUFBQyxJQUFJLElBQUU7QUFBQSxJQUFFLEtBQU87QUFBQSxJQUFFLEVBQUU7QUFBQSxFQUFDO0FBQUEsRUFBQyxLQUFFLEtBQUcsRUFBRSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsTUFBSyxLQUFFLEVBQUUsTUFBSyxJQUFFLFVBQVUsRUFBQztBQUFBLEVBQUUsRUFBRSxRQUFNO0FBQUEsRUFBRSxJQUFJLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxHQUFFLEtBQUUsRUFBRTtBQUFBLElBQUksT0FBTSxLQUFFLEdBQUU7QUFBQSxNQUFHLElBQUcsR0FBRSxLQUFJO0FBQUEsUUFBQyxHQUFFLElBQUksUUFBTTtBQUFBLFFBQUU7QUFBQSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFLE1BQU07QUFBQSxNQUFNLE9BQVcsTUFBSixJQUFNLElBQU8sTUFBTCxPQUFPLEtBQUcsS0FBRztBQUFBLEtBQUcsR0FBRSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsS0FBSyxLQUFHLENBQUMsRUFBRSxFQUFFLEtBQUs7QUFBQSxLQUFFLEdBQUUsSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxJQUFHLEVBQUUsT0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFNLElBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxPQUFTLEVBQUUsSUFBSSxJQUFJLGFBQWQ7QUFBQSxVQUF1QixFQUFFLElBQUksSUFBSSxPQUFLO0FBQUEsTUFBQztBQUFBLEtBQUUsR0FBRSxJQUFFLEVBQUUsS0FBSztBQUFBLElBQUUsRUFBRSxLQUFLLElBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxFQUFFO0FBQUEsTUFBRSxFQUFFLEtBQUssSUFBSTtBQUFBO0FB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QUEsVUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLFVBQUcsSUFBWSxNQUFKLGFBQU8sRUFBRSxLQUFLLElBQUc7QUFBQSxZQUFDLEVBQUUsRUFBRTtBQUFBLFlBQUUsRUFBRSxLQUFRO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQSxNQUFLO0FBQUEsUUFBQyxJQUFFLENBQUM7QUFBQSxRQUFFLEVBQUUsSUFBRTtBQUFBO0FBQUEsTUFBRSxTQUFRLEtBQUssR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQVksTUFBSixXQUFNO0FBQUEsVUFBQyxJQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFFLEVBQUUsS0FBRztBQUFBLFFBQUMsRUFBTTtBQUFBLFlBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxTQUFRLEtBQUs7QUFBQSxRQUFFLEVBQUUsS0FBRyxFQUFFO0FBQUEsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsS0FBSyxLQUFZLEVBQUUsb0JBQU4sV0FBc0IsSUFBRSxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSztBQUFBLEVBQUUsT0FBTSxFQUFDLEdBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNO0FBQUEsSUFBRSxJQUFFLEVBQUUsS0FBSztBQUFBLEtBQUcsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsSUFBTSxJQUFHLE1BQUksR0FBRTtBQUFBLE1BQUMsSUFBTztBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUUsRUFBRSxLQUFHO0FBQUEsTUFBTyxTQUFTLEtBQU4sU0FBZSxNQUFMLFNBQWMsRUFBRSxPQUFSO0FBQUEsUUFBWSxFQUFFLGFBQWEsR0FBRSxDQUFDO0FBQUEsTUFBTztBQUFBLFVBQUUsZ0JBQWdCLENBQUM7QUFBQSxJQUFDLEVBQU07QUFBQSxVQUFPO0FBQUEsR0FBRSxFQUFDO0FBQUE7QUFBRSxHQUFFLFdBQVUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBYSxPQUFPLEVBQUUsUUFBbkIsVUFBd0I7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsSUFBSSxJQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsTUFBRSxJQUFHLEdBQUU7QUFBQSxRQUFDLEVBQUUsSUFBTztBQUFBLFFBQUUsU0FBUSxLQUFLLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsWUFBRSxFQUFFLEVBQUU7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQSxJQUFDLEVBQUUsT0FBVTtBQUFBLEVBQUMsRUFBSztBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxNQUFLLElBQUcsR0FBRTtBQUFBLFFBQUMsRUFBRSxPQUFVO0FBQUEsUUFBRSxFQUFFLEVBQUU7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLElBQUUsS0FBTyxNQUFKO0FBQUEsSUFBTSxFQUFFLFFBQU07QUFBQSxFQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsRUFBRSxVQUFVLHdCQUFzQixRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUs7QUFBQSxJQUFJLE9BQU07QUFBQSxFQUFHLElBQUksSUFBRSxLQUFLLE1BQUssSUFBRSxLQUFZLEVBQUUsTUFBTjtBQUFBLEVBQVEsU0FBUSxLQUFLO0FBQUEsSUFBRSxPQUFN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SUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUksS0FBSSxJQUFFLEVBQUUsUUFBTSxFQUFFO0FBQUEsUUFBSSxPQUFhLEVBQUUsT0FBUixTQUFjLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsTUFBSyxFQUFFLElBQUksR0FBRSxDQUFDO0FBQUE7QUFBQSxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUcsSUFBSSxLQUFFLEVBQUU7QUFBUSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTSxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFhLE9BQU8sRUFBRSxPQUFyQixjQUEwQixFQUFFLElBQUk7QUFBQSxHQUFFLEdBQUUsRUFBRSxJQUFJLE1BQUksUUFBYSxJQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRyxPQUFsQixTQUF3QixFQUFFLElBQUksUUFBTSxNQUFJLEVBQUUsSUFBSSxNQUFJLElBQUcsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLE1BQUksT0FBTSxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFFLElBQUc7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUcsTUFBSSxFQUFFLE1BQUksTUFBSyxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFFLEdBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLE1BQUksRUFBRSxPQUFLLEVBQUUsWUFBWSxFQUFFLEdBQUcsR0FBRSxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsSUFBSSxNQUFJLEtBQUk7QUFBQTtBQUFFLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxLQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBQTtBQUFLLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLE1BQUksRUFBRSxHQUFHO0FBQUEsRUFBSSxPQUFPLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxDQUFDO0FBQUE7QUFBbU4sU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFBO0FBQUssRUFBRSxVQUFRLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLEVBQUksTUFBSSxFQUFFLE1BQUksT0FBSSxLQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksR0FBRSxLQUFHLEtBQUcsRUFBRSxRQUFNLEVBQUUsT0FBSyxPQUFNLE1BQUcsR0FBRSxDQUFDO0FBQUEsSUFBSSxHQUFFLFlBQVUsSUFBSSxHQUFHLE1BQUksUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsS0FBSSxJQUFFO0FBQUEsRUFBVyxFQUFFLEtBQVIsU0FBWSxFQUFFLElBQUUsQ0FBQyxJQUFHLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLEVBQUUsR0FBRyxHQUFFLElBQUUsT0FBRyxJQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsS0FBRyxFQUFFLFFBQU0sSUFBRSxNQUFHLEVBQUUsTUFBSSxNQUFLLElBQUUsRUFBRSxDQUFDLElBQUUsRUFBRTtBQUFBO0FBQUEsRUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFFLElBQUksS0FBRSxFQUFFO0FBQUEsRUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFLLElBQUksSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSTtBQUFBLE1BQUMsSUFBRyxFQUFFLE1BQU0sS0FBSTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsTUFBTTtBQUFBLFFBQUksRUFBRSxJQUFJLElBQUksS0FBRyxHQUFFLEdBQUUsRUFBRSxJQUFJLEtBQUksRUFBRSxJQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFJO0FBQUEsTUFBRSxLQUFJLEVBQUUsU0FBUyxFQUFDLEtBQUksRUFBRSxNQUFJLEtBQUksQ0FBQyxFQUFFLElBQUUsRUFBRSxFQUFFLElBQUk7QUFBQSxRQUFHLEVBQUUsTUFBSSxJQUFFLEVBQUUsWUFBWTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUcsRUFBRSxTQUFPLEtBQUcsRUFBRSxPQUFLLEVBQUUsU0FBUyxFQUFDLEtBQUksRUFBRSxNQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEVBQUUsS0FBSyxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBVSx1QkFBcUIsUUFBUSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLFNBQU8sUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBRyxLQUFLLEtBQUk7QUFBQSxJQUFDLElBQUcsS0FBSyxJQUFJLEtBQUk7QUFBQSxNQUFDLElBQUksSUFBRSxTQUFTLGNBQWMsS0FBSyxHQUFFLElBQUUsS0FBSyxJQUFJLElBQUksR0FBRztBQUFBLE1BQUksS0FBSyxJQUFJLElBQUksS0FBRyxHQUFFLEtBQUssS0FBSSxHQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUc7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxPQUFLLEVBQUUsR0FBRSxNQUFLLEVBQUUsUUFBUTtBQUFBLEVBQUUsT0FBTyxNQUFJLEVBQUUsT0FBSyxNQUFLLENBQUMsRUFBRSxHQUFFLE1BQUssRUFBRSxNQUFJLE9BQUssRUFBRSxRQUFRLEdBQUUsQ0FBQztBQUFBO0FBQUcsSUFBSSxLQUFFLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFB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
5507
+ //# debugId=7CFCAE483969311B64756E2164756E21
5508
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjgrNmQ0ODBiOTNkNDk3ZDNhMS9ub2RlX21vZHVsZXMvcHJlYWN0L2Rpc3QvcHJlYWN0Lm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuOCs2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByZWFjdCtzaWduYWxzLWNvcmVAMS4xNC40L25vZGVfbW9kdWxlcy9AcHJlYWN0L3NpZ25hbHMtY29yZS9kaXN0L3NpZ25hbHMtY29yZS5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByZWFjdCtzaWduYWxzQDIuMTEuMys2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9AcHJlYWN0L3NpZ25hbHMvZGlzdC9zaWduYWxzLm1vZHVsZS5qcyIsICJzcmMvYWN0aW9ucy9lcnJvci50cyIsICJzcmMvYWN0aW9ucy9vdmVybGF5LnRzIiwgInNyYy9hY3Rpb25zL2V2ZW50LWRlbGVnYXRpb24udHMiLCAic3JjL2FjdGlvbnMvZm9ybS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuOCs2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9wcmVhY3QvanN4LXJ1bnRpbWUvZGlzdC9qc3hSdW50aW1lLm1vZHVsZS5qcyIsICJzcmMvYWN0aW9ucy9zdG9yZS50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvbkZvcm0udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzIiwgInNyYy9wb2xseS11aS9BY3Rpb25JbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL0xheW91dC50c3giLCAic3JjL3BvbGx5LXVpL0Ryb3Bkb3duLnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2VsZWN0LXRyaWdnZXIudHN4IiwgInNyYy9wb2xseS11aS9BY3Rpb25TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9CYWRnZS50c3giLCAic3JjL3BvbGx5LXVpL0J1dHRvbi50c3giLCAic3JjL3BvbGx5LXVpL1N1cmZhY2UudHN4IiwgInNyYy9wb2xseS11aS9DYXJkLnRzeCIsICJzcmMvcG9sbHktdWkvQ2hlY2tib3gudHN4IiwgInNyYy9wb2xseS11aS9DbHVzdGVyLnRzeCIsICJzcmMvcG9sbHktdWkvQ29kZS50c3giLCAic3JjL3BvbGx5LXVpL0NvbGxhcHNpYmxlLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuOCs2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMsYSxzLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxhKXt2YXIgcyxoLHAsdix5LF8sZz10JiZ0Ll9fa3x8dyxtPWwubGVuZ3RoO2ZvcihmPVQodSxsLGcsZixtKSxzPTA7czxtO3MrKyludWxsIT0ocD11Ll9fa1tzXSkmJihoPS0xIT1wLl9faSYmZ1twLl9faV18fGQscC5fX2k9cyxfPXEobixwLGgsaSxyLG8sZSxmLGMsYSksdj1wLl9fZSxwLnJlZiYmaC5yZWYhPXAucmVmJiYoaC5yZWYmJkooaC5yZWYsbnVsbCxwKSxhLnB1c2gocC5yZWYscC5fX2N8fHYscCkpLG51bGw9PXkmJm51bGwhPXYmJih5PXYpLDQmcC5fX3U/KGY9aihwLGYsbiksaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMsYT11Lmxlbmd0aCxzPWEsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixzKSkmJihzLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+YT9oLS06aTxhJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihzKWZvcihyPTA7cjxhO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSl7dmFyIHQsaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUpe2Zvcih0PW4uX19rLGk9MDt0JiZpPHQubGVuZ3RoO2krKyl0W2ldJiYodFtpXS5fXz1uLGw9aih0W2ldLGwsdSkpO3JldHVybiBsfW4uX19lIT1sJiYobCYmbi50eXBlJiYhbC5wYXJlbnROb2RlJiYobD0kKG4pKSxsPXUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxhPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8YSYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihhPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UocyxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVthXT10W2FdOih1W2FdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFthXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxhKXt2YXIgcyxoLHAsdix5LGQsXyxrLHgsTSxJLFAsQSxILFQsaixGPXUudHlwZTtpZih2b2lkIDAhPT11LmNvbnN0cnVjdG9yKXJldHVybiBudWxsOzEyOCZ0Ll9fdSYmKGM9ISEoMzImdC5fX3UpLG89W2Y9dS5fX2U9dC5fX2VdKSwocz1sLl9fYikmJnModSk7bjppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBGKXtoPWUubGVuZ3RoO3RyeXtpZih4PXUucHJvcHMsTT1GLnByb3RvdHlwZSYmRi5wcm90b3R5cGUucmVuZGVyLEk9KHM9Ri5jb250ZXh0VHlwZSkmJmlbcy5fX2NdLFA9cz9JP0kucHJvcHMudmFsdWU6cy5fXzppLHQuX19jP2s9KHA9dS5fX2M9dC5fX2MpLl9fPXAuX19FOihNP3UuX19jPXA9bmV3IEYoeCxQKToodS5fX2M9cD1uZXcgQyh4LFApLHAuY29uc3RydWN0b3I9RixwLnJlbmRlcj1RKSxJJiZJLnN1YihwKSxwLnN0YXRlfHwocC5zdGF0ZT17fSkscC5fX249aSx2PXAuX19kPSEwLHAuX19oPVtdLHAuX3NiPVtdKSxNJiZudWxsPT1wLl9fcyYmKHAuX19zPXAuc3RhdGUpLE0mJm51bGwhPUYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiYocC5fX3M9PXAuc3RhdGUmJihwLl9fcz1tKHt9LHAuX19zKSksbShwLl9fcyxGLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh4LHAuX19zKSkpLHk9cC5wcm9wcyxkPXAuc3RhdGUscC5fX3Y9dSx2KU0mJm51bGw9PUYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZudWxsIT1wLmNvbXBvbmVudFdpbGxNb3VudCYmcC5jb21wb25lbnRXaWxsTW91bnQoKSxNJiZudWxsIT1wLmNvbXBvbmVudERpZE1vdW50JiZwLl9faC5wdXNoKHAuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoTSYmbnVsbD09Ri5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJnghPT15JiZudWxsIT1wLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnAuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh4LFApLHUuX192PT10Ll9fdnx8IXAuX19lJiZudWxsIT1wLnNob3VsZENvbXBvbmVudFVwZGF0ZSYmITE9PT1wLnNob3VsZENvbXBvbmVudFVwZGF0ZSh4LHAuX19zLFApKXt1Ll9fdiE9dC5fX3YmJihwLnByb3BzPXgscC5zdGF0ZT1wLl9fcyxwLl9fZD0hMSksdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssdS5fX2suc29tZShmdW5jdGlvbihuKXtuJiYobi5fXz11KX0pLHcucHVzaC5hcHBseShwLl9faCxwLl9zYikscC5fc2I9W10scC5fX2gubGVuZ3RoJiZlLnB1c2gocCksZj0kKHQpO2JyZWFrIG59bnVsbCE9cC5jb21wb25lbnRXaWxsVXBkYXRlJiZwLmNvbXBvbmVudFdpbGxVcGRhdGUoeCxwLl9fcyxQKSxNJiZudWxsIT1wLmNvbXBvbmVudERpZFVwZGF0ZSYmcC5fX2gucHVzaChmdW5jdGlvbigpe3AuY29tcG9uZW50RGlkVXBkYXRlKHksZCxfKX0pfWlmKHAuY29udGV4dD1QLHAucHJvcHM9eCxwLl9fUD1uLHAuX19lPSExLEE9bC5fX3IsSD0wLE0pcC5zdGF0ZT1wLl9fcyxwLl9fZD0hMSxBJiZBKHUpLHM9cC5yZW5kZXIocC5wcm9wcyxwLnN0YXRlLHAuY29udGV4dCksdy5wdXNoLmFwcGx5KHAuX19oLHAuX3NiKSxwLl9zYj1bXTtlbHNlIGRve3AuX19kPSExLEEmJkEodSkscz1wLnJlbmRlcihwLnByb3BzLHAuc3RhdGUscC5jb250ZXh0KSxwLnN0YXRlPXAuX19zfXdoaWxlKHAuX19kJiYrK0g8MjUpO3Auc3RhdGU9cC5fX3MsbnVsbCE9cC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxwLmdldENoaWxkQ29udGV4dCgpKSksTSYmIXYmJm51bGwhPXAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihfPXAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoeSxkKSksVD1udWxsIT1zJiZzLnR5cGU9PT1TJiZudWxsPT1zLmtleT9FKHMucHJvcHMuY2hpbGRyZW4pOnMsZj1MKG4sZyhUKT9UOltUXSx1LHQsaSxyLG8sZSxmLGMsYSkscC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLHAuX19oLmxlbmd0aCYmZS5wdXNoKHApLGsmJihwLl9fRT1wLl9fPW51bGwpfWNhdGNoKG4pe2lmKGUubGVuZ3RoPWgsdS5fX3Y9bnVsbCxjfHxudWxsIT1vKXtpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztudWxsIT1vJiYob1tvLmluZGV4T2YoZildPW51bGwpLHUuX19lPWZ9ZWxzZSBpZihudWxsIT1vKWZvcihqPW8ubGVuZ3RoO2otLTspYihvW2pdKX1lbHNlIHUuX19lPXQuX19lO251bGw9PXUuX19rJiYodS5fX2s9dC5fX2t8fFtdKSxuLnRoZW58fEIodSksbC5fX2Uobix1LHQpfX1lbHNlIG51bGw9PW8mJnUuX192PT10Ll9fdj8odS5fX2s9dC5fX2ssdS5fX2U9dC5fX2UpOmY9dS5fX2U9Ryh0Ll9fZSx1LHQsaSxyLG8sZSxjLGEpO3JldHVybihzPWwuZGlmZmVkKSYmcyh1KSwxMjgmdS5fX3U/dm9pZCAwOmZ9ZnVuY3Rpb24gQihuKXtuJiYobi5fX2MmJihuLl9fYy5fX2U9ITApLG4uX19rJiZuLl9fay5zb21lKEIpKX1mdW5jdGlvbiBEKG4sdSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylKKHRbaV0sdFsrK2ldLHRbKytpXSk7bC5fX2MmJmwuX19jKHUsbiksbi5zb21lKGZ1bmN0aW9uKHUpe3RyeXtuPXUuX19oLHUuX19oPVtdLG4uc29tZShmdW5jdGlvbihuKXtuLmNhbGwodSl9KX1jYXRjaChuKXtsLl9fZShuLHUuX192KX19KX1mdW5jdGlvbiBFKG4pe3JldHVyblwib2JqZWN0XCIhPXR5cGVvZiBufHxudWxsPT1ufHxuLl9fYj4wP246ZyhuKT9uLm1hcChFKTp2b2lkIDAhPT1uLmNvbnN0cnVjdG9yP251bGw6bSh7fSxuKX1mdW5jdGlvbiBHKHUsdCxpLHIsbyxlLGYsYyxhKXt2YXIgcyxoLHAsdix5LHcsXyxtPWkucHJvcHN8fGQsaz10LnByb3BzLHg9dC50eXBlO2lmKFwic3ZnXCI9PXg/bz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI6XCJtYXRoXCI9PXg/bz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjpvfHwobz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiksbnVsbCE9ZSlmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKCh5PWVbc10pJiZcInNldEF0dHJpYnV0ZVwiaW4geT09ISF4JiYoeD95LmxvY2FsTmFtZT09eDozPT15Lm5vZGVUeXBlKSl7dT15LGVbc109bnVsbDticmVha31pZihudWxsPT11KXtpZihudWxsPT14KXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrKTt1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLHgsay5pcyYmayksYyYmKGwuX19tJiZsLl9fbSh0LGUpLGM9ITEpLGU9bnVsbH1pZihudWxsPT14KW09PT1rfHxjJiZ1LmRhdGE9PWt8fCh1LmRhdGE9ayk7ZWxzZXtpZihlPVwidGV4dGFyZWFcIj09eCYmbnVsbCE9ay5kZWZhdWx0VmFsdWU/bnVsbDplJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxzPTA7czx1LmF0dHJpYnV0ZXMubGVuZ3RoO3MrKyltWyh5PXUuYXR0cmlidXRlc1tzXSkubmFtZV09eS52YWx1ZTtmb3IocyBpbiBtKXk9bVtzXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PXM/cD15OlwiY2hpbGRyZW5cIj09c3x8cyBpbiBrfHxcInZhbHVlXCI9PXMmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09cyYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LHMsbnVsbCx5LG8pO2ZvcihzIGluIGspeT1rW3NdLFwiY2hpbGRyZW5cIj09cz92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1zP2g9eTpcInZhbHVlXCI9PXM/dz15OlwiY2hlY2tlZFwiPT1zP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW3NdPT09eXx8Tih1LHMseSxtW3NdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxhKSxudWxsIT1lKWZvcihzPWUubGVuZ3RoO3MtLTspYihlW3NdKTtjJiZcInRleHRhcmVhXCIhPXh8fChzPVwidmFsdWVcIixcInByb2dyZXNzXCI9PXgmJm51bGw9PXc/dS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTpudWxsIT13JiYodyE9PXVbc118fFwicHJvZ3Jlc3NcIj09eCYmIXd8fFwib3B0aW9uXCI9PXgmJnchPW1bc10pJiZOKHUscyx3LG1bc10sbykscz1cImNoZWNrZWRcIixudWxsIT1fJiZfIT11W3NdJiZOKHUscyxfLG1bc10sbykpfXJldHVybiB1fWZ1bmN0aW9uIEoobix1LHQpe3RyeXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fdTtpJiZuLl9fdSgpLGkmJm51bGw9PXV8fChuLl9fdT1uKHUpKX1lbHNlIG4uY3VycmVudD11fWNhdGNoKG4pe2wuX19lKG4sdCl9fWZ1bmN0aW9uIEsobix1LHQpe3ZhciBpLHI7aWYobC51bm1vdW50JiZsLnVubW91bnQobiksKGk9bi5yZWYpJiYoaS5jdXJyZW50JiZpLmN1cnJlbnQhPW4uX19lfHxKKGksbnVsbCx1KSksbnVsbCE9KGk9bi5fX2MpKXtpZihpLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtpLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobil7bC5fX2Uobix1KX1pLmJhc2U9aS5fX1A9aS5fX249bnVsbH1pZihpPW4uX19rKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSYmSyhpW3JdLHUsdHx8XCJmdW5jdGlvblwiIT10eXBlb2Ygbi50eXBlKTt0fHxiKG4uX19lKSxuLl9fYz1uLl9fPW4uX19lPXZvaWQgMH1mdW5jdGlvbiBRKG4sbCx1KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihuLHUpfWZ1bmN0aW9uIFIodSx0LGkpe3ZhciByLG8sZSxmO3Q9PWRvY3VtZW50JiYodD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLGwuX18mJmwuX18odSx0KSxvPShyPVwiZnVuY3Rpb25cIj09dHlwZW9mIGkpP251bGw6aSYmaS5fX2t8fHQuX19rLGU9W10sZj1bXSxxKHQsdT0oIXImJml8fHQpLl9faz1rKFMsbnVsbCxbdV0pLG98fGQsZCx0Lm5hbWVzcGFjZVVSSSwhciYmaT9baV06bz9udWxsOnQuZmlyc3RDaGlsZD9uLmNhbGwodC5jaGlsZE5vZGVzKTpudWxsLGUsIXImJmk/aTpvP28uX19lOnQuZmlyc3RDaGlsZCxyLGYpLEQoZSx1LGYpLHUucHJvcHMuY2hpbGRyZW49bnVsbH1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLGE9XCJfX2FcIitmLHM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscD1jLl9fO2Z1bmN0aW9uIHMobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEseShELG4pfWZ1bmN0aW9uIHkobix1LGkpe3ZhciBvPXModCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT0hMSxpPW8uX19jLnByb3BzIT09bjtpZihvLl9fYy5fX0guX18uc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dT0hMDt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksYyl7dmFyIGY9Yy5jYWxsKHRoaXMsbix0LHIpO3JldHVybiB1P2Z8fGk6Zn1yZXR1cm4hdXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBoKG4sdSl7dmFyIGk9cyh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cyh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXModCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cyh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1zKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cyh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxwJiZwKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51LG4udT12b2lkIDApfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLGggYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8seSBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEodj4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe3ZhciB0PWkuUztpZih0LnY9PT1pLnYpZm9yKHZhciBuPXQudDt2b2lkIDAhPT1uO249bi54KWlmKG4uaT09PWkuaSluLmk9dC5pO2k9aS5vfX0oKTt3aGlsZSh2b2lkIDAhPT1oKXt2YXIgbj1oO2g9dm9pZCAwO3MrKzt3aGlsZSh2b2lkIDAhPT1uKXt2YXIgcj1uLnU7bi51PXZvaWQgMDtuLmYmPS0zO2lmKCEoOCZuLmYpJiZ3KG4pKXRyeXtuLmMoKX1jYXRjaChuKXtpZighdCl7aT1uO3Q9ITB9fW49cn19cz0wO3YtLTtpZih0KXRocm93IGl9ZWxzZSB2LS19ZnVuY3Rpb24gbihpKXtpZih2PjApcmV0dXJuIGkoKTtlPSsrdTt2Kys7dHJ5e3JldHVybiBpKCl9ZmluYWxseXt0KCl9fXZhciByLG89dm9pZCAwO2Z1bmN0aW9uIGYoaSl7dmFyIHQ9byxuPXI7bz12b2lkIDA7cj12b2lkIDA7dHJ5e3JldHVybiBpKCl9ZmluYWxseXtvPXQ7cj1ufX12YXIgaD12b2lkIDAsdj0wLHM9MCx1PTAsZT0wLGM9dm9pZCAwLGQ9MDtmdW5jdGlvbiBhKGkpe2lmKHZvaWQgMCE9PW8pe3ZhciB0PWkubjtpZih2b2lkIDA9PT10fHx0LnQhPT1vKXt0PXtpOjAsUzppLHA6by5zLG46dm9pZCAwLHQ6byxlOnZvaWQgMCx4OnZvaWQgMCxyOnR9O2lmKHZvaWQgMCE9PW8ucylvLnMubj10O28ucz10O2kubj10O2lmKDMyJm8uZilpLlModCk7cmV0dXJuIHR9ZWxzZSBpZigtMT09PXQuaSl7dC5pPTA7aWYodm9pZCAwIT09dC5uKXt0Lm4ucD10LnA7aWYodm9pZCAwIT09dC5wKXQucC5uPXQubjt0LnA9by5zO3Qubj12b2lkIDA7by5zLm49dDtvLnM9dH1yZXR1cm4gdH19fWZ1bmN0aW9uIGwoaSx0KXt0aGlzLnY9aTt0aGlzLmk9MDt0aGlzLm49dm9pZCAwO3RoaXMudD12b2lkIDA7dGhpcy5sPTA7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1sLnByb3RvdHlwZS5icmFuZD1pO2wucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXt2YXIgdD10aGlzLG49dGhpcy50O2lmKG4hPT1pJiZ2b2lkIDA9PT1pLmUpe2kueD1uO3RoaXMudD1pO2lmKHZvaWQgMCE9PW4pbi5lPWk7ZWxzZSBmKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5XKXx8aS5jYWxsKHQpfSl9fTtsLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy50KXt2YXIgbj1pLmUscj1pLng7aWYodm9pZCAwIT09bil7bi54PXI7aS5lPXZvaWQgMH1pZih2b2lkIDAhPT1yKXtyLmU9bjtpLng9dm9pZCAwfWlmKGk9PT10aGlzLnQpe3RoaXMudD1yO2lmKHZvaWQgMD09PXIpZihmdW5jdGlvbigpe3ZhciBpO251bGw9PShpPXQuWil8fGkuY2FsbCh0KX0pfX19O2wucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihpKXt2YXIgdD10aGlzO3JldHVybiBqKGZ1bmN0aW9uKCl7dmFyIG49dC52YWx1ZTtmKGZ1bmN0aW9uKCl7cmV0dXJuIGkobil9KX0se25hbWU6XCJzdWJcIn0pfTtsLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9O2wucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWUrXCJcIn07bC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9O2wucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybiBmKGZ1bmN0aW9uKCl7cmV0dXJuIGkudmFsdWV9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGk9YSh0aGlzKTtpZih2b2lkIDAhPT1pKWkuaT10aGlzLmk7cmV0dXJuIHRoaXMudn0sc2V0OmZ1bmN0aW9uKGkpe2lmKGkhPT10aGlzLnYpe2lmKHM+MTAwKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpOyFmdW5jdGlvbihpKXtpZigwIT09diYmMD09PXMpaWYoaS5sIT09ZSl7aS5sPWU7Yz17UzppLHY6aS52LGk6aS5pLG86Y319fSh0aGlzKTt0aGlzLnY9aTt0aGlzLmkrKztkKys7disrO3RyeXtmb3IodmFyIG49dGhpcy50O3ZvaWQgMCE9PW47bj1uLngpbi50Lk4oKX1maW5hbGx5e3QoKX19fX0pO2Z1bmN0aW9uIHkoaSx0KXtyZXR1cm4gbmV3IGwoaSx0KX1mdW5jdGlvbiB3KGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubilpZih0LlMuaSE9PXQuaXx8IXQuUy5oKCl8fHQuUy5pIT09dC5pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF8oaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKXt2YXIgbj10LlMubjtpZih2b2lkIDAhPT1uKXQucj1uO3QuUy5uPXQ7dC5pPS0xO2lmKHZvaWQgMD09PXQubil7aS5zPXQ7YnJlYWt9fX1mdW5jdGlvbiBiKGkpe3ZhciB0PWkucyxuPXZvaWQgMDt3aGlsZSh2b2lkIDAhPT10KXt2YXIgcj10LnA7aWYoLTE9PT10Lmkpe3QuUy5VKHQpO2lmKHZvaWQgMCE9PXIpci5uPXQubjtpZih2b2lkIDAhPT10Lm4pdC5uLnA9cn1lbHNlIG49dDt0LlMubj10LnI7aWYodm9pZCAwIT09dC5yKXQucj12b2lkIDA7dD1yfWkucz1ufWZ1bmN0aW9uIHAoaSx0KXtsLmNhbGwodGhpcyx2b2lkIDAsdCk7dGhpcy54PWk7dGhpcy5zPXZvaWQgMDt0aGlzLmc9ZC0xO3RoaXMuZj00fXAucHJvdG90eXBlPW5ldyBsO3AucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXt0aGlzLmYmPS0zO2lmKDEmdGhpcy5mKXJldHVybiExO2lmKDMyPT0oMzYmdGhpcy5mKSlyZXR1cm4hMDt0aGlzLmYmPS01O2lmKHRoaXMuZz09PWQpcmV0dXJuITA7dGhpcy5nPWQ7dGhpcy5mfD0xO2lmKHRoaXMuaT4wJiYhdyh0aGlzKSl7dGhpcy5mJj0tMjtyZXR1cm4hMH12YXIgaT1vO3RyeXtfKHRoaXMpO289dGhpczt2YXIgdD10aGlzLngoKTtpZigxNiZ0aGlzLmZ8fHRoaXMudiE9PXR8fDA9PT10aGlzLmkpe3RoaXMudj10O3RoaXMuZiY9LTE3O3RoaXMuaSsrfX1jYXRjaChpKXt0aGlzLnY9aTt0aGlzLmZ8PTE2O3RoaXMuaSsrfW89aTtiKHRoaXMpO3RoaXMuZiY9LTI7cmV0dXJuITB9O3AucHJvdG90eXBlLlM9ZnVuY3Rpb24oaSl7aWYodm9pZCAwPT09dGhpcy50KXt0aGlzLmZ8PTM2O2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuUyh0KX1sLnByb3RvdHlwZS5TLmNhbGwodGhpcyxpKX07cC5wcm90b3R5cGUuVT1mdW5jdGlvbihpKXtpZih2b2lkIDAhPT10aGlzLnQpe2wucHJvdG90eXBlLlUuY2FsbCh0aGlzLGkpO2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mJj0tMzM7Zm9yKHZhciB0PXRoaXMuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5VKHQpfX19O3AucHJvdG90eXBlLk49ZnVuY3Rpb24oKXtpZighKDImdGhpcy5mKSl7dGhpcy5mfD02O2Zvcih2YXIgaT10aGlzLnQ7dm9pZCAwIT09aTtpPWkueClpLnQuTigpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7aWYoMSZ0aGlzLmYpdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7dmFyIGk9YSh0aGlzKTt0aGlzLmgoKTtpZih2b2lkIDAhPT1pKWkuaT10aGlzLmk7aWYoMTYmdGhpcy5mKXRocm93IHRoaXMudjtyZXR1cm4gdGhpcy52fX0pO2Z1bmN0aW9uIGcoaSx0KXtyZXR1cm4gbmV3IHAoaSx0KX1mdW5jdGlvbiBTKGkpe3ZhciBuPWkubTtpLm09dm9pZCAwO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3YrKzt2YXIgcj1vO289dm9pZCAwO3RyeXtuKCl9Y2F0Y2godCl7aS5mJj0tMjtpLmZ8PTg7bShpKTt0aHJvdyB0fWZpbmFsbHl7bz1yO3QoKX19fWZ1bmN0aW9uIG0oaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5VKHQpO2kueD12b2lkIDA7aS5zPXZvaWQgMDtTKGkpfWZ1bmN0aW9uIHgoaSl7aWYobyE9PXRoaXMpdGhyb3cgbmV3IEVycm9yKFwiT3V0LW9mLW9yZGVyIGVmZmVjdFwiKTtiKHRoaXMpO289aTt0aGlzLmYmPS0yO2lmKDgmdGhpcy5mKW0odGhpcyk7dCgpfWZ1bmN0aW9uIEUoaSx0KXt0aGlzLng9aTt0aGlzLm09dm9pZCAwO3RoaXMucz12b2lkIDA7dGhpcy51PXZvaWQgMDt0aGlzLmY9MzI7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZTtpZihyKXIucHVzaCh0aGlzKX1FLnByb3RvdHlwZS5jPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5TKCk7dHJ5e2lmKDgmdGhpcy5mKXJldHVybjtpZih2b2lkIDA9PT10aGlzLngpcmV0dXJuO3ZhciB0PXRoaXMueCgpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpdGhpcy5tPXR9ZmluYWxseXtpKCl9fTtFLnByb3RvdHlwZS5TPWZ1bmN0aW9uKCl7aWYoMSZ0aGlzLmYpdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7dGhpcy5mfD0xO3RoaXMuZiY9LTk7Uyh0aGlzKTtfKHRoaXMpO3YrKzt2YXIgaT1vO289dGhpcztyZXR1cm4geC5iaW5kKHRoaXMsaSl9O0UucHJvdG90eXBlLk49ZnVuY3Rpb24oKXtpZighKDImdGhpcy5mKSl7dGhpcy5mfD0yO3RoaXMudT1oO2g9dGhpc319O0UucHJvdG90eXBlLmQ9ZnVuY3Rpb24oKXt0aGlzLmZ8PTg7aWYoISgxJnRoaXMuZikpbSh0aGlzKX07RS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZCgpfTtmdW5jdGlvbiBqKGksdCl7dmFyIG49bmV3IEUoaSx0KTt0cnl7bi5jKCl9Y2F0Y2goaSl7bi5kKCk7dGhyb3cgaX12YXIgcj1uLmQuYmluZChuKTtyW1N5bWJvbC5kaXNwb3NlXT1yO3JldHVybiByfWZ1bmN0aW9uIEMoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLHI9dGhpcztyZXR1cm4gbihmdW5jdGlvbigpe3JldHVybiBmKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkocixbXS5zbGljZS5jYWxsKHQpKX0pfSl9fWZ1bmN0aW9uIE8oKXt2YXIgaT1yO3I9W107cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9cjtpZihyJiZpKWk9aS5jb25jYXQocik7cj1pO3JldHVybiB0fX12YXIgaz1mdW5jdGlvbihpKXtmb3IodmFyIHQgaW4gaSl7dmFyIG49aVt0XTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKWlbdF09QyhuKTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT09biYmIShcImJyYW5kXCJpbiBuKSlrKG4pfX07ZnVuY3Rpb24gVChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxuLG89TygpO3RyeXtuPWkuYXBwbHkodm9pZCAwLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9Y2F0Y2goaSl7cj12b2lkIDA7dGhyb3cgaX1maW5hbGx5e3Q9bygpfWsobik7bltTeW1ib2wuZGlzcG9zZV09QyhmdW5jdGlvbigpe2lmKHQpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXS5kaXNwb3NlKCk7dD12b2lkIDB9KTtyZXR1cm4gbn19ZXhwb3J0e3AgYXMgQ29tcHV0ZWQsRSBhcyBFZmZlY3QsbCBhcyBTaWduYWwsQyBhcyBhY3Rpb24sbiBhcyBiYXRjaCxnIGFzIGNvbXB1dGVkLFQgYXMgY3JlYXRlTW9kZWwsaiBhcyBlZmZlY3QseSBhcyBzaWduYWwsZiBhcyB1bnRyYWNrZWR9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMtY29yZS5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtDb21wb25lbnQgYXMgaSxvcHRpb25zIGFzIG4saXNWYWxpZEVsZW1lbnQgYXMgcixGcmFnbWVudCBhcyB0fWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VNZW1vIGFzIG8sdXNlUmVmIGFzIGYsdXNlRWZmZWN0IGFzIGV9ZnJvbVwicHJlYWN0L2hvb2tzXCI7aW1wb3J0e2VmZmVjdCBhcyB1LFNpZ25hbCBhcyBhLGNvbXB1dGVkIGFzIGMsc2lnbmFsIGFzIHYsYmF0Y2ggYXMgc31mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO2V4cG9ydHtTaWduYWwsYWN0aW9uLGJhdGNoLGNvbXB1dGVkLGNyZWF0ZU1vZGVsLGVmZmVjdCxzaWduYWwsdW50cmFja2VkfWZyb21cIkBwcmVhY3Qvc2lnbmFscy1jb3JlXCI7dmFyIGwsaCxkLHA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmISF3aW5kb3cuX19QUkVBQ1RfU0lHTkFMU19ERVZUT09MU19fLG09W10sXz1bXTt1KGZ1bmN0aW9uKCl7bD10aGlzLk59KSgpO2Z1bmN0aW9uIGcoaSxyKXtuW2ldPXIuYmluZChudWxsLG5baV18fGZ1bmN0aW9uKCl7fSl9ZnVuY3Rpb24gYihpKXtpZihkKXt2YXIgbj1kO2Q9dm9pZCAwO24oKX1kPWkmJmkuUygpfWZ1bmN0aW9uIHkoaSl7dmFyIG49dGhpcyx0PWkuZGF0YSxmPXVzZVNpZ25hbCh0KTtmLm5hbWU9XCJSZWFjdGl2ZURvbVwiO2YudmFsdWU9dDt2YXIgZT1vKGZ1bmN0aW9uKCl7dmFyIGk9bix0PW4uX192O3doaWxlKHQ9dC5fXylpZih0Ll9fYyl7dC5fX2MuX18kZnw9NDticmVha312YXIgbz1jKGZ1bmN0aW9uKCl7dmFyIGk9Zi52YWx1ZS52YWx1ZTtyZXR1cm4gMD09PWk/MDohMD09PWk/XCJcIjppfHxcIlwifSksZT1jKGZ1bmN0aW9uKCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoby52YWx1ZSkmJiFyKG8udmFsdWUpfSksYT11KGZ1bmN0aW9uKCl7dGhpcy5OPUY7aWYoZS52YWx1ZSl7dmFyIG49by52YWx1ZTtpZihpLl9fdiYmaS5fX3YuX19lJiYzPT09aS5fX3YuX19lLm5vZGVUeXBlKWkuX192Ll9fZS5kYXRhPW59fSksdj1uLl9fJHUuZDtuLl9fJHUuZD1mdW5jdGlvbigpe2EoKTt2LmNhbGwodGhpcyl9O3JldHVybltlLG9dfSxbXSksYT1lWzBdLHY9ZVsxXTtyZXR1cm4gYS52YWx1ZT92LnBlZWsoKTp2LnZhbHVlfXkuZGlzcGxheU5hbWU9XCJSZWFjdGl2ZVRleHROb2RlXCI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25maWd1cmFibGU6ITAsdmFsdWU6dm9pZCAwfSx0eXBlOntjb25maWd1cmFibGU6ITAsdmFsdWU6eX0scHJvcHM6e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybntkYXRhOntnZXQgdmFsdWUoKXtyZXR1cm4gaS52YWx1ZX19fX19LF9fYjp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjF9fSk7ZyhcIl9fYlwiLGZ1bmN0aW9uKGksbil7YigpO2g9dm9pZCAwO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByLHQ9bi5wcm9wcztmb3IodmFyIG8gaW4gdClpZihcImNoaWxkcmVuXCIhPT1vKXt2YXIgZj10W29dO2lmKGYgaW5zdGFuY2VvZiBhKXtpZighciluLl9fbnA9cj17fTtyW29dPWY7dFtvXT1mLnBlZWsoKX19fWkobil9KTtnKFwiX19yXCIsZnVuY3Rpb24oaSxuKXtpKG4pO2lmKG4udHlwZSE9PXQpe2IoKTt2YXIgcixvPW4uX19jO2lmKG8pe28uX18kZiY9LTI7aWYodm9pZCAwPT09KHI9by5fXyR1KSlvLl9fJHU9cj1mdW5jdGlvbihpLG4pe3ZhciByO3UoZnVuY3Rpb24oKXtyPXRoaXN9LHtuYW1lOm59KTtyLmM9aTtyZXR1cm4gcn0oZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG47aWYocCludWxsPT0obj10aGlzLnkpfHxuLmNhbGwodGhpcyk7aS5fXyRmfD0xO2kuc2V0U3RhdGUoe30pfX0obyksXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlP24udHlwZS5kaXNwbGF5TmFtZXx8bi50eXBlLm5hbWU6XCJcIil9aD1vO2Iocil9fSk7ZyhcIl9fZVwiLGZ1bmN0aW9uKGksbixyLHQpe2IoKTtoPXZvaWQgMDtpKG4scix0KX0pO2coXCJkaWZmZWRcIixmdW5jdGlvbihpLG4pe2IoKTtoPXZvaWQgMDt2YXIgcjtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiYocj1uLl9fZSkpe3ZhciB0PW4uX19ucCxvPW4ucHJvcHMsZj1yLlU7aWYoZilmb3IodmFyIGUgaW4gZil7dmFyIHU9ZltlXTtpZighKHZvaWQgMD09PXV8fHQmJmUgaW4gdCkpe3UuZCgpO2ZbZV09dm9pZCAwfX1pZih0KXtpZighZil7Zj17fTtyLlU9Zn1mb3IodmFyIGEgaW4gdCl7dmFyIGM9ZlthXSx2PXRbYV07aWYodm9pZCAwPT09Yyl7Yz13KHIsYSx2LG8pO2ZbYV09Y31lbHNlIGMubyh2LG8pfX19aShuKX0pO2Z1bmN0aW9uIHcoaSxuLHIsdCl7dmFyIG89biBpbiBpJiZ2b2lkIDA9PT1pLm93bmVyU1ZHRWxlbWVudCxmPXYocik7cmV0dXJue286ZnVuY3Rpb24oaSxuKXtmLnZhbHVlPWk7dD1ufSxkOnUoZnVuY3Rpb24oKXt0aGlzLk49Rjt2YXIgcj1mLnZhbHVlLnZhbHVlO2lmKHRbbl0hPT1yKXt0W25dPXI7aWYobylpW25dPXI7ZWxzZSBpZihudWxsIT1yJiYoITEhPT1yfHxcIi1cIj09PW5bNF0pKWkuc2V0QXR0cmlidXRlKG4scik7ZWxzZSBpLnJlbW92ZUF0dHJpYnV0ZShuKX19KX19ZyhcInVubW91bnRcIixmdW5jdGlvbihpLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByPW4uX19lO2lmKHIpe3ZhciB0PXIuVTtpZih0KXtyLlU9dm9pZCAwO2Zvcih2YXIgbyBpbiB0KXt2YXIgZj10W29dO2lmKGYpZi5kKCl9fX12YXIgZT1uLl9fbnA7aWYoZSl7dmFyIHU9bi5wcm9wcztmb3IodmFyIGEgaW4gZSl1W2FdPWVbYV19bi5fX25wPXZvaWQgMH1lbHNle3ZhciBjPW4uX19jO2lmKGMpe2MuX18kZnw9ODt2YXIgdj1jLl9fJHU7aWYodil7Yy5fXyR1PXZvaWQgMDt2LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzKW4uX18kZnw9MjtpKG4scix0KX0pO2kucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihpLG4pe2lmKHRoaXMuX19SKXJldHVybiEwO3ZhciByPXRoaXMuX18kdSx0PXImJnZvaWQgMCE9PXIucztmb3IodmFyIG8gaW4gbilyZXR1cm4hMDtpZih0aGlzLl9fZnx8XCJib29sZWFuXCI9PXR5cGVvZiB0aGlzLnUmJiEwPT09dGhpcy51KXt2YXIgZj0yJnRoaXMuX18kZjtpZighKHR8fGZ8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigxJnRoaXMuX18kZilyZXR1cm4hMH1lbHNle2lmKCEodHx8NCZ0aGlzLl9fJGYpKXJldHVybiEwO2lmKDMmdGhpcy5fXyRmKXJldHVybiEwfWZvcih2YXIgZSBpbiBpKWlmKFwiX19zb3VyY2VcIiE9PWUmJmlbZV0hPT10aGlzLnByb3BzW2VdKXJldHVybiEwO2Zvcih2YXIgdSBpbiB0aGlzLnByb3BzKWlmKCEodSBpbiBpKSlyZXR1cm4hMDtyZXR1cm4hMX07ZnVuY3Rpb24gdXNlU2lnbmFsKGksbil7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdihpLG4pfSxbXSl9ZnVuY3Rpb24gdXNlQ29tcHV0ZWQoaSxuKXt2YXIgcj1mKGkpO3IuY3VycmVudD1pO2guX18kZnw9NDtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBjKGZ1bmN0aW9uKCl7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfXZhciBrPVwidW5kZWZpbmVkXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/c2V0VGltZW91dDpmdW5jdGlvbihpKXt2YXIgbj1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKTtjYW5jZWxBbmltYXRpb25GcmFtZSh0KTtpKCl9LHI9c2V0VGltZW91dChuLDM1KSx0PXJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0scT1mdW5jdGlvbihpKXtxdWV1ZU1pY3JvdGFzayhmdW5jdGlvbigpe3F1ZXVlTWljcm90YXNrKGkpfSl9O2Z1bmN0aW9uIEEoKXtzKGZ1bmN0aW9uKCl7dmFyIGk7d2hpbGUoaT1tLnNoaWZ0KCkpbC5jYWxsKGkpfSl9ZnVuY3Rpb24gVCgpe2lmKDE9PT1tLnB1c2godGhpcykpKG4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxrKShBKX1mdW5jdGlvbiB4KCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9Xy5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIEYoKXtpZigxPT09Xy5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cSkoeCl9ZnVuY3Rpb24gdXNlU2lnbmFsRWZmZWN0KGksbil7dmFyIHI9ZihpKTtyLmN1cnJlbnQ9aTt2YXIgdD1oO2UoZnVuY3Rpb24oKXtyZXR1cm4gdShmdW5jdGlvbigpe3RoaXMuTj1UO2lmKCEodCYmOCZ0Ll9fJGYpKXJldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX1mdW5jdGlvbiBNKGkpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSxbXSk7ZShmdW5jdGlvbigpe3JldHVybiBuW1N5bWJvbC5kaXNwb3NlXX0sW25dKTtyZXR1cm4gbn1leHBvcnR7dXNlQ29tcHV0ZWQsTSBhcyB1c2VNb2RlbCx1c2VTaWduYWwsdXNlU2lnbmFsRWZmZWN0fTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBHbG9iYWwgZXJyb3Igc3VyZmFjZSBmb3IgYWN0aW9uIGhhbmRsZXJzLlxuICpcbiAqIEFjdGlvbnMgdGhhdCBmYWlsIHNldCB0aGUgZXJyb3JTdGF0ZSBzaWduYWwgdmlhIGBzdWJtaXRFcnJvcmA7IGEgYDxUb2FzdD5gXG4gKiBjb21wb25lbnQgY29uc3VtZXMgdGhhdCBzaWduYWwgYW5kIHJlbmRlcnMgYSBkaXNtaXNzYWJsZSBtZXNzYWdlLiBIYW5kbGVyc1xuICogdGhhdCBjYXRjaCBleHBlY3RlZCBmYWlsdXJlcyAodmFsaWRhdGlvbiwgcXVvdGEpIG1heSBjYWxsIGBzZXRFcnJvcmAgZGlyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvclNldmVyaXR5ID0gXCJlcnJvclwiIHwgXCJ3YXJuaW5nXCIgfCBcImluZm9cIjtcblxuZXhwb3J0IHR5cGUgRXJyb3JFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXZlcml0eTogRXJyb3JTZXZlcml0eTtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclN0YXRlID0gc2lnbmFsPEVycm9yRW50cnlbXT4oW10pO1xuXG5sZXQgbmV4dElkID0gMDtcbmZ1bmN0aW9uIGFsbG9jSWQoKTogc3RyaW5nIHtcbiAgbmV4dElkICs9IDE7XG4gIHJldHVybiBgcG9sbHktZXJyLSR7bmV4dElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBvcHRzOiB7IHNldmVyaXR5PzogRXJyb3JTZXZlcml0eTsgYWN0aW9uPzogc3RyaW5nIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cnk6IEVycm9yRW50cnkgPSB7XG4gICAgaWQ6IGFsbG9jSWQoKSxcbiAgICBtZXNzYWdlLFxuICAgIHNldmVyaXR5OiBvcHRzLnNldmVyaXR5ID8/IFwiZXJyb3JcIixcbiAgICBhY3Rpb246IG9wdHMuYWN0aW9uLFxuICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfTtcbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IFsuLi5lcnJvclN0YXRlLnZhbHVlLCBlbnRyeV07XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvclN0YXRlLnZhbHVlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIGVycm9yU3RhdGUudmFsdWUgPSBlcnJvclN0YXRlLnZhbHVlLmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gaWQpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGFuIGFjdGlvbidzIGNhdGNoIGJsb2NrLlxuICogTG9ncyB0aGUgYWN0aW9uIG5hbWUgKyBlcnJvciBhbmQgc3VyZmFjZXMgYSB1c2VyLXZpc2libGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Ym1pdEVycm9yKGFjdGlvbjogc3RyaW5nLCBlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICByZXR1cm4gc2V0RXJyb3IobWVzc2FnZSwgeyBhY3Rpb24sIHNldmVyaXR5OiBcImVycm9yXCIgfSk7XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheSByZWdpc3RyeS5cbiAqXG4gKiBUcmFja3MgdGhlIHN0YWNrIG9mIG9wZW4gb3ZlcmxheXMgKG1vZGFscywgcG9wb3ZlcnMsIGNvbmZpcm0gZGlhbG9ncykgc29cbiAqIEVzY2FwZSBjYW4gY2xvc2UgdGhlIHRvcG1vc3QgYW5kIGBkYXRhLW92ZXJsYXktaWRgLWJhc2VkIERPTSBzY2FucyBoYXZlXG4gKiBhIG1pcnJvciBpbiBtZW1vcnkuIEVhY2ggZW50cnkgc3RvcmVzIGFuIGlkIHBsdXMgYW4gb3B0aW9uYWwgY2xvc2VcbiAqIGNhbGxiYWNrOyBgY2xvc2VUb3BPdmVybGF5YCBpbnZva2VzIHRoZSBjYWxsYmFjayBhbmQgcG9wcyB0aGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBPdmVybGF5RW50cnkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3Qgc3RhY2sgPSBzaWduYWw8T3ZlcmxheUVudHJ5W10+KFtdKTtcblxuLyoqIEN1cnJlbnQgb3ZlcmxheSBzdGFjayBhcyBhIHJlYWQtb25seSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybGF5U3RhY2soKTogcmVhZG9ubHkgT3ZlcmxheUVudHJ5W10ge1xuICByZXR1cm4gc3RhY2sudmFsdWU7XG59XG5cbi8qKiBJcyBhbnkgb3ZlcmxheSBjdXJyZW50bHkgb3Blbj8gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPcGVuT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YWNrLnZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbi8qKiBUaGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICByZXR1cm4gc1tzLmxlbmd0aCAtIDFdO1xufVxuXG4vKiogUHVzaCBhbiBvdmVybGF5IG9udG8gdGhlIHN0YWNrLiBSZXR1cm5zIHRoZSBwb3BwZWQgZW50cnkgd2hlbiBjbG9zZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaE92ZXJsYXkoZW50cnk6IE92ZXJsYXlFbnRyeSk6IHZvaWQge1xuICBzdGFjay52YWx1ZSA9IFsuLi5zdGFjay52YWx1ZSwgZW50cnldO1xufVxuXG4vKiogUG9wIGEgc3BlY2lmaWMgb3ZlcmxheSBieSBpZCAob3IgdGhlIHRvcCBpZiBubyBpZCBnaXZlbikuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wT3ZlcmxheShpZD86IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzdGFjay52YWx1ZTtcbiAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHRvcCA9IHNbcy5sZW5ndGggLSAxXTtcbiAgICBzdGFjay52YWx1ZSA9IHMuc2xpY2UoMCwgLTEpO1xuICAgIHJldHVybiB0b3A7XG4gIH1cbiAgY29uc3QgaWR4ID0gcy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVudHJ5ID0gc1tpZHhdO1xuICBzdGFjay52YWx1ZSA9IFsuLi5zLnNsaWNlKDAsIGlkeCksIC4uLnMuc2xpY2UoaWR4ICsgMSldO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBDbG9zZSB0aGUgdG9wIG92ZXJsYXkgYnkgY2FsbGluZyBpdHMgb25DbG9zZSBhbmQgcG9wcGluZyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9wID0gdG9wT3ZlcmxheSgpO1xuICBpZiAoIXRvcCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdG9wLm9uQ2xvc2U/LigpO1xuICByZXR1cm4gcG9wT3ZlcmxheSh0b3AuaWQpO1xufVxuXG4vKiogUmVzZXQgdGhlIHN0YWNrLiBJbnRlbmRlZCBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRPdmVybGF5U3RhY2soKTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gW107XG59XG4iLAogICAgIi8qKlxuICogRXZlbnQgZGVsZWdhdGlvbiBjb3JlLlxuICpcbiAqIE9uZSBkb2N1bWVudCBsaXN0ZW5lciBkaXNwYXRjaGVzIGBkYXRhLWFjdGlvbmAgZXZlbnRzIHRvIHR5cGVkIGhhbmRsZXJzLlxuICogV2Fsa3MgdXAgdGhlIERPTSB3aXRoIGBjbG9zZXN0KCdbZGF0YS1hY3Rpb25dJylgLCBwYXJzZXMgYGRhdGEtYWN0aW9uLSpgXG4gKiBhdHRyaWJ1dGVzIGludG8gYSBjYW1lbENhc2Ugb2JqZWN0LCBhbmQgaGFuZHMgdGhlIGRpc3BhdGNoIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogRm9ybXMgYXJlIHNraXBwZWQgb24gY2xpY2sg4oCUIGEgYDxmb3JtIGRhdGEtYWN0aW9uPVwiLi4uXCI+YCByZXNwb25kcyB0b1xuICogc3VibWl0IG9ubHksIHNvIGNsaWNrcyBvbiBmb3JtIGNoaWxkcmVuIGRvbid0IGJ1YmJsZSBpbnRvIGl0cyBhY3Rpb24uXG4gKiBFc2NhcGUgY2xvc2VzIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgY2FsbGluZyB0aGUgb3ZlcmxheSByZWdpc3RyeS5cbiAqIEVudGVyL1NwYWNlIG9uIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyB3aXRoIGBkYXRhLWFjdGlvbmAgZmlyZSB0aGVcbiAqIGFjdGlvbiAoU3BhY2UgaXMgcHJldmVudGVkIHRvIHN0b3AgcGFnZSBzY3JvbGwpLiBDbGljayBvdXRzaWRlIGFueVxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFsc28gcG9wcyB0aGUgdG9wIG92ZXJsYXkuXG4gKi9cblxuaW1wb3J0IHsgY2xvc2VUb3BPdmVybGF5IGFzIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheS50c1wiO1xuXG4vKiogRWxlbWVudHMgdGhhdCBuYXRpdmVseSBmaXJlIGNsaWNrIG9uIEVudGVyL1NwYWNlLiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX1RBR1MgPSBuZXcgU2V0KFtcIkJVVFRPTlwiLCBcIkFcIiwgXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdKTtcblxuLyoqIEV2ZW50IHR5cGVzIHRoYXQgbWF5IHRyaWdnZXIgYSBkYXRhLWFjdGlvbiBkaXNwYXRjaC4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcImNsaWNrXCIsIFwic3VibWl0XCIsIFwiY2hhbmdlXCIsIFwiaW5wdXRcIl0pO1xuXG4vKiogUGFyc2VkIGFjdGlvbiBkaXNwYXRjaCDigJQgd2hhdCB0aGUgcnVudGltZSByZXNvbHZlcyBiZWZvcmUgaW52b2tpbmcgYSBoYW5kbGVyLiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uRGlzcGF0Y2ggPSB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgZXZlbnQ6IEV2ZW50O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQYXJzZSBgZGF0YS1hY3Rpb24tKmAgYXR0cmlidXRlcyBpbnRvIGNhbWVsQ2FzZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogYGRhdGEtYWN0aW9uLXRleHQtc2V0LWlkPVwiNDJcImAgYmVjb21lcyBgeyB0ZXh0U2V0SWQ6IFwiNDJcIiB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWN0aW9uRGF0YShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgYXR0ciBvZiBBcnJheS5mcm9tKGVsZW1lbnQuYXR0cmlidXRlcykpIHtcbiAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0dHIubmFtZVxuICAgICAgICAucmVwbGFjZShcImRhdGEtYWN0aW9uLVwiLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvLShbYS16XSkvZywgKF9tOiBzdHJpbmcsIGxldHRlcjogc3RyaW5nKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICBkYXRhW2tleV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBDbG9zZSB0aGUgdG9wbW9zdCBvdmVybGF5IGJ5IGRpc3BhdGNoaW5nIGBvdmVybGF5OmNsb3NlYCBvbiBpdHMgZWxlbWVudC5cbiAqIE92ZXJsYXlzIG1hcmsgdGhlbXNlbHZlcyB3aXRoIGBkYXRhLW92ZXJsYXktaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VUb3BPdmVybGF5KCk6IHZvaWQge1xuICBjb25zdCBvdmVybGF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgXCJbZGF0YS1vdmVybGF5LWlkXTpwb3BvdmVyLW9wZW4sIGRpYWxvZ1tkYXRhLW92ZXJsYXktaWRdW29wZW5dXCJcbiAgKTtcbiAgaWYgKG92ZXJsYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCB0b3BPdmVybGF5ID0gb3ZlcmxheXNbb3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gIGlmICghdG9wT3ZlcmxheSkgcmV0dXJuO1xuICB0b3BPdmVybGF5LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwib3ZlcmxheTpjbG9zZVwiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7IGlkOiB0b3BPdmVybGF5LmdldEF0dHJpYnV0ZShcImRhdGEtb3ZlcmxheS1pZFwiKSB9LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIERPTSBldmVudCB0byBhbiBBY3Rpb25EaXNwYXRjaCwgb3IgbnVsbCBpZiBubyBkYXRhLWFjdGlvbiBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFjdGlvbihldmVudDogRXZlbnQpOiBBY3Rpb25EaXNwYXRjaCB8IG51bGwge1xuICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtYWN0aW9uXVwiKTtcbiAgaWYgKCEoYWN0aW9uRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG51bGw7XG4gIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgYWN0aW9uRWxlbWVudC50YWdOYW1lID09PSBcIkZPUk1cIikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hY3Rpb25cIik7XG4gIGlmICghYWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBhY3Rpb24sXG4gICAgZWxlbWVudDogYWN0aW9uRWxlbWVudCxcbiAgICBldmVudCxcbiAgICBkYXRhOiBwYXJzZUFjdGlvbkRhdGEoYWN0aW9uRWxlbWVudCksXG4gIH07XG59XG5cbi8qKlxuICogSW5zdGFsbCBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgZm9yIHRoZSBkZWxlZ2F0aW9uIHN5c3RlbS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBldmVyeSBsaXN0ZW5lciBpdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uKFxuICBvbkRpc3BhdGNoOiAoZGlzcGF0Y2g6IEFjdGlvbkRpc3BhdGNoKSA9PiB2b2lkLFxuICBvcHRpb25zOiB7IG9uRXNjYXBlPzogKCkgPT4gdm9pZDsgb25PdXRzaWRlT3ZlcmxheUNsaWNrPzogKCkgPT4gdm9pZCB9ID0ge31cbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBoYW5kbGVBY3Rpb25FdmVudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHJlc29sdmVBY3Rpb24oZXZlbnQpO1xuICAgIGlmIChkaXNwYXRjaCkgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uRXNjYXBlKSB7XG4gICAgICAgIG9wdGlvbnMub25Fc2NhcGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5KCk7XG4gICAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5ID09PSBcIiBcIikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgIGlmIChJTlRFUkFDVElWRV9UQUdTLmhhcyh0YXJnZXQudGFnTmFtZSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgY29uc3QgY2xpY2tlZE92ZXJsYXkgPSBldmVudC50YXJnZXQuY2xvc2VzdChcIltkYXRhLW92ZXJsYXktaWRdXCIpO1xuICAgIGlmIChjbGlja2VkT3ZlcmxheSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdChcImJ1dHRvbltwb3BvdmVydGFyZ2V0XVwiKSkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaykge1xuICAgICAgb3B0aW9ucy5vbk91dHNpZGVPdmVybGF5Q2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlQWN0aW9uRXZlbnQpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGhhbmRsZU1vdXNlRG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gICAgfVxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGb3JtIHByaW1pdGl2ZS5cbiAqXG4gKiBgY3JlYXRlRm9ybWAgcmV0dXJucyBhIHR5cGVkIGZvcm0gc3RvcmU6IHBlci1maWVsZCBzaWduYWxzLCBhbiBhZ2dyZWdhdGVkXG4gKiB2YWx1ZXMgc2lnbmFsLCBvcGVuL2Nsb3NlL3N1Ym1pdCBtZXRob2RzLCBhbmQgdGhyZWUgYXV0by1yZWdpc3RlcmVkIGFjdGlvblxuICogaGFuZGxlcnMgKGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGApIHRoYXQgY2FsbGVycyBzcHJlYWRcbiAqIGludG8gdGhlaXIgZ2xvYmFsIGFjdGlvbiByZWdpc3RyeS5cbiAqXG4gKiBMaWZlY3ljbGU6XG4gKiAgIG9wZW4gIOKGkiByZXNldHMgZmllbGRzIHRvIGluaXRpYWxWYWx1ZXMsIGFwcGxpZXMgb25PcGVuIG92ZXJyaWRlcyxcbiAqICAgICAgICAgICBzZXRzIGlzT3BlbiA9IHRydWUsIHJlY29yZHMgZGF0YS1hY3Rpb24tKiBkYXRhIGluIG9wZW5QYXJhbXNcbiAqICAgdHlwaW5nIOKGkiB1bmNvbnRyb2xsZWQgaW5wdXRzIGtlZXAgdGhlaXIgb3duIHN0YXRlOyBjb250cm9sbGVkIGlucHV0c1xuICogICAgICAgICAgIHdyaXRlIGZpZWxkcy5YLnZhbHVlIGRpcmVjdGx5XG4gKiAgIHN1Ym1pdCDihpIgcmVhZHMgRm9ybURhdGEgZnJvbSB0aGUgZm9ybSBlbGVtZW50LCBtZXJnZXMgaW50byBmaWVsZHMsXG4gKiAgICAgICAgICAgcnVucyBvcHRpb25hbCB2YWxpZGF0ZSwgY2FsbHMgdXNlciBvblN1Ym1pdCB3aXRoIGZpbmFsIHZhbHVlcyxcbiAqICAgICAgICAgICBjbG9zZXMgb24gc3VjY2Vzcywgc2V0cyBlcnJvclN0YXRlIG9uIGZhaWx1cmVcbiAqICAgY2xvc2UgIOKGkiByZXNldHMgYW5kIHNldHMgaXNPcGVuID0gZmFsc2VcbiAqICAgZ3VhcmQgIOKGkiBhdXRvbm9tb3VzIGVmZmVjdDsgaWYgZ3VhcmQoKSByZXR1cm5zIGZhbHNlIHdoaWxlIG9wZW4sIGNsb3NlKClcbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCB0eXBlIFJlYWRvbmx5U2lnbmFsLCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgc3VibWl0RXJyb3IgfSBmcm9tIFwiLi9lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LnRzXCI7XG5cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgSFRNTEZvcm1FbGVtZW50IHtcbiAgaWYgKCF0YXJnZXQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50O1xuICB9XG4gIGNvbnN0IHQgPSB0YXJnZXQgYXMgdW5rbm93biBhcyB7IHRhZ05hbWU/OiB1bmtub3duIH07XG4gIHJldHVybiB0eXBlb2YgdC50YWdOYW1lID09PSBcInN0cmluZ1wiICYmIHQudGFnTmFtZSA9PT0gXCJGT1JNXCI7XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPiA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4gPSB7XG4gIHZhbHVlczogVFZhbHVlcztcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbmZpZzxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIC8qKiBVc2VkIGFzIGFjdGlvbiBuYW1lc3BhY2U6IGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGAuICovXG4gIG5hbWU6IHN0cmluZztcbiAgaW5pdGlhbFZhbHVlczogVFZhbHVlcztcbiAgb25TdWJtaXQ6IChjdHg6IEZvcm1TdWJtaXRDb250ZXh0PFRWYWx1ZXMsIFRTdG9yZXM+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEludm9rZWQgb24gb3BlbjsgcmV0dXJuIHBhcnRpYWwgb3ZlcnJpZGVzIHRvIHByZS1wb3B1bGF0ZSBmaWVsZHMuICovXG4gIG9uT3Blbj86IChjdHg6IEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPikgPT4gUGFydGlhbDxUVmFsdWVzPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiDihpIgZm9ybSBhdXRvLWNsb3NlcyAoZW50aXR5LWRlbGV0aW9uIGd1YXJkKS4gKi9cbiAgZ3VhcmQ/OiAoY3R4OiB7IHN0b3JlczogVFN0b3JlcyB9KSA9PiBib29sZWFuO1xuICAvKiogU3luY2hyb25vdXMgdmFsaWRhdGlvbi4gUmV0dXJuaW5nIGtleXMgYmxvY2tzIHN1Ym1pdC4gKi9cbiAgdmFsaWRhdGU/OiAodmFsdWVzOiBUVmFsdWVzKSA9PiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+PiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3RvcmU8VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+ID0ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzT3BlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZhbHVlczogUmVhZG9ubHlTaWduYWw8VFZhbHVlcz47XG4gIHJlYWRvbmx5IGZpZWxkczogeyBbSyBpbiBrZXlvZiBUVmFsdWVzXTogU2lnbmFsPFRWYWx1ZXNbS10+IH07XG4gIHJlYWRvbmx5IGVycm9yczogUmVhZG9ubHlTaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+O1xuICByZWFkb25seSBpc1N1Ym1pdHRpbmc6IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBvcGVuUGFyYW1zOiBSZWFkb25seVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgb3BlbihvdmVycmlkZT86IFBhcnRpYWw8VFZhbHVlcz4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICBjbG9zZSgpOiB2b2lkO1xuICBzdWJtaXQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBMYXRlLWJpbmRzIHN0b3JlczsgcmVxdWlyZWQgYmVmb3JlIGd1YXJkL29uT3Blbi9vblN1Ym1pdCBjYW4gYWNjZXNzIHN0b3Jlcy4gKi9cbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xuICAvKiogQWN0aW9uIGhhbmRsZXIgZW50cmllcy4gU3ByZWFkIGludG8gdGhlIHVzZXIncyBBY3Rpb25SZWdpc3RyeS4gKi9cbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4oXG4gIGNvbmZpZzogRm9ybUNvbmZpZzxUVmFsdWVzLCBUU3RvcmVzPlxuKTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+IHtcbiAgY29uc3QgZmllbGRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLmluaXRpYWxWYWx1ZXMpIGFzIHVua25vd24gYXMgKGtleW9mIFRWYWx1ZXMpW107XG5cbiAgY29uc3QgZmllbGRzID0ge30gYXMgdW5rbm93biBhcyB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgZmllbGRzW2tleV0gPSBzaWduYWwoY29uZmlnLmluaXRpYWxWYWx1ZXNba2V5XSk7XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlZDxUVmFsdWVzPigoKSA9PiB7XG4gICAgY29uc3QgdiA9IHt9IGFzIHVua25vd24gYXMgVFZhbHVlcztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgIHZba2V5XSA9IGZpZWxkc1trZXldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSk7XG5cbiAgY29uc3QgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+Pih7fSk7XG4gIGNvbnN0IG9wZW5QYXJhbXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGxldCBnZXRTdG9yZXNSZWY6ICgoKSA9PiBUU3RvcmVzKSB8IG51bGwgPSBudWxsO1xuICBsZXQgZGlzcG9zZUd1YXJkRWZmZWN0OiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXNPclRocm93KCk6IFRTdG9yZXMge1xuICAgIGlmICghZ2V0U3RvcmVzUmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGb3JtIFwiJHtjb25maWcubmFtZX1cIiB1c2VkIGJlZm9yZSBiaW5kU3RvcmVzKCkuIENhbGwgZm9ybS5iaW5kU3RvcmVzKCgpID0+IHlvdXJTdG9yZXMpIGF0IGFwcCBpbml0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZXNSZWYoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VG9Jbml0aWFsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgZmllbGRzW2tleV0udmFsdWUgPSBjb25maWcuaW5pdGlhbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBvcGVuIGFwcGxpZXMgdHdvIGxheWVycyBvZiBvdmVycmlkZXMgcGx1cyBvcHRpb25hbCBvbk9wZW4g4oCUIGJyYW5jaHkgYnkgZGVzaWduLlxuICBmdW5jdGlvbiBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pOiB2b2lkIHtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSBwYXJhbXM7XG4gICAgaWYgKGNvbmZpZy5vbk9wZW4gJiYgZ2V0U3RvcmVzUmVmKSB7XG4gICAgICBjb25zdCBvbk9wZW5PdmVycmlkZSA9IGNvbmZpZy5vbk9wZW4oeyBkYXRhOiBwYXJhbXMsIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpIH0pID8/IHt9O1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob25PcGVuT3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkIHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzdWJtaXQgZnVubmVscyBGb3JtRGF0YSwgdmFsaWRhdGUsIG9uU3VibWl0LCBlcnJvclN0YXRlLCBhbmQgY2xvc2Ug4oCUIG9uZS1wYXRoLXBlci1zdGFnZSBieSBkZXNpZ24uXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudCAmJiBpc0Zvcm1FbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKGV2ZW50LnRhcmdldCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZmQuZ2V0KGtleSBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gICAgICAgIGlmIChyYXcgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IFN0cmluZyhyYXcpIGFzIHVua25vd24gYXMgVFZhbHVlc1t0eXBlb2Yga2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVzLnZhbHVlO1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBjb25maWcudmFsaWRhdGU/LihjdXJyZW50KTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9ycyAmJiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlcnJvcnMudmFsdWUgPSB2YWxpZGF0aW9uRXJyb3JzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgICBpc1N1Ym1pdHRpbmcudmFsdWUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25maWcub25TdWJtaXQoe1xuICAgICAgICB2YWx1ZXM6IGN1cnJlbnQsXG4gICAgICAgIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpLFxuICAgICAgfSk7XG4gICAgICBjbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3VibWl0RXJyb3IoYCR7Y29uZmlnLm5hbWV9OnN1Ym1pdGAsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRTdG9yZXMoZ2V0U3RvcmVzOiAoKSA9PiBUU3RvcmVzKTogdm9pZCB7XG4gICAgZ2V0U3RvcmVzUmVmID0gZ2V0U3RvcmVzO1xuICAgIGRpc3Bvc2VHdWFyZEVmZmVjdD8uKCk7XG4gICAgY29uc3QgZ3VhcmRGbiA9IGNvbmZpZy5ndWFyZDtcbiAgICBpZiAoZ3VhcmRGbikge1xuICAgICAgZGlzcG9zZUd1YXJkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKCFndWFyZEZuKHsgc3RvcmVzOiBnZXRTdG9yZXMoKSB9KSkgY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFjdGlvbnM6IEFjdGlvblJlZ2lzdHJ5PFRTdG9yZXM+ID0ge1xuICAgIFtgJHtjb25maWcubmFtZX06b3BlbmBdOiAoeyBkYXRhIH0pID0+IHtcbiAgICAgIG9wZW4odW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06Y2xvc2VgXTogKCkgPT4ge1xuICAgICAgY2xvc2UoKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06c3VibWl0YF06IGFzeW5jICh7IGV2ZW50IH0pID0+IHtcbiAgICAgIGF3YWl0IHN1Ym1pdChldmVudCk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgIGlzT3BlbixcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRzLFxuICAgIGVycm9ycyxcbiAgICBpc1N1Ym1pdHRpbmcsXG4gICAgb3BlblBhcmFtcyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIHN1Ym1pdCxcbiAgICBiaW5kU3RvcmVzLFxuICAgIGFjdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQ29tcG9zZSBtYW55IGZvcm1zIGludG8gYSBzaW5nbGUgc2V0OiBtZXJnZWQgYWN0aW9ucywgY2xvc2VBbGwsIG9wZW5Gb3JtIHNpZ25hbC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVNldDxUU3RvcmVzPiA9IHtcbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG4gIG9wZW5Gb3JtOiBSZWFkb25seVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgY2xvc2VBbGwoKTogdm9pZDtcbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TZXQ8VFN0b3Jlcz4oXG4gIGZvcm1zOiByZWFkb25seSBGb3JtU3RvcmU8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz5bXVxuKTogRm9ybVNldDxUU3RvcmVzPiB7XG4gIGNvbnN0IG1lcmdlZDogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7fTtcbiAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihtZXJnZWQsIGZvcm0uYWN0aW9ucyk7XG4gIH1cblxuICBjb25zdCBvcGVuRm9ybSA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICAgIGlmIChmb3JtLmlzT3Blbi52YWx1ZSkgcmV0dXJuIGZvcm0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aW9uczogbWVyZ2VkLFxuICAgIG9wZW5Gb3JtLFxuICAgIGNsb3NlQWxsKCkge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmNsb3NlKCk7XG4gICAgfSxcbiAgICBiaW5kU3RvcmVzKGdldFN0b3Jlcykge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmJpbmRTdG9yZXMoZ2V0U3RvcmVzKTtcbiAgICB9LFxuICB9O1xufVxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyByLEZyYWdtZW50IGFzIGV9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciB0PS9bXCImPF0vO2Z1bmN0aW9uIG4ocil7aWYoMD09PXIubGVuZ3RofHwhMT09PXQudGVzdChyKSlyZXR1cm4gcjtmb3IodmFyIGU9MCxuPTAsbz1cIlwiLGY9XCJcIjtuPHIubGVuZ3RoO24rKyl7c3dpdGNoKHIuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDpmPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpmPVwiJmFtcDtcIjticmVhaztjYXNlIDYwOmY9XCImbHQ7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1uIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksbys9ZixlPW4rMX1yZXR1cm4gbiE9PWUmJihvKz1yLnNsaWNlKGUsbikpLG99dmFyIG89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxmPTAsaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHUoZSx0LG4sbyxpLHUpe3R8fCh0PXt9KTt2YXIgYSxjLHA9dDtpZihcInJlZlwiaW4gcClmb3IoYyBpbiBwPXt9LHQpXCJyZWZcIj09Yz9hPXRbY106cFtjXT10W2NdO3ZhciBsPXt0eXBlOmUscHJvcHM6cCxrZXk6bixyZWY6YSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1mLF9faTotMSxfX3U6MCxfX3NvdXJjZTppLF9fc2VsZjp1fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoYT1lLmRlZmF1bHRQcm9wcykpZm9yKGMgaW4gYSl2b2lkIDA9PT1wW2NdJiYocFtjXT1hW2NdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShsKSxsfWZ1bmN0aW9uIGEocil7dmFyIHQ9dShlLHt0cGw6cixleHByczpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX0pO3JldHVybiB0LmtleT10Ll9fdix0fXZhciBjPXt9LHA9L1tBLVpdL2c7ZnVuY3Rpb24gbChlLHQpe2lmKHIuYXR0cil7dmFyIGY9ci5hdHRyKGUsdCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpcmV0dXJuIGZ9aWYodD1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnZhbHVlT2Y/ci52YWx1ZU9mKCk6cn0odCksXCJyZWZcIj09PWV8fFwia2V5XCI9PT1lKXJldHVyblwiXCI7aWYoXCJzdHlsZVwiPT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBpPVwiXCI7Zm9yKHZhciB1IGluIHQpe3ZhciBhPXRbdV07aWYobnVsbCE9YSYmXCJcIiE9PWEpe3ZhciBsPVwiLVwiPT11WzBdP3U6Y1t1XXx8KGNbdV09dS5yZXBsYWNlKHAsXCItJCZcIikudG9Mb3dlckNhc2UoKSkscz1cIjtcIjtcIm51bWJlclwiIT10eXBlb2YgYXx8bC5zdGFydHNXaXRoKFwiLS1cIil8fG8udGVzdChsKXx8KHM9XCJweDtcIiksaT1pK2wrXCI6XCIrYStzfX1yZXR1cm4gZSsnPVwiJytuKGkpKydcIid9cmV0dXJuIG51bGw9PXR8fCExPT09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdHx8XCJvYmplY3RcIj09dHlwZW9mIHQ/XCJcIjohMD09PXQ/ZTplKyc9XCInK24oXCJcIit0KSsnXCInfWZ1bmN0aW9uIHMocil7aWYobnVsbD09cnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiBudWxsO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXtpZih2b2lkIDA9PT1yLmNvbnN0cnVjdG9yKXJldHVybiByO2lmKGkocikpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV09cyhyW2VdKTtyZXR1cm4gcn19cmV0dXJuIG4oXCJcIityKX1leHBvcnR7dSBhcyBqc3gsbCBhcyBqc3hBdHRyLHUgYXMganN4REVWLHMgYXMganN4RXNjYXBlLGEgYXMganN4VGVtcGxhdGUsdSBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIFN0b3JlIGJhc2UgKyBQcmVhY3QgY29udGV4dC5cbiAqXG4gKiBgY3JlYXRlU3RvcmVgIGlzIGEgdGhpbiBjb252ZW50aW9uLWVuZm9yY2VyOiBhIHR5cGVkIGJhZyBvZiBzaWduYWxzXG4gKiBwbHVzIG1ldGhvZHMuIEFwcHMgdXNlIGl0IHRvIGRlZmluZSBkb21haW4gc3RvcmVzIHdob3NlIG9ubHkgcHVibGljXG4gKiBtdXRhdGlvbiBzdXJmYWNlIGlzIG5hbWVkIG1ldGhvZHMgKGFjdGlvbnMgY2FsbCB0aGVtOyBjb21wb25lbnRzIHJlYWRcbiAqIHNpZ25hbHMgYW5kIGRpc3BhdGNoIGFjdGlvbnMpLiBObyBjbGV2ZXJuZXNzIOKAlCBhIG5hbWVkIHBhdHRlcm4gbW9yZVxuICogdGhhbiBhIGxpYnJhcnkuXG4gKlxuICogYFN0b3JlUHJvdmlkZXJgICsgYHVzZVN0b3Jlc2Agd2lyZSB0aGUgc3RvcmVzIGJhZyBpbnRvIFByZWFjdCBjb250ZXh0XG4gKiBzbyBjb21wb25lbnRzIGFuZCB0aGUgZGVsZWdhdGlvbiBydW50aW1lIGNhbiByZWFjaCBpdCB2aWEgYSBzaW5nbGUgaG9vay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgaGVscGVyOyBleGlzdHMgc28gZG9tYWluIHN0b3JlcyBoYXZlIGEgY2Fub25pY2FsIGNyZWF0aW9uXG4gKiBjYWxsIGV2ZW4gdGhvdWdoIHRoZSBiYWcgaXRzZWxmIGlzIGEgcGxhaW4gb2JqZWN0LiBDZW50cmFsaXNpbmcgaGVyZVxuICogbGV0cyB1cyBoYW5nIGFkZGl0aW9uYWwgYmVoYXZpb3VyIG9mZiB0aGUgY2FsbCBzaXRlIGxhdGVyIChkZWJ1Z1xuICogaW5zdHJ1bWVudGF0aW9uLCBkZXZ0b29scykgd2l0aG91dCBhIG1pZ3JhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KGluaXQ6IFQpOiBUIHtcbiAgcmV0dXJuIGluaXQ7XG59XG5cbmNvbnN0IFN0b3JlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8dW5rbm93bj4obnVsbCk7XG5cbmV4cG9ydCB0eXBlIFN0b3JlUHJvdmlkZXJQcm9wczxUU3RvcmVzPiA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3RvcmVQcm92aWRlcjxUU3RvcmVzPih7IGNoaWxkcmVuLCBzdG9yZXMgfTogU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+KSB7XG4gIHJldHVybiA8U3RvcmVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdG9yZXN9PntjaGlsZHJlbn08L1N0b3JlQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yZXM8VFN0b3Jlcz4oKTogVFN0b3JlcyB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoU3RvcmVDb250ZXh0KSBhcyB1bmtub3duIGFzIFRTdG9yZXMgfCBudWxsO1xuICBpZiAoY3R4ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlU3RvcmVzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBTdG9yZVByb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uRm9ybSDigJQgd3JhcHMgYSBuYXRpdmUgPGZvcm0+IHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuLlxuICpcbiAqIFJlbmRlcnMgPGZvcm0gZGF0YS1hY3Rpb249XCJ7Zm9ybS5uYW1lfTpzdWJtaXRcIj4gc28gdGhlIGluc3RhbGxlZFxuICogZXZlbnQgZGVsZWdhdGlvbiBjYXRjaGVzIHRoZSBzdWJtaXQgZXZlbnQgYW5kIGRpc3BhdGNoZXMgdG8gdGhlXG4gKiBmb3JtJ3MgYXV0by1yZWdpc3RlcmVkIDpzdWJtaXQgaGFuZGxlci4gYGFyaWEtYnVzeWAgbWlycm9ycyB0aGVcbiAqIGBpc1N1Ym1pdHRpbmdgIHNpZ25hbCBzbyBjb25zdW1lciBzdHlsaW5nIGNhbiByZXNwb25kIHdpdGhvdXQgZXh0cmFcbiAqIHdpcmluZy4gVGhlIGZvcm0gZWxlbWVudCBhbHNvIGV4cG9zZXMgYGRhdGEtcG9sbHktYWN0aW9uLWZvcm1gIGZvclxuICogc3RhYmxlIHNlbGVjdG9yIGhvb2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgRm9ybVN0b3JlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZm9ybS50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uRm9ybS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIGZvcm06IEZvcm1TdG9yZTxUVmFsdWVzLCBUU3RvcmVzPjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25Gb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgcHJvcHM6IEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzLCBUU3RvcmVzPlxuKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGZvcm0sIGNoaWxkcmVuLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgY29tYmluZWQgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiZm9ybVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJmb3JtXCJdO1xuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17Y29tYmluZWR9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1mb3JtPXtmb3JtLm5hbWV9XG4gICAgICBkYXRhLWFjdGlvbj17YCR7Zm9ybS5uYW1lfTpzdWJtaXRgfVxuICAgICAgYXJpYS1idXN5PXtmb3JtLmlzU3VibWl0dGluZy52YWx1ZX1cbiAgICAgIGFyaWEtbGFiZWw9e3Byb3BzW1wiYXJpYS1sYWJlbFwiXX1cbiAgICAgIGFyaWEtbGFiZWxsZWRieT17cHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl19XG4gICAgICBub1ZhbGlkYXRlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZm9ybT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGaXJlIGEgbmFtZWQgYWN0aW9uIHRocm91Z2ggdGhlIGdsb2JhbCBldmVudC1kZWxlZ2F0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBBY3Rpb24qIHByaW1pdGl2ZXMgKDxBY3Rpb25JbnB1dD4sIDxBY3Rpb25TZWxlY3Q+KSBjb21taXQgYnlcbiAqIGNsaWNraW5nIGEgZGV0YWNoZWQgYDxidXR0b24gZGF0YS1hY3Rpb249XCLigKZcIj5gIGNhcnJ5aW5nIGRhdGEtYWN0aW9uLSpcbiAqIGF0dHJpYnV0ZXM7IHRoZSBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXIgcm91dGVzIGl0IGludG8gdGhlXG4gKiBjb25zdW1lcidzIGFjdGlvbiByZWdpc3RyeSB3aXRoIG5vIGV4dHJhIHdpcmluZy4gQ2VudHJhbGlzZWQgaGVyZSBzb1xuICogZXZlcnkgQWN0aW9uKiBwcmltaXRpdmUgZGlzcGF0Y2hlcyBpZGVudGljYWxseS5cbiAqXG4gKiBLZXlzIGluIGBkYXRhYCBhcmUgY2FtZWxDYXNlIGFuZCBjb252ZXJ0ZWQgdG8gZGFzaC1jYXNlIGF0dHJpYnV0ZVxuICogbmFtZXMg4oCUIGBhY3Rpb25EYXRhPXt7IHRhc2tJZCB9fWAgYmVjb21lcyBgZGF0YS1hY3Rpb24tdGFzay1pZGAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGNvbnN0IGhpZGRlbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGhpZGRlbi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiLCBhY3Rpb24pO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhc2hLZXkgPSBrZXkucmVwbGFjZSgvW0EtWl0vZywgKG0pID0+IGAtJHttLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgaGlkZGVuLnNldEF0dHJpYnV0ZShgZGF0YS1hY3Rpb24tJHtkYXNoS2V5fWAsIHZhbHVlKTtcbiAgfVxuICBoaWRkZW4uc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gIGhpZGRlbi5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gIGhpZGRlbi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIGhpZGRlbi50YWJJbmRleCA9IC0xO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlbik7XG4gIHRyeSB7XG4gICAgaGlkZGVuLmNsaWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaGlkZGVuLnJlbW92ZSgpO1xuICB9XG59XG4iLAogICAgIi8qKlxuICogcG9sbHkjMTI1OiBkYXRhLSogLyBhcmlhLSogYXR0cmlidXRlIHBhc3N0aHJvdWdoIGZvciBVSSBwcmltaXRpdmVzLlxuICpcbiAqIFByaW1pdGl2ZXMgYWNjZXB0IGEgZml4ZWQgcHJvcCBzZXQuIFdpdGhvdXQgcGFzc3Rocm91Z2gsIGEgY29uc3VtZXJcbiAqIHRoYXQgbmVlZHMgYSBgZGF0YS0qYCB0ZXN0IGhvb2sgb3IgYW4gYGFyaWEtKmAgYXR0cmlidXRlIG9uIHRoZVxuICogcHJpbWl0aXZlJ3Mgb3duIGVsZW1lbnQgaGFzIHRvIHdyYXAgaXQgaW4gYW4gZXh0cmEgRE9NIG5vZGUg4oCUIGEgc21lbGwuXG4gKlxuICoge0BsaW5rIFBhc3N0aHJvdWdoQXR0cnN9IHdpZGVucyBhIHByaW1pdGl2ZSdzIHByb3BzIHRvIGFjY2VwdCBhbnlcbiAqIGBkYXRhLSpgIC8gYGFyaWEtKmAga2V5OyB7QGxpbmsgY29sbGVjdFBhc3N0aHJvdWdofSBnYXRoZXJzIHRoZW0gZm9yXG4gKiBzcHJlYWRpbmcgb250byB0aGUgcmVuZGVyZWQgcm9vdCBlbGVtZW50LiBTcHJlYWQgdGhlIHJlc3VsdCAqYmVmb3JlKlxuICogdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHNvIGEgY29uc3VtZXIga2V5IGNhbiBuZXZlciBvdmVycmlkZVxuICogb25lIHRoZSBwcmltaXRpdmUgc2V0cyBpdHNlbGYgKGBkYXRhLXBvbGx5LSpgLCBldGMuKS5cbiAqL1xuXG4vKiogSW5kZXggc2lnbmF0dXJlcyBsZXR0aW5nIGEgcHJpbWl0aXZlJ3MgcHJvcHMgYWNjZXB0IGFyYml0cmFyeVxuICogIGBkYXRhLSpgIGFuZCBgYXJpYS0qYCBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBzdGFuZGFyZCBgdGl0bGVgXG4gKiAgYXR0cmlidXRlIOKAlCBhIG5hdGl2ZSB0b29sdGlwIGlzIGEgRE9NIGhvb2ssIG5vdCBzdHlsaW5nLCBzbyBpdFxuICogIHJpZGVzIHRoZSBzYW1lIHBhc3N0aHJvdWdoIHBhdGggKHBvbGx5IzEzNSkuICovXG5leHBvcnQgdHlwZSBQYXNzdGhyb3VnaEF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKiogTmF0aXZlIHRvb2x0aXAgdGV4dCwgZm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuLyoqIEtleXMsIGJleW9uZCB0aGUgYGRhdGEtKmAgLyBgYXJpYS0qYCBwcmVmaXhlcywgdGhhdCBwYXNzIHRocm91Z2guICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChcImRhdGEtXCIpIHx8IGtleS5zdGFydHNXaXRoKFwiYXJpYS1cIikgfHwga2V5ID09PSBcInRpdGxlXCI7XG59XG5cbi8qKlxuICogQ29sbGVjdCBgZGF0YS0qYCAvIGBhcmlhLSpgIC8gYHRpdGxlYCBhdHRyaWJ1dGVzIGZyb20gYSBwcm9wcyBvYmplY3RcbiAqIHNvIHRoZXkgY2FuIGJlIHNwcmVhZCBvbnRvIGEgcHJpbWl0aXZlJ3Mgcm9vdCBlbGVtZW50LiBgdW5kZWZpbmVkYFxuICogdmFsdWVzIGFuZCBub24tYXR0cmlidXRlIHZhbHVlIHR5cGVzIChmdW5jdGlvbnMsIG9iamVjdHMpIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhc3N0aHJvdWdoKFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoIWlzUGFzc3Rocm91Z2hLZXkoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uSW5wdXQg4oCUIGR1YWwtbW9kZSB2aWV3L2VkaXQgaW5wdXQgd2l0aCBhY3Rpb24gZGlzcGF0Y2ggb24gY29tbWl0LlxuICpcbiAqIFZpZXcgbW9kZSByZW5kZXJzIHRoZSBjdXJyZW50IHZhbHVlIGFzIHRleHQgKG9wdGlvbmFsbHkgdGhyb3VnaCBhXG4gKiBjYWxsZXItc3VwcGxpZWQgYHJlbmRlclZpZXdgIGZvciBtYXJrZG93biwgcmljaCBmb3JtYXR0aW5nLCBldGMuKS5cbiAqIENsaWNrLCBFbnRlciwgb3IgU3BhY2UgZW50ZXJzIGVkaXQgbW9kZS4gRWRpdCBtb2RlIGlzIGEgbmF0aXZlIGlucHV0XG4gKiBvciB0ZXh0YXJlYTsgY29tbWl0IGZpcmVzIHRoZSBjb25maWd1cmVkIGFjdGlvbiB3aXRoIGBkYXRhLWFjdGlvbi12YWx1ZWBcbiAqIGFuZCBgZGF0YS1hY3Rpb24tZmllbGRgIHNldCBmcm9tIEZvcm1EYXRhLXNoYXBlIHNlbWFudGljcywgc28gdGhlXG4gKiBleGlzdGluZyBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXMgaXQgd2l0aCBubyBleHRyYSB3aXJpbmcuXG4gKlxuICogYHNhdmVPbmAgcGlja3MgdGhlIGNvbW1pdCB0cmlnZ2VyOlxuICogICBcImJsdXJcIiAgICAgICBjb21taXQgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXNcbiAqICAgXCJlbnRlclwiICAgICAgY29tbWl0IG9uIEVudGVyIChzaW5nbGUtbGluZSkgb3IgQ21kL0N0cmwrRW50ZXIgKG11bHRpLWxpbmUpXG4gKiAgIFwiY21kLWVudGVyXCIgIGNvbW1pdCBvbmx5IG9uIENtZC9DdHJsK0VudGVyXG4gKiAgIFwiZXhwbGljaXRcIiAgIG5ldmVyIGF1dG8tY29tbWl0IOKAlCBjYWxsZXIgd2lyZXMgYSBzYXZlIGJ1dHRvbiB3aXRoIGRhdGEtYWN0aW9uXG4gKiAgIFwiaW5wdXRcIiAgICAgIGNvbW1pdCBvbiBldmVyeSBrZXlzdHJva2Ug4oCUIGZvciBmaWx0ZXItYXMteW91LXR5cGUgZmllbGRzO1xuICogICAgICAgICAgICAgICAgdGhlIGZpZWxkIHN0YXlzIGluIGVkaXQgbW9kZSByYXRoZXIgdGhhbiB0b2dnbGluZyB0byB2aWV3XG4gKlxuICogYGlucHV0VHlwZWAgc2V0cyB0aGUgbmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IOKAlFxuICogXCJ0ZXh0XCIgKGRlZmF1bHQpLCBcImRhdGVcIiwgXCJ0aW1lXCIsIFwibnVtYmVyXCIsIGFuZCBmcmllbmRzIOKAlCBzbyBhIGRhdGVcbiAqIG9yIG51bWVyaWMgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtIGxpa2UgYW55IG90aGVyLlxuICpcbiAqIExheW91dC1zaGlmdC1mcmVlOiB2aWV3IGFuZCBlZGl0IG1vZGVzIHNoYXJlIHBhZGRpbmcsIGJvcmRlciB3aWR0aCxcbiAqIGZvbnQsIGFuZCBsaW5lLWhlaWdodCBzbyB0aGUgdG9nZ2xlIGNhdXNlcyBubyByZWZsb3cuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uSW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRTYXZlT24gPSBcImJsdXJcIiB8IFwiZW50ZXJcIiB8IFwiY21kLWVudGVyXCIgfCBcImV4cGxpY2l0XCIgfCBcImlucHV0XCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFZhcmlhbnQgPSBcInNpbmdsZVwiIHwgXCJtdWx0aVwiO1xuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZGF0ZVwiXG4gIHwgXCJkYXRldGltZS1sb2NhbFwiXG4gIHwgXCJ0aW1lXCJcbiAgfCBcIm1vbnRoXCJcbiAgfCBcIndlZWtcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBDdXJyZW50IHZhbHVlIHRvIHJlbmRlciBpbiB2aWV3IG1vZGUgYW5kIHNlZWQgdGhlIGVkaXQgYnVmZmVyLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gY29tbWl0LiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08bmV3IHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb21taXQgdHJpZ2dlci4gRGVmYXVsdDogXCJibHVyXCIuICovXG4gIHNhdmVPbj86IEFjdGlvbklucHV0U2F2ZU9uO1xuICB2YXJpYW50PzogQWN0aW9uSW5wdXRWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogQWN0aW9uSW5wdXRUeXBlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXh0cmEgZGF0YS1hY3Rpb24tKiBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgYXQgY29tbWl0IChlLmcuIGVudGl0eSBpZCkuICovXG4gIGFjdGlvbkRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogQ3VzdG9tIHZpZXcgcmVuZGVyZXIg4oCUIHJlY2VpdmVzIHZhbHVlLCByZXR1cm5zIFZOb2RlLiAqL1xuICByZW5kZXJWaWV3PzogKHZhbHVlOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICAvKiogTGFiZWwgYW5ub3VuY2VkIGJ5IHNjcmVlbiByZWFkZXJzIGZvciB0aGUgZWRpdCBhZmZvcmRhbmNlLiAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiB0d28gcmVuZGVyIGJyYW5jaGVzIHRpbWVzIHR3byB2YXJpYW50cyB0aW1lcyBmaXZlIHNhdmVPbiB0cmlnZ2VyczsgYnJhbmNoaW5nIGlzIGluaGVyZW50IHRvIHRoZSBwcmltaXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uSW5wdXQocHJvcHM6IEFjdGlvbklucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIGNvbnN0IHNhdmVPbiA9IHByb3BzLnNhdmVPbiA/PyBcImJsdXJcIjtcbiAgLy8gXCJpbnB1dFwiIG1vZGUgaXMgYSBwZXJtYW5lbnRseS1lZGl0YWJsZSBmaWx0ZXIgZmllbGQg4oCUIGl0IG5ldmVyIGhhcyBhXG4gIC8vIHZpZXcgbW9kZSB0byB0b2dnbGUgYmFjayB0bywgc28gaXQgc3RhcnRzIGluIGVkaXQuXG4gIGNvbnN0IGxpdmUgPSBzYXZlT24gPT09IFwiaW5wdXRcIjtcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8XCJ2aWV3XCIgfCBcImVkaXRcIj4obGl2ZSA/IFwiZWRpdFwiIDogXCJ2aWV3XCIpO1xuICBjb25zdCBbZHJhZnQsIHNldERyYWZ0XSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSBcInZpZXdcIikgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICB9LCBbcHJvcHMudmFsdWUsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIG9uIG1vdW50IGZvciBhIGxpdmUgZmlsdGVyIGZpZWxkOyBvbmx5IHB1bGwgZm9jdXNcbiAgICAvLyB3aGVuIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHRvZ2dsZWQgYSB2aWV3IGZpZWxkIGludG8gZWRpdCBtb2RlLlxuICAgIGlmIChtb2RlID09PSBcImVkaXRcIiAmJiAhbGl2ZSAmJiBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnNlbGVjdD8uKCk7XG4gICAgfVxuICB9LCBbbW9kZSwgbGl2ZV0pO1xuXG4gIGNvbnN0IGVudGVyRWRpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gICAgc2V0TW9kZShcImVkaXRcIik7XG4gIH0sIFtwcm9wcy5kaXNhYmxlZCwgcHJvcHMudmFsdWVdKTtcblxuICBjb25zdCBjb21taXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV4dCAhPT0gcHJvcHMudmFsdWUpIHtcbiAgICAgICAgZGlzcGF0Y2hBY3Rpb24ocHJvcHMuYWN0aW9uLCB7IC4uLihwcm9wcy5hY3Rpb25EYXRhID8/IHt9KSwgdmFsdWU6IG5leHQgfSk7XG4gICAgICB9XG4gICAgICAvLyBBIGxpdmUgZmlsdGVyIGZpZWxkIHN0YXlzIGVkaXRhYmxlOyBldmVyeSBvdGhlciB0cmlnZ2VyIHJldHVybnNcbiAgICAgIC8vIHRvIHZpZXcgbW9kZSBvbmNlIHRoZSB2YWx1ZSBpcyBjb21taXR0ZWQuXG4gICAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICAgIH0sXG4gICAgW3Byb3BzLmFjdGlvbiwgcHJvcHMuYWN0aW9uRGF0YSwgcHJvcHMudmFsdWUsIGxpdmVdXG4gICk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICB9LCBbcHJvcHMudmFsdWUsIGxpdmVdKTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eToga2V5Ym9hcmQgaGFuZGxlciBlbmNvZGVzIHRoZSBzYXZlT24gw5cgdmFyaWFudCBtYXRyaXguXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgY29uc3QgY21kID0gZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5O1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwic2luZ2xlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29tbWl0KGRyYWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwibXVsdGlcIiAmJiBjbWQpIHx8IHNhdmVPbiA9PT0gXCJjbWQtZW50ZXJcIikge1xuICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJyb290XCJdfSAke3Byb3BzLmNsYXNzTmFtZX1gIDogY2xhc3Nlc1tcInJvb3RcIl07XG5cbiAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmb3J3YXJkZWQgb250byB3aGljaGV2ZXIgZWxlbWVudCBpcyB0aGUgcm9vdFxuICAvLyBmb3IgdGhlIGN1cnJlbnQgbW9kZTsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbiBvbiBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAobW9kZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICBjb25zdCByZW5kZXJlZCA9IHByb3BzLnJlbmRlclZpZXcgPyBwcm9wcy5yZW5kZXJWaWV3KHByb3BzLnZhbHVlKSA6IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBwcm9wcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogPGJ1dHRvbj4gd291bGQgc3dhbGxvdyB0ZXh0IHNlbGVjdGlvbiBhbmQgYWRkIGRlZmF1bHQgc3R5bGluZzsgZGl2IHdpdGggcm9sZT1idXR0b24gaXMgdGhlIGlubGluZS1lZGl0IGlkaW9tLlxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGNsYXNzPXtgJHtjbGFzc05hbWV9ICR7Y2xhc3Nlc1tcInZpZXdcIl19YH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgICAgICBkYXRhLXZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgIHRhYkluZGV4PXtwcm9wcy5kaXNhYmxlZCA/IC0xIDogMH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3Byb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIn1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17cHJvcHMuZGlzYWJsZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17ZW50ZXJFZGl0fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgfHwgZS5rZXkgPT09IFwiIFwiKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbnRlckVkaXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc0VtcHR5ICYmIHByb3BzLnBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl19Pntwcm9wcy5wbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb25zdCBjb21tb24gPSB7XG4gICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgY2xhc3M6IGAke2NsYXNzZXNbXCJlZGl0XCJdfSAke2NsYXNzZXNbXCJyb290XCJdfWAsXG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFwiOiB0cnVlLFxuICAgIFwiZGF0YS1zdGF0ZVwiOiBcImVkaXRpbmdcIixcbiAgICBcImRhdGEtdmFyaWFudFwiOiB2YXJpYW50LFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogZHJhZnQsXG4gICAgb25JbnB1dDogKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIHNldERyYWZ0KG5leHQpO1xuICAgICAgaWYgKGxpdmUpIGNvbW1pdChuZXh0KTtcbiAgICB9LFxuICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJibHVyXCIpIGNvbW1pdChkcmFmdCk7XG4gICAgICBlbHNlIGlmICghbGl2ZSkgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBvbktleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gIH07XG5cbiAgaWYgKHZhcmlhbnQgPT09IFwibXVsdGlcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICAgIH19XG4gICAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudCA9IGVsO1xuICAgICAgfX1cbiAgICAgIHR5cGU9e3Byb3BzLmlucHV0VHlwZSA/PyBcInRleHRcIn1cbiAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIExheW91dCDigJQgdGhlIG9uZSBwcmltaXRpdmUgdGhhdCBvd25zIGxheW91dGluZyBjb25jZXJucy5cbiAqXG4gKiBFdmVyeSBvdGhlciBjb21wb25lbnQgaW4gQGZhaXJmb3gvcG9sbHkvdWkgKGFuZCBldmVyeSBjb25zdW1lciBhcHBcbiAqIHRoYXQgcnVucyBgcG9sbHkgcXVhbGl0eSBjc3MtbGF5b3V0YCkgcm91dGVzIGZsZXgvZ3JpZCBkZWNpc2lvbnNcbiAqIHRocm91Z2ggdGhpcyBjb21wb25lbnQuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gdGhlXG4gKiBzdHlsZXNoZWV0IGNhbiByZWFkIHRoZW0gdW5pZm9ybWx5IGFuZCBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlXG4gKiBhbnkgb2YgdGhlbSBpbiBtZWRpYSBxdWVyaWVzIHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1gsIHR5cGUgUmVmIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vTGF5b3V0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgaGVhZGVyLCBuYXYsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogQ1NTIGdyaWQgc3RydWN0dXJlLiAqL1xuICByb3dzPzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nO1xuICBhdXRvRmxvdz86IHN0cmluZztcbiAgYXV0b1Jvd3M/OiBzdHJpbmc7XG4gIGF1dG9Db2x1bW5zPzogc3RyaW5nO1xuXG4gIC8qKiBkaXNwbGF5OiBjb250ZW50cyDigJQgbGV0cyBjaGlsZHJlbiBwYXJ0aWNpcGF0ZSBpbiBhbiBhbmNlc3RvciBncmlkLiAqL1xuICBjb250ZW50cz86IGJvb2xlYW47XG4gIC8qKiBJbmhlcml0IHBhcmVudCBncmlkIHRyYWNrcyB2aWEgQ1NTIHN1YmdyaWQuICovXG4gIHN1YmdyaWQ/OiBib29sZWFuO1xuXG4gIC8qKiBTcGFjaW5nLiAqL1xuICBnYXA/OiBzdHJpbmc7XG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIFNpemluZy4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYXAgdGhlIGlubGluZSBzaXplIGFuZCBjZW50cmUgd2l0aGluIHRoZSBwYXJlbnQuIFR5cGljYWwgdmFsdWVzIHVzZSB0aGVcbiAgICogYC0tcG9sbHktbWVhc3VyZS0qYCB0b2tlbnMgKGUuZy4gXCJ2YXIoLS1wb2xseS1tZWFzdXJlLXBhZ2UpXCIgZm9yIGFuIGFwcFxuICAgKiBzaGVsbCwgXCJ2YXIoLS1wb2xseS1tZWFzdXJlLXByb3NlKVwiIGZvciBib2R5IGNvcHkpLiBBbnkgQ1NTIGxlbmd0aCB3b3Jrcy5cbiAgICovXG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIENvbnRhaW5lciBhbGlnbm1lbnQuICovXG4gIGp1c3RpZnlJdGVtcz86IHN0cmluZztcbiAgYWxpZ25JdGVtcz86IHN0cmluZztcbiAganVzdGlmeUNvbnRlbnQ/OiBzdHJpbmc7XG4gIGFsaWduQ29udGVudD86IHN0cmluZztcblxuICAvKiogU2VsZiBhbGlnbm1lbnQgKHdoZW4gdGhpcyBMYXlvdXQgaXMgYW4gaXRlbSBpbiBhIHBhcmVudCBncmlkKS4gKi9cbiAganVzdGlmeVNlbGY/OiBzdHJpbmc7XG4gIGFsaWduU2VsZj86IHN0cmluZztcblxuICAvKiogQ29sbGFwc2UgdG8gYSBzaW5nbGUgY29sdW1uIGF0IOKJpDY0MHB4LiAqL1xuICBzdGFja09uTW9iaWxlPzogYm9vbGVhbjtcblxuICAvKiogUmVuZGVyIGFzIGRpc3BsYXk6IGlubGluZS1ncmlkIHNvIHRoZSBMYXlvdXQgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC9jb250cm9scy4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleVVwPzogSlNYLktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgLyoqIFBvaW50ZXItZW50ZXIvbGVhdmUgb24gdGhlIGNvbnRhaW5lciBpdHNlbGYg4oCUIGEgaG92ZXItc2NvcGVkIGJlaGF2aW91clxuICAgKiBzdWNoIGFzIHBhdXNpbmcgYSB0aW1lciB3aGlsZSB0aGUgcG9pbnRlciBpcyBvdmVyIGEgc3RhY2suIFdpdGhvdXQgdGhlc2VcbiAgICogYSBjb21wb25lbnQgdGhhdCBuZWVkcyBvbmUgaGFzIHRvIHJlbmRlciBpdHMgb3duIGVsZW1lbnQgYW5kIHdyaXRlIGl0c1xuICAgKiBvd24gZ3JpZCwgd2hpY2ggaXMgdGhlIGxvb3Bob2xlIDxMYXlvdXQ+IGV4aXN0cyB0byBjbG9zZS4gKi9cbiAgb25Nb3VzZUVudGVyPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgb25Nb3VzZUxlYXZlPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgLyoqIFJlZiB0byB0aGUgcmVuZGVyZWQgZWxlbWVudC4gU2FtZSByZWFzb24gYXMgdGhlIGhhbmRsZXJzIGFib3ZlOiBhIGZvY3VzXG4gICAqIHRyYXAgb3IgYSBtZWFzdXJlbWVudCBuZWVkcyB0aGUgbm9kZSwgYW5kIHJlZnVzaW5nIGl0IGZvcmNlcyByYXcgQ1NTLlxuICAgKlxuICAgKiBOYW1lZCBgZWxlbWVudFJlZmAsIG5vdCBgcmVmYDogUHJlYWN0IGxpZnRzIGEgYHJlZmAgcHJvcCBvZmYgYSBmdW5jdGlvblxuICAgKiBjb21wb25lbnQgaW50byB0aGUgdm5vZGUgYW5kIG5ldmVyIHBhc3NlcyBpdCB0aHJvdWdoIHByb3BzLCBzbyBhIHBsYWluXG4gICAqIGByZWZgIGhlcmUgd291bGQgYmUgc2lsZW50bHkgZHJvcHBlZC4gQ2F1Z2h0IGJ5IE1vZGFsJ3Mgb3ZlcmxheSB0ZXN0IOKAlFxuICAgKiB0aGUgc3RhY2sgc3RvcHBlZCBwb3BwaW5nIGJlY2F1c2UgdGhlIGNhbGxiYWNrIG5ldmVyIHJhbi4gKi9cbiAgZWxlbWVudFJlZj86IFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogc2l4dGVlbiBvcHRpb25hbCBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nczsgZmxhdCBhbmQgbGluZWFyLlxuZXhwb3J0IGZ1bmN0aW9uIExheW91dChwcm9wczogTGF5b3V0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwiZGl2XCIsXG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRlbnRzLFxuICAgIHN1YmdyaWQsXG4gICAgZ2FwLFxuICAgIHBhZGRpbmcsXG4gICAgaGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhJbmxpbmVTaXplLFxuICAgIGp1c3RpZnlJdGVtcyxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGp1c3RpZnlDb250ZW50LFxuICAgIGFsaWduQ29udGVudCxcbiAgICBqdXN0aWZ5U2VsZixcbiAgICBhbGlnblNlbGYsXG4gICAgYXV0b0Zsb3csXG4gICAgYXV0b1Jvd3MsXG4gICAgYXV0b0NvbHVtbnMsXG4gICAgc3RhY2tPbk1vYmlsZSxcbiAgICBpbmxpbmUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIG9uS2V5VXAsXG4gICAgb25Nb3VzZUVudGVyLFxuICAgIG9uTW91c2VMZWF2ZSxcbiAgICBlbGVtZW50UmVmLFxuICAgIHJvbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmIChjb250ZW50cykge1xuICAgIHN0eWxlW1wiZGlzcGxheVwiXSA9IFwiY29udGVudHNcIjtcbiAgfSBlbHNlIGlmIChzdWJncmlkKSB7XG4gICAgc3R5bGVbXCItLWwtY29sXCJdID0gXCIxIC8gLTFcIjtcbiAgICBzdHlsZVtcIi0tbC1jb2xzXCJdID0gXCJzdWJncmlkXCI7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICB9IGVsc2Uge1xuICAgIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tbC1wXCJdID0gcGFkZGluZztcbiAgICBpZiAoaGVpZ2h0KSBzdHlsZVtcIi0tbC1oXCJdID0gaGVpZ2h0O1xuICAgIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1sLW1oXCJdID0gbWluSGVpZ2h0O1xuICAgIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tbC1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICAgIGlmIChyb3dzKSBzdHlsZVtcIi0tbC1yb3dzXCJdID0gcm93cztcbiAgICBpZiAoY29sdW1ucykgc3R5bGVbXCItLWwtY29sc1wiXSA9IGNvbHVtbnM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICAgIGlmIChqdXN0aWZ5SXRlbXMpIHN0eWxlW1wiLS1sLWppXCJdID0ganVzdGlmeUl0ZW1zO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGp1c3RpZnlDb250ZW50KSBzdHlsZVtcIi0tbC1qY1wiXSA9IGp1c3RpZnlDb250ZW50O1xuICAgIGlmIChhbGlnbkNvbnRlbnQpIHN0eWxlW1wiLS1sLWFjXCJdID0gYWxpZ25Db250ZW50O1xuICAgIGlmIChhdXRvRmxvdykgc3R5bGVbXCItLWwtZmxvd1wiXSA9IGF1dG9GbG93O1xuICAgIGlmIChhdXRvUm93cykgc3R5bGVbXCItLWwtYXJvd3NcIl0gPSBhdXRvUm93cztcbiAgICBpZiAoYXV0b0NvbHVtbnMpIHN0eWxlW1wiLS1sLWFjb2xzXCJdID0gYXV0b0NvbHVtbnM7XG4gIH1cbiAgaWYgKGp1c3RpZnlTZWxmKSBzdHlsZVtcIi0tbC1qc1wiXSA9IGp1c3RpZnlTZWxmO1xuICBpZiAoYWxpZ25TZWxmKSBzdHlsZVtcIi0tbC1hc1wiXSA9IGFsaWduU2VsZjtcblxuICBjb25zdCBiYXNlUGFydHMgPSBbY2xhc3Nlc1tcImxheW91dFwiXV07XG4gIGlmIChpbmxpbmUpIGJhc2VQYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoc3RhY2tPbk1vYmlsZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcInN0YWNrT25Nb2JpbGVcIl0pO1xuICBjb25zdCBiYXNlQ2xhc3MgPSBiYXNlUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCBjb21iaW5lZCA9IGNvbnRlbnRzID8gY2xhc3NOYW1lIDogY2xhc3NOYW1lID8gYCR7YmFzZUNsYXNzfSAke2NsYXNzTmFtZX1gIDogYmFzZUNsYXNzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzc05hbWU6IGNvbWJpbmVkLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VFbnRlcixcbiAgICAgIG9uTW91c2VMZWF2ZSxcbiAgICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAgIHJvbGUsXG4gICAgICB0YWJJbmRleCxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICBcImRhdGEtcG9sbHktbGF5b3V0XCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIERyb3Bkb3duIOKAlCB0cmlnZ2VyIGJ1dHRvbiArIHBvcG92ZXIgbWVudSB1c2luZyB0aGUgbmF0aXZlIFBvcG92ZXIgQVBJLlxuICpcbiAqIEEgc2hvd24gcG9wb3ZlciBpcyBwcm9tb3RlZCB0byB0aGUgYnJvd3NlcidzIHRvcCBsYXllciwgd2hlcmUgQ1NTXG4gKiBwb3NpdGlvbmluZyByZXNvbHZlcyBhZ2FpbnN0IHRoZSB2aWV3cG9ydCByYXRoZXIgdGhhbiB0aGUgYC5kcm9wZG93bmBcbiAqIHdyYXBwZXIg4oCUIHNvIHRoZSBtZW51IGNhbm5vdCBiZSBwbGFjZWQgd2l0aCBgcG9zaXRpb246IGFic29sdXRlYFxuICogYWxvbmUuIEluc3RlYWQgaXQgaXMgcGlubmVkIHdpdGggYHBvc2l0aW9uOiBmaXhlZGAgYW5kIGNvb3JkaW5hdGVzXG4gKiBtZWFzdXJlZCBmcm9tIHRoZSB0cmlnZ2VyOyBzZWUgYHBvc2l0aW9uTWVudWAgYmVsb3cgKGlzc3VlICMxMjgpLlxuICpcbiAqIFRoZSBtZW51IGVsZW1lbnQgZ2V0cyBgcG9wb3Zlcj1cImF1dG9cImAgYW5kIGEgdW5pcXVlIGBkYXRhLW92ZXJsYXktaWRgLlxuICogYGNsb3NlVG9wT3ZlcmxheSgpYCBmcm9tIEBmYWlyZm94L3BvbGx5L2FjdGlvbnMgZmluZHMgdGhlIHRvcG1vc3RcbiAqIGBbZGF0YS1vdmVybGF5LWlkXWAgZWxlbWVudCBhbmQgZGlzcGF0Y2hlcyBgb3ZlcmxheTpjbG9zZWAg4oCUIHRoZVxuICogRHJvcGRvd24gbGlzdGVucyBmb3IgdGhhdCBldmVudCBhbmQgbWlycm9ycyBpdCBvbnRvIHRoZSBgaXNPcGVuYFxuICogc2lnbmFsLiBJbiBzaW5nbGUtc2VsZWN0IG1vZGUsIGNsaWNraW5nIHRoZSBtZW51IGNsb3NlcyBpdDsgaW5cbiAqIG11bHRpLXNlbGVjdCBtb2RlLCB0aGUgbWVudSBzdGF5cyBvcGVuIHNvIHRoZSBjb25zdW1lciBjYW4gcGlja1xuICogc2V2ZXJhbCBpdGVtcy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFNpZ25hbCwgdXNlU2lnbmFsRWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ecm9wZG93bi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5cbmV4cG9ydCB0eXBlIERyb3Bkb3duUHJvcHMgPSB7XG4gIGlzT3BlbjogU2lnbmFsPGJvb2xlYW4+O1xuICB0cmlnZ2VyOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIHRyaWdnZXIgPGJ1dHRvbj4gaW4gcGxhY2Ugb2YgRHJvcGRvd24ncyBvd25cbiAgICogZGVmYXVsdC4gTGV0cyBhIGNvbXBvc2luZyBjb21wb25lbnQgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSBzdHlsZVxuICAgKiB0aGUgc2luZ2xlIGludGVyYWN0aXZlIGVsZW1lbnQgZGlyZWN0bHksIHdpdGggbm8gc3R5bGVkIG5vZGVcbiAgICogbmVzdGVkIGluc2lkZSB0aGUgYnV0dG9uLiBUaGUgdHJpZ2dlciBhbHNvIGNhcnJpZXMgYVxuICAgKiBgZGF0YS1vcGVuPVwidHJ1ZXxmYWxzZVwiYCBhdHRyaWJ1dGUgbWlycm9yaW5nIGBpc09wZW5gLCBzbyB0aGVcbiAgICogY2xhc3MgY2FuIHN0eWxlIG9wZW4tc3RhdGUgYWZmb3JkYW5jZXMgKGUuZy4gYSByb3RhdGluZyBjYXJldCkuXG4gICAqL1xuICB0cmlnZ2VyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKiogRGlzYWJsZXMgdGhlIHRyaWdnZXIgPGJ1dHRvbj4uICovXG4gIHRyaWdnZXJEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCBvbiB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gU2VsZWN0L0FjdGlvblNlbGVjdFxuICAgKiBwYXNzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBzbyBhIHRydW5jYXRlZCB0cmlnZ2VyIHN0aWxsIHJldmVhbHMgaXRzXG4gICAqIGZ1bGwgdmFsdWUgb24gaG92ZXIuXG4gICAqL1xuICB0cmlnZ2VyVGl0bGU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxubGV0IGRyb3Bkb3duQ291bnRlciA9IDA7XG5cbi8qKiBHYXAgaW4gcHggdGhlIG1lbnUgbGVhdmVzIGJldHdlZW4gaXRzZWxmIGFuZCB0aGUgdHJpZ2dlci4gKi9cbmNvbnN0IE1FTlVfR0FQID0gNDtcbi8qKiBNaW5pbXVtIGdhcCBpbiBweCB0aGUgbWVudSBrZWVwcyBmcm9tIGV2ZXJ5IHZpZXdwb3J0IGVkZ2UuICovXG5jb25zdCBWSUVXUE9SVF9QQURESU5HID0gODtcblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duKHByb3BzOiBEcm9wZG93blByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIHRyaWdnZXIsXG4gICAgY2hpbGRyZW4sXG4gICAgYWxpZ24gPSBcImxlZnRcIixcbiAgICBtdWx0aVNlbGVjdCA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICB0cmlnZ2VyQ2xhc3NOYW1lLFxuICAgIHRyaWdnZXJEaXNhYmxlZCA9IGZhbHNlLFxuICAgIHRyaWdnZXJUaXRsZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKTtcbiAgY29uc3QgaWRSZWYgPSB1c2VSZWYoYHBvbGx5LWRyb3Bkb3duLSR7Kytkcm9wZG93bkNvdW50ZXJ9YCk7XG4gIGNvbnN0IHBvcG92ZXJJZCA9IGlkUmVmLmN1cnJlbnQ7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0cmlnZ2VyUmVmLmN1cnJlbnQ/LnNldEF0dHJpYnV0ZShcInBvcG92ZXJ0YXJnZXRcIiwgcG9wb3ZlcklkKTtcbiAgfSwgW3BvcG92ZXJJZF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICBjb25zdCBvbk92ZXJsYXlDbG9zZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBDdXN0b21FdmVudCAmJiBlLmRldGFpbD8uaWQgPT09IHBvcG92ZXJJZCkge1xuICAgICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvdmVybGF5OmNsb3NlXCIsIG9uT3ZlcmxheUNsb3NlKTtcbiAgICB9O1xuICB9LCBbcG9wb3ZlcklkLCBpc09wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG1lbnUgPSBtZW51UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgdHJpZ2dlciA9IHRyaWdnZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUgfHwgIXRyaWdnZXIpIHJldHVybjtcblxuICAgIC8vIFBpbiB0aGUgdG9wLWxheWVyIG1lbnUgdG8gaXRzIHRyaWdnZXIgd2l0aCB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAgICAvLyBSdW4gZnJvbSBgYmVmb3JldG9nZ2xlYCB0aGlzIGhhcHBlbnMgc3luY2hyb25vdXNseSBiZWZvcmUgdGhlXG4gICAgLy8gcG9wb3ZlciBwYWludHMsIHNvIHRoZSBtZW51IGlzIGNvcnJlY3Qgb24gaXRzIGZpcnN0IGZyYW1lIOKAlCBub1xuICAgIC8vIGZsYXNoLiBSdW4gZnJvbSBzY3JvbGwvcmVzaXplIGl0IGtlZXBzIHRoZSBtZW51IHBpbm5lZC5cbiAgICBjb25zdCBwb3NpdGlvbk1lbnUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgLy8gQSBub3QteWV0LXNob3duIHBvcG92ZXIgaXMgYGRpc3BsYXk6IG5vbmVgIGFuZCBoYXMgbm8gYm94IHRvXG4gICAgICAvLyBtZWFzdXJlLiBGb3JjZSBsYXlvdXQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgKHN5bmNocm9ub3VzKVxuICAgICAgLy8gcmVhZCwgdGhlbiByZXN0b3JlIOKAlCBub3RoaW5nIHBhaW50cyBpbiBiZXR3ZWVuLiBDbGVhcmluZyB0aGVcbiAgICAgIC8vIGlubGluZSBtYXgtaGVpZ2h0IGZpcnN0IG1lYXN1cmVzIHRoZSBtZW51J3MgbmF0dXJhbCBzaXplLlxuICAgICAgY29uc3QgcHJldkRpc3BsYXkgPSBtZW51LnN0eWxlLmRpc3BsYXk7XG4gICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IFwiXCI7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBjb25zdCBtZW51V2lkdGggPSBtZW51Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgbWVudUhlaWdodCA9IG1lbnUub2Zmc2V0SGVpZ2h0O1xuICAgICAgbWVudS5zdHlsZS5kaXNwbGF5ID0gcHJldkRpc3BsYXk7XG5cbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIC8vIEhvcml6b250YWw6IGFsaWduIGxlZnQgZWRnZXMgKHJpZ2h0IGVkZ2VzIHdoZW4gYWxpZ249XCJyaWdodFwiKSxcbiAgICAgIC8vIHRoZW4gY2xhbXAgc28gdGhlIG1lbnUgbmV2ZXIgb3ZlcmZsb3dzIGEgdmlld3BvcnQgZWRnZS4gVW5kZXJcbiAgICAgIC8vIFJUTCB0aGUgXCJsZWZ0XCIgZGVmYXVsdCByZWFkcyBhcyB0aGUgaW5saW5lLXN0YXJ0IGVkZ2UsIHdoaWNoXG4gICAgICAvLyBpcyB0aGUgdHJpZ2dlcidzICpyaWdodCogZWRnZSDigJQgZmxpcCB0aGUgYW5jaG9yIHNvIHRoZSBtZW51XG4gICAgICAvLyBncm93cyB0b3dhcmQgdGhlIGlubGluZS1lbmQgbGlrZSBpdHMgbmF0aXZlIGNvdW50ZXJwYXJ0LlxuICAgICAgY29uc3QgaXNSdGwgPVxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRyaWdnZXIpLmRpcmVjdGlvbiA9PT0gXCJydGxcIiB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSBcInJ0bFwiO1xuICAgICAgY29uc3QgcGh5c2ljYWxSaWdodCA9IChpc1J0bCAmJiBhbGlnbiA9PT0gXCJsZWZ0XCIpIHx8IGFsaWduID09PSBcInJpZ2h0XCI7XG4gICAgICBsZXQgbGVmdCA9IHBoeXNpY2FsUmlnaHQgPyB0LnJpZ2h0IC0gbWVudVdpZHRoIDogdC5sZWZ0O1xuICAgICAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KFZJRVdQT1JUX1BBRERJTkcsIHZpZXdwb3J0V2lkdGggLSBtZW51V2lkdGggLSBWSUVXUE9SVF9QQURESU5HKTtcbiAgICAgIGxlZnQgPSBNYXRoLm1pbihNYXRoLm1heChsZWZ0LCBWSUVXUE9SVF9QQURESU5HKSwgbWF4TGVmdCk7XG5cbiAgICAgIC8vIFZlcnRpY2FsOiBiZWxvdyB0aGUgdHJpZ2dlciBieSBkZWZhdWx0OyBmbGlwIGFib3ZlIHdoZW4gdGhhdFxuICAgICAgLy8gbGVhdmVzIG1vcmUgcm9vbS4gQ2FwIHRoZSBoZWlnaHQgdG8gdGhlIHNwYWNlIGF2YWlsYWJsZSBzbyB0aGVcbiAgICAgIC8vIG1lbnUgYWx3YXlzIHN0YXlzIG9uLXNjcmVlbi5cbiAgICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB2aWV3cG9ydEhlaWdodCAtIHQuYm90dG9tIC0gTUVOVV9HQVAgLSBWSUVXUE9SVF9QQURESU5HO1xuICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHQudG9wIC0gTUVOVV9HQVAgLSBWSUVXUE9SVF9QQURESU5HO1xuICAgICAgbGV0IHRvcDogbnVtYmVyO1xuICAgICAgaWYgKG1lbnVIZWlnaHQgPD0gc3BhY2VCZWxvdyB8fCBzcGFjZUJlbG93ID49IHNwYWNlQWJvdmUpIHtcbiAgICAgICAgdG9wID0gdC5ib3R0b20gKyBNRU5VX0dBUDtcbiAgICAgICAgaWYgKG1lbnVIZWlnaHQgPiBzcGFjZUJlbG93KSB7XG4gICAgICAgICAgbWVudS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heChzcGFjZUJlbG93LCAwKX1weGA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KHNwYWNlQWJvdmUsIDApO1xuICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke2F2YWlsYWJsZX1weGA7XG4gICAgICAgIHRvcCA9IHQudG9wIC0gTUVOVV9HQVAgLSBNYXRoLm1pbihtZW51SGVpZ2h0LCBhdmFpbGFibGUpO1xuICAgICAgfVxuXG4gICAgICBtZW51LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgICAgbWVudS5zdHlsZS5tYXJnaW4gPSBcIjBcIjtcbiAgICAgIG1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgbWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkJlZm9yZVRvZ2dsZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlICYmIGUubmV3U3RhdGUgPT09IFwib3BlblwiKSB7XG4gICAgICAgIHBvc2l0aW9uTWVudSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25SZXBvc2l0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHBvc2l0aW9uTWVudSgpO1xuICAgIH07XG5cbiAgICBtZW51LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uUmVwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgb25SZXBvc2l0aW9uKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbWVudS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldG9nZ2xlXCIsIG9uQmVmb3JlVG9nZ2xlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uUmVwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIH07XG4gIH0sIFthbGlnbl0pO1xuXG4gIHVzZVNpZ25hbEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICBpZiAoaXNPcGVuLnZhbHVlICYmICFtZW51Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSB7XG4gICAgICBtZW51LnNob3dQb3BvdmVyKCk7XG4gICAgfSBlbHNlIGlmICghaXNPcGVuLnZhbHVlICYmIG1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuaGlkZVBvcG92ZXIoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChcIm5ld1N0YXRlXCIgaW4gZSkge1xuICAgICAgaXNPcGVuLnZhbHVlID0gKGUgYXMgdW5rbm93biBhcyB7IG5ld1N0YXRlOiBzdHJpbmcgfSkubmV3U3RhdGUgPT09IFwib3BlblwiO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCFtdWx0aVNlbGVjdCkge1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJkcm9wZG93blwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1kcm9wZG93bj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcmVmPXt0cmlnZ2VyUmVmfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e3RyaWdnZXJDbGFzc05hbWUgPz8gY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIn1cbiAgICAgICAgZGlzYWJsZWQ9e3RyaWdnZXJEaXNhYmxlZH1cbiAgICAgICAgdGl0bGU9e3RyaWdnZXJUaXRsZX1cbiAgICAgICAgZGF0YS1vcGVuPXtpc09wZW4udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgID5cbiAgICAgICAge3RyaWdnZXJ9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXttZW51UmVmfVxuICAgICAgICBpZD17cG9wb3ZlcklkfVxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPXttdWx0aVNlbGVjdCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm1lbnVcIl0gPz8gXCJcIn1cbiAgICAgICAgZGF0YS1hbGlnbj17YWxpZ259XG4gICAgICAgIHBvcG92ZXI9XCJhdXRvXCJcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtwb3BvdmVySWR9XG4gICAgICAgIG9uVG9nZ2xlPXtoYW5kbGVUb2dnbGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgPlxuICAgICAgICA8TGF5b3V0IHJvd3M9XCJhdXRvXCIgZ2FwPVwiMFwiPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTZWxlY3RUcmlnZ2VyIOKAlCB0aGUgbGFiZWwvY2FyZXQgcm93IGluc2lkZSBhIHNlbGVjdCB0cmlnZ2VyIGJveC5cbiAqXG4gKiBgLnRyaWdnZXJgIGluIFNlbGVjdC5tb2R1bGUuY3NzIHN0eWxlcyB0aGUgKmJveCo6IGJvcmRlciwgcGFkZGluZyxcbiAqIGBtaW4tYmxvY2stc2l6ZWAsIGFuZCBgYWxpZ24tY29udGVudDogY2VudGVyYCB0byBjZW50cmUgb25lIGNoaWxkIGluXG4gKiBpdC4gSXQgZGVsaWJlcmF0ZWx5IGRlY2xhcmVzIG5vIGZsZXggb3IgZ3JpZCBvZiBpdHMgb3duIOKAlCBwb2xseS11aVxuICogcm91dGVzIGV2ZXJ5IGxheW91dCBkZWNpc2lvbiB0aHJvdWdoIDxMYXlvdXQ+IOKAlCBzbyB0aGUgY29tcG9uZW50XG4gKiB0aGF0IGFwcGxpZXMgYC50cmlnZ2VyYCBtdXN0IHN1cHBseSB0aGUgcm93LlxuICpcbiAqIHBvbGx5IzE4MDogdGhhdCBydWxlIHdhcyBjaGFuZ2VkIGZvciBvbmUgb2YgaXRzIHR3byBjb25zdW1lcnMuXG4gKiA8U2VsZWN0PiBnYWluZWQgYSA8TGF5b3V0PjsgPEFjdGlvblNlbGVjdD4sIHdoaWNoIGFwcGxpZXMgdGhlIHNhbWVcbiAqIGNsYXNzIHRocm91Z2ggRHJvcGRvd24ncyBgdHJpZ2dlckNsYXNzTmFtZWAsIGtlcHQgcmVuZGVyaW5nIHR3byBiYXJlXG4gKiBpbmxpbmUgc3BhbnMsIHNvIGl0cyBjYXJldCB3cmFwcGVkIG9udG8gYSBzZWNvbmQgbGluZS4gTm90aGluZyB0aWVkXG4gKiB0aGUgc3R5bGVzaGVldCdzIGNvbnRyYWN0IHRvIHRoZSBjb21wb25lbnRzIHRoYXQgaGFkIHRvIHNhdGlzZnkgaXQuXG4gKiBUaGlzIG1vZHVsZSBpcyB0aGF0IHRpZTogb25lIHJvdywgb25lIGRlZmluaXRpb24sIGJvdGggY29uc3VtZXJzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4uL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RUcmlnZ2VyUHJvcHMgPSB7XG4gIC8qKiBUZXh0IGluIHRoZSB0cmlnZ2VyIOKAlCB0aGUgY3VycmVudCBzZWxlY3Rpb24sIG9yIHRoZSBwbGFjZWhvbGRlci4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgZHJvcGRvd24gY2FyZXQgYmVzaWRlIHRoZSBsYWJlbC4gT2ZmIGZvciBhIGRpc2FibGVkXG4gICAqIDxBY3Rpb25TZWxlY3Q+LCB3aGljaCBpcyBzdGF0aWMgdGV4dCB3aXRoIG5vIG1lbnUgdG8gb3Blbi5cbiAgICovXG4gIGNhcmV0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdGhlIHJvdyByZW5kZXJzIGFzLiBgc3BhbmAgd2hlcmUgdGhlIHRyaWdnZXIgYm94IGlzIGl0c2VsZlxuICAgKiBwaHJhc2luZyBjb250ZW50IOKAlCBhIGRpc2FibGVkIDxBY3Rpb25TZWxlY3Q+IHJlbmRlcnMgaXRzIGJveCBhcyBhXG4gICAqIDxzcGFuPiwgd2hpY2ggbWF5IG5vdCBjb250YWluIGEgPGRpdj4uXG4gICAqL1xuICBhcz86IFwiZGl2XCIgfCBcInNwYW5cIjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHByb3BzOiBTZWxlY3RUcmlnZ2VyUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgbGFiZWwsIGNhcmV0ID0gdHJ1ZSwgYXMgPSBcImRpdlwiIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz17YXN9XG4gICAgICBpbmxpbmVcbiAgICAgIC8vIFdpdGhvdXQgYSBjYXJldCB0aGUgc2Vjb25kIHRyYWNrIHdvdWxkIHN0aWxsIGNvbnRyaWJ1dGUgaXRzIGdhcCxcbiAgICAgIC8vIHBhZGRpbmcgdGhlIHRyaWdnZXIgYnkgOHB4IGl0IGRvZXMgbm90IG5lZWQuXG4gICAgICBjb2x1bW5zPXtjYXJldCA/IFwiMWZyIGF1dG9cIiA6IFwiMWZyXCJ9XG4gICAgICB7Li4uKGNhcmV0ID8geyBnYXA6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgfSA6IHt9KX1cbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgbWF4SW5saW5lU2l6ZT1cIjEwMCVcIlxuICAgID5cbiAgICAgIHsvKiBUaGUgMWZyIHRyYWNrIGJsb2NraWZpZXMgdGhpcyBzcGFuLCB3aGljaCBpcyB3aGF0IGxldHNcbiAgICAgICAgICBgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNgIGFwcGx5IHRvIGEgbG9uZyBsYWJlbC4gKi99XG4gICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInRyaWdnZXJMYWJlbFwiXX0gZGF0YS1wb2xseS1zZWxlY3QtbGFiZWw+XG4gICAgICAgIHtsYWJlbH1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtjYXJldCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImNhcmV0XCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25TZWxlY3Qg4oCUIHNpbmdsZS1zZWxlY3QgZHJvcGRvd24gdGhhdCBjb21taXRzIHZpYSB0aGUgYWN0aW9uIHN5c3RlbS5cbiAqXG4gKiBUaGUgYWN0aW9uLWRpc3BhdGNoaW5nIHNpYmxpbmcgb2YgPFNlbGVjdD4uIFdoZXJlIDxTZWxlY3Q+IGJpbmRzIGFcbiAqIGBTaWduYWw8U2V0PFQ+PmAgYW5kIGlzIGJ1aWx0IGZvciBpbi1tZW1vcnkgZmlsdGVyIFVJcywgQWN0aW9uU2VsZWN0XG4gKiB0YWtlcyB0aGUgY3VycmVudCBgdmFsdWVgIGFzIGEgcGxhaW4gc3RyaW5nIGFuZCBmaXJlcyBgYWN0aW9uYCB3aXRoXG4gKiBgZGF0YS1hY3Rpb24tdmFsdWVgIHNldCB0byB0aGUgY2hvc2VuIG9wdGlvbiDigJQgc28gZWRpdGluZyBhXG4gKiBzZXJ2ZXItYmFja2VkIGZpZWxkIGNvbW1pdHMgdGhyb3VnaCB0aGUgc2FtZSBldmVudCBkZWxlZ2F0aW9uIGFzXG4gKiA8QWN0aW9uSW5wdXQ+IGFuZCA8QWN0aW9uRm9ybT4sIHdpdGggbm8gc3ludGhldGljIHNpZ25hbCBvciBicmlkZ2luZ1xuICogYGVmZmVjdGAgcmVxdWlyZWQuXG4gKlxuICogQ29tcG9zZXMgPERyb3Bkb3duPiBmb3IgdGhlIG1lbnUuIFRoZSB0cmlnZ2VyIHN0eWxpbmcgaXMgYXBwbGllZFxuICogZGlyZWN0bHkgdG8gRHJvcGRvd24ncyBvd24gPGJ1dHRvbj4gdmlhIGB0cmlnZ2VyQ2xhc3NOYW1lYCwgc28gdGhlXG4gKiB2aXNpYmxlIGJveCBhbmQgdGhlIGludGVyYWN0aXZlIGVsZW1lbnQgYXJlIG9uZSBhbmQgdGhlIHNhbWUgbm9kZSDigJRcbiAqIG5vIHN0eWxlZCA8c3Bhbj4gbmVzdGVkIGluc2lkZSBhbiB1bnN0eWxlZCA8YnV0dG9uPi4gQSBkaXNhYmxlZFxuICogQWN0aW9uU2VsZWN0IHJlbmRlcnMgYXMgc3RhdGljIHRleHQgd2l0aG91dCBhIGNhcmV0LlxuICpcbiAqIEJvdGggYnJhbmNoZXMgcmVuZGVyIHRoZWlyIGxhYmVsL2NhcmV0IHJvdyB0aHJvdWdoIDxTZWxlY3RUcmlnZ2VyPixcbiAqIHRoZSBzYW1lIHJvdyA8U2VsZWN0PiB1c2VzIOKAlCBgLnRyaWdnZXJgIHN0eWxlcyB0aGUgYm94IGFuZCBzdXBwbGllc1xuICogbm8gbGF5b3V0LCBzbyB0aGUgY29tcG9uZW50IG93ZXMgaXQgb25lIChwb2xseSMxODApLlxuICovXG5cbmltcG9ydCB7IHVzZVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi9Ecm9wZG93bi50c3hcIjtcbmltcG9ydCB7IGRpc3BhdGNoQWN0aW9uIH0gZnJvbSBcIi4vaW50ZXJuYWwvZGlzcGF0Y2gtYWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgeyBTZWxlY3RUcmlnZ2VyIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2VsZWN0LXRyaWdnZXIudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RPcHRpb24gfSBmcm9tIFwiLi9TZWxlY3QudHN4XCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblNlbGVjdFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUg4oCUIG1hdGNoZWQgYWdhaW5zdCBgb3B0aW9uc2AgdG8gcmVuZGVyIHRoZSB0cmlnZ2VyIGxhYmVsLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogU2VsZWN0YWJsZSBvcHRpb25zLiAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gc2VsZWN0aW9uLiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08b3B0aW9uIHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBvbiBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBWaXNpYmxlIGZpZWxkIGxhYmVsIHJlbmRlcmVkIGFib3ZlIHRoZSB0cmlnZ2VyLiAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIFRyaWdnZXIgdGV4dCBzaG93biB3aGVuIGB2YWx1ZWAgbWF0Y2hlcyBubyBvcHRpb24uIERlZmF1bHQ6IFwiU2VsZWN04oCmXCIuICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBBcHBseSBhIGNvbWZvcnRhYmxlIG1pbmltdW0gd2lkdGggdG8gdGhlIHRyaWdnZXIuIERlZmF1bHQ6IHNpemVzIHRvIGNvbnRlbnQuICovXG4gIHdpZGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbGFiZWxGb3Iob3B0aW9uczogU2VsZWN0T3B0aW9uPHN0cmluZz5bXSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdC5sYWJlbDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uU2VsZWN0KHByb3BzOiBBY3Rpb25TZWxlY3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHZhbHVlLFxuICAgIG9wdGlvbnMsXG4gICAgYWN0aW9uLFxuICAgIGFjdGlvbkRhdGEsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdOKAplwiLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgd2lkZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHVzZVNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgY3VycmVudCA9IGxhYmVsRm9yKG9wdGlvbnMsIHZhbHVlKTtcbiAgY29uc3QgaXNFbXB0eSA9IGN1cnJlbnQgPT09IHVuZGVmaW5lZDtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBjdXJyZW50ID8/IHBsYWNlaG9sZGVyO1xuXG4gIGNvbnN0IGNvbW1pdCA9IChuZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICBpZiAobmV4dCA9PT0gdmFsdWUpIHJldHVybjtcbiAgICBkaXNwYXRjaEFjdGlvbihhY3Rpb24sIHsgLi4uKGFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgfTtcblxuICBjb25zdCB0cmlnZ2VyUGFydHMgPSBbY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIl07XG4gIGlmIChpc0VtcHR5KSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl0gPz8gXCJcIik7XG4gIGlmICh3aWRlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1widHJpZ2dlcldpZGVcIl0gPz8gXCJcIik7XG4gIGNvbnN0IHRyaWdnZXJDbGFzcyA9IHRyaWdnZXJQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1hY3Rpb24tc2VsZWN0XG4gICAgICBkYXRhLXN0YXRlPXtpc0VtcHR5ID8gXCJlbXB0eVwiIDogXCJmaWxsZWRcIn1cbiAgICA+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIHtkaXNhYmxlZCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3M9e3RyaWdnZXJDbGFzc30gYXJpYS1kaXNhYmxlZD1cInRydWVcIiB0aXRsZT17ZGlzcGxheVRleHR9PlxuICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyIGFzPVwic3BhblwiIGNhcmV0PXtmYWxzZX0gbGFiZWw9e2Rpc3BsYXlUZXh0fSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApIDogKFxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgICB0cmlnZ2VyQ2xhc3NOYW1lPXt0cmlnZ2VyQ2xhc3N9XG4gICAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICB0cmlnZ2VyPXs8U2VsZWN0VHJpZ2dlciBsYWJlbD17ZGlzcGxheVRleHR9IC8+fVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBvcHQudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgb3B0Q2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtvcHQudmFsdWV9XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9e29wdENsYXNzfVxuICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb21taXQob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJhZGdlIOKAlCBzbWFsbCBpbmxpbmUgc3RhdHVzIGNoaXAuXG4gKlxuICogUmVuZGVycyBhcyBhIHBhc3NpdmUgPHNwYW4+IHdpdGggdGludGVkIGJhY2tncm91bmQgYW5kIG9uLXRpbnQgdGV4dFxuICogZnJvbSB0aGUgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlseS4gVGhlIGRlZmF1bHQgdmFyaWFudCB1c2VzXG4gKiBzdXJmYWNlLXN1bmtlbiArIG11dGVkIHRleHQgZm9yIGEgbmV1dHJhbCBwaWxsLiBDb25zdW1lcnMgc3R5bGVcbiAqIHBsYWNlbWVudCB2aWEgY2xhc3NOYW1lOyB0aGUgcHJpbWl0aXZlIG93bnMgc2l6ZSwgc2hhcGUsIGFuZCBjb2xvdXIuXG4gKlxuICogQSBiYWRnZSBpcyBvZnRlbiBhbiBhYmJyZXZpYXRlZCBvciBpY29uaWMgc3RhdHVzIChcIjNcIiwgXCLil49cIik7IHBhc3NcbiAqIGB0aXRsZWAgdG8gYXR0YWNoIGFuIGV4cGxhbmF0b3J5IGhvdmVyIHRvb2x0aXAgKFwiMyBwZWVycyBjb25uZWN0ZWRcIikuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBCYWRnZVZhcmlhbnQgPSBcImRlZmF1bHRcIiB8IFwiaW5mb1wiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgdmFyaWFudD86IEJhZGdlVmFyaWFudDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBleHBsYWlucyBhbiBhYmJyZXZpYXRlZCBvciBpY29uaWMgYmFkZ2UuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gdmFyaWFudENsYXNzKHZhcmlhbnQ6IEJhZGdlVmFyaWFudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YXJpYW50ID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJpbmZvXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wic3VjY2Vzc1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcIndhcm5pbmdcIl07XG4gIGlmICh2YXJpYW50ID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImRhbmdlclwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhZGdlKHByb3BzOiBCYWRnZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCB2YXJpYW50ID0gXCJkZWZhdWx0XCIsIGNsYXNzTmFtZSwgaWQsIHRpdGxlIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImJhZGdlXCJdXTtcbiAgY29uc3QgdiA9IHZhcmlhbnRDbGFzcyh2YXJpYW50KTtcbiAgaWYgKHYpIHBhcnRzLnB1c2godik7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8c3BhbiBpZD17aWR9IHRpdGxlPXt0aXRsZX0gY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktYmFkZ2U9e3ZhcmlhbnR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBCdXR0b24g4oCUIGludGVyYWN0aXZlIGNvbnRyb2wgd2l0aCB0aWVyLCBzZW1hbnRpYyBjb2xvdXIsIGFuZCBzaXplLlxuICpcbiAqIFJlbmRlcnMgYXMgYSA8YnV0dG9uPiBieSBkZWZhdWx0OyBzd2l0Y2hlcyB0byBhbiA8YT4gd2hlbiBnaXZlbiBhblxuICogYGhyZWZgLiBUaWVyIHNldHMgdmlzdWFsIGltcG9ydGFuY2UgKHByaW1hcnkvc2Vjb25kYXJ5L3RlcnRpYXJ5KSxcbiAqIGNvbG9yIG92ZXJsYXlzIHNlbWFudGljIG1lYW5pbmcgKGluZm8vc3VjY2Vzcy93YXJuaW5nL2RhbmdlciksXG4gKiBzaXplIHBpY2tzIHRoZSBoZWlnaHQgKyBwYWRkaW5nICsgZm9udCBzY2FsZSAoc21hbGwvbm9ybWFsL2xhcmdlKS5cbiAqIFRoZSBidXR0b24gaXMgYSBmbGV4IGNvbnRhaW5lciwgc28gYW4gaWNvbiBhbmQgYSBsYWJlbCBhcmUgaXRzIG93blxuICogY2hpbGRyZW4gd2l0aCBhIGBnYXBgIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBIZWlnaHQgY29tZXMgZnJvbSAtLXBvbGx5LWNvbnRyb2wtaGVpZ2h0LSosIG5ldmVyIGZyb20gcGFkZGluZywgc28gYVxuICogQnV0dG9uIGlzIGV4YWN0bHkgYXMgdGFsbCBhcyBhIFRleHRJbnB1dCBvciBhIFNlbGVjdCBpbiB0aGUgc2FtZSByb3cuXG4gKlxuICogQSB0ZXh0IGBsYWJlbGAgaXMgdGhlIGFjY2Vzc2libGUgbmFtZS4gQW4gaWNvbi1vbmx5IGJ1dHRvbiAoaWNvbiwgbm9cbiAqIGxhYmVsKSBoYXMgbm9uZSwgc28gdGhlIHR5cGUgUkVRVUlSRVMgYGFyaWEtbGFiZWxgIHRoZXJlIOKAlCBhbiB1bm5hbWVkXG4gKiBpY29uIGJ1dHRvbiB3b24ndCBjb21waWxlLiBObyBidWlsZC10aW1lIGxpbnQgbmVlZGVkOyB0aGUgY2FsbCBzaXRlXG4gKiBpdHNlbGYgaXMgdGhlIGdhdGUuXG4gKlxuICogQWN0aW9uIHdpcmluZyBpcyBkZWNsYXJlZCB2aWEgZGF0YS0qIGF0dHJpYnV0ZXMgY29uc3VtZWQgYnkgdGhlXG4gKiBnbG9iYWwgZXZlbnQgZGVsZWdhdG9yIGluIEBmYWlyZm94L3BvbGx5L2FjdGlvbnMg4oCUIEJ1dHRvbiBkb2VzIG5vdFxuICogYWNjZXB0IGFuIG9uQ2xpY2sgcHJvcC5cbiAqXG4gKiBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBuYXRpdmUgaG92ZXIgdG9vbHRpcDogYW4gZXhwbGljaXQgYHRpdGxlYFxuICogd2lucywgZWxzZSB0aGUgdmlzaWJsZSB0ZXh0IGxhYmVsLCBlbHNlIHRoZSBgYXJpYS1sYWJlbGAgKHNvIGFuXG4gKiBpY29uLW9ubHkgYnV0dG9uIHN0aWxsIGdldHMgb25lKS4gUGFzcyBgdGl0bGU9XCJcImAgdG8gc3VwcHJlc3MgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYLCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblRpZXIgPSBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCBcInRlcnRpYXJ5XCI7XG5leHBvcnQgdHlwZSBCdXR0b25Db2xvciA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvblNpemUgPSBcInNtYWxsXCIgfCBcIm5vcm1hbFwiIHwgXCJsYXJnZVwiO1xuXG50eXBlIEJhc2VCdXR0b25Qcm9wcyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRpZXI/OiBCdXR0b25UaWVyO1xuICBjb2xvcj86IEJ1dHRvbkNvbG9yO1xuICBzaXplPzogQnV0dG9uU2l6ZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBmdWxsV2lkdGg/OiBib29sZWFuO1xuICBjaXJjbGU/OiBib29sZWFuO1xuICAvKiogQ2FwIHRoZSBidXR0b24gd2lkdGggYXQgYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgIGFuZCBlbGxpcHNpcy1cbiAgICogdHJ1bmNhdGUgdGhlIGxhYmVsLiBVc2UgZm9yIHVzZXItc3VwcGxpZWQgb3Igb3RoZXJ3aXNlIHVuYm91bmRlZFxuICAgKiBsYWJlbHMgc28gYSBsb25nIHN0cmluZyBkb2Vzbid0IGJsb3cgb3V0IHRoZSByb3cuICovXG4gIGJvdW5kZWQ/OiBib29sZWFuO1xuICAvKiogUHVsbCB0aGUgYm94IG91dCBieSBpdHMgb3duIGlubGluZSBwYWRkaW5nIHNvIHRoZSBMQUJFTCBzaXRzIG9uIHRoZVxuICAgKiB0ZXh0IGVkZ2UgcmF0aGVyIHRoYW4gdGhlIGJveCBlZGdlLiBGb3IgYSBgdGVydGlhcnlgIGJ1dHRvbiBpbiBhIHRleHRcbiAgICogY29sdW1uLCB3aGVyZSB0aGUgaW52aXNpYmxlIHBhZGRpbmcgb3RoZXJ3aXNlIHJlYWRzIGFzIGFuIGluZGVudFxuICAgKiBhZ2FpbnN0IHRoZSBjb3B5IGJlc2lkZSBpdC4gQSBib3JkZXJlZCBidXR0b24gc2hvdWxkIGtlZXAgaXRzIGRlZmF1bHRcbiAgICogYm94IGFsaWdubWVudCDigJQgdGhlIGJvcmRlciBpcyB3aGF0IG1ha2VzIHRoYXQgZWRnZSBsZWdpYmxlLiBUaGUgaGl0XG4gICAqIHRhcmdldCBpcyB1bmNoYW5nZWQ7IG9ubHkgdGhlIGJveCdzIHBvc2l0aW9uIGluIHRoZSBsYXlvdXQgbW92ZXMuICovXG4gIGZsdXNoPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgXCJkYXRhLWFjdGlvblwiPzogc3RyaW5nO1xuICAvKiogQWRkaXRpb25hbCBhY3Rpb24tcGF5bG9hZCBhdHRyaWJ1dGVzIHRoZSBldmVudCBkZWxlZ2F0b3IgcGFyc2VzXG4gICAqIGludG8gYGN0eC5kYXRhYC4gYGRhdGEtYWN0aW9uLXRpZD1cInQtMTdcImAgYmVjb21lcyBgeyB0aWQ6IFwidC0xN1wiIH1gLFxuICAgKiBgZGF0YS1hY3Rpb24taXRlbS1pZD1cIuKAplwiYCBiZWNvbWVzIGB7IGl0ZW1JZDogXCLigKZcIiB9YCwgYW5kIHNvIG9uLlxuICAgKiBUeXBlZCBhcyBhbiBpbmRleCBzaWduYXR1cmUgc28gZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGtleSB0aGVcbiAgICogY29uc3VtZXIgY2FyZXMgYWJvdXQgdHlwZS1jaGVja3Mgd2l0aG91dCBhIEJ1dHRvbi1zaWRlIGVudW1lcmF0aW9uLiAqL1xuICBbYWN0aW9uRGF0YUF0dHI6IGBkYXRhLWFjdGlvbi0ke3N0cmluZ31gXTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDb250ZW50L2FjY2Vzc2liaWxpdHkgZGltZW5zaW9uLiBBIHZpc2libGUgdGV4dCBgbGFiZWxgIGlzIHRoZVxuICogYWNjZXNzaWJsZSBuYW1lLCBzbyBpdCBtYWtlcyBgYXJpYS1sYWJlbGAgb3B0aW9uYWwuIEFuIGljb24tb25seVxuICogYnV0dG9uIGhhcyBubyB0ZXh0IHRvIG5hbWUgaXQsIHNvIGBhcmlhLWxhYmVsYCBpcyBSRVFVSVJFRCDigJQgeW91XG4gKiBjYW5ub3QgY29uc3RydWN0IGFuIHVubmFtZWQgaWNvbiBidXR0b24uIChCdXR0b24ncyBob3ZlciB0aXRsZSB0aGVuXG4gKiBmYWxscyBiYWNrIHRvIHRoYXQgYXJpYS1sYWJlbCwgc28gdGhlIHNhbWUgcHJvcCBnaXZlcyBib3RoIHRoZVxuICogYWNjZXNzaWJsZSBuYW1lIGFuZCB0aGUgdG9vbHRpcC4pXG4gKi9cbnR5cGUgTGFiZWxsZWRDb250ZW50ID0ge1xuICBsYWJlbDogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGljb24/OiBWTm9kZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xudHlwZSBJY29uT25seUNvbnRlbnQgPSB7XG4gIGljb246IFZOb2RlO1xuICBsYWJlbD86IG5ldmVyO1xuICBcImFyaWEtbGFiZWxcIjogc3RyaW5nO1xufTtcbnR5cGUgQnV0dG9uQ29udGVudCA9IExhYmVsbGVkQ29udGVudCB8IEljb25Pbmx5Q29udGVudDtcblxudHlwZSBCdXR0b25FbGVtZW50ID0ge1xuICBocmVmPzogbmV2ZXI7XG4gIHRhcmdldD86IG5ldmVyO1xuICByZWw/OiBuZXZlcjtcbiAgZG93bmxvYWQ/OiBuZXZlcjtcbiAgdHlwZT86IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiO1xufTtcblxudHlwZSBMaW5rRWxlbWVudCA9IHtcbiAgaHJlZjogc3RyaW5nO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIHJlbD86IHN0cmluZztcbiAgLyoqIEZvcndhcmRlZCB0byB0aGUgcmVuZGVyZWQgPGE+IHNvIGEgQnV0dG9uLWFzLWxpbmsgY2FuIG9mZmVyIGEgZmlsZVxuICAgKiBkb3dubG9hZC4gQW4gZW1wdHkgc3RyaW5nIHVzZXMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lLiAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgdHlwZT86IG5ldmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQnV0dG9uUHJvcHMgPSBCYXNlQnV0dG9uUHJvcHMgJiBCdXR0b25Db250ZW50ICYgKEJ1dHRvbkVsZW1lbnQgfCBMaW5rRWxlbWVudCk7XG5cbmZ1bmN0aW9uIHRpZXJDbGFzcyh0aWVyOiBCdXR0b25UaWVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHRpZXIgPT09IFwicHJpbWFyeVwiKSByZXR1cm4gY2xhc3Nlc1tcInRpZXJQcmltYXJ5XCJdO1xuICBpZiAodGllciA9PT0gXCJ0ZXJ0aWFyeVwiKSByZXR1cm4gY2xhc3Nlc1tcInRpZXJUZXJ0aWFyeVwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyU2Vjb25kYXJ5XCJdO1xufVxuXG5mdW5jdGlvbiBjb2xvckNsYXNzKGNvbG9yOiBCdXR0b25Db2xvcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjb2xvciA9PT0gXCJpbmZvXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JJbmZvXCJdO1xuICBpZiAoY29sb3IgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yU3VjY2Vzc1wiXTtcbiAgaWYgKGNvbG9yID09PSBcIndhcm5pbmdcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvcldhcm5pbmdcIl07XG4gIGlmIChjb2xvciA9PT0gXCJkYW5nZXJcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckRhbmdlclwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc2l6ZUNsYXNzKHNpemU6IEJ1dHRvblNpemUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2l6ZSA9PT0gXCJzbWFsbFwiKSByZXR1cm4gY2xhc3Nlc1tcImJ0blNtYWxsXCJdO1xuICBpZiAoc2l6ZSA9PT0gXCJsYXJnZVwiKSByZXR1cm4gY2xhc3Nlc1tcImJ0bkxhcmdlXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogZmxhdCBwcm9wLXRvLWNsYXNzIGNvbXBvc2l0aW9uIHBsdXMgb25lIGFuY2hvci9idXR0b24gYnJhbmNoOyBzcGxpdHRpbmcgd291bGQganVzdCBoaWRlIHRoZSBtYXBwaW5nLlxuZXhwb3J0IGZ1bmN0aW9uIEJ1dHRvbihwcm9wczogQnV0dG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB0aWVyID0gXCJzZWNvbmRhcnlcIixcbiAgICBjb2xvciA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUgPSBcIm5vcm1hbFwiLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgY2lyY2xlID0gZmFsc2UsXG4gICAgYm91bmRlZCA9IGZhbHNlLFxuICAgIGZsdXNoID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRpdGxlLFxuICAgIGljb24sXG4gICAgbGFiZWwsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYnRuXCJdID8/IFwiXCJdO1xuICBjb25zdCB0YyA9IHRpZXJDbGFzcyh0aWVyKTtcbiAgaWYgKHRjKSBwYXJ0cy5wdXNoKHRjKTtcbiAgY29uc3QgY2MgPSBjb2xvckNsYXNzKGNvbG9yKTtcbiAgaWYgKGNjKSBwYXJ0cy5wdXNoKGNjKTtcbiAgY29uc3Qgc2MgPSBzaXplQ2xhc3Moc2l6ZSk7XG4gIGlmIChzYykgcGFydHMucHVzaChzYyk7XG4gIGlmIChjaXJjbGUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkNpcmNsZVwiXSA/PyBcIlwiKTtcbiAgaWYgKGZ1bGxXaWR0aCkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuRnVsbFdpZHRoXCJdID8/IFwiXCIpO1xuICBpZiAoYm91bmRlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQm91bmRlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGZsdXNoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GbHVzaFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICBjb25zdCBidXR0b25DbGFzcyA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICAvLyBBbiBpY29uIGJlc2lkZSBhIGxhYmVsIGlzIGFuIGFycmFuZ2VtZW50LCBzbyBpdCBnb2VzIHRocm91Z2ggPExheW91dD4uXG4gIC8vIEEgbGFiZWwgb24gaXRzIG93biBpcyBub3Q6IGl0IGlzIG9uZSBpbmxpbmUgY2hpbGQgdGhhdCB0aGUgYnV0dG9uJ3NcbiAgLy8gYWxpZ24tY29udGVudCBhbmQgdGV4dC1hbGlnbiBjZW50cmUsIHdpdGggbm8gY29udGFpbmVyIGF0IGFsbC5cbiAgY29uc3QgY29udGVudCA9XG4gICAgaWNvbiA9PT0gdW5kZWZpbmVkID8gKFxuICAgICAgbGFiZWxcbiAgICApIDogKFxuICAgICAgPExheW91dCBpbmxpbmUgY29sdW1ucz1cImF1dG8gYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJpY29uXCJdfT57aWNvbn08L3NwYW4+XG4gICAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAgPC9MYXlvdXQ+XG4gICAgKTtcblxuICBjb25zdCBkYXRhQWN0aW9uID0gcHJvcHNbXCJkYXRhLWFjdGlvblwiXTtcbiAgY29uc3QgYXJpYUxhYmVsID0gcHJvcHNbXCJhcmlhLWxhYmVsXCJdO1xuICAvLyBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCB0aXRsZSB3aW5zLCBlbHNlIHRoZVxuICAvLyB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGFjY2Vzc2libGUgbmFtZSDigJQgc28gYW4gaWNvbi1vbmx5IGJ1dHRvblxuICAvLyAod2hpY2ggY2FycmllcyBhbiBhcmlhLWxhYmVsKSBzdGlsbCBnZXRzIG9uZS4gUGFzcyB0aXRsZT1cIlwiIHRvIG9wdCBvdXQuXG4gIGNvbnN0IHJlc29sdmVkVGl0bGUgPVxuICAgIHRpdGxlID8/XG4gICAgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIiAmJiBsYWJlbC5sZW5ndGggPiAwXG4gICAgICA/IGxhYmVsXG4gICAgICA6IHR5cGVvZiBhcmlhTGFiZWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBhcmlhTGFiZWxcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuICAvLyBDb2xsZWN0IGV2ZXJ5IGBkYXRhLWFjdGlvbi0qYCBleHRyYSB0aGUgY29uc3VtZXIgcGFzc2VkIHNvIHRoZVxuICAvLyBldmVudCBkZWxlZ2F0b3IgY2FuIHJlYWQgdGhlbSBvZmYgdGhlIHJlbmRlcmVkIGVsZW1lbnQuIFdpdGhvdXRcbiAgLy8gdGhpcywgYW55dGhpbmcgYmV5b25kIGBkYXRhLWFjdGlvbmAgaXMgc2lsZW50bHkgZHJvcHBlZCBhbmRcbiAgLy8gaGFuZGxlcnMgZmlyZSB3aXRoIGFuIGVtcHR5IGBjdHguZGF0YWAuXG4gIGNvbnN0IGFjdGlvbkRhdGFBdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGFjdGlvbkRhdGFBdHRyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKFwiaHJlZlwiIGluIHByb3BzICYmIHByb3BzLmhyZWYpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICAgIHRpdGxlPXtyZXNvbHZlZFRpdGxlfVxuICAgICAgICBocmVmPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhyZWZ9XG4gICAgICAgIHRhcmdldD17XCJ0YXJnZXRcIiBpbiBwcm9wcyA/IHByb3BzLnRhcmdldCA6IHVuZGVmaW5lZH1cbiAgICAgICAgcmVsPXtcInJlbFwiIGluIHByb3BzID8gcHJvcHMucmVsIDogdW5kZWZpbmVkfVxuICAgICAgICBkb3dubG9hZD17XCJkb3dubG9hZFwiIGluIHByb3BzID8gcHJvcHMuZG93bmxvYWQgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1idXR0b249e3RpZXJ9XG4gICAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvYT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRUeXBlOiBcImJ1dHRvblwiIHwgXCJzdWJtaXRcIiB8IFwicmVzZXRcIiA9XG4gICAgXCJ0eXBlXCIgaW4gcHJvcHMgJiYgcHJvcHMudHlwZSA/IHByb3BzLnR5cGUgOiBcImJ1dHRvblwiO1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e2J1dHRvbkNsYXNzfVxuICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICB0eXBlPXtyZXNvbHZlZFR5cGV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgey4uLmFjdGlvbkRhdGFBdHRyc31cbiAgICA+XG4gICAgICB7Y29udGVudH1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdXJmYWNlIOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgdmlzdWFsLXN1cmZhY2UgY29uY2VybnMuXG4gKlxuICogV2hlcmUgTGF5b3V0IGdvdmVybnMgc3BhdGlhbCBjb25jZXJucyAoZ3JpZCwgZmxleCwgZ2FwLCBhbGlnbm1lbnQpLFxuICogU3VyZmFjZSBnb3Zlcm5zIHRoZSBjaHJvbWUgdGhhdCBzaXRzIG9uIHRvcCBvZiBsYXlvdXQ6IHBhZGRpbmcsXG4gKiBiYWNrZ3JvdW5kLCBib3JkZXIsIHJhZGl1cywgc2hhZG93LCBhbmQgdGhlIG5hcnJvdyBwb3NpdGlvbmluZyBpZGlvbXNcbiAqIChzdGlja3kgc3RyaXBzLCBmaXhlZCBmbG9hdGluZyBwYW5lcykgdGhhdCBjb25zdW1lcnMgcmVhY2ggZm9yIGlubGluZVxuICogc3R5bGVzIHRvIGV4cHJlc3MuIEV2ZXJ5IHByb3AgbWFwcyB0byBhIGAtLXBvbGx5LSpgIHRva2VuIHRocm91Z2ggYVxuICogbG9jYWwgYC0tcy0qYCBjdXN0b20gcHJvcGVydHksIHNvIGNvbnN1bWVycyBjYW4gcmV0aGVtZSBhbiBpbmRpdmlkdWFsXG4gKiBTdXJmYWNlIGJ5IG92ZXJyaWRpbmcgdGhlIHBvbGx5IHRva2VuIGluIGBzdHlsZWAgd2l0aG91dCB0b3VjaGluZyB0aGVcbiAqIHByaW1pdGl2ZSdzIENTUy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1N1cmZhY2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTdXJmYWNlVmFyaWFudCA9XG4gIHwgXCJwbGFpblwiXG4gIHwgXCJyYWlzZWRcIlxuICB8IFwic3Vua2VuXCJcbiAgfCBcImJ1YmJsZVwiXG4gIHwgXCJjaGlwXCJcbiAgfCBcImNhbGxvdXRcIlxuICB8IFwiZmxvYXRpbmdcIlxuICB8IFwic3RpY2t5LWJhclwiO1xuXG50eXBlIEJhY2tncm91bmQgPSBcInJhaXNlZFwiIHwgXCJzdW5rZW5cIiB8IFwidHJhbnNwYXJlbnRcIiB8IChzdHJpbmcgJiB7fSk7XG50eXBlIFJhZGl1cyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJmdWxsXCI7XG50eXBlIEJvcmRlciA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcInN0cm9uZ1wiO1xudHlwZSBCb3JkZXJXaWR0aCA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcIm1lZGl1bVwiIHwgXCJ0aGlja1wiO1xudHlwZSBCb3JkZXJTaWRlcyA9XG4gIHwgXCJhbGxcIlxuICB8IFwiYmxvY2stc3RhcnRcIlxuICB8IFwiYmxvY2stZW5kXCJcbiAgfCBcImlubGluZS1zdGFydFwiXG4gIHwgXCJpbmxpbmUtZW5kXCJcbiAgfCBcImJsb2NrXCJcbiAgfCBcImlubGluZVwiO1xudHlwZSBTaGFkb3cgPSBcIm5vbmVcIiB8IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbnR5cGUgUG9zaXRpb24gPSBcInN0YXRpY1wiIHwgXCJyZWxhdGl2ZVwiIHwgXCJhYnNvbHV0ZVwiIHwgXCJzdGlja3lcIiB8IFwiZml4ZWRcIjtcbnR5cGUgQm9yZGVyU3R5bGUgPSBcInNvbGlkXCIgfCBcImRhc2hlZFwiO1xudHlwZSBPdmVyZmxvdyA9IFwidmlzaWJsZVwiIHwgXCJoaWRkZW5cIiB8IFwiYXV0b1wiIHwgXCJzY3JvbGxcIjtcbnR5cGUgU2NoZW1lID0gXCJkYXJrXCIgfCBcImxpZ2h0XCI7XG5cbi8qKlxuICogQXJiaXRyYXJ5IGBkYXRhLSpgLCBgYXJpYS0qYCwgYW5kIGB0aXRsZWAgYXR0cmlidXRlcyBmb3J3YXJkZWQgdG8gdGhlXG4gKiByZW5kZXJlZCBlbGVtZW50IHNvIGNvbnN1bWVycyAoTW9kYWwsIFRvYXN0LCBDYXJkLCBldGMuKSBjYW4gY29tcG9zZVxuICogU3VyZmFjZSB3aXRob3V0IGxvc2luZyBET00gaG9va3MsIEFSSUEgc2VtYW50aWNzLCBvciBhIG5hdGl2ZSB0b29sdGlwLlxuICovXG5leHBvcnQgdHlwZSBTdXJmYWNlRGF0YUF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VQcm9wcyA9IFN1cmZhY2VEYXRhQXR0cnMgJiB7XG4gIGNoaWxkcmVuPzogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgYXJ0aWNsZSwgYXNpZGUsIGhlYWRlciwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBOYW1lZCBwcmVzZXQgdGhhdCByZXNvbHZlcyB0byBhIGRlZmF1bHQgYnVuZGxlIG9mIHRoZSBwcm9wcyBiZWxvdy4gRXhwbGljaXQgcHJvcHMgb3ZlcnJpZGUuICovXG4gIHZhcmlhbnQ/OiBTdXJmYWNlVmFyaWFudDtcblxuICAvKiogQW55IENTUyBsZW5ndGgsIHR5cGljYWxseSBgdmFyKC0tcG9sbHktc3BhY2UtKilgLiAqL1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lZCB2YWx1ZXMgbWFwIHRvIGB2YXIoLS1wb2xseS1zdXJmYWNlLSopYDsgcmF3IHN0cmluZ3MgcGFzcyB0aHJvdWdoIGZvciBvbmUtb2ZmIGNvbG91cnMuICovXG4gIGJhY2tncm91bmQ/OiBCYWNrZ3JvdW5kO1xuXG4gIHJhZGl1cz86IFJhZGl1cztcbiAgYm9yZGVyPzogQm9yZGVyO1xuICBib3JkZXJXaWR0aD86IEJvcmRlcldpZHRoO1xuICBib3JkZXJTaWRlcz86IEJvcmRlclNpZGVzO1xuICAvKiogQm9yZGVyIGxpbmUgc3R5bGUuIERlZmF1bHQ6IGAnc29saWQnYC4gKi9cbiAgYm9yZGVyU3R5bGU/OiBCb3JkZXJTdHlsZTtcbiAgLyoqIEFueSBDU1MgY29sb3VyLCBvdmVycmlkaW5nIHRoZSB0b2tlbiB0aGUgYGJvcmRlcmAgcHJvcCB3b3VsZCBwaWNrLlxuICAgKiBGb3Igb25lLW9mZiByaW5ncyAoYSBjdXRvdXQgcmluZywgYSBmb2N1cyBoYWxvKSB0aGF0IG5vIHNlbWFudGljXG4gICAqIGJvcmRlciB0b2tlbiBleHByZXNzZXMuIEltcGxpZXMgYSBib3JkZXIgd2lkdGggd2hlbiBub25lIGlzIHNldC4gKi9cbiAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIHNoYWRvdz86IFNoYWRvdztcblxuICAvKipcbiAgICogUmV0aW50IHRoZSB0b2tlbiBzdWJ0cmVlIHNvIGRlc2NlbmRhbnQgYFRleHRgL2BCdXR0b25gIHJlYWQgdGhlXG4gICAqIHJpZ2h0IGNvbnRyYXN0IG9uIGEgZGFyayAob3IgZm9yY2VkLWxpZ2h0KSBTdXJmYWNlIOKAlCBlcnJvclxuICAgKiBiYW5uZXJzLCBjYW1lcmEgb3ZlcmxheXMsIGNoYXQgYnViYmxlcy4gU2V0cyBgZGF0YS1wb2xseS10aGVtZWAsXG4gICAqIHNvIGV2ZXJ5IGAtLXBvbGx5LSpgIGNvbG91ciB0b2tlbiBmbGlwcyBmb3IgdGhlIHN1YnRyZWU7IG5vIGlubGluZVxuICAgKiBgLS1wb2xseS10ZXh0YCBvdmVycmlkZSBuZWVkZWQgKHBvbGx5IzEzNSkuXG4gICAqL1xuICBzY2hlbWU/OiBTY2hlbWU7XG5cbiAgLyoqIGAnbm9uZSdgIG1ha2VzIGEgZGVjb3JhdGl2ZSBTdXJmYWNlIChhIHNjYW4tZnJhbWUgb3ZlcmxheSkgaWdub3JlXG4gICAqIHRoZSBwb2ludGVyIHNvIGNsaWNrcyBmYWxsIHRocm91Z2ggdG8gd2hhdCBpcyBiZWhpbmQgaXQuICovXG4gIHBvaW50ZXJFdmVudHM/OiBcIm5vbmVcIiB8IFwiYXV0b1wiO1xuXG4gIC8qKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2sg4oCUIFN1cmZhY2UgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGhlaWdodD86IHN0cmluZztcbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBibG9jayBzaXplIOKAlCBhIFN1cmZhY2UgdGhhdCBzaHJpbmtzIHRvIGNvbnRlbnQgYnV0IGlzIGNhcHBlZC4gKi9cbiAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xuICBtYXhJbmxpbmVTaXplPzogc3RyaW5nO1xuXG4gIC8qKiBPdmVyZmxvdyBiZWhhdmlvdXIuIGAnYXV0bydgIG1ha2VzIGEgaGVpZ2h0LWNhcHBlZCBTdXJmYWNlIHNjcm9sbC4gKi9cbiAgb3ZlcmZsb3c/OiBPdmVyZmxvdztcblxuICBwb3NpdGlvbj86IFBvc2l0aW9uO1xuICAvKiogQW55IENTUyBpbnNldCB2YWx1ZSAoYCcwJ2AsIGAnYXV0byBhdXRvIDFyZW0gMXJlbSdgLCBgJzFyZW0nYCwg4oCmKS4gKi9cbiAgaW5zZXQ/OiBzdHJpbmc7XG4gIC8qKiBDU1MgdHJhbnNmb3JtIOKAlCBlLmcuIGAndHJhbnNsYXRlWCgtNTAlKSdgIHRvIGNlbnRyZSBhIGZpeGVkIGJhbm5lclxuICAgKiBwYWlyZWQgd2l0aCBgaW5zZXQ6ICfigKYgYXV0byDigKYgNTAlJ2AuIFRoZSBzYW5jdGlvbmVkIHRyYW5zZm9ybSBlc2NhcGUuICovXG4gIHRyYW5zZm9ybT86IHN0cmluZztcbiAgekluZGV4PzogbnVtYmVyO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci1pbnN0YW5jZSBvdmVycmlkZXMuIFRoZSBzdXBwb3J0ZWQgcmV0aW50IHBhdGggaXMgdG8gc2V0IHBvbGx5IHRva2Vuc1xuICAgKiBoZXJlLCBlLmcuIGBzdHlsZT17eyBcIi0tcG9sbHktc3VyZmFjZS1yYWlzZWRcIjogXCIjZmVmM2M3XCIgfX1gLiBTdXJmYWNlXG4gICAqIG1lcmdlcyB0aGlzIGludG8gaXRzIG93biBjb21wdXRlZCBzdHlsZS5cbiAgICovXG4gIHN0eWxlPzogSlNYLkNTU1Byb3BlcnRpZXM7XG5cbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xufTtcblxudHlwZSBWYXJpYW50RGVmYXVsdHMgPSBQYXJ0aWFsPFxuICBQaWNrPFxuICAgIFN1cmZhY2VQcm9wcyxcbiAgICB8IFwicGFkZGluZ1wiXG4gICAgfCBcImJhY2tncm91bmRcIlxuICAgIHwgXCJyYWRpdXNcIlxuICAgIHwgXCJib3JkZXJcIlxuICAgIHwgXCJib3JkZXJXaWR0aFwiXG4gICAgfCBcImJvcmRlclNpZGVzXCJcbiAgICB8IFwic2hhZG93XCJcbiAgICB8IFwiaW5saW5lXCJcbiAgICB8IFwid2lkdGhcIlxuICAgIHwgXCJoZWlnaHRcIlxuICAgIHwgXCJtaW5IZWlnaHRcIlxuICAgIHwgXCJtYXhJbmxpbmVTaXplXCJcbiAgICB8IFwicG9zaXRpb25cIlxuICAgIHwgXCJpbnNldFwiXG4gICAgfCBcInpJbmRleFwiXG4gID5cbj47XG5cbmNvbnN0IHZhcmlhbnREZWZhdWx0czogUmVjb3JkPFN1cmZhY2VWYXJpYW50LCBWYXJpYW50RGVmYXVsdHM+ID0ge1xuICBwbGFpbjoge30sXG4gIHJhaXNlZDoge1xuICAgIGJhY2tncm91bmQ6IFwicmFpc2VkXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgc2hhZG93OiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbiAgc3Vua2VuOiB7XG4gICAgYmFja2dyb3VuZDogXCJzdW5rZW5cIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBidWJibGU6IHtcbiAgICBiYWNrZ3JvdW5kOiBcInZhcigtLXBvbGx5LXN1cmZhY2UtYnViYmxlKVwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgcGFkZGluZzogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSkgdmFyKC0tcG9sbHktc3BhY2UtbWQpXCIsXG4gIH0sXG4gIGNoaXA6IHtcbiAgICBpbmxpbmU6IHRydWUsXG4gICAgcmFkaXVzOiBcImZ1bGxcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXhzKSB2YXIoLS1wb2xseS1zcGFjZS1zbSlcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBjYWxsb3V0OiB7XG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICByYWRpdXM6IFwic21cIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgZmxvYXRpbmc6IHtcbiAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgIHJhZGl1czogXCJsZ1wiLFxuICAgIHNoYWRvdzogXCJsZ1wiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICB6SW5kZXg6IDk5OTksXG4gIH0sXG4gIFwic3RpY2t5LWJhclwiOiB7XG4gICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgaW5zZXQ6IFwiMCAwIGF1dG8gMFwiLFxuICAgIGJvcmRlclNpZGVzOiBcImJsb2NrLWVuZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBiZ1ZhbHVlKGI6IEJhY2tncm91bmQpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJyYWlzZWRcIikgcmV0dXJuIFwidmFyKC0tcG9sbHktc3VyZmFjZS1yYWlzZWQpXCI7XG4gIGlmIChiID09PSBcInN1bmtlblwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXN1bmtlbilcIjtcbiAgaWYgKGIgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgcmV0dXJuIGI7XG59XG5cbmZ1bmN0aW9uIHJhZGl1c1ZhbHVlKHI6IFJhZGl1cyk6IHN0cmluZyB7XG4gIGlmIChyID09PSBcIm5vbmVcIikgcmV0dXJuIFwiMFwiO1xuICByZXR1cm4gYHZhcigtLXBvbGx5LXJhZGl1cy0ke3J9KWA7XG59XG5cbmZ1bmN0aW9uIGJvcmRlckNvbG9yVmFsdWUoYjogQm9yZGVyKTogc3RyaW5nIHtcbiAgaWYgKGIgPT09IFwibm9uZVwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICBpZiAoYiA9PT0gXCJzdHJvbmdcIikgcmV0dXJuIFwidmFyKC0tcG9sbHktYm9yZGVyLXN0cm9uZylcIjtcbiAgcmV0dXJuIFwidmFyKC0tcG9sbHktYm9yZGVyKVwiO1xufVxuXG5mdW5jdGlvbiBib3JkZXJXaWR0aFZhbHVlKHc6IEJvcmRlcldpZHRoKTogc3RyaW5nIHtcbiAgaWYgKHcgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktYm9yZGVyLXdpZHRoLSR7d30pYDtcbn1cblxuZnVuY3Rpb24gc2hhZG93VmFsdWUoczogU2hhZG93KTogc3RyaW5nIHtcbiAgaWYgKHMgPT09IFwibm9uZVwiKSByZXR1cm4gXCJub25lXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktc2hhZG93LSR7c30pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyU2lkZXNDbGFzcyhzaWRlczogQm9yZGVyU2lkZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2lkZXMgPT09IFwiYWxsXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1zdGFydFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrLXN0YXJ0XCJdO1xuICBpZiAoc2lkZXMgPT09IFwiYmxvY2stZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stZW5kXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLXN0YXJ0XCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lLWVuZFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWlubGluZS1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9ja1wiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogcHJvcC10by1jdXN0b20tcHJvcGVydHkgbWFwcGluZzsgZmxhdCBhbmQgbGluZWFyLCBtaXJyb3JzIExheW91dC50c3guXG5leHBvcnQgZnVuY3Rpb24gU3VyZmFjZShwcm9wczogU3VyZmFjZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInBsYWluXCIgfSA9IHByb3BzO1xuICBjb25zdCB2ID0gdmFyaWFudERlZmF1bHRzW3ZhcmlhbnRdO1xuXG4gIGNvbnN0IGFzID0gcHJvcHMuYXMgPz8gXCJkaXZcIjtcbiAgY29uc3QgcGFkZGluZyA9IHByb3BzLnBhZGRpbmcgPz8gdi5wYWRkaW5nO1xuICBjb25zdCBiYWNrZ3JvdW5kID0gcHJvcHMuYmFja2dyb3VuZCA/PyB2LmJhY2tncm91bmQ7XG4gIGNvbnN0IHJhZGl1cyA9IHByb3BzLnJhZGl1cyA/PyB2LnJhZGl1cztcbiAgY29uc3QgYm9yZGVyID0gcHJvcHMuYm9yZGVyID8/IHYuYm9yZGVyO1xuICBjb25zdCBib3JkZXJTaWRlcyA9IHByb3BzLmJvcmRlclNpZGVzID8/IHYuYm9yZGVyU2lkZXMgPz8gXCJhbGxcIjtcbiAgY29uc3Qgc2hhZG93ID0gcHJvcHMuc2hhZG93ID8/IHYuc2hhZG93O1xuICBjb25zdCBpbmxpbmUgPSBwcm9wcy5pbmxpbmUgPz8gdi5pbmxpbmU7XG4gIGNvbnN0IHdpZHRoID0gcHJvcHMud2lkdGggPz8gdi53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0ID8/IHYuaGVpZ2h0O1xuICBjb25zdCBtaW5IZWlnaHQgPSBwcm9wcy5taW5IZWlnaHQgPz8gdi5taW5IZWlnaHQ7XG4gIGNvbnN0IG1heElubGluZVNpemUgPSBwcm9wcy5tYXhJbmxpbmVTaXplID8/IHYubWF4SW5saW5lU2l6ZTtcbiAgY29uc3QgcG9zaXRpb24gPSBwcm9wcy5wb3NpdGlvbiA/PyB2LnBvc2l0aW9uO1xuICBjb25zdCBpbnNldCA9IHByb3BzLmluc2V0ID8/IHYuaW5zZXQ7XG4gIGNvbnN0IHpJbmRleCA9IHByb3BzLnpJbmRleCA/PyB2LnpJbmRleDtcbiAgLy8gcG9sbHkjMTI2LyMxMzU6IG5vIHZhcmlhbnQgc2V0cyB0aGVzZSwgc28gdGhleSByZXNvbHZlIHN0cmFpZ2h0IGZyb20gcHJvcHMuXG4gIGNvbnN0IHsgbWF4SGVpZ2h0LCBvdmVyZmxvdywgYm9yZGVyU3R5bGUsIHRyYW5zZm9ybSwgYm9yZGVyQ29sb3IsIHNjaGVtZSwgcG9pbnRlckV2ZW50cyB9ID0gcHJvcHM7XG5cbiAgLy8gQSBib3JkZXJlZCBzdXJmYWNlIG5lZWRzIGEgd2lkdGguIElmIHRoZSBjb25zdW1lciBhc2tlZCBmb3IgYSBib3JkZXIg4oCUXG4gIC8vIGJ5IG5hbWUgb3IgYnkgcmF3IGNvbG91ciDigJQgYnV0IGRpZG4ndCBwaWNrIGEgd2lkdGgsIGluZmVyICdkZWZhdWx0J1xuICAvLyBzbyB0aGUgYm9yZGVyIHJlbmRlcnMuXG4gIGNvbnN0IHdhbnRzQm9yZGVyID0gKGJvcmRlciAhPT0gdW5kZWZpbmVkICYmIGJvcmRlciAhPT0gXCJub25lXCIpIHx8IGJvcmRlckNvbG9yICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvcmRlcldpZHRoID0gcHJvcHMuYm9yZGVyV2lkdGggPz8gdi5ib3JkZXJXaWR0aCA/PyAod2FudHNCb3JkZXIgPyBcImRlZmF1bHRcIiA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1zLXBcIl0gPSBwYWRkaW5nO1xuICBpZiAoYmFja2dyb3VuZCkgc3R5bGVbXCItLXMtYmdcIl0gPSBiZ1ZhbHVlKGJhY2tncm91bmQpO1xuICBpZiAocmFkaXVzKSBzdHlsZVtcIi0tcy1yYWRpdXNcIl0gPSByYWRpdXNWYWx1ZShyYWRpdXMpO1xuICBpZiAoYm9yZGVyKSBzdHlsZVtcIi0tcy1ib3JkZXItY29sb3JcIl0gPSBib3JkZXJDb2xvclZhbHVlKGJvcmRlcik7XG4gIC8vIEEgcmF3IGJvcmRlckNvbG9yIHdpbnMgb3ZlciB3aGF0ZXZlciB0b2tlbiBgYm9yZGVyYCByZXNvbHZlZCB0by5cbiAgaWYgKGJvcmRlckNvbG9yKSBzdHlsZVtcIi0tcy1ib3JkZXItY29sb3JcIl0gPSBib3JkZXJDb2xvcjtcbiAgaWYgKGJvcmRlcldpZHRoKSBzdHlsZVtcIi0tcy1ib3JkZXItd2lkdGhcIl0gPSBib3JkZXJXaWR0aFZhbHVlKGJvcmRlcldpZHRoKTtcbiAgaWYgKHNoYWRvdykgc3R5bGVbXCItLXMtc2hhZG93XCJdID0gc2hhZG93VmFsdWUoc2hhZG93KTtcbiAgaWYgKGJvcmRlclN0eWxlKSBzdHlsZVtcIi0tcy1ib3JkZXItc3R5bGVcIl0gPSBib3JkZXJTdHlsZTtcbiAgaWYgKHBvaW50ZXJFdmVudHMpIHN0eWxlW1wiLS1zLXBlXCJdID0gcG9pbnRlckV2ZW50cztcbiAgaWYgKHdpZHRoKSBzdHlsZVtcIi0tcy13XCJdID0gd2lkdGg7XG4gIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1zLWhcIl0gPSBoZWlnaHQ7XG4gIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1zLW1oXCJdID0gbWluSGVpZ2h0O1xuICBpZiAobWF4SGVpZ2h0KSBzdHlsZVtcIi0tcy1tYXhoXCJdID0gbWF4SGVpZ2h0O1xuICBpZiAobWF4SW5saW5lU2l6ZSkgc3R5bGVbXCItLXMtbWlzXCJdID0gbWF4SW5saW5lU2l6ZTtcbiAgaWYgKG92ZXJmbG93KSBzdHlsZVtcIi0tcy1vdmVyZmxvd1wiXSA9IG92ZXJmbG93O1xuICBpZiAocG9zaXRpb24pIHN0eWxlW1wiLS1zLXBvc2l0aW9uXCJdID0gcG9zaXRpb247XG4gIGlmIChpbnNldCkgc3R5bGVbXCItLXMtaW5zZXRcIl0gPSBpbnNldDtcbiAgaWYgKHRyYW5zZm9ybSkgc3R5bGVbXCItLXMtdHJhbnNmb3JtXCJdID0gdHJhbnNmb3JtO1xuICBpZiAoekluZGV4ICE9PSB1bmRlZmluZWQpIHN0eWxlW1wiLS1zLXpcIl0gPSBTdHJpbmcoekluZGV4KTtcblxuICBpZiAocHJvcHMuc3R5bGUpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLCBwcm9wcy5zdHlsZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xuICB9XG5cbiAgY29uc3QgcGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPSBbY2xhc3Nlc1tcInN1cmZhY2VcIl1dO1xuICBpZiAoaW5saW5lKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBwYXJ0cy5wdXNoKGJvcmRlclNpZGVzQ2xhc3MoYm9yZGVyU2lkZXMpKTtcbiAgaWYgKHByb3BzLmNsYXNzTmFtZSkgcGFydHMucHVzaChwcm9wcy5jbGFzc05hbWUpO1xuICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgY29uc3QgcGFzc3Rocm91Z2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGNvbnN0IGlzRGF0YSA9IGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIik7XG4gICAgY29uc3QgaXNBcmlhID0ga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKTtcbiAgICBpZiAoIWlzRGF0YSAmJiAhaXNBcmlhICYmIGtleSAhPT0gXCJ0aXRsZVwiKSBjb250aW51ZTtcbiAgICBpZiAoa2V5ID09PSBcImRhdGEtcG9sbHktc3VyZmFjZVwiKSBjb250aW51ZTtcbiAgICBpZiAoa2V5ID09PSBcImFyaWEtbGFiZWxcIiB8fCBrZXkgPT09IFwiYXJpYS1sYWJlbGxlZGJ5XCIgfHwga2V5ID09PSBcImFyaWEtZGVzY3JpYmVkYnlcIikgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcGFzc3Rocm91Z2hba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIGlkOiBwcm9wcy5pZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlLFxuICAgICAgb25DbGljazogcHJvcHMub25DbGljayxcbiAgICAgIG9uS2V5RG93bjogcHJvcHMub25LZXlEb3duLFxuICAgICAgcm9sZTogcHJvcHMucm9sZSxcbiAgICAgIHRhYkluZGV4OiBwcm9wcy50YWJJbmRleCxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICBcImRhdGEtcG9sbHktc3VyZmFjZVwiOiB2YXJpYW50LFxuICAgICAgXCJkYXRhLXBvbGx5LXRoZW1lXCI6IHNjaGVtZSxcbiAgICAgIC4uLnBhc3N0aHJvdWdoLFxuICAgIH0sXG4gICAgcHJvcHMuY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDYXJkIOKAlCBjb21wb3VuZCBwcmltaXRpdmUgdGhhdCBjb21wb3NlcyBTdXJmYWNlIGZvciBlYWNoIG5hbWVkIHNsb3QuXG4gKlxuICogQ2FyZCBpcyB0aGUgZmlyc3QgY29tcG91bmQgdGhhdCBpcyBwdXJlbHkgYSByZS1za2luIG9mIFN1cmZhY2Ug4oCUIG5vXG4gKiBiZWhhdmlvdXJhbCBsYXllci4gSGVhZGVyLCBCb2R5LCBhbmQgRm9vdGVyIGFyZSBlYWNoIFN1cmZhY2VzIHdpdGhcbiAqIHNlbnNpYmxlIGRlZmF1bHRzOyBSb290IGlzIGEgcmFpc2VkIFN1cmZhY2UgdGhhdCB3cmFwcyB0aGVtLiBFdmVyeVxuICogc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gY29uc3VtZXJzIHJldGludCwgb3ZlcnJpZGUsIG9yXG4gKiByZWFjaCBmb3IgcmF3IHBhZGRpbmcgd2l0aG91dCByZWFjaGluZyBwYXN0IHRoZSBwcmltaXRpdmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBTdXJmYWNlLCB0eXBlIFN1cmZhY2VQcm9wcyB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5cbmV4cG9ydCB0eXBlIENhcmRQcm9wcyA9IFN1cmZhY2VQcm9wcztcbmV4cG9ydCB0eXBlIENhcmRTbG90UHJvcHMgPSBTdXJmYWNlUHJvcHM7XG5cbmZ1bmN0aW9uIFJvb3QocHJvcHM6IENhcmRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJyYWlzZWRcIiwgcmFkaXVzID0gXCJtZFwiLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSB2YXJpYW50PXt2YXJpYW50fSByYWRpdXM9e3JhZGl1c30gZGF0YS1wb2xseS1jYXJkIHsuLi5yZXN0fT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEhlYWRlcihwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIixcbiAgICBib3JkZXIgPSBcImRlZmF1bHRcIixcbiAgICBib3JkZXJTaWRlcyA9IFwiYmxvY2stZW5kXCIsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHBhZGRpbmc9e3BhZGRpbmd9XG4gICAgICBib3JkZXI9e2JvcmRlcn1cbiAgICAgIGJvcmRlclNpZGVzPXtib3JkZXJTaWRlc31cbiAgICAgIGRhdGEtcG9sbHktY2FyZC1oZWFkZXJcbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJvZHkocHJvcHM6IENhcmRTbG90UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHBhZGRpbmc9e3BhZGRpbmd9IGRhdGEtcG9sbHktY2FyZC1ib2R5IHsuLi5yZXN0fT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvb3Rlcihwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIixcbiAgICBib3JkZXIgPSBcImRlZmF1bHRcIixcbiAgICBib3JkZXJTaWRlcyA9IFwiYmxvY2stc3RhcnRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWZvb3RlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENhcmQgPSB7IFJvb3QsIEhlYWRlciwgQm9keSwgRm9vdGVyIH07XG4iLAogICAgIi8qKlxuICogQ2hlY2tib3gg4oCUIG5hdGl2ZSBjaGVja2JveCB3cmFwcGVkIGluIGEgbGFiZWwuXG4gKlxuICogUGFzcyBhIHBsYWluIGJvb2xlYW4gZm9yIGNvbnRyb2xsZWQgdXNlIChjYWxsZXIgbGlzdGVucyBlbHNld2hlcmUpLFxuICogb3IgYSBTaWduYWw8Ym9vbGVhbj4gdG8gaGF2ZSB0aGUgcHJpbWl0aXZlIGJpbmQgaXRzIG93biBjaGFuZ2VcbiAqIGxpc3RlbmVyIGFuZCBtdXRhdGUgdGhlIHNpZ25hbCBkaXJlY3RseS4gVGhlIGxhYmVsIHdyYXBzIHRoZSBpbnB1dFxuICogc28gY2xpY2tzIGFueXdoZXJlIGluIHRoZSB0YXJnZXQgYXJlYSB0b2dnbGUgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgY2hlY2tlZD86IGJvb2xlYW4gfCBTaWduYWw8Ym9vbGVhbj47XG4gIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2lnbmFsPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdmFsdWUgJiYgXCJwZWVrXCIgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja2JveChwcm9wczogQ2hlY2tib3hQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGVja2VkLCBkZWZhdWx0Q2hlY2tlZCwgbmFtZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChpc1NpZ25hbChjaGVja2VkKSkge1xuICAgICAgY2hlY2tlZC52YWx1ZSA9IGUuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja2VkVmFsdWUgPSBpc1NpZ25hbChjaGVja2VkKSA/IGNoZWNrZWQudmFsdWUgOiBjaGVja2VkO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjaGVja2JveFwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0gPz8gXCJcIik7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPVwibGFiZWxcIlxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgIGNsYXNzTmFtZT17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1jaGVja2JveFxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWRWYWx1ZX1cbiAgICAgICAgZGVmYXVsdENoZWNrZWQ9e2RlZmF1bHRDaGVja2VkfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ2x1c3RlciDigJQgd3JhcHBpbmcgcm93IG9mIHZhcmlhYmxlLXdpZHRoIGl0ZW1zLlxuICpcbiAqIFRoZSBmbGV4LXdyYXAgY291bnRlcnBhcnQgdG8gPExheW91dD4uIFdoZXJlIExheW91dCBvd25zIENTUyBncmlkXG4gKiB0cmFja3MsIENsdXN0ZXIgb3ducyBhIHJvdyBvZiBpdGVtcyB0aGF0IGRpZmZlciBpbiB3aWR0aCBhbmQgbXVzdFxuICogcmVmbG93IGFzIHNwYWNlIHJ1bnMgb3V0IOKAlCBmaWx0ZXIgY2hpcHMsIHRhZyBhbmQgYmFkZ2UgbGlzdHMsIGdyb3Vwc1xuICogb2Ygc21hbGwgYnV0dG9ucy4gSXRlbXMga2VlcCBldmVuIHNwYWNpbmcgb24gYm90aCBheGVzIHZpYSBgZ2FwYDsgdGhlXG4gKiByb3cgd3JhcHMgYXV0b21hdGljYWxseSBhdCBuYXJyb3cgd2lkdGhzLiBMaWtlIExheW91dCwgcHJvcHMgbWFwIHRvXG4gKiBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gY29uc3VtZXJzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlbSBpbiBhXG4gKiBtZWRpYSBxdWVyeSB3aXRob3V0IHRvdWNoaW5nIHNwZWNpZmljaXR5LlxuICpcbiAqIFRoaXMgaXMgdGhlIHNlY29uZCAoYW5kIGZpbmFsKSBsYXlvdXQgcHJpbWl0aXZlOiBhIGNvbnN1bWVyIG5ldmVyXG4gKiB3cml0ZXMgYGRpc3BsYXk6IGZsZXhgIG9yIGBkaXNwbGF5OiBncmlkYCB0aGVtc2VsdmVzIOKAlCBncmlkIGdvZXNcbiAqIHRocm91Z2ggPExheW91dD4sIGEgd3JhcHBpbmcgY2x1c3RlciBnb2VzIHRocm91Z2ggPENsdXN0ZXI+LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2x1c3Rlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENsdXN0ZXJQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBuYXYsIHVsLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIFNwYWNlIGJldHdlZW4gaXRlbXMsIGJvdGggYXhlcy4gVHlwaWNhbGx5IGEgYC0tcG9sbHktc3BhY2UtKmAgdG9rZW4uICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogTWFpbi1heGlzIGRpc3RyaWJ1dGlvbiDigJQgbWFwcyB0byBqdXN0aWZ5LWNvbnRlbnQuIERlZmF1bHQ6IHN0YXJ0LiAqL1xuICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgd2l0aGluIGEgd3JhcHBlZCByb3cg4oCUIG1hcHMgdG8gYWxpZ24taXRlbXMuIERlZmF1bHQ6IGNlbnRlci4gKi9cbiAgYWxpZ24/OiBzdHJpbmc7XG5cbiAgLyoqIFJlbmRlciBhcyBpbmxpbmUtZmxleCBzbyB0aGUgY2x1c3RlciBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsdXN0ZXIocHJvcHM6IENsdXN0ZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYXMgPSBcImRpdlwiLCBnYXAsIHBhZGRpbmcsIGp1c3RpZnksIGFsaWduLCBpbmxpbmUsIGNsYXNzTmFtZSwgaWQsIHJvbGUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChnYXApIHN0eWxlW1wiLS1jLWdhcFwiXSA9IGdhcDtcbiAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1jLXBcIl0gPSBwYWRkaW5nO1xuICBpZiAoanVzdGlmeSkgc3R5bGVbXCItLWMtamNcIl0gPSBqdXN0aWZ5O1xuICBpZiAoYWxpZ24pIHN0eWxlW1wiLS1jLWFpXCJdID0gYWxpZ247XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNsdXN0ZXJcIl1dO1xuICBpZiAoaW5saW5lKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBzdHlsZSxcbiAgICAgIHJvbGUsXG4gICAgICBcImFyaWEtbGFiZWxcIjogcHJvcHNbXCJhcmlhLWxhYmVsXCJdLFxuICAgICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgICBcImRhdGEtcG9sbHktY2x1c3RlclwiOiB0cnVlLFxuICAgIH0sXG4gICAgY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2RlIOKAlCBpbmxpbmUgbW9ub3NwYWNlIGNvZGUgc3Bhbi5cbiAqXG4gKiBSZW5kZXJzIGEgYDxjb2RlPmAgd2l0aCB0aGUgYC0tcG9sbHktZm9udC1tb25vYCBzdGFjaywgYSBmYWludCBzdW5rZW5cbiAqIHRpbnQsIGFuZCBzbnVnIHBhZGRpbmcgc28gYSBjb25zdW1lciBuZXZlciBoYW5kLXJvbGxzIGEgYC5tb25vYCBjbGFzc1xuICogZm9yIGlubGluZSBjb2RlLCBpZGVudGlmaWVycywgb3Iga2V5Ym9hcmQgaGludHMuIEZvciBtdWx0aS1saW5lIGNvZGVcbiAqIGJsb2NrcywgcGFzcyBgYmxvY2tgLCB3aGljaCBzd2l0Y2hlcyB0byBhIHByZS13cmFwcGVkIDxwcmU+PGNvZGU+LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvZGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBDb2RlUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBSZW5kZXIgYXMgYSBibG9jayAoPHByZT48Y29kZT4pIGluc3RlYWQgb2YgYW4gaW5saW5lIHNwYW4uICovXG4gIGJsb2NrPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2RlKHByb3BzOiBDb2RlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGJsb2NrLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIHNwcmVhZCBmaXJzdDsgdGhlIGV4cGxpY2l0IGF0dHJpYnV0ZXMgYWZ0ZXJcbiAgLy8gd2luIG9uIGFueSBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAoYmxvY2spIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmxvY2tcIl1dO1xuICAgIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHByZVxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWNvZGU9XCJibG9ja1wiXG4gICAgICA+XG4gICAgICAgIDxjb2RlPntjaGlsZHJlbn08L2NvZGU+XG4gICAgICA8L3ByZT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvZGVcIl1dO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgPGNvZGVcbiAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvZGU9XCJpbmxpbmVcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2NvZGU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ29sbGFwc2libGUg4oCUIG5hdGl2ZSA8ZGV0YWlscz4vPHN1bW1hcnk+IHdyYXBwZXIuXG4gKlxuICogVXNlcyB0aGUgYnJvd3NlcidzIGJ1aWx0LWluIGRpc2Nsb3N1cmUgc2VtYW50aWNzIHNvIGtleWJvYXJkIGFuZFxuICogc2NyZWVuLXJlYWRlciBiZWhhdmlvdXIgY29tZSBmcmVlLiBUaGUgYXJyb3cgaXMgYSByZWFsIGVsZW1lbnQsIG5vdCBhXG4gKiA6OmJlZm9yZTogdGhlIHN1bW1hcnkgaXMgYSB0d28tdHJhY2sgPExheW91dD4sIGFuZCBubyBsYXlvdXQgY29udGFpbmVyIGNhblxuICogYXJyYW5nZSBhIHBzZXVkby1lbGVtZW50LiBJdCByb3RhdGVzIG9uIG9wZW4uXG4gKiBDb2xvcnMsIHNwYWNpbmcsIGFuZCBtb3Rpb24gY29tZSBmcm9tIHRva2VuczsgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXG4gKiB6ZXJvZXMgdGhlIHJvdGF0aW9uIHZpYSB0aGUgbW90aW9uIHRva2VuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvbGxhcHNpYmxlLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ29sbGFwc2libGVQcm9wcyA9IHtcbiAgLyoqIERpc2Nsb3N1cmUgaGVhZGVyLiBBIHN0cmluZyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBvciBhbnkgbm9kZSDigJRcbiAgICogZS5nLiBhIG11dGVkLCBzbWFsbCA8VGV4dD4g4oCUIHdoZW4gdGhlIGhlYWRlciBuZWVkcyBzdHlsaW5nLiAqL1xuICBzdW1tYXJ5OiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogSW5wdXQgdHlwZXMgd2hvc2UgU3BhY2UvRW50ZXIgaXMgYW4gYWN0aXZhdGlvbiwgbm90IHRleHQgZW50cnkg4oCUIHRoZXNlXG4gKiBrZWVwIHRoZWlyIG93biBrZXlib2FyZCBiZWhhdmlvdXIgYW5kIG11c3Qgbm90IGJlIGd1YXJkZWQuICovXG5jb25zdCBOT05fVEVYVF9JTlBVVF9UWVBFUyA9IG5ldyBTZXQoW1xuICBcImNoZWNrYm94XCIsXG4gIFwicmFkaW9cIixcbiAgXCJidXR0b25cIixcbiAgXCJzdWJtaXRcIixcbiAgXCJyZXNldFwiLFxuICBcImZpbGVcIixcbiAgXCJpbWFnZVwiLFxuICBcInJhbmdlXCIsXG4gIFwiY29sb3JcIixcbl0pO1xuXG4vKiogSXMgdGhlIGV2ZW50IHRhcmdldCBhIGZpZWxkIHdoZXJlIFNwYWNlL0VudGVyIGluc2VydHMvZWRpdHMgdGV4dD8gKi9cbmZ1bmN0aW9uIGlzVGV4dEVudHJ5VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHJldHVybiB0cnVlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgIHJldHVybiAhTk9OX1RFWFRfSU5QVVRfVFlQRVMuaGFzKHRhcmdldC50eXBlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hyb21pdW0gdG9nZ2xlcyBhIDxkZXRhaWxzPiBvbiB0aGUgU3BhY2UvRW50ZXIgKmtleXVwKiBvZiBpdHMgPHN1bW1hcnk+LFxuICogZXZlbiB3aGVuIGZvY3VzIHNpdHMgaW4gYSBuZXN0ZWQgdGV4dCBmaWVsZCDigJQgc28gZXZlcnkgc3BhY2UgdHlwZWQgaW4gYW5cbiAqIGVkaXRhYmxlIGhlYWRlciB3b3VsZCBjb2xsYXBzZSB0aGUgZGlzY2xvc3VyZS4gc3RvcFByb3BhZ2F0aW9uIGNhbid0IHN0b3BcbiAqIGl0ICh0aGUgdG9nZ2xlIGlzIHRoZSBzdW1tYXJ5J3Mgb3duIGFjdGl2YXRpb24gYmVoYXZpb3VyLCBub3QgYSBidWJibGluZ1xuICogbGlzdGVuZXIpIGFuZCBwcmV2ZW50RGVmYXVsdCBvbiAqa2V5ZG93biogd291bGQgc3dhbGxvdyB0aGUgY2hhcmFjdGVyLiBUaGVcbiAqIGNoYXJhY3RlciBpcyBhbHJlYWR5IGluc2VydGVkIGJ5IHRoZSB0aW1lIGtleXVwIGZpcmVzLCBzbyBjYW5jZWxsaW5nIHRoZVxuICoga2V5dXAgZGVmYXVsdCBmb3IgdGV4dC1lbnRyeSBmaWVsZHMga2lsbHMgdGhlIHRvZ2dsZSB3aGlsZSBsZWF2aW5nIHR5cGluZ1xuICogdW50b3VjaGVkLiBCdXR0b25zL2NoZWNrYm94L3JhZGlvIGZhbGwgdGhyb3VnaCBhbmQga2VlcCB0aGVpciBvd25cbiAqIGFjdGl2YXRpb247IHRoZSBzdW1tYXJ5IGl0c2VsZiAobm8gbmVzdGVkIGZpZWxkKSBrZWVwcyBub3JtYWwga2V5Ym9hcmRcbiAqIGRpc2Nsb3N1cmUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVN1bW1hcnlLZXlVcChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgaWYgKGV2ZW50LmtleSAhPT0gXCIgXCIgJiYgZXZlbnQua2V5ICE9PSBcIkVudGVyXCIpIHJldHVybjtcbiAgaWYgKCFpc1RleHRFbnRyeVRhcmdldChldmVudC50YXJnZXQpKSByZXR1cm47XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xsYXBzaWJsZShwcm9wczogQ29sbGFwc2libGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBjaGlsZHJlbiwgZGVmYXVsdE9wZW4gPSBmYWxzZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjb2xsYXBzaWJsZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8ZGV0YWlsc1xuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgb3Blbj17ZGVmYXVsdE9wZW59XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvbGxhcHNpYmxlXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBhcz1cInN1bW1hcnlcIlxuICAgICAgICBjb2x1bW5zPVwiYXV0byAxZnJcIlxuICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wic3VtbWFyeVwiXX1cbiAgICAgICAgb25LZXlVcD17aGFuZGxlU3VtbWFyeUtleVVwfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcIm1hcmtlclwiXX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJzdW1tYXJ5Q29udGVudFwiXX0+e3N1bW1hcnl9PC9zcGFuPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiY29udGVudFwiXX0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgKTtcbn1cbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBmLGNsb25lRWxlbWVudCBhcyBhfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsRnJhZ21lbnQgYXMgU3RyaWN0TW9kZSxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBjLHVzZUxheW91dEVmZmVjdCBhcyBzLHVzZUVmZmVjdCBhcyBoLHVzZUNhbGxiYWNrIGFzIHYsdXNlQ29udGV4dCBhcyBkLHVzZURlYnVnVmFsdWUgYXMgbSx1c2VJZCBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgeSx1c2VNZW1vIGFzIF8sdXNlUmVkdWNlciBhcyBiLHVzZVJlZiBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEUobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQyhuLHQpe3ZhciBlPXQoKSxyPWMoe3Q6e19fOmUsdTp0fX0pLHU9clswXS50LG89clsxXTtyZXR1cm4gcyhmdW5jdGlvbigpe3UuX189ZSx1LnU9dCxSKHUpJiZvKHt0OnV9KX0sW24sZSx0XSksaChmdW5jdGlvbigpe3JldHVybiBSKHUpJiZvKHt0OnV9KSxuKGZ1bmN0aW9uKCl7Uih1KSYmbyh7dDp1fSl9KX0sW25dKSxlfWZ1bmN0aW9uIFIobil7dHJ5e3JldHVybiEoKHQ9bi5fXyk9PT0oZT1uLnUoKSkmJigwIT09dHx8MS90PT0xL2UpfHx0IT10JiZlIT1lKX1jYXRjaChuKXtyZXR1cm4hMH12YXIgdCxlfWZ1bmN0aW9uIHgobil7bigpfWZ1bmN0aW9uIHcobil7cmV0dXJuIG59ZnVuY3Rpb24gaygpe3JldHVyblshMSx4XX12YXIgST1zO2Z1bmN0aW9uIE0obix0KXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PXR9ZnVuY3Rpb24gTihuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIHQhPW4ucmVmJiZ0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fHQhPW4ucmVmOkUodGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5fX2Y9dS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1LnR5cGU9bix1fShNLnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsTS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEUodGhpcy5wcm9wcyxuKXx8RSh0aGlzLnN0YXRlLHQpfTt2YXIgVD1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCksVCYmVChuKX07dmFyIEE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIEQobil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1BLHQucmVuZGVyPW4sdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBGPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sTD17bWFwOkYsZm9yRWFjaDpGLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxPPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fa3x8W10pLHUuX19jKG4sdCk7TyhuLHQsZSxyKX07dmFyIFU9ZS51bm1vdW50O2Z1bmN0aW9uIFYobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2MuX19lPSEwLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFYobix0LGUpfSkpLG59ZnVuY3Rpb24gVyhuLHQsZSl7cmV0dXJuIG4mJmUmJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFcobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5hcHBlbmRDaGlsZChuLl9fZSksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBQKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGoobil7dmFyIHQ9bi5fXyYmbi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiB6KG4pe3ZhciBlLHIsdSxvPW51bGw7ZnVuY3Rpb24gaShpKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7biYmKG89bi5kZWZhdWx0fHxuKSx1PSEwfSxmdW5jdGlvbihuKXtyPW4sdT0hMH0pLHIpdGhyb3cgcjtpZighdSl0aHJvdyBlO3JldHVybiBvP3QobyxpKTpudWxsfXJldHVybiBpLmRpc3BsYXlOYW1lPVwiTGF6eVwiLGkuX19mPSEwLGl9ZnVuY3Rpb24gQigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWUudW5tb3VudD1mdW5jdGlvbihuKXt2YXIgdD1uLl9fYzt0JiYodC5fX3o9ITApLHQmJnQuX19SJiZ0Ll9fUigpLHQmJjMyJm4uX191JiYobi50eXBlPW51bGwpLFUmJlUobil9LChQLnByb3RvdHlwZT1uZXcgbikuX19jPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dC5fX2Mscj10aGlzO251bGw9PXIubyYmKHIubz1bXSksci5vLnB1c2goZSk7dmFyIHU9aihyLl9fdiksbz0hMSxpPWZ1bmN0aW9uKCl7b3x8ci5fX3p8fChvPSEwLGUuX19SPW51bGwsdT91KGYpOmYoKSl9O2UuX19SPWk7dmFyIGw9ZS5fX1A7ZS5fX1A9bnVsbDt2YXIgZj1mdW5jdGlvbigpe2lmKCEtLXIuX191KXtpZihyLnN0YXRlLl9fYSl7dmFyIG49ci5zdGF0ZS5fX2E7ci5fX3YuX19rWzBdPVcobixuLl9fYy5fX1Asbi5fX2MuX19PKX12YXIgdDtmb3Ioci5zZXRTdGF0ZSh7X19hOnIuX19iPW51bGx9KTt0PXIuby5wb3AoKTspdC5fX1A9bCx0LmZvcmNlVXBkYXRlKCl9fTtyLl9fdSsrfHwzMiZ0Ll9fdXx8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxQLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPVYodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9fdSY9LTMzKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIEg9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4ubC5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4ubC5zaXplKSlmb3IoZT1uLmk7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLmk9ZT1lWzJdfX07ZnVuY3Rpb24gWihuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIFkobil7dmFyIGU9dGhpcyxyPW4uaDtpZihlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUudiksZS52PW51bGwsZS5oPW51bGx9LGUuaCYmZS5oIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFlLnYpe2Zvcih2YXIgdT1lLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO2UuaD1yLGUudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxfX2s6e19fbTp1Ll9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOnIubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaC5pbnNlcnRCZWZvcmUobix0KX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5oLnJlbW92ZUNoaWxkKG4pfX19byh0KFose2NvbnRleHQ6ZS5jb250ZXh0fSxuLl9fdiksZS52KX1mdW5jdGlvbiAkKG4sZSl7dmFyIHI9dChZLHtfX3Y6bixoOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oQi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9aih0Ll9fdikscj10LmwuZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksSCh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LEIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5sLnNldCh0W2VdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiBuLmNoaWxkcmVufSxCLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Qi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7SChuLGUsdCl9KX07dmFyIHE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEo9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxLPS9bQS1aMC05XS9nLFE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50LFg9ZnVuY3Rpb24obil7cmV0dXJuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKT8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChuKX07ZnVuY3Rpb24gbm4obix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gdG4obix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIGVuPWUuZXZlbnQ7ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gZW4mJihuPWVuKG4pKSxuLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LG4uaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sbi5uYXRpdmVFdmVudD1ufTt2YXIgcm4sdW49e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LG9uPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e30sbz0tMT09ZS5pbmRleE9mKFwiLVwiKTtmb3IodmFyIGkgaW4gdCl7dmFyIGw9dFtpXTtpZighKFwidmFsdWVcIj09PWkmJlwiZGVmYXVsdFZhbHVlXCJpbiB0JiZudWxsPT1sfHxRJiZcImNoaWxkcmVuXCI9PT1pJiZcIm5vc2NyaXB0XCI9PT1lfHxcImNsYXNzXCI9PT1pfHxcImNsYXNzTmFtZVwiPT09aSkpe3ZhciBmPWkudG9Mb3dlckNhc2UoKTtcImRlZmF1bHRWYWx1ZVwiPT09aSYmXCJ2YWx1ZVwiaW4gdCYmbnVsbD09dC52YWx1ZT9pPVwidmFsdWVcIjpcImRvd25sb2FkXCI9PT1pJiYhMD09PWw/bD1cIlwiOlwidHJhbnNsYXRlXCI9PT1mJiZcIm5vXCI9PT1sP2w9ITE6XCJvXCI9PT1mWzBdJiZcIm5cIj09PWZbMV0/XCJvbmRvdWJsZWNsaWNrXCI9PT1mP2k9XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09Znx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8WCh0LnR5cGUpP1wib25mb2N1c1wiPT09Zj9pPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWY/aT1cIm9uZm9jdXNvdXRcIjpKLnRlc3QoaSkmJihpPWYpOmY9aT1cIm9uaW5wdXRcIjpvJiZHLnRlc3QoaSk/aT1pLnJlcGxhY2UoSyxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1sJiYobD12b2lkIDApLFwib25pbnB1dFwiPT09ZiYmdVtpPWZdJiYoaT1cIm9uaW5wdXRDYXB0dXJlXCIpLHVbaV09bH19XCJzZWxlY3RcIj09ZSYmKHUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsdW4pKTp0LmNsYXNzTmFtZSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1xLG9uJiZvbihuKX07dmFyIGxuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe2xuJiZsbihuKSxybj1uLl9fY307dmFyIGZuPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe2ZuJiZmbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHJuPW51bGx9O3ZhciBhbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHJuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9LHVzZUNhbGxiYWNrOnYsdXNlQ29udGV4dDpkLHVzZURlYnVnVmFsdWU6bSx1c2VEZWZlcnJlZFZhbHVlOncsdXNlRWZmZWN0OmgsdXNlSWQ6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOnksdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlTGF5b3V0RWZmZWN0OnMsdXNlTWVtbzpfLHVzZVJlZHVjZXI6Yix1c2VSZWY6Uyx1c2VTdGF0ZTpjLHVzZVN5bmNFeHRlcm5hbFN0b3JlOkMsdXNlVHJhbnNpdGlvbjprfX19LGNuPVwiMTguMy4xXCI7ZnVuY3Rpb24gc24obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PXF9ZnVuY3Rpb24gdm4obil7cmV0dXJuIGhuKG4pJiZuLnR5cGU9PT11fWZ1bmN0aW9uIGRuKG4pe3JldHVybiEhbiYmXCJzdHJpbmdcIj09dHlwZW9mIG4uZGlzcGxheU5hbWUmJjA9PW4uZGlzcGxheU5hbWUuaW5kZXhPZihcIk1lbW8oXCIpfWZ1bmN0aW9uIG1uKG4pe3JldHVybiBobihuKT9hLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIHBuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHluKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIF9uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LGJuPWZ1bmN0aW9uKG4sdCl7dmFyIHIsdT1lLmRlYm91bmNlUmVuZGVyaW5nO2UuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24obil7cj1ufTt0cnl7dmFyIG89bih0KTtyZXR1cm4gciYmcigpLG99ZmluYWxseXtlLmRlYm91bmNlUmVuZGVyaW5nPXV9fSxTbj1obixnbj17dXNlU3RhdGU6Yyx1c2VJZDpwLHVzZVJlZHVjZXI6Yix1c2VFZmZlY3Q6aCx1c2VMYXlvdXRFZmZlY3Q6cyx1c2VJbnNlcnRpb25FZmZlY3Q6SSx1c2VUcmFuc2l0aW9uOmssdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZVN5bmNFeHRlcm5hbFN0b3JlOkMsc3RhcnRUcmFuc2l0aW9uOngsdXNlUmVmOlMsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZU1lbW86Xyx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdmVyc2lvbjpcIjE4LjMuMVwiLENoaWxkcmVuOkwscmVuZGVyOm5uLGh5ZHJhdGU6dG4sdW5tb3VudENvbXBvbmVudEF0Tm9kZTpwbixjcmVhdGVQb3J0YWw6JCxjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6c24sY2xvbmVFbGVtZW50Om1uLGNyZWF0ZVJlZjpmLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6aG4saXNFbGVtZW50OlNuLGlzRnJhZ21lbnQ6dm4saXNNZW1vOmRuLGZpbmRET01Ob2RlOnluLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6TSxtZW1vOk4sZm9yd2FyZFJlZjpELGZsdXNoU3luYzpibix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpfbixTdHJpY3RNb2RlOnUsU3VzcGVuc2U6UCxTdXNwZW5zZUxpc3Q6QixsYXp5OnosX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6YW59O2V4cG9ydHtMIGFzIENoaWxkcmVuLE0gYXMgUHVyZUNvbXBvbmVudCxQIGFzIFN1c3BlbnNlLEIgYXMgU3VzcGVuc2VMaXN0LGFuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELG1uIGFzIGNsb25lRWxlbWVudCxzbiBhcyBjcmVhdGVGYWN0b3J5LCQgYXMgY3JlYXRlUG9ydGFsLGduIGFzIGRlZmF1bHQseW4gYXMgZmluZERPTU5vZGUsYm4gYXMgZmx1c2hTeW5jLEQgYXMgZm9yd2FyZFJlZix0biBhcyBoeWRyYXRlLFNuIGFzIGlzRWxlbWVudCx2biBhcyBpc0ZyYWdtZW50LGRuIGFzIGlzTWVtbyxobiBhcyBpc1ZhbGlkRWxlbWVudCx6IGFzIGxhenksTiBhcyBtZW1vLG5uIGFzIHJlbmRlcix4IGFzIHN0YXJ0VHJhbnNpdGlvbixwbiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLF9uIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLHcgYXMgdXNlRGVmZXJyZWRWYWx1ZSxJIGFzIHVzZUluc2VydGlvbkVmZmVjdCxDIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGsgYXMgdXNlVHJhbnNpdGlvbixjbiBhcyB2ZXJzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBhdC5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogRm9jdXMgdHJhcC5cbiAqXG4gKiBLZWVwcyBUYWIgLyBTaGlmdCtUYWIgaW5zaWRlIGEgcm9vdCBlbGVtZW50LiBSZXR1cm5zIGEgY2xlYW51cCB0aGF0XG4gKiByZXN0b3JlcyBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBhY3RpdmUgYmVmb3JlIHRoZSB0cmFwIG1vdW50ZWQuXG4gKiBTaW1wbGUgYW5kIHN5bmNocm9ub3VzIOKAlCBhc3N1bWVzIGEgc2luZ2xlIGFjdGl2ZSB0cmFwIHBlciBPdmVybGF5Um9vdFxuICogYW5kIGxldHMgdGhlIG92ZXJsYXkgcmVnaXN0cnkgaW4gYEBmYWlyZm94L3BvbGx5L2FjdGlvbnNgIGVuZm9yY2UgdGhhdFxuICogYXQgdGhlIHN0YWNrIGxldmVsLlxuICovXG5cbmNvbnN0IEZPQ1VTQUJMRV9TRUxFQ1RPUiA9IFtcbiAgXCJhW2hyZWZdXCIsXG4gIFwiYXJlYVtocmVmXVwiLFxuICBcImJ1dHRvbjpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0eXBlPWhpZGRlbl0pXCIsXG4gIFwic2VsZWN0Om5vdChbZGlzYWJsZWRdKVwiLFxuICBcInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKVwiLFxuICBcImlmcmFtZVwiLFxuICBcIm9iamVjdFwiLFxuICBcImVtYmVkXCIsXG4gICdbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknLFxuICBcIltjb250ZW50ZWRpdGFibGVdXCIsXG5dLmpvaW4oXCIsXCIpO1xuXG5mdW5jdGlvbiBnZXRGb2N1c2FibGUocm9vdDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFtdIHtcbiAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oRk9DVVNBQkxFX1NFTEVDVE9SKSk7XG4gIHJldHVybiBub2Rlcy5maWx0ZXIoXG4gICAgKGVsKSA9PiAhZWwuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikgJiYgZWwuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRm9jdXNUcmFwKHJvb3Q6IEhUTUxFbGVtZW50KTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHByZXZpb3VzQWN0aXZlID0gKFxuICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgOiBudWxsXG4gICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8vIE1vdmUgZm9jdXMgaW50byB0aGUgcm9vdCBpZiBpdCdzIG5vdCBhbHJlYWR5LlxuICBjb25zdCBmb2N1c2FibGUgPSBnZXRGb2N1c2FibGUocm9vdCk7XG4gIGNvbnN0IGZpcnN0ID0gZm9jdXNhYmxlWzBdID8/IHJvb3Q7XG4gIGlmICghcm9vdC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgIGZpcnN0LmZvY3VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gXCJUYWJcIikgcmV0dXJuO1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGl0ZW1zWzBdO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgIWxhc3RJdGVtKSByZXR1cm47XG4gICAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGlmIChhY3RpdmUgPT09IGZpcnN0SXRlbSB8fCAhcm9vdC5jb250YWlucyhhY3RpdmUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxhc3RJdGVtLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGxhc3RJdGVtKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZmlyc3RJdGVtLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcbiAgICBpZiAocHJldmlvdXNBY3RpdmUgJiYgZG9jdW1lbnQuY29udGFpbnMocHJldmlvdXNBY3RpdmUpKSB7XG4gICAgICBwcmV2aW91c0FjdGl2ZS5mb2N1cygpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTY3JvbGwgbG9jay5cbiAqXG4gKiBSZWZlcmVuY2UtY291bnRlZC4gTXVsdGlwbGUgb3ZlcmxheXMgY2FuIHJlcXVlc3QgYSBsb2NrOyB0aGUgYm9keVxuICogc3RheXMgbG9ja2VkIHVudGlsIGV2ZXJ5IHJlcXVlc3QgcmVsZWFzZXMuIEEgc2Nyb2xsYmFyLWd1dHRlciB0b2tlblxuICogaXMgd3JpdHRlbiBhdCBhY3F1aXJlIHRpbWUgc28gY29udGVudCBiZWhpbmQgdGhlIG92ZXJsYXkgZG9lc24ndFxuICogcmVmbG93IHdoZW4gdGhlIGJhciBkaXNhcHBlYXJzLlxuICovXG5cbmxldCBjb3VudCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3F1aXJlU2Nyb2xsTG9jaygpOiAoKSA9PiB2b2lkIHtcbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBndXR0ZXIgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGh0bWwuY2xpZW50V2lkdGg7XG4gICAgaHRtbC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9sbHktc2Nyb2xsYmFyLWd1dHRlclwiLCBgJHtndXR0ZXJ9cHhgKTtcbiAgICBodG1sLnNldEF0dHJpYnV0ZShcImRhdGEtcG9sbHktc2Nyb2xsLWxvY2tlZFwiLCBcInRydWVcIik7XG4gIH1cbiAgY291bnQgKz0gMTtcbiAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHJlbGVhc2VkKSByZXR1cm47XG4gICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgIGNvdW50IC09IDE7XG4gICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBodG1sLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcG9sbHktc2Nyb2xsLWxvY2tlZFwiKTtcbiAgICAgIGh0bWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIik7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIvKipcbiAqIE92ZXJsYXlSb290IOKAlCBwb3J0YWwgdGFyZ2V0IGZvciBzdGFja2VkIG92ZXJsYXlzLlxuICpcbiAqIEFwcHMgcmVuZGVyIDxPdmVybGF5Um9vdCAvPiBvbmNlLCB0eXBpY2FsbHkgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlXG4gKiBhcHAgcm9vdC4gTW9kYWwsIENvbmZpcm1EaWFsb2csIGFuZCBUb2FzdCBwb3J0YWwgaW50byB0aGlzIGVsZW1lbnQ7XG4gKiB0aGUgc2Nyb2xsIGxvY2sgdG9nZ2xlcyBiYXNlZCBvbiB0aGUgb3ZlcmxheSByZWdpc3RyeSBjb3VudC5cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGhhc09wZW5PdmVybGF5IH0gZnJvbSBcIi4uL2FjdGlvbnMvb3ZlcmxheS50c1wiO1xuaW1wb3J0IHsgYWNxdWlyZVNjcm9sbExvY2sgfSBmcm9tIFwiLi9pbnRlcm5hbC9zY3JvbGwtbG9jay50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vT3ZlcmxheVJvb3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gT3ZlcmxheVJvb3QoKSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgcmVsZWFzZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaGFzT3Blbk92ZXJsYXkoKSkge1xuICAgICAgICBpZiAoIXJlbGVhc2UpIHJlbGVhc2UgPSBhY3F1aXJlU2Nyb2xsTG9jaygpO1xuICAgICAgfSBlbHNlIGlmIChyZWxlYXNlKSB7XG4gICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgcmVsZWFzZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIHJlbGVhc2U/LigpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICByZXR1cm4gPGRpdiByZWY9e3JlZn0gY2xhc3M9e2NsYXNzZXNbXCJyb290XCJdfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktb3ZlcmxheS1yb290IC8+O1xufVxuXG4vKiogR2V0IHRoZSBtb3VudCBub2RlIGZvciBwb3J0YWxlZCBvdmVybGF5cy4gUmV0dXJucyBudWxsIGJlZm9yZSBtb3VudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdmVybGF5Um9vdE5vZGUoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiW2RhdGEtcG9sbHktb3ZlcmxheS1yb290XVwiKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBNb2RhbCDigJQgY29tcG91bmQgZGlhbG9nIHdpdGggZm9jdXMgdHJhcCwgRXNjYXBlIGhhbmRsaW5nLCBwb3J0YWwsXG4gKiBhbmQgb3ZlcmxheS1zdGFjayBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBSb290IHRha2VzIGEgYHdoZW5gIHNpZ25hbCAob3IgYm9vbGVhbikuIFdoZW4gdHJ1dGh5IHRoZSBjb250ZW50IG1vdW50c1xuICogaW50byB0aGUgT3ZlcmxheVJvb3QgcG9ydGFsLCBmb2N1cyBtb3ZlcyBpbnNpZGUsIFRhYiBpcyB0cmFwcGVkLCBFc2NhcGVcbiAqIGZpcmVzIGBkYXRhLWFjdGlvbj1cIm1vZGFsOmNsb3NlXCJgIChvciB0aGUgb3ZlcmxheSByZWdpc3RyeSdzIG9uQ2xvc2VcbiAqIGNhbGxiYWNrKSwgYW5kIHRoZSBib2R5IHNjcm9sbCBsb2Nrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5U2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlQ29udGV4dCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VJZCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHBvcE92ZXJsYXksIHB1c2hPdmVybGF5IH0gZnJvbSBcIi4uL2FjdGlvbnMvb3ZlcmxheS50c1wiO1xuaW1wb3J0IHsgaW5zdGFsbEZvY3VzVHJhcCB9IGZyb20gXCIuL2ludGVybmFsL2ZvY3VzLXRyYXAudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGdldE92ZXJsYXlSb290Tm9kZSB9IGZyb20gXCIuL092ZXJsYXlSb290LnRzeFwiO1xuaW1wb3J0IHsgU3VyZmFjZSB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5cbnR5cGUgTW9kYWxDb250ZXh0ID0ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZUlkOiBzdHJpbmc7XG4gIGRlc2NJZDogc3RyaW5nO1xuICBjbG9zZTogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IEN0eCA9IGNyZWF0ZUNvbnRleHQ8TW9kYWxDb250ZXh0IHwgbnVsbD4obnVsbCk7XG5cbmZ1bmN0aW9uIHVzZU1vZGFsKCk6IE1vZGFsQ29udGV4dCB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoQ3R4KTtcbiAgaWYgKCFjdHgpIHRocm93IG5ldyBFcnJvcihcIk1vZGFsIHN1Yi1jb21wb25lbnRzIG11c3QgcmVuZGVyIGluc2lkZSA8TW9kYWwuUm9vdD5cIik7XG4gIHJldHVybiBjdHg7XG59XG5cbnR5cGUgUm9vdFByb3BzID0ge1xuICB3aGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPiB8IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIHNvdXJjZTogXCJ0aXRsZVwiIHVzZXMgdGhlIDxNb2RhbC5UaXRsZT4gaWQsIG9yIHBhc3MgYW4gZXhwbGljaXQgbGFiZWwuICovXG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gUm9vdCh7IHdoZW4sIG9uQ2xvc2UsIGNoaWxkcmVuLCBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsIH06IFJvb3RQcm9wcykge1xuICBjb25zdCBpZCA9IHVzZUlkKCk7XG4gIGNvbnN0IHRpdGxlSWQgPSBgJHtpZH0tdGl0bGVgO1xuICBjb25zdCBkZXNjSWQgPSBgJHtpZH0tZGVzY2A7XG4gIGNvbnN0IG1vdW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaXNPcGVuID0gdHlwZW9mIHdoZW4gPT09IFwiYm9vbGVhblwiID8gd2hlbiA6IHdoZW4udmFsdWU7XG5cbiAgLy8gQ29uc3VtZXJzIGFsbW9zdCBhbHdheXMgcGFzcyBhbiBpbmxpbmUgY2xvc3VyZSBmb3IgYG9uQ2xvc2VgLCBzbyB0aGUgcHJvcFxuICAvLyBoYXMgYSBuZXcgaWRlbnRpdHkgb24gZXZlcnkgcmVuZGVyLiBLZWVwaW5nIGl0IGluIHRoZSBvdmVybGF5IGVmZmVjdCdzXG4gIC8vIGRlcGVuZGVuY3kgYXJyYXkgbWFkZSB0aGF0IGVmZmVjdCB0ZWFyIGRvd24gYW5kIHJlLWluc3RhbGwgcGVyIHJlbmRlcjpcbiAgLy8gZWFjaCBydW4gd3JvdGUgdGhlIGBzdGFja2Agc2lnbmFsIHR3aWNlIGFuZCBtb3ZlZCBmb2N1cyB0d2ljZSwgYW5kIHRoZVxuICAvLyBzaWduYWwgd3JpdGUgcmUtcmVuZGVyZWQgdGhlIHN1YnNjcmliZXIgdGhhdCBwcm9kdWNlZCB0aGUgbmV4dCBjbG9zdXJlLlxuICAvLyBUaGUgcmVzdWx0IHdhcyBhbiB1bmJvdW5kZWQgcmVuZGVyIGxvb3AgdGhhdCBwaW5uZWQgdGhlIG1haW4gdGhyZWFkXG4gIC8vIChwb2xseSMxNzcpLiBUaGUgZWZmZWN0IG5vdyByZWFkcyB0aGUgbGF0ZXN0IGNhbGxiYWNrIHRocm91Z2ggYSByZWYsIHNvXG4gIC8vIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG9ubHkgdGhlIHZhbHVlcyB0aGF0IGdlbnVpbmVseSByZS1vcGVuIHRoZSBvdmVybGF5LlxuICBjb25zdCBvbkNsb3NlUmVmID0gdXNlUmVmKG9uQ2xvc2UpO1xuICBvbkNsb3NlUmVmLmN1cnJlbnQgPSBvbkNsb3NlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHNldFBvcnRhbE5vZGUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbaXNPcGVuXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbiB8fCAhcG9ydGFsTm9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IGVudHJ5ID0geyBpZCwgb25DbG9zZTogKCkgPT4gb25DbG9zZVJlZi5jdXJyZW50Py4oKSB9O1xuICAgIHB1c2hPdmVybGF5KGVudHJ5KTtcbiAgICBjb25zdCBlbCA9IG1vdW50UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY2xlYW51cCA9IGVsXG4gICAgICA/IGluc3RhbGxGb2N1c1RyYXAoZWwpXG4gICAgICA6ICgpID0+IHtcbiAgICAgICAgICAvKiBubyByZWYgeWV0ICovXG4gICAgICAgIH07XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHBvcE92ZXJsYXkoaWQpO1xuICAgIH07XG4gIH0sIFtpc09wZW4sIHBvcnRhbE5vZGUsIGlkXSk7XG5cbiAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIG9uQ2xvc2U/LigpO1xuICB9O1xuXG4gIGNvbnN0IGN0eDogTW9kYWxDb250ZXh0ID0geyBpZCwgdGl0bGVJZCwgZGVzY0lkLCBjbG9zZSB9O1xuXG4gIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgPEN0eC5Qcm92aWRlciB2YWx1ZT17Y3R4fT5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgZWxlbWVudFJlZj17bW91bnRSZWZ9XG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiY29udGFpbmVyXCJdfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktbW9kYWwtY29udGVudFxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e2lkfVxuICAgICAgICBkYXRhLXN0YXRlPVwib3BlblwiXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17YXJpYUxhYmVsID8gdW5kZWZpbmVkIDogdGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXtkZXNjSWR9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvQ3R4LlByb3ZpZGVyPlxuICApO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIEJhY2tkcm9wKCkge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJiYWNrZHJvcFwiXX0gZGF0YS1wb2xseS1tb2RhbC1iYWNrZHJvcCBvbkNsaWNrPXtjbG9zZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgKTtcbn1cblxudHlwZSBDb250ZW50UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IEpTWC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gQ29udGVudCh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIHN0eWxlIH06IENvbnRlbnRQcm9wcykge1xuICBjb25zdCBjbHMgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wic3VyZmFjZVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJzdXJmYWNlXCJdO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHJhZGl1cz1cImxnXCJcbiAgICAgIHNoYWRvdz1cImxnXCJcbiAgICAgIHBvc2l0aW9uPVwicmVsYXRpdmVcIlxuICAgICAgY2xhc3NOYW1lPXtjbHN9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLXN1cmZhY2VcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5mdW5jdGlvbiBIZWFkZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGhlYWRlciBjbGFzcz17Y2xhc3Nlc1tcImhlYWRlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1oZWFkZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9oZWFkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRpdGxlKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IHRpdGxlSWQgfSA9IHVzZU1vZGFsKCk7XG4gIHJldHVybiAoXG4gICAgPGgyIGlkPXt0aXRsZUlkfSBjbGFzcz17Y2xhc3Nlc1tcInRpdGxlXCJdfSBkYXRhLXBvbGx5LW1vZGFsLXRpdGxlPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaDI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJvZHkoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIGNvbnN0IHsgZGVzY0lkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9e2Rlc2NJZH0gY2xhc3M9e2NsYXNzZXNbXCJib2R5XCJdfSBkYXRhLXBvbGx5LW1vZGFsLWJvZHk+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvb3Rlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Zm9vdGVyIGNsYXNzPXtjbGFzc2VzW1wiZm9vdGVyXCJdfSBkYXRhLXBvbGx5LW1vZGFsLWZvb3Rlcj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Zvb3Rlcj5cbiAgKTtcbn1cblxudHlwZSBDbG9zZVByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBGaXJlIGEgcmVnaXN0ZXJlZCBkYXRhLWFjdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG9uQ2xvc2UgY2FsbGJhY2suICovXG4gIGFjdGlvbj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIENsb3NlKHsgY2hpbGRyZW4sIGFjdGlvbiB9OiBDbG9zZVByb3BzKSB7XG4gIGNvbnN0IHsgY2xvc2UgfSA9IHVzZU1vZGFsKCk7XG4gIGlmIChhY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtcG9sbHktbW9kYWwtY2xvc2VcbiAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgIGRhdGEtcG9sbHktbW9kYWwtY2xvc2VcbiAgICAgIG9uQ2xpY2s9e2Nsb3NlfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IE1vZGFsID0ge1xuICBSb290LFxuICBCYWNrZHJvcCxcbiAgQ29udGVudCxcbiAgSGVhZGVyLFxuICBUaXRsZSxcbiAgQm9keSxcbiAgRm9vdGVyLFxuICBDbG9zZSxcbn07XG4iLAogICAgIi8qKlxuICogQ29uZmlybURpYWxvZyDigJQgUHJvbWlzZS1yZXR1cm5pbmcgY29uZmlybWF0aW9uIHByaW1pdGl2ZS5cbiAqXG4gKiBgY29uZmlybSh7IHRpdGxlLCBib2R5LCBkYW5nZXIgfSlgIHJldHVybnMgUHJvbWlzZTxib29sZWFuPi4gT3BlbnMgdGhlXG4gKiByZW5kZXJlZCBgPENvbmZpcm1EaWFsb2cuSG9zdCAvPmAgbW9kYWwgKHdoaWNoIG11c3QgYmUgbW91bnRlZCBvbmNlIGF0XG4gKiB0aGUgYXBwIHJvb3QpLiBVc2VyIHBpY2tpbmcgY29uZmlybSBvciBjYW5jZWwgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBFc2NhcGUsIGJhY2tkcm9wIGNsaWNrLCBhbmQgZXhwbGljaXQgYC5kaXNtaXNzKClgIHJlc29sdmUgZmFsc2UuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Db25maXJtRGlhbG9nLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vTW9kYWwudHN4XCI7XG5cbnR5cGUgQ29uZmlybVJlcXVlc3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG4gIGNvbmZpcm1MYWJlbD86IHN0cmluZztcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG4gIHJlc29sdmU6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IHBlbmRpbmcgPSBzaWduYWw8Q29uZmlybVJlcXVlc3QgfCBudWxsPihudWxsKTtcbmNvbnN0IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IHR5cGUgQ29uZmlybU9wdGlvbnMgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG4gIGNvbmZpcm1MYWJlbD86IHN0cmluZztcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlybShvcHRpb25zOiBDb25maXJtT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICBuZXh0SWQgKz0gMTtcbiAgICBwZW5kaW5nLnZhbHVlID0ge1xuICAgICAgaWQ6IG5leHRJZCxcbiAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgZGFuZ2VyOiBvcHRpb25zLmRhbmdlcixcbiAgICAgIGNvbmZpcm1MYWJlbDogb3B0aW9ucy5jb25maXJtTGFiZWwsXG4gICAgICBjYW5jZWxMYWJlbDogb3B0aW9ucy5jYW5jZWxMYWJlbCxcbiAgICAgIHJlc29sdmUsXG4gICAgfTtcbiAgICBpc09wZW4udmFsdWUgPSB0cnVlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2UocmVzdWx0OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIHBlbmRpbmcudmFsdWUgPSBudWxsO1xuICBjdXJyZW50LnJlc29sdmUocmVzdWx0KTtcbn1cblxuLyoqIFJlbmRlcnMgdGhlIGFjdGl2ZSBjb25maXJtIGRpYWxvZy4gTW91bnQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdC4gKi9cbmZ1bmN0aW9uIEhvc3QoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgY3VycmVudCA9IHBlbmRpbmcudmFsdWU7XG4gIGlmICghY3VycmVudCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsLlJvb3Qgd2hlbj17aXNPcGVufSBvbkNsb3NlPXsoKSA9PiBjbG9zZShmYWxzZSl9PlxuICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICA8TW9kYWwuVGl0bGU+e2N1cnJlbnQudGl0bGV9PC9Nb2RhbC5UaXRsZT5cbiAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgIHtjdXJyZW50LmJvZHkgPyA8TW9kYWwuQm9keT57Y3VycmVudC5ib2R5fTwvTW9kYWwuQm9keT4gOiBudWxsfVxuICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgIDxMYXlvdXRcbiAgICAgICAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZW5kXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImFjdGlvbnNcIl19XG4gICAgICAgICAgICBkYXRhLXBvbGx5LWNvbmZpcm0tYWN0aW9uc1xuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2FuY2VsXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWNhbmNlbFxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZShmYWxzZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjdXJyZW50LmNhbmNlbExhYmVsID8/IFwiQ2FuY2VsXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXtjdXJyZW50LmRhbmdlciA/IGNsYXNzZXNbXCJjb25maXJtRGFuZ2VyXCJdIDogY2xhc3Nlc1tcImNvbmZpcm1cIl19XG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWNvbmZpcm0tb2tcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UodHJ1ZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjdXJyZW50LmNvbmZpcm1MYWJlbCA/PyBcIk9LXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9Nb2RhbC5Gb290ZXI+XG4gICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgPC9Nb2RhbC5Sb290PlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ29uZmlybURpYWxvZyA9IHsgSG9zdCwgY29uZmlybSB9O1xuIiwKICAgICIvKipcbiAqIEZpbGVJbnB1dCDigJQgYSBzdHlsZWQgdHJpZ2dlciBmb3IgdGhlIG5hdGl2ZSBmaWxlIHBpY2tlci5cbiAqXG4gKiBBIGZpbGUgaXMgYSBiaW5hcnkgb2JqZWN0OiBpdCBjYW5ub3QgcmlkZSBhIGBkYXRhLWFjdGlvbmAgYXR0cmlidXRlXG4gKiB0aGUgd2F5IGEgc3RyaW5nIHZhbHVlIGRvZXMsIHNvIEZpbGVJbnB1dCBpcyB0aGUgb25lIGlucHV0IHByaW1pdGl2ZVxuICogdGhhdCB0YWtlcyBhIGNhbGxiYWNrLiBgb25GaWxlc2AgZmlyZXMgd2l0aCB0aGUgY2hvc2VuIEZpbGVMaXN0LiBUaGVcbiAqIG5hdGl2ZSA8aW5wdXQgdHlwZT1cImZpbGVcIj4gc3RheXMgaW4gdGhlIERPTSDigJQgdmlzdWFsbHkgaGlkZGVuIGluc2lkZVxuICogdGhlIDxsYWJlbD4g4oCUIHNvIHRoZSB3aG9sZSBjb250cm9sIG9wZW5zIHRoZSBwaWNrZXIgYW5kIHJlbWFpbnNcbiAqIGtleWJvYXJkLWFjY2Vzc2libGUgKHBvbGx5IzEzNSkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRQcm9wcyA9IHtcbiAgLyoqIEZpcmVkIHdpdGggdGhlIGNob3NlbiBmaWxlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gIG9uRmlsZXM6IChmaWxlczogRmlsZUxpc3QpID0+IHZvaWQ7XG4gIC8qKiBWaXNpYmxlIHRyaWdnZXIgdGV4dC4gRGVmYXVsdDogJ0Nob29zZSBmaWxlJy4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBgYWNjZXB0YCBmaWx0ZXIgZm9yd2FyZGVkIHRvIHRoZSBuYXRpdmUgaW5wdXQgKGUuZy4gJ2ltYWdlLyonKS4gKi9cbiAgYWNjZXB0Pzogc3RyaW5nO1xuICAvKiogQWxsb3cgc2VsZWN0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZS4gKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gRmlsZUlucHV0KHByb3BzOiBGaWxlSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBvbkZpbGVzLCBsYWJlbCA9IFwiQ2hvb3NlIGZpbGVcIiwgYWNjZXB0LCBtdWx0aXBsZSwgZGlzYWJsZWQsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuY3VycmVudFRhcmdldDtcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgb25GaWxlcyhmaWxlcyk7XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImZpbGVJbnB1dFwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgaWQ9e2lkfSBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktZmlsZS1pbnB1dD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibmF0aXZlXCJdfVxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAgPHNwYW4+e2xhYmVsfTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEh0bWwg4oCUIHJlbmRlciB0cnVzdGVkLCBhbHJlYWR5LXNhbml0aXNlZCByYXcgbWFya3VwLlxuICpcbiAqIFRoZSBkZWxpYmVyYXRlIGVzY2FwZSBoYXRjaCBmb3IgdGhlIHJhcmUgdGhpbmcgcG9sbHktdWkgY2Fubm90XG4gKiBleHByZXNzOiBhIGxvY2FsbHkgZ2VuZXJhdGVkLCBhbHJlYWR5LXNhZmUgU1ZHIChhIFFSIGNvZGUpLCBhXG4gKiBwcmUtcmVuZGVyZWQgZGlhZ3JhbS4gVGhlIGNhbGxlciBvd25zIHNhZmV0eSDigJQgYGh0bWxgIGdvZXMgc3RyYWlnaHRcbiAqIGludG8gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCwgc28gaXQgTVVTVCBiZSB0cnVzdGVkIG9yIHNhbml0aXNlZFxuICogZmlyc3QuIEZvciB1bnRydXN0ZWQgbWFya2Rvd24gdXNlIGByZW5kZXJNYXJrZG93bmAsIHdoaWNoIHNhbml0aXNlcztcbiAqIGZvciBhbnl0aGluZyBhIHByaW1pdGl2ZSBhbHJlYWR5IGNvdmVycywgdXNlIHRoZSBwcmltaXRpdmUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEh0bWxQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBUcnVzdGVkLCBhbHJlYWR5LXNhbml0aXNlZCBIVE1MLiBUaGUgY2FsbGVyIG93bnMgaXRzIHNhZmV0eS4gKi9cbiAgaHRtbDogc3RyaW5nO1xuICAvKiogUG9seW1vcnBoaWMgd3JhcHBlciBlbGVtZW50IChkaXYsIHNwYW4sIGZpZ3VyZSwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEh0bWwocHJvcHM6IEh0bWxQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBodG1sLCBhcyA9IFwiZGl2XCIsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KGFzLCB7XG4gICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICBpZCxcbiAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1odG1sXCI6IHRydWUsXG4gICAgLy8gbm9zZW1ncmVwOiB0eXBlc2NyaXB0LnJlYWN0LnNlY3VyaXR5LmF1ZGl0LnJlYWN0LWRhbmdlcm91c2x5c2V0aW5uZXJodG1sLnJlYWN0LWRhbmdlcm91c2x5c2V0aW5uZXJodG1sIOKAlCB0aGlzIHByaW1pdGl2ZSBJUyB0aGUgZG9jdW1lbnRlZCB0cnVzdGVkLW1hcmt1cCBlc2NhcGUgaGF0Y2g7IHRoZSBjYWxsZXIgb3ducyBzYW5pdGlzYXRpb24gKHNlZSBtb2R1bGUgZG9jcykuXG4gICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBodG1sIH0sXG4gIH0pO1xufVxuIiwKICAgICIvKipcbiAqIExpbmsg4oCUIHRva2VuLXN0eWxlZCBuYXZpZ2F0aW9uYWwgYW5jaG9yLlxuICpcbiAqIFRoZSBwcmltaXRpdmUgZm9yIHBsYWluIGh5cGVybGlua3M6IGh1YiBhcHAtZ3JpZCBjYXJkcywgYSBmaWxlXG4gKiBkb3dubG9hZCwgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlLiA8QnV0dG9uIGhyZWY+IGlzIGZvciBsaW5rLXNoYXBlZFxuICogQlVUVE9OUyDigJQgYSBjYWxsIHRvIGFjdGlvbiB3ZWFyaW5nIGJ1dHRvbiBjaHJvbWU7IDxMaW5rPiBpcyBmb3JcbiAqIGlubGluZSwgdGV4dHVhbCBsaW5rcyB0aGF0IHJlYWQgYXMgbGlua3MuIGBleHRlcm5hbGAgb3BlbnMgYSBuZXcgdGFiXG4gKiB3aXRoIGByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJgOyBgZG93bmxvYWRgIG9mZmVycyB0aGUgdGFyZ2V0IGFzIGFcbiAqIGZpbGUgKGFuIGVtcHR5IHN0cmluZyBrZWVwcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0xpbmsubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMaW5rUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGhyZWY6IHN0cmluZztcbiAgLyoqIE9wZW4gaW4gYSBuZXcgdGFiIHdpdGggcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiLiAqL1xuICBleHRlcm5hbD86IGJvb2xlYW47XG4gIC8qKiBPZmZlciB0aGUgaHJlZiBhcyBhIGRvd25sb2FkOyBhbiBlbXB0eSBzdHJpbmcga2VlcHMgaXRzIGZpbGVuYW1lLiAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgLyoqIERyb3AgdGhlIHVuZGVybGluZSB1bnRpbCBob3ZlciDigJQgZm9yIGxpbmsgZ3JpZHMgYW5kIGNhcmQgbGlua3MuICovXG4gIHN1YnRsZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gTGluayhwcm9wczogTGlua1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBocmVmLCBleHRlcm5hbCwgZG93bmxvYWQsIHN1YnRsZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImxpbmtcIl1dO1xuICBpZiAoc3VidGxlKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdWJ0bGVcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgaHJlZj17aHJlZn1cbiAgICAgIHRhcmdldD17ZXh0ZXJuYWwgPyBcIl9ibGFua1wiIDogdW5kZWZpbmVkfVxuICAgICAgcmVsPXtleHRlcm5hbCA/IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiIDogdW5kZWZpbmVkfVxuICAgICAgZG93bmxvYWQ9e2Rvd25sb2FkfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1saW5rXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdXRwdXQg4oCUIHJlYWQtb25seSwgbXVsdGktbGluZSBkaWFnbm9zdGljIHRleHQuXG4gKlxuICogRm9yIHByb2dyYW0gb3V0cHV0IGEgY29uc3VtZXIgbXVzdCBTSE9XIGJ1dCBub3QgZWRpdDogYSBtZXNoLXN0YXRlXG4gKiBzbmFwc2hvdCwgYSBwZXItcGVlciBzeW5jIHRhYmxlLCBhIHJlY292ZXJ5IGJsb2IuIDxUZXh0SW5wdXQ+IGFuZFxuICogPEFjdGlvbklucHV0PiBhcmUgc2luZ2xlLWxpbmUgYW5kIGVkaXRhYmxlOyA8Q29kZT4gaXMgZm9yIGNvZGVcbiAqIHNhbXBsZXMgYW5kIG5ldmVyIHdyYXBzLiA8T3V0cHV0PiByZW5kZXJzIGEgbW9ub3NwYWNlIDxwcmU+IHRoYXRcbiAqIHdyYXBzIGxvbmcgbGluZXMgYnkgZGVmYXVsdCDigJQgYSBkaWFnbm9zdGljIGR1bXAgc2hvdWxkIHN0YXkgb25cbiAqIHNjcmVlbiDigJQgd2l0aCBgc2Nyb2xsYCB0byBzd2l0Y2ggdG8gYSBob3Jpem9udGFsIHNjcm9sbGJhciBpbnN0ZWFkLlxuICpcbiAqIEl0IGNhcnJpZXMgdGhlIHBvbGx5IzEyNSBwYXNzdGhyb3VnaCBzdXJmYWNlLCBzbyBhIGBkYXRhLWFjdGlvbmBcbiAqIGZvciBhIHRhcC10by1zZWxlY3QtYWxsIGdlc3R1cmUgcmlkZXMgc3RyYWlnaHQgb250byB0aGUgPHByZT5cbiAqIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL091dHB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE91dHB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogU2Nyb2xsIGxvbmcgdW5icmVha2FibGUgbGluZXMgaG9yaXpvbnRhbGx5IGluc3RlYWQgb2Ygd3JhcHBpbmcuICovXG4gIHNjcm9sbD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBibG9jayBmb2N1c2FibGUg4oCUIHBhaXIgd2l0aCBhIGBkYXRhLWFjdGlvbmAgdGFwIGdlc3R1cmUuICovXG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIE91dHB1dChwcm9wczogT3V0cHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHNjcm9sbCwgdGFiSW5kZXgsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJvdXRwdXRcIl1dO1xuICBpZiAoc2Nyb2xsKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzY3JvbGxcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8cHJlXG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LW91dHB1dFxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3ByZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTZWxlY3Qg4oCUIGRyb3Bkb3duIG9mIG9wdGlvbnMgd2l0aCBzaW5nbGUtIG9yIG11bHRpLXNlbGVjdCBzZW1hbnRpY3MuXG4gKlxuICogQ29tcG9zZXMgRHJvcGRvd24gZm9yIHRoZSBtZW51IGFuZCBhIG5hdGl2ZSBjaGVja2JveCBpbiBlYWNoIG9wdGlvblxuICogcm93IGZvciBtdWx0aS1zZWxlY3QuIFRoZSBgc2VsZWN0ZWRgIHN0YXRlIGlzIGEgU2lnbmFsPFNldDxUPj47XG4gKiBzaW5nbGUtc2VsZWN0IHJlcGxhY2VzIHRoZSBzZXQsIG11bHRpLXNlbGVjdCB0b2dnbGVzIG1lbWJlcnNoaXAuXG4gKiBNdWx0aS1zZWxlY3QgbW9kZSBhbHNvIHNob3dzIFNlbGVjdCBBbGwgLyBDbGVhciBhY3Rpb24gYnV0dG9ucyBhdFxuICogdGhlIHRvcCBvZiB0aGUgbWVudS4gU2luZ2xlLXNlbGVjdCBtb2RlIGNhbiBvcHQgaW50byBgY2xlYXJhYmxlYCxcbiAqIHdoaWNoIHByZXBlbmRzIGEgcGxhY2Vob2xkZXItbGFiZWxsZWQgb3B0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAqIHNlbGVjdGlvbiB0byBlbXB0eSDigJQgZm9yIFwiQW55IOKAplwiIGZpbHRlciBzZW1hbnRpY3MuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBTaWduYWwsIHVzZUNvbXB1dGVkLCB1c2VTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSBcIi4vRHJvcGRvd24udHN4XCI7XG5pbXBvcnQgeyBTZWxlY3RUcmlnZ2VyIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2VsZWN0LXRyaWdnZXIudHN4XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RPcHRpb248VCA9IHN0cmluZz4gPSB7IHZhbHVlOiBUOyBsYWJlbDogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFByb3BzPFQgPSBzdHJpbmc+ID0ge1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb248VD5bXTtcbiAgc2VsZWN0ZWQ6IFNpZ25hbDxTZXQ8VD4+O1xuICBsYWJlbD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNpbmdsZS1zZWxlY3Qgb25seTogcHJlcGVuZCBhbiBvcHRpb24gbGFiZWxsZWQgd2l0aCB0aGUgcGxhY2Vob2xkZXJcbiAgICogdGhhdCByZXR1cm5zIHRoZSBzZWxlY3Rpb24gdG8gZW1wdHkuIFdpdGhvdXQgaXQsIHBpY2tpbmcgYW4gb3B0aW9uXG4gICAqIGlzIGEgdHJhcCDigJQgbm90aGluZyBpbiB0aGUgbGlzdCBsZWFkcyBiYWNrIHRvIFwiYW55XCIuIFVzZSBpdCBmb3JcbiAgICogb3B0aW9uYWwgZmlsdGVycyAoXCJBbnkgc3RhZ2VcIiksIG5vdCByZXF1aXJlZCBmb3JtIGZpZWxkc1xuICAgKiAoXCJTZWxlY3QgYSB0ZWFtXCIpLiBJZ25vcmVkIGluIG11bHRpLXNlbGVjdCwgd2hpY2ggaGFzIENsZWFyLlxuICAgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogQXBwbHkgYSBjb21mb3J0YWJsZSBtaW5pbXVtIHdpZHRoIHRvIHRoZSB0cmlnZ2VyLiBEZWZhdWx0OiBzaXplcyB0byBjb250ZW50LiAqL1xuICB3aWRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmNvbnN0IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQgPSAyO1xuXG5mdW5jdGlvbiBmb3JtYXRTZWxlY3RlZDxUPihcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W10sXG4gIHNlbGVjdGVkOiBTZXQ8VD4sXG4gIG11bHRpU2VsZWN0OiBib29sZWFuXG4pOiBzdHJpbmcge1xuICBpZiAoc2VsZWN0ZWQuc2l6ZSA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChtdWx0aVNlbGVjdCAmJiBzZWxlY3RlZC5zaXplID4gTVVMVElfU0VMRUNUX0xBQkVMX1RIUkVTSE9MRCkge1xuICAgIHJldHVybiBgJHtzZWxlY3RlZC5zaXplfSBzZWxlY3RlZGA7XG4gIH1cbiAgY29uc3QgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgaWYgKHNlbGVjdGVkLmhhcyhvcHQudmFsdWUpKSBsYWJlbHMucHVzaChvcHQubGFiZWwpO1xuICB9XG4gIHJldHVybiBsYWJlbHMuam9pbihcIiwgXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0PFQgPSBzdHJpbmc+KHByb3BzOiBTZWxlY3RQcm9wczxUPik6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIG9wdGlvbnMsXG4gICAgc2VsZWN0ZWQsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdFxcdTIwMjZcIixcbiAgICBtdWx0aVNlbGVjdCA9IGZhbHNlLFxuICAgIGNsZWFyYWJsZSA9IGZhbHNlLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgd2lkZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHVzZVNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VDb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGZvcm1hdFNlbGVjdGVkKG9wdGlvbnMsIHNlbGVjdGVkLnZhbHVlLCBtdWx0aVNlbGVjdCk7XG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gMCA/IHRleHQgOiBwbGFjZWhvbGRlcjtcbiAgfSk7XG5cbiAgY29uc3QgaXNFbXB0eSA9IHVzZUNvbXB1dGVkKCgpID0+IHNlbGVjdGVkLnZhbHVlLnNpemUgPT09IDApO1xuXG4gIGNvbnN0IGhhbmRsZU9wdGlvbkNsaWNrID0gKHZhbHVlOiBUKTogdm9pZCA9PiB7XG4gICAgaWYgKG11bHRpU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChzZWxlY3RlZC52YWx1ZSk7XG4gICAgICBpZiAobmV4dC5oYXModmFsdWUpKSBuZXh0LmRlbGV0ZSh2YWx1ZSk7XG4gICAgICBlbHNlIG5leHQuYWRkKHZhbHVlKTtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KFt2YWx1ZV0pO1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbCA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQob3B0aW9ucy5tYXAoKG8pID0+IG8udmFsdWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgfTtcblxuICAvLyBUaGUgY2xlYXIgb3B0aW9uIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBzZWxlY3Rpb246IHBpY2sgaXQsIG1lbnUgY2xvc2VzLlxuICBjb25zdCBoYW5kbGVDbGVhck9wdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCB0cmlnZ2VyUGFydHMgPSBbY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIl07XG4gIGlmIChpc0VtcHR5LnZhbHVlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl0gPz8gXCJcIik7XG4gIGlmICh3aWRlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1widHJpZ2dlcldpZGVcIl0gPz8gXCJcIik7XG4gIGNvbnN0IHRyaWdnZXJDbGFzcyA9IHRyaWdnZXJQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IHRyaWdnZXJDb250ZW50ID0gPFNlbGVjdFRyaWdnZXIgbGFiZWw9e2Rpc3BsYXlUZXh0LnZhbHVlfSAvPjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LXNlbGVjdD5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAgPERyb3Bkb3duXG4gICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICB0cmlnZ2VyPXt0cmlnZ2VyQ29udGVudH1cbiAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT17dHJpZ2dlckNsYXNzfVxuICAgICAgICB0cmlnZ2VyRGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0LnZhbHVlfVxuICAgICAgICBtdWx0aVNlbGVjdD17bXVsdGlTZWxlY3R9XG4gICAgICA+XG4gICAgICAgIHttdWx0aVNlbGVjdCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbnNcIl19PlxuICAgICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbkJ0blwiXX0gb25DbGljaz17aGFuZGxlU2VsZWN0QWxsfT5cbiAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbkJ0blwiXX0gb25DbGljaz17aGFuZGxlQ2xlYXJ9PlxuICAgICAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHshbXVsdGlTZWxlY3QgJiYgY2xlYXJhYmxlICYmIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNFbXB0eS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgY2xhc3M9e1xuICAgICAgICAgICAgICBpc0VtcHR5LnZhbHVlXG4gICAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgICAgOiBjbGFzc2VzW1wib3B0aW9uXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLXBvbGx5LXNlbGVjdC1jbGVhclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJPcHRpb259XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3BsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge29wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWQudmFsdWUuaGFzKG9wdC52YWx1ZSk7XG4gICAgICAgICAgY29uc3Qgb3B0Q2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgICAgICAgICA/IGAke2NsYXNzZXNbXCJvcHRpb25cIl19ICR7Y2xhc3Nlc1tcIm9wdGlvblNlbGVjdGVkXCJdfWBcbiAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhvcHQudmFsdWUpfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgY2xhc3M9e29wdENsYXNzfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPcHRpb25DbGljayhvcHQudmFsdWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPXtjbGFzc2VzW1wib3B0aW9uQ2hlY2tcIl19XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e3RydWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvRHJvcGRvd24+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2tlbGV0b24g4oCUIHNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLlxuICpcbiAqIFRocmVlIHZhcmlhbnRzOiB0ZXh0IChmdWxsLXdpZHRoLCAxZW0gdGFsbCksIHJlY3QgKGZ1bGwtd2lkdGgsIDEwMHB4XG4gKiB0YWxsKSwgY2lyY2xlICg0MHg0MCkuIEEgQ1NTIGdyYWRpZW50IGFuaW1hdGVzIGxlZnQtdG8tcmlnaHQgb3ZlclxuICogMS41cy4gYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIHplcm9lcyB0aGUgYW5pbWF0aW9uIHZpYSB0aGUgdG9rZW5cbiAqIHN5c3RlbS4gQ29uc3VtZXJzIHNpemUgdmlhIHdpZHRoL2hlaWdodCBwcm9wcyAocHggbnVtYmVycyBvciBDU1NcbiAqIHN0cmluZ3MpOyBkZWZhdWx0IHNpemluZyBjb21lcyBmcm9tIHRoZSB2YXJpYW50LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2tlbGV0b24ubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTa2VsZXRvblZhcmlhbnQgPSBcInRleHRcIiB8IFwicmVjdFwiIHwgXCJjaXJjbGVcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25Qcm9wcyA9IHtcbiAgdmFyaWFudD86IFNrZWxldG9uVmFyaWFudDtcbiAgd2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGhlaWdodD86IHN0cmluZyB8IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVNpemUodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gYCR7dmFsdWV9cHhgO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhcmlhbnRDbGFzcyh2YXJpYW50OiBTa2VsZXRvblZhcmlhbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFyaWFudCA9PT0gXCJjaXJjbGVcIikgcmV0dXJuIGNsYXNzZXNbXCJjaXJjbGVcIl07XG4gIGlmICh2YXJpYW50ID09PSBcInJlY3RcIikgcmV0dXJuIGNsYXNzZXNbXCJyZWN0XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRleHRcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTa2VsZXRvbihwcm9wczogU2tlbGV0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJ0ZXh0XCIsIHdpZHRoLCBoZWlnaHQsIGNsYXNzTmFtZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgdyA9IHJlc29sdmVTaXplKHdpZHRoKTtcbiAgY29uc3QgaCA9IHJlc29sdmVTaXplKGhlaWdodCk7XG4gIGlmICh3ICE9PSB1bmRlZmluZWQpIHN0eWxlW1wid2lkdGhcIl0gPSB3O1xuICBpZiAoaCAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcImhlaWdodFwiXSA9IGg7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJhc2UgPSBjbGFzc2VzW1wic2tlbGV0b25cIl07XG4gIGlmIChiYXNlKSBwYXJ0cy5wdXNoKGJhc2UpO1xuICBjb25zdCB2Q2xhc3MgPSB2YXJpYW50Q2xhc3ModmFyaWFudCk7XG4gIGlmICh2Q2xhc3MpIHBhcnRzLnB1c2godkNsYXNzKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPXtwYXJ0cy5qb2luKFwiIFwiKX1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktc2tlbGV0b249e3ZhcmlhbnR9XG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGFicyDigJQgaG9yaXpvbnRhbCBuYXYgd2l0aCBhY3RpdmUtdGFiIGFjY2VudC5cbiAqXG4gKiBFYWNoIGJ1dHRvbiBjYXJyaWVzIGBkYXRhLWFjdGlvbmAgKHRoZSBjb25zdW1lci1wcm92aWRlZCBhY3Rpb24gbmFtZSlcbiAqIGFuZCBgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1gIHNvIHRoZSBldmVudCBkZWxlZ2F0b3IgcmVzb2x2ZXMgdGhlXG4gKiBhY3RpdmF0ZWQgdGFiLiBUaGUgYWN0aXZlIHRhYiBnZXRzIGBhcmlhLWN1cnJlbnQ9XCJwYWdlXCJgIGFuZCBhXG4gKiBib3R0b20tYm9yZGVyIGFjY2VudC4gVGhlIG5hdiBzY3JvbGxzIGhvcml6b250YWxseSB3aXRoIGEgaGlkZGVuXG4gKiBzY3JvbGxiYXIgZm9yIG92ZXJmbG93LiBJbnRlcm5hbCBhcnJhbmdlbWVudCB1c2VzIDxMYXlvdXQ+LCBwYWNrZWQgdG9cbiAqIHRoZSBpbmxpbmUgc3RhcnQ6IHRoZSBncmlkIGlzIDEwMCUgd2lkZSwgc28gd2l0aG91dCBqdXN0aWZ5Q29udGVudCB0aGVcbiAqIGBhdXRvYCB0cmFja3Mgc3RyZXRjaCBhbmQgZm91ciB0YWJzIHNwcmVhZCBhY3Jvc3MgdGhlIHdob2xlIGNvbnRhaW5lci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RhYnMubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUYWIgPSB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGRpc2FibGVkPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBUYWJzUHJvcHMgPSB7XG4gIHRhYnM6IFRhYltdO1xuICBhY3RpdmVUYWI6IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUYWJzKHByb3BzOiBUYWJzUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdGFicywgYWN0aXZlVGFiLCBhY3Rpb24sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widGFic1wiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxuYXZcbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBhcmlhLWxhYmVsPXtwcm9wc1tcImFyaWEtbGFiZWxcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRhYnNcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGNvbHVtbnM9e2ByZXBlYXQoJHt0YWJzLmxlbmd0aH0sIGF1dG8pYH1cbiAgICAgICAgZ2FwPVwiMFwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJlbmRcIlxuICAgICAgICBqdXN0aWZ5Q29udGVudD1cInN0YXJ0XCJcbiAgICAgID5cbiAgICAgICAge3RhYnMubWFwKCh0YWIpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVRhYiA9PT0gdGFiLmlkO1xuICAgICAgICAgIGNvbnN0IHRhYkNsYXNzID0gaXNBY3RpdmUgPyBgJHtjbGFzc2VzW1widGFiXCJdfSAke2NsYXNzZXNbXCJhY3RpdmVcIl19YCA6IGNsYXNzZXNbXCJ0YWJcIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17dGFiQ2xhc3N9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0YWIuZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGFyaWEtY3VycmVudD17aXNBY3RpdmUgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9uYXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGV4dCDigJQgdHlwb2dyYXBoaWMgcHJpbWl0aXZlIGZvciBzZWNvbmRhcnksIHNpemVkLCBhbmQgc3RhdHVzIGNvcHkuXG4gKlxuICogUmVuZGVycyBzdWJ0aXRsZXMsIGNhcHRpb25zLCBmaWVsZCBsYWJlbHMsIGVtcHR5LXN0YXRlIGNvcHksIGFuZFxuICogZXJyb3Ivd2FybmluZyBtZXNzYWdlcyB3aXRob3V0IHRoZSBjb25zdW1lciByZWFjaGluZyBmb3IgYSBgc3R5bGVgXG4gKiBhdHRyaWJ1dGUgb3IgYSBoYW5kLXJvbGxlZCBjbGFzcy4gYHRvbmVgIG1hcHMgdG8gdGhlIHNlbWFudGljXG4gKiBgLS1wb2xseS10ZXh0LSpgIGFuZCBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWxpZXM7IGBzaXplYCxcbiAqIGB3ZWlnaHRgLCBgaXRhbGljYCwgYW5kIGBsZWFkaW5nYCBjb3ZlciB0aGUgcmVtYWluaW5nIHR5cG9ncmFwaGljXG4gKiBheGVzLiBgYXNgIGtlZXBzIHRoZSBlbGVtZW50IHBvbHltb3JwaGljIHNvIHRoZSBzYW1lIHByaW1pdGl2ZSBiYWNrcyBhXG4gKiA8c3Bhbj4sIDxwPiwgPGxhYmVsPiwgb3IgPGZpZ2NhcHRpb24+LiBBIG5vLXByb3AgPFRleHQ+IGlzIGFuIG9yZGluYXJ5XG4gKiA8c3Bhbj4gYXQgYm9keSBzaXplIGFuZCBkZWZhdWx0IGNvbG91ci5cbiAqXG4gKiBwb2xseSMxMjU6IGFyYml0cmFyeSBgZGF0YS0qYCAvIGBhcmlhLSpgIGF0dHJpYnV0ZXMgYXJlIGZvcndhcmRlZCB0b1xuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQsIHNvIGEgVGV4dCB0aGF0IGFsc28gbmVlZHMgYSB0ZXN0IGhvb2sgb3IgYW5cbiAqIGExMXkgYXR0cmlidXRlIHN0YXlzIGEgc2luZ2xlIGVsZW1lbnQuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UZXh0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFRvbmUgPSBcImRlZmF1bHRcIiB8IFwibXV0ZWRcIiB8IFwiZGFuZ2VyXCIgfCBcIndhcm5pbmdcIiB8IFwic3VjY2Vzc1wiO1xuZXhwb3J0IHR5cGUgVGV4dFNpemUgPSBcInhzXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcInhsXCI7XG5leHBvcnQgdHlwZSBUZXh0V2VpZ2h0ID0gXCJub3JtYWxcIiB8IFwibWVkaXVtXCIgfCBcImJvbGRcIjtcbmV4cG9ydCB0eXBlIFRleHRMZWFkaW5nID0gXCJ0aWdodFwiIHwgXCJiYXNlXCIgfCBcImxvb3NlXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoc3BhbiwgcCwgbGFiZWwsIGZpZ2NhcHRpb24sIOKApikuIERlZmF1bHRzIHRvICdzcGFuJy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIENvbG91ciByb2xlLiAnbXV0ZWQnIGRlLWVtcGhhc2lzZXM7ICdkYW5nZXInLyd3YXJuaW5nJy8nc3VjY2VzcydcbiAgICogcmVuZGVyIHN0YXR1cyBjb3B5IGZyb20gdGhlIGAtLXBvbGx5LXN0YXR1cy0qYCB0b2tlbnMuIERlZmF1bHQ6ICdkZWZhdWx0Jy4gKi9cbiAgdG9uZT86IFRleHRUb25lO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCBzaXplLiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgc2l6ZT86IFRleHRTaXplO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCB3ZWlnaHQuIERlZmF1bHQ6IGluaGVyaXQgZnJvbSBjb250ZXh0LiAqL1xuICB3ZWlnaHQ/OiBUZXh0V2VpZ2h0O1xuXG4gIC8qKiBJdGFsaWMgZW1waGFzaXMg4oCUIGZvciBoaW50cyBhbmQgYXNpZGVzIOKAlCB3aXRob3V0IGFuIGlubGluZSBzdHlsZS4gKi9cbiAgaXRhbGljPzogYm9vbGVhbjtcblxuICAvKiogTGluZS10aHJvdWdoIOKAlCBmb3IgY29tcGxldGVkIHRvZG8gaXRlbXMgYW5kIHN1cGVyc2VkZWQgY29weS4gKi9cbiAgc3RyaWtldGhyb3VnaD86IGJvb2xlYW47XG5cbiAgLyoqIFRva2VuLWJhY2tlZCBsaW5lIGhlaWdodC4gJ2xvb3NlJyBzdWl0cyBtdWx0aS1saW5lIGJvZHkgY29weS4gKi9cbiAgbGVhZGluZz86IFRleHRMZWFkaW5nO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGb3J3YXJkZWQgc28gPFRleHQgYXM9XCJsYWJlbFwiPiBjYW4gcG9pbnQgYXQgYSBjb250cm9sLiAqL1xuICBodG1sRm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRleHQocHJvcHM6IFRleHRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJzcGFuXCIsXG4gICAgdG9uZSA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUsXG4gICAgd2VpZ2h0LFxuICAgIGl0YWxpYyxcbiAgICBzdHJpa2V0aHJvdWdoLFxuICAgIGxlYWRpbmcsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRleHRcIl1dO1xuICBpZiAodG9uZSAhPT0gXCJkZWZhdWx0XCIpIHBhcnRzLnB1c2goY2xhc3Nlc1t0b25lXSk7XG4gIGlmIChzaXplKSBwYXJ0cy5wdXNoKGNsYXNzZXNbc2l6ZV0pO1xuICBpZiAod2VpZ2h0KSBwYXJ0cy5wdXNoKGNsYXNzZXNbd2VpZ2h0XSk7XG4gIGlmIChpdGFsaWMpIHBhcnRzLnB1c2goY2xhc3Nlc1tcIml0YWxpY1wiXSk7XG4gIGlmIChzdHJpa2V0aHJvdWdoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdHJpa2V0aHJvdWdoXCJdKTtcbiAgaWYgKGxlYWRpbmcpIHBhcnRzLnB1c2goY2xhc3Nlc1tsZWFkaW5nXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXNcbiAgICAgIC8vIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIGZvcjogcHJvcHMuaHRtbEZvcixcbiAgICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgICAgXCJkYXRhLXBvbGx5LXRleHRcIjogdG9uZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2hhcmVkIGlucHV0IGExMXkgd2lyaW5nLlxuICpcbiAqIFJldHVybnMgYSBjb21tb24gc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBUZXh0SW5wdXQsIEFjdGlvbklucHV0LCBhbmRcbiAqIGFueSBjb25zdW1lci1idWlsdCBpbnB1dCBjYW4gc3BsYXQgb250byBpdHMgbmF0aXZlIGVsZW1lbnQuIEtlZXBzXG4gKiBhcmlhLSogYW5kIGRhdGEtcG9sbHktKiBuYW1lcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFtaWx5LlxuICovXG5cbmV4cG9ydCB0eXBlIElucHV0QTExeVByb3BzID0ge1xuICBuYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZElucHV0QTExeShwcm9wczogSW5wdXRBMTF5UHJvcHMpIHtcbiAgY29uc3QgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1pbnB1dFwiOiB0cnVlLFxuICAgIFwiYXJpYS1pbnZhbGlkXCI6IHByb3BzLmludmFsaWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtcmVxdWlyZWRcIjogcHJvcHMucmVxdWlyZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogcHJvcHMuZGVzY3JpYmVkQnksXG4gICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH07XG4gIGlmIChwcm9wcy5pbnZhbGlkKSBhdHRyc1tcImRhdGEtc3RhdGVcIl0gPSBcImludmFsaWRcIjtcbiAgcmV0dXJuIGF0dHJzO1xufVxuIiwKICAgICIvKipcbiAqIFRleHRJbnB1dCDigJQgcGFzc2l2ZSwgc2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dCB3cmFwcGVyLlxuICpcbiAqIERlc2lnbmVkIHRvIGxpdmUgaW5zaWRlIDxBY3Rpb25Gb3JtPi4gUGFzcyBhIHBsYWluIHN0cmluZyBmb3JcbiAqIHVuY29udHJvbGxlZCBtb2RlIChGb3JtRGF0YS1vbi1zdWJtaXQgcGlja3MgdXAgdGhlIHZhbHVlKSBvciBhXG4gKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCBtb2RlLiBFaXRoZXIgd2F5LCBhMTF5IGF0dHJpYnV0ZXMgYXJlXG4gKiB3aXJlZCBieSB0aGUgc2hhcmVkIGlucHV0LWJhc2UsIHRoZSBzdGFibGUgYFtkYXRhLXBvbGx5LWlucHV0XWAgaG9va1xuICogaXMgYXBwbGllZCBmb3Igc3R5bGluZywgYW5kIGBpbnZhbGlkYCBmbGlwcyBgYXJpYS1pbnZhbGlkYCBhbmRcbiAqIGBkYXRhLXN0YXRlPVwiaW52YWxpZFwiYCBmb3IgY29uc3VtZXIgc2VsZWN0b3JzLlxuICpcbiAqIGBpbnB1dFR5cGVgIHNldHMgdGhlIG5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlIOKAlCBcInRleHRcIiAoZGVmYXVsdCksXG4gKiBcImVtYWlsXCIsIFwibnVtYmVyXCIsIFwiZGF0ZVwiLCBhbmQgZnJpZW5kcyDigJQgc28gdGhlIGJyb3dzZXIgc3VwcGxpZXMgdGhlXG4gKiByaWdodCBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbi4gYG1pbmAvYG1heGAvYHN0ZXBgIGFwcGx5IHRvIHRoZVxuICogc2luZ2xlLWxpbmUgdmFyaWFudCAoZS5nLiBudW1lcmljIG9yIGRhdGUgYm91bmRzKSBhbmQga2VlcCBmaWx0ZXJcbiAqIGZpZWxkcyBmcm9tIGJlaW5nIHVudmFsaWRhdGVkIGZyZWUgdGV4dC5cbiAqXG4gKiBgZXJyb3JgLCB3aGVuIHN1cHBsaWVkLCByZW5kZXJzIGEgbWVzc2FnZSBiZW5lYXRoIHRoZSBmaWVsZCwgd3JhcHMgdGhlXG4gKiBjb250cm9sIGluIGEgbGFiZWxsZWQgZ3JvdXAsIGFuZCBhdXRvLXdpcmVzIGBhcmlhLWRlc2NyaWJlZGJ5YCBwbHVzIHRoZVxuICogaW52YWxpZCBzdGF0ZSDigJQgbm8gbWFudWFsIGlkIGp1Z2dsaW5nLiBXaXRob3V0IGBlcnJvcmAgdGhlIHByaW1pdGl2ZVxuICogc3RheXMgYSBiYXJlIG5hdGl2ZSBlbGVtZW50LCBleGFjdGx5IGFzIGJlZm9yZSwgc28gY29uc3VtZXJzIHRoYXQgb3duXG4gKiB0aGVpciBvd24gc3Vycm91bmRpbmcgc3RydWN0dXJlIGFyZSB1bmFmZmVjdGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGJ1aWxkSW5wdXRBMTF5IH0gZnJvbSBcIi4vaW50ZXJuYWwvaW5wdXQtYmFzZS50c1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBWYXJpYW50ID0gXCJzaW5nbGVcIiB8IFwibXVsdGlcIjtcblxuLyoqIE5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlcyBwb2xseSdzIGZpbHRlci9mb3JtIGZpZWxkcyB1c2UuICovXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiXG4gIHwgXCJzZWFyY2hcIlxuICB8IFwicGFzc3dvcmRcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICB8IFwidGltZVwiXG4gIHwgXCJtb250aFwiXG4gIHwgXCJ3ZWVrXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCwgc3RyaW5nIGZvciB1bmNvbnRyb2xsZWQgZGVmYXVsdC4gKi9cbiAgdmFsdWU/OiBTaWduYWw8c3RyaW5nPiB8IHN0cmluZztcbiAgdmFyaWFudD86IFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICAvKiogTG93ZXIgYm91bmQgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IChudW1iZXIvZGF0ZSB0eXBlcykuICovXG4gIG1pbj86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIFVwcGVyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtYXg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBTdGVwIGdyYW51bGFyaXR5IGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBzdGVwPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBhIGhpbnQgYmV5b25kIHRoZSBwbGFjZWhvbGRlci9sYWJlbC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGludmFsaWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVmFsaWRhdGlvbiBtZXNzYWdlIHJlbmRlcmVkIGJlbmVhdGggdGhlIGZpZWxkLiBXaGVuIHByZXNlbnQgdGhlXG4gICAqIHByaW1pdGl2ZSB3cmFwcyB0aGUgY29udHJvbCwgbGlua3MgdGhlIG1lc3NhZ2UgdmlhIGFyaWEtZGVzY3JpYmVkYnksXG4gICAqIGFuZCBtYXJrcyB0aGUgZmllbGQgaW52YWxpZC4gT21pdCBpdCB0byBrZWVwIGEgYmFyZSBuYXRpdmUgZWxlbWVudC5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpZD86IHN0cmluZztcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHJvd3M/OiBudW1iZXI7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsPFQ+KHY6IFNpZ25hbDxUPiB8IFQgfCB1bmRlZmluZWQpOiB2IGlzIFNpZ25hbDxUPiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2ICYmIFwicGVla1wiIGluICh2IGFzIHVua25vd24gYXMgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRleHRJbnB1dChwcm9wczogVGV4dElucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIC8vIEFsd2F5cyBjYWxsZWQgc28gaG9vayBvcmRlciBpcyBzdGFibGU7IG9ubHkgdXNlZCB3aGVuIGBlcnJvcmAgaXMgc2V0LlxuICBjb25zdCBlcnJvcklkID0gdXNlSWQoKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBwcm9wcy5lcnJvciAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmVycm9yICE9PSBcIlwiO1xuXG4gIGNvbnN0IGRlc2NyaWJlZEJ5ID1cbiAgICBbcHJvcHMuZGVzY3JpYmVkQnksIGhhc0Vycm9yID8gZXJyb3JJZCA6IHVuZGVmaW5lZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpIHx8IHVuZGVmaW5lZDtcblxuICBjb25zdCBhMTF5ID0gYnVpbGRJbnB1dEExMXkoe1xuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAvLyBBbiBlcnJvciBtZXNzYWdlIGltcGxpZXMgdGhlIGZpZWxkIGlzIGludmFsaWQuXG4gICAgaW52YWxpZDogcHJvcHMuaW52YWxpZCB8fCBoYXNFcnJvcixcbiAgICBkZXNjcmliZWRCeSxcbiAgICBwbGFjZWhvbGRlcjogcHJvcHMucGxhY2Vob2xkZXIsXG4gICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5OiBwcm9wcy5yZWFkT25seSxcbiAgfSk7XG5cbiAgY29uc3QgY29udHJvbGxlZCA9IGlzU2lnbmFsKHByb3BzLnZhbHVlKTtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSBjb250cm9sbGVkID8gKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb250cm9sbGVkXG4gICAgPyB1bmRlZmluZWRcbiAgICA6ICgocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IFwiXCIpO1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJpbnB1dFwiXX0gJHtwcm9wcy5jbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJpbnB1dFwiXTtcblxuICBjb25zdCBvbklucHV0ID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChjb250cm9sbGVkKSB7XG4gICAgICAocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBTaWduYWw8c3RyaW5nPikudmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnRyb2wgPVxuICAgIHZhcmlhbnQgPT09IFwibXVsdGlcIiA/IChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cIm11bHRpXCJcbiAgICAgICAgcm93cz17cHJvcHMucm93c31cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKSA6IChcbiAgICAgIDxpbnB1dFxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgICAgICB0eXBlPXtwcm9wcy5pbnB1dFR5cGUgPz8gXCJ0ZXh0XCJ9XG4gICAgICAgIGNsYXNzPXtjbGFzc05hbWV9XG4gICAgICAgIHRpdGxlPXtwcm9wcy50aXRsZX1cbiAgICAgICAgZGF0YS1wb2xseS1pbnB1dC12YXJpYW50PVwic2luZ2xlXCJcbiAgICAgICAgbWluPXtwcm9wcy5taW59XG4gICAgICAgIG1heD17cHJvcHMubWF4fVxuICAgICAgICBzdGVwPXtwcm9wcy5zdGVwfVxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vQXV0b2ZvY3VzOiBvcHQtaW4gcHJvcCDigJQgY2FsbGVyIHJlcXVlc3RzIGF1dG9mb2N1cyBleHBsaWNpdGx5IChlLmcuIGZvcm0gb3BlbnMgdG8gdGhpcyBmaWVsZCkuXG4gICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxuICAgICAgICB2YWx1ZT17c3RyaW5nVmFsdWV9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICBvbklucHV0PXtvbklucHV0fVxuICAgICAgLz5cbiAgICApO1xuXG4gIGlmICghaGFzRXJyb3IpIHJldHVybiBjb250cm9sO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBjbGFzc05hbWU9e2NsYXNzZXNbXCJmaWVsZFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpZWxkPlxuICAgICAge2NvbnRyb2x9XG4gICAgICA8c3BhbiBpZD17ZXJyb3JJZH0gcm9sZT1cImFsZXJ0XCIgY2xhc3M9e2NsYXNzZXNbXCJlcnJvclwiXX0+XG4gICAgICAgIHtwcm9wcy5lcnJvcn1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUb2FzdCDigJQgY29uc3VtZXItZmFjaW5nIHN1cmZhY2UgZm9yIHRoZSBnbG9iYWwgZXJyb3JTdGF0ZS5cbiAqXG4gKiBSZW5kZXJzIGV2ZXJ5IGVudHJ5IG9mIHRoZSBgZXJyb3JTdGF0ZWAgc2lnbmFsIGludG8gYSB2aWV3cG9ydCBtb3VudGVkXG4gKiBpbnNpZGUgT3ZlcmxheVJvb3QuIGBhcmlhLWxpdmVgIGlzIHBvbGl0ZSBmb3IgaW5mby93YXJuaW5nIGFuZFxuICogYXNzZXJ0aXZlIGZvciBlcnJvciBzZXZlcml0eS4gRWFjaCBpdGVtIGF1dG8tZGlzbWlzc2VzIGFmdGVyXG4gKiBgYXV0b0Rpc21pc3NNc2AgdW5sZXNzIHRoZSB1c2VyIGhvdmVycyB0aGUgdmlld3BvcnQuIENsaWNraW5nIGFcbiAqIHRvYXN0IG9yIGl0cyBjbG9zZSBidXR0b24gcmVtb3ZlcyB0aGF0IHNpbmdsZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgY2xlYXJFcnJvciwgdHlwZSBFcnJvckVudHJ5LCBlcnJvclN0YXRlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZXJyb3IudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCB7IGdldE92ZXJsYXlSb290Tm9kZSB9IGZyb20gXCIuL092ZXJsYXlSb290LnRzeFwiO1xuaW1wb3J0IHsgU3VyZmFjZSB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvYXN0Vmlld3BvcnRQcm9wcyA9IHtcbiAgYXV0b0Rpc21pc3NNcz86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlld3BvcnQocHJvcHM6IFRvYXN0Vmlld3BvcnRQcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGF1dG9EaXNtaXNzTXMgPSBwcm9wcy5hdXRvRGlzbWlzc01zID8/IDUwMDA7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwYXVzZWQsIHNldFBhdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGVudHJpZXMgPSBlcnJvclN0YXRlLnZhbHVlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UG9ydGFsTm9kZShnZXRPdmVybGF5Um9vdE5vZGUoKSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwYXVzZWQgfHwgZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBoZWFkID0gZW50cmllc1swXTtcbiAgICBpZiAoIWhlYWQpIHJldHVybjtcbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyRXJyb3IoaGVhZC5pZCk7XG4gICAgfSwgYXV0b0Rpc21pc3NNcyk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xuICB9LCBbcGF1c2VkLCBlbnRyaWVzLCBhdXRvRGlzbWlzc01zXSk7XG5cbiAgaWYgKCFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxMYXlvdXRcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBjbGFzc05hbWU9e2Ake2NsYXNzZXNbXCJ2aWV3cG9ydFwiXX0gJHtwcm9wcy5jbGFzc05hbWUgPz8gXCJcIn1gLnRyaW0oKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3Qtdmlld3BvcnRcbiAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0UGF1c2VkKHRydWUpfVxuICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRQYXVzZWQoZmFsc2UpfVxuICAgID5cbiAgICAgIHtlbnRyaWVzLm1hcCgoZW50cnkpID0+IChcbiAgICAgICAgPFRvYXN0SXRlbSBrZXk9e2VudHJ5LmlkfSBlbnRyeT17ZW50cnl9IC8+XG4gICAgICApKX1cbiAgICA8L0xheW91dD5cbiAgKTtcbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjb250ZW50LCBwb3J0YWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gVG9hc3RJdGVtKHsgZW50cnkgfTogeyBlbnRyeTogRXJyb3JFbnRyeSB9KTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBsaXZlbmVzcyA9IGVudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFzc2VydGl2ZVwiIDogXCJwb2xpdGVcIjtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJpdGVtXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2FzdC1pdGVtXG4gICAgICBkYXRhLXNldmVyaXR5PXtlbnRyeS5zZXZlcml0eX1cbiAgICAgIHJvbGU9e2VudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFsZXJ0XCIgOiBcInN0YXR1c1wifVxuICAgICAgYXJpYS1saXZlPXtsaXZlbmVzc31cbiAgICA+XG4gICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJtZXNzYWdlXCJdfT57ZW50cnkubWVzc2FnZX08L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNsb3NlXCJdfVxuICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgZGF0YS1wb2xseS10b2FzdC1jbG9zZVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsZWFyRXJyb3IoZW50cnkuaWQpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCJcbiAgICAgICAgPlxuICAgICAgICAgIMOXXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgVG9hc3QgPSB7IFZpZXdwb3J0IH07XG4iLAogICAgIi8qKlxuICogVG9nZ2xlIOKAlCBzd2l0Y2gtcm9sZSBjaGVja2JveC5cbiAqXG4gKiBBIHZpc3VhbGx5LWhpZGRlbiA8aW5wdXQgcm9sZT1cInN3aXRjaFwiPiBwYWlyZWQgd2l0aCBhIHN0eWxlZCB0cmFja1xuICogYW5kIHRodW1iIGluc2lkZSBhIDxsYWJlbD4uIFBhc3NpdmU6IHRoZSBjYWxsZXIgZHJpdmVzIGBjaGVja2VkYCBhbmRcbiAqIGhhbmRsZXMgc3RhdGUgY2hhbmdlcyB2aWEgdGhlIGFjdGlvbiByZWdpc3RyeSAod3JhcCB0aGUgVG9nZ2xlIGluIGFcbiAqIDxsYWJlbCBkYXRhLWFjdGlvbj1cIi4uLlwiPiBvciBiaW5kIGEgcGFyZW50IGZvcm0ncyBzdWJtaXQpLiBhMTF5XG4gKiBhdHRyaWJ1dGVzIGNvbWUgZnJvbSB0aGUgbmF0aXZlIGlucHV0OyB0aGUgbGFiZWwgd3JhcHMgc28gY2xpY2tzXG4gKiBhbnl3aGVyZSBpbiB0aGUgY29udHJvbCB0b2dnbGUgdGhlIGlucHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9nZ2xlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVG9nZ2xlUHJvcHMgPSB7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRvZ2dsZShwcm9wczogVG9nZ2xlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hlY2tlZCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgbmFtZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0b2dnbGVcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPVwibGFiZWxcIlxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgIGNsYXNzTmFtZT17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvZ2dsZVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIHJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBhcmlhLWNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0cmFja1wiXX0gJHtjbGFzc2VzW1widHJhY2tDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widHJhY2tcIl19PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPXtjaGVja2VkID8gYCR7Y2xhc3Nlc1tcInRodW1iXCJdfSAke2NsYXNzZXNbXCJ0aHVtYkNoZWNrZWRcIl19YCA6IGNsYXNzZXNbXCJ0aHVtYlwiXX1cbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvLyBTdGF0ZSBwcmltaXRpdmVzIHdpdGggb3B0aW9uYWwgc3luYyBhbmQgcGVyc2lzdGVuY2VcblxuaW1wb3J0IHsgZWZmZWN0LCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlQnVzIH0gZnJvbSBcIi4vbWVzc2FnZS1idXNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyLCB0eXBlIFN0b3JhZ2VBZGFwdGVyIH0gZnJvbSBcIi4vc3RvcmFnZS1hZGFwdGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVTeW5jQWRhcHRlciwgdHlwZSBTdGF0ZVN5bmNNZXNzYWdlLCB0eXBlIFN5bmNBZGFwdGVyIH0gZnJvbSBcIi4vc3luYy1hZGFwdGVyXCI7XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBwcm9taXNlIGZvciBoeWRyYXRpb24gY29udHJvbFxuICovXG50eXBlIFNpZ25hbFdpdGhMb2FkZWQ8VD4gPSBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xuXG4vKipcbiAqIFNpZ25hbCBleHRlbmRlZCB3aXRoIC5sb2FkZWQgYW5kIC52ZXJpZnkgcHJvcGVydGllcyBmb3IgdmVyaWZpY2F0aW9uIHRyYWNraW5nXG4gKi9cbnR5cGUgU2lnbmFsV2l0aFZlcmlmeTxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+OyB2ZXJpZnk6IFQgfTtcblxudHlwZSBTdGF0ZUVudHJ5PFQ+ID0ge1xuICBzaWduYWw6IFNpZ25hbDxUPjtcbiAgY2xvY2s6IG51bWJlcjsgLy8gTGFtcG9ydCBjbG9jayBmb3IgY2F1c2FsIG9yZGVyaW5nXG4gIGxvYWRlZDogUHJvbWlzZTx2b2lkPjtcbiAgdXBkYXRpbmc6IGJvb2xlYW47XG59O1xuXG50eXBlIFN0YXRlT3B0aW9uczxUID0gdW5rbm93bj4gPSB7XG4gIC8vIExlZ2FjeSBNZXNzYWdlQnVzIHN1cHBvcnQgKGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wKVxuICBidXM/OiBNZXNzYWdlQnVzO1xuXG4gIC8vIE5ldyBhZGFwdGVyIHN5c3RlbSAocmVjb21tZW5kZWQpXG4gIHN0b3JhZ2U/OiBTdG9yYWdlQWRhcHRlcjsgLy8gQ3VzdG9tIHN0b3JhZ2UgYWRhcHRlclxuICBzeW5jPzogU3luY0FkYXB0ZXI7IC8vIEN1c3RvbSBzeW5jIGFkYXB0ZXJcblxuICAvLyBCZWhhdmlvciBvcHRpb25zXG4gIGRlYm91bmNlTXM/OiBudW1iZXI7IC8vIERlYm91bmNlIHN0b3JhZ2Ugd3JpdGVzXG4gIHZhbGlkYXRvcj86ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVDsgLy8gUnVudGltZSB0eXBlIHZhbGlkYXRpb25cbiAgdmVyaWZ5PzogYm9vbGVhbjsgLy8gRW5hYmxlIHZlcmlmaWNhdGlvbiB0cmFja2luZyAoY3JlYXRlcyBwbGFpbiBvYmplY3QgbWlycm9yKVxufTtcblxuY29uc3Qgc3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTdGF0ZUVudHJ5PHVua25vd24+PigpO1xuXG4vKipcbiAqIFNoYXJlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgQU5EIHBlcnNpc3RlZCB0byBzdG9yYWdlXG4gKlxuICogVXNlcyBMYW1wb3J0IGNsb2NrIGZvciBjb25mbGljdCByZXNvbHV0aW9uLiBTdGF0ZSBpcyBhdXRvbWF0aWNhbGx5OlxuICogLSBMb2FkZWQgZnJvbSBjaHJvbWUuc3RvcmFnZSBvbiBpbml0aWFsaXphdGlvblxuICogLSBTeW5jZWQgdG8gb3RoZXIgY29udGV4dHMgdmlhIGJyb2FkY2FzdCBtZXNzYWdlc1xuICogLSBQZXJzaXN0ZWQgdG8gY2hyb21lLnN0b3JhZ2Ugb24gZXZlcnkgY2hhbmdlXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzICh1c2UgY29udGVudCBzY3JpcHQgc3RhdGUgaW5zdGVhZClcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RhdGUgKGUuZy4sIFwiYXBwLXNldHRpbmdzXCIpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZSBpZiBub3RoaW5nIGlzIGluIHN0b3JhZ2VcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnVzLCBkZWJvdW5jZU1zKVxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHRoYXQgc3RheXMgaW4gc3luYyBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmluZSBvbmNlLCB1c2UgZXZlcnl3aGVyZVxuICogY29uc3Qgc2V0dGluZ3MgPSAkc2hhcmVkU3RhdGUoXCJzZXR0aW5nc1wiLCB7IHRoZW1lOiBcImRhcmtcIiB9KVxuICpcbiAqIC8vIENoYW5nZXMgYXV0b21hdGljYWxseSBzeW5jXG4gKiBzZXR0aW5ncy52YWx1ZSA9IHsgdGhlbWU6IFwibGlnaHRcIiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzaGFyZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+OyB2ZXJpZnk/OiBUIH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogdHJ1ZSxcbiAgICBlbmFibGVQZXJzaXN0OiB0cnVlLFxuICB9KTtcblxuICAvLyBFeHBvc2UgbG9hZGVkIHByb21pc2UgZm9yIGF3YWl0aW5nIGh5ZHJhdGlvblxuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIGlmIChlbnRyeSkge1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoTG9hZGVkPFQ+KS5sb2FkZWQgPSBlbnRyeS5sb2FkZWQ7XG4gIH1cblxuICByZXR1cm4gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcbn1cblxuLyoqXG4gKiBTeW5jZWQgc3RhdGU6IHN5bmNlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIGJ1dCBOT1QgcGVyc2lzdGVkXG4gKlxuICogU3RhdGUgaXMgYnJvYWRjYXN0IHRvIGFsbCBjb250ZXh0cyBpbiByZWFsLXRpbWUgYnV0IHJlc2V0cyBvbiBleHRlbnNpb24gcmVsb2FkLlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0c1xuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHN5bmNlZCBhY3Jvc3MgY29udGV4dHMgKGJ1dCBub3QgcGVyc2lzdGVkKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBUZW1wb3Jhcnkgc2hhcmVkIHN0YXRlXG4gKiBjb25zdCBhY3RpdmVUYWJJZCA9ICRzeW5jZWRTdGF0ZShcImFjdGl2ZS10YWJcIiwgbnVsbClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHN5bmNlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IGZhbHNlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0ZWQgc3RhdGU6IHBlcnNpc3RlZCB0byBzdG9yYWdlIGJ1dCBOT1Qgc3luY2VkIGFjcm9zcyBjb250ZXh0c1xuICpcbiAqIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBjb3B5IG9mIHRoZSBzdGF0ZSwgcGVyc2lzdGVkIGluZGVwZW5kZW50bHkuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyICh1c2UgcHJlZml4IGxpa2UgXCJwb3B1cDpzdGF0ZVwiIHRvIGF2b2lkIGNvbGxpc2lvbnMpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgcGVyc2lzdGVkIHRvIHN0b3JhZ2UgKGJ1dCBub3Qgc3luY2VkKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gcGVyc2lzdGVkIHN0YXRlXG4gKiBjb25zdCBwb3B1cFN0YXRlID0gJHBlcnNpc3RlZFN0YXRlKFwicG9wdXA6bGFzdC1wYW5lbFwiLCBcImhvbWVcIilcbiAqIGNvbnN0IGRldnRvb2xzU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJkZXZ0b29sczpleHBhbmRlZFwiLCB0cnVlKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkcGVyc2lzdGVkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9IHtcbiAgY29uc3Qgc2lnID0gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IGZhbHNlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIExvY2FsIHN0YXRlOiBub3Qgc3luY2VkLCBub3QgcGVyc2lzdGVkIChsaWtlIHJlZ3VsYXIgUHJlYWN0IHNpZ25hbClcbiAqXG4gKiBTaW1wbGUgcmVhY3RpdmUgc3RhdGUgdGhhdCBsaXZlcyBvbmx5IGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gKiBSZXNldHMgb24gcmVsb2FkIG9yIGNvbnRleHQgcmVzdGFydC5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGFsbCBjb250ZXh0cyAoaW5jbHVkaW5nIHBhZ2Ugc2NyaXB0cylcbiAqXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIChsb2NhbCBvbmx5KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBMb2NhbCBVSSBzdGF0ZVxuICogY29uc3QgaXNMb2FkaW5nID0gJHN0YXRlKGZhbHNlKVxuICogY29uc3QgZXJyb3IgPSAkc3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHN0YXRlPFQ+KGluaXRpYWxWYWx1ZTogVCk6IFNpZ25hbDxUPiB7XG4gIHJldHVybiBzaWduYWwoaW5pdGlhbFZhbHVlKTtcbn1cblxuLyoqIFNlcnZlci1zaWRlIGF1dGhvcml0YXRpdmUgc3RhdGUsIGtleWVkIGZvciBzdGFibGUgaWRlbnRpdHkgYWNyb3NzIHRoZVxuICogIHByb2Nlc3MuIFVubGlrZSB0aGUgYnJvd3NlciBwcmltaXRpdmVzIGl0IGRvZXMgTk9UIHN5bmMgYWNyb3NzIGNvbnRleHRzIG9yXG4gKiAgcGVyc2lzdCB0byBjaHJvbWUuc3RvcmFnZSDigJQgdGhlIHNlcnZlciBob2xkcyB0aGUgY2Fub25pY2FsIHJlcGxpY2EgYW5kIGlzXG4gKiAgdGhlIGFsd2F5cy1vbiBwZWVyOyBjb25uZWN0ZWQgY2xpZW50cyByZWNlaXZlIGRlcml2ZWQgdXBkYXRlcyB0aHJvdWdoIHRoZVxuICogIEVseXNpYSBgcG9sbHkoKWAgcGx1Z2luJ3MgZWZmZWN0L2Jyb2FkY2FzdCBsYXllciByYXRoZXIgdGhhbiB0aHJvdWdoIHRoaXNcbiAqICBzaWduYWwgZGlyZWN0bHkuIFVzZWQgaW5zaWRlIGBwb2xseSh7IHN0YXRlOiB7IHNlcnZlcjogeyAuLi4gfSB9IH0pYCBhbmRcbiAqICByZWFkIG9uIHRoZSByZXF1ZXN0IGNvbnRleHQgYXMgYHBvbGx5U3RhdGUuc2VydmVyLjxrZXk+LnZhbHVlYC4gKi9cbmNvbnN0IHNlcnZlclN0YXRlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgU2lnbmFsPHVua25vd24+PigpO1xuXG4vKipcbiAqIFJlYWN0aXZlIHNlcnZlci1vbmx5IHN0YXRlLiBUaGUgZmlyc3QgY2FsbCBmb3IgYSBga2V5YCBjcmVhdGVzIHRoZSBzaWduYWw7XG4gKiBsYXRlciBjYWxscyB3aXRoIHRoZSBzYW1lIGBrZXlgIHJldHVybiB0aGF0IHNhbWUgc2lnbmFsLCBzbyBhIG1vZHVsZSB0aGF0XG4gKiBkZWNsYXJlcyBpdHMgc2VydmVyIHN0YXRlIG9uY2UgZ2V0cyBhIHN0YWJsZSByZWZlcmVuY2UgZXZlcnl3aGVyZSBpdCBpc1xuICogcmVhZC5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgc2VydmVyIHN0YXRlIChlLmcuIFwiZGJcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBWYWx1ZSBoZWxkIHVudGlsIHRoZSBzZXJ2ZXIgbXV0YXRlcyBpdFxuICogQHJldHVybnMgQSByZWFjdGl2ZSBzaWduYWwgaG9sZGluZyB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgJHNlcnZlclN0YXRlIH0gZnJvbSBcIkBmYWlyZm94L3BvbGx5XCI7XG4gKlxuICogY29uc3QgZGIgPSB7IHRvZG9zOiBzaWduYWwoW10pLCBuZXh0SWQ6IDEgfTtcbiAqIHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IGRiOiAkc2VydmVyU3RhdGUoXCJkYlwiLCBkYikgfSB9IH0pO1xuICogLy8gaW4gYSBoYW5kbGVyOiBjdHgucG9sbHlTdGF0ZS5zZXJ2ZXIuZGIudmFsdWUudG9kb3MudmFsdWUgPSBbLi4uXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc2VydmVyU3RhdGU8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCk6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gc2VydmVyU3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgLy8gVGhlIHJlZ2lzdHJ5IGVyYXNlcyBUIChpdCBzdG9yZXMgU2lnbmFsPHVua25vd24+KTsgdGhlIGtleSBpcyB0aGVcbiAgLy8gY2FsbGVyJ3MgY29udHJhY3QgdGhhdCB0aGUgc3RvcmVkIHNpZ25hbCBjYXJyaWVzIHRoZWlyIFQuXG4gIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbFZhbHVlKTtcbiAgc2VydmVyU3RhdGVSZWdpc3RyeS5zZXQoa2V5LCBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8dW5rbm93bj4pO1xuICByZXR1cm4gc2lnO1xufVxuXG50eXBlIEludGVybmFsU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IFN0YXRlT3B0aW9uczxUPiAmIHtcbiAgZW5hYmxlU3luYzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBlbmFibGUgc3luYyAoYXZvaWQgY29sbGlzaW9uIHdpdGggc3luYz86IFN5bmNBZGFwdGVyKVxuICBlbmFibGVQZXJzaXN0OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBwZXJzaXN0ZW5jZVxufTtcblxuLy8gRGVlcCBlcXVhbGl0eSBjaGVjayB0byBwcmV2ZW50IHJlZHVuZGFudCB1cGRhdGVzXG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXNBKSB7XG4gICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgIWRlZXBFcXVhbChcbiAgICAgICAgKGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSxcbiAgICAgICAgKGIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlc29sdmUgc3RvcmFnZSBhbmQgc3luYyBhZGFwdGVycyB3aXRoIHRocmVlLXRpZXIgcHJpb3JpdHk6XG4gKiAxLiBFeHBsaWNpdCBhZGFwdGVycyBmcm9tIG9wdGlvbnMgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gKiAyLiBNZXNzYWdlQnVzIGFkYXB0ZXJzIChsZWdhY3ksIGRlcHJlY2F0ZWQpXG4gKiAzLiBBdXRvLWRldGVjdGVkIGFkYXB0ZXJzIChkZWZhdWx0IGJlaGF2aW9yKVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWRhcHRlcnMob3B0aW9uczogSW50ZXJuYWxTdGF0ZU9wdGlvbnMpOiB7XG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyIHwgbnVsbDtcbiAgc3luYzogU3luY0FkYXB0ZXIgfCBudWxsO1xufSB7XG4gIC8vIFByaW9yaXR5IDE6IEV4cGxpY2l0IGFkYXB0ZXJzIChwYXJ0aWFsIG9yIGZ1bGwpXG4gIGlmIChvcHRpb25zLnN0b3JhZ2UgfHwgb3B0aW9ucy5zeW5jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JhZ2U6IG9wdGlvbnMuc3RvcmFnZSB8fCAob3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwpLFxuICAgICAgc3luYzogb3B0aW9ucy5zeW5jIHx8IChvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaW9yaXR5IDI6IE1lc3NhZ2VCdXMgKGxlZ2FjeSBzdXBwb3J0KVxuICAvLyBNZXNzYWdlQnVzIGRvZXNuJ3QgcHJvdmlkZSBzeW5jIGFkYXB0ZXIsIG9ubHkgQ2hyb21lIHN0b3JhZ2VcbiAgaWYgKG9wdGlvbnMuYnVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JhZ2U6IG9wdGlvbnMuYnVzLmFkYXB0ZXJzLnN0b3JhZ2UsXG4gICAgICBzeW5jOiBvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMzogQXV0by1kZXRlY3QgYmFzZWQgb24gZW5hYmxlU3luYyBhbmQgZW5hYmxlUGVyc2lzdCBmbGFnc1xuICByZXR1cm4ge1xuICAgIHN0b3JhZ2U6IG9wdGlvbnMuZW5hYmxlUGVyc2lzdCA/IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyKCkgOiBudWxsLFxuICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBULCBvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9uczxUPik6IFNpZ25hbDxUPiB7XG4gIC8vIFJldHVybiBleGlzdGluZyBzaWduYWwgaWYgYWxyZWFkeSByZWdpc3RlcmVkXG4gIGlmIChzdGF0ZVJlZ2lzdHJ5LmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk/LnNpZ25hbCBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbiAgfVxuXG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuXG4gIC8vIENyZWF0ZSB2ZXJpZmljYXRpb24gbWlycm9yIGlmIHJlcXVlc3RlZFxuICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAvLyBDcmVhdGUgcGxhaW4gb2JqZWN0IG1pcnJvciBmb3IgdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgbWlycm9yID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbml0aWFsVmFsdWUpKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhWZXJpZnk8VD4pLnZlcmlmeSA9IG1pcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5OiBTdGF0ZUVudHJ5PFQ+ID0ge1xuICAgIHNpZ25hbDogc2lnLFxuICAgIGNsb2NrOiAwLFxuICAgIGxvYWRlZDogUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgdXBkYXRpbmc6IGZhbHNlLFxuICB9O1xuXG4gIC8vIFJlc29sdmUgYWRhcHRlcnMgKGV4cGxpY2l0LCBNZXNzYWdlQnVzLCBvciBhdXRvLWRldGVjdClcbiAgY29uc3QgYWRhcHRlcnMgPSByZXNvbHZlQWRhcHRlcnMob3B0aW9ucyk7XG5cbiAgLy8gTG9hZCBmcm9tIHN0b3JhZ2UgaWYgcGVyc2lzdCBpcyBlbmFibGVkXG4gIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgIGVudHJ5LmxvYWRlZCA9IGxvYWRGcm9tU3RvcmFnZShrZXksIHNpZywgZW50cnksIGFkYXB0ZXJzLnN0b3JhZ2UsIG9wdGlvbnMudmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8vIHBvbGx5IzE2NzogdGhlIHBlbmRpbmcgZGVib3VuY2UgdGltZXIgbGl2ZXMgaW4gY3JlYXRlU3RhdGUgc2NvcGUsIG5vdFxuICAvLyBpbnNpZGUgdGhlIGBsb2FkZWRgIGNhbGxiYWNrLCBiZWNhdXNlIHRoZSBpbmNvbWluZy1tZXNzYWdlIGhhbmRsZXIgYmVsb3dcbiAgLy8gaGFzIHRvIGJlIGFibGUgdG8gY2FuY2VsIGEgd3JpdGUgdGhlIG1lc3NhZ2Ugc3VwZXJzZWRlcy5cbiAgbGV0IGRlYm91bmNlVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgaW5pdGlhbCBsb2FkXG4gIGVudHJ5LmxvYWRlZC50aGVuKCgpID0+IHtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZSA9IHNpZy52YWx1ZTtcbiAgICBsZXQgaXNGaXJzdFJ1biA9IHRydWU7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogU3luYyBlZmZlY3QgcmVxdWlyZXMgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHN0YXRlIGNoYW5nZSBzY2VuYXJpb3NcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVhZCB0aGUgc2lnbmFsIEZJUlNULCBiZWZvcmUgYW55IGVhcmx5IHJldHVybiBjYW4gaGFwcGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWFjdCByZS1jb2xsZWN0cyBhbiBlZmZlY3QncyBkZXBlbmRlbmNpZXMgb24gZXZlcnkgcnVuLCBzbyBhIHJ1biB0aGF0XG4gICAgICAvLyByZXR1cm5zIHdpdGhvdXQgdG91Y2hpbmcgYHNpZy52YWx1ZWAgdW5zdWJzY3JpYmVzIHRoZSBlZmZlY3QgZm9yIGdvb2QuXG4gICAgICAvLyBUaGUgcnVuIGFuIGluY29taW5nIHN5bmMgbWVzc2FnZSB0cmlnZ2VycyBpcyBleGFjdGx5IHN1Y2ggYSBydW4uXG4gICAgICBjb25zdCB2YWx1ZSA9IHNpZy52YWx1ZTtcblxuICAgICAgLy8gU2tpcCBmaXJzdCBydW4gKGVmZmVjdCBmaXJlcyBpbW1lZGlhdGVseSBvbiByZWdpc3RyYXRpb24pXG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpc0ZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gaW5jb21pbmcgbWVzc2FnZSBpcyBiZWluZyBhcHBsaWVkLiBBZG9wdCBpdCBhcyB0aGUgYmFzZWxpbmUg4oCUIHRoaXNcbiAgICAgIC8vIGNvbnRleHQgbm93IGhvbGRzIGl0LCBzbyB0aGUgbmV4dCBsb2NhbCBjaGFuZ2UgaXMgYSBjaGFuZ2UgYWdhaW5zdCBpdCDigJRcbiAgICAgIC8vIGFuZCBkbyBub3QgYnJvYWRjYXN0LCB3aGljaCB3b3VsZCBlY2hvIGl0IGJhY2sgdG8gdGhlIHNlbmRlci5cbiAgICAgIGlmIChlbnRyeS51cGRhdGluZykge1xuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIGlmIChkZWVwRXF1YWwodmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiBlbmFibGVkXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5U2lnbmFsID0gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPjtcbiAgICAgICAgaWYgKHZlcmlmeVNpZ25hbC52ZXJpZnkpIHtcbiAgICAgICAgICAvLyBub3NlbWdyZXA6IGphdmFzY3JpcHQubGFuZy5zZWN1cml0eS5pbnNlY3VyZS1vYmplY3QtYXNzaWduLmluc2VjdXJlLW9iamVjdC1hc3NpZ24g4oCUIGludGVybmFsIG1pcnJvcjsgdmFsdWUgaXMgYSBkZWVwIEpTT04gY2xvbmUsIG5vdCBhcmJpdHJhcnkgZXh0ZXJuYWwgaW5wdXQuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih2ZXJpZnlTaWduYWwudmVyaWZ5LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBjbG9jayBtb25vdG9uaWNhbGx5XG4gICAgICBlbnRyeS5jbG9jaysrO1xuXG4gICAgICAvLyBwb2xseSMxNjc6IGJpbmQgdGhlIGNsb2NrIHRvIHRoZSB2YWx1ZSBIRVJFLCB3aGVyZSB0aGUgdHdvIGFncmVlLlxuICAgICAgLy9cbiAgICAgIC8vIGBkb1VwZGF0ZWAgdXNlZCB0byByZWFkIGBlbnRyeS5jbG9ja2Agd2hlbiBpdCBmaXJlZC4gVW5kZXJcbiAgICAgIC8vIGBkZWJvdW5jZU1zYCB0aGF0IGlzIGEgbGF0ZXIgbW9tZW50LCBhbmQgdGhlIGluY29taW5nLW1lc3NhZ2UgaGFuZGxlclxuICAgICAgLy8gYmVsb3cgcmFpc2VzIGBlbnRyeS5jbG9ja2AgdG8gYW55IG1lc3NhZ2UncyBjbG9jayDigJQgaW5jbHVkaW5nIGFcbiAgICAgIC8vIG1lc3NhZ2Ugd2hvc2UgdmFsdWUgaXQgcmVqZWN0cy4gU28gdGhlIGRlZmVycmVkIHdyaXRlIHBhaXJlZCB0aGlzXG4gICAgICAvLyB2YWx1ZSB3aXRoIHNvbWVib2R5IGVsc2UncyBjbG9jaywgcGVyc2lzdGVkIHRoZSBwYWlyLCBhbmQgYnJvYWRjYXN0XG4gICAgICAvLyBpdC4gVGhlIHBlcnNpc3RlZCBjbG9jayBpcyByZXN0b3JlZCBvbiB0aGUgbmV4dCBsb2FkLCBzbyBhIHBlZXJcbiAgICAgIC8vIHJlLXNlbmRpbmcgdGhlIHJlYWwgdmFsdWUgYXQgdGhhdCBjbG9jayB3YXMgdGhlbiByZWZ1c2VkIGJ5IHRoZVxuICAgICAgLy8gc3RyaWN0bHktZ3JlYXRlciBydWxlIGFuZCB0aGUgZGl2ZXJnZW5jZSBiZWNhbWUgZHVyYWJsZS5cbiAgICAgIGNvbnN0IGNsb2NrQXRXcml0ZSA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICBjb25zdCBkb1VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgZGVib3VuY2VUaW1lciA9IG51bGw7XG5cbiAgICAgICAgLy8gUGVyc2lzdCB0byBzdG9yYWdlXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgY2xvY2tBdFdyaXRlLCBhZGFwdGVycy5zdG9yYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJyb2FkY2FzdCB0byBvdGhlciBjb250ZXh0c1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVTeW5jICYmIGFkYXB0ZXJzLnN5bmMpIHtcbiAgICAgICAgICBicm9hZGNhc3RVcGRhdGUoa2V5LCB2YWx1ZSwgY2xvY2tBdFdyaXRlLCBhZGFwdGVycy5zeW5jKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gRGVib3VuY2UgaWYgc3BlY2lmaWVkXG4gICAgICBpZiAob3B0aW9ucy5kZWJvdW5jZU1zKSB7XG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGRvVXBkYXRlLCBvcHRpb25zLmRlYm91bmNlTXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9VcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTGlzdGVuIGZvciB1cGRhdGVzIGZyb20gb3RoZXIgY29udGV4dHMgKG9ubHkgaWYgc3luYyBlbmFibGVkKVxuICBpZiAob3B0aW9ucy5lbmFibGVTeW5jICYmIGFkYXB0ZXJzLnN5bmMpIHtcbiAgICAvLyBDb25uZWN0IGlmIG5lZWRlZCAoc29tZSBhZGFwdGVycyByZXF1aXJlIGV4cGxpY2l0IGNvbm5lY3Rpb24pXG4gICAgaWYgKGFkYXB0ZXJzLnN5bmMuY29ubmVjdCkge1xuICAgICAgYWRhcHRlcnMuc3luYy5jb25uZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZSBhbiBpbmNvbWluZyB2YWx1ZSB0aGlzIGNvbnRleHQgaGFzIGRlY2lkZWQgdG8gYWNjZXB0LlxuICAgICAqXG4gICAgICogcG9sbHkjMTY3IHB1dCB0d28gc3RlcHMgaW4gZnJvbnQgb2YgdGhlIGFwcGx5LiBCb3RoIGFyZSBhYm91dCBhIHBlbmRpbmdcbiAgICAgKiBkZWJvdW5jZSB0aW1lciB0aGF0IHRoZSBtZXNzYWdlIGhhcyBqdXN0IG1hZGUgd3JvbmcuXG4gICAgICovXG4gICAgY29uc3QgYWNjZXB0SW5jb21pbmcgPSAodmFsdWU6IFQsIGNsb2NrOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIC8vIFRoZSBsb2NhbCB2YWx1ZSBpcyBjYXVzYWxseSBvbGRlciB0aGFuIHRoaXMgb25lLCBzbyB0aGUgZGVmZXJyZWQgd3JpdGVcbiAgICAgIC8vIGhhcyBub3RoaW5nIGxlZnQgdG8gc2F5LiBEcm9wcGluZyBpdCBzdG9wcyBhIHN0YWxlIGJyb2FkY2FzdCB0aGF0IGFcbiAgICAgIC8vIHRoaXJkIGNvbnRleHQgc3RpbGwgYmVsb3cgdGhpcyBjbG9jayB3b3VsZCBhY2NlcHQuXG4gICAgICAvL1xuICAgICAgLy8gUmVhY2hlZCBvbmx5IGZvciBhIHZhbHVlIHRoaXMgY29udGV4dCBkb2VzIG5vdCBhbHJlYWR5IGhvbGQ6IHRoZVxuICAgICAgLy8gZGVlcC1lcXVhbGl0eSBza2lwIGJlbG93IHJldHVybnMgZmlyc3QsIHdoaWNoIGxlYXZlcyBhIHBlbmRpbmcgdGltZXJcbiAgICAgIC8vIGhvbGRpbmcgdGhhdCBzYW1lIHZhbHVlIGFybWVkLCBhcyBpdCBzaG91bGQgYmUuXG4gICAgICBpZiAoZGVib3VuY2VUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBhcHBseVVwZGF0ZShlbnRyeSwgdmFsdWUsIGNsb2NrKTtcblxuICAgICAgLy8gYGFwcGx5VXBkYXRlYCBzZXRzIGBlbnRyeS51cGRhdGluZ2AsIHNvIHRoZSBsb2NhbCBlZmZlY3QgcmV0dXJuc1xuICAgICAgLy8gd2l0aG91dCB3cml0aW5nLiBQZXJzaXN0IHRoZSBpbmNvbWluZyBwYWlyIGhlcmUsIG9yIHN0b3JhZ2Uga2VlcHNcbiAgICAgIC8vIHdoYXRldmVyIGl0IGxhc3QgaGVsZCB3aGlsZSB0aGUgc2lnbmFsIGhvbGRzIHRoaXMgdmFsdWUg4oCUIGFuZCBvbiB0aGVcbiAgICAgIC8vIG5leHQgbG9hZCB0aGUgdHdvIGRpc2FncmVlLlxuICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgY2xvY2ssIGFkYXB0ZXJzLnN0b3JhZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogV2hldGhlciBhbiBpbmNvbWluZyB2YWx1ZSBpcyBvbmUgdGhpcyBjb250ZXh0IHNob3VsZCB0YWtlLiAqL1xuICAgIGNvbnN0IHNob3VsZEFjY2VwdCA9IChtZXNzYWdlOiBTdGF0ZVN5bmNNZXNzYWdlPFQ+KTogYm9vbGVhbiA9PiB7XG4gICAgICAvLyBWYWxpZGF0ZSBpbmNvbWluZyB2YWx1ZSBpZiB2YWxpZGF0b3IgcHJvdmlkZWRcbiAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRvciAmJiAhb3B0aW9ucy52YWxpZGF0b3IobWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFJlY2VpdmVkIGludmFsaWQgdmFsdWUgZnJvbSBzeW5jIChjbG9jazogJHttZXNzYWdlLmNsb2NrfSlgLFxuICAgICAgICAgIG1lc3NhZ2UudmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIHJlZHVuZGFudCB1cGRhdGVzIChkZWVwIGVxdWFsaXR5IGNoZWNrKVxuICAgICAgcmV0dXJuICFkZWVwRXF1YWwoZW50cnkuc2lnbmFsLnZhbHVlLCBtZXNzYWdlLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgLy8gUmVnaXN0ZXIgc3luYyBtZXNzYWdlIGxpc3RlbmVyXG4gICAgYWRhcHRlcnMuc3luYy5vbk1lc3NhZ2U8VD4oKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLmtleSAhPT0ga2V5KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9sZENsb2NrID0gZW50cnkuY2xvY2s7XG5cbiAgICAgIC8vIExhbXBvcnQgY2xvY2sgcnVsZTogQWx3YXlzIHVwZGF0ZSB0byBtYXgobG9jYWwsIHJlY2VpdmVkKVxuICAgICAgLy8gVGhpcyBtYWludGFpbnMgY2F1c2FsIG9yZGVyaW5nIGV2ZW4gd2hlbiByZWplY3RpbmcgdXBkYXRlc1xuICAgICAgZW50cnkuY2xvY2sgPSBNYXRoLm1heChlbnRyeS5jbG9jaywgbWVzc2FnZS5jbG9jayk7XG5cbiAgICAgIC8vIE9ubHkgYWNjZXB0IHZhbHVlIHVwZGF0ZXMgaWYgcmVjZWl2ZWQgY2xvY2sgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIG9sZCBsb2NhbCBjbG9ja1xuICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIG9ubHkgYXBwbHkgY2F1c2FsbHkgbmV3ZXIgdXBkYXRlc1xuICAgICAgaWYgKG1lc3NhZ2UuY2xvY2sgPiBvbGRDbG9jayAmJiBzaG91bGRBY2NlcHQobWVzc2FnZSkpIHtcbiAgICAgICAgYWNjZXB0SW5jb21pbmcobWVzc2FnZS52YWx1ZSBhcyB1bmtub3duIGFzIFQsIG1lc3NhZ2UuY2xvY2spO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGVSZWdpc3RyeS5zZXQoa2V5LCBlbnRyeSBhcyB1bmtub3duIGFzIFN0YXRlRW50cnk8dW5rbm93bj4pO1xuICByZXR1cm4gc2lnO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCYWNrZmlsbCBrZXlzIGFkZGVkIHRvIHRoZSBzdGF0ZSBzaGFwZSBzaW5jZSBhIHZhbHVlIHdhcyBwZXJzaXN0ZWQuXG4gKlxuICogU3RvcmVkIHBsYWluIG9iamVjdHMgYXJlIHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIGN1cnJlbnQgZGVmYXVsdHMgc28gdGhhdCBhXG4gKiBmaWVsZCBhZGRlZCBpbiBhIGxhdGVyIHJlbGVhc2UgcmVoeWRyYXRlcyB0byBpdHMgZGVmYXVsdCByYXRoZXIgdGhhblxuICogYHVuZGVmaW5lZGAuIFByaW1pdGl2ZXMgYW5kIGFycmF5cyBhcmUgcmVwbGFjZWQgd2hvbGVzYWxlIOKAlCBtZXJnaW5nIHRob3NlXG4gKiB3b3VsZCBjb3JydXB0IHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZVdpdGhEZWZhdWx0czxUPihkZWZhdWx0czogVCwgc3RvcmVkOiB1bmtub3duKTogVCB7XG4gIC8vIFBlcnNpc3RlZCB2YWx1ZXMgYXJlIHRydXN0ZWQgdG8gYmUgdGhlIFQgdGhpcyBrZXkgd2FzIHJlZ2lzdGVyZWQgd2l0aDtcbiAgLy8gc2NoZW1hIGRyaWZ0IGlzIGhhbmRsZWQgYnkgdGhlIG1lcmdlLCBub3QgYnkgcnVudGltZSB2YWxpZGF0aW9uLlxuICBpZiAoaXNQbGFpbk9iamVjdChkZWZhdWx0cykgJiYgaXNQbGFpbk9iamVjdChzdG9yZWQpKSB7XG4gICAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLnN0b3JlZCB9IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICByZXR1cm4gc3RvcmVkIGFzIHVua25vd24gYXMgVDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEZyb21TdG9yYWdlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgc2lnOiBTaWduYWw8VD4sXG4gIGVudHJ5OiBTdGF0ZUVudHJ5PFQ+LFxuICBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlcixcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLmdldChba2V5LCBgJHtrZXl9OmNsb2NrYF0pO1xuXG4gICAgaWYgKHJlc3VsdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNpZyBzdGlsbCBob2xkcyB0aGUgaW5pdGlhbCB2YWx1ZSBoZXJlLCBzbyBpdCBpcyB0aGUgZGVmYXVsdCBiYXNlXG4gICAgICAvLyBmb3IgYmFja2ZpbGxpbmcga2V5cyB0aGUgcGVyc2lzdGVkIGJsb2IgcHJlZGF0ZXMuXG4gICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHJlY29uY2lsZVdpdGhEZWZhdWx0cyhzaWcucGVlaygpLCByZXN1bHRba2V5XSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHN0b3JlZCB2YWx1ZSBpZiB2YWxpZGF0b3IgcHJvdmlkZWRcbiAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvcihzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICBzaWcudmFsdWUgPSBzdG9yZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBTdG9yZWQgdmFsdWUgZmFpbGVkIHZhbGlkYXRpb24sIHVzaW5nIGluaXRpYWwgdmFsdWVgLFxuICAgICAgICAgICAgc3RvcmVkVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWcudmFsdWUgPSBzdG9yZWRWYWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50cnkuY2xvY2sgPSByZXN1bHRbYCR7a2V5fTpjbG9ja2BdIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGxvYWQgc3RhdGUgZnJvbSBzdG9yYWdlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyc2lzdFRvU3RvcmFnZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3RvcmFnZS5zZXQoe1xuICAgICAgW2tleV06IHZhbHVlLFxuICAgICAgW2Ake2tleX06Y2xvY2tgXTogY2xvY2ssXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBwZXJzaXN0IHN0YXRlIHRvIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBicm9hZGNhc3RVcGRhdGU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjbG9jazogbnVtYmVyLCBzeW5jOiBTeW5jQWRhcHRlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHN5bmMuYnJvYWRjYXN0KHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgY2xvY2ssXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBicm9hZGNhc3Qgc3RhdGUgdXBkYXRlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlVcGRhdGU8VD4oZW50cnk6IFN0YXRlRW50cnk8VD4sIHZhbHVlOiBULCBjbG9jazogbnVtYmVyKTogdm9pZCB7XG4gIGVudHJ5LnVwZGF0aW5nID0gdHJ1ZTtcbiAgZW50cnkuc2lnbmFsLnZhbHVlID0gdmFsdWU7XG4gIGVudHJ5LmNsb2NrID0gY2xvY2s7XG4gIGVudHJ5LnVwZGF0aW5nID0gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHN0YXRlIGJ5IGtleSAodXNlZnVsIGZvciByZXRyaWV2aW5nIHN0YXRlIHdpdGhvdXQgcmUtY3JlYXRpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZUJ5S2V5PFQ+KGtleTogc3RyaW5nKTogU2lnbmFsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICByZXR1cm4gZW50cnk/LnNpZ25hbCBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDbGVhciBzdGF0ZSByZWdpc3RyeSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTdGF0ZVJlZ2lzdHJ5KCk6IHZvaWQge1xuICBzdGF0ZVJlZ2lzdHJ5LmNsZWFyKCk7XG59XG4iLAogICAgIi8qKlxuICogU3RhdGUgb3duZWQgYnkgdGhlIGNvbXBvbmVudCBnYWxsZXJ5LlxuICpcbiAqIFRoZSBnYWxsZXJ5IGlzIGEgc3RhbmRhbG9uZSBkZXYgc3VyZmFjZSB3aXRoIG5vIHNlcnZlciBzdGF0ZSwgc28gdGhlc2VcbiAqIHNpZ25hbHMgc3RheSBtb2R1bGUtbG9jYWwg4oCUIHRoZXkgbmV2ZXIgam9pbiBhIHN5bmNlZCBzdG9yZSBidW5kbGUuIEFjdGlvblxuICogaGFuZGxlcnMgKGFjdGlvbnMudHMpIHJlYWNoIHRoZW0gYnkgaW1wb3J0LCB0aGUgd2F5IGVhbCdzIHNob3djYXNlIGRvZXMuXG4gKiBgcmVzZXRHYWxsZXJ5U3RvcmVzKClgIGV4aXN0cyBzbyB0aGUgYnJvd3Nlci92aXN1YWwgdGVzdCBjYW4gaXNvbGF0ZSBydW5zLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUZvcm0sIHNldEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyAkc3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvc3RhdGUudHNcIjtcblxuZXhwb3J0IHR5cGUgR2FsbGVyeVRoZW1lID0gXCJzeXN0ZW1cIiB8IFwibGlnaHRcIiB8IFwiZGFya1wiO1xuXG4vKiogVGhlIGdhbGxlcnkncyBBY3Rpb25Gb3JtIGJpbmRzIHRvIGFuIGVtcHR5IGJ1bmRsZSDigJQgbm8gc3RvcmUgaXMgdG91Y2hlZC4gKi9cbmV4cG9ydCB0eXBlIEdhbGxlcnlTdG9yZXMgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG5cbi8qKiBUaGVtZSBvdmVycmlkZSwgYXBwbGllZCB0byB0aGUgcGFuZWwgYXMgYGRhdGEtcG9sbHktdGhlbWVgLiBgc3lzdGVtYCBvbWl0c1xuICogIHRoZSBhdHRyaWJ1dGUgYW5kIGxldHMgYHByZWZlcnMtY29sb3Itc2NoZW1lYCBkZWNpZGUuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUaGVtZSA9ICRzdGF0ZTxHYWxsZXJ5VGhlbWU+KFwic3lzdGVtXCIpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8TW9kYWw+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5TW9kYWxPcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBEcml2ZXMgdGhlIGxpdmUgPERyb3Bkb3duPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeURyb3Bkb3duT3BlbiA9ICRzdGF0ZTxib29sZWFuPihmYWxzZSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdFNpbmdsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJjb21ldFwiXSkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIG11bHRpLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdE11bHRpID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCIsIFwibmVidWxhXCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgY2xlYXJhYmxlIHNpbmdsZS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uIFN0YXJ0cyBlbXB0eVxuICogIHNvIHRoZSBcIkFueSDigKZcIiBjbGVhciBvcHRpb24gaXMgdGhlIGFjdGl2ZSByb3cuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgbG9uZy1sYWJlbCA8U2VsZWN0PiBzcGVjaW1lbiAocG9sbHkjMTgwKS4gVGhlIGxhYmVsIGlzXG4gKiAgd2lkZXIgdGhhbiBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAsIHNvIHRoZSB0cmlnZ2VyIG11c3QgdHJ1bmNhdGUgaXRcbiAqICByYXRoZXIgdGhhbiB3cmFwIHRoZSBjYXJldCBvbnRvIGEgc2Vjb25kIGxpbmUuIEV2ZXJ5IHNob3J0LWxhYmVsIHNwZWNpbWVuXG4gKiAgcGFzc2VkIHRocm91Z2hvdXQgdGhhdCByZWdyZXNzaW9uLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0TG9uZyA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJsb25nXCJdKSk7XG4vKiogVGhlIGxpdmUsIHNpZ25hbC1ib3VuZCA8Q2hlY2tib3g+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5Q2hlY2tlZCA9ICRzdGF0ZTxib29sZWFuPih0cnVlKTtcbi8qKiBUaGUgY29udHJvbGxlZCA8VGV4dElucHV0PiBzcGVjaW1lbiB2YWx1ZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRleHQgPSAkc3RhdGU8c3RyaW5nPihcIkNvbnRyb2xsZWQgdmFsdWVcIik7XG4vKiogTGFzdCB2YWx1ZSBjb21taXR0ZWQgYnkgdGhlIDxBY3Rpb25JbnB1dD4gLyA8QWN0aW9uU2VsZWN0PiBzcGVjaW1lbnMuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDb21taXR0ZWQgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcbi8qKiBBY3RpdmUgdGFiIGlkIGZvciB0aGUgPFRhYnM+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGFiID0gJHN0YXRlPHN0cmluZz4oXCJvdmVydmlld1wiKTtcbi8qKiBOYW1lIG9mIHRoZSBsYXN0IGZpbGUgcGlja2VkIGJ5IHRoZSA8RmlsZUlucHV0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUZpbGVOYW1lID0gJHN0YXRlPHN0cmluZz4oXCLigJRcIik7XG5cbi8qKlxuICogVGhlIGZvcm0gYmVoaW5kIHRoZSA8QWN0aW9uRm9ybT4gc3BlY2ltZW4uIGBjcmVhdGVGb3JtYCByZXF1aXJlcyBgYmluZFN0b3Jlc2BcbiAqIGJlZm9yZSBhIHN1Ym1pdCBjYW4gcnVuOyBjbGllbnQudHN4IGJpbmRzIGl0IHRvIHRoZSBlbXB0eSBnYWxsZXJ5IGJ1bmRsZSBhdFxuICogYm9vdC4gSXRzIGAuYWN0aW9uc2AgYXJlIHNwcmVhZCBpbnRvIHRoZSByZWdpc3RyeSAoc2VlIGFjdGlvbnMudHMpLlxuICovXG5leHBvcnQgY29uc3QgZ2FsbGVyeUZvcm0gPSBjcmVhdGVGb3JtPHsgZnVsbE5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9LCBHYWxsZXJ5U3RvcmVzPih7XG4gIG5hbWU6IFwiZ2FsbGVyeS1mb3JtXCIsXG4gIGluaXRpYWxWYWx1ZXM6IHsgZnVsbE5hbWU6IFwiXCIsIGVtYWlsOiBcIlwiIH0sXG4gIG9uU3VibWl0OiAoeyB2YWx1ZXMgfSkgPT4ge1xuICAgIHNldEVycm9yKFxuICAgICAgYEFjdGlvbkZvcm0gc3VibWl0dGVkIOKAlCBuYW1lIFwiJHt2YWx1ZXMuZnVsbE5hbWUgfHwgXCIoZW1wdHkpXCJ9XCIsIGAgK1xuICAgICAgICBgZW1haWwgXCIke3ZhbHVlcy5lbWFpbCB8fCBcIihlbXB0eSlcIn1cIi5gLFxuICAgICAgeyBzZXZlcml0eTogXCJpbmZvXCIgfVxuICAgICk7XG4gIH0sXG59KTtcblxuLyoqIFJlc2V0IGV2ZXJ5IGdhbGxlcnkgc2lnbmFsIHRvIGl0cyBpbml0aWFsIHZhbHVlIOKAlCBmb3IgdGVzdCBpc29sYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRHYWxsZXJ5U3RvcmVzKCk6IHZvaWQge1xuICAkZ2FsbGVyeVRoZW1lLnZhbHVlID0gXCJzeXN0ZW1cIjtcbiAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgJGdhbGxlcnlEcm9wZG93bk9wZW4udmFsdWUgPSBmYWxzZTtcbiAgJGdhbGxlcnlTZWxlY3RTaW5nbGUudmFsdWUgPSBuZXcgU2V0KFtcImNvbWV0XCJdKTtcbiAgJGdhbGxlcnlTZWxlY3RNdWx0aS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZS52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgJGdhbGxlcnlTZWxlY3RMb25nLnZhbHVlID0gbmV3IFNldChbXCJsb25nXCJdKTtcbiAgJGdhbGxlcnlDaGVja2VkLnZhbHVlID0gdHJ1ZTtcbiAgJGdhbGxlcnlUZXh0LnZhbHVlID0gXCJDb250cm9sbGVkIHZhbHVlXCI7XG4gICRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlID0gXCLigJRcIjtcbiAgJGdhbGxlcnlUYWIudmFsdWUgPSBcIm92ZXJ2aWV3XCI7XG4gICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBcIuKAlFwiO1xuICBnYWxsZXJ5Rm9ybS5jbG9zZSgpO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvbnMgZm9yIHRoZSBnYWxsZXJ5J3MgaW50ZXJhY3RpdmUgc3BlY2ltZW5zLiBFdmVyeSBoYW5kbGVyIGRyaXZlcyBhXG4gKiBtb2R1bGUtbG9jYWwgc2lnbmFsIChzdG9yZXMudHMpIG9yIGEgcG9sbHkgb3ZlcmxheSBwcmltaXRpdmUg4oCUIG5vbmUgdG91Y2hlcyBhXG4gKiBzdG9yZSBidW5kbGUsIHNvIHRoZSBnYWxsZXJ5IHN0YXlzIGEgc2VsZi1jb250YWluZWQgZGV2IHN1cmZhY2UuIFNwcmVhZGluZ1xuICogYGdhbGxlcnlGb3JtLmFjdGlvbnNgIGFkZHMgdGhlIGF1dG8tcmVnaXN0ZXJlZCBgZ2FsbGVyeS1mb3JtOntvcGVuLGNsb3NlLFxuICogc3VibWl0fWAgaGFuZGxlcnMuIGNsaWVudC50c3ggd2lyZXMgdGhpcyByZWdpc3RyeSBpbnRvIHRoZSBkb2N1bWVudCB2aWFcbiAqIGBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uYCwgZXhhY3RseSBhcyBhIHJlYWwgY29uc3VtZXIgYXBwIHdvdWxkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQWN0aW9uUmVnaXN0cnksIEVycm9yU2V2ZXJpdHkgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IHNldEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHtcbiAgJGdhbGxlcnlDb21taXR0ZWQsXG4gICRnYWxsZXJ5TW9kYWxPcGVuLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUaGVtZSxcbiAgdHlwZSBHYWxsZXJ5U3RvcmVzLFxuICB0eXBlIEdhbGxlcnlUaGVtZSxcbiAgZ2FsbGVyeUZvcm0sXG59IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG5jb25zdCBUSEVNRVM6IHJlYWRvbmx5IEdhbGxlcnlUaGVtZVtdID0gW1wic3lzdGVtXCIsIFwibGlnaHRcIiwgXCJkYXJrXCJdO1xuY29uc3QgU0VWRVJJVElFUzogcmVhZG9ubHkgRXJyb3JTZXZlcml0eVtdID0gW1wiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXTtcblxuZXhwb3J0IGNvbnN0IEdBTExFUllfQUNUSU9OUzogQWN0aW9uUmVnaXN0cnk8R2FsbGVyeVN0b3Jlcz4gPSB7XG4gIC4uLmdhbGxlcnlGb3JtLmFjdGlvbnMsXG5cbiAgXCJnYWxsZXJ5OnNldC10aGVtZVwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IGRhdGFbXCJ0aGVtZVwiXTtcbiAgICBpZiAodGhlbWUgPT09IFwic3lzdGVtXCIgfHwgdGhlbWUgPT09IFwibGlnaHRcIiB8fCB0aGVtZSA9PT0gXCJkYXJrXCIpIHtcbiAgICAgICRnYWxsZXJ5VGhlbWUudmFsdWUgPSB0aGVtZTtcbiAgICB9XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OnNldC10YWJcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgaWQgPSBkYXRhW1wiaWRcIl07XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIikgJGdhbGxlcnlUYWIudmFsdWUgPSBpZDtcbiAgfSxcblxuICBcImdhbGxlcnk6bW9kYWwtb3BlblwiOiAoKSA9PiB7XG4gICAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSB0cnVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb21taXRcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW1widmFsdWVcIl07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSB2YWx1ZTtcbiAgfSxcblxuICBcImdhbGxlcnk6dG9hc3RcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3Qgc2V2ZXJpdHkgPSBTRVZFUklUSUVTLmZpbmQoKHMpID0+IHMgPT09IGRhdGFbXCJzZXZlcml0eVwiXSkgPz8gXCJpbmZvXCI7XG4gICAgc2V0RXJyb3IoYFRoaXMgaXMgYSAke3NldmVyaXR5fSB0b2FzdCDigJQgY2xpY2sgaXQgb3Igd2FpdCBmb3IgaXQgdG8gZGlzbWlzcy5gLCB7XG4gICAgICBzZXZlcml0eSxcbiAgICB9KTtcbiAgfSxcblxuICBcImdhbGxlcnk6Y29uZmlybVwiOiBhc3luYyAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBkYW5nZXIgPSBkYXRhW1wiZGFuZ2VyXCJdID09PSBcInRydWVcIjtcbiAgICBjb25zdCBvayA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgdGl0bGU6IGRhbmdlciA/IFwiRGVsZXRlIHRoaXMgaXRlbT9cIiA6IFwiU2F2ZSB5b3VyIGNoYW5nZXM/XCIsXG4gICAgICBib2R5OiBkYW5nZXJcbiAgICAgICAgPyBcIlRoaXMgY2Fubm90IGJlIHVuZG9uZS4gVGhlIGl0ZW0gd2lsbCBiZSBwZXJtYW5lbnRseSByZW1vdmVkLlwiXG4gICAgICAgIDogXCJZb3VyIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkIGltbWVkaWF0ZWx5LlwiLFxuICAgICAgZGFuZ2VyLFxuICAgICAgY29uZmlybUxhYmVsOiBkYW5nZXIgPyBcIkRlbGV0ZVwiIDogXCJTYXZlXCIsXG4gICAgfSk7XG4gICAgc2V0RXJyb3IoYENvbmZpcm1EaWFsb2cgcmVzb2x2ZWQgJHtTdHJpbmcob2spfS5gLCB7IHNldmVyaXR5OiBvayA/IFwiaW5mb1wiIDogXCJ3YXJuaW5nXCIgfSk7XG4gIH0sXG59O1xuXG4vKiogVGhlIHRoZW1lIGN5Y2xlLCBleHBvc2VkIHNvIHRoZSBwYW5lbCBjYW4gcmVuZGVyIG9uZSBidXR0b24gcGVyIG9wdGlvbi4gKi9cbmV4cG9ydCB7IFRIRU1FUyB9O1xuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5IGNhdGFsb2d1ZSDigJQgb25lIHNlY3Rpb24gcGVyIHBvbGx5LXVpIHByaW1pdGl2ZSwgZWFjaCByZW5kZXJpbmdcbiAqIHRoZSBjb25maWd1cmF0aW9ucyB3b3J0aCBzZWVpbmcuIEFkYXB0ZWQgZnJvbSBlYWwncyBzaG93Y2FzZSAod2hpY2ggY29uc3VtZXNcbiAqIHRoaXMgdmVyeSBsaWJyYXJ5KSwgcmVwb2ludGVkIGF0IHRoZSBsb2NhbCBzb3VyY2Ugc28gdGhlIGdhbGxlcnkgcmVuZGVycyB0aGVcbiAqIHByaW1pdGl2ZXMgZXhhY3RseSBhcyB0aGV5IHNoaXAuXG4gKlxuICogRXZlcnkgc2VjdGlvbiBjYXJyaWVzIGEgYGNvbXBvbmVudGAgbmFtaW5nIHRoZSBwb2xseS11aSBleHBvcnQgaXQgY292ZXJzO1xuICogcmVnaXN0cnktY292ZXJhZ2UudHMgYXNzZXJ0cyB0aGF0IGV2ZXJ5IGNvbXBvbmVudCBpbiByZWdpc3RyeS5nZW5lcmF0ZWQudHNcbiAqIGhhcyBhIHNlY3Rpb24gaGVyZSwgc28gYSBuZXcgcHJpbWl0aXZlIGNhbid0IGxhbmQgd2l0aG91dCBhIHNwZWNpbWVuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7XG4gIEFjdGlvbkZvcm0sXG4gIEFjdGlvbklucHV0LFxuICBBY3Rpb25TZWxlY3QsXG4gIEJhZGdlLFxuICBCdXR0b24sXG4gIENhcmQsXG4gIENoZWNrYm94LFxuICBDbHVzdGVyLFxuICBDb2RlLFxuICBDb2xsYXBzaWJsZSxcbiAgRHJvcGRvd24sXG4gIEZpbGVJbnB1dCxcbiAgSHRtbCxcbiAgTGF5b3V0LFxuICBMaW5rLFxuICBNb2RhbCxcbiAgT3V0cHV0LFxuICBTZWxlY3QsXG4gIFNrZWxldG9uLFxuICBTdXJmYWNlLFxuICBUYWJzLFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFRvZ2dsZSxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHtcbiAgJGdhbGxlcnlDaGVja2VkLFxuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlEcm9wZG93bk9wZW4sXG4gICRnYWxsZXJ5RmlsZU5hbWUsXG4gICRnYWxsZXJ5TW9kYWxPcGVuLFxuICAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSxcbiAgJGdhbGxlcnlTZWxlY3RMb25nLFxuICAkZ2FsbGVyeVNlbGVjdE11bHRpLFxuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZSxcbiAgJGdhbGxlcnlUYWIsXG4gICRnYWxsZXJ5VGV4dCxcbiAgZ2FsbGVyeUZvcm0sXG59IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG4vKipcbiAqIE9uZSBjYXRhbG9ndWVkIGV4YW1wbGU6IGEgc3RhZ2UgaG9sZGluZyBsaXZlIGNvbXBvbmVudChzKSBhbmQgYSBjYXB0aW9uXG4gKiBuYW1pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb24gc2hvdy4gYHdpZGVgIHNwYW5zIGV2ZXJ5IGdyaWQgY29sdW1uIGZvclxuICogc3BlY2ltZW5zIHRoYXQgbmVlZCB0aGUgcm9vbSAobGF5b3V0cywgZm9ybXMsIGNhcmRzKS5cbiAqL1xuZnVuY3Rpb24gU3BlY2ltZW4ocHJvcHM6IHsgY2FwdGlvbjogc3RyaW5nOyB3aWRlPzogYm9vbGVhbjsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInN1bmtlblwiXG4gICAgICByYWRpdXM9XCJtZFwiXG4gICAgICBib3JkZXI9XCJkZWZhdWx0XCJcbiAgICAgIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgY2xhc3NOYW1lPXtwcm9wcy53aWRlID8gXCJnYWxsZXJ5LXNwZWNpbWVuIGdhbGxlcnktc3BlY2ltZW4tLXdpZGVcIiA6IFwiZ2FsbGVyeS1zcGVjaW1lblwifVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnYWxsZXJ5LXN0YWdlXCI+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8VGV4dCBzaXplPVwieHNcIiB0b25lPVwibXV0ZWRcIiBjbGFzc05hbWU9XCJnYWxsZXJ5LWNvZGVcIj5cbiAgICAgICAgICB7cHJvcHMuY2FwdGlvbn1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG4vKiogQSBuZXV0cmFsIGZpbGxlciBibG9jayBmb3IgdGhlIGxheW91dCBzcGVjaW1lbnMuICovXG5mdW5jdGlvbiBCb3gocHJvcHM6IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSB2YXJpYW50PVwicmFpc2VkXCIgcmFkaXVzPVwic21cIiBib3JkZXI9XCJkZWZhdWx0XCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgPFRleHQgc2l6ZT1cInNtXCI+e3Byb3BzLmNoaWxkcmVufTwvVGV4dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmNvbnN0IFNUQVI6IEpTWC5FbGVtZW50ID0gKFxuICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImdhbGxlcnktaWNvblwiPlxuICAgIOKYhVxuICA8L3NwYW4+XG4pO1xuXG4vKipcbiAqIHBvbGx5IzE4MDogYSBsYWJlbCB3aWRlciB0aGFuIGAtLXBvbGx5LWNvbnRyb2wtbWF4LXdpZHRoYCwgc2hhcmVkIGJ5IHRoZVxuICogPFNlbGVjdD4gYW5kIDxBY3Rpb25TZWxlY3Q+IGxvbmctbGFiZWwgc3BlY2ltZW5zIHNvIHRoZSB0d28gdHJpZ2dlcnMgbXVzdFxuICogbWVhc3VyZSB0aGUgc2FtZSBib3guIEV2ZXJ5IGNhdGFsb2d1ZWQgU2VsZWN0IHVzZWQgYSBzaG9ydCBsYWJlbCwgd2hpY2ggaXNcbiAqIHdoeSBhIHRyaWdnZXIgdGhhdCBoYWQgbG9zdCBpdHMgbGF5b3V0IHJvdyBzdGlsbCBtZWFzdXJlZCA0MHB4IGFuZCB0aGVcbiAqIGNhcmV0IG9ubHkgd3JhcHBlZCBpbiBhIGNvbnN1bWVyIGFwcC5cbiAqL1xuY29uc3QgTE9OR19TRUxFQ1RfTEFCRUwgPSBcIkEgZGVsaWJlcmF0ZWx5IGxvbmcgb3B0aW9uIGxhYmVsIHRoYXQgb3ZlcmZsb3dzIHRoZSBjb250cm9sIG1heCB3aWR0aFwiO1xuXG5jb25zdCBMT05HX1NFTEVDVF9PUFRJT05TID0gW1xuICB7IHZhbHVlOiBcImxvbmdcIiwgbGFiZWw6IExPTkdfU0VMRUNUX0xBQkVMIH0sXG4gIHsgdmFsdWU6IFwic2hvcnRcIiwgbGFiZWw6IFwiU2hvcnRcIiB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBHYWxsZXJ5U2VjdGlvbiB7XG4gIC8qKiBBbmNob3IgaWQgZm9yIHRoZSBpbi1wYWdlIG5hdi4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgaGVhZGluZy4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIFRoZSBwb2xseS11aSBleHBvcnQgdGhpcyBzZWN0aW9uIGNvdmVycyAobWF0Y2hlZCBhZ2FpbnN0IHRoZSByZWdpc3RyeSkuICovXG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24uICovXG4gIHN1bW1hcnk6IHN0cmluZztcbiAgcmVuZGVyOiAoKSA9PiBKU1guRWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IEdBTExFUllfU0VDVElPTlM6IHJlYWRvbmx5IEdhbGxlcnlTZWN0aW9uW10gPSBbXG4gIHtcbiAgICBpZDogXCJiYWRnZVwiLFxuICAgIHRpdGxlOiBcIkJhZGdlXCIsXG4gICAgY29tcG9uZW50OiBcIkJhZGdlXCIsXG4gICAgc3VtbWFyeTogXCJTbWFsbCBpbmxpbmUgc3RhdHVzIGNoaXAuIE9uZSB2YXJpYW50IHBlciBzZW1hbnRpYyB0b25lLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJkZWZhdWx0XCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPEJhZGdlIHZhcmlhbnQ9e3Z9Pnt2fTwvQmFkZ2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYnV0dG9uXCIsXG4gICAgdGl0bGU6IFwiQnV0dG9uXCIsXG4gICAgY29tcG9uZW50OiBcIkJ1dHRvblwiLFxuICAgIHN1bW1hcnk6IFwiSW50ZXJhY3RpdmUgY29udHJvbC4gVGllciBzZXRzIGltcG9ydGFuY2UsIGNvbG9yIG92ZXJsYXlzIG1lYW5pbmcsIHNpemUgc2V0cyBzY2FsZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidGllcjogcHJpbWFyeSAvIHNlY29uZGFyeSAvIHRlcnRpYXJ5XCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiUHJpbWFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgbGFiZWw9XCJTZWNvbmRhcnlcIiAvPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgbGFiZWw9XCJUZXJ0aWFyeVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29sb3I6IGRlZmF1bHQgLyBpbmZvIC8gc3VjY2VzcyAvIHdhcm5pbmcgLyBkYW5nZXJcIj5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGVmYXVsdFwiIGxhYmVsPVwiRGVmYXVsdFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIkluZm9cIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzdWNjZXNzXCIgbGFiZWw9XCJTdWNjZXNzXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwid2FybmluZ1wiIGxhYmVsPVwiV2FybmluZ1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImRhbmdlclwiIGxhYmVsPVwiRGFuZ2VyXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiBzbWFsbCAvIG5vcm1hbCAvIGxhcmdlXCI+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBsYWJlbD1cIlNtYWxsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJub3JtYWxcIiBsYWJlbD1cIk5vcm1hbFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwibGFyZ2VcIiBsYWJlbD1cIkxhcmdlXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxCdXR0b24gbGFiZWw9XCJEaXNhYmxlZFwiIGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaWNvbiArIGxhYmVsXCI+XG4gICAgICAgICAgPEJ1dHRvbiBpY29uPXtTVEFSfSBsYWJlbD1cIldpdGggaWNvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2lyY2xlIChpY29uLW9ubHkgbmVlZHMgYXJpYS1sYWJlbClcIj5cbiAgICAgICAgICA8QnV0dG9uIGNpcmNsZSBhcmlhLWxhYmVsPVwiU3RhclwiIGxhYmVsPXtTVEFSfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImhyZWYg4oCUIHJlbmRlcnMgYW4gPGE+XCI+XG4gICAgICAgICAgPEJ1dHRvbiBocmVmPVwiI2J1dHRvblwiIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIkxpbmsgYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmdWxsV2lkdGhcIiB3aWRlPlxuICAgICAgICAgIDxCdXR0b24gZnVsbFdpZHRoIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGdWxsLXdpZHRoIGJ1dHRvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBUaGUgdHdvIHJvd3Mgc2hhcmUgYSBsZWZ0IGVkZ2UsIHNvIHRoZSBvZmZzZXQgaXMgdGhlIHdob2xlIHBvaW50OlxuICAgICAgICAgICAgdGhlIGRlZmF1bHQgYnV0dG9uIGFsaWducyBpdHMgQk9YIHRvIHRoYXQgZWRnZSBhbmQgaXRzIGxhYmVsIHNpdHNcbiAgICAgICAgICAgIGFuIGlubGluZS1wYWRkaW5nIGZ1cnRoZXIgaW47IHRoZSBmbHVzaCBvbmUgcHV0cyB0aGUgTEFCRUwgdGhlcmUuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZsdXNoIOKAlCBsYWJlbCBvbiB0aGUgdGV4dCBlZGdlLCBmb3IgYSB0ZXJ0aWFyeSBidXR0b24gYmVzaWRlIGNvcHlcIiB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgICAgQSBsaW5lIG9mIGJvZHkgY29weSBmb3IgdGhlIGxlZnQgZWRnZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxDbHVzdGVyPlxuICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGxhYmVsPVwiRGVmYXVsdCDigJQgYm94IGFsaWduc1wiIC8+XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgICA8Q2x1c3Rlcj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBmbHVzaCBsYWJlbD1cIkZsdXNoIOKAlCBsYWJlbCBhbGlnbnNcIiAvPlxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRleHRcIixcbiAgICB0aXRsZTogXCJUZXh0XCIsXG4gICAgY29tcG9uZW50OiBcIlRleHRcIixcbiAgICBzdW1tYXJ5OiBcIlR5cG9ncmFwaGljIHByaW1pdGl2ZSDigJQgdG9uZSwgc2l6ZSwgd2VpZ2h0LCBpdGFsaWMsIHN0cmlrZXRocm91Z2gsIGFuZCBsZWFkaW5nLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0b25lOiBkZWZhdWx0IC8gbXV0ZWQgLyBkYW5nZXIgLyB3YXJuaW5nIC8gc3VjY2Vzc1wiPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJkZWZhdWx0XCI+RGVmYXVsdDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5NdXRlZDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwiZGFuZ2VyXCI+RGFuZ2VyPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJ3YXJuaW5nXCI+V2FybmluZzwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwic3VjY2Vzc1wiPlN1Y2Nlc3M8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2l6ZTogeHMgLyBzbSAvIG1kIC8gbGcgLyB4bFwiPlxuICAgICAgICAgIHsoW1wieHNcIiwgXCJzbVwiLCBcIm1kXCIsIFwibGdcIiwgXCJ4bFwiXSBhcyBjb25zdCkubWFwKChzKSA9PiAoXG4gICAgICAgICAgICA8VGV4dCBrZXk9e3N9IHNpemU9e3N9PlxuICAgICAgICAgICAgICB7c31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ3ZWlnaHQ6IG5vcm1hbCAvIG1lZGl1bSAvIGJvbGRcIj5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJub3JtYWxcIj5Ob3JtYWw8L1RleHQ+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwibWVkaXVtXCI+TWVkaXVtPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cImJvbGRcIj5Cb2xkPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIml0YWxpYyAvIHN0cmlrZXRocm91Z2hcIj5cbiAgICAgICAgICA8VGV4dCBpdGFsaWM+SXRhbGljIGVtcGhhc2lzPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0cmlrZXRocm91Z2g+U3RydWNrIHRocm91Z2g8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdsZWFkaW5nPVwibG9vc2VcIiDigJQgbXVsdGktbGluZSBib2R5IGNvcHknIHdpZGU+XG4gICAgICAgICAgPFRleHQgYXM9XCJwXCIgbGVhZGluZz1cImxvb3NlXCI+XG4gICAgICAgICAgICBBIHBhcmFncmFwaCByZW5kZXJlZCB3aXRoIGxvb3NlIGxlYWRpbmcuIFBvbGx5J3MgVGV4dCBwcmltaXRpdmUgYmFja3MgZXZlcnkgc3BhbixcbiAgICAgICAgICAgIHBhcmFncmFwaCwgbGFiZWwsIGFuZCBjYXB0aW9uIHNvIGNvbnN1bWVycyBuZXZlciByZWFjaCBmb3IgYSByYXcgc3R5bGUgYXR0cmlidXRlIHRvIHNldFxuICAgICAgICAgICAgdG9uZSwgc2l6ZSwgd2VpZ2h0LCBvciBsaW5lIGhlaWdodC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29kZVwiLFxuICAgIHRpdGxlOiBcIkNvZGVcIixcbiAgICBjb21wb25lbnQ6IFwiQ29kZVwiLFxuICAgIHN1bW1hcnk6IFwiTW9ub3NwYWNlIGNvZGUg4oCUIGlubGluZSBieSBkZWZhdWx0LCBvciBhIHdyYXBwZWQgYmxvY2suXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImlubGluZVwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgUnVuIDxDb2RlPnBvbGx5IGdhbGxlcnk8L0NvZGU+IHRvIG9wZW4gdGhpcyBwYWdlLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJibG9ja1wiIHdpZGU+XG4gICAgICAgICAgPENvZGUgYmxvY2s+eydjb25zdCBnYWxsZXJ5ID0ge1xcbiAgc2VydmVkOiBcImJ5IHBvbGx5XCIsXFxufTsnfTwvQ29kZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsaW5rXCIsXG4gICAgdGl0bGU6IFwiTGlua1wiLFxuICAgIGNvbXBvbmVudDogXCJMaW5rXCIsXG4gICAgc3VtbWFyeTogXCJBbmNob3IgcHJpbWl0aXZlIOKAlCB1bmRlcmxpbmUgYnkgZGVmYXVsdCwgd2l0aCBleHRlcm5hbCwgc3VidGxlLCBhbmQgZG93bmxvYWQgbW9kZXMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHRcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiI2xpbmtcIj5Jbi1wYWdlIGxpbms8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZXh0ZXJuYWwg4oCUIG5ldyB0YWIsIHJlbD1ub29wZW5lclwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCJodHRwczovL2V4YW1wbGUuY29tXCIgZXh0ZXJuYWw+XG4gICAgICAgICAgICBFeHRlcm5hbCBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInN1YnRsZSDigJQgdW5kZXJsaW5lIG9uIGhvdmVyIG9ubHlcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiI2xpbmtcIiBzdWJ0bGU+XG4gICAgICAgICAgICBTdWJ0bGUgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkb3dubG9hZFwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCJkYXRhOnRleHQvcGxhaW4sZ2FsbGVyeVwiIGRvd25sb2FkPVwiZ2FsbGVyeS50eHRcIj5cbiAgICAgICAgICAgIERvd25sb2FkIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic3VyZmFjZVwiLFxuICAgIHRpdGxlOiBcIlN1cmZhY2VcIixcbiAgICBjb21wb25lbnQ6IFwiU3VyZmFjZVwiLFxuICAgIHN1bW1hcnk6IFwiT3ducyB2aXN1YWwgY2hyb21lIOKAlCBiYWNrZ3JvdW5kLCBib3JkZXIsIHJhZGl1cywgc2hhZG93LCBwb3NpdGlvbmluZy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1wicGxhaW5cIiwgXCJyYWlzZWRcIiwgXCJzdW5rZW5cIiwgXCJidWJibGVcIiwgXCJjaGlwXCIsIFwiY2FsbG91dFwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3Z9IHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCI+e3Z9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudDogXCJmbG9hdGluZ1wiIC8gXCJzdGlja3ktYmFyXCIgcGluIHRvIHRoZSB2aWV3cG9ydCDigJQgb21pdHRlZCBoZXJlJz5cbiAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIFBvc2l0aW9uYWwgdmFyaWFudHMgYXJlIHByZXZpZXdlZCBpbiBjb250ZXh0LCBub3QgaW4gYSBncmlkIGNlbGwuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogRXF1YWwgc3F1YXJlIGJveGVzLiBUaGUgbGFiZWwgdXNlZCB0byBzaXplIGVhY2ggb25lLCBzbyB0aGUgbGFkZGVyXG4gICAgICAgICAgICB3YXMgY29tcGFyZWQgYWNyb3NzIGZpdmUgZGlmZmVyZW50IHdpZHRocyAoNDYvMzUvMzYvMjgvMzUgcHgpIGFuZFxuICAgICAgICAgICAgYGZ1bGxgIHJlbmRlcmVkIGFzIGEgc3RhZGl1bSB0YWxsZXIgdGhhbiBpdCB3YXMgd2lkZSByYXRoZXIgdGhhbiBhXG4gICAgICAgICAgICBjaXJjbGUuIEEgc3F1YXJlIGJveCBtYWtlcyA5OTk5cHggcmVhZCBhcyB0aGUgY2lyY2xlIGl0IGlzLiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJyYWRpdXM6IG5vbmUgLyBzbSAvIG1kIC8gbGcgLyBmdWxsXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwiZnVsbFwiXSBhcyBjb25zdCkubWFwKChyKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZVxuICAgICAgICAgICAgICBrZXk9e3J9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgICAgICAgICBib3JkZXI9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgcmFkaXVzPXtyfVxuICAgICAgICAgICAgICB3aWR0aD1cIjU2cHhcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCI1NnB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExheW91dCBoZWlnaHQ9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiIGp1c3RpZnlJdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntyfTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYm9yZGVyOiBub25lIC8gZGVmYXVsdCAvIHN0cm9uZ1wiPlxuICAgICAgICAgIHsoW1wibm9uZVwiLCBcImRlZmF1bHRcIiwgXCJzdHJvbmdcIl0gYXMgY29uc3QpLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2Uga2V5PXtifSBib3JkZXI9e2J9IHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57Yn08L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBPbiB0aGUgc3Vua2VuIGNhcmQgZXZlcnkgc3BlY2ltZW4gc2l0cyBvbiwgYSBzb2Z0IHNoYWRvdyBsYW5kcyBncmV5XG4gICAgICAgICAgICBvbiBncmV5IGFuZCBub25lIG9mIHRoZSB0aHJlZSBzdGVwcyByZWFkLiBUaGV5IGFyZSBjYXN0IG9uIGEgcGxhaW5cbiAgICAgICAgICAgIHN1cmZhY2UgaGVyZSwgYW5kIGVhY2ggYm94IGlzIHNxdWFyZSBhbmQgZXF1YWwgc28gdGhlIG9ubHkgdGhpbmdcbiAgICAgICAgICAgIHRoYXQgZGlmZmVycyBiZXR3ZWVuIHRoZW0gaXMgdGhlIHNoYWRvdy4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2hhZG93OiBzbSAvIG1kIC8gbGdcIj5cbiAgICAgICAgICA8U3VyZmFjZSBiYWNrZ3JvdW5kPVwidmFyKC0tcG9sbHktc3VyZmFjZSlcIiByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIj5cbiAgICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhsKVwiPlxuICAgICAgICAgICAgICB7KFtcInNtXCIsIFwibWRcIiwgXCJsZ1wiXSBhcyBjb25zdCkubWFwKChzKSA9PiAoXG4gICAgICAgICAgICAgICAgPFN1cmZhY2Uga2V5PXtzfSB2YXJpYW50PVwicmFpc2VkXCIgc2hhZG93PXtzfSByYWRpdXM9XCJtZFwiIHdpZHRoPVwiNTZweFwiIGhlaWdodD1cIjU2cHhcIj5cbiAgICAgICAgICAgICAgICAgIDxMYXlvdXQgaGVpZ2h0PVwiMTAwJVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3N9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2FyZFwiLFxuICAgIHRpdGxlOiBcIkNhcmRcIixcbiAgICBjb21wb25lbnQ6IFwiQ2FyZFwiLFxuICAgIHN1bW1hcnk6IFwiQ29tcG91bmQgb2YgU3VyZmFjZXMg4oCUIGEgcmFpc2VkIFJvb3Qgd3JhcHBpbmcgSGVhZGVyLCBCb2R5LCBhbmQgRm9vdGVyIHNsb3RzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJDYXJkLlJvb3QgPiBIZWFkZXIgLyBCb2R5IC8gRm9vdGVyXCIgd2lkZT5cbiAgICAgICAgPENhcmQuUm9vdCBwYWRkaW5nPVwiMFwiPlxuICAgICAgICAgIDxDYXJkLkhlYWRlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Q2FyZCBoZWFkZXI8L1RleHQ+XG4gICAgICAgICAgPC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICA8Q2FyZC5Cb2R5IHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICBUaGUgYm9keSBzbG90IGNhcnJpZXMgdGhlIG1haW4gY29udGVudC4gRWFjaCBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBpdFxuICAgICAgICAgICAgICBjYW4gYmUgcmV0aW50ZWQgb3IgcmVwYWRkZWQgd2l0aG91dCByZWFjaGluZyBwYXN0IHRoZSBwcmltaXRpdmUuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9DYXJkLkJvZHk+XG4gICAgICAgICAgPENhcmQuRm9vdGVyIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZvb3RlciBhY3Rpb25cIiAvPlxuICAgICAgICAgIDwvQ2FyZC5Gb290ZXI+XG4gICAgICAgIDwvQ2FyZC5Sb290PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2tlbGV0b25cIixcbiAgICB0aXRsZTogXCJTa2VsZXRvblwiLFxuICAgIGNvbXBvbmVudDogXCJTa2VsZXRvblwiLFxuICAgIHN1bW1hcnk6IFwiU2hpbW1lcmluZyBwbGFjZWhvbGRlciBmb3IgbG9hZGluZyBzdGF0ZXMuIEFuaW1hdGlvbiBob25vdXJzIHJlZHVjZWQtbW90aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJ0ZXh0XCIsIFwicmVjdFwiLCBcImNpcmNsZVwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PXt2fSAvPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImN1c3RvbSB3aWR0aCArIGhlaWdodFwiPlxuICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwicmVjdFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD17NjR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3V0cHV0XCIsXG4gICAgdGl0bGU6IFwiT3V0cHV0XCIsXG4gICAgY29tcG9uZW50OiBcIk91dHB1dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIk1vbm9zcGFjZSBvdXRwdXQgcmVnaW9uIGZvciBjb21tYW5kIHJlc3VsdHMgb3IgbG9ncyDigJQgd3JhcHMsIG9yIHNjcm9sbHMgaG9yaXpvbnRhbGx5LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0IOKAlCB3cmFwc1wiIHdpZGU+XG4gICAgICAgICAgPE91dHB1dD5wb2xseSBnYWxsZXJ5IOKGkiBzZXJ2aW5nIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6NDMyMTwvT3V0cHV0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNjcm9sbCDigJQgc2luZ2xlIGxvbmcgbGluZSBzY3JvbGxzIGluc3RlYWQgb2Ygd3JhcHBpbmdcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQgc2Nyb2xsPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiQgcG9sbHkgZ2FsbGVyeSAtLWJ1aWxkIC4vZGlzdC9nYWxsZXJ5ICAgIyBvbmUgbG9uZyBsaW5lIHRoYXQgc2Nyb2xscyBob3Jpem9udGFsbHkgcmF0aGVyIHRoYW4gd3JhcHBpbmcgb250byB0aGUgbmV4dCByb3dcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvT3V0cHV0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImh0bWxcIixcbiAgICB0aXRsZTogXCJIdG1sXCIsXG4gICAgY29tcG9uZW50OiBcIkh0bWxcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgYSB0cnVzdGVkIEhUTUwgc3RyaW5nLiBUaGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIOKAlCBuZXZlciBwYXNzIHVzZXIgaW5wdXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImh0bWw9e3RydXN0ZWQgc3RyaW5nfVwiIHdpZGU+XG4gICAgICAgIDxIdG1sIGh0bWw9XCI8c3Ryb25nPkJvbGQ8L3N0cm9uZz4sIDxlbT5pdGFsaWM8L2VtPiwgYW5kIGEgPGNvZGU+Y29kZSBzcGFuPC9jb2RlPiBmcm9tIGEgdHJ1c3RlZCBtYXJrdXAgc3RyaW5nLlwiIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2xsYXBzaWJsZVwiLFxuICAgIHRpdGxlOiBcIkNvbGxhcHNpYmxlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvbGxhcHNpYmxlXCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgPGRldGFpbHM+LzxzdW1tYXJ5PiBkaXNjbG9zdXJlIOKAlCBrZXlib2FyZCBhbmQgc2NyZWVuLXJlYWRlciBiZWhhdmlvdXIgZnJlZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xvc2VkIGJ5IGRlZmF1bHRcIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZSBzdW1tYXJ5PVwiU2hvdyBtb3JlIGRldGFpbFwiPlxuICAgICAgICAgICAgPFRleHQ+VGhpcyBjb250ZW50IGlzIHJldmVhbGVkIHdoZW4gdGhlIGRpc2Nsb3N1cmUgaXMgb3BlbmVkLjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHRPcGVuXCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIk9wZW4gZnJvbSB0aGUgc3RhcnRcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29sbGFwc2libGUgcmVuZGVycyBleHBhbmRlZCBvbiBmaXJzdCBwYWludC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlZGl0YWJsZSBmaWVsZCBpbiB0aGUgc3VtbWFyeSDigJQgU3BhY2UvRW50ZXIgbm8gbG9uZ2VyIGNvbGxhcHNlIGl0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgICAgIHN1bW1hcnk9e1xuICAgICAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJnYWxsZXJ5LWNvbGxhcHNpYmxlLXN1bW1hcnlcIiBwbGFjZWhvbGRlcj1cIlR5cGUgYSBzcGFjZSBoZXJl4oCmXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dD5UaGUgaGVhZGVyIGd1YXJkIGNhbmNlbHMgdGhlIGRpc2Nsb3N1cmUgdG9nZ2xlIGZvciB0ZXh0LWVudHJ5IGZpZWxkcy48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsYXlvdXRcIixcbiAgICB0aXRsZTogXCJMYXlvdXRcIixcbiAgICBjb21wb25lbnQ6IFwiTGF5b3V0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiVGhlIGdyaWQgcHJpbWl0aXZlLiBQcm9wcyBtYXAgdG8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzIOKAlCBubyBoYW5kLXdyaXR0ZW4gZmxleCBvciBncmlkLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2NvbHVtbnM9XCIxZnIgMWZyIDFmclwiJyB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiYXV0byAxZnIgYXV0b1wiJyB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8Qm94PmF1dG88L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PmF1dG88L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdGFja09uTW9iaWxlIOKAlCBjb2xsYXBzZXMgdG8gb25lIGNvbHVtbiDiiaQ2NDBweFwiIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIHN0YWNrT25Nb2JpbGU+XG4gICAgICAgICAgICA8Qm94PlNpZGUgYnkgc2lkZSwgdGhlbiBzdGFja2VkPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlNpZGUgYnkgc2lkZSwgdGhlbiBzdGFja2VkPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2x1c3RlclwiLFxuICAgIHRpdGxlOiBcIkNsdXN0ZXJcIixcbiAgICBjb21wb25lbnQ6IFwiQ2x1c3RlclwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIldyYXBwaW5nIHJvdyBvZiB2YXJpYWJsZS13aWR0aCBpdGVtcyDigJQgY2hpcHMsIHRhZ3MsIGJ1dHRvbiBncm91cHMuIFJlZmxvd3MgYXMgc3BhY2UgcnVucyBvdXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImdhcCDigJQgaXRlbXMgd3JhcCBvbnRvIG5ldyByb3dzXCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAge1tcIkdyb2Nlcmllc1wiLCBcIkVycmFuZHNcIiwgXCJIb21lXCIsIFwiR2FyZGVuXCIsIFwiRmluYW5jZVwiLCBcIlRyYXZlbFwiLCBcIkhlYWx0aFwiLCBcIkFkbWluXCJdLm1hcChcbiAgICAgICAgICAgICh0YWcpID0+IChcbiAgICAgICAgICAgICAgPEJhZGdlIGtleT17dGFnfSB2YXJpYW50PVwiaW5mb1wiPlxuICAgICAgICAgICAgICAgIHt0YWd9XG4gICAgICAgICAgICAgIDwvQmFkZ2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGFic1wiLFxuICAgIHRpdGxlOiBcIlRhYnNcIixcbiAgICBjb21wb25lbnQ6IFwiVGFic1wiLFxuICAgIHN1bW1hcnk6IFwiSG9yaXpvbnRhbCBuYXYgd2l0aCBhbiBhY3RpdmUtdGFiIGFjY2VudC4gRGlzcGF0Y2hlcyBhbiBhY3Rpb24gcGVyIHRhYi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW50ZXJhY3RpdmUg4oCUIG9uZSB0YWIgZGlzYWJsZWRcIiB3aWRlPlxuICAgICAgICA8VGFic1xuICAgICAgICAgIHRhYnM9e1tcbiAgICAgICAgICAgIHsgaWQ6IFwib3ZlcnZpZXdcIiwgbGFiZWw6IFwiT3ZlcnZpZXdcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJhY3Rpdml0eVwiLCBsYWJlbDogXCJBY3Rpdml0eVwiIH0sXG4gICAgICAgICAgICB7IGlkOiBcInNldHRpbmdzXCIsIGxhYmVsOiBcIlNldHRpbmdzXCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYXJjaGl2ZWRcIiwgbGFiZWw6IFwiQXJjaGl2ZWRcIiwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIGFjdGl2ZVRhYj17JGdhbGxlcnlUYWIudmFsdWV9XG4gICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGFiXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiR2FsbGVyeSB0YWJzXCJcbiAgICAgICAgLz5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNoZWNrYm94XCIsXG4gICAgdGl0bGU6IFwiQ2hlY2tib3hcIixcbiAgICBjb21wb25lbnQ6IFwiQ2hlY2tib3hcIixcbiAgICBzdW1tYXJ5OiBcIk5hdGl2ZSBjaGVja2JveCBpbiBhIGxhYmVsLiBBIHBsYWluIGJvb2xlYW4gaXMgY29udHJvbGxlZDsgYSBTaWduYWwgYmluZHMgaXRzZWxmLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ1bmNoZWNrZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJVbmNoZWNrZWRcIiBjaGVja2VkPXtmYWxzZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiQ2hlY2tlZFwiIGNoZWNrZWQ9e3RydWV9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZD17c2lnbmFsfSDigJQgY2xpY2sgdG8gdG9nZ2xlXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiQm91bmQgdG8gYSBzaWduYWxcIiBjaGVja2VkPXskZ2FsbGVyeUNoZWNrZWR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidG9nZ2xlXCIsXG4gICAgdGl0bGU6IFwiVG9nZ2xlXCIsXG4gICAgY29tcG9uZW50OiBcIlRvZ2dsZVwiLFxuICAgIHN1bW1hcnk6IFwiU3dpdGNoLXJvbGUgY2hlY2tib3guIFBhc3NpdmUg4oCUIHRoZSBjYWxsZXIgZHJpdmVzIHRoZSBjaGVja2VkIHN0YXRlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvZmZcIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiT2ZmXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib25cIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiT25cIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIkRpc2FibGVkXCIgY2hlY2tlZD17dHJ1ZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0LWlucHV0XCIsXG4gICAgdGl0bGU6IFwiVGV4dElucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIlRleHRJbnB1dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQuIEEgcGxhaW4gc3RyaW5nIGlzIHVuY29udHJvbGxlZDsgYSBTaWduYWwgaXMgY29udHJvbGxlZC4gXCIgK1xuICAgICAgXCJpbnB1dFR5cGUgcGlja3MgdGhlIG5hdGl2ZSBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbjsgZXJyb3IgcmVuZGVycyBhIGxpbmtlZCBtZXNzYWdlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJzaW5nbGVcIiB3aXRoIHBsYWNlaG9sZGVyJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLXNpbmdsZVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBoZXJl4oCmXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJtdWx0aVwiJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLW11bHRpXCIgdmFyaWFudD1cIm11bHRpXCIgcm93cz17M30gcGxhY2Vob2xkZXI9XCJNdWx0aXBsZSBsaW5lc+KAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJlbWFpbFwiJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWVtYWlsXCIgaW5wdXRUeXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImFkYUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJudW1iZXJcIiB3aXRoIG1pbi9tYXgvc3RlcCc+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1udW1iZXJcIiBpbnB1dFR5cGU9XCJudW1iZXJcIiBtaW49ezB9IG1heD17MTB9IHN0ZXA9ezF9IHZhbHVlPVwiNVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZXJyb3Ig4oCUIGxpbmtlZCBtZXNzYWdlLCBtYXJrcyBpbnZhbGlkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lcnJvclwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgZXJyb3I9XCJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbnZhbGlkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1pbnZhbGlkXCIgdmFsdWU9XCJub3QtYW4tZW1haWxcIiBpbnZhbGlkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWRpc2FibGVkXCIgdmFsdWU9XCJEaXNhYmxlZFwiIGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmVhZE9ubHlcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLXJlYWRvbmx5XCIgdmFsdWU9XCJSZWFkIG9ubHlcIiByZWFkT25seSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInZhbHVlPXtzaWduYWx9IOKAlCBjb250cm9sbGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1jb250cm9sbGVkXCIgdmFsdWU9eyRnYWxsZXJ5VGV4dH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzZWxlY3RcIixcbiAgICB0aXRsZTogXCJTZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiU2VsZWN0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiRHJvcGRvd24gb2Ygb3B0aW9ucyBib3VuZCB0byBhIFNpZ25hbDxTZXQ+LiBTaW5nbGUgcmVwbGFjZXMsIG11bHRpIHRvZ2dsZXMuIFwiICtcbiAgICAgICdjbGVhcmFibGUgcHJlcGVuZHMgYW4gXCJBbnkg4oCmXCIgcm93IHNvIGFuIG9wdGlvbmFsIGZpbHRlciBoYXMgYSBwYXRoIGJhY2sgdG8gdW5zZXQuJyxcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2luZ2xlLXNlbGVjdFwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUGljayBvbmVcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RTaW5nbGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjbGVhcmFibGUg4oCUIHNpbmdsZS1zZWxlY3Qgd2l0aCBhbiDigJxBbnkg4oCm4oCdIHJvd1wiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiRmlsdGVyIGJ5XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW55IG9iamVjdFwiXG4gICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibXVsdGlTZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgc2V2ZXJhbFwiXG4gICAgICAgICAgICBtdWx0aVNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RNdWx0aX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxvbmcgbGFiZWwg4oCUIHRydW5jYXRlcywgY2FyZXQgc3RheXMgb24gdGhlIHJvdyAocG9sbHkjMTgwKVwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1zZWxlY3QtbG9uZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdExvbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJmaWxlLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiRmlsZUlucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIkZpbGVJbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiU3R5bGVkIHdyYXBwZXIgb3ZlciBhIG5hdGl2ZSBmaWxlIHBpY2tlci4gSGFuZHMgdGhlIGNob3NlbiBGaWxlTGlzdCB0byBvbkZpbGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvbkZpbGVzIOKAlCBwaWNrIGEgZmlsZVwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQ2hvb3NlIGZpbGVcIlxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImFjY2VwdCArIG11bHRpcGxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgaW1hZ2VzXCJcbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIG9uRmlsZXM9eyhmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gZmlsZXNbMF0/Lm5hbWUgPz8gXCLigJRcIjtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiRGlzYWJsZWRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIG9uRmlsZXM9eygpID0+IHtcbiAgICAgICAgICAgICAgLyogZGlzYWJsZWQg4oCUIG5ldmVyIGludm9rZWQgKi9cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IHBpY2tlZCBmaWxlXCIgd2lkZT5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIExhc3QgcGlja2VkOiA8Q29kZT57JGdhbGxlcnlGaWxlTmFtZS52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImRyb3Bkb3duXCIsXG4gICAgdGl0bGU6IFwiRHJvcGRvd25cIixcbiAgICBjb21wb25lbnQ6IFwiRHJvcGRvd25cIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJMb3ctbGV2ZWwgdHJpZ2dlciArIHBvcG92ZXIgcGx1bWJpbmcuIFRoZSBwcmltaXRpdmUgaXRzZWxmIGhhcyBubyBjaHJvbWUg4oCUIFwiICtcbiAgICAgIFwiY29uc3VtZXJzIChTZWxlY3QsIEFjdGlvblNlbGVjdCkgd3JhcCBpdCB3aXRoIHRoZSBzdHlsZWQgdHJpZ2dlciBhbmQgY2FyZXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRyaWdnZXIgZHJlc3NlZCB2aWEgdHJpZ2dlckNsYXNzTmFtZSArIGRhdGEtb3BlblwiPlxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49eyRnYWxsZXJ5RHJvcGRvd25PcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9XCJnYWxsZXJ5LWRyb3Bkb3duLXRyaWdnZXJcIlxuICAgICAgICAgIHRyaWdnZXI9e1xuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4+T3BlbiBtZW51PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdhbGxlcnktZHJvcGRvd24tY2FyZXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICA8VGV4dD5GaXJzdCBpdGVtPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+U2Vjb25kIGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5UaGlyZCBpdGVtPC9UZXh0PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBzdW1tYXJ5OiBcIkR1YWwtbW9kZSB2aWV3L2VkaXQgZmllbGQuIENsaWNrIHRvIGVkaXQ7IGNvbW1pdCBkaXNwYXRjaGVzIGFuIGFjdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJibHVyXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJDbGljayB0byBlZGl0LCBjb21taXRzIG9uIGJsdXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJCbHVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nc2F2ZU9uPVwiZW50ZXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkVkaXQgYW5kIHByZXNzIEVudGVyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHNhdmVPbj1cImVudGVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkVudGVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZGF0ZVwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiMjAyNi0wNS0yMlwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBpbnB1dFR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRGF0ZSBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJBIGxvbmdlciwgbXVsdGktbGluZSB2YWx1ZVwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB2YXJpYW50PVwibXVsdGlcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJNdWx0aS1saW5lIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibGFzdCBjb21taXR0ZWQgdmFsdWVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBjb21taXR0ZWQ6IDxDb2RlPnskZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1zZWxlY3RcIixcbiAgICB0aXRsZTogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uU2VsZWN0XCIsXG4gICAgc3VtbWFyeTogXCJTaW5nbGUtc2VsZWN0IHRoYXQgY29tbWl0cyBhIHBsYWluIHN0cmluZyB2YWx1ZSB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb21taXRzIHZpYSBhY3Rpb25cIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwibWVkaXVtXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsb3dcIiwgbGFiZWw6IFwiTG93XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJtZWRpdW1cIiwgbGFiZWw6IFwiTWVkaXVtXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJoaWdoXCIsIGxhYmVsOiBcIkhpZ2hcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkIOKAlCByZW5kZXJzIGFzIHN0YXRpYyB0ZXh0XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICB2YWx1ZT1cImhpZ2hcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxvbmcgbGFiZWwg4oCUIHRydW5jYXRlcywgY2FyZXQgc3RheXMgb24gdGhlIHJvdyAocG9sbHkjMTgwKVwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LWxvbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIGxhYmVsXCJcbiAgICAgICAgICAgIHZhbHVlPVwibG9uZ1wiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCwgZGlzYWJsZWQg4oCUIG9uZSByb3cgYXQgdGhlIGNvbnRyb2wgaGVpZ2h0XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZy1kaXNhYmxlZFwiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgdmFsdWU9XCJsb25nXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZW1wdHkg4oCUIHRoZSBwbGFjZWhvbGRlciBpcyB0aGUgc2FtZSBib3ggYXMgYSB2YWx1ZVwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LWxvbmctZW1wdHlcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtMT05HX1NFTEVDVF9MQUJFTH1cbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ3aWRlIOKAlCBzaG9ydCBsYWJlbCwgc3RpbGwgb25lIGNlbnRyZWQgcm93XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3Qtd2lkZVwiXG4gICAgICAgICAgICBsYWJlbD1cIldpZGVcIlxuICAgICAgICAgICAgdmFsdWU9XCJzaG9ydFwiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgd2lkZVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWZvcm1cIixcbiAgICB0aXRsZTogXCJBY3Rpb25Gb3JtXCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvbkZvcm1cIixcbiAgICBzdW1tYXJ5OiBcIldyYXBzIGEgbmF0aXZlIGZvcm0gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4g4oCUIHN1Ym1pdCBkaXNwYXRjaGVzIHRoZSBmb3JtIGhhbmRsZXIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZvcm0gd2l0aCBUZXh0SW5wdXQgZmllbGRzICsgYSBzdWJtaXQgQnV0dG9uXCIgd2lkZT5cbiAgICAgICAgPEFjdGlvbkZvcm0gZm9ybT17Z2FsbGVyeUZvcm19IGFyaWEtbGFiZWw9XCJHYWxsZXJ5IGRlbW8gZm9ybVwiPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICA8VGV4dCBhcz1cImxhYmVsXCIgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCIgaHRtbEZvcj1cImdhbGxlcnktZm9ybS1uYW1lXCI+XG4gICAgICAgICAgICAgIEZ1bGwgbmFtZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBpZD1cImdhbGxlcnktZm9ybS1uYW1lXCIgbmFtZT1cImZ1bGxOYW1lXCIgcGxhY2Vob2xkZXI9XCJBZGEgTG92ZWxhY2VcIiAvPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tZW1haWxcIj5cbiAgICAgICAgICAgICAgRW1haWxcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tZW1haWxcIiBuYW1lPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImFkYUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiB0aWVyPVwicHJpbWFyeVwiIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiU3VibWl0XCIgLz5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9BY3Rpb25Gb3JtPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibW9kYWxcIixcbiAgICB0aXRsZTogXCJNb2RhbFwiLFxuICAgIGNvbXBvbmVudDogXCJNb2RhbFwiLFxuICAgIHN1bW1hcnk6IFwiQ29tcG91bmQgZGlhbG9nIOKAlCBmb2N1cyB0cmFwLCBFc2NhcGUgaGFuZGxpbmcsIHBvcnRhbCwgc2Nyb2xsIGxvY2suXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9wZW5zIGEgcG9ydGFsbGVkIGRpYWxvZ1wiPlxuICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5Om1vZGFsLW9wZW5cIiBsYWJlbD1cIk9wZW4gbW9kYWxcIiAvPlxuICAgICAgICA8TW9kYWwuUm9vdFxuICAgICAgICAgIHdoZW49eyRnYWxsZXJ5TW9kYWxPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVtbyBtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8TW9kYWwuQmFja2Ryb3AgLz5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxNb2RhbC5UaXRsZT5Nb2RhbCB0aXRsZTwvTW9kYWwuVGl0bGU+XG4gICAgICAgICAgICA8L01vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgIDxNb2RhbC5Cb2R5PlxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBGb2N1cyBpcyB0cmFwcGVkIGluc2lkZSB0aGUgZGlhbG9nLCBFc2NhcGUgY2xvc2VzIGl0LCB0aGUgYmFja2Ryb3AgY2xpY2sgY2xvc2VzIGl0LFxuICAgICAgICAgICAgICAgIGFuZCB0aGUgYm9keSBzY3JvbGwgaXMgbG9ja2VkIHdoaWxlIGl0IGlzIG9wZW4uXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvTW9kYWwuQm9keT5cbiAgICAgICAgICAgIDxNb2RhbC5Gb290ZXI+XG4gICAgICAgICAgICAgIDxNb2RhbC5DbG9zZT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJEb25lXCIgLz5cbiAgICAgICAgICAgICAgPC9Nb2RhbC5DbG9zZT5cbiAgICAgICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgPC9Nb2RhbC5Sb290PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29uZmlybS1kaWFsb2dcIixcbiAgICB0aXRsZTogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgY29tcG9uZW50OiBcIkNvbmZpcm1EaWFsb2dcIixcbiAgICBzdW1tYXJ5OiBcIlByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbi4gY29uZmlybSgpIHJlc29sdmVzIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbmZpcm0oKSDigJQgc3RhbmRhcmRcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiIGxhYmVsPVwiQ29uZmlybSBhbiBhY3Rpb25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbmZpcm0oeyBkYW5nZXI6IHRydWUgfSlcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpjb25maXJtXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLWRhbmdlcj1cInRydWVcIlxuICAgICAgICAgICAgbGFiZWw9XCJDb25maXJtIGEgZGVsZXRpb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidG9hc3RcIixcbiAgICB0aXRsZTogXCJUb2FzdFwiLFxuICAgIGNvbXBvbmVudDogXCJUb2FzdFwiLFxuICAgIHN1bW1hcnk6IFwiUmVuZGVycyB0aGUgZ2xvYmFsIGVycm9yU3RhdGUgc2lnbmFsLiBTZXZlcml0eSBzZXRzIHRoZSBhcmlhLWxpdmUgcG9saXRlbmVzcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicHVzaCBhIHRvYXN0IGF0IGVhY2ggc2V2ZXJpdHlcIiB3aWRlPlxuICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiaW5mb1wiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJpbmZvXCJcbiAgICAgICAgICAgIGxhYmVsPVwiSW5mbyB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwid2FybmluZ1wiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiV2FybmluZyB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cImVycm9yXCJcbiAgICAgICAgICAgIGxhYmVsPVwiRXJyb3IgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm92ZXJsYXktcm9vdFwiLFxuICAgIHRpdGxlOiBcIk92ZXJsYXlSb290XCIsXG4gICAgY29tcG9uZW50OiBcIk92ZXJsYXlSb290XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiSW5mcmFzdHJ1Y3R1cmUsIG5vdCBhIHZpc3VhbCBjb250cm9sLiBNb3VudCBpdCBvbmNlIG5lYXIgdGhlIGFwcCByb290OyBNb2RhbCwgVG9hc3QsIGFuZCBcIiArXG4gICAgICBcIkNvbmZpcm1EaWFsb2cgcG9ydGFsIGludG8gaXQuIFRoZSBnYWxsZXJ5IHNoZWxsIGFscmVhZHkgbW91bnRzIG9uZSDigJQgdGhpcyBzZWN0aW9uIGRvY3VtZW50cyBpdC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibW91bnRlZCBvbmNlIGF0IHRoZSBhcHAgcm9vdFwiIHdpZGU+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxDb2RlPntcIjxPdmVybGF5Um9vdCAvPlwifTwvQ29kZT4gcmVuZGVycyB0aGUgcG9ydGFsIHRhcmdldCB0aGUgb3ZlcmxheSBwcmltaXRpdmVzIG5lZWQuXG4gICAgICAgICAgV2l0aG91dCBpdCwgdGhlIE1vZGFsIC8gVG9hc3QgLyBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBhYm92ZSB3b3VsZCBoYXZlIG5vd2hlcmUgdG9cbiAgICAgICAgICByZW5kZXIuIEl0IGRyYXdzIG5vdGhpbmcgaXRzZWxmOyB0aGUgZ2FsbGVyeSBzaGVsbCBtb3VudHMgdGhlIHNpbmdsZSBsaXZlIGluc3RhbmNlLlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG5dO1xuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5IGFwcCByb290IOKAlCBhIHNpbmdsZSBzY3JvbGxhYmxlIHBhZ2UgY2F0YWxvZ3VpbmcgZXZlcnkgcG9sbHktdWlcbiAqIHByaW1pdGl2ZSBpbiBpdHMgY29uZmlndXJhdGlvbnMuIEFuIGluLXBhZ2UgbmF2IGp1bXBzIGJldHdlZW4gc2VjdGlvbnM7IGFcbiAqIHRoZW1lIHRvZ2dsZSBmb3JjZXMgbGlnaHQvZGFyayBvbiB0aGUgcGFuZWwgc3VidHJlZSB2aWEgYGRhdGEtcG9sbHktdGhlbWVgXG4gKiBzbyBib3RoIHBhbGV0dGVzIGNhbiBiZSBpbnNwZWN0ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgT1Mgc2V0dGluZy5cbiAqXG4gKiBUaGUgb3ZlcmxheSBob3N0cyAoT3ZlcmxheVJvb3QgLyBUb2FzdC5WaWV3cG9ydCAvIENvbmZpcm1EaWFsb2cuSG9zdCkgYXJlXG4gKiBtb3VudGVkIGhlcmUgb25jZSwgc28gdGhlIE1vZGFsLCBUb2FzdCwgYW5kIENvbmZpcm1EaWFsb2cgc3BlY2ltZW5zIGhhdmUgYVxuICogcG9ydGFsIHRhcmdldCDigJQgdGhlIHNhbWUgd2lyaW5nIGEgcmVhbCBjb25zdW1lciBhcHAgZG9lcyBhdCBpdHMgcm9vdC5cbiAqL1xuXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENsdXN0ZXIsXG4gIENvbmZpcm1EaWFsb2csXG4gIExheW91dCxcbiAgT3ZlcmxheVJvb3QsXG4gIFN1cmZhY2UsXG4gIFRleHQsXG4gIFRvYXN0LFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQgeyBUSEVNRVMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHQUxMRVJZX1NFQ1RJT05TLCB0eXBlIEdhbGxlcnlTZWN0aW9uIH0gZnJvbSBcIi4vc3BlY2ltZW5zLnRzeFwiO1xuaW1wb3J0IHsgJGdhbGxlcnlUaGVtZSB9IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG4vKiogQSBjYXBpdGFsaXNlZCBsYWJlbCBmb3IgYSB0aGVtZSBvcHRpb24uICovXG5mdW5jdGlvbiB0aGVtZUxhYmVsKHRoZW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGhlbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGVtZS5zbGljZSgxKTtcbn1cblxuLyoqIE9uZSBjYXRhbG9ndWVkIGNvbXBvbmVudDogYSBsYWJlbGxlZCBsYW5kbWFyayB3aXRoIGEgZ3JpZCBvZiBzcGVjaW1lbnMuICovXG5mdW5jdGlvbiBTZWN0aW9uKHByb3BzOiB7IHNlY3Rpb246IEdhbGxlcnlTZWN0aW9uIH0pIHtcbiAgY29uc3QgeyBzZWN0aW9uIH0gPSBwcm9wcztcbiAgY29uc3QgaGVhZGluZ0lkID0gYCR7c2VjdGlvbi5pZH0taGVhZGluZ2A7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIGFzPVwic2VjdGlvblwiXG4gICAgICBpZD17c2VjdGlvbi5pZH1cbiAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICBjbGFzc05hbWU9XCJnYWxsZXJ5LXNlY3Rpb25cIlxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkaW5nSWR9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGgyIGlkPXtoZWFkaW5nSWR9IGNsYXNzPVwiZ2FsbGVyeS1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAge3NlY3Rpb24udGl0bGV9XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxUZXh0IGFzPVwicFwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgIHtzZWN0aW9uLnN1bW1hcnl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPExheW91dFxuICAgICAgICAgIGNvbHVtbnM9XCJyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDE0cmVtKSwgMWZyKSlcIlxuICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7c2VjdGlvbi5yZW5kZXIoKX1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHYWxsZXJ5QXBwKCkge1xuICBjb25zdCB0aGVtZSA9ICRnYWxsZXJ5VGhlbWUudmFsdWU7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cImNsYW1wKHZhcigtLXBvbGx5LXNwYWNlLXNtKSwgM3Z3LCB2YXIoLS1wb2xseS1zcGFjZS14bCkpXCJcbiAgICAgIGRhdGEtZ2FsbGVyeS1wYW5lbD1cInRydWVcIlxuICAgICAgZGF0YS1wb2xseS10aGVtZT17dGhlbWUgPT09IFwic3lzdGVtXCIgPyB1bmRlZmluZWQgOiB0aGVtZX1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiPlxuICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImdhbGxlcnktdGl0bGVcIj5Qb2xseSBVSSBnYWxsZXJ5PC9oMT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIEV2ZXJ5IDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPkBmYWlyZm94L3BvbGx5L3VpPC9UZXh0PiBwcmltaXRpdmUsIGluIGl0cyBjb25maWd1cmF0aW9ucyDigJRcbiAgICAgICAgICAgIGEgcmVmZXJlbmNlIGZvciBidWlsZGluZyBwb2xseSBhcHBzLCBhbmQgYSBzaW5nbGUgc3VyZmFjZSBmb3IgYWNjZXNzaWJpbGl0eSBhbmRcbiAgICAgICAgICAgIHZpc3VhbC1yZWdyZXNzaW9uIGNoZWNrcy5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTGF5b3V0PlxuXG4gICAgICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJjYWxsb3V0XCIgcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgICBUaGVtZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAge1RIRU1FUy5tYXAoKHQpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17dH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpZXI9e3QgPT09IHRoZW1lID8gXCJwcmltYXJ5XCIgOiBcInRlcnRpYXJ5XCJ9XG4gICAgICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnNldC10aGVtZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hY3Rpb24tdGhlbWU9e3R9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3RoZW1lTGFiZWwodCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvU3VyZmFjZT5cblxuICAgICAgICA8bmF2IGFyaWEtbGFiZWw9XCJDb21wb25lbnRzXCI+XG4gICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICB7R0FMTEVSWV9TRUNUSU9OUy5tYXAoKHNlY3Rpb24pID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17c2VjdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpZXI9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgaHJlZj17YCMke3NlY3Rpb24uaWR9YH1cbiAgICAgICAgICAgICAgICBsYWJlbD17c2VjdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14bClcIj5cbiAgICAgICAgICB7R0FMTEVSWV9TRUNUSU9OUy5tYXAoKHNlY3Rpb24pID0+IChcbiAgICAgICAgICAgIDxTZWN0aW9uIGtleT17c2VjdGlvbi5pZH0gc2VjdGlvbj17c2VjdGlvbn0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0xheW91dD5cblxuICAgICAgey8qIE1vdW50ZWQgb25jZSBzbyB0aGUgb3ZlcmxheSBzcGVjaW1lbnMgaGF2ZSBhIHBvcnRhbCB0YXJnZXQuICovfVxuICAgICAgPE92ZXJsYXlSb290IC8+XG4gICAgICA8VG9hc3QuVmlld3BvcnQgLz5cbiAgICAgIDxDb25maXJtRGlhbG9nLkhvc3QgLz5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkncyBicm93c2VyIGVudHJ5IHBvaW50LiBCdW5kbGVkIGJ5IHNlcnZlci50cyAob25lIEJ1bi5idWlsZCBwYXNzKVxuICog4oCUIGl0cyB0cmFuc2l0aXZlIGAubW9kdWxlLmNzc2AgaW1wb3J0cyBwbHVzIHRoZSBnbG9iYWwgc3R5bGVzaGVldHMgYmVsb3cgY29tZVxuICogb3V0IGFzIGEgc2luZ2xlIENTUyBhcnRpZmFjdCB0aGUgc2VydmVyIHNlcnZlcyBhbG9uZ3NpZGUgdGhpcyBzY3JpcHQuXG4gKlxuICogQm9vdCBtaXJyb3JzIGEgcmVhbCBjb25zdW1lciBhcHA6IGJpbmQgdGhlIGRlbW8gZm9ybSwgaW5zdGFsbCB0aGUgZG9jdW1lbnRcbiAqIGV2ZW50IGRlbGVnYXRpb24gdGhhdCByb3V0ZXMgYGRhdGEtYWN0aW9uYCBjbGlja3Mvc3VibWl0cyBpbnRvIHRoZSBnYWxsZXJ5J3NcbiAqIGFjdGlvbiByZWdpc3RyeSwgdGhlbiByZW5kZXIuIFRoZSBvdmVybGF5IGhvc3RzIGxpdmUgaW5zaWRlIDxHYWxsZXJ5QXBwIC8+LlxuICovXG5cbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGluc3RhbGxFdmVudERlbGVnYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IEdBTExFUllfQUNUSU9OUyB9IGZyb20gXCIuL2FjdGlvbnMudHNcIjtcbmltcG9ydCB7IEdhbGxlcnlBcHAgfSBmcm9tIFwiLi9nYWxsZXJ5LWFwcC50c3hcIjtcbmltcG9ydCB7IHR5cGUgR2FsbGVyeVN0b3JlcywgZ2FsbGVyeUZvcm0gfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3NyYy9wb2xseS11aS90aGVtZS5jc3NcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3NyYy9wb2xseS11aS9zdHlsZXMuY3NzXCI7XG5pbXBvcnQgXCIuL2dhbGxlcnkuY3NzXCI7XG5cbmNvbnN0IHN0b3JlczogR2FsbGVyeVN0b3JlcyA9IHt9O1xuZ2FsbGVyeUZvcm0uYmluZFN0b3JlcygoKSA9PiBzdG9yZXMpO1xuXG5pbnN0YWxsRXZlbnREZWxlZ2F0aW9uKGFzeW5jIChkaXNwYXRjaCkgPT4ge1xuICBjb25zdCBoYW5kbGVyID0gR0FMTEVSWV9BQ1RJT05TW2Rpc3BhdGNoLmFjdGlvbl07XG4gIGlmIChoYW5kbGVyKSB7XG4gICAgYXdhaXQgaGFuZGxlcih7XG4gICAgICBzdG9yZXMsXG4gICAgICBldmVudDogZGlzcGF0Y2guZXZlbnQsXG4gICAgICBlbGVtZW50OiBkaXNwYXRjaC5lbGVtZW50LFxuICAgICAgZGF0YTogZGlzcGF0Y2guZGF0YSxcbiAgICB9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcFwiKSA/PyBkb2N1bWVudC5ib2R5O1xucmVuZGVyKDxHYWxsZXJ5QXBwIC8+LCByb290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RUFBRSxLQUFJLEVBQUUsSUFBSSxjQUFhLEtBQUcsRUFBRSxNQUFJLENBQUMsQ0FBQyxJQUFFLE1BQUssR0FBUSxLQUFOLE9BQVEsRUFBRSxDQUFDLElBQUUsR0FBRSxDQUFDLEVBQUUsS0FBRyxFQUFFLE1BQUssQ0FBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxHQUFHLElBQUksRUFBRSxPQUFLLEdBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsTUFBSyxFQUFFLE9BQUssS0FBRyxFQUFFLENBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxLQUFVLElBQUUsRUFBRSxPQUFYLFFBQXNCLEVBQUUsT0FBUjtBQUFBLElBQVksT0FBTyxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQUssTUFBSyxFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBUyxLQUFOLFFBQWUsRUFBRSxPQUFSO0FBQUEsUUFBWSxPQUFPLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBSyxFQUFFO0FBQUEsS0FBSSxHQUFFLEVBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEdBQUUsQ0FBQyxFQUFFLFFBQU0sRUFBRSxNQUFJLFNBQUssRUFBRSxLQUFLLENBQUMsS0FBRyxDQUFDLEVBQUUsU0FBTyxLQUFHLEVBQUUsd0JBQXNCLElBQUUsRUFBRSxzQkFBb0IsR0FBRyxDQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRztBQUFBLElBQUMsU0FBUSxHQUFFLElBQUUsRUFBRSxFQUFFO0FBQUEsTUFBUSxFQUFFLFNBQU8sS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLElBQUUsRUFBRSxNQUFNLEdBQUUsSUFBRSxFQUFFLFFBQU8sRUFBRSxDQUFDO0FBQUEsWUFBRTtBQUFBLElBQVEsRUFBRSxTQUFPLEVBQUUsTUFBSTtBQUFBO0FBQUE7QUFBRyxTQUFTLENBQUMs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QUFHLEVBQUUsS0FBRyxFQUFFO0FBQUEsUUFBRztBQUFBLE1BQU8sT0FBTyxFQUFFLEVBQUUsUUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFFLENBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQTtBQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxJQUFFLEVBQUU7QUFBQSxFQUFLLElBQVksRUFBRSxnQkFBTjtBQUFBLElBQWtCLE9BQU87QUFBQSxFQUFLLE1BQUksRUFBRSxRQUFNLElBQUUsQ0FBQyxFQUFFLEtBQUcsRUFBRSxNQUFLLElBQUUsQ0FBQyxJQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUcsS0FBSSxJQUFFLEVBQUUsUUFBTSxFQUFFLENBQUM7QUFBQSxFQUFFO0FBQUEsSUFBRSxJQUFlLE9BQU8sS0FBbkIsWUFBcUI7QUFBQSxNQUFDLElBQUUsRUFBRTtBQUFBLE1BQU8sSUFBRztBQUFBLFFBQUMsSUFBRyxJQUFFLEVBQUUsT0FBTSxJQUFFLEVBQUUsYUFBVyxFQUFFLFVBQVUsUUFBTyxLQUFHLElBQUUsRUFBRSxnQkFBYyxFQUFFLEVBQUUsTUFBSyxJQUFFLElBQUUsSUFBRSxFQUFFLE1BQU0sUUFBTSxFQUFFLEtBQUcsR0FBRSxFQUFFLE1BQUksS0FBRyxJQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUssS0FBRyxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksSUFBRSxJQUFJLEVBQUUsR0FBRSxDQUFDLEtBQUcsRUFBRSxNQUFJLElBQUUsSUFBSSxFQUFFLEdBQUUsQ0FBQyxHQUFFLEVBQUUsY0FBWSxHQUFFLEVBQUUsU0FBTyxJQUFHLEtBQUcsRUFBRSxJQUFJLENBQUMsR0FBRSxFQUFFLFVBQVEsRUFBRSxRQUFNLENBQUMsSUFBRyxFQUFFLE1BQUksR0FBRSxJ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LEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsS0FBSSxFQUFFLE9BQUssTUFBSyxFQUFFLElBQUksVUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsS0FBRztBQUFBLFFBQU0sT0FBTSxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsU0FBTyxHQUFFLEVBQUUsTUFBSSxNQUFLLEtBQVMsS0FBTixNQUFRO0FBQUEsVUFBQyxJQUFHLEVBQUUsTUFBSztBQUFBLFlBQUMsS0FBSSxFQUFFLE9BQUssSUFBRSxNQUFJLElBQUksS0FBTSxFQUFFLFlBQUwsS0FBZSxFQUFFO0FBQUEsY0FBYSxJQUFFLEVBQUU7QUFBQSxZQUFrQixLQUFOLFNBQVUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFHLE9BQU0sRUFBRSxNQUFJO0FBQUEsVUFBQyxFQUFNLFNBQVMsS0FBTjtBQUFBLFlBQVEsS0FBSSxJQUFFLEVBQUUsT0FBTztBQUFBLGNBQUssRUFBRSxFQUFFLEVBQUU7QUFBQSxRQUFDLEVBQU07QUFBQSxZQUFFLE1BQUksRUFBRTtBQUFBLFFBQVUsRUFBRSxPQUFSLFNBQWMsRUFBRSxNQUFJLEVBQUUsT0FBSyxDQUFDLElBQUcsRUFBRSxRQUFNLEVBQUUsQ0FBQyxHQUFFLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUEsSUFBRSxFQUFNO0FBQUEsTUFBTSxLQUFOLFFBQVMsRUFBRSxPQUFLLEVBQUUsT0FBSyxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksRUFBRSxFQUFFLEtBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxRQUFPLElBQUUsRUFBRSxXQUFTLEVBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFTLFlBQUU7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUksRUFB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RyxFQUFFLElBQUksR0FBRSxLQUFTLEtBQU4sU0FBVSxFQUFFLE1BQUksRUFBRSxDQUFDO0FBQUEsSUFBRSxFQUFNO0FBQUEsUUFBRSxVQUFRO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBQTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksR0FBRTtBQUFBLEVBQUUsSUFBRyxFQUFFLFdBQVMsRUFBRSxRQUFRLENBQUMsSUFBRyxJQUFFLEVBQUUsU0FBTyxFQUFFLFdBQVMsRUFBRSxXQUFTLEVBQUUsT0FBSyxFQUFFLEdBQUUsTUFBSyxDQUFDLEtBQVUsSUFBRSxFQUFFLFFBQVgsTUFBZ0I7QUFBQSxJQUFDLElBQUcsRUFBRTtBQUFBLE1BQXFCLElBQUc7QUFBQSxRQUFDLEVBQUUscUJBQXFCO0FBQUEsUUFBRSxPQUFNLEdBQUU7QUFBQSxRQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBQTtBQUFBLElBQUUsRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFJO0FBQUEsRUFBQyxJQUFHLElBQUUsRUFBRTtBQUFBLElBQUksS0FBSSxJQUFFLEVBQUUsSUFBRSxFQUFFLFFBQU87QUFBQSxNQUFJLEVBQUUsTUFBSSxFQUFFLEVBQUUsSUFBRyxHQUFFLEtBQWUsT0FBTyxFQUFFLFFBQXJCLFVBQXlCO0FBQUEsRUFBRSxLQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQVM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUssWUFBWSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBRSxLQUFHLGFBQVcsSUFBRSxTQUFTLGtCQUFpQixFQUFFLE1BQUksRUFBRSxHQUFHLEdBQUUs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QUksSUFBRSxHQUFFLFFBQU0sR0FBRSxNQUFJLEVBQUMsSUFBRyxDQUFDLEdBQUUsS0FBSSxDQUFDLEVBQUM7QUFBQSxFQUFHLE9BQU8sS0FBRyxFQUFFLEdBQUcsVUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxJQUFHLEVBQUUsSUFBRSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBTyxXQUFFLENBQUMsR0FBRSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksS0FBRyxFQUFFLEdBQUcsSUFBRyxJQUFFLEVBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxJQUFFLE1BQUksTUFBSSxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBSSxJQUFFLENBQUMsR0FBRSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxJQUFJO0FBQUEsUUFBSSxPQUFNO0FBQUEsTUFBRyxJQUFJLElBQUUsT0FBRyxJQUFFLEVBQUUsSUFBSSxVQUFRO0FBQUEsTUFBRSxJQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxFQUFFLEtBQUk7QUFBQSxVQUFDLElBQUU7QUFBQSxVQUFHLElBQUksSUFBRSxFQUFFLEdBQUc7QUFBQSxVQUFHLEVBQUUsS0FBRyxFQUFFLEtBQUksRUFBRSxNQUFTLFdBQUUsTUFBSSxFQUFFLEdBQUcsT0FBSyxJQUFFO0FBQUEsUUFBRztBQUFBLE9BQUUsR0FBRSxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxRQUFFLE9BQU8sSUFBRSxLQUFHLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFNLENBQUMsS0FBRztBQUFBO0FBQUEsSUFBRyxHQUFFLE1BQUk7QUFBQSxJQUFHLElBQUksSUFBRSxHQUFFLHVCQUFzQixJQUFFLEdBQUU7QUFBQSxJQUFvQixHQUFFLHNCQUFvQixRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUU7QUFBQSxRQUFFLElBQU8sV0FBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxPQUFHLEdBQUUsd0JBQXNCO0FBQUEsRUFBQztBQUFBLEVBQUMsT0FBTyxFQUFFLE9BQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLENBQUMsR0FBRSxPQUFLLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsR0FBRSxFQUFFLElBQUUsR0FBRSxHQUFFLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQTtBQUFtRixTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBdU4sU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUksQ0FBQyxNQUFJLEVBQUUsS0FBRyxFQUFFLEdBQUUsRUFBRSxNQUFJLEdBQUUsRUFBRSxNQUFJLElBQUcsRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTztBQUFBLEtBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxFQUFFLE1BQUssSUFBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxFQUFFLElBQUUsR0FBRSxLQUFTLEVBQUUsTUFBUixTQUFhLEVBQUUsS0FBRyxNQUFHLEVBQUUsSUFBSSxFQUFDLElBQUcsRUFBRSxNQUFNLFNBQU8sRUFBRTtBQUFBO0FBQWtPLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLEVBQUU7QUFBQSxFQUFFLElBQUcsQ0FBQyxFQUFFLElBQUc7QUFBQSxJQUFDLFNBQVEsSUFBRSxHQUFFLElBQVcsTUFBUCxRQUFVLENBQUMsRUFBRSxPQUFZLEVBQUUsT0FBVDtBQUFBLE1BQWEsSUFBRSxFQUFFO0FBQUEsSUFBRyxJQUFJLElBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLElBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxLQUFHLE1BQUksRUFBRTtBQUFBLEVBQUk7QUFBQSxFQUFDLE9BQU8sRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsRUFBRSxJQUFFLEdBQUUsTUFBTSxLQUFHO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUksSUFBRyxFQUFFLE9BQUs7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxNQUFJLENBQUM7QUFBQSxRQUFFLE9BQU0sR0FBRTtBQUFBLFFBQUMsRUFBRSxNQUFJLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEVBQUU7QUFBQTtBQUFFLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRSxNQUFLLE1BQUcsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLEtBQUcsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxNQUFJLEVBQUUsSUFBSSxNQUFLLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUMsR0FBRSxLQUFFO0FBQUEsRUFBRSxJQUFJLEtBQUcsS0FBRSxFQUFFLEtBQUs7QUFBQSxFQUFJLE1BQUksT0FBSSxNQUFHLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxFQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLEVBQUUsTUFBUztBQUFBLEdBQUUsTUFBSSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsS0FBRSxLQUFJLEtBQUU7QUFBQSxHQUFHLEdBQUUsU0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksSUFBSSxXQUFhLEdBQUUsS0FBSyxDQUFDLE1BQVosS0FBZSxPQUFJLEdBQUUsMkJBQXlCLEtBQUUsR0FBRSwwQkFBd0IsSUFBRyxFQUFDLElBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFJLEVBQUUsTUFBSSxFQUFFLEdBQUUsRUFBRSxJQUFPO0FBQUEsR0FBRyxJQUFHLEtBQUUsS0FBRTtBQUFBLEdBQU0sR0FBRSxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUUsTUFBSSxHQUFFLENBQUM7QUFBQSxPQUFFO0FBQUEsTUFBRSxPQUFNLEdBQUU7QUFBQSxNQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDO0FBQUEsT0FBRyxHQUFFLElBQUUsQ0FBQyxHQUFFLEdBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRztBQUFBO0FBQUEsR0FBRyxHQUFFLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBQSxFQUFJLEtBQUcsRUFBRSxRQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEdBQUUsQ0FBQztBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxJQUFFO0FBQUE7QUFBQSxHQUFHLEdBQUUsRUFBRSxNQUFTLFdBQUUsS0FBRyxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFJLElBQUksS0FBYyxPQUFPLHlCQUFuQjtBQUF5QyxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLGFBQWEsQ0FBQyxHQUFFLE1BQUcscUJBQXFCLENBQUMsR0FBRSxXQUFXLENBQUM7QUFBQSxLQUFHLElBQUUsV0FB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QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFVBQVUsUUFBTTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTTtBQUFBO0FBQUksR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxNQUFJLEtBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxJQUFDLEVBQUUsSUFBRTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQU87QUFBQSxTQUFFLFFBQVEsR0FBRTtBQUFBLFFBQUMsSUFBSTtBQUFBLFNBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLE9BQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxNQUFRLEdBQUosR0FBVSxHQUFKLE1BQUU7QUFBQSxJQUFJLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxHQUFFLFFBQVEsR0FBRTtBQUFBLFVBQUMsSUFBSTtBQUFBLFdBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLFNBQUU7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFlBQVUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFNLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFPLEVBQUUsQ0FBQztBQUFBLEtBQUU7QUFBQSxLQUFHLEVBQUMsTUFBSyxNQUFLLENBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxVQUFRLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsV0FBUyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSyxRQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsU0FBTyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSztBQUFBO0FBQU8sR0FBRSxVQUFVLE9BQUssUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLEdBQU07QUFBQTtBQUFHLE9BQU8sZUFBZSxHQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxHQUFHLEtBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBRTtBQUFBLE1BQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsS0FBRyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBTyxPQUFKLEtBQVcsT0FBSjtBQUFBLFFBQU0sSUFBRyxFQUFFLE1BQUksSUFBRTtBQUFBLFVBQUMsRUFBRSxJQUFFO0FBQUEsVUFBRSxLQUFFLEVBQUMsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBQztBQUFBLFFBQUM7QUFBQTtBQUFBLE9BQUcsSUFBSTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJLElBQUc7QUFBQSxNQUFDLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxjQUFFO0FBQUEsTUFBUSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUU7QUFBQSxNQUFFLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFFLEVBQUUsSUFBRTtBQUFBLElBQUcsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLE1BQUMsRUFBRSxJQUFFO0FBQUEsTUFBRTtBQUFBLElBQUs7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLElBQU87QUFBQSxFQUFFLE9BQWUsTUFBSixXQUFNO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBUSxFQUFFLE1BQVAsSUFBUztBQUFBLE1BQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxRQUFRLEVBQUUsRUFBRSxJQUFFO0FBQUEsSUFBQyxFQUFNO0FBQUEsVUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxNQUFRLEVBQUUsSUFBTztBQUFBLElBQUUsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsSUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxHQUFFLEtBQUssTUFBVSxXQUFFLENBQUM7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUUsS0FBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUE7QUFBRSxHQUFFLFlBQVUsSUFBSTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBUSxLQUFHLEtBQUssTUFBYjtBQUFBLElBQWdCLE9BQU07QUFBQSxFQUFHLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxLQUFLLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEtBQUssSUFBRSxLQUFHLENBQUMsR0FBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsR0FBRSxJQUFJO0FBQUEsSUFBRSxLQUFFO0FBQUEsSUFBSyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFHLEtBQUcsS0FBSyxLQUFHLEtBQUssTUFBSSxLQUFPLEtBQUssTUFBVCxHQUFXO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLEtBQUssS0FBRztBQUFBLE1BQUksS0FBSztBQUFBLElBQUc7QUFBQSxJQUFFLE9BQU0sR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUc7QUFBQSxJQUFHLEtBQUs7QUFBQTtBQUFBLEVBQUksS0FBRTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLENBQUM7QUFBQSxJQUFFLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxNQUFDLEtBQUssS0FBRztBQUFBLE1BQUksU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLElBQUUsS0FBSyxJQUFHO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFFLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1B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QUUsS0FBTztBQUFBLElBQUUsRUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEtBQUUsS0FBRyxFQUFFLEVBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLEtBQUUsRUFBRSxNQUFLLElBQUUsVUFBVSxFQUFDO0FBQUEsRUFBRSxFQUFFLE9BQUs7QUFBQSxFQUFjLEVBQUUsUUFBTTtBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsR0FBRSxLQUFFLEVBQUU7QUFBQSxJQUFJLE9BQU0sS0FBRSxHQUFFO0FBQUEsTUFBRyxJQUFHLEdBQUUsS0FBSTtBQUFBLFFBQUMsR0FBRSxJQUFJLFFBQU07QUFBQSxRQUFFO0FBQUEsTUFBSztBQUFBLElBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsTUFBTSxPQUFXLE1BQUosSUFBTSxJQUFPLE1BQUwsT0FBTyxLQUFHLEtBQUc7QUFBQSxLQUFHLEdBQUUsSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsT0FBTSxDQUFDLE1BQU0sUUFBUSxFQUFFLEtBQUssS0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQUEsS0FBRSxHQUFFLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBRyxFQUFFLE9BQU07QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsUUFBTSxJQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksT0FBUyxFQUFFLElBQUksSUFBSSxhQUFkO0FBQUEsVUFBdUIsRUFBRSxJQUFJLElBQUksT0FBSztBQUFBLE1BQUM7QUFBQSxLQUFFLEdBQUUsSUFBRSxFQUFFLEtBQUs7QUFBQSxJQUFFLEVBQUUsS0FBSyxJQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsRUFBRTtBQUFBLE1BQUUsRUFBRSxLQUFLLElBQUk7QUFBQTtBQUFBLElBQUcsT0FBTSxD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LE1BQUssRUFBRSxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRSxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTSxNQUFJLEVBQUUsT0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSSxLQUFJO0FBQUE7QUFBRSxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsS0FBSyxNQUFJLEdBQUUsS0FBSyxJQUFFLE1BQUssS0FBSyxNQUFJO0FBQUE7QUFBSyxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRztBQUFBLEVBQUksT0FBTyxLQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksQ0FBQztBQUFBO0FBQW1OLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsTUFBSyxLQUFLLElBQUU7QUFBQTtBQUFLLEVBQUUsVUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxFQUFJLE1BQUksRUFBRSxNQUFJLE9BQUksS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLEdBQUUsS0FBRyxLQUFHLEVBQUUsUUFBTSxFQUFFLE9BQUssT0FBTSxNQUFHLEdBQUUsQ0FBQztBQUFBLElBQUksR0FBRSxZQUFVLElBQUksR0FBRyxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLEtBQUksSUFBRTtBQUFBLEVBQVcsRUFBRSxLQUFSLFNBQVksRUFBRSxJQUFFLENBQUMsSUFBRyxFQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFBRSxJQUFJLElBQUUsR0FBRSxFQUFFLEdBQUcsR0FBRSxJQUFFLE9BQUcsSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLEtBQUcsRUFBRSxRQUFNLElBQUUsTUFBRyxFQUFFLE1BQUksTUFBSyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEVBQUU7QUFBQTtBQUFBLEVBQUksRUFBRSxNQUFJO0FBQUEsRUFBRSxJQUFJLEtBQUUsRUFBRTtBQUFBLEVBQUksRUFBRSxNQUFJO0FBQUEsRUFBSyxJQUFJLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFHLENBQUMsRUFBRSxFQUFFLEtBQUk7QUFBQSxNQUFDLElBQUcsRUFBRSxNQUFNLEtBQUk7QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFLE1BQU07QUFBQSxRQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUcsR0FBRSxHQUFFLEVBQUUsSUFBSSxLQUFJLEVBQUUsSUFBSSxHQUFHO0FBQUEsTUFBQztBQUFBLE1BQUMsSUFBSTtBQUFBLE1BQUUsS0FBSSxFQUFFLFNBQVMsRUFBQyxLQUFJLEVBQUUsTUFBSSxLQUFJLENBQUMsRUFBRSxJQUFFLEVBQUUsRUFBRSxJQUFJO0FBQUEsUUFBRyxFQUFFLE1BQUksSUFBRSxFQUFFLFlBQVk7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFHLEVBQUUsU0FBTyxLQUFHLEVBQUUsT0FBSyxFQUFFLFNBQVMsRUFBQyxLQUFJLEVBQUUsTUFBSSxFQUFFLElBQUksSUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLEtBQUssR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVUsdUJBQXFCLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBVSxTQUFPLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsSUFBQyxJQUFHLEtBQUssSUFBSSxLQUFJO0FBQUEsTUFBQyxJQUFJLElBQUUsU0FBUyxjQUFjLEtBQUssR0FBRSxJQUFFLEtBQUssSUFBSSxJQUFJLEdBQUc7QUFBQSxNQUFJLEtBQUssSUFBSSxJQUFJLEtBQUcsR0FBRSxLQUFLLEtBQUksR0FBRSxFQUFFLE1BQUksRUFBRSxHQUFHO0FBQUEsSUFBQztBQUFBLElBQUMsS0FBSyxNQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsT0FBSyxFQUFFLEdBQUUsTUFBSyxFQUFFLFFBQVE7QUFBQSxFQUFFLE9BQU8sTUFBSSxFQUFFLE9BQUssTUFBSyxDQUFDLEVBQUUsR0FBRSxNQUFLLEVBQUUsTUFBSSxPQUFLLEVBQUUsUUFBUSxHQUFFLENBQUM7QUFBQTtBQUFHLElBQUksS0FBRSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxFQUFFLE9BQUssRUFBRSxNQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRSxFQUFFLE1BQU0sZ0JBQW9CLEVBQUUsTUFBTSxZQUFZLE9BQTFCLE9BQThCLENBQUMsRUFBRSxFQUFFO0FBQUEsSUFBTSxLQUFJLElBQUUsRUFBRSxFQUFFLEtBQUc7QUFBQSxNQUFDLE1BQUssRUFBRSxTQUFPO0FBQUEsUUFBRyxFQUFFLElBQUksRUFBRTtBQUFBLE1BQUUsSUFBRyxFQUFFLEtBQUcsRUFBRTtBQUFBLFFBQUc7QUFBQSxNQUFNLEVBQUUsSUFBRSxJQUFFLEVBQUU7QUFBQSxJQUFFO0FBQUE7QUFBRyxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUssa0JBQWdCLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxFQUFFO0FBQUEsS0FBUyxFQUFFO0FBQUE7QUFBUyxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsTUFBSyxJQUFFLEVBQUU7QUFBQSxFQUFFLElBQUcsRUFBRSx1QkFBcUIsUUFBUSxHQUFFO0FBQUEsSUFBQyxFQUFFLE1BQUssRUFBRSxDQUFDLEdBQUUsRUFBRSxJQUFFLE1BQUssRUFBRSxJQUFFO0FBQUEsS0FBTSxFQUFFLEtBQUcsRUFBRSxNQUFJLEtBQUcsRUFBRSxxQkFBcUIsR0FBRSxDQUFDLEVBQUUsR0FBRTtBQUFBLElBQUMsU0FBUSxJQUFFLEVBQUUsSUFBVyxNQUFQLFFBQVUsQ0FBQyxFQUFFLE9BQVksRUFBRSxPQUFUO0FBQUEsTUFBYSxJQUFFLEVBQUU7QUFBQSxJQUFHLEVBQUUsSUFBRSxHQUFFLEVBQUUsSUFBRSxFQUFDLFVBQVMsR0FBRSxZQUFXLEdBQUUsWUFBVyxDQUFDLEdBQUUsS0FBSSxFQUFDLEtBQUksRUFBRSxJQUFHLEdBQUUsVUFBUyxRQUFRLEdBQUU7QUFBQSxNQUFDLE9BQU07QUFBQSxPQUFJLGNBQWEsRUFBRSxjQUFhLGNBQWEsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLE1BQUMsS0FBSyxXQUFXLEtBQUssQ0FBQyxHQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUUsQ0FBQztBQUFBLE9BQUcsYUFBWSxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsS0FBSyxXQUFXLE9BQU8sS0FBSyxXQUFXLFFBQVEsQ0FBQyxNQUFJLEdBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxZQUFZLENBQUM7QUFBQSxNQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxFQUFFLEdBQUUsRUFBQyxTQUFRLEVBQUUsUUFBTyxHQUFFLEVBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLEVBQUMsS0FBSSxHQUFFLEdBQUUsRUFBQyxDQUFDO0FBQUEsRUFBRSxPQUFPLEVBQUUsZ0JBQWMsR0FBRTtBQUFBO0FBQUEsQ0FBRyxHQUFFLFlBQVUsSUFBSSxHQUFHLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsR0FBRSxFQUFFLEdBQUcsR0FBRSxJQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sRUFBRSxNQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxFQUFFLE1BQU0sZUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsS0FBRyxFQUFFO0FBQUE7QUFBQSxJQUFHLElBQUUsRUFBRSxDQUFDLElBQUUsRUFBRTtBQUFBO0FBQUEs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QUksQ0FBQyxzQkFDWCxHQUFDLFFBQUQ7QUFBQSxrQkFFRSxNQUFLO0FBQUEsa0JBQ0wsTUFBTSxNQUFNLFFBQVEsWUFBWTtBQUFBLGtCQUNoQyxlQUFZO0FBQUEsa0JBQ1oscUJBQW1CO0FBQUEsa0JBQ25CLE9BQU8sV0FBVyxDQUFDO0FBQUEsbUJBTGQsR0FEUCxzQkFPQSxDQUNEO0FBQUE7QUFBQSxlQWJILGdDQWNFO0FBQUEsYUFmSixpQ0FnQkU7QUFBQSwwQkFFRixHQVlFLE9BWkY7QUFBQSxZQUFLLGNBQVc7QUFBQSxZQUFoQiwwQkFDRSxHQVVFLFNBVkY7QUFBQSxjQUFTLEtBQUk7QUFBQSxjQUFiLFVBQ0csaUJBQWlCLElBQUksQ0FBQyw0QkFDckIsR0FBQyxRQUFEO0FBQUEsZ0JBRUUsTUFBSztBQUFBLGdCQUNMLE1BQUs7QUFBQSxnQkFDTCxNQUFNLElBQUksUUFBUTtBQUFBLGdCQUNsQixPQUFPLFFBQVE7QUFBQSxpQkFKVixRQUFRLElBRGYsc0JBTUEsQ0FDRDtBQUFBLGVBVEgsaUNBVUU7QUFBQSxhQVhKLGlDQVlFO0FBQUEsMEJBRUYsR0FJRSxRQUpGO0FBQUEsWUFBUSxLQUFJO0FBQUEsWUFBWixVQUNHLGlCQUFpQixJQUFJLENBQUMsNEJBQ3JCLEdBQUMsU0FBRDtBQUFBLGNBQTBCO0FBQUEsZUFBWixRQUFRLElBQXRCLHNCQUE0QyxDQUM3QztBQUFBLGFBSEgsaUNBSUU7QUFBQTtBQUFBLFNBOUNKLGdDQStDRTtBQUFBLHNCQUdGLEdBQUMsYUFBRCxxQ0FBYTtBQUFBLHNCQUNiLEdBQUMsTUFBTSxVQUFQLHFDQUFnQjtBQUFBLHNCQUNoQixHQUFDLGNBQWMsTUFBZixxQ0FBb0I7QUFBQTtBQUFBLEtBMUR0QixnQ0EyREU7QUFBQTs7O0FDdkdOLElBQU0sU0FBd0IsQ0FBQztBQUMvQixZQUFZLFdBQVcsTUFBTSxNQUFNO0FBRW5DLHVCQUF1QixPQUFPLGFBQWE7QUFBQSxFQUN6QyxNQUFNLFVBQVUsZ0JBQWdCLFNBQVM7QUFBQSxFQUN6QyxJQUFJLFNBQVM7QUFBQSxJQUNYLE1BQU0sUUFBUTtBQUFBLE1BQ1o7QUFBQSxNQUNBLE9BQU8sU0FBUztBQUFBLE1BQ2hCLFNBQVMsU0FBUztBQUFBLE1BQ2xCLE1BQU0sU0FBUztBQUFBLElBQ2pCLENBQUM7QUFBQSxFQUNIO0FBQUEsQ0FDRDtBQUVELElBQU0sT0FBTyxTQUFTLGVBQWUsS0FBSyxLQUFLLFNBQVM7QUFDeEQsa0JBQU8sR0FBQyxZQUFELHFDQUFZLEdBQUksSUFBSTsiLAogICJkZWJ1Z0lkIjogIjdDRkNBRTQ4Mzk2OTMxMUI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9