@nsshunt/stsoauth2plugin 0.1.12 → 0.1.15

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.
@@ -49,434 +49,12 @@ var __privateWrapper = (obj, member, setter, getter) => {
49
49
  }
50
50
  };
51
51
  };
52
- var _store, _storage, _storageManager, _router, _store2, _cUtils, _qParams, _STORAGE_AUTHORIZE_OPTIONS_KEY, _STORAGE_SESSION_KEY, _aic, _options, _messages, _oauth2ManagerPort, _messageId, _messageHandlers, _messageTimeout, _worker, _transactionStore, _ProcessMessageResponse, _PostMessage, _HandleErrorEvent, _HandleAuthenticateEvent, _SetupRoute, _SetupStoreNamespace;
52
+ var _store, _storage, _storageManager, _router, _store2, _cUtils, _qParams, _STORAGE_AUTHORIZE_OPTIONS_KEY, _STORAGE_SESSION_KEY, _aic, _options, _messages, _oauth2ManagerPort, _messageId, _messageHandlers, _messageTimeout, _worker, _transactionStore, _ProcessMessageResponse, _PostMessage, _HandleErrorEvent, _HandleAuthenticateEvent, _SetupRoute, _SetupStoreNamespace, _clientSessionStore, _cUtils2, _qParams2, _STORAGE_AUTHORIZE_OPTIONS_KEY2, _STORAGE_SESSION_KEY2, _aic2, _errorCallback, _handleAuthenticateEvent, _oauthWorkerPort, _currentMessageId, _ProcessCommand, _RestoreSession, _Authorize, _HandleRedirect, _GetTokenFromBroker, _GetToken, _RefreshToken, _Logout;
53
+ import Debug from "debug";
54
+ import jwt_decode from "jwt-decode";
55
+ import axios from "axios";
56
+ import { StatusCodes } from "http-status-codes";
53
57
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
54
- var browser = { exports: {} };
55
- var s = 1e3;
56
- var m = s * 60;
57
- var h = m * 60;
58
- var d = h * 24;
59
- var w = d * 7;
60
- var y = d * 365.25;
61
- var ms = function(val, options) {
62
- options = options || {};
63
- var type2 = typeof val;
64
- if (type2 === "string" && val.length > 0) {
65
- return parse$2(val);
66
- } else if (type2 === "number" && isFinite(val)) {
67
- return options.long ? fmtLong(val) : fmtShort(val);
68
- }
69
- throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
70
- };
71
- function parse$2(str) {
72
- str = String(str);
73
- if (str.length > 100) {
74
- return;
75
- }
76
- var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
77
- if (!match) {
78
- return;
79
- }
80
- var n2 = parseFloat(match[1]);
81
- var type2 = (match[2] || "ms").toLowerCase();
82
- switch (type2) {
83
- case "years":
84
- case "year":
85
- case "yrs":
86
- case "yr":
87
- case "y":
88
- return n2 * y;
89
- case "weeks":
90
- case "week":
91
- case "w":
92
- return n2 * w;
93
- case "days":
94
- case "day":
95
- case "d":
96
- return n2 * d;
97
- case "hours":
98
- case "hour":
99
- case "hrs":
100
- case "hr":
101
- case "h":
102
- return n2 * h;
103
- case "minutes":
104
- case "minute":
105
- case "mins":
106
- case "min":
107
- case "m":
108
- return n2 * m;
109
- case "seconds":
110
- case "second":
111
- case "secs":
112
- case "sec":
113
- case "s":
114
- return n2 * s;
115
- case "milliseconds":
116
- case "millisecond":
117
- case "msecs":
118
- case "msec":
119
- case "ms":
120
- return n2;
121
- default:
122
- return void 0;
123
- }
124
- }
125
- function fmtShort(ms2) {
126
- var msAbs = Math.abs(ms2);
127
- if (msAbs >= d) {
128
- return Math.round(ms2 / d) + "d";
129
- }
130
- if (msAbs >= h) {
131
- return Math.round(ms2 / h) + "h";
132
- }
133
- if (msAbs >= m) {
134
- return Math.round(ms2 / m) + "m";
135
- }
136
- if (msAbs >= s) {
137
- return Math.round(ms2 / s) + "s";
138
- }
139
- return ms2 + "ms";
140
- }
141
- function fmtLong(ms2) {
142
- var msAbs = Math.abs(ms2);
143
- if (msAbs >= d) {
144
- return plural(ms2, msAbs, d, "day");
145
- }
146
- if (msAbs >= h) {
147
- return plural(ms2, msAbs, h, "hour");
148
- }
149
- if (msAbs >= m) {
150
- return plural(ms2, msAbs, m, "minute");
151
- }
152
- if (msAbs >= s) {
153
- return plural(ms2, msAbs, s, "second");
154
- }
155
- return ms2 + " ms";
156
- }
157
- function plural(ms2, msAbs, n2, name) {
158
- var isPlural = msAbs >= n2 * 1.5;
159
- return Math.round(ms2 / n2) + " " + name + (isPlural ? "s" : "");
160
- }
161
- function setup(env) {
162
- createDebug.debug = createDebug;
163
- createDebug.default = createDebug;
164
- createDebug.coerce = coerce;
165
- createDebug.disable = disable;
166
- createDebug.enable = enable;
167
- createDebug.enabled = enabled;
168
- createDebug.humanize = ms;
169
- createDebug.destroy = destroy;
170
- Object.keys(env).forEach((key) => {
171
- createDebug[key] = env[key];
172
- });
173
- createDebug.names = [];
174
- createDebug.skips = [];
175
- createDebug.formatters = {};
176
- function selectColor(namespace) {
177
- let hash = 0;
178
- for (let i = 0; i < namespace.length; i++) {
179
- hash = (hash << 5) - hash + namespace.charCodeAt(i);
180
- hash |= 0;
181
- }
182
- return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
183
- }
184
- createDebug.selectColor = selectColor;
185
- function createDebug(namespace) {
186
- let prevTime;
187
- let enableOverride = null;
188
- let namespacesCache;
189
- let enabledCache;
190
- function debug2(...args) {
191
- if (!debug2.enabled) {
192
- return;
193
- }
194
- const self2 = debug2;
195
- const curr = Number(new Date());
196
- const ms2 = curr - (prevTime || curr);
197
- self2.diff = ms2;
198
- self2.prev = prevTime;
199
- self2.curr = curr;
200
- prevTime = curr;
201
- args[0] = createDebug.coerce(args[0]);
202
- if (typeof args[0] !== "string") {
203
- args.unshift("%O");
204
- }
205
- let index = 0;
206
- args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
207
- if (match === "%%") {
208
- return "%";
209
- }
210
- index++;
211
- const formatter = createDebug.formatters[format];
212
- if (typeof formatter === "function") {
213
- const val = args[index];
214
- match = formatter.call(self2, val);
215
- args.splice(index, 1);
216
- index--;
217
- }
218
- return match;
219
- });
220
- createDebug.formatArgs.call(self2, args);
221
- const logFn = self2.log || createDebug.log;
222
- logFn.apply(self2, args);
223
- }
224
- debug2.namespace = namespace;
225
- debug2.useColors = createDebug.useColors();
226
- debug2.color = createDebug.selectColor(namespace);
227
- debug2.extend = extend;
228
- debug2.destroy = createDebug.destroy;
229
- Object.defineProperty(debug2, "enabled", {
230
- enumerable: true,
231
- configurable: false,
232
- get: () => {
233
- if (enableOverride !== null) {
234
- return enableOverride;
235
- }
236
- if (namespacesCache !== createDebug.namespaces) {
237
- namespacesCache = createDebug.namespaces;
238
- enabledCache = createDebug.enabled(namespace);
239
- }
240
- return enabledCache;
241
- },
242
- set: (v) => {
243
- enableOverride = v;
244
- }
245
- });
246
- if (typeof createDebug.init === "function") {
247
- createDebug.init(debug2);
248
- }
249
- return debug2;
250
- }
251
- function extend(namespace, delimiter) {
252
- const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
253
- newDebug.log = this.log;
254
- return newDebug;
255
- }
256
- function enable(namespaces) {
257
- createDebug.save(namespaces);
258
- createDebug.namespaces = namespaces;
259
- createDebug.names = [];
260
- createDebug.skips = [];
261
- let i;
262
- const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
263
- const len = split.length;
264
- for (i = 0; i < len; i++) {
265
- if (!split[i]) {
266
- continue;
267
- }
268
- namespaces = split[i].replace(/\*/g, ".*?");
269
- if (namespaces[0] === "-") {
270
- createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$"));
271
- } else {
272
- createDebug.names.push(new RegExp("^" + namespaces + "$"));
273
- }
274
- }
275
- }
276
- function disable() {
277
- const namespaces = [
278
- ...createDebug.names.map(toNamespace),
279
- ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace)
280
- ].join(",");
281
- createDebug.enable("");
282
- return namespaces;
283
- }
284
- function enabled(name) {
285
- if (name[name.length - 1] === "*") {
286
- return true;
287
- }
288
- let i;
289
- let len;
290
- for (i = 0, len = createDebug.skips.length; i < len; i++) {
291
- if (createDebug.skips[i].test(name)) {
292
- return false;
293
- }
294
- }
295
- for (i = 0, len = createDebug.names.length; i < len; i++) {
296
- if (createDebug.names[i].test(name)) {
297
- return true;
298
- }
299
- }
300
- return false;
301
- }
302
- function toNamespace(regexp) {
303
- return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*");
304
- }
305
- function coerce(val) {
306
- if (val instanceof Error) {
307
- return val.stack || val.message;
308
- }
309
- return val;
310
- }
311
- function destroy() {
312
- console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
313
- }
314
- createDebug.enable(createDebug.load());
315
- return createDebug;
316
- }
317
- var common = setup;
318
- (function(module, exports) {
319
- exports.formatArgs = formatArgs;
320
- exports.save = save;
321
- exports.load = load;
322
- exports.useColors = useColors;
323
- exports.storage = localstorage();
324
- exports.destroy = (() => {
325
- let warned = false;
326
- return () => {
327
- if (!warned) {
328
- warned = true;
329
- console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
330
- }
331
- };
332
- })();
333
- exports.colors = [
334
- "#0000CC",
335
- "#0000FF",
336
- "#0033CC",
337
- "#0033FF",
338
- "#0066CC",
339
- "#0066FF",
340
- "#0099CC",
341
- "#0099FF",
342
- "#00CC00",
343
- "#00CC33",
344
- "#00CC66",
345
- "#00CC99",
346
- "#00CCCC",
347
- "#00CCFF",
348
- "#3300CC",
349
- "#3300FF",
350
- "#3333CC",
351
- "#3333FF",
352
- "#3366CC",
353
- "#3366FF",
354
- "#3399CC",
355
- "#3399FF",
356
- "#33CC00",
357
- "#33CC33",
358
- "#33CC66",
359
- "#33CC99",
360
- "#33CCCC",
361
- "#33CCFF",
362
- "#6600CC",
363
- "#6600FF",
364
- "#6633CC",
365
- "#6633FF",
366
- "#66CC00",
367
- "#66CC33",
368
- "#9900CC",
369
- "#9900FF",
370
- "#9933CC",
371
- "#9933FF",
372
- "#99CC00",
373
- "#99CC33",
374
- "#CC0000",
375
- "#CC0033",
376
- "#CC0066",
377
- "#CC0099",
378
- "#CC00CC",
379
- "#CC00FF",
380
- "#CC3300",
381
- "#CC3333",
382
- "#CC3366",
383
- "#CC3399",
384
- "#CC33CC",
385
- "#CC33FF",
386
- "#CC6600",
387
- "#CC6633",
388
- "#CC9900",
389
- "#CC9933",
390
- "#CCCC00",
391
- "#CCCC33",
392
- "#FF0000",
393
- "#FF0033",
394
- "#FF0066",
395
- "#FF0099",
396
- "#FF00CC",
397
- "#FF00FF",
398
- "#FF3300",
399
- "#FF3333",
400
- "#FF3366",
401
- "#FF3399",
402
- "#FF33CC",
403
- "#FF33FF",
404
- "#FF6600",
405
- "#FF6633",
406
- "#FF9900",
407
- "#FF9933",
408
- "#FFCC00",
409
- "#FFCC33"
410
- ];
411
- function useColors() {
412
- if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
413
- return true;
414
- }
415
- if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
416
- return false;
417
- }
418
- return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
419
- }
420
- function formatArgs(args) {
421
- args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module.exports.humanize(this.diff);
422
- if (!this.useColors) {
423
- return;
424
- }
425
- const c = "color: " + this.color;
426
- args.splice(1, 0, c, "color: inherit");
427
- let index = 0;
428
- let lastC = 0;
429
- args[0].replace(/%[a-zA-Z%]/g, (match) => {
430
- if (match === "%%") {
431
- return;
432
- }
433
- index++;
434
- if (match === "%c") {
435
- lastC = index;
436
- }
437
- });
438
- args.splice(lastC, 0, c);
439
- }
440
- exports.log = console.debug || console.log || (() => {
441
- });
442
- function save(namespaces) {
443
- try {
444
- if (namespaces) {
445
- exports.storage.setItem("debug", namespaces);
446
- } else {
447
- exports.storage.removeItem("debug");
448
- }
449
- } catch (error2) {
450
- }
451
- }
452
- function load() {
453
- let r2;
454
- try {
455
- r2 = exports.storage.getItem("debug");
456
- } catch (error2) {
457
- }
458
- if (!r2 && typeof process !== "undefined" && "env" in process) {
459
- r2 = {}.DEBUG;
460
- }
461
- return r2;
462
- }
463
- function localstorage() {
464
- try {
465
- return localStorage;
466
- } catch (error2) {
467
- }
468
- }
469
- module.exports = common(exports);
470
- const { formatters } = module.exports;
471
- formatters.j = function(v) {
472
- try {
473
- return JSON.stringify(v);
474
- } catch (error2) {
475
- return "[UnexpectedJSONParseError]: " + error2.message;
476
- }
477
- };
478
- })(browser, browser.exports);
479
- var Debug = browser.exports;
480
58
  var dist = {};
481
59
  var errorhandling = {};
482
60
  Object.defineProperty(errorhandling, "__esModule", { value: true });
@@ -507,11 +85,11 @@ var code$1 = {};
507
85
  exports._CodeOrName = _CodeOrName;
508
86
  exports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;
509
87
  class Name extends _CodeOrName {
510
- constructor(s2) {
88
+ constructor(s) {
511
89
  super();
512
- if (!exports.IDENTIFIER.test(s2))
90
+ if (!exports.IDENTIFIER.test(s))
513
91
  throw new Error("CodeGen: name must be a valid identifier");
514
- this.str = s2;
92
+ this.str = s;
515
93
  }
516
94
  toString() {
517
95
  return this.str;
@@ -540,7 +118,7 @@ var code$1 = {};
540
118
  }
541
119
  get str() {
542
120
  var _a;
543
- return (_a = this._str) !== null && _a !== void 0 ? _a : this._str = this._items.reduce((s2, c) => `${s2}${c}`, "");
121
+ return (_a = this._str) !== null && _a !== void 0 ? _a : this._str = this._items.reduce((s, c) => `${s}${c}`, "");
544
122
  }
545
123
  get names() {
546
124
  var _a;
@@ -735,9 +313,9 @@ var scope = {};
735
313
  vs = this._values[prefix] = /* @__PURE__ */ new Map();
736
314
  }
737
315
  vs.set(valueKey, name);
738
- const s2 = this._scope[prefix] || (this._scope[prefix] = []);
739
- const itemIndex = s2.length;
740
- s2[itemIndex] = value.ref;
316
+ const s = this._scope[prefix] || (this._scope[prefix] = []);
317
+ const itemIndex = s.length;
318
+ s[itemIndex] = value.ref;
741
319
  name.setValue(value, { property: prefix, itemIndex });
742
320
  return name;
743
321
  }
@@ -963,17 +541,17 @@ var scope = {};
963
541
  this.nodes = nodes;
964
542
  }
965
543
  render(opts) {
966
- return this.nodes.reduce((code2, n2) => code2 + n2.render(opts), "");
544
+ return this.nodes.reduce((code2, n) => code2 + n.render(opts), "");
967
545
  }
968
546
  optimizeNodes() {
969
547
  const { nodes } = this;
970
548
  let i = nodes.length;
971
549
  while (i--) {
972
- const n2 = nodes[i].optimizeNodes();
973
- if (Array.isArray(n2))
974
- nodes.splice(i, 1, ...n2);
975
- else if (n2)
976
- nodes[i] = n2;
550
+ const n = nodes[i].optimizeNodes();
551
+ if (Array.isArray(n))
552
+ nodes.splice(i, 1, ...n);
553
+ else if (n)
554
+ nodes[i] = n;
977
555
  else
978
556
  nodes.splice(i, 1);
979
557
  }
@@ -983,16 +561,16 @@ var scope = {};
983
561
  const { nodes } = this;
984
562
  let i = nodes.length;
985
563
  while (i--) {
986
- const n2 = nodes[i];
987
- if (n2.optimizeNames(names2, constants))
564
+ const n = nodes[i];
565
+ if (n.optimizeNames(names2, constants))
988
566
  continue;
989
- subtractNames(names2, n2.names);
567
+ subtractNames(names2, n.names);
990
568
  nodes.splice(i, 1);
991
569
  }
992
570
  return nodes.length > 0 ? this : void 0;
993
571
  }
994
572
  get names() {
995
- return this.nodes.reduce((names2, n2) => addNames(names2, n2.names), {});
573
+ return this.nodes.reduce((names2, n) => addNames(names2, n.names), {});
996
574
  }
997
575
  }
998
576
  class BlockNode extends ParentNode {
@@ -1021,17 +599,17 @@ var scope = {};
1021
599
  const cond = this.condition;
1022
600
  if (cond === true)
1023
601
  return this.nodes;
1024
- let e2 = this.else;
1025
- if (e2) {
1026
- const ns = e2.optimizeNodes();
1027
- e2 = this.else = Array.isArray(ns) ? new Else(ns) : ns;
602
+ let e = this.else;
603
+ if (e) {
604
+ const ns = e.optimizeNodes();
605
+ e = this.else = Array.isArray(ns) ? new Else(ns) : ns;
1028
606
  }
1029
- if (e2) {
607
+ if (e) {
1030
608
  if (cond === false)
1031
- return e2 instanceof If ? e2 : e2.nodes;
609
+ return e instanceof If ? e : e.nodes;
1032
610
  if (this.nodes.length)
1033
611
  return this;
1034
- return new If(not(cond), e2 instanceof If ? [e2] : e2.nodes);
612
+ return new If(not(cond), e instanceof If ? [e] : e.nodes);
1035
613
  }
1036
614
  if (cond === false || !this.nodes.length)
1037
615
  return void 0;
@@ -1372,8 +950,8 @@ var scope = {};
1372
950
  endFunc() {
1373
951
  return this._endBlockNode(Func);
1374
952
  }
1375
- optimize(n2 = 1) {
1376
- while (n2-- > 0) {
953
+ optimize(n = 1) {
954
+ while (n-- > 0) {
1377
955
  this._root.optimizeNodes();
1378
956
  this._root.optimizeNames(this._root.names, this._constants);
1379
957
  }
@@ -1387,19 +965,19 @@ var scope = {};
1387
965
  this._nodes.push(node);
1388
966
  }
1389
967
  _endBlockNode(N1, N2) {
1390
- const n2 = this._currNode;
1391
- if (n2 instanceof N1 || N2 && n2 instanceof N2) {
968
+ const n = this._currNode;
969
+ if (n instanceof N1 || N2 && n instanceof N2) {
1392
970
  this._nodes.pop();
1393
971
  return this;
1394
972
  }
1395
973
  throw new Error(`CodeGen: not in block "${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}"`);
1396
974
  }
1397
975
  _elseNode(node) {
1398
- const n2 = this._currNode;
1399
- if (!(n2 instanceof If)) {
976
+ const n = this._currNode;
977
+ if (!(n instanceof If)) {
1400
978
  throw new Error('CodeGen: "else" without "if"');
1401
979
  }
1402
- this._currNode = n2.else = node;
980
+ this._currNode = n.else = node;
1403
981
  return this;
1404
982
  }
1405
983
  get _root() {
@@ -1416,8 +994,8 @@ var scope = {};
1416
994
  }
1417
995
  exports.CodeGen = CodeGen;
1418
996
  function addNames(names2, from) {
1419
- for (const n2 in from)
1420
- names2[n2] = (names2[n2] || 0) + (from[n2] || 0);
997
+ for (const n in from)
998
+ names2[n] = (names2[n] || 0) + (from[n] || 0);
1421
999
  return names2;
1422
1000
  }
1423
1001
  function addExprNames(names2, from) {
@@ -1437,20 +1015,20 @@ var scope = {};
1437
1015
  items.push(c);
1438
1016
  return items;
1439
1017
  }, []));
1440
- function replaceName(n2) {
1441
- const c = constants[n2.str];
1442
- if (c === void 0 || names2[n2.str] !== 1)
1443
- return n2;
1444
- delete names2[n2.str];
1018
+ function replaceName(n) {
1019
+ const c = constants[n.str];
1020
+ if (c === void 0 || names2[n.str] !== 1)
1021
+ return n;
1022
+ delete names2[n.str];
1445
1023
  return c;
1446
1024
  }
1447
- function canOptimize(e2) {
1448
- return e2 instanceof code_12._Code && e2._items.some((c) => c instanceof code_12.Name && names2[c.str] === 1 && constants[c.str] !== void 0);
1025
+ function canOptimize(e) {
1026
+ return e instanceof code_12._Code && e._items.some((c) => c instanceof code_12.Name && names2[c.str] === 1 && constants[c.str] !== void 0);
1449
1027
  }
1450
1028
  }
1451
1029
  function subtractNames(names2, from) {
1452
- for (const n2 in from)
1453
- names2[n2] = (names2[n2] || 0) - (from[n2] || 0);
1030
+ for (const n in from)
1031
+ names2[n] = (names2[n] || 0) - (from[n] || 0);
1454
1032
  }
1455
1033
  function not(x) {
1456
1034
  return typeof x == "boolean" || typeof x == "number" || x === null ? !x : (0, code_12._)`!${par(x)}`;
@@ -1467,7 +1045,7 @@ var scope = {};
1467
1045
  }
1468
1046
  exports.or = or;
1469
1047
  function mappend(op) {
1470
- return (x, y2) => x === code_12.nil ? y2 : y2 === code_12.nil ? x : (0, code_12._)`${par(x)} ${op} ${par(y2)}`;
1048
+ return (x, y) => x === code_12.nil ? y : y === code_12.nil ? x : (0, code_12._)`${par(x)} ${op} ${par(y)}`;
1471
1049
  }
1472
1050
  function par(x) {
1473
1051
  return x instanceof code_12.Name ? x : (0, code_12._)`(${x})`;
@@ -1915,7 +1493,7 @@ applicability.shouldUseRule = shouldUseRule;
1915
1493
  exports.coerceAndCheckDataType = coerceAndCheckDataType;
1916
1494
  const COERCIBLE = /* @__PURE__ */ new Set(["string", "number", "integer", "boolean", "null"]);
1917
1495
  function coerceToTypes(types2, coerceTypes) {
1918
- return coerceTypes ? types2.filter((t2) => COERCIBLE.has(t2) || coerceTypes === "array" && t2 === "array") : [];
1496
+ return coerceTypes ? types2.filter((t) => COERCIBLE.has(t) || coerceTypes === "array" && t === "array") : [];
1919
1497
  }
1920
1498
  function coerceData(it, types2, coerceTo) {
1921
1499
  const { gen, data, opts } = it;
@@ -1925,9 +1503,9 @@ applicability.shouldUseRule = shouldUseRule;
1925
1503
  gen.if((0, codegen_12._)`${dataType2} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen.assign(data, (0, codegen_12._)`${data}[0]`).assign(dataType2, (0, codegen_12._)`typeof ${data}`).if(checkDataTypes(types2, data, opts.strictNumbers), () => gen.assign(coerced, data)));
1926
1504
  }
1927
1505
  gen.if((0, codegen_12._)`${coerced} !== undefined`);
1928
- for (const t2 of coerceTo) {
1929
- if (COERCIBLE.has(t2) || t2 === "array" && opts.coerceTypes === "array") {
1930
- coerceSpecificType(t2);
1506
+ for (const t of coerceTo) {
1507
+ if (COERCIBLE.has(t) || t === "array" && opts.coerceTypes === "array") {
1508
+ coerceSpecificType(t);
1931
1509
  }
1932
1510
  }
1933
1511
  gen.else();
@@ -1937,8 +1515,8 @@ applicability.shouldUseRule = shouldUseRule;
1937
1515
  gen.assign(data, coerced);
1938
1516
  assignParentData(it, coerced);
1939
1517
  });
1940
- function coerceSpecificType(t2) {
1941
- switch (t2) {
1518
+ function coerceSpecificType(t) {
1519
+ switch (t) {
1942
1520
  case "string":
1943
1521
  gen.elseIf((0, codegen_12._)`${dataType2} == "number" || ${dataType2} == "boolean"`).assign(coerced, (0, codegen_12._)`"" + ${data}`).elseIf((0, codegen_12._)`${data} === null`).assign(coerced, (0, codegen_12._)`""`);
1944
1522
  return;
@@ -2010,8 +1588,8 @@ applicability.shouldUseRule = shouldUseRule;
2010
1588
  }
2011
1589
  if (types2.number)
2012
1590
  delete types2.integer;
2013
- for (const t2 in types2)
2014
- cond = (0, codegen_12.and)(cond, checkDataType(t2, data, strictNums, correct));
1591
+ for (const t in types2)
1592
+ cond = (0, codegen_12.and)(cond, checkDataType(t, data, strictNums, correct));
2015
1593
  return cond;
2016
1594
  }
2017
1595
  exports.checkDataTypes = checkDataTypes;
@@ -2245,7 +1823,7 @@ function funcKeywordCode(cxt, def2) {
2245
1823
  }
2246
1824
  function validateAsync() {
2247
1825
  const ruleErrs = gen.let("ruleErrs", null);
2248
- gen.try(() => assignValid((0, codegen_1$d._)`await `), (e2) => gen.assign(valid, false).if((0, codegen_1$d._)`${e2} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1$d._)`${e2}.errors`), () => gen.throw(e2)));
1826
+ gen.try(() => assignValid((0, codegen_1$d._)`await `), (e) => gen.assign(valid, false).if((0, codegen_1$d._)`${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1$d._)`${e}.errors`), () => gen.throw(e)));
2249
1827
  return ruleErrs;
2250
1828
  }
2251
1829
  function validateSync() {
@@ -2886,12 +2464,12 @@ function checkContextTypes(it, types2) {
2886
2464
  it.dataTypes = types2;
2887
2465
  return;
2888
2466
  }
2889
- types2.forEach((t2) => {
2890
- if (!includesType(it.dataTypes, t2)) {
2891
- strictTypesError(it, `type "${t2}" not allowed by context "${it.dataTypes.join(",")}"`);
2467
+ types2.forEach((t) => {
2468
+ if (!includesType(it.dataTypes, t)) {
2469
+ strictTypesError(it, `type "${t}" not allowed by context "${it.dataTypes.join(",")}"`);
2892
2470
  }
2893
2471
  });
2894
- it.dataTypes = it.dataTypes.filter((t2) => includesType(types2, t2));
2472
+ it.dataTypes = it.dataTypes.filter((t) => includesType(types2, t));
2895
2473
  }
2896
2474
  function checkMultipleTypes(it, ts) {
2897
2475
  if (ts.length > 1 && !(ts.length === 2 && ts.includes("null"))) {
@@ -2904,7 +2482,7 @@ function checkKeywordTypes(it, ts) {
2904
2482
  const rule = rules2[keyword2];
2905
2483
  if (typeof rule == "object" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {
2906
2484
  const { type: type2 } = rule.definition;
2907
- if (type2.length && !type2.some((t2) => hasApplicableType(ts, t2))) {
2485
+ if (type2.length && !type2.some((t) => hasApplicableType(ts, t))) {
2908
2486
  strictTypesError(it, `missing type "${type2.join(",")}" for keyword "${keyword2}"`);
2909
2487
  }
2910
2488
  }
@@ -2913,8 +2491,8 @@ function checkKeywordTypes(it, ts) {
2913
2491
  function hasApplicableType(schTs, kwdT) {
2914
2492
  return schTs.includes(kwdT) || kwdT === "number" && schTs.includes("integer");
2915
2493
  }
2916
- function includesType(ts, t2) {
2917
- return ts.includes(t2) || t2 === "integer" && ts.includes("number");
2494
+ function includesType(ts, t) {
2495
+ return ts.includes(t) || t === "integer" && ts.includes("number");
2918
2496
  }
2919
2497
  function strictTypesError(it, msg) {
2920
2498
  const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;
@@ -3270,12 +2848,12 @@ function compileSchema(sch) {
3270
2848
  }
3271
2849
  sch.validate = validate2;
3272
2850
  return sch;
3273
- } catch (e2) {
2851
+ } catch (e) {
3274
2852
  delete sch.validate;
3275
2853
  delete sch.validateName;
3276
2854
  if (sourceCode)
3277
2855
  this.logger.error("Error compiling schema, function code:", sourceCode);
3278
- throw e2;
2856
+ throw e;
3279
2857
  } finally {
3280
2858
  this._compilations.delete(sch);
3281
2859
  }
@@ -3438,8 +3016,8 @@ var uri_all = { exports: {} };
3438
3016
  function subexp(str) {
3439
3017
  return "(?:" + str + ")";
3440
3018
  }
3441
- function typeOf(o2) {
3442
- return o2 === void 0 ? "undefined" : o2 === null ? "null" : Object.prototype.toString.call(o2).split(" ").pop().split("]").shift().toLowerCase();
3019
+ function typeOf(o) {
3020
+ return o === void 0 ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase();
3443
3021
  }
3444
3022
  function toUpperCase(str) {
3445
3023
  return str.toUpperCase();
@@ -3623,7 +3201,7 @@ var uri_all = { exports: {} };
3623
3201
  var output = [];
3624
3202
  var inputLength = input.length;
3625
3203
  var i = 0;
3626
- var n2 = initialN;
3204
+ var n = initialN;
3627
3205
  var bias = initialBias;
3628
3206
  var basic = input.lastIndexOf(delimiter);
3629
3207
  if (basic < 0) {
@@ -3637,33 +3215,33 @@ var uri_all = { exports: {} };
3637
3215
  }
3638
3216
  for (var index = basic > 0 ? basic + 1 : 0; index < inputLength; ) {
3639
3217
  var oldi = i;
3640
- for (var w2 = 1, k = base; ; k += base) {
3218
+ for (var w = 1, k = base; ; k += base) {
3641
3219
  if (index >= inputLength) {
3642
3220
  error$12("invalid-input");
3643
3221
  }
3644
3222
  var digit = basicToDigit(input.charCodeAt(index++));
3645
- if (digit >= base || digit > floor((maxInt - i) / w2)) {
3223
+ if (digit >= base || digit > floor((maxInt - i) / w)) {
3646
3224
  error$12("overflow");
3647
3225
  }
3648
- i += digit * w2;
3649
- var t2 = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
3650
- if (digit < t2) {
3226
+ i += digit * w;
3227
+ var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
3228
+ if (digit < t) {
3651
3229
  break;
3652
3230
  }
3653
- var baseMinusT = base - t2;
3654
- if (w2 > floor(maxInt / baseMinusT)) {
3231
+ var baseMinusT = base - t;
3232
+ if (w > floor(maxInt / baseMinusT)) {
3655
3233
  error$12("overflow");
3656
3234
  }
3657
- w2 *= baseMinusT;
3235
+ w *= baseMinusT;
3658
3236
  }
3659
3237
  var out = output.length + 1;
3660
3238
  bias = adapt(i - oldi, out, oldi == 0);
3661
- if (floor(i / out) > maxInt - n2) {
3239
+ if (floor(i / out) > maxInt - n) {
3662
3240
  error$12("overflow");
3663
3241
  }
3664
- n2 += floor(i / out);
3242
+ n += floor(i / out);
3665
3243
  i %= out;
3666
- output.splice(i++, 0, n2);
3244
+ output.splice(i++, 0, n);
3667
3245
  }
3668
3246
  return String.fromCodePoint.apply(String, output);
3669
3247
  };
@@ -3671,7 +3249,7 @@ var uri_all = { exports: {} };
3671
3249
  var output = [];
3672
3250
  input = ucs2decode(input);
3673
3251
  var inputLength = input.length;
3674
- var n2 = initialN;
3252
+ var n = initialN;
3675
3253
  var delta = 0;
3676
3254
  var bias = initialBias;
3677
3255
  var _iteratorNormalCompletion = true;
@@ -3704,15 +3282,15 @@ var uri_all = { exports: {} };
3704
3282
  output.push(delimiter);
3705
3283
  }
3706
3284
  while (handledCPCount < inputLength) {
3707
- var m2 = maxInt;
3285
+ var m = maxInt;
3708
3286
  var _iteratorNormalCompletion2 = true;
3709
3287
  var _didIteratorError2 = false;
3710
3288
  var _iteratorError2 = void 0;
3711
3289
  try {
3712
3290
  for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
3713
3291
  var currentValue = _step2.value;
3714
- if (currentValue >= n2 && currentValue < m2) {
3715
- m2 = currentValue;
3292
+ if (currentValue >= n && currentValue < m) {
3293
+ m = currentValue;
3716
3294
  }
3717
3295
  }
3718
3296
  } catch (err) {
@@ -3730,30 +3308,30 @@ var uri_all = { exports: {} };
3730
3308
  }
3731
3309
  }
3732
3310
  var handledCPCountPlusOne = handledCPCount + 1;
3733
- if (m2 - n2 > floor((maxInt - delta) / handledCPCountPlusOne)) {
3311
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
3734
3312
  error$12("overflow");
3735
3313
  }
3736
- delta += (m2 - n2) * handledCPCountPlusOne;
3737
- n2 = m2;
3314
+ delta += (m - n) * handledCPCountPlusOne;
3315
+ n = m;
3738
3316
  var _iteratorNormalCompletion3 = true;
3739
3317
  var _didIteratorError3 = false;
3740
3318
  var _iteratorError3 = void 0;
3741
3319
  try {
3742
3320
  for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
3743
3321
  var _currentValue = _step3.value;
3744
- if (_currentValue < n2 && ++delta > maxInt) {
3322
+ if (_currentValue < n && ++delta > maxInt) {
3745
3323
  error$12("overflow");
3746
3324
  }
3747
- if (_currentValue == n2) {
3325
+ if (_currentValue == n) {
3748
3326
  var q = delta;
3749
3327
  for (var k = base; ; k += base) {
3750
- var t2 = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
3751
- if (q < t2) {
3328
+ var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
3329
+ if (q < t) {
3752
3330
  break;
3753
3331
  }
3754
- var qMinusT = q - t2;
3755
- var baseMinusT = base - t2;
3756
- output.push(stringFromCharCode(digitToBasic(t2 + qMinusT % baseMinusT, 0)));
3332
+ var qMinusT = q - t;
3333
+ var baseMinusT = base - t;
3334
+ output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));
3757
3335
  q = floor(qMinusT / baseMinusT);
3758
3336
  }
3759
3337
  output.push(stringFromCharCode(digitToBasic(q, 0)));
@@ -3777,7 +3355,7 @@ var uri_all = { exports: {} };
3777
3355
  }
3778
3356
  }
3779
3357
  ++delta;
3780
- ++n2;
3358
+ ++n;
3781
3359
  }
3782
3360
  return output.join("");
3783
3361
  };
@@ -3805,16 +3383,16 @@ var uri_all = { exports: {} };
3805
3383
  var SCHEMES = {};
3806
3384
  function pctEncChar(chr) {
3807
3385
  var c = chr.charCodeAt(0);
3808
- var e2 = void 0;
3386
+ var e = void 0;
3809
3387
  if (c < 16)
3810
- e2 = "%0" + c.toString(16).toUpperCase();
3388
+ e = "%0" + c.toString(16).toUpperCase();
3811
3389
  else if (c < 128)
3812
- e2 = "%" + c.toString(16).toUpperCase();
3390
+ e = "%" + c.toString(16).toUpperCase();
3813
3391
  else if (c < 2048)
3814
- e2 = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
3392
+ e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
3815
3393
  else
3816
- e2 = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
3817
- return e2;
3394
+ e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
3395
+ return e;
3818
3396
  }
3819
3397
  function pctDecChars(str) {
3820
3398
  var newStr = "";
@@ -3980,8 +3558,8 @@ var uri_all = { exports: {} };
3980
3558
  if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {
3981
3559
  try {
3982
3560
  components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());
3983
- } catch (e2) {
3984
- components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e2;
3561
+ } catch (e) {
3562
+ components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e;
3985
3563
  }
3986
3564
  }
3987
3565
  _normalizeComponentEncoding(components, URI_PROTOCOL);
@@ -4033,9 +3611,9 @@ var uri_all = { exports: {} };
4033
3611
  } else {
4034
3612
  var im = input.match(RDS5);
4035
3613
  if (im) {
4036
- var s2 = im[0];
4037
- input = input.slice(s2.length);
4038
- output.push(s2);
3614
+ var s = im[0];
3615
+ input = input.slice(s.length);
3616
+ output.push(s);
4039
3617
  } else {
4040
3618
  throw new Error("Unexpected dot segment condition");
4041
3619
  }
@@ -4056,8 +3634,8 @@ var uri_all = { exports: {} };
4056
3634
  else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {
4057
3635
  try {
4058
3636
  components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);
4059
- } catch (e2) {
4060
- components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e2;
3637
+ } catch (e) {
3638
+ components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
4061
3639
  }
4062
3640
  }
4063
3641
  }
@@ -4077,14 +3655,14 @@ var uri_all = { exports: {} };
4077
3655
  }
4078
3656
  }
4079
3657
  if (components.path !== void 0) {
4080
- var s2 = components.path;
3658
+ var s = components.path;
4081
3659
  if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
4082
- s2 = removeDotSegments(s2);
3660
+ s = removeDotSegments(s);
4083
3661
  }
4084
3662
  if (authority === void 0) {
4085
- s2 = s2.replace(/^\/\//, "/%2F");
3663
+ s = s.replace(/^\/\//, "/%2F");
4086
3664
  }
4087
- uriTokens.push(s2);
3665
+ uriTokens.push(s);
4088
3666
  }
4089
3667
  if (components.query !== void 0) {
4090
3668
  uriTokens.push("?");
@@ -4304,8 +3882,8 @@ var uri_all = { exports: {} };
4304
3882
  if (!options.unicodeSupport) {
4305
3883
  try {
4306
3884
  addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());
4307
- } catch (e2) {
4308
- mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e2;
3885
+ } catch (e) {
3886
+ mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e;
4309
3887
  }
4310
3888
  } else {
4311
3889
  addr[1] = unescapeComponent(addr[1], options).toLowerCase();
@@ -4325,8 +3903,8 @@ var uri_all = { exports: {} };
4325
3903
  var domain = toAddr.slice(atIdx + 1);
4326
3904
  try {
4327
3905
  domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);
4328
- } catch (e2) {
4329
- components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e2;
3906
+ } catch (e) {
3907
+ components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
4330
3908
  }
4331
3909
  to[x] = localPart + "@" + domain;
4332
3910
  }
@@ -4507,31 +4085,31 @@ uri$1.default = uri;
4507
4085
  unicode: '"minLength"/"maxLength" account for unicode characters by default.'
4508
4086
  };
4509
4087
  const MAX_EXPRESSION = 200;
4510
- function requiredOptions(o2) {
4088
+ function requiredOptions(o) {
4511
4089
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
4512
- const s2 = o2.strict;
4513
- const _optz = (_a = o2.code) === null || _a === void 0 ? void 0 : _a.optimize;
4090
+ const s = o.strict;
4091
+ const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;
4514
4092
  const optimize = _optz === true || _optz === void 0 ? 1 : _optz || 0;
4515
- const regExp = (_c = (_b = o2.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;
4516
- const uriResolver = (_d = o2.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;
4093
+ const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;
4094
+ const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;
4517
4095
  return {
4518
- strictSchema: (_f = (_e = o2.strictSchema) !== null && _e !== void 0 ? _e : s2) !== null && _f !== void 0 ? _f : true,
4519
- strictNumbers: (_h = (_g = o2.strictNumbers) !== null && _g !== void 0 ? _g : s2) !== null && _h !== void 0 ? _h : true,
4520
- strictTypes: (_k = (_j = o2.strictTypes) !== null && _j !== void 0 ? _j : s2) !== null && _k !== void 0 ? _k : "log",
4521
- strictTuples: (_m = (_l = o2.strictTuples) !== null && _l !== void 0 ? _l : s2) !== null && _m !== void 0 ? _m : "log",
4522
- strictRequired: (_p = (_o = o2.strictRequired) !== null && _o !== void 0 ? _o : s2) !== null && _p !== void 0 ? _p : false,
4523
- code: o2.code ? __spreadProps(__spreadValues({}, o2.code), { optimize, regExp }) : { optimize, regExp },
4524
- loopRequired: (_q = o2.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,
4525
- loopEnum: (_r = o2.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,
4526
- meta: (_s = o2.meta) !== null && _s !== void 0 ? _s : true,
4527
- messages: (_t = o2.messages) !== null && _t !== void 0 ? _t : true,
4528
- inlineRefs: (_u = o2.inlineRefs) !== null && _u !== void 0 ? _u : true,
4529
- schemaId: (_v = o2.schemaId) !== null && _v !== void 0 ? _v : "$id",
4530
- addUsedSchema: (_w = o2.addUsedSchema) !== null && _w !== void 0 ? _w : true,
4531
- validateSchema: (_x = o2.validateSchema) !== null && _x !== void 0 ? _x : true,
4532
- validateFormats: (_y = o2.validateFormats) !== null && _y !== void 0 ? _y : true,
4533
- unicodeRegExp: (_z = o2.unicodeRegExp) !== null && _z !== void 0 ? _z : true,
4534
- int32range: (_0 = o2.int32range) !== null && _0 !== void 0 ? _0 : true,
4096
+ strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,
4097
+ strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,
4098
+ strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : "log",
4099
+ strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : "log",
4100
+ strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,
4101
+ code: o.code ? __spreadProps(__spreadValues({}, o.code), { optimize, regExp }) : { optimize, regExp },
4102
+ loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,
4103
+ loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,
4104
+ meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,
4105
+ messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,
4106
+ inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,
4107
+ schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : "$id",
4108
+ addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,
4109
+ validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,
4110
+ validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,
4111
+ unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,
4112
+ int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,
4535
4113
  uriResolver
4536
4114
  };
4537
4115
  }
@@ -4619,11 +4197,11 @@ uri$1.default = uri;
4619
4197
  async function _compileAsync(sch) {
4620
4198
  try {
4621
4199
  return this._compileSchemaEnv(sch);
4622
- } catch (e2) {
4623
- if (!(e2 instanceof ref_error_12.default))
4624
- throw e2;
4625
- checkLoaded.call(this, e2);
4626
- await loadMissingSchema.call(this, e2.missingSchema);
4200
+ } catch (e) {
4201
+ if (!(e instanceof ref_error_12.default))
4202
+ throw e;
4203
+ checkLoaded.call(this, e);
4204
+ await loadMissingSchema.call(this, e.missingSchema);
4627
4205
  return _compileAsync.call(this, sch);
4628
4206
  }
4629
4207
  }
@@ -4778,7 +4356,7 @@ uri$1.default = uri;
4778
4356
  type: (0, dataType_12.getJSONTypes)(def2.type),
4779
4357
  schemaType: (0, dataType_12.getJSONTypes)(def2.schemaType)
4780
4358
  });
4781
- (0, util_12.eachItem)(keyword2, definition.type.length === 0 ? (k) => addRule.call(this, k, definition) : (k) => definition.type.forEach((t2) => addRule.call(this, k, definition, t2)));
4359
+ (0, util_12.eachItem)(keyword2, definition.type.length === 0 ? (k) => addRule.call(this, k, definition) : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));
4782
4360
  return this;
4783
4361
  }
4784
4362
  getKeyword(keyword2) {
@@ -4805,7 +4383,7 @@ uri$1.default = uri;
4805
4383
  errorsText(errors2 = this.errors, { separator = ", ", dataVar = "data" } = {}) {
4806
4384
  if (!errors2 || errors2.length === 0)
4807
4385
  return "No errors";
4808
- return errors2.map((e2) => `${dataVar}${e2.instancePath} ${e2.message}`).reduce((text, msg) => text + separator + msg);
4386
+ return errors2.map((e) => `${dataVar}${e.instancePath} ${e.message}`).reduce((text, msg) => text + separator + msg);
4809
4387
  }
4810
4388
  $dataMetaSchema(metaSchema, keywordsJsonPointers) {
4811
4389
  const rules2 = this.RULES.all;
@@ -4975,7 +4553,7 @@ uri$1.default = uri;
4975
4553
  if (dataType2 && post)
4976
4554
  throw new Error('keyword with "post" flag cannot have "type"');
4977
4555
  const { RULES } = this;
4978
- let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t2 }) => t2 === dataType2);
4556
+ let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType2);
4979
4557
  if (!ruleGroup) {
4980
4558
  ruleGroup = { type: dataType2, rules: [] };
4981
4559
  RULES.rules.push(ruleGroup);
@@ -5094,9 +4672,9 @@ function callRef(cxt, v, sch, $async) {
5094
4672
  addEvaluatedFrom(v);
5095
4673
  if (!allErrors)
5096
4674
  gen.assign(valid, true);
5097
- }, (e2) => {
5098
- gen.if((0, codegen_1$9._)`!(${e2} instanceof ${it.ValidationError})`, () => gen.throw(e2));
5099
- addErrorsFrom(e2);
4675
+ }, (e) => {
4676
+ gen.if((0, codegen_1$9._)`!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));
4677
+ addErrorsFrom(e);
5100
4678
  if (!allErrors)
5101
4679
  gen.assign(valid, false);
5102
4680
  });
@@ -5243,10 +4821,10 @@ function validDate(str) {
5243
4821
  const matches = DATE.exec(str);
5244
4822
  if (!matches)
5245
4823
  return false;
5246
- const y2 = +matches[1];
5247
- const m2 = +matches[2];
5248
- const d2 = +matches[3];
5249
- return m2 >= 1 && m2 <= 12 && d2 >= 1 && (d2 <= DAYS[m2] || m2 === 2 && d2 === 29 && (y2 % 100 === 0 ? y2 % 400 === 0 : y2 % 4 === 0));
4824
+ const y = +matches[1];
4825
+ const m = +matches[2];
4826
+ const d = +matches[3];
4827
+ return m >= 1 && m <= 12 && d >= 1 && (d <= DAYS[m] || m === 2 && d === 29 && (y % 100 === 0 ? y % 400 === 0 : y % 4 === 0));
5250
4828
  }
5251
4829
  function validTime(str) {
5252
4830
  const matches = TIME.exec(str);
@@ -5264,19 +4842,19 @@ var error$2 = {};
5264
4842
  Object.defineProperty(error$2, "__esModule", { value: true });
5265
4843
  error$2.typeErrorParams = error$2.typeErrorMessage = error$2.typeError = void 0;
5266
4844
  const codegen_1$7 = codegen;
5267
- function typeError(t2) {
4845
+ function typeError(t) {
5268
4846
  return {
5269
- message: (cxt) => typeErrorMessage(cxt, t2),
5270
- params: (cxt) => typeErrorParams(cxt, t2)
4847
+ message: (cxt) => typeErrorMessage(cxt, t),
4848
+ params: (cxt) => typeErrorParams(cxt, t)
5271
4849
  };
5272
4850
  }
5273
4851
  error$2.typeError = typeError;
5274
- function typeErrorMessage({ parentSchema }, t2) {
5275
- return (parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.nullable) ? `must be ${t2} or null` : `must be ${t2}`;
4852
+ function typeErrorMessage({ parentSchema }, t) {
4853
+ return (parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.nullable) ? `must be ${t} or null` : `must be ${t}`;
5276
4854
  }
5277
4855
  error$2.typeErrorMessage = typeErrorMessage;
5278
- function typeErrorParams({ parentSchema }, t2) {
5279
- return (0, codegen_1$7._)`{type: ${t2}, nullable: ${!!(parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.nullable)}}`;
4856
+ function typeErrorParams({ parentSchema }, t) {
4857
+ return (0, codegen_1$7._)`{type: ${t}, nullable: ${!!(parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.nullable)}}`;
5280
4858
  }
5281
4859
  error$2.typeErrorParams = typeErrorParams;
5282
4860
  (function(exports) {
@@ -5835,7 +5413,7 @@ const schema = (root) => ({
5835
5413
  optionalPropertiesForm,
5836
5414
  discriminatorForm,
5837
5415
  valuesForm
5838
- ].map((s2) => s2(root))
5416
+ ].map((s) => s(root))
5839
5417
  }
5840
5418
  });
5841
5419
  const jtdMetaSchema = __spreadValues({
@@ -5870,12 +5448,12 @@ const escaped = {
5870
5448
  '"': '\\"',
5871
5449
  "\\": "\\\\"
5872
5450
  };
5873
- function quote(s2) {
5451
+ function quote(s) {
5874
5452
  rxEscapable.lastIndex = 0;
5875
- return '"' + (rxEscapable.test(s2) ? s2.replace(rxEscapable, (a) => {
5453
+ return '"' + (rxEscapable.test(s) ? s.replace(rxEscapable, (a) => {
5876
5454
  const c = escaped[a];
5877
5455
  return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
5878
- }) : s2) + '"';
5456
+ }) : s) + '"';
5879
5457
  }
5880
5458
  quote$1.default = quote;
5881
5459
  quote.code = 'require("ajv/dist/runtime/quote").default';
@@ -5931,12 +5509,12 @@ function compileSerializer(sch, definitions) {
5931
5509
  const serialize2 = makeSerialize(this.scope.get());
5932
5510
  this.scope.value(serializeName, { ref: serialize2 });
5933
5511
  sch.serialize = serialize2;
5934
- } catch (e2) {
5512
+ } catch (e) {
5935
5513
  if (sourceCode)
5936
5514
  this.logger.error("Error compiling serializer, function code:", sourceCode);
5937
5515
  delete sch.serialize;
5938
5516
  delete sch.serializeName;
5939
- throw e2;
5517
+ throw e;
5940
5518
  } finally {
5941
5519
  this._compilations.delete(sch);
5942
5520
  }
@@ -6096,27 +5674,27 @@ var parseJson$1 = {};
6096
5674
  Object.defineProperty(parseJson$1, "__esModule", { value: true });
6097
5675
  parseJson$1.parseJsonString = parseJson$1.parseJsonNumber = parseJson$1.parseJson = void 0;
6098
5676
  const rxParseJson = /position\s(\d+)$/;
6099
- function parseJson(s2, pos) {
5677
+ function parseJson(s, pos) {
6100
5678
  let endPos;
6101
5679
  parseJson.message = void 0;
6102
5680
  let matches;
6103
5681
  if (pos)
6104
- s2 = s2.slice(pos);
5682
+ s = s.slice(pos);
6105
5683
  try {
6106
- parseJson.position = pos + s2.length;
6107
- return JSON.parse(s2);
6108
- } catch (e2) {
6109
- matches = rxParseJson.exec(e2.message);
5684
+ parseJson.position = pos + s.length;
5685
+ return JSON.parse(s);
5686
+ } catch (e) {
5687
+ matches = rxParseJson.exec(e.message);
6110
5688
  if (!matches) {
6111
5689
  parseJson.message = "unexpected end";
6112
5690
  return void 0;
6113
5691
  }
6114
5692
  endPos = +matches[1];
6115
- const c = s2[endPos];
6116
- s2 = s2.slice(0, endPos);
5693
+ const c = s[endPos];
5694
+ s = s.slice(0, endPos);
6117
5695
  parseJson.position = pos + endPos;
6118
5696
  try {
6119
- return JSON.parse(s2);
5697
+ return JSON.parse(s);
6120
5698
  } catch (e1) {
6121
5699
  parseJson.message = `unexpected token ${c}`;
6122
5700
  return void 0;
@@ -6127,15 +5705,15 @@ parseJson$1.parseJson = parseJson;
6127
5705
  parseJson.message = void 0;
6128
5706
  parseJson.position = 0;
6129
5707
  parseJson.code = 'require("ajv/dist/runtime/parseJson").parseJson';
6130
- function parseJsonNumber(s2, pos, maxDigits) {
5708
+ function parseJsonNumber(s, pos, maxDigits) {
6131
5709
  let numStr = "";
6132
5710
  let c;
6133
5711
  parseJsonNumber.message = void 0;
6134
- if (s2[pos] === "-") {
5712
+ if (s[pos] === "-") {
6135
5713
  numStr += "-";
6136
5714
  pos++;
6137
5715
  }
6138
- if (s2[pos] === "0") {
5716
+ if (s[pos] === "0") {
6139
5717
  numStr += "0";
6140
5718
  pos++;
6141
5719
  } else {
@@ -6148,7 +5726,7 @@ function parseJsonNumber(s2, pos, maxDigits) {
6148
5726
  parseJsonNumber.position = pos;
6149
5727
  return +numStr;
6150
5728
  }
6151
- if (s2[pos] === ".") {
5729
+ if (s[pos] === ".") {
6152
5730
  numStr += ".";
6153
5731
  pos++;
6154
5732
  if (!parseDigits()) {
@@ -6156,10 +5734,10 @@ function parseJsonNumber(s2, pos, maxDigits) {
6156
5734
  return void 0;
6157
5735
  }
6158
5736
  }
6159
- if (c = s2[pos], c === "e" || c === "E") {
5737
+ if (c = s[pos], c === "e" || c === "E") {
6160
5738
  numStr += "e";
6161
5739
  pos++;
6162
- if (c = s2[pos], c === "+" || c === "-") {
5740
+ if (c = s[pos], c === "+" || c === "-") {
6163
5741
  numStr += c;
6164
5742
  pos++;
6165
5743
  }
@@ -6172,7 +5750,7 @@ function parseJsonNumber(s2, pos, maxDigits) {
6172
5750
  return +numStr;
6173
5751
  function parseDigits(maxLen) {
6174
5752
  let digit = false;
6175
- while (c = s2[pos], c >= "0" && c <= "9" && (maxLen === void 0 || maxLen-- > 0)) {
5753
+ while (c = s[pos], c >= "0" && c <= "9" && (maxLen === void 0 || maxLen-- > 0)) {
6176
5754
  digit = true;
6177
5755
  numStr += c;
6178
5756
  pos++;
@@ -6181,7 +5759,7 @@ function parseJsonNumber(s2, pos, maxDigits) {
6181
5759
  }
6182
5760
  function errorMessage() {
6183
5761
  parseJsonNumber.position = pos;
6184
- parseJsonNumber.message = pos < s2.length ? `unexpected token ${s2[pos]}` : "unexpected end";
5762
+ parseJsonNumber.message = pos < s.length ? `unexpected token ${s[pos]}` : "unexpected end";
6185
5763
  }
6186
5764
  }
6187
5765
  parseJson$1.parseJsonNumber = parseJsonNumber;
@@ -6200,16 +5778,16 @@ const escapedChars = {
6200
5778
  };
6201
5779
  const CODE_A = "a".charCodeAt(0);
6202
5780
  const CODE_0 = "0".charCodeAt(0);
6203
- function parseJsonString(s2, pos) {
5781
+ function parseJsonString(s, pos) {
6204
5782
  let str = "";
6205
5783
  let c;
6206
5784
  parseJsonString.message = void 0;
6207
5785
  while (true) {
6208
- c = s2[pos++];
5786
+ c = s[pos++];
6209
5787
  if (c === '"')
6210
5788
  break;
6211
5789
  if (c === "\\") {
6212
- c = s2[pos];
5790
+ c = s[pos];
6213
5791
  if (c in escapedChars) {
6214
5792
  str += escapedChars[c];
6215
5793
  pos++;
@@ -6219,7 +5797,7 @@ function parseJsonString(s2, pos) {
6219
5797
  let code2 = 0;
6220
5798
  while (count--) {
6221
5799
  code2 <<= 4;
6222
- c = s2[pos];
5800
+ c = s[pos];
6223
5801
  if (c === void 0) {
6224
5802
  errorMessage("unexpected end");
6225
5803
  return void 0;
@@ -6315,12 +5893,12 @@ function compileParser(sch, definitions) {
6315
5893
  const parse2 = makeParse(this.scope.get());
6316
5894
  this.scope.value(parseName, { ref: parse2 });
6317
5895
  sch.parse = parse2;
6318
- } catch (e2) {
5896
+ } catch (e) {
6319
5897
  if (sourceCode)
6320
5898
  this.logger.error("Error compiling parser, function code:", sourceCode);
6321
5899
  delete sch.parse;
6322
5900
  delete sch.parseName;
6323
- throw e2;
5901
+ throw e;
6324
5902
  } finally {
6325
5903
  this._compilations.delete(sch);
6326
5904
  }
@@ -6503,14 +6081,14 @@ function parseType(cxt) {
6503
6081
  parseNumber(cxt);
6504
6082
  break;
6505
6083
  default: {
6506
- const t2 = schema2.type;
6507
- if (!self2.opts.int32range && (t2 === "int32" || t2 === "uint32")) {
6084
+ const t = schema2.type;
6085
+ if (!self2.opts.int32range && (t === "int32" || t === "uint32")) {
6508
6086
  parseNumber(cxt, 16);
6509
- if (t2 === "uint32") {
6087
+ if (t === "uint32") {
6510
6088
  gen.if((0, codegen_1._)`${data} < 0`, () => parsingError(cxt, (0, codegen_1.str)`integer out of range`));
6511
6089
  }
6512
6090
  } else {
6513
- const [min, max, maxDigits] = type_1.intRange[t2];
6091
+ const [min, max, maxDigits] = type_1.intRange[t];
6514
6092
  parseNumber(cxt, maxDigits);
6515
6093
  gen.if((0, codegen_1._)`${data} < ${min} || ${data} > ${max}`, () => parsingError(cxt, (0, codegen_1.str)`integer out of range`));
6516
6094
  }
@@ -6579,10 +6157,10 @@ function parseToken(cxt, tok) {
6579
6157
  }
6580
6158
  function tryParseToken(cxt, tok, fail, success) {
6581
6159
  const { gen } = cxt;
6582
- const n2 = tok.length;
6160
+ const n = tok.length;
6583
6161
  skipWhitespace(cxt);
6584
- gen.if((0, codegen_1._)`${jsonSlice(n2)} === ${tok}`, () => {
6585
- gen.add(names_1.default.jsonPos, n2);
6162
+ gen.if((0, codegen_1._)`${jsonSlice(n)} === ${tok}`, () => {
6163
+ gen.add(names_1.default.jsonPos, n);
6586
6164
  success === null || success === void 0 ? void 0 : success(cxt);
6587
6165
  }, () => fail(cxt));
6588
6166
  }
@@ -6830,25 +6408,25 @@ var oauth2terms = {};
6830
6408
  exports.compareParameterTypes = compareParameterTypes;
6831
6409
  })(oauth2terms);
6832
6410
  (function(exports) {
6833
- var __createBinding = commonjsGlobal && commonjsGlobal.__createBinding || (Object.create ? function(o2, m2, k, k2) {
6411
+ var __createBinding = commonjsGlobal && commonjsGlobal.__createBinding || (Object.create ? function(o, m, k, k2) {
6834
6412
  if (k2 === void 0)
6835
6413
  k2 = k;
6836
- var desc = Object.getOwnPropertyDescriptor(m2, k);
6837
- if (!desc || ("get" in desc ? !m2.__esModule : desc.writable || desc.configurable)) {
6414
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6415
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6838
6416
  desc = { enumerable: true, get: function() {
6839
- return m2[k];
6417
+ return m[k];
6840
6418
  } };
6841
6419
  }
6842
- Object.defineProperty(o2, k2, desc);
6843
- } : function(o2, m2, k, k2) {
6420
+ Object.defineProperty(o, k2, desc);
6421
+ } : function(o, m, k, k2) {
6844
6422
  if (k2 === void 0)
6845
6423
  k2 = k;
6846
- o2[k2] = m2[k];
6424
+ o[k2] = m[k];
6847
6425
  });
6848
- var __exportStar = commonjsGlobal && commonjsGlobal.__exportStar || function(m2, exports2) {
6849
- for (var p in m2)
6426
+ var __exportStar = commonjsGlobal && commonjsGlobal.__exportStar || function(m, exports2) {
6427
+ for (var p in m)
6850
6428
  if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
6851
- __createBinding(exports2, m2, p);
6429
+ __createBinding(exports2, m, p);
6852
6430
  };
6853
6431
  Object.defineProperty(exports, "__esModule", { value: true });
6854
6432
  exports.$stsgdf = exports.$stsgd = void 0;
@@ -6954,14 +6532,14 @@ var IOauth2ListenerCommand = /* @__PURE__ */ ((IOauth2ListenerCommand2) => {
6954
6532
  return IOauth2ListenerCommand2;
6955
6533
  })(IOauth2ListenerCommand || {});
6956
6534
  var __assign = commonjsGlobal && commonjsGlobal.__assign || function() {
6957
- __assign = Object.assign || function(t2) {
6958
- for (var s2, i = 1, n2 = arguments.length; i < n2; i++) {
6959
- s2 = arguments[i];
6960
- for (var p in s2)
6961
- if (Object.prototype.hasOwnProperty.call(s2, p))
6962
- t2[p] = s2[p];
6963
- }
6964
- return t2;
6535
+ __assign = Object.assign || function(t) {
6536
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6537
+ s = arguments[i];
6538
+ for (var p in s)
6539
+ if (Object.prototype.hasOwnProperty.call(s, p))
6540
+ t[p] = s[p];
6541
+ }
6542
+ return t;
6965
6543
  };
6966
6544
  return __assign.apply(this, arguments);
6967
6545
  };
@@ -6999,7 +6577,7 @@ function parse(cookieString) {
6999
6577
  try {
7000
6578
  var name_1 = parts[0].replace(rdecode, decodeURIComponent);
7001
6579
  result[name_1] = cookie.replace(rdecode, decodeURIComponent);
7002
- } catch (e2) {
6580
+ } catch (e) {
7003
6581
  }
7004
6582
  }
7005
6583
  return result;
@@ -7019,7 +6597,7 @@ function remove(name, attributes) {
7019
6597
  set(name, "", __assign(__assign({}, attributes), { expires: -1 }));
7020
6598
  }
7021
6599
  var remove_1 = remove;
7022
- const debug$1 = Debug(`proc:${process.pid}:storage.ts`);
6600
+ const debug$1 = Debug(`proc:${0}:storage.ts`);
7023
6601
  var ClientStorageType = /* @__PURE__ */ ((ClientStorageType2) => {
7024
6602
  ClientStorageType2["LOCAL_STORAGE"] = "LocalStorage";
7025
6603
  ClientStorageType2["SESSION_STORAGE"] = "SessionStorage";
@@ -7150,68 +6728,7 @@ class ClientStorageFactory {
7150
6728
  }
7151
6729
  }
7152
6730
  _storage = new WeakMap();
7153
- function e(e2) {
7154
- this.message = e2;
7155
- }
7156
- e.prototype = new Error(), e.prototype.name = "InvalidCharacterError";
7157
- var r = typeof window != "undefined" && window.atob && window.atob.bind(window) || function(r2) {
7158
- var t2 = String(r2).replace(/=+$/, "");
7159
- if (t2.length % 4 == 1)
7160
- throw new e("'atob' failed: The string to be decoded is not correctly encoded.");
7161
- for (var n2, o2, a = 0, i = 0, c = ""; o2 = t2.charAt(i++); ~o2 && (n2 = a % 4 ? 64 * n2 + o2 : o2, a++ % 4) ? c += String.fromCharCode(255 & n2 >> (-2 * a & 6)) : 0)
7162
- o2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o2);
7163
- return c;
7164
- };
7165
- function t(e2) {
7166
- var t2 = e2.replace(/-/g, "+").replace(/_/g, "/");
7167
- switch (t2.length % 4) {
7168
- case 0:
7169
- break;
7170
- case 2:
7171
- t2 += "==";
7172
- break;
7173
- case 3:
7174
- t2 += "=";
7175
- break;
7176
- default:
7177
- throw "Illegal base64url string!";
7178
- }
7179
- try {
7180
- return function(e3) {
7181
- return decodeURIComponent(r(e3).replace(/(.)/g, function(e4, r2) {
7182
- var t3 = r2.charCodeAt(0).toString(16).toUpperCase();
7183
- return t3.length < 2 && (t3 = "0" + t3), "%" + t3;
7184
- }));
7185
- }(t2);
7186
- } catch (e3) {
7187
- return r(t2);
7188
- }
7189
- }
7190
- function n(e2) {
7191
- this.message = e2;
7192
- }
7193
- function o(e2, r2) {
7194
- if (typeof e2 != "string")
7195
- throw new n("Invalid token specified");
7196
- var o2 = (r2 = r2 || {}).header === true ? 0 : 1;
7197
- try {
7198
- return JSON.parse(t(e2.split(".")[o2]));
7199
- } catch (e3) {
7200
- throw new n("Invalid token specified: " + e3.message);
7201
- }
7202
- }
7203
- n.prototype = new Error(), n.prototype.name = "InvalidTokenError";
7204
- const encodedJs = "dmFyIGlkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjZD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgdWQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIFZvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIGxkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZmQ9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgT3M9KGVlLGFlLGllKT0+YWUgaW4gZWU/aWQoZWUsYWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmllfSk6ZWVbYWVdPWllLFE9KGVlLGFlKT0+e2Zvcih2YXIgaWUgaW4gYWV8fChhZT17fSkpbGQuY2FsbChhZSxpZSkmJk9zKGVlLGllLGFlW2llXSk7aWYoVm8pZm9yKHZhciBpZSBvZiBWbyhhZSkpZmQuY2FsbChhZSxpZSkmJk9zKGVlLGllLGFlW2llXSk7cmV0dXJuIGVlfSxsZT0oZWUsYWUpPT5jZChlZSx1ZChhZSkpO3ZhciBfcj0oZWUsYWUsaWUpPT4oT3MoZWUsdHlwZW9mIGFlIT0ic3ltYm9sIj9hZSsiIjphZSxpZSksaWUpLHpvPShlZSxhZSxpZSk9PntpZighYWUuaGFzKGVlKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCAiK2llKX07dmFyIFY9KGVlLGFlLGllKT0+KHpvKGVlLGFlLCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLGllP2llLmNhbGwoZWUpOmFlLmdldChlZSkpLFNlPShlZSxhZSxpZSk9PntpZihhZS5oYXMoZWUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpO2FlIGluc3RhbmNlb2YgV2Vha1NldD9hZS5hZGQoZWUpOmFlLnNldChlZSxpZSl9LGNlPShlZSxhZSxpZSxjdCk9Pih6byhlZSxhZSwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLGN0P2N0LmNhbGwoZWUsaWUpOmFlLnNldChlZSxpZSksaWUpOyhmdW5jdGlvbigpe3ZhciBIdCxidCxGZSxPdCxBcix5bixIZSx2dCxOdCxLZSxLdCwkbix0dCxDcixJcixEcixjcixqcixrcixVcjsidXNlIHN0cmljdCI7dmFyIGVlPXR5cGVvZiBnbG9iYWxUaGlzIT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIj9nbG9iYWw6dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6e30sYWU9e2V4cG9ydHM6e319LGllPTFlMyxjdD1pZSo2MCxRdD1jdCo2MCxUdD1RdCoyNCxIbz1UdCo3LEtvPVR0KjM2NS4yNSxCbz1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9dHlwZW9mIGU7aWYocj09PSJzdHJpbmciJiZlLmxlbmd0aD4wKXJldHVybiBKbyhlKTtpZihyPT09Im51bWJlciImJmlzRmluaXRlKGUpKXJldHVybiB0Lmxvbmc/R28oZSk6cW8oZSk7dGhyb3cgbmV3IEVycm9yKCJ2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPSIrSlNPTi5zdHJpbmdpZnkoZSkpfTtmdW5jdGlvbiBKbyhlKXtpZihlPVN0cmluZyhlKSwhKGUubGVuZ3RoPjEwMCkpe3ZhciB0PS9eKC0/KD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhlKTtpZighIXQpe3ZhciByPXBhcnNlRmxvYXQodFsxXSksbj0odFsyXXx8Im1zIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gobil7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gcipLbztjYXNlIndlZWtzIjpjYXNlIndlZWsiOmNhc2UidyI6cmV0dXJuIHIqSG87Y2FzZSJkYXlzIjpjYXNlImRheSI6Y2FzZSJkIjpyZXR1cm4gcipUdDtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKlF0O2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqY3Q7Y2FzZSJzZWNvbmRzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNzIjpjYXNlInNlYyI6Y2FzZSJzIjpyZXR1cm4gcippZTtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1mdW5jdGlvbiBxbyhlKXt2YXIgdD1NYXRoLmFicyhlKTtyZXR1cm4gdD49VHQ/TWF0aC5yb3VuZChlL1R0KSsiZCI6dD49UXQ/TWF0aC5yb3VuZChlL1F0KSsiaCI6dD49Y3Q/TWF0aC5yb3VuZChlL2N0KSsibSI6dD49aWU/TWF0aC5yb3VuZChlL2llKSsicyI6ZSsibXMifWZ1bmN0aW9uIEdvKGUpe3ZhciB0PU1hdGguYWJzKGUpO3JldHVybiB0Pj1UdD9xcihlLHQsVHQsImRheSIpOnQ+PVF0P3FyKGUsdCxRdCwiaG91ciIpOnQ+PWN0P3FyKGUsdCxjdCwibWludXRlIik6dD49aWU/cXIoZSx0LGllLCJzZWNvbmQiKTplKyIgbXMifWZ1bmN0aW9uIHFyKGUsdCxyLG4pe3ZhciBzPXQ+PXIqMS41O3JldHVybiBNYXRoLnJvdW5kKGUvcikrIiAiK24rKHM/InMiOiIiKX1mdW5jdGlvbiBRbyhlKXtyLmRlYnVnPXIsci5kZWZhdWx0PXIsci5jb2VyY2U9ZixyLmRpc2FibGU9YSxyLmVuYWJsZT1zLHIuZW5hYmxlZD1vLHIuaHVtYW5pemU9Qm8sci5kZXN0cm95PXAsT2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT57cltpXT1lW2ldfSksci5uYW1lcz1bXSxyLnNraXBzPVtdLHIuZm9ybWF0dGVycz17fTtmdW5jdGlvbiB0KGkpe2xldCBoPTA7Zm9yKGxldCBFPTA7RTxpLmxlbmd0aDtFKyspaD0oaDw8NSktaCtpLmNoYXJDb2RlQXQoRSksaHw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMoaCklci5jb2xvcnMubGVuZ3RoXX1yLnNlbGVjdENvbG9yPXQ7ZnVuY3Rpb24gcihpKXtsZXQgaCxFPW51bGwsVCxJO2Z1bmN0aW9uIGooLi4ueSl7aWYoIWouZW5hYmxlZClyZXR1cm47Y29uc3QgXz1qLGI9TnVtYmVyKG5ldyBEYXRlKSxPPWItKGh8fGIpO18uZGlmZj1PLF8ucHJldj1oLF8uY3Vycj1iLGg9Yix5WzBdPXIuY29lcmNlKHlbMF0pLHR5cGVvZiB5WzBdIT0ic3RyaW5nIiYmeS51bnNoaWZ0KCIlTyIpO2xldCBBPTA7eVswXT15WzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCgkLE4pPT57aWYoJD09PSIlJSIpcmV0dXJuIiUiO0ErKztjb25zdCBEPXIuZm9ybWF0dGVyc1tOXTtpZih0eXBlb2YgRD09ImZ1bmN0aW9uIil7Y29uc3QgQj15W0FdOyQ9RC5jYWxsKF8sQikseS5zcGxpY2UoQSwxKSxBLS19cmV0dXJuICR9KSxyLmZvcm1hdEFyZ3MuY2FsbChfLHkpLChfLmxvZ3x8ci5sb2cpLmFwcGx5KF8seSl9cmV0dXJuIGoubmFtZXNwYWNlPWksai51c2VDb2xvcnM9ci51c2VDb2xvcnMoKSxqLmNvbG9yPXIuc2VsZWN0Q29sb3IoaSksai5leHRlbmQ9bixqLmRlc3Ryb3k9ci5kZXN0cm95LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJlbmFibGVkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OigpPT5FIT09bnVsbD9FOihUIT09ci5uYW1lc3BhY2VzJiYoVD1yLm5hbWVzcGFjZXMsST1yLmVuYWJsZWQoaSkpLEkpLHNldDp5PT57RT15fX0pLHR5cGVvZiByLmluaXQ9PSJmdW5jdGlvbiImJnIuaW5pdChqKSxqfWZ1bmN0aW9uIG4oaSxoKXtjb25zdCBFPXIodGhpcy5uYW1lc3BhY2UrKHR5cGVvZiBoPT0idW5kZWZpbmVkIj8iOiI6aCkraSk7cmV0dXJuIEUubG9nPXRoaXMubG9nLEV9ZnVuY3Rpb24gcyhpKXtyLnNhdmUoaSksci5uYW1lc3BhY2VzPWksci5uYW1lcz1bXSxyLnNraXBzPVtdO2xldCBoO2NvbnN0IEU9KHR5cGVvZiBpPT0ic3RyaW5nIj9pOiIiKS5zcGxpdCgvW1xzLF0rLyksVD1FLmxlbmd0aDtmb3IoaD0wO2g8VDtoKyspIUVbaF18fChpPUVbaF0ucmVwbGFjZSgvXCovZywiLio/IiksaVswXT09PSItIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIraS5zbGljZSgxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIraSsiJCIpKSl9ZnVuY3Rpb24gYSgpe2NvbnN0IGk9Wy4uLnIubmFtZXMubWFwKGwpLC4uLnIuc2tpcHMubWFwKGwpLm1hcChoPT4iLSIraCldLmpvaW4oIiwiKTtyZXR1cm4gci5lbmFibGUoIiIpLGl9ZnVuY3Rpb24gbyhpKXtpZihpW2kubGVuZ3RoLTFdPT09IioiKXJldHVybiEwO2xldCBoLEU7Zm9yKGg9MCxFPXIuc2tpcHMubGVuZ3RoO2g8RTtoKyspaWYoci5za2lwc1toXS50ZXN0KGkpKXJldHVybiExO2ZvcihoPTAsRT1yLm5hbWVzLmxlbmd0aDtoPEU7aCsrKWlmKHIubmFtZXNbaF0udGVzdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKGkpe3JldHVybiBpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsaS50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cLlwqXD8kLywiKiIpfWZ1bmN0aW9uIGYoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBFcnJvcj9pLnN0YWNrfHxpLm1lc3NhZ2U6aX1mdW5jdGlvbiBwKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIHIuZW5hYmxlKHIubG9hZCgpKSxyfXZhciBZbz1RbzsoZnVuY3Rpb24oZSx0KXt0LmZvcm1hdEFyZ3M9bix0LnNhdmU9cyx0LmxvYWQ9YSx0LnVzZUNvbG9ycz1yLHQuc3RvcmFnZT1vKCksdC5kZXN0cm95PSgoKT0+e2xldCBmPSExO3JldHVybigpPT57Znx8KGY9ITAsY29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIikpfX0pKCksdC5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gcigpe3JldHVybiB0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LnByb2Nlc3MmJih3aW5kb3cucHJvY2Vzcy50eXBlPT09InJlbmRlcmVyInx8d2luZG93LnByb2Nlc3MuX19ud2pzKT8hMDp0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVwvKFxkKykvKT8hMTp0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHx0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8dHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLyl9ZnVuY3Rpb24gbihmKXtpZihmWzBdPSh0aGlzLnVzZUNvbG9ycz8iJWMiOiIiKSt0aGlzLm5hbWVzcGFjZSsodGhpcy51c2VDb2xvcnM/IiAlYyI6IiAiKStmWzBdKyh0aGlzLnVzZUNvbG9ycz8iJWMgIjoiICIpKyIrIitlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSwhdGhpcy51c2VDb2xvcnMpcmV0dXJuO2NvbnN0IHA9ImNvbG9yOiAiK3RoaXMuY29sb3I7Zi5zcGxpY2UoMSwwLHAsImNvbG9yOiBpbmhlcml0Iik7bGV0IGk9MCxoPTA7ZlswXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csRT0+e0UhPT0iJSUiJiYoaSsrLEU9PT0iJWMiJiYoaD1pKSl9KSxmLnNwbGljZShoLDAscCl9dC5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIHMoZil7dHJ5e2Y/dC5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIixmKTp0LnN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVidWciKX1jYXRjaHt9fWZ1bmN0aW9uIGEoKXtsZXQgZjt0cnl7Zj10LnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIWYmJnR5cGVvZiBwcm9jZXNzIT0idW5kZWZpbmVkIiYmImVudiJpbiBwcm9jZXNzJiYoZj17fS5ERUJVRyksZn1mdW5jdGlvbiBvKCl7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2V9Y2F0Y2h7fX1lLmV4cG9ydHM9WW8odCk7Y29uc3R7Zm9ybWF0dGVyczpsfT1lLmV4cG9ydHM7bC5qPWZ1bmN0aW9uKGYpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2gocCl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK3AubWVzc2FnZX19fSkoYWUsYWUuZXhwb3J0cyk7dmFyIE5zPWFlLmV4cG9ydHMsT249e2V4cG9ydHM6e319LFBzPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxhPTA7YTxzLmxlbmd0aDthKyspc1thXT1hcmd1bWVudHNbYV07cmV0dXJuIHQuYXBwbHkocixzKX19LFdvPVBzLE5uPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsUG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPU5uLmNhbGwodCk7cmV0dXJuIGVbcl18fChlW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9fShPYmplY3QuY3JlYXRlKG51bGwpKTtmdW5jdGlvbiBBdChlKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24ocil7cmV0dXJuIFBuKHIpPT09ZX19ZnVuY3Rpb24gVG4oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gR3IoZSl7cmV0dXJuIHR5cGVvZiBlPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBYbyhlKXtyZXR1cm4gZSE9PW51bGwmJiFHcihlKSYmZS5jb25zdHJ1Y3RvciE9PW51bGwmJiFHcihlLmNvbnN0cnVjdG9yKSYmdHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXI9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFRzPUF0KCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFpvKGUpe3ZhciB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXIhPSJ1bmRlZmluZWQiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6dD1lJiZlLmJ1ZmZlciYmVHMoZS5idWZmZXIpLHR9ZnVuY3Rpb24geG8oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiBlaShlKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIifWZ1bmN0aW9uIEFzKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIFFyKGUpe2lmKFBuKGUpIT09Im9iamVjdCIpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV9dmFyIHRpPUF0KCJEYXRlIikscmk9QXQoIkZpbGUiKSxuaT1BdCgiQmxvYiIpLHNpPUF0KCJGaWxlTGlzdCIpO2Z1bmN0aW9uIEFuKGUpe3JldHVybiBObi5jYWxsKGUpPT09IltvYmplY3QgRnVuY3Rpb25dIn1mdW5jdGlvbiBhaShlKXtyZXR1cm4gQXMoZSkmJkFuKGUucGlwZSl9ZnVuY3Rpb24gb2koZSl7dmFyIHQ9IltvYmplY3QgRm9ybURhdGFdIjtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxObi5jYWxsKGUpPT09dHx8QW4oZS50b1N0cmluZykmJmUudG9TdHJpbmcoKT09PXQpfXZhciBpaT1BdCgiVVJMU2VhcmNoUGFyYW1zIik7ZnVuY3Rpb24gY2koZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1aSgpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmKG5hdmlnYXRvci5wcm9kdWN0PT09IlJlYWN0TmF0aXZlInx8bmF2aWdhdG9yLnByb2R1Y3Q9PT0iTmF0aXZlU2NyaXB0Inx8bmF2aWdhdG9yLnByb2R1Y3Q9PT0iTlMiKT8hMTp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmdHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIn1mdW5jdGlvbiBDbihlLHQpe2lmKCEoZT09PW51bGx8fHR5cGVvZiBlPT0idW5kZWZpbmVkIikpaWYodHlwZW9mIGUhPSJvYmplY3QiJiYoZT1bZV0pLFRuKGUpKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIHMgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxzKSYmdC5jYWxsKG51bGwsZVtzXSxzLGUpfWZ1bmN0aW9uIEluKCl7dmFyIGU9e307ZnVuY3Rpb24gdChzLGEpe1FyKGVbYV0pJiZRcihzKT9lW2FdPUluKGVbYV0scyk6UXIocyk/ZVthXT1Jbih7fSxzKTpUbihzKT9lW2FdPXMuc2xpY2UoKTplW2FdPXN9Zm9yKHZhciByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspQ24oYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfWZ1bmN0aW9uIGxpKGUsdCxyKXtyZXR1cm4gQ24odCxmdW5jdGlvbihzLGEpe3ImJnR5cGVvZiBzPT0iZnVuY3Rpb24iP2VbYV09V28ocyxyKTplW2FdPXN9KSxlfWZ1bmN0aW9uIGZpKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGU9ZS5zbGljZSgxKSksZX1mdW5jdGlvbiBkaShlLHQscixuKXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLG4pLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsciYmT2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSxyKX1mdW5jdGlvbiBoaShlLHQscil7dmFyIG4scyxhLG89e307dD10fHx7fTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxzPW4ubGVuZ3RoO3MtLSA+MDspYT1uW3NdLG9bYV18fCh0W2FdPWVbYV0sb1thXT0hMCk7ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9d2hpbGUoZSYmKCFyfHxyKGUsdCkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcGkoZSx0LHIpe2U9U3RyaW5nKGUpLChyPT09dm9pZCAwfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpLHItPXQubGVuZ3RoO3ZhciBuPWUuaW5kZXhPZih0LHIpO3JldHVybiBuIT09LTEmJm49PT1yfWZ1bmN0aW9uIG1pKGUpe2lmKCFlKXJldHVybiBudWxsO3ZhciB0PWUubGVuZ3RoO2lmKEdyKHQpKXJldHVybiBudWxsO2Zvcih2YXIgcj1uZXcgQXJyYXkodCk7dC0tID4wOylyW3RdPWVbdF07cmV0dXJuIHJ9dmFyIHZpPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSYmdCBpbnN0YW5jZW9mIGV9fSh0eXBlb2YgVWludDhBcnJheSE9InVuZGVmaW5lZCImJk9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSksUGU9e2lzQXJyYXk6VG4saXNBcnJheUJ1ZmZlcjpUcyxpc0J1ZmZlcjpYbyxpc0Zvcm1EYXRhOm9pLGlzQXJyYXlCdWZmZXJWaWV3OlpvLGlzU3RyaW5nOnhvLGlzTnVtYmVyOmVpLGlzT2JqZWN0OkFzLGlzUGxhaW5PYmplY3Q6UXIsaXNVbmRlZmluZWQ6R3IsaXNEYXRlOnRpLGlzRmlsZTpyaSxpc0Jsb2I6bmksaXNGdW5jdGlvbjpBbixpc1N0cmVhbTphaSxpc1VSTFNlYXJjaFBhcmFtczppaSxpc1N0YW5kYXJkQnJvd3NlckVudjp1aSxmb3JFYWNoOkNuLG1lcmdlOkluLGV4dGVuZDpsaSx0cmltOmNpLHN0cmlwQk9NOmZpLGluaGVyaXRzOmRpLHRvRmxhdE9iamVjdDpoaSxraW5kT2Y6UG4sa2luZE9mVGVzdDpBdCxlbmRzV2l0aDpwaSx0b0FycmF5Om1pLGlzVHlwZWRBcnJheTp2aSxpc0ZpbGVMaXN0OnNpfSxZdD1QZTtmdW5jdGlvbiBDcyhlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgSXM9ZnVuY3Rpb24odCxyLG4pe2lmKCFyKXJldHVybiB0O3ZhciBzO2lmKG4pcz1uKHIpO2Vsc2UgaWYoWXQuaXNVUkxTZWFyY2hQYXJhbXMocikpcz1yLnRvU3RyaW5nKCk7ZWxzZXt2YXIgYT1bXTtZdC5mb3JFYWNoKHIsZnVuY3Rpb24oZixwKXtmPT09bnVsbHx8dHlwZW9mIGY9PSJ1bmRlZmluZWQifHwoWXQuaXNBcnJheShmKT9wPXArIltdIjpmPVtmXSxZdC5mb3JFYWNoKGYsZnVuY3Rpb24oaCl7WXQuaXNEYXRlKGgpP2g9aC50b0lTT1N0cmluZygpOll0LmlzT2JqZWN0KGgpJiYoaD1KU09OLnN0cmluZ2lmeShoKSksYS5wdXNoKENzKHApKyI9IitDcyhoKSl9KSl9KSxzPWEuam9pbigiJiIpfWlmKHMpe3ZhciBvPXQuaW5kZXhPZigiIyIpO28hPT0tMSYmKHQ9dC5zbGljZSgwLG8pKSx0Kz0odC5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStzfXJldHVybiB0fSxfaT1QZTtmdW5jdGlvbiBZcigpe3RoaXMuaGFuZGxlcnM9W119WXIucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6cixzeW5jaHJvbm91czpuP24uc3luY2hyb25vdXM6ITEscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sWXIucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfSxZci5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXtfaS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24obil7biE9PW51bGwmJnQobil9KX07dmFyIGdpPVlyLEVpPVBlLHlpPWZ1bmN0aW9uKHQscil7RWkuZm9yRWFjaCh0LGZ1bmN0aW9uKHMsYSl7YSE9PXImJmEudG9VcHBlckNhc2UoKT09PXIudG9VcHBlckNhc2UoKSYmKHRbcl09cyxkZWxldGUgdFthXSl9KX0sRHM9UGU7ZnVuY3Rpb24gV3QoZSx0LHIsbixzKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT1lLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxyJiYodGhpcy5jb25maWc9ciksbiYmKHRoaXMucmVxdWVzdD1uKSxzJiYodGhpcy5yZXNwb25zZT1zKX1Ecy5pbmhlcml0cyhXdCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIganM9V3QucHJvdG90eXBlLGtzPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCJdLmZvckVhY2goZnVuY3Rpb24oZSl7a3NbZV09e3ZhbHVlOmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV3Qsa3MpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqcywiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxXdC5mcm9tPWZ1bmN0aW9uKGUsdCxyLG4scyxhKXt2YXIgbz1PYmplY3QuY3JlYXRlKGpzKTtyZXR1cm4gRHMudG9GbGF0T2JqZWN0KGUsbyxmdW5jdGlvbihmKXtyZXR1cm4gZiE9PUVycm9yLnByb3RvdHlwZX0pLFd0LmNhbGwobyxlLm1lc3NhZ2UsdCxyLG4scyksby5uYW1lPWUubmFtZSxhJiZPYmplY3QuYXNzaWduKG8sYSksb307dmFyIFh0PVd0LFVzPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxHZT1QZTtmdW5jdGlvbiAkaShlLHQpe3Q9dHx8bmV3IEZvcm1EYXRhO3ZhciByPVtdO2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGE9PT1udWxsPyIiOkdlLmlzRGF0ZShhKT9hLnRvSVNPU3RyaW5nKCk6R2UuaXNBcnJheUJ1ZmZlcihhKXx8R2UuaXNUeXBlZEFycmF5KGEpP3R5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFthXSk6QnVmZmVyLmZyb20oYSk6YX1mdW5jdGlvbiBzKGEsbyl7aWYoR2UuaXNQbGFpbk9iamVjdChhKXx8R2UuaXNBcnJheShhKSl7aWYoci5pbmRleE9mKGEpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK28pO3IucHVzaChhKSxHZS5mb3JFYWNoKGEsZnVuY3Rpb24oZixwKXtpZighR2UuaXNVbmRlZmluZWQoZikpe3ZhciBpPW8/bysiLiIrcDpwLGg7aWYoZiYmIW8mJnR5cGVvZiBmPT0ib2JqZWN0Iil7aWYoR2UuZW5kc1dpdGgocCwie30iKSlmPUpTT04uc3RyaW5naWZ5KGYpO2Vsc2UgaWYoR2UuZW5kc1dpdGgocCwiW10iKSYmKGg9R2UudG9BcnJheShmKSkpe2guZm9yRWFjaChmdW5jdGlvbihFKXshR2UuaXNVbmRlZmluZWQoRSkmJnQuYXBwZW5kKGksbihFKSl9KTtyZXR1cm59fXMoZixpKX19KSxyLnBvcCgpfWVsc2UgdC5hcHBlbmQobyxuKGEpKX1yZXR1cm4gcyhlKSx0fXZhciBGcz0kaSxEbj1YdCx3aT1mdW5jdGlvbih0LHIsbil7dmFyIHM9bi5jb25maWcudmFsaWRhdGVTdGF0dXM7IW4uc3RhdHVzfHwhc3x8cyhuLnN0YXR1cyk/dChuKTpyKG5ldyBEbigiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLFtEbi5FUlJfQkFEX1JFUVVFU1QsRG4uRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihuLnN0YXR1cy8xMDApLTRdLG4uY29uZmlnLG4ucmVxdWVzdCxuKSl9LFdyPVBlLFNpPVdyLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLHMsYSxvLGwpe3ZhciBmPVtdO2YucHVzaChyKyI9IitlbmNvZGVVUklDb21wb25lbnQobikpLFdyLmlzTnVtYmVyKHMpJiZmLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShzKS50b0dNVFN0cmluZygpKSxXci5pc1N0cmluZyhhKSYmZi5wdXNoKCJwYXRoPSIrYSksV3IuaXNTdHJpbmcobykmJmYucHVzaCgiZG9tYWluPSIrbyksbD09PSEwJiZmLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1mLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24ocil7dmFyIG49ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK3IrIik9KFteO10qKSIpKTtyZXR1cm4gbj9kZWNvZGVVUklDb21wb25lbnQoblszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKHIpe3RoaXMud3JpdGUociwiIixEYXRlLm5vdygpLTg2NGU1KX19fSgpOmZ1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSgpLFJpPWZ1bmN0aW9uKHQpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QodCl9LGJpPWZ1bmN0aW9uKHQscil7cmV0dXJuIHI/dC5yZXBsYWNlKC9cLyskLywiIikrIi8iK3IucmVwbGFjZSgvXlwvKy8sIiIpOnR9LE9pPVJpLE5pPWJpLE1zPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJiFPaShyKT9OaSh0LHIpOnJ9LGpuPVBlLFBpPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sVGk9ZnVuY3Rpb24odCl7dmFyIHI9e30sbixzLGE7cmV0dXJuIHQmJmpuLmZvckVhY2godC5zcGxpdChgCmApLGZ1bmN0aW9uKGwpe2lmKGE9bC5pbmRleE9mKCI6Iiksbj1qbi50cmltKGwuc3Vic3RyKDAsYSkpLnRvTG93ZXJDYXNlKCkscz1qbi50cmltKGwuc3Vic3RyKGErMSkpLG4pe2lmKHJbbl0mJlBpLmluZGV4T2Yobik+PTApcmV0dXJuO249PT0ic2V0LWNvb2tpZSI/cltuXT0ocltuXT9yW25dOltdKS5jb25jYXQoW3NdKTpyW25dPXJbbl0/cltuXSsiLCAiK3M6c319KSxyfSxMcz1QZSxBaT1Mcy5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxuO2Z1bmN0aW9uIHMoYSl7dmFyIG89YTtyZXR1cm4gdCYmKHIuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPXIuaHJlZiksci5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOnIuaHJlZixwcm90b2NvbDpyLnByb3RvY29sP3IucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnIuaG9zdCxzZWFyY2g6ci5zZWFyY2g/ci5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpyLmhhc2g/ci5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ci5ob3N0bmFtZSxwb3J0OnIucG9ydCxwYXRobmFtZTpyLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9yLnBhdGhuYW1lOiIvIityLnBhdGhuYW1lfX1yZXR1cm4gbj1zKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXt2YXIgbD1Mcy5pc1N0cmluZyhvKT9zKG8pOm87cmV0dXJuIGwucHJvdG9jb2w9PT1uLnByb3RvY29sJiZsLmhvc3Q9PT1uLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpLGtuPVh0LENpPVBlO2Z1bmN0aW9uIFZzKGUpe2tuLmNhbGwodGhpcyxlPT1udWxsPyJjYW5jZWxlZCI6ZSxrbi5FUlJfQ0FOQ0VMRUQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Q2kuaW5oZXJpdHMoVnMsa24se19fQ0FOQ0VMX186ITB9KTt2YXIgWHI9VnMsSWk9ZnVuY3Rpb24odCl7dmFyIHI9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWModCk7cmV0dXJuIHImJnJbMV18fCIifSxncj1QZSxEaT13aSxqaT1TaSxraT1JcyxVaT1NcyxGaT1UaSxNaT1BaSxMaT1Vcyx1dD1YdCxWaT1Ycix6aT1JaSx6cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixzKXt2YXIgYT10LmRhdGEsbz10LmhlYWRlcnMsbD10LnJlc3BvbnNlVHlwZSxmO2Z1bmN0aW9uIHAoKXt0LmNhbmNlbFRva2VuJiZ0LmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLHQuc2lnbmFsJiZ0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9Z3IuaXNGb3JtRGF0YShhKSYmZ3IuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZih0LmF1dGgpe3ZhciBoPXQuYXV0aC51c2VybmFtZXx8IiIsRT10LmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHQuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKGgrIjoiK0UpfXZhciBUPVVpKHQuYmFzZVVSTCx0LnVybCk7aS5vcGVuKHQubWV0aG9kLnRvVXBwZXJDYXNlKCksa2koVCx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9dC50aW1lb3V0O2Z1bmN0aW9uIEkoKXtpZighIWkpe3ZhciBfPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaT9GaShpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGI9IWx8fGw9PT0idGV4dCJ8fGw9PT0ianNvbiI/aS5yZXNwb25zZVRleHQ6aS5yZXNwb25zZSxPPXtkYXRhOmIsc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Xyxjb25maWc6dCxyZXF1ZXN0Oml9O0RpKGZ1bmN0aW9uKEgpe24oSCkscCgpfSxmdW5jdGlvbihIKXtzKEgpLHAoKX0sTyksaT1udWxsfX1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9STppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoSSl9LGkub25hYm9ydD1mdW5jdGlvbigpeyFpfHwocyhuZXcgdXQoIlJlcXVlc3QgYWJvcnRlZCIsdXQuRUNPTk5BQk9SVEVELHQsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe3MobmV3IHV0KCJOZXR3b3JrIEVycm9yIix1dC5FUlJfTkVUV09SSyx0LGksaSkpLGk9bnVsbH0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgYj10LnRpbWVvdXQ/InRpbWVvdXQgb2YgIit0LnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsTz10LnRyYW5zaXRpb25hbHx8TGk7dC50aW1lb3V0RXJyb3JNZXNzYWdlJiYoYj10LnRpbWVvdXRFcnJvck1lc3NhZ2UpLHMobmV3IHV0KGIsTy5jbGFyaWZ5VGltZW91dEVycm9yP3V0LkVUSU1FRE9VVDp1dC5FQ09OTkFCT1JURUQsdCxpKSksaT1udWxsfSxnci5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgaj0odC53aXRoQ3JlZGVudGlhbHN8fE1pKFQpKSYmdC54c3JmQ29va2llTmFtZT9qaS5yZWFkKHQueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtqJiYob1t0LnhzcmZIZWFkZXJOYW1lXT1qKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZnci5mb3JFYWNoKG8sZnVuY3Rpb24oYixPKXt0eXBlb2YgYT09InVuZGVmaW5lZCImJk8udG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiP2RlbGV0ZSBvW09dOmkuc2V0UmVxdWVzdEhlYWRlcihPLGIpfSksZ3IuaXNVbmRlZmluZWQodC53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISF0LndpdGhDcmVkZW50aWFscyksbCYmbCE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPXQucmVzcG9uc2VUeXBlKSx0eXBlb2YgdC5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHQub25Eb3dubG9hZFByb2dyZXNzKSx0eXBlb2YgdC5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHQub25VcGxvYWRQcm9ncmVzcyksKHQuY2FuY2VsVG9rZW58fHQuc2lnbmFsKSYmKGY9ZnVuY3Rpb24oXyl7IWl8fChzKCFffHxfJiZfLnR5cGU/bmV3IFZpOl8pLGkuYWJvcnQoKSxpPW51bGwpfSx0LmNhbmNlbFRva2VuJiZ0LmNhbmNlbFRva2VuLnN1YnNjcmliZShmKSx0LnNpZ25hbCYmKHQuc2lnbmFsLmFib3J0ZWQ/ZigpOnQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmKSkpLGF8fChhPW51bGwpO3ZhciB5PXppKFQpO2lmKHkmJlsiaHR0cCIsImh0dHBzIiwiZmlsZSJdLmluZGV4T2YoeSk9PT0tMSl7cyhuZXcgdXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIreSsiOiIsdXQuRVJSX0JBRF9SRVFVRVNULHQpKTtyZXR1cm59aS5zZW5kKGEpfSl9LEhpPW51bGwsT2U9UGUsSHM9eWksS3M9WHQsS2k9VXMsQmk9RnMsSmk9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBCcyhlLHQpeyFPZS5pc1VuZGVmaW5lZChlKSYmT2UuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9ZnVuY3Rpb24gcWkoKXt2YXIgZTtyZXR1cm4odHlwZW9mIFhNTEh0dHBSZXF1ZXN0IT0idW5kZWZpbmVkInx8dHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PT0iW29iamVjdCBwcm9jZXNzXSIpJiYoZT16cyksZX1mdW5jdGlvbiBHaShlLHQscil7aWYoT2UuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxPZS50cmltKGUpfWNhdGNoKG4pe2lmKG4ubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgbn1yZXR1cm4ocnx8SlNPTi5zdHJpbmdpZnkpKGUpfXZhciBacj17dHJhbnNpdGlvbmFsOktpLGFkYXB0ZXI6cWkoKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LHIpe2lmKEhzKHIsIkFjY2VwdCIpLEhzKHIsIkNvbnRlbnQtVHlwZSIpLE9lLmlzRm9ybURhdGEodCl8fE9lLmlzQXJyYXlCdWZmZXIodCl8fE9lLmlzQnVmZmVyKHQpfHxPZS5pc1N0cmVhbSh0KXx8T2UuaXNGaWxlKHQpfHxPZS5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoT2UuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKE9lLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBCcyhyLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLHQudG9TdHJpbmcoKTt2YXIgbj1PZS5pc09iamVjdCh0KSxzPXImJnJbIkNvbnRlbnQtVHlwZSJdLGE7aWYoKGE9T2UuaXNGaWxlTGlzdCh0KSl8fG4mJnM9PT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpe3ZhciBvPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gQmkoYT97ImZpbGVzW10iOnR9OnQsbyYmbmV3IG8pfWVsc2UgaWYobnx8cz09PSJhcHBsaWNhdGlvbi9qc29uIilyZXR1cm4gQnMociwiYXBwbGljYXRpb24vanNvbiIpLEdpKHQpO3JldHVybiB0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe3ZhciByPXRoaXMudHJhbnNpdGlvbmFsfHxaci50cmFuc2l0aW9uYWwsbj1yJiZyLnNpbGVudEpTT05QYXJzaW5nLHM9ciYmci5mb3JjZWRKU09OUGFyc2luZyxhPSFuJiZ0aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihhfHxzJiZPZS5pc1N0cmluZyh0KSYmdC5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG8pe2lmKGEpdGhyb3cgby5uYW1lPT09IlN5bnRheEVycm9yIj9Lcy5mcm9tKG8sS3MuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6b31yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6SGl9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtPZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKHQpe1pyLmhlYWRlcnNbdF09e319KSxPZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7WnIuaGVhZGVyc1t0XT1PZS5tZXJnZShKaSl9KTt2YXIgVW49WnIsUWk9UGUsWWk9VW4sV2k9ZnVuY3Rpb24odCxyLG4pe3ZhciBzPXRoaXN8fFlpO3JldHVybiBRaS5mb3JFYWNoKG4sZnVuY3Rpb24obyl7dD1vLmNhbGwocyx0LHIpfSksdH0sSnM9ZnVuY3Rpb24odCl7cmV0dXJuISEodCYmdC5fX0NBTkNFTF9fKX0scXM9UGUsRm49V2ksWGk9SnMsWmk9VW4seGk9WHI7ZnVuY3Rpb24gTW4oZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHhpfXZhciBlYz1mdW5jdGlvbih0KXtNbih0KSx0LmhlYWRlcnM9dC5oZWFkZXJzfHx7fSx0LmRhdGE9Rm4uY2FsbCh0LHQuZGF0YSx0LmhlYWRlcnMsdC50cmFuc2Zvcm1SZXF1ZXN0KSx0LmhlYWRlcnM9cXMubWVyZ2UodC5oZWFkZXJzLmNvbW1vbnx8e30sdC5oZWFkZXJzW3QubWV0aG9kXXx8e30sdC5oZWFkZXJzKSxxcy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLGZ1bmN0aW9uKHMpe2RlbGV0ZSB0LmhlYWRlcnNbc119KTt2YXIgcj10LmFkYXB0ZXJ8fFppLmFkYXB0ZXI7cmV0dXJuIHIodCkudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gTW4odCkscy5kYXRhPUZuLmNhbGwodCxzLmRhdGEscy5oZWFkZXJzLHQudHJhbnNmb3JtUmVzcG9uc2UpLHN9LGZ1bmN0aW9uKHMpe3JldHVybiBYaShzKXx8KE1uKHQpLHMmJnMucmVzcG9uc2UmJihzLnJlc3BvbnNlLmRhdGE9Rm4uY2FsbCh0LHMucmVzcG9uc2UuZGF0YSxzLnJlc3BvbnNlLmhlYWRlcnMsdC50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdChzKX0pfSxVZT1QZSxHcz1mdW5jdGlvbih0LHIpe3I9cnx8e307dmFyIG49e307ZnVuY3Rpb24gcyhpLGgpe3JldHVybiBVZS5pc1BsYWluT2JqZWN0KGkpJiZVZS5pc1BsYWluT2JqZWN0KGgpP1VlLm1lcmdlKGksaCk6VWUuaXNQbGFpbk9iamVjdChoKT9VZS5tZXJnZSh7fSxoKTpVZS5pc0FycmF5KGgpP2guc2xpY2UoKTpofWZ1bmN0aW9uIGEoaSl7aWYoVWUuaXNVbmRlZmluZWQocltpXSkpe2lmKCFVZS5pc1VuZGVmaW5lZCh0W2ldKSlyZXR1cm4gcyh2b2lkIDAsdFtpXSl9ZWxzZSByZXR1cm4gcyh0W2ldLHJbaV0pfWZ1bmN0aW9uIG8oaSl7aWYoIVVlLmlzVW5kZWZpbmVkKHJbaV0pKXJldHVybiBzKHZvaWQgMCxyW2ldKX1mdW5jdGlvbiBsKGkpe2lmKFVlLmlzVW5kZWZpbmVkKHJbaV0pKXtpZighVWUuaXNVbmRlZmluZWQodFtpXSkpcmV0dXJuIHModm9pZCAwLHRbaV0pfWVsc2UgcmV0dXJuIHModm9pZCAwLHJbaV0pfWZ1bmN0aW9uIGYoaSl7aWYoaSBpbiByKXJldHVybiBzKHRbaV0scltpXSk7aWYoaSBpbiB0KXJldHVybiBzKHZvaWQgMCx0W2ldKX12YXIgcD17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6bCx0cmFuc2Zvcm1SZXF1ZXN0OmwsdHJhbnNmb3JtUmVzcG9uc2U6bCxwYXJhbXNTZXJpYWxpemVyOmwsdGltZW91dDpsLHRpbWVvdXRNZXNzYWdlOmwsd2l0aENyZWRlbnRpYWxzOmwsYWRhcHRlcjpsLHJlc3BvbnNlVHlwZTpsLHhzcmZDb29raWVOYW1lOmwseHNyZkhlYWRlck5hbWU6bCxvblVwbG9hZFByb2dyZXNzOmwsb25Eb3dubG9hZFByb2dyZXNzOmwsZGVjb21wcmVzczpsLG1heENvbnRlbnRMZW5ndGg6bCxtYXhCb2R5TGVuZ3RoOmwsYmVmb3JlUmVkaXJlY3Q6bCx0cmFuc3BvcnQ6bCxodHRwQWdlbnQ6bCxodHRwc0FnZW50OmwsY2FuY2VsVG9rZW46bCxzb2NrZXRQYXRoOmwscmVzcG9uc2VFbmNvZGluZzpsLHZhbGlkYXRlU3RhdHVzOmZ9O3JldHVybiBVZS5mb3JFYWNoKE9iamVjdC5rZXlzKHQpLmNvbmNhdChPYmplY3Qua2V5cyhyKSksZnVuY3Rpb24oaCl7dmFyIEU9cFtoXXx8YSxUPUUoaCk7VWUuaXNVbmRlZmluZWQoVCkmJkUhPT1mfHwobltoXT1UKX0pLG59LFFzPXt2ZXJzaW9uOiIwLjI3LjIifSx0Yz1Rcy52ZXJzaW9uLGd0PVh0LExuPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaChmdW5jdGlvbihlLHQpe0xuW2VdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pO3ZhciBZcz17fTtMbi50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxyLG4pe2Z1bmN0aW9uIHMoYSxvKXtyZXR1cm4iW0F4aW9zIHYiK3RjKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrYSsiJyIrbysobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihhLG8sbCl7aWYodD09PSExKXRocm93IG5ldyBndChzKG8sIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLGd0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gciYmIVlzW29dJiYoWXNbb109ITAsY29uc29sZS53YXJuKHMobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrcisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QoYSxvLGwpOiEwfX07ZnVuY3Rpb24gcmMoZSx0LHIpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgZ3QoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGd0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscz1uLmxlbmd0aDtzLS0gPjA7KXt2YXIgYT1uW3NdLG89dFthXTtpZihvKXt2YXIgbD1lW2FdLGY9bD09PXZvaWQgMHx8byhsLGEsZSk7aWYoZiE9PSEwKXRocm93IG5ldyBndCgib3B0aW9uICIrYSsiIG11c3QgYmUgIitmLGd0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihyIT09ITApdGhyb3cgbmV3IGd0KCJVbmtub3duIG9wdGlvbiAiK2EsZ3QuRVJSX0JBRF9PUFRJT04pfX12YXIgbmM9e2Fzc2VydE9wdGlvbnM6cmMsdmFsaWRhdG9yczpMbn0sV3M9UGUsc2M9SXMsWHM9Z2ksWnM9ZWMseHI9R3MsYWM9TXMseHM9bmMsWnQ9eHMudmFsaWRhdG9ycztmdW5jdGlvbiB4dChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IFhzLHJlc3BvbnNlOm5ldyBYc319eHQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odCxyKXt0eXBlb2YgdD09InN0cmluZyI/KHI9cnx8e30sci51cmw9dCk6cj10fHx7fSxyPXhyKHRoaXMuZGVmYXVsdHMsciksci5tZXRob2Q/ci5tZXRob2Q9ci5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9yLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnIubWV0aG9kPSJnZXQiO3ZhciBuPXIudHJhbnNpdGlvbmFsO24hPT12b2lkIDAmJnhzLmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6WnQudHJhbnNpdGlvbmFsKFp0LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlp0LnRyYW5zaXRpb25hbChadC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlp0LnRyYW5zaXRpb25hbChadC5ib29sZWFuKX0sITEpO3ZhciBzPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKFQpe3R5cGVvZiBULnJ1bldoZW49PSJmdW5jdGlvbiImJlQucnVuV2hlbihyKT09PSExfHwoYT1hJiZULnN5bmNocm9ub3VzLHMudW5zaGlmdChULmZ1bGZpbGxlZCxULnJlamVjdGVkKSl9KTt2YXIgbz1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKFQpe28ucHVzaChULmZ1bGZpbGxlZCxULnJlamVjdGVkKX0pO3ZhciBsO2lmKCFhKXt2YXIgZj1bWnMsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoZixzKSxmPWYuY29uY2F0KG8pLGw9UHJvbWlzZS5yZXNvbHZlKHIpO2YubGVuZ3RoOylsPWwudGhlbihmLnNoaWZ0KCksZi5zaGlmdCgpKTtyZXR1cm4gbH1mb3IodmFyIHA9cjtzLmxlbmd0aDspe3ZhciBpPXMuc2hpZnQoKSxoPXMuc2hpZnQoKTt0cnl7cD1pKHApfWNhdGNoKEUpe2goRSk7YnJlYWt9fXRyeXtsPVpzKHApfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoO28ubGVuZ3RoOylsPWwudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gbH0seHQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbih0KXt0PXhyKHRoaXMuZGVmYXVsdHMsdCk7dmFyIHI9YWModC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gc2Mocix0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfSxXcy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXt4dC5wcm90b3R5cGVbdF09ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHhyKG58fHt9LHttZXRob2Q6dCx1cmw6cixkYXRhOihufHx7fSkuZGF0YX0pKX19KSxXcy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZnVuY3Rpb24oYSxvLGwpe3JldHVybiB0aGlzLnJlcXVlc3QoeHIobHx8e30se21ldGhvZDp0LGhlYWRlcnM6bj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6YSxkYXRhOm99KSl9fXh0LnByb3RvdHlwZVt0XT1yKCkseHQucHJvdG90eXBlW3QrIkZvcm0iXT1yKCEwKX0pO3ZhciBvYz14dCxpYz1YcjtmdW5jdGlvbiBlcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpe3Q9c30pO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24obil7aWYoISFyLl9saXN0ZW5lcnMpe3ZhciBzLGE9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3Iocz0wO3M8YTtzKyspci5fbGlzdGVuZXJzW3NdKG4pO3IuX2xpc3RlbmVycz1udWxsfX0pLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKG4pe3ZhciBzLGE9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ci5zdWJzY3JpYmUobykscz1vfSkudGhlbihuKTtyZXR1cm4gYS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKHMpfSxhfSxlKGZ1bmN0aW9uKHMpe3IucmVhc29ufHwoci5yZWFzb249bmV3IGljKHMpLHQoci5yZWFzb24pKX0pfWVyLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGVyLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX0sZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe2lmKCEhdGhpcy5fbGlzdGVuZXJzKXt2YXIgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX19LGVyLnNvdXJjZT1mdW5jdGlvbigpe3ZhciB0LHI9bmV3IGVyKGZ1bmN0aW9uKHMpe3Q9c30pO3JldHVybnt0b2tlbjpyLGNhbmNlbDp0fX07dmFyIGNjPWVyLHVjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShudWxsLG4pfX0sbGM9UGUsZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGxjLmlzT2JqZWN0KHQpJiZ0LmlzQXhpb3NFcnJvcj09PSEwfSxlYT1QZSxkYz1Qcyxlbj1vYyxoYz1HcyxwYz1VbjtmdW5jdGlvbiB0YShlKXt2YXIgdD1uZXcgZW4oZSkscj1kYyhlbi5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gZWEuZXh0ZW5kKHIsZW4ucHJvdG90eXBlLHQpLGVhLmV4dGVuZChyLHQpLHIuY3JlYXRlPWZ1bmN0aW9uKHMpe3JldHVybiB0YShoYyhlLHMpKX0scn12YXIgRGU9dGEocGMpO0RlLkF4aW9zPWVuLERlLkNhbmNlbGVkRXJyb3I9WHIsRGUuQ2FuY2VsVG9rZW49Y2MsRGUuaXNDYW5jZWw9SnMsRGUuVkVSU0lPTj1Rcy52ZXJzaW9uLERlLnRvRm9ybURhdGE9RnMsRGUuQXhpb3NFcnJvcj1YdCxEZS5DYW5jZWw9RGUuQ2FuY2VsZWRFcnJvcixEZS5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfSxEZS5zcHJlYWQ9dWMsRGUuaXNBeGlvc0Vycm9yPWZjLE9uLmV4cG9ydHM9RGUsT24uZXhwb3J0cy5kZWZhdWx0PURlO3ZhciBWbj1Pbi5leHBvcnRzLEN0PXt9LHRuPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0biwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdG4uR2V0RXJyb3JQYXlsb2FkPXZvaWQgMDtmdW5jdGlvbiBtYyhlLHQ9bnVsbCl7cmV0dXJue2Vycm9yOmUuY29kZSxlcnJvcl9kZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLHRpbWVzdGFtcDpEYXRlLm5vdygpLGRldGFpbHM6dH19dG4uR2V0RXJyb3JQYXlsb2FkPW1jO3ZhciBybj17fSxJdD17fSx6bj17ZXhwb3J0czp7fX0scmE9e30sV2U9e30sdHI9e30sRXI9e30sdWU9e30seXI9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnJlZ2V4cENvZGU9ZS5nZXRFc21FeHBvcnROYW1lPWUuZ2V0UHJvcGVydHk9ZS5zYWZlU3RyaW5naWZ5PWUuc3RyaW5naWZ5PWUuc3RyQ29uY2F0PWUuYWRkQ29kZUFyZz1lLnN0cj1lLl89ZS5uaWw9ZS5fQ29kZT1lLk5hbWU9ZS5JREVOVElGSUVSPWUuX0NvZGVPck5hbWU9dm9pZCAwO2NsYXNzIHR7fWUuX0NvZGVPck5hbWU9dCxlLklERU5USUZJRVI9L15bYS16JF9dW2EteiRfMC05XSokL2k7Y2xhc3MgciBleHRlbmRzIHR7Y29uc3RydWN0b3IoYil7aWYoc3VwZXIoKSwhZS5JREVOVElGSUVSLnRlc3QoYikpdGhyb3cgbmV3IEVycm9yKCJDb2RlR2VuOiBuYW1lIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyIik7dGhpcy5zdHI9Yn10b1N0cmluZygpe3JldHVybiB0aGlzLnN0cn1lbXB0eVN0cigpe3JldHVybiExfWdldCBuYW1lcygpe3JldHVybntbdGhpcy5zdHJdOjF9fX1lLk5hbWU9cjtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3RvcihiKXtzdXBlcigpLHRoaXMuX2l0ZW1zPXR5cGVvZiBiPT0ic3RyaW5nIj9bYl06Yn10b1N0cmluZygpe3JldHVybiB0aGlzLnN0cn1lbXB0eVN0cigpe2lmKHRoaXMuX2l0ZW1zLmxlbmd0aD4xKXJldHVybiExO2NvbnN0IGI9dGhpcy5faXRlbXNbMF07cmV0dXJuIGI9PT0iInx8Yj09PSciIid9Z2V0IHN0cigpe3ZhciBiO3JldHVybihiPXRoaXMuX3N0cikhPT1udWxsJiZiIT09dm9pZCAwP2I6dGhpcy5fc3RyPXRoaXMuX2l0ZW1zLnJlZHVjZSgoTyxBKT0+YCR7T30ke0F9YCwiIil9Z2V0IG5hbWVzKCl7dmFyIGI7cmV0dXJuKGI9dGhpcy5fbmFtZXMpIT09bnVsbCYmYiE9PXZvaWQgMD9iOnRoaXMuX25hbWVzPXRoaXMuX2l0ZW1zLnJlZHVjZSgoTyxBKT0+KEEgaW5zdGFuY2VvZiByJiYoT1tBLnN0cl09KE9bQS5zdHJdfHwwKSsxKSxPKSx7fSl9fWUuX0NvZGU9bixlLm5pbD1uZXcgbigiIik7ZnVuY3Rpb24gcyhfLC4uLmIpe2NvbnN0IE89W19bMF1dO2xldCBBPTA7Zm9yKDtBPGIubGVuZ3RoOylsKE8sYltBXSksTy5wdXNoKF9bKytBXSk7cmV0dXJuIG5ldyBuKE8pfWUuXz1zO2NvbnN0IGE9bmV3IG4oIisiKTtmdW5jdGlvbiBvKF8sLi4uYil7Y29uc3QgTz1bVChfWzBdKV07bGV0IEE9MDtmb3IoO0E8Yi5sZW5ndGg7KU8ucHVzaChhKSxsKE8sYltBXSksTy5wdXNoKGEsVChfWysrQV0pKTtyZXR1cm4gZihPKSxuZXcgbihPKX1lLnN0cj1vO2Z1bmN0aW9uIGwoXyxiKXtiIGluc3RhbmNlb2Ygbj9fLnB1c2goLi4uYi5faXRlbXMpOmIgaW5zdGFuY2VvZiByP18ucHVzaChiKTpfLnB1c2goaChiKSl9ZS5hZGRDb2RlQXJnPWw7ZnVuY3Rpb24gZihfKXtsZXQgYj0xO2Zvcig7YjxfLmxlbmd0aC0xOyl7aWYoX1tiXT09PWEpe2NvbnN0IE89cChfW2ItMV0sX1tiKzFdKTtpZihPIT09dm9pZCAwKXtfLnNwbGljZShiLTEsMyxPKTtjb250aW51ZX1fW2IrK109IisifWIrK319ZnVuY3Rpb24gcChfLGIpe2lmKGI9PT0nIiInKXJldHVybiBfO2lmKF89PT0nIiInKXJldHVybiBiO2lmKHR5cGVvZiBfPT0ic3RyaW5nIilyZXR1cm4gYiBpbnN0YW5jZW9mIHJ8fF9bXy5sZW5ndGgtMV0hPT0nIic/dm9pZCAwOnR5cGVvZiBiIT0ic3RyaW5nIj9gJHtfLnNsaWNlKDAsLTEpfSR7Yn0iYDpiWzBdPT09JyInP18uc2xpY2UoMCwtMSkrYi5zbGljZSgxKTp2b2lkIDA7aWYodHlwZW9mIGI9PSJzdHJpbmciJiZiWzBdPT09JyInJiYhKF8gaW5zdGFuY2VvZiByKSlyZXR1cm5gIiR7X30ke2Iuc2xpY2UoMSl9YH1mdW5jdGlvbiBpKF8sYil7cmV0dXJuIGIuZW1wdHlTdHIoKT9fOl8uZW1wdHlTdHIoKT9iOm9gJHtffSR7Yn1gfWUuc3RyQ29uY2F0PWk7ZnVuY3Rpb24gaChfKXtyZXR1cm4gdHlwZW9mIF89PSJudW1iZXIifHx0eXBlb2YgXz09ImJvb2xlYW4ifHxfPT09bnVsbD9fOlQoQXJyYXkuaXNBcnJheShfKT9fLmpvaW4oIiwiKTpfKX1mdW5jdGlvbiBFKF8pe3JldHVybiBuZXcgbihUKF8pKX1lLnN0cmluZ2lmeT1FO2Z1bmN0aW9uIFQoXyl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KF8pLnJlcGxhY2UoL1x1MjAyOC9nLCJcXHUyMDI4IikucmVwbGFjZSgvXHUyMDI5L2csIlxcdTIwMjkiKX1lLnNhZmVTdHJpbmdpZnk9VDtmdW5jdGlvbiBJKF8pe3JldHVybiB0eXBlb2YgXz09InN0cmluZyImJmUuSURFTlRJRklFUi50ZXN0KF8pP25ldyBuKGAuJHtffWApOnNgWyR7X31dYH1lLmdldFByb3BlcnR5PUk7ZnVuY3Rpb24gaihfKXtpZih0eXBlb2YgXz09InN0cmluZyImJmUuSURFTlRJRklFUi50ZXN0KF8pKXJldHVybiBuZXcgbihgJHtffWApO3Rocm93IG5ldyBFcnJvcihgQ29kZUdlbjogaW52YWxpZCBleHBvcnQgbmFtZTogJHtffSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKX1lLmdldEVzbUV4cG9ydE5hbWU9ajtmdW5jdGlvbiB5KF8pe3JldHVybiBuZXcgbihfLnRvU3RyaW5nKCkpfWUucmVnZXhwQ29kZT15fSkoeXIpO3ZhciBIbj17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmFsdWVTY29wZT1lLlZhbHVlU2NvcGVOYW1lPWUuU2NvcGU9ZS52YXJLaW5kcz1lLlVzZWRWYWx1ZVN0YXRlPXZvaWQgMDtjb25zdCB0PXlyO2NsYXNzIHIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihwKXtzdXBlcihgQ29kZUdlbjogImNvZGUiIGZvciAke3B9IG5vdCBkZWZpbmVkYCksdGhpcy52YWx1ZT1wLnZhbHVlfX12YXIgbjsoZnVuY3Rpb24oZil7ZltmLlN0YXJ0ZWQ9MF09IlN0YXJ0ZWQiLGZbZi5Db21wbGV0ZWQ9MV09IkNvbXBsZXRlZCJ9KShuPWUuVXNlZFZhbHVlU3RhdGV8fChlLlVzZWRWYWx1ZVN0YXRlPXt9KSksZS52YXJLaW5kcz17Y29uc3Q6bmV3IHQuTmFtZSgiY29uc3QiKSxsZXQ6bmV3IHQuTmFtZSgibGV0IiksdmFyOm5ldyB0Lk5hbWUoInZhciIpfTtjbGFzcyBze2NvbnN0cnVjdG9yKHtwcmVmaXhlczpwLHBhcmVudDppfT17fSl7dGhpcy5fbmFtZXM9e30sdGhpcy5fcHJlZml4ZXM9cCx0aGlzLl9wYXJlbnQ9aX10b05hbWUocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB0Lk5hbWU/cDp0aGlzLm5hbWUocCl9bmFtZShwKXtyZXR1cm4gbmV3IHQuTmFtZSh0aGlzLl9uZXdOYW1lKHApKX1fbmV3TmFtZShwKXtjb25zdCBpPXRoaXMuX25hbWVzW3BdfHx0aGlzLl9uYW1lR3JvdXAocCk7cmV0dXJuYCR7cH0ke2kuaW5kZXgrK31gfV9uYW1lR3JvdXAocCl7dmFyIGksaDtpZigoKGg9KGk9dGhpcy5fcGFyZW50KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuX3ByZWZpeGVzKT09PW51bGx8fGg9PT12b2lkIDA/dm9pZCAwOmguaGFzKHApKXx8dGhpcy5fcHJlZml4ZXMmJiF0aGlzLl9wcmVmaXhlcy5oYXMocCkpdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggIiR7cH0iIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc2NvcGVgKTtyZXR1cm4gdGhpcy5fbmFtZXNbcF09e3ByZWZpeDpwLGluZGV4OjB9fX1lLlNjb3BlPXM7Y2xhc3MgYSBleHRlbmRzIHQuTmFtZXtjb25zdHJ1Y3RvcihwLGkpe3N1cGVyKGkpLHRoaXMucHJlZml4PXB9c2V0VmFsdWUocCx7cHJvcGVydHk6aSxpdGVtSW5kZXg6aH0pe3RoaXMudmFsdWU9cCx0aGlzLnNjb3BlUGF0aD0oMCx0Ll8pYC4ke25ldyB0Lk5hbWUoaSl9WyR7aH1dYH19ZS5WYWx1ZVNjb3BlTmFtZT1hO2NvbnN0IG89KDAsdC5fKWBcbmA7Y2xhc3MgbCBleHRlbmRzIHN7Y29uc3RydWN0b3IocCl7c3VwZXIocCksdGhpcy5fdmFsdWVzPXt9LHRoaXMuX3Njb3BlPXAuc2NvcGUsdGhpcy5vcHRzPWxlKFEoe30scCkse19uOnAubGluZXM/bzp0Lm5pbH0pfWdldCgpe3JldHVybiB0aGlzLl9zY29wZX1uYW1lKHApe3JldHVybiBuZXcgYShwLHRoaXMuX25ld05hbWUocCkpfXZhbHVlKHAsaSl7dmFyIGg7aWYoaS5yZWY9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWUiKTtjb25zdCBFPXRoaXMudG9OYW1lKHApLHtwcmVmaXg6VH09RSxJPShoPWkua2V5KSE9PW51bGwmJmghPT12b2lkIDA/aDppLnJlZjtsZXQgaj10aGlzLl92YWx1ZXNbVF07aWYoail7Y29uc3QgYj1qLmdldChJKTtpZihiKXJldHVybiBifWVsc2Ugaj10aGlzLl92YWx1ZXNbVF09bmV3IE1hcDtqLnNldChJLEUpO2NvbnN0IHk9dGhpcy5fc2NvcGVbVF18fCh0aGlzLl9zY29wZVtUXT1bXSksXz15Lmxlbmd0aDtyZXR1cm4geVtfXT1pLnJlZixFLnNldFZhbHVlKGkse3Byb3BlcnR5OlQsaXRlbUluZGV4Ol99KSxFfWdldFZhbHVlKHAsaSl7Y29uc3QgaD10aGlzLl92YWx1ZXNbcF07aWYoISFoKXJldHVybiBoLmdldChpKX1zY29wZVJlZnMocCxpPXRoaXMuX3ZhbHVlcyl7cmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyhpLGg9PntpZihoLnNjb3BlUGF0aD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgIiR7aH0iIGhhcyBubyB2YWx1ZWApO3JldHVybigwLHQuXylgJHtwfSR7aC5zY29wZVBhdGh9YH0pfXNjb3BlQ29kZShwPXRoaXMuX3ZhbHVlcyxpLGgpe3JldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXMocCxFPT57aWYoRS52YWx1ZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgIiR7RX0iIGhhcyBubyB2YWx1ZWApO3JldHVybiBFLnZhbHVlLmNvZGV9LGksaCl9X3JlZHVjZVZhbHVlcyhwLGksaD17fSxFKXtsZXQgVD10Lm5pbDtmb3IoY29uc3QgSSBpbiBwKXtjb25zdCBqPXBbSV07aWYoIWopY29udGludWU7Y29uc3QgeT1oW0ldPWhbSV18fG5ldyBNYXA7ai5mb3JFYWNoKF89PntpZih5LmhhcyhfKSlyZXR1cm47eS5zZXQoXyxuLlN0YXJ0ZWQpO2xldCBiPWkoXyk7aWYoYil7Y29uc3QgTz10aGlzLm9wdHMuZXM1P2UudmFyS2luZHMudmFyOmUudmFyS2luZHMuY29uc3Q7VD0oMCx0Ll8pYCR7VH0ke099ICR7X30gPSAke2J9OyR7dGhpcy5vcHRzLl9ufWB9ZWxzZSBpZihiPUU9PW51bGw/dm9pZCAwOkUoXykpVD0oMCx0Ll8pYCR7VH0ke2J9JHt0aGlzLm9wdHMuX259YDtlbHNlIHRocm93IG5ldyByKF8pO3kuc2V0KF8sbi5Db21wbGV0ZWQpfSl9cmV0dXJuIFR9fWUuVmFsdWVTY29wZT1sfSkoSG4pLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLm9yPWUuYW5kPWUubm90PWUuQ29kZUdlbj1lLm9wZXJhdG9ycz1lLnZhcktpbmRzPWUuVmFsdWVTY29wZU5hbWU9ZS5WYWx1ZVNjb3BlPWUuU2NvcGU9ZS5OYW1lPWUucmVnZXhwQ29kZT1lLnN0cmluZ2lmeT1lLmdldFByb3BlcnR5PWUubmlsPWUuc3RyQ29uY2F0PWUuc3RyPWUuXz12b2lkIDA7Y29uc3QgdD15cixyPUhuO3ZhciBuPXlyO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ffX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdHIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLnN0cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RyQ29uY2F0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5zdHJDb25jYXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5pbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubmlsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRQcm9wZXJ0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0UHJvcGVydHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN0cmluZ2lmeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc3RyaW5naWZ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZWdleHBDb2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZWdleHBDb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5OYW1lfX0pO3ZhciBzPUhuO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuU2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlZhbHVlU2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlZhbHVlU2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlZhbHVlU2NvcGVOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5WYWx1ZVNjb3BlTmFtZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFyS2luZHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnZhcktpbmRzfX0pLGUub3BlcmF0b3JzPXtHVDpuZXcgdC5fQ29kZSgiPiIpLEdURTpuZXcgdC5fQ29kZSgiPj0iKSxMVDpuZXcgdC5fQ29kZSgiPCIpLExURTpuZXcgdC5fQ29kZSgiPD0iKSxFUTpuZXcgdC5fQ29kZSgiPT09IiksTkVROm5ldyB0Ll9Db2RlKCIhPT0iKSxOT1Q6bmV3IHQuX0NvZGUoIiEiKSxPUjpuZXcgdC5fQ29kZSgifHwiKSxBTkQ6bmV3IHQuX0NvZGUoIiYmIiksQUREOm5ldyB0Ll9Db2RlKCIrIil9O2NsYXNzIGF7b3B0aW1pemVOb2Rlcygpe3JldHVybiB0aGlzfW9wdGltaXplTmFtZXMoYyxtKXtyZXR1cm4gdGhpc319Y2xhc3MgbyBleHRlbmRzIGF7Y29uc3RydWN0b3IoYyxtLFApe3N1cGVyKCksdGhpcy52YXJLaW5kPWMsdGhpcy5uYW1lPW0sdGhpcy5yaHM9UH1yZW5kZXIoe2VzNTpjLF9uOm19KXtjb25zdCBQPWM/ci52YXJLaW5kcy52YXI6dGhpcy52YXJLaW5kLFU9dGhpcy5yaHM9PT12b2lkIDA/IiI6YCA9ICR7dGhpcy5yaHN9YDtyZXR1cm5gJHtQfSAke3RoaXMubmFtZX0ke1V9O2ArbX1vcHRpbWl6ZU5hbWVzKGMsbSl7aWYoISFjW3RoaXMubmFtZS5zdHJdKXJldHVybiB0aGlzLnJocyYmKHRoaXMucmhzPVgodGhpcy5yaHMsYyxtKSksdGhpc31nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiB0Ll9Db2RlT3JOYW1lP3RoaXMucmhzLm5hbWVzOnt9fX1jbGFzcyBsIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihjLG0sUCl7c3VwZXIoKSx0aGlzLmxocz1jLHRoaXMucmhzPW0sdGhpcy5zaWRlRWZmZWN0cz1QfXJlbmRlcih7X246Y30pe3JldHVybmAke3RoaXMubGhzfSA9ICR7dGhpcy5yaHN9O2ArY31vcHRpbWl6ZU5hbWVzKGMsbSl7aWYoISh0aGlzLmxocyBpbnN0YW5jZW9mIHQuTmFtZSYmIWNbdGhpcy5saHMuc3RyXSYmIXRoaXMuc2lkZUVmZmVjdHMpKXJldHVybiB0aGlzLnJocz1YKHRoaXMucmhzLGMsbSksdGhpc31nZXQgbmFtZXMoKXtjb25zdCBjPXRoaXMubGhzIGluc3RhbmNlb2YgdC5OYW1lP3t9OlEoe30sdGhpcy5saHMubmFtZXMpO3JldHVybiBvZShjLHRoaXMucmhzKX19Y2xhc3MgZiBleHRlbmRzIGx7Y29uc3RydWN0b3IoYyxtLFAsVSl7c3VwZXIoYyxQLFUpLHRoaXMub3A9bX1yZW5kZXIoe19uOmN9KXtyZXR1cm5gJHt0aGlzLmxoc30gJHt0aGlzLm9wfT0gJHt0aGlzLnJoc307YCtjfX1jbGFzcyBwIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMubGFiZWw9Yyx0aGlzLm5hbWVzPXt9fXJlbmRlcih7X246Y30pe3JldHVybmAke3RoaXMubGFiZWx9OmArY319Y2xhc3MgaSBleHRlbmRzIGF7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLmxhYmVsPWMsdGhpcy5uYW1lcz17fX1yZW5kZXIoe19uOmN9KXtyZXR1cm5gYnJlYWske3RoaXMubGFiZWw/YCAke3RoaXMubGFiZWx9YDoiIn07YCtjfX1jbGFzcyBoIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMuZXJyb3I9Y31yZW5kZXIoe19uOmN9KXtyZXR1cm5gdGhyb3cgJHt0aGlzLmVycm9yfTtgK2N9Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMuZXJyb3IubmFtZXN9fWNsYXNzIEUgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKGMpe3N1cGVyKCksdGhpcy5jb2RlPWN9cmVuZGVyKHtfbjpjfSl7cmV0dXJuYCR7dGhpcy5jb2RlfTtgK2N9b3B0aW1pemVOb2Rlcygpe3JldHVybmAke3RoaXMuY29kZX1gP3RoaXM6dm9pZCAwfW9wdGltaXplTmFtZXMoYyxtKXtyZXR1cm4gdGhpcy5jb2RlPVgodGhpcy5jb2RlLGMsbSksdGhpc31nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgdC5fQ29kZU9yTmFtZT90aGlzLmNvZGUubmFtZXM6e319fWNsYXNzIFQgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKGM9W10pe3N1cGVyKCksdGhpcy5ub2Rlcz1jfXJlbmRlcihjKXtyZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKG0sUCk9Pm0rUC5yZW5kZXIoYyksIiIpfW9wdGltaXplTm9kZXMoKXtjb25zdHtub2RlczpjfT10aGlzO2xldCBtPWMubGVuZ3RoO2Zvcig7bS0tOyl7Y29uc3QgUD1jW21dLm9wdGltaXplTm9kZXMoKTtBcnJheS5pc0FycmF5KFApP2Muc3BsaWNlKG0sMSwuLi5QKTpQP2NbbV09UDpjLnNwbGljZShtLDEpfXJldHVybiBjLmxlbmd0aD4wP3RoaXM6dm9pZCAwfW9wdGltaXplTmFtZXMoYyxtKXtjb25zdHtub2RlczpQfT10aGlzO2xldCBVPVAubGVuZ3RoO2Zvcig7VS0tOyl7Y29uc3QgRj1QW1VdO0Yub3B0aW1pemVOYW1lcyhjLG0pfHwodmUoYyxGLm5hbWVzKSxQLnNwbGljZShVLDEpKX1yZXR1cm4gUC5sZW5ndGg+MD90aGlzOnZvaWQgMH1nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGMsbSk9PlcoYyxtLm5hbWVzKSx7fSl9fWNsYXNzIEkgZXh0ZW5kcyBUe3JlbmRlcihjKXtyZXR1cm4ieyIrYy5fbitzdXBlci5yZW5kZXIoYykrIn0iK2MuX259fWNsYXNzIGogZXh0ZW5kcyBUe31jbGFzcyB5IGV4dGVuZHMgSXt9eS5raW5kPSJlbHNlIjtjbGFzcyBfIGV4dGVuZHMgSXtjb25zdHJ1Y3RvcihjLG0pe3N1cGVyKG0pLHRoaXMuY29uZGl0aW9uPWN9cmVuZGVyKGMpe2xldCBtPWBpZigke3RoaXMuY29uZGl0aW9ufSlgK3N1cGVyLnJlbmRlcihjKTtyZXR1cm4gdGhpcy5lbHNlJiYobSs9ImVsc2UgIit0aGlzLmVsc2UucmVuZGVyKGMpKSxtfW9wdGltaXplTm9kZXMoKXtzdXBlci5vcHRpbWl6ZU5vZGVzKCk7Y29uc3QgYz10aGlzLmNvbmRpdGlvbjtpZihjPT09ITApcmV0dXJuIHRoaXMubm9kZXM7bGV0IG09dGhpcy5lbHNlO2lmKG0pe2NvbnN0IFA9bS5vcHRpbWl6ZU5vZGVzKCk7bT10aGlzLmVsc2U9QXJyYXkuaXNBcnJheShQKT9uZXcgeShQKTpQfWlmKG0pcmV0dXJuIGM9PT0hMT9tIGluc3RhbmNlb2YgXz9tOm0ubm9kZXM6dGhpcy5ub2Rlcy5sZW5ndGg/dGhpczpuZXcgXyhFZShjKSxtIGluc3RhbmNlb2YgXz9bbV06bS5ub2Rlcyk7aWYoIShjPT09ITF8fCF0aGlzLm5vZGVzLmxlbmd0aCkpcmV0dXJuIHRoaXN9b3B0aW1pemVOYW1lcyhjLG0pe3ZhciBQO2lmKHRoaXMuZWxzZT0oUD10aGlzLmVsc2UpPT09bnVsbHx8UD09PXZvaWQgMD92b2lkIDA6UC5vcHRpbWl6ZU5hbWVzKGMsbSksISEoc3VwZXIub3B0aW1pemVOYW1lcyhjLG0pfHx0aGlzLmVsc2UpKXJldHVybiB0aGlzLmNvbmRpdGlvbj1YKHRoaXMuY29uZGl0aW9uLGMsbSksdGhpc31nZXQgbmFtZXMoKXtjb25zdCBjPXN1cGVyLm5hbWVzO3JldHVybiBvZShjLHRoaXMuY29uZGl0aW9uKSx0aGlzLmVsc2UmJlcoYyx0aGlzLmVsc2UubmFtZXMpLGN9fV8ua2luZD0iaWYiO2NsYXNzIGIgZXh0ZW5kcyBJe31iLmtpbmQ9ImZvciI7Y2xhc3MgTyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLml0ZXJhdGlvbj1jfXJlbmRlcihjKXtyZXR1cm5gZm9yKCR7dGhpcy5pdGVyYXRpb259KWArc3VwZXIucmVuZGVyKGMpfW9wdGltaXplTmFtZXMoYyxtKXtpZighIXN1cGVyLm9wdGltaXplTmFtZXMoYyxtKSlyZXR1cm4gdGhpcy5pdGVyYXRpb249WCh0aGlzLml0ZXJhdGlvbixjLG0pLHRoaXN9Z2V0IG5hbWVzKCl7cmV0dXJuIFcoc3VwZXIubmFtZXMsdGhpcy5pdGVyYXRpb24ubmFtZXMpfX1jbGFzcyBBIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihjLG0sUCxVKXtzdXBlcigpLHRoaXMudmFyS2luZD1jLHRoaXMubmFtZT1tLHRoaXMuZnJvbT1QLHRoaXMudG89VX1yZW5kZXIoYyl7Y29uc3QgbT1jLmVzNT9yLnZhcktpbmRzLnZhcjp0aGlzLnZhcktpbmQse25hbWU6UCxmcm9tOlUsdG86Rn09dGhpcztyZXR1cm5gZm9yKCR7bX0gJHtQfT0ke1V9OyAke1B9PCR7Rn07ICR7UH0rKylgK3N1cGVyLnJlbmRlcihjKX1nZXQgbmFtZXMoKXtjb25zdCBjPW9lKHN1cGVyLm5hbWVzLHRoaXMuZnJvbSk7cmV0dXJuIG9lKGMsdGhpcy50byl9fWNsYXNzIEggZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGMsbSxQLFUpe3N1cGVyKCksdGhpcy5sb29wPWMsdGhpcy52YXJLaW5kPW0sdGhpcy5uYW1lPVAsdGhpcy5pdGVyYWJsZT1VfXJlbmRlcihjKXtyZXR1cm5gZm9yKCR7dGhpcy52YXJLaW5kfSAke3RoaXMubmFtZX0gJHt0aGlzLmxvb3B9ICR7dGhpcy5pdGVyYWJsZX0pYCtzdXBlci5yZW5kZXIoYyl9b3B0aW1pemVOYW1lcyhjLG0pe2lmKCEhc3VwZXIub3B0aW1pemVOYW1lcyhjLG0pKXJldHVybiB0aGlzLml0ZXJhYmxlPVgodGhpcy5pdGVyYWJsZSxjLG0pLHRoaXN9Z2V0IG5hbWVzKCl7cmV0dXJuIFcoc3VwZXIubmFtZXMsdGhpcy5pdGVyYWJsZS5uYW1lcyl9fWNsYXNzICQgZXh0ZW5kcyBJe2NvbnN0cnVjdG9yKGMsbSxQKXtzdXBlcigpLHRoaXMubmFtZT1jLHRoaXMuYXJncz1tLHRoaXMuYXN5bmM9UH1yZW5kZXIoYyl7cmV0dXJuYCR7dGhpcy5hc3luYz8iYXN5bmMgIjoiIn1mdW5jdGlvbiAke3RoaXMubmFtZX0oJHt0aGlzLmFyZ3N9KWArc3VwZXIucmVuZGVyKGMpfX0kLmtpbmQ9ImZ1bmMiO2NsYXNzIE4gZXh0ZW5kcyBUe3JlbmRlcihjKXtyZXR1cm4icmV0dXJuICIrc3VwZXIucmVuZGVyKGMpfX1OLmtpbmQ9InJldHVybiI7Y2xhc3MgRCBleHRlbmRzIEl7cmVuZGVyKGMpe2xldCBtPSJ0cnkiK3N1cGVyLnJlbmRlcihjKTtyZXR1cm4gdGhpcy5jYXRjaCYmKG0rPXRoaXMuY2F0Y2gucmVuZGVyKGMpKSx0aGlzLmZpbmFsbHkmJihtKz10aGlzLmZpbmFsbHkucmVuZGVyKGMpKSxtfW9wdGltaXplTm9kZXMoKXt2YXIgYyxtO3JldHVybiBzdXBlci5vcHRpbWl6ZU5vZGVzKCksKGM9dGhpcy5jYXRjaCk9PT1udWxsfHxjPT09dm9pZCAwfHxjLm9wdGltaXplTm9kZXMoKSwobT10aGlzLmZpbmFsbHkpPT09bnVsbHx8bT09PXZvaWQgMHx8bS5vcHRpbWl6ZU5vZGVzKCksdGhpc31vcHRpbWl6ZU5hbWVzKGMsbSl7dmFyIFAsVTtyZXR1cm4gc3VwZXIub3B0aW1pemVOYW1lcyhjLG0pLChQPXRoaXMuY2F0Y2gpPT09bnVsbHx8UD09PXZvaWQgMHx8UC5vcHRpbWl6ZU5hbWVzKGMsbSksKFU9dGhpcy5maW5hbGx5KT09PW51bGx8fFU9PT12b2lkIDB8fFUub3B0aW1pemVOYW1lcyhjLG0pLHRoaXN9Z2V0IG5hbWVzKCl7Y29uc3QgYz1zdXBlci5uYW1lcztyZXR1cm4gdGhpcy5jYXRjaCYmVyhjLHRoaXMuY2F0Y2gubmFtZXMpLHRoaXMuZmluYWxseSYmVyhjLHRoaXMuZmluYWxseS5uYW1lcyksY319Y2xhc3MgQiBleHRlbmRzIEl7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLmVycm9yPWN9cmVuZGVyKGMpe3JldHVybmBjYXRjaCgke3RoaXMuZXJyb3J9KWArc3VwZXIucmVuZGVyKGMpfX1CLmtpbmQ9ImNhdGNoIjtjbGFzcyBHIGV4dGVuZHMgSXtyZW5kZXIoYyl7cmV0dXJuImZpbmFsbHkiK3N1cGVyLnJlbmRlcihjKX19Ry5raW5kPSJmaW5hbGx5IjtjbGFzcyBwZXtjb25zdHJ1Y3RvcihjLG09e30pe3RoaXMuX3ZhbHVlcz17fSx0aGlzLl9ibG9ja1N0YXJ0cz1bXSx0aGlzLl9jb25zdGFudHM9e30sdGhpcy5vcHRzPWxlKFEoe30sbSkse19uOm0ubGluZXM/YApgOiIifSksdGhpcy5fZXh0U2NvcGU9Yyx0aGlzLl9zY29wZT1uZXcgci5TY29wZSh7cGFyZW50OmN9KSx0aGlzLl9ub2Rlcz1bbmV3IGpdfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jvb3QucmVuZGVyKHRoaXMub3B0cyl9bmFtZShjKXtyZXR1cm4gdGhpcy5fc2NvcGUubmFtZShjKX1zY29wZU5hbWUoYyl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUoYyl9c2NvcGVWYWx1ZShjLG0pe2NvbnN0IFA9dGhpcy5fZXh0U2NvcGUudmFsdWUoYyxtKTtyZXR1cm4odGhpcy5fdmFsdWVzW1AucHJlZml4XXx8KHRoaXMuX3ZhbHVlc1tQLnByZWZpeF09bmV3IFNldCkpLmFkZChQKSxQfWdldFNjb3BlVmFsdWUoYyxtKXtyZXR1cm4gdGhpcy5fZXh0U2NvcGUuZ2V0VmFsdWUoYyxtKX1zY29wZVJlZnMoYyl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhjLHRoaXMuX3ZhbHVlcyl9c2NvcGVDb2RlKCl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpfV9kZWYoYyxtLFAsVSl7Y29uc3QgRj10aGlzLl9zY29wZS50b05hbWUobSk7cmV0dXJuIFAhPT12b2lkIDAmJlUmJih0aGlzLl9jb25zdGFudHNbRi5zdHJdPVApLHRoaXMuX2xlYWZOb2RlKG5ldyBvKGMsRixQKSksRn1jb25zdChjLG0sUCl7cmV0dXJuIHRoaXMuX2RlZihyLnZhcktpbmRzLmNvbnN0LGMsbSxQKX1sZXQoYyxtLFApe3JldHVybiB0aGlzLl9kZWYoci52YXJLaW5kcy5sZXQsYyxtLFApfXZhcihjLG0sUCl7cmV0dXJuIHRoaXMuX2RlZihyLnZhcktpbmRzLnZhcixjLG0sUCl9YXNzaWduKGMsbSxQKXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IGwoYyxtLFApKX1hZGQoYyxtKXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IGYoYyxlLm9wZXJhdG9ycy5BREQsbSkpfWNvZGUoYyl7cmV0dXJuIHR5cGVvZiBjPT0iZnVuY3Rpb24iP2MoKTpjIT09dC5uaWwmJnRoaXMuX2xlYWZOb2RlKG5ldyBFKGMpKSx0aGlzfW9iamVjdCguLi5jKXtjb25zdCBtPVsieyJdO2Zvcihjb25zdFtQLFVdb2YgYyltLmxlbmd0aD4xJiZtLnB1c2goIiwiKSxtLnB1c2goUCksKFAhPT1VfHx0aGlzLm9wdHMuZXM1KSYmKG0ucHVzaCgiOiIpLCgwLHQuYWRkQ29kZUFyZykobSxVKSk7cmV0dXJuIG0ucHVzaCgifSIpLG5ldyB0Ll9Db2RlKG0pfWlmKGMsbSxQKXtpZih0aGlzLl9ibG9ja05vZGUobmV3IF8oYykpLG0mJlApdGhpcy5jb2RlKG0pLmVsc2UoKS5jb2RlKFApLmVuZElmKCk7ZWxzZSBpZihtKXRoaXMuY29kZShtKS5lbmRJZigpO2Vsc2UgaWYoUCl0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46ICJlbHNlIiBib2R5IHdpdGhvdXQgInRoZW4iIGJvZHknKTtyZXR1cm4gdGhpc31lbHNlSWYoYyl7cmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBfKGMpKX1lbHNlKCl7cmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyB5KX1lbmRJZigpe3JldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoXyx5KX1fZm9yKGMsbSl7cmV0dXJuIHRoaXMuX2Jsb2NrTm9kZShjKSxtJiZ0aGlzLmNvZGUobSkuZW5kRm9yKCksdGhpc31mb3IoYyxtKXtyZXR1cm4gdGhpcy5fZm9yKG5ldyBPKGMpLG0pfWZvclJhbmdlKGMsbSxQLFUsRj10aGlzLm9wdHMuZXM1P3IudmFyS2luZHMudmFyOnIudmFyS2luZHMubGV0KXtjb25zdCBaPXRoaXMuX3Njb3BlLnRvTmFtZShjKTtyZXR1cm4gdGhpcy5fZm9yKG5ldyBBKEYsWixtLFApLCgpPT5VKFopKX1mb3JPZihjLG0sUCxVPXIudmFyS2luZHMuY29uc3Qpe2NvbnN0IEY9dGhpcy5fc2NvcGUudG9OYW1lKGMpO2lmKHRoaXMub3B0cy5lczUpe2NvbnN0IFo9bSBpbnN0YW5jZW9mIHQuTmFtZT9tOnRoaXMudmFyKCJfYXJyIixtKTtyZXR1cm4gdGhpcy5mb3JSYW5nZSgiX2kiLDAsKDAsdC5fKWAke1p9Lmxlbmd0aGAscmU9Pnt0aGlzLnZhcihGLCgwLHQuXylgJHtafVske3JlfV1gKSxQKEYpfSl9cmV0dXJuIHRoaXMuX2ZvcihuZXcgSCgib2YiLFUsRixtKSwoKT0+UChGKSl9Zm9ySW4oYyxtLFAsVT10aGlzLm9wdHMuZXM1P3IudmFyS2luZHMudmFyOnIudmFyS2luZHMuY29uc3Qpe2lmKHRoaXMub3B0cy5vd25Qcm9wZXJ0aWVzKXJldHVybiB0aGlzLmZvck9mKGMsKDAsdC5fKWBPYmplY3Qua2V5cygke219KWAsUCk7Y29uc3QgRj10aGlzLl9zY29wZS50b05hbWUoYyk7cmV0dXJuIHRoaXMuX2ZvcihuZXcgSCgiaW4iLFUsRixtKSwoKT0+UChGKSl9ZW5kRm9yKCl7cmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShiKX1sYWJlbChjKXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IHAoYykpfWJyZWFrKGMpe3JldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgaShjKSl9cmV0dXJuKGMpe2NvbnN0IG09bmV3IE47aWYodGhpcy5fYmxvY2tOb2RlKG0pLHRoaXMuY29kZShjKSxtLm5vZGVzLmxlbmd0aCE9PTEpdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAicmV0dXJuIiBzaG91bGQgaGF2ZSBvbmUgbm9kZScpO3JldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoTil9dHJ5KGMsbSxQKXtpZighbSYmIVApdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAidHJ5IiB3aXRob3V0ICJjYXRjaCIgYW5kICJmaW5hbGx5IicpO2NvbnN0IFU9bmV3IEQ7aWYodGhpcy5fYmxvY2tOb2RlKFUpLHRoaXMuY29kZShjKSxtKXtjb25zdCBGPXRoaXMubmFtZSgiZSIpO3RoaXMuX2N1cnJOb2RlPVUuY2F0Y2g9bmV3IEIoRiksbShGKX1yZXR1cm4gUCYmKHRoaXMuX2N1cnJOb2RlPVUuZmluYWxseT1uZXcgRyx0aGlzLmNvZGUoUCkpLHRoaXMuX2VuZEJsb2NrTm9kZShCLEcpfXRocm93KGMpe3JldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgaChjKSl9YmxvY2soYyxtKXtyZXR1cm4gdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpLGMmJnRoaXMuY29kZShjKS5lbmRCbG9jayhtKSx0aGlzfWVuZEJsb2NrKGMpe2NvbnN0IG09dGhpcy5fYmxvY2tTdGFydHMucG9wKCk7aWYobT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvZGVHZW46IG5vdCBpbiBzZWxmLWJhbGFuY2luZyBibG9jayIpO2NvbnN0IFA9dGhpcy5fbm9kZXMubGVuZ3RoLW07aWYoUDwwfHxjIT09dm9pZCAwJiZQIT09Yyl0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHdyb25nIG51bWJlciBvZiBub2RlczogJHtQfSB2cyAke2N9IGV4cGVjdGVkYCk7cmV0dXJuIHRoaXMuX25vZGVzLmxlbmd0aD1tLHRoaXN9ZnVuYyhjLG09dC5uaWwsUCxVKXtyZXR1cm4gdGhpcy5fYmxvY2tOb2RlKG5ldyAkKGMsbSxQKSksVSYmdGhpcy5jb2RlKFUpLmVuZEZ1bmMoKSx0aGlzfWVuZEZ1bmMoKXtyZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKCQpfW9wdGltaXplKGM9MSl7Zm9yKDtjLS0gPjA7KXRoaXMuX3Jvb3Qub3B0aW1pemVOb2RlcygpLHRoaXMuX3Jvb3Qub3B0aW1pemVOYW1lcyh0aGlzLl9yb290Lm5hbWVzLHRoaXMuX2NvbnN0YW50cyl9X2xlYWZOb2RlKGMpe3JldHVybiB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKGMpLHRoaXN9X2Jsb2NrTm9kZShjKXt0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKGMpLHRoaXMuX25vZGVzLnB1c2goYyl9X2VuZEJsb2NrTm9kZShjLG0pe2NvbnN0IFA9dGhpcy5fY3Vyck5vZGU7aWYoUCBpbnN0YW5jZW9mIGN8fG0mJlAgaW5zdGFuY2VvZiBtKXJldHVybiB0aGlzLl9ub2Rlcy5wb3AoKSx0aGlzO3Rocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbm90IGluIGJsb2NrICIke20/YCR7Yy5raW5kfS8ke20ua2luZH1gOmMua2luZH0iYCl9X2Vsc2VOb2RlKGMpe2NvbnN0IG09dGhpcy5fY3Vyck5vZGU7aWYoIShtIGluc3RhbmNlb2YgXykpdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAiZWxzZSIgd2l0aG91dCAiaWYiJyk7cmV0dXJuIHRoaXMuX2N1cnJOb2RlPW0uZWxzZT1jLHRoaXN9Z2V0IF9yb290KCl7cmV0dXJuIHRoaXMuX25vZGVzWzBdfWdldCBfY3Vyck5vZGUoKXtjb25zdCBjPXRoaXMuX25vZGVzO3JldHVybiBjW2MubGVuZ3RoLTFdfXNldCBfY3Vyck5vZGUoYyl7Y29uc3QgbT10aGlzLl9ub2RlczttW20ubGVuZ3RoLTFdPWN9fWUuQ29kZUdlbj1wZTtmdW5jdGlvbiBXKHcsYyl7Zm9yKGNvbnN0IG0gaW4gYyl3W21dPSh3W21dfHwwKSsoY1ttXXx8MCk7cmV0dXJuIHd9ZnVuY3Rpb24gb2UodyxjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIHQuX0NvZGVPck5hbWU/Vyh3LGMubmFtZXMpOnd9ZnVuY3Rpb24gWCh3LGMsbSl7aWYodyBpbnN0YW5jZW9mIHQuTmFtZSlyZXR1cm4gUCh3KTtpZighVSh3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHQuX0NvZGUody5faXRlbXMucmVkdWNlKChGLFopPT4oWiBpbnN0YW5jZW9mIHQuTmFtZSYmKFo9UChaKSksWiBpbnN0YW5jZW9mIHQuX0NvZGU/Ri5wdXNoKC4uLlouX2l0ZW1zKTpGLnB1c2goWiksRiksW10pKTtmdW5jdGlvbiBQKEYpe2NvbnN0IFo9bVtGLnN0cl07cmV0dXJuIFo9PT12b2lkIDB8fGNbRi5zdHJdIT09MT9GOihkZWxldGUgY1tGLnN0cl0sWil9ZnVuY3Rpb24gVShGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIHQuX0NvZGUmJkYuX2l0ZW1zLnNvbWUoWj0+WiBpbnN0YW5jZW9mIHQuTmFtZSYmY1taLnN0cl09PT0xJiZtW1ouc3RyXSE9PXZvaWQgMCl9fWZ1bmN0aW9uIHZlKHcsYyl7Zm9yKGNvbnN0IG0gaW4gYyl3W21dPSh3W21dfHwwKS0oY1ttXXx8MCl9ZnVuY3Rpb24gRWUodyl7cmV0dXJuIHR5cGVvZiB3PT0iYm9vbGVhbiJ8fHR5cGVvZiB3PT0ibnVtYmVyInx8dz09PW51bGw/IXc6KDAsdC5fKWAhJHtDKHcpfWB9ZS5ub3Q9RWU7Y29uc3QgTmU9ZyhlLm9wZXJhdG9ycy5BTkQpO2Z1bmN0aW9uIEJlKC4uLncpe3JldHVybiB3LnJlZHVjZShOZSl9ZS5hbmQ9QmU7Y29uc3QgdXI9ZyhlLm9wZXJhdG9ycy5PUik7ZnVuY3Rpb24gayguLi53KXtyZXR1cm4gdy5yZWR1Y2UodXIpfWUub3I9aztmdW5jdGlvbiBnKHcpe3JldHVybihjLG0pPT5jPT09dC5uaWw/bTptPT09dC5uaWw/YzooMCx0Ll8pYCR7QyhjKX0gJHt3fSAke0MobSl9YH1mdW5jdGlvbiBDKHcpe3JldHVybiB3IGluc3RhbmNlb2YgdC5OYW1lP3c6KDAsdC5fKWAoJHt3fSlgfX0odWUpO3ZhciBiZT17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuY2hlY2tTdHJpY3RNb2RlPWUuZ2V0RXJyb3JQYXRoPWUuVHlwZT1lLnVzZUZ1bmM9ZS5zZXRFdmFsdWF0ZWQ9ZS5ldmFsdWF0ZWRQcm9wc1RvTmFtZT1lLm1lcmdlRXZhbHVhdGVkPWUuZWFjaEl0ZW09ZS51bmVzY2FwZUpzb25Qb2ludGVyPWUuZXNjYXBlSnNvblBvaW50ZXI9ZS5lc2NhcGVGcmFnbWVudD1lLnVuZXNjYXBlRnJhZ21lbnQ9ZS5zY2hlbWFSZWZPclZhbD1lLnNjaGVtYUhhc1J1bGVzQnV0UmVmPWUuc2NoZW1hSGFzUnVsZXM9ZS5jaGVja1Vua25vd25SdWxlcz1lLmFsd2F5c1ZhbGlkU2NoZW1hPWUudG9IYXNoPXZvaWQgMDtjb25zdCB0PXVlLHI9eXI7ZnVuY3Rpb24gbigkKXtjb25zdCBOPXt9O2Zvcihjb25zdCBEIG9mICQpTltEXT0hMDtyZXR1cm4gTn1lLnRvSGFzaD1uO2Z1bmN0aW9uIHMoJCxOKXtyZXR1cm4gdHlwZW9mIE49PSJib29sZWFuIj9OOk9iamVjdC5rZXlzKE4pLmxlbmd0aD09PTA/ITA6KGEoJCxOKSwhbyhOLCQuc2VsZi5SVUxFUy5hbGwpKX1lLmFsd2F5c1ZhbGlkU2NoZW1hPXM7ZnVuY3Rpb24gYSgkLE49JC5zY2hlbWEpe2NvbnN0e29wdHM6RCxzZWxmOkJ9PSQ7aWYoIUQuc3RyaWN0U2NoZW1hfHx0eXBlb2YgTj09ImJvb2xlYW4iKXJldHVybjtjb25zdCBHPUIuUlVMRVMua2V5d29yZHM7Zm9yKGNvbnN0IHBlIGluIE4pR1twZV18fEgoJCxgdW5rbm93biBrZXl3b3JkOiAiJHtwZX0iYCl9ZS5jaGVja1Vua25vd25SdWxlcz1hO2Z1bmN0aW9uIG8oJCxOKXtpZih0eXBlb2YgJD09ImJvb2xlYW4iKXJldHVybiEkO2Zvcihjb25zdCBEIGluICQpaWYoTltEXSlyZXR1cm4hMDtyZXR1cm4hMX1lLnNjaGVtYUhhc1J1bGVzPW87ZnVuY3Rpb24gbCgkLE4pe2lmKHR5cGVvZiAkPT0iYm9vbGVhbiIpcmV0dXJuISQ7Zm9yKGNvbnN0IEQgaW4gJClpZihEIT09IiRyZWYiJiZOLmFsbFtEXSlyZXR1cm4hMDtyZXR1cm4hMX1lLnNjaGVtYUhhc1J1bGVzQnV0UmVmPWw7ZnVuY3Rpb24gZih7dG9wU2NoZW1hUmVmOiQsc2NoZW1hUGF0aDpOfSxELEIsRyl7aWYoIUcpe2lmKHR5cGVvZiBEPT0ibnVtYmVyInx8dHlwZW9mIEQ9PSJib29sZWFuIilyZXR1cm4gRDtpZih0eXBlb2YgRD09InN0cmluZyIpcmV0dXJuKDAsdC5fKWAke0R9YH1yZXR1cm4oMCx0Ll8pYCR7JH0ke059JHsoMCx0LmdldFByb3BlcnR5KShCKX1gfWUuc2NoZW1hUmVmT3JWYWw9ZjtmdW5jdGlvbiBwKCQpe3JldHVybiBFKGRlY29kZVVSSUNvbXBvbmVudCgkKSl9ZS51bmVzY2FwZUZyYWdtZW50PXA7ZnVuY3Rpb24gaSgkKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGgoJCkpfWUuZXNjYXBlRnJhZ21lbnQ9aTtmdW5jdGlvbiBoKCQpe3JldHVybiB0eXBlb2YgJD09Im51bWJlciI/YCR7JH1gOiQucmVwbGFjZSgvfi9nLCJ+MCIpLnJlcGxhY2UoL1wvL2csIn4xIil9ZS5lc2NhcGVKc29uUG9pbnRlcj1oO2Z1bmN0aW9uIEUoJCl7cmV0dXJuICQucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1lLnVuZXNjYXBlSnNvblBvaW50ZXI9RTtmdW5jdGlvbiBUKCQsTil7aWYoQXJyYXkuaXNBcnJheSgkKSlmb3IoY29uc3QgRCBvZiAkKU4oRCk7ZWxzZSBOKCQpfWUuZWFjaEl0ZW09VDtmdW5jdGlvbiBJKHttZXJnZU5hbWVzOiQsbWVyZ2VUb05hbWU6TixtZXJnZVZhbHVlczpELHJlc3VsdFRvTmFtZTpCfSl7cmV0dXJuKEcscGUsVyxvZSk9Pntjb25zdCBYPVc9PT12b2lkIDA/cGU6VyBpbnN0YW5jZW9mIHQuTmFtZT8ocGUgaW5zdGFuY2VvZiB0Lk5hbWU/JChHLHBlLFcpOk4oRyxwZSxXKSxXKTpwZSBpbnN0YW5jZW9mIHQuTmFtZT8oTihHLFcscGUpLHBlKTpEKHBlLFcpO3JldHVybiBvZT09PXQuTmFtZSYmIShYIGluc3RhbmNlb2YgdC5OYW1lKT9CKEcsWCk6WH19ZS5tZXJnZUV2YWx1YXRlZD17cHJvcHM6SSh7bWVyZ2VOYW1lczooJCxOLEQpPT4kLmlmKCgwLHQuXylgJHtEfSAhPT0gdHJ1ZSAmJiAke059ICE9PSB1bmRlZmluZWRgLCgpPT57JC5pZigoMCx0Ll8pYCR7Tn0gPT09IHRydWVgLCgpPT4kLmFzc2lnbihELCEwKSwoKT0+JC5hc3NpZ24oRCwoMCx0Ll8pYCR7RH0gfHwge31gKS5jb2RlKCgwLHQuXylgT2JqZWN0LmFzc2lnbigke0R9LCAke059KWApKX0pLG1lcmdlVG9OYW1lOigkLE4sRCk9PiQuaWYoKDAsdC5fKWAke0R9ICE9PSB0cnVlYCwoKT0+e049PT0hMD8kLmFzc2lnbihELCEwKTooJC5hc3NpZ24oRCwoMCx0Ll8pYCR7RH0gfHwge31gKSx5KCQsRCxOKSl9KSxtZXJnZVZhbHVlczooJCxOKT0+JD09PSEwPyEwOlEoUSh7fSwkKSxOKSxyZXN1bHRUb05hbWU6an0pLGl0ZW1zOkkoe21lcmdlTmFtZXM6KCQsTixEKT0+JC5pZigoMCx0Ll8pYCR7RH0gIT09IHRydWUgJiYgJHtOfSAhPT0gdW5kZWZpbmVkYCwoKT0+JC5hc3NpZ24oRCwoMCx0Ll8pYCR7Tn0gPT09IHRydWUgPyB0cnVlIDogJHtEfSA+ICR7Tn0gPyAke0R9IDogJHtOfWApKSxtZXJnZVRvTmFtZTooJCxOLEQpPT4kLmlmKCgwLHQuXylgJHtEfSAhPT0gdHJ1ZWAsKCk9PiQuYXNzaWduKEQsTj09PSEwPyEwOigwLHQuXylgJHtEfSA+ICR7Tn0gPyAke0R9IDogJHtOfWApKSxtZXJnZVZhbHVlczooJCxOKT0+JD09PSEwPyEwOk1hdGgubWF4KCQsTikscmVzdWx0VG9OYW1lOigkLE4pPT4kLnZhcigiaXRlbXMiLE4pfSl9O2Z1bmN0aW9uIGooJCxOKXtpZihOPT09ITApcmV0dXJuICQudmFyKCJwcm9wcyIsITApO2NvbnN0IEQ9JC52YXIoInByb3BzIiwoMCx0Ll8pYHt9YCk7cmV0dXJuIE4hPT12b2lkIDAmJnkoJCxELE4pLER9ZS5ldmFsdWF0ZWRQcm9wc1RvTmFtZT1qO2Z1bmN0aW9uIHkoJCxOLEQpe09iamVjdC5rZXlzKEQpLmZvckVhY2goQj0+JC5hc3NpZ24oKDAsdC5fKWAke059JHsoMCx0LmdldFByb3BlcnR5KShCKX1gLCEwKSl9ZS5zZXRFdmFsdWF0ZWQ9eTtjb25zdCBfPXt9O2Z1bmN0aW9uIGIoJCxOKXtyZXR1cm4gJC5zY29wZVZhbHVlKCJmdW5jIix7cmVmOk4sY29kZTpfW04uY29kZV18fChfW04uY29kZV09bmV3IHIuX0NvZGUoTi5jb2RlKSl9KX1lLnVzZUZ1bmM9Yjt2YXIgTzsoZnVuY3Rpb24oJCl7JFskLk51bT0wXT0iTnVtIiwkWyQuU3RyPTFdPSJTdHIifSkoTz1lLlR5cGV8fChlLlR5cGU9e30pKTtmdW5jdGlvbiBBKCQsTixEKXtpZigkIGluc3RhbmNlb2YgdC5OYW1lKXtjb25zdCBCPU49PT1PLk51bTtyZXR1cm4gRD9CPygwLHQuXylgIlsiICsgJHskfSArICJdImA6KDAsdC5fKWAiWyciICsgJHskfSArICInXSJgOkI/KDAsdC5fKWAiLyIgKyAkeyR9YDooMCx0Ll8pYCIvIiArICR7JH0ucmVwbGFjZSgvfi9nLCAifjAiKS5yZXBsYWNlKC9cXC8vZywgIn4xIilgfXJldHVybiBEPygwLHQuZ2V0UHJvcGVydHkpKCQpLnRvU3RyaW5nKCk6Ii8iK2goJCl9ZS5nZXRFcnJvclBhdGg9QTtmdW5jdGlvbiBIKCQsTixEPSQub3B0cy5zdHJpY3RTY2hlbWEpe2lmKCEhRCl7aWYoTj1gc3RyaWN0IG1vZGU6ICR7Tn1gLEQ9PT0hMCl0aHJvdyBuZXcgRXJyb3IoTik7JC5zZWxmLmxvZ2dlci53YXJuKE4pfX1lLmNoZWNrU3RyaWN0TW9kZT1IfSkoYmUpO3ZhciBMZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IEFlPXVlLHZjPXtkYXRhOm5ldyBBZS5OYW1lKCJkYXRhIiksdmFsQ3h0Om5ldyBBZS5OYW1lKCJ2YWxDeHQiKSxpbnN0YW5jZVBhdGg6bmV3IEFlLk5hbWUoImluc3RhbmNlUGF0aCIpLHBhcmVudERhdGE6bmV3IEFlLk5hbWUoInBhcmVudERhdGEiKSxwYXJlbnREYXRhUHJvcGVydHk6bmV3IEFlLk5hbWUoInBhcmVudERhdGFQcm9wZXJ0eSIpLHJvb3REYXRhOm5ldyBBZS5OYW1lKCJyb290RGF0YSIpLGR5bmFtaWNBbmNob3JzOm5ldyBBZS5OYW1lKCJkeW5hbWljQW5jaG9ycyIpLHZFcnJvcnM6bmV3IEFlLk5hbWUoInZFcnJvcnMiKSxlcnJvcnM6bmV3IEFlLk5hbWUoImVycm9ycyIpLHRoaXM6bmV3IEFlLk5hbWUoInRoaXMiKSxzZWxmOm5ldyBBZS5OYW1lKCJzZWxmIiksc2NvcGU6bmV3IEFlLk5hbWUoInNjb3BlIiksanNvbjpuZXcgQWUuTmFtZSgianNvbiIpLGpzb25Qb3M6bmV3IEFlLk5hbWUoImpzb25Qb3MiKSxqc29uTGVuOm5ldyBBZS5OYW1lKCJqc29uTGVuIiksanNvblBhcnQ6bmV3IEFlLk5hbWUoImpzb25QYXJ0Iil9O0xlLmRlZmF1bHQ9dmMsZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZXh0ZW5kRXJyb3JzPWUucmVzZXRFcnJvcnNDb3VudD1lLnJlcG9ydEV4dHJhRXJyb3I9ZS5yZXBvcnRFcnJvcj1lLmtleXdvcmQkRGF0YUVycm9yPWUua2V5d29yZEVycm9yPXZvaWQgMDtjb25zdCB0PXVlLHI9YmUsbj1MZTtlLmtleXdvcmRFcnJvcj17bWVzc2FnZTooe2tleXdvcmQ6eX0pPT4oMCx0LnN0cilgbXVzdCBwYXNzICIke3l9IiBrZXl3b3JkIHZhbGlkYXRpb25gfSxlLmtleXdvcmQkRGF0YUVycm9yPXttZXNzYWdlOih7a2V5d29yZDp5LHNjaGVtYVR5cGU6X30pPT5fPygwLHQuc3RyKWAiJHt5fSIga2V5d29yZCBtdXN0IGJlICR7X30gKCRkYXRhKWA6KDAsdC5zdHIpYCIke3l9IiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWB9O2Z1bmN0aW9uIHMoeSxfPWUua2V5d29yZEVycm9yLGIsTyl7Y29uc3R7aXQ6QX09eSx7Z2VuOkgsY29tcG9zaXRlUnVsZTokLGFsbEVycm9yczpOfT1BLEQ9aCh5LF8sYik7KE8hPW51bGw/TzokfHxOKT9mKEgsRCk6cChBLCgwLHQuXylgWyR7RH1dYCl9ZS5yZXBvcnRFcnJvcj1zO2Z1bmN0aW9uIGEoeSxfPWUua2V5d29yZEVycm9yLGIpe2NvbnN0e2l0Ok99PXkse2dlbjpBLGNvbXBvc2l0ZVJ1bGU6SCxhbGxFcnJvcnM6JH09TyxOPWgoeSxfLGIpO2YoQSxOKSxIfHwkfHxwKE8sbi5kZWZhdWx0LnZFcnJvcnMpfWUucmVwb3J0RXh0cmFFcnJvcj1hO2Z1bmN0aW9uIG8oeSxfKXt5LmFzc2lnbihuLmRlZmF1bHQuZXJyb3JzLF8pLHkuaWYoKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsKCk9PnkuaWYoXywoKT0+eS5hc3NpZ24oKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgLF8pLCgpPT55LmFzc2lnbihuLmRlZmF1bHQudkVycm9ycyxudWxsKSkpfWUucmVzZXRFcnJvcnNDb3VudD1vO2Z1bmN0aW9uIGwoe2dlbjp5LGtleXdvcmQ6XyxzY2hlbWFWYWx1ZTpiLGRhdGE6TyxlcnJzQ291bnQ6QSxpdDpIfSl7aWYoQT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvciIpO2NvbnN0ICQ9eS5uYW1lKCJlcnIiKTt5LmZvclJhbmdlKCJpIixBLG4uZGVmYXVsdC5lcnJvcnMsTj0+e3kuY29uc3QoJCwoMCx0Ll8pYCR7bi5kZWZhdWx0LnZFcnJvcnN9WyR7Tn1dYCkseS5pZigoMCx0Ll8pYCR7JH0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCgpPT55LmFzc2lnbigoMCx0Ll8pYCR7JH0uaW5zdGFuY2VQYXRoYCwoMCx0LnN0ckNvbmNhdCkobi5kZWZhdWx0Lmluc3RhbmNlUGF0aCxILmVycm9yUGF0aCkpKSx5LmFzc2lnbigoMCx0Ll8pYCR7JH0uc2NoZW1hUGF0aGAsKDAsdC5zdHIpYCR7SC5lcnJTY2hlbWFQYXRofS8ke199YCksSC5vcHRzLnZlcmJvc2UmJih5LmFzc2lnbigoMCx0Ll8pYCR7JH0uc2NoZW1hYCxiKSx5LmFzc2lnbigoMCx0Ll8pYCR7JH0uZGF0YWAsTykpfSl9ZS5leHRlbmRFcnJvcnM9bDtmdW5jdGlvbiBmKHksXyl7Y29uc3QgYj15LmNvbnN0KCJlcnIiLF8pO3kuaWYoKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbGAsKCk9PnkuYXNzaWduKG4uZGVmYXVsdC52RXJyb3JzLCgwLHQuXylgWyR7Yn1dYCksKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfS5wdXNoKCR7Yn0pYCkseS5jb2RlKCgwLHQuXylgJHtuLmRlZmF1bHQuZXJyb3JzfSsrYCl9ZnVuY3Rpb24gcCh5LF8pe2NvbnN0e2dlbjpiLHZhbGlkYXRlTmFtZTpPLHNjaGVtYUVudjpBfT15O0EuJGFzeW5jP2IudGhyb3coKDAsdC5fKWBuZXcgJHt5LlZhbGlkYXRpb25FcnJvcn0oJHtffSlgKTooYi5hc3NpZ24oKDAsdC5fKWAke099LmVycm9yc2AsXyksYi5yZXR1cm4oITEpKX1jb25zdCBpPXtrZXl3b3JkOm5ldyB0Lk5hbWUoImtleXdvcmQiKSxzY2hlbWFQYXRoOm5ldyB0Lk5hbWUoInNjaGVtYVBhdGgiKSxwYXJhbXM6bmV3IHQuTmFtZSgicGFyYW1zIikscHJvcGVydHlOYW1lOm5ldyB0Lk5hbWUoInByb3BlcnR5TmFtZSIpLG1lc3NhZ2U6bmV3IHQuTmFtZSgibWVzc2FnZSIpLHNjaGVtYTpuZXcgdC5OYW1lKCJzY2hlbWEiKSxwYXJlbnRTY2hlbWE6bmV3IHQuTmFtZSgicGFyZW50U2NoZW1hIil9O2Z1bmN0aW9uIGgoeSxfLGIpe2NvbnN0e2NyZWF0ZUVycm9yczpPfT15Lml0O3JldHVybiBPPT09ITE/KDAsdC5fKWB7fWA6RSh5LF8sYil9ZnVuY3Rpb24gRSh5LF8sYj17fSl7Y29uc3R7Z2VuOk8saXQ6QX09eSxIPVtUKEEsYiksSSh5LGIpXTtyZXR1cm4gaih5LF8sSCksTy5vYmplY3QoLi4uSCl9ZnVuY3Rpb24gVCh7ZXJyb3JQYXRoOnl9LHtpbnN0YW5jZVBhdGg6X30pe2NvbnN0IGI9Xz8oMCx0LnN0cilgJHt5fSR7KDAsci5nZXRFcnJvclBhdGgpKF8sci5UeXBlLlN0cil9YDp5O3JldHVybltuLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCgwLHQuc3RyQ29uY2F0KShuLmRlZmF1bHQuaW5zdGFuY2VQYXRoLGIpXX1mdW5jdGlvbiBJKHtrZXl3b3JkOnksaXQ6e2VyclNjaGVtYVBhdGg6X319LHtzY2hlbWFQYXRoOmIscGFyZW50U2NoZW1hOk99KXtsZXQgQT1PP186KDAsdC5zdHIpYCR7X30vJHt5fWA7cmV0dXJuIGImJihBPSgwLHQuc3RyKWAke0F9JHsoMCxyLmdldEVycm9yUGF0aCkoYixyLlR5cGUuU3RyKX1gKSxbaS5zY2hlbWFQYXRoLEFdfWZ1bmN0aW9uIGooeSx7cGFyYW1zOl8sbWVzc2FnZTpifSxPKXtjb25zdHtrZXl3b3JkOkEsZGF0YTpILHNjaGVtYVZhbHVlOiQsaXQ6Tn09eSx7b3B0czpELHByb3BlcnR5TmFtZTpCLHRvcFNjaGVtYVJlZjpHLHNjaGVtYVBhdGg6cGV9PU47Ty5wdXNoKFtpLmtleXdvcmQsQV0sW2kucGFyYW1zLHR5cGVvZiBfPT0iZnVuY3Rpb24iP18oeSk6X3x8KDAsdC5fKWB7fWBdKSxELm1lc3NhZ2VzJiZPLnB1c2goW2kubWVzc2FnZSx0eXBlb2YgYj09ImZ1bmN0aW9uIj9iKHkpOmJdKSxELnZlcmJvc2UmJk8ucHVzaChbaS5zY2hlbWEsJF0sW2kucGFyZW50U2NoZW1hLCgwLHQuXylgJHtHfSR7cGV9YF0sW24uZGVmYXVsdC5kYXRhLEhdKSxCJiZPLnB1c2goW2kucHJvcGVydHlOYW1lLEJdKX19KEVyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHRyLmJvb2xPckVtcHR5U2NoZW1hPXRyLnRvcEJvb2xPckVtcHR5U2NoZW1hPXZvaWQgMDtjb25zdCBfYz1FcixnYz11ZSxFYz1MZSx5Yz17bWVzc2FnZToiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2UifTtmdW5jdGlvbiAkYyhlKXtjb25zdHtnZW46dCxzY2hlbWE6cix2YWxpZGF0ZU5hbWU6bn09ZTtyPT09ITE/bmEoZSwhMSk6dHlwZW9mIHI9PSJvYmplY3QiJiZyLiRhc3luYz09PSEwP3QucmV0dXJuKEVjLmRlZmF1bHQuZGF0YSk6KHQuYXNzaWduKCgwLGdjLl8pYCR7bn0uZXJyb3JzYCxudWxsKSx0LnJldHVybighMCkpfXRyLnRvcEJvb2xPckVtcHR5U2NoZW1hPSRjO2Z1bmN0aW9uIHdjKGUsdCl7Y29uc3R7Z2VuOnIsc2NoZW1hOm59PWU7bj09PSExPyhyLnZhcih0LCExKSxuYShlKSk6ci52YXIodCwhMCl9dHIuYm9vbE9yRW1wdHlTY2hlbWE9d2M7ZnVuY3Rpb24gbmEoZSx0KXtjb25zdHtnZW46cixkYXRhOm59PWUscz17Z2VuOnIsa2V5d29yZDoiZmFsc2Ugc2NoZW1hIixkYXRhOm4sc2NoZW1hOiExLHNjaGVtYUNvZGU6ITEsc2NoZW1hVmFsdWU6ITEscGFyYW1zOnt9LGl0OmV9OygwLF9jLnJlcG9ydEVycm9yKShzLHljLHZvaWQgMCx0KX12YXIgbm49e30sRHQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KER0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEdC5nZXRSdWxlcz1EdC5pc0pTT05UeXBlPXZvaWQgMDtjb25zdCBTYz1bInN0cmluZyIsIm51bWJlciIsImludGVnZXIiLCJib29sZWFuIiwibnVsbCIsIm9iamVjdCIsImFycmF5Il0sUmM9bmV3IFNldChTYyk7ZnVuY3Rpb24gYmMoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmUmMuaGFzKGUpfUR0LmlzSlNPTlR5cGU9YmM7ZnVuY3Rpb24gT2MoKXtjb25zdCBlPXtudW1iZXI6e3R5cGU6Im51bWJlciIscnVsZXM6W119LHN0cmluZzp7dHlwZToic3RyaW5nIixydWxlczpbXX0sYXJyYXk6e3R5cGU6ImFycmF5IixydWxlczpbXX0sb2JqZWN0Ont0eXBlOiJvYmplY3QiLHJ1bGVzOltdfX07cmV0dXJue3R5cGVzOmxlKFEoe30sZSkse2ludGVnZXI6ITAsYm9vbGVhbjohMCxudWxsOiEwfSkscnVsZXM6W3tydWxlczpbXX0sZS5udW1iZXIsZS5zdHJpbmcsZS5hcnJheSxlLm9iamVjdF0scG9zdDp7cnVsZXM6W119LGFsbDp7fSxrZXl3b3Jkczp7fX19RHQuZ2V0UnVsZXM9T2M7dmFyIGx0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbHQuc2hvdWxkVXNlUnVsZT1sdC5zaG91bGRVc2VHcm91cD1sdC5zY2hlbWFIYXNSdWxlc0ZvclR5cGU9dm9pZCAwO2Z1bmN0aW9uIE5jKHtzY2hlbWE6ZSxzZWxmOnR9LHIpe2NvbnN0IG49dC5SVUxFUy50eXBlc1tyXTtyZXR1cm4gbiYmbiE9PSEwJiZzYShlLG4pfWx0LnNjaGVtYUhhc1J1bGVzRm9yVHlwZT1OYztmdW5jdGlvbiBzYShlLHQpe3JldHVybiB0LnJ1bGVzLnNvbWUocj0+YWEoZSxyKSl9bHQuc2hvdWxkVXNlR3JvdXA9c2E7ZnVuY3Rpb24gYWEoZSx0KXt2YXIgcjtyZXR1cm4gZVt0LmtleXdvcmRdIT09dm9pZCAwfHwoKHI9dC5kZWZpbml0aW9uLmltcGxlbWVudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5zb21lKG49PmVbbl0hPT12b2lkIDApKX1sdC5zaG91bGRVc2VSdWxlPWFhLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnJlcG9ydFR5cGVFcnJvcj1lLmNoZWNrRGF0YVR5cGVzPWUuY2hlY2tEYXRhVHlwZT1lLmNvZXJjZUFuZENoZWNrRGF0YVR5cGU9ZS5nZXRKU09OVHlwZXM9ZS5nZXRTY2hlbWFUeXBlcz1lLkRhdGFUeXBlPXZvaWQgMDtjb25zdCB0PUR0LHI9bHQsbj1FcixzPXVlLGE9YmU7dmFyIG87KGZ1bmN0aW9uKE8pe09bTy5Db3JyZWN0PTBdPSJDb3JyZWN0IixPW08uV3Jvbmc9MV09Ildyb25nIn0pKG89ZS5EYXRhVHlwZXx8KGUuRGF0YVR5cGU9e30pKTtmdW5jdGlvbiBsKE8pe2NvbnN0IEE9ZihPLnR5cGUpO2lmKEEuaW5jbHVkZXMoIm51bGwiKSl7aWYoTy5udWxsYWJsZT09PSExKXRocm93IG5ldyBFcnJvcigidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2UiKX1lbHNle2lmKCFBLmxlbmd0aCYmTy5udWxsYWJsZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJyJudWxsYWJsZSIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCAidHlwZSInKTtPLm51bGxhYmxlPT09ITAmJkEucHVzaCgibnVsbCIpfXJldHVybiBBfWUuZ2V0U2NoZW1hVHlwZXM9bDtmdW5jdGlvbiBmKE8pe2NvbnN0IEE9QXJyYXkuaXNBcnJheShPKT9POk8/W09dOltdO2lmKEEuZXZlcnkodC5pc0pTT05UeXBlKSlyZXR1cm4gQTt0aHJvdyBuZXcgRXJyb3IoInR5cGUgbXVzdCBiZSBKU09OVHlwZSBvciBKU09OVHlwZVtdOiAiK0Euam9pbigiLCIpKX1lLmdldEpTT05UeXBlcz1mO2Z1bmN0aW9uIHAoTyxBKXtjb25zdHtnZW46SCxkYXRhOiQsb3B0czpOfT1PLEQ9aChBLE4uY29lcmNlVHlwZXMpLEI9QS5sZW5ndGg+MCYmIShELmxlbmd0aD09PTAmJkEubGVuZ3RoPT09MSYmKDAsci5zY2hlbWFIYXNSdWxlc0ZvclR5cGUpKE8sQVswXSkpO2lmKEIpe2NvbnN0IEc9aihBLCQsTi5zdHJpY3ROdW1iZXJzLG8uV3JvbmcpO0guaWYoRywoKT0+e0QubGVuZ3RoP0UoTyxBLEQpOl8oTyl9KX1yZXR1cm4gQn1lLmNvZXJjZUFuZENoZWNrRGF0YVR5cGU9cDtjb25zdCBpPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJpbnRlZ2VyIiwiYm9vbGVhbiIsIm51bGwiXSk7ZnVuY3Rpb24gaChPLEEpe3JldHVybiBBP08uZmlsdGVyKEg9PmkuaGFzKEgpfHxBPT09ImFycmF5IiYmSD09PSJhcnJheSIpOltdfWZ1bmN0aW9uIEUoTyxBLEgpe2NvbnN0e2dlbjokLGRhdGE6TixvcHRzOkR9PU8sQj0kLmxldCgiZGF0YVR5cGUiLCgwLHMuXylgdHlwZW9mICR7Tn1gKSxHPSQubGV0KCJjb2VyY2VkIiwoMCxzLl8pYHVuZGVmaW5lZGApO0QuY29lcmNlVHlwZXM9PT0iYXJyYXkiJiYkLmlmKCgwLHMuXylgJHtCfSA9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KCR7Tn0pICYmICR7Tn0ubGVuZ3RoID09IDFgLCgpPT4kLmFzc2lnbihOLCgwLHMuXylgJHtOfVswXWApLmFzc2lnbihCLCgwLHMuXylgdHlwZW9mICR7Tn1gKS5pZihqKEEsTixELnN0cmljdE51bWJlcnMpLCgpPT4kLmFzc2lnbihHLE4pKSksJC5pZigoMCxzLl8pYCR7R30gIT09IHVuZGVmaW5lZGApO2Zvcihjb25zdCBXIG9mIEgpKGkuaGFzKFcpfHxXPT09ImFycmF5IiYmRC5jb2VyY2VUeXBlcz09PSJhcnJheSIpJiZwZShXKTskLmVsc2UoKSxfKE8pLCQuZW5kSWYoKSwkLmlmKCgwLHMuXylgJHtHfSAhPT0gdW5kZWZpbmVkYCwoKT0+eyQuYXNzaWduKE4sRyksVChPLEcpfSk7ZnVuY3Rpb24gcGUoVyl7c3dpdGNoKFcpe2Nhc2Uic3RyaW5nIjokLmVsc2VJZigoMCxzLl8pYCR7Qn0gPT0gIm51bWJlciIgfHwgJHtCfSA9PSAiYm9vbGVhbiJgKS5hc3NpZ24oRywoMCxzLl8pYCIiICsgJHtOfWApLmVsc2VJZigoMCxzLl8pYCR7Tn0gPT09IG51bGxgKS5hc3NpZ24oRywoMCxzLl8pYCIiYCk7cmV0dXJuO2Nhc2UibnVtYmVyIjokLmVsc2VJZigoMCxzLl8pYCR7Qn0gPT0gImJvb2xlYW4iIHx8ICR7Tn0gPT09IG51bGwKICAgICAgICAgICAgICB8fCAoJHtCfSA9PSAic3RyaW5nIiAmJiAke059ICYmICR7Tn0gPT0gKyR7Tn0pYCkuYXNzaWduKEcsKDAscy5fKWArJHtOfWApO3JldHVybjtjYXNlImludGVnZXIiOiQuZWxzZUlmKCgwLHMuXylgJHtCfSA9PT0gImJvb2xlYW4iIHx8ICR7Tn0gPT09IG51bGwKICAgICAgICAgICAgICB8fCAoJHtCfSA9PT0gInN0cmluZyIgJiYgJHtOfSAmJiAke059ID09ICske059ICYmICEoJHtOfSAlIDEpKWApLmFzc2lnbihHLCgwLHMuXylgKyR7Tn1gKTtyZXR1cm47Y2FzZSJib29sZWFuIjokLmVsc2VJZigoMCxzLl8pYCR7Tn0gPT09ICJmYWxzZSIgfHwgJHtOfSA9PT0gMCB8fCAke059ID09PSBudWxsYCkuYXNzaWduKEcsITEpLmVsc2VJZigoMCxzLl8pYCR7Tn0gPT09ICJ0cnVlIiB8fCAke059ID09PSAxYCkuYXNzaWduKEcsITApO3JldHVybjtjYXNlIm51bGwiOiQuZWxzZUlmKCgwLHMuXylgJHtOfSA9PT0gIiIgfHwgJHtOfSA9PT0gMCB8fCAke059ID09PSBmYWxzZWApLCQuYXNzaWduKEcsbnVsbCk7cmV0dXJuO2Nhc2UiYXJyYXkiOiQuZWxzZUlmKCgwLHMuXylgJHtCfSA9PT0gInN0cmluZyIgfHwgJHtCfSA9PT0gIm51bWJlciIKICAgICAgICAgICAgICB8fCAke0J9ID09PSAiYm9vbGVhbiIgfHwgJHtOfSA9PT0gbnVsbGApLmFzc2lnbihHLCgwLHMuXylgWyR7Tn1dYCl9fX1mdW5jdGlvbiBUKHtnZW46TyxwYXJlbnREYXRhOkEscGFyZW50RGF0YVByb3BlcnR5Okh9LCQpe08uaWYoKDAscy5fKWAke0F9ICE9PSB1bmRlZmluZWRgLCgpPT5PLmFzc2lnbigoMCxzLl8pYCR7QX1bJHtIfV1gLCQpKX1mdW5jdGlvbiBJKE8sQSxILCQ9by5Db3JyZWN0KXtjb25zdCBOPSQ9PT1vLkNvcnJlY3Q/cy5vcGVyYXRvcnMuRVE6cy5vcGVyYXRvcnMuTkVRO2xldCBEO3N3aXRjaChPKXtjYXNlIm51bGwiOnJldHVybigwLHMuXylgJHtBfSAke059IG51bGxgO2Nhc2UiYXJyYXkiOkQ9KDAscy5fKWBBcnJheS5pc0FycmF5KCR7QX0pYDticmVhaztjYXNlIm9iamVjdCI6RD0oMCxzLl8pYCR7QX0gJiYgdHlwZW9mICR7QX0gPT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoJHtBfSlgO2JyZWFrO2Nhc2UiaW50ZWdlciI6RD1CKCgwLHMuXylgISgke0F9ICUgMSkgJiYgIWlzTmFOKCR7QX0pYCk7YnJlYWs7Y2FzZSJudW1iZXIiOkQ9QigpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKDAscy5fKWB0eXBlb2YgJHtBfSAke059ICR7T31gfXJldHVybiAkPT09by5Db3JyZWN0P0Q6KDAscy5ub3QpKEQpO2Z1bmN0aW9uIEIoRz1zLm5pbCl7cmV0dXJuKDAscy5hbmQpKCgwLHMuXylgdHlwZW9mICR7QX0gPT0gIm51bWJlciJgLEcsSD8oMCxzLl8pYGlzRmluaXRlKCR7QX0pYDpzLm5pbCl9fWUuY2hlY2tEYXRhVHlwZT1JO2Z1bmN0aW9uIGooTyxBLEgsJCl7aWYoTy5sZW5ndGg9PT0xKXJldHVybiBJKE9bMF0sQSxILCQpO2xldCBOO2NvbnN0IEQ9KDAsYS50b0hhc2gpKE8pO2lmKEQuYXJyYXkmJkQub2JqZWN0KXtjb25zdCBCPSgwLHMuXylgdHlwZW9mICR7QX0gIT0gIm9iamVjdCJgO049RC5udWxsP0I6KDAscy5fKWAhJHtBfSB8fCAke0J9YCxkZWxldGUgRC5udWxsLGRlbGV0ZSBELmFycmF5LGRlbGV0ZSBELm9iamVjdH1lbHNlIE49cy5uaWw7RC5udW1iZXImJmRlbGV0ZSBELmludGVnZXI7Zm9yKGNvbnN0IEIgaW4gRClOPSgwLHMuYW5kKShOLEkoQixBLEgsJCkpO3JldHVybiBOfWUuY2hlY2tEYXRhVHlwZXM9ajtjb25zdCB5PXttZXNzYWdlOih7c2NoZW1hOk99KT0+YG11c3QgYmUgJHtPfWAscGFyYW1zOih7c2NoZW1hOk8sc2NoZW1hVmFsdWU6QX0pPT50eXBlb2YgTz09InN0cmluZyI/KDAscy5fKWB7dHlwZTogJHtPfX1gOigwLHMuXylge3R5cGU6ICR7QX19YH07ZnVuY3Rpb24gXyhPKXtjb25zdCBBPWIoTyk7KDAsbi5yZXBvcnRFcnJvcikoQSx5KX1lLnJlcG9ydFR5cGVFcnJvcj1fO2Z1bmN0aW9uIGIoTyl7Y29uc3R7Z2VuOkEsZGF0YTpILHNjaGVtYTokfT1PLE49KDAsYS5zY2hlbWFSZWZPclZhbCkoTywkLCJ0eXBlIik7cmV0dXJue2dlbjpBLGtleXdvcmQ6InR5cGUiLGRhdGE6SCxzY2hlbWE6JC50eXBlLHNjaGVtYUNvZGU6TixzY2hlbWFWYWx1ZTpOLHBhcmVudFNjaGVtYTokLHBhcmFtczp7fSxpdDpPfX19KG5uKTt2YXIgc249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHNuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxzbi5hc3NpZ25EZWZhdWx0cz12b2lkIDA7Y29uc3QgcnI9dWUsUGM9YmU7ZnVuY3Rpb24gVGMoZSx0KXtjb25zdHtwcm9wZXJ0aWVzOnIsaXRlbXM6bn09ZS5zY2hlbWE7aWYodD09PSJvYmplY3QiJiZyKWZvcihjb25zdCBzIGluIHIpb2EoZSxzLHJbc10uZGVmYXVsdCk7ZWxzZSB0PT09ImFycmF5IiYmQXJyYXkuaXNBcnJheShuKSYmbi5mb3JFYWNoKChzLGEpPT5vYShlLGEscy5kZWZhdWx0KSl9c24uYXNzaWduRGVmYXVsdHM9VGM7ZnVuY3Rpb24gb2EoZSx0LHIpe2NvbnN0e2dlbjpuLGNvbXBvc2l0ZVJ1bGU6cyxkYXRhOmEsb3B0czpvfT1lO2lmKHI9PT12b2lkIDApcmV0dXJuO2NvbnN0IGw9KDAscnIuXylgJHthfSR7KDAscnIuZ2V0UHJvcGVydHkpKHQpfWA7aWYocyl7KDAsUGMuY2hlY2tTdHJpY3RNb2RlKShlLGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2x9YCk7cmV0dXJufWxldCBmPSgwLHJyLl8pYCR7bH0gPT09IHVuZGVmaW5lZGA7by51c2VEZWZhdWx0cz09PSJlbXB0eSImJihmPSgwLHJyLl8pYCR7Zn0gfHwgJHtsfSA9PT0gbnVsbCB8fCAke2x9ID09PSAiImApLG4uaWYoZiwoMCxyci5fKWAke2x9ID0gJHsoMCxyci5zdHJpbmdpZnkpKHIpfWApfXZhciBYZT17fSxuZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG5lLnZhbGlkYXRlVW5pb249bmUudmFsaWRhdGVBcnJheT1uZS51c2VQYXR0ZXJuPW5lLmNhbGxWYWxpZGF0ZUNvZGU9bmUuc2NoZW1hUHJvcGVydGllcz1uZS5hbGxTY2hlbWFQcm9wZXJ0aWVzPW5lLm5vUHJvcGVydHlJbkRhdGE9bmUucHJvcGVydHlJbkRhdGE9bmUuaXNPd25Qcm9wZXJ0eT1uZS5oYXNQcm9wRnVuYz1uZS5yZXBvcnRNaXNzaW5nUHJvcD1uZS5jaGVja01pc3NpbmdQcm9wPW5lLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3A9dm9pZCAwO2NvbnN0IGRlPXVlLEtuPWJlLEV0PUxlLEFjPWJlO2Z1bmN0aW9uIENjKGUsdCl7Y29uc3R7Z2VuOnIsZGF0YTpuLGl0OnN9PWU7ci5pZihKbihyLG4sdCxzLm9wdHMub3duUHJvcGVydGllcyksKCk9PntlLnNldFBhcmFtcyh7bWlzc2luZ1Byb3BlcnR5OigwLGRlLl8pYCR7dH1gfSwhMCksZS5lcnJvcigpfSl9bmUuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcD1DYztmdW5jdGlvbiBJYyh7Z2VuOmUsZGF0YTp0LGl0OntvcHRzOnJ9fSxuLHMpe3JldHVybigwLGRlLm9yKSguLi5uLm1hcChhPT4oMCxkZS5hbmQpKEpuKGUsdCxhLHIub3duUHJvcGVydGllcyksKDAsZGUuXylgJHtzfSA9ICR7YX1gKSkpfW5lLmNoZWNrTWlzc2luZ1Byb3A9SWM7ZnVuY3Rpb24gRGMoZSx0KXtlLnNldFBhcmFtcyh7bWlzc2luZ1Byb3BlcnR5OnR9LCEwKSxlLmVycm9yKCl9bmUucmVwb3J0TWlzc2luZ1Byb3A9RGM7ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIGUuc2NvcGVWYWx1ZSgiZnVuYyIse3JlZjpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGNvZGU6KDAsZGUuXylgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eWB9KX1uZS5oYXNQcm9wRnVuYz1pYTtmdW5jdGlvbiBCbihlLHQscil7cmV0dXJuKDAsZGUuXylgJHtpYShlKX0uY2FsbCgke3R9LCAke3J9KWB9bmUuaXNPd25Qcm9wZXJ0eT1CbjtmdW5jdGlvbiBqYyhlLHQscixuKXtjb25zdCBzPSgwLGRlLl8pYCR7dH0keygwLGRlLmdldFByb3BlcnR5KShyKX0gIT09IHVuZGVmaW5lZGA7cmV0dXJuIG4/KDAsZGUuXylgJHtzfSAmJiAke0JuKGUsdCxyKX1gOnN9bmUucHJvcGVydHlJbkRhdGE9amM7ZnVuY3Rpb24gSm4oZSx0LHIsbil7Y29uc3Qgcz0oMCxkZS5fKWAke3R9JHsoMCxkZS5nZXRQcm9wZXJ0eSkocil9ID09PSB1bmRlZmluZWRgO3JldHVybiBuPygwLGRlLm9yKShzLCgwLGRlLm5vdCkoQm4oZSx0LHIpKSk6c31uZS5ub1Byb3BlcnR5SW5EYXRhPUpuO2Z1bmN0aW9uIGNhKGUpe3JldHVybiBlP09iamVjdC5rZXlzKGUpLmZpbHRlcih0PT50IT09Il9fcHJvdG9fXyIpOltdfW5lLmFsbFNjaGVtYVByb3BlcnRpZXM9Y2E7ZnVuY3Rpb24ga2MoZSx0KXtyZXR1cm4gY2EodCkuZmlsdGVyKHI9PiEoMCxLbi5hbHdheXNWYWxpZFNjaGVtYSkoZSx0W3JdKSl9bmUuc2NoZW1hUHJvcGVydGllcz1rYztmdW5jdGlvbiBVYyh7c2NoZW1hQ29kZTplLGRhdGE6dCxpdDp7Z2VuOnIsdG9wU2NoZW1hUmVmOm4sc2NoZW1hUGF0aDpzLGVycm9yUGF0aDphfSxpdDpvfSxsLGYscCl7Y29uc3QgaT1wPygwLGRlLl8pYCR7ZX0sICR7dH0sICR7bn0ke3N9YDp0LGg9W1tFdC5kZWZhdWx0Lmluc3RhbmNlUGF0aCwoMCxkZS5zdHJDb25jYXQpKEV0LmRlZmF1bHQuaW5zdGFuY2VQYXRoLGEpXSxbRXQuZGVmYXVsdC5wYXJlbnREYXRhLG8ucGFyZW50RGF0YV0sW0V0LmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LG8ucGFyZW50RGF0YVByb3BlcnR5XSxbRXQuZGVmYXVsdC5yb290RGF0YSxFdC5kZWZhdWx0LnJvb3REYXRhXV07by5vcHRzLmR5bmFtaWNSZWYmJmgucHVzaChbRXQuZGVmYXVsdC5keW5hbWljQW5jaG9ycyxFdC5kZWZhdWx0LmR5bmFtaWNBbmNob3JzXSk7Y29uc3QgRT0oMCxkZS5fKWAke2l9LCAke3Iub2JqZWN0KC4uLmgpfWA7cmV0dXJuIGYhPT1kZS5uaWw/KDAsZGUuXylgJHtsfS5jYWxsKCR7Zn0sICR7RX0pYDooMCxkZS5fKWAke2x9KCR7RX0pYH1uZS5jYWxsVmFsaWRhdGVDb2RlPVVjO2NvbnN0IEZjPSgwLGRlLl8pYG5ldyBSZWdFeHBgO2Z1bmN0aW9uIE1jKHtnZW46ZSxpdDp7b3B0czp0fX0scil7Y29uc3Qgbj10LnVuaWNvZGVSZWdFeHA/InUiOiIiLHtyZWdFeHA6c309dC5jb2RlLGE9cyhyLG4pO3JldHVybiBlLnNjb3BlVmFsdWUoInBhdHRlcm4iLHtrZXk6YS50b1N0cmluZygpLHJlZjphLGNvZGU6KDAsZGUuXylgJHtzLmNvZGU9PT0ibmV3IFJlZ0V4cCI/RmM6KDAsQWMudXNlRnVuYykoZSxzKX0oJHtyfSwgJHtufSlgfSl9bmUudXNlUGF0dGVybj1NYztmdW5jdGlvbiBMYyhlKXtjb25zdHtnZW46dCxkYXRhOnIsa2V5d29yZDpuLGl0OnN9PWUsYT10Lm5hbWUoInZhbGlkIik7aWYocy5hbGxFcnJvcnMpe2NvbnN0IGw9dC5sZXQoInZhbGlkIiwhMCk7cmV0dXJuIG8oKCk9PnQuYXNzaWduKGwsITEpKSxsfXJldHVybiB0LnZhcihhLCEwKSxvKCgpPT50LmJyZWFrKCkpLGE7ZnVuY3Rpb24gbyhsKXtjb25zdCBmPXQuY29uc3QoImxlbiIsKDAsZGUuXylgJHtyfS5sZW5ndGhgKTt0LmZvclJhbmdlKCJpIiwwLGYscD0+e2Uuc3Vic2NoZW1hKHtrZXl3b3JkOm4sZGF0YVByb3A6cCxkYXRhUHJvcFR5cGU6S24uVHlwZS5OdW19LGEpLHQuaWYoKDAsZGUubm90KShhKSxsKX0pfX1uZS52YWxpZGF0ZUFycmF5PUxjO2Z1bmN0aW9uIFZjKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGtleXdvcmQ6bixpdDpzfT1lO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7aWYoci5zb21lKGY9PigwLEtuLmFsd2F5c1ZhbGlkU2NoZW1hKShzLGYpKSYmIXMub3B0cy51bmV2YWx1YXRlZClyZXR1cm47Y29uc3Qgbz10LmxldCgidmFsaWQiLCExKSxsPXQubmFtZSgiX3ZhbGlkIik7dC5ibG9jaygoKT0+ci5mb3JFYWNoKChmLHApPT57Y29uc3QgaT1lLnN1YnNjaGVtYSh7a2V5d29yZDpuLHNjaGVtYVByb3A6cCxjb21wb3NpdGVSdWxlOiEwfSxsKTt0LmFzc2lnbihvLCgwLGRlLl8pYCR7b30gfHwgJHtsfWApLGUubWVyZ2VWYWxpZEV2YWx1YXRlZChpLGwpfHx0LmlmKCgwLGRlLm5vdCkobykpfSkpLGUucmVzdWx0KG8sKCk9PmUucmVzZXQoKSwoKT0+ZS5lcnJvcighMCkpfW5lLnZhbGlkYXRlVW5pb249VmMsT2JqZWN0LmRlZmluZVByb3BlcnR5KFhlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYZS52YWxpZGF0ZUtleXdvcmRVc2FnZT1YZS52YWxpZFNjaGVtYVR5cGU9WGUuZnVuY0tleXdvcmRDb2RlPVhlLm1hY3JvS2V5d29yZENvZGU9dm9pZCAwO2NvbnN0IEllPXVlLGp0PUxlLHpjPW5lLEhjPUVyO2Z1bmN0aW9uIEtjKGUsdCl7Y29uc3R7Z2VuOnIsa2V5d29yZDpuLHNjaGVtYTpzLHBhcmVudFNjaGVtYTphLGl0Om99PWUsbD10Lm1hY3JvLmNhbGwoby5zZWxmLHMsYSxvKSxmPWxhKHIsbixsKTtvLm9wdHMudmFsaWRhdGVTY2hlbWEhPT0hMSYmby5zZWxmLnZhbGlkYXRlU2NoZW1hKGwsITApO2NvbnN0IHA9ci5uYW1lKCJ2YWxpZCIpO2Uuc3Vic2NoZW1hKHtzY2hlbWE6bCxzY2hlbWFQYXRoOkllLm5pbCxlcnJTY2hlbWFQYXRoOmAke28uZXJyU2NoZW1hUGF0aH0vJHtufWAsdG9wU2NoZW1hUmVmOmYsY29tcG9zaXRlUnVsZTohMH0scCksZS5wYXNzKHAsKCk9PmUuZXJyb3IoITApKX1YZS5tYWNyb0tleXdvcmRDb2RlPUtjO2Z1bmN0aW9uIEJjKGUsdCl7dmFyIHI7Y29uc3R7Z2VuOm4sa2V5d29yZDpzLHNjaGVtYTphLHBhcmVudFNjaGVtYTpvLCRkYXRhOmwsaXQ6Zn09ZTtxYyhmLHQpO2NvbnN0IHA9IWwmJnQuY29tcGlsZT90LmNvbXBpbGUuY2FsbChmLnNlbGYsYSxvLGYpOnQudmFsaWRhdGUsaT1sYShuLHMscCksaD1uLmxldCgidmFsaWQiKTtlLmJsb2NrJGRhdGEoaCxFKSxlLm9rKChyPXQudmFsaWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmgpO2Z1bmN0aW9uIEUoKXtpZih0LmVycm9ycz09PSExKWooKSx0Lm1vZGlmeWluZyYmdWEoZSkseSgoKT0+ZS5lcnJvcigpKTtlbHNle2NvbnN0IF89dC5hc3luYz9UKCk6SSgpO3QubW9kaWZ5aW5nJiZ1YShlKSx5KCgpPT5KYyhlLF8pKX19ZnVuY3Rpb24gVCgpe2NvbnN0IF89bi5sZXQoInJ1bGVFcnJzIixudWxsKTtyZXR1cm4gbi50cnkoKCk9PmooKDAsSWUuXylgYXdhaXQgYCksYj0+bi5hc3NpZ24oaCwhMSkuaWYoKDAsSWUuXylgJHtifSBpbnN0YW5jZW9mICR7Zi5WYWxpZGF0aW9uRXJyb3J9YCwoKT0+bi5hc3NpZ24oXywoMCxJZS5fKWAke2J9LmVycm9yc2ApLCgpPT5uLnRocm93KGIpKSksX31mdW5jdGlvbiBJKCl7Y29uc3QgXz0oMCxJZS5fKWAke2l9LmVycm9yc2A7cmV0dXJuIG4uYXNzaWduKF8sbnVsbCksaihJZS5uaWwpLF99ZnVuY3Rpb24gaihfPXQuYXN5bmM/KDAsSWUuXylgYXdhaXQgYDpJZS5uaWwpe2NvbnN0IGI9Zi5vcHRzLnBhc3NDb250ZXh0P2p0LmRlZmF1bHQudGhpczpqdC5kZWZhdWx0LnNlbGYsTz0hKCJjb21waWxlImluIHQmJiFsfHx0LnNjaGVtYT09PSExKTtuLmFzc2lnbihoLCgwLEllLl8pYCR7X30keygwLHpjLmNhbGxWYWxpZGF0ZUNvZGUpKGUsaSxiLE8pfWAsdC5tb2RpZnlpbmcpfWZ1bmN0aW9uIHkoXyl7dmFyIGI7bi5pZigoMCxJZS5ub3QpKChiPXQudmFsaWQpIT09bnVsbCYmYiE9PXZvaWQgMD9iOmgpLF8pfX1YZS5mdW5jS2V5d29yZENvZGU9QmM7ZnVuY3Rpb24gdWEoZSl7Y29uc3R7Z2VuOnQsZGF0YTpyLGl0Om59PWU7dC5pZihuLnBhcmVudERhdGEsKCk9PnQuYXNzaWduKHIsKDAsSWUuXylgJHtuLnBhcmVudERhdGF9WyR7bi5wYXJlbnREYXRhUHJvcGVydHl9XWApKX1mdW5jdGlvbiBKYyhlLHQpe2NvbnN0e2dlbjpyfT1lO3IuaWYoKDAsSWUuXylgQXJyYXkuaXNBcnJheSgke3R9KWAsKCk9PntyLmFzc2lnbihqdC5kZWZhdWx0LnZFcnJvcnMsKDAsSWUuXylgJHtqdC5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHt0fSA6ICR7anQuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHt0fSlgKS5hc3NpZ24oanQuZGVmYXVsdC5lcnJvcnMsKDAsSWUuXylgJHtqdC5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApLCgwLEhjLmV4dGVuZEVycm9ycykoZSl9LCgpPT5lLmVycm9yKCkpfWZ1bmN0aW9uIHFjKHtzY2hlbWFFbnY6ZX0sdCl7aWYodC5hc3luYyYmIWUuJGFzeW5jKXRocm93IG5ldyBFcnJvcigiYXN5bmMga2V5d29yZCBpbiBzeW5jIHNjaGVtYSIpfWZ1bmN0aW9uIGxhKGUsdCxyKXtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihga2V5d29yZCAiJHt0fSIgZmFpbGVkIHRvIGNvbXBpbGVgKTtyZXR1cm4gZS5zY29wZVZhbHVlKCJrZXl3b3JkIix0eXBlb2Ygcj09ImZ1bmN0aW9uIj97cmVmOnJ9OntyZWY6cixjb2RlOigwLEllLnN0cmluZ2lmeSkocil9KX1mdW5jdGlvbiBHYyhlLHQscj0hMSl7cmV0dXJuIXQubGVuZ3RofHx0LnNvbWUobj0+bj09PSJhcnJheSI/QXJyYXkuaXNBcnJheShlKTpuPT09Im9iamVjdCI/ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKTp0eXBlb2YgZT09bnx8ciYmdHlwZW9mIGU9PSJ1bmRlZmluZWQiKX1YZS52YWxpZFNjaGVtYVR5cGU9R2M7ZnVuY3Rpb24gUWMoe3NjaGVtYTplLG9wdHM6dCxzZWxmOnIsZXJyU2NoZW1hUGF0aDpufSxzLGEpe2lmKEFycmF5LmlzQXJyYXkocy5rZXl3b3JkKT8hcy5rZXl3b3JkLmluY2x1ZGVzKGEpOnMua2V5d29yZCE9PWEpdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtjb25zdCBvPXMuZGVwZW5kZW5jaWVzO2lmKG8hPW51bGwmJm8uc29tZShsPT4hT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbCkpKXRocm93IG5ldyBFcnJvcihgcGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgZGVwZW5kZW5jaWVzIG9mICR7YX06ICR7by5qb2luKCIsIil9YCk7aWYocy52YWxpZGF0ZVNjaGVtYSYmIXMudmFsaWRhdGVTY2hlbWEoZVthXSkpe2NvbnN0IGY9YGtleXdvcmQgIiR7YX0iIHZhbHVlIGlzIGludmFsaWQgYXQgcGF0aCAiJHtufSI6IGArci5lcnJvcnNUZXh0KHMudmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtpZih0LnZhbGlkYXRlU2NoZW1hPT09ImxvZyIpci5sb2dnZXIuZXJyb3IoZik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZil9fVhlLnZhbGlkYXRlS2V5d29yZFVzYWdlPVFjO3ZhciB5dD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoeXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHl0LmV4dGVuZFN1YnNjaGVtYU1vZGU9eXQuZXh0ZW5kU3Vic2NoZW1hRGF0YT15dC5nZXRTdWJzY2hlbWE9dm9pZCAwO2NvbnN0IFplPXVlLGZhPWJlO2Z1bmN0aW9uIFljKGUse2tleXdvcmQ6dCxzY2hlbWFQcm9wOnIsc2NoZW1hOm4sc2NoZW1hUGF0aDpzLGVyclNjaGVtYVBhdGg6YSx0b3BTY2hlbWFSZWY6b30pe2lmKHQhPT12b2lkIDAmJm4hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCdib3RoICJrZXl3b3JkIiBhbmQgInNjaGVtYSIgcGFzc2VkLCBvbmx5IG9uZSBhbGxvd2VkJyk7aWYodCE9PXZvaWQgMCl7Y29uc3QgbD1lLnNjaGVtYVt0XTtyZXR1cm4gcj09PXZvaWQgMD97c2NoZW1hOmwsc2NoZW1hUGF0aDooMCxaZS5fKWAke2Uuc2NoZW1hUGF0aH0keygwLFplLmdldFByb3BlcnR5KSh0KX1gLGVyclNjaGVtYVBhdGg6YCR7ZS5lcnJTY2hlbWFQYXRofS8ke3R9YH06e3NjaGVtYTpsW3JdLHNjaGVtYVBhdGg6KDAsWmUuXylgJHtlLnNjaGVtYVBhdGh9JHsoMCxaZS5nZXRQcm9wZXJ0eSkodCl9JHsoMCxaZS5nZXRQcm9wZXJ0eSkocil9YCxlcnJTY2hlbWFQYXRoOmAke2UuZXJyU2NoZW1hUGF0aH0vJHt0fS8keygwLGZhLmVzY2FwZUZyYWdtZW50KShyKX1gfX1pZihuIT09dm9pZCAwKXtpZihzPT09dm9pZCAwfHxhPT09dm9pZCAwfHxvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcignInNjaGVtYVBhdGgiLCAiZXJyU2NoZW1hUGF0aCIgYW5kICJ0b3BTY2hlbWFSZWYiIGFyZSByZXF1aXJlZCB3aXRoICJzY2hlbWEiJyk7cmV0dXJue3NjaGVtYTpuLHNjaGVtYVBhdGg6cyx0b3BTY2hlbWFSZWY6byxlcnJTY2hlbWFQYXRoOmF9fXRocm93IG5ldyBFcnJvcignZWl0aGVyICJrZXl3b3JkIiBvciAic2NoZW1hIiBtdXN0IGJlIHBhc3NlZCcpfXl0LmdldFN1YnNjaGVtYT1ZYztmdW5jdGlvbiBXYyhlLHQse2RhdGFQcm9wOnIsZGF0YVByb3BUeXBlOm4sZGF0YTpzLGRhdGFUeXBlczphLHByb3BlcnR5TmFtZTpvfSl7aWYocyE9PXZvaWQgMCYmciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJ2JvdGggImRhdGEiIGFuZCAiZGF0YVByb3AiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO2NvbnN0e2dlbjpsfT10O2lmKHIhPT12b2lkIDApe2NvbnN0e2Vycm9yUGF0aDpwLGRhdGFQYXRoQXJyOmksb3B0czpofT10LEU9bC5sZXQoImRhdGEiLCgwLFplLl8pYCR7dC5kYXRhfSR7KDAsWmUuZ2V0UHJvcGVydHkpKHIpfWAsITApO2YoRSksZS5lcnJvclBhdGg9KDAsWmUuc3RyKWAke3B9JHsoMCxmYS5nZXRFcnJvclBhdGgpKHIsbixoLmpzUHJvcGVydHlTeW50YXgpfWAsZS5wYXJlbnREYXRhUHJvcGVydHk9KDAsWmUuXylgJHtyfWAsZS5kYXRhUGF0aEFycj1bLi4uaSxlLnBhcmVudERhdGFQcm9wZXJ0eV19aWYocyE9PXZvaWQgMCl7Y29uc3QgcD1zIGluc3RhbmNlb2YgWmUuTmFtZT9zOmwubGV0KCJkYXRhIixzLCEwKTtmKHApLG8hPT12b2lkIDAmJihlLnByb3BlcnR5TmFtZT1vKX1hJiYoZS5kYXRhVHlwZXM9YSk7ZnVuY3Rpb24gZihwKXtlLmRhdGE9cCxlLmRhdGFMZXZlbD10LmRhdGFMZXZlbCsxLGUuZGF0YVR5cGVzPVtdLHQuZGVmaW5lZFByb3BlcnRpZXM9bmV3IFNldCxlLnBhcmVudERhdGE9dC5kYXRhLGUuZGF0YU5hbWVzPVsuLi50LmRhdGFOYW1lcyxwXX19eXQuZXh0ZW5kU3Vic2NoZW1hRGF0YT1XYztmdW5jdGlvbiBYYyhlLHtqdGREaXNjcmltaW5hdG9yOnQsanRkTWV0YWRhdGE6cixjb21wb3NpdGVSdWxlOm4sY3JlYXRlRXJyb3JzOnMsYWxsRXJyb3JzOmF9KXtuIT09dm9pZCAwJiYoZS5jb21wb3NpdGVSdWxlPW4pLHMhPT12b2lkIDAmJihlLmNyZWF0ZUVycm9ycz1zKSxhIT09dm9pZCAwJiYoZS5hbGxFcnJvcnM9YSksZS5qdGREaXNjcmltaW5hdG9yPXQsZS5qdGRNZXRhZGF0YT1yfXl0LmV4dGVuZFN1YnNjaGVtYU1vZGU9WGM7dmFyIFRlPXt9LFpjPWZ1bmN0aW9uIGUodCxyKXtpZih0PT09cilyZXR1cm4hMDtpZih0JiZyJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiByPT0ib2JqZWN0Iil7aWYodC5jb25zdHJ1Y3RvciE9PXIuY29uc3RydWN0b3IpcmV0dXJuITE7dmFyIG4scyxhO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKG49dC5sZW5ndGgsbiE9ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHM9bjtzLS0hPT0wOylpZighZSh0W3NdLHJbc10pKXJldHVybiExO3JldHVybiEwfWlmKHQuY29uc3RydWN0b3I9PT1SZWdFeHApcmV0dXJuIHQuc291cmNlPT09ci5zb3VyY2UmJnQuZmxhZ3M9PT1yLmZsYWdzO2lmKHQudmFsdWVPZiE9PU9iamVjdC5wcm90b3R5cGUudmFsdWVPZilyZXR1cm4gdC52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKTtpZih0LnRvU3RyaW5nIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZylyZXR1cm4gdC50b1N0cmluZygpPT09ci50b1N0cmluZygpO2lmKGE9T2JqZWN0LmtleXModCksbj1hLmxlbmd0aCxuIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2ZvcihzPW47cy0tIT09MDspaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGFbc10pKXJldHVybiExO2ZvcihzPW47cy0tIT09MDspe3ZhciBvPWFbc107aWYoIWUodFtvXSxyW29dKSlyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm4gdCE9PXQmJnIhPT1yfSxkYT17ZXhwb3J0czp7fX0sJHQ9ZGEuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dHlwZW9mIHQ9PSJmdW5jdGlvbiImJihyPXQsdD17fSkscj10LmNifHxyO3ZhciBuPXR5cGVvZiByPT0iZnVuY3Rpb24iP3I6ci5wcmV8fGZ1bmN0aW9uKCl7fSxzPXIucG9zdHx8ZnVuY3Rpb24oKXt9O2FuKHQsbixzLGUsIiIsZSl9OyR0LmtleXdvcmRzPXthZGRpdGlvbmFsSXRlbXM6ITAsaXRlbXM6ITAsY29udGFpbnM6ITAsYWRkaXRpb25hbFByb3BlcnRpZXM6ITAscHJvcGVydHlOYW1lczohMCxub3Q6ITAsaWY6ITAsdGhlbjohMCxlbHNlOiEwfSwkdC5hcnJheUtleXdvcmRzPXtpdGVtczohMCxhbGxPZjohMCxhbnlPZjohMCxvbmVPZjohMH0sJHQucHJvcHNLZXl3b3Jkcz17JGRlZnM6ITAsZGVmaW5pdGlvbnM6ITAscHJvcGVydGllczohMCxwYXR0ZXJuUHJvcGVydGllczohMCxkZXBlbmRlbmNpZXM6ITB9LCR0LnNraXBLZXl3b3Jkcz17ZGVmYXVsdDohMCxlbnVtOiEwLGNvbnN0OiEwLHJlcXVpcmVkOiEwLG1heGltdW06ITAsbWluaW11bTohMCxleGNsdXNpdmVNYXhpbXVtOiEwLGV4Y2x1c2l2ZU1pbmltdW06ITAsbXVsdGlwbGVPZjohMCxtYXhMZW5ndGg6ITAsbWluTGVuZ3RoOiEwLHBhdHRlcm46ITAsZm9ybWF0OiEwLG1heEl0ZW1zOiEwLG1pbkl0ZW1zOiEwLHVuaXF1ZUl0ZW1zOiEwLG1heFByb3BlcnRpZXM6ITAsbWluUHJvcGVydGllczohMH07ZnVuY3Rpb24gYW4oZSx0LHIsbixzLGEsbyxsLGYscCl7aWYobiYmdHlwZW9mIG49PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShuKSl7dChuLHMsYSxvLGwsZixwKTtmb3IodmFyIGkgaW4gbil7dmFyIGg9bltpXTtpZihBcnJheS5pc0FycmF5KGgpKXtpZihpIGluICR0LmFycmF5S2V5d29yZHMpZm9yKHZhciBFPTA7RTxoLmxlbmd0aDtFKyspYW4oZSx0LHIsaFtFXSxzKyIvIitpKyIvIitFLGEscyxpLG4sRSl9ZWxzZSBpZihpIGluICR0LnByb3BzS2V5d29yZHMpe2lmKGgmJnR5cGVvZiBoPT0ib2JqZWN0Iilmb3IodmFyIFQgaW4gaClhbihlLHQscixoW1RdLHMrIi8iK2krIi8iK3hjKFQpLGEscyxpLG4sVCl9ZWxzZShpIGluICR0LmtleXdvcmRzfHxlLmFsbEtleXMmJiEoaSBpbiAkdC5za2lwS2V5d29yZHMpKSYmYW4oZSx0LHIsaCxzKyIvIitpLGEscyxpLG4pfXIobixzLGEsbyxsLGYscCl9fWZ1bmN0aW9uIHhjKGUpe3JldHVybiBlLnJlcGxhY2UoL34vZywifjAiKS5yZXBsYWNlKC9cLy9nLCJ+MSIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVGUuZ2V0U2NoZW1hUmVmcz1UZS5yZXNvbHZlVXJsPVRlLm5vcm1hbGl6ZUlkPVRlLl9nZXRGdWxsUGF0aD1UZS5nZXRGdWxsUGF0aD1UZS5pbmxpbmVSZWY9dm9pZCAwO2NvbnN0IGV1PWJlLHR1PVpjLHJ1PWRhLmV4cG9ydHMsbnU9bmV3IFNldChbInR5cGUiLCJmb3JtYXQiLCJwYXR0ZXJuIiwibWF4TGVuZ3RoIiwibWluTGVuZ3RoIiwibWF4UHJvcGVydGllcyIsIm1pblByb3BlcnRpZXMiLCJtYXhJdGVtcyIsIm1pbkl0ZW1zIiwibWF4aW11bSIsIm1pbmltdW0iLCJ1bmlxdWVJdGVtcyIsIm11bHRpcGxlT2YiLCJyZXF1aXJlZCIsImVudW0iLCJjb25zdCJdKTtmdW5jdGlvbiBzdShlLHQ9ITApe3JldHVybiB0eXBlb2YgZT09ImJvb2xlYW4iPyEwOnQ9PT0hMD8hcW4oZSk6dD9oYShlKTw9dDohMX1UZS5pbmxpbmVSZWY9c3U7Y29uc3QgYXU9bmV3IFNldChbIiRyZWYiLCIkcmVjdXJzaXZlUmVmIiwiJHJlY3Vyc2l2ZUFuY2hvciIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiXSk7ZnVuY3Rpb24gcW4oZSl7Zm9yKGNvbnN0IHQgaW4gZSl7aWYoYXUuaGFzKHQpKXJldHVybiEwO2NvbnN0IHI9ZVt0XTtpZihBcnJheS5pc0FycmF5KHIpJiZyLnNvbWUocW4pfHx0eXBlb2Ygcj09Im9iamVjdCImJnFuKHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGhhKGUpe2xldCB0PTA7Zm9yKGNvbnN0IHIgaW4gZSl7aWYocj09PSIkcmVmIilyZXR1cm4gMS8wO2lmKHQrKywhbnUuaGFzKHIpJiYodHlwZW9mIGVbcl09PSJvYmplY3QiJiYoMCxldS5lYWNoSXRlbSkoZVtyXSxuPT50Kz1oYShuKSksdD09PTEvMCkpcmV0dXJuIDEvMH1yZXR1cm4gdH1mdW5jdGlvbiBwYShlLHQ9IiIscil7ciE9PSExJiYodD1ucih0KSk7Y29uc3Qgbj1lLnBhcnNlKHQpO3JldHVybiBtYShlLG4pfVRlLmdldEZ1bGxQYXRoPXBhO2Z1bmN0aW9uIG1hKGUsdCl7cmV0dXJuIGUuc2VyaWFsaXplKHQpLnNwbGl0KCIjIilbMF0rIiMifVRlLl9nZXRGdWxsUGF0aD1tYTtjb25zdCBvdT0vI1wvPyQvO2Z1bmN0aW9uIG5yKGUpe3JldHVybiBlP2UucmVwbGFjZShvdSwiIik6IiJ9VGUubm9ybWFsaXplSWQ9bnI7ZnVuY3Rpb24gaXUoZSx0LHIpe3JldHVybiByPW5yKHIpLGUucmVzb2x2ZSh0LHIpfVRlLnJlc29sdmVVcmw9aXU7Y29uc3QgY3U9L15bYS16X11bLWEtejAtOS5fXSokL2k7ZnVuY3Rpb24gdXUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybnt9O2NvbnN0e3NjaGVtYUlkOnIsdXJpUmVzb2x2ZXI6bn09dGhpcy5vcHRzLHM9bnIoZVtyXXx8dCksYT17IiI6c30sbz1wYShuLHMsITEpLGw9e30sZj1uZXcgU2V0O3JldHVybiBydShlLHthbGxLZXlzOiEwfSwoaCxFLFQsSSk9PntpZihJPT09dm9pZCAwKXJldHVybjtjb25zdCBqPW8rRTtsZXQgeT1hW0ldO3R5cGVvZiBoW3JdPT0ic3RyaW5nIiYmKHk9Xy5jYWxsKHRoaXMsaFtyXSkpLGIuY2FsbCh0aGlzLGguJGFuY2hvciksYi5jYWxsKHRoaXMsaC4kZHluYW1pY0FuY2hvciksYVtFXT15O2Z1bmN0aW9uIF8oTyl7Y29uc3QgQT10aGlzLm9wdHMudXJpUmVzb2x2ZXIucmVzb2x2ZTtpZihPPW5yKHk/QSh5LE8pOk8pLGYuaGFzKE8pKXRocm93IGkoTyk7Zi5hZGQoTyk7bGV0IEg9dGhpcy5yZWZzW09dO3JldHVybiB0eXBlb2YgSD09InN0cmluZyImJihIPXRoaXMucmVmc1tIXSksdHlwZW9mIEg9PSJvYmplY3QiP3AoaCxILnNjaGVtYSxPKTpPIT09bnIoaikmJihPWzBdPT09IiMiPyhwKGgsbFtPXSxPKSxsW09dPWgpOnRoaXMucmVmc1tPXT1qKSxPfWZ1bmN0aW9uIGIoTyl7aWYodHlwZW9mIE89PSJzdHJpbmciKXtpZighY3UudGVzdChPKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yICIke099ImApO18uY2FsbCh0aGlzLGAjJHtPfWApfX19KSxsO2Z1bmN0aW9uIHAoaCxFLFQpe2lmKEUhPT12b2lkIDAmJiF0dShoLEUpKXRocm93IGkoVCl9ZnVuY3Rpb24gaShoKXtyZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgIiR7aH0iIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hYCl9fVRlLmdldFNjaGVtYVJlZnM9dXUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxXZS5nZXREYXRhPVdlLktleXdvcmRDeHQ9V2UudmFsaWRhdGVGdW5jdGlvbkNvZGU9dm9pZCAwO2NvbnN0IHZhPXRyLF9hPW5uLEduPWx0LG9uPW5uLGx1PXNuLCRyPVhlLFFuPXl0LE09dWUsSj1MZSxmdT1UZSxmdD1iZSx3cj1FcjtmdW5jdGlvbiBkdShlKXtpZigkYShlKSYmKHdhKGUpLHlhKGUpKSl7bXUoZSk7cmV0dXJufWdhKGUsKCk9PigwLHZhLnRvcEJvb2xPckVtcHR5U2NoZW1hKShlKSl9V2UudmFsaWRhdGVGdW5jdGlvbkNvZGU9ZHU7ZnVuY3Rpb24gZ2Eoe2dlbjplLHZhbGlkYXRlTmFtZTp0LHNjaGVtYTpyLHNjaGVtYUVudjpuLG9wdHM6c30sYSl7cy5jb2RlLmVzNT9lLmZ1bmModCwoMCxNLl8pYCR7Si5kZWZhdWx0LmRhdGF9LCAke0ouZGVmYXVsdC52YWxDeHR9YCxuLiRhc3luYywoKT0+e2UuY29kZSgoMCxNLl8pYCJ1c2Ugc3RyaWN0IjsgJHtFYShyLHMpfWApLHB1KGUscyksZS5jb2RlKGEpfSk6ZS5mdW5jKHQsKDAsTS5fKWAke0ouZGVmYXVsdC5kYXRhfSwgJHtodShzKX1gLG4uJGFzeW5jLCgpPT5lLmNvZGUoRWEocixzKSkuY29kZShhKSl9ZnVuY3Rpb24gaHUoZSl7cmV0dXJuKDAsTS5fKWB7JHtKLmRlZmF1bHQuaW5zdGFuY2VQYXRofT0iIiwgJHtKLmRlZmF1bHQucGFyZW50RGF0YX0sICR7Si5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX0sICR7Si5kZWZhdWx0LnJvb3REYXRhfT0ke0ouZGVmYXVsdC5kYXRhfSR7ZS5keW5hbWljUmVmPygwLE0uXylgLCAke0ouZGVmYXVsdC5keW5hbWljQW5jaG9yc309e31gOk0ubmlsfX09e31gfWZ1bmN0aW9uIHB1KGUsdCl7ZS5pZihKLmRlZmF1bHQudmFsQ3h0LCgpPT57ZS52YXIoSi5kZWZhdWx0Lmluc3RhbmNlUGF0aCwoMCxNLl8pYCR7Si5kZWZhdWx0LnZhbEN4dH0uJHtKLmRlZmF1bHQuaW5zdGFuY2VQYXRofWApLGUudmFyKEouZGVmYXVsdC5wYXJlbnREYXRhLCgwLE0uXylgJHtKLmRlZmF1bHQudmFsQ3h0fS4ke0ouZGVmYXVsdC5wYXJlbnREYXRhfWApLGUudmFyKEouZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksKDAsTS5fKWAke0ouZGVmYXVsdC52YWxDeHR9LiR7Si5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX1gKSxlLnZhcihKLmRlZmF1bHQucm9vdERhdGEsKDAsTS5fKWAke0ouZGVmYXVsdC52YWxDeHR9LiR7Si5kZWZhdWx0LnJvb3REYXRhfWApLHQuZHluYW1pY1JlZiYmZS52YXIoSi5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCgwLE0uXylgJHtKLmRlZmF1bHQudmFsQ3h0fS4ke0ouZGVmYXVsdC5keW5hbWljQW5jaG9yc31gKX0sKCk9PntlLnZhcihKLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCgwLE0uXylgIiJgKSxlLnZhcihKLmRlZmF1bHQucGFyZW50RGF0YSwoMCxNLl8pYHVuZGVmaW5lZGApLGUudmFyKEouZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksKDAsTS5fKWB1bmRlZmluZWRgKSxlLnZhcihKLmRlZmF1bHQucm9vdERhdGEsSi5kZWZhdWx0LmRhdGEpLHQuZHluYW1pY1JlZiYmZS52YXIoSi5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCgwLE0uXylge31gKX0pfWZ1bmN0aW9uIG11KGUpe2NvbnN0e3NjaGVtYTp0LG9wdHM6cixnZW46bn09ZTtnYShlLCgpPT57ci4kY29tbWVudCYmdC4kY29tbWVudCYmUmEoZSkseXUoZSksbi5sZXQoSi5kZWZhdWx0LnZFcnJvcnMsbnVsbCksbi5sZXQoSi5kZWZhdWx0LmVycm9ycywwKSxyLnVuZXZhbHVhdGVkJiZ2dShlKSxTYShlKSxTdShlKX0pfWZ1bmN0aW9uIHZ1KGUpe2NvbnN0e2dlbjp0LHZhbGlkYXRlTmFtZTpyfT1lO2UuZXZhbHVhdGVkPXQuY29uc3QoImV2YWx1YXRlZCIsKDAsTS5fKWAke3J9LmV2YWx1YXRlZGApLHQuaWYoKDAsTS5fKWAke2UuZXZhbHVhdGVkfS5keW5hbWljUHJvcHNgLCgpPT50LmFzc2lnbigoMCxNLl8pYCR7ZS5ldmFsdWF0ZWR9LnByb3BzYCwoMCxNLl8pYHVuZGVmaW5lZGApKSx0LmlmKCgwLE0uXylgJHtlLmV2YWx1YXRlZH0uZHluYW1pY0l0ZW1zYCwoKT0+dC5hc3NpZ24oKDAsTS5fKWAke2UuZXZhbHVhdGVkfS5pdGVtc2AsKDAsTS5fKWB1bmRlZmluZWRgKSl9ZnVuY3Rpb24gRWEoZSx0KXtjb25zdCByPXR5cGVvZiBlPT0ib2JqZWN0IiYmZVt0LnNjaGVtYUlkXTtyZXR1cm4gciYmKHQuY29kZS5zb3VyY2V8fHQuY29kZS5wcm9jZXNzKT8oMCxNLl8pYC8qIyBzb3VyY2VVUkw9JHtyfSAqL2A6TS5uaWx9ZnVuY3Rpb24gX3UoZSx0KXtpZigkYShlKSYmKHdhKGUpLHlhKGUpKSl7Z3UoZSx0KTtyZXR1cm59KDAsdmEuYm9vbE9yRW1wdHlTY2hlbWEpKGUsdCl9ZnVuY3Rpb24geWEoe3NjaGVtYTplLHNlbGY6dH0pe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIWU7Zm9yKGNvbnN0IHIgaW4gZSlpZih0LlJVTEVTLmFsbFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkYShlKXtyZXR1cm4gdHlwZW9mIGUuc2NoZW1hIT0iYm9vbGVhbiJ9ZnVuY3Rpb24gZ3UoZSx0KXtjb25zdHtzY2hlbWE6cixnZW46bixvcHRzOnN9PWU7cy4kY29tbWVudCYmci4kY29tbWVudCYmUmEoZSksJHUoZSksd3UoZSk7Y29uc3QgYT1uLmNvbnN0KCJfZXJycyIsSi5kZWZhdWx0LmVycm9ycyk7U2EoZSxhKSxuLnZhcih0LCgwLE0uXylgJHthfSA9PT0gJHtKLmRlZmF1bHQuZXJyb3JzfWApfWZ1bmN0aW9uIHdhKGUpeygwLGZ0LmNoZWNrVW5rbm93blJ1bGVzKShlKSxFdShlKX1mdW5jdGlvbiBTYShlLHQpe2lmKGUub3B0cy5qdGQpcmV0dXJuIGJhKGUsW10sITEsdCk7Y29uc3Qgcj0oMCxfYS5nZXRTY2hlbWFUeXBlcykoZS5zY2hlbWEpLG49KDAsX2EuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoZSxyKTtiYShlLHIsIW4sdCl9ZnVuY3Rpb24gRXUoZSl7Y29uc3R7c2NoZW1hOnQsZXJyU2NoZW1hUGF0aDpyLG9wdHM6bixzZWxmOnN9PWU7dC4kcmVmJiZuLmlnbm9yZUtleXdvcmRzV2l0aFJlZiYmKDAsZnQuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHQscy5SVUxFUykmJnMubG9nZ2VyLndhcm4oYCRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggIiR7cn0iYCl9ZnVuY3Rpb24geXUoZSl7Y29uc3R7c2NoZW1hOnQsb3B0czpyfT1lO3QuZGVmYXVsdCE9PXZvaWQgMCYmci51c2VEZWZhdWx0cyYmci5zdHJpY3RTY2hlbWEmJigwLGZ0LmNoZWNrU3RyaWN0TW9kZSkoZSwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdCIpfWZ1bmN0aW9uICR1KGUpe2NvbnN0IHQ9ZS5zY2hlbWFbZS5vcHRzLnNjaGVtYUlkXTt0JiYoZS5iYXNlSWQ9KDAsZnUucmVzb2x2ZVVybCkoZS5vcHRzLnVyaVJlc29sdmVyLGUuYmFzZUlkLHQpKX1mdW5jdGlvbiB3dShlKXtpZihlLnNjaGVtYS4kYXN5bmMmJiFlLnNjaGVtYUVudi4kYXN5bmMpdGhyb3cgbmV3IEVycm9yKCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWEiKX1mdW5jdGlvbiBSYSh7Z2VuOmUsc2NoZW1hRW52OnQsc2NoZW1hOnIsZXJyU2NoZW1hUGF0aDpuLG9wdHM6c30pe2NvbnN0IGE9ci4kY29tbWVudDtpZihzLiRjb21tZW50PT09ITApZS5jb2RlKCgwLE0uXylgJHtKLmRlZmF1bHQuc2VsZn0ubG9nZ2VyLmxvZygke2F9KWApO2Vsc2UgaWYodHlwZW9mIHMuJGNvbW1lbnQ9PSJmdW5jdGlvbiIpe2NvbnN0IG89KDAsTS5zdHIpYCR7bn0vJGNvbW1lbnRgLGw9ZS5zY29wZVZhbHVlKCJyb290Iix7cmVmOnQucm9vdH0pO2UuY29kZSgoMCxNLl8pYCR7Si5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHthfSwgJHtvfSwgJHtsfS5zY2hlbWEpYCl9fWZ1bmN0aW9uIFN1KGUpe2NvbnN0e2dlbjp0LHNjaGVtYUVudjpyLHZhbGlkYXRlTmFtZTpuLFZhbGlkYXRpb25FcnJvcjpzLG9wdHM6YX09ZTtyLiRhc3luYz90LmlmKCgwLE0uXylgJHtKLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsKCk9PnQucmV0dXJuKEouZGVmYXVsdC5kYXRhKSwoKT0+dC50aHJvdygoMCxNLl8pYG5ldyAke3N9KCR7Si5kZWZhdWx0LnZFcnJvcnN9KWApKToodC5hc3NpZ24oKDAsTS5fKWAke259LmVycm9yc2AsSi5kZWZhdWx0LnZFcnJvcnMpLGEudW5ldmFsdWF0ZWQmJlJ1KGUpLHQucmV0dXJuKCgwLE0uXylgJHtKLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGApKX1mdW5jdGlvbiBSdSh7Z2VuOmUsZXZhbHVhdGVkOnQscHJvcHM6cixpdGVtczpufSl7ciBpbnN0YW5jZW9mIE0uTmFtZSYmZS5hc3NpZ24oKDAsTS5fKWAke3R9LnByb3BzYCxyKSxuIGluc3RhbmNlb2YgTS5OYW1lJiZlLmFzc2lnbigoMCxNLl8pYCR7dH0uaXRlbXNgLG4pfWZ1bmN0aW9uIGJhKGUsdCxyLG4pe2NvbnN0e2dlbjpzLHNjaGVtYTphLGRhdGE6byxhbGxFcnJvcnM6bCxvcHRzOmYsc2VsZjpwfT1lLHtSVUxFUzppfT1wO2lmKGEuJHJlZiYmKGYuaWdub3JlS2V5d29yZHNXaXRoUmVmfHwhKDAsZnQuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKGEsaSkpKXtzLmJsb2NrKCgpPT5UYShlLCIkcmVmIixpLmFsbC4kcmVmLmRlZmluaXRpb24pKTtyZXR1cm59Zi5qdGR8fGJ1KGUsdCkscy5ibG9jaygoKT0+e2Zvcihjb25zdCBFIG9mIGkucnVsZXMpaChFKTtoKGkucG9zdCl9KTtmdW5jdGlvbiBoKEUpeyEoMCxHbi5zaG91bGRVc2VHcm91cCkoYSxFKXx8KEUudHlwZT8ocy5pZigoMCxvbi5jaGVja0RhdGFUeXBlKShFLnR5cGUsbyxmLnN0cmljdE51bWJlcnMpKSxPYShlLEUpLHQubGVuZ3RoPT09MSYmdFswXT09PUUudHlwZSYmciYmKHMuZWxzZSgpLCgwLG9uLnJlcG9ydFR5cGVFcnJvcikoZSkpLHMuZW5kSWYoKSk6T2EoZSxFKSxsfHxzLmlmKCgwLE0uXylgJHtKLmRlZmF1bHQuZXJyb3JzfSA9PT0gJHtufHwwfWApKX19ZnVuY3Rpb24gT2EoZSx0KXtjb25zdHtnZW46cixzY2hlbWE6bixvcHRzOnt1c2VEZWZhdWx0czpzfX09ZTtzJiYoMCxsdS5hc3NpZ25EZWZhdWx0cykoZSx0LnR5cGUpLHIuYmxvY2soKCk9Pntmb3IoY29uc3QgYSBvZiB0LnJ1bGVzKSgwLEduLnNob3VsZFVzZVJ1bGUpKG4sYSkmJlRhKGUsYS5rZXl3b3JkLGEuZGVmaW5pdGlvbix0LnR5cGUpfSl9ZnVuY3Rpb24gYnUoZSx0KXtlLnNjaGVtYUVudi5tZXRhfHwhZS5vcHRzLnN0cmljdFR5cGVzfHwoT3UoZSx0KSxlLm9wdHMuYWxsb3dVbmlvblR5cGVzfHxOdShlLHQpLFB1KGUsZS5kYXRhVHlwZXMpKX1mdW5jdGlvbiBPdShlLHQpe2lmKCEhdC5sZW5ndGgpe2lmKCFlLmRhdGFUeXBlcy5sZW5ndGgpe2UuZGF0YVR5cGVzPXQ7cmV0dXJufXQuZm9yRWFjaChyPT57TmEoZS5kYXRhVHlwZXMscil8fFluKGUsYHR5cGUgIiR7cn0iIG5vdCBhbGxvd2VkIGJ5IGNvbnRleHQgIiR7ZS5kYXRhVHlwZXMuam9pbigiLCIpfSJgKX0pLGUuZGF0YVR5cGVzPWUuZGF0YVR5cGVzLmZpbHRlcihyPT5OYSh0LHIpKX19ZnVuY3Rpb24gTnUoZSx0KXt0Lmxlbmd0aD4xJiYhKHQubGVuZ3RoPT09MiYmdC5pbmNsdWRlcygibnVsbCIpKSYmWW4oZSwidXNlIGFsbG93VW5pb25UeXBlcyB0byBhbGxvdyB1bmlvbiB0eXBlIGtleXdvcmQiKX1mdW5jdGlvbiBQdShlLHQpe2NvbnN0IHI9ZS5zZWxmLlJVTEVTLmFsbDtmb3IoY29uc3QgbiBpbiByKXtjb25zdCBzPXJbbl07aWYodHlwZW9mIHM9PSJvYmplY3QiJiYoMCxHbi5zaG91bGRVc2VSdWxlKShlLnNjaGVtYSxzKSl7Y29uc3R7dHlwZTphfT1zLmRlZmluaXRpb247YS5sZW5ndGgmJiFhLnNvbWUobz0+VHUodCxvKSkmJlluKGUsYG1pc3NpbmcgdHlwZSAiJHthLmpvaW4oIiwiKX0iIGZvciBrZXl3b3JkICIke259ImApfX19ZnVuY3Rpb24gVHUoZSx0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KXx8dD09PSJudW1iZXIiJiZlLmluY2x1ZGVzKCJpbnRlZ2VyIil9ZnVuY3Rpb24gTmEoZSx0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KXx8dD09PSJpbnRlZ2VyIiYmZS5pbmNsdWRlcygibnVtYmVyIil9ZnVuY3Rpb24gWW4oZSx0KXt0Kz1gIGF0ICIke2Uuc2NoZW1hRW52LmJhc2VJZCtlLmVyclNjaGVtYVBhdGh9IiAoc3RyaWN0VHlwZXMpYCwoMCxmdC5jaGVja1N0cmljdE1vZGUpKGUsdCxlLm9wdHMuc3RyaWN0VHlwZXMpfWNsYXNzIFBhe2NvbnN0cnVjdG9yKHQscixuKXtpZigoMCwkci52YWxpZGF0ZUtleXdvcmRVc2FnZSkodCxyLG4pLHRoaXMuZ2VuPXQuZ2VuLHRoaXMuYWxsRXJyb3JzPXQuYWxsRXJyb3JzLHRoaXMua2V5d29yZD1uLHRoaXMuZGF0YT10LmRhdGEsdGhpcy5zY2hlbWE9dC5zY2hlbWFbbl0sdGhpcy4kZGF0YT1yLiRkYXRhJiZ0Lm9wdHMuJGRhdGEmJnRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS4kZGF0YSx0aGlzLnNjaGVtYVZhbHVlPSgwLGZ0LnNjaGVtYVJlZk9yVmFsKSh0LHRoaXMuc2NoZW1hLG4sdGhpcy4kZGF0YSksdGhpcy5zY2hlbWFUeXBlPXIuc2NoZW1hVHlwZSx0aGlzLnBhcmVudFNjaGVtYT10LnNjaGVtYSx0aGlzLnBhcmFtcz17fSx0aGlzLml0PXQsdGhpcy5kZWY9cix0aGlzLiRkYXRhKXRoaXMuc2NoZW1hQ29kZT10Lmdlbi5jb25zdCgidlNjaGVtYSIsQWEodGhpcy4kZGF0YSx0KSk7ZWxzZSBpZih0aGlzLnNjaGVtYUNvZGU9dGhpcy5zY2hlbWFWYWx1ZSwhKDAsJHIudmFsaWRTY2hlbWFUeXBlKSh0aGlzLnNjaGVtYSxyLnNjaGVtYVR5cGUsci5hbGxvd1VuZGVmaW5lZCkpdGhyb3cgbmV3IEVycm9yKGAke259IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShyLnNjaGVtYVR5cGUpfWApOygiY29kZSJpbiByP3IudHJhY2tFcnJvcnM6ci5lcnJvcnMhPT0hMSkmJih0aGlzLmVycnNDb3VudD10Lmdlbi5jb25zdCgiX2VycnMiLEouZGVmYXVsdC5lcnJvcnMpKX1yZXN1bHQodCxyLG4pe3RoaXMuZmFpbFJlc3VsdCgoMCxNLm5vdCkodCkscixuKX1mYWlsUmVzdWx0KHQscixuKXt0aGlzLmdlbi5pZih0KSxuP24oKTp0aGlzLmVycm9yKCkscj8odGhpcy5nZW4uZWxzZSgpLHIoKSx0aGlzLmFsbEVycm9ycyYmdGhpcy5nZW4uZW5kSWYoKSk6dGhpcy5hbGxFcnJvcnM/dGhpcy5nZW4uZW5kSWYoKTp0aGlzLmdlbi5lbHNlKCl9cGFzcyh0LHIpe3RoaXMuZmFpbFJlc3VsdCgoMCxNLm5vdCkodCksdm9pZCAwLHIpfWZhaWwodCl7aWYodD09PXZvaWQgMCl7dGhpcy5lcnJvcigpLHRoaXMuYWxsRXJyb3JzfHx0aGlzLmdlbi5pZighMSk7cmV0dXJufXRoaXMuZ2VuLmlmKHQpLHRoaXMuZXJyb3IoKSx0aGlzLmFsbEVycm9ycz90aGlzLmdlbi5lbmRJZigpOnRoaXMuZ2VuLmVsc2UoKX1mYWlsJGRhdGEodCl7aWYoIXRoaXMuJGRhdGEpcmV0dXJuIHRoaXMuZmFpbCh0KTtjb25zdHtzY2hlbWFDb2RlOnJ9PXRoaXM7dGhpcy5mYWlsKCgwLE0uXylgJHtyfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLE0ub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksdCl9KWApfWVycm9yKHQscixuKXtpZihyKXt0aGlzLnNldFBhcmFtcyhyKSx0aGlzLl9lcnJvcih0LG4pLHRoaXMuc2V0UGFyYW1zKHt9KTtyZXR1cm59dGhpcy5fZXJyb3IodCxuKX1fZXJyb3IodCxyKXsodD93ci5yZXBvcnRFeHRyYUVycm9yOndyLnJlcG9ydEVycm9yKSh0aGlzLHRoaXMuZGVmLmVycm9yLHIpfSRkYXRhRXJyb3IoKXsoMCx3ci5yZXBvcnRFcnJvcikodGhpcyx0aGlzLmRlZi4kZGF0YUVycm9yfHx3ci5rZXl3b3JkJERhdGFFcnJvcil9cmVzZXQoKXtpZih0aGlzLmVycnNDb3VudD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJ2FkZCAidHJhY2tFcnJvcnMiIHRvIGtleXdvcmQgZGVmaW5pdGlvbicpOygwLHdyLnJlc2V0RXJyb3JzQ291bnQpKHRoaXMuZ2VuLHRoaXMuZXJyc0NvdW50KX1vayh0KXt0aGlzLmFsbEVycm9yc3x8dGhpcy5nZW4uaWYodCl9c2V0UGFyYW1zKHQscil7cj9PYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLHQpOnRoaXMucGFyYW1zPXR9YmxvY2skZGF0YSh0LHIsbj1NLm5pbCl7dGhpcy5nZW4uYmxvY2soKCk9Pnt0aGlzLmNoZWNrJGRhdGEodCxuKSxyKCl9KX1jaGVjayRkYXRhKHQ9TS5uaWwscj1NLm5pbCl7aWYoIXRoaXMuJGRhdGEpcmV0dXJuO2NvbnN0e2dlbjpuLHNjaGVtYUNvZGU6cyxzY2hlbWFUeXBlOmEsZGVmOm99PXRoaXM7bi5pZigoMCxNLm9yKSgoMCxNLl8pYCR7c30gPT09IHVuZGVmaW5lZGAscikpLHQhPT1NLm5pbCYmbi5hc3NpZ24odCwhMCksKGEubGVuZ3RofHxvLnZhbGlkYXRlU2NoZW1hKSYmKG4uZWxzZUlmKHRoaXMuaW52YWxpZCRkYXRhKCkpLHRoaXMuJGRhdGFFcnJvcigpLHQhPT1NLm5pbCYmbi5hc3NpZ24odCwhMSkpLG4uZWxzZSgpfWludmFsaWQkZGF0YSgpe2NvbnN0e2dlbjp0LHNjaGVtYUNvZGU6cixzY2hlbWFUeXBlOm4sZGVmOnMsaXQ6YX09dGhpcztyZXR1cm4oMCxNLm9yKShvKCksbCgpKTtmdW5jdGlvbiBvKCl7aWYobi5sZW5ndGgpe2lmKCEociBpbnN0YW5jZW9mIE0uTmFtZSkpdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtjb25zdCBmPUFycmF5LmlzQXJyYXkobik/bjpbbl07cmV0dXJuKDAsTS5fKWAkeygwLG9uLmNoZWNrRGF0YVR5cGVzKShmLHIsYS5vcHRzLnN0cmljdE51bWJlcnMsb24uRGF0YVR5cGUuV3JvbmcpfWB9cmV0dXJuIE0ubmlsfWZ1bmN0aW9uIGwoKXtpZihzLnZhbGlkYXRlU2NoZW1hKXtjb25zdCBmPXQuc2NvcGVWYWx1ZSgidmFsaWRhdGUkZGF0YSIse3JlZjpzLnZhbGlkYXRlU2NoZW1hfSk7cmV0dXJuKDAsTS5fKWAhJHtmfSgke3J9KWB9cmV0dXJuIE0ubmlsfX1zdWJzY2hlbWEodCxyKXtjb25zdCBuPSgwLFFuLmdldFN1YnNjaGVtYSkodGhpcy5pdCx0KTsoMCxRbi5leHRlbmRTdWJzY2hlbWFEYXRhKShuLHRoaXMuaXQsdCksKDAsUW4uZXh0ZW5kU3Vic2NoZW1hTW9kZSkobix0KTtjb25zdCBzPWxlKFEoUSh7fSx0aGlzLml0KSxuKSx7aXRlbXM6dm9pZCAwLHByb3BzOnZvaWQgMH0pO3JldHVybiBfdShzLHIpLHN9bWVyZ2VFdmFsdWF0ZWQodCxyKXtjb25zdHtpdDpuLGdlbjpzfT10aGlzOyFuLm9wdHMudW5ldmFsdWF0ZWR8fChuLnByb3BzIT09ITAmJnQucHJvcHMhPT12b2lkIDAmJihuLnByb3BzPWZ0Lm1lcmdlRXZhbHVhdGVkLnByb3BzKHMsdC5wcm9wcyxuLnByb3BzLHIpKSxuLml0ZW1zIT09ITAmJnQuaXRlbXMhPT12b2lkIDAmJihuLml0ZW1zPWZ0Lm1lcmdlRXZhbHVhdGVkLml0ZW1zKHMsdC5pdGVtcyxuLml0ZW1zLHIpKSl9bWVyZ2VWYWxpZEV2YWx1YXRlZCh0LHIpe2NvbnN0e2l0Om4sZ2VuOnN9PXRoaXM7aWYobi5vcHRzLnVuZXZhbHVhdGVkJiYobi5wcm9wcyE9PSEwfHxuLml0ZW1zIT09ITApKXJldHVybiBzLmlmKHIsKCk9PnRoaXMubWVyZ2VFdmFsdWF0ZWQodCxNLk5hbWUpKSwhMH19V2UuS2V5d29yZEN4dD1QYTtmdW5jdGlvbiBUYShlLHQscixuKXtjb25zdCBzPW5ldyBQYShlLHIsdCk7ImNvZGUiaW4gcj9yLmNvZGUocyxuKTpzLiRkYXRhJiZyLnZhbGlkYXRlPygwLCRyLmZ1bmNLZXl3b3JkQ29kZSkocyxyKToibWFjcm8iaW4gcj8oMCwkci5tYWNyb0tleXdvcmRDb2RlKShzLHIpOihyLmNvbXBpbGV8fHIudmFsaWRhdGUpJiYoMCwkci5mdW5jS2V5d29yZENvZGUpKHMscil9Y29uc3QgQXU9L15cLyg/Oltefl18fjB8fjEpKiQvLEN1PS9eKFswLTldKykoI3xcLyg/Oltefl18fjB8fjEpKik/JC87ZnVuY3Rpb24gQWEoZSx7ZGF0YUxldmVsOnQsZGF0YU5hbWVzOnIsZGF0YVBhdGhBcnI6bn0pe2xldCBzLGE7aWYoZT09PSIiKXJldHVybiBKLmRlZmF1bHQucm9vdERhdGE7aWYoZVswXT09PSIvIil7aWYoIUF1LnRlc3QoZSkpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHtlfWApO3M9ZSxhPUouZGVmYXVsdC5yb290RGF0YX1lbHNle2NvbnN0IHA9Q3UuZXhlYyhlKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAke2V9YCk7Y29uc3QgaT0rcFsxXTtpZihzPXBbMl0scz09PSIjIil7aWYoaT49dCl0aHJvdyBuZXcgRXJyb3IoZigicHJvcGVydHkvaW5kZXgiLGkpKTtyZXR1cm4gblt0LWldfWlmKGk+dCl0aHJvdyBuZXcgRXJyb3IoZigiZGF0YSIsaSkpO2lmKGE9clt0LWldLCFzKXJldHVybiBhfWxldCBvPWE7Y29uc3QgbD1zLnNwbGl0KCIvIik7Zm9yKGNvbnN0IHAgb2YgbClwJiYoYT0oMCxNLl8pYCR7YX0keygwLE0uZ2V0UHJvcGVydHkpKCgwLGZ0LnVuZXNjYXBlSnNvblBvaW50ZXIpKHApKX1gLG89KDAsTS5fKWAke299ICYmICR7YX1gKTtyZXR1cm4gbztmdW5jdGlvbiBmKHAsaSl7cmV0dXJuYENhbm5vdCBhY2Nlc3MgJHtwfSAke2l9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke3R9YH19V2UuZ2V0RGF0YT1BYTt2YXIgY249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGNuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjbGFzcyBJdSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCJ2YWxpZGF0aW9uIGZhaWxlZCIpLHRoaXMuZXJyb3JzPXQsdGhpcy5hanY9dGhpcy52YWxpZGF0aW9uPSEwfX1jbi5kZWZhdWx0PUl1O3ZhciBrdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFduPVRlO2NsYXNzIER1IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxyLG4scyl7c3VwZXIoc3x8YGNhbid0IHJlc29sdmUgcmVmZXJlbmNlICR7bn0gZnJvbSBpZCAke3J9YCksdGhpcy5taXNzaW5nUmVmPSgwLFduLnJlc29sdmVVcmwpKHQscixuKSx0aGlzLm1pc3NpbmdTY2hlbWE9KDAsV24ubm9ybWFsaXplSWQpKCgwLFduLmdldEZ1bGxQYXRoKSh0LHRoaXMubWlzc2luZ1JlZikpfX1rdC5kZWZhdWx0PUR1O3ZhciBDZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLENlLnJlc29sdmVTY2hlbWE9Q2UuZ2V0Q29tcGlsaW5nU2NoZW1hPUNlLnJlc29sdmVSZWY9Q2UuY29tcGlsZVNjaGVtYT1DZS5TY2hlbWFFbnY9dm9pZCAwO2NvbnN0IFFlPXVlLGp1PWNuLFV0PUxlLFllPVRlLENhPWJlLGt1PVdlO2NsYXNzIHVue2NvbnN0cnVjdG9yKHQpe3ZhciByO3RoaXMucmVmcz17fSx0aGlzLmR5bmFtaWNBbmNob3JzPXt9O2xldCBuO3R5cGVvZiB0LnNjaGVtYT09Im9iamVjdCImJihuPXQuc2NoZW1hKSx0aGlzLnNjaGVtYT10LnNjaGVtYSx0aGlzLnNjaGVtYUlkPXQuc2NoZW1hSWQsdGhpcy5yb290PXQucm9vdHx8dGhpcyx0aGlzLmJhc2VJZD0ocj10LmJhc2VJZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6KDAsWWUubm9ybWFsaXplSWQpKG49PW51bGw/dm9pZCAwOm5bdC5zY2hlbWFJZHx8IiRpZCJdKSx0aGlzLnNjaGVtYVBhdGg9dC5zY2hlbWFQYXRoLHRoaXMubG9jYWxSZWZzPXQubG9jYWxSZWZzLHRoaXMubWV0YT10Lm1ldGEsdGhpcy4kYXN5bmM9bj09bnVsbD92b2lkIDA6bi4kYXN5bmMsdGhpcy5yZWZzPXt9fX1DZS5TY2hlbWFFbnY9dW47ZnVuY3Rpb24gWG4oZSl7Y29uc3QgdD1JYS5jYWxsKHRoaXMsZSk7aWYodClyZXR1cm4gdDtjb25zdCByPSgwLFllLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsZS5yb290LmJhc2VJZCkse2VzNTpuLGxpbmVzOnN9PXRoaXMub3B0cy5jb2RlLHtvd25Qcm9wZXJ0aWVzOmF9PXRoaXMub3B0cyxvPW5ldyBRZS5Db2RlR2VuKHRoaXMuc2NvcGUse2VzNTpuLGxpbmVzOnMsb3duUHJvcGVydGllczphfSk7bGV0IGw7ZS4kYXN5bmMmJihsPW8uc2NvcGVWYWx1ZSgiRXJyb3IiLHtyZWY6anUuZGVmYXVsdCxjb2RlOigwLFFlLl8pYHJlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvciIpLmRlZmF1bHRgfSkpO2NvbnN0IGY9by5zY29wZU5hbWUoInZhbGlkYXRlIik7ZS52YWxpZGF0ZU5hbWU9Zjtjb25zdCBwPXtnZW46byxhbGxFcnJvcnM6dGhpcy5vcHRzLmFsbEVycm9ycyxkYXRhOlV0LmRlZmF1bHQuZGF0YSxwYXJlbnREYXRhOlV0LmRlZmF1bHQucGFyZW50RGF0YSxwYXJlbnREYXRhUHJvcGVydHk6VXQuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksZGF0YU5hbWVzOltVdC5kZWZhdWx0LmRhdGFdLGRhdGFQYXRoQXJyOltRZS5uaWxdLGRhdGFMZXZlbDowLGRhdGFUeXBlczpbXSxkZWZpbmVkUHJvcGVydGllczpuZXcgU2V0LHRvcFNjaGVtYVJlZjpvLnNjb3BlVmFsdWUoInNjaGVtYSIsdGhpcy5vcHRzLmNvZGUuc291cmNlPT09ITA/e3JlZjplLnNjaGVtYSxjb2RlOigwLFFlLnN0cmluZ2lmeSkoZS5zY2hlbWEpfTp7cmVmOmUuc2NoZW1hfSksdmFsaWRhdGVOYW1lOmYsVmFsaWRhdGlvbkVycm9yOmwsc2NoZW1hOmUuc2NoZW1hLHNjaGVtYUVudjplLHJvb3RJZDpyLGJhc2VJZDplLmJhc2VJZHx8cixzY2hlbWFQYXRoOlFlLm5pbCxlcnJTY2hlbWFQYXRoOmUuc2NoZW1hUGF0aHx8KHRoaXMub3B0cy5qdGQ/IiI6IiMiKSxlcnJvclBhdGg6KDAsUWUuXylgIiJgLG9wdHM6dGhpcy5vcHRzLHNlbGY6dGhpc307bGV0IGk7dHJ5e3RoaXMuX2NvbXBpbGF0aW9ucy5hZGQoZSksKDAsa3UudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHApLG8ub3B0aW1pemUodGhpcy5vcHRzLmNvZGUub3B0aW1pemUpO2NvbnN0IGg9by50b1N0cmluZygpO2k9YCR7by5zY29wZVJlZnMoVXQuZGVmYXVsdC5zY29wZSl9cmV0dXJuICR7aH1gLHRoaXMub3B0cy5jb2RlLnByb2Nlc3MmJihpPXRoaXMub3B0cy5jb2RlLnByb2Nlc3MoaSxlKSk7Y29uc3QgVD1uZXcgRnVuY3Rpb24oYCR7VXQuZGVmYXVsdC5zZWxmfWAsYCR7VXQuZGVmYXVsdC5zY29wZX1gLGkpKHRoaXMsdGhpcy5zY29wZS5nZXQoKSk7aWYodGhpcy5zY29wZS52YWx1ZShmLHtyZWY6VH0pLFQuZXJyb3JzPW51bGwsVC5zY2hlbWE9ZS5zY2hlbWEsVC5zY2hlbWFFbnY9ZSxlLiRhc3luYyYmKFQuJGFzeW5jPSEwKSx0aGlzLm9wdHMuY29kZS5zb3VyY2U9PT0hMCYmKFQuc291cmNlPXt2YWxpZGF0ZU5hbWU6Zix2YWxpZGF0ZUNvZGU6aCxzY29wZVZhbHVlczpvLl92YWx1ZXN9KSx0aGlzLm9wdHMudW5ldmFsdWF0ZWQpe2NvbnN0e3Byb3BzOkksaXRlbXM6an09cDtULmV2YWx1YXRlZD17cHJvcHM6SSBpbnN0YW5jZW9mIFFlLk5hbWU/dm9pZCAwOkksaXRlbXM6aiBpbnN0YW5jZW9mIFFlLk5hbWU/dm9pZCAwOmosZHluYW1pY1Byb3BzOkkgaW5zdGFuY2VvZiBRZS5OYW1lLGR5bmFtaWNJdGVtczpqIGluc3RhbmNlb2YgUWUuTmFtZX0sVC5zb3VyY2UmJihULnNvdXJjZS5ldmFsdWF0ZWQ9KDAsUWUuc3RyaW5naWZ5KShULmV2YWx1YXRlZCkpfXJldHVybiBlLnZhbGlkYXRlPVQsZX1jYXRjaChoKXt0aHJvdyBkZWxldGUgZS52YWxpZGF0ZSxkZWxldGUgZS52YWxpZGF0ZU5hbWUsaSYmdGhpcy5sb2dnZXIuZXJyb3IoIkVycm9yIGNvbXBpbGluZyBzY2hlbWEsIGZ1bmN0aW9uIGNvZGU6IixpKSxofWZpbmFsbHl7dGhpcy5fY29tcGlsYXRpb25zLmRlbGV0ZShlKX19Q2UuY29tcGlsZVNjaGVtYT1YbjtmdW5jdGlvbiBVdShlLHQscil7dmFyIG47cj0oMCxZZS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsdCxyKTtjb25zdCBzPWUucmVmc1tyXTtpZihzKXJldHVybiBzO2xldCBhPUx1LmNhbGwodGhpcyxlLHIpO2lmKGE9PT12b2lkIDApe2NvbnN0IG89KG49ZS5sb2NhbFJlZnMpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bltyXSx7c2NoZW1hSWQ6bH09dGhpcy5vcHRzO28mJihhPW5ldyB1bih7c2NoZW1hOm8sc2NoZW1hSWQ6bCxyb290OmUsYmFzZUlkOnR9KSl9aWYoYSE9PXZvaWQgMClyZXR1cm4gZS5yZWZzW3JdPUZ1LmNhbGwodGhpcyxhKX1DZS5yZXNvbHZlUmVmPVV1O2Z1bmN0aW9uIEZ1KGUpe3JldHVybigwLFllLmlubGluZVJlZikoZS5zY2hlbWEsdGhpcy5vcHRzLmlubGluZVJlZnMpP2Uuc2NoZW1hOmUudmFsaWRhdGU/ZTpYbi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSWEoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fY29tcGlsYXRpb25zKWlmKE11KHQsZSkpcmV0dXJuIHR9Q2UuZ2V0Q29tcGlsaW5nU2NoZW1hPUlhO2Z1bmN0aW9uIE11KGUsdCl7cmV0dXJuIGUuc2NoZW1hPT09dC5zY2hlbWEmJmUucm9vdD09PXQucm9vdCYmZS5iYXNlSWQ9PT10LmJhc2VJZH1mdW5jdGlvbiBMdShlLHQpe2xldCByO2Zvcig7dHlwZW9mKHI9dGhpcy5yZWZzW3RdKT09InN0cmluZyI7KXQ9cjtyZXR1cm4gcnx8dGhpcy5zY2hlbWFzW3RdfHxsbi5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBsbihlLHQpe2NvbnN0IHI9dGhpcy5vcHRzLnVyaVJlc29sdmVyLnBhcnNlKHQpLG49KDAsWWUuX2dldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIscik7bGV0IHM9KDAsWWUuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlcixlLmJhc2VJZCx2b2lkIDApO2lmKE9iamVjdC5rZXlzKGUuc2NoZW1hKS5sZW5ndGg+MCYmbj09PXMpcmV0dXJuIFpuLmNhbGwodGhpcyxyLGUpO2NvbnN0IGE9KDAsWWUubm9ybWFsaXplSWQpKG4pLG89dGhpcy5yZWZzW2FdfHx0aGlzLnNjaGVtYXNbYV07aWYodHlwZW9mIG89PSJzdHJpbmciKXtjb25zdCBsPWxuLmNhbGwodGhpcyxlLG8pO3JldHVybiB0eXBlb2YobD09bnVsbD92b2lkIDA6bC5zY2hlbWEpIT0ib2JqZWN0Ij92b2lkIDA6Wm4uY2FsbCh0aGlzLHIsbCl9aWYodHlwZW9mKG89PW51bGw/dm9pZCAwOm8uc2NoZW1hKT09Im9iamVjdCIpe2lmKG8udmFsaWRhdGV8fFhuLmNhbGwodGhpcyxvKSxhPT09KDAsWWUubm9ybWFsaXplSWQpKHQpKXtjb25zdHtzY2hlbWE6bH09byx7c2NoZW1hSWQ6Zn09dGhpcy5vcHRzLHA9bFtmXTtyZXR1cm4gcCYmKHM9KDAsWWUucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLHMscCkpLG5ldyB1bih7c2NoZW1hOmwsc2NoZW1hSWQ6Zixyb290OmUsYmFzZUlkOnN9KX1yZXR1cm4gWm4uY2FsbCh0aGlzLHIsbyl9fUNlLnJlc29sdmVTY2hlbWE9bG47Y29uc3QgVnU9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImVudW0iLCJkZXBlbmRlbmNpZXMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBabihlLHtiYXNlSWQ6dCxzY2hlbWE6cixyb290Om59KXt2YXIgcztpZigoKHM9ZS5mcmFnbWVudCk9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzWzBdKSE9PSIvIilyZXR1cm47Zm9yKGNvbnN0IGwgb2YgZS5mcmFnbWVudC5zbGljZSgxKS5zcGxpdCgiLyIpKXtpZih0eXBlb2Ygcj09ImJvb2xlYW4iKXJldHVybjtjb25zdCBmPXJbKDAsQ2EudW5lc2NhcGVGcmFnbWVudCkobCldO2lmKGY9PT12b2lkIDApcmV0dXJuO3I9Zjtjb25zdCBwPXR5cGVvZiByPT0ib2JqZWN0IiYmclt0aGlzLm9wdHMuc2NoZW1hSWRdOyFWdS5oYXMobCkmJnAmJih0PSgwLFllLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlcix0LHApKX1sZXQgYTtpZih0eXBlb2YgciE9ImJvb2xlYW4iJiZyLiRyZWYmJiEoMCxDYS5zY2hlbWFIYXNSdWxlc0J1dFJlZikocix0aGlzLlJVTEVTKSl7Y29uc3QgbD0oMCxZZS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsdCxyLiRyZWYpO2E9bG4uY2FsbCh0aGlzLG4sbCl9Y29uc3R7c2NoZW1hSWQ6b309dGhpcy5vcHRzO2lmKGE9YXx8bmV3IHVuKHtzY2hlbWE6cixzY2hlbWFJZDpvLHJvb3Q6bixiYXNlSWQ6dH0pLGEuc2NoZW1hIT09YS5yb290LnNjaGVtYSlyZXR1cm4gYX12YXIgenU9eyRpZDoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jIixkZXNjcmlwdGlvbjoiTWV0YS1zY2hlbWEgZm9yICRkYXRhIHJlZmVyZW5jZSAoSlNPTiBBbnlTY2hlbWEgZXh0ZW5zaW9uIHByb3Bvc2FsKSIsdHlwZToib2JqZWN0IixyZXF1aXJlZDpbIiRkYXRhIl0scHJvcGVydGllczp7JGRhdGE6e3R5cGU6InN0cmluZyIsYW55T2Y6W3tmb3JtYXQ6InJlbGF0aXZlLWpzb24tcG9pbnRlciJ9LHtmb3JtYXQ6Impzb24tcG9pbnRlciJ9XX19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiExfSx4bj17fSxlcz17ZXhwb3J0czp7fX07LyoqIEBsaWNlbnNlIFVSSS5qcyB2NC40LjEgKGMpIDIwMTEgR2FyeSBDb3VydC4gTGljZW5zZTogaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qcyAqLyhmdW5jdGlvbihlLHQpeyhmdW5jdGlvbihyLG4pe24odCl9KShlZSxmdW5jdGlvbihyKXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShkKSx2PTA7djxkO3YrKyl1W3ZdPWFyZ3VtZW50c1t2XTtpZih1Lmxlbmd0aD4xKXt1WzBdPXVbMF0uc2xpY2UoMCwtMSk7Zm9yKHZhciBSPXUubGVuZ3RoLTEsUz0xO1M8UjsrK1MpdVtTXT11W1NdLnNsaWNlKDEsLTEpO3JldHVybiB1W1JdPXVbUl0uc2xpY2UoMSksdS5qb2luKCIiKX1lbHNlIHJldHVybiB1WzBdfWZ1bmN0aW9uIHMoZCl7cmV0dXJuIig/OiIrZCsiKSJ9ZnVuY3Rpb24gYShkKXtyZXR1cm4gZD09PXZvaWQgMD8idW5kZWZpbmVkIjpkPT09bnVsbD8ibnVsbCI6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpLnNwbGl0KCIgIikucG9wKCkuc3BsaXQoIl0iKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbyhkKXtyZXR1cm4gZC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGwoZCl7cmV0dXJuIGQhPW51bGw/ZCBpbnN0YW5jZW9mIEFycmF5P2Q6dHlwZW9mIGQubGVuZ3RoIT0ibnVtYmVyInx8ZC5zcGxpdHx8ZC5zZXRJbnRlcnZhbHx8ZC5jYWxsP1tkXTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkKTpbXX1mdW5jdGlvbiBmKGQsdSl7dmFyIHY9ZDtpZih1KWZvcih2YXIgUiBpbiB1KXZbUl09dVtSXTtyZXR1cm4gdn1mdW5jdGlvbiBwKGQpe3ZhciB1PSJbQS1aYS16XSIsdj0iWzAtOV0iLFI9bih2LCJbQS1GYS1mXSIpLFM9cyhzKCIlW0VGZWZdIitSKyIlIitSK1IrIiUiK1IrUikrInwiK3MoIiVbODlBLUZhLWZdIitSKyIlIitSK1IpKyJ8IitzKCIlIitSK1IpKSx6PSJbXFw6XFwvXFw/XFwjXFxbXFxdXFxAXSIsSz0iW1xcIVxcJFxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcO1xcPV0iLHNlPW4oeixLKSxtZT1kPyJbXFx4QTAtXFx1MjAwRFxcdTIwMTAtXFx1MjAyOVxcdTIwMkYtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0iOiJbXSIsJGU9ZD8iW1xcdUUwMDAtXFx1RjhGRl0iOiJbXSIseD1uKHUsdiwiW1xcLVxcLlxcX1xcfl0iLG1lKTtzKHUrbih1LHYsIltcXCtcXC1cXC5dIikrIioiKSxzKHMoUysifCIrbih4LEssIltcXDpdIikpKyIqIik7dmFyIGZlPXMocygiMjVbMC01XSIpKyJ8IitzKCIyWzAtNF0iK3YpKyJ8IitzKCIxIit2K3YpKyJ8IitzKCIwP1sxLTldIit2KSsifDA/MD8iK3YpLHdlPXMoZmUrIlxcLiIrZmUrIlxcLiIrZmUrIlxcLiIrZmUpLHE9cyhSKyJ7MSw0fSIpLF9lPXMocyhxKyJcXDoiK3EpKyJ8Iit3ZSksUmU9cyhzKHErIlxcOiIpKyJ7Nn0iK19lKSxnZT1zKCJcXDpcXDoiK3MocSsiXFw6IikrIns1fSIrX2UpLFB0PXMocyhxKSsiP1xcOlxcOiIrcyhxKyJcXDoiKSsiezR9IitfZSksYXQ9cyhzKHMocSsiXFw6IikrInswLDF9IitxKSsiP1xcOlxcOiIrcyhxKyJcXDoiKSsiezN9IitfZSksb3Q9cyhzKHMocSsiXFw6IikrInswLDJ9IitxKSsiP1xcOlxcOiIrcyhxKyJcXDoiKSsiezJ9IitfZSksdnI9cyhzKHMocSsiXFw6IikrInswLDN9IitxKSsiP1xcOlxcOiIrcSsiXFw6IitfZSkscXQ9cyhzKHMocSsiXFw6IikrInswLDR9IitxKSsiP1xcOlxcOiIrX2UpLHFlPXMocyhzKHErIlxcOiIpKyJ7MCw1fSIrcSkrIj9cXDpcXDoiK3EpLGl0PXMocyhzKHErIlxcOiIpKyJ7MCw2fSIrcSkrIj9cXDpcXDoiKSxHdD1zKFtSZSxnZSxQdCxhdCxvdCx2cixxdCxxZSxpdF0uam9pbigifCIpKSxfdD1zKHMoeCsifCIrUykrIisiKTtzKCJbdlZdIitSKyIrXFwuIituKHgsSywiW1xcOl0iKSsiKyIpLHMocyhTKyJ8IituKHgsSykpKyIqIik7dmFyIEJyPXMoUysifCIrbih4LEssIltcXDpcXEBdIikpO3JldHVybiBzKHMoUysifCIrbih4LEssIltcXEBdIikpKyIrIikscyhzKEJyKyJ8IituKCJbXFwvXFw/XSIsJGUpKSsiKiIpLHtOT1RfU0NIRU1FOm5ldyBSZWdFeHAobigiW15dIix1LHYsIltcXCtcXC1cXC5dIiksImciKSxOT1RfVVNFUklORk86bmV3IFJlZ0V4cChuKCJbXlxcJVxcOl0iLHgsSyksImciKSxOT1RfSE9TVDpuZXcgUmVnRXhwKG4oIlteXFwlXFxbXFxdXFw6XSIseCxLKSwiZyIpLE5PVF9QQVRIOm5ldyBSZWdFeHAobigiW15cXCVcXC9cXDpcXEBdIix4LEspLCJnIiksTk9UX1BBVEhfTk9TQ0hFTUU6bmV3IFJlZ0V4cChuKCJbXlxcJVxcL1xcQF0iLHgsSyksImciKSxOT1RfUVVFUlk6bmV3IFJlZ0V4cChuKCJbXlxcJV0iLHgsSywiW1xcOlxcQFxcL1xcP10iLCRlKSwiZyIpLE5PVF9GUkFHTUVOVDpuZXcgUmVnRXhwKG4oIlteXFwlXSIseCxLLCJbXFw6XFxAXFwvXFw/XSIpLCJnIiksRVNDQVBFOm5ldyBSZWdFeHAobigiW15dIix4LEspLCJnIiksVU5SRVNFUlZFRDpuZXcgUmVnRXhwKHgsImciKSxPVEhFUl9DSEFSUzpuZXcgUmVnRXhwKG4oIlteXFwlXSIseCxzZSksImciKSxQQ1RfRU5DT0RFRDpuZXcgUmVnRXhwKFMsImciKSxJUFY0QUREUkVTUzpuZXcgUmVnRXhwKCJeKCIrd2UrIikkIiksSVBWNkFERFJFU1M6bmV3IFJlZ0V4cCgiXlxcWz8oIitHdCsiKSIrcyhzKCJcXCUyNXxcXCUoPyEiK1IrInsyfSkiKSsiKCIrX3QrIikiKSsiP1xcXT8kIil9fXZhciBpPXAoITEpLGg9cCghMCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQodSx2KXt2YXIgUj1bXSxTPSEwLHo9ITEsSz12b2lkIDA7dHJ5e2Zvcih2YXIgc2U9dVtTeW1ib2wuaXRlcmF0b3JdKCksbWU7IShTPShtZT1zZS5uZXh0KCkpLmRvbmUpJiYoUi5wdXNoKG1lLnZhbHVlKSwhKHYmJlIubGVuZ3RoPT09dikpO1M9ITApO31jYXRjaCgkZSl7ej0hMCxLPSRlfWZpbmFsbHl7dHJ5eyFTJiZzZS5yZXR1cm4mJnNlLnJldHVybigpfWZpbmFsbHl7aWYoeil0aHJvdyBLfX1yZXR1cm4gUn1yZXR1cm4gZnVuY3Rpb24odSx2KXtpZihBcnJheS5pc0FycmF5KHUpKXJldHVybiB1O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodSkpcmV0dXJuIGQodSx2KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpLFQ9ZnVuY3Rpb24oZCl7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciB1PTAsdj1BcnJheShkLmxlbmd0aCk7dTxkLmxlbmd0aDt1Kyspdlt1XT1kW3VdO3JldHVybiB2fWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZCl9LEk9MjE0NzQ4MzY0NyxqPTM2LHk9MSxfPTI2LGI9MzgsTz03MDAsQT03MixIPTEyOCwkPSItIixOPS9eeG4tLS8sRD0vW15cMC1ceDdFXS8sQj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csRz17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0scGU9ai15LFc9TWF0aC5mbG9vcixvZT1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFgoZCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoR1tkXSl9ZnVuY3Rpb24gdmUoZCx1KXtmb3IodmFyIHY9W10sUj1kLmxlbmd0aDtSLS07KXZbUl09dShkW1JdKTtyZXR1cm4gdn1mdW5jdGlvbiBFZShkLHUpe3ZhciB2PWQuc3BsaXQoIkAiKSxSPSIiO3YubGVuZ3RoPjEmJihSPXZbMF0rIkAiLGQ9dlsxXSksZD1kLnJlcGxhY2UoQiwiLiIpO3ZhciBTPWQuc3BsaXQoIi4iKSx6PXZlKFMsdSkuam9pbigiLiIpO3JldHVybiBSK3p9ZnVuY3Rpb24gTmUoZCl7Zm9yKHZhciB1PVtdLHY9MCxSPWQubGVuZ3RoO3Y8Ujspe3ZhciBTPWQuY2hhckNvZGVBdCh2KyspO2lmKFM+PTU1Mjk2JiZTPD01NjMxOSYmdjxSKXt2YXIgej1kLmNoYXJDb2RlQXQodisrKTsoeiY2NDUxMik9PTU2MzIwP3UucHVzaCgoKFMmMTAyMyk8PDEwKSsoeiYxMDIzKSs2NTUzNik6KHUucHVzaChTKSx2LS0pfWVsc2UgdS5wdXNoKFMpfXJldHVybiB1fXZhciBCZT1mdW5jdGlvbih1KXtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLFQodSkpfSx1cj1mdW5jdGlvbih1KXtyZXR1cm4gdS00ODwxMD91LTIyOnUtNjU8MjY/dS02NTp1LTk3PDI2P3UtOTc6an0saz1mdW5jdGlvbih1LHYpe3JldHVybiB1KzIyKzc1Kih1PDI2KS0oKHYhPTApPDw1KX0sZz1mdW5jdGlvbih1LHYsUil7dmFyIFM9MDtmb3IodT1SP1codS9PKTp1Pj4xLHUrPVcodS92KTt1PnBlKl8+PjE7Uys9ail1PVcodS9wZSk7cmV0dXJuIFcoUysocGUrMSkqdS8odStiKSl9LEM9ZnVuY3Rpb24odSl7dmFyIHY9W10sUj11Lmxlbmd0aCxTPTAsej1ILEs9QSxzZT11Lmxhc3RJbmRleE9mKCQpO3NlPDAmJihzZT0wKTtmb3IodmFyIG1lPTA7bWU8c2U7KyttZSl1LmNoYXJDb2RlQXQobWUpPj0xMjgmJlgoIm5vdC1iYXNpYyIpLHYucHVzaCh1LmNoYXJDb2RlQXQobWUpKTtmb3IodmFyICRlPXNlPjA/c2UrMTowOyRlPFI7KXtmb3IodmFyIHg9UyxmZT0xLHdlPWo7O3dlKz1qKXskZT49UiYmWCgiaW52YWxpZC1pbnB1dCIpO3ZhciBxPXVyKHUuY2hhckNvZGVBdCgkZSsrKSk7KHE+PWp8fHE+VygoSS1TKS9mZSkpJiZYKCJvdmVyZmxvdyIpLFMrPXEqZmU7dmFyIF9lPXdlPD1LP3k6d2U+PUsrXz9fOndlLUs7aWYocTxfZSlicmVhazt2YXIgUmU9ai1fZTtmZT5XKEkvUmUpJiZYKCJvdmVyZmxvdyIpLGZlKj1SZX12YXIgZ2U9di5sZW5ndGgrMTtLPWcoUy14LGdlLHg9PTApLFcoUy9nZSk+SS16JiZYKCJvdmVyZmxvdyIpLHorPVcoUy9nZSksUyU9Z2Usdi5zcGxpY2UoUysrLDAseil9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZyx2KX0sdz1mdW5jdGlvbih1KXt2YXIgdj1bXTt1PU5lKHUpO3ZhciBSPXUubGVuZ3RoLFM9SCx6PTAsSz1BLHNlPSEwLG1lPSExLCRlPXZvaWQgMDt0cnl7Zm9yKHZhciB4PXVbU3ltYm9sLml0ZXJhdG9yXSgpLGZlOyEoc2U9KGZlPXgubmV4dCgpKS5kb25lKTtzZT0hMCl7dmFyIHdlPWZlLnZhbHVlO3dlPDEyOCYmdi5wdXNoKG9lKHdlKSl9fWNhdGNoKEpyKXttZT0hMCwkZT1Kcn1maW5hbGx5e3RyeXshc2UmJngucmV0dXJuJiZ4LnJldHVybigpfWZpbmFsbHl7aWYobWUpdGhyb3cgJGV9fXZhciBxPXYubGVuZ3RoLF9lPXE7Zm9yKHEmJnYucHVzaCgkKTtfZTxSOyl7dmFyIFJlPUksZ2U9ITAsUHQ9ITEsYXQ9dm9pZCAwO3RyeXtmb3IodmFyIG90PXVbU3ltYm9sLml0ZXJhdG9yXSgpLHZyOyEoZ2U9KHZyPW90Lm5leHQoKSkuZG9uZSk7Z2U9ITApe3ZhciBxdD12ci52YWx1ZTtxdD49UyYmcXQ8UmUmJihSZT1xdCl9fWNhdGNoKEpyKXtQdD0hMCxhdD1Kcn1maW5hbGx5e3RyeXshZ2UmJm90LnJldHVybiYmb3QucmV0dXJuKCl9ZmluYWxseXtpZihQdCl0aHJvdyBhdH19dmFyIHFlPV9lKzE7UmUtUz5XKChJLXopL3FlKSYmWCgib3ZlcmZsb3ciKSx6Kz0oUmUtUykqcWUsUz1SZTt2YXIgaXQ9ITAsR3Q9ITEsX3Q9dm9pZCAwO3RyeXtmb3IodmFyIEJyPXVbU3ltYm9sLml0ZXJhdG9yXSgpLFVvOyEoaXQ9KFVvPUJyLm5leHQoKSkuZG9uZSk7aXQ9ITApe3ZhciBGbz1Vby52YWx1ZTtpZihGbzxTJiYrK3o+SSYmWCgib3ZlcmZsb3ciKSxGbz09Uyl7Zm9yKHZhciBTbj16LFJuPWo7O1JuKz1qKXt2YXIgYm49Um48PUs/eTpSbj49SytfP186Um4tSztpZihTbjxibilicmVhazt2YXIgTW89U24tYm4sTG89ai1ibjt2LnB1c2gob2UoayhibitNbyVMbywwKSkpLFNuPVcoTW8vTG8pfXYucHVzaChvZShrKFNuLDApKSksSz1nKHoscWUsX2U9PXEpLHo9MCwrK19lfX19Y2F0Y2goSnIpe0d0PSEwLF90PUpyfWZpbmFsbHl7dHJ5eyFpdCYmQnIucmV0dXJuJiZCci5yZXR1cm4oKX1maW5hbGx5e2lmKEd0KXRocm93IF90fX0rK3osKytTfXJldHVybiB2LmpvaW4oIiIpfSxjPWZ1bmN0aW9uKHUpe3JldHVybiBFZSh1LGZ1bmN0aW9uKHYpe3JldHVybiBOLnRlc3Qodik/Qyh2LnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnZ9KX0sbT1mdW5jdGlvbih1KXtyZXR1cm4gRWUodSxmdW5jdGlvbih2KXtyZXR1cm4gRC50ZXN0KHYpPyJ4bi0tIit3KHYpOnZ9KX0sUD17dmVyc2lvbjoiMi4xLjAiLHVjczI6e2RlY29kZTpOZSxlbmNvZGU6QmV9LGRlY29kZTpDLGVuY29kZTp3LHRvQVNDSUk6bSx0b1VuaWNvZGU6Y30sVT17fTtmdW5jdGlvbiBGKGQpe3ZhciB1PWQuY2hhckNvZGVBdCgwKSx2PXZvaWQgMDtyZXR1cm4gdTwxNj92PSIlMCIrdS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTp1PDEyOD92PSIlIit1LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnU8MjA0OD92PSIlIisodT4+NnwxOTIpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIlIisodSY2M3wxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnY9IiUiKyh1Pj4xMnwyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIlIisodT4+NiY2M3wxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIlIisodSY2M3wxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHZ9ZnVuY3Rpb24gWihkKXtmb3IodmFyIHU9IiIsdj0wLFI9ZC5sZW5ndGg7djxSOyl7dmFyIFM9cGFyc2VJbnQoZC5zdWJzdHIodisxLDIpLDE2KTtpZihTPDEyOCl1Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFMpLHYrPTM7ZWxzZSBpZihTPj0xOTQmJlM8MjI0KXtpZihSLXY+PTYpe3ZhciB6PXBhcnNlSW50KGQuc3Vic3RyKHYrNCwyKSwxNik7dSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoUyYzMSk8PDZ8eiY2Myl9ZWxzZSB1Kz1kLnN1YnN0cih2LDYpO3YrPTZ9ZWxzZSBpZihTPj0yMjQpe2lmKFItdj49OSl7dmFyIEs9cGFyc2VJbnQoZC5zdWJzdHIodis0LDIpLDE2KSxzZT1wYXJzZUludChkLnN1YnN0cih2KzcsMiksMTYpO3UrPVN0cmluZy5mcm9tQ2hhckNvZGUoKFMmMTUpPDwxMnwoSyY2Myk8PDZ8c2UmNjMpfWVsc2UgdSs9ZC5zdWJzdHIodiw5KTt2Kz05fWVsc2UgdSs9ZC5zdWJzdHIodiwzKSx2Kz0zfXJldHVybiB1fWZ1bmN0aW9uIHJlKGQsdSl7ZnVuY3Rpb24gdihSKXt2YXIgUz1aKFIpO3JldHVybiBTLm1hdGNoKHUuVU5SRVNFUlZFRCk/UzpSfXJldHVybiBkLnNjaGVtZSYmKGQuc2NoZW1lPVN0cmluZyhkLnNjaGVtZSkucmVwbGFjZSh1LlBDVF9FTkNPREVELHYpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh1Lk5PVF9TQ0hFTUUsIiIpKSxkLnVzZXJpbmZvIT09dm9pZCAwJiYoZC51c2VyaW5mbz1TdHJpbmcoZC51c2VyaW5mbykucmVwbGFjZSh1LlBDVF9FTkNPREVELHYpLnJlcGxhY2UodS5OT1RfVVNFUklORk8sRikucmVwbGFjZSh1LlBDVF9FTkNPREVELG8pKSxkLmhvc3QhPT12b2lkIDAmJihkLmhvc3Q9U3RyaW5nKGQuaG9zdCkucmVwbGFjZSh1LlBDVF9FTkNPREVELHYpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh1Lk5PVF9IT1NULEYpLnJlcGxhY2UodS5QQ1RfRU5DT0RFRCxvKSksZC5wYXRoIT09dm9pZCAwJiYoZC5wYXRoPVN0cmluZyhkLnBhdGgpLnJlcGxhY2UodS5QQ1RfRU5DT0RFRCx2KS5yZXBsYWNlKGQuc2NoZW1lP3UuTk9UX1BBVEg6dS5OT1RfUEFUSF9OT1NDSEVNRSxGKS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsbykpLGQucXVlcnkhPT12b2lkIDAmJihkLnF1ZXJ5PVN0cmluZyhkLnF1ZXJ5KS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsdikucmVwbGFjZSh1Lk5PVF9RVUVSWSxGKS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsbykpLGQuZnJhZ21lbnQhPT12b2lkIDAmJihkLmZyYWdtZW50PVN0cmluZyhkLmZyYWdtZW50KS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsdikucmVwbGFjZSh1Lk5PVF9GUkFHTUVOVCxGKS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsbykpLGR9ZnVuY3Rpb24geWUoZCl7cmV0dXJuIGQucmVwbGFjZSgvXjAqKC4qKS8sIiQxIil8fCIwIn1mdW5jdGlvbiBydChkLHUpe3ZhciB2PWQubWF0Y2godS5JUFY0QUREUkVTUyl8fFtdLFI9RSh2LDIpLFM9UlsxXTtyZXR1cm4gUz9TLnNwbGl0KCIuIikubWFwKHllKS5qb2luKCIuIik6ZH1mdW5jdGlvbiBscihkLHUpe3ZhciB2PWQubWF0Y2godS5JUFY2QUREUkVTUyl8fFtdLFI9RSh2LDMpLFM9UlsxXSx6PVJbMl07aWYoUyl7Zm9yKHZhciBLPVMudG9Mb3dlckNhc2UoKS5zcGxpdCgiOjoiKS5yZXZlcnNlKCksc2U9RShLLDIpLG1lPXNlWzBdLCRlPXNlWzFdLHg9JGU/JGUuc3BsaXQoIjoiKS5tYXAoeWUpOltdLGZlPW1lLnNwbGl0KCI6IikubWFwKHllKSx3ZT11LklQVjRBRERSRVNTLnRlc3QoZmVbZmUubGVuZ3RoLTFdKSxxPXdlPzc6OCxfZT1mZS5sZW5ndGgtcSxSZT1BcnJheShxKSxnZT0wO2dlPHE7KytnZSlSZVtnZV09eFtnZV18fGZlW19lK2dlXXx8IiI7d2UmJihSZVtxLTFdPXJ0KFJlW3EtMV0sdSkpO3ZhciBQdD1SZS5yZWR1Y2UoZnVuY3Rpb24ocWUsaXQsR3Qpe2lmKCFpdHx8aXQ9PT0iMCIpe3ZhciBfdD1xZVtxZS5sZW5ndGgtMV07X3QmJl90LmluZGV4K190Lmxlbmd0aD09PUd0P190Lmxlbmd0aCsrOnFlLnB1c2goe2luZGV4Okd0LGxlbmd0aDoxfSl9cmV0dXJuIHFlfSxbXSksYXQ9UHQuc29ydChmdW5jdGlvbihxZSxpdCl7cmV0dXJuIGl0Lmxlbmd0aC1xZS5sZW5ndGh9KVswXSxvdD12b2lkIDA7aWYoYXQmJmF0Lmxlbmd0aD4xKXt2YXIgdnI9UmUuc2xpY2UoMCxhdC5pbmRleCkscXQ9UmUuc2xpY2UoYXQuaW5kZXgrYXQubGVuZ3RoKTtvdD12ci5qb2luKCI6IikrIjo6IitxdC5qb2luKCI6Iil9ZWxzZSBvdD1SZS5qb2luKCI6Iik7cmV0dXJuIHomJihvdCs9IiUiK3opLG90fWVsc2UgcmV0dXJuIGR9dmFyIEZyPS9eKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKCg/OihbXlwvPyNAXSopQCk/KFxbW15cLz8jXF1dK1xdfFteXC8/IzpdKikoPzpcOihcZCopKT8pKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IygoPzoufFxufFxyKSopKT8vaSxNcj0iIi5tYXRjaCgvKCl7MH0vKVsxXT09PXZvaWQgMDtmdW5jdGlvbiBNZShkKXt2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sdj17fSxSPXUuaXJpIT09ITE/aDppO3UucmVmZXJlbmNlPT09InN1ZmZpeCImJihkPSh1LnNjaGVtZT91LnNjaGVtZSsiOiI6IiIpKyIvLyIrZCk7dmFyIFM9ZC5tYXRjaChGcik7aWYoUyl7TXI/KHYuc2NoZW1lPVNbMV0sdi51c2VyaW5mbz1TWzNdLHYuaG9zdD1TWzRdLHYucG9ydD1wYXJzZUludChTWzVdLDEwKSx2LnBhdGg9U1s2XXx8IiIsdi5xdWVyeT1TWzddLHYuZnJhZ21lbnQ9U1s4XSxpc05hTih2LnBvcnQpJiYodi5wb3J0PVNbNV0pKToodi5zY2hlbWU9U1sxXXx8dm9pZCAwLHYudXNlcmluZm89ZC5pbmRleE9mKCJAIikhPT0tMT9TWzNdOnZvaWQgMCx2Lmhvc3Q9ZC5pbmRleE9mKCIvLyIpIT09LTE/U1s0XTp2b2lkIDAsdi5wb3J0PXBhcnNlSW50KFNbNV0sMTApLHYucGF0aD1TWzZdfHwiIix2LnF1ZXJ5PWQuaW5kZXhPZigiPyIpIT09LTE/U1s3XTp2b2lkIDAsdi5mcmFnbWVudD1kLmluZGV4T2YoIiMiKSE9PS0xP1NbOF06dm9pZCAwLGlzTmFOKHYucG9ydCkmJih2LnBvcnQ9ZC5tYXRjaCgvXC9cLyg/Oi58XG4pKlw6KD86XC98XD98XCN8JCkvKT9TWzRdOnZvaWQgMCkpLHYuaG9zdCYmKHYuaG9zdD1scihydCh2Lmhvc3QsUiksUikpLHYuc2NoZW1lPT09dm9pZCAwJiZ2LnVzZXJpbmZvPT09dm9pZCAwJiZ2Lmhvc3Q9PT12b2lkIDAmJnYucG9ydD09PXZvaWQgMCYmIXYucGF0aCYmdi5xdWVyeT09PXZvaWQgMD92LnJlZmVyZW5jZT0ic2FtZS1kb2N1bWVudCI6di5zY2hlbWU9PT12b2lkIDA/di5yZWZlcmVuY2U9InJlbGF0aXZlIjp2LmZyYWdtZW50PT09dm9pZCAwP3YucmVmZXJlbmNlPSJhYnNvbHV0ZSI6di5yZWZlcmVuY2U9InVyaSIsdS5yZWZlcmVuY2UmJnUucmVmZXJlbmNlIT09InN1ZmZpeCImJnUucmVmZXJlbmNlIT09di5yZWZlcmVuY2UmJih2LmVycm9yPXYuZXJyb3J8fCJVUkkgaXMgbm90IGEgIit1LnJlZmVyZW5jZSsiIHJlZmVyZW5jZS4iKTt2YXIgej1VWyh1LnNjaGVtZXx8di5zY2hlbWV8fCIiKS50b0xvd2VyQ2FzZSgpXTtpZighdS51bmljb2RlU3VwcG9ydCYmKCF6fHwhei51bmljb2RlU3VwcG9ydCkpe2lmKHYuaG9zdCYmKHUuZG9tYWluSG9zdHx8eiYmei5kb21haW5Ib3N0KSl0cnl7di5ob3N0PVAudG9BU0NJSSh2Lmhvc3QucmVwbGFjZShSLlBDVF9FTkNPREVELFopLnRvTG93ZXJDYXNlKCkpfWNhdGNoKEspe3YuZXJyb3I9di5lcnJvcnx8Ikhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6ICIrS31yZSh2LGkpfWVsc2UgcmUodixSKTt6JiZ6LnBhcnNlJiZ6LnBhcnNlKHYsdSl9ZWxzZSB2LmVycm9yPXYuZXJyb3J8fCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuIjtyZXR1cm4gdn1mdW5jdGlvbiBMcihkLHUpe3ZhciB2PXUuaXJpIT09ITE/aDppLFI9W107cmV0dXJuIGQudXNlcmluZm8hPT12b2lkIDAmJihSLnB1c2goZC51c2VyaW5mbyksUi5wdXNoKCJAIikpLGQuaG9zdCE9PXZvaWQgMCYmUi5wdXNoKGxyKHJ0KFN0cmluZyhkLmhvc3QpLHYpLHYpLnJlcGxhY2Uodi5JUFY2QUREUkVTUyxmdW5jdGlvbihTLHosSyl7cmV0dXJuIlsiK3orKEs/IiUyNSIrSzoiIikrIl0ifSkpLCh0eXBlb2YgZC5wb3J0PT0ibnVtYmVyInx8dHlwZW9mIGQucG9ydD09InN0cmluZyIpJiYoUi5wdXNoKCI6IiksUi5wdXNoKFN0cmluZyhkLnBvcnQpKSksUi5sZW5ndGg/Ui5qb2luKCIiKTp2b2lkIDB9dmFyIGZyPS9eXC5cLj9cLy8sZHI9L15cL1wuKFwvfCQpLyxocj0vXlwvXC5cLihcL3wkKS8sVnI9L15cLz8oPzoufFxuKSo/KD89XC98JCkvO2Z1bmN0aW9uIG50KGQpe2Zvcih2YXIgdT1bXTtkLmxlbmd0aDspaWYoZC5tYXRjaChmcikpZD1kLnJlcGxhY2UoZnIsIiIpO2Vsc2UgaWYoZC5tYXRjaChkcikpZD1kLnJlcGxhY2UoZHIsIi8iKTtlbHNlIGlmKGQubWF0Y2goaHIpKWQ9ZC5yZXBsYWNlKGhyLCIvIiksdS5wb3AoKTtlbHNlIGlmKGQ9PT0iLiJ8fGQ9PT0iLi4iKWQ9IiI7ZWxzZXt2YXIgdj1kLm1hdGNoKFZyKTtpZih2KXt2YXIgUj12WzBdO2Q9ZC5zbGljZShSLmxlbmd0aCksdS5wdXNoKFIpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGRvdCBzZWdtZW50IGNvbmRpdGlvbiIpfXJldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGtlKGQpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSx2PXUuaXJpP2g6aSxSPVtdLFM9VVsodS5zY2hlbWV8fGQuc2NoZW1lfHwiIikudG9Mb3dlckNhc2UoKV07aWYoUyYmUy5zZXJpYWxpemUmJlMuc2VyaWFsaXplKGQsdSksZC5ob3N0JiYhdi5JUFY2QUREUkVTUy50ZXN0KGQuaG9zdCkpe2lmKHUuZG9tYWluSG9zdHx8UyYmUy5kb21haW5Ib3N0KXRyeXtkLmhvc3Q9dS5pcmk/UC50b1VuaWNvZGUoZC5ob3N0KTpQLnRvQVNDSUkoZC5ob3N0LnJlcGxhY2Uodi5QQ1RfRU5DT0RFRCxaKS50b0xvd2VyQ2FzZSgpKX1jYXRjaChzZSl7ZC5lcnJvcj1kLmVycm9yfHwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvICIrKHUuaXJpPyJVbmljb2RlIjoiQVNDSUkiKSsiIHZpYSBwdW55Y29kZTogIitzZX19cmUoZCx2KSx1LnJlZmVyZW5jZSE9PSJzdWZmaXgiJiZkLnNjaGVtZSYmKFIucHVzaChkLnNjaGVtZSksUi5wdXNoKCI6IikpO3ZhciB6PUxyKGQsdSk7aWYoeiE9PXZvaWQgMCYmKHUucmVmZXJlbmNlIT09InN1ZmZpeCImJlIucHVzaCgiLy8iKSxSLnB1c2goeiksZC5wYXRoJiZkLnBhdGguY2hhckF0KDApIT09Ii8iJiZSLnB1c2goIi8iKSksZC5wYXRoIT09dm9pZCAwKXt2YXIgSz1kLnBhdGg7IXUuYWJzb2x1dGVQYXRoJiYoIVN8fCFTLmFic29sdXRlUGF0aCkmJihLPW50KEspKSx6PT09dm9pZCAwJiYoSz1LLnJlcGxhY2UoL15cL1wvLywiLyUyRiIpKSxSLnB1c2goSyl9cmV0dXJuIGQucXVlcnkhPT12b2lkIDAmJihSLnB1c2goIj8iKSxSLnB1c2goZC5xdWVyeSkpLGQuZnJhZ21lbnQhPT12b2lkIDAmJihSLnB1c2goIiMiKSxSLnB1c2goZC5mcmFnbWVudCkpLFIuam9pbigiIil9ZnVuY3Rpb24gcHIoZCx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30sUj1hcmd1bWVudHNbM10sUz17fTtyZXR1cm4gUnx8KGQ9TWUoa2UoZCx2KSx2KSx1PU1lKGtlKHUsdiksdikpLHY9dnx8e30sIXYudG9sZXJhbnQmJnUuc2NoZW1lPyhTLnNjaGVtZT11LnNjaGVtZSxTLnVzZXJpbmZvPXUudXNlcmluZm8sUy5ob3N0PXUuaG9zdCxTLnBvcnQ9dS5wb3J0LFMucGF0aD1udCh1LnBhdGh8fCIiKSxTLnF1ZXJ5PXUucXVlcnkpOih1LnVzZXJpbmZvIT09dm9pZCAwfHx1Lmhvc3QhPT12b2lkIDB8fHUucG9ydCE9PXZvaWQgMD8oUy51c2VyaW5mbz11LnVzZXJpbmZvLFMuaG9zdD11Lmhvc3QsUy5wb3J0PXUucG9ydCxTLnBhdGg9bnQodS5wYXRofHwiIiksUy5xdWVyeT11LnF1ZXJ5KToodS5wYXRoPyh1LnBhdGguY2hhckF0KDApPT09Ii8iP1MucGF0aD1udCh1LnBhdGgpOigoZC51c2VyaW5mbyE9PXZvaWQgMHx8ZC5ob3N0IT09dm9pZCAwfHxkLnBvcnQhPT12b2lkIDApJiYhZC5wYXRoP1MucGF0aD0iLyIrdS5wYXRoOmQucGF0aD9TLnBhdGg9ZC5wYXRoLnNsaWNlKDAsZC5wYXRoLmxhc3RJbmRleE9mKCIvIikrMSkrdS5wYXRoOlMucGF0aD11LnBhdGgsUy5wYXRoPW50KFMucGF0aCkpLFMucXVlcnk9dS5xdWVyeSk6KFMucGF0aD1kLnBhdGgsdS5xdWVyeSE9PXZvaWQgMD9TLnF1ZXJ5PXUucXVlcnk6Uy5xdWVyeT1kLnF1ZXJ5KSxTLnVzZXJpbmZvPWQudXNlcmluZm8sUy5ob3N0PWQuaG9zdCxTLnBvcnQ9ZC5wb3J0KSxTLnNjaGVtZT1kLnNjaGVtZSksUy5mcmFnbWVudD11LmZyYWdtZW50LFN9ZnVuY3Rpb24genIoZCx1LHYpe3ZhciBSPWYoe3NjaGVtZToibnVsbCJ9LHYpO3JldHVybiBrZShwcihNZShkLFIpLE1lKHUsUiksUiwhMCksUil9ZnVuY3Rpb24gQnQoZCx1KXtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2Q9a2UoTWUoZCx1KSx1KTphKGQpPT09Im9iamVjdCImJihkPU1lKGtlKGQsdSksdSkpLGR9ZnVuY3Rpb24gSHIoZCx1LHYpe3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/ZD1rZShNZShkLHYpLHYpOmEoZCk9PT0ib2JqZWN0IiYmKGQ9a2UoZCx2KSksdHlwZW9mIHU9PSJzdHJpbmciP3U9a2UoTWUodSx2KSx2KTphKHUpPT09Im9iamVjdCImJih1PWtlKHUsdikpLGQ9PT11fWZ1bmN0aW9uIHduKGQsdSl7cmV0dXJuIGQmJmQudG9TdHJpbmcoKS5yZXBsYWNlKCF1fHwhdS5pcmk/aS5FU0NBUEU6aC5FU0NBUEUsRil9ZnVuY3Rpb24gSmUoZCx1KXtyZXR1cm4gZCYmZC50b1N0cmluZygpLnJlcGxhY2UoIXV8fCF1LmlyaT9pLlBDVF9FTkNPREVEOmguUENUX0VOQ09ERUQsWil9dmFyIEp0PXtzY2hlbWU6Imh0dHAiLGRvbWFpbkhvc3Q6ITAscGFyc2U6ZnVuY3Rpb24odSx2KXtyZXR1cm4gdS5ob3N0fHwodS5lcnJvcj11LmVycm9yfHwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuIiksdX0sc2VyaWFsaXplOmZ1bmN0aW9uKHUsdil7dmFyIFI9U3RyaW5nKHUuc2NoZW1lKS50b0xvd2VyQ2FzZSgpPT09Imh0dHBzIjtyZXR1cm4odS5wb3J0PT09KFI/NDQzOjgwKXx8dS5wb3J0PT09IiIpJiYodS5wb3J0PXZvaWQgMCksdS5wYXRofHwodS5wYXRoPSIvIiksdX19LFBvPXtzY2hlbWU6Imh0dHBzIixkb21haW5Ib3N0Okp0LmRvbWFpbkhvc3QscGFyc2U6SnQucGFyc2Usc2VyaWFsaXplOkp0LnNlcmlhbGl6ZX07ZnVuY3Rpb24gVG8oZCl7cmV0dXJuIHR5cGVvZiBkLnNlY3VyZT09ImJvb2xlYW4iP2Quc2VjdXJlOlN0cmluZyhkLnNjaGVtZSkudG9Mb3dlckNhc2UoKT09PSJ3c3MifXZhciBLcj17c2NoZW1lOiJ3cyIsZG9tYWluSG9zdDohMCxwYXJzZTpmdW5jdGlvbih1LHYpe3ZhciBSPXU7cmV0dXJuIFIuc2VjdXJlPVRvKFIpLFIucmVzb3VyY2VOYW1lPShSLnBhdGh8fCIvIikrKFIucXVlcnk/Ij8iK1IucXVlcnk6IiIpLFIucGF0aD12b2lkIDAsUi5xdWVyeT12b2lkIDAsUn0sc2VyaWFsaXplOmZ1bmN0aW9uKHUsdil7aWYoKHUucG9ydD09PShUbyh1KT80NDM6ODApfHx1LnBvcnQ9PT0iIikmJih1LnBvcnQ9dm9pZCAwKSx0eXBlb2YgdS5zZWN1cmU9PSJib29sZWFuIiYmKHUuc2NoZW1lPXUuc2VjdXJlPyJ3c3MiOiJ3cyIsdS5zZWN1cmU9dm9pZCAwKSx1LnJlc291cmNlTmFtZSl7dmFyIFI9dS5yZXNvdXJjZU5hbWUuc3BsaXQoIj8iKSxTPUUoUiwyKSx6PVNbMF0sSz1TWzFdO3UucGF0aD16JiZ6IT09Ii8iP3o6dm9pZCAwLHUucXVlcnk9Syx1LnJlc291cmNlTmFtZT12b2lkIDB9cmV0dXJuIHUuZnJhZ21lbnQ9dm9pZCAwLHV9fSxBbz17c2NoZW1lOiJ3c3MiLGRvbWFpbkhvc3Q6S3IuZG9tYWluSG9zdCxwYXJzZTpLci5wYXJzZSxzZXJpYWxpemU6S3Iuc2VyaWFsaXplfSxXZj17fSxDbz0iW0EtWmEtejAtOVxcLVxcLlxcX1xcflxceEEwLVxcdTIwMERcXHUyMDEwLVxcdTIwMjlcXHUyMDJGLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdIixzdD0iWzAtOUEtRmEtZl0iLFhmPXMocygiJVtFRmVmXSIrc3QrIiUiK3N0K3N0KyIlIitzdCtzdCkrInwiK3MoIiVbODlBLUZhLWZdIitzdCsiJSIrc3Qrc3QpKyJ8IitzKCIlIitzdCtzdCkpLFpmPSJbQS1aYS16MC05XFwhXFwkXFwlXFwnXFwqXFwrXFwtXFxeXFxfXFxgXFx7XFx8XFx9XFx+XSIseGY9IltcXCFcXCRcXCVcXCdcXChcXClcXCpcXCtcXCxcXC1cXC4wLTlcXDxcXD5BLVpcXHg1RS1cXHg3RV0iLGVkPW4oeGYsJ1tcXCJcXFxcXScpLHRkPSJbXFwhXFwkXFwnXFwoXFwpXFwqXFwrXFwsXFw7XFw6XFxAXSIscmQ9bmV3IFJlZ0V4cChDbywiZyIpLG1yPW5ldyBSZWdFeHAoWGYsImciKSxuZD1uZXcgUmVnRXhwKG4oIlteXSIsWmYsIltcXC5dIiwnW1xcIl0nLGVkKSwiZyIpLElvPW5ldyBSZWdFeHAobigiW15dIixDbyx0ZCksImciKSxzZD1JbztmdW5jdGlvbiBicyhkKXt2YXIgdT1aKGQpO3JldHVybiB1Lm1hdGNoKHJkKT91OmR9dmFyIERvPXtzY2hlbWU6Im1haWx0byIscGFyc2U6ZnVuY3Rpb24odSx2KXt2YXIgUj11LFM9Ui50bz1SLnBhdGg/Ui5wYXRoLnNwbGl0KCIsIik6W107aWYoUi5wYXRoPXZvaWQgMCxSLnF1ZXJ5KXtmb3IodmFyIHo9ITEsSz17fSxzZT1SLnF1ZXJ5LnNwbGl0KCImIiksbWU9MCwkZT1zZS5sZW5ndGg7bWU8JGU7KyttZSl7dmFyIHg9c2VbbWVdLnNwbGl0KCI9Iik7c3dpdGNoKHhbMF0pe2Nhc2UidG8iOmZvcih2YXIgZmU9eFsxXS5zcGxpdCgiLCIpLHdlPTAscT1mZS5sZW5ndGg7d2U8cTsrK3dlKVMucHVzaChmZVt3ZV0pO2JyZWFrO2Nhc2Uic3ViamVjdCI6Ui5zdWJqZWN0PUplKHhbMV0sdik7YnJlYWs7Y2FzZSJib2R5IjpSLmJvZHk9SmUoeFsxXSx2KTticmVhaztkZWZhdWx0Ono9ITAsS1tKZSh4WzBdLHYpXT1KZSh4WzFdLHYpO2JyZWFrfX16JiYoUi5oZWFkZXJzPUspfVIucXVlcnk9dm9pZCAwO2Zvcih2YXIgX2U9MCxSZT1TLmxlbmd0aDtfZTxSZTsrK19lKXt2YXIgZ2U9U1tfZV0uc3BsaXQoIkAiKTtpZihnZVswXT1KZShnZVswXSksdi51bmljb2RlU3VwcG9ydClnZVsxXT1KZShnZVsxXSx2KS50b0xvd2VyQ2FzZSgpO2Vsc2UgdHJ5e2dlWzFdPVAudG9BU0NJSShKZShnZVsxXSx2KS50b0xvd2VyQ2FzZSgpKX1jYXRjaChQdCl7Ui5lcnJvcj1SLmVycm9yfHwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogIitQdH1TW19lXT1nZS5qb2luKCJAIil9cmV0dXJuIFJ9LHNlcmlhbGl6ZTpmdW5jdGlvbih1LHYpe3ZhciBSPXUsUz1sKHUudG8pO2lmKFMpe2Zvcih2YXIgej0wLEs9Uy5sZW5ndGg7ejxLOysreil7dmFyIHNlPVN0cmluZyhTW3pdKSxtZT1zZS5sYXN0SW5kZXhPZigiQCIpLCRlPXNlLnNsaWNlKDAsbWUpLnJlcGxhY2UobXIsYnMpLnJlcGxhY2UobXIsbykucmVwbGFjZShuZCxGKSx4PXNlLnNsaWNlKG1lKzEpO3RyeXt4PXYuaXJpP1AudG9Vbmljb2RlKHgpOlAudG9BU0NJSShKZSh4LHYpLnRvTG93ZXJDYXNlKCkpfWNhdGNoKF9lKXtSLmVycm9yPVIuZXJyb3J8fCJFbWFpbCBhZGRyZXNzJ3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gIisodi5pcmk/IlVuaWNvZGUiOiJBU0NJSSIpKyIgdmlhIHB1bnljb2RlOiAiK19lfVNbel09JGUrIkAiK3h9Ui5wYXRoPVMuam9pbigiLCIpfXZhciBmZT11LmhlYWRlcnM9dS5oZWFkZXJzfHx7fTt1LnN1YmplY3QmJihmZS5zdWJqZWN0PXUuc3ViamVjdCksdS5ib2R5JiYoZmUuYm9keT11LmJvZHkpO3ZhciB3ZT1bXTtmb3IodmFyIHEgaW4gZmUpZmVbcV0hPT1XZltxXSYmd2UucHVzaChxLnJlcGxhY2UobXIsYnMpLnJlcGxhY2UobXIsbykucmVwbGFjZShJbyxGKSsiPSIrZmVbcV0ucmVwbGFjZShtcixicykucmVwbGFjZShtcixvKS5yZXBsYWNlKHNkLEYpKTtyZXR1cm4gd2UubGVuZ3RoJiYoUi5xdWVyeT13ZS5qb2luKCImIikpLFJ9fSxhZD0vXihbXlw6XSspXDooLiopLyxqbz17c2NoZW1lOiJ1cm4iLHBhcnNlOmZ1bmN0aW9uKHUsdil7dmFyIFI9dS5wYXRoJiZ1LnBhdGgubWF0Y2goYWQpLFM9dTtpZihSKXt2YXIgej12LnNjaGVtZXx8Uy5zY2hlbWV8fCJ1cm4iLEs9UlsxXS50b0xvd2VyQ2FzZSgpLHNlPVJbMl0sbWU9eisiOiIrKHYubmlkfHxLKSwkZT1VW21lXTtTLm5pZD1LLFMubnNzPXNlLFMucGF0aD12b2lkIDAsJGUmJihTPSRlLnBhcnNlKFMsdikpfWVsc2UgUy5lcnJvcj1TLmVycm9yfHwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLiI7cmV0dXJuIFN9LHNlcmlhbGl6ZTpmdW5jdGlvbih1LHYpe3ZhciBSPXYuc2NoZW1lfHx1LnNjaGVtZXx8InVybiIsUz11Lm5pZCx6PVIrIjoiKyh2Lm5pZHx8UyksSz1VW3pdO0smJih1PUsuc2VyaWFsaXplKHUsdikpO3ZhciBzZT11LG1lPXUubnNzO3JldHVybiBzZS5wYXRoPShTfHx2Lm5pZCkrIjoiK21lLHNlfX0sb2Q9L15bMC05QS1GYS1mXXs4fSg/OlwtWzAtOUEtRmEtZl17NH0pezN9XC1bMC05QS1GYS1mXXsxMn0kLyxrbz17c2NoZW1lOiJ1cm46dXVpZCIscGFyc2U6ZnVuY3Rpb24odSx2KXt2YXIgUj11O3JldHVybiBSLnV1aWQ9Ui5uc3MsUi5uc3M9dm9pZCAwLCF2LnRvbGVyYW50JiYoIVIudXVpZHx8IVIudXVpZC5tYXRjaChvZCkpJiYoUi5lcnJvcj1SLmVycm9yfHwiVVVJRCBpcyBub3QgdmFsaWQuIiksUn0sc2VyaWFsaXplOmZ1bmN0aW9uKHUsdil7dmFyIFI9dTtyZXR1cm4gUi5uc3M9KHUudXVpZHx8IiIpLnRvTG93ZXJDYXNlKCksUn19O1VbSnQuc2NoZW1lXT1KdCxVW1BvLnNjaGVtZV09UG8sVVtLci5zY2hlbWVdPUtyLFVbQW8uc2NoZW1lXT1BbyxVW0RvLnNjaGVtZV09RG8sVVtqby5zY2hlbWVdPWpvLFVba28uc2NoZW1lXT1rbyxyLlNDSEVNRVM9VSxyLnBjdEVuY0NoYXI9RixyLnBjdERlY0NoYXJzPVosci5wYXJzZT1NZSxyLnJlbW92ZURvdFNlZ21lbnRzPW50LHIuc2VyaWFsaXplPWtlLHIucmVzb2x2ZUNvbXBvbmVudHM9cHIsci5yZXNvbHZlPXpyLHIubm9ybWFsaXplPUJ0LHIuZXF1YWw9SHIsci5lc2NhcGVDb21wb25lbnQ9d24sci51bmVzY2FwZUNvbXBvbmVudD1KZSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0pKGVzLGVzLmV4cG9ydHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4biwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgRGE9ZXMuZXhwb3J0cztEYS5jb2RlPSdyZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3VyaSIpLmRlZmF1bHQnLHhuLmRlZmF1bHQ9RGEsZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29kZUdlbj1lLk5hbWU9ZS5uaWw9ZS5zdHJpbmdpZnk9ZS5zdHI9ZS5fPWUuS2V5d29yZEN4dD12b2lkIDA7dmFyIHQ9V2U7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIktleXdvcmRDeHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LktleXdvcmRDeHR9fSk7dmFyIHI9dWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl8iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLl99fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN0ciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdHJpbmdpZnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN0cmluZ2lmeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmlsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5uaWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk5hbWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk5hbWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvZGVHZW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkNvZGVHZW59fSk7Y29uc3Qgbj1jbixzPWt0LGE9RHQsbz1DZSxsPXVlLGY9VGUscD1ubixpPWJlLGg9enUsRT14bixUPShrLGcpPT5uZXcgUmVnRXhwKGssZyk7VC5jb2RlPSJuZXcgUmVnRXhwIjtjb25zdCBJPVsicmVtb3ZlQWRkaXRpb25hbCIsInVzZURlZmF1bHRzIiwiY29lcmNlVHlwZXMiXSxqPW5ldyBTZXQoWyJ2YWxpZGF0ZSIsInNlcmlhbGl6ZSIsInBhcnNlIiwid3JhcHBlciIsInJvb3QiLCJzY2hlbWEiLCJrZXl3b3JkIiwicGF0dGVybiIsImZvcm1hdHMiLCJ2YWxpZGF0ZSRkYXRhIiwiZnVuYyIsIm9iaiIsIkVycm9yIl0pLHk9e2Vycm9yRGF0YVBhdGg6IiIsZm9ybWF0OiJgdmFsaWRhdGVGb3JtYXRzOiBmYWxzZWAgY2FuIGJlIHVzZWQgaW5zdGVhZC4iLG51bGxhYmxlOicibnVsbGFibGUiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxqc29uUG9pbnRlcnM6IkRlcHJlY2F0ZWQganNQcm9wZXJ0eVN5bnRheCBjYW4gYmUgdXNlZCBpbnN0ZWFkLiIsZXh0ZW5kUmVmczoiRGVwcmVjYXRlZCBpZ25vcmVLZXl3b3Jkc1dpdGhSZWYgY2FuIGJlIHVzZWQgaW5zdGVhZC4iLG1pc3NpbmdSZWZzOiJQYXNzIGVtcHR5IHNjaGVtYSB3aXRoICRpZCB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIHRvIGFqdi5hZGRTY2hlbWEuIixwcm9jZXNzQ29kZToiVXNlIG9wdGlvbiBgY29kZToge3Byb2Nlc3M6IChjb2RlLCBzY2hlbWFFbnY6IG9iamVjdCkgPT4gc3RyaW5nfWAiLHNvdXJjZUNvZGU6IlVzZSBvcHRpb24gYGNvZGU6IHtzb3VyY2U6IHRydWV9YCIsc3RyaWN0RGVmYXVsdHM6Ikl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLiIsc3RyaWN0S2V5d29yZHM6Ikl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLiIsdW5pcXVlSXRlbXM6JyJ1bmlxdWVJdGVtcyIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsdW5rbm93bkZvcm1hdHM6IkRpc2FibGUgc3RyaWN0IG1vZGUgb3IgcGFzcyBgdHJ1ZWAgdG8gYGFqdi5hZGRGb3JtYXRgIChvciBgZm9ybWF0c2Agb3B0aW9uKS4iLGNhY2hlOiJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuIixzZXJpYWxpemU6Ik1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS4iLGFqdkVycm9yczoiSXQgaXMgZGVmYXVsdCBub3cuIn0sXz17aWdub3JlS2V5d29yZHNXaXRoUmVmOiIiLGpzUHJvcGVydHlTeW50YXg6IiIsdW5pY29kZTonIm1pbkxlbmd0aCIvIm1heExlbmd0aCIgYWNjb3VudCBmb3IgdW5pY29kZSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQuJ30sYj0yMDA7ZnVuY3Rpb24gTyhrKXt2YXIgZyxDLHcsYyxtLFAsVSxGLFoscmUseWUscnQsbHIsRnIsTXIsTWUsTHIsZnIsZHIsaHIsVnIsbnQsa2UscHIsenI7Y29uc3QgQnQ9ay5zdHJpY3QsSHI9KGc9ay5jb2RlKT09PW51bGx8fGc9PT12b2lkIDA/dm9pZCAwOmcub3B0aW1pemUsd249SHI9PT0hMHx8SHI9PT12b2lkIDA/MTpIcnx8MCxKZT0odz0oQz1rLmNvZGUpPT09bnVsbHx8Qz09PXZvaWQgMD92b2lkIDA6Qy5yZWdFeHApIT09bnVsbCYmdyE9PXZvaWQgMD93OlQsSnQ9KGM9ay51cmlSZXNvbHZlcikhPT1udWxsJiZjIT09dm9pZCAwP2M6RS5kZWZhdWx0O3JldHVybntzdHJpY3RTY2hlbWE6KFA9KG09ay5zdHJpY3RTY2hlbWEpIT09bnVsbCYmbSE9PXZvaWQgMD9tOkJ0KSE9PW51bGwmJlAhPT12b2lkIDA/UDohMCxzdHJpY3ROdW1iZXJzOihGPShVPWsuc3RyaWN0TnVtYmVycykhPT1udWxsJiZVIT09dm9pZCAwP1U6QnQpIT09bnVsbCYmRiE9PXZvaWQgMD9GOiEwLHN0cmljdFR5cGVzOihyZT0oWj1rLnN0cmljdFR5cGVzKSE9PW51bGwmJlohPT12b2lkIDA/WjpCdCkhPT1udWxsJiZyZSE9PXZvaWQgMD9yZToibG9nIixzdHJpY3RUdXBsZXM6KHJ0PSh5ZT1rLnN0cmljdFR1cGxlcykhPT1udWxsJiZ5ZSE9PXZvaWQgMD95ZTpCdCkhPT1udWxsJiZydCE9PXZvaWQgMD9ydDoibG9nIixzdHJpY3RSZXF1aXJlZDooRnI9KGxyPWsuc3RyaWN0UmVxdWlyZWQpIT09bnVsbCYmbHIhPT12b2lkIDA/bHI6QnQpIT09bnVsbCYmRnIhPT12b2lkIDA/RnI6ITEsY29kZTprLmNvZGU/bGUoUSh7fSxrLmNvZGUpLHtvcHRpbWl6ZTp3bixyZWdFeHA6SmV9KTp7b3B0aW1pemU6d24scmVnRXhwOkplfSxsb29wUmVxdWlyZWQ6KE1yPWsubG9vcFJlcXVpcmVkKSE9PW51bGwmJk1yIT09dm9pZCAwP01yOmIsbG9vcEVudW06KE1lPWsubG9vcEVudW0pIT09bnVsbCYmTWUhPT12b2lkIDA/TWU6YixtZXRhOihMcj1rLm1ldGEpIT09bnVsbCYmTHIhPT12b2lkIDA/THI6ITAsbWVzc2FnZXM6KGZyPWsubWVzc2FnZXMpIT09bnVsbCYmZnIhPT12b2lkIDA/ZnI6ITAsaW5saW5lUmVmczooZHI9ay5pbmxpbmVSZWZzKSE9PW51bGwmJmRyIT09dm9pZCAwP2RyOiEwLHNjaGVtYUlkOihocj1rLnNjaGVtYUlkKSE9PW51bGwmJmhyIT09dm9pZCAwP2hyOiIkaWQiLGFkZFVzZWRTY2hlbWE6KFZyPWsuYWRkVXNlZFNjaGVtYSkhPT1udWxsJiZWciE9PXZvaWQgMD9WcjohMCx2YWxpZGF0ZVNjaGVtYToobnQ9ay52YWxpZGF0ZVNjaGVtYSkhPT1udWxsJiZudCE9PXZvaWQgMD9udDohMCx2YWxpZGF0ZUZvcm1hdHM6KGtlPWsudmFsaWRhdGVGb3JtYXRzKSE9PW51bGwmJmtlIT09dm9pZCAwP2tlOiEwLHVuaWNvZGVSZWdFeHA6KHByPWsudW5pY29kZVJlZ0V4cCkhPT1udWxsJiZwciE9PXZvaWQgMD9wcjohMCxpbnQzMnJhbmdlOih6cj1rLmludDMycmFuZ2UpIT09bnVsbCYmenIhPT12b2lkIDA/enI6ITAsdXJpUmVzb2x2ZXI6SnR9fWNsYXNzIEF7Y29uc3RydWN0b3IoZz17fSl7dGhpcy5zY2hlbWFzPXt9LHRoaXMucmVmcz17fSx0aGlzLmZvcm1hdHM9e30sdGhpcy5fY29tcGlsYXRpb25zPW5ldyBTZXQsdGhpcy5fbG9hZGluZz17fSx0aGlzLl9jYWNoZT1uZXcgTWFwLGc9dGhpcy5vcHRzPVEoUSh7fSxnKSxPKGcpKTtjb25zdHtlczU6QyxsaW5lczp3fT10aGlzLm9wdHMuY29kZTt0aGlzLnNjb3BlPW5ldyBsLlZhbHVlU2NvcGUoe3Njb3BlOnt9LHByZWZpeGVzOmosZXM1OkMsbGluZXM6d30pLHRoaXMubG9nZ2VyPVcoZy5sb2dnZXIpO2NvbnN0IGM9Zy52YWxpZGF0ZUZvcm1hdHM7Zy52YWxpZGF0ZUZvcm1hdHM9ITEsdGhpcy5SVUxFUz0oMCxhLmdldFJ1bGVzKSgpLEguY2FsbCh0aGlzLHksZywiTk9UIFNVUFBPUlRFRCIpLEguY2FsbCh0aGlzLF8sZywiREVQUkVDQVRFRCIsIndhcm4iKSx0aGlzLl9tZXRhT3B0cz1HLmNhbGwodGhpcyksZy5mb3JtYXRzJiZELmNhbGwodGhpcyksdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCksdGhpcy5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSxnLmtleXdvcmRzJiZCLmNhbGwodGhpcyxnLmtleXdvcmRzKSx0eXBlb2YgZy5tZXRhPT0ib2JqZWN0IiYmdGhpcy5hZGRNZXRhU2NoZW1hKGcubWV0YSksTi5jYWxsKHRoaXMpLGcudmFsaWRhdGVGb3JtYXRzPWN9X2FkZFZvY2FidWxhcmllcygpe3RoaXMuYWRkS2V5d29yZCgiJGFzeW5jIil9X2FkZERlZmF1bHRNZXRhU2NoZW1hKCl7Y29uc3R7JGRhdGE6ZyxtZXRhOkMsc2NoZW1hSWQ6d309dGhpcy5vcHRzO2xldCBjPWg7dz09PSJpZCImJihjPVEoe30saCksYy5pZD1jLiRpZCxkZWxldGUgYy4kaWQpLEMmJmcmJnRoaXMuYWRkTWV0YVNjaGVtYShjLGNbd10sITEpfWRlZmF1bHRNZXRhKCl7Y29uc3R7bWV0YTpnLHNjaGVtYUlkOkN9PXRoaXMub3B0cztyZXR1cm4gdGhpcy5vcHRzLmRlZmF1bHRNZXRhPXR5cGVvZiBnPT0ib2JqZWN0Ij9nW0NdfHxnOnZvaWQgMH12YWxpZGF0ZShnLEMpe2xldCB3O2lmKHR5cGVvZiBnPT0ic3RyaW5nIil7aWYodz10aGlzLmdldFNjaGVtYShnKSwhdyl0aHJvdyBuZXcgRXJyb3IoYG5vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgIiR7Z30iYCl9ZWxzZSB3PXRoaXMuY29tcGlsZShnKTtjb25zdCBjPXcoQyk7cmV0dXJuIiRhc3luYyJpbiB3fHwodGhpcy5lcnJvcnM9dy5lcnJvcnMpLGN9Y29tcGlsZShnLEMpe2NvbnN0IHc9dGhpcy5fYWRkU2NoZW1hKGcsQyk7cmV0dXJuIHcudmFsaWRhdGV8fHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYodyl9Y29tcGlsZUFzeW5jKGcsQyl7aWYodHlwZW9mIHRoaXMub3B0cy5sb2FkU2NoZW1hIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigib3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7Y29uc3R7bG9hZFNjaGVtYTp3fT10aGlzLm9wdHM7cmV0dXJuIGMuY2FsbCh0aGlzLGcsQyk7YXN5bmMgZnVuY3Rpb24gYyhyZSx5ZSl7YXdhaXQgbS5jYWxsKHRoaXMscmUuJHNjaGVtYSk7Y29uc3QgcnQ9dGhpcy5fYWRkU2NoZW1hKHJlLHllKTtyZXR1cm4gcnQudmFsaWRhdGV8fFAuY2FsbCh0aGlzLHJ0KX1hc3luYyBmdW5jdGlvbiBtKHJlKXtyZSYmIXRoaXMuZ2V0U2NoZW1hKHJlKSYmYXdhaXQgYy5jYWxsKHRoaXMseyRyZWY6cmV9LCEwKX1hc3luYyBmdW5jdGlvbiBQKHJlKXt0cnl7cmV0dXJuIHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYocmUpfWNhdGNoKHllKXtpZighKHllIGluc3RhbmNlb2Ygcy5kZWZhdWx0KSl0aHJvdyB5ZTtyZXR1cm4gVS5jYWxsKHRoaXMseWUpLGF3YWl0IEYuY2FsbCh0aGlzLHllLm1pc3NpbmdTY2hlbWEpLFAuY2FsbCh0aGlzLHJlKX19ZnVuY3Rpb24gVSh7bWlzc2luZ1NjaGVtYTpyZSxtaXNzaW5nUmVmOnllfSl7aWYodGhpcy5yZWZzW3JlXSl0aHJvdyBuZXcgRXJyb3IoYEFueVNjaGVtYSAke3JlfSBpcyBsb2FkZWQgYnV0ICR7eWV9IGNhbm5vdCBiZSByZXNvbHZlZGApfWFzeW5jIGZ1bmN0aW9uIEYocmUpe2NvbnN0IHllPWF3YWl0IFouY2FsbCh0aGlzLHJlKTt0aGlzLnJlZnNbcmVdfHxhd2FpdCBtLmNhbGwodGhpcyx5ZS4kc2NoZW1hKSx0aGlzLnJlZnNbcmVdfHx0aGlzLmFkZFNjaGVtYSh5ZSxyZSxDKX1hc3luYyBmdW5jdGlvbiBaKHJlKXtjb25zdCB5ZT10aGlzLl9sb2FkaW5nW3JlXTtpZih5ZSlyZXR1cm4geWU7dHJ5e3JldHVybiBhd2FpdCh0aGlzLl9sb2FkaW5nW3JlXT13KHJlKSl9ZmluYWxseXtkZWxldGUgdGhpcy5fbG9hZGluZ1tyZV19fX1hZGRTY2hlbWEoZyxDLHcsYz10aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEpe2lmKEFycmF5LmlzQXJyYXkoZykpe2Zvcihjb25zdCBQIG9mIGcpdGhpcy5hZGRTY2hlbWEoUCx2b2lkIDAsdyxjKTtyZXR1cm4gdGhpc31sZXQgbTtpZih0eXBlb2YgZz09Im9iamVjdCIpe2NvbnN0e3NjaGVtYUlkOlB9PXRoaXMub3B0cztpZihtPWdbUF0sbSE9PXZvaWQgMCYmdHlwZW9mIG0hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcihgc2NoZW1hICR7UH0gbXVzdCBiZSBzdHJpbmdgKX1yZXR1cm4gQz0oMCxmLm5vcm1hbGl6ZUlkKShDfHxtKSx0aGlzLl9jaGVja1VuaXF1ZShDKSx0aGlzLnNjaGVtYXNbQ109dGhpcy5fYWRkU2NoZW1hKGcsdyxDLGMsITApLHRoaXN9YWRkTWV0YVNjaGVtYShnLEMsdz10aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEpe3JldHVybiB0aGlzLmFkZFNjaGVtYShnLEMsITAsdyksdGhpc312YWxpZGF0ZVNjaGVtYShnLEMpe2lmKHR5cGVvZiBnPT0iYm9vbGVhbiIpcmV0dXJuITA7bGV0IHc7aWYodz1nLiRzY2hlbWEsdyE9PXZvaWQgMCYmdHlwZW9mIHchPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nIik7aWYodz13fHx0aGlzLm9wdHMuZGVmYXVsdE1ldGF8fHRoaXMuZGVmYXVsdE1ldGEoKSwhdylyZXR1cm4gdGhpcy5sb2dnZXIud2FybigibWV0YS1zY2hlbWEgbm90IGF2YWlsYWJsZSIpLHRoaXMuZXJyb3JzPW51bGwsITA7Y29uc3QgYz10aGlzLnZhbGlkYXRlKHcsZyk7aWYoIWMmJkMpe2NvbnN0IG09InNjaGVtYSBpcyBpbnZhbGlkOiAiK3RoaXMuZXJyb3JzVGV4dCgpO2lmKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYT09PSJsb2ciKXRoaXMubG9nZ2VyLmVycm9yKG0pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG0pfXJldHVybiBjfWdldFNjaGVtYShnKXtsZXQgQztmb3IoO3R5cGVvZihDPSQuY2FsbCh0aGlzLGcpKT09InN0cmluZyI7KWc9QztpZihDPT09dm9pZCAwKXtjb25zdHtzY2hlbWFJZDp3fT10aGlzLm9wdHMsYz1uZXcgby5TY2hlbWFFbnYoe3NjaGVtYTp7fSxzY2hlbWFJZDp3fSk7aWYoQz1vLnJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLGMsZyksIUMpcmV0dXJuO3RoaXMucmVmc1tnXT1DfXJldHVybiBDLnZhbGlkYXRlfHx0aGlzLl9jb21waWxlU2NoZW1hRW52KEMpfXJlbW92ZVNjaGVtYShnKXtpZihnIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcyxnKSx0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcyxnKSx0aGlzO3N3aXRjaCh0eXBlb2YgZyl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcyksdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMpLHRoaXMuX2NhY2hlLmNsZWFyKCksdGhpcztjYXNlInN0cmluZyI6e2NvbnN0IEM9JC5jYWxsKHRoaXMsZyk7cmV0dXJuIHR5cGVvZiBDPT0ib2JqZWN0IiYmdGhpcy5fY2FjaGUuZGVsZXRlKEMuc2NoZW1hKSxkZWxldGUgdGhpcy5zY2hlbWFzW2ddLGRlbGV0ZSB0aGlzLnJlZnNbZ10sdGhpc31jYXNlIm9iamVjdCI6e2NvbnN0IEM9Zzt0aGlzLl9jYWNoZS5kZWxldGUoQyk7bGV0IHc9Z1t0aGlzLm9wdHMuc2NoZW1hSWRdO3JldHVybiB3JiYodz0oMCxmLm5vcm1hbGl6ZUlkKSh3KSxkZWxldGUgdGhpcy5zY2hlbWFzW3ddLGRlbGV0ZSB0aGlzLnJlZnNbd10pLHRoaXN9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImFqdi5yZW1vdmVTY2hlbWE6IGludmFsaWQgcGFyYW1ldGVyIil9fWFkZFZvY2FidWxhcnkoZyl7Zm9yKGNvbnN0IEMgb2YgZyl0aGlzLmFkZEtleXdvcmQoQyk7cmV0dXJuIHRoaXN9YWRkS2V5d29yZChnLEMpe2xldCB3O2lmKHR5cGVvZiBnPT0ic3RyaW5nIil3PWcsdHlwZW9mIEM9PSJvYmplY3QiJiYodGhpcy5sb2dnZXIud2FybigidGhlc2UgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCwgc2VlIGRvY3MgZm9yIGFkZEtleXdvcmQiKSxDLmtleXdvcmQ9dyk7ZWxzZSBpZih0eXBlb2YgZz09Im9iamVjdCImJkM9PT12b2lkIDApe2lmKEM9Zyx3PUMua2V5d29yZCxBcnJheS5pc0FycmF5KHcpJiYhdy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXkiKX1lbHNlIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhZGRLZXl3b3JkcyBwYXJhbWV0ZXJzIik7aWYoWC5jYWxsKHRoaXMsdyxDKSwhQylyZXR1cm4oMCxpLmVhY2hJdGVtKSh3LG09PnZlLmNhbGwodGhpcyxtKSksdGhpcztOZS5jYWxsKHRoaXMsQyk7Y29uc3QgYz1sZShRKHt9LEMpLHt0eXBlOigwLHAuZ2V0SlNPTlR5cGVzKShDLnR5cGUpLHNjaGVtYVR5cGU6KDAscC5nZXRKU09OVHlwZXMpKEMuc2NoZW1hVHlwZSl9KTtyZXR1cm4oMCxpLmVhY2hJdGVtKSh3LGMudHlwZS5sZW5ndGg9PT0wP209PnZlLmNhbGwodGhpcyxtLGMpOm09PmMudHlwZS5mb3JFYWNoKFA9PnZlLmNhbGwodGhpcyxtLGMsUCkpKSx0aGlzfWdldEtleXdvcmQoZyl7Y29uc3QgQz10aGlzLlJVTEVTLmFsbFtnXTtyZXR1cm4gdHlwZW9mIEM9PSJvYmplY3QiP0MuZGVmaW5pdGlvbjohIUN9cmVtb3ZlS2V5d29yZChnKXtjb25zdHtSVUxFUzpDfT10aGlzO2RlbGV0ZSBDLmtleXdvcmRzW2ddLGRlbGV0ZSBDLmFsbFtnXTtmb3IoY29uc3QgdyBvZiBDLnJ1bGVzKXtjb25zdCBjPXcucnVsZXMuZmluZEluZGV4KG09Pm0ua2V5d29yZD09PWcpO2M+PTAmJncucnVsZXMuc3BsaWNlKGMsMSl9cmV0dXJuIHRoaXN9YWRkRm9ybWF0KGcsQyl7cmV0dXJuIHR5cGVvZiBDPT0ic3RyaW5nIiYmKEM9bmV3IFJlZ0V4cChDKSksdGhpcy5mb3JtYXRzW2ddPUMsdGhpc31lcnJvcnNUZXh0KGc9dGhpcy5lcnJvcnMse3NlcGFyYXRvcjpDPSIsICIsZGF0YVZhcjp3PSJkYXRhIn09e30pe3JldHVybiFnfHxnLmxlbmd0aD09PTA/Ik5vIGVycm9ycyI6Zy5tYXAoYz0+YCR7d30ke2MuaW5zdGFuY2VQYXRofSAke2MubWVzc2FnZX1gKS5yZWR1Y2UoKGMsbSk9PmMrQyttKX0kZGF0YU1ldGFTY2hlbWEoZyxDKXtjb25zdCB3PXRoaXMuUlVMRVMuYWxsO2c9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnKSk7Zm9yKGNvbnN0IGMgb2YgQyl7Y29uc3QgbT1jLnNwbGl0KCIvIikuc2xpY2UoMSk7bGV0IFA9Zztmb3IoY29uc3QgVSBvZiBtKVA9UFtVXTtmb3IoY29uc3QgVSBpbiB3KXtjb25zdCBGPXdbVV07aWYodHlwZW9mIEYhPSJvYmplY3QiKWNvbnRpbnVlO2NvbnN0eyRkYXRhOlp9PUYuZGVmaW5pdGlvbixyZT1QW1VdO1omJnJlJiYoUFtVXT11cihyZSkpfX1yZXR1cm4gZ31fcmVtb3ZlQWxsU2NoZW1hcyhnLEMpe2Zvcihjb25zdCB3IGluIGcpe2NvbnN0IGM9Z1t3XTsoIUN8fEMudGVzdCh3KSkmJih0eXBlb2YgYz09InN0cmluZyI/ZGVsZXRlIGdbd106YyYmIWMubWV0YSYmKHRoaXMuX2NhY2hlLmRlbGV0ZShjLnNjaGVtYSksZGVsZXRlIGdbd10pKX19X2FkZFNjaGVtYShnLEMsdyxjPXRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSxtPXRoaXMub3B0cy5hZGRVc2VkU2NoZW1hKXtsZXQgUDtjb25zdHtzY2hlbWFJZDpVfT10aGlzLm9wdHM7aWYodHlwZW9mIGc9PSJvYmplY3QiKVA9Z1tVXTtlbHNle2lmKHRoaXMub3B0cy5qdGQpdGhyb3cgbmV3IEVycm9yKCJzY2hlbWEgbXVzdCBiZSBvYmplY3QiKTtpZih0eXBlb2YgZyE9ImJvb2xlYW4iKXRocm93IG5ldyBFcnJvcigic2NoZW1hIG11c3QgYmUgb2JqZWN0IG9yIGJvb2xlYW4iKX1sZXQgRj10aGlzLl9jYWNoZS5nZXQoZyk7aWYoRiE9PXZvaWQgMClyZXR1cm4gRjt3PSgwLGYubm9ybWFsaXplSWQpKFB8fHcpO2NvbnN0IFo9Zi5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcyxnLHcpO3JldHVybiBGPW5ldyBvLlNjaGVtYUVudih7c2NoZW1hOmcsc2NoZW1hSWQ6VSxtZXRhOkMsYmFzZUlkOncsbG9jYWxSZWZzOlp9KSx0aGlzLl9jYWNoZS5zZXQoRi5zY2hlbWEsRiksbSYmIXcuc3RhcnRzV2l0aCgiIyIpJiYodyYmdGhpcy5fY2hlY2tVbmlxdWUodyksdGhpcy5yZWZzW3ddPUYpLGMmJnRoaXMudmFsaWRhdGVTY2hlbWEoZywhMCksRn1fY2hlY2tVbmlxdWUoZyl7aWYodGhpcy5zY2hlbWFzW2ddfHx0aGlzLnJlZnNbZ10pdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgIiR7Z30iIGFscmVhZHkgZXhpc3RzYCl9X2NvbXBpbGVTY2hlbWFFbnYoZyl7aWYoZy5tZXRhP3RoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKGcpOm8uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsZyksIWcudmFsaWRhdGUpdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtyZXR1cm4gZy52YWxpZGF0ZX1fY29tcGlsZU1ldGFTY2hlbWEoZyl7Y29uc3QgQz10aGlzLm9wdHM7dGhpcy5vcHRzPXRoaXMuX21ldGFPcHRzO3RyeXtvLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLGcpfWZpbmFsbHl7dGhpcy5vcHRzPUN9fX1lLmRlZmF1bHQ9QSxBLlZhbGlkYXRpb25FcnJvcj1uLmRlZmF1bHQsQS5NaXNzaW5nUmVmRXJyb3I9cy5kZWZhdWx0O2Z1bmN0aW9uIEgoayxnLEMsdz0iZXJyb3IiKXtmb3IoY29uc3QgYyBpbiBrKXtjb25zdCBtPWM7bSBpbiBnJiZ0aGlzLmxvZ2dlclt3XShgJHtDfTogb3B0aW9uICR7Y30uICR7a1ttXX1gKX19ZnVuY3Rpb24gJChrKXtyZXR1cm4gaz0oMCxmLm5vcm1hbGl6ZUlkKShrKSx0aGlzLnNjaGVtYXNba118fHRoaXMucmVmc1trXX1mdW5jdGlvbiBOKCl7Y29uc3Qgaz10aGlzLm9wdHMuc2NoZW1hcztpZighIWspaWYoQXJyYXkuaXNBcnJheShrKSl0aGlzLmFkZFNjaGVtYShrKTtlbHNlIGZvcihjb25zdCBnIGluIGspdGhpcy5hZGRTY2hlbWEoa1tnXSxnKX1mdW5jdGlvbiBEKCl7Zm9yKGNvbnN0IGsgaW4gdGhpcy5vcHRzLmZvcm1hdHMpe2NvbnN0IGc9dGhpcy5vcHRzLmZvcm1hdHNba107ZyYmdGhpcy5hZGRGb3JtYXQoayxnKX19ZnVuY3Rpb24gQihrKXtpZihBcnJheS5pc0FycmF5KGspKXt0aGlzLmFkZFZvY2FidWxhcnkoayk7cmV0dXJufXRoaXMubG9nZ2VyLndhcm4oImtleXdvcmRzIG9wdGlvbiBhcyBtYXAgaXMgZGVwcmVjYXRlZCwgcGFzcyBhcnJheSIpO2Zvcihjb25zdCBnIGluIGspe2NvbnN0IEM9a1tnXTtDLmtleXdvcmR8fChDLmtleXdvcmQ9ZyksdGhpcy5hZGRLZXl3b3JkKEMpfX1mdW5jdGlvbiBHKCl7Y29uc3Qgaz1RKHt9LHRoaXMub3B0cyk7Zm9yKGNvbnN0IGcgb2YgSSlkZWxldGUga1tnXTtyZXR1cm4ga31jb25zdCBwZT17bG9nKCl7fSx3YXJuKCl7fSxlcnJvcigpe319O2Z1bmN0aW9uIFcoayl7aWYoaz09PSExKXJldHVybiBwZTtpZihrPT09dm9pZCAwKXJldHVybiBjb25zb2xlO2lmKGsubG9nJiZrLndhcm4mJmsuZXJyb3IpcmV0dXJuIGs7dGhyb3cgbmV3IEVycm9yKCJsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzIil9Y29uc3Qgb2U9L15bYS16XyRdW2EtejAtOV8kOi1dKiQvaTtmdW5jdGlvbiBYKGssZyl7Y29uc3R7UlVMRVM6Q309dGhpcztpZigoMCxpLmVhY2hJdGVtKShrLHc9PntpZihDLmtleXdvcmRzW3ddKXRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke3d9IGlzIGFscmVhZHkgZGVmaW5lZGApO2lmKCFvZS50ZXN0KHcpKXRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke3d9IGhhcyBpbnZhbGlkIG5hbWVgKX0pLCEhZyYmZy4kZGF0YSYmISgiY29kZSJpbiBnfHwidmFsaWRhdGUiaW4gZykpdGhyb3cgbmV3IEVycm9yKCckZGF0YSBrZXl3b3JkIG11c3QgaGF2ZSAiY29kZSIgb3IgInZhbGlkYXRlIiBmdW5jdGlvbicpfWZ1bmN0aW9uIHZlKGssZyxDKXt2YXIgdztjb25zdCBjPWc9PW51bGw/dm9pZCAwOmcucG9zdDtpZihDJiZjKXRocm93IG5ldyBFcnJvcigna2V5d29yZCB3aXRoICJwb3N0IiBmbGFnIGNhbm5vdCBoYXZlICJ0eXBlIicpO2NvbnN0e1JVTEVTOm19PXRoaXM7bGV0IFA9Yz9tLnBvc3Q6bS5ydWxlcy5maW5kKCh7dHlwZTpGfSk9PkY9PT1DKTtpZihQfHwoUD17dHlwZTpDLHJ1bGVzOltdfSxtLnJ1bGVzLnB1c2goUCkpLG0ua2V5d29yZHNba109ITAsIWcpcmV0dXJuO2NvbnN0IFU9e2tleXdvcmQ6ayxkZWZpbml0aW9uOmxlKFEoe30sZykse3R5cGU6KDAscC5nZXRKU09OVHlwZXMpKGcudHlwZSksc2NoZW1hVHlwZTooMCxwLmdldEpTT05UeXBlcykoZy5zY2hlbWFUeXBlKX0pfTtnLmJlZm9yZT9FZS5jYWxsKHRoaXMsUCxVLGcuYmVmb3JlKTpQLnJ1bGVzLnB1c2goVSksbS5hbGxba109VSwodz1nLmltcGxlbWVudHMpPT09bnVsbHx8dz09PXZvaWQgMHx8dy5mb3JFYWNoKEY9PnRoaXMuYWRkS2V5d29yZChGKSl9ZnVuY3Rpb24gRWUoayxnLEMpe2NvbnN0IHc9ay5ydWxlcy5maW5kSW5kZXgoYz0+Yy5rZXl3b3JkPT09Qyk7dz49MD9rLnJ1bGVzLnNwbGljZSh3LDAsZyk6KGsucnVsZXMucHVzaChnKSx0aGlzLmxvZ2dlci53YXJuKGBydWxlICR7Q30gaXMgbm90IGRlZmluZWRgKSl9ZnVuY3Rpb24gTmUoayl7bGV0e21ldGFTY2hlbWE6Z309aztnIT09dm9pZCAwJiYoay4kZGF0YSYmdGhpcy5vcHRzLiRkYXRhJiYoZz11cihnKSksay52YWxpZGF0ZVNjaGVtYT10aGlzLmNvbXBpbGUoZywhMCkpfWNvbnN0IEJlPXskcmVmOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWp2LXZhbGlkYXRvci9hanYvbWFzdGVyL2xpYi9yZWZzL2RhdGEuanNvbiMifTtmdW5jdGlvbiB1cihrKXtyZXR1cm57YW55T2Y6W2ssQmVdfX19KHJhKTt2YXIgdHM9e30sRnQ9e30sTXQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KE10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxNdC5jYWxsUmVmPU10LmdldFZhbGlkYXRlPXZvaWQgMDtjb25zdCBIdT1rdCxqYT1uZSxqZT11ZSxzcj1MZSxrYT1DZSxmbj1iZSxLdT17a2V5d29yZDoiJHJlZiIsc2NoZW1hVHlwZToic3RyaW5nIixjb2RlKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGl0Om59PWUse2Jhc2VJZDpzLHNjaGVtYUVudjphLHZhbGlkYXRlTmFtZTpvLG9wdHM6bCxzZWxmOmZ9PW4se3Jvb3Q6cH09YTtpZigocj09PSIjInx8cj09PSIjLyIpJiZzPT09cC5iYXNlSWQpcmV0dXJuIGgoKTtjb25zdCBpPWthLnJlc29sdmVSZWYuY2FsbChmLHAscyxyKTtpZihpPT09dm9pZCAwKXRocm93IG5ldyBIdS5kZWZhdWx0KG4ub3B0cy51cmlSZXNvbHZlcixzLHIpO2lmKGkgaW5zdGFuY2VvZiBrYS5TY2hlbWFFbnYpcmV0dXJuIEUoaSk7cmV0dXJuIFQoaSk7ZnVuY3Rpb24gaCgpe2lmKGE9PT1wKXJldHVybiBkbihlLG8sYSxhLiRhc3luYyk7Y29uc3QgST10LnNjb3BlVmFsdWUoInJvb3QiLHtyZWY6cH0pO3JldHVybiBkbihlLCgwLGplLl8pYCR7SX0udmFsaWRhdGVgLHAscC4kYXN5bmMpfWZ1bmN0aW9uIEUoSSl7Y29uc3Qgaj1VYShlLEkpO2RuKGUsaixJLEkuJGFzeW5jKX1mdW5jdGlvbiBUKEkpe2NvbnN0IGo9dC5zY29wZVZhbHVlKCJzY2hlbWEiLGwuY29kZS5zb3VyY2U9PT0hMD97cmVmOkksY29kZTooMCxqZS5zdHJpbmdpZnkpKEkpfTp7cmVmOkl9KSx5PXQubmFtZSgidmFsaWQiKSxfPWUuc3Vic2NoZW1hKHtzY2hlbWE6SSxkYXRhVHlwZXM6W10sc2NoZW1hUGF0aDpqZS5uaWwsdG9wU2NoZW1hUmVmOmosZXJyU2NoZW1hUGF0aDpyfSx5KTtlLm1lcmdlRXZhbHVhdGVkKF8pLGUub2soeSl9fX07ZnVuY3Rpb24gVWEoZSx0KXtjb25zdHtnZW46cn09ZTtyZXR1cm4gdC52YWxpZGF0ZT9yLnNjb3BlVmFsdWUoInZhbGlkYXRlIix7cmVmOnQudmFsaWRhdGV9KTooMCxqZS5fKWAke3Iuc2NvcGVWYWx1ZSgid3JhcHBlciIse3JlZjp0fSl9LnZhbGlkYXRlYH1NdC5nZXRWYWxpZGF0ZT1VYTtmdW5jdGlvbiBkbihlLHQscixuKXtjb25zdHtnZW46cyxpdDphfT1lLHthbGxFcnJvcnM6byxzY2hlbWFFbnY6bCxvcHRzOmZ9PWEscD1mLnBhc3NDb250ZXh0P3NyLmRlZmF1bHQudGhpczpqZS5uaWw7bj9pKCk6aCgpO2Z1bmN0aW9uIGkoKXtpZighbC4kYXN5bmMpdGhyb3cgbmV3IEVycm9yKCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYSIpO2NvbnN0IEk9cy5sZXQoInZhbGlkIik7cy50cnkoKCk9PntzLmNvZGUoKDAsamUuXylgYXdhaXQgJHsoMCxqYS5jYWxsVmFsaWRhdGVDb2RlKShlLHQscCl9YCksVCh0KSxvfHxzLmFzc2lnbihJLCEwKX0saj0+e3MuaWYoKDAsamUuXylgISgke2p9IGluc3RhbmNlb2YgJHthLlZhbGlkYXRpb25FcnJvcn0pYCwoKT0+cy50aHJvdyhqKSksRShqKSxvfHxzLmFzc2lnbihJLCExKX0pLGUub2soSSl9ZnVuY3Rpb24gaCgpe2UucmVzdWx0KCgwLGphLmNhbGxWYWxpZGF0ZUNvZGUpKGUsdCxwKSwoKT0+VCh0KSwoKT0+RSh0KSl9ZnVuY3Rpb24gRShJKXtjb25zdCBqPSgwLGplLl8pYCR7SX0uZXJyb3JzYDtzLmFzc2lnbihzci5kZWZhdWx0LnZFcnJvcnMsKDAsamUuXylgJHtzci5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtqfSA6ICR7c3IuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtqfSlgKSxzLmFzc2lnbihzci5kZWZhdWx0LmVycm9ycywoMCxqZS5fKWAke3NyLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCl9ZnVuY3Rpb24gVChJKXt2YXIgajtpZighYS5vcHRzLnVuZXZhbHVhdGVkKXJldHVybjtjb25zdCB5PShqPXI9PW51bGw/dm9pZCAwOnIudmFsaWRhdGUpPT09bnVsbHx8aj09PXZvaWQgMD92b2lkIDA6ai5ldmFsdWF0ZWQ7aWYoYS5wcm9wcyE9PSEwKWlmKHkmJiF5LmR5bmFtaWNQcm9wcyl5LnByb3BzIT09dm9pZCAwJiYoYS5wcm9wcz1mbi5tZXJnZUV2YWx1YXRlZC5wcm9wcyhzLHkucHJvcHMsYS5wcm9wcykpO2Vsc2V7Y29uc3QgXz1zLnZhcigicHJvcHMiLCgwLGplLl8pYCR7SX0uZXZhbHVhdGVkLnByb3BzYCk7YS5wcm9wcz1mbi5tZXJnZUV2YWx1YXRlZC5wcm9wcyhzLF8sYS5wcm9wcyxqZS5OYW1lKX1pZihhLml0ZW1zIT09ITApaWYoeSYmIXkuZHluYW1pY0l0ZW1zKXkuaXRlbXMhPT12b2lkIDAmJihhLml0ZW1zPWZuLm1lcmdlRXZhbHVhdGVkLml0ZW1zKHMseS5pdGVtcyxhLml0ZW1zKSk7ZWxzZXtjb25zdCBfPXMudmFyKCJpdGVtcyIsKDAsamUuXylgJHtJfS5ldmFsdWF0ZWQuaXRlbXNgKTthLml0ZW1zPWZuLm1lcmdlRXZhbHVhdGVkLml0ZW1zKHMsXyxhLml0ZW1zLGplLk5hbWUpfX19TXQuY2FsbFJlZj1kbixNdC5kZWZhdWx0PUt1O3ZhciBWZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFZlLmNoZWNrTWV0YWRhdGE9dm9pZCAwO2NvbnN0IEJ1PWJlLEp1PXtrZXl3b3JkOiJtZXRhZGF0YSIsc2NoZW1hVHlwZToib2JqZWN0Iixjb2RlKGUpe0ZhKGUpO2NvbnN0e2dlbjp0LHNjaGVtYTpyLGl0Om59PWU7aWYoKDAsQnUuYWx3YXlzVmFsaWRTY2hlbWEpKG4scikpcmV0dXJuO2NvbnN0IHM9dC5uYW1lKCJ2YWxpZCIpO2Uuc3Vic2NoZW1hKHtrZXl3b3JkOiJtZXRhZGF0YSIsanRkTWV0YWRhdGE6ITB9LHMpLGUub2socyl9fTtmdW5jdGlvbiBGYSh7aXQ6ZSxrZXl3b3JkOnR9LHIpe2lmKGUuanRkTWV0YWRhdGEhPT1yKXRocm93IG5ldyBFcnJvcihgSlREOiAiJHt0fSIgY2Fubm90IGJlIHVzZWQgaW4gdGhpcyBzY2hlbWEgbG9jYXRpb25gKX1WZS5jaGVja01ldGFkYXRhPUZhLFZlLmRlZmF1bHQ9SnUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGdC5oYXNSZWY9dm9pZCAwO2NvbnN0IE1hPUNlLFNyPXVlLHF1PWt0LExhPUxlLFZhPU10LEd1PVZlLFF1PXtrZXl3b3JkOiJyZWYiLHNjaGVtYVR5cGU6InN0cmluZyIsY29kZShlKXsoMCxHdS5jaGVja01ldGFkYXRhKShlKTtjb25zdHtnZW46dCxkYXRhOnIsc2NoZW1hOm4scGFyZW50U2NoZW1hOnMsaXQ6YX09ZSx7c2NoZW1hRW52Ontyb290Om99fT1hLGw9dC5uYW1lKCJ2YWxpZCIpO3MubnVsbGFibGU/KHQudmFyKGwsKDAsU3IuXylgJHtyfSA9PT0gbnVsbGApLHQuaWYoKDAsU3Iubm90KShsKSxmKSk6KHQudmFyKGwsITEpLGYoKSksZS5vayhsKTtmdW5jdGlvbiBmKCl7dmFyIGg7Y29uc3QgRT0oaD1vLnNjaGVtYS5kZWZpbml0aW9ucyk9PT1udWxsfHxoPT09dm9pZCAwP3ZvaWQgMDpoW25dO2lmKCFFKXRocm93IG5ldyBxdS5kZWZhdWx0KGEub3B0cy51cmlSZXNvbHZlciwiIixuLGBObyBkZWZpbml0aW9uICR7bn1gKTtycyhFKXx8IWEub3B0cy5pbmxpbmVSZWZzP3AoRSk6aShFKX1mdW5jdGlvbiBwKGgpe2NvbnN0IEU9TWEuY29tcGlsZVNjaGVtYS5jYWxsKGEuc2VsZixuZXcgTWEuU2NoZW1hRW52KHtzY2hlbWE6aCxyb290Om8sc2NoZW1hUGF0aDpgL2RlZmluaXRpb25zLyR7bn1gfSkpLFQ9KDAsVmEuZ2V0VmFsaWRhdGUpKGUsRSksST10LmNvbnN0KCJfZXJycyIsTGEuZGVmYXVsdC5lcnJvcnMpOygwLFZhLmNhbGxSZWYpKGUsVCxFLEUuJGFzeW5jKSx0LmFzc2lnbihsLCgwLFNyLl8pYCR7SX0gPT09ICR7TGEuZGVmYXVsdC5lcnJvcnN9YCl9ZnVuY3Rpb24gaShoKXtjb25zdCBFPXQuc2NvcGVWYWx1ZSgic2NoZW1hIixhLm9wdHMuY29kZS5zb3VyY2U9PT0hMD97cmVmOmgsY29kZTooMCxTci5zdHJpbmdpZnkpKGgpfTp7cmVmOmh9KTtlLnN1YnNjaGVtYSh7c2NoZW1hOmgsZGF0YVR5cGVzOltdLHNjaGVtYVBhdGg6U3IubmlsLHRvcFNjaGVtYVJlZjpFLGVyclNjaGVtYVBhdGg6YC9kZWZpbml0aW9ucy8ke259YH0sbCl9fX07ZnVuY3Rpb24gcnMoZSl7Zm9yKGNvbnN0IHQgaW4gZSl7bGV0IHI7aWYodD09PSJyZWYifHx0eXBlb2Yocj1lW3RdKT09Im9iamVjdCImJnJzKHIpKXJldHVybiEwfXJldHVybiExfUZ0Lmhhc1JlZj1ycyxGdC5kZWZhdWx0PVF1O3ZhciBucz17fSxobj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFl1PS90fFxzL2ksV3U9L14oXGRcZFxkXGQpLShcZFxkKS0oXGRcZCkkLyxYdT0vXihcZFxkKTooXGRcZCk6KFxkXGQpKD86XC5cZCspPyg/Onp8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8pJC9pLFp1PVswLDMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiB6YShlLHQpe2NvbnN0IHI9ZS5zcGxpdChZdSk7cmV0dXJuIHIubGVuZ3RoPT09MiYmSGEoclswXSkmJnh1KHJbMV0pfHx0JiZyLmxlbmd0aD09PTEmJkhhKHJbMF0pfWhuLmRlZmF1bHQ9emE7ZnVuY3Rpb24gSGEoZSl7Y29uc3QgdD1XdS5leGVjKGUpO2lmKCF0KXJldHVybiExO2NvbnN0IHI9K3RbMV0sbj0rdFsyXSxzPSt0WzNdO3JldHVybiBuPj0xJiZuPD0xMiYmcz49MSYmKHM8PVp1W25dfHxuPT09MiYmcz09PTI5JiYociUxMDA9PT0wP3IlNDAwPT09MDpyJTQ9PT0wKSl9ZnVuY3Rpb24geHUoZSl7Y29uc3QgdD1YdS5leGVjKGUpO2lmKCF0KXJldHVybiExO2NvbnN0IHI9K3RbMV0sbj0rdFsyXSxzPSt0WzNdLGE9Kyh0WzRdfHwwKSxvPSsodFs1XXx8MCk7cmV0dXJuIHI8PTIzJiZuPD01OSYmczw9NTl8fHItYT09PTIzJiZuLW89PT01OSYmcz09PTYwfXphLmNvZGU9J3JlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvdGltZXN0YW1wIikuZGVmYXVsdCc7dmFyIHplPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksemUudHlwZUVycm9yUGFyYW1zPXplLnR5cGVFcnJvck1lc3NhZ2U9emUudHlwZUVycm9yPXZvaWQgMDtjb25zdCBlbD11ZTtmdW5jdGlvbiB0bChlKXtyZXR1cm57bWVzc2FnZTp0PT5LYSh0LGUpLHBhcmFtczp0PT5CYSh0LGUpfX16ZS50eXBlRXJyb3I9dGw7ZnVuY3Rpb24gS2Eoe3BhcmVudFNjaGVtYTplfSx0KXtyZXR1cm4gZSE9bnVsbCYmZS5udWxsYWJsZT9gbXVzdCBiZSAke3R9IG9yIG51bGxgOmBtdXN0IGJlICR7dH1gfXplLnR5cGVFcnJvck1lc3NhZ2U9S2E7ZnVuY3Rpb24gQmEoe3BhcmVudFNjaGVtYTplfSx0KXtyZXR1cm4oMCxlbC5fKWB7dHlwZTogJHt0fSwgbnVsbGFibGU6ICR7ISEoZSE9bnVsbCYmZS5udWxsYWJsZSl9fWB9emUudHlwZUVycm9yUGFyYW1zPUJhLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmludFJhbmdlPXZvaWQgMDtjb25zdCB0PXVlLHI9aG4sbj1iZSxzPVZlLGE9emU7ZS5pbnRSYW5nZT17aW50ODpbLTEyOCwxMjcsM10sdWludDg6WzAsMjU1LDNdLGludDE2OlstMzI3NjgsMzI3NjcsNV0sdWludDE2OlswLDY1NTM1LDVdLGludDMyOlstMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3LDEwXSx1aW50MzI6WzAsNDI5NDk2NzI5NSwxMF19O2NvbnN0IG89e21lc3NhZ2U6cD0+KDAsYS50eXBlRXJyb3JNZXNzYWdlKShwLHAuc2NoZW1hKSxwYXJhbXM6cD0+KDAsYS50eXBlRXJyb3JQYXJhbXMpKHAscC5zY2hlbWEpfTtmdW5jdGlvbiBsKHApe2NvbnN0e2dlbjppLGRhdGE6aCxpdDpFfT1wLHt0aW1lc3RhbXA6VCxhbGxvd0RhdGU6SX09RS5vcHRzO2lmKFQ9PT0iZGF0ZSIpcmV0dXJuKDAsdC5fKWAke2h9IGluc3RhbmNlb2YgRGF0ZSBgO2NvbnN0IGo9KDAsbi51c2VGdW5jKShpLHIuZGVmYXVsdCkseT1JPygwLHQuXylgLCB0cnVlYDp0Lm5pbCxfPSgwLHQuXylgdHlwZW9mICR7aH0gPT0gInN0cmluZyIgJiYgJHtqfSgke2h9JHt5fSlgO3JldHVybiBUPT09InN0cmluZyI/XzooMCx0Lm9yKSgoMCx0Ll8pYCR7aH0gaW5zdGFuY2VvZiBEYXRlYCxfKX1jb25zdCBmPXtrZXl3b3JkOiJ0eXBlIixzY2hlbWFUeXBlOiJzdHJpbmciLGVycm9yOm8sY29kZShwKXsoMCxzLmNoZWNrTWV0YWRhdGEpKHApO2NvbnN0e2RhdGE6aSxzY2hlbWE6aCxwYXJlbnRTY2hlbWE6RSxpdDpUfT1wO2xldCBJO3N3aXRjaChoKXtjYXNlImJvb2xlYW4iOmNhc2Uic3RyaW5nIjpJPSgwLHQuXylgdHlwZW9mICR7aX0gPT0gJHtofWA7YnJlYWs7Y2FzZSJ0aW1lc3RhbXAiOntJPWwocCk7YnJlYWt9Y2FzZSJmbG9hdDMyIjpjYXNlImZsb2F0NjQiOkk9KDAsdC5fKWB0eXBlb2YgJHtpfSA9PSAibnVtYmVyImA7YnJlYWs7ZGVmYXVsdDp7Y29uc3Qgaj1oO2lmKEk9KDAsdC5fKWB0eXBlb2YgJHtpfSA9PSAibnVtYmVyIiAmJiBpc0Zpbml0ZSgke2l9KSAmJiAhKCR7aX0gJSAxKWAsIVQub3B0cy5pbnQzMnJhbmdlJiYoaj09PSJpbnQzMiJ8fGo9PT0idWludDMyIikpaj09PSJ1aW50MzIiJiYoST0oMCx0Ll8pYCR7SX0gJiYgJHtpfSA+PSAwYCk7ZWxzZXtjb25zdFt5LF9dPWUuaW50UmFuZ2Vbal07ST0oMCx0Ll8pYCR7SX0gJiYgJHtpfSA+PSAke3l9ICYmICR7aX0gPD0gJHtffWB9fX1wLnBhc3MoRS5udWxsYWJsZT8oMCx0Lm9yKSgoMCx0Ll8pYCR7aX0gPT09IG51bGxgLEkpOkkpfX07ZS5kZWZhdWx0PWZ9KG5zKTt2YXIgc3M9e30seGU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHhlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx4ZS5jaGVja051bGxhYmxlT2JqZWN0PXhlLmNoZWNrTnVsbGFibGU9dm9pZCAwO2NvbnN0IHBuPXVlO2Z1bmN0aW9uIEphKHtnZW46ZSxkYXRhOnQscGFyZW50U2NoZW1hOnJ9LG49cG4ubmlsKXtjb25zdCBzPWUubmFtZSgidmFsaWQiKTtyZXR1cm4gci5udWxsYWJsZT8oZS5sZXQocywoMCxwbi5fKWAke3R9ID09PSBudWxsYCksbj0oMCxwbi5ub3QpKHMpKTplLmxldChzLCExKSxbcyxuXX14ZS5jaGVja051bGxhYmxlPUphO2Z1bmN0aW9uIHJsKGUsdCl7Y29uc3RbcixuXT1KYShlLHQpO3JldHVybltyLCgwLHBuLl8pYCR7bn0gJiYgdHlwZW9mICR7ZS5kYXRhfSA9PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJheSgke2UuZGF0YX0pYF19eGUuY2hlY2tOdWxsYWJsZU9iamVjdD1ybCxPYmplY3QuZGVmaW5lUHJvcGVydHkoc3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHd0PXVlLG5sPVZlLHNsPXhlLGFsPXtrZXl3b3JkOiJlbnVtIixzY2hlbWFUeXBlOiJhcnJheSIsZXJyb3I6e21lc3NhZ2U6Im11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlcyIscGFyYW1zOih7c2NoZW1hQ29kZTplfSk9PigwLHd0Ll8pYHthbGxvd2VkVmFsdWVzOiAke2V9fWB9LGNvZGUoZSl7KDAsbmwuY2hlY2tNZXRhZGF0YSkoZSk7Y29uc3R7Z2VuOnQsZGF0YTpyLHNjaGVtYTpuLHNjaGVtYVZhbHVlOnMscGFyZW50U2NoZW1hOmEsaXQ6b309ZTtpZihuLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJlbnVtIG11c3QgaGF2ZSBub24tZW1wdHkgYXJyYXkiKTtpZihuLmxlbmd0aCE9PW5ldyBTZXQobikuc2l6ZSl0aHJvdyBuZXcgRXJyb3IoImVudW0gaXRlbXMgbXVzdCBiZSB1bmlxdWUiKTtsZXQgbDtjb25zdCBmPSgwLHd0Ll8pYHR5cGVvZiAke3J9ID09ICJzdHJpbmciYDtpZihuLmxlbmd0aD49by5vcHRzLmxvb3BFbnVtKXtsZXQgaTtbbCxpXT0oMCxzbC5jaGVja051bGxhYmxlKShlLGYpLHQuaWYoaSxwKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7bD0oMCx3dC5hbmQpKGYsKDAsd3Qub3IpKC4uLm4ubWFwKGk9PigwLHd0Ll8pYCR7cn0gPT09ICR7aX1gKSkpLGEubnVsbGFibGUmJihsPSgwLHd0Lm9yKSgoMCx3dC5fKWAke3J9ID09PSBudWxsYCxsKSl9ZS5wYXNzKGwpO2Z1bmN0aW9uIHAoKXt0LmZvck9mKCJ2IixzLGk9PnQuaWYoKDAsd3QuXylgJHtsfSA9ICR7cn0gPT09ICR7aX1gLCgpPT50LmJyZWFrKCkpKX19fTtzcy5kZWZhdWx0PWFsO3ZhciBhcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IG9sPWJlLGlsPW5lLHFhPXVlLGNsPVZlLHVsPXhlLGxsPXtrZXl3b3JkOiJlbGVtZW50cyIsc2NoZW1hVHlwZToib2JqZWN0IixlcnJvcjooMCx6ZS50eXBlRXJyb3IpKCJhcnJheSIpLGNvZGUoZSl7KDAsY2wuY2hlY2tNZXRhZGF0YSkoZSk7Y29uc3R7Z2VuOnQsZGF0YTpyLHNjaGVtYTpuLGl0OnN9PWU7aWYoKDAsb2wuYWx3YXlzVmFsaWRTY2hlbWEpKHMsbikpcmV0dXJuO2NvbnN0W2FdPSgwLHVsLmNoZWNrTnVsbGFibGUpKGUpO3QuaWYoKDAscWEubm90KShhKSwoKT0+dC5pZigoMCxxYS5fKWBBcnJheS5pc0FycmF5KCR7cn0pYCwoKT0+dC5hc3NpZ24oYSwoMCxpbC52YWxpZGF0ZUFycmF5KShlKSksKCk9PmUuZXJyb3IoKSkpLGUub2soYSl9fTthcy5kZWZhdWx0PWxsO3ZhciBvcz17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUudmFsaWRhdGVQcm9wZXJ0aWVzPWUuZXJyb3I9dm9pZCAwO2NvbnN0IHQ9bmUscj1iZSxuPXVlLHM9VmUsYT14ZSxvPXplO3ZhciBsOyhmdW5jdGlvbihpKXtpLkFkZGl0aW9uYWw9ImFkZGl0aW9uYWwiLGkuTWlzc2luZz0ibWlzc2luZyJ9KShsfHwobD17fSkpLGUuZXJyb3I9e21lc3NhZ2U6aT0+e2NvbnN0e3BhcmFtczpofT1pO3JldHVybiBoLnByb3BFcnJvcj9oLnByb3BFcnJvcj09PWwuQWRkaXRpb25hbD8ibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMiOmBtdXN0IGhhdmUgcHJvcGVydHkgJyR7aC5taXNzaW5nUHJvcGVydHl9J2A6KDAsby50eXBlRXJyb3JNZXNzYWdlKShpLCJvYmplY3QiKX0scGFyYW1zOmk9Pntjb25zdHtwYXJhbXM6aH09aTtyZXR1cm4gaC5wcm9wRXJyb3I/aC5wcm9wRXJyb3I9PT1sLkFkZGl0aW9uYWw/KDAsbi5fKWB7ZXJyb3I6ICR7aC5wcm9wRXJyb3J9LCBhZGRpdGlvbmFsUHJvcGVydHk6ICR7aC5hZGRpdGlvbmFsUHJvcGVydHl9fWA6KDAsbi5fKWB7ZXJyb3I6ICR7aC5wcm9wRXJyb3J9LCBtaXNzaW5nUHJvcGVydHk6ICR7aC5taXNzaW5nUHJvcGVydHl9fWA6KDAsby50eXBlRXJyb3JQYXJhbXMpKGksIm9iamVjdCIpfX07Y29uc3QgZj17a2V5d29yZDoicHJvcGVydGllcyIsc2NoZW1hVHlwZToib2JqZWN0IixlcnJvcjplLmVycm9yLGNvZGU6cH07ZnVuY3Rpb24gcChpKXsoMCxzLmNoZWNrTWV0YWRhdGEpKGkpO2NvbnN0e2dlbjpoLGRhdGE6RSxwYXJlbnRTY2hlbWE6VCxpdDpJfT1pLHthZGRpdGlvbmFsUHJvcGVydGllczpqLG51bGxhYmxlOnl9PVQ7aWYoSS5qdGREaXNjcmltaW5hdG9yJiZ5KXRocm93IG5ldyBFcnJvcigiSlREOiBudWxsYWJsZSBpbnNpZGUgZGlzY3JpbWluYXRvciBtYXBwaW5nIik7aWYoTigpKXRocm93IG5ldyBFcnJvcigiSlREOiBwcm9wZXJ0aWVzIGFuZCBvcHRpb25hbFByb3BlcnRpZXMgaGF2ZSBjb21tb24gbWVtYmVycyIpO2NvbnN0W18sYl09RCgicHJvcGVydGllcyIpLFtPLEFdPUQoIm9wdGlvbmFsUHJvcGVydGllcyIpO2lmKGIubGVuZ3RoPT09MCYmQS5sZW5ndGg9PT0wJiZqKXJldHVybjtjb25zdFtILCRdPUkuanRkRGlzY3JpbWluYXRvcj09PXZvaWQgMD8oMCxhLmNoZWNrTnVsbGFibGVPYmplY3QpKGksRSk6W2gubGV0KCJ2YWxpZCIsITEpLCEwXTtoLmlmKCQsKCk9PmguYXNzaWduKEgsITApLmJsb2NrKCgpPT57QihiLCJwcm9wZXJ0aWVzIiwhMCksQihBLCJvcHRpb25hbFByb3BlcnRpZXMiKSxqfHxwZSgpfSkpLGkucGFzcyhIKTtmdW5jdGlvbiBOKCl7Y29uc3Qgb2U9VC5wcm9wZXJ0aWVzLFg9VC5vcHRpb25hbFByb3BlcnRpZXM7aWYoIShvZSYmWCkpcmV0dXJuITE7Zm9yKGNvbnN0IHZlIGluIG9lKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYLHZlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBEKG9lKXtjb25zdCBYPVRbb2VdLHZlPVg/KDAsdC5hbGxTY2hlbWFQcm9wZXJ0aWVzKShYKTpbXTtpZihJLmp0ZERpc2NyaW1pbmF0b3ImJnZlLnNvbWUoTmU9Pk5lPT09SS5qdGREaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEpURDogZGlzY3JpbWluYXRvciB0YWcgdXNlZCBpbiAke29lfWApO2NvbnN0IEVlPXZlLmZpbHRlcihOZT0+ISgwLHIuYWx3YXlzVmFsaWRTY2hlbWEpKEksWFtOZV0pKTtyZXR1cm5bdmUsRWVdfWZ1bmN0aW9uIEIob2UsWCx2ZSl7Y29uc3QgRWU9aC52YXIoInZhbGlkIik7Zm9yKGNvbnN0IEJlIG9mIG9lKWguaWYoKDAsdC5wcm9wZXJ0eUluRGF0YSkoaCxFLEJlLEkub3B0cy5vd25Qcm9wZXJ0aWVzKSwoKT0+RyhCZSxYLEVlKSwoKT0+TmUoQmUpKSxpLm9rKEVlKTtmdW5jdGlvbiBOZShCZSl7dmU/KGguYXNzaWduKEVlLCExKSxpLmVycm9yKCExLHtwcm9wRXJyb3I6bC5NaXNzaW5nLG1pc3NpbmdQcm9wZXJ0eTpCZX0se3NjaGVtYVBhdGg6QmV9KSk6aC5hc3NpZ24oRWUsITApfX1mdW5jdGlvbiBHKG9lLFgsdmUpe2kuc3Vic2NoZW1hKHtrZXl3b3JkOlgsc2NoZW1hUHJvcDpvZSxkYXRhUHJvcDpvZX0sdmUpfWZ1bmN0aW9uIHBlKCl7aC5mb3JJbigia2V5IixFLG9lPT57Y29uc3QgWD1JLmp0ZERpc2NyaW1pbmF0b3I9PT12b2lkIDA/XzpbSS5qdGREaXNjcmltaW5hdG9yXS5jb25jYXQoXyksdmU9VyhvZSxYLCJwcm9wZXJ0aWVzIiksRWU9VyhvZSxPLCJvcHRpb25hbFByb3BlcnRpZXMiKSxOZT12ZT09PSEwP0VlOkVlPT09ITA/dmU6KDAsbi5hbmQpKHZlLEVlKTtoLmlmKE5lLCgpPT57SS5vcHRzLnJlbW92ZUFkZGl0aW9uYWw/aC5jb2RlKCgwLG4uXylgZGVsZXRlICR7RX1bJHtvZX1dYCk6KGkuZXJyb3IoITEse3Byb3BFcnJvcjpsLkFkZGl0aW9uYWwsYWRkaXRpb25hbFByb3BlcnR5Om9lfSx7aW5zdGFuY2VQYXRoOm9lLHBhcmVudFNjaGVtYTohMH0pLEkub3B0cy5hbGxFcnJvcnN8fGguYnJlYWsoKSl9KX0pfWZ1bmN0aW9uIFcob2UsWCx2ZSl7bGV0IEVlO2lmKFgubGVuZ3RoPjgpe2NvbnN0IE5lPSgwLHIuc2NoZW1hUmVmT3JWYWwpKEksVFt2ZV0sdmUpO0VlPSgwLG4ubm90KSgoMCx0LmlzT3duUHJvcGVydHkpKGgsTmUsb2UpKX1lbHNlIFgubGVuZ3RoP0VlPSgwLG4uYW5kKSguLi5YLm1hcChOZT0+KDAsbi5fKWAke29lfSAhPT0gJHtOZX1gKSk6RWU9ITA7cmV0dXJuIEVlfX1lLnZhbGlkYXRlUHJvcGVydGllcz1wLGUuZGVmYXVsdD1mfSkob3MpO3ZhciBpcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IEdhPW9zLGZsPXtrZXl3b3JkOiJvcHRpb25hbFByb3BlcnRpZXMiLHNjaGVtYVR5cGU6Im9iamVjdCIsZXJyb3I6R2EuZXJyb3IsY29kZShlKXtlLnBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzfHwoMCxHYS52YWxpZGF0ZVByb3BlcnRpZXMpKGUpfX07aXMuZGVmYXVsdD1mbDt2YXIgY3M9e30sUWE9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkRpc2NyRXJyb3I9dm9pZCAwLGZ1bmN0aW9uKHQpe3QuVGFnPSJ0YWciLHQuTWFwcGluZz0ibWFwcGluZyJ9KGUuRGlzY3JFcnJvcnx8KGUuRGlzY3JFcnJvcj17fSkpfSkoUWEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgTHQ9dWUsZGw9VmUsaGw9eGUsWWE9emUsbW49UWEscGw9e2tleXdvcmQ6ImRpc2NyaW1pbmF0b3IiLHNjaGVtYVR5cGU6InN0cmluZyIsaW1wbGVtZW50czpbIm1hcHBpbmciXSxlcnJvcjp7bWVzc2FnZTplPT57Y29uc3R7c2NoZW1hOnQscGFyYW1zOnJ9PWU7cmV0dXJuIHIuZGlzY3JFcnJvcj9yLmRpc2NyRXJyb3I9PT1tbi5EaXNjckVycm9yLlRhZz9gdGFnICIke3R9IiBtdXN0IGJlIHN0cmluZ2A6YHZhbHVlIG9mIHRhZyAiJHt0fSIgbXVzdCBiZSBpbiBtYXBwaW5nYDooMCxZYS50eXBlRXJyb3JNZXNzYWdlKShlLCJvYmplY3QiKX0scGFyYW1zOmU9Pntjb25zdHtzY2hlbWE6dCxwYXJhbXM6cn09ZTtyZXR1cm4gci5kaXNjckVycm9yPygwLEx0Ll8pYHtlcnJvcjogJHtyLmRpc2NyRXJyb3J9LCB0YWc6ICR7dH0sIHRhZ1ZhbHVlOiAke3IudGFnfX1gOigwLFlhLnR5cGVFcnJvclBhcmFtcykoZSwib2JqZWN0Iil9fSxjb2RlKGUpeygwLGRsLmNoZWNrTWV0YWRhdGEpKGUpO2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bixwYXJlbnRTY2hlbWE6c309ZSxbYSxvXT0oMCxobC5jaGVja051bGxhYmxlT2JqZWN0KShlLHIpO3QuaWYobyksbCgpLHQuZWxzZUlmKCgwLEx0Lm5vdCkoYSkpLGUuZXJyb3IoKSx0LmVuZElmKCksZS5vayhhKTtmdW5jdGlvbiBsKCl7Y29uc3QgaT10LmNvbnN0KCJ0YWciLCgwLEx0Ll8pYCR7cn0keygwLEx0LmdldFByb3BlcnR5KShuKX1gKTt0LmlmKCgwLEx0Ll8pYCR7aX0gPT09IHVuZGVmaW5lZGApLGUuZXJyb3IoITEse2Rpc2NyRXJyb3I6bW4uRGlzY3JFcnJvci5UYWcsdGFnOml9KSx0LmVsc2VJZigoMCxMdC5fKWB0eXBlb2YgJHtpfSA9PSAic3RyaW5nImApLGYoaSksdC5lbHNlKCksZS5lcnJvcighMSx7ZGlzY3JFcnJvcjptbi5EaXNjckVycm9yLlRhZyx0YWc6aX0se2luc3RhbmNlUGF0aDpufSksdC5lbmRJZigpfWZ1bmN0aW9uIGYoaSl7dC5pZighMSk7Zm9yKGNvbnN0IGggaW4gcy5tYXBwaW5nKXQuZWxzZUlmKCgwLEx0Ll8pYCR7aX0gPT09ICR7aH1gKSx0LmFzc2lnbihhLHAoaCkpO3QuZWxzZSgpLGUuZXJyb3IoITEse2Rpc2NyRXJyb3I6bW4uRGlzY3JFcnJvci5NYXBwaW5nLHRhZzppfSx7aW5zdGFuY2VQYXRoOm4sc2NoZW1hUGF0aDoibWFwcGluZyIscGFyZW50U2NoZW1hOiEwfSksdC5lbmRJZigpfWZ1bmN0aW9uIHAoaSl7Y29uc3QgaD10Lm5hbWUoInZhbGlkIik7cmV0dXJuIGUuc3Vic2NoZW1hKHtrZXl3b3JkOiJtYXBwaW5nIixzY2hlbWFQcm9wOmksanRkRGlzY3JpbWluYXRvcjpufSxoKSxofX19O2NzLmRlZmF1bHQ9cGw7dmFyIHVzPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgV2E9YmUsWGE9dWUsbWw9VmUsdmw9eGUsX2w9e2tleXdvcmQ6InZhbHVlcyIsc2NoZW1hVHlwZToib2JqZWN0IixlcnJvcjooMCx6ZS50eXBlRXJyb3IpKCJvYmplY3QiKSxjb2RlKGUpeygwLG1sLmNoZWNrTWV0YWRhdGEpKGUpO2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bixpdDpzfT1lO2lmKCgwLFdhLmFsd2F5c1ZhbGlkU2NoZW1hKShzLG4pKXJldHVybjtjb25zdFthLG9dPSgwLHZsLmNoZWNrTnVsbGFibGVPYmplY3QpKGUscik7dC5pZihvKSx0LmFzc2lnbihhLGwoKSksdC5lbHNlSWYoKDAsWGEubm90KShhKSksZS5lcnJvcigpLHQuZW5kSWYoKSxlLm9rKGEpO2Z1bmN0aW9uIGwoKXtjb25zdCBmPXQubmFtZSgidmFsaWQiKTtpZihzLmFsbEVycm9ycyl7Y29uc3QgaT10LmxldCgidmFsaWQiLCEwKTtyZXR1cm4gcCgoKT0+dC5hc3NpZ24oaSwhMSkpLGl9cmV0dXJuIHQudmFyKGYsITApLHAoKCk9PnQuYnJlYWsoKSksZjtmdW5jdGlvbiBwKGkpe3QuZm9ySW4oImtleSIscixoPT57ZS5zdWJzY2hlbWEoe2tleXdvcmQ6InZhbHVlcyIsZGF0YVByb3A6aCxkYXRhUHJvcFR5cGU6V2EuVHlwZS5TdHJ9LGYpLHQuaWYoKDAsWGEubm90KShmKSxpKX0pfX19fTt1cy5kZWZhdWx0PV9sO3ZhciBscz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IGdsPXtrZXl3b3JkOiJ1bmlvbiIsc2NoZW1hVHlwZToiYXJyYXkiLHRyYWNrRXJyb3JzOiEwLGNvZGU6bmUudmFsaWRhdGVVbmlvbixlcnJvcjp7bWVzc2FnZToibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiB1bmlvbiJ9fTtscy5kZWZhdWx0PWdsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgRWw9RnQseWw9bnMsJGw9c3Msd2w9YXMsU2w9b3MsUmw9aXMsYmw9Y3MsT2w9dXMsTmw9bHMsUGw9VmUsVGw9WyJkZWZpbml0aW9ucyIsRWwuZGVmYXVsdCx5bC5kZWZhdWx0LCRsLmRlZmF1bHQsd2wuZGVmYXVsdCxTbC5kZWZhdWx0LFJsLmRlZmF1bHQsYmwuZGVmYXVsdCxPbC5kZWZhdWx0LE5sLmRlZmF1bHQsUGwuZGVmYXVsdCx7a2V5d29yZDoiYWRkaXRpb25hbFByb3BlcnRpZXMiLHNjaGVtYVR5cGU6ImJvb2xlYW4ifSx7a2V5d29yZDoibnVsbGFibGUiLHNjaGVtYVR5cGU6ImJvb2xlYW4ifV07dHMuZGVmYXVsdD1UbDt2YXIgZnM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBkdD1lPT57Y29uc3QgdD17bnVsbGFibGU6e3R5cGU6ImJvb2xlYW4ifSxtZXRhZGF0YTp7b3B0aW9uYWxQcm9wZXJ0aWVzOnt1bmlvbjp7ZWxlbWVudHM6e3JlZjoic2NoZW1hIn19fSxhZGRpdGlvbmFsUHJvcGVydGllczohMH19O3JldHVybiBlJiYodC5kZWZpbml0aW9ucz17dmFsdWVzOntyZWY6InNjaGVtYSJ9fSksdH0sQWw9ZT0+KHtvcHRpb25hbFByb3BlcnRpZXM6ZHQoZSl9KSxDbD1lPT4oe3Byb3BlcnRpZXM6e3JlZjp7dHlwZToic3RyaW5nIn19LG9wdGlvbmFsUHJvcGVydGllczpkdChlKX0pLElsPWU9Pih7cHJvcGVydGllczp7dHlwZTp7ZW51bTpbImJvb2xlYW4iLCJ0aW1lc3RhbXAiLCJzdHJpbmciLCJmbG9hdDMyIiwiZmxvYXQ2NCIsImludDgiLCJ1aW50OCIsImludDE2IiwidWludDE2IiwiaW50MzIiLCJ1aW50MzIiXX19LG9wdGlvbmFsUHJvcGVydGllczpkdChlKX0pLERsPWU9Pih7cHJvcGVydGllczp7ZW51bTp7ZWxlbWVudHM6e3R5cGU6InN0cmluZyJ9fX0sb3B0aW9uYWxQcm9wZXJ0aWVzOmR0KGUpfSksamw9ZT0+KHtwcm9wZXJ0aWVzOntlbGVtZW50czp7cmVmOiJzY2hlbWEifX0sb3B0aW9uYWxQcm9wZXJ0aWVzOmR0KGUpfSksWmE9ZT0+KHtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt2YWx1ZXM6e3JlZjoic2NoZW1hIn19fSxvcHRpb25hbFByb3BlcnRpZXM6USh7b3B0aW9uYWxQcm9wZXJ0aWVzOnt2YWx1ZXM6e3JlZjoic2NoZW1hIn19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnt0eXBlOiJib29sZWFuIn19LGR0KGUpKX0pLHhhPWU9Pih7cHJvcGVydGllczp7b3B0aW9uYWxQcm9wZXJ0aWVzOnt2YWx1ZXM6e3JlZjoic2NoZW1hIn19fSxvcHRpb25hbFByb3BlcnRpZXM6USh7YWRkaXRpb25hbFByb3BlcnRpZXM6e3R5cGU6ImJvb2xlYW4ifX0sZHQoZSkpfSksa2w9ZT0+KHtwcm9wZXJ0aWVzOntkaXNjcmltaW5hdG9yOnt0eXBlOiJzdHJpbmcifSxtYXBwaW5nOnt2YWx1ZXM6e21ldGFkYXRhOnt1bmlvbjpbWmEoITEpLHhhKCExKV19fX19LG9wdGlvbmFsUHJvcGVydGllczpkdChlKX0pLFVsPWU9Pih7cHJvcGVydGllczp7dmFsdWVzOntyZWY6InNjaGVtYSJ9fSxvcHRpb25hbFByb3BlcnRpZXM6ZHQoZSl9KSxlbz1lPT4oe21ldGFkYXRhOnt1bmlvbjpbQWwsQ2wsSWwsRGwsamwsWmEseGEsa2wsVWxdLm1hcCh0PT50KGUpKX19KSxGbD1RKHtkZWZpbml0aW9uczp7c2NoZW1hOmVvKCExKX19LGVvKCEwKSk7ZnMuZGVmYXVsdD1GbDt2YXIgZHM9e30sUnI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFJyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxSci5qdGRGb3Jtcz12b2lkIDAsUnIuanRkRm9ybXM9WyJlbGVtZW50cyIsInZhbHVlcyIsImRpc2NyaW1pbmF0b3IiLCJwcm9wZXJ0aWVzIiwib3B0aW9uYWxQcm9wZXJ0aWVzIiwiZW51bSIsInR5cGUiLCJyZWYiXTt2YXIgaHM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGhzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBwcz0vW1xcIlx1MDAwMC1cdTAwMWZcdTAwN2YtXHUwMDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csTWw9eyJcYiI6IlxcYiIsIgkiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn07ZnVuY3Rpb24gdG8oZSl7cmV0dXJuIHBzLmxhc3RJbmRleD0wLCciJysocHMudGVzdChlKT9lLnJlcGxhY2UocHMsdD0+e2NvbnN0IHI9TWxbdF07cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIj9yOiJcXHUiKygiMDAwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSk6ZSkrJyInfWhzLmRlZmF1bHQ9dG8sdG8uY29kZT0ncmVxdWlyZSgiYWp2L2Rpc3QvcnVudGltZS9xdW90ZSIpLmRlZmF1bHQnLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgTGw9UnIscm89Q2UsdGU9dWUsVmw9a3QsaGU9TGUsemw9bmUsSGw9RnQsS2w9YmUsQmw9aHMsSmw9e2VsZW1lbnRzOkdsLHZhbHVlczpRbCxkaXNjcmltaW5hdG9yOllsLHByb3BlcnRpZXM6YW8sb3B0aW9uYWxQcm9wZXJ0aWVzOmFvLGVudW06T3IsdHlwZTpXbCxyZWY6Wmx9O2Z1bmN0aW9uIG5vKGUsdCl7Y29uc3Qgcj1yby5nZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLGUpO2lmKHIpcmV0dXJuIHI7Y29uc3R7ZXM1Om4sbGluZXM6c309dGhpcy5vcHRzLmNvZGUse293blByb3BlcnRpZXM6YX09dGhpcy5vcHRzLG89bmV3IHRlLkNvZGVHZW4odGhpcy5zY29wZSx7ZXM1Om4sbGluZXM6cyxvd25Qcm9wZXJ0aWVzOmF9KSxsPW8uc2NvcGVOYW1lKCJzZXJpYWxpemUiKSxmPXtzZWxmOnRoaXMsZ2VuOm8sc2NoZW1hOmUuc2NoZW1hLHNjaGVtYUVudjplLGRlZmluaXRpb25zOnQsZGF0YTpoZS5kZWZhdWx0LmRhdGF9O2xldCBwO3RyeXt0aGlzLl9jb21waWxhdGlvbnMuYWRkKGUpLGUuc2VyaWFsaXplTmFtZT1sLG8uZnVuYyhsLGhlLmRlZmF1bHQuZGF0YSwhMSwoKT0+e28ubGV0KGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYGApLGJyKGYpLG8ucmV0dXJuKGhlLmRlZmF1bHQuanNvbil9KSxvLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtjb25zdCBpPW8udG9TdHJpbmcoKTtwPWAke28uc2NvcGVSZWZzKGhlLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke2l9YDtjb25zdCBFPW5ldyBGdW5jdGlvbihgJHtoZS5kZWZhdWx0LnNjb3BlfWAscCkodGhpcy5zY29wZS5nZXQoKSk7dGhpcy5zY29wZS52YWx1ZShsLHtyZWY6RX0pLGUuc2VyaWFsaXplPUV9Y2F0Y2goaSl7dGhyb3cgcCYmdGhpcy5sb2dnZXIuZXJyb3IoIkVycm9yIGNvbXBpbGluZyBzZXJpYWxpemVyLCBmdW5jdGlvbiBjb2RlOiIscCksZGVsZXRlIGUuc2VyaWFsaXplLGRlbGV0ZSBlLnNlcmlhbGl6ZU5hbWUsaX1maW5hbGx5e3RoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoZSl9cmV0dXJuIGV9ZHMuZGVmYXVsdD1ubztmdW5jdGlvbiBicihlKXtsZXQgdDtmb3IoY29uc3QgciBvZiBMbC5qdGRGb3JtcylpZihyIGluIGUuc2NoZW1hKXt0PXI7YnJlYWt9cWwoZSx0P0psW3RdOmVmKX1mdW5jdGlvbiBxbChlLHQpe2NvbnN0e2dlbjpyLHNjaGVtYTpuLGRhdGE6c309ZTtpZighbi5udWxsYWJsZSlyZXR1cm4gdChlKTtyLmlmKCgwLHRlLl8pYCR7c30gPT09IHVuZGVmaW5lZCB8fCAke3N9ID09PSBudWxsYCwoKT0+ci5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLl8pYCJudWxsImApLCgpPT50KGUpKX1mdW5jdGlvbiBHbChlKXtjb25zdHtnZW46dCxzY2hlbWE6cixkYXRhOm59PWU7dC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLnN0cilgW2ApO2NvbnN0IHM9dC5sZXQoImZpcnN0IiwhMCk7dC5mb3JPZigiZWwiLG4sYT0+e2lvKGUscyksYnIobGUoUSh7fSxlKSx7c2NoZW1hOnIuZWxlbWVudHMsZGF0YTphfSkpfSksdC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLnN0cilgXWApfWZ1bmN0aW9uIFFsKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZTt0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWB7YCk7Y29uc3Qgcz10LmxldCgiZmlyc3QiLCEwKTt0LmZvckluKCJrZXkiLG4sYT0+c28oZSxhLHIudmFsdWVzLHMpKSx0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWB9YCl9ZnVuY3Rpb24gc28oZSx0LHIsbil7Y29uc3R7Z2VuOnMsZGF0YTphfT1lO2lvKGUsbiksT3IobGUoUSh7fSxlKSx7ZGF0YTp0fSkpLHMuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYDpgKTtjb25zdCBvPXMuY29uc3QoInZhbHVlIiwoMCx0ZS5fKWAke2F9JHsoMCx0ZS5nZXRQcm9wZXJ0eSkodCl9YCk7YnIobGUoUSh7fSxlKSx7c2NoZW1hOnIsZGF0YTpvfSkpfWZ1bmN0aW9uIFlsKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZSx7ZGlzY3JpbWluYXRvcjpzfT1yO3QuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYHske0pTT04uc3RyaW5naWZ5KHMpfTpgKTtjb25zdCBhPXQuY29uc3QoInRhZyIsKDAsdGUuXylgJHtufSR7KDAsdGUuZ2V0UHJvcGVydHkpKHMpfWApO09yKGxlKFEoe30sZSkse2RhdGE6YX0pKSx0LmlmKCExKTtmb3IoY29uc3QgbyBpbiByLm1hcHBpbmcpe3QuZWxzZUlmKCgwLHRlLl8pYCR7YX0gPT09ICR7b31gKTtjb25zdCBsPXIubWFwcGluZ1tvXTtvbyhsZShRKHt9LGUpLHtzY2hlbWE6bH0pLHMpfXQuZW5kSWYoKSx0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWB9YCl9ZnVuY3Rpb24gYW8oZSl7Y29uc3R7Z2VuOnR9PWU7dC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLnN0cilge2ApLG9vKGUpLHQuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYH1gKX1mdW5jdGlvbiBvbyhlLHQpe2NvbnN0e2dlbjpyLHNjaGVtYTpuLGRhdGE6c309ZSx7cHJvcGVydGllczphLG9wdGlvbmFsUHJvcGVydGllczpvfT1uLGw9aChhKSxmPWgobykscD1FKGwuY29uY2F0KGYpKTtsZXQgaT0hdDtmb3IoY29uc3QgeSBvZiBsKUkoeSxhW3ldLFQoeSkpO2Zvcihjb25zdCB5IG9mIGYpe2NvbnN0IF89VCh5KTtyLmlmKCgwLHRlLmFuZCkoKDAsdGUuXylgJHtffSAhPT0gdW5kZWZpbmVkYCwoMCx6bC5pc093blByb3BlcnR5KShyLHMseSkpLCgpPT5JKHksb1t5XSxfKSl9bi5hZGRpdGlvbmFsUHJvcGVydGllcyYmci5mb3JJbigia2V5IixzLHk9PnIuaWYoaih5LHApLCgpPT5zbyhlLHkse30sci5sZXQoImZpcnN0IixpKSkpKTtmdW5jdGlvbiBoKHkpe3JldHVybiB5P09iamVjdC5rZXlzKHkpOltdfWZ1bmN0aW9uIEUoeSl7aWYodCYmeS5wdXNoKHQpLG5ldyBTZXQoeSkuc2l6ZSE9PXkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSlREOiBwcm9wZXJ0aWVzL29wdGlvbmFsUHJvcGVydGllcy9kaXNjaW1pbmF0b3Igb3ZlcmxhcCIpO3JldHVybiB5fWZ1bmN0aW9uIFQoeSl7cmV0dXJuIHIuY29uc3QoInZhbHVlIiwoMCx0ZS5fKWAke3N9JHsoMCx0ZS5nZXRQcm9wZXJ0eSkoeSl9YCl9ZnVuY3Rpb24gSSh5LF8sYil7aT9pPSExOnIuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYCxgKSxyLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWAke0pTT04uc3RyaW5naWZ5KHkpfTpgKSxicihsZShRKHt9LGUpLHtzY2hlbWE6XyxkYXRhOmJ9KSl9ZnVuY3Rpb24gaih5LF8pe3JldHVybiBfLmxlbmd0aD8oMCx0ZS5hbmQpKC4uLl8ubWFwKGI9PigwLHRlLl8pYCR7eX0gIT09ICR7Yn1gKSk6ITB9fWZ1bmN0aW9uIFdsKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZTtzd2l0Y2goci50eXBlKXtjYXNlImJvb2xlYW4iOnQuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5fKWAke259ID8gInRydWUiIDogImZhbHNlImApO2JyZWFrO2Nhc2Uic3RyaW5nIjpPcihlKTticmVhaztjYXNlInRpbWVzdGFtcCI6dC5pZigoMCx0ZS5fKWAke259IGluc3RhbmNlb2YgRGF0ZWAsKCk9PnQuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5fKWAnIicgKyAke259LnRvSVNPU3RyaW5nKCkgKyAnIidgKSwoKT0+T3IoZSkpO2JyZWFrO2RlZmF1bHQ6WGwoZSl9fWZ1bmN0aW9uIE9yKHtnZW46ZSxkYXRhOnR9KXtlLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuXylgJHsoMCxLbC51c2VGdW5jKShlLEJsLmRlZmF1bHQpfSgke3R9KWApfWZ1bmN0aW9uIFhsKHtnZW46ZSxkYXRhOnR9KXtlLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuXylgIiIgKyAke3R9YCl9ZnVuY3Rpb24gWmwoZSl7Y29uc3R7Z2VuOnQsc2VsZjpyLGRhdGE6bixkZWZpbml0aW9uczpzLHNjaGVtYTphLHNjaGVtYUVudjpvfT1lLHtyZWY6bH09YSxmPXNbbF07aWYoIWYpdGhyb3cgbmV3IFZsLmRlZmF1bHQoci5vcHRzLnVyaVJlc29sdmVyLCIiLGwsYE5vIGRlZmluaXRpb24gJHtsfWApO2lmKCEoMCxIbC5oYXNSZWYpKGYpKXJldHVybiBicihsZShRKHt9LGUpLHtzY2hlbWE6Zn0pKTtjb25zdHtyb290OnB9PW8saT1uby5jYWxsKHIsbmV3IHJvLlNjaGVtYUVudih7c2NoZW1hOmYscm9vdDpwfSkscyk7dC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLl8pYCR7eGwodCxpKX0oJHtufSlgKX1mdW5jdGlvbiB4bChlLHQpe3JldHVybiB0LnNlcmlhbGl6ZT9lLnNjb3BlVmFsdWUoInNlcmlhbGl6ZSIse3JlZjp0LnNlcmlhbGl6ZX0pOigwLHRlLl8pYCR7ZS5zY29wZVZhbHVlKCJ3cmFwcGVyIix7cmVmOnR9KX0uc2VyaWFsaXplYH1mdW5jdGlvbiBlZih7Z2VuOmUsZGF0YTp0fSl7ZS5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLl8pYEpTT04uc3RyaW5naWZ5KCR7dH0pYCl9ZnVuY3Rpb24gaW8oe2dlbjplfSx0KXtlLmlmKHQsKCk9PmUuYXNzaWduKHQsITEpLCgpPT5lLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWAsYCkpfXZhciBtcz17fSxTdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFN0LnBhcnNlSnNvblN0cmluZz1TdC5wYXJzZUpzb25OdW1iZXI9U3QucGFyc2VKc29uPXZvaWQgMDtjb25zdCB0Zj0vcG9zaXRpb25ccyhcZCspJC87ZnVuY3Rpb24gaHQoZSx0KXtsZXQgcjtodC5tZXNzYWdlPXZvaWQgMDtsZXQgbjt0JiYoZT1lLnNsaWNlKHQpKTt0cnl7cmV0dXJuIGh0LnBvc2l0aW9uPXQrZS5sZW5ndGgsSlNPTi5wYXJzZShlKX1jYXRjaChzKXtpZihuPXRmLmV4ZWMocy5tZXNzYWdlKSwhbil7aHQubWVzc2FnZT0idW5leHBlY3RlZCBlbmQiO3JldHVybn1yPStuWzFdO2NvbnN0IGE9ZVtyXTtlPWUuc2xpY2UoMCxyKSxodC5wb3NpdGlvbj10K3I7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe2h0Lm1lc3NhZ2U9YHVuZXhwZWN0ZWQgdG9rZW4gJHthfWA7cmV0dXJufX19U3QucGFyc2VKc29uPWh0LGh0Lm1lc3NhZ2U9dm9pZCAwLGh0LnBvc2l0aW9uPTAsaHQuY29kZT0ncmVxdWlyZSgiYWp2L2Rpc3QvcnVudGltZS9wYXJzZUpzb24iKS5wYXJzZUpzb24nO2Z1bmN0aW9uIHB0KGUsdCxyKXtsZXQgbj0iIixzO2lmKHB0Lm1lc3NhZ2U9dm9pZCAwLGVbdF09PT0iLSImJihuKz0iLSIsdCsrKSxlW3RdPT09IjAiKW4rPSIwIix0Kys7ZWxzZSBpZighYShyKSl7bygpO3JldHVybn1pZihyKXJldHVybiBwdC5wb3NpdGlvbj10LCtuO2lmKGVbdF09PT0iLiImJihuKz0iLiIsdCsrLCFhKCkpKXtvKCk7cmV0dXJufWlmKHM9ZVt0XSwocz09PSJlInx8cz09PSJFIikmJihuKz0iZSIsdCsrLHM9ZVt0XSwocz09PSIrInx8cz09PSItIikmJihuKz1zLHQrKyksIWEoKSkpe28oKTtyZXR1cm59cmV0dXJuIHB0LnBvc2l0aW9uPXQsK247ZnVuY3Rpb24gYShsKXtsZXQgZj0hMTtmb3IoO3M9ZVt0XSxzPj0iMCImJnM8PSI5IiYmKGw9PT12b2lkIDB8fGwtLSA+MCk7KWY9ITAsbis9cyx0Kys7cmV0dXJuIGZ9ZnVuY3Rpb24gbygpe3B0LnBvc2l0aW9uPXQscHQubWVzc2FnZT10PGUubGVuZ3RoP2B1bmV4cGVjdGVkIHRva2VuICR7ZVt0XX1gOiJ1bmV4cGVjdGVkIGVuZCJ9fVN0LnBhcnNlSnNvbk51bWJlcj1wdCxwdC5tZXNzYWdlPXZvaWQgMCxwdC5wb3NpdGlvbj0wLHB0LmNvZGU9J3JlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvcGFyc2VKc29uIikucGFyc2VKc29uTnVtYmVyJztjb25zdCBjbz17YjoiXGIiLGY6IlxmIixuOmAKYCxyOiJcciIsdDoiCSIsJyInOiciJywiLyI6Ii8iLCJcXCI6IlxcIn0scmY9ImEiLmNoYXJDb2RlQXQoMCksbmY9IjAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gUnQoZSx0KXtsZXQgcj0iIixuO2ZvcihSdC5tZXNzYWdlPXZvaWQgMDtuPWVbdCsrXSxuIT09JyInOylpZihuPT09IlxcIilpZihuPWVbdF0sbiBpbiBjbylyKz1jb1tuXSx0Kys7ZWxzZSBpZihuPT09InUiKXt0Kys7bGV0IGE9NCxvPTA7Zm9yKDthLS07KXtpZihvPDw9NCxuPWVbdF0sbj09PXZvaWQgMCl7cygidW5leHBlY3RlZCBlbmQiKTtyZXR1cm59aWYobj1uLnRvTG93ZXJDYXNlKCksbj49ImEiJiZuPD0iZiIpbys9bi5jaGFyQ29kZUF0KDApLXJmKzEwO2Vsc2UgaWYobj49IjAiJiZuPD0iOSIpbys9bi5jaGFyQ29kZUF0KDApLW5mO2Vsc2V7cyhgdW5leHBlY3RlZCB0b2tlbiAke259YCk7cmV0dXJufXQrK31yKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pfWVsc2V7cyhgdW5leHBlY3RlZCB0b2tlbiAke259YCk7cmV0dXJufWVsc2UgaWYobj09PXZvaWQgMCl7cygidW5leHBlY3RlZCBlbmQiKTtyZXR1cm59ZWxzZSBpZihuLmNoYXJDb2RlQXQoMCk+PTMyKXIrPW47ZWxzZXtzKGB1bmV4cGVjdGVkIHRva2VuICR7bn1gKTtyZXR1cm59cmV0dXJuIFJ0LnBvc2l0aW9uPXQscjtmdW5jdGlvbiBzKGEpe1J0LnBvc2l0aW9uPXQsUnQubWVzc2FnZT1hfX1TdC5wYXJzZUpzb25TdHJpbmc9UnQsUnQubWVzc2FnZT12b2lkIDAsUnQucG9zaXRpb249MCxSdC5jb2RlPSdyZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3BhcnNlSnNvbiIpLnBhcnNlSnNvblN0cmluZycsT2JqZWN0LmRlZmluZVByb3BlcnR5KG1zLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzZj1Scix1bz1DZSxMPXVlLGFmPWt0LFk9TGUsb2Y9bmUsY2Y9RnQsdWY9bnMsdnM9U3QsbG89YmUsbGY9aG4sZmY9e2VsZW1lbnRzOm1mLHZhbHVlczp2ZixkaXNjcmltaW5hdG9yOmdmLHByb3BlcnRpZXM6cG8sb3B0aW9uYWxQcm9wZXJ0aWVzOnBvLGVudW06eWYsdHlwZTpFZixyZWY6JGZ9O2Z1bmN0aW9uIGZvKGUsdCl7Y29uc3Qgcj11by5nZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLGUpO2lmKHIpcmV0dXJuIHI7Y29uc3R7ZXM1Om4sbGluZXM6c309dGhpcy5vcHRzLmNvZGUse293blByb3BlcnRpZXM6YX09dGhpcy5vcHRzLG89bmV3IEwuQ29kZUdlbih0aGlzLnNjb3BlLHtlczU6bixsaW5lczpzLG93blByb3BlcnRpZXM6YX0pLGw9by5zY29wZU5hbWUoInBhcnNlIiksZj17c2VsZjp0aGlzLGdlbjpvLHNjaGVtYTplLnNjaGVtYSxzY2hlbWFFbnY6ZSxkZWZpbml0aW9uczp0LGRhdGE6WS5kZWZhdWx0LmRhdGEscGFyc2VOYW1lOmwsY2hhcjpvLm5hbWUoImMiKX07bGV0IHA7dHJ5e3RoaXMuX2NvbXBpbGF0aW9ucy5hZGQoZSksZS5wYXJzZU5hbWU9bCxkZihmKSxvLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtjb25zdCBpPW8udG9TdHJpbmcoKTtwPWAke28uc2NvcGVSZWZzKFkuZGVmYXVsdC5zY29wZSl9cmV0dXJuICR7aX1gO2NvbnN0IEU9bmV3IEZ1bmN0aW9uKGAke1kuZGVmYXVsdC5zY29wZX1gLHApKHRoaXMuc2NvcGUuZ2V0KCkpO3RoaXMuc2NvcGUudmFsdWUobCx7cmVmOkV9KSxlLnBhcnNlPUV9Y2F0Y2goaSl7dGhyb3cgcCYmdGhpcy5sb2dnZXIuZXJyb3IoIkVycm9yIGNvbXBpbGluZyBwYXJzZXIsIGZ1bmN0aW9uIGNvZGU6IixwKSxkZWxldGUgZS5wYXJzZSxkZWxldGUgZS5wYXJzZU5hbWUsaX1maW5hbGx5e3RoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoZSl9cmV0dXJuIGV9bXMuZGVmYXVsdD1mbztjb25zdCBfcz0oMCxMLl8pYHVuZGVmaW5lZGA7ZnVuY3Rpb24gZGYoZSl7Y29uc3R7Z2VuOnQscGFyc2VOYW1lOnIsY2hhcjpufT1lO3QuZnVuYyhyLCgwLEwuXylgJHtZLmRlZmF1bHQuanNvbn0sICR7WS5kZWZhdWx0Lmpzb25Qb3N9LCAke1kuZGVmYXVsdC5qc29uUGFydH1gLCExLCgpPT57dC5sZXQoWS5kZWZhdWx0LmRhdGEpLHQubGV0KG4pLHQuYXNzaWduKCgwLEwuXylgJHtyfS5tZXNzYWdlYCxfcyksdC5hc3NpZ24oKDAsTC5fKWAke3J9LnBvc2l0aW9uYCxfcyksdC5hc3NpZ24oWS5kZWZhdWx0Lmpzb25Qb3MsKDAsTC5fKWAke1kuZGVmYXVsdC5qc29uUG9zfSB8fCAwYCksdC5jb25zdChZLmRlZmF1bHQuanNvbkxlbiwoMCxMLl8pYCR7WS5kZWZhdWx0Lmpzb259Lmxlbmd0aGApLHZuKGUpLHdzKGUpLHQuaWYoWS5kZWZhdWx0Lmpzb25QYXJ0LCgpPT57dC5hc3NpZ24oKDAsTC5fKWAke3J9LnBvc2l0aW9uYCxZLmRlZmF1bHQuanNvblBvcyksdC5yZXR1cm4oWS5kZWZhdWx0LmRhdGEpfSksdC5pZigoMCxMLl8pYCR7WS5kZWZhdWx0Lmpzb25Qb3N9ID09PSAke1kuZGVmYXVsdC5qc29uTGVufWAsKCk9PnQucmV0dXJuKFkuZGVmYXVsdC5kYXRhKSksYXIoZSl9KX1mdW5jdGlvbiB2bihlKXtsZXQgdDtmb3IoY29uc3QgciBvZiBzZi5qdGRGb3JtcylpZihyIGluIGUuc2NoZW1hKXt0PXI7YnJlYWt9dD9wZihlLGZmW3RdKTp5cyhlKX1jb25zdCBoZj1nbyghMCxnbyghMSxhcikpO2Z1bmN0aW9uIHBmKGUsdCl7Y29uc3R7Z2VuOnIsc2NoZW1hOm4sZGF0YTpzfT1lO2lmKCFuLm51bGxhYmxlKXJldHVybiB0KGUpO05yKGUsIm51bGwiLHQsKCk9PnIuYXNzaWduKHMsbnVsbCkpfWZ1bmN0aW9uIG1mKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZTtldChlLCJbIik7Y29uc3Qgcz10LmxldCgiaSIsMCk7dC5hc3NpZ24obiwoMCxMLl8pYFtdYCksZ3MoZSwiXSIsKCk9Pntjb25zdCBhPXQubGV0KCJlbCIpO3ZuKGxlKFEoe30sZSkse3NjaGVtYTpyLmVsZW1lbnRzLGRhdGE6YX0pKSx0LmFzc2lnbigoMCxMLl8pYCR7bn1bJHtzfSsrXWAsYSl9KX1mdW5jdGlvbiB2ZihlKXtjb25zdHtnZW46dCxzY2hlbWE6cixkYXRhOm59PWU7ZXQoZSwieyIpLHQuYXNzaWduKG4sKDAsTC5fKWB7fWApLGdzKGUsIn0iLCgpPT5fZihlLHIudmFsdWVzKSl9ZnVuY3Rpb24gZ3MoZSx0LHIpe2hvKGUsdCxyKSxldChlLHQpfWZ1bmN0aW9uIGhvKGUsdCxyKXtjb25zdHtnZW46bn09ZTtuLmZvcigoMCxMLl8pYDske1kuZGVmYXVsdC5qc29uUG9zfTwke1kuZGVmYXVsdC5qc29uTGVufSAmJiAke19uKDEpfSE9PSR7dH07YCwoKT0+e3IoKSxOcihlLCIsIiwoKT0+bi5icmVhaygpLHMpfSk7ZnVuY3Rpb24gcygpe05yKGUsdCwoKT0+e30sYXIpfX1mdW5jdGlvbiBfZihlLHQpe2NvbnN0e2dlbjpyfT1lLG49ci5sZXQoImtleSIpO1Z0KGxlKFEoe30sZSkse2RhdGE6bn0pKSxldChlLCI6IiksX28oZSxuLHQpfWZ1bmN0aW9uIGdmKGUpe2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bn09ZSx7ZGlzY3JpbWluYXRvcjpzLG1hcHBpbmc6YX09bjtldChlLCJ7IiksdC5hc3NpZ24ociwoMCxMLl8pYHt9YCk7Y29uc3Qgbz10LmNvbnN0KCJwb3MiLFkuZGVmYXVsdC5qc29uUG9zKSxsPXQubGV0KCJ2YWx1ZSIpLGY9dC5sZXQoInRhZyIpO2hvKGUsIn0iLCgpPT57Y29uc3QgcD10LmxldCgia2V5Iik7VnQobGUoUSh7fSxlKSx7ZGF0YTpwfSkpLGV0KGUsIjoiKSx0LmlmKCgwLEwuXylgJHtwfSA9PT0gJHtzfWAsKCk9PntWdChsZShRKHt9LGUpLHtkYXRhOmZ9KSksdC5hc3NpZ24oKDAsTC5fKWAke3J9WyR7cH1dYCxmKSx0LmJyZWFrKCl9LCgpPT55cyhsZShRKHt9LGUpLHtkYXRhOmx9KSkpfSksdC5hc3NpZ24oWS5kZWZhdWx0Lmpzb25Qb3MsbyksdC5pZigoMCxMLl8pYCR7Zn0gPT09IHVuZGVmaW5lZGApLG10KGUsKDAsTC5zdHIpYGRpc2NyaW1pbmF0b3IgdGFnIG5vdCBmb3VuZGApO2Zvcihjb25zdCBwIGluIGEpdC5lbHNlSWYoKDAsTC5fKWAke2Z9ID09PSAke3B9YCksbW8obGUoUSh7fSxlKSx7c2NoZW1hOmFbcF19KSxzKTt0LmVsc2UoKSxtdChlLCgwLEwuc3RyKWBkaXNjcmltaW5hdG9yIHZhbHVlIG5vdCBpbiBzY2hlbWFgKSx0LmVuZElmKCl9ZnVuY3Rpb24gcG8oZSl7Y29uc3R7Z2VuOnQsZGF0YTpyfT1lO2V0KGUsInsiKSx0LmFzc2lnbihyLCgwLEwuXylge31gKSxtbyhlKX1mdW5jdGlvbiBtbyhlLHQpe2NvbnN0e2dlbjpyLHNjaGVtYTpuLGRhdGE6c309ZSx7cHJvcGVydGllczphLG9wdGlvbmFsUHJvcGVydGllczpvLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOmx9PW47aWYoZ3MoZSwifSIsKCk9Pntjb25zdCBmPXIubGV0KCJrZXkiKTtpZihWdChsZShRKHt9LGUpLHtkYXRhOmZ9KSksZXQoZSwiOiIpLHIuaWYoITEpLHZvKGUsZixhKSx2byhlLGYsbyksdCl7ci5lbHNlSWYoKDAsTC5fKWAke2Z9ID09PSAke3R9YCk7Y29uc3QgcD1yLmxldCgidGFnIik7VnQobGUoUSh7fSxlKSx7ZGF0YTpwfSkpfXIuZWxzZSgpLGw/eXMobGUoUSh7fSxlKSx7ZGF0YTooMCxMLl8pYCR7c31bJHtmfV1gfSkpOm10KGUsKDAsTC5zdHIpYHByb3BlcnR5ICR7Zn0gbm90IGFsbG93ZWRgKSxyLmVuZElmKCl9KSxhKXtjb25zdCBmPSgwLG9mLmhhc1Byb3BGdW5jKShyKSxwPSgwLEwuYW5kKSguLi5PYmplY3Qua2V5cyhhKS5tYXAoaT0+KDAsTC5fKWAke2Z9LmNhbGwoJHtzfSwgJHtpfSlgKSk7ci5pZigoMCxMLm5vdCkocCksKCk9Pm10KGUsKDAsTC5zdHIpYG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydGllc2ApKX19ZnVuY3Rpb24gdm8oZSx0LHI9e30pe2NvbnN0e2dlbjpufT1lO2Zvcihjb25zdCBzIGluIHIpbi5lbHNlSWYoKDAsTC5fKWAke3R9ID09PSAke3N9YCksX28oZSx0LHJbc10pfWZ1bmN0aW9uIF9vKGUsdCxyKXt2bihsZShRKHt9LGUpLHtzY2hlbWE6cixkYXRhOigwLEwuXylgJHtlLmRhdGF9WyR7dH1dYH0pKX1mdW5jdGlvbiBFZihlKXtjb25zdHtnZW46dCxzY2hlbWE6cixkYXRhOm4sc2VsZjpzfT1lO3N3aXRjaChyLnR5cGUpe2Nhc2UiYm9vbGVhbiI6aGYoZSk7YnJlYWs7Y2FzZSJzdHJpbmciOlZ0KGUpO2JyZWFrO2Nhc2UidGltZXN0YW1wIjp7VnQoZSk7Y29uc3QgYT0oMCxsby51c2VGdW5jKSh0LGxmLmRlZmF1bHQpLHthbGxvd0RhdGU6byxwYXJzZURhdGU6bH09cy5vcHRzLGY9bz8oMCxMLl8pYCEke2F9KCR7bn0sIHRydWUpYDooMCxMLl8pYCEke2F9KCR7bn0pYCxwPWw/KDAsTC5vcikoZiwoMCxMLl8pYCgke259ID0gbmV3IERhdGUoJHtufSksIGZhbHNlKWAsKDAsTC5fKWBpc05hTigke259LnZhbHVlT2YoKSlgKTpmO3QuaWYocCwoKT0+bXQoZSwoMCxMLnN0cilgaW52YWxpZCB0aW1lc3RhbXBgKSk7YnJlYWt9Y2FzZSJmbG9hdDMyIjpjYXNlImZsb2F0NjQiOkVzKGUpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGE9ci50eXBlO2lmKCFzLm9wdHMuaW50MzJyYW5nZSYmKGE9PT0iaW50MzIifHxhPT09InVpbnQzMiIpKUVzKGUsMTYpLGE9PT0idWludDMyIiYmdC5pZigoMCxMLl8pYCR7bn0gPCAwYCwoKT0+bXQoZSwoMCxMLnN0cilgaW50ZWdlciBvdXQgb2YgcmFuZ2VgKSk7ZWxzZXtjb25zdFtvLGwsZl09dWYuaW50UmFuZ2VbYV07RXMoZSxmKSx0LmlmKCgwLEwuXylgJHtufSA8ICR7b30gfHwgJHtufSA+ICR7bH1gLCgpPT5tdChlLCgwLEwuc3RyKWBpbnRlZ2VyIG91dCBvZiByYW5nZWApKX19fX1mdW5jdGlvbiBWdChlKXtldChlLCciJyksJHMoZSx2cy5wYXJzZUpzb25TdHJpbmcpfWZ1bmN0aW9uIHlmKGUpe2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bn09ZSxzPW4uZW51bTtldChlLCciJyksdC5pZighMSk7Zm9yKGNvbnN0IGEgb2Ygcyl7Y29uc3Qgbz1KU09OLnN0cmluZ2lmeShhKS5zbGljZSgxKTt0LmVsc2VJZigoMCxMLl8pYCR7X24oby5sZW5ndGgpfSA9PT0gJHtvfWApLHQuYXNzaWduKHIsKDAsTC5zdHIpYCR7YX1gKSx0LmFkZChZLmRlZmF1bHQuanNvblBvcyxvLmxlbmd0aCl9dC5lbHNlKCksYXIoZSksdC5lbmRJZigpfWZ1bmN0aW9uIEVzKGUsdCl7Y29uc3R7Z2VuOnJ9PWU7d3MoZSksci5pZigoMCxMLl8pYCItMDEyMzQ1Njc4OSIuaW5kZXhPZigke19uKDEpfSkgPCAwYCwoKT0+YXIoZSksKCk9PiRzKGUsdnMucGFyc2VKc29uTnVtYmVyLHQpKX1mdW5jdGlvbiBnbyhlLHQpe3JldHVybiByPT57Y29uc3R7Z2VuOm4sZGF0YTpzfT1yO05yKHIsYCR7ZX1gLCgpPT50KHIpLCgpPT5uLmFzc2lnbihzLGUpKX19ZnVuY3Rpb24gJGYoZSl7Y29uc3R7Z2VuOnQsc2VsZjpyLGRlZmluaXRpb25zOm4sc2NoZW1hOnMsc2NoZW1hRW52OmF9PWUse3JlZjpvfT1zLGw9bltvXTtpZighbCl0aHJvdyBuZXcgYWYuZGVmYXVsdChyLm9wdHMudXJpUmVzb2x2ZXIsIiIsbyxgTm8gZGVmaW5pdGlvbiAke299YCk7aWYoISgwLGNmLmhhc1JlZikobCkpcmV0dXJuIHZuKGxlKFEoe30sZSkse3NjaGVtYTpsfSkpO2NvbnN0e3Jvb3Q6Zn09YSxwPWZvLmNhbGwocixuZXcgdW8uU2NoZW1hRW52KHtzY2hlbWE6bCxyb290OmZ9KSxuKTtFbyhlLHdmKHQscCksITApfWZ1bmN0aW9uIHdmKGUsdCl7cmV0dXJuIHQucGFyc2U/ZS5zY29wZVZhbHVlKCJwYXJzZSIse3JlZjp0LnBhcnNlfSk6KDAsTC5fKWAke2Uuc2NvcGVWYWx1ZSgid3JhcHBlciIse3JlZjp0fSl9LnBhcnNlYH1mdW5jdGlvbiB5cyhlKXskcyhlLHZzLnBhcnNlSnNvbil9ZnVuY3Rpb24gJHMoZSx0LHIpe0VvKGUsKDAsbG8udXNlRnVuYykoZS5nZW4sdCkscil9ZnVuY3Rpb24gRW8oZSx0LHIpe2NvbnN0e2dlbjpuLGRhdGE6c309ZTtuLmFzc2lnbihzLCgwLEwuXylgJHt0fSgke1kuZGVmYXVsdC5qc29ufSwgJHtZLmRlZmF1bHQuanNvblBvc30ke3I/KDAsTC5fKWAsICR7cn1gOkwubmlsfSlgKSxuLmFzc2lnbihZLmRlZmF1bHQuanNvblBvcywoMCxMLl8pYCR7dH0ucG9zaXRpb25gKSxuLmlmKCgwLEwuXylgJHtzfSA9PT0gdW5kZWZpbmVkYCwoKT0+bXQoZSwoMCxMLl8pYCR7dH0ubWVzc2FnZWApKX1mdW5jdGlvbiBldChlLHQpe05yKGUsdCxhcil9ZnVuY3Rpb24gTnIoZSx0LHIsbil7Y29uc3R7Z2VuOnN9PWUsYT10Lmxlbmd0aDt3cyhlKSxzLmlmKCgwLEwuXylgJHtfbihhKX0gPT09ICR7dH1gLCgpPT57cy5hZGQoWS5kZWZhdWx0Lmpzb25Qb3MsYSksbj09bnVsbHx8bihlKX0sKCk9PnIoZSkpfWZ1bmN0aW9uIHdzKHtnZW46ZSxjaGFyOnR9KXtlLmNvZGUoKDAsTC5fKWB3aGlsZSgoJHt0fT0ke1kuZGVmYXVsdC5qc29ufVske1kuZGVmYXVsdC5qc29uUG9zfV0sJHt0fT09PSIgInx8JHt0fT09PSJcXG4ifHwke3R9PT09IlxcciJ8fCR7dH09PT0iXFx0IikpJHtZLmRlZmF1bHQuanNvblBvc30rKztgKX1mdW5jdGlvbiBfbihlKXtyZXR1cm4gZT09PTE/KDAsTC5fKWAke1kuZGVmYXVsdC5qc29ufVske1kuZGVmYXVsdC5qc29uUG9zfV1gOigwLEwuXylgJHtZLmRlZmF1bHQuanNvbn0uc2xpY2UoJHtZLmRlZmF1bHQuanNvblBvc30sICR7WS5kZWZhdWx0Lmpzb25Qb3N9KyR7ZX0pYH1mdW5jdGlvbiBhcihlKXttdChlLCgwLEwuXylgInVuZXhwZWN0ZWQgdG9rZW4gIiArICR7WS5kZWZhdWx0Lmpzb259WyR7WS5kZWZhdWx0Lmpzb25Qb3N9XWApfWZ1bmN0aW9uIG10KHtnZW46ZSxwYXJzZU5hbWU6dH0scil7ZS5hc3NpZ24oKDAsTC5fKWAke3R9Lm1lc3NhZ2VgLHIpLGUuYXNzaWduKCgwLEwuXylgJHt0fS5wb3NpdGlvbmAsWS5kZWZhdWx0Lmpzb25Qb3MpLGUucmV0dXJuKF9zKX0oZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db2RlR2VuPXQuTmFtZT10Lm5pbD10LnN0cmluZ2lmeT10LnN0cj10Ll89dC5LZXl3b3JkQ3h0PXZvaWQgMDtjb25zdCByPXJhLG49dHMscz1mcyxhPWRzLG89bXMsbD0iSlRELW1ldGEtc2NoZW1hIjtjbGFzcyBmIGV4dGVuZHMgci5kZWZhdWx0e2NvbnN0cnVjdG9yKEU9e30pe3N1cGVyKGxlKFEoe30sRSkse2p0ZDohMH0pKX1fYWRkVm9jYWJ1bGFyaWVzKCl7c3VwZXIuX2FkZFZvY2FidWxhcmllcygpLHRoaXMuYWRkVm9jYWJ1bGFyeShuLmRlZmF1bHQpfV9hZGREZWZhdWx0TWV0YVNjaGVtYSgpe3N1cGVyLl9hZGREZWZhdWx0TWV0YVNjaGVtYSgpLHRoaXMub3B0cy5tZXRhJiZ0aGlzLmFkZE1ldGFTY2hlbWEocy5kZWZhdWx0LGwsITEpfWRlZmF1bHRNZXRhKCl7cmV0dXJuIHRoaXMub3B0cy5kZWZhdWx0TWV0YT1zdXBlci5kZWZhdWx0TWV0YSgpfHwodGhpcy5nZXRTY2hlbWEobCk/bDp2b2lkIDApfWNvbXBpbGVTZXJpYWxpemVyKEUpe2NvbnN0IFQ9dGhpcy5fYWRkU2NoZW1hKEUpO3JldHVybiBULnNlcmlhbGl6ZXx8dGhpcy5fY29tcGlsZVNlcmlhbGl6ZXIoVCl9Y29tcGlsZVBhcnNlcihFKXtjb25zdCBUPXRoaXMuX2FkZFNjaGVtYShFKTtyZXR1cm4gVC5wYXJzZXx8dGhpcy5fY29tcGlsZVBhcnNlcihUKX1fY29tcGlsZVNlcmlhbGl6ZXIoRSl7aWYoYS5kZWZhdWx0LmNhbGwodGhpcyxFLEUuc2NoZW1hLmRlZmluaXRpb25zfHx7fSksIUUuc2VyaWFsaXplKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7cmV0dXJuIEUuc2VyaWFsaXplfV9jb21waWxlUGFyc2VyKEUpe2lmKG8uZGVmYXVsdC5jYWxsKHRoaXMsRSxFLnNjaGVtYS5kZWZpbml0aW9uc3x8e30pLCFFLnBhcnNlKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7cmV0dXJuIEUucGFyc2V9fWUuZXhwb3J0cz10PWYsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mO3ZhciBwPVdlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJLZXl3b3JkQ3h0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5LZXl3b3JkQ3h0fX0pO3ZhciBpPXVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5ffX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdHIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnN0cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic3RyaW5naWZ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zdHJpbmdpZnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5pbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkubmlsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5OYW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDb2RlR2VuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5Db2RlR2VufX0pfSkoem4sem4uZXhwb3J0cyk7dmFyIFNmPWVlJiZlZS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxJdC5WYWxpZGF0ZT1JdC5BZGRTY2hlbWE9dm9pZCAwO2NvbnN0IFJmPVNmKHpuLmV4cG9ydHMpLHlvPW5ldyBSZi5kZWZhdWx0LGJmPShlLHQpPT5lKHQpP251bGw6ZS5lcnJvcnM7ZnVuY3Rpb24gT2YoZSx0KXt5by5hZGRTY2hlbWEodCxlKX1JdC5BZGRTY2hlbWE9T2Y7ZnVuY3Rpb24gTmYoZSx0KXtjb25zdCByPXlvLmdldFNjaGVtYShlKTtpZihyKXJldHVybiBiZihyLHQpfUl0LlZhbGlkYXRlPU5mLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShybiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscm4uU1RTT3B0aW9uc0Jhc2U9dm9pZCAwO2NvbnN0IFBmPUl0O2NsYXNzIFRme2NvbnN0cnVjdG9yKHQ9bnVsbCl7X3IodGhpcywiX29wdGlvbnMiKTt0aGlzLl9vcHRpb25zPXQsdCE9PW51bGwmJih0eXBlb2YgdC52YWxpZGF0b3I9PSJ1bmRlZmluZWQifHwoMCxQZi5WYWxpZGF0ZSkodC52YWxpZGF0b3IsdCkpfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX29wdGlvbnN9fXJuLlNUU09wdGlvbnNCYXNlPVRmO3ZhciBvcj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkob3IsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG9yLkplc3RTbGVlcD1vci5TbGVlcD12b2lkIDA7YXN5bmMgZnVuY3Rpb24gJG8oZT0xZTMpe3JldHVybiBuZXcgUHJvbWlzZSh0PT5zZXRUaW1lb3V0KHQsZSkpfW9yLlNsZWVwPSRvO2FzeW5jIGZ1bmN0aW9uIEFmKCl7cmV0dXJuICRvKDEwMCl9b3IuSmVzdFNsZWVwPUFmO3ZhciB3bz17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuY29tcGFyZVBhcmFtZXRlclR5cGVzPWUuT0F1dGgyUGFyYW1ldGVyRXJyb3JUeXBlPWUuT0lEQ0FkZHJlc3NDbGFpbT1lLk9JRENTdGFuZGFyZENsYWltPWUuT0F1dGgyUGFyYW1ldGVyVHlwZT12b2lkIDAsZnVuY3Rpb24obil7bi5BVURJRU5DRT0iQVVESUVOQ0UiLG4uQ0xJRU5UX0lEPSJjbGllbnRfaWQiLG4uQ0xJRU5UX1NFQ1JFVD0iY2xpZW50X3NlY3JldCIsbi5SRVNQT05TRV9UWVBFPSJyZXNwb25zZV90eXBlIixuLlNDT1BFPSJzY29wZSIsbi5TVEFURT0ic3RhdGUiLG4uUkVESVJFQ1RfVVJJPSJyZWRpcmVjdF91cmkiLG4uRVJST1I9ImVycm9yIixuLkVSUk9SX0RFU0NSSVBUSU9OPSJlcnJvcl9kZXNjcmlwdGlvbiIsbi5FUlJPUl9DT0RFUz0iZXJyb3JfY29kZXMiLG4uRVJST1JfVVJJPSJlcnJvcl91cmkiLG4uR1JBTlRfVFlQRT0iZ3JhbnRfdHlwZSIsbi5DT0RFPSJjb2RlIixuLkFDQ0VTU19UT0tFTj0iYWNjZXNzX3Rva2VuIixuLlRPS0VOX1RZUEU9InRva2VuX3R5cGUiLG4uRVhQSVJFU19JTj0iZXhwaXJlc19pbiIsbi5VU0VSTkFNRT0idXNlcm5hbWUiLG4uUEFTU1dPUkQ9InBhc3N3b3JkIixuLlJFRlJFU0hfVE9LRU49InJlZnJlc2hfdG9rZW4iLG4uUkVTUE9OU0VfTU9ERT0icmVzcG9uc2VfbW9kZSIsbi5USU1FU1RBTVA9InRpbWVzdGFtcCIsbi5UUkFDRV9JRD0idHJhY2VfaWQiLG4uQ09SUkVMQVRJT05fSUQ9ImNvcnJlbGF0aW9uX2lkIn0oZS5PQXV0aDJQYXJhbWV0ZXJUeXBlfHwoZS5PQXV0aDJQYXJhbWV0ZXJUeXBlPXt9KSksZnVuY3Rpb24obil7bi5TVUI9InN1YiIsbi5OQU1FPSJuYW1lIixuLkdJVkVOX05BTUU9ImdpdmVuX25hbWUiLG4uRkFNSUxZX05BTUU9ImZhbWlseV9uYW1lIixuLk1JRERMRV9OQU1FPSJtaWRkbGVfbmFtZSIsbi5OSUNLTkFNRT0ibmlja25hbWUiLG4uUFJFRkVSUkVEX1VTRVJOQU1FPSJwcmVmZXJyZWRfdXNlcm5hbWUiLG4uUFJPRklMRT0icHJvZmlsZSIsbi5QSUNUVVJFPSJwaWN0dXJlIixuLldFQlNJVEU9IndlYnNpdGUiLG4uRU1BSUw9ImVtYWlsIixuLkVNQUlMX1ZFUklGSUVEPSJlbWFpbF92ZXJpZmllZCIsbi5HRU5ERVI9ImdlbmRlciIsbi5CSVJUSERBVEU9ImJpcnRoZGF0ZSIsbi5aT05FSU5GTz0iem9uZWluZm8iLG4uTE9DQUxFPSJsb2NhbGUiLG4uUEhPTkVfTlVNQkVSPSJwaG9uZV9udW1iZXIiLG4uUEhPTkVfTlVNQkVSX1ZFUklGSUVEPSJwaG9uZV9udW1iZXJfdmVyaWZpZWQiLG4uQUREUkVTUz0iYWRkcmVzcyIsbi5DTElFTlRfU0VDUkVUPSJjbGllbnRfc2VjcmV0IixuLk5PTkNFPSJub25jZSJ9KGUuT0lEQ1N0YW5kYXJkQ2xhaW18fChlLk9JRENTdGFuZGFyZENsYWltPXt9KSksZnVuY3Rpb24obil7bi5GT1JNQVRURUQ9ImZvcm1hdHRlZCIsbi5TVFJFRVRfQUREUkVTUz0ic3RyZWV0X2FkZHJlc3MiLG4uTE9DQUxJVFk9ImxvY2FsaXR5IixuLlJFR0lPTj0icmVnaW9uIixuLkNPVU5UUlk9ImNvdW50cnkifShlLk9JRENBZGRyZXNzQ2xhaW18fChlLk9JRENBZGRyZXNzQ2xhaW09e30pKTtjbGFzcyB0e31fcih0LCJOT1RfRVFVQUwiLHtjb2RlOiJTVFNfT0FVVEgyX0VSUl8wMDAxIixkZXNjcmlwdGlvbjoiUGFyYW1ldGVyIHZhbHVlcyBub3QgZXF1YWwuIn0pLF9yKHQsIk5PVF9QUkVTRU5UIix7Y29kZToiU1RTX09BVVRIMl9FUlJfMDAwMiIsZGVzY3JpcHRpb246IlBhcmFtZXRlciBub3QgcHJvdmlkZWQuIn0pLF9yKHQsIklOVkFMSURfRk9STUFUIix7Y29kZToiU1RTX09BVVRIMl9FUlJfMDAwMyIsZGVzY3JpcHRpb246IlBhcmFtZXRlciB2YWx1ZSBmb3JtYXQgaW52YWxpZC4ifSksX3IodCwiRVhQSVJFRCIse2NvZGU6IlNUU19PQVVUSDJfRVJSXzAwMDQiLGRlc2NyaXB0aW9uOiJQYXJhbWV0ZXIgdmFsdWUgZXhwaXJlZC4ifSksZS5PQXV0aDJQYXJhbWV0ZXJFcnJvclR5cGU9dDtmdW5jdGlvbiByKG4scyxhKXtjb25zdCBvPVtdO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCsrKXtjb25zdCBmPWFbbF07aWYobltsXS5sb2NhbGVDb21wYXJlKHNbbF0pIT09MCl7Y29uc3QgcD17ZXJyb3I6dC5OT1RfRVFVQUwuY29kZSxlcnJvcl9kZXNjcmlwdGlvbjp0Lk5PVF9FUVVBTC5kZXNjcmlwdGlvbix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkZXRhaWxzOmAke3QuTk9UX0VRVUFMLmRlc2NyaXB0aW9ufTogUGFyYW1ldGVyOiBbJHtmfV1gfTtvLnB1c2gocCl9fXJldHVybiBvfWUuY29tcGFyZVBhcmFtZXRlclR5cGVzPXJ9KSh3byksZnVuY3Rpb24oZSl7dmFyIHQ9ZWUmJmVlLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocyxhLG8sbCl7bD09PXZvaWQgMCYmKGw9byk7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLG8pOyghZnx8KCJnZXQiaW4gZj8hYS5fX2VzTW9kdWxlOmYud3JpdGFibGV8fGYuY29uZmlndXJhYmxlKSkmJihmPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGwsZil9OmZ1bmN0aW9uKHMsYSxvLGwpe2w9PT12b2lkIDAmJihsPW8pLHNbbF09YVtvXX0pLHI9ZWUmJmVlLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocyxhKXtmb3IodmFyIG8gaW4gcylvIT09ImRlZmF1bHQiJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsbykmJnQoYSxzLG8pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS4kc3RzZ2RmPWUuJHN0c2dkPXZvaWQgMCxyKHRuLGUpLHIocm4sZSkscihvcixlKSxyKEl0LGUpLHIod28sZSksZS4kc3RzZ2Q9e307ZnVuY3Rpb24gbigpe3JldHVybiBlLiRzdHNnZH1lLiRzdHNnZGY9bn0oQ3QpO2NsYXNzIENme2NvbnN0cnVjdG9yKCl7dGhpcy5EaWdlc3RNZXNzYWdlPWFzeW5jIGZ1bmN0aW9uKHQpe2NvbnN0IG49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLHM9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLG4pLGE9QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShzKSk7cmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5hKSl9LHRoaXMuQ3JlYXRlUmFuZG9tU3RyaW5nPSh0PTQzKT0+e2NvbnN0IHI9QXJyYXkuZnJvbShjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHQpKSk7cmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5yKSl9LHRoaXMuQ3JlYXRlUmFuZG9tU3RyaW5nRXg9KCk9Pntjb25zdCB0PSIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei1ffi4iO2xldCByPSIiO3JldHVybiBBcnJheS5mcm9tKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoNDMpKSkuZm9yRWFjaChzPT5yKz10W3MldC5sZW5ndGhdKSxyfX19Y2xhc3MgSWZ7Y29uc3RydWN0b3IoKXt0aGlzLkRlY29kZVF1ZXJ5UGFyYW1zPXQ9Pntjb25zdCByPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5maWx0ZXIobj0+dHlwZW9mIHRbbl0hPSJ1bmRlZmluZWQiKS5tYXAobj0+e3JbZGVjb2RlVVJJQ29tcG9uZW50KG4pXT1kZWNvZGVVUklDb21wb25lbnQodFtuXSl9KSxyfSx0aGlzLkNyZWF0ZVF1ZXJ5UGFyYW1zPXQ9Pk9iamVjdC5rZXlzKHQpLmZpbHRlcihyPT50eXBlb2YgdFtyXSE9InVuZGVmaW5lZCIpLm1hcChyPT5BcnJheS5pc0FycmF5KHRbcl0pP2VuY29kZVVSSUNvbXBvbmVudChyKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbcl0uam9pbigiICIpKTplbmNvZGVVUklDb21wb25lbnQocikrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0W3JdKSkuam9pbigiJiIpLHRoaXMuX0dldFF1ZXJ5UGFyYW1zPXQ9PntsZXQgcj17fTtjb25zdCBuPXQuc3BsaXQoIj8iKTtpZihuLmxlbmd0aD09Mil7Y29uc3Qgcz1uWzFdLnNwbGl0KCImIiksYT17fTtsZXQgbz0iIjtzLmZvckVhY2goZnVuY3Rpb24obCl7bz1sLnNwbGl0KCI9Iiksby5sZW5ndGg9PTImJihhW29bMF1dPW9bMV0pfSkscj10aGlzLkRlY29kZVF1ZXJ5UGFyYW1zKGEpfXJldHVybiByfSx0aGlzLkdldFF1ZXJ5UGFyYW1zPSgpPT50aGlzLl9HZXRRdWVyeVBhcmFtcyh3aW5kb3cubG9jYXRpb24uaHJlZil9fWZ1bmN0aW9uIFNzKGUpe3RoaXMubWVzc2FnZT1lfVNzLnByb3RvdHlwZT1uZXcgRXJyb3IsU3MucHJvdG90eXBlLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIFNvPXR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihlKXt2YXIgdD1TdHJpbmcoZSkucmVwbGFjZSgvPSskLywiIik7aWYodC5sZW5ndGglND09MSl0aHJvdyBuZXcgU3MoIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciByLG4scz0wLGE9MCxvPSIiO249dC5jaGFyQXQoYSsrKTt+biYmKHI9cyU0PzY0KnIrbjpuLHMrKyU0KT9vKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZyPj4oLTIqcyY2KSk6MCluPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuaW5kZXhPZihuKTtyZXR1cm4gb307ZnVuY3Rpb24gRGYoZSl7dmFyIHQ9ZS5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKTtzd2l0Y2godC5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjp0Kz0iPT0iO2JyZWFrO2Nhc2UgMzp0Kz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoU28ocikucmVwbGFjZSgvKC4pL2csZnVuY3Rpb24obixzKXt2YXIgYT1zLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGEubGVuZ3RoPDImJihhPSIwIithKSwiJSIrYX0pKX0odCl9Y2F0Y2h7cmV0dXJuIFNvKHQpfX1mdW5jdGlvbiBnbihlKXt0aGlzLm1lc3NhZ2U9ZX1mdW5jdGlvbiBqZihlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgZ24oIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIHI9KHQ9dHx8e30pLmhlYWRlcj09PSEwPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoRGYoZS5zcGxpdCgiLiIpW3JdKSl9Y2F0Y2gobil7dGhyb3cgbmV3IGduKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIituLm1lc3NhZ2UpfX1nbi5wcm90b3R5cGU9bmV3IEVycm9yLGduLnByb3RvdHlwZS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7dmFyIFByPWVlJiZlZS5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gUHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MSxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKyl7dD1hcmd1bWVudHNbcl07Zm9yKHZhciBzIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscykmJihlW3NdPXRbc10pfXJldHVybiBlfSxQci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIFRyKGUsdCl7aWYoIXQpcmV0dXJuIiI7dmFyIHI9IjsgIitlO3JldHVybiB0PT09ITA/cjpyKyI9Iit0fWZ1bmN0aW9uIGtmKGUpe2lmKHR5cGVvZiBlLmV4cGlyZXM9PSJudW1iZXIiKXt2YXIgdD1uZXcgRGF0ZTt0LnNldE1pbGxpc2Vjb25kcyh0LmdldE1pbGxpc2Vjb25kcygpK2UuZXhwaXJlcyo4NjRlNSksZS5leHBpcmVzPXR9cmV0dXJuIFRyKCJFeHBpcmVzIixlLmV4cGlyZXM/ZS5leHBpcmVzLnRvVVRDU3RyaW5nKCk6IiIpK1RyKCJEb21haW4iLGUuZG9tYWluKStUcigiUGF0aCIsZS5wYXRoKStUcigiU2VjdXJlIixlLnNlY3VyZSkrVHIoIlNhbWVTaXRlIixlLnNhbWVTaXRlKX1mdW5jdGlvbiBVZihlLHQscil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDVFfDYwfDdDKS9nLGRlY29kZVVSSUNvbXBvbmVudCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLGRlY29kZVVSSUNvbXBvbmVudCkra2Yocil9ZnVuY3Rpb24gRmYoZSl7Zm9yKHZhciB0PXt9LHI9ZT9lLnNwbGl0KCI7ICIpOltdLG49LyglW1xkQS1GXXsyfSkrL2dpLHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGE9cltzXS5zcGxpdCgiPSIpLG89YS5zbGljZSgxKS5qb2luKCI9Iik7by5jaGFyQXQoMCk9PT0nIicmJihvPW8uc2xpY2UoMSwtMSkpO3RyeXt2YXIgbD1hWzBdLnJlcGxhY2UobixkZWNvZGVVUklDb21wb25lbnQpO3RbbF09by5yZXBsYWNlKG4sZGVjb2RlVVJJQ29tcG9uZW50KX1jYXRjaHt9fXJldHVybiB0fWZ1bmN0aW9uIE1mKCl7cmV0dXJuIEZmKGRvY3VtZW50LmNvb2tpZSl9ZnVuY3Rpb24gTGYoZSl7cmV0dXJuIE1mKClbZV19dmFyIFZmPUxmO2Z1bmN0aW9uIFJvKGUsdCxyKXtkb2N1bWVudC5jb29raWU9VWYoZSx0LFByKHtwYXRoOiIvIn0scikpfXZhciB6Zj1SbztmdW5jdGlvbiBIZihlLHQpe1JvKGUsIiIsUHIoUHIoe30sdCkse2V4cGlyZXM6LTF9KSl9dmFyIEtmPUhmO2NvbnN0IEVuPU5zKGBwcm9jOiR7cHJvY2Vzcy5waWR9OnN0b3JhZ2UudHNgKTt2YXIgYm89KGU9PihlLkxPQ0FMX1NUT1JBR0U9IkxvY2FsU3RvcmFnZSIsZS5TRVNTSU9OX1NUT1JBR0U9IlNlc3Npb25TdG9yYWdlIixlLkNPT0tJRV9TVE9SQUdFPSJDb29raWVTdG9yYWdlIixlLk1FTU9SWV9TVE9SQUdFPSJNZW1vcnlTdG9yYWdlIixlKSkoYm98fHt9KTtjbGFzcyBCZntjb25zdHJ1Y3Rvcigpe3RoaXMuZ2V0PXQ9Pntjb25zdCByPVZmKHQpO3JldHVybiByP0pTT04ucGFyc2Uocik6bnVsbH0sdGhpcy5zZXQ9KHQscixuPXt9KT0+e2xldCBzPXt9O3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSJodHRwczoiJiYocz17c2VjdXJlOiEwLHNhbWVTaXRlOiJub25lIn0pLG4mJm4uZGF5c1VudGlsRXhwaXJlP3MuZXhwaXJlcz1uLmRheXNVbnRpbEV4cGlyZTpzLmV4cGlyZXM9MSxFbihgQ29va2llU3RvcmFnZS5zZXQ6IGtleTogJHt0fSwgdmFsdWU6IFske3J9XWApLHpmKHQsSlNPTi5zdHJpbmdpZnkocikscyl9LHRoaXMucmVtb3ZlPXQ9PntLZih0KX19fWNsYXNzIEpme2NvbnN0cnVjdG9yKCl7dGhpcy5nZXQ9dD0+e2NvbnN0IHI9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0KTtyZXR1cm4gdHlwZW9mIHI9PSJ1bmRlZmluZWQifHxyPT09bnVsbD9udWxsOkpTT04ucGFyc2Uocil9LHRoaXMuc2V0PSh0LHIpPT57RW4oYFNlc3Npb25TdG9yYWdlLnNldDoga2V5OiAke3R9LCB2YWx1ZTogWyR7cn1dYCksc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0LEpTT04uc3RyaW5naWZ5KHIpKX0sdGhpcy5yZW1vdmU9dD0+e3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odCl9fX1jbGFzcyBxZntjb25zdHJ1Y3Rvcigpe3RoaXMuZ2V0PXQ9Pntjb25zdCByPWxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpO3JldHVybiB0eXBlb2Ygcj09InVuZGVmaW5lZCJ8fHI9PT1udWxsP251bGw6SlNPTi5wYXJzZShyKX0sdGhpcy5zZXQ9KHQscik9PntFbihgTG9jYWxTdG9yYWdlLnNldDoga2V5OiAke3R9LCB2YWx1ZTogWyR7cn1dYCksbG9jYWxTdG9yYWdlLnNldEl0ZW0odCxKU09OLnN0cmluZ2lmeShyKSl9LHRoaXMucmVtb3ZlPXQ9Pntsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0KX19fWNsYXNzIEdme2NvbnN0cnVjdG9yKCl7U2UodGhpcyxIdCx2b2lkIDApO2NlKHRoaXMsSHQse30pLHRoaXMuZ2V0PXQ9Pntjb25zdCByPVYodGhpcyxIdClbdF07cmV0dXJuIHR5cGVvZiByPT0idW5kZWZpbmVkInx8cj09PW51bGw/bnVsbDpyfSx0aGlzLnNldD0odCxyKT0+e0VuKGBNZW1vcnlTdG9yYWdlLnNldDoga2V5OiAke3R9LCB2YWx1ZTogWyR7cn1dYCksVih0aGlzLEh0KVt0XT1yfSx0aGlzLnJlbW92ZT10PT57ZGVsZXRlIFYodGhpcyxIdClbdF19fX1IdD1uZXcgV2Vha01hcDtjbGFzcyBRZntjb25zdHJ1Y3Rvcih0KXtTZSh0aGlzLGJ0LG51bGwpO3N3aXRjaCh0LmNsaWVudFN0b3JhZ2VUeXBlKXtjYXNlIlNlc3Npb25TdG9yYWdlIjpjZSh0aGlzLGJ0LG5ldyBKZik7YnJlYWs7Y2FzZSJMb2NhbFN0b3JhZ2UiOmNlKHRoaXMsYnQsbmV3IHFmKTticmVhaztjYXNlIkNvb2tpZVN0b3JhZ2UiOmNlKHRoaXMsYnQsbmV3IEJmKTticmVhaztjYXNlIk1lbW9yeVN0b3JhZ2UiOmNlKHRoaXMsYnQsbmV3IEdmKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBbJHt0LmNsaWVudFN0b3JhZ2VUeXBlfV0gc3RvcmFnZSB0eXBlLmApfX1HZXRTdG9yYWdlKCl7cmV0dXJuIFYodGhpcyxidCl9fWJ0PW5ldyBXZWFrTWFwO3ZhciBpcjsoZnVuY3Rpb24oZSl7ZVtlLkFDQ0VQVEVEPTIwMl09IkFDQ0VQVEVEIixlW2UuQkFEX0dBVEVXQVk9NTAyXT0iQkFEX0dBVEVXQVkiLGVbZS5CQURfUkVRVUVTVD00MDBdPSJCQURfUkVRVUVTVCIsZVtlLkNPTkZMSUNUPTQwOV09IkNPTkZMSUNUIixlW2UuQ09OVElOVUU9MTAwXT0iQ09OVElOVUUiLGVbZS5DUkVBVEVEPTIwMV09IkNSRUFURUQiLGVbZS5FWFBFQ1RBVElPTl9GQUlMRUQ9NDE3XT0iRVhQRUNUQVRJT05fRkFJTEVEIixlW2UuRkFJTEVEX0RFUEVOREVOQ1k9NDI0XT0iRkFJTEVEX0RFUEVOREVOQ1kiLGVbZS5GT1JCSURERU49NDAzXT0iRk9SQklEREVOIixlW2UuR0FURVdBWV9USU1FT1VUPTUwNF09IkdBVEVXQVlfVElNRU9VVCIsZVtlLkdPTkU9NDEwXT0iR09ORSIsZVtlLkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEPTUwNV09IkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEIixlW2UuSU1fQV9URUFQT1Q9NDE4XT0iSU1fQV9URUFQT1QiLGVbZS5JTlNVRkZJQ0lFTlRfU1BBQ0VfT05fUkVTT1VSQ0U9NDE5XT0iSU5TVUZGSUNJRU5UX1NQQUNFX09OX1JFU09VUkNFIixlW2UuSU5TVUZGSUNJRU5UX1NUT1JBR0U9NTA3XT0iSU5TVUZGSUNJRU5UX1NUT1JBR0UiLGVbZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I9NTAwXT0iSU5URVJOQUxfU0VSVkVSX0VSUk9SIixlW2UuTEVOR1RIX1JFUVVJUkVEPTQxMV09IkxFTkdUSF9SRVFVSVJFRCIsZVtlLkxPQ0tFRD00MjNdPSJMT0NLRUQiLGVbZS5NRVRIT0RfRkFJTFVSRT00MjBdPSJNRVRIT0RfRkFJTFVSRSIsZVtlLk1FVEhPRF9OT1RfQUxMT1dFRD00MDVdPSJNRVRIT0RfTk9UX0FMTE9XRUQiLGVbZS5NT1ZFRF9QRVJNQU5FTlRMWT0zMDFdPSJNT1ZFRF9QRVJNQU5FTlRMWSIsZVtlLk1PVkVEX1RFTVBPUkFSSUxZPTMwMl09Ik1PVkVEX1RFTVBPUkFSSUxZIixlW2UuTVVMVElfU1RBVFVTPTIwN109Ik1VTFRJX1NUQVRVUyIsZVtlLk1VTFRJUExFX0NIT0lDRVM9MzAwXT0iTVVMVElQTEVfQ0hPSUNFUyIsZVtlLk5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQ9NTExXT0iTkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRCIsZVtlLk5PX0NPTlRFTlQ9MjA0XT0iTk9fQ09OVEVOVCIsZVtlLk5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OPTIwM109Ik5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OIixlW2UuTk9UX0FDQ0VQVEFCTEU9NDA2XT0iTk9UX0FDQ0VQVEFCTEUiLGVbZS5OT1RfRk9VTkQ9NDA0XT0iTk9UX0ZPVU5EIixlW2UuTk9UX0lNUExFTUVOVEVEPTUwMV09Ik5PVF9JTVBMRU1FTlRFRCIsZVtlLk5PVF9NT0RJRklFRD0zMDRdPSJOT1RfTU9ESUZJRUQiLGVbZS5PSz0yMDBdPSJPSyIsZVtlLlBBUlRJQUxfQ09OVEVOVD0yMDZdPSJQQVJUSUFMX0NPTlRFTlQiLGVbZS5QQVlNRU5UX1JFUVVJUkVEPTQwMl09IlBBWU1FTlRfUkVRVUlSRUQiLGVbZS5QRVJNQU5FTlRfUkVESVJFQ1Q9MzA4XT0iUEVSTUFORU5UX1JFRElSRUNUIixlW2UuUFJFQ09ORElUSU9OX0ZBSUxFRD00MTJdPSJQUkVDT05ESVRJT05fRkFJTEVEIixlW2UuUFJFQ09ORElUSU9OX1JFUVVJUkVEPTQyOF09IlBSRUNPTkRJVElPTl9SRVFVSVJFRCIsZVtlLlBST0NFU1NJTkc9MTAyXT0iUFJPQ0VTU0lORyIsZVtlLlBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEPTQwN109IlBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEIixlW2UuUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRT00MzFdPSJSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFIixlW2UuUkVRVUVTVF9USU1FT1VUPTQwOF09IlJFUVVFU1RfVElNRU9VVCIsZVtlLlJFUVVFU1RfVE9PX0xPTkc9NDEzXT0iUkVRVUVTVF9UT09fTE9ORyIsZVtlLlJFUVVFU1RfVVJJX1RPT19MT05HPTQxNF09IlJFUVVFU1RfVVJJX1RPT19MT05HIixlW2UuUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRT00MTZdPSJSRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFIixlW2UuUkVTRVRfQ09OVEVOVD0yMDVdPSJSRVNFVF9DT05URU5UIixlW2UuU0VFX09USEVSPTMwM109IlNFRV9PVEhFUiIsZVtlLlNFUlZJQ0VfVU5BVkFJTEFCTEU9NTAzXT0iU0VSVklDRV9VTkFWQUlMQUJMRSIsZVtlLlNXSVRDSElOR19QUk9UT0NPTFM9MTAxXT0iU1dJVENISU5HX1BST1RPQ09MUyIsZVtlLlRFTVBPUkFSWV9SRURJUkVDVD0zMDddPSJURU1QT1JBUllfUkVESVJFQ1QiLGVbZS5UT09fTUFOWV9SRVFVRVNUUz00MjldPSJUT09fTUFOWV9SRVFVRVNUUyIsZVtlLlVOQVVUSE9SSVpFRD00MDFdPSJVTkFVVEhPUklaRUQiLGVbZS5VTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUz00NTFdPSJVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUyIsZVtlLlVOUFJPQ0VTU0FCTEVfRU5USVRZPTQyMl09IlVOUFJPQ0VTU0FCTEVfRU5USVRZIixlW2UuVU5TVVBQT1JURURfTUVESUFfVFlQRT00MTVdPSJVTlNVUFBPUlRFRF9NRURJQV9UWVBFIixlW2UuVVNFX1BST1hZPTMwNV09IlVTRV9QUk9YWSIsZVtlLk1JU0RJUkVDVEVEX1JFUVVFU1Q9NDIxXT0iTUlTRElSRUNURURfUkVRVUVTVCJ9KShpcnx8KGlyPXt9KSk7dmFyIE9vPShlPT4oZS5DT0RFPSJjb2RlIixlLklEX1RPS0VOPSJpZF90b2tlbiIsZS5UT0tFTj0idG9rZW4iLGUpKShPb3x8e30pLE5vPShlPT4oZS5RVUVSWT0icXVlcnkiLGUuRlJBR01FTlQ9ImZyYWdtZW50IixlLkZPUk1fUE9TVD0iZm9ybV9wb3N0IixlKSkoTm98fHt9KSxScz0oZT0+KGUuQ0xJRU5UX0NSRURFTlRJQUxTPSJjbGllbnRfY3JlZGVudGlhbHMiLGUuQVVUSE9SSVpBVElPTl9DT0RFPSJhdXRob3JpemF0aW9uX2NvZGUiLGUuUkVGUkVTSF9UT0tFTj0icmVmcmVzaF90b2tlbiIsZSkpKFJzfHx7fSksenQ9KGU9PihlLlJFU1RPUkVfU0VTU0lPTj0iUmVzdG9yZVNlc3Npb24iLGUuQVVUSE9SSVpFPSJBdXRob3JpemUiLGUuSEFORExFX1JFRElSRUNUPSJIYW5kbGVSZWRpcmVjdCIsZS5MT0dPVVQ9IkxvZ291dCIsZS5BVVRIRU5USUNBVEVfRVZFTlQ9IkF1dGhlbnRpY2F0ZUV2ZW50IixlLkVSUk9SPSJFcnJvciIsZSkpKHp0fHx7fSk7TnMoYHByb2M6JHtwcm9jZXNzLnBpZH06c3Rzb2F1dGgyd29ya2VyLnRzYCk7Y2xhc3MgWWZ7Y29uc3RydWN0b3IodCl7U2UodGhpcyxGZSx2b2lkIDApO1NlKHRoaXMsT3Qsdm9pZCAwKTtTZSh0aGlzLEFyLHZvaWQgMCk7U2UodGhpcyx5bix2b2lkIDApO1NlKHRoaXMsSGUsdm9pZCAwKTtTZSh0aGlzLHZ0LHZvaWQgMCk7U2UodGhpcyxOdCx2b2lkIDApO1NlKHRoaXMsS2Usdm9pZCAwKTtTZSh0aGlzLEt0LHZvaWQgMCk7U2UodGhpcywkbix2b2lkIDApO1NlKHRoaXMsdHQsdm9pZCAwKTtTZSh0aGlzLENyLHZvaWQgMCk7U2UodGhpcyxJcix2b2lkIDApO1NlKHRoaXMsRHIsdm9pZCAwKTtTZSh0aGlzLGNyLHZvaWQgMCk7U2UodGhpcyxqcix2b2lkIDApO1NlKHRoaXMsa3Isdm9pZCAwKTtTZSh0aGlzLFVyLHZvaWQgMCk7Y2UodGhpcyxGZSxudWxsKSxjZSh0aGlzLE90LG5ldyBDZiksY2UodGhpcyxBcixuZXcgSWYpLGNlKHRoaXMseW4sImF1dGhvcml6ZV9vcHRpb25zLnN0c21kYS5jb20uYXUiKSxjZSh0aGlzLEhlLCJzZXNzaW9uLnN0c21kYS5jb20uYXUiKSxjZSh0aGlzLHZ0LG51bGwpLGNlKHRoaXMsTnQsbnVsbCksY2UodGhpcyxLZSxudWxsKSxjZSh0aGlzLEt0LG51bGwpLGNlKHRoaXMsJG4sMCksdGhpcy5TZXR1cExpc3RlbmVyPSgpPT57Vih0aGlzLEt0KS5vbm1lc3NhZ2U9YXN5bmMgcj0+e2NvbnN0IG49ci5kYXRhO3N3aXRjaChuLmNvbW1hbmQpe2Nhc2UgenQuUkVTVE9SRV9TRVNTSU9OOlYodGhpcyx0dCkuY2FsbCh0aGlzLG4sYXdhaXQgVih0aGlzLENyKS5jYWxsKHRoaXMpKTticmVhaztjYXNlIHp0LkFVVEhPUklaRTpWKHRoaXMsdHQpLmNhbGwodGhpcyxuLGF3YWl0IFYodGhpcyxJcikuY2FsbCh0aGlzKSk7YnJlYWs7Y2FzZSB6dC5IQU5ETEVfUkVESVJFQ1Q6Vih0aGlzLHR0KS5jYWxsKHRoaXMsbixhd2FpdCBWKHRoaXMsRHIpLmNhbGwodGhpcyxuLnBheWxvYWQpKTticmVhaztjYXNlIHp0LkxPR09VVDpWKHRoaXMsdHQpLmNhbGwodGhpcyxuLGF3YWl0IFYodGhpcyxVcikuY2FsbCh0aGlzKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQ6IFske24uY29tbWFuZH0nXSBub3QgZm91bmQuYCl9fX0sY2UodGhpcyx0dCxhc3luYyhyLG4pPT57Y29uc3Qgcz17bWVzc2FnZUlkOnIubWVzc2FnZUlkLGNvbW1hbmQ6ci5jb21tYW5kLHBheWxvYWQ6bn07Vih0aGlzLEt0KS5wb3N0TWVzc2FnZShzKX0pLGNlKHRoaXMsQ3IsYXN5bmMoKT0+e2xldCByPW51bGw7aWYocj1WKHRoaXMsRmUpLmdldChWKHRoaXMsSGUpKSxyIT09bnVsbCljb25zb2xlLmxvZygiU2Vzc2lvbiByZXN0b3JlZCBmcm9tIGNsaWVudCBzdG9yYWdlLiIpLFYodGhpcyx2dCkmJlYodGhpcyx2dCkuVXBkYXRlSW5zdHJ1bWVudCgibSIse0xvZ01lc3NhZ2U6IlNlc3Npb24gcmVzdG9yZWQgZnJvbSBjbGllbnQgc3RvcmFnZS4ifSk7ZWxzZXtjb25zdCBuPWAke3t9LkJST0tFUl9FTkRQT0lOVH06JHt7fS5CUk9LRVJfUE9SVH0ke3t9LkJST0tFUl9BUElfUk9PVH0vc2Vzc2lvbmA7Y29uc29sZS5sb2coIlJlc3RvcmVTZXNzaW9uIiksY29uc29sZS5sb2cobiksVih0aGlzLHZ0KSYmKFYodGhpcyx2dCkuVXBkYXRlSW5zdHJ1bWVudCgibSIse0xvZ01lc3NhZ2U6IlJlc3RvcmVTZXNzaW9uIn0pLFYodGhpcyx2dCkuVXBkYXRlSW5zdHJ1bWVudCgibSIse0xvZ01lc3NhZ2U6bn0pKTt0cnl7Y29uc3Qgcz1hd2FpdCBWbih7bWV0aG9kOiJwb3N0Iix1cmw6bixkYXRhOntbQ3QuT0F1dGgyUGFyYW1ldGVyVHlwZS5DTElFTlRfSURdOnt9LkNMSUVOVF9JRCxbQ3QuT0F1dGgyUGFyYW1ldGVyVHlwZS5TQ09QRV06e30uU0NPUEUsW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuUkVESVJFQ1RfVVJJXTp7fS5SRURJUkVDVF9VUkksW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuQVVESUVOQ0VdOnt9LkFVRElFTkNFfSx3aXRoQ3JlZGVudGlhbHM6ITAsdGltZW91dDpwYXJzZUludCh7fS5USU1FT1VUKX0pO3MuZGF0YS5zdGF0dXM9PT1pci5PSz8ocj1zLmRhdGEuZGV0YWlsLFYodGhpcyxGZSkuc2V0KFYodGhpcyxIZSksciksY29uc29sZS5sb2coIlNlc3Npb24gcmVzdG9yZWQgZnJvbSBzZXJ2ZXIgc2lkZSBjb29raWUuIikpOihjb25zb2xlLmxvZygiQ291bGQgbm90IHJlc3RvcmUgcHJldmlvdXMgc2Vzc2lvbjotIiksY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocy5kYXRhKSkpfWNhdGNoKHMpe2NvbnNvbGUubG9nKCJDb3VsZCBub3QgcmVzdG9yZSBwcmV2aW91cyBzZXNzaW9uIChlcnJvciBzdGF0ZSk6LSIpLGNvbnNvbGUubG9nKHMpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHMpKX19cmV0dXJuIHIhPT1udWxsPyhWKHRoaXMsS2UpLmNhbGwodGhpcyxyLmlkX3Rva2VuKSxjb25zb2xlLmxvZygiUmVmcmVzaGluZyB0b2tlbnMgLi4uIiksVih0aGlzLGtyKS5jYWxsKHRoaXMpKTooVih0aGlzLEtlKS5jYWxsKHRoaXMsbnVsbCksITEpfSksY2UodGhpcyxJcixhc3luYygpPT57Y29uc29sZS5sb2coIkF1dGhvcml6ZSAuLi4iKTtjb25zdCByPXt9LkNMSUVOVF9JRCxuPVYodGhpcyxPdCkuQ3JlYXRlUmFuZG9tU3RyaW5nKCkscz1bT28uQ09ERV0sYT17fS5SRURJUkVDVF9VUkksbz1Oby5RVUVSWSxsPXt9LlNDT1BFLGY9Vih0aGlzLE90KS5DcmVhdGVSYW5kb21TdHJpbmcoKSxwPVYodGhpcyxPdCkuQ3JlYXRlUmFuZG9tU3RyaW5nKCksaT1hd2FpdCBWKHRoaXMsT3QpLkRpZ2VzdE1lc3NhZ2UocCksRT17Y2xpZW50X2lkOnIsbm9uY2U6bixyZXNwb25zZV90eXBlOnMscmVkaXJlY3RfdXJpOmEscmVzcG9uc2VfbW9kZTpvLHNjb3BlOmwsc3RhdGU6Zixjb2RlX2NoYWxsZW5nZTppLGNvZGVfY2hhbGxlbmdlX21ldGhvZDoiUzI1NiJ9LFQ9YCR7e30uQVVUSF9FTkRQT0lOVH06JHt7fS5BVVRIX1BPUlR9JHt7fS5BVVRIX0FQSVJPT1R9PyR7Vih0aGlzLEFyKS5DcmVhdGVRdWVyeVBhcmFtcyhFKX1gO3JldHVybiBjb25zb2xlLmxvZyhUKSxFLmNvZGVfdmVyaWZpZXI9cCxjb25zb2xlLmxvZyhgQXV0aG9yaXplOmF1dGhvcml6ZU9wdGlvbnM6IFske0pTT04uc3RyaW5naWZ5KEUpfV1gKSx7dXJsOlQsYXV0aG9yaXplT3B0aW9uczpFfX0pLGNlKHRoaXMsRHIsYXN5bmMgcj0+e2NvbnN0IG49ci5xdWVyeVZhcnMscz1yLmF1dGhvcml6ZU9wdGlvbnM7aWYoY29uc29sZS5sb2coIkhhbmRsZVJlZGlyZWN0IiksY29uc29sZS5sb2coYEhhbmRsZVJlZGlyZWN0OlF1ZXJ5IFZhcnM6IFske0pTT04uc3RyaW5naWZ5KG4pfV1gKSxuW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuQ09ERV0pe2NvbnN0IGE9bjtjb25zb2xlLmxvZyhgYXV0aG9yaXplT3B0aW9ucyBmcm9tIHRyYW5zYWN0aW9uIHN0YXRlOiBbJHtKU09OLnN0cmluZ2lmeShzKX1dYCk7Y29uc3Qgbz1hLnN0YXRlO3JldHVybiBzLnN0YXRlLmxvY2FsZUNvbXBhcmUobyk9PT0wPyhjb25zb2xlLmxvZygicmVkaXJlY3RlZCBzdGF0ZSAoZnJvbSBxdWVyeVZhcnMpIG1hdGNoZWQgcHJldmlvdXNseSBzYXZlZCB0cmFuc2FjdGlvbiBhdXRob3JpemVPcHRpb25zIHN0YXRlIiksYXdhaXQgVih0aGlzLGpyKS5jYWxsKHRoaXMscyxhKSk6KGNvbnNvbGUubG9nKCJyZWRpcmVjdGVkIHN0YXRlIChmcm9tIHF1ZXJ5VmFycykgZGlkIE5PVCBtYXRjaCBwcmV2aW91c2x5IHNhdmVkIHRyYW5zYWN0aW9uIGF1dGhvcml6ZU9wdGlvbnMgc3RhdGUiKSxWKHRoaXMsTnQpLmNhbGwodGhpcyx7bWVzc2FnZToiU3RhdGUgdW4tbWF0Y2hlZCJ9KSwhMSl9ZWxzZSBpZihuW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuRVJST1JdKXtjb25zdCBhPW47cmV0dXJuIGEuZXJyb3IsYS5lcnJvcl9kZXNjcmlwdGlvbixWKHRoaXMsTnQpLmNhbGwodGhpcyx7bWVzc2FnZToiU3RhdGUgdW4tbWF0Y2hlZCJ9KSwhMX1lbHNlIHJldHVybiBWKHRoaXMsTnQpLmNhbGwodGhpcyx7bWVzc2FnZToiU3RhdGUgdW4tbWF0Y2hlZCJ9KSwhMX0pLGNlKHRoaXMsY3IsYXN5bmMgcj0+e2NvbnNvbGUubG9nKCIjR2V0VG9rZW5Gcm9tQnJva2VyIiksVih0aGlzLEZlKS5yZW1vdmUoVih0aGlzLEhlKSk7Y29uc3Qgbj1gJHt7fS5CUk9LRVJfRU5EUE9JTlR9OiR7e30uQlJPS0VSX1BPUlR9JHt7fS5CUk9LRVJfQVBJX1JPT1R9L3Rva2VuYDtjb25zb2xlLmxvZyhgI0dldFRva2VuRnJvbUJyb2tlcjp1cmwgPSBbJHtufV1gKSxjb25zb2xlLmxvZyhyKTt0cnl7Y29uc3Qgcz1hd2FpdCBWbih7bWV0aG9kOiJwb3N0Iix1cmw6bixkYXRhOnIsd2l0aENyZWRlbnRpYWxzOiEwLHRpbWVvdXQ6cGFyc2VJbnQoe30uVElNRU9VVCl9KTtpZihjb25zb2xlLmxvZyhgcmV0VmFsOiAke0pTT04uc3RyaW5naWZ5KHMpfWApLHMuc3RhdHVzPT09aXIuT0spe2NvbnNvbGUubG9nKCJTdG9yaW5nIHRva2Vucy4uLiIpO2NvbnN0IGE9cy5kYXRhO3JldHVybiBWKHRoaXMsS2UpLmNhbGwodGhpcyxhLmlkX3Rva2VuKSxWKHRoaXMsRmUpLnNldChWKHRoaXMsSGUpLGEpLCEwfWVsc2UgaWYocy5zdGF0dXM9PT1pci5VTkFVVEhPUklaRUQpe2NvbnNvbGUubG9nKCJOT1QgU3RvcmluZyB0b2tlbnMuLi4iKSxjb25zb2xlLmxvZyhzLnN0YXR1cyksVih0aGlzLEtlKS5jYWxsKHRoaXMsbnVsbCk7Y29uc3QgYT1zLmRhdGE7cmV0dXJuITF9ZWxzZSByZXR1cm4gY29uc29sZS5sb2coIk5PVCBTdG9yaW5nIHRva2Vucy4uLiIpLGNvbnNvbGUubG9nKHMuc3RhdHVzKSxWKHRoaXMsS2UpLmNhbGwodGhpcyxudWxsKSxjb25zb2xlLmxvZygiQ291bGQgbm90IG9idGFpbiBhY2Nlc3NfdG9rZW4gZnJvbSB0b2tlbiBlbmQtcG9pbnQ6LSIpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHMuZGF0YSkpLCExfWNhdGNoKHMpe3JldHVybiBWKHRoaXMsS2UpLmNhbGwodGhpcyxudWxsKSxjb25zb2xlLmxvZyhzKSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzKSksITF9fSksY2UodGhpcyxqcixhc3luYyhyLG4pPT57Y29uc29sZS5sb2coIiNHZXRUb2tlbiIpLGNvbnNvbGUubG9nKG4pLFYodGhpcyxGZSkuc2V0KFYodGhpcyxIZSksbnVsbCk7Y29uc3Qgcz17Y2xpZW50X2lkOnt9LkNMSUVOVF9JRCxzY29wZTp7fS5TQ09QRSxjb2RlOm4uY29kZSxyZWRpcmVjdF91cmk6e30uUkVESVJFQ1RfVVJJLGdyYW50X3R5cGU6UnMuQVVUSE9SSVpBVElPTl9DT0RFLGNvZGVfdmVyaWZpZXI6ci5jb2RlX3ZlcmlmaWVyfTtyZXR1cm4gVih0aGlzLGNyKS5jYWxsKHRoaXMscyl9KSxjZSh0aGlzLGtyLGFzeW5jKCk9Pntjb25zb2xlLmxvZygiUmVmcmVzaFRva2VuIik7Y29uc3Qgcj1WKHRoaXMsRmUpLmdldChWKHRoaXMsSGUpKTtpZihyKXtjb25zdCBuPXtjbGllbnRfaWQ6e30uQ0xJRU5UX0lELHNjb3BlOnt9LlNDT1BFLHJlZnJlc2hfdG9rZW46ci5yZWZyZXNoX3Rva2VuLGdyYW50X3R5cGU6UnMuUkVGUkVTSF9UT0tFTn07cmV0dXJuIFYodGhpcyxjcikuY2FsbCh0aGlzLG4pfWVsc2UgcmV0dXJuITF9KSxjZSh0aGlzLFVyLGFzeW5jKCk9Pntjb25zb2xlLmxvZygiTG9nb3V0Iik7Y29uc3Qgcj1gJHt7fS5CUk9LRVJfRU5EUE9JTlR9OiR7e30uQlJPS0VSX1BPUlR9JHt7fS5CUk9LRVJfQVBJX1JPT1R9L2xvZ291dGA7Y29uc29sZS5sb2cocik7Y29uc3Qgcz1WKHRoaXMsRmUpLmdldChWKHRoaXMsSGUpKS5yZWZyZXNoX3Rva2VuO2NvbnNvbGUubG9nKHMpO2NvbnN0IGE9amYocyk7Y29uc29sZS5sb2coYSk7Y29uc3Qgbz1hLnN0c19zZXNzaW9uO2NvbnNvbGUubG9nKG8pLFYodGhpcyxGZSkucmVtb3ZlKFYodGhpcyxIZSkpLFYodGhpcyxLZSkuY2FsbCh0aGlzLG51bGwpO3RyeXtjb25zdCBsPWF3YWl0IFZuKHttZXRob2Q6InBvc3QiLHVybDpyLGRhdGE6e3Nlc3Npb25JZDpvfSx3aXRoQ3JlZGVudGlhbHM6ITAsdGltZW91dDpwYXJzZUludCh7fS5USU1FT1VUKX0pO3JldHVybiBsLmRhdGEuc3RhdHVzPT09aXIuT0s/ITA6KGNvbnNvbGUubG9nKCJFcnJvciBkdXJpbmcgbG9nb3V0IChzZXJ2ZXIgc2lkZSkiKSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShsLmRhdGEpKSwhMSl9Y2F0Y2gobCl7cmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciBkdXJpbmcgbG9nb3V0IChzZXJ2ZXIgc2lkZSkiKSxjb25zb2xlLmxvZyhsKSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShsKSksITF9fSksY2UodGhpcyxGZSxuZXcgUWYoe2NsaWVudFN0b3JhZ2VUeXBlOmJvLk1FTU9SWV9TVE9SQUdFfSkuR2V0U3RvcmFnZSgpKSxjZSh0aGlzLEtlLHI9Pntjb25zdCBuPXttZXNzYWdlSWQ6LTEsY29tbWFuZDp6dC5BVVRIRU5USUNBVEVfRVZFTlR9O1YodGhpcyx0dCkuY2FsbCh0aGlzLG4scil9KSxjZSh0aGlzLE50LHI9Pntjb25zdCBuPXttZXNzYWdlSWQ6LTEsY29tbWFuZDp6dC5FUlJPUn07Vih0aGlzLHR0KS5jYWxsKHRoaXMsbixyKX0pLGNlKHRoaXMsS3QsdCksdGhpcy5TZXR1cExpc3RlbmVyKCl9fUZlPW5ldyBXZWFrTWFwLE90PW5ldyBXZWFrTWFwLEFyPW5ldyBXZWFrTWFwLHluPW5ldyBXZWFrTWFwLEhlPW5ldyBXZWFrTWFwLHZ0PW5ldyBXZWFrTWFwLE50PW5ldyBXZWFrTWFwLEtlPW5ldyBXZWFrTWFwLEt0PW5ldyBXZWFrTWFwLCRuPW5ldyBXZWFrTWFwLHR0PW5ldyBXZWFrTWFwLENyPW5ldyBXZWFrTWFwLElyPW5ldyBXZWFrTWFwLERyPW5ldyBXZWFrTWFwLGNyPW5ldyBXZWFrTWFwLGpyPW5ldyBXZWFrTWFwLGtyPW5ldyBXZWFrTWFwLFVyPW5ldyBXZWFrTWFwLG9ubWVzc2FnZT1hc3luYyBmdW5jdGlvbihlKXtjb25zdCB0PWUuZGF0YTtuZXcgWWYodCl9fSkoKTsK";
7205
- const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
7206
- function WorkerWrapper() {
7207
- const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
7208
- try {
7209
- return objURL ? new Worker(objURL, {}) : new Worker("data:application/javascript;base64," + encodedJs, { type: "module" });
7210
- } finally {
7211
- objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
7212
- }
7213
- }
7214
- const debug = Debug(`proc:${process.pid}:stsoauth2manager.ts`);
6731
+ const debug = Debug(`proc:${0}:stsoauth2manager.ts`);
7215
6732
  class STSOAuth2Manager {
7216
6733
  constructor(app, options) {
7217
6734
  __privateAdd(this, _storageManager, void 0);
@@ -7389,7 +6906,7 @@ class STSOAuth2Manager {
7389
6906
  UserDetails(state) {
7390
6907
  if (state.sessionData) {
7391
6908
  const id_token = state.sessionData;
7392
- const decodedIdToken = o(id_token);
6909
+ const decodedIdToken = jwt_decode(id_token);
7393
6910
  return decodedIdToken;
7394
6911
  } else {
7395
6912
  return null;
@@ -7457,7 +6974,7 @@ class STSOAuth2Manager {
7457
6974
  __privateSet(this, _aic, app.config.globalProperties.$sts.aic.PrimaryPublishInstrumentController);
7458
6975
  __privateSet(this, _router, app.config.globalProperties.$router);
7459
6976
  __privateSet(this, _transactionStore, new ClientStorageFactory({ clientStorageType: ClientStorageType.SESSION_STORAGE }).GetStorage());
7460
- __privateSet(this, _worker, new WorkerWrapper());
6977
+ __privateSet(this, _worker, new Worker("/assets/stsoauth2worker.89d58cd7.js"));
7461
6978
  __privateGet(this, _worker).onmessage = (data) => {
7462
6979
  console.log(`this.#worker.onmessage = [${data}]`);
7463
6980
  };
@@ -7499,10 +7016,332 @@ _HandleErrorEvent = new WeakMap();
7499
7016
  _HandleAuthenticateEvent = new WeakMap();
7500
7017
  _SetupRoute = new WeakMap();
7501
7018
  _SetupStoreNamespace = new WeakMap();
7019
+ Debug(`proc:${0}:stsoauth2worker.ts`);
7020
+ class STSOAuth2Worker {
7021
+ constructor(workerPort) {
7022
+ __privateAdd(this, _clientSessionStore, void 0);
7023
+ __privateAdd(this, _cUtils2, void 0);
7024
+ __privateAdd(this, _qParams2, void 0);
7025
+ __privateAdd(this, _STORAGE_AUTHORIZE_OPTIONS_KEY2, void 0);
7026
+ __privateAdd(this, _STORAGE_SESSION_KEY2, void 0);
7027
+ __privateAdd(this, _aic2, void 0);
7028
+ __privateAdd(this, _errorCallback, void 0);
7029
+ __privateAdd(this, _handleAuthenticateEvent, void 0);
7030
+ __privateAdd(this, _oauthWorkerPort, void 0);
7031
+ __privateAdd(this, _currentMessageId, void 0);
7032
+ __privateAdd(this, _ProcessCommand, void 0);
7033
+ __privateAdd(this, _RestoreSession, void 0);
7034
+ __privateAdd(this, _Authorize, void 0);
7035
+ __privateAdd(this, _HandleRedirect, void 0);
7036
+ __privateAdd(this, _GetTokenFromBroker, void 0);
7037
+ __privateAdd(this, _GetToken, void 0);
7038
+ __privateAdd(this, _RefreshToken, void 0);
7039
+ __privateAdd(this, _Logout, void 0);
7040
+ __privateSet(this, _clientSessionStore, null);
7041
+ __privateSet(this, _cUtils2, new CryptoUtils());
7042
+ __privateSet(this, _qParams2, new QueryParams());
7043
+ __privateSet(this, _STORAGE_AUTHORIZE_OPTIONS_KEY2, "authorize_options.stsmda.com.au");
7044
+ __privateSet(this, _STORAGE_SESSION_KEY2, "session.stsmda.com.au");
7045
+ __privateSet(this, _aic2, null);
7046
+ __privateSet(this, _errorCallback, null);
7047
+ __privateSet(this, _handleAuthenticateEvent, null);
7048
+ __privateSet(this, _oauthWorkerPort, null);
7049
+ __privateSet(this, _currentMessageId, 0);
7050
+ this.SetupListener = () => {
7051
+ __privateGet(this, _oauthWorkerPort).onmessage = async (data) => {
7052
+ const auth2ListenerMessage = data.data;
7053
+ switch (auth2ListenerMessage.command) {
7054
+ case IOauth2ListenerCommand.RESTORE_SESSION:
7055
+ __privateGet(this, _ProcessCommand).call(this, auth2ListenerMessage, await __privateGet(this, _RestoreSession).call(this));
7056
+ break;
7057
+ case IOauth2ListenerCommand.AUTHORIZE:
7058
+ __privateGet(this, _ProcessCommand).call(this, auth2ListenerMessage, await __privateGet(this, _Authorize).call(this));
7059
+ break;
7060
+ case IOauth2ListenerCommand.HANDLE_REDIRECT:
7061
+ __privateGet(this, _ProcessCommand).call(this, auth2ListenerMessage, await __privateGet(this, _HandleRedirect).call(this, auth2ListenerMessage.payload));
7062
+ break;
7063
+ case IOauth2ListenerCommand.LOGOUT:
7064
+ __privateGet(this, _ProcessCommand).call(this, auth2ListenerMessage, await __privateGet(this, _Logout).call(this));
7065
+ break;
7066
+ default:
7067
+ throw new Error(`Command: [${auth2ListenerMessage.command}'] not found.`);
7068
+ }
7069
+ };
7070
+ };
7071
+ __privateSet(this, _ProcessCommand, async (auth2ListenerMessage, response) => {
7072
+ const messageResponse = {
7073
+ messageId: auth2ListenerMessage.messageId,
7074
+ command: auth2ListenerMessage.command,
7075
+ payload: response
7076
+ };
7077
+ __privateGet(this, _oauthWorkerPort).postMessage(messageResponse);
7078
+ });
7079
+ __privateSet(this, _RestoreSession, async () => {
7080
+ let restoredSessionData = null;
7081
+ restoredSessionData = __privateGet(this, _clientSessionStore).get(__privateGet(this, _STORAGE_SESSION_KEY2));
7082
+ if (restoredSessionData !== null) {
7083
+ console.log("Session restored from client storage.");
7084
+ if (__privateGet(this, _aic2)) {
7085
+ __privateGet(this, _aic2).UpdateInstrument("m", { LogMessage: "Session restored from client storage." });
7086
+ }
7087
+ } else {
7088
+ const url = `${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_ENDPOINT}:${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_PORT}${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_API_ROOT}/session`;
7089
+ console.log("RestoreSession");
7090
+ console.log(url);
7091
+ if (__privateGet(this, _aic2)) {
7092
+ __privateGet(this, _aic2).UpdateInstrument("m", { LogMessage: "RestoreSession" });
7093
+ __privateGet(this, _aic2).UpdateInstrument("m", { LogMessage: url });
7094
+ }
7095
+ try {
7096
+ const retVal = await axios({
7097
+ method: "post",
7098
+ url,
7099
+ data: {
7100
+ [dist.OAuth2ParameterType.CLIENT_ID]: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.CLIENT_ID,
7101
+ [dist.OAuth2ParameterType.SCOPE]: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.SCOPE,
7102
+ [dist.OAuth2ParameterType.REDIRECT_URI]: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.REDIRECT_URI,
7103
+ [dist.OAuth2ParameterType.AUDIENCE]: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.AUDIENCE
7104
+ },
7105
+ withCredentials: true,
7106
+ timeout: parseInt({ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.TIMEOUT)
7107
+ });
7108
+ if (retVal.data.status === StatusCodes.OK) {
7109
+ restoredSessionData = retVal.data.detail;
7110
+ __privateGet(this, _clientSessionStore).set(__privateGet(this, _STORAGE_SESSION_KEY2), restoredSessionData);
7111
+ console.log("Session restored from server side cookie.");
7112
+ } else {
7113
+ console.log("Could not restore previous session:-");
7114
+ console.log(JSON.stringify(retVal.data));
7115
+ }
7116
+ } catch (error2) {
7117
+ console.log("Could not restore previous session (error state):-");
7118
+ console.log(error2);
7119
+ console.log(JSON.stringify(error2));
7120
+ }
7121
+ }
7122
+ if (restoredSessionData !== null) {
7123
+ __privateGet(this, _handleAuthenticateEvent).call(this, restoredSessionData.id_token);
7124
+ console.log("Refreshing tokens ...");
7125
+ return __privateGet(this, _RefreshToken).call(this);
7126
+ } else {
7127
+ __privateGet(this, _handleAuthenticateEvent).call(this, null);
7128
+ return false;
7129
+ }
7130
+ });
7131
+ __privateSet(this, _Authorize, async () => {
7132
+ console.log("Authorize ...");
7133
+ const client_id = { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.CLIENT_ID;
7134
+ const nonce = __privateGet(this, _cUtils2).CreateRandomString();
7135
+ const response_type = [AuthorizeOptionsResponseType.CODE];
7136
+ const redirect_uri = { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.REDIRECT_URI;
7137
+ const response_mode = AuthorizeOptionsResponseMode.QUERY;
7138
+ const scope2 = { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.SCOPE;
7139
+ const state = __privateGet(this, _cUtils2).CreateRandomString();
7140
+ const code_verifier = __privateGet(this, _cUtils2).CreateRandomString();
7141
+ const code_challenge = await __privateGet(this, _cUtils2).DigestMessage(code_verifier);
7142
+ const code_challenge_method = "S256";
7143
+ const authorizeOptions = {
7144
+ client_id,
7145
+ nonce,
7146
+ response_type,
7147
+ redirect_uri,
7148
+ response_mode,
7149
+ scope: scope2,
7150
+ state,
7151
+ code_challenge,
7152
+ code_challenge_method
7153
+ };
7154
+ const url = `${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.AUTH_ENDPOINT}:${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.AUTH_PORT}${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.AUTH_APIROOT}?${__privateGet(this, _qParams2).CreateQueryParams(authorizeOptions)}`;
7155
+ console.log(url);
7156
+ authorizeOptions.code_verifier = code_verifier;
7157
+ console.log(`Authorize:authorizeOptions: [${JSON.stringify(authorizeOptions)}]`);
7158
+ return {
7159
+ url,
7160
+ authorizeOptions
7161
+ };
7162
+ });
7163
+ __privateSet(this, _HandleRedirect, async (payload) => {
7164
+ const queryVars = payload.queryVars;
7165
+ const authorizeOptions = payload.authorizeOptions;
7166
+ console.log("HandleRedirect");
7167
+ console.log(`HandleRedirect:Query Vars: [${JSON.stringify(queryVars)}]`);
7168
+ if (queryVars[dist.OAuth2ParameterType.CODE]) {
7169
+ const response = queryVars;
7170
+ console.log(`authorizeOptions from transaction state: [${JSON.stringify(authorizeOptions)}]`);
7171
+ const redirectState = response.state;
7172
+ const authorizeOptionsState = authorizeOptions.state;
7173
+ if (authorizeOptionsState.localeCompare(redirectState) === 0) {
7174
+ console.log("redirected state (from queryVars) matched previously saved transaction authorizeOptions state");
7175
+ return await __privateGet(this, _GetToken).call(this, authorizeOptions, response);
7176
+ } else {
7177
+ console.log("redirected state (from queryVars) did NOT match previously saved transaction authorizeOptions state");
7178
+ __privateGet(this, _errorCallback).call(this, { message: "State un-matched" });
7179
+ return false;
7180
+ }
7181
+ } else if (queryVars[dist.OAuth2ParameterType.ERROR]) {
7182
+ const response = queryVars;
7183
+ response.error;
7184
+ response.error_description;
7185
+ __privateGet(this, _errorCallback).call(this, { message: "State un-matched" });
7186
+ return false;
7187
+ } else {
7188
+ __privateGet(this, _errorCallback).call(this, { message: "State un-matched" });
7189
+ return false;
7190
+ }
7191
+ });
7192
+ __privateSet(this, _GetTokenFromBroker, async (authorizationCodeFlowParameters) => {
7193
+ console.log("#GetTokenFromBroker");
7194
+ __privateGet(this, _clientSessionStore).remove(__privateGet(this, _STORAGE_SESSION_KEY2));
7195
+ const url = `${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_ENDPOINT}:${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_PORT}${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_API_ROOT}/token`;
7196
+ console.log(`#GetTokenFromBroker:url = [${url}]`);
7197
+ console.log(authorizationCodeFlowParameters);
7198
+ try {
7199
+ const retVal = await axios({
7200
+ method: "post",
7201
+ url,
7202
+ data: authorizationCodeFlowParameters,
7203
+ withCredentials: true,
7204
+ timeout: parseInt({ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.TIMEOUT)
7205
+ });
7206
+ console.log(`retVal: ${JSON.stringify(retVal)}`);
7207
+ if (retVal.status === StatusCodes.OK) {
7208
+ console.log("Storing tokens...");
7209
+ const tokenResponse = retVal.data;
7210
+ __privateGet(this, _handleAuthenticateEvent).call(this, tokenResponse.id_token);
7211
+ __privateGet(this, _clientSessionStore).set(__privateGet(this, _STORAGE_SESSION_KEY2), tokenResponse);
7212
+ return true;
7213
+ } else if (retVal.status === StatusCodes.UNAUTHORIZED) {
7214
+ console.log("NOT Storing tokens...");
7215
+ console.log(retVal.status);
7216
+ __privateGet(this, _handleAuthenticateEvent).call(this, null);
7217
+ const response = retVal.data;
7218
+ return false;
7219
+ } else {
7220
+ console.log("NOT Storing tokens...");
7221
+ console.log(retVal.status);
7222
+ __privateGet(this, _handleAuthenticateEvent).call(this, null);
7223
+ console.log("Could not obtain access_token from token end-point:-");
7224
+ console.log(JSON.stringify(retVal.data));
7225
+ return false;
7226
+ }
7227
+ } catch (error2) {
7228
+ __privateGet(this, _handleAuthenticateEvent).call(this, null);
7229
+ console.log(error2);
7230
+ console.log(JSON.stringify(error2));
7231
+ return false;
7232
+ }
7233
+ });
7234
+ __privateSet(this, _GetToken, async (authorizeOptions, authorizeResponse) => {
7235
+ console.log("#GetToken");
7236
+ console.log(authorizeResponse);
7237
+ __privateGet(this, _clientSessionStore).set(__privateGet(this, _STORAGE_SESSION_KEY2), null);
7238
+ const authorizationCodeFlowParameters = {
7239
+ client_id: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.CLIENT_ID,
7240
+ scope: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.SCOPE,
7241
+ code: authorizeResponse.code,
7242
+ redirect_uri: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.REDIRECT_URI,
7243
+ grant_type: OAuthGrantTypes.AUTHORIZATION_CODE,
7244
+ code_verifier: authorizeOptions.code_verifier
7245
+ };
7246
+ return __privateGet(this, _GetTokenFromBroker).call(this, authorizationCodeFlowParameters);
7247
+ });
7248
+ __privateSet(this, _RefreshToken, async () => {
7249
+ console.log("RefreshToken");
7250
+ const currentSessionData = __privateGet(this, _clientSessionStore).get(__privateGet(this, _STORAGE_SESSION_KEY2));
7251
+ if (currentSessionData) {
7252
+ const refreshFlowParameters = {
7253
+ client_id: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.CLIENT_ID,
7254
+ scope: { "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.SCOPE,
7255
+ refresh_token: currentSessionData.refresh_token,
7256
+ grant_type: OAuthGrantTypes.REFRESH_TOKEN
7257
+ };
7258
+ return __privateGet(this, _GetTokenFromBroker).call(this, refreshFlowParameters);
7259
+ } else {
7260
+ return false;
7261
+ }
7262
+ });
7263
+ __privateSet(this, _Logout, async () => {
7264
+ console.log("Logout");
7265
+ const url = `${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_ENDPOINT}:${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_PORT}${{ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.BROKER_API_ROOT}/logout`;
7266
+ console.log(url);
7267
+ const currentSessionData = __privateGet(this, _clientSessionStore).get(__privateGet(this, _STORAGE_SESSION_KEY2));
7268
+ const refresh_token = currentSessionData.refresh_token;
7269
+ console.log(refresh_token);
7270
+ const decodedRefreshToken = jwt_decode(refresh_token);
7271
+ console.log(decodedRefreshToken);
7272
+ const sessionId = decodedRefreshToken.sts_session;
7273
+ console.log(sessionId);
7274
+ __privateGet(this, _clientSessionStore).remove(__privateGet(this, _STORAGE_SESSION_KEY2));
7275
+ __privateGet(this, _handleAuthenticateEvent).call(this, null);
7276
+ try {
7277
+ const retVal = await axios({
7278
+ method: "post",
7279
+ url,
7280
+ data: {
7281
+ sessionId
7282
+ },
7283
+ withCredentials: true,
7284
+ timeout: parseInt({ "DEPLOYMENT_BASEPATH": "/opt/runner", "DOTNET_NOLOGO": "1", "USER": "runner", "npm_config_always_auth": "", "npm_config_user_agent": "npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions", "CI": "true", "GITHUB_ENV": "/home/runner/work/_temp/_runner_file_commands/set_env_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "PIPX_HOME": "/opt/pipx", "npm_node_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "JAVA_HOME_8_X64": "/usr/lib/jvm/temurin-8-jdk-amd64", "NODE_AUTH_TOKEN": "XXXXX-XXXXX-XXXXX-XXXXX", "SHLVL": "1", "npm_config_noproxy": "", "HOME": "/home/runner", "RUNNER_TEMP": "/home/runner/work/_temp", "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json", "npm_package_json": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json", "JAVA_HOME_11_X64": "/usr/lib/jvm/temurin-11-jdk-amd64", "PIPX_BIN_DIR": "/opt/pipx_bin", "GRAALVM_11_ROOT": "/usr/local/graalvm/graalvm-ce-java11-22.1.0", "GITHUB_REPOSITORY_OWNER": "nsshunt", "GRADLE_HOME": "/usr/share/gradle-7.4.2", "HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew", "ANDROID_NDK_LATEST_HOME": "/usr/local/lib/android/sdk/ndk/24.0.8215888", "GITHUB_RETENTION_DAYS": "90", "POWERSHELL_DISTRIBUTION_CHANNEL": "GitHub-Actions-ubuntu20", "AZURE_EXTENSION_DIR": "/opt/az/azcliextensions", "GITHUB_HEAD_REF": "", "npm_config_local_prefix": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "GITHUB_GRAPHQL_URL": "https://api.github.com/graphql", "COLOR": "0", "NVM_DIR": "/home/runner/.nvm", "npm_config_metrics_registry": "https://registry.npmjs.org/", "DOTNET_SKIP_FIRST_TIME_EXPERIENCE": "1", "JAVA_HOME_17_X64": "/usr/lib/jvm/temurin-17-jdk-amd64", "ImageVersion": "20220605.1", "RUNNER_OS": "Linux", "GITHUB_API_URL": "https://api.github.com", "SWIFT_PATH": "/usr/share/swift/usr/bin", "RUNNER_USER": "runner", "CHROMEWEBDRIVER": "/usr/local/share/chrome_driver", "JOURNAL_STREAM": "8:22250", "GITHUB_WORKFLOW": "Node.js Package", "_": "/opt/hostedtoolcache/node/18.3.0/x64/bin/npm", "npm_config_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "GITHUB_RUN_ID": "2484847983", "GOROOT_1_16_X64": "/opt/hostedtoolcache/go/1.16.15/x64", "npm_config_cache": "/home/runner/.npm", "GOROOT_1_17_X64": "/opt/hostedtoolcache/go/1.17.11/x64", "GITHUB_REF_TYPE": "branch", "BOOTSTRAP_HASKELL_NONINTERACTIVE": "1", "GITHUB_BASE_REF": "", "ImageOS": "ubuntu20", "PERFLOG_LOCATION_SETTING": "RUNNER_PERFLOG", "GOROOT_1_18_X64": "/opt/hostedtoolcache/go/1.18.3/x64", "GITHUB_ACTION_REPOSITORY": "", "npm_config_node_gyp": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", "PATH": "/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "ANT_HOME": "/usr/share/ant", "DOTNET_MULTILEVEL_LOOKUP": "0", "RUNNER_TRACKING_ID": "github_fa2c496f-50e8-4593-ba9e-cf1da70ce15b", "INVOCATION_ID": "8c28e956d78447ddbd435529fcfd061a", "HOMEBREW_CELLAR": "/home/linuxbrew/.linuxbrew/Cellar", "NPM_CONFIG_USERCONFIG": "/home/runner/work/_temp/.npmrc", "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache", "NODE": "/opt/hostedtoolcache/node/18.3.0/x64/bin/node", "npm_package_name": "@nsshunt/stsoauth2plugin", "GITHUB_ACTION": "__run_2", "GITHUB_RUN_NUMBER": "27", "RUNNER_ARCH": "X64", "AGENT_TOOLSDIRECTORY": "/opt/hostedtoolcache", "LANG": "C.UTF-8", "VCPKG_INSTALLATION_ROOT": "/usr/local/share/vcpkg", "CONDA": "/usr/share/miniconda", "RUNNER_NAME": "Hosted Agent", "XDG_CONFIG_HOME": "/home/runner/.config", "GITHUB_REF_NAME": "main", "GITHUB_REPOSITORY": "nsshunt/stsoauth2plugin", "npm_lifecycle_script": "tsc && vite build", "ANDROID_NDK_ROOT": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_ACTION_REF": "", "DEBIAN_FRONTEND": "noninteractive", "GITHUB_ACTIONS": "true", "npm_package_version": "0.1.15", "npm_lifecycle_event": "build", "GITHUB_REF_PROTECTED": "false", "GITHUB_WORKSPACE": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "ACCEPT_EULA": "Y", "GITHUB_JOB": "publish-npm", "RUNNER_PERFLOG": "/home/runner/perflog", "GITHUB_SHA": "91ec1040c19729a209924fa7148fe3080737ee37", "GITHUB_RUN_ATTEMPT": "1", "GITHUB_REF": "refs/heads/main", "GITHUB_ACTOR": "nsshunt", "ANDROID_SDK_ROOT": "/usr/local/lib/android/sdk", "LEIN_HOME": "/usr/local/lib/lein", "npm_config_globalconfig": "/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc", "npm_config_init_module": "/home/runner/.npm-init.js", "GITHUB_PATH": "/home/runner/work/_temp/_runner_file_commands/add_path_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "JAVA_HOME": "/usr/lib/jvm/temurin-11-jdk-amd64", "PWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "RUNNER_WORKSPACE": "/home/runner/work/stsoauth2plugin", "npm_execpath": "/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js", "HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS": "3650", "GITHUB_EVENT_NAME": "push", "HOMEBREW_NO_AUTO_UPDATE": "1", "ANDROID_HOME": "/usr/local/lib/android/sdk", "GITHUB_SERVER_URL": "https://github.com", "GECKOWEBDRIVER": "/usr/local/share/gecko_driver", "LEIN_JAR": "/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar", "npm_config_global_prefix": "/opt/hostedtoolcache/node/18.3.0/x64", "HOMEBREW_REPOSITORY": "/home/linuxbrew/.linuxbrew/Homebrew", "npm_command": "run-script", "SGX_AESM_ADDR": "1", "CHROME_BIN": "/usr/bin/google-chrome", "SELENIUM_JAR_PATH": "/usr/share/java/selenium-server.jar", "ANDROID_NDK_HOME": "/usr/local/lib/android/sdk/ndk-bundle", "GITHUB_STEP_SUMMARY": "/home/runner/work/_temp/_runner_file_commands/step_summary_f3b776ac-3bd1-4a8a-a444-79ce281630cf", "INIT_CWD": "/home/runner/work/stsoauth2plugin/stsoauth2plugin", "EDITOR": "vi", "NODE_ENV": "production" }.TIMEOUT)
7285
+ });
7286
+ if (retVal.data.status === StatusCodes.OK) {
7287
+ return true;
7288
+ } else {
7289
+ console.log("Error during logout (server side)");
7290
+ console.log(JSON.stringify(retVal.data));
7291
+ return false;
7292
+ }
7293
+ } catch (error2) {
7294
+ console.log("Error during logout (server side)");
7295
+ console.log(error2);
7296
+ console.log(JSON.stringify(error2));
7297
+ return false;
7298
+ }
7299
+ });
7300
+ __privateSet(this, _clientSessionStore, new ClientStorageFactory({ clientStorageType: ClientStorageType.MEMORY_STORAGE }).GetStorage());
7301
+ __privateSet(this, _handleAuthenticateEvent, (id_token) => {
7302
+ const message = {
7303
+ messageId: -1,
7304
+ command: IOauth2ListenerCommand.AUTHENTICATE_EVENT
7305
+ };
7306
+ __privateGet(this, _ProcessCommand).call(this, message, id_token);
7307
+ });
7308
+ __privateSet(this, _errorCallback, (error2) => {
7309
+ const message = {
7310
+ messageId: -1,
7311
+ command: IOauth2ListenerCommand.ERROR
7312
+ };
7313
+ __privateGet(this, _ProcessCommand).call(this, message, error2);
7314
+ });
7315
+ __privateSet(this, _oauthWorkerPort, workerPort);
7316
+ this.SetupListener();
7317
+ }
7318
+ }
7319
+ _clientSessionStore = new WeakMap();
7320
+ _cUtils2 = new WeakMap();
7321
+ _qParams2 = new WeakMap();
7322
+ _STORAGE_AUTHORIZE_OPTIONS_KEY2 = new WeakMap();
7323
+ _STORAGE_SESSION_KEY2 = new WeakMap();
7324
+ _aic2 = new WeakMap();
7325
+ _errorCallback = new WeakMap();
7326
+ _handleAuthenticateEvent = new WeakMap();
7327
+ _oauthWorkerPort = new WeakMap();
7328
+ _currentMessageId = new WeakMap();
7329
+ _ProcessCommand = new WeakMap();
7330
+ _RestoreSession = new WeakMap();
7331
+ _Authorize = new WeakMap();
7332
+ _HandleRedirect = new WeakMap();
7333
+ _GetTokenFromBroker = new WeakMap();
7334
+ _GetToken = new WeakMap();
7335
+ _RefreshToken = new WeakMap();
7336
+ _Logout = new WeakMap();
7337
+ onmessage = async function(data) {
7338
+ const workerPort = data.data;
7339
+ new STSOAuth2Worker(workerPort);
7340
+ };
7502
7341
  const STSOAuth2ManagerPlugin = {
7503
7342
  install: (app, router) => {
7504
7343
  const om = new STSOAuth2Manager(app, router);
7505
7344
  app.config.globalProperties.$sts.om = om;
7506
7345
  }
7507
7346
  };
7508
- export { AuthorizeOptionsResponseMode, AuthorizeOptionsResponseType, IOauth2ListenerCommand, OAuthGrantTypes, STSOAuth2Manager, STSOAuth2ManagerPlugin };
7347
+ export { AuthorizeOptionsResponseMode, AuthorizeOptionsResponseType, IOauth2ListenerCommand, OAuthGrantTypes, STSOAuth2Manager, STSOAuth2ManagerPlugin, STSOAuth2Worker };