audio-mixer-ui 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio-mixer-ui.js +143 -136
- package/dist/audio-mixer-ui.umd.cjs +12 -12
- package/package.json +1 -1
package/dist/audio-mixer-ui.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref as x, watch as v, unref as T, onScopeDispose as
|
|
1
|
+
import { ref as x, watch as v, unref as T, onScopeDispose as VU, readonly as El, mergeModels as Sl, useCssVars as Ul, computed as J, useTemplateRef as f, useModel as $, createElementBlock as y, openBlock as N, normalizeClass as L, createElementVNode as h, createCommentVNode as _, Fragment as nl, renderList as Xl, normalizeStyle as gl, renderSlot as Ql, toDisplayString as K, onUnmounted as cl, watchEffect as kl, onMounted as bl, createVNode as C, withCtx as w, createTextVNode as Nl, withDirectives as Kl, withKeys as aU, vModelText as Hl, withModifiers as Tl, createBlock as Rl } from "vue";
|
|
2
2
|
import { defineStore as sl } from "pinia";
|
|
3
3
|
var Dl = function() {
|
|
4
4
|
if (typeof Map < "u")
|
|
@@ -48,25 +48,25 @@ var Dl = function() {
|
|
|
48
48
|
);
|
|
49
49
|
}(), Gl = typeof window < "u" && typeof document < "u" && window.document === document, ml = function() {
|
|
50
50
|
return typeof global < "u" && global.Math === Math ? global : typeof self < "u" && self.Math === Math ? self : typeof window < "u" && window.Math === Math ? window : Function("return this")();
|
|
51
|
-
}(),
|
|
51
|
+
}(), nU = function() {
|
|
52
52
|
return typeof requestAnimationFrame == "function" ? requestAnimationFrame.bind(ml) : function(t) {
|
|
53
53
|
return setTimeout(function() {
|
|
54
54
|
return t(Date.now());
|
|
55
55
|
}, 1e3 / 60);
|
|
56
56
|
};
|
|
57
|
-
}(),
|
|
58
|
-
function
|
|
57
|
+
}(), RU = 2;
|
|
58
|
+
function mU(t, l) {
|
|
59
59
|
var U = !1, F = !1, d = 0;
|
|
60
60
|
function Z() {
|
|
61
61
|
U && (U = !1, t()), F && V();
|
|
62
62
|
}
|
|
63
63
|
function Q() {
|
|
64
|
-
|
|
64
|
+
nU(Z);
|
|
65
65
|
}
|
|
66
66
|
function V() {
|
|
67
67
|
var a = Date.now();
|
|
68
68
|
if (U) {
|
|
69
|
-
if (a - d <
|
|
69
|
+
if (a - d < RU)
|
|
70
70
|
return;
|
|
71
71
|
F = !0;
|
|
72
72
|
} else
|
|
@@ -75,11 +75,11 @@ function RU(t, l) {
|
|
|
75
75
|
}
|
|
76
76
|
return V;
|
|
77
77
|
}
|
|
78
|
-
var
|
|
78
|
+
var eU = 20, WU = ["top", "right", "bottom", "left", "width", "height", "size", "weight"], cU = typeof MutationObserver < "u", bU = (
|
|
79
79
|
/** @class */
|
|
80
80
|
function() {
|
|
81
81
|
function t() {
|
|
82
|
-
this.connected_ = !1, this.mutationEventsAdded_ = !1, this.mutationsObserver_ = null, this.observers_ = [], this.onTransitionEnd_ = this.onTransitionEnd_.bind(this), this.refresh =
|
|
82
|
+
this.connected_ = !1, this.mutationEventsAdded_ = !1, this.mutationsObserver_ = null, this.observers_ = [], this.onTransitionEnd_ = this.onTransitionEnd_.bind(this), this.refresh = mU(this.refresh.bind(this), eU);
|
|
83
83
|
}
|
|
84
84
|
return t.prototype.addObserver = function(l) {
|
|
85
85
|
~this.observers_.indexOf(l) || this.observers_.push(l), this.connected_ || this.connect_();
|
|
@@ -97,7 +97,7 @@ var mU = 20, eU = ["top", "right", "bottom", "left", "width", "height", "size",
|
|
|
97
97
|
return U.broadcastActive();
|
|
98
98
|
}), l.length > 0;
|
|
99
99
|
}, t.prototype.connect_ = function() {
|
|
100
|
-
!Gl || this.connected_ || (document.addEventListener("transitionend", this.onTransitionEnd_), window.addEventListener("resize", this.refresh),
|
|
100
|
+
!Gl || this.connected_ || (document.addEventListener("transitionend", this.onTransitionEnd_), window.addEventListener("resize", this.refresh), cU ? (this.mutationsObserver_ = new MutationObserver(this.refresh), this.mutationsObserver_.observe(document, {
|
|
101
101
|
attributes: !0,
|
|
102
102
|
childList: !0,
|
|
103
103
|
characterData: !0,
|
|
@@ -106,7 +106,7 @@ var mU = 20, eU = ["top", "right", "bottom", "left", "width", "height", "size",
|
|
|
106
106
|
}, t.prototype.disconnect_ = function() {
|
|
107
107
|
!Gl || !this.connected_ || (document.removeEventListener("transitionend", this.onTransitionEnd_), window.removeEventListener("resize", this.refresh), this.mutationsObserver_ && this.mutationsObserver_.disconnect(), this.mutationEventsAdded_ && document.removeEventListener("DOMSubtreeModified", this.refresh), this.mutationsObserver_ = null, this.mutationEventsAdded_ = !1, this.connected_ = !1);
|
|
108
108
|
}, t.prototype.onTransitionEnd_ = function(l) {
|
|
109
|
-
var U = l.propertyName, F = U === void 0 ? "" : U, d =
|
|
109
|
+
var U = l.propertyName, F = U === void 0 ? "" : U, d = WU.some(function(Z) {
|
|
110
110
|
return !!~F.indexOf(Z);
|
|
111
111
|
});
|
|
112
112
|
d && this.refresh();
|
|
@@ -140,42 +140,42 @@ function rl(t) {
|
|
|
140
140
|
return F + el(Z);
|
|
141
141
|
}, 0);
|
|
142
142
|
}
|
|
143
|
-
function
|
|
143
|
+
function sU(t) {
|
|
144
144
|
for (var l = ["top", "right", "bottom", "left"], U = {}, F = 0, d = l; F < d.length; F++) {
|
|
145
145
|
var Z = d[F], Q = t["padding-" + Z];
|
|
146
146
|
U[Z] = el(Q);
|
|
147
147
|
}
|
|
148
148
|
return U;
|
|
149
149
|
}
|
|
150
|
-
function
|
|
150
|
+
function hU(t) {
|
|
151
151
|
var l = t.getBBox();
|
|
152
152
|
return hl(0, 0, l.width, l.height);
|
|
153
153
|
}
|
|
154
|
-
function
|
|
154
|
+
function BU(t) {
|
|
155
155
|
var l = t.clientWidth, U = t.clientHeight;
|
|
156
156
|
if (!l && !U)
|
|
157
157
|
return ql;
|
|
158
|
-
var F = Zl(t).getComputedStyle(t), d =
|
|
159
|
-
if (F.boxSizing === "border-box" && (Math.round(V + Z) !== l && (V -= rl(F, "left", "right") + Z), Math.round(a + Q) !== U && (a -= rl(F, "top", "bottom") + Q)), !
|
|
158
|
+
var F = Zl(t).getComputedStyle(t), d = sU(F), Z = d.left + d.right, Q = d.top + d.bottom, V = el(F.width), a = el(F.height);
|
|
159
|
+
if (F.boxSizing === "border-box" && (Math.round(V + Z) !== l && (V -= rl(F, "left", "right") + Z), Math.round(a + Q) !== U && (a -= rl(F, "top", "bottom") + Q)), !uU(t)) {
|
|
160
160
|
var n = Math.round(V + Z) - l, R = Math.round(a + Q) - U;
|
|
161
161
|
Math.abs(n) !== 1 && (V -= n), Math.abs(R) !== 1 && (a -= R);
|
|
162
162
|
}
|
|
163
163
|
return hl(d.left, d.top, V, a);
|
|
164
164
|
}
|
|
165
|
-
var
|
|
165
|
+
var iU = /* @__PURE__ */ function() {
|
|
166
166
|
return typeof SVGGraphicsElement < "u" ? function(t) {
|
|
167
167
|
return t instanceof Zl(t).SVGGraphicsElement;
|
|
168
168
|
} : function(t) {
|
|
169
169
|
return t instanceof Zl(t).SVGElement && typeof t.getBBox == "function";
|
|
170
170
|
};
|
|
171
171
|
}();
|
|
172
|
-
function iU(t) {
|
|
173
|
-
return t === Zl(t).document.documentElement;
|
|
174
|
-
}
|
|
175
172
|
function uU(t) {
|
|
176
|
-
return
|
|
173
|
+
return t === Zl(t).document.documentElement;
|
|
177
174
|
}
|
|
178
175
|
function JU(t) {
|
|
176
|
+
return Gl ? iU(t) ? hU(t) : BU(t) : ql;
|
|
177
|
+
}
|
|
178
|
+
function GU(t) {
|
|
179
179
|
var l = t.x, U = t.y, F = t.width, d = t.height, Z = typeof DOMRectReadOnly < "u" ? DOMRectReadOnly : Object, Q = Object.create(Z.prototype);
|
|
180
180
|
return jl(Q, {
|
|
181
181
|
x: l,
|
|
@@ -191,30 +191,30 @@ function JU(t) {
|
|
|
191
191
|
function hl(t, l, U, F) {
|
|
192
192
|
return { x: t, y: l, width: U, height: F };
|
|
193
193
|
}
|
|
194
|
-
var
|
|
194
|
+
var oU = (
|
|
195
195
|
/** @class */
|
|
196
196
|
function() {
|
|
197
197
|
function t(l) {
|
|
198
198
|
this.broadcastWidth = 0, this.broadcastHeight = 0, this.contentRect_ = hl(0, 0, 0, 0), this.target = l;
|
|
199
199
|
}
|
|
200
200
|
return t.prototype.isActive = function() {
|
|
201
|
-
var l =
|
|
201
|
+
var l = JU(this.target);
|
|
202
202
|
return this.contentRect_ = l, l.width !== this.broadcastWidth || l.height !== this.broadcastHeight;
|
|
203
203
|
}, t.prototype.broadcastRect = function() {
|
|
204
204
|
var l = this.contentRect_;
|
|
205
205
|
return this.broadcastWidth = l.width, this.broadcastHeight = l.height, l;
|
|
206
206
|
}, t;
|
|
207
207
|
}()
|
|
208
|
-
),
|
|
208
|
+
), SU = (
|
|
209
209
|
/** @class */
|
|
210
210
|
/* @__PURE__ */ function() {
|
|
211
211
|
function t(l, U) {
|
|
212
|
-
var F =
|
|
212
|
+
var F = GU(U);
|
|
213
213
|
jl(this, { target: l, contentRect: F });
|
|
214
214
|
}
|
|
215
215
|
return t;
|
|
216
216
|
}()
|
|
217
|
-
),
|
|
217
|
+
), XU = (
|
|
218
218
|
/** @class */
|
|
219
219
|
function() {
|
|
220
220
|
function t(l, U, F) {
|
|
@@ -229,7 +229,7 @@ var GU = (
|
|
|
229
229
|
if (!(l instanceof Zl(l).Element))
|
|
230
230
|
throw new TypeError('parameter 1 is not of type "Element".');
|
|
231
231
|
var U = this.observations_;
|
|
232
|
-
U.has(l) || (U.set(l, new
|
|
232
|
+
U.has(l) || (U.set(l, new oU(l)), this.controller_.addObserver(this), this.controller_.refresh());
|
|
233
233
|
}
|
|
234
234
|
}, t.prototype.unobserve = function(l) {
|
|
235
235
|
if (!arguments.length)
|
|
@@ -250,7 +250,7 @@ var GU = (
|
|
|
250
250
|
}, t.prototype.broadcastActive = function() {
|
|
251
251
|
if (this.hasActive()) {
|
|
252
252
|
var l = this.callbackCtx_, U = this.activeObservations_.map(function(F) {
|
|
253
|
-
return new
|
|
253
|
+
return new SU(F.target, F.broadcastRect());
|
|
254
254
|
});
|
|
255
255
|
this.callback_.call(l, U, l), this.clearActive();
|
|
256
256
|
}
|
|
@@ -268,7 +268,7 @@ var GU = (
|
|
|
268
268
|
throw new TypeError("Cannot call a class as a function.");
|
|
269
269
|
if (!arguments.length)
|
|
270
270
|
throw new TypeError("1 argument required, but only 0 present.");
|
|
271
|
-
var U =
|
|
271
|
+
var U = bU.getInstance(), F = new XU(l, U, this);
|
|
272
272
|
Pl.set(this, F);
|
|
273
273
|
}
|
|
274
274
|
return t;
|
|
@@ -284,7 +284,7 @@ var GU = (
|
|
|
284
284
|
return (l = Pl.get(this))[t].apply(l, arguments);
|
|
285
285
|
};
|
|
286
286
|
});
|
|
287
|
-
var
|
|
287
|
+
var NU = function() {
|
|
288
288
|
return typeof ml.ResizeObserver < "u" ? ml.ResizeObserver : wl;
|
|
289
289
|
}();
|
|
290
290
|
function Fl(t) {
|
|
@@ -297,13 +297,13 @@ function Fl(t) {
|
|
|
297
297
|
d();
|
|
298
298
|
const Q = T(t);
|
|
299
299
|
if (!Q) return;
|
|
300
|
-
F = new
|
|
300
|
+
F = new NU((a) => {
|
|
301
301
|
const n = a[0];
|
|
302
302
|
n && (l.value = n.contentRect.width, U.value = n.contentRect.height);
|
|
303
303
|
}), F.observe(Q);
|
|
304
304
|
const V = Q.getBoundingClientRect();
|
|
305
305
|
l.value = V.width, U.value = V.height;
|
|
306
|
-
}, { immediate: !0 }),
|
|
306
|
+
}, { immediate: !0 }), VU(d), {
|
|
307
307
|
width: El(l),
|
|
308
308
|
height: El(U)
|
|
309
309
|
};
|
|
@@ -313,10 +313,10 @@ const H = (t, l) => {
|
|
|
313
313
|
for (const [F, d] of l)
|
|
314
314
|
U[F] = d;
|
|
315
315
|
return U;
|
|
316
|
-
},
|
|
316
|
+
}, pU = {
|
|
317
317
|
key: 0,
|
|
318
318
|
class: "level"
|
|
319
|
-
},
|
|
319
|
+
}, yU = {
|
|
320
320
|
__name: "AudioSlider",
|
|
321
321
|
props: /* @__PURE__ */ Sl({
|
|
322
322
|
min: { type: Number, default: 0 },
|
|
@@ -382,7 +382,7 @@ const H = (t, l) => {
|
|
|
382
382
|
style: { userSelect: "none", touchAction: "none" }
|
|
383
383
|
}, [
|
|
384
384
|
M[0] || (M[0] = h("div", { class: "track" }, null, -1)),
|
|
385
|
-
t.showLevel ? (N(), y("div",
|
|
385
|
+
t.showLevel ? (N(), y("div", pU, [
|
|
386
386
|
(N(), y(nl, null, Xl(10, (O) => h("div", {
|
|
387
387
|
class: L(["led", "led" + O])
|
|
388
388
|
}, [
|
|
@@ -397,7 +397,7 @@ const H = (t, l) => {
|
|
|
397
397
|
}, null, 2)
|
|
398
398
|
], 34));
|
|
399
399
|
}
|
|
400
|
-
}, Wl = /* @__PURE__ */ H(
|
|
400
|
+
}, Wl = /* @__PURE__ */ H(yU, [["__scopeId", "data-v-ab2e7b69"]]), YU = {
|
|
401
401
|
__name: "TitleText",
|
|
402
402
|
props: {
|
|
403
403
|
align: {
|
|
@@ -422,7 +422,7 @@ const H = (t, l) => {
|
|
|
422
422
|
], 2)
|
|
423
423
|
], 512));
|
|
424
424
|
}
|
|
425
|
-
}, Ol = /* @__PURE__ */ H(
|
|
425
|
+
}, Ol = /* @__PURE__ */ H(YU, [["__scopeId", "data-v-3ce29e77"]]), EU = {
|
|
426
426
|
__name: "TriState",
|
|
427
427
|
props: {
|
|
428
428
|
mute: { default: !1 },
|
|
@@ -462,7 +462,7 @@ const H = (t, l) => {
|
|
|
462
462
|
}, K(Q.value ? "MUTE" : "M"), 1)
|
|
463
463
|
], 512));
|
|
464
464
|
}
|
|
465
|
-
},
|
|
465
|
+
}, kU = /* @__PURE__ */ H(EU, [["__scopeId", "data-v-5eda54eb"]]), ol = {
|
|
466
466
|
// Enable development UI features (animations, random data, etc.)
|
|
467
467
|
enabled: !1,
|
|
468
468
|
// Specific feature flags
|
|
@@ -474,7 +474,7 @@ const H = (t, l) => {
|
|
|
474
474
|
// Enable other debug/dev features as needed
|
|
475
475
|
debugMode: !1
|
|
476
476
|
}
|
|
477
|
-
},
|
|
477
|
+
}, HF = () => ol.enabled, Al = (t) => ol.enabled && ol.features[t], dl = sl("audioState", {
|
|
478
478
|
state: () => ({
|
|
479
479
|
// Playback state
|
|
480
480
|
isPlaying: !1,
|
|
@@ -660,6 +660,10 @@ const H = (t, l) => {
|
|
|
660
660
|
solo: l.solo || !1,
|
|
661
661
|
mute: l.mute || !1
|
|
662
662
|
}));
|
|
663
|
+
},
|
|
664
|
+
// Clear all music data (reset to initial state)
|
|
665
|
+
clear() {
|
|
666
|
+
this.beats = [], this.practiceMarks = {}, this.parts = [], this.title = "", this.totalDuration = 0, this.maxBar = 0, this.timeSignature = 4, this.baseTempo = 80;
|
|
663
667
|
}
|
|
664
668
|
}
|
|
665
669
|
}), fl = sl("playbackState", {
|
|
@@ -859,7 +863,7 @@ function pl(t) {
|
|
|
859
863
|
});
|
|
860
864
|
} };
|
|
861
865
|
}
|
|
862
|
-
const kU = "data:audio/mpeg;base64,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", TU = "data:audio/mpeg;base64,//uUxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAMAAAQIAA0NDQ0NDQ0NE5OTk5OTk5OaWlpaWlpaWmAgICAgICAgICTk5OTk5OTk6qqqqqqqqqqu7u7u7u7u7u7zs7Ozs7Ozs7f39/f39/f3+/v7+/v7+/v7/n5+fn5+fn5//////////8AAABQTEFNRTMuMTAwBLkAAAAAAAAAABUgJAUHgQAB4AAAECAxW679AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vUxAAACCABc/QAAASlsCq/NbBI//6YZkIUAAFLgQBA4oRqEAYLghE58ufUCCwQdg4cLg+fB8/KAMHwfPlAfB8Hwff/5cH3g+fy4Pg/+XPwQd/wQBD86Y8gkBAAEAAAAAAAAAgQrkCrEVHmoOI2GbVQgUVLGCAZk2giahgNUJfWEmZuCS6GQYHryLrek+YWAQUYGDJjZBcUZc/xZkxAJDiUv6cjCAkIBQcZEWkwrFnMRBNIDzDyqSPuYmdBd1NGE0AqpQKAGNiEXfAKhBiYOYGUjJkZ2AOyjaY0ImdI5lZETByCVvGepnGECLcW5goFEIwAAELA6QMjdpbgFAlHSELMYI6NhsXTlT0a85tNYaSysWCRGDNkX038MuQl7DiPSmsBRZZNyBo9HaWVW8U9F1wzIXGXk40RpLrPIy1qVQ1IHRXk7MxS3Pu14lTdsYzHOw7VlM7jjhVs6f7KYf65qepsuZYXYxJolGpbL5TLbNNSZXJm9p0M//iMsVQ7/6VK3d/rV2AgQAApEaRpCKTcVUUkVtqqLCJGtNg6y2jtwHDESSvk2Fw6N3+aXf7R0rLYHiC7AwuXLmKwOjqYF4Cw7uz6Q6jxc1eIrkEUD8+uLyva193XIM/kiYtbDp9tqTes/PzSb/uzzOWyZ2XrvWm1tmkXf87tJ/PepWrAEAoCaGjykkhihRd+7cjO7+xYQCJAAKmD4IYmMAkRJVGVgoqxsihA6IvC3dmL8QhTKbyvzcWEi1Yqn8Nxw+iSr5SxjlLdCXdF3Chq2GqmhH0HapSVXVjm0PmJjclY5ot8mZWeQo3Sli4Zr0gsEtIUA8FfWI9fP2eSDq6qlkGky9PhZFUT037KSvLeE8c2K8NvKfrAzDCxhsJ7mU9Vm07FWjX2tLxLQq2lvjQyS8yqG7DN9iqu/9xVUBAAABcGjNABl2BF8EOIWCATqRY08Bfh2GIJetn1bj8qt5zG4On8b9aPU0lrzLtNyztT9/lJVks/Wfh/luS1ajgshnKktaVD8Ujr7PfE//uUxMAAESEfTf2GAAKRL2l9h5o57CVDL1DUxE+16N/ZlErt0d6INCzx1MGSos2JUt3lWfLY5nki11ZSM6xtb3vTNd4HNv2PHg2roFE57bqRmzkX8dHGwUKEj00aazgk3DW3/7cM4oAXR8yqCLcwz1t2RCQUfk4mRuE/8tV2zdsVaBI3LojIxMcJgfx1zuK5vy3l1NN67gZjqF3iZF7JYhSpOY7UOy+nVNFM/VDGaZ3IQTIvjgSxHMbinYjE9ZWx6u2VOMivcV2m5bQIG9xSsb008hZkgymncftVx7hz2Rw/djtH3XsESkzENp/uY29u/2N17bvE/3K/tHpXvh6tn//6OHIgAAAnSNloBpAdRMhzluDPRIY5G1PMW1qMdGH+rLq+7w5m6FLCg7f7kP4nRnwIbPqAr3z+Sq5NEkz8M1GJBIpzMfL6qmwnkgnBnm8cgpbGf0JPSu4OYzZuJ8kmaNg2REliphhaQ1GNv2xwcoQkOczv23S5NOZDUaqY3db6//uUxN6Ak91LQ+wkfkpzLCi9h5o5m/kuQyJqdDKobXybFrBuLP2ZUVq8t3obzf/FeCNVgs9F5McOOmAhPUmiE0LFTZsTd5PPvG4KGI1mrDT7xZbWfMGWK4sTUXVfXEmoGG4/Fhsam3nSMA8mV7HQiZSPj/UNE4uFAsi3GeP1DyXqGEpWF9ZWiw5YU8jQAFwTqnZjplvvecwlhCe6n+RUtMErkJqWac+55tuWygx3UMW3XReqPwXZV9Xe79dshSru/e5HYRAAABdHqgdkdLIsIwNWlfDptNIBi+6q0GPS1prUB3I9agHNVpjZY08jLWAn1Asorb1qgRm6JMnkisbU6sVJq4W1twY2hvfs8NcqQqhiOYuKdEaS78/WFedz6osvG5yMR+1x1a1MS7ifEJpqpQcjeUGQTtd48omOqDGQuP7+W+/ZzzlFrinuP3j73Zr/3/Xz4twbleyOyTu97+/rSHBAVMZSQMqAREhdluKKDIZKPAQa1ZsklZOwFvo2yu1P//uExPYA0xEhQ+ek3gpHpCh5h5n5M3Sq5CW7uLj40BOOZlHgvYfxp9RZnadQwuTUnF0tRn7jhS1eMKQQpPHKcosSFtjMu3JRSxomIkDRDLB0OzxwwAodOIFFDal4zoQh9xUQmt+3kwqINMQcOmFtY7+L+VOxqzUXfKVevPvpcUdZVpKR8+Jz+1I63+/9eGEwAADLgoRDkhMWDZvH66VrO3JUGVutvizKB38fFVpreIUVGy2h3h0z9uKFp3Mb+0WDhss4HatoqOu3G0zFRib5GLbM4EzUb1TskJqa/CizSmo4hEQIFoQFyOZrGczw0Y/STG673ZA5IfmVs4UuaSBrTcMPTM5iII/zpKb87Xeu5rWv/e3zXn92LLiYIABexmOWmGikUwIJAXEntrwM7DKkoWFsYvj8rSD3LxcOnK/R+aLkEUGRdatbWULavvLikQcq//t0xP4Ak6FXP+y80cpiKig9l6H5RVFThop0KGGkgRGh0CwAgaDowc2nqVZRxQKRxRhDvXPCJvSS0iFI85U1+lmnNNOt64jha/7MFnFjRcq+x21mGoNV1UFWs2u22/6/aezV7f/+eINQQAVfQ5oBMXoZE9i7IPa2wZpK3YNo3Sau3kksskwNzLClcIIlSdXPtjjJs9fvMUkskrMlVE+LTnCpzv2cM2OTSJSc5krnXLMywyazLJWbtZ4au75+7aeX2/+V0/uPUdS3O7d3jWihOnC0MeKaZjXaLft85pbb57173f+RdIqAASvBmEzBisCQM0FZzTmvLujaergs8YNFZCuuDZU7bC5oKicRFULDSaTRghituw9ahmpIE5DIk7WX//uExOiAEUUhQ+w9D8okJqg9hiF54TxZEqxMmqScWJblwliNhGiYNkhnFX7qt/aV3QmB4ngkyP2J9ypCsWRXyTzPWkBEOA4NOnXKbKr//v+tpGDBAUwA1QSAmSX6dh3Y7Wd1MFnSVTktIT5eR2GaNxAOssKW4iaIeHsuOCCRKKpoeiZTh4IwJiKRuGZmN+SqOUCQKiQkB0VNy2S/hOW1yNtWtT62P82cfNovPjYvJh7JPib2kek0/dnfmv3jhJ6R8Zmu2/cyKfEsJxdbu9kXRmAAAHQCgrmAZQKJkLPGnRqBX+eVKpu7ZHFZkwNzB8QAFnRgqVhJEo/JTG25S3cnqScozDAZCYsOLEnOVaM4wPgPC4egqB9mDghpYcSeQNUT1sHvPvHN6ZdZsqKsMJjr7TI5kPTx1vMqs1+2guYHVnNUppvFrENscWYqzLu8qaRC//tkxPwAD61HQ+wkz8HdI+g9hI45gAS6BQcpTFqwRZcUONEHuQgyUG/n0dMLssFh8g8SJ3xCyjTdJpK1fVI3HZjM6E8txp3oGAVmqBw0RxkDt5cQjqEHKMJUcfF2nsvG0jYEEiouOG7m7ZtxJFy3M/9RpKEoh1KcZeu5KNpruysy8pVLBCdoB8kWLEx1S2IRvuMGXIlIoDf9gTxzs42MEdEBG0FoTpOcsJ2ixOihPbglHJnCSyBBEVZ/kKhKWIgNdcjGFkOeGrJlmBTJ5sqVsIT/4l38xIvAkm97OUV7x5gaenmUACAqQrC5xf1/3q3U//t0xO8AD70/Q+wkz+n5qGe9hKHtlsq7qqqakzcTDmwTWWuUEbDbnqtqtEb1afUxbmIMYiqi8bc8sJprNvdqi0NSyTUy69E7tmLYctB048TkJJITyTnV4QAxhEtzQ2/W/bYJkjw1HEgbf3//bfnnMIstHcz//1utqycFBToz9Zsftjy2ij/0z26l3mplGMDM1ACg5A6L2xqnxxw5cm2kNyX8RB+KTaK0JCBSwXpItftMy+crSfhDn98K0ycmFainmxRmnJnLsQDpfafL4c5MezncwxXVW41Vmu0smDHUckgSBwWtD42jqRW6CX3PyhmMACSVLELdkcLADC4/qy1L+Ht/uqLR8dHZVARYhQuMX3hx+zr2RRT6alzWRC7iBlCo//tkxPYADdkbO+elD2nQHud9pJn9TFUW552h+PSM431ETSTCJpbbra/leecUJ0D5UgCilASQAMP/CHi5OJhc5x5gGCe+N5bvM/sDJS+Vv8y3rfRYKi4jDSMS4i9KTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
|
|
866
|
+
const TU = "data:audio/mpeg;base64,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", rU = "data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
|
|
863
867
|
class Bl {
|
|
864
868
|
/**
|
|
865
869
|
* Create a new AudioEngine instance
|
|
@@ -983,8 +987,8 @@ class Bl {
|
|
|
983
987
|
try {
|
|
984
988
|
if (typeof fetch < "u") {
|
|
985
989
|
const [l, U] = await Promise.all([
|
|
986
|
-
fetch(
|
|
987
|
-
fetch(
|
|
990
|
+
fetch(TU),
|
|
991
|
+
fetch(rU)
|
|
988
992
|
]), [F, d] = await Promise.all([
|
|
989
993
|
l.arrayBuffer(),
|
|
990
994
|
U.arrayBuffer()
|
|
@@ -1359,7 +1363,7 @@ const $l = {
|
|
|
1359
1363
|
helicopter: 125,
|
|
1360
1364
|
applause: 126,
|
|
1361
1365
|
gunshot: 127
|
|
1362
|
-
},
|
|
1366
|
+
}, LU = Object.entries($l).reduce((t, [l, U]) => (t[U] = l, t), {});
|
|
1363
1367
|
class lU {
|
|
1364
1368
|
/**
|
|
1365
1369
|
* Map common instrument names to MIDI program numbers
|
|
@@ -1377,7 +1381,7 @@ class lU {
|
|
|
1377
1381
|
* @returns {string} Instrument name or fallback
|
|
1378
1382
|
*/
|
|
1379
1383
|
static getProgramName(l) {
|
|
1380
|
-
return
|
|
1384
|
+
return LU[l] || `Program ${l}`;
|
|
1381
1385
|
}
|
|
1382
1386
|
/**
|
|
1383
1387
|
* Generate a unique note ID
|
|
@@ -1390,7 +1394,7 @@ class lU {
|
|
|
1390
1394
|
return `${l}_${U}_${Math.round(F)}`;
|
|
1391
1395
|
}
|
|
1392
1396
|
}
|
|
1393
|
-
class
|
|
1397
|
+
class CU extends il {
|
|
1394
1398
|
constructor(l, U, F, d = {}) {
|
|
1395
1399
|
super(l, U, d), this.midiChannel = F, this.currentVolume = d.initialVolume || 1, this.currentInstrument = d.instrument || "piano", this.outputGain = null, this._setupOutputNode(), this.setVolume(this.currentVolume), d.instrument && this.setInstrument(d.instrument);
|
|
1396
1400
|
}
|
|
@@ -1531,8 +1535,8 @@ class LU extends il {
|
|
|
1531
1535
|
l ? this.outputGain = l : (console.warn(`No individual output available for MIDI channel ${this.midiChannel}, using fallback`), this.outputGain = this.engine.audioContext.createGain(), this.outputGain.gain.value = this.currentVolume);
|
|
1532
1536
|
}
|
|
1533
1537
|
}
|
|
1534
|
-
const CU = "data:text/javascript;base64,dmFyIEZlPShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTpBKVt0XX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO3ZhciBKYT0oZT0+dHlwZW9mIEZlPCJ1Ij9GZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgRmU8InUiP0ZlOkEpW3RdfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIEZlPCJ1IilyZXR1cm4gRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxZPWNsYXNzIGV4dGVuZHMgVWludDhBcnJheXtjdXJyZW50SW5kZXg9MDtzbGljZShlLEEpe2xldCB0PXN1cGVyLnNsaWNlKGUsQSk7cmV0dXJuIHQuY3VycmVudEluZGV4PTAsdH19O2Z1bmN0aW9uIGVlKGUsQT1lLmxlbmd0aCx0PTApe2xldCBuPSIiO2ZvcihsZXQgcz0wO3M8QTtzKyspe2xldCBhPWVbdCtzXTtpZihhPT09MClyZXR1cm4gbjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufWZ1bmN0aW9uIGhBKGUsQSl7bGV0IHQ9ZS5jdXJyZW50SW5kZXg7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLGVlKGUsQSx0KX1mdW5jdGlvbiBuZShlLEE9ITEsdD0hMSl7bGV0IG49ZS5sZW5ndGg7QSYmbisrLHQmJm4lMiE9PTAmJm4rKztsZXQgcz1uZXcgWShuKTtyZXR1cm4ga0EocyxlKSxzfWZ1bmN0aW9uIGtBKGUsQSx0PTApe3Q+MCYmQS5sZW5ndGg+dCYmKEE9QS5zbGljZSgwLHQpKTtmb3IobGV0IG49MDtuPEEubGVuZ3RoO24rKyllW2UuY3VycmVudEluZGV4KytdPUEuY2hhckNvZGVBdChuKTtpZih0PkEubGVuZ3RoKWZvcihsZXQgbj0wO248dC1BLmxlbmd0aDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT0wO3JldHVybiBlfWZ1bmN0aW9uIE4oZSxBKXtsZXQgdD14cyhlLEEsZS5jdXJyZW50SW5kZXgpO3JldHVybiBlLmN1cnJlbnRJbmRleCs9QSx0fWZ1bmN0aW9uIHhzKGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKylufD1lW3Qrc108PHMqODtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gaHQoZSxBLHQpe2ZvcihsZXQgbj0wO248dDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT1BPj5uKjgmMjU1fWZ1bmN0aW9uIEooZSxBKXtlW2UuY3VycmVudEluZGV4KytdPUEmMjU1LGVbZS5jdXJyZW50SW5kZXgrK109QT4+OH1mdW5jdGlvbiBnQShlLEEpe2h0KGUsQSw0KX1mdW5jdGlvbiBqbihlLEEpe2xldCB0PUE8PDh8ZTtyZXR1cm4gdD4zMjc2Nz90LTY1NTM2OnR9ZnVuY3Rpb24gcWEoZSl7cmV0dXJuIGU+MTI3P2UtMjU2OmV9dmFyIEhzPWNsYXNze2hlYWRlcjtzaXplO2RhdGE7Y29uc3RydWN0b3IoZSxBLHQpe3RoaXMuaGVhZGVyPWUsdGhpcy5zaXplPUEsdGhpcy5kYXRhPXR9fTtmdW5jdGlvbiByQShlLEE9ITAsdD0hMSl7bGV0IG49aEEoZSw0KSxzPU4oZSw0KTtuPT09IiImJihzPTApO2xldCBhO3JldHVybiBBP2E9ZS5zbGljZShlLmN1cnJlbnRJbmRleCxlLmN1cnJlbnRJbmRleCtzKTphPW5ldyBZKDApLChBfHx0KSYmKGUuY3VycmVudEluZGV4Kz1zLHMlMiE9PTAmJmUuY3VycmVudEluZGV4KyspLG5ldyBIcyhuLHMsYSl9ZnVuY3Rpb24gY0EoZSxBLHQ9ITEsbj0hMSl7aWYoZS5sZW5ndGghPT00KXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgbGVuZ3RoOiAke2V9YCk7bGV0IHM9OCxhPWUscj1BLmxlbmd0aDt0JiZyKys7bGV0IEk9cjtuJiYocys9NCxJKz00LGE9IkxJU1QiKTtsZXQgbz1zK3I7byUyIT09MCYmbysrO2xldCBnPW5ldyBZKG8pO3JldHVybiBrQShnLGEpLGdBKGcsSSksbiYma0EoZyxlKSxnLnNldChBLHMpLGd9ZnVuY3Rpb24gdkEoZSxBLHQ9ITEpe2xldCBuPTgscz1lLGE9QS5yZWR1Y2UoKGcsQik9PkIubGVuZ3RoK2csMCkscj1hO3QmJihuKz00LHIrPTQscz0iTElTVCIpO2xldCBJPW4rYTtJJTIhPT0wJiZJKys7bGV0IG89bmV3IFkoSSk7cmV0dXJuIGtBKG8scyksZ0EobyxyKSx0JiZrQShvLGUpLEEuZm9yRWFjaChnPT57by5zZXQoZyxuKSxuKz1nLmxlbmd0aH0pLG99ZnVuY3Rpb24gZmUoZSxBKXtyZXR1cm4gZS5maW5kKHQ9PnQuaGVhZGVyIT09IkxJU1QiPyExOih0LmRhdGEuY3VycmVudEluZGV4PTQsZWUodC5kYXRhLDQpPT09QSkpfWZ1bmN0aW9uICRuKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fWZ1bmN0aW9uIFF0KGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKyluPW48PDh8ZVt0K3NdO3JldHVybiBuPj4+MH1mdW5jdGlvbiBYZShlLEEpe2xldCB0PVF0KGUsQSxlLmN1cnJlbnRJbmRleCk7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLHR9ZnVuY3Rpb24gR3QoZSxBKXtsZXQgdD1uZXcgQXJyYXkoQSkuZmlsbCgwKTtmb3IobGV0IG49QS0xO24+PTA7bi0tKXRbbl09ZSYyNTUsZT4+PTg7cmV0dXJuIHR9ZnVuY3Rpb24gdUEoZSl7bGV0IEE9MDtmb3IoO2U7KXtsZXQgdD1lW2UuY3VycmVudEluZGV4KytdO2lmKEE9QTw8N3x0JjEyNyx0Pj43IT09MSlicmVha31yZXR1cm4gQX1mdW5jdGlvbiBDbihlKXtsZXQgQT1bZSYxMjddO2ZvcihlPj49NztlPjA7KUEudW5zaGlmdChlJjEyN3wxMjgpLGU+Pj03O3JldHVybiBBfWZ1bmN0aW9uIGZzKGUpe2U9TWF0aC5mbG9vcihlKTtsZXQgQT1NYXRoLmZsb29yKGUvNjApLHQ9TWF0aC5yb3VuZChlLUEqNjApO3JldHVybnttaW51dGVzOkEsc2Vjb25kczp0LHRpbWU6YCR7QS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9fWZ1bmN0aW9uIE1BKGUpe2xldCBBPSIiO2ZvcihsZXQgdCBvZiBlKXtsZXQgbj10LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikudG9VcHBlckNhc2UoKTtBKz1uLEErPSIgIn1yZXR1cm4gQX12YXIgYz17d2FybjoiY29sb3I6IG9yYW5nZTsiLHVucmVjb2duaXplZDoiY29sb3I6IHJlZDsiLGluZm86ImNvbG9yOiBhcXVhOyIscmVjb2duaXplZDoiY29sb3I6IGxpbWUiLHZhbHVlOiJjb2xvcjogeWVsbG93OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsifSxZczsoKCk9Pnt2YXIgZT1VaW50OEFycmF5LEE9VWludDE2QXJyYXksdD1JbnQzMkFycmF5LG49bmV3IGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLHM9bmV3IGUoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksYT1uZXcgZShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHI9ZnVuY3Rpb24oRyxiKXtmb3IodmFyIEs9bmV3IEEoMzEpLGVBPTA7ZUE8MzE7KytlQSlLW2VBXT1iKz0xPDxHW2VBLTFdO2Zvcih2YXIgYUE9bmV3IHQoS1szMF0pLGVBPTE7ZUE8MzA7KytlQSlmb3IodmFyIEdBPUtbZUFdO0dBPEtbZUErMV07KytHQSlhQVtHQV09R0EtS1tlQV08PDV8ZUE7cmV0dXJue2I6SyxyOmFBfX0sST1yKG4sMiksbz1JLmIsZz1JLnI7b1syOF09MjU4LGdbMjU4XT0yODt2YXIgQj1yKHMsMCksZD1CLmIsaD1CLnIsQz1uZXcgQSgzMjc2OCk7Zm9yKGs9MDtrPDMyNzY4OysraylRPShrJjQzNjkwKT4+MXwoayYyMTg0NSk8PDEsUT0oUSY1MjQyOCk+PjJ8KFEmMTMxMDcpPDwyLFE9KFEmNjE2ODApPj40fChRJjM4NTUpPDw0LENba109KChRJjY1MjgwKT4+OHwoUSYyNTUpPDw4KT4+MTt2YXIgUSxrLG09ZnVuY3Rpb24oRyxiLEspe2Zvcih2YXIgZUE9Ry5sZW5ndGgsYUE9MCxHQT1uZXcgQShiKTthQTxlQTsrK2FBKUdbYUFdJiYrK0dBW0dbYUFdLTFdO3ZhciBzZT1uZXcgQShiKTtmb3IoYUE9MTthQTxiOysrYUEpc2VbYUFdPXNlW2FBLTFdK0dBW2FBLTFdPDwxO3ZhciB6QTtpZihLKXt6QT1uZXcgQSgxPDxiKTt2YXIgV0E9MTUtYjtmb3IoYUE9MDthQTxlQTsrK2FBKWlmKEdbYUFdKWZvcih2YXIgTmU9YUE8PDR8R1thQV0sYWU9Yi1HW2FBXSxBQT1zZVtHW2FBXS0xXSsrPDxhZSxCQT1BQXwoMTw8YWUpLTE7QUE8PUJBOysrQUEpekFbQ1tBQV0+PldBXT1OZX1lbHNlIGZvcih6QT1uZXcgQShlQSksYUE9MDthQTxlQTsrK2FBKUdbYUFdJiYoekFbYUFdPUNbc2VbR1thQV0tMV0rK10+PjE1LUdbYUFdKTtyZXR1cm4gekF9LHk9bmV3IGUoMjg4KTtmb3Ioaz0wO2s8MTQ0Oysrayl5W2tdPTg7dmFyIGs7Zm9yKGs9MTQ0O2s8MjU2Oysrayl5W2tdPTk7dmFyIGs7Zm9yKGs9MjU2O2s8MjgwOysrayl5W2tdPTc7dmFyIGs7Zm9yKGs9MjgwO2s8Mjg4Oysrayl5W2tdPTg7dmFyIGssRj1uZXcgZSgzMik7Zm9yKGs9MDtrPDMyOysraylGW2tdPTU7dmFyIGssRD1tKHksOSwxKSx2PW0oRiw1LDEpLEw9ZnVuY3Rpb24oRyl7Zm9yKHZhciBiPUdbMF0sSz0xO0s8Ry5sZW5ndGg7KytLKUdbS10+YiYmKGI9R1tLXSk7cmV0dXJuIGJ9LEU9ZnVuY3Rpb24oRyxiLEspe3ZhciBlQT1iLzh8MDtyZXR1cm4oR1tlQV18R1tlQSsxXTw8OCk+PihiJjcpJkt9LFg9ZnVuY3Rpb24oRyxiKXt2YXIgSz1iLzh8MDtyZXR1cm4oR1tLXXxHW0srMV08PDh8R1tLKzJdPDwxNik+PihiJjcpfSxPPWZ1bmN0aW9uKEcpe3JldHVybihHKzcpLzh8MH0sbkE9ZnVuY3Rpb24oRyxiLEspe3JldHVybihiPT1udWxsfHxiPDApJiYoYj0wKSwoSz09bnVsbHx8Sz5HLmxlbmd0aCkmJihLPUcubGVuZ3RoKSxuZXcgZShHLnN1YmFycmF5KGIsSykpfSwkPVsidW5leHBlY3RlZCBFT0YiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJpbnZhbGlkIGxlbmd0aC9saXRlcmFsIiwiaW52YWxpZCBkaXN0YW5jZSIsInN0cmVhbSBmaW5pc2hlZCIsIm5vIHN0cmVhbSBoYW5kbGVyIiwsIm5vIGNhbGxiYWNrIiwiaW52YWxpZCBVVEYtOCBkYXRhIiwiZXh0cmEgZmllbGQgdG9vIGxvbmciLCJkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTkiLCJmaWxlbmFtZSB0b28gbG9uZyIsInN0cmVhbSBmaW5pc2hpbmciLCJpbnZhbGlkIHppcCBkYXRhIl0sVj1mdW5jdGlvbihHLGIsSyl7dmFyIGVBPW5ldyBFcnJvcihifHwkW0ddKTtpZihlQS5jb2RlPUcsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVBLFYpLCFLKXRocm93IGVBO3JldHVybiBlQX0scT1mdW5jdGlvbihHLGIsSyxlQSl7dmFyIGFBPUcubGVuZ3RoLEdBPWVBP2VBLmxlbmd0aDowO2lmKCFhQXx8Yi5mJiYhYi5sKXJldHVybiBLfHxuZXcgZSgwKTt2YXIgc2U9IUssekE9c2V8fGIuaSE9MixXQT1iLmk7c2UmJihLPW5ldyBlKGFBKjMpKTt2YXIgTmU9ZnVuY3Rpb24oeXQpe3ZhciBkZT1LLmxlbmd0aDtpZih5dD5kZSl7dmFyIHN0PW5ldyBlKE1hdGgubWF4KGRlKjIseXQpKTtzdC5zZXQoSyksSz1zdH19LGFlPWIuZnx8MCxBQT1iLnB8fDAsQkE9Yi5ifHwwLF9BPWIubCxVQT1iLmQsQ2U9Yi5tLGhlPWIubiwkZT1hQSo4O2Rve2lmKCFfQSl7YWU9RShHLEFBLDEpO3ZhciBVZT1FKEcsQUErMSwzKTtpZihBQSs9MyxVZSlpZihVZT09MSlfQT1ELFVBPXYsQ2U9OSxoZT01O2Vsc2UgaWYoVWU9PTIpe3ZhciBBdD1FKEcsQUEsMzEpKzI1NyxBbj1FKEcsQUErMTAsMTUpKzQsZW49QXQrRShHLEFBKzUsMzEpKzE7QUErPTE0O2Zvcih2YXIgVGU9bmV3IGUoZW4pLGxlPW5ldyBlKDE5KSxUQT0wO1RBPEFuOysrVEEpbGVbYVtUQV1dPUUoRyxBQStUQSozLDcpO0FBKz1BbiozO2Zvcih2YXIgdG49TChsZSksZnQ9KDE8PHRuKS0xLHhlPW0obGUsdG4sMSksVEE9MDtUQTxlbjspe3ZhciBldD14ZVtFKEcsQUEsZnQpXTtBQSs9ZXQmMTU7dmFyIFJBPWV0Pj40O2lmKFJBPDE2KVRlW1RBKytdPVJBO2Vsc2V7dmFyIG9lPTAsdHQ9MDtmb3IoUkE9PTE2Pyh0dD0zK0UoRyxBQSwzKSxBQSs9MixvZT1UZVtUQS0xXSk6UkE9PTE3Pyh0dD0zK0UoRyxBQSw3KSxBQSs9Myk6UkE9PTE4JiYodHQ9MTErRShHLEFBLDEyNyksQUErPTcpO3R0LS07KVRlW1RBKytdPW9lfX12YXIgbm49VGUuc3ViYXJyYXkoMCxBdCkscmU9VGUuc3ViYXJyYXkoQXQpO0NlPUwobm4pLGhlPUwocmUpLF9BPW0obm4sQ2UsMSksVUE9bShyZSxoZSwxKX1lbHNlIFYoMSk7ZWxzZXt2YXIgUkE9TyhBQSkrNCxtdD1HW1JBLTRdfEdbUkEtM108PDgsU3Q9UkErbXQ7aWYoU3Q+YUEpe1dBJiZWKDApO2JyZWFrfXpBJiZOZShCQSttdCksSy5zZXQoRy5zdWJhcnJheShSQSxTdCksQkEpLGIuYj1CQSs9bXQsYi5wPUFBPVN0KjgsYi5mPWFlO2NvbnRpbnVlfWlmKEFBPiRlKXtXQSYmVigwKTticmVha319ekEmJk5lKEJBKzEzMTA3Mik7Zm9yKHZhciBncz0oMTw8Q2UpLTEsY3M9KDE8PGhlKS0xLHB0PUFBOztwdD1BQSl7dmFyIG9lPV9BW1goRyxBQSkmZ3NdLHllPW9lPj40O2lmKEFBKz1vZSYxNSxBQT4kZSl7V0EmJlYoMCk7YnJlYWt9aWYob2V8fFYoMikseWU8MjU2KUtbQkErK109eWU7ZWxzZSBpZih5ZT09MjU2KXtwdD1BQSxfQT1udWxsO2JyZWFrfWVsc2V7dmFyIHNuPXllLTI1NDtpZih5ZT4yNjQpe3ZhciBUQT15ZS0yNTcsaWU9bltUQV07c249RShHLEFBLCgxPDxpZSktMSkrb1tUQV0sQUErPWllfXZhciBIZT1VQVtYKEcsQUEpJmNzXSxrZT1IZT4+NDtIZXx8VigzKSxBQSs9SGUmMTU7dmFyIHJlPWRba2VdO2lmKGtlPjMpe3ZhciBpZT1zW2tlXTtyZSs9WChHLEFBKSYoMTw8aWUpLTEsQUErPWllfWlmKEFBPiRlKXtXQSYmVigwKTticmVha316QSYmTmUoQkErMTMxMDcyKTt2YXIgbnQ9QkErc247aWYoQkE8cmUpe3ZhciBZZT1HQS1yZSxwQT1NYXRoLm1pbihyZSxudCk7Zm9yKFllK0JBPDAmJlYoMyk7QkE8cEE7KytCQSlLW0JBXT1lQVtZZStCQV19Zm9yKDtCQTxudDsrK0JBKUtbQkFdPUtbQkEtcmVdfX1iLmw9X0EsYi5wPXB0LGIuYj1CQSxiLmY9YWUsX0EmJihhZT0xLGIubT1DZSxiLmQ9VUEsYi5uPWhlKX13aGlsZSghYWUpO3JldHVybiBCQSE9Sy5sZW5ndGgmJnNlP25BKEssMCxCQSk6Sy5zdWJhcnJheSgwLEJBKX0sej1uZXcgZSgwKTtmdW5jdGlvbiB0QShHLGIpe3JldHVybiBxKEcse2k6Mn0sYiYmYi5vdXQsYiYmYi5kaWN0aW9uYXJ5KX12YXIgaUE9dHlwZW9mIFRleHREZWNvZGVyPCJ1IiYmbmV3IFRleHREZWNvZGVyLFA9MDt0cnl7aUEuZGVjb2RlKHose3N0cmVhbTohMH0pLFA9MX1jYXRjaHt9WXM9dEF9KSgpO3ZhciBQcz1ZcyxKcz0hMSxxcz0hMCxxdD0hMTtmdW5jdGlvbiBLcyhlLEEsdCl7SnM9ZSxxcz1BLHF0PXR9ZnVuY3Rpb24gcCguLi5lKXtKcyYmY29uc29sZS5pbmZvKC4uLmUpfWZ1bmN0aW9uIHNBKC4uLmUpe3FzJiZjb25zb2xlLndhcm4oLi4uZSl9ZnVuY3Rpb24gT0EoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXAoLi4uZSl9ZnVuY3Rpb24gYkEoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoLi4uZSl9ZnVuY3Rpb24gWigpe3F0JiZjb25zb2xlLmdyb3VwRW5kKCl9dmFyIEVlPXtjb25zb2xlQ29sb3JzOmMsU3Blc3NhU3ludGhJbmZvOnAsU3Blc3NhU3ludGhXYXJuOnNBLFNwZXNzYVN5bnRoR3JvdXBDb2xsYXBzZWQ6YkEsU3Blc3NhU3ludGhHcm91cDpPQSxTcGVzc2FTeW50aEdyb3VwRW5kOloscmVhZEJ5dGVzQXNVaW50QmlnRW5kaWFuOlF0LHJlYWRMaXR0bGVFbmRpYW46TixyZWFkQnl0ZXNBc1N0cmluZzpoQSxyZWFkVmFyaWFibGVMZW5ndGhRdWFudGl0eTp1QSxpbmZsYXRlU3luYzpQc307dmFyIFpBPWNsYXNze3RpY2tzO3N0YXR1c0J5dGU7ZGF0YTtjb25zdHJ1Y3RvcihlLEEsdCl7dGhpcy50aWNrcz1lLHRoaXMuc3RhdHVzQnl0ZT1BLHRoaXMuZGF0YT10fX07ZnVuY3Rpb24gS2EoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49dDtzd2l0Y2goQSl7Y2FzZSAxMjg6Y2FzZSAxNDQ6Y2FzZSAxNjA6Y2FzZSAxNzY6Y2FzZSAxOTI6Y2FzZSAyMDg6Y2FzZSAyMjQ6YnJlYWs7Y2FzZSAyNDA6c3dpdGNoKHQpe2Nhc2UgMDpuPS0zO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpuPS0xO2JyZWFrO2Nhc2UgMTU6bj0tMjticmVha31icmVhaztkZWZhdWx0Om49LTF9cmV0dXJuIG59ZnVuY3Rpb24gQXMoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49LTEscz1lO3JldHVybiBBPj0xMjgmJkE8PTIyNCYmKG49dCxzPUEpLHtzdGF0dXM6cyxjaGFubmVsOm59fXZhciBPYT17ODoyLDk6MiwxMDoyLDExOjIsMTI6MSwxMzoxLDE0OjJ9LE09e25vdGVPZmY6MTI4LG5vdGVPbjoxNDQscG9seVByZXNzdXJlOjE2MCxjb250cm9sbGVyQ2hhbmdlOjE3Nixwcm9ncmFtQ2hhbmdlOjE5MixjaGFubmVsUHJlc3N1cmU6MjA4LHBpdGNoV2hlZWw6MjI0LHN5c3RlbUV4Y2x1c2l2ZToyNDAsdGltZWNvZGU6MjQxLHNvbmdQb3NpdGlvbjoyNDIsc29uZ1NlbGVjdDoyNDMsdHVuZVJlcXVlc3Q6MjQ2LGNsb2NrOjI0OCxzdGFydDoyNTAsY29udGludWU6MjUxLHN0b3A6MjUyLGFjdGl2ZVNlbnNpbmc6MjU0LHJlc2V0OjI1NSxzZXF1ZW5jZU51bWJlcjowLHRleHQ6MSxjb3B5cmlnaHQ6Mix0cmFja05hbWU6MyxpbnN0cnVtZW50TmFtZTo0LGx5cmljOjUsbWFya2VyOjYsY3VlUG9pbnQ6Nyxwcm9ncmFtTmFtZTo4LG1pZGlDaGFubmVsUHJlZml4OjMyLG1pZGlQb3J0OjMzLGVuZE9mVHJhY2s6NDcsc2V0VGVtcG86ODEsc21wdGVPZmZzZXQ6ODQsdGltZVNpZ25hdHVyZTo4OCxrZXlTaWduYXR1cmU6ODksc2VxdWVuY2VTcGVjaWZpYzoxMjd9LFM9e2JhbmtTZWxlY3Q6MCxtb2R1bGF0aW9uV2hlZWw6MSxicmVhdGhDb250cm9sbGVyOjIsdW5kZWZpbmVkQ0MzOjMsZm9vdENvbnRyb2xsZXI6NCxwb3J0YW1lbnRvVGltZTo1LGRhdGFFbnRyeU1TQjo2LG1haW5Wb2x1bWU6NyxiYWxhbmNlOjgsdW5kZWZpbmVkQ0M5OjkscGFuOjEwLGV4cHJlc3Npb25Db250cm9sbGVyOjExLGVmZmVjdENvbnRyb2wxOjEyLGVmZmVjdENvbnRyb2wyOjEzLHVuZGVmaW5lZENDMTQ6MTQsdW5kZWZpbmVkQ0MxNToxNSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXIxOjE2LGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjI6MTcsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyMzoxOCxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI0OjE5LHVuZGVmaW5lZENDMjA6MjAsdW5kZWZpbmVkQ0MyMToyMSx1bmRlZmluZWRDQzIyOjIyLHVuZGVmaW5lZENDMjM6MjMsdW5kZWZpbmVkQ0MyNDoyNCx1bmRlZmluZWRDQzI1OjI1LHVuZGVmaW5lZENDMjY6MjYsdW5kZWZpbmVkQ0MyNzoyNyx1bmRlZmluZWRDQzI4OjI4LHVuZGVmaW5lZENDMjk6MjksdW5kZWZpbmVkQ0MzMDozMCx1bmRlZmluZWRDQzMxOjMxLGJhbmtTZWxlY3RMU0I6MzIsbW9kdWxhdGlvbldoZWVsTFNCOjMzLGJyZWF0aENvbnRyb2xsZXJMU0I6MzQsdW5kZWZpbmVkQ0MzTFNCOjM1LGZvb3RDb250cm9sbGVyTFNCOjM2LHBvcnRhbWVudG9UaW1lTFNCOjM3LGRhdGFFbnRyeUxTQjozOCxtYWluVm9sdW1lTFNCOjM5LGJhbGFuY2VMU0I6NDAsdW5kZWZpbmVkQ0M5TFNCOjQxLHBhbkxTQjo0MixleHByZXNzaW9uQ29udHJvbGxlckxTQjo0MyxlZmZlY3RDb250cm9sMUxTQjo0NCxlZmZlY3RDb250cm9sMkxTQjo0NSx1bmRlZmluZWRDQzE0TFNCOjQ2LHVuZGVmaW5lZENDMTVMU0I6NDcsdW5kZWZpbmVkQ0MxNkxTQjo0OCx1bmRlZmluZWRDQzE3TFNCOjQ5LHVuZGVmaW5lZENDMThMU0I6NTAsdW5kZWZpbmVkQ0MxOUxTQjo1MSx1bmRlZmluZWRDQzIwTFNCOjUyLHVuZGVmaW5lZENDMjFMU0I6NTMsdW5kZWZpbmVkQ0MyMkxTQjo1NCx1bmRlZmluZWRDQzIzTFNCOjU1LHVuZGVmaW5lZENDMjRMU0I6NTYsdW5kZWZpbmVkQ0MyNUxTQjo1Nyx1bmRlZmluZWRDQzI2TFNCOjU4LHVuZGVmaW5lZENDMjdMU0I6NTksdW5kZWZpbmVkQ0MyOExTQjo2MCx1bmRlZmluZWRDQzI5TFNCOjYxLHVuZGVmaW5lZENDMzBMU0I6NjIsdW5kZWZpbmVkQ0MzMUxTQjo2MyxzdXN0YWluUGVkYWw6NjQscG9ydGFtZW50b09uT2ZmOjY1LHNvc3RlbnV0b1BlZGFsOjY2LHNvZnRQZWRhbDo2NyxsZWdhdG9Gb290c3dpdGNoOjY4LGhvbGQyUGVkYWw6Njksc291bmRWYXJpYXRpb246NzAsZmlsdGVyUmVzb25hbmNlOjcxLHJlbGVhc2VUaW1lOjcyLGF0dGFja1RpbWU6NzMsYnJpZ2h0bmVzczo3NCxkZWNheVRpbWU6NzUsdmlicmF0b1JhdGU6NzYsdmlicmF0b0RlcHRoOjc3LHZpYnJhdG9EZWxheTo3OCxzb3VuZENvbnRyb2xsZXIxMDo3OSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI1OjgwLGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjY6ODEsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNzo4MixnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4OjgzLHBvcnRhbWVudG9Db250cm9sOjg0LHVuZGVmaW5lZENDODU6ODUsdW5kZWZpbmVkQ0M4Njo4Nix1bmRlZmluZWRDQzg3Ojg3LHVuZGVmaW5lZENDODg6ODgsdW5kZWZpbmVkQ0M4OTo4OSx1bmRlZmluZWRDQzkwOjkwLHJldmVyYkRlcHRoOjkxLHRyZW1vbG9EZXB0aDo5MixjaG9ydXNEZXB0aDo5MyxkZXR1bmVEZXB0aDo5NCxwaGFzZXJEZXB0aDo5NSxkYXRhSW5jcmVtZW50Ojk2LGRhdGFEZWNyZW1lbnQ6OTcsbm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQjo5OCxub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCOjk5LHJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6MTAwLHJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6MTAxLHVuZGVmaW5lZENDMTAyTFNCOjEwMix1bmRlZmluZWRDQzEwM0xTQjoxMDMsdW5kZWZpbmVkQ0MxMDRMU0I6MTA0LHVuZGVmaW5lZENDMTA1TFNCOjEwNSx1bmRlZmluZWRDQzEwNkxTQjoxMDYsdW5kZWZpbmVkQ0MxMDdMU0I6MTA3LHVuZGVmaW5lZENDMTA4TFNCOjEwOCx1bmRlZmluZWRDQzEwOUxTQjoxMDksdW5kZWZpbmVkQ0MxMTBMU0I6MTEwLHVuZGVmaW5lZENDMTExTFNCOjExMSx1bmRlZmluZWRDQzExMkxTQjoxMTIsdW5kZWZpbmVkQ0MxMTNMU0I6MTEzLHVuZGVmaW5lZENDMTE0TFNCOjExNCx1bmRlZmluZWRDQzExNUxTQjoxMTUsdW5kZWZpbmVkQ0MxMTZMU0I6MTE2LHVuZGVmaW5lZENDMTE3TFNCOjExNyx1bmRlZmluZWRDQzExOExTQjoxMTgsdW5kZWZpbmVkQ0MxMTlMU0I6MTE5LGFsbFNvdW5kT2ZmOjEyMCxyZXNldEFsbENvbnRyb2xsZXJzOjEyMSxsb2NhbENvbnRyb2xPbk9mZjoxMjIsYWxsTm90ZXNPZmY6MTIzLG9tbmlNb2RlT2ZmOjEyNCxvbW5pTW9kZU9uOjEyNSxtb25vTW9kZU9uOjEyNixwb2x5TW9kZU9uOjEyN307ZnVuY3Rpb24gVmEoZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiTUlESSBoYXMgbm8gdHJhY2tzISIpO2xldCBBPVtdO2ZvcihsZXQgcyBvZiBlLnRyYWNrcyl7bGV0IGE9W10scj0wLEk7Zm9yKGxldCBvIG9mIHMuZXZlbnRzKXtsZXQgZz1NYXRoLm1heCgwLG8udGlja3Mtcik7aWYoby5zdGF0dXNCeXRlPT09TS5lbmRPZlRyYWNrKXtyKz1nO2NvbnRpbnVlfWxldCBCO28uc3RhdHVzQnl0ZTw9TS5zZXF1ZW5jZVNwZWNpZmljPyhCPVsyNTUsby5zdGF0dXNCeXRlLC4uLkNuKG8uZGF0YS5sZW5ndGgpLC4uLm8uZGF0YV0sST12b2lkIDApOm8uc3RhdHVzQnl0ZT09PU0uc3lzdGVtRXhjbHVzaXZlPyhCPVsyNDAsLi4uQ24oby5kYXRhLmxlbmd0aCksLi4uby5kYXRhXSxJPXZvaWQgMCk6KEI9W10sSSE9PW8uc3RhdHVzQnl0ZSYmKEk9by5zdGF0dXNCeXRlLEIucHVzaChvLnN0YXR1c0J5dGUpKSxCLnB1c2goLi4uby5kYXRhKSksYS5wdXNoKC4uLkNuKGcpKSxhLnB1c2goLi4uQikscis9Z31hLnB1c2goMCksYS5wdXNoKDI1NSksYS5wdXNoKE0uZW5kT2ZUcmFjayksYS5wdXNoKDApLEEucHVzaChuZXcgVWludDhBcnJheShhKSl9bGV0IHQ9KHMsYSk9Pntmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrKylhLnB1c2gocy5jaGFyQ29kZUF0KHIpKX0sbj1bXTt0KCJNVGhkIixuKSxuLnB1c2goLi4uR3QoNiw0KSksbi5wdXNoKDAsZS5mb3JtYXQpLG4ucHVzaCguLi5HdChlLnRyYWNrcy5sZW5ndGgsMikpLG4ucHVzaCguLi5HdChlLnRpbWVEaXZpc2lvbiwyKSk7Zm9yKGxldCBzIG9mIEEpdCgiTVRyayIsbiksbi5wdXNoKC4uLkd0KHMubGVuZ3RoLDQpKSxuLnB1c2goLi4ucyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcn12YXIgWGE9MzUwLFNlPTksUm49MTYsT3M9ImdzIixCZT0tMSxSdD1gU1BFU1NBU1lOVEhfRU1CRURERURfQkFOS18ke01hdGgucmFuZG9tKCl9X0RPX05PVF9ERUxFVEVgLFZzPTMyNzY3LFphPXt0aW1lOjB9LHphPS4wMyxXYT0uMDcsX2E9MSxqYT02NCxtcz0xMjEsZkE9Y2xhc3N7c3RhdGljIGdldERlZmF1bHRCYW5rKGUpe3JldHVybiBlPT09ImdtMiI/bXM6MH1zdGF0aWMgZ2V0RHJ1bUJhbmsoZSl7c3dpdGNoKGUpe2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke2V9IGRvZXNuJ3QgaGF2ZSBhIGJhbmsgTVNCIGZvciBkcnVtcy5gKTtjYXNlImdtMiI6cmV0dXJuIDEyMDtjYXNlInhnIjpyZXR1cm4gMTI3fX1zdGF0aWMgaXNYR0RydW1zKGUpe3JldHVybiBlPT09MTIwfHxlPT09MTI2fHxlPT09MTI3fXN0YXRpYyBpc1ZhbGlkWEdNU0IoZSl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpfHxlPT09amF8fGU9PT1tc31zdGF0aWMgaXNTeXN0ZW1YRyhlKXtyZXR1cm4gZT09PSJnbTIifHxlPT09InhnIn1zdGF0aWMgYWRkQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5taW4oZStBLDEyNyl9c3RhdGljIHN1YnRyYWNrQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5tYXgoMCxlLUEpfX07ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTY3JiZlLmRhdGFbMl09PT03NiYmZS5kYXRhWzVdPT09MTI2JiZlLmRhdGFbNl09PT0wfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBlLmRhdGFbMF09PT02NSYmZS5kYXRhWzJdPT09NjYmJmUuZGF0YVszXT09PTE4JiZlLmRhdGFbNF09PT02NCYmKGUuZGF0YVs1XSYxNikhPT0wJiZlLmRhdGFbNl09PT0yMX1mdW5jdGlvbiBacyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09NjUmJmUuZGF0YVsyXT09PTY2JiZlLmRhdGFbNl09PT0xMjd9ZnVuY3Rpb24genMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTEyNiYmZS5kYXRhWzJdPT09OSYmZS5kYXRhWzNdPT09MX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09MTI2JiZlLmRhdGFbMl09PT05JiZlLmRhdGFbM109PT0zfWZ1bmN0aW9uIF9zKGUpe3JldHVybiBuZXcgWkEoZSxNLnN5c3RlbUV4Y2x1c2l2ZSxuZXcgWShbNjUsMTYsNjYsMTgsNjQsMCwxMjcsMCw2NSwyNDddKSl9dmFyIHRlPWNsYXNzIGpze3N0YXRpYyB0b01JRElTdHJpbmcoQSl7cmV0dXJuIEEuaXNHTUdTRHJ1bT9gRFJVTToke0EucHJvZ3JhbX1gOmAke0EuYmFua0xTQn06JHtBLmJhbmtNU0J9OiR7QS5wcm9ncmFtfWB9c3RhdGljIGZyb21NSURJU3RyaW5nKEEpe2xldCB0PUEuc3BsaXQoIjoiKTtpZih0Lmxlbmd0aD4zfHx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBNSURJIHN0cmluZzoiKTtyZXR1cm4gQS5zdGFydHNXaXRoKCJEUlVNIik/e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTpwYXJzZUludCh0WzFdKSxpc0dNR1NEcnVtOiEwfTp7YmFua0xTQjpwYXJzZUludCh0WzBdKSxiYW5rTVNCOnBhcnNlSW50KHRbMV0pLHByb2dyYW06cGFyc2VJbnQodFsyXSksaXNHTUdTRHJ1bTohMX19c3RhdGljIHRvTmFtZWRNSURJU3RyaW5nKEEpe3JldHVybmAke2pzLnRvTUlESVN0cmluZyhBKX0gJHtBLm5hbWV9YH1zdGF0aWMgbWF0Y2hlcyhBLHQpe3JldHVybiBBLmlzR01HU0RydW18fHQuaXNHTUdTRHJ1bT9BLmlzR01HU0RydW09PT10LmlzR01HU0RydW0mJkEucHJvZ3JhbT09PXQucHJvZ3JhbTpBLnByb2dyYW09PT10LnByb2dyYW0mJkEuYmFua0xTQj09PXQuYmFua0xTQiYmQS5iYW5rTVNCPT09dC5iYW5rTVNCfXN0YXRpYyBmcm9tTmFtZWRNSURJU3RyaW5nKEEpe2xldCB0PUEuaW5kZXhPZigiICIpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFtZWQgTUlESSBzdHJpbmc6ICR7QX1gKTtsZXQgbj10aGlzLmZyb21NSURJU3RyaW5nKEEuc3Vic3RyaW5nKDAsdCkpLHM9QS5zdWJzdHJpbmcodCsxKTtyZXR1cm57Li4ubixuYW1lOnN9fXN0YXRpYyBzb3J0ZXIoQSx0KXtyZXR1cm4gQS5wcm9ncmFtIT09dC5wcm9ncmFtP0EucHJvZ3JhbS10LnByb2dyYW06QS5pc0dNR1NEcnVtJiYhdC5pc0dNR1NEcnVtPzE6IUEuaXNHTUdTRHJ1bSYmdC5pc0dNR1NEcnVtPy0xOkEuYmFua01TQiE9PXQuYmFua01TQj9BLmJhbmtNU0ItdC5iYW5rTVNCOkEuYmFua0xTQi10LmJhbmtMU0J9fSwkYT0iQ3JlYXRlZCB1c2luZyBTcGVzc2FTeW50aCI7ZnVuY3Rpb24gQW8oZSxBLHQpe2xldCBuPSJnbSIscz1bXSxhPUFycmF5KGUudHJhY2tzLmxlbmd0aCkuZmlsbCgwKSxyPWUudHJhY2tzLmxlbmd0aCxJPSgpPT57bGV0IGQ9MCxoPTEvMDtyZXR1cm4gZS50cmFja3MuZm9yRWFjaCgoQyxRKT0+e2FbUV0+PUMuZXZlbnRzLmxlbmd0aHx8Qy5ldmVudHNbYVtRXV0udGlja3M8aCYmKGQ9USxoPUMuZXZlbnRzW2FbUV1dLnRpY2tzKX0pLGR9LG89QXJyYXkoZS50cmFja3MubGVuZ3RoKS5maWxsKDApLGc9MTYrTWF0aC5tYXgoLi4uZS5wb3J0Q2hhbm5lbE9mZnNldE1hcCksQj1bXTtmb3IobGV0IGQ9MDtkPGc7ZCsrKUIucHVzaCh7cHJvZ3JhbTowLGRydW1zOmQlMTY9PT1TZSxsYXN0QmFuazp2b2lkIDAsbGFzdEJhbmtMU0I6dm9pZCAwLGhhc0JhbmtTZWxlY3Q6ITF9KTtmb3IoO3I+MDspe2xldCBkPUkoKSxoPWUudHJhY2tzW2RdO2lmKGFbZF0+PWguZXZlbnRzLmxlbmd0aCl7ci0tO2NvbnRpbnVlfWxldCBDPWguZXZlbnRzW2FbZF1dO2FbZF0rKztsZXQgUT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwW29bZF1dO2lmKEMuc3RhdHVzQnl0ZT09PU0ubWlkaVBvcnQpe29bZF09Qy5kYXRhWzBdO2NvbnRpbnVlfWxldCBtPUMuc3RhdHVzQnl0ZSYyNDA7aWYobSE9PU0uY29udHJvbGxlckNoYW5nZSYmbSE9PU0ucHJvZ3JhbUNoYW5nZSYmbSE9PU0uc3lzdGVtRXhjbHVzaXZlKWNvbnRpbnVlO2lmKG09PT1NLnN5c3RlbUV4Y2x1c2l2ZSl7aWYoIVhzKEMpKXtlcyhDKT9uPSJ4ZyI6WnMoQyk/bj0iZ3MiOnpzKEMpPyhuPSJnbSIscy5wdXNoKHt0TnVtOmQsZTpDfSkpOldzKEMpJiYobj0iZ20yIik7Y29udGludWV9bGV0IEQ9WzksMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTMsMTQsMTVdW0MuZGF0YVs1XSYxNV0rUTtCW0RdLmRydW1zPSEhKEMuZGF0YVs3XT4wJiZDLmRhdGFbNV0+PjQpO2NvbnRpbnVlfWxldCB5PShDLnN0YXR1c0J5dGUmMTUpK1EsRj1CW3ldO2lmKG09PT1NLnByb2dyYW1DaGFuZ2Upe2xldCB2PXtwcm9ncmFtOkMuZGF0YVswXSxiYW5rTFNCOkYubGFzdEJhbmtMU0I/LmRhdGE/LlsxXT8/MCxiYW5rTVNCOmZBLnN1YnRyYWNrQmFua09mZnNldChGLmxhc3RCYW5rPy5kYXRhPy5bMV0/PzAsZS5iYW5rT2Zmc2V0KSxpc0dNR1NEcnVtOkYuZHJ1bXN9LEw9dC5nZXRQcmVzZXQodixuKTtpZihwKGAlY0lucHV0IHBhdGNoOiAlYyR7dGUudG9NSURJU3RyaW5nKHYpfSVjLiBDaGFubmVsICVjJHt5fSVjLiBDaGFuZ2luZyBwYXRjaCB0byAke0wudG9TdHJpbmcoKX0uYCxjLmluZm8sYy51bnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLEMuZGF0YVswXT1MLnByb2dyYW0sTC5pc0dNR1NEcnVtJiZmQS5pc1N5c3RlbVhHKG4pfHxGLmxhc3RCYW5rPT09dm9pZCAwfHwoRi5sYXN0QmFuay5kYXRhWzFdPWZBLmFkZEJhbmtPZmZzZXQoTC5iYW5rTVNCLEEsTC5pc1hHRHJ1bXMpLEYubGFzdEJhbmtMU0I9PT12b2lkIDApKWNvbnRpbnVlO0YubGFzdEJhbmtMU0IuZGF0YVsxXT1MLmJhbmtMU0I7Y29udGludWV9bGV0IGs9Qy5kYXRhWzBdPT09Uy5iYW5rU2VsZWN0TFNCO0MuZGF0YVswXSE9PVMuYmFua1NlbGVjdCYmIWt8fChGLmhhc0JhbmtTZWxlY3Q9ITAsaz9GLmxhc3RCYW5rTFNCPUM6Ri5sYXN0QmFuaz1DKX1pZihCLmZvckVhY2goKGQsaCk9PntpZihkLmhhc0JhbmtTZWxlY3QpcmV0dXJuO2xldCBDPWglMTYsUT1NLnByb2dyYW1DaGFuZ2V8QyxtPU1hdGguZmxvb3IoaC8xNikqMTYseT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwLmluZGV4T2YobSksRj1lLnRyYWNrcy5maW5kKEU9PkUucG9ydD09PXkmJkUuY2hhbm5lbHMuaGFzKEMpKTtpZihGPT09dm9pZCAwKXJldHVybjtsZXQgaz1GLmV2ZW50cy5maW5kSW5kZXgoRT0+RS5zdGF0dXNCeXRlPT09USk7aWYoaz09PS0xKXtsZXQgRT1GLmV2ZW50cy5maW5kSW5kZXgobkE9Pm5BLnN0YXR1c0J5dGU+MTI4JiZuQS5zdGF0dXNCeXRlPDI0MCYmKG5BLnN0YXR1c0J5dGUmMTUpPT09Qyk7aWYoRT09PS0xKXJldHVybjtsZXQgWD1GLmV2ZW50c1tFXS50aWNrcyxPPXQuZ2V0UHJlc2V0KHtiYW5rTVNCOjAsYmFua0xTQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiExfSxuKS5wcm9ncmFtO0YuYWRkRXZlbnQobmV3IFpBKFgsTS5wcm9ncmFtQ2hhbmdlfEMsbmV3IFkoW09dKSksRSksaz1FfXAoYCVjQWRkaW5nIGJhbmsgc2VsZWN0IGZvciAlYyR7aH1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBEPUYuZXZlbnRzW2tdLnRpY2tzLHY9dC5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAscHJvZ3JhbTpkLnByb2dyYW0saXNHTUdTRHJ1bTpkLmRydW1zfSxuKSxMPWZBLmFkZEJhbmtPZmZzZXQodi5iYW5rTVNCLEEsdi5pc1hHRHJ1bXMpO0YuYWRkRXZlbnQobmV3IFpBKEQsTS5jb250cm9sbGVyQ2hhbmdlfEMsbmV3IFkoW1MuYmFua1NlbGVjdCxMXSkpLGspfSksbiE9PSJncyImJiFmQS5pc1N5c3RlbVhHKG4pKXtmb3IobGV0IGggb2Ygcyl7bGV0IEM9ZS50cmFja3NbaC50TnVtXTtDLmRlbGV0ZUV2ZW50KEMuZXZlbnRzLmluZGV4T2YoaC5lKSl9bGV0IGQ9MDtlLnRyYWNrc1swXS5ldmVudHNbMF0uc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lJiZkKyssZS50cmFja3NbMF0uYWRkRXZlbnQoX3MoMCksZCl9fXZhciBTcz17YmFua09mZnNldDowLG1ldGFkYXRhOnt9LGNvcnJlY3RCYW5rT2Zmc2V0OiEwLHNvdW5kQmFuazp2b2lkIDB9O2Z1bmN0aW9uIGVvKGUsQSx0KXtsZXQgbj10Lm1ldGFkYXRhO2lmKE9BKCIlY1dyaXRpbmcgdGhlIFJNSURJIEZpbGUuLi4iLGMuaW5mbykscCgibWV0YWRhdGEiLG4pLHAoIkluaXRpYWwgYmFuayBvZmZzZXQiLGUuYmFua09mZnNldCksdC5jb3JyZWN0QmFua09mZnNldCl7aWYoIXQuc291bmRCYW5rKXRocm93IG5ldyBFcnJvcigiU291bmQgYmFuayBtdXN0IGJlIHByb3ZpZGVkIGlmIGNvcnJlY3RpbmcgYmFuayBvZmZzZXQuIik7QW8oZSx0LmJhbmtPZmZzZXQsdC5zb3VuZEJhbmspfWxldCBzPW5ldyBZKGUud3JpdGVNSURJKCkpO24ubmFtZT8/PWUuZ2V0TmFtZSgpLG4uY3JlYXRpb25EYXRlPz89bmV3IERhdGUsbi5jb3B5cmlnaHQ/Pz0kYSxuLnNvZnR3YXJlPz89IlNwZXNzYVN5bnRoIixPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKEk9PntsZXQgbz1JO29bMV0mJmUuc2V0Uk1JREluZm8ob1swXSxvWzFdKX0pO2xldCBhPVtdO09iamVjdC5lbnRyaWVzKGUucm1pZGlJbmZvKS5mb3JFYWNoKEk9PntsZXQgbz1JWzBdLGc9SVsxXSxCPWQ9PnthLnB1c2goY0EoZCxnKSl9O3N3aXRjaChvKXtjYXNlImFsYnVtIjpCKCJJQUxCIiksQigiSVBSRCIpO2JyZWFrO2Nhc2Uic29mdHdhcmUiOkIoIklTRlQiKTticmVhaztjYXNlImluZm9FbmNvZGluZyI6QigiSUVOQyIpO2JyZWFrO2Nhc2UiY3JlYXRpb25EYXRlIjpCKCJJQ1JEIik7YnJlYWs7Y2FzZSJwaWN0dXJlIjpCKCJJUElDIik7YnJlYWs7Y2FzZSJuYW1lIjpCKCJJTkFNIik7YnJlYWs7Y2FzZSJhcnRpc3QiOkIoIklBUlQiKTticmVhaztjYXNlImdlbnJlIjpCKCJJR05SIik7YnJlYWs7Y2FzZSJjb3B5cmlnaHQiOkIoIklDT1AiKTticmVhaztjYXNlImNvbW1lbnQiOkIoIklDTVQiKTticmVhaztjYXNlImVuZ2luZWVyIjpCKCJJRU5HIik7YnJlYWs7Y2FzZSJzdWJqZWN0IjpCKCJJU0JKIik7YnJlYWs7Y2FzZSJtaWRpRW5jb2RpbmciOkIoIk1FTkMiKTticmVha319KTtsZXQgcj1uZXcgWSgyKTtyZXR1cm4gaHQocix0LmJhbmtPZmZzZXQsMiksYS5wdXNoKGNBKCJEQk5LIixyKSkscCgiJWNGaW5pc2hlZCEiLGMuaW5mbyksWigpLHZBKCJSSUZGIixbbmUoIlJNSUQiKSxjQSgiZGF0YSIscyksdkEoIklORk8iLGEsITApLG5ldyBZKEEpXSkuYnVmZmVyfWZ1bmN0aW9uIHRvKGUsQSl7YkEoIiVjU2VhcmNoaW5nIGZvciBhbGwgdXNlZCBwcm9ncmFtcyBhbmQga2V5cy4uLiIsYy5pbmZvKTtsZXQgdD0xNitNYXRoLm1heCguLi5lLnBvcnRDaGFubmVsT2Zmc2V0TWFwKSxuPVtdLHM9ImdzIjtmb3IobGV0IEI9MDtCPHQ7QisrKXtsZXQgZD1CJTE2PT09U2U7bi5wdXNoKHtwcmVzZXQ6QS5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAsaXNHTUdTRHJ1bTpkLHByb2dyYW06MH0scyksYmFua01TQjowLGJhbmtMU0I6MCxpc0RydW06ZH0pfWxldCBhPW5ldyBNYXAscj1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksST1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gbygpe2xldCBCPTAsZD0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKHtldmVudHM6aH0sQyk9PntyW0NdPj1oLmxlbmd0aHx8aFtyW0NdXS50aWNrczxkJiYoQj1DLGQ9aFtyW0NdXS50aWNrcyl9KSxCfWxldCBnPWUudHJhY2tzLm1hcChCPT5CLnBvcnQpO2Zvcig7ST4wOyl7bGV0IEI9bygpLGQ9ZS50cmFja3NbQl0uZXZlbnRzO2lmKHJbQl0+PWQubGVuZ3RoKXtJLS07Y29udGludWV9bGV0IGg9ZFtyW0JdXTtpZihyW0JdKyssaC5zdGF0dXNCeXRlPT09TS5taWRpUG9ydCl7Z1tCXT1oLmRhdGFbMF07Y29udGludWV9bGV0IEM9aC5zdGF0dXNCeXRlJjI0MDtpZihDIT09TS5ub3RlT24mJkMhPT1NLmNvbnRyb2xsZXJDaGFuZ2UmJkMhPT1NLnByb2dyYW1DaGFuZ2UmJkMhPT1NLnN5c3RlbUV4Y2x1c2l2ZSljb250aW51ZTtsZXQgUT0oaC5zdGF0dXNCeXRlJjE1KStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dfHwwLG09bltRXTtzd2l0Y2goQyl7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6bS5wcmVzZXQ9QS5nZXRQcmVzZXQoe2JhbmtNU0I6bS5iYW5rTVNCLGJhbmtMU0I6bS5iYW5rTFNCLHByb2dyYW06aC5kYXRhWzBdLGlzR01HU0RydW06bS5pc0RydW19LHMpO2JyZWFrO2Nhc2UgTS5jb250cm9sbGVyQ2hhbmdlOnN3aXRjaChoLmRhdGFbMF0pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBTLmJhbmtTZWxlY3RMU0I6bS5iYW5rTFNCPWguZGF0YVsxXTticmVhaztjYXNlIFMuYmFua1NlbGVjdDptLmJhbmtNU0I9aC5kYXRhWzFdfWJyZWFrO2Nhc2UgTS5ub3RlT246aWYoaC5kYXRhWzFdPT09MCljb250aW51ZTtsZXQgeT1hLmdldChtLnByZXNldCk7eXx8KHk9bmV3IFNldCxhLnNldChtLnByZXNldCx5KSkseS5hZGQoYCR7aC5kYXRhWzBdfS0ke2guZGF0YVsxXX1gKTticmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOntpZighWHMoaCkpe2VzKGgpJiYocz0ieGciLHAoIiVjWEcgb24gZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpKTtjb250aW51ZX1sZXQgRj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1baC5kYXRhWzVdJjE1XStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dLGs9ISEoaC5kYXRhWzddPjAmJmguZGF0YVs1XT4+NCk7bT1uW0ZdLG0uaXNEcnVtPWt9YnJlYWt9fXJldHVybiBhLmZvckVhY2goKEIsZCk9PntCLnNpemU9PT0wJiYocChgJWNEZXRlY3RlZCBjaGFuZ2UgYnV0IG5vIGtleXMgZm9yICVjJHtkLm5hbWV9YCxjLmluZm8sYy52YWx1ZSksYS5kZWxldGUoZCkpfSksWigpLGF9ZnVuY3Rpb24gbm8oZSxBPTApe2xldCB0PWg9PihoLmRhdGE9bmV3IFkoaC5kYXRhLmJ1ZmZlciksNmU3L1F0KGguZGF0YSwzKSksbj1bXSxhPWUudHJhY2tzLm1hcChoPT5oLmV2ZW50cykuZmxhdCgpO2Euc29ydCgoaCxDKT0+aC50aWNrcy1DLnRpY2tzKTtmb3IobGV0IGg9MDtoPDE2O2grKyluLnB1c2goW10pO2xldCByPTAsST02MC8oMTIwKmUudGltZURpdmlzaW9uKSxvPTAsZz0wLEI9W107Zm9yKGxldCBoPTA7aDwxNjtoKyspQi5wdXNoKFtdKTtsZXQgZD0oaCxDKT0+e2xldCBRPUJbQ10uZmluZEluZGV4KHk9PnkubWlkaU5vdGU9PT1oKSxtPUJbQ11bUV07aWYobSl7bGV0IHk9ci1tLnN0YXJ0O20ubGVuZ3RoPXksQz09PVNlJiYobS5sZW5ndGg9eTxBP0E6eSksQltDXS5zcGxpY2UoUSwxKX1nLS19O2Zvcig7bzxhLmxlbmd0aDspe2xldCBoPWFbb10sQz1oLnN0YXR1c0J5dGU+PjQsUT1oLnN0YXR1c0J5dGUmMTU7aWYoQz09PTgpZChoLmRhdGFbMF0sUSk7ZWxzZSBpZihDPT09OSlpZihoLmRhdGFbMV09PT0wKWQoaC5kYXRhWzBdLFEpO2Vsc2V7ZChoLmRhdGFbMF0sUSk7bGV0IG09e21pZGlOb3RlOmguZGF0YVswXSxzdGFydDpyLGxlbmd0aDotMSx2ZWxvY2l0eTpoLmRhdGFbMV0vMTI3fTtuW1FdLnB1c2gobSksQltRXS5wdXNoKG0pLGcrK31lbHNlIGguc3RhdHVzQnl0ZT09PTgxJiYoST02MC8odChoKSplLnRpbWVEaXZpc2lvbikpO2lmKCsrbz49YS5sZW5ndGgpYnJlYWs7cis9SSooYVtvXS50aWNrcy1oLnRpY2tzKX1yZXR1cm4gZz4wJiZCLmZvckVhY2goKGgsQyk9PntoLmZvckVhY2goUT0+e2xldCBtPXItUS5zdGFydDtRLmxlbmd0aD1tLEM9PT1TZSYmKFEubGVuZ3RoPW08QT9BOm0pfSl9KSxufXZhciB2dD17bGluZWFyOjAsbmVhcmVzdE5laWdoYm9yOjEsaGVybWl0ZToyfSxobj17c291bmRDYW52YXNUZXh0OjAseWFtYWhhWEdUZXh0OjEsc291bmRDYW52YXNEb3RNYXRyaXg6Mn0sWUE9e0lkbGU6MCxSUENvYXJzZToxLFJQRmluZToyLE5SUENvYXJzZTozLE5SUEZpbmU6NCxEYXRhQ29hcnNlOjUsRGF0YUZpbmU6Nn0sSUE9e2NoYW5uZWxUdW5pbmc6MCxjaGFubmVsVHJhbnNwb3NlRmluZToxLG1vZHVsYXRpb25NdWx0aXBsaWVyOjIsbWFzdGVyVHVuaW5nOjMsY2hhbm5lbFR1bmluZ1NlbWl0b25lczo0LGNoYW5uZWxLZXlTaGlmdDo1LHNmMk5QUk5HZW5lcmF0b3JMU0I6Nn07ZnVuY3Rpb24gcWUoZSxBLHQsbil7cmV0dXJuIG5ldyBaQShuLE0uY29udHJvbGxlckNoYW5nZXxlJTE2LG5ldyBZKFtBLHRdKSl9ZnVuY3Rpb24gc28oZSxBKXtsZXQgdD0xNnxbMSwyLDMsNCw1LDYsNyw4LDAsOSwxMCwxMSwxMiwxMywxNCwxNV1bZSUxNl0sbj1bNjUsMTYsNjYsMTgsNjQsdCwyMSwxXSxhPTEyOC0oNjQrdCsyMSsxKSUxMjg7cmV0dXJuIG5ldyBaQShBLE0uc3lzdGVtRXhjbHVzaXZlLG5ldyBZKFsuLi5uLGEsMjQ3XSkpfWZ1bmN0aW9uIGFvKGUsQT1bXSx0PVtdLG49W10scz1bXSl7YkEoIiVjQXBwbHlpbmcgY2hhbmdlcyB0byB0aGUgTUlESSBmaWxlLi4uIixjLmluZm8pLHAoIkRlc2lyZWQgcHJvZ3JhbSBjaGFuZ2VzOiIsQSkscCgiRGVzaXJlZCBDQyBjaGFuZ2VzOiIsdCkscCgiRGVzaXJlZCBjaGFubmVscyB0byBjbGVhcjoiLG4pLHAoIkRlc2lyZWQgY2hhbm5lbHMgdG8gdHJhbnNwb3NlOiIscyk7bGV0IGE9bmV3IFNldDtBLmZvckVhY2goRD0+e2EuYWRkKEQuY2hhbm5lbCl9KTtsZXQgcj0iZ3MiLEk9ITEsbz1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksZz1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gQigpe2xldCBEPTAsdj0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKEwsRSk9PntvW0VdPj1MLmV2ZW50cy5sZW5ndGh8fEwuZXZlbnRzW29bRV1dLnRpY2tzPHYmJihEPUUsdj1MLmV2ZW50c1tvW0VdXS50aWNrcyl9KSxEfWxldCBkPWUudHJhY2tzLm1hcChEPT5ELnBvcnQpLGg9e30sQz0wLFE9KEQsdik9PntlLnRyYWNrc1tEXS5jaGFubmVscy5zaXplIT09MCYmKEM9PT0wJiYoQys9MTYsaFt2XT0wKSxoW3ZdPT09dm9pZCAwJiYoaFt2XT1DLEMrPTE2KSxkW0RdPXYpfTtlLnRyYWNrcy5mb3JFYWNoKChELHYpPT57USh2LEQucG9ydCl9KTtsZXQgbT1DLHk9QXJyYXkobSkuZmlsbCghMCksRj1BcnJheShtKS5maWxsKDApLGs9QXJyYXkobSkuZmlsbCgwKTtmb3Iocy5mb3JFYWNoKEQ9PntsZXQgdj1NYXRoLnRydW5jKEQua2V5U2hpZnQpLEw9RC5rZXlTaGlmdC12O0ZbRC5jaGFubmVsXT12LGtbRC5jaGFubmVsXT1MfSk7Zz4wOyl7bGV0IEQ9QigpLHY9ZS50cmFja3NbRF07aWYob1tEXT49di5ldmVudHMubGVuZ3RoKXtnLS07Y29udGludWV9bGV0IEw9b1tEXSsrLEU9di5ldmVudHNbTF0sWD0oKT0+e3YuZGVsZXRlRXZlbnQoTCksb1tEXS0tfSxPPSh6LHRBPTApPT57di5hZGRFdmVudCh6LEwrdEEpLG9bRF0rK30sbkE9aFtkW0RdXXx8MDtpZihFLnN0YXR1c0J5dGU9PT1NLm1pZGlQb3J0KXtRKEQsRS5kYXRhWzBdKTtjb250aW51ZX1pZihFLnN0YXR1c0J5dGU8PU0uc2VxdWVuY2VTcGVjaWZpYyYmRS5zdGF0dXNCeXRlPj1NLnNlcXVlbmNlTnVtYmVyKWNvbnRpbnVlO2xldCAkPUUuc3RhdHVzQnl0ZSYyNDAsVj1FLnN0YXR1c0J5dGUmMTUscT1WK25BO2lmKG4uaW5jbHVkZXMocSkpe1goKTtjb250aW51ZX1zd2l0Y2goJCl7Y2FzZSBNLm5vdGVPbjppZih5W3FdKXt5W3FdPSExLHQuZmlsdGVyKHRBPT50QS5jaGFubmVsPT09cSkuZm9yRWFjaCh0QT0+e2xldCBpQT1xZShWLHRBLmNvbnRyb2xsZXJOdW1iZXIsdEEuY29udHJvbGxlclZhbHVlLEUudGlja3MpO08oaUEpfSk7bGV0IHo9a1txXTtpZih6IT09MCl7bGV0IHRBPXoqNjQrNjQsaUE9cWUoVixTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCxFLnRpY2tzKSxQPXFlKFYsUy5yZWdpc3RlcmVkUGFyYW1ldGVyTFNCLDEsRS50aWNrcyksRz1xZShxLFMuZGF0YUVudHJ5TVNCLHRBLEUudGlja3MpLGI9cWUoVixTLmRhdGFFbnRyeUxTQiwwLEUudGlja3MpO08oYiksTyhHKSxPKFApLE8oaUEpfWlmKGEuaGFzKHEpKXtsZXQgdEE9QS5maW5kKGVBPT5lQS5jaGFubmVsPT09cSk7aWYoIXRBKWNvbnRpbnVlO3AoYCVjU2V0dGluZyAlYyR7dEEuY2hhbm5lbH0lYyB0byAlYyR7dGUudG9NSURJU3RyaW5nKHRBKX0lYy4gVHJhY2sgbnVtOiAlYyR7RH1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgaUE9dEEuYmFua01TQixQPXRBLmJhbmtMU0IsRz10QS5wcm9ncmFtLGI9bmV3IFpBKEUudGlja3MsTS5wcm9ncmFtQ2hhbmdlfFYsbmV3IFkoW0ddKSk7TyhiKTtsZXQgSz0oZUEsYUEpPT57bGV0IEdBPXFlKFYsZUE/Uy5iYW5rU2VsZWN0TFNCOlMuYmFua1NlbGVjdCxhQSxFLnRpY2tzKTtPKEdBKX07ZkEuaXNTeXN0ZW1YRyhyKSYmdEEuaXNHTUdTRHJ1bSYmKHAoYCVjQWRkaW5nIFhHIERydW0gY2hhbmdlIG9uIHRyYWNrICVjJHtEfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpLGlBPWZBLmdldERydW1CYW5rKHIpLFA9MCksSyghMSxpQSksSyghMCxQKSx0QS5pc0dNR1NEcnVtJiYhZkEuaXNTeXN0ZW1YRyhyKSYmViE9PVNlJiYocChgJWNBZGRpbmcgR1MgRHJ1bSBjaGFuZ2Ugb24gdHJhY2sgJWMke0R9YCxjLnJlY29nbml6ZWQsYy52YWx1ZSksTyhzbyhWLEUudGlja3MpKSl9fUUuZGF0YVswXSs9RltxXTticmVhaztjYXNlIE0ubm90ZU9mZjpFLmRhdGFbMF0rPUZbcV07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6aWYoYS5oYXMocSkpe1goKTtjb250aW51ZX1icmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTp7bGV0IHo9RS5kYXRhWzBdO2lmKHQuZmluZChpQT0+aUEuY2hhbm5lbD09PXEmJno9PT1pQS5jb250cm9sbGVyTnVtYmVyKSE9PXZvaWQgMCl7WCgpO2NvbnRpbnVlfSh6PT09Uy5iYW5rU2VsZWN0fHx6PT09Uy5iYW5rU2VsZWN0TFNCKSYmYS5oYXMocSkmJlgoKX1icmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOmlmKGVzKEUpKXAoIiVjWEcgc3lzdGVtIG9uIGRldGVjdGVkIixjLmluZm8pLHI9InhnIixJPSEwO2Vsc2UgaWYoRS5kYXRhWzBdPT09NjcmJkUuZGF0YVsyXT09PTc2JiZFLmRhdGFbM109PT04JiZFLmRhdGFbNV09PT0zKWEuaGFzKEUuZGF0YVs0XStuQSkmJlgoKTtlbHNlIGlmKFdzKEUpKXAoIiVjR00yIHN5c3RlbSBvbiBkZXRlY3RlZCIsYy5pbmZvKSxyPSJnbTIiLEk9ITA7ZWxzZSBpZihacyhFKSl7ST0hMCxwKCIlY0dTIG9uIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKTticmVha31lbHNlIHpzKEUpJiYocCgiJWNHTSBvbiBkZXRlY3RlZCwgcmVtb3ZpbmchIixjLmluZm8pLFgoKSxJPSExKX19aWYoIUkmJkEubGVuZ3RoPjApe2xldCBEPTA7ZS50cmFja3NbMF0uZXZlbnRzWzBdLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSYmRCsrLGUudHJhY2tzWzBdLmFkZEV2ZW50KF9zKDApLEQpLHAoIiVjR1Mgb24gbm90IGRldGVjdGVkLiBBZGRpbmcgaXQuIixjLmluZm8pfWUuZmx1c2goKSxaKCl9ZnVuY3Rpb24gb28oZSxBKXtsZXQgdD1bXSxuPVtdLHM9W10sYT1bXTtBLmNoYW5uZWxTbmFwc2hvdHMuZm9yRWFjaCgocixJKT0+e2lmKHIuaXNNdXRlZCl7bi5wdXNoKEkpO3JldHVybn1sZXQgbz1yLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCtyLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDA7byE9PTAmJnQucHVzaCh7Y2hhbm5lbDpJLGtleVNoaWZ0Om99KSxyLmxvY2tQcmVzZXQmJnMucHVzaCh7Y2hhbm5lbDpJLC4uLnIucGF0Y2h9KSxyLmxvY2tlZENvbnRyb2xsZXJzLmZvckVhY2goKGcsQik9PntpZighZ3x8Qj4xMjd8fEI9PT1TLmJhbmtTZWxlY3QpcmV0dXJuO2xldCBkPXIubWlkaUNvbnRyb2xsZXJzW0JdPj43O2EucHVzaCh7Y2hhbm5lbDpJLGNvbnRyb2xsZXJOdW1iZXI6Qixjb250cm9sbGVyVmFsdWU6ZH0pfSl9KSxlLm1vZGlmeShzLGEsbix0KX12YXIgbG49e1hNRkZpbGVUeXBlOjAsbm9kZU5hbWU6MSxub2RlSUROdW1iZXI6MixyZXNvdXJjZUZvcm1hdDozLGZpbGVuYW1lT25EaXNrOjQsZmlsZW5hbWVFeHRlbnNpb25PbkRpc2s6NSxtYWNPU0ZpbGVUeXBlQW5kQ3JlYXRvcjo2LG1pbWVUeXBlOjcsdGl0bGU6OCxjb3B5cmlnaHROb3RpY2U6OSxjb21tZW50OjEwLGF1dG9TdGFydDoxMSxwcmVsb2FkOjEyLGNvbnRlbnREZXNjcmlwdGlvbjoxMyxJRDNNZXRhZGF0YToxNH0sS2U9e2luTGluZVJlc291cmNlOjEsaW5GaWxlUmVzb3VyY2U6MixpbkZpbGVOb2RlOjMsZXh0ZXJuYWxGaWxlOjQsZXh0ZXJuYWxYTUY6NSxYTUZGaWxlVVJJYW5kTm9kZUlEOjZ9LGRuPXtTdGFuZGFyZE1JRElGaWxlOjAsU3RhbmRhcmRNSURJRmlsZVR5cGUxOjEsRExTMToyLERMUzI6MyxETFMyMjo0LG1vYmlsZURMUzo1LHVua25vd246LTEsZm9sZGVyOi0yfSxybz17c3RhbmRhcmQ6MCxNTUE6MSxyZWdpc3RlcmVkOjIsbm9uUmVnaXN0ZXJlZDozfSxNdD17bm9uZTowLE1NQVVucGFja2VyOjEscmVnaXN0ZXJlZDoyLG5vblJlZ2lzdGVyZWQ6M30saW89Y2xhc3MgJHN7bGVuZ3RoO2l0ZW1Db3VudDttZXRhZGF0YUxlbmd0aDttZXRhZGF0YT17fTtub2RlRGF0YTtpbm5lck5vZGVzPVtdO3BhY2tlZENvbnRlbnQ9ITE7bm9kZVVucGFja2Vycz1bXTtyZXNvdXJjZUZvcm1hdD0idW5rbm93biI7cmVmZXJlbmNlVHlwZUlEO2NvbnN0cnVjdG9yKEEpe2xldCB0PUEuY3VycmVudEluZGV4O3RoaXMubGVuZ3RoPXVBKEEpLHRoaXMuaXRlbUNvdW50PXVBKEEpO2xldCBuPXVBKEEpLHM9QS5jdXJyZW50SW5kZXgtdCxhPW4tcyxyPUEuc2xpY2UoQS5jdXJyZW50SW5kZXgsQS5jdXJyZW50SW5kZXgrYSk7QS5jdXJyZW50SW5kZXgrPWEsdGhpcy5tZXRhZGF0YUxlbmd0aD11QShyKTtsZXQgST1yLnNsaWNlKHIuY3VycmVudEluZGV4LHIuY3VycmVudEluZGV4K3RoaXMubWV0YWRhdGFMZW5ndGgpO3IuY3VycmVudEluZGV4Kz10aGlzLm1ldGFkYXRhTGVuZ3RoO2xldCBvLGc7Zm9yKDtJLmN1cnJlbnRJbmRleDxJLmxlbmd0aDspe2lmKElbSS5jdXJyZW50SW5kZXhdPT09MClJLmN1cnJlbnRJbmRleCsrLG89dUEoSSksT2JqZWN0LnZhbHVlcyhsbikuaW5jbHVkZXMobyk/Zz1PYmplY3Qua2V5cyhsbikuZmluZChtPT5sblttXT09PW8pPz8iIjoocChgVW5rbm93biBmaWVsZCBzcGVjaWZpZXI6ICR7b31gKSxnPWB1bmtub3duXyR7b31gKTtlbHNle2xldCBtPXVBKEkpO289aEEoSSxtKSxnPW99bGV0IFE9dUEoSSk7aWYoUT09PTApe2xldCBtPXVBKEkpLHk9SS5zbGljZShJLmN1cnJlbnRJbmRleCxJLmN1cnJlbnRJbmRleCttKTtJLmN1cnJlbnRJbmRleCs9bSx1QSh5KTw0P3RoaXMubWV0YWRhdGFbZ109aEEoeSxtLTEpOnRoaXMubWV0YWRhdGFbZ109eS5zbGljZSh5LmN1cnJlbnRJbmRleCl9ZWxzZSBwKGBJbnRlcm5hdGlvbmFsIGNvbnRlbnQ6ICR7UX1gKSxJLmN1cnJlbnRJbmRleCs9dUEoSSl9bGV0IEI9ci5jdXJyZW50SW5kZXgsZD11QShyKSxoPXIuc2xpY2Uoci5jdXJyZW50SW5kZXgsQitkKTtpZihyLmN1cnJlbnRJbmRleD1CK2QsZD4wKWZvcih0aGlzLnBhY2tlZENvbnRlbnQ9ITA7aC5jdXJyZW50SW5kZXg8ZDspe2xldCBDPXt9O3N3aXRjaChDLmlkPXVBKGgpLEMuaWQpe2Nhc2UgTXQubm9uUmVnaXN0ZXJlZDpjYXNlIE10LnJlZ2lzdGVyZWQ6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtkZWZhdWx0OnRocm93IFooKSxuZXcgRXJyb3IoYFVua25vd24gdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtjYXNlIE10Lm5vbmU6Qy5zdGFuZGFyZElEPXVBKGgpO2JyZWFrO2Nhc2UgTXQuTU1BVW5wYWNrZXI6e2xldCBRPWhbaC5jdXJyZW50SW5kZXgrK107UT09PTAmJihRPDw9OCxRfD1oW2guY3VycmVudEluZGV4KytdLFE8PD04LFF8PWhbaC5jdXJyZW50SW5kZXgrK10pO2xldCBtPXVBKGgpO0MubWFudWZhY3R1cmVySUQ9USxDLm1hbnVmYWN0dXJlckludGVybmFsSUQ9bX1icmVha31DLmRlY29kZWRTaXplPXVBKGgpLHRoaXMubm9kZVVucGFja2Vycy5wdXNoKEMpfXN3aXRjaChBLmN1cnJlbnRJbmRleD10K24sdGhpcy5yZWZlcmVuY2VUeXBlSUQ9dUEoQSksdGhpcy5ub2RlRGF0YT1BLnNsaWNlKEEuY3VycmVudEluZGV4LHQrdGhpcy5sZW5ndGgpLEEuY3VycmVudEluZGV4PXQrdGhpcy5sZW5ndGgsdGhpcy5yZWZlcmVuY2VUeXBlSUQpe2Nhc2UgS2UuaW5MaW5lUmVzb3VyY2U6YnJlYWs7Y2FzZSBLZS5leHRlcm5hbFhNRjpjYXNlIEtlLmluRmlsZU5vZGU6Y2FzZSBLZS5YTUZGaWxlVVJJYW5kTm9kZUlEOmNhc2UgS2UuZXh0ZXJuYWxGaWxlOmNhc2UgS2UuaW5GaWxlUmVzb3VyY2U6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVmZXJlbmNlIHR5cGU6ICR7dGhpcy5yZWZlcmVuY2VUeXBlSUR9YCk7ZGVmYXVsdDp0aHJvdyBaKCksbmV3IEVycm9yKGBVbmtub3duIHJlZmVyZW5jZSB0eXBlOiAke3RoaXMucmVmZXJlbmNlVHlwZUlEfWApfWlmKHRoaXMuaXNGaWxlKXtpZih0aGlzLnBhY2tlZENvbnRlbnQpe2xldCBRPXRoaXMubm9kZURhdGEuc2xpY2UoMix0aGlzLm5vZGVEYXRhLmxlbmd0aCk7cChgJWNQYWNrZWQgY29udGVudC4gQXR0ZW1wdGluZyB0byBkZWZsYXRlLiBUYXJnZXQgc2l6ZTogJWMke3RoaXMubm9kZVVucGFja2Vyc1swXS5kZWNvZGVkU2l6ZX1gLGMud2FybixjLnZhbHVlKTt0cnl7dGhpcy5ub2RlRGF0YT1uZXcgWShQcyhRKS5idWZmZXIpfWNhdGNoKG0pe2lmKFooKSxtIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbmV3IEVycm9yKGBFcnJvciB1bnBhY2tpbmcgWE1GIGZpbGUgY29udGVudHM6ICR7bS5tZXNzYWdlfS5gKX19bGV0IEM9dGhpcy5tZXRhZGF0YS5yZXNvdXJjZUZvcm1hdDtpZihDPT09dm9pZCAwKXNBKCJObyByZXNvdXJjZSBmb3JtYXQgZm9yIHRoaXMgZmlsZSBub2RlISIpO2Vsc2V7Q1swXSE9PXJvLnN0YW5kYXJkJiYocChgTm9uLXN0YW5kYXJkIGZvcm1hdFR5cGVJRDogJHtDLnRvU3RyaW5nKCl9YCksdGhpcy5yZXNvdXJjZUZvcm1hdD1DLnRvU3RyaW5nKCkpO2xldCBtPUNbMV07T2JqZWN0LnZhbHVlcyhkbikuaW5jbHVkZXMobSk/dGhpcy5yZXNvdXJjZUZvcm1hdD1PYmplY3Qua2V5cyhkbikuZmluZCh5PT5kblt5XT09PW0pOnAoYFVucmVjb2duaXplZCByZXNvdXJjZSBmb3JtYXQ6ICR7bX1gKX19ZWxzZSBmb3IodGhpcy5yZXNvdXJjZUZvcm1hdD0iZm9sZGVyIjt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleDx0aGlzLm5vZGVEYXRhLmxlbmd0aDspe2xldCBDPXRoaXMubm9kZURhdGEuY3VycmVudEluZGV4LFE9dUEodGhpcy5ub2RlRGF0YSksbT10aGlzLm5vZGVEYXRhLnNsaWNlKEMsQytRKTt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleD1DK1EsdGhpcy5pbm5lck5vZGVzLnB1c2gobmV3ICRzKG0pKX19Z2V0IGlzRmlsZSgpe3JldHVybiB0aGlzLml0ZW1Db3VudD09PTB9fTtmdW5jdGlvbiBJbyhlLEEpe2UuYmFua09mZnNldD0wO2xldCB0PWhBKEEsNCk7aWYodCE9PSJYTUZfIil0aHJvdyBaKCksbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIFhNRiBIZWFkZXIhIEV4cGVjdGVkICJfWE1GIiwgZ290ICIke3R9ImApO09BKCIlY1BhcnNpbmcgWE1GIGZpbGUuLi4iLGMuaW5mbyk7bGV0IG49aEEoQSw0KTtpZihwKGAlY1hNRiB2ZXJzaW9uOiAlYyR7bn1gLGMuaW5mbyxjLnJlY29nbml6ZWQpLG49PT0iMi4wMCIpe2xldCBvPVhlKEEsNCksZz1YZShBLDQpO3AoYCVjRmlsZSBUeXBlIElEOiAlYyR7b30lYywgRmlsZSBUeXBlIFJldmlzaW9uIElEOiAlYyR7Z31gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dUEoQSk7bGV0IHM9dUEoQSk7QS5jdXJyZW50SW5kZXgrPXMsQS5jdXJyZW50SW5kZXg9dUEoQSk7bGV0IGE9bmV3IGlvKEEpLHIsST1vPT57bGV0IGc9KEIsZCk9PntvLm1ldGFkYXRhW0JdIT09dm9pZCAwJiZ0eXBlb2Ygby5tZXRhZGF0YVtCXT09InN0cmluZyImJihlLnJtaWRpSW5mb1tkXT1uZShvLm1ldGFkYXRhW0JdKSl9O2lmKGcoIm5vZGVOYW1lIiwibmFtZSIpLGcoInRpdGxlIiwibmFtZSIpLGcoImNvcHlyaWdodE5vdGljZSIsImNvcHlyaWdodCIpLGcoImNvbW1lbnQiLCJjb21tZW50Iiksby5pc0ZpbGUpc3dpdGNoKG8ucmVzb3VyY2VGb3JtYXQpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiRExTMSI6Y2FzZSJETFMyIjpjYXNlIkRMUzIyIjpjYXNlIm1vYmlsZURMUyI6cCgiJWNGb3VuZCBlbWJlZGRlZCBETFMhIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9by5ub2RlRGF0YS5idWZmZXI7YnJlYWs7Y2FzZSJTdGFuZGFyZE1JRElGaWxlIjpjYXNlIlN0YW5kYXJkTUlESUZpbGVUeXBlMSI6cCgiJWNGb3VuZCBlbWJlZGRlZCBNSURJISIsYy5yZWNvZ25pemVkKSxyPW8ubm9kZURhdGE7YnJlYWt9ZWxzZSBmb3IobGV0IEIgb2Ygby5pbm5lck5vZGVzKUkoQil9O2lmKEkoYSksWigpLCFyKXRocm93IG5ldyBFcnJvcigiTm8gTUlESSBkYXRhIGluIHRoZSBYTUYgZmlsZSEiKTtyZXR1cm4gcn12YXIgS3Q9Y2xhc3MgQWF7bmFtZT0iIjtwb3J0PTA7Y2hhbm5lbHM9bmV3IFNldDtldmVudHM9W107c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBBYTtyZXR1cm4gdC5jb3B5RnJvbShBKSx0fWNvcHlGcm9tKEEpe3RoaXMubmFtZT1BLm5hbWUsdGhpcy5wb3J0PUEucG9ydCx0aGlzLmNoYW5uZWxzPW5ldyBTZXQoQS5jaGFubmVscyksdGhpcy5ldmVudHM9QS5ldmVudHMubWFwKHQ9Pm5ldyBaQSh0LnRpY2tzLHQuc3RhdHVzQnl0ZSxuZXcgWSh0LmRhdGEpKSl9YWRkRXZlbnQoQSx0KXt0aGlzLmV2ZW50cy5zcGxpY2UodCwwLEEpfWRlbGV0ZUV2ZW50KEEpe3RoaXMuZXZlbnRzLnNwbGljZShBLDEpfXB1c2hFdmVudChBKXt0aGlzLmV2ZW50cy5wdXNoKEEpfX07ZnVuY3Rpb24gcHMoZSxBLHQpe2JBKCIlY1BhcnNpbmcgTUlESSBGaWxlLi4uIixjLmluZm8pLGUuZmlsZU5hbWU9dDtsZXQgbj1uZXcgWShBKSxzPW4sYT1nPT57bGV0IEI9aEEoZyw0KSxkPVhlKGcsNCksaD1uZXcgWShkKSxDPXt0eXBlOkIsc2l6ZTpkLGRhdGE6aH0sUT1nLnNsaWNlKGcuY3VycmVudEluZGV4LGcuY3VycmVudEluZGV4K0Muc2l6ZSk7cmV0dXJuIEMuZGF0YS5zZXQoUSwwKSxnLmN1cnJlbnRJbmRleCs9Qy5zaXplLEN9LHI9ZWUobiw0KTtpZihyPT09IlJJRkYiKXtuLmN1cnJlbnRJbmRleCs9ODtsZXQgZz1oQShuLDQpO2lmKGchPT0iUk1JRCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBSTUlESSBIZWFkZXIhIEV4cGVjdGVkICJSTUlEIiwgZ290ICIke2d9ImApO2xldCBCPXJBKG4pO2lmKEIuaGVhZGVyIT09ImRhdGEiKXRocm93IFooKSxuZXcgU3ludGF4RXJyb3IoYEludmFsaWQgUk1JREkgQ2h1bmsgaGVhZGVyISBFeHBlY3RlZCAiZGF0YSIsIGdvdCAiJHtnfSJgKTtzPUIuZGF0YTtsZXQgZD0hMSxoPSExO2Zvcig7bi5jdXJyZW50SW5kZXg8PW4ubGVuZ3RoOyl7bGV0IEM9bi5jdXJyZW50SW5kZXgsUT1yQShuLCEwKTtpZihRLmhlYWRlcj09PSJSSUZGIil7bGV0IG09aEEoUS5kYXRhLDQpLnRvTG93ZXJDYXNlKCk7bT09PSJzZmJrInx8bT09PSJzZnBrInx8bT09PSJkbHMgIj8ocCgiJWNGb3VuZCBlbWJlZGRlZCBzb3VuZGJhbmshIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9bi5zbGljZShDLEMrUS5zaXplKS5idWZmZXIpOnNBKGBVbmtub3duIFJJRkYgY2h1bms6ICIke219ImApLG09PT0iZGxzICI/ZS5pc0RMU1JNSURJPSEwOmQ9ITB9ZWxzZSBpZihRLmhlYWRlcj09PSJMSVNUIiYmaEEoUS5kYXRhLDQpPT09IklORk8iKWZvcihwKCIlY0ZvdW5kIFJNSURJIElORk8gY2h1bmshIixjLnJlY29nbml6ZWQpO1EuZGF0YS5jdXJyZW50SW5kZXg8PVEuc2l6ZTspe2xldCB5PXJBKFEuZGF0YSwhMCksRj15LmhlYWRlcixrPXkuZGF0YTtzd2l0Y2goRil7ZGVmYXVsdDpzQShgVW5rbm93biBSTUlESSBJbmZvOiAke0Z9YCk7YnJlYWs7Y2FzZSJJTkFNIjplLnJtaWRpSW5mby5uYW1lPWs7YnJlYWs7Y2FzZSJJQUxCIjpjYXNlIklQUkQiOmUucm1pZGlJbmZvLmFsYnVtPWs7YnJlYWs7Y2FzZSJJQ1JUIjpjYXNlIklDUkQiOmUucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1rO2JyZWFrO2Nhc2UiSUFSVCI6ZS5ybWlkaUluZm8uYXJ0aXN0PWs7YnJlYWs7Y2FzZSJJR05SIjplLnJtaWRpSW5mby5nZW5yZT1rO2JyZWFrO2Nhc2UiSVBJQyI6ZS5ybWlkaUluZm8ucGljdHVyZT1rO2JyZWFrO2Nhc2UiSUNPUCI6ZS5ybWlkaUluZm8uY29weXJpZ2h0PWs7YnJlYWs7Y2FzZSJJQ01UIjplLnJtaWRpSW5mby5jb21tZW50PWs7YnJlYWs7Y2FzZSJJRU5HIjplLnJtaWRpSW5mby5lbmdpbmVlcj1rO2JyZWFrO2Nhc2UiSVNGVCI6ZS5ybWlkaUluZm8uc29mdHdhcmU9azticmVhaztjYXNlIklTQkoiOmUucm1pZGlJbmZvLnN1YmplY3Q9azticmVhaztjYXNlIklFTkMiOmUucm1pZGlJbmZvLmluZm9FbmNvZGluZz1rO2JyZWFrO2Nhc2UiTUVOQyI6ZS5ybWlkaUluZm8ubWlkaUVuY29kaW5nPWs7YnJlYWs7Y2FzZSJEQk5LIjplLmJhbmtPZmZzZXQ9eHMoaywyKSxoPSEwO2JyZWFrfX19ZCYmIWgmJihlLmJhbmtPZmZzZXQ9MSksZS5pc0RMU1JNSURJJiYoZS5iYW5rT2Zmc2V0PTApLGUuZW1iZWRkZWRTb3VuZEJhbms9PT12b2lkIDAmJihlLmJhbmtPZmZzZXQ9MCl9ZWxzZSByPT09IlhNRl8iP3M9SW8oZSxuKTpzPW47bGV0IEk9YShzKTtpZihJLnR5cGUhPT0iTVRoZCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBNSURJIEhlYWRlciEgRXhwZWN0ZWQgIk1UaGQiLCBnb3QgIiR7SS50eXBlfSJgKTtpZihJLnNpemUhPT02KXRocm93IFooKSxuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBNSURJIGhlYWRlciBjaHVuayBzaXplISBFeHBlY3RlZCA2LCBnb3QgJHtJLnNpemV9YCk7ZS5mb3JtYXQ9WGUoSS5kYXRhLDIpO2xldCBvPVhlKEkuZGF0YSwyKTtlLnRpbWVEaXZpc2lvbj1YZShJLmRhdGEsMik7Zm9yKGxldCBnPTA7ZzxvO2crKyl7bGV0IEI9bmV3IEt0LGQ9YShzKTtpZihkLnR5cGUhPT0iTVRyayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCB0cmFjayBoZWFkZXIhIEV4cGVjdGVkICJNVHJrIiBnb3QgIiR7ZC50eXBlfSJgKTtsZXQgaCxDPTA7Zm9yKGUuZm9ybWF0PT09MiYmZz4wJiYoQys9ZS50cmFja3NbZy0xXS5ldmVudHNbZS50cmFja3NbZy0xXS5ldmVudHMubGVuZ3RoLTFdLnRpY2tzKTtkLmRhdGEuY3VycmVudEluZGV4PGQuc2l6ZTspe0MrPXVBKGQuZGF0YSk7bGV0IFE9ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXhdLG07aWYoaCE9PXZvaWQgMCYmUTwxMjgpbT1oO2Vsc2V7aWYoUTwxMjgpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgVW5leHBlY3RlZCBieXRlIHdpdGggbm8gcnVubmluZyBieXRlLiAoJHtRfSlgKTttPWQuZGF0YVtkLmRhdGEuY3VycmVudEluZGV4KytdfWxldCB5PUthKG0pLEY7c3dpdGNoKHkpe2Nhc2UtMTpGPTA7YnJlYWs7Y2FzZS0yOm09ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXgrK10sRj11QShkLmRhdGEpO2JyZWFrO2Nhc2UtMzpGPXVBKGQuZGF0YSk7YnJlYWs7ZGVmYXVsdDpGPU9hW20+PjRdLGg9bTticmVha31sZXQgaz1uZXcgWShGKTtrLnNldChkLmRhdGEuc2xpY2UoZC5kYXRhLmN1cnJlbnRJbmRleCxkLmRhdGEuY3VycmVudEluZGV4K0YpLDApO2xldCBEPW5ldyBaQShDLG0sayk7Qi5wdXNoRXZlbnQoRCksZC5kYXRhLmN1cnJlbnRJbmRleCs9Rn1lLnRyYWNrcy5wdXNoKEIpLHAoYCVjUGFyc2VkICVjJHtlLnRyYWNrcy5sZW5ndGh9JWMgLyAlYyR7ZS50cmFja3MubGVuZ3RofWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfXAoIiVjQWxsIHRyYWNrcyBwYXJzZWQgY29ycmVjdGx5ISIsYy5yZWNvZ25pemVkKSxlLmZsdXNoKCExKSxaKCkscChgJWNNSURJIGZpbGUgcGFyc2VkLiBUb3RhbCB0aWNrIHRpbWU6ICVjJHtlLmxhc3RWb2ljZUV2ZW50VGlja30lYywgdG90YWwgc2Vjb25kcyB0aW1lOiAlYyR7ZS5kdXJhdGlvbn1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dmFyIGdvPW5ldyBNYXAoW1siZG9taW5nbyIsIlN1bmRheSJdLFsic2VndW5kYS1mZWlyYSIsIk1vbmRheSJdLFsidGVyXHhFN2EtZmVpcmEiLCJUdWVzZGF5Il0sWyJxdWFydGEtZmVpcmEiLCJXZWRuZXNkYXkiXSxbInF1aW50YS1mZWlyYSIsIlRodXJzZGF5Il0sWyJzZXh0YS1mZWlyYSIsIkZyaWRheSJdLFsic1x4RTFiYWRvIiwiU2F0dXJkYXkiXSxbImphbmVpcm8iLCJKYW51YXJ5Il0sWyJmZXZlcmVpcm8iLCJGZWJydWFyeSJdLFsibWFyXHhFN28iLCJNYXJjaCJdLFsiYWJyaWwiLCJBcHJpbCJdLFsibWFpbyIsIk1heSJdLFsianVuaG8iLCJKdW5lIl0sWyJqdWxobyIsIkp1bHkiXSxbImFnb3N0byIsIkF1Z3VzdCJdLFsic2V0ZW1icm8iLCJTZXB0ZW1iZXIiXSxbIm91dHVicm8iLCJPY3RvYmVyIl0sWyJub3ZlbWJybyIsIk5vdmVtYmVyIl0sWyJkZXplbWJybyIsIkRlY2VtYmVyIl1dKSxjbz1bZ29dO2Z1bmN0aW9uIEVvKGUpe2ZvcihsZXQgQSBvZiBjbyl7bGV0IHQ9ZTtBLmZvckVhY2goKHMsYSk9PntsZXQgcj1uZXcgUmVnRXhwKGEsImdpIik7dD10LnJlcGxhY2UocixzKX0pO2xldCBuPW5ldyBEYXRlKHQpO2lmKCFpc05hTihuLmdldFRpbWUoKSkpcmV0dXJuIG59fWZ1bmN0aW9uIEJvKGUpe2xldCBBPS9eKFxkezJ9KVwuKFxkezJ9KVwuKFxkezR9KSQvLmV4ZWMoZSk7aWYoQSl7bGV0IHQ9cGFyc2VJbnQoQVsxXSksbj1wYXJzZUludChBWzJdKS0xLHM9cGFyc2VJbnQoQVszXSksYT1uZXcgRGF0ZShzLG4sdCk7aWYoIWlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4gYX19ZnVuY3Rpb24gQ28oZSl7bGV0IEE9L14oXGR7MSwyfSlcc3sxLDJ9KFxkezEsMn0pXHN7MSwyfShcZHsyfSkkLy5leGVjKGUpO2lmKEEpe2xldCB0PUFbMV0sbj0ocGFyc2VJbnQoQVsyXSkrMSkudG9TdHJpbmcoKSxzPUFbM10sYT1uZXcgRGF0ZShgJHtufS8ke3R9LyR7c31gKTtpZighaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiBhfX1mdW5jdGlvbiBobyhlKXtsZXQgdD0vXGJcZHs0fVxiLy5leGVjKGUpO3JldHVybiB0P25ldyBEYXRlKHRbMF0pOnZvaWQgMH1mdW5jdGlvbiB0cyhlKXtpZihlPWUudHJpbSgpLGUubGVuZ3RoPDEpcmV0dXJuIG5ldyBEYXRlO2xldCBBPWUucmVwbGFjZSgvXGIoXGQrKShzdHxuZHxyZHx0aClcYi9nLCIkMSIpLHQ9bmV3IERhdGUoQSk7aWYoaXNOYU4odC5nZXRUaW1lKCkpKXtsZXQgbj1FbyhlKTtpZihuKXJldHVybiBuO2xldCBzPUJvKGUpO2lmKHMpcmV0dXJuIHM7bGV0IGE9Q28oZSk7aWYoYSlyZXR1cm4gYTtsZXQgcj1obyhlKTtyZXR1cm4gcnx8KHNBKGBJbnZhbGlkIGRhdGU6ICIke2V9Ii4gUmVwbGFjaW5nIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSFgKSxuZXcgRGF0ZSl9cmV0dXJuIHR9dmFyIExlPWNsYXNzIEx0e3RyYWNrcz1bXTt0aW1lRGl2aXNpb249MDtkdXJhdGlvbj0wO3RlbXBvQ2hhbmdlcz1be3RpY2tzOjAsdGVtcG86MTIwfV07ZXh0cmFNZXRhZGF0YT1bXTtseXJpY3M9W107Zmlyc3ROb3RlT249MDtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307bGFzdFZvaWNlRXZlbnRUaWNrPTA7cG9ydENoYW5uZWxPZmZzZXRNYXA9WzBdO2xvb3A9e3N0YXJ0OjAsZW5kOjB9O2ZpbGVOYW1lO2Zvcm1hdD0wO3JtaWRpSW5mbz17fTtiYW5rT2Zmc2V0PTA7aXNLYXJhb2tlRmlsZT0hMTtpc011bHRpUG9ydD0hMTtpc0RMU1JNSURJPSExO2VtYmVkZGVkU291bmRCYW5rO2JpbmFyeU5hbWU7Z2V0IGluZm9FbmNvZGluZygpe2xldCBBPXRoaXMucm1pZGlJbmZvLmluZm9FbmNvZGluZztpZighQSlyZXR1cm47bGV0IHQ9QS5ieXRlTGVuZ3RoO3JldHVybiBBW0EuYnl0ZUxlbmd0aC0xXT09PTAmJnQtLSxlZShBLHQpfXN0YXRpYyBmcm9tQXJyYXlCdWZmZXIoQSx0PSIiKXtsZXQgbj1uZXcgTHQ7cmV0dXJuIHBzKG4sQSx0KSxufXN0YXRpYyBhc3luYyBmcm9tRmlsZShBKXtsZXQgdD1uZXcgTHQ7cmV0dXJuIHBzKHQsYXdhaXQgQS5hcnJheUJ1ZmZlcigpLEEubmFtZSksdH1zdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEx0O3JldHVybiB0LmNvcHlGcm9tKEEpLHR9Y29weUZyb20oQSl7dGhpcy5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbms9QT8uZW1iZWRkZWRTb3VuZEJhbms/LnNsaWNlKDApPz92b2lkIDAsdGhpcy50cmFja3M9QS50cmFja3MubWFwKHQ9Pkt0LmNvcHlGcm9tKHQpKX1taWRpVGlja3NUb1NlY29uZHMoQSl7bGV0IHQ9MDtmb3IoO0E+MDspe2xldCBuPXRoaXMudGVtcG9DaGFuZ2VzLmZpbmQoYT0+YS50aWNrczxBKTtpZighbilyZXR1cm4gdDtsZXQgcz1BLW4udGlja3M7dCs9cyo2MC8obi50ZW1wbyp0aGlzLnRpbWVEaXZpc2lvbiksQS09c31yZXR1cm4gdH1nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKEEpe3JldHVybiB0byh0aGlzLEEpfWZsdXNoKEE9ITApe2lmKEEpZm9yKGxldCB0IG9mIHRoaXMudHJhY2tzKXQuZXZlbnRzLnNvcnQoKG4scyk9Pm4udGlja3Mtcy50aWNrcyk7dGhpcy5wYXJzZUludGVybmFsKCl9Z2V0Tm90ZVRpbWVzKEE9MCl7cmV0dXJuIG5vKHRoaXMsQSl9d3JpdGVNSURJKCl7cmV0dXJuIFZhKHRoaXMpfXdyaXRlUk1JREkoQSx0PVNzKXtyZXR1cm4gZW8odGhpcyxBLCRuKHQsU3MpKX1tb2RpZnkoQT1bXSx0PVtdLG49W10scz1bXSl7YW8odGhpcyxBLHQsbixzKX1hcHBseVNuYXBzaG90KEEpe29vKHRoaXMsQSl9Z2V0TmFtZShBPSJTaGlmdF9KSVMiKXtsZXQgdD0iIixuPXRoaXMuZ2V0Uk1JREluZm8oIm5hbWUiKTtpZihuKXJldHVybiBuLnRyaW0oKTtpZih0aGlzLmJpbmFyeU5hbWUpe0E9dGhpcy5nZXRSTUlESW5mbygibWlkaUVuY29kaW5nIik/P0E7dHJ5e3Q9bmV3IFRleHREZWNvZGVyKEEpLmRlY29kZSh0aGlzLmJpbmFyeU5hbWUpLnRyaW0oKX1jYXRjaChzKXtzQShgRmFpbGVkIHRvIGRlY29kZSBNSURJIG5hbWU6ICR7c31gKX19cmV0dXJuIHR8fHRoaXMuZmlsZU5hbWV9Z2V0RXh0cmFNZXRhZGF0YShBPSJTaGlmdF9KSVMiKXtBPXRoaXMuaW5mb0VuY29kaW5nPz9BO2xldCB0PW5ldyBUZXh0RGVjb2RlcihBKTtyZXR1cm4gdGhpcy5leHRyYU1ldGFkYXRhLm1hcChuPT50LmRlY29kZShuLmRhdGEpLnJlcGxhY2UoL0BUfEBBL2csIiIpLnRyaW0oKSl9c2V0Uk1JREluZm8oQSx0KXtpZih0aGlzLnJtaWRpSW5mby5pbmZvRW5jb2Rpbmc9bmUoInV0Zi04IiwhMCksQT09PSJwaWN0dXJlIil0aGlzLnJtaWRpSW5mby5waWN0dXJlPW5ldyBVaW50OEFycmF5KHQpO2Vsc2UgaWYoQT09PSJjcmVhdGlvbkRhdGUiKXRoaXMucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1uZSh0LnRvSVNPU3RyaW5nKCksITApO2Vsc2V7bGV0IG49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO3RoaXMucm1pZGlJbmZvW0FdPW5ldyBVaW50OEFycmF5KFsuLi5uLDBdKX19Z2V0Uk1JREluZm8oQSl7aWYoIXRoaXMucm1pZGlJbmZvW0FdKXJldHVybjtsZXQgdD10aGlzLmluZm9FbmNvZGluZz8/IlVURi04IjtpZihBPT09InBpY3R1cmUiKXJldHVybiB0aGlzLnJtaWRpSW5mb1tBXS5idWZmZXI7aWYoQT09PSJjcmVhdGlvbkRhdGUiKXJldHVybiB0cyhlZSh0aGlzLnJtaWRpSW5mb1tBXSkpO3RyeXtsZXQgbj1uZXcgVGV4dERlY29kZXIodCkscz10aGlzLnJtaWRpSW5mb1tBXTtyZXR1cm4gc1tzLmxlbmd0aC0xXT09PTAmJihzPXM/LnNsaWNlKDAscy5sZW5ndGgtMSkpLG4uZGVjb2RlKHMuYnVmZmVyKS50cmltKCl9Y2F0Y2gobil7c0EoYEZhaWxlZCB0byBkZWNvZGUgJHtBfSBuYW1lOiAke259YCk7cmV0dXJufX1jb3B5TWV0YWRhdGFGcm9tKEEpe3RoaXMuZmlsZU5hbWU9QS5maWxlTmFtZSx0aGlzLnRpbWVEaXZpc2lvbj1BLnRpbWVEaXZpc2lvbix0aGlzLmR1cmF0aW9uPUEuZHVyYXRpb24sdGhpcy5maXJzdE5vdGVPbj1BLmZpcnN0Tm90ZU9uLHRoaXMubGFzdFZvaWNlRXZlbnRUaWNrPUEubGFzdFZvaWNlRXZlbnRUaWNrLHRoaXMuZm9ybWF0PUEuZm9ybWF0LHRoaXMuYmFua09mZnNldD1BLmJhbmtPZmZzZXQsdGhpcy5pc0thcmFva2VGaWxlPUEuaXNLYXJhb2tlRmlsZSx0aGlzLmlzTXVsdGlQb3J0PUEuaXNNdWx0aVBvcnQsdGhpcy5pc0RMU1JNSURJPUEuaXNETFNSTUlESSx0aGlzLmlzRExTUk1JREk9QS5pc0RMU1JNSURJLHRoaXMudGVtcG9DaGFuZ2VzPVsuLi5BLnRlbXBvQ2hhbmdlc10sdGhpcy5leHRyYU1ldGFkYXRhPUEuZXh0cmFNZXRhZGF0YS5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLmx5cmljcz1BLmx5cmljcy5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLnBvcnRDaGFubmVsT2Zmc2V0TWFwPVsuLi5BLnBvcnRDaGFubmVsT2Zmc2V0TWFwXSx0aGlzLmJpbmFyeU5hbWU9QT8uYmluYXJ5TmFtZT8uc2xpY2UoKSx0aGlzLmxvb3A9ey4uLkEubG9vcH0sdGhpcy5rZXlSYW5nZT17Li4uQS5rZXlSYW5nZX0sdGhpcy5ybWlkaUluZm89e30sT2JqZWN0LmVudHJpZXMoQS5ybWlkaUluZm8pLmZvckVhY2godD0+e2xldCBuPXRbMF0scz10WzFdO3RoaXMucm1pZGlJbmZvW25dPXMuc2xpY2UoKX0pfXBhcnNlSW50ZXJuYWwoKXtPQSgiJWNJbnRlcnByZXRpbmcgTUlESSBldmVudHMuLi4iLGMuaW5mbyk7bGV0IEE9ITE7dGhpcy5rZXlSYW5nZT17bWF4OjAsbWluOjEyN30sdGhpcy5leHRyYU1ldGFkYXRhPVtdO2xldCB0PSExO3R5cGVvZiB0aGlzLnJtaWRpSW5mby5uYW1lPCJ1IiYmKHQ9ITApO2xldCBuPW51bGwscz1udWxsO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9bmV3IFNldCxCPSExO2ZvcihsZXQgaD0wO2g8by5ldmVudHMubGVuZ3RoO2grKyl7bGV0IEM9by5ldmVudHNbaF07aWYoQy5zdGF0dXNCeXRlPj0xMjgmJkMuc3RhdHVzQnl0ZTwyNDApe0I9ITA7Zm9yKGxldCBtPTA7bTxDLmRhdGEubGVuZ3RoO20rKylDLmRhdGFbbV09TWF0aC5taW4oMTI3LEMuZGF0YVttXSk7c3dpdGNoKEMudGlja3M+dGhpcy5sYXN0Vm9pY2VFdmVudFRpY2smJih0aGlzLmxhc3RWb2ljZUV2ZW50VGljaz1DLnRpY2tzKSxDLnN0YXR1c0J5dGUmMjQwKXtjYXNlIE0uY29udHJvbGxlckNoYW5nZTpzd2l0Y2goQy5kYXRhWzBdKXtjYXNlIDI6Y2FzZSAxMTY6bj1DLnRpY2tzO2JyZWFrO2Nhc2UgNDpjYXNlIDExNzpzPT09bnVsbD9zPUMudGlja3M6cz0wO2JyZWFrO2Nhc2UgMDp0aGlzLmlzRExTUk1JREkmJkMuZGF0YVsxXSE9PTAmJkMuZGF0YVsxXSE9PTEyNyYmKHAoIiVjRExTIFJNSURJIHdpdGggb2Zmc2V0IDEgZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpLHRoaXMuYmFua09mZnNldD0xKX1icmVhaztjYXNlIE0ubm90ZU9uOntnLmFkZChDLnN0YXR1c0J5dGUmMTUpO2xldCBtPUMuZGF0YVswXTt0aGlzLmtleVJhbmdlLm1pbj1NYXRoLm1pbih0aGlzLmtleVJhbmdlLm1pbixtKSx0aGlzLmtleVJhbmdlLm1heD1NYXRoLm1heCh0aGlzLmtleVJhbmdlLm1heCxtKTticmVha319fWxldCBRPWVlKEMuZGF0YSk7c3dpdGNoKEMuc3RhdHVzQnl0ZSl7Y2FzZSBNLmVuZE9mVHJhY2s6aCE9PW8uZXZlbnRzLmxlbmd0aC0xJiYoaC0tLG8uZGVsZXRlRXZlbnQoaCksc0EoIlVuZXhwZWN0ZWQgRW5kT2ZUcmFjay4gUmVtb3ZpbmchIikpO2JyZWFrO2Nhc2UgTS5zZXRUZW1wbzp0aGlzLnRlbXBvQ2hhbmdlcy5wdXNoKHt0aWNrczpDLnRpY2tzLHRlbXBvOjZlNy9RdChDLmRhdGEsMyl9KTticmVhaztjYXNlIE0ubWFya2VyOnN3aXRjaChRLnRyaW0oKS50b0xvd2VyQ2FzZSgpKXtkZWZhdWx0OmJyZWFrO2Nhc2Uic3RhcnQiOmNhc2UibG9vcHN0YXJ0IjpuPUMudGlja3M7YnJlYWs7Y2FzZSJsb29wZW5kIjpzPUMudGlja3N9YnJlYWs7Y2FzZSBNLmNvcHlyaWdodDp0aGlzLmV4dHJhTWV0YWRhdGEucHVzaChDKTticmVhaztjYXNlIE0ubHlyaWM6US50cmltKCkuc3RhcnRzV2l0aCgiQEtNSURJIEtBUkFPS0UgRklMRSIpJiYodGhpcy5pc0thcmFva2VGaWxlPSEwLHAoIiVjS2FyYW9rZSBNSURJIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKSksdGhpcy5pc0thcmFva2VGaWxlP0Muc3RhdHVzQnl0ZT1NLnRleHQ6dGhpcy5seXJpY3MucHVzaChDKTtjYXNlIE0udGV4dDp7bGV0IG09US50cmltKCk7bS5zdGFydHNXaXRoKCJAS01JREkgS0FSQU9LRSBGSUxFIik/KHRoaXMuaXNLYXJhb2tlRmlsZT0hMCxwKCIlY0thcmFva2UgTUlESSBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpOnRoaXMuaXNLYXJhb2tlRmlsZSYmKG0uc3RhcnRzV2l0aCgiQFQiKXx8bS5zdGFydHNXaXRoKCJAQSIpP0E/dGhpcy5leHRyYU1ldGFkYXRhLnB1c2goQyk6KHRoaXMuYmluYXJ5TmFtZT1DLmRhdGEuc2xpY2UoMiksQT0hMCx0PSEwKTptLnN0YXJ0c1dpdGgoIkAiKXx8dGhpcy5seXJpY3MucHVzaChDKSk7YnJlYWt9fX1vLmNoYW5uZWxzPWcsby5uYW1lPSIiO2xldCBkPW8uZXZlbnRzLmZpbmQoaD0+aC5zdGF0dXNCeXRlPT09TS50cmFja05hbWUpO2QmJnRoaXMudHJhY2tzLmluZGV4T2Yobyk+MCYmKG8ubmFtZT1lZShkLmRhdGEpLCFCJiYhby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInNldHVwIikmJnRoaXMuZXh0cmFNZXRhZGF0YS5wdXNoKGQpKX10aGlzLnRlbXBvQ2hhbmdlcy5yZXZlcnNlKCkscCgiJWNDb3JyZWN0aW5nIGxvb3BzLCBwb3J0cyBhbmQgZGV0ZWN0aW5nIG5vdGVzLi4uIixjLmluZm8pO2xldCBhPVtdO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9by5ldmVudHMuZmluZChCPT4oQi5zdGF0dXNCeXRlJjI0MCk9PT1NLm5vdGVPbik7ZyYmYS5wdXNoKGcudGlja3MpfXRoaXMuZmlyc3ROb3RlT249TWF0aC5taW4oLi4uYSkscChgJWNGaXJzdCBub3RlLW9uIGRldGVjdGVkIGF0OiAlYyR7dGhpcy5maXJzdE5vdGVPbn0lYyB0aWNrcyFgLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxuIT09bnVsbCYmcz09PW51bGw/KG49dGhpcy5maXJzdE5vdGVPbixzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKToobj8/PXRoaXMuZmlyc3ROb3RlT24sKHM9PT1udWxsfHxzPT09MCkmJihzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKSksdGhpcy5sb29wPXtzdGFydDpuLGVuZDpzfSxwKGAlY0xvb3AgcG9pbnRzOiBzdGFydDogJWMke3RoaXMubG9vcC5zdGFydH0lYyBlbmQ6ICVjJHt0aGlzLmxvb3AuZW5kfWAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgcj0wO3RoaXMucG9ydENoYW5uZWxPZmZzZXRNYXA9W107Zm9yKGxldCBvIG9mIHRoaXMudHJhY2tzKWlmKG8ucG9ydD0tMSxvLmNoYW5uZWxzLnNpemUhPT0wKWZvcihsZXQgZyBvZiBvLmV2ZW50cyl7aWYoZy5zdGF0dXNCeXRlIT09TS5taWRpUG9ydCljb250aW51ZTtsZXQgQj1nLmRhdGFbMF07by5wb3J0PUIsdGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcFtCXT09PXZvaWQgMCYmKHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXBbQl09cixyKz0xNil9dGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bLi4udGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcF0ubWFwKG89Pm8/PzApO2xldCBJPTEvMDtmb3IobGV0IG8gb2YgdGhpcy50cmFja3Mpby5wb3J0IT09LTEmJkk+by5wb3J0JiYoST1vLnBvcnQpO0k9PT0xLzAmJihJPTApO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcykoby5wb3J0PT09LTF8fG8ucG9ydD09PXZvaWQgMCkmJihvLnBvcnQ9SSk7aWYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcC5sZW5ndGg9PT0wJiYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bMF0pLHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXAubGVuZ3RoPDI/cCgiJWNObyBhZGRpdGlvbmFsIE1JREkgUG9ydHMgZGV0ZWN0ZWQuIixjLmluZm8pOih0aGlzLmlzTXVsdGlQb3J0PSEwLHAoIiVjTUlESSBQb3J0cyBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpLCF0KWlmKHRoaXMudHJhY2tzLmxlbmd0aD4xKXtpZih0aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChvPT5vLnN0YXR1c0J5dGU+PU0ubm90ZU9uJiZvLnN0YXR1c0J5dGU8TS5wb2x5UHJlc3N1cmUpPT09dm9pZCAwKXtsZXQgbz10aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChnPT5nLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSk7byYmKHRoaXMuYmluYXJ5TmFtZT1vLmRhdGEpfX1lbHNle2xldCBvPXRoaXMudHJhY2tzWzBdLmV2ZW50cy5maW5kKGc9Pmcuc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lKTtvJiYodGhpcy5iaW5hcnlOYW1lPW8uZGF0YSl9aWYodGhpcy5leHRyYU1ldGFkYXRhPXRoaXMuZXh0cmFNZXRhZGF0YS5maWx0ZXIobz0+by5kYXRhLmxlbmd0aD4wKSx0aGlzLmx5cmljcy5zb3J0KChvLGcpPT5vLnRpY2tzLWcudGlja3MpLCF0aGlzLnRyYWNrcy5zb21lKG89Pm8uZXZlbnRzWzBdLnRpY2tzPT09MCkpe2xldCBvPXRoaXMudHJhY2tzWzBdLGc9dGhpcz8uYmluYXJ5TmFtZT8uYnVmZmVyO2d8fChnPW5ldyBVaW50OEFycmF5KDApLmJ1ZmZlciksby5ldmVudHMudW5zaGlmdChuZXcgWkEoMCxNLnRyYWNrTmFtZSxuZXcgWShnKSkpfXRoaXMuZHVyYXRpb249dGhpcy5taWRpVGlja3NUb1NlY29uZHModGhpcy5sYXN0Vm9pY2VFdmVudFRpY2spLHRoaXMuYmluYXJ5TmFtZSYmdGhpcy5iaW5hcnlOYW1lLmxlbmd0aDwxJiYodGhpcy5iaW5hcnlOYW1lPXZvaWQgMCkscCgiJWNTdWNjZXNzISIsYy5yZWNvZ25pemVkKSxaKCl9fTtmdW5jdGlvbiBsbyhlLEEpe2lmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJmUuc3RhdHVzQnl0ZT49MTI4KXt0aGlzLnNlbmRNSURJTWVzc2FnZShbZS5zdGF0dXNCeXRlLC4uLmUuZGF0YV0pO3JldHVybn1sZXQgdD10aGlzLl9taWRpRGF0YS50cmFja3NbQV0sbj1BcyhlLnN0YXR1c0J5dGUpLHM9dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzW3RoaXMuY3VycmVudE1JRElQb3J0c1tBXV18fDA7c3dpdGNoKG4uY2hhbm5lbCs9cyxuLnN0YXR1cyl7Y2FzZSBNLm5vdGVPbjp7bGV0IGE9ZS5kYXRhWzFdO2lmKGE+MCl0aGlzLnN5bnRoLm5vdGVPbihuLmNoYW5uZWwsZS5kYXRhWzBdLGEpLHRoaXMucGxheWluZ05vdGVzLnB1c2goe21pZGlOb3RlOmUuZGF0YVswXSxjaGFubmVsOm4uY2hhbm5lbCx2ZWxvY2l0eTphfSk7ZWxzZXt0aGlzLnN5bnRoLm5vdGVPZmYobi5jaGFubmVsLGUuZGF0YVswXSk7bGV0IHI9dGhpcy5wbGF5aW5nTm90ZXMuZmluZEluZGV4KEk9PkkubWlkaU5vdGU9PT1lLmRhdGFbMF0mJkkuY2hhbm5lbD09PW4uY2hhbm5lbCk7ciE9PS0xJiZ0aGlzLnBsYXlpbmdOb3Rlcy5zcGxpY2UociwxKX1icmVha31jYXNlIE0ubm90ZU9mZjp7dGhpcy5zeW50aC5ub3RlT2ZmKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2xldCBhPXRoaXMucGxheWluZ05vdGVzLmZpbmRJbmRleChyPT5yLm1pZGlOb3RlPT09ZS5kYXRhWzBdJiZyLmNoYW5uZWw9PT1uLmNoYW5uZWwpO2EhPT0tMSYmdGhpcy5wbGF5aW5nTm90ZXMuc3BsaWNlKGEsMSk7YnJlYWt9Y2FzZSBNLnBpdGNoV2hlZWw6dGhpcy5zeW50aC5waXRjaFdoZWVsKG4uY2hhbm5lbCxlLmRhdGFbMV08PDd8ZS5kYXRhWzBdKTticmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0sZS5kYXRhWzFdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2JyZWFrO2Nhc2UgTS5wb2x5UHJlc3N1cmU6dGhpcy5zeW50aC5wb2x5UHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSxlLmRhdGFbMV0pO2JyZWFrO2Nhc2UgTS5jaGFubmVsUHJlc3N1cmU6dGhpcy5zeW50aC5jaGFubmVsUHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5bnRoLnN5c3RlbUV4Y2x1c2l2ZShlLmRhdGEscyk7YnJlYWs7Y2FzZSBNLnNldFRlbXBvOntsZXQgYT02ZTcvUXQoZS5kYXRhLDMpO3RoaXMub25lVGlja1RvU2Vjb25kcz02MC8oYSp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHRoaXMub25lVGlja1RvU2Vjb25kcz09PTAmJih0aGlzLm9uZVRpY2tUb1NlY29uZHM9NjAvKDEyMCp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHAoImludmFsaWQgdGVtcG8hIGZhbGxpbmcgYmFjayB0byAxMjAgQlBNIiksYT0xMjApO2JyZWFrfWNhc2UgTS50aW1lU2lnbmF0dXJlOmNhc2UgTS5lbmRPZlRyYWNrOmNhc2UgTS5taWRpQ2hhbm5lbFByZWZpeDpjYXNlIE0uc29uZ1Bvc2l0aW9uOmNhc2UgTS5hY3RpdmVTZW5zaW5nOmNhc2UgTS5rZXlTaWduYXR1cmU6Y2FzZSBNLnNlcXVlbmNlTnVtYmVyOmNhc2UgTS5zZXF1ZW5jZVNwZWNpZmljOmNhc2UgTS50ZXh0OmNhc2UgTS5seXJpYzpjYXNlIE0uY29weXJpZ2h0OmNhc2UgTS50cmFja05hbWU6Y2FzZSBNLm1hcmtlcjpjYXNlIE0uY3VlUG9pbnQ6Y2FzZSBNLmluc3RydW1lbnROYW1lOmNhc2UgTS5wcm9ncmFtTmFtZTpicmVhaztjYXNlIE0ubWlkaVBvcnQ6dGhpcy5hc3NpZ25NSURJUG9ydChBLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnJlc2V0OnRoaXMuc3ludGguc3RvcEFsbENoYW5uZWxzKCksdGhpcy5zeW50aC5yZXNldEFsbENvbnRyb2xsZXJzKCk7YnJlYWs7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBFdmVudDogJWMke2Uuc3RhdHVzQnl0ZX0lYyBzdGF0dXMgYnl0ZTogJWMke09iamVjdC5rZXlzKE0pLmZpbmQoYT0+TVthXT09PW4uc3RhdHVzKX1gLGMud2FybixjLnVucmVjb2duaXplZCxjLndhcm4sYy52YWx1ZSk7YnJlYWt9bi5zdGF0dXM+PTAmJm4uc3RhdHVzPDEyOCYmdGhpcy5jYWxsRXZlbnQoIm1ldGFFdmVudCIse2V2ZW50OmUsdHJhY2tJbmRleDpBfSl9ZnVuY3Rpb24gUW8oKXtpZih0aGlzLnBhdXNlZHx8IXRoaXMuX21pZGlEYXRhKXJldHVybjtsZXQgZT10aGlzLmN1cnJlbnRUaW1lO2Zvcig7dGhpcy5wbGF5ZWRUaW1lPGU7KXtsZXQgQT10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxuPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tBXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbQV0rK107dGhpcy5wcm9jZXNzRXZlbnQobixBKTtsZXQgcz10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxhPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tzXTtpZih0aGlzLmxvb3BDb3VudD4wJiZ0aGlzLl9taWRpRGF0YS5sb29wLmVuZDw9bi50aWNrcyl7dGhpcy5sb29wQ291bnQhPT0xLzAmJih0aGlzLmxvb3BDb3VudC0tLHRoaXMuY2FsbEV2ZW50KCJsb29wQ291bnRDaGFuZ2UiLHtuZXdDb3VudDp0aGlzLmxvb3BDb3VudH0pKSx0aGlzLnNldFRpbWVUaWNrcyh0aGlzLl9taWRpRGF0YS5sb29wLnN0YXJ0KTtyZXR1cm59aWYoYS5ldmVudHMubGVuZ3RoPD10aGlzLmV2ZW50SW5kZXhlc1tzXSl7dGhpcy5zb25nSXNGaW5pc2hlZCgpO3JldHVybn1sZXQgcj1hLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tzXV07dGhpcy5wbGF5ZWRUaW1lKz10aGlzLm9uZVRpY2tUb1NlY29uZHMqKHIudGlja3Mtbi50aWNrcyl9fWZ1bmN0aW9uIHVvKGUsQSl7dGhpcy5fbWlkaURhdGEudHJhY2tzW2VdLmNoYW5uZWxzLnNpemUhPT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQ9PT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2LHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0c1tBXT0wKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09PT12b2lkIDAmJih0aGlzLnN5bnRoLm1pZGlDaGFubmVscy5sZW5ndGg8dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrMTUmJnRoaXMuYWRkTmV3TUlESVBvcnQoKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2KSx0aGlzLmN1cnJlbnRNSURJUG9ydHNbZV09QSl9ZnVuY3Rpb24gZm8oZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiVGhpcyBNSURJIGhhcyBubyB0cmFja3MhIik7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqZS50aW1lRGl2aXNpb24pLHRoaXMuX21pZGlEYXRhPWUsdGhpcy5zeW50aC5jbGVhckVtYmVkZGVkQmFuaygpLHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rIT09dm9pZCAwJiYocCgiJWNFbWJlZGRlZCBzb3VuZGJhbmsgZGV0ZWN0ZWQhIFVzaW5nIGl0LiIsYy5yZWNvZ25pemVkKSx0aGlzLnN5bnRoLnNldEVtYmVkZGVkU291bmRCYW5rKHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rLHRoaXMuX21pZGlEYXRhLmJhbmtPZmZzZXQpKSxiQSgiJWNQcmVsb2FkaW5nIHNhbXBsZXMuLi4iLGMuaW5mbyksdGhpcy5fbWlkaURhdGEuZ2V0VXNlZFByb2dyYW1zQW5kS2V5cyh0aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIpLmZvckVhY2goKHQsbik9PntwKGAlY1ByZWxvYWRpbmcgdXNlZCBzYW1wbGVzIG9uICVjJHtuLm5hbWV9JWMuLi5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKTtmb3IobGV0IHMgb2YgdCl7bGV0W2Escl09cy5zcGxpdCgiLSIpLm1hcChOdW1iZXIpO3RoaXMuc3ludGguZ2V0Vm9pY2VzRm9yUHJlc2V0KG4sYSxyLGEpfX0pLFooKSx0aGlzLmN1cnJlbnRNSURJUG9ydHM9dGhpcy5fbWlkaURhdGEudHJhY2tzLm1hcCh0PT50LnBvcnQpLHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0PTAsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzPXt9LHRoaXMuX21pZGlEYXRhLnRyYWNrcy5mb3JFYWNoKCh0LG4pPT57dGhpcy5hc3NpZ25NSURJUG9ydChuLHQucG9ydCl9KSx0aGlzLmZpcnN0Tm90ZVRpbWU9dGhpcy5fbWlkaURhdGEubWlkaVRpY2tzVG9TZWNvbmRzKHRoaXMuX21pZGlEYXRhLmZpcnN0Tm90ZU9uKSxwKGAlY1RvdGFsIHNvbmcgdGltZTogJHtmcyhNYXRoLmNlaWwodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfWAsYy5yZWNvZ25pemVkKSx0aGlzLmNhbGxFdmVudCgic29uZ0NoYW5nZSIse3NvbmdJbmRleDp0aGlzLl9zb25nSW5kZXh9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbjw9LjImJihzQShgJWNWZXJ5IHNob3J0IHNvbmc6ICgke2ZzKE1hdGgucm91bmQodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfSkuIERpc2FibGluZyBsb29wIWAsYy53YXJuKSx0aGlzLmxvb3BDb3VudD0wKSx0aGlzLmN1cnJlbnRUaW1lPTB9dmFyIGk9e0lOVkFMSUQ6LTEsc3RhcnRBZGRyc09mZnNldDowLGVuZEFkZHJPZmZzZXQ6MSxzdGFydGxvb3BBZGRyc09mZnNldDoyLGVuZGxvb3BBZGRyc09mZnNldDozLHN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXQ6NCxtb2RMZm9Ub1BpdGNoOjUsdmliTGZvVG9QaXRjaDo2LG1vZEVudlRvUGl0Y2g6Nyxpbml0aWFsRmlsdGVyRmM6OCxpbml0aWFsRmlsdGVyUTo5LG1vZExmb1RvRmlsdGVyRmM6MTAsbW9kRW52VG9GaWx0ZXJGYzoxMSxlbmRBZGRyc0NvYXJzZU9mZnNldDoxMixtb2RMZm9Ub1ZvbHVtZToxMyx1bnVzZWQxOjE0LGNob3J1c0VmZmVjdHNTZW5kOjE1LHJldmVyYkVmZmVjdHNTZW5kOjE2LHBhbjoxNyx1bnVzZWQyOjE4LHVudXNlZDM6MTksdW51c2VkNDoyMCxkZWxheU1vZExGTzoyMSxmcmVxTW9kTEZPOjIyLGRlbGF5VmliTEZPOjIzLGZyZXFWaWJMRk86MjQsZGVsYXlNb2RFbnY6MjUsYXR0YWNrTW9kRW52OjI2LGhvbGRNb2RFbnY6MjcsZGVjYXlNb2RFbnY6Mjgsc3VzdGFpbk1vZEVudjoyOSxyZWxlYXNlTW9kRW52OjMwLGtleU51bVRvTW9kRW52SG9sZDozMSxrZXlOdW1Ub01vZEVudkRlY2F5OjMyLGRlbGF5Vm9sRW52OjMzLGF0dGFja1ZvbEVudjozNCxob2xkVm9sRW52OjM1LGRlY2F5Vm9sRW52OjM2LHN1c3RhaW5Wb2xFbnY6MzcscmVsZWFzZVZvbEVudjozOCxrZXlOdW1Ub1ZvbEVudkhvbGQ6Mzksa2V5TnVtVG9Wb2xFbnZEZWNheTo0MCxpbnN0cnVtZW50OjQxLHJlc2VydmVkMTo0MixrZXlSYW5nZTo0Myx2ZWxSYW5nZTo0NCxzdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldDo0NSxrZXlOdW06NDYsdmVsb2NpdHk6NDcsaW5pdGlhbEF0dGVudWF0aW9uOjQ4LHJlc2VydmVkMjo0OSxlbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQ6NTAsY29hcnNlVHVuZTo1MSxmaW5lVHVuZTo1MixzYW1wbGVJRDo1MyxzYW1wbGVNb2Rlczo1NCxyZXNlcnZlZDM6NTUsc2NhbGVUdW5pbmc6NTYsZXhjbHVzaXZlQ2xhc3M6NTcsb3ZlcnJpZGluZ1Jvb3RLZXk6NTgsdW51c2VkNTo1OSxlbmRPcGVyOjYwLHZpYkxmb1RvVm9sdW1lOjYxLHZpYkxmb1RvRmlsdGVyRmM6NjJ9LE1uPU9iamVjdC5rZXlzKGkpLmxlbmd0aCxtbz1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGkpKSx4PVtdO3hbaS5zdGFydEFkZHJzT2Zmc2V0XT17bWluOjAsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZEFkZHJPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5zdGFydGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLnN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46MCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9QaXRjaF09e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub1BpdGNoXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvUGl0Y2hdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuaW5pdGlhbEZpbHRlckZjXT17bWluOjE1MDAsbWF4OjEzNTAwLGRlZjoxMzUwMCxucnBuOjJ9O3hbaS5pbml0aWFsRmlsdGVyUV09e21pbjowLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9GaWx0ZXJGY109e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub0ZpbHRlckZjXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvRmlsdGVyRmNdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuZW5kQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5tb2RMZm9Ub1ZvbHVtZV09e21pbjotOTYwLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kudmliTGZvVG9Wb2x1bWVdPXttaW46LTk2MCxtYXg6OTYwLGRlZjowLG5ycG46MX07eFtpLmNob3J1c0VmZmVjdHNTZW5kXT17bWluOjAsbWF4OjFlMyxkZWY6MCxucnBuOjF9O3hbaS5yZXZlcmJFZmZlY3RzU2VuZF09e21pbjowLG1heDoxZTMsZGVmOjAsbnJwbjoxfTt4W2kucGFuXT17bWluOi01MDAsbWF4OjUwMCxkZWY6MCxucnBuOjF9O3hbaS5kZWxheU1vZExGT109e21pbjotMTJlMyxtYXg6NWUzLGRlZjotMTJlMyxucnBuOjJ9O3hbaS5mcmVxTW9kTEZPXT17bWluOi0xNmUzLG1heDo0NTAwLGRlZjowLG5ycG46NH07eFtpLmRlbGF5VmliTEZPXT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmZyZXFWaWJMRk9dPXttaW46LTE2ZTMsbWF4OjQ1MDAsZGVmOjAsbnJwbjo0fTt4W2kuZGVsYXlNb2RFbnZdPXttaW46LTMyNzY4LG1heDo1ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5hdHRhY2tNb2RFbnZdPXttaW46LTMyNzY4LG1heDo4ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5ob2xkTW9kRW52XT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmRlY2F5TW9kRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLnN1c3RhaW5Nb2RFbnZdPXttaW46MCxtYXg6MWUzLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VNb2RFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Nb2RFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvTW9kRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuZGVsYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuYXR0YWNrVm9sRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmhvbGRWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuZGVjYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuc3VzdGFpblZvbEVudl09e21pbjowLG1heDoxNDQwLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Wb2xFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvVm9sRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5rZXlOdW1dPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kudmVsb2NpdHldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kuaW5pdGlhbEF0dGVudWF0aW9uXT17bWluOjAsbWF4OjE0NDAsZGVmOjAsbnJwbjoxfTt4W2kuZW5kbG9vcEFkZHJzQ29hcnNlT2Zmc2V0XT17bWluOi0zMjc2OCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kuY29hcnNlVHVuZV09e21pbjotMTIwLG1heDoxMjAsZGVmOjAsbnJwbjoxfTt4W2kuZmluZVR1bmVdPXttaW46LTEyNzAwLG1heDoxMjcwMCxkZWY6MCxucnBuOjF9O3hbaS5zY2FsZVR1bmluZ109e21pbjowLG1heDoxMjAwLGRlZjoxMDAsbnJwbjoxfTt4W2kuZXhjbHVzaXZlQ2xhc3NdPXttaW46MCxtYXg6OTk5OTksZGVmOjAsbnJwbjowfTt4W2kub3ZlcnJpZGluZ1Jvb3RLZXldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjowfTt4W2kuc2FtcGxlTW9kZXNdPXttaW46MCxtYXg6MyxkZWY6MCxucnBuOjB9O3ZhciB3QT17bW9ub1NhbXBsZToxLHJpZ2h0U2FtcGxlOjIsbGVmdFNhbXBsZTo0LGxpbmtlZFNhbXBsZTo4LHJvbU1vbm9TYW1wbGU6MzI3Njkscm9tUmlnaHRTYW1wbGU6MzI3NzAscm9tTGVmdFNhbXBsZTozMjc3Mixyb21MaW5rZWRTYW1wbGU6MzI3NzZ9LGo9e25vQ29udHJvbGxlcjowLG5vdGVPblZlbG9jaXR5OjIsbm90ZU9uS2V5TnVtOjMscG9seVByZXNzdXJlOjEwLGNoYW5uZWxQcmVzc3VyZToxMyxwaXRjaFdoZWVsOjE0LHBpdGNoV2hlZWxSYW5nZToxNixsaW5rOjEyN30sUUE9e2xpbmVhcjowLGNvbmNhdmU6MSxjb252ZXg6Mixzd2l0Y2g6M307dmFyIFQ9e25vbmU6MCxtb2RMZm86MSx2ZWxvY2l0eToyLGtleU51bTozLHZvbEVudjo0LG1vZEVudjo1LHBpdGNoV2hlZWw6Nixwb2x5UHJlc3N1cmU6NyxjaGFubmVsUHJlc3N1cmU6OCx2aWJyYXRvTGZvOjksbW9kdWxhdGlvbldoZWVsOjEyOSx2b2x1bWU6MTM1LHBhbjoxMzgsZXhwcmVzc2lvbjoxMzksY2hvcnVzOjIyMSxyZXZlcmI6MjE5LHBpdGNoV2hlZWxSYW5nZToyNTYsZmluZVR1bmU6MjU3LGNvYXJzZVR1bmU6MjU4fSxSPXtub25lOjAsZ2FpbjoxLHJlc2VydmVkOjIscGl0Y2g6MyxwYW46NCxrZXlOdW06NSxjaG9ydXNTZW5kOjEyOCxyZXZlcmJTZW5kOjEyOSxtb2RMZm9GcmVxOjI2MCxtb2RMZm9EZWxheToyNjEsdmliTGZvRnJlcToyNzYsdmliTGZvRGVsYXk6Mjc3LHZvbEVudkF0dGFjazo1MTgsdm9sRW52RGVjYXk6NTE5LHJlc2VydmVkRUcxOjUyMCx2b2xFbnZSZWxlYXNlOjUyMSx2b2xFbnZTdXN0YWluOjUyMix2b2xFbnZEZWxheTo1MjMsdm9sRW52SG9sZDo1MjQsbW9kRW52QXR0YWNrOjc3OCxtb2RFbnZEZWNheTo3NzkscmVzZXJ2ZWRFRzI6NzgwLG1vZEVudlJlbGVhc2U6NzgxLG1vZEVudlN1c3RhaW46NzgyLG1vZEVudkRlbGF5Ojc4Myxtb2RFbnZIb2xkOjc4NCxmaWx0ZXJDdXRvZmY6MTI4MCxmaWx0ZXJROjEyODF9LHlzPXtmb3J3YXJkOjAsbG9vcEFuZFJlbGVhc2U6MX0sbUE9MTI4LGJuPTE0NyxXZT1uZXcgSW50MTZBcnJheShibikuZmlsbCgwKSxTQT0oZSxBKT0+V2VbZV09QTw8NztTQShTLm1haW5Wb2x1bWUsMTAwKTtTQShTLmJhbGFuY2UsNjQpO1NBKFMuZXhwcmVzc2lvbkNvbnRyb2xsZXIsMTI3KTtTQShTLnBhbiw2NCk7U0EoUy5wb3J0YW1lbnRvT25PZmYsMTI3KTtTQShTLmZpbHRlclJlc29uYW5jZSw2NCk7U0EoUy5yZWxlYXNlVGltZSw2NCk7U0EoUy5hdHRhY2tUaW1lLDY0KTtTQShTLmJyaWdodG5lc3MsNjQpO1NBKFMuZGVjYXlUaW1lLDY0KTtTQShTLnZpYnJhdG9SYXRlLDY0KTtTQShTLnZpYnJhdG9EZXB0aCw2NCk7U0EoUy52aWJyYXRvRGVsYXksNjQpO1NBKFMuZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNiw2NCk7U0EoUy5nZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4LDY0KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTt2YXIgbnM9MTtXZVtTLnBvcnRhbWVudG9Db250cm9sXT1ucztTQShtQStqLnBpdGNoV2hlZWwsNjQpO1NBKG1BK2oucGl0Y2hXaGVlbFJhbmdlLDIpO3ZhciBlYT1PYmplY3Qua2V5cyhJQSkubGVuZ3RoLHRhPW5ldyBGbG9hdDMyQXJyYXkoZWEpO3RhW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXT0xO2Z1bmN0aW9uIFNvKGU9ITApe2lmKGUmJnAoIiVjUmVzZXR0aW5nIGFsbCBjb250cm9sbGVycyEiLGMuaW5mbyksdGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJhbGxDb250cm9sbGVyUmVzZXQiLHZvaWQgMCksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLE9zKSwhKCF0aGlzLnByaXZhdGVQcm9wcy5kcnVtUHJlc2V0fHwhdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCkpe2ZvcihsZXQgQT0wO0E8dGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoO0ErKyl7bGV0IHQ9dGhpcy5taWRpQ2hhbm5lbHNbQV07dC5yZXNldENvbnRyb2xsZXJzKCExKSx0LnJlc2V0UHJlc2V0KCk7Zm9yKGxldCBuPTA7bjwxMjg7bisrKXRoaXMubWlkaUNoYW5uZWxzW0FdLmxvY2tlZENvbnRyb2xsZXJzW25dJiZ0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoImNvbnRyb2xsZXJDaGFuZ2UiLHtjaGFubmVsOkEsY29udHJvbGxlck51bWJlcjpuLGNvbnRyb2xsZXJWYWx1ZTp0aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbl0+Pjd9KTtpZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXSl7bGV0IG49dGhpcy5taWRpQ2hhbm5lbHNbQV0ubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF07dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJwaXRjaFdoZWVsIix7Y2hhbm5lbDpBLHBpdGNoOm59KX1pZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdKXtsZXQgbj10aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdPj43O3RoaXMucHJpdmF0ZVByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDpBLHByZXNzdXJlOm59KX19dGhpcy5wcml2YXRlUHJvcHMudHVuaW5ncy5sZW5ndGg9MCx0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLmxlbmd0aD0wO2ZvcihsZXQgQT0wO0E8MTI4O0ErKyl0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLnB1c2goW10pO3RoaXMuc2V0TUlESVZvbHVtZSgxKX19ZnVuY3Rpb24gcG8oZT0hMCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxXZS5sZW5ndGg7dCsrKXtpZih0aGlzLmxvY2tlZENvbnRyb2xsZXJzW3RdKWNvbnRpbnVlO2xldCBuPVdlW3RdO3RoaXMubWlkaUNvbnRyb2xsZXJzW3RdIT09biYmdDwxMjc/dD09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbdF09bnM6dCE9PVMucG9ydGFtZW50b0NvbnRyb2wmJnQhPT1TLmRhdGFFbnRyeU1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdGhpcy5jb250cm9sbGVyQ2hhbmdlKHQsbj4+NyxlKTp0aGlzLm1pZGlDb250cm9sbGVyc1t0XT1ufXRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9LHRoaXMucmFuZG9tUGFuPSExLHRoaXMuc3lzRXhNb2R1bGF0b3JzLnJlc2V0TW9kdWxhdG9ycygpO2xldCBBPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdO3RoaXMuY3VzdG9tQ29udHJvbGxlcnMuc2V0KHRhKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsQSksdGhpcy5yZXNldFBhcmFtZXRlcnMoKX1mdW5jdGlvbiB5bygpe3RoaXMuc2V0QmFua01TQihmQS5nZXREZWZhdWx0QmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCksdGhpcy5zZXRHU0RydW1zKCExKSx0aGlzLnNldERydW1zKHRoaXMuY2hhbm5lbE51bWJlciUxNj09PVNlKSx0aGlzLnByb2dyYW1DaGFuZ2UoMCl9dmFyIG5hPW5ldyBTZXQoW1MuYmFua1NlbGVjdCxTLmJhbmtTZWxlY3RMU0IsUy5tYWluVm9sdW1lLFMubWFpblZvbHVtZUxTQixTLnBhbixTLnBhbkxTQixTLnJldmVyYkRlcHRoLFMudHJlbW9sb0RlcHRoLFMuY2hvcnVzRGVwdGgsUy5kZXR1bmVEZXB0aCxTLnBoYXNlckRlcHRoLFMuc291bmRWYXJpYXRpb24sUy5maWx0ZXJSZXNvbmFuY2UsUy5yZWxlYXNlVGltZSxTLmF0dGFja1RpbWUsUy5icmlnaHRuZXNzLFMuZGVjYXlUaW1lLFMudmlicmF0b1JhdGUsUy52aWJyYXRvRGVwdGgsUy52aWJyYXRvRGVsYXksUy5zb3VuZENvbnRyb2xsZXIxMF0pO2Z1bmN0aW9uIGtvKCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCksdGhpcy5waXRjaFdoZWVsKDgxOTIpLHRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9O2ZvcihsZXQgZT0wO2U8MTI4O2UrKyl7bGV0IEE9V2VbZV07IW5hLmhhcyhlKSYmQSE9PXRoaXMubWlkaUNvbnRyb2xsZXJzW2VdJiYoZT09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbZV09bnM6dGhpcy5jb250cm9sbGVyQ2hhbmdlKGUsQT4+NykpfXRoaXMucmVzZXRHZW5lcmF0b3JPdmVycmlkZXMoKSx0aGlzLnJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpfWZ1bmN0aW9uIERvKCl7dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5JZGxlLHRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl09MTYyNTYsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT0xNjI1Nix0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPTE2MjU2LHRoaXMubWlkaUNvbnRyb2xsZXJzW1MucmVnaXN0ZXJlZFBhcmFtZXRlck1TQl09MTYyNTYsdGhpcy5yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpLHRoaXMucmVzZXRHZW5lcmF0b3JPZmZzZXRzKCl9dmFyIEdlPVdlLnNsaWNlKDAsMTI4KTtmdW5jdGlvbiB3byhlLEE9dm9pZCAwKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuITE7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqdGhpcy5fbWlkaURhdGEudGltZURpdmlzaW9uKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElSZXNldCgpOih0aGlzLnN5bnRoLnJlc2V0QWxsQ29udHJvbGxlcnMoKSx0aGlzLnN5bnRoLnN0b3BBbGxDaGFubmVscyghMSkpLHRoaXMucGxheWVkVGltZT0wLHRoaXMuZXZlbnRJbmRleGVzPUFycmF5KHRoaXMuX21pZGlEYXRhLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCk7bGV0IHQ9dGhpcy5zeW50aC5taWRpQ2hhbm5lbHMubGVuZ3RoLG49QXJyYXkodCkuZmlsbCg4MTkyKSxzPVtdO2ZvcihsZXQgbz0wO288dDtvKyspcy5wdXNoKHtwcm9ncmFtOi0xLGJhbms6MCxhY3R1YWxCYW5rOjB9KTtsZXQgYT1vPT5vPT09Uy5kYXRhRGVjcmVtZW50fHxvPT09Uy5kYXRhSW5jcmVtZW50fHxvPT09Uy5kYXRhRW50cnlNU0J8fG89PT1TLmRhdGFFbnRyeUxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMuYmFua1NlbGVjdHx8bz09PVMuYmFua1NlbGVjdExTQnx8bz09PVMucmVzZXRBbGxDb250cm9sbGVycyxyPVtdO2ZvcihsZXQgbz0wO288dDtvKyspci5wdXNoKEFycmF5LmZyb20oR2UpKTtmdW5jdGlvbiBJKG8pe2lmKG5bb109ODE5MixyPy5bb10hPT12b2lkIDApZm9yKGxldCBnPTA7ZzxHZS5sZW5ndGg7ZysrKW5hLmhhcyhnKXx8KHJbb11bZ109R2VbZ10pfWZvcig7Oyl7bGV0IG89dGhpcy5maW5kRmlyc3RFdmVudEluZGV4KCksZz10aGlzLl9taWRpRGF0YS50cmFja3Nbb10sQj1nLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tvXV07aWYoQSE9PXZvaWQgMCl7aWYoQi50aWNrcz49QSlicmVha31lbHNlIGlmKHRoaXMucGxheWVkVGltZT49ZSlicmVhaztsZXQgZD1BcyhCLnN0YXR1c0J5dGUpLGg9ZC5jaGFubmVsKyh0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbZy5wb3J0XXx8MCk7c3dpdGNoKGQuc3RhdHVzKXtjYXNlIE0ubm90ZU9uOnJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1MucG9ydGFtZW50b0NvbnRyb2xdPUIuZGF0YVswXTticmVhaztjYXNlIE0ubm90ZU9mZjpicmVhaztjYXNlIE0ucGl0Y2hXaGVlbDpuW2hdPUIuZGF0YVsxXTw8N3xCLmRhdGFbMF07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6e2lmKHRoaXMuX21pZGlEYXRhLmlzTXVsdGlQb3J0JiZnLmNoYW5uZWxzLnNpemU9PT0wKWJyZWFrO2xldCBRPXNbaF07US5wcm9ncmFtPUIuZGF0YVswXSxRLmFjdHVhbEJhbms9US5iYW5rO2JyZWFrfWNhc2UgTS5jb250cm9sbGVyQ2hhbmdlOntpZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmZy5jaGFubmVscy5zaXplPT09MClicmVhaztsZXQgUT1CLmRhdGFbMF07aWYoYShRKSl7bGV0IG09Qi5kYXRhWzFdO2lmKFE9PT1TLmJhbmtTZWxlY3Qpe3NbaF0uYmFuaz1tO2JyZWFrfWVsc2UgUT09PVMucmVzZXRBbGxDb250cm9sbGVycyYmSShoKTt0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElDQyhoLFEsbSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGgsUSxtKX1lbHNlIHJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1FdPUIuZGF0YVsxXTticmVha31kZWZhdWx0OnRoaXMucHJvY2Vzc0V2ZW50KEIsbyk7YnJlYWt9dGhpcy5ldmVudEluZGV4ZXNbb10rKyxvPXRoaXMuZmluZEZpcnN0RXZlbnRJbmRleCgpO2xldCBDPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tvXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbb11dO2lmKEM9PT12b2lkIDApcmV0dXJuIHRoaXMuc3RvcCgpLCExO3RoaXMucGxheWVkVGltZSs9dGhpcy5vbmVUaWNrVG9TZWNvbmRzKihDLnRpY2tzLUIudGlja3MpfWlmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2spe2ZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zZW5kTUlESVBpdGNoV2hlZWwobyxuW29dPj43LG5bb10mMTI3KSxyW29dIT09dm9pZCAwJiZyW29dLmZvckVhY2goKGcsQik9PntnIT09R2VbQl0mJiFhKEIpJiZ0aGlzLnNlbmRNSURJQ0MobyxCLGcpfSksc1tvXS5wcm9ncmFtPj0wJiZzW29dLmFjdHVhbEJhbms+PTApe2xldCBnPXNbb10uYWN0dWFsQmFuazt0aGlzLnNlbmRNSURJQ0MobyxTLmJhbmtTZWxlY3QsZyksdGhpcy5zZW5kTUlESVByb2dyYW1DaGFuZ2UobyxzW29dLnByb2dyYW0pfX1lbHNlIGZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zeW50aC5waXRjaFdoZWVsKG8sbltvXSkscltvXSE9PXZvaWQgMCYmcltvXS5mb3JFYWNoKChnLEIpPT57ZyE9PUdlW0JdJiYhYShCKSYmdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sQixnKX0pLHNbb10uYWN0dWFsQmFuaz49MCl7bGV0IGc9c1tvXTtnLnByb2dyYW0hPT0tMT8odGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYWN0dWFsQmFuayksdGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG8sZy5wcm9ncmFtKSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYmFuayl9cmV0dXJuIHRoaXMucGF1c2VkJiYodGhpcy5wYXVzZWRUaW1lPXRoaXMucGxheWVkVGltZSksITB9dmFyIHNhPWNsYXNze3NvbmdzPVtdO3NodWZmbGVkU29uZ0luZGV4ZXM9W107c3ludGg7ZXh0ZXJuYWxNSURJUGxheWJhY2s9ITE7bG9vcENvdW50PTA7c2tpcFRvRmlyc3ROb3RlT249ITA7b25FdmVudENhbGw7cHJvY2Vzc1RpY2s9UW8uYmluZCh0aGlzKTtmaXJzdE5vdGVUaW1lPTA7b25lVGlja1RvU2Vjb25kcz0wO2V2ZW50SW5kZXhlcz1bXTtwbGF5ZWRUaW1lPTA7cGF1c2VkVGltZT0tMTthYnNvbHV0ZVN0YXJ0VGltZT0wO3BsYXlpbmdOb3Rlcz1bXTtjdXJyZW50TUlESVBvcnRzPVtdO21pZGlQb3J0Q2hhbm5lbE9mZnNldD0wO21pZGlQb3J0Q2hhbm5lbE9mZnNldHM9e307YXNzaWduTUlESVBvcnQ9dW8uYmluZCh0aGlzKTtsb2FkTmV3U2VxdWVuY2U9Zm8uYmluZCh0aGlzKTtwcm9jZXNzRXZlbnQ9bG8uYmluZCh0aGlzKTtzZXRUaW1lVG89d28uYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlKXt0aGlzLnN5bnRoPWUsdGhpcy5hYnNvbHV0ZVN0YXJ0VGltZT10aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWV9X21pZGlEYXRhO2dldCBtaWRpRGF0YSgpe3JldHVybiB0aGlzLl9taWRpRGF0YX1nZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fbWlkaURhdGE/LmR1cmF0aW9uPz8wfV9zb25nSW5kZXg9MDtnZXQgc29uZ0luZGV4KCl7cmV0dXJuIHRoaXMuX3NvbmdJbmRleH1zZXQgc29uZ0luZGV4KGUpe3RoaXMuX3NvbmdJbmRleD1lLHRoaXMuX3NvbmdJbmRleD1NYXRoLm1heCgwLGUldGhpcy5zb25ncy5sZW5ndGgpLHRoaXMubG9hZEN1cnJlbnRTb25nKCl9X3NodWZmbGVNb2RlPSExO2dldCBzaHVmZmxlTW9kZSgpe3JldHVybiB0aGlzLl9zaHVmZmxlTW9kZX1zZXQgc2h1ZmZsZU1vZGUoZSl7dGhpcy5fc2h1ZmZsZU1vZGU9ZSxlPyh0aGlzLnNodWZmbGVTb25nSW5kZXhlcygpLHRoaXMuX3NvbmdJbmRleD0wLHRoaXMubG9hZEN1cnJlbnRTb25nKCkpOnRoaXMuX3NvbmdJbmRleD10aGlzLnNodWZmbGVkU29uZ0luZGV4ZXNbdGhpcy5fc29uZ0luZGV4XX1fcGxheWJhY2tSYXRlPTE7Z2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9c2V0IHBsYXliYWNrUmF0ZShlKXtsZXQgQT10aGlzLmN1cnJlbnRUaW1lO3RoaXMuX3BsYXliYWNrUmF0ZT1lLHRoaXMuY3VycmVudFRpbWU9QX1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwP3RoaXMucGF1c2VkVGltZToodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLXRoaXMuYWJzb2x1dGVTdGFydFRpbWUpKnRoaXMuX3BsYXliYWNrUmF0ZX1zZXQgY3VycmVudFRpbWUoZSl7aWYodGhpcy5fbWlkaURhdGEpaWYodGhpcy5wYXVzZWQmJih0aGlzLnBhdXNlZFRpbWU9ZSksZT50aGlzLl9taWRpRGF0YS5kdXJhdGlvbnx8ZTwwKXRoaXMuc2tpcFRvRmlyc3ROb3RlT24/dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk6dGhpcy5zZXRUaW1lVGlja3MoMCk7ZWxzZSBpZih0aGlzLnNraXBUb0ZpcnN0Tm90ZU9uJiZlPHRoaXMuZmlyc3ROb3RlVGltZSl7dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk7cmV0dXJufWVsc2V7aWYodGhpcy5wbGF5aW5nTm90ZXM9W10sdGhpcy5jYWxsRXZlbnQoInRpbWVDaGFuZ2UiLHtuZXdUaW1lOmV9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbj09PTApe3NBKCJObyBkdXJhdGlvbiEiKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOiEwfSk7cmV0dXJufXRoaXMuc2V0VGltZVRvKGUpLHRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUoZSl9fWdldCBwYXVzZWQoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwfXBsYXkoKXtpZighdGhpcy5fbWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBzb25ncyBsb2FkZWQgaW4gdGhlIHNlcXVlbmNlciEiKTt0aGlzLmN1cnJlbnRUaW1lPj10aGlzLl9taWRpRGF0YS5kdXJhdGlvbiYmKHRoaXMuY3VycmVudFRpbWU9MCksdGhpcy5wYXVzZWQmJnRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUodGhpcy5wYXVzZWRUaW1lPz8wKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrfHx0aGlzLnBsYXlpbmdOb3Rlcy5mb3JFYWNoKGU9Pnt0aGlzLnN5bnRoLm5vdGVPbihlLmNoYW5uZWwsZS5taWRpTm90ZSxlLnZlbG9jaXR5KX0pLHRoaXMucGF1c2VkVGltZT12b2lkIDB9cGF1c2UoKXt0aGlzLnBhdXNlSW50ZXJuYWwoITEpfWxvYWROZXdTb25nTGlzdChlKXt0aGlzLnNvbmdzPWUsISh0aGlzLnNvbmdzLmxlbmd0aDwxKSYmKHRoaXMuX3NvbmdJbmRleD0wLHRoaXMuc2h1ZmZsZVNvbmdJbmRleGVzKCksdGhpcy5jYWxsRXZlbnQoInNvbmdMaXN0Q2hhbmdlIix7bmV3U29uZ0xpc3Q6Wy4uLnRoaXMuc29uZ3NdfSksdGhpcy5sb2FkQ3VycmVudFNvbmcoKSl9Y2FsbEV2ZW50KGUsQSl7dGhpcz8ub25FdmVudENhbGw/Lih7dHlwZTplLGRhdGE6QX0pfXBhdXNlSW50ZXJuYWwoZSl7dGhpcy5wYXVzZWR8fCh0aGlzLnN0b3AoKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOmV9KSl9c29uZ0lzRmluaXNoZWQoKXtpZih0aGlzLnNvbmdzLmxlbmd0aD09PTEpe3RoaXMucGF1c2VJbnRlcm5hbCghMCk7cmV0dXJufXRoaXMuX3NvbmdJbmRleCsrLHRoaXMuX3NvbmdJbmRleCU9dGhpcy5zb25ncy5sZW5ndGgsdGhpcy5sb2FkQ3VycmVudFNvbmcoKX1zdG9wKCl7dGhpcy5wYXVzZWRUaW1lPXRoaXMuY3VycmVudFRpbWU7Zm9yKGxldCBlPTA7ZTwxNjtlKyspdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGUsUy5zdXN0YWluUGVkYWwsMCk7aWYodGhpcy5zeW50aC5zdG9wQWxsQ2hhbm5lbHMoKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrKXtmb3IobGV0IGUgb2YgdGhpcy5wbGF5aW5nTm90ZXMpdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ubm90ZU9mZnxlLmNoYW5uZWwlMTYsZS5taWRpTm90ZV0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElDQyhlLFMuYWxsTm90ZXNPZmYsMCl9fWZpbmRGaXJzdEV2ZW50SW5kZXgoKXtsZXQgZT0wLEE9MS8wO3JldHVybiB0aGlzLl9taWRpRGF0YS50cmFja3MuZm9yRWFjaCgodCxuKT0+e2lmKHRoaXMuZXZlbnRJbmRleGVzW25dPj10LmV2ZW50cy5sZW5ndGgpcmV0dXJuO2xldCBzPXQuZXZlbnRzW3RoaXMuZXZlbnRJbmRleGVzW25dXTtzLnRpY2tzPEEmJihlPW4sQT1zLnRpY2tzKX0pLGV9YWRkTmV3TUlESVBvcnQoKXtmb3IobGV0IGU9MDtlPDE2O2UrKyl0aGlzLnN5bnRoLmNyZWF0ZU1JRElDaGFubmVsKCl9c2VuZE1JRElNZXNzYWdlKGUpe3RoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuY2FsbEV2ZW50KCJtaWRpTWVzc2FnZSIse21lc3NhZ2U6ZX0pfXNlbmRNSURJUmVzZXQoKXt0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5yZXNldF0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxTLmFsbFNvdW5kT2ZmLDBdKSx0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5jb250cm9sbGVyQ2hhbmdlfGUsUy5yZXNldEFsbENvbnRyb2xsZXJzLDBdKX1sb2FkQ3VycmVudFNvbmcoKXtsZXQgZT10aGlzLl9zb25nSW5kZXg7dGhpcy5fc2h1ZmZsZU1vZGUmJihlPXRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlc1t0aGlzLl9zb25nSW5kZXhdKSx0aGlzLmxvYWROZXdTZXF1ZW5jZSh0aGlzLnNvbmdzW2VdKX1zaHVmZmxlU29uZ0luZGV4ZXMoKXtsZXQgZT10aGlzLnNvbmdzLm1hcCgoQSx0KT0+dCk7Zm9yKHRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlcz1bXTtlLmxlbmd0aD4wOyl7bGV0IEE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTt0aGlzLnNodWZmbGVkU29uZ0luZGV4ZXMucHVzaChBKSxlLnNwbGljZShlLmluZGV4T2YoQSksMSl9fXNlbmRNSURJQ0MoZSxBLHQpe2UlPTE2LHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxBLHRdKX1zZW5kTUlESVByb2dyYW1DaGFuZ2UoZSxBKXtlJT0xNix0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrJiZ0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5wcm9ncmFtQ2hhbmdlfGUsQV0pfXNlbmRNSURJUGl0Y2hXaGVlbChlLEEsdCl7ZSU9MTYsdGhpcy5leHRlcm5hbE1JRElQbGF5YmFjayYmdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ucGl0Y2hXaGVlbHxlLHQsQV0pfXNldFRpbWVUaWNrcyhlKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuO3RoaXMucGxheWluZ05vdGVzPVtdO2xldCBBPXRoaXMuX21pZGlEYXRhLm1pZGlUaWNrc1RvU2Vjb25kcyhlKTt0aGlzLmNhbGxFdmVudCgidGltZUNoYW5nZSIse25ld1RpbWU6QX0pO2xldCB0PXRoaXMuc2V0VGltZVRvKDAsZSk7dGhpcy5yZWNhbGN1bGF0ZVN0YXJ0VGltZSh0aGlzLnBsYXllZFRpbWUpfXJlY2FsY3VsYXRlU3RhcnRUaW1lKGUpe3RoaXMuYWJzb2x1dGVTdGFydFRpbWU9dGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLWUvdGhpcy5fcGxheWJhY2tSYXRlfX0sbHQ9bHQhPT12b2lkIDA/bHQ6e30sa3M9ITEsYWE7bHQuaXNJbml0aWFsaXplZD1uZXcgUHJvbWlzZShlPT5hYT1lKTt2YXIgRm89ZnVuY3Rpb24oZSl7dmFyIEEsdCxuLHMsYSxyLEksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGc9IiIsQj0wO2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZG8gcz1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksYT1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSkscj1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksST1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksQT1zPDwyfGE+PjQsdD0oMTUmYSk8PDR8cj4+MixuPSgzJnIpPDw2fEksZys9U3RyaW5nLmZyb21DaGFyQ29kZShBKSxyIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpKSxJIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKTt3aGlsZShCPGUubGVuZ3RoKTtyZXR1cm4gZ307KGZ1bmN0aW9uKCl7dmFyIGUsQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyxRLG0seSxGLGssRCx2LEwsRT1FIT09dm9pZCAwP0U6e307RS53YXNtQmluYXJ5PVVpbnQ4QXJyYXkuZnJvbShGbygiQUdGemJRRUFBQUFCcFFFWVlBSi9md0YvWUFGL0FHQUFBWDlnQkg5L2YzOEFZQUFBWUFOL2YzOEJmMkFCZndGL1lBSi9md0JnQm45L2YzOS9md0YvWUFSL2YzOS9BWDlnQlg5L2YzOS9BWDlnQjM5L2YzOS9mMzhCZjJBR2YzOS9mMzkvQUdBSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBZC9mMzkvZjM5L0FHQURmMzkvQUdBQmZ3RjlZQUY5QVgxZ0FueC9BWHhnQW54L0FYOWdBM3g4ZndGOFlBSjhmQUY4WUFGOEFYd0NuZ0lQQTJWdWRnWnRaVzF2Y25rQ0FJQUNBMlZ1ZGdWMFlXSnNaUUZ3QVFRRUEyVnVkZ2wwWVdKc1pVSmhjMlVEZndBRFpXNTJEa1JaVGtGTlNVTlVUMUJmVUZSU0EzOEFBMlZ1ZGdoVFZFRkRTMVJQVUFOL0FBTmxibllKVTFSQlEwdGZUVUZZQTM4QUJtZHNiMkpoYkFoSmJtWnBibWwwZVFOOEFBTmxibllGWVdKdmNuUUFBUU5sYm5ZTlpXNXNZWEpuWlUxbGJXOXllUUFDQTJWdWRnNW5aWFJVYjNSaGJFMWxiVzl5ZVFBQ0EyVnVkaGRoWW05eWRFOXVRMkZ1Ym05MFIzSnZkMDFsYlc5eWVRQUNBMlZ1ZGc1ZlgxOWhjM05sY25SZlptRnBiQUFEQTJWdWRndGZYMTl6WlhSRmNuSk9id0FCQTJWdWRnWmZZV0p2Y25RQUJBTmxibllXWDJWdGMyTnlhWEIwWlc1ZmJXVnRZM0I1WDJKcFp3QUZBM2QyQmdZQ0FRY0hBUUlCQVFjQkNBY0ZBQWtHQ1FvSEJnWUdCZ0VGQmdJQkJnWUtBQWdMQUFZR0JnWUdCZ1lCQUFvTURBTUdCUUFOQ0FvSkFBd09EQThPQVFBR0JnY0VBQkFKRUFFUkFBQURCUXdBQUFNSEJ4SUdBUUFBQndJRkV3TU9CdzhIQmdZUUZBb1ZFeFlYRnhjWEZnUUZCUVlGQUFZa0IzOEJJd0VMZndFakFndC9BU01EQzM4QlFRQUxmd0ZCQUF0OEFTTUVDMzhCUVFBTEI5TUNGUkJmWDJkeWIzZFhZWE50VFdWdGIzSjVBQWdSWDE5ZlpYSnlibTlmYkc5allYUnBiMjRBWXdWZlpuSmxaUUJmQjE5dFlXeHNiMk1BWGdkZmJXVnRZM0I1QUhrSFgyMWxiWE5sZEFCNkJWOXpZbkpyQUhzWFgzTjBZbDkyYjNKaWFYTmZhbk5mWTJoaGJtNWxiSE1BSmhSZmMzUmlYM1p2Y21KcGMxOXFjMTlqYkc5elpRQWxGVjl6ZEdKZmRtOXlZbWx6WDJwelgyUmxZMjlrWlFBb0UxOXpkR0pmZG05eVltbHpYMnB6WDI5d1pXNEFKQnBmYzNSaVgzWnZjbUpwYzE5cWMxOXpZVzF3YkdWZmNtRjBaUUFuQzJSNWJrTmhiR3hmYVdscEFId1RaWE4wWVdKc2FYTm9VM1JoWTJ0VGNHRmpaUUFNQzJkbGRGUmxiWEJTWlhRd0FBOExjblZ1VUc5emRGTmxkSE1BZUF0elpYUlVaVzF3VW1WME1BQU9DSE5sZEZSb2NtVjNBQTBLYzNSaFkydEJiR3h2WXdBSkRITjBZV05yVW1WemRHOXlaUUFMQ1hOMFlXTnJVMkYyWlFBS0NRb0JBQ01BQ3dSOVZGbDlDc2IyQTNZR0FDQUFRQUFMR3dFQmZ5TUdJUUVqQmlBQWFpUUdJd1pCRDJwQmNIRWtCaUFCQ3dRQUl3WUxCZ0FnQUNRR0N3b0FJQUFrQmlBQkpBY0xFQUFqQ0VVRVFDQUFKQWdnQVNRSkN3c0dBQ0FBSkFzTEJBQWpDd3NSQUNBQUJFQWdBQkFSSUFBZ0FCQVNDd3Z2QndFS2Z5QUFRWUFEYWlFSElBY29BZ0FoQlFKQUlBVUVRQ0FBUWZ3QmFpRUVJQVFvQWdBaEFTQUJRUUJLQkVBZ0FFSHdBR29oQ0FOQUlBVWdBa0VZYkdwQkVHb2hDU0FKS0FJQUlRRWdBUVJBSUFnb0FnQWhBeUFGSUFKQkdHeHFRUTFxSVFvZ0NpMEFBQ0VHSUFaQi93RnhJUVlnQXlBR1FiQVFiR3BCQkdvaEF5QURLQUlBSVFNZ0EwRUFTZ1JBUVFBaEF3TkFJQUVnQTBFQ2RHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0EwRUJhaUVESUFnb0FnQWhBU0FLTFFBQUlRWWdCa0gvQVhFaEJpQUJJQVpCc0JCc2FrRUVhaUVCSUFFb0FnQWhCaUFKS0FJQUlRRWdBeUFHU0EwQUN3c2dBQ0FCRUJJTElBVWdBa0VZYkdwQkZHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFRb0FnQWhBU0FDSUFGT0RRTWdCeWdDQUNFRkRBQUFDd0FMQ3dzZ0FFSHdBR29oQXlBREtBSUFJUUVnQVFSQUlBQkI3QUJxSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFBSkFJQUVnQWtHd0VHeHFRUWhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRUnhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRU0JxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRYVFRYWlFRUlBUW9BZ0FoQkNBQUlBUVFFaUFCSUFKQnNCQnNha0dvRUdvaEFTQUJLQUlBSVFFZ0FVVWhCQ0FCUVh4cUlRRkJBQ0FCSUFRYklRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFVb0FnQWhBU0FDSUFGT0RRQWdBeWdDQUNFQkRBRUxDeUFES0FJQUlRRUxJQUFnQVJBU0N5QUFRZmdCYWlFQklBRW9BZ0FoQVNBQUlBRVFFaUFIS0FJQUlRRWdBQ0FCRUJJZ0FFR0lBMm9oQXlBREtBSUFJUUVnQVFSQUlBQkJoQU5xSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFDQUJJQUpCS0d4cVFRUnFJUUVnQVNnQ0FDRUJJQUFnQVJBU0lBSkJBV29oQWlBRktBSUFJUWNnQXlnQ0FDRUJJQUlnQjBnTkFBc0xJQUFnQVJBU0N5QUFRUVJxSVFJZ0FpZ0NBQ0VCSUFGQkFFb0VRRUVBSVFFRFFDQUFRWlFHYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRWlFIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRZGdIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ2hBeUFCUVJCSklRVWdCU0FEY1EwQUN3dEJBQ0VCQTBBZ0FFR2dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR29DR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR3dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFRzRDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFSEFDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FVRUJhaUVCSUFGQkFrY05BQXNMR3dBZ0FFSEVBR29oQUNBQUtBSUFJUUFnQUVVRVFDQUJFRjhMQzN3QkFYOGdBRUhVQjJvaEFTQUJRUUEyQWdBZ0FFR0FDMm9oQVNBQlFRQTJBZ0FnQUVINENtb2hBU0FCUVFBMkFnQWdBRUdjQ0dvaEFTQUJRUUEyQWdBZ0FFSFZDbW9oQVNBQlFRQTZBQUFnQUVIOENtb2hBU0FCUVFBMkFnQWdBRUhVQzJvaEFTQUJRUUEyQWdBZ0FFSFlDMm9oQUNBQVFRQTJBZ0FMOEFRQkIzOGpCaUVMSXdaQkVHb2tCaUFMUVFocUlRY2dDMEVFYWlFS0lBc2hDQ0FBUVNScUlRWWdCaXdBQUNFR0FuOGdCZ1IvSUFCQmdBdHFJUVlnQmlnQ0FDRUdJQVpCZjBvRVFDQUZRUUEyQWdBZ0FDQUJJQUlRRmd3Q0N5QUFRUlJxSVFZZ0JpQUJOZ0lBSUFFZ0Ftb2hBaUFBUVJ4cUlRa2dDU0FDTmdJQUlBQkIyQUJxSVFJZ0FrRUFOZ0lBSUFCQkFCQVhJUWtnQ1VVRVFDQUZRUUEyQWdCQkFBd0NDeUFBSUFjZ0NDQUtFQmdoQ1NBSkJFQWdCeWdDQUNFQ0lBZ29BZ0FoQ1NBS0tBSUFJUWdnQUNBQ0lBa2dDQkFhSVFvZ0J5QUtOZ0lBSUFCQkJHb2hBaUFDS0FJQUlRZ2dDRUVBU2dSQVFRQWhBZ05BSUFCQmxBWnFJQUpCQW5ScUlRY2dCeWdDQUNFSElBY2dDVUVDZEdvaEJ5QUFRZFFHYWlBQ1FRSjBhaUVNSUF3Z0J6WUNBQ0FDUVFGcUlRSWdBaUFJU0EwQUN3c2dBd1JBSUFNZ0NEWUNBQXNnQlNBS05nSUFJQUJCMUFacUlRQWdCQ0FBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQUlMQWtBQ1FBSkFBa0FDUUNBQ0tBSUFJZ05CSUdzT0JBRUNBZ0FDQ3lBQ1FRQTJBZ0FnQUVIVUFHb2hBaUFBRUJraEF3SkFJQU5CZjBjRVFBTkFJQUlvQWdBaEF5QUREUUlnQUJBWklRTWdBMEYvUncwQUN3c0xJQVZCQURZQ0FDQUdLQUlBSVFBZ0FDQUJhd3dGQ3d3QkN3d0JDeUFBUWRRSGFpRUVJQVFvQWdBaEJDQUVSUVJBSUFKQkFEWUNBQ0FBUWRRQWFpRUNJQUFRR1NFREFrQWdBMEYvUndSQUEwQWdBaWdDQUNFRElBTU5BaUFBRUJraEF5QURRWDlIRFFBTEN3c2dCVUVBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQU1MQ3lBQUVCTWdBaUFETmdJQUlBVkJBRFlDQUVFQkJTQUFRUUlRRlVFQUN3c2hBQ0FMSkFZZ0FBc0pBQ0FBSUFFMkFsZ0xwZ29CREg4Z0FFR0FDMm9oQ2lBS0tBSUFJUVlDUUFKQUFrQWdCa0VBVEEwQUEwQWdBQ0FFUVJSc2FrR1FDMm9oQXlBRFFRQTJBZ0FnQkVFQmFpRUVJQVFnQmtnTkFBc2dCa0VFU0EwQURBRUxJQUpCQkVnRVFFRUFJUUlGSUFKQmZXb2hCa0VBSVFJRFFBSkFJQUVnQW1vaEJDQUVMQUFBSVFNZ0EwSFBBRVlFUUNBRVFjQVRRUVFRWkNFRUlBUkZCRUFnQWtFYWFpRUpJQWtnQms0TkFpQUNRUnRxSVFjZ0FTQUphaUVMSUFzc0FBQWhBeUFEUWY4QmNTRUZJQWNnQldvaEJDQUVJQVpPRFFJZ0JVRWJhaUVFSUFNRVFFRUFJUU1EUUNBRElBZHFJUWdnQVNBSWFpRUlJQWd0QUFBaENDQUlRZjhCY1NFSUlBUWdDR29oQkNBRFFRRnFJUU1nQXlBRlJ3MEFDeUFFSVFNRklBUWhBd3RCQUNFRVFRQWhCUU5BSUFVZ0Ftb2hCeUFCSUFkcUlRY2dCeXdBQUNFSElBUWdCeEFwSVFRZ0JVRUJhaUVGSUFWQkZrY05BQXRCRmlFRkEwQWdCRUVBRUNraEJDQUZRUUZxSVFVZ0JVRWFSdzBBQ3lBS0tBSUFJUVVnQlVFQmFpRUhJQW9nQnpZQ0FDQURRV1pxSVFNZ0FDQUZRUlJzYWtHSUMyb2hDQ0FJSUFNMkFnQWdBQ0FGUVJSc2FrR01DMm9oQXlBRElBUTJBZ0FnQWtFV2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FSZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFWWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCR1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJaEJDQUFRWVFMYWlBRlFSUnNhaUVESUFNZ0JEWUNBQ0FMTFFBQUlRUWdCRUgvQVhFaEJDQUpJQVJxSVFRZ0FTQUVhaUVFSUFRc0FBQWhCQ0FFUVg5R0JIOUJmd1VnQWtFR2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FRZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFSWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCQ1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJTElRUWdBQ0FGUVJSc2FrR1VDMm9oQXlBRElBUTJBZ0FnQUNBRlFSUnNha0dRQzJvaEJDQUVJQWsyQWdBZ0IwRUVSZ1JBSUFZaEFnd0RDd3NMSUFKQkFXb2hBaUFDSUFaSURRRWdCaUVDQ3dzZ0NpZ0NBQ0VHSUFaQkFFb05BUXNNQVFzZ0FpRUVJQVloQWtFQUlRWURRQUpBSUFCQmhBdHFJQVpCRkd4cUlRa2dBQ0FHUVJSc2FrR1FDMm9oQXlBREtBSUFJUXNnQUNBR1FSUnNha0dJQzJvaERTQU5LQUlBSVFnZ0JDQUxheUVESUFnZ0Ewb2hCU0FESUFnZ0JSc2hCeUFBSUFaQkZHeHFRWXdMYWlFT0lBNG9BZ0FoQXlBSFFRQktCRUJCQUNFRkEwQWdCU0FMYWlFTUlBRWdER29oRENBTUxBQUFJUXdnQXlBTUVDa2hBeUFGUVFGcUlRVWdCU0FIU0EwQUN3c2dDQ0FIYXlFRklBMGdCVFlDQUNBT0lBTTJBZ0FnQlFSQUlBWkJBV29oQmdVZ0NTZ0NBQ0VGSUFNZ0JVWU5BU0FDUVg5cUlRSWdDaUFDTmdJQUlBa2dBRUdFQzJvZ0FrRVViR29pQWlrQ0FEY0NBQ0FKSUFJcEFnZzNBZ2dnQ1NBQ0tBSVFOZ0lRSUFvb0FnQWhBZ3NnQmlBQ1NBMEJJQVFoQWd3Q0N3c2dCeUFMYWlFQ0lBcEJmellDQUNBQVFkUUhhaUVCSUFGQkFEWUNBQ0FBUWRnS2FpRUJJQUZCZnpZQ0FDQUFJQVpCRkd4cVFaUUxhaUVCSUFFb0FnQWhBU0FBUVpnSWFpRUVJQVFnQVRZQ0FDQUJRWDlISVFFZ0FFR2NDR29oQUNBQUlBRTJBZ0FMSUFJTGhnVUJDSDhnQUVIWUNtb2hBaUFDS0FJQUlRTWdBRUVVYWlFQ0lBSW9BZ0FoQWdKL0FrQWdBMEYvUmdSL1FRRWhBd3dCQlNBQVFkQUlhaUVFSUFRb0FnQWhCUUpBSUFNZ0JVZ0VRQU5BSUFCQjFBaHFJQU5xSVFRZ0JDd0FBQ0VHSUFaQi93RnhJUVFnQWlBRWFpRUNJQVpCZjBjTkFpQURRUUZxSVFNZ0F5QUZTQTBBQ3dzTElBRkJBRWNoQmlBRlFYOXFJUVFnQXlBRVNDRUVJQVlnQkhFRVFDQUFRUlVRRlVFQURBTUxJQUJCSEdvaEJDQUVLQUlBSVFRZ0FpQUVTd1IvSUFCQkFSQVZRUUFGSUFNZ0JVWWhCQ0FEUVg5R0lRTWdCQ0FEY2dSL1FRQWhBd3dEQlVFQkN3c0xEQUVMSUFBb0Fod2hDQ0FBUWRRSGFpRUdJQUZCQUVjaEJDQUNJUUVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FEUUNBQlFScHFJUVVnQlNBSVR3MEJJQUZCd0JOQkJCQmtJUUlnQWcwQ0lBRkJCR29oQWlBQ0xBQUFJUUlnQWcwRElBTUVRQ0FHS0FJQUlRSWdBZ1JBSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSU5CZ3NGSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSkZEUVlMSUFVc0FBQWhBaUFDUWY4QmNTRUhJQUZCRzJvaENTQUpJQWRxSVFFZ0FTQUlTdzBHQWtBZ0FnUkFRUUFoQWdOQUlBa2dBbW9oQXlBRExBQUFJUVVnQlVIL0FYRWhBeUFCSUFOcUlRRWdCVUYvUncwQ0lBSkJBV29oQWlBQ0lBZEpEUUFMQlVFQUlRSUxDeUFIUVg5cUlRTWdBaUFEU0NFRElBUWdBM0VOQnlBQklBaExEUWhCQVNBQ0lBZEhEUW9hUVFBaEF3d0FBQXNBQ3lBQVFRRVFGVUVBREFnTElBQkJGUkFWUVFBTUJ3c2dBRUVWRUJWQkFBd0dDeUFBUVJVUUZVRUFEQVVMSUFCQkZSQVZRUUFNQkFzZ0FFRUJFQlZCQUF3REN5QUFRUlVRRlVFQURBSUxJQUJCQVJBVkMwRUFDeUVBSUFBTGV3RUZmeU1HSVFVakJrRVFhaVFHSUFWQkNHb2hCaUFGUVFScUlRUWdCU0VISUFBZ0FpQUVJQU1nQlNBR0VDb2hCQ0FFQkg4Z0JpZ0NBQ0VFSUFCQmtBTnFJQVJCQm14cUlRZ2dBaWdDQUNFR0lBTW9BZ0FoQkNBSEtBSUFJUU1nQUNBQklBZ2dCaUFFSUFNZ0FoQXJCVUVBQ3lFQUlBVWtCaUFBQ3hzQkFYOGdBQkF1SVFFZ0FFSG9DbW9oQUNBQVFRQTJBZ0FnQVF2NUF3SU1md045SUFCQjFBZHFJUWtnQ1NnQ0FDRUdJQVlFZnlBQUlBWVFTQ0VMSUFCQkJHb2hCQ0FFS0FJQUlRb2dDa0VBU2dSQUlBWkJBRW9oRENBR1FYOXFJUTBEUUNBTUJFQWdBRUdVQm1vZ0JVRUNkR29vQWdBaERpQUFRWlFIYWlBRlFRSjBhaWdDQUNFUFFRQWhCQU5BSUFRZ0Ftb2hCeUFPSUFkQkFuUnFJUWNnQnlvQ0FDRVFJQXNnQkVFQ2RHb2hDQ0FJS2dJQUlSRWdFQ0FSbENFUUlBOGdCRUVDZEdvaENDQUlLZ0lBSVJFZ0RTQUVheUVJSUFzZ0NFRUNkR29oQ0NBSUtnSUFJUklnRVNBU2xDRVJJQkFnRVpJaEVDQUhJQkE0QWdBZ0JFRUJhaUVFSUFRZ0JrY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFKS0FJQUJTQUFRUVJxSVFRZ0JDZ0NBQ0VLUVFBTElRc2dBU0FEYXlFSElBa2dCellDQUNBS1FRQktCRUFnQVNBRFNpRUpRUUFoQlFOQUlBa0VRQ0FBUVpRR2FpQUZRUUowYWlnQ0FDRU1JQUJCbEFkcUlBVkJBblJxS0FJQUlRMUJBQ0VHSUFNaEJBTkFJQXdnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdEU0FHUVFKMGFpRU9JQTRnQkRZQ0FDQUdRUUZxSVFZZ0JpQURhaUVFSUFZZ0IwY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFMUlNFRUlBRWdBMGdoQlNBQklBTWdCUnNoQVNBQklBSnJJUUVnQUVIOENtb2hBQ0FFQkVCQkFDRUJCU0FBS0FJQUlRSWdBaUFCYWlFQ0lBQWdBallDQUFzZ0FRdlJBUUVDZnlNR0lRWWpCa0hnQzJva0JpQUdJUVVnQlNBRUVCd2dCVUVVYWlFRUlBUWdBRFlDQUNBQUlBRnFJUUVnQlVFY2FpRUVJQVFnQVRZQ0FDQUZRU1JxSVFFZ0FVRUJPZ0FBSUFVUUhTRUJJQUVFUUNBRkVCNGhBU0FCQkVBZ0FTQUZRZHdMRUhrYUlBRkJGR29oQkNBRUtBSUFJUVFnQkNBQWF5RUFJQUlnQURZQ0FDQURRUUEyQWdBRklBVVFFVUVBSVFFTEJTQUZRZFFBYWlFQUlBQW9BZ0FoQUNBQVJTRUFJQVZCMkFCcUlRRWdBU2dDQUNFQklBTWdBVUVCSUFBYk5nSUFRUUFoQVFzZ0JpUUdJQUVMclFFQ0FYOEJmaUFBUVFCQjNBc1FlaG9nQVFSQUlBQkJ4QUJxSVFJZ0FTa0NBQ0VESUFJZ0F6Y0NBQ0FBUWNnQWFpRUNJQU5DSUlnaEF5QURweUVCSUFGQkEyb2hBU0FCUVh4eElRRWdBaUFCTmdJQUlBQkIwQUJxSVFJZ0FpQUJOZ0lBQ3lBQVFkUUFhaUVCSUFGQkFEWUNBQ0FBUWRnQWFpRUJJQUZCQURZQ0FDQUFRUlJxSVFFZ0FVRUFOZ0lBSUFCQjhBQnFJUUVnQVVFQU5nSUFJQUJCZ0F0cUlRQWdBRUYvTmdJQUM5Qk5BaU4vQTMwakJpRVpJd1pCZ0FocUpBWWdHVUh3QjJvaEFpQVpJZ3hCN0FkcUlSMGdERUhvQjJvaEhpQUFFREVoQVFKL0lBRUVRQ0FBUWRNS2FpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBRkJBbkVoQXlBRFJRUkFJQUJCSWhBVlFRQU1BZ3NnQVVFRWNTRURJQU1FUUNBQVFTSVFGVUVBREFJTElBRkJBWEVoQVNBQkJFQWdBRUVpRUJWQkFBd0NDeUFBUWRBSWFpRUJJQUVvQWdBaEFTQUJRUUZIQkVBZ0FFRWlFQlZCQUF3Q0N5QUFRZFFJYWlFQkFrQUNRQ0FCTEFBQVFSNXJJZ0VFUUNBQlFTSkdCRUFNQWdVTUF3c0FDeUFBRURBaEFTQUJRZjhCY1VFQlJ3UkFJQUJCSWhBVlFRQU1CQXNnQUNBQ1FRWVFJaUVCSUFGRkJFQWdBRUVLRUJWQkFBd0VDeUFDRUVraEFTQUJSUVJBSUFCQkloQVZRUUFNQkFzZ0FCQWpJUUVnQVFSQUlBQkJJaEFWUVFBTUJBc2dBQkF3SVFFZ0FVSC9BWEVoQXlBQVFRUnFJUk1nRXlBRE5nSUFJQUZCL3dGeFJRUkFJQUJCSWhBVlFRQU1CQXNnQVVIL0FYRkJFRW9FUUNBQVFRVVFGVUVBREFRTElBQVFJeUVCSUFBZ0FUWUNBQ0FCUlFSQUlBQkJJaEFWUVFBTUJBc2dBQkFqR2lBQUVDTWFJQUFRSXhvZ0FCQXdJUU1nQTBIL0FYRWhCQ0FFUVE5eElRRWdCRUVFZGlFRVFRRWdBWFFoQlNBQVFlUUFhaUVhSUJvZ0JUWUNBRUVCSUFSMElRVWdBRUhvQUdvaEZDQVVJQVUyQWdBZ0FVRjZhaUVGSUFWQkIwc0VRQ0FBUVJRUUZVRUFEQVFMSUFOQm9IOXFRUmgwUVJoMUlRTWdBMEVBU0FSQUlBQkJGQkFWUVFBTUJBc2dBU0FFU3dSQUlBQkJGQkFWUVFBTUJBc2dBQkF3SVFFZ0FVRUJjU0VCSUFGRkJFQWdBRUVpRUJWQkFBd0VDeUFBRURFaEFVRUFJQUZGRFFNYUlBQVFTaUVCUVFBZ0FVVU5BeG9nQUVIVUNtb2hBd05BSUFBUUx5RUJJQUFnQVJCTElBTkJBRG9BQUNBQkRRQUxJQUFRU2lFQlFRQWdBVVVOQXhvZ0FFRWthaUVCSUFFc0FBQWhBUUpBSUFFRVFDQUFRUUVRRnlFQklBRU5BU0FBUWRnQWFpRUFJQUFvQWdBaEFVRUFJQUZCRlVjTkJSb2dBRUVVTmdJQVFRQU1CUXNMRUV3Z0FCQVpJUUVnQVVFRlJ3UkFJQUJCRkJBVlFRQU1CQXRCQUNFQkEwQWdBQkFaSVFNZ0EwSC9BWEVoQXlBQ0lBRnFJUVFnQkNBRE9nQUFJQUZCQVdvaEFTQUJRUVpIRFFBTElBSVFTU0VCSUFGRkJFQWdBRUVVRUJWQkFBd0VDeUFBUVFnUUxDRUJJQUZCQVdvaEFTQUFRZXdBYWlFTklBMGdBVFlDQUNBQlFiQVFiQ0VCSUFBZ0FSQk5JUUVnQUVId0FHb2hGU0FWSUFFMkFnQWdBVVVFUUNBQVFRTVFGVUVBREFRTElBMG9BZ0FoQWlBQ1FiQVFiQ0VDSUFGQkFDQUNFSG9hSUEwb0FnQWhBUUpBSUFGQkFFb0VRQ0FBUVJCcUlSWURRQUpBSUJVb0FnQWhDaUFLSUFaQnNCQnNhaUVKSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWNJQVJ3UkFRVDhoQVF3QkN5QUFRUWdRTENFQklBRkIvd0Z4SVFFZ0FVSERBRWNFUUVIQkFDRUJEQUVMSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWRZQVJ3UkFRY01BSVFFTUFRc2dBRUVJRUN3aEFTQUFRUWdRTENFQ0lBSkJDSFFoQWlBQlFmOEJjU0VCSUFJZ0FYSWhBU0FKSUFFMkFnQWdBRUVJRUN3aEFTQUFRUWdRTENFQ0lBQkJDQkFzSVFNZ0EwRVFkQ0VESUFKQkNIUWhBaUFDUVlEK0EzRWhBaUFCUWY4QmNTRUJJQUlnQVhJaEFTQUJJQU55SVFFZ0NpQUdRYkFRYkdwQkJHb2hEaUFPSUFFMkFnQWdBRUVCRUN3aEFTQUJRUUJISWdNRWYwRUFCU0FBUVFFUUxBc2hBU0FCUWY4QmNTRUNJQW9nQmtHd0VHeHFRUmRxSVJFZ0VTQUNPZ0FBSUFrb0FnQWhCQ0FPS0FJQUlRRWdCRVVFUUNBQkJIOUJ5QUFoQVF3Q0JVRUFDeUVCQ3lBQ1FmOEJjUVJBSUFBZ0FSQThJUUlGSUFBZ0FSQk5JUUlnQ2lBR1FiQVFiR3BCQ0dvaEFTQUJJQUkyQWdBTElBSkZCRUJCelFBaEFRd0JDd0pBSUFNRVFDQUFRUVVRTENFRElBNG9BZ0FoQVNBQlFRQk1CRUJCQUNFRERBSUxRUUFoQkFOQUlBTkJBV29oQlNBQklBUnJJUUVnQVJBdElRRWdBQ0FCRUN3aEFTQUJJQVJxSVFNZ0RpZ0NBQ0VQSUFNZ0Qwb0VRRUhUQUNFQkRBUUxJQUlnQkdvaEJDQUZRZjhCY1NFUElBUWdEeUFCRUhvYUlBNG9BZ0FoQVNBQklBTktCSDhnQXlFRUlBVWhBd3dCQlVFQUN5RURDd1VnRGlnQ0FDRUJJQUZCQUV3RVFFRUFJUU1NQWd0QkFDRURRUUFoQVFOQUlCRXNBQUFoQkFKQUFrQWdCRVVOQUNBQVFRRVFMQ0VFSUFRTkFDQUNJQU5xSVFRZ0JFRi9PZ0FBREFFTElBQkJCUkFzSVFRZ0JFRUJhaUVFSUFSQi93RnhJUVVnQWlBRGFpRVBJQThnQlRvQUFDQUJRUUZxSVFFZ0JFSC9BWEVoQkNBRVFTQkdCRUJCMmdBaEFRd0ZDd3NnQTBFQmFpRURJQTRvQWdBaEJDQURJQVJJRFFBTElBRWhBeUFFSVFFTEN5QVJMQUFBSVFRQ2Z3SkFJQVFFZnlBQlFRSjFJUVFnQXlBRVRnUkFJQllvQWdBaEF5QUJJQU5LQkVBZ0ZpQUJOZ0lBQ3lBQUlBRVFUU0VCSUFvZ0JrR3dFR3hxUVFocUlRTWdBeUFCTmdJQUlBRkZCRUJCNFFBaEFRd0ZDeUFPS0FJQUlRUWdBU0FDSUFRUWVSb2dEaWdDQUNFQklBQWdBaUFCRUU0Z0F5Z0NBQ0VDSUJGQkFEb0FBQ0FPS0FJQUlRUU1BZ3NnQ2lBR1FiQVFiR3BCckJCcUlRUWdCQ0FETmdJQUlBTUVmeUFBSUFNUVRTRUJJQW9nQmtHd0VHeHFRUWhxSVFNZ0F5QUJOZ0lBSUFGRkJFQkI2d0FoQVF3RkN5QUVLQUlBSVFFZ0FVRUNkQ0VCSUFBZ0FSQThJUUVnQ2lBR1FiQVFiR3BCSUdvaEF5QURJQUUyQWdBZ0FVVUVRRUh0QUNFQkRBVUxJQVFvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRHdoQlNBRlJRUkFRZkFBSVFFTUJRc2dEaWdDQUNFQklBUW9BZ0FoRHlBRklRY2dCUVZCQUNFUFFRQWhCMEVBQ3lFRElBOUJBM1FoQlNBRklBRnFJUVVnRmlnQ0FDRVBJQVVnRDAwRVFDQUJJUVVnQkF3REN5QVdJQVUyQWdBZ0FTRUZJQVFGSUFFaEJBd0JDd3dCQ3lBRVFRQktCRUJCQUNFQlFRQWhBd05BSUFJZ0Eyb2hCU0FGTEFBQUlRVWdCVUgvQVhGQkNrb2hEeUFGUVg5SElRVWdEeUFGY1NFRklBVkJBWEVoQlNBQklBVnFJUUVnQTBFQmFpRURJQU1nQkVnTkFBc0ZRUUFoQVFzZ0NpQUdRYkFRYkdwQnJCQnFJUThnRHlBQk5nSUFJQVJCQW5RaEFTQUFJQUVRVFNFQklBb2dCa0d3RUd4cVFTQnFJUU1nQXlBQk5nSUFJQUZGQkVCQjZRQWhBUXdDQzBFQUlRTWdEaWdDQUNFRlFRQWhCeUFQQ3lFQklBa2dBaUFGSUFNUVR5RUVJQVJGQkVCQjlBQWhBUXdCQ3lBQktBSUFJUVFnQkFSQUlBUkJBblFoQkNBRVFRUnFJUVFnQUNBRUVFMGhCQ0FLSUFaQnNCQnNha0drRUdvaEJTQUZJQVEyQWdBZ0JFVUVRRUg1QUNFQkRBSUxJQUVvQWdBaEJDQUVRUUowSVFRZ0JFRUVhaUVFSUFBZ0JCQk5JUVFnQ2lBR1FiQVFiR3BCcUJCcUlRVWdCU0FFTmdJQUlBUkZCRUJCK3dBaEFRd0NDeUFFUVFScUlROGdCU0FQTmdJQUlBUkJmellDQUNBSklBSWdBeEJRQ3lBUkxBQUFJUU1nQXdSQUlBRW9BZ0FoQXlBRFFRSjBJUU1nQUNBSElBTVFUaUFLSUFaQnNCQnNha0VnYWlFRElBTW9BZ0FoQkNBQktBSUFJUVVnQlVFQ2RDRUZJQUFnQkNBRkVFNGdEaWdDQUNFRUlBQWdBaUFFRUU0Z0EwRUFOZ0lBQ3lBSkVGRWdBRUVFRUN3aEFpQUNRZjhCY1NFRElBb2dCa0d3RUd4cVFSVnFJUVVnQlNBRE9nQUFJQUpCL3dGeElRSWdBa0VDU3dSQVFZQUJJUUVNQVFzZ0FnUkFJQUJCSUJBc0lRSWdBaEJTSVNVZ0NpQUdRYkFRYkdwQkRHb2hEeUFQSUNVNEFnQWdBRUVnRUN3aEFpQUNFRkloSlNBS0lBWkJzQkJzYWtFUWFpRWJJQnNnSlRnQ0FDQUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjU0VDSUFvZ0JrR3dFR3hxUVJScUlRUWdCQ0FDT2dBQUlBQkJBUkFzSVFJZ0FrSC9BWEVoQWlBS0lBWkJzQkJzYWtFV2FpRWNJQndnQWpvQUFDQUZMQUFBSVFzZ0RpZ0NBQ0VDSUFrb0FnQWhBeUFMUVFGR0JIOGdBaUFERUZNRklBTWdBbXdMSVFJZ0NpQUdRYkFRYkdwQkdHb2hDeUFMSUFJMkFnQWdBa1VFUUVHR0FTRUJEQUlMSUFKQkFYUWhBaUFBSUFJUVBDRVFJQkJGQkVCQmlBRWhBUXdDQ3lBTEtBSUFJUUlnQWtFQVNnUkFRUUFoQWdOQUlBUXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBGL1JnUkFRWXdCSVFFTUJBc2dBMEgvL3dOeElRTWdFQ0FDUVFGMGFpRVhJQmNnQXpzQkFDQUNRUUZxSVFJZ0N5Z0NBQ0VESUFJZ0EwZ05BQXNnQXlFQ0N5QUZMQUFBSVFNQ1FDQURRUUZHQkVBZ0VTd0FBQ0VESUFOQkFFY2lGd1JBSUFFb0FnQWhBeUFEUlFSQUlBSWhBUXdEQ3dVZ0RpZ0NBQ0VEQ3lBS0lBWkJzQkJzYWlBQUlBTkJBblFnQ1NnQ0FHd1FUU0lmTmdJY0lCOUZCRUJCa3dFaEFRd0VDeUFCSUE0Z0Z4c2hBU0FCS0FJQUlRNGdEa0VBU2dSQUlBb2dCa0d3RUd4cVFhZ1FhaUVnSUFrb0FnQWlDa0VBU2lFSlF3QUFBQUFoSlVFQUlRRURRQ0FYQkg4Z0lDZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFCU0FCQ3lFRUlBa0VRQ0FMS0FJQUlSZ2dIQ3dBQUVVaElTQUtJQUZzSVNKQkFDRURRUUVoQWdOQUlBUWdBbTRoRWlBU0lCaHdJUklnRUNBU1FRRjBhaUVTSUJJdkFRQWhFaUFTUWYvL0EzR3lJU1FnR3lvQ0FDRW1JQ1lnSkpRaEpDQVBLZ0lBSVNZZ0pDQW1raUVrSUNVZ0pKSWhKQ0FpSUFOcUlSSWdIeUFTUVFKMGFpRVNJQklnSkRnQ0FDQWxJQ1FnSVJzaEpTQURRUUZxSVFNZ0F5QUtTQ0lTQkVCQmZ5QVliaUVqSUFJZ0kwc0VRRUdlQVNFQkRBa0xJQmdnQW13aEFnc2dFZzBBQ3dzZ0FVRUJhaUVCSUFFZ0RrZ05BQXNMSUFWQkFqb0FBQ0FMS0FJQUlRRUZJQUpCQW5RaEFTQUFJQUVRVFNFQ0lBb2dCa0d3RUd4cVFSeHFJUUVnQVNBQ05nSUFJQXNvQWdBaENDQUNSUVJBUWFVQklRRU1CQXNnQ0VFQVRBUkFJQWdoQVF3Q0N5QWNMQUFBUlNFRFF3QUFBQUFoSlVFQUlRRURRQ0FRSUFGQkFYUnFJUVFnQkM4QkFDRUVJQVJCLy84RGNiSWhKQ0FiS2dJQUlTWWdKaUFrbENFa0lBOHFBZ0FoSmlBa0lDYVNJU1FnSlNBa2tpRWtJQUlnQVVFQ2RHb2hCQ0FFSUNRNEFnQWdKU0FrSUFNYklTVWdBVUVCYWlFQklBRWdDRWdOQUFzZ0NDRUJDd3NnQVVFQmRDRUJJQUFnRUNBQkVFNExJQVpCQVdvaEJpQU5LQUlBSVFFZ0JpQUJTQTBCREFNTEN3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBVUUvYXc1bkFCWUJGZ0lXRmhZV0F4WVdGaFlFRmhZV0ZoWUZGaFlXRmhZV0JoWVdGaFlXRmdjV0ZoWVdGaFlXQ0JZSkZnb1dGZ3NXRmhZTUZoWVdGZzBXRGhZV0ZoWVBGaFlXRmhZUUZoRVdGaFlTRmhZV0ZoWVdFeFlXRmhZV0ZoWVdGaFlVRmhZV0ZoWVdGUllMSUFCQkZCQVZRUUFNR3dzZ0FFRVVFQlZCQUF3YUN5QUFRUlFRRlVFQURCa0xJQUJCRkJBVlFRQU1HQXNnQUVFREVCVkJBQXdYQ3lBQVFSUVFGVUVBREJZTElBQkJGQkFWUVFBTUZRc2dBRUVERUJWQkFBd1VDeUFBUVFNUUZVRUFEQk1MSUFCQkF4QVZRUUFNRWdzZ0FFRURFQlZCQUF3UkN5QUFRUU1RRlVFQURCQUxJQkVzQUFBaEFTQUJCRUFnQUNBSFFRQVFUZ3NnQUVFVUVCVkJBQXdQQ3lBQVFRTVFGVUVBREE0TElBQkJBeEFWUVFBTURRc2dBRUVVRUJWQkFBd01DeUFBUVJRUUZVRUFEQXNMSUFCQkF4QVZRUUFNQ2dzZ0N5Z0NBQ0VCSUFGQkFYUWhBU0FBSUJBZ0FSQk9JQUJCRkJBVlFRQU1DUXNnQ3lnQ0FDRUJJQUZCQVhRaEFTQUFJQkFnQVJCT0lBQkJBeEFWUVFBTUNBc2dHRUVCZENFQklBQWdFQ0FCRUU0Z0FFRVVFQlZCQUF3SEN5QUlRUUYwSVFFZ0FDQVFJQUVRVGlBQVFRTVFGVUVBREFZTEN3c2dBRUVHRUN3aEFTQUJRUUZxSVFFZ0FVSC9BWEVoQWdKQUlBSUVRRUVBSVFFRFFBSkFJQUJCRUJBc0lRTWdBMFVoQXlBRFJRMEFJQUZCQVdvaEFTQUJJQUpKRFFFTUF3c0xJQUJCRkJBVlFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCOUFCcUlROGdEeUFCTmdJQUlBRkJ2QXhzSVFFZ0FDQUJFRTBoQVNBQVFmZ0JhaUVPSUE0Z0FUWUNBQ0FCUlFSQUlBQkJBeEFWUVFBTUJBc2dEeWdDQUNFQkFuOGdBVUVBU2dSL1FRQWhCRUVBSVFjQ1FBSkFBa0FDUUFKQUFrQURRQ0FBUVJBUUxDRUJJQUZCLy84RGNTRUNJQUJCK0FCcUlBZEJBWFJxSVFNZ0F5QUNPd0VBSUFGQi8vOERjU0VCSUFGQkFVc05BU0FCUlEwQ0lBNG9BZ0FoQlNBQVFRVVFMQ0VCSUFGQi93RnhJUUlnQlNBSFFid01iR29oQ2lBS0lBSTZBQUFnQVVIL0FYRWhBU0FCQkVCQmZ5RUJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQ0NBRklBZEJ2QXhzYWtFQmFpQUNhaUVHSUFZZ0NEb0FBQ0FEUWY4QmNTRURJQU1nQVVvaENDQURJQUVnQ0JzaEF5QUNRUUZxSVFJZ0NpMEFBQ0VCSUFGQi93RnhJUUVnQWlBQlNRUkFJQU1oQVF3QkN3dEJBQ0VCQTBBZ0FFRURFQ3doQWlBQ1FRRnFJUUlnQWtIL0FYRWhBaUFGSUFkQnZBeHNha0VoYWlBQmFpRUlJQWdnQWpvQUFDQUFRUUlRTENFQ0lBSkIvd0Z4SVFJZ0JTQUhRYndNYkdwQk1Xb2dBV29oQ0NBSUlBSTZBQUFDUUFKQUlBSkIvd0Z4UlEwQUlBQkJDQkFzSVFJZ0FrSC9BWEVoQmlBRklBZEJ2QXhzYWtIQkFHb2dBV29oRUNBUUlBWTZBQUFnQWtIL0FYRWhBaUFOS0FJQUlRWWdBaUFHVGcwSElBZ3NBQUFoQWlBQ1FSOUhEUUFNQVF0QkFDRUNBMEFnQUVFSUVDd2hCaUFHUWYvL0Eyb2hCaUFHUWYvL0EzRWhFQ0FGSUFkQnZBeHNha0hTQUdvZ0FVRUVkR29nQWtFQmRHb2hDU0FKSUJBN0FRQWdCa0VRZENFR0lBWkJFSFVoQmlBTktBSUFJUkFnQmlBUVNDRUdJQVpGRFFnZ0FrRUJhaUVDSUFndEFBQWhCaUFHUWY4QmNTRUdRUUVnQm5RaEJpQUNJQVpJRFFBTEN5QUJRUUZxSVFJZ0FTQURTQVJBSUFJaEFRd0JDd3NMSUFCQkFoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCU0FIUWJ3TWJHcEJ0QXhxSVFJZ0FpQUJPZ0FBSUFCQkJCQXNJUUVnQVVIL0FYRWhBaUFGSUFkQnZBeHNha0cxREdvaEVDQVFJQUk2QUFBZ0JTQUhRYndNYkdwQjBnSnFJUWtnQ1VFQU93RUFJQUZCL3dGeElRRkJBU0FCZENFQklBRkIvLzhEY1NFQklBVWdCMEc4REd4cVFkUUNhaUVDSUFJZ0FUc0JBQ0FGSUFkQnZBeHNha0c0REdvaEJpQUdRUUkyQWdBZ0Npd0FBQ0VCQWtBQ1FDQUJCRUJCQUNFSVFRSWhBd05BSUFVZ0IwRzhER3hxUVFGcUlBaHFJUUlnQWkwQUFDRUNJQUpCL3dGeElRSWdCU0FIUWJ3TWJHcEJJV29nQW1vaEFpQUNMQUFBSVFzZ0N3UkFRUUFoQVFOQUlCQXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBILy93TnhJUXNnQmlnQ0FDRURJQVVnQjBHOERHeHFRZElDYWlBRFFRRjBhaUVSSUJFZ0N6c0JBQ0FEUVFGcUlRTWdCaUFETmdJQUlBRkJBV29oQVNBQ0xRQUFJUXNnQzBIL0FYRWhDeUFCSUF0SkRRQUxJQW9zQUFBaEFnVWdBU0VDQ3lBRElRRWdDRUVCYWlFSUlBSkIvd0Z4SVFNZ0NDQURTUVJBSUFFaEF5QUNJUUVNQVFzTElBRkJBRW9OQVFWQkFpRUJEQUVMREFFTFFRQWhBZ05BSUFVZ0IwRzhER3hxUWRJQ2FpQUNRUUYwYWlFRElBTXVBUUFoQXlBTUlBSkJBblJxSVFnZ0NDQURPd0VBSUFKQi8vOERjU0VESUF3Z0FrRUNkR3BCQW1vaENDQUlJQU03QVFBZ0FrRUJhaUVDSUFJZ0FVZ05BQXNMSUF3Z0FVRUVRUUVRWmlBR0tBSUFJUUVDUUNBQlFRQktCRUJCQUNFQkEwQWdEQ0FCUVFKMGFrRUNhaUVDSUFJdUFRQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFRY1lHYWlBQmFpRURJQU1nQWpvQUFDQUJRUUZxSVFFZ0JpZ0NBQ0VDSUFFZ0FrZ05BQXNnQWtFQ1RBUkFJQUloQVF3Q0MwRUNJUUVEUUNBSklBRWdIU0FlRUZVZ0hTZ0NBQ0VDSUFKQi93RnhJUUlnQlNBSFFid01iR3BCd0FocUlBRkJBWFJxSVFNZ0F5QUNPZ0FBSUI0b0FnQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFJQUZCQVhScVFjRUlhaUVESUFNZ0Fqb0FBQ0FCUVFGcUlRRWdCaWdDQUNFQ0lBRWdBa2dOQUFzZ0FpRUJDd3NnQVNBRVNpRUNJQUVnQkNBQ0d5RUVJQWRCQVdvaEJ5QVBLQUlBSVFFZ0J5QUJTQTBBREFVQUN3QUxJQUJCRkJBVlFRQU1DZ3NnRGlnQ0FDRUJJQUJCQ0JBc0lRSWdBa0gvQVhFaEFpQUJJQWRCdkF4c2FpRURJQU1nQWpvQUFDQUFRUkFRTENFQ0lBSkIvLzhEY1NFQ0lBRWdCMEc4REd4cVFRSnFJUU1nQXlBQ093RUFJQUJCRUJBc0lRSWdBa0gvL3dOeElRSWdBU0FIUWJ3TWJHcEJCR29oQXlBRElBSTdBUUFnQUVFR0VDd2hBaUFDUWY4QmNTRUNJQUVnQjBHOERHeHFRUVpxSVFNZ0F5QUNPZ0FBSUFCQkNCQXNJUUlnQWtIL0FYRWhBaUFCSUFkQnZBeHNha0VIYWlFRElBTWdBam9BQUNBQVFRUVFMQ0VDSUFKQkFXb2hBaUFDUWY4QmNTRUVJQUVnQjBHOERHeHFRUWhxSVFNZ0F5QUVPZ0FBSUFKQi93RnhJUUlnQWdSQUlBRWdCMEc4REd4cVFRbHFJUUpCQUNFQkEwQWdBRUVJRUN3aEJ5QUhRZjhCY1NFSElBSWdBV29oQkNBRUlBYzZBQUFnQVVFQmFpRUJJQU10QUFBaEJ5QUhRZjhCY1NFSElBRWdCMGtOQUFzTElBQkJCQkFWUVFBTUNRc2dBRUVVRUJVTUFnc2dBRUVVRUJVTUFRc2dCRUVCZEF3Q0MwRUFEQVVGUVFBTEN5RVFJQUJCQmhBc0lRRWdBVUVCYWlFQklBQkIvQUZxSVFVZ0JTQUJOZ0lBSUFGQkdHd2hBU0FBSUFFUVRTRUJJQUJCZ0FOcUlRNGdEaUFCTmdJQUlBRkZCRUFnQUVFREVCVkJBQXdFQ3lBRktBSUFJUUlnQWtFWWJDRUNJQUZCQUNBQ0VIb2FJQVVvQWdBaEFRSkFJQUZCQUVvRVFFRUFJUWNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnRGlnQ0FDRUVJQUJCRUJBc0lRRWdBVUgvL3dOeElRSWdBRUdBQW1vZ0IwRUJkR29oQXlBRElBSTdBUUFnQVVILy93TnhJUUVnQVVFQ1N3MEJJQUJCR0JBc0lRSWdCQ0FIUVJoc2FpRUJJQUVnQWpZQ0FDQUFRUmdRTENFQ0lBUWdCMEVZYkdwQkJHb2hBeUFESUFJMkFnQWdBU2dDQUNFQklBSWdBVWtOQWlBQVFSZ1FMQ0VCSUFGQkFXb2hBU0FFSUFkQkdHeHFRUWhxSVFJZ0FpQUJOZ0lBSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCQ0FIUVJoc2FrRU1haUVJSUFnZ0FUb0FBQ0FBUVFnUUxDRUJJQUZCL3dGeElRSWdCQ0FIUVJoc2FrRU5haUVHSUFZZ0Fqb0FBQ0FCUWY4QmNTRUJJQTBvQWdBaEFpQUJJQUpPRFFNZ0NDd0FBQ0VCSUFFRWYwRUFJUUVEUUNBQVFRTVFMQ0VESUFCQkFSQXNJUUlnQWdSL0lBQkJCUkFzQlVFQUN5RUNJQUpCQTNRaEFpQUNJQU5xSVFJZ0FrSC9BWEVoQWlBTUlBRnFJUU1nQXlBQ09nQUFJQUZCQVdvaEFTQUlMUUFBSVFJZ0FrSC9BWEVoQXlBQklBTkpEUUFMSUFKQi93RnhCVUVBQ3lFQklBRkJCSFFoQVNBQUlBRVFUU0VCSUFRZ0IwRVliR3BCRkdvaENpQUtJQUUyQWdBZ0FVVU5CQ0FJTEFBQUlRSWdBZ1JBUVFBaEFnTkFJQXdnQW1vdEFBQWhDMEVBSVFNRFFFRUJJQU4wSVFrZ0NTQUxjU0VKSUFrRVFDQUFRUWdRTENFSklBbEIvLzhEY1NFUklBb29BZ0FoQVNBQklBSkJCSFJxSUFOQkFYUnFJUllnRmlBUk93RUFJQWxCRUhRaENTQUpRUkIxSVFrZ0RTZ0NBQ0VSSUJFZ0NVd05DUVVnQVNBQ1FRUjBhaUFEUVFGMGFpRUpJQWxCZnpzQkFBc2dBMEVCYWlFRElBTkJDRWtOQUFzZ0FrRUJhaUVDSUFndEFBQWhBeUFEUWY4QmNTRURJQUlnQTBrTkFBc0xJQlVvQWdBaEFTQUdMUUFBSVFJZ0FrSC9BWEVoQWlBQklBSkJzQkJzYWtFRWFpRUJJQUVvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRTBoQVNBRUlBZEJHR3hxUVJCcUlRb2dDaUFCTmdJQUlBRkZEUVlnRlNnQ0FDRUNJQVl0QUFBaEF5QURRZjhCY1NFRElBSWdBMEd3RUd4cVFRUnFJUUlnQWlnQ0FDRUNJQUpCQW5RaEFpQUJRUUFnQWhCNkdpQVZLQUlBSVFJZ0JpMEFBQ0VCSUFGQi93RnhJUU1nQWlBRFFiQVFiR3BCQkdvaEFTQUJLQUlBSVFFZ0FVRUFTZ1JBUVFBaEFRTkFJQUlnQTBHd0VHeHFJUUlnQWlnQ0FDRURJQUFnQXhCTklRSWdDaWdDQUNFRUlBUWdBVUVDZEdvaEJDQUVJQUkyQWdBZ0NpZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFJUVFnQkVVTkNRSkFJQU5CQUVvRVFDQUlMUUFBSVFrZ0EwRi9haUVDSUFsQi93RnhJUWtnQVNBSmNDRUpJQWxCL3dGeElRa2dCQ0FDYWlFRUlBUWdDVG9BQUNBRFFRRkdEUUVnQVNFREEwQWdDQzBBQUNFSklBbEIvd0Z4SVFRZ0F5QUViU0VESUFvb0FnQWdBVUVDZEdvaEJDQUVLQUlBSVFzZ0FrRi9haUVFSUFsQi93RnhJUWtnQXlBSmJ5RUpJQWxCL3dGeElRa2dDeUFFYWlFTElBc2dDVG9BQUNBQ1FRRktCRUFnQkNFQ0RBRUxDd3NMSUFGQkFXb2hBU0FWS0FJQUlRSWdCaTBBQUNFRElBTkIvd0Z4SVFNZ0FpQURRYkFRYkdwQkJHb2hCQ0FFS0FJQUlRUWdBU0FFU0EwQUN3c2dCMEVCYWlFSElBVW9BZ0FoQVNBSElBRklEUUFNQ2dBTEFBc2dBRUVVRUJVTUJnc2dBRUVVRUJVTUJRc2dBRUVVRUJVTUJBc2dBRUVERUJVTUF3c2dBRUVVRUJVTUFnc2dBRUVERUJVTUFRc2dBRUVERUJVTFFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCaEFOcUlRY2dCeUFCTmdJQUlBRkJLR3doQVNBQUlBRVFUU0VCSUFCQmlBTnFJUW9nQ2lBQk5nSUFJQUZGQkVBZ0FFRURFQlZCQUF3RUN5QUhLQUlBSVFJZ0FrRW9iQ0VDSUFGQkFDQUNFSG9hSUFjb0FnQWhBUUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQW9vQWdBaEJDQUVJQUZCS0d4cUlRd2dBRUVRRUN3aEFpQUNEUUVnRXlnQ0FDRUNJQUpCQTJ3aEFpQUFJQUlRVFNFQ0lBUWdBVUVvYkdwQkJHb2hDQ0FJSUFJMkFnQWdBa1VOQWlBQVFRRVFMQ0VDSUFJRWZ5QUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjUVZCQVFzaEFpQUVJQUZCS0d4cVFRaHFJUVlnQmlBQ09nQUFJQUJCQVJBc0lRSUNRQ0FDQkVBZ0FFRUlFQ3doQWlBQ1FRRnFJUUlnQWtILy93TnhJUU1nRENBRE93RUFJQUpCLy84RGNTRUNJQUpGRFFGQkFDRUNJQk1vQWdBaEF3TkFJQU5CZjJvaEF5QURFQzBoQXlBQUlBTVFMQ0VESUFOQi93RnhJUU1nQ0NnQ0FDRU5JQTBnQWtFRGJHb2hEU0FOSUFNNkFBQWdFeWdDQUNFRElBTkJmMm9oQXlBREVDMGhBeUFBSUFNUUxDRU5JQTFCL3dGeElRa2dDQ2dDQUNFRElBTWdBa0VEYkdwQkFXb2hDeUFMSUFrNkFBQWdBeUFDUVFOc2FpRURJQU1zQUFBaEN5QUxRZjhCY1NFUklCTW9BZ0FoQXlBRElCRk1EUVlnRFVIL0FYRWhEU0FESUExTURRY2dDeUFKUVJoMFFSaDFSaUVOSUEwTkNDQUNRUUZxSVFJZ0RDOEJBQ0VOSUExQi8vOERjU0VOSUFJZ0RVa05BQXNGSUF4QkFEc0JBQXNMSUFCQkFoQXNJUUlnQWcwR0lBWXNBQUFoQXlBVEtBSUFJZ3hCQUVvaEFnSkFBa0FnQTBIL0FYRkJBVW9FUUNBQ1JRMEJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQXlBSUtBSUFJUXdnRENBQ1FRTnNha0VDYWlFTUlBd2dBem9BQUNBR0xRQUFJUXdnREVIL0FYRWdBMG9oQXlBRFJRMExJQUpCQVdvaEFpQVRLQUlBSVFNZ0FpQURTQTBBQ3d3QkJTQUNCRUFnQ0NnQ0FDRUlRUUFoQWdOQUlBZ2dBa0VEYkdwQkFtb2hEU0FOUVFBNkFBQWdBa0VCYWlFQ0lBSWdERWdOQUFzTElBTU5BUXNNQVF0QkFDRUNBMEFnQUVFSUVDd2FJQUJCQ0JBc0lRTWdBMEgvQVhFaENDQUVJQUZCS0d4cVFRbHFJQUpxSVFNZ0F5QUlPZ0FBSUFCQkNCQXNJUWdnQ0VIL0FYRWhEQ0FFSUFGQktHeHFRUmhxSUFKcUlRMGdEU0FNT2dBQUlBTXRBQUFoQXlBRFFmOEJjU0VESUE4b0FnQWhEQ0FNSUFOTURRb2dDRUgvQVhFaEF5QUZLQUlBSVFnZ0F5QUlTQ0VESUFORkRRc2dBa0VCYWlFQ0lBWXRBQUFoQXlBRFFmOEJjU0VESUFJZ0Ewa05BQXNMSUFGQkFXb2hBU0FIS0FJQUlRSWdBU0FDU0EwQURBd0FDd0FMSUFCQkZCQVZRUUFNRGdzZ0FFRURFQlZCQUF3TkN5QUFRUlFRRlVFQURBd0xJQUJCRkJBVlFRQU1Dd3NnQUVFVUVCVkJBQXdLQ3lBQVFSUVFGVUVBREFrTElBQkJGQkFWUVFBTUNBc2dBRUVVRUJWQkFBd0hDeUFBUVJRUUZVRUFEQVlBQ3dBTEN5QUFRUVlRTENFQklBRkJBV29oQVNBQVFZd0RhaUVDSUFJZ0FUWUNBQUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFOQUlBQkJBUkFzSVFNZ0EwSC9BWEVoQXlBQVFaQURhaUFCUVFac2FpRUVJQVFnQXpvQUFDQUFRUkFRTENFRElBTkIvLzhEY1NFRUlBQWdBVUVHYkdwQmtnTnFJUU1nQXlBRU93RUFJQUJCRUJBc0lRUWdCRUgvL3dOeElRZ2dBQ0FCUVFac2FrR1VBMm9oQkNBRUlBZzdBUUFnQUVFSUVDd2hDQ0FJUWY4QmNTRUdJQUFnQVVFR2JHcEJrUU5xSVF3Z0RDQUdPZ0FBSUFNdUFRQWhBeUFERFFFZ0JDNEJBQ0VESUFNTkFpQUlRZjhCY1NFRElBY29BZ0FoQkNBRElBUklJUU1nQTBVTkF5QUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ05BQXdHQUFzQUN5QUFRUlFRRlVFQURBZ0xJQUJCRkJBVlFRQU1Cd3NnQUVFVUVCVkJBQXdHQUFzQUN3c2dBQkFoSUFCQjFBZHFJUUVnQVVFQU5nSUFJQk1vQWdBaEFRSkFJQUZCQUVvRVFFRUFJUUVEUUFKQUlCUW9BZ0FoQWlBQ1FRSjBJUUlnQUNBQ0VFMGhBeUFBUVpRR2FpQUJRUUowYWlFQ0lBSWdBellDQUNBVUtBSUFJUU1nQTBFQmRDRURJQU5CL3YvLy93ZHhJUU1nQUNBREVFMGhCeUFBUVpRSGFpQUJRUUowYWlFRElBTWdCellDQUNBQUlCQVFUU0VISUFCQjJBZHFJQUZCQW5ScUlRUWdCQ0FITmdJQUlBSW9BZ0FoQWlBQ1JRMEFJQU1vQWdBaEF5QURSU0VESUFkRklRY2dCeUFEY2cwQUlCUW9BZ0FoQXlBRFFRSjBJUU1nQWtFQUlBTVFlaG9nQVVFQmFpRUJJQk1vQWdBaEFpQUJJQUpJRFFFTUF3c0xJQUJCQXhBVlFRQU1CUXNMSUJvb0FnQWhBU0FBUVFBZ0FSQldJUUZCQUNBQlJRMERHaUFVS0FJQUlRRWdBRUVCSUFFUVZpRUJRUUFnQVVVTkF4b2dHaWdDQUNFQklBQkIzQUJxSVFJZ0FpQUJOZ0lBSUJRb0FnQWhBU0FBUWVBQWFpRUNJQUlnQVRZQ0FDQUJRUUYwSVFJZ0FrSCsvLy8vQjNFaEJDQUZLQUlBSVFnZ0NFRUFTZ1IvSUE0b0FnQWhCeUFCUVFKdElRTkJBQ0VDUVFBaEFRTkFJQWNnQVVFWWJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFR0lBVWdBeUFHR3lFR0lBY2dBVUVZYkdwQkJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFTUlBVWdBeUFNR3lFRklBVWdCbXNoQlNBSElBRkJHR3hxUVFocUlRWWdCaWdDQUNFR0lBVWdCbTRoQlNBRklBSktJUVlnQlNBQ0lBWWJJUUlnQVVFQmFpRUJJQUVnQ0VnTkFBc2dBa0VDZENFQklBRkJCR29GUVFRTElRRWdFeWdDQUNFQ0lBSWdBV3doQVNBQVFReHFJUUlnQkNBQlN5RURJQUlnQkNBQklBTWJJZ0kyQWdBZ0FFSFZDbW9oQVNBQlFRRTZBQUFnQUVIRUFHb2hBU0FCS0FJQUlRRUNRQ0FCQkVBZ0FFSFFBR29oQVNBQktBSUFJUUVnQUVISUFHb2hBeUFES0FJQUlRTWdBU0FEUndSQVFjd1dRY1FUUWFBZ1FZUVhFQVFMSUFCQnpBQnFJUU1nQXlnQ0FDRURJQUpCM0F0cUlRSWdBaUFEYWlFQ0lBSWdBVTBOQVNBQVFRTVFGVUVBREFVTEN5QUFFQjhoQVNBQVFTaHFJUUFnQUNBQk5nSUFRUUVNQXdzZ0FDQUNRUVlRSWlFQklBRkJBRWNoQVNBQ0xBQUFJUU1nQTBIbUFFWWhBeUFCSUFOeEJFQWdBa0VCYWlFQklBRXNBQUFoQVNBQlFla0FSZ1JBSUFKQkFtb2hBU0FCTEFBQUlRRWdBVUh6QUVZRVFDQUNRUU5xSVFFZ0FTd0FBQ0VCSUFGQjZBQkdCRUFnQWtFRWFpRUJJQUVzQUFBaEFTQUJRZVVBUmdSQUlBSkJCV29oQVNBQkxBQUFJUUVnQVVIaEFFWUVRQ0FBRURBaEFTQUJRZjhCY1VIa0FFWUVRQ0FBRURBaEFTQUJRZjhCY1VVRVFDQUFRU1lRRlVFQURBb0xDd3NMQ3dzTEN3c2dBRUVpRUJVTFFRQUxJUUFnR1NRR0lBQUxEd0VCZnlBQVFkd0xFRTBoQVNBQkN6OEJBWDhnQUVFa2FpRUJJQUVzQUFBaEFTQUJCSDlCQUFVZ0FFRVVhaUVCSUFFb0FnQWhBU0FBUVJocUlRQWdBQ2dDQUNFQUlBRWdBR3NMSVFBZ0FBdUJBZ0VDZnlBQVFkZ0thaUVCSUFFb0FnQWhBUUovQWtBZ0FVRi9SdzBBSUFBUU1DRUJJQUJCMUFCcUlRSWdBaWdDQUNFQ0lBSUVmMEVBQlNBQlFmOEJjVUhQQUVjRVFDQUFRUjRRRlVFQURBTUxJQUFRTUNFQklBRkIvd0Z4UWVjQVJ3UkFJQUJCSGhBVlFRQU1Bd3NnQUJBd0lRRWdBVUgvQVhGQjV3QkhCRUFnQUVFZUVCVkJBQXdEQ3lBQUVEQWhBU0FCUWY4QmNVSFRBRWNFUUNBQVFSNFFGVUVBREFNTElBQVFNeUVCSUFFRVFDQUFRZE1LYWlFQklBRXNBQUFoQVNBQlFRRnhJUUVnQVVVTkFpQUFRZHdLYWlFQklBRkJBRFlDQUNBQVFkUUthaUVCSUFGQkFEb0FBQ0FBUVNBUUZRdEJBQXNNQVFzZ0FCQktDeUVBSUFBTEZBRUJmd05BSUFBUUxpRUJJQUZCZjBjTkFBc0xaUUVFZnlBQVFSUnFJUU1nQXlnQ0FDRUZJQVVnQW1vaEJpQUFRUnhxSVFRZ0JDZ0NBQ0VFSUFZZ0JFc0VmeUFBUWRRQWFpRUFJQUJCQVRZQ0FFRUFCU0FCSUFVZ0FoQjVHaUFES0FJQUlRQWdBQ0FDYWlFQUlBTWdBRFlDQUVFQkN5RUFJQUFMYUFFQ2Z5QUFFREFoQWlBQ1FmOEJjU0VDSUFBUU1DRUJJQUZCL3dGeElRRWdBVUVJZENFQklBRWdBbkloQWlBQUVEQWhBU0FCUWY4QmNTRUJJQUZCRUhRaEFTQUNJQUZ5SVFJZ0FCQXdJUUFnQUVIL0FYRWhBQ0FBUVJoMElRQWdBaUFBY2lFQUlBQUxFd0VCZjBFRUVGNGhBQ0FBUVFBMkFnQWdBQXNUQVFGL0lBQW9BZ0FoQVNBQkVCQWdBQkJmQ3lFQUlBQW9BZ0FoQUNBQUJIOGdBRUVFYWlFQUlBQW9BZ0FGUVFBTElRQWdBQXNhQUNBQUtBSUFJUUFnQUFSL0lBQW9BZ0FGUVFBTElRQWdBQXZiQndJU2Z3RjlJd1loRUNNR1FSQnFKQVlnRUVFRWFpRUxJQkFoRENBRVFRQTJBZ0FnQUNnQ0FDRUdBa0FDUUNBR0RRQkJJQ0VGQTBBQ1FDQUxRUUEyQWdBZ0RFRUFOZ0lBSUFVZ0Frb2hCaUFDSUFVZ0Joc2hCaUFCSUFZZ0N5QU1RUUFRR3lFS0lBQWdDallDQUFKQUFrQUNRQUpBSUF3b0FnQU9BZ0VBQWdzZ0FpQUZUQ0VISUFkQkFYTWhCU0FGUVFGeElRVWdCaUFGZENFRlFRRkJBaUFIR3lFR0lBWWhDVUVBSUFnZ0J4c2hDQ0FGSVFZTUFnc2dDeWdDQUNFSElBUW9BZ0FoQlNBRklBZHFJUVVnQkNBRk5nSUFJQUVnQjJvaEFVRUFJUWtnQWlBSGF5RUNEQUVMUVFFaENVRi9JUWdMQWtBQ1FBSkFJQWxCQTNFT0F3QUJBQUVMREFFTERBRUxJQW9FUUNBS0lRWU1Bd1VnQmlFRkRBSUxBQXNMSUFrRWZ5QUlCU0FLSVFZTUFRc2hFZ3dCQ3lBR1FRUnFJUW9nQ2lnQ0FDRUlJQWhCQW5RaENDQUlFRjRoRFNBTlJRUkFFQVlMSUFvb0FnQWhDQ0FJUVFCS0JFQWdDRUVDZENFSUlBMUJBQ0FJRUhvYUMwRUFJUVZCQUNFS0lBRWhDQ0FHSVFFQ1FBSkFBa0FEUUNBTFFRQTJBZ0FnREVFQU5nSUFJQUpCSUVnaEJpQUNRU0FnQmhzaENTQUJJQWdnQ1VFQUlBc2dEQkFVSVFFZ0FVVUVRRUVnSVFZZ0NTRUJBMEFnQWlBR1NpRUdJQVpGRFFRZ0FVRUJkQ0VHSUFZZ0Frb2hBU0FDSUFZZ0FSc2hBU0FBS0FJQUlRa2dDU0FJSUFGQkFDQUxJQXdRRkNFSklBbEZEUUFMSUFraEFRc2dCQ2dDQUNFR0lBWWdBV29oQmlBRUlBWTJBZ0FnQ0NBQmFpRUlJQUlnQVdzaEJpQU1LQUlBSVJFZ0VTQUthaUVKQWtBQ1FDQUZJQWxJQkVBZ0JVVWhBaUFGUVFGMElRRkJnQ0FnQVNBQ0d5RUNJQUFvQWdBaEFTQUJRUVJxSVFVZ0JTZ0NBQ0VGSUFWQkFFb0VRQ0FDUVFKMElRNUJBQ0VCQTBBZ0RTQUJRUUowYWlFSElBY29BZ0FoQlNBRklBNFFZQ0VGSUFWRkRRWWdCeUFGTmdJQUlBRkJBV29oQVNBQUtBSUFJUWNnQjBFRWFpRUZJQVVvQWdBaEJTQUJJQVZJRFFBTElBVWhEaUFISVFFTUFnc0ZJQUFvQWdBaUFVRUVhaUVISUFVaEFpQUhLQUlBSVE0TUFRc01BUXNnRGtFQVNnUkFJQkZCQUVvaEV5QUxLQUlBSVJSQkFDRUhBMEFnRXdSQUlCUWdCMEVDZEdvb0FnQWhGU0FOSUFkQkFuUnFLQUlBSVJaQkFDRUZBMEFnRlNBRlFRSjBhaUVQSUE4cUFnQWhGeUFYUXdBQWdEOWVCRUJEQUFDQVB5RVhCU0FYUXdBQWdMOWRCRUJEQUFDQXZ5RVhDd3NnQlNBS2FpRVBJQllnRDBFQ2RHb2hEeUFQSUJjNEFnQWdCVUVCYWlFRklBVWdFVWNOQUFzTElBZEJBV29oQlNBRklBNUlCRUFnQlNFSERBRUxDd3NMSUFJaEJTQUpJUW9nQmlFQ0RBQUFDd0FMRUFZTUFRc2dBeUFOTmdJQUlBb2hFZ3NMSUJBa0JpQVNDendCQVg4Z0FFRUlkQ0VDSUFGQi93RnhJUUVnQUVFWWRpRUFJQUFnQVhNaEFDQUFRUUowUWRBWmFpRUFJQUFvQWdBaEFDQUFJQUp6SVFBZ0FBdnZCQUVGZnlBQVFkZ0xhaUVHSUFaQkFEWUNBQ0FBUWRRTGFpRUdJQVpCQURZQ0FDQUFRZFFBYWlFSUlBZ29BZ0FoQmdKL0lBWUVmMEVBQlNBQVFTUnFJUWNDUUFKQUEwQUNRQ0FBRUNBaEJrRUFJQVpGRFFVYUlBQkJBUkFzSVFZZ0JrVU5BQ0FITEFBQUlRWWdCZzBDQTBBZ0FCQVpJUVlnQmtGL1J3MEFDeUFJS0FJQUlRWWdCa1VOQVVFQURBVUxDd3dCQ3lBQVFTTVFGVUVBREFJTElBQkJ4QUJxSVFZZ0JpZ0NBQ0VHSUFZRVFDQUFRY2dBYWlFR0lBWW9BZ0FoQnlBQVFkQUFhaUVHSUFZb0FnQWhCaUFISUFaSEJFQkIweE5CeEJOQnVoaEJpeFFRQkFzTElBQkJqQU5xSVFjZ0J5Z0NBQ0VHSUFaQmYyb2hCaUFHRUMwaEJpQUFJQVlRTENFSUlBaEJmMFlFZjBFQUJTQUhLQUlBSVFZZ0NDQUdTQVIvSUFVZ0NEWUNBQ0FBUVpBRGFpQUlRUVpzYWlFSElBY3NBQUFoQlFKQUFrQWdCUVIvSUFCQjZBQnFJUVVnQlNnQ0FDRUZJQUJCQVJBc0lRWWdBRUVCRUN3aENDQUdRUUJISVFrZ0J5d0FBQ0VHSUFaRklRY2dCVUVCZFNFR0lBa2dCM0lFZnd3Q0JTQUFRZVFBYWlFS0lBb29BZ0FoQ1NBRklBbHJJUWtnQ1VFQ2RTRUpJQUVnQ1RZQ0FDQUtLQUlBSVFFZ0FTQUZhaUVKSUFZaEFTQUpRUUoxQ3dVZ0FFSGtBR29oQlNBRktBSUFJUVpCQUNFSUlBWWhCU0FHUVFGMUlRWkJBU0VIREFFTElRWU1BUXNnQVVFQU5nSUFJQVloQVFzZ0FpQUdOZ0lBSUFoQkFFY2hBaUFDSUFkeUJFQWdBeUFCTmdJQUJTQUZRUU5zSVFJZ0FFSGtBR29oQVNBQktBSUFJUUFnQWlBQWF5RUFJQUJCQW5VaEFDQURJQUEyQWdBZ0FTZ0NBQ0VBSUFBZ0Ftb2hBQ0FBUVFKMUlRVUxJQVFnQlRZQ0FFRUJCVUVBQ3dzTEN5RUFJQUFMakIwQ0ozOERmU01HSVJ3akJrR0FGR29rQmlBY1FZQU1haUVkSUJ4QmdBUnFJU1FnSEVHQUFtb2hGQ0FjSVNBZ0FpMEFBQ0VISUFkQi93RnhJUWNnQUVIY0FHb2dCMEVDZEdvaEJ5QUhLQUlBSVI0Z0FFR0lBMm9oQnlBSEtBSUFJUllnQWtFQmFpRUhJQWN0QUFBaEJ5QUhRZjhCY1NFWElCWWdGMEVvYkdvaElpQWVRUUYxSVI5QkFDQWZheUVwSUFCQkJHb2hHaUFhS0FJQUlRY0Nmd0pBSUFkQkFFb0VmeUFXSUJkQktHeHFRUVJxSVNvZ0FFSDRBV29oS3lBQVFmQUFhaUVsSUFCQjZBcHFJUmdnQUVIa0Ntb2hJU0FVUVFGcUlTd0RRQUpBSUNvb0FnQWhCeUFISUExQkEyeHFRUUpxSVFjZ0J5MEFBQ0VISUFkQi93RnhJUWNnSFNBTlFRSjBhaUVWSUJWQkFEWUNBQ0FXSUJkQktHeHFRUWxxSUFkcUlRY2dCeTBBQUNFSElBZEIvd0Z4SVE4Z0FFSDRBR29nRDBFQmRHb2hCeUFITGdFQUlRY2dCMFVOQUNBcktBSUFJUkFnQUVFQkVDd2hCd0pBQWtBZ0IwVU5BQ0FRSUE5QnZBeHNha0cwREdvaEJ5QUhMUUFBSVFjZ0IwSC9BWEVoQnlBSFFYOXFJUWNnQjBFQ2RFR1FDR29oQnlBSEtBSUFJU01nQUVIWUIyb2dEVUVDZEdvaEJ5QUhLQUlBSVJrZ0l4QXRJUWNnQjBGL2FpRUhJQUFnQnhBc0lRZ2dDRUgvL3dOeElRZ2dHU0FJT3dFQUlBQWdCeEFzSVFjZ0IwSC8vd054SVFjZ0dVRUNhaUVJSUFnZ0J6c0JBQ0FRSUE5QnZBeHNhaUVtSUNZc0FBQWhCeUFIQkVCQkFDRVRRUUloQndOQUlCQWdEMEc4REd4cVFRRnFJQk5xSVFnZ0NDMEFBQ0VJSUFoQi93RnhJUnNnRUNBUFFid01iR3BCSVdvZ0cyb2hDQ0FJTEFBQUlRd2dERUgvQVhFaEp5QVFJQTlCdkF4c2FrRXhhaUFiYWlFSUlBZ3NBQUFoQ0NBSVFmOEJjU0VvUVFFZ0tIUWhDU0FKUVg5cUlTMGdDQVJBSUNVb0FnQWhDeUFRSUE5QnZBeHNha0hCQUdvZ0cyb2hDQ0FJTFFBQUlRZ2dDRUgvQVhFaENpQUxJQXBCc0JCc2FpRU9JQmdvQWdBaENDQUlRUXBJQkVBZ0FCQTBDeUFoS0FJQUlRa2dDVUgvQjNFaENDQUxJQXBCc0JCc2FrRWthaUFJUVFGMGFpRUlJQWd1QVFBaENDQUlRWDlLQkVBZ0N5QUtRYkFRYkdwQkNHb2hEaUFPS0FJQUlRNGdEaUFJYWlFT0lBNHRBQUFoRGlBT1FmOEJjU0VPSUFrZ0RuWWhDU0FoSUFrMkFnQWdHQ2dDQUNFSklBa2dEbXNoQ1NBSlFRQklJUTVCQUNBSklBNGJJUkZCZnlBSUlBNGJJUWtnR0NBUk5nSUFCU0FBSUE0UU5TRUpDeUFMSUFwQnNCQnNha0VYYWlFSUlBZ3NBQUFoQ0NBSUJFQWdDeUFLUWJBUWJHcEJxQkJxSVFnZ0NDZ0NBQ0VJSUFnZ0NVRUNkR29oQ0NBSUtBSUFJUWtMQlVFQUlRa0xJQXdFUUVFQUlRc2dCeUVJQTBBZ0NTQXRjU0VLSUJBZ0QwRzhER3hxUWRJQWFpQWJRUVIwYWlBS1FRRjBhaUVLSUFvdUFRQWhEQ0FKSUNoMUlRb2dERUYvU2dSL0lDVW9BZ0FoRGlBT0lBeEJzQkJzYWlFU0lCZ29BZ0FoQ1NBSlFRcElCRUFnQUJBMEN5QWhLQUlBSVJFZ0VVSC9CM0VoQ1NBT0lBeEJzQkJzYWtFa2FpQUpRUUYwYWlFSklBa3VBUUFoQ1NBSlFYOUtCRUFnRGlBTVFiQVFiR3BCQ0dvaEVpQVNLQUlBSVJJZ0VpQUphaUVTSUJJdEFBQWhFaUFTUWY4QmNTRVNJQkVnRW5ZaEVTQWhJQkUyQWdBZ0dDZ0NBQ0VSSUJFZ0Vtc2hFU0FSUVFCSUlSSkJBQ0FSSUJJYklSRkJmeUFKSUJJYklRa2dHQ0FSTmdJQUJTQUFJQklRTlNFSkN5QU9JQXhCc0JCc2FrRVhhaUVSSUJFc0FBQWhFU0FSQkVBZ0RpQU1RYkFRYkdwQnFCQnFJUXdnRENnQ0FDRU1JQXdnQ1VFQ2RHb2hDU0FKS0FJQUlRa0xJQWxCLy84RGNRVkJBQXNoQ1NBWklBaEJBWFJxSUFrN0FRQWdDRUVCYWlFSUlBdEJBV29oQ3lBTElDZEhCRUFnQ2lFSkRBRUxDeUFISUNkcUlRY0xJQk5CQVdvaEV5QW1MUUFBSVFnZ0NFSC9BWEVoQ0NBVElBaEpEUUFMQ3lBWUtBSUFJUWNnQjBGL1JnMEFJQ3hCQVRvQUFDQVVRUUU2QUFBZ0VDQVBRYndNYkdwQnVBeHFJUWNnQnlnQ0FDRVRJQk5CQWtvRVFDQWpRZi8vQTJvaEcwRUNJUWNEUUNBUUlBOUJ2QXhzYWtIQUNHb2dCMEVCZEdvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ3lBUUlBOUJ2QXhzYWlBSFFRRjBha0hCQ0dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ2lBUUlBOUJ2QXhzYWtIU0Ftb2dCMEVCZEdvaENDQUlMd0VBSVFnZ0NFSC8vd054SVFnZ0VDQVBRYndNYkdwQjBnSnFJQXRCQVhScUlRa2dDUzhCQUNFSklBbEIvLzhEY1NFSklCQWdEMEc4REd4cVFkSUNhaUFLUVFGMGFpRU1JQXd2QVFBaERDQU1RZi8vQTNFaERDQVpJQXRCQVhScUlRNGdEaTRCQUNFT0lCa2dDa0VCZEdvaEZTQVZMZ0VBSVJVZ0NDQUpJQXdnRGlBVkVEWWhDQ0FaSUFkQkFYUnFJUTRnRGk0QkFDRUpJQ01nQ0dzaERBSkFBa0FnQ1FSQUlBd2dDRWdoRlNBTUlBZ2dGUnRCQVhRaEZTQVVJQXBxSVFvZ0NrRUJPZ0FBSUJRZ0Myb2hDeUFMUVFFNkFBQWdGQ0FIYWlFTElBdEJBVG9BQUNBVklBbE1CRUFnRENBSVNnMERJQnNnQ1dzaENBd0NDeUFKUVFGeElRc2dDd1IvSUFsQkFXb2hDU0FKUVFGMklRa2dDQ0FKYXdVZ0NVRUJkU0VKSUFrZ0NHb0xJUWdGSUJRZ0Iyb2hDU0FKUVFBNkFBQUxDeUFPSUFnN0FRQUxJQWRCQVdvaEJ5QUhJQk5JRFFBTEN5QVRRUUJLQkVCQkFDRUhBMEFnRkNBSGFpRUlJQWdzQUFBaENDQUlSUVJBSUJrZ0IwRUJkR29oQ0NBSVFYODdBUUFMSUFkQkFXb2hCeUFISUJOSERRQUxDd3dCQ3lBVlFRRTJBZ0FMSUExQkFXb2hEU0FhS0FJQUlRY2dEU0FIU0EwQkRBTUxDeUFBUVJVUUZVRUFCUXdCQ3d3QkN5QUFRY1FBYWlFVElCTW9BZ0FoQ1NBSkJFQWdBRUhJQUdvaENDQUlLQUlBSVFnZ0FFSFFBR29oRFNBTktBSUFJUTBnQ0NBTlJ3UkFRZE1UUWNRVFFjOFpRZWNVRUFRTEN5QUhRUUowSVFnZ0pDQWRJQWdRZVJvZ0lpNEJBQ0VJSUFnRVFDQVdJQmRCS0d4cUtBSUVJUTBnQ0VILy93TnhJUXhCQUNFSUEwQWdEU0FJUVFOc2FpRUxJQXN0QUFBaEN5QUxRZjhCY1NFTElCMGdDMEVDZEdvaEN5QUxLQUlBSVE4Z0hTQU5JQWhCQTJ4cUxRQUJRUUowYWlFS0FrQUNRQ0FQUlEwQUlBb29BZ0FoRHlBUFJRMEFEQUVMSUFwQkFEWUNBQ0FMUVFBMkFnQUxJQWhCQVdvaENDQUlJQXhKRFFBTEN5QVdJQmRCS0d4cVFRaHFJUXNnQ3l3QUFDRUlJQWdFUUNBV0lCZEJLR3hxUVFScUlReEJBQ0VKSUFjaERRTkFBa0FnRFVFQVNnUkFJQXdvQWdBaEQwRUFJUWRCQUNFSUEwQWdEeUFJUVFOc2FrRUNhaUVLSUFvdEFBQWhDaUFLUWY4QmNTRUtJQWtnQ2tZRVFDQWRJQWhCQW5ScUlRb2dDaWdDQUNFUUlDQWdCMm9oQ2lBUUJFQWdDa0VCT2dBQUlCUWdCMEVDZEdvaENpQUtRUUEyQWdBRklBcEJBRG9BQUNBQVFaUUdhaUFJUVFKMGFpRUtJQW9vQWdBaENpQVVJQWRCQW5ScUlSQWdFQ0FLTmdJQUN5QUhRUUZxSVFjTElBaEJBV29oQ0NBSUlBMUlEUUFMQlVFQUlRY0xJQllnRjBFb2JHcEJHR29nQ1dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ0NBQUlCUWdCeUFmSUFnZ0lCQTNJQWxCQVdvaENTQUxMUUFBSVFjZ0IwSC9BWEVoQnlBSklBZFBEUUFnR2lnQ0FDRU5EQUVMQ3lBVEtBSUFJUWtMSUFrRVFDQUFRY2dBYWlFSElBY29BZ0FoQnlBQVFkQUFhaUVJSUFnb0FnQWhDQ0FISUFoSEJFQkIweE5CeEJOQjhCbEI1eFFRQkFzTElDSXVBUUFoQnlBSEJFQWdGaUFYUVNoc2FpZ0NCQ0VOSUI1QkFVb2hEQ0FIUWYvL0EzRWhDQU5BSUFoQmYyb2hDU0FOSUFsQkEyeHFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dBRUdVQm1vZ0IwRUNkR29oQnlBSEtBSUFJU0FnRFNBSlFRTnNha0VCYWlFSElBY3RBQUFoQnlBSFFmOEJjU0VISUFCQmxBWnFJQWRCQW5ScUlRY2dCeWdDQUNFUElBd0VRRUVBSVFjRFFDQWdJQWRCQW5ScUlRc2dDeW9DQUNFdUlBOGdCMEVDZEdvaUVDb0NBQ0l2UXdBQUFBQmVJUW9nTGtNQUFBQUFYZ1JBSUFvRVFDQXVJVEFnTGlBdmt5RXVCU0F1SUMrU0lUQUxCU0FLQkVBZ0xpRXdJQzRnTDVJaExnVWdMaUF2a3lFd0N3c2dDeUF3T0FJQUlCQWdMamdDQUNBSFFRRnFJUWNnQnlBZlNBMEFDd3NnQ0VFQlNnUkFJQWtoQ0F3QkN3c0xJQm9vQWdBaEJ5QUhRUUJLQkVBZ0gwRUNkQ0VKUVFBaEJ3TkFJQ1FnQjBFQ2RHb2hDQ0FJS0FJQUlRMGdBRUdVQm1vZ0IwRUNkR29oQ0NBTkJFQWdDQ2dDQUNFSUlBaEJBQ0FKRUhvYUJTQUlLQUlBSVFnZ0FFSFlCMm9nQjBFQ2RHb2hEU0FOS0FJQUlRMGdBQ0FpSUFjZ0hpQUlJQTBRT0FzZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxJQWhCQUVvRVFFRUFJUWNEUUNBQVFaUUdhaUFIUVFKMGFpRUlJQWdvQWdBaENDQUNMUUFBSVFrZ0NVSC9BWEVoQ1NBSUlCNGdBQ0FKRURrZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxDd3NnQUJBaElBQkIxUXBxSVFJZ0Fpd0FBQ0VISUFjRVFDQUFRWmdJYWlFR0lBWWdLVFlDQUNBZUlBVnJJUVlnQUVINENtb2hCeUFISUFZMkFnQWdBRUdjQ0dvaEJpQUdRUUUyQWdBZ0FrRUFPZ0FBQlNBQVFmZ0thaUVISUFjb0FnQWhBaUFDQkVBZ0JDQURheUVJSUFJZ0NFZ0VRQ0FDSUFOcUlRTWdCaUFETmdJQUlBZEJBRFlDQUFVZ0FpQUlheUVDSUFjZ0FqWUNBQ0FHSUFRMkFnQWdCQ0VEQ3dzTElBQkI0QXBxSVFJZ0FpZ0NBQ0VDSUFCQjhBcHFJUVlnQmlnQ0FDRUhJQUJCbkFocUlnZ29BZ0FoQmdKQUFrQWdBaUFIUmdSQUlBWUVRQ0FBUWRNS2FpRUNJQUlzQUFBaEFpQUNRUVJ4SVFJZ0FnUkFJQUJCOUFwcUlRSWdBaWdDQUNFQ0lBQkJtQWhxSVFZZ0JpZ0NBQ0VISUFVZ0Eyc2hDU0FKSUFkcUlRa2dBaUFKU1NFSklBSWdCMGtoRFNBQ0lBZHJJUUpCQUNBQ0lBMGJJUUlnQWlBRGFpRUNJQUlnQlVvaEJ5QUZJQUlnQnhzaEFpQUpCRUFnQVNBQ05nSUFJQVlvQWdBaEFDQUFJQUpxSVFBZ0JpQUFOZ0lBUVFFTUJnc0xDeUFBUWZRS2FpRUNJQUlvQWdBaEFpQURJQjlySVFZZ0JpQUNhaUVHSUFCQm1BaHFJUUlnQWlBR05nSUFJQWhCQVRZQ0FBd0JCU0FBUVpnSWFpRUNJQVlOQVFzTUFRc2dCQ0FEYXlFRElBSW9BZ0FoQkNBRElBUnFJUU1nQWlBRE5nSUFDeUFUS0FJQUlRSWdBZ1JBSUFCQnlBQnFJUUlnQWlnQ0FDRUNJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBSWdBRWNFUUVIVEUwSEVFMEhrR2tIbkZCQUVDd3NnQVNBRk5nSUFRUUVMSVFBZ0hDUUdJQUFMcUFJQkJYOGdBRUhvQ21vaEJTQUZLQUlBSVFJQ1FDQUNRUUJJQkVCQkFDRUFCU0FDSUFGSUJFQWdBVUVZU2dSQUlBQkJHQkFzSVFJZ0FVRm9haUVCSUFBZ0FSQXNJUUFnQUVFWWRDRUFJQUFnQW1vaEFDQUFEd3NnQWtVRVFDQUFRZVFLYWlFQ0lBSkJBRFlDQUFzZ0FFSGtDbW9oQXdKQUFrQUNRQU5BSUFBUUxpRUNJQUpCZjBZTkFTQUZLQUlBSVFRZ0FpQUVkQ0VDSUFNb0FnQWhCaUFHSUFKcUlRSWdBeUFDTmdJQUlBVWdCRUVJYWlJQ05nSUFJQUlnQVVnTkFBd0NBQXNBQ3lBRlFYODJBZ0JCQUNFQURBUUxJQVJCZUVnRVFFRUFJUUFNQkFzTEN5QUFRZVFLYWlFRUlBUW9BZ0FoQTBFQklBRjBJUUFnQUVGL2FpRUFJQU1nQUhFaEFDQURJQUYySVFNZ0JDQUROZ0lBSUFJZ0FXc2hBU0FGSUFFMkFnQUxDeUFBQzQwQ0FBSkFJQUJCQUVnRWYwRUFCU0FBUVlDQUFVZ0VRQ0FBUVJCSUJFQWdBRUdBQ0dvaEFDQUFMQUFBSVFBTUF3c2dBRUdBQkVnRVFDQUFRUVYySVFBZ0FFR0FDR29oQUNBQUxBQUFJUUFnQUVFRmFpRUFCU0FBUVFwMklRQWdBRUdBQ0dvaEFDQUFMQUFBSVFBZ0FFRUthaUVBQ3d3Q0N5QUFRWUNBZ0FoSUJIOGdBRUdBZ0NCSUJIOGdBRUVQZGlFQUlBQkJnQWhxSVFBZ0FDd0FBQ0VBSUFCQkQyb0ZJQUJCRkhZaEFDQUFRWUFJYWlFQUlBQXNBQUFoQUNBQVFSUnFDd1VnQUVHQWdJQ0FBa2dFZnlBQVFSbDJJUUFnQUVHQUNHb2hBQ0FBTEFBQUlRQWdBRUVaYWdVZ0FFRWVkaUVBSUFCQmdBaHFJUUFnQUN3QUFDRUFJQUJCSG1vTEN3c2hBQXNnQUF1aUFRRURmeUFBUWRRS2FpRUNJQUlzQUFBaEFRSkFBa0FnQVEwQUlBQkIzQXBxSVFFZ0FTZ0NBQ0VCSUFFRVFFRi9JUU1GSUFBUUx5RUJJQUVFUUNBQ0xBQUFJUUVnQVEwQ1FhRVVRY1FUUWZZTFFiVVVFQVFGUVg4aEF3c0xEQUVMSUFGQmYycEJHSFJCR0hVaEFTQUNJQUU2QUFBZ0FFSHNDbW9oQVNBQktBSUFJUUlnQWtFQmFpRUNJQUVnQWpZQ0FDQUFFREFoQUNBQVFmOEJjU0VEQ3lBREM2d0NBUWQvSUFCQjNBcHFJUUlnQWlnQ0FDRUJBa0FnQVVVRVFDQUFRZGdLYWlFRUlBUW9BZ0FoQVNBQlFYOUdCRUFnQUVIUUNHb2hBU0FCS0FJQUlRRWdBVUYvYWlFQklBQkI0QXBxSVFNZ0F5QUJOZ0lBSUFBUU1TRUJJQUZGQkVBZ0FrRUJOZ0lBREFNTElBQkIwd3BxSVFFZ0FTd0FBQ0VCSUFGQkFYRWhBU0FCQkg4Z0JDZ0NBQVVnQUVFZ0VCVU1Bd3NoQVFzZ0FVRUJhaUVISUFRZ0J6WUNBQ0FBUWRRSWFpQUJhaUVESUFNc0FBQWhCaUFHUWY4QmNTRURJQVpCZjBjRVFDQUNRUUUyQWdBZ0FFSGdDbW9oQWlBQ0lBRTJBZ0FMSUFCQjBBaHFJUUVnQVNnQ0FDRUJJQWNnQVU0RVFDQUVRWDgyQWdBTElBQkIxQXBxSVFBZ0FDd0FBQ0VCSUFFRVFFSEZGRUhFRTBIb0MwSGFGQkFFQlNBQUlBWTZBQUFnQXlFRkN3c0xJQVVMVVFFRGZ5QUFRUlJxSVFNZ0F5Z0NBQ0VCSUFCQkhHb2hBaUFDS0FJQUlRSWdBU0FDU1FSL0lBRkJBV29oQUNBRElBQTJBZ0FnQVN3QUFBVWdBRUhVQUdvaEFDQUFRUUUyQWdCQkFBc2hBQ0FBQ3lBQkFYOGdBQkF5SVFFZ0FRUi9JQUFRTXdVZ0FFRWVFQlZCQUFzaEFDQUFDMkFCQVg4Z0FCQXdJUUVnQVVIL0FYRkJ6d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUFnQUVIL0FYRkIwd0JHSVFBRlFRQWhBQXNGUVFBaEFBc0ZRUUFoQUFzZ0FBdlpBd0VHZnlBQUVEQWhBUUovSUFGQi93RnhCSDhnQUVFZkVCVkJBQVVnQUJBd0lRRWdBRUhUQ21vaEFpQUNJQUU2QUFBZ0FCQWpJUVVnQUJBaklRSWdBQkFqR2lBQUVDTWhBU0FBUWN3SWFpRURJQU1nQVRZQ0FDQUFFQ01hSUFBUU1DRUJJQUZCL3dGeElRRWdBRUhRQ0dvaEF5QURJQUUyQWdBZ0FFSFVDR29oQkNBQUlBUWdBUkFpSVFFZ0FVVUVRQ0FBUVFvUUZVRUFEQUlMSUFCQjhBcHFJUVFnQkVGK05nSUFJQUlnQlhFaEFRSkFJQUZCZjBjRVFDQURLQUlBSVFFZ0FVRUFTZ1JBQTBBQ1FDQUJRWDlxSVFJZ0FFSFVDR29nQW1vaEJpQUdMQUFBSVFZZ0JrRi9SdzBBSUFGQkFVd05CQ0FDSVFFTUFRc0xJQVFnQWpZQ0FDQUFRZlFLYWlFQklBRWdCVFlDQUFzTEN5QUFRZFVLYWlFQklBRXNBQUFoQVNBQkJFQWdBeWdDQUNFRElBTkJBRW9FZjBFQUlRSkJBQ0VCQTBBZ0FFSFVDR29nQVdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ0lBUnFJUUlnQVVFQmFpRUJJQUVnQTBnTkFBc2dBa0ViYWdWQkd3c2hBU0FBUVNocUlRSWdBaWdDQUNFQ0lBRWdBMm9oQVNBQklBSnFJUUVnQUVFc2FpRURJQU1nQWpZQ0FDQUFRVEJxSVFJZ0FpQUJOZ0lBSUFCQk5Hb2hBU0FCSUFVMkFnQUxJQUJCMkFwcUlRQWdBRUVBTmdJQVFRRUxDeUVBSUFBTG93RUJCMzhnQUVIb0Ntb2hBeUFES0FJQUlRRUNRQ0FCUVJsSUJFQWdBRUhrQ21vaEJDQUJSUVJBSUFSQkFEWUNBQXNnQUVIVUNtb2hCU0FBUWR3S2FpRUdBMEFnQmlnQ0FDRUJJQUVFUUNBRkxBQUFJUUVnQVVVTkF3c2dBQkF1SVFJZ0FrRi9SZzBDSUFNb0FnQWhBU0FDSUFGMElRSWdCQ2dDQUNFSElBY2dBbW9oQWlBRUlBSTJBZ0FnQVVFSWFpRUNJQU1nQWpZQ0FDQUJRUkZJRFFBTEN3c0xyUVVCQ1g4Z0FCQTBJQUZCSUdvaEFpQUNLQUlBSVFVQ1FBSkFJQVZGSWdORkRRQWdBVUdrRUdvaEFpQUNLQUlBSVFJZ0FnMEFRWDhoQVF3QkN5QUJRUVJxSVFJZ0FpZ0NBQ0VDQWtBQ1FDQUNRUWhLQkVBZ0FVR2tFR29oQXlBREtBSUFJUU1nQXcwQkJTQUREUUVMREFFTElBQkI1QXBxSVFnZ0NDZ0NBQ0VKSUFrUU9pRUhJQUZCckJCcUlRSWdBaWdDQUNFQ0lBSkJBVW9FUUNBQlFhUVFhaWdDQUNFS1FRQWhBd05BSUFKQkFYWWhCU0FGSUFOcUlRUWdDaUFFUVFKMGFpRUdJQVlvQWdBaEJpQUdJQWRMSVFZZ0FpQUZheUVDSUFNZ0JDQUdHeUVESUFVZ0FpQUdHeUVDSUFKQkFVb05BQXNGUVFBaEF3c2dBVUVYYWlFQ0lBSXNBQUFoQWlBQ1JRUkFJQUZCcUJCcUlRSWdBaWdDQUNFQ0lBSWdBMEVDZEdvaEFpQUNLQUlBSVFNTElBRkJDR29oQVNBQktBSUFJUUVnQVNBRGFpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBQkI2QXBxSVFJZ0FpZ0NBQ0VBSUFBZ0FVZ0VmMEVBSVFCQmZ3VWdBQ0FCYXlFQUlBa2dBWFloQVNBSUlBRTJBZ0FnQXdzaEFTQUNJQUEyQWdBTUFRc2dBVUVYYWlFRElBTXNBQUFoQXlBREJFQkJnUlZCeEJOQjZneEJqQlVRQkFzQ1FDQUNRUUJLQkVBZ0FTZ0NDQ0VJSUFCQjVBcHFJUWxCQUNFQkEwQUNRQ0FJSUFGcUlRTWdBeXdBQUNFRUlBUkIvd0Z4SVFNZ0JFRi9Sd1JBSUFVZ0FVRUNkR29oQkNBRUtBSUFJUVlnQ1NnQ0FDRUVRUUVnQTNRaEJ5QUhRWDlxSVFjZ0JDQUhjU0VISUFZZ0IwWU5BUXNnQVVFQmFpRUJJQUVnQWtnTkFRd0RDd3NnQUVIb0Ntb2hBQ0FBS0FJQUlRSWdBaUFEU0FSQUlBQkJBRFlDQUVGL0lRRUZJQWdnQVdvaEJTQUVJQU4ySVFNZ0NTQUROZ0lBSUFVdEFBQWhBeUFEUWY4QmNTRURJQUlnQTJzaEFpQUFJQUkyQWdBTERBSUxDeUFBUVJVUUZTQUFRZWdLYWlFQUlBQkJBRFlDQUVGL0lRRUxJQUVMWGdFQ2Z5QUVJQU5ySVFRZ0FpQUJheUVDSUFSQmYwb2hCVUVBSUFScklRWWdCQ0FHSUFVYklRVWdBQ0FCYXlFQUlBVWdBR3doQUNBQUlBSnRJUUFnQkVFQVNDRUJRUUFnQUdzaEFpQUNJQUFnQVJzaEFDQUFJQU5xSVFBZ0FBdjdHZ0VjZnlNR0lSd2pCa0VRYWlRR0lCeEJCR29oQ1NBY0lSSWdBRUdBQTJvaENpQUtLQUlBSVEwZ0FFR0FBbW9nQkVFQmRHb2hDaUFLTGdFQUlRb2dDa0gvL3dOeElSa2dEU0FFUVJoc2FrRU5haUVhSUJvdEFBQWhEaUFPUWY4QmNTRU9JQUJCOEFCcUlSVWdGU2dDQUNFUUlCQWdEa0d3RUd4cUlRNGdEaWdDQUNFWUlBcEJBa1loRENBRElBeDBJUW9nRFNBRVFSaHNhaUVXSUJZb0FnQWhEaUFPSUFwSklSQWdEaUFLSUJBYklSQWdEU0FFUVJoc2FrRUVhaUVPSUE0b0FnQWhEaUFPSUFwSklSUWdEaUFLSUJRYklRb2dDaUFRYXlFS0lBMGdCRUVZYkdwQkNHb2hGQ0FVS0FJQUlRNGdDaUFPYmlFUUlBQkIwQUJxSVI0Z0hpZ0NBQ0VmSUFCQnhBQnFJUW9nQ2lnQ0FDRUtJQXBGSVE0Z0FFRUVhaUVUSUJNb0FnQWhDaUFRUVFKMElRWWdCa0VFYWlFSElBb2dCMndoQnlBT0JFQWpCaUVPSXdZZ0IwRVBha0Z3Y1dva0JnVWdBQ0FIRUR3aERpQVRLQUlBSVFvTElBNGdDaUFHRURzYUlBSkJBRW9pQmdSQUlBTkJBblFoRTBFQUlRb0RRQ0FGSUFwcUlRY2dCeXdBQUNFSElBZEZCRUFnQVNBS1FRSjBhaUVISUFjb0FnQWhCeUFIUVFBZ0V4QjZHZ3NnQ2tFQmFpRUtJQW9nQWtjTkFBc0xJQUpCQVVjaENnSkFJQW9nREhFRVFBSkFJQVlFUUVFQUlRb0RRQ0FGSUFwcUlRd2dEQ3dBQUNFTUlBeEZEUUlnQ2tFQmFpRUtJQW9nQWtnTkFBc0ZRUUFoQ2dzTElBb2dBa2NFUUNBUVFRQktJUkVnQUVIb0Ntb2hEQ0FZUVFCS0lROGdBRUhrQ21vaEV5QU5JQVJCR0d4cVFSUnFJUmtnRFNBRVFSaHNha0VRYWlFYlFRQWhDZ0pBQTBBQ1FBSkFBa0FDUUNBQ1FRRnJEZ0lCQUFJTElCRUVRQ0FLUlNFWFFRQWhCRUVBSVEwRFFDQVdLQUlBSVFVZ0ZDZ0NBQ0VHSUFZZ0JHd2hCaUFHSUFWcUlRVWdCVUVCY1NFR0lBa2dCallDQUNBRlFRRjFJUVVnRWlBRk5nSUFJQmNFUUNBVktBSUFJUVlnR2kwQUFDRUZJQVZCL3dGeElRY2dCaUFIUWJBUWJHb2hDeUFNS0FJQUlRVWdCVUVLU0FSQUlBQVFOQXNnRXlnQ0FDRUlJQWhCL3dkeElRVWdCaUFIUWJBUWJHcEJKR29nQlVFQmRHb2hCU0FGTGdFQUlRVWdCVUYvU2dSQUlBWWdCMEd3RUd4cVFRaHFJUXNnQ3lnQ0FDRUxJQXNnQldvaEN5QUxMUUFBSVFzZ0MwSC9BWEVoQ3lBSUlBdDJJUWdnRXlBSU5nSUFJQXdvQWdBaENDQUlJQXRySVFnZ0NFRUFTQ0VMUVFBZ0NDQUxHeUVJUVg4Z0JTQUxHeUVGSUF3Z0NEWUNBQVVnQUNBTEVEVWhCUXNnQmlBSFFiQVFiR3BCRjJvaENDQUlMQUFBSVFnZ0NBUkFJQVlnQjBHd0VHeHFRYWdRYWlFR0lBWW9BZ0FoQmlBR0lBVkJBblJxSVFVZ0JTZ0NBQ0VGQ3lBRlFYOUdEUWNnR3lnQ0FDRUdJQVlnQlVFQ2RHb2hCU0FGS0FJQUlRVWdEaWdDQUNFR0lBWWdEVUVDZEdvaEJpQUdJQVUyQWdBTElBUWdFRWdoQlNBRklBOXhCRUJCQUNFRkEwQWdGQ2dDQUNFR0lBNG9BZ0FoQnlBSElBMUJBblJxSVFjZ0J5Z0NBQ0VISUFjZ0JXb2hCeUFITFFBQUlRY2dCMEgvQVhFaEJ5QVpLQUlBSVFnZ0NDQUhRUVIwYWlBS1FRRjBhaUVISUFjdUFRQWhCeUFIUVg5S0JFQWdGU2dDQUNFSUlBZ2dCMEd3RUd4cUlRY2dBQ0FISUFGQkFpQUpJQklnQXlBR0VEMGhCaUFHUlEwSkJTQVdLQUlBSVFjZ0JpQUViQ0VJSUFnZ0Jtb2hCaUFHSUFkcUlRWWdCa0VCY1NFSElBa2dCellDQUNBR1FRRjFJUVlnRWlBR05nSUFDeUFGUVFGcUlRVWdCRUVCYWlFRUlBVWdHRWdoQmlBRUlCQklJUWNnQnlBR2NRMEFDd3NnRFVFQmFpRU5JQVFnRUVnTkFBc0xEQUlMSUJFRVFDQUtSU0VYUVFBaERVRUFJUVFEUUNBV0tBSUFJUVVnRkNnQ0FDRUdJQVlnQkd3aEJpQUdJQVZxSVFVZ0NVRUFOZ0lBSUJJZ0JUWUNBQ0FYQkVBZ0ZTZ0NBQ0VHSUJvdEFBQWhCU0FGUWY4QmNTRUhJQVlnQjBHd0VHeHFJUXNnRENnQ0FDRUZJQVZCQ2tnRVFDQUFFRFFMSUJNb0FnQWhDQ0FJUWY4SGNTRUZJQVlnQjBHd0VHeHFRU1JxSUFWQkFYUnFJUVVnQlM0QkFDRUZJQVZCZjBvRVFDQUdJQWRCc0JCc2FrRUlhaUVMSUFzb0FnQWhDeUFMSUFWcUlRc2dDeTBBQUNFTElBdEIvd0Z4SVFzZ0NDQUxkaUVJSUJNZ0NEWUNBQ0FNS0FJQUlRZ2dDQ0FMYXlFSUlBaEJBRWdoQzBFQUlBZ2dDeHNoQ0VGL0lBVWdDeHNoQlNBTUlBZzJBZ0FGSUFBZ0N4QTFJUVVMSUFZZ0IwR3dFR3hxUVJkcUlRZ2dDQ3dBQUNFSUlBZ0VRQ0FHSUFkQnNCQnNha0dvRUdvaEJpQUdLQUlBSVFZZ0JpQUZRUUowYWlFRklBVW9BZ0FoQlFzZ0JVRi9SZzBHSUJzb0FnQWhCaUFHSUFWQkFuUnFJUVVnQlNnQ0FDRUZJQTRvQWdBaEJpQUdJQTFCQW5ScUlRWWdCaUFGTmdJQUN5QUVJQkJJSVFVZ0JTQVBjUVJBUVFBaEJRTkFJQlFvQWdBaEJpQU9LQUlBSVFjZ0J5QU5RUUowYWlFSElBY29BZ0FoQnlBSElBVnFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dHU2dDQUNFSUlBZ2dCMEVFZEdvZ0NrRUJkR29oQnlBSExnRUFJUWNnQjBGL1NnUkFJQlVvQWdBaENDQUlJQWRCc0JCc2FpRUhJQUFnQnlBQlFRRWdDU0FTSUFNZ0JoQTlJUVlnQmtVTkNBVWdGaWdDQUNFSElBWWdCR3doQ0NBSUlBWnFJUVlnQmlBSGFpRUdJQWxCQURZQ0FDQVNJQVkyQWdBTElBVkJBV29oQlNBRVFRRnFJUVFnQlNBWVNDRUdJQVFnRUVnaEJ5QUhJQVp4RFFBTEN5QU5RUUZxSVEwZ0JDQVFTQTBBQ3dzTUFRc2dFUVJBSUFwRklSZEJBQ0VOUVFBaEJBTkFJQllvQWdBaEJTQVVLQUlBSVFZZ0JpQUViQ0VHSUFZZ0JXb2hCU0FGSUFVZ0FtMGlCU0FDYkdzaEJpQUpJQVkyQWdBZ0VpQUZOZ0lBSUJjRVFDQVZLQUlBSVFZZ0dpMEFBQ0VGSUFWQi93RnhJUWNnQmlBSFFiQVFiR29oQ3lBTUtBSUFJUVVnQlVFS1NBUkFJQUFRTkFzZ0V5Z0NBQ0VJSUFoQi93ZHhJUVVnQmlBSFFiQVFiR3BCSkdvZ0JVRUJkR29oQlNBRkxnRUFJUVVnQlVGL1NnUkFJQVlnQjBHd0VHeHFRUWhxSVFzZ0N5Z0NBQ0VMSUFzZ0JXb2hDeUFMTFFBQUlRc2dDMEgvQVhFaEN5QUlJQXQySVFnZ0V5QUlOZ0lBSUF3b0FnQWhDQ0FJSUF0cklRZ2dDRUVBU0NFTFFRQWdDQ0FMR3lFSVFYOGdCU0FMR3lFRklBd2dDRFlDQUFVZ0FDQUxFRFVoQlFzZ0JpQUhRYkFRYkdwQkYyb2hDQ0FJTEFBQUlRZ2dDQVJBSUFZZ0IwR3dFR3hxUWFnUWFpRUdJQVlvQWdBaEJpQUdJQVZCQW5ScUlRVWdCU2dDQUNFRkN5QUZRWDlHRFFVZ0d5Z0NBQ0VHSUFZZ0JVRUNkR29oQlNBRktBSUFJUVVnRGlnQ0FDRUdJQVlnRFVFQ2RHb2hCaUFHSUFVMkFnQUxJQVFnRUVnaEJTQUZJQTl4QkVCQkFDRUZBMEFnRkNnQ0FDRUdJQTRvQWdBaEJ5QUhJQTFCQW5ScUlRY2dCeWdDQUNFSElBY2dCV29oQnlBSExRQUFJUWNnQjBIL0FYRWhCeUFaS0FJQUlRZ2dDQ0FIUVFSMGFpQUtRUUYwYWlFSElBY3VBUUFoQnlBSFFYOUtCRUFnRlNnQ0FDRUlJQWdnQjBHd0VHeHFJUWNnQUNBSElBRWdBaUFKSUJJZ0F5QUdFRDBoQmlBR1JRMEhCU0FXS0FJQUlRY2dCaUFFYkNFSUlBZ2dCbW9oQmlBR0lBZHFJUVlnQmlBR0lBSnRJZ1lnQW14cklRY2dDU0FITmdJQUlCSWdCallDQUFzZ0JVRUJhaUVGSUFSQkFXb2hCQ0FGSUJoSUlRWWdCQ0FRU0NFSElBY2dCbkVOQUFzTElBMUJBV29oRFNBRUlCQklEUUFMQ3dzZ0NrRUJhaUVLSUFwQkNFa05BQXNMQ3dVZ0VFRUFTaUViSUFKQkFVZ2hDQ0FZUVFCS0lRc2dBRUhvQ21vaEV5QUFRZVFLYWlFSElBMGdCRUVZYkdwQkVHb2hGeUFOSUFSQkdHeHFRUlJxSVNCQkFDRUtBMEFnR3dSQUlBcEJBRWNnQ0hJaElVRUFJUTFCQUNFREEwQWdJVVVFUUVFQUlSSURRQ0FGSUJKcUlRUWdCQ3dBQUNFRUlBUkZCRUFnRlNnQ0FDRUpJQm90QUFBaEJDQUVRZjhCY1NFTUlBa2dERUd3RUd4cUlROGdFeWdDQUNFRUlBUkJDa2dFUUNBQUVEUUxJQWNvQWdBaEVTQVJRZjhIY1NFRUlBa2dERUd3RUd4cVFTUnFJQVJCQVhScUlRUWdCQzRCQUNFRUlBUkJmMG9FUUNBSklBeEJzQkJzYWtFSWFpRVBJQThvQWdBaER5QVBJQVJxSVE4Z0R5MEFBQ0VQSUE5Qi93RnhJUThnRVNBUGRpRVJJQWNnRVRZQ0FDQVRLQUlBSVJFZ0VTQVBheUVSSUJGQkFFZ2hEMEVBSUJFZ0R4c2hFVUYvSUFRZ0R4c2hCQ0FUSUJFMkFnQUZJQUFnRHhBMUlRUUxJQWtnREVHd0VHeHFRUmRxSVJFZ0VTd0FBQ0VSSUJFRVFDQUpJQXhCc0JCc2FrR29FR29oQ1NBSktBSUFJUWtnQ1NBRVFRSjBhaUVFSUFRb0FnQWhCQXNnQkVGL1JnMEhJQmNvQWdBaENTQUpJQVJCQW5ScUlRUWdCQ2dDQUNFRUlBNGdFa0VDZEdvaENTQUpLQUlBSVFrZ0NTQU5RUUowYWlFSklBa2dCRFlDQUFzZ0VrRUJhaUVTSUJJZ0FrZ05BQXNMSUFNZ0VFZ2hCQ0FFSUF0eEJFQkJBQ0VTQTBBZ0JnUkFRUUFoQkFOQUlBVWdCR29oQ1NBSkxBQUFJUWtnQ1VVRVFDQU9JQVJCQW5ScUlRa2dDU2dDQUNFSklBa2dEVUVDZEdvaENTQUpLQUlBSVFrZ0NTQVNhaUVKSUFrdEFBQWhDU0FKUWY4QmNTRUpJQ0FvQWdBaERDQU1JQWxCQkhScUlBcEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FCSUFSQkFuUnFJUXdnRENnQ0FDRVJJQllvQWdBaER5QVVLQUlBSVF3Z0RDQURiQ0VkSUIwZ0Qyb2hEeUFWS0FJQUlSMGdIU0FKUWJBUWJHb2hDU0FBSUFrZ0VTQVBJQXdnR1JBK0lRa2dDVVVOQ2dzTElBUkJBV29oQkNBRUlBSklEUUFMQ3lBU1FRRnFJUklnQTBFQmFpRURJQklnR0VnaEJDQURJQkJJSVFrZ0NTQUVjUTBBQ3dzZ0RVRUJhaUVOSUFNZ0VFZ05BQXNMSUFwQkFXb2hDaUFLUVFoSkRRQUxDd3NnSGlBZk5nSUFJQndrQmd2UEF3SUlmd0o5SUFOQkFYVWhDU0FCUVFScUlRTWdBeWdDQUNFRElBTWdBa0VEYkdwQkFtb2hBaUFDTFFBQUlRSWdBa0gvQVhFaEFpQUJRUWxxSUFKcUlRRWdBUzBBQUNFQklBRkIvd0Z4SVFjZ0FFSDRBR29nQjBFQmRHb2hBU0FCTGdFQUlRRWdBUVJBSUFCQitBRnFJUUFnQUNnQ0FDRUlJQVV1QVFBaEFTQUlJQWRCdkF4c2FrRzBER29oQ3lBTExRQUFJUUFnQUVIL0FYRWhBQ0FBSUFGc0lRRWdDQ0FIUWJ3TWJHcEJ1QXhxSVF3Z0RDZ0NBQ0VDSUFKQkFVb0VRRUVBSVFCQkFTRUtBMEFnQ0NBSFFid01iR3BCeGdacUlBcHFJUU1nQXkwQUFDRURJQU5CL3dGeElRMGdCU0FOUVFGMGFpRURJQU11QVFBaEJpQUdRWDlLQkVBZ0N5MEFBQ0VESUFOQi93RnhJUU1nQXlBR2JDRURJQWdnQjBHOERHeHFRZElDYWlBTlFRRjBhaUVHSUFZdkFRQWhCaUFHUWYvL0EzRWhCaUFBSUFaSEJFQWdCQ0FBSUFFZ0JpQURJQWtRUWlBR0lRQWdEQ2dDQUNFQ0N5QURJUUVMSUFwQkFXb2hBeUFESUFKSUJFQWdBeUVLREFFTEN3VkJBQ0VBQ3lBQUlBbElCRUFnQVVFQ2RFR2dDR29xQWdBaER3TkFJQVFnQUVFQ2RHb2hBU0FCS2dJQUlRNGdEeUFPbENFT0lBRWdEamdDQUNBQVFRRnFJUUFnQUNBSlJ3MEFDd3NGSUFCQkZSQVZDd3VGR2dJVmZ3cDlJd1loRmlBQlFRRjFJUThnQVVFQ2RTRU5JQUZCQTNVaERpQUNRZEFBYWlFVUlCUW9BZ0FoRnlBQ1FjUUFhaUVJSUFnb0FnQWhDQ0FJUlNFSUlBOUJBblFoQlNBSUJFQWpCaUVNSXdZZ0JVRVBha0Z3Y1dva0JnVWdBaUFGRUR3aERBc2dBa0dnQ0dvZ0EwRUNkR29oQ0NBSUtBSUFJUWdnRDBGK2FpRUdJQXdnQmtFQ2RHb2hCaUFBSUE5QkFuUnFJUlVnRHdSL0lBVkJjR29oQlNBRlFRUjJJUWNnQjBFRGRDRUVJQVVnQkdzaEJTQU1JQVZxSVFRZ0IwRUJkQ0VGSUFWQkFtb2hDeUFHSVFjZ0FDRUdJQWdoQlFOQUlBWXFBZ0FoR1NBRktnSUFJUm9nR1NBYWxDRVpJQVpCQ0dvaENpQUtLZ0lBSVJvZ0JVRUVhaUVKSUFrcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha3lFWklBZEJCR29oRUNBUUlCazRBZ0FnQmlvQ0FDRVpJQWtxQWdBaEdpQVpJQnFVSVJrZ0Npb0NBQ0VhSUFVcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha2lFWklBY2dHVGdDQUNBSFFYaHFJUWNnQlVFSWFpRUZJQVpCRUdvaEJpQUdJQlZIRFFBTElBUWhCaUFJSUF0QkFuUnFCU0FJQ3lFSElBWWdERThFUUNBUFFYMXFJUVFnQmlFRklBQWdCRUVDZEdvaEJDQUhJUVlEUUNBRVFRaHFJUWNnQnlvQ0FDRVpJQVlxQWdBaEdpQVpJQnFVSVJrZ0JDb0NBQ0VhSUFaQkJHb2hDaUFLS2dJQUlSc2dHaUFibENFYUlCb2dHWk1oR1NBRlFRUnFJUWtnQ1NBWk9BSUFJQWNxQWdBaEdTQUtLZ0lBSVJvZ0dTQWFsQ0VaSUFRcUFnQWhHaUFHS2dJQUlSc2dHaUFibENFYUlCcU1JUm9nR2lBWmt5RVpJQVVnR1RnQ0FDQUZRWGhxSVFVZ0JrRUlhaUVHSUFSQmNHb2hCQ0FGSUF4UERRQUxDeUFCUVJCT0JFQWdEMEY0YWlFR0lBZ2dCa0VDZEdvaEJpQUFJQTFCQW5ScUlRY2dBQ0VFSUF3Z0RVRUNkR29oQ2lBTUlRVURRQ0FLUVFScUlRa2dDU29DQUNFWklBVkJCR29oQ1NBSktnSUFJUm9nR1NBYWt5RWJJQW9xQWdBaEhDQUZLZ0lBSVIwZ0hDQWRreUVjSUJrZ0dwSWhHU0FIUVFScUlRa2dDU0FaT0FJQUlBb3FBZ0FoR1NBRktnSUFJUm9nR1NBYWtpRVpJQWNnR1RnQ0FDQUdRUkJxSVFrZ0NTb0NBQ0VaSUJzZ0daUWhHU0FHUVJScUlRc2dDeW9DQUNFYUlCd2dHcFFoR2lBWklCcVRJUmtnQkVFRWFpRVFJQkFnR1RnQ0FDQUpLZ0lBSVJrZ0hDQVpsQ0VaSUFzcUFnQWhHaUFiSUJxVUlSb2dHU0Fha2lFWklBUWdHVGdDQUNBS1FReHFJUWtnQ1NvQ0FDRVpJQVZCREdvaENTQUpLZ0lBSVJvZ0dTQWFreUViSUFwQkNHb2hDU0FKS2dJQUlSd2dCVUVJYWlFTElBc3FBZ0FoSFNBY0lCMlRJUndnR1NBYWtpRVpJQWRCREdvaEVDQVFJQms0QWdBZ0NTb0NBQ0VaSUFzcUFnQWhHaUFaSUJxU0lSa2dCMEVJYWlFSklBa2dHVGdDQUNBR0tnSUFJUmtnR3lBWmxDRVpJQVpCQkdvaENTQUpLZ0lBSVJvZ0hDQWFsQ0VhSUJrZ0dwTWhHU0FFUVF4cUlRc2dDeUFaT0FJQUlBWXFBZ0FoR1NBY0lCbVVJUmtnQ1NvQ0FDRWFJQnNnR3BRaEdpQVpJQnFTSVJrZ0JFRUlhaUVKSUFrZ0dUZ0NBQ0FHUVdCcUlRWWdCMEVRYWlFSElBUkJFR29oQkNBS1FSQnFJUW9nQlVFUWFpRUZJQVlnQ0U4TkFBc0xJQUVRTFNFSElBRkJCSFVoQmlBUFFYOXFJUWxCQUNBT2F5RUZJQVlnQUNBSklBVWdDQkJESUFrZ0RXc2hCQ0FHSUFBZ0JDQUZJQWdRUXlBQlFRVjFJUXRCQUNBR2F5RUdJQXNnQUNBSklBWWdDRUVRRUVRZ0NTQU9heUVGSUFzZ0FDQUZJQVlnQ0VFUUVFUWdEa0VCZENFRklBa2dCV3NoQlNBTElBQWdCU0FHSUFoQkVCQkVJQTVCZld3aEJTQUpJQVZxSVFVZ0N5QUFJQVVnQmlBSVFSQVFSQ0FIUVh4cUlRWWdCa0VCZFNFT0lBZEJDVW9FUUVFQ0lRVURRQ0FGUVFKcUlRWWdBU0FHZFNFRUlBVkJBV29oQmtFQ0lBVjBJUW9nQ2tFQVNnUkFJQUVnQlVFRWFuVWhFRUVBSUFSQkFYVnJJUkpCQ0NBRmRDRVRRUUFoQlFOQUlBVWdCR3doRVNBSklCRnJJUkVnRUNBQUlCRWdFaUFJSUJNUVJDQUZRUUZxSVFVZ0JTQUtSdzBBQ3dzZ0JpQU9TQVJBSUFZaEJRd0JDd3NGUVFJaEJnc2dCMEY1YWlFT0lBWWdEa2dFUUFOQUlBWkJBbW9oQlNBQklBVjFJUkJCQ0NBR2RDRVNJQVpCQm1vaEJTQUJJQVYxSVFjZ0JrRUJhaUVFUVFJZ0JuUWhFeUFIUVFCS0JFQkJBQ0FRUVFGMWF5RVJJQkpCQW5RaEdDQUlJUVlnQ1NFRkEwQWdFeUFBSUFVZ0VTQUdJQklnRUJCRklBWWdHRUVDZEdvaEJpQUZRWGhxSVFVZ0IwRi9haUVLSUFkQkFVb0VRQ0FLSVFjTUFRc0xDeUFFSUE1SEJFQWdCQ0VHREFFTEN3c2dDeUFBSUFrZ0NDQUJFRVlnRFVGOGFpRUlJQXdnQ0VFQ2RHb2hCaUFQUVh4cUlRa2dCaUFNVHdSQUlBd2dDVUVDZEdvaENDQUNRY0FJYWlBRFFRSjBhaUVGSUFVb0FnQWhCUU5BSUFVdkFRQWhCeUFIUWYvL0EzRWhCeUFBSUFkQkFuUnFJUVFnQkNnQ0FDRUVJQWhCREdvaENpQUtJQVEyQWdBZ0IwRUJhaUVFSUFBZ0JFRUNkR29oQkNBRUtBSUFJUVFnQ0VFSWFpRUtJQW9nQkRZQ0FDQUhRUUpxSVFRZ0FDQUVRUUowYWlFRUlBUW9BZ0FoQkNBR1FReHFJUW9nQ2lBRU5nSUFJQWRCQTJvaEJ5QUFJQWRCQW5ScUlRY2dCeWdDQUNFSElBWkJDR29oQkNBRUlBYzJBZ0FnQlVFQ2FpRUhJQWN2QVFBaEJ5QUhRZi8vQTNFaEJ5QUFJQWRCQW5ScUlRUWdCQ2dDQUNFRUlBaEJCR29oQ2lBS0lBUTJBZ0FnQjBFQmFpRUVJQUFnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdDQ0FFTmdJQUlBZEJBbW9oQkNBQUlBUkJBblJxSVFRZ0JDZ0NBQ0VFSUFaQkJHb2hDaUFLSUFRMkFnQWdCMEVEYWlFSElBQWdCMEVDZEdvaEJ5QUhLQUlBSVFjZ0JpQUhOZ0lBSUFaQmNHb2hCaUFJUVhCcUlRZ2dCVUVFYWlFRklBWWdERThOQUFzTElBd2dEMEVDZEdvaUIwRndhaUVJSUFnZ0RFc0VRQ0FDUWJBSWFpQURRUUowYWlFR0lBd2hCU0FHS0FJQUlRUWdCeUVHQTBBZ0JTb0NBQ0VaSUFaQmVHb2hDaUFLS2dJQUlSb2dHU0Fha3lFYklBVkJCR29oQ3lBTEtnSUFJUndnQmtGOGFpRU5JQTBxQWdBaEhTQWNJQjJTSVI0Z0JFRUVhaUVPSUE0cUFnQWhJQ0FiSUNDVUlSOGdCQ29DQUNFaElCNGdJWlFoSWlBZklDS1NJUjhnSUNBZWxDRWVJQnNnSVpRaEd5QWVJQnVUSVJzZ0dTQWFraUVaSUJ3Z0haTWhHaUFaSUIrU0lSd2dCU0FjT0FJQUlCb2dHNUloSENBTElCdzRBZ0FnR1NBZmt5RVpJQW9nR1RnQ0FDQWJJQnFUSVJrZ0RTQVpPQUlBSUFWQkNHb2hDaUFLS2dJQUlSa2dDQ29DQUNFYUlCa2dHcE1oR3lBRlFReHFJUXNnQ3lvQ0FDRWNJQVpCZEdvaEJpQUdLZ0lBSVIwZ0hDQWRraUVlSUFSQkRHb2hEU0FOS2dJQUlTQWdHeUFnbENFZklBUkJDR29oRFNBTktnSUFJU0VnSGlBaGxDRWlJQjhnSXBJaEh5QWdJQjZVSVI0Z0d5QWhsQ0ViSUI0Z0c1TWhHeUFaSUJxU0lSa2dIQ0Fka3lFYUlCa2dINUloSENBS0lCdzRBZ0FnR2lBYmtpRWNJQXNnSERnQ0FDQVpJQitUSVJrZ0NDQVpPQUlBSUJzZ0dwTWhHU0FHSUJrNEFnQWdCRUVRYWlFS0lBVkJFR29oQlNBSVFYQnFJUVFnQlNBRVNRUkFJQWdoQmlBRUlRZ2dDaUVFREFFTEN3c2dCMEZnYWlFSUlBZ2dERThFUUNBQ1FhZ0lhaUFEUVFKMGFpRUNJQUlvQWdBaEFpQUNJQTlCQW5ScUlRSWdBVUY4YWlFQklBQWdBVUVDZEdvaEF5QUlJUUVnRlNFSUlBQWdDVUVDZEdvaEJTQUFJUVlnQnlFQUEwQWdBa0ZnYWlFSElBQkJlR29oQkNBRUtnSUFJUmtnQWtGOGFpRUVJQVFxQWdBaEdpQVpJQnFVSVIwZ0FFRjhhaUVFSUFRcUFnQWhHeUFDUVhocUlRUWdCQ29DQUNFY0lCc2dISlFoSGlBZElCNlRJUjBnR1NBY2xDRVpJQm1NSVJrZ0dpQWJsQ0VhSUJrZ0dwTWhHU0FHSUIwNEFnQWdIWXdoR2lBRlFReHFJUVFnQkNBYU9BSUFJQWdnR1RnQ0FDQURRUXhxSVFRZ0JDQVpPQUlBSUFCQmNHb2hCQ0FFS2dJQUlSa2dBa0YwYWlFRUlBUXFBZ0FoR2lBWklCcVVJUjBnQUVGMGFpRUVJQVFxQWdBaEd5QUNRWEJxSVFRZ0JDb0NBQ0VjSUJzZ0hKUWhIaUFkSUI2VElSMGdHU0FjbENFWklCbU1JUmtnR2lBYmxDRWFJQmtnR3BNaEdTQUdRUVJxSVFRZ0JDQWRPQUlBSUIyTUlSb2dCVUVJYWlFRUlBUWdHamdDQUNBSVFRUnFJUVFnQkNBWk9BSUFJQU5CQ0dvaEJDQUVJQms0QWdBZ0FFRm9haUVFSUFRcUFnQWhHU0FDUVd4cUlRUWdCQ29DQUNFYUlCa2dHcFFoSFNBQVFXeHFJUVFnQkNvQ0FDRWJJQUpCYUdvaEJDQUVLZ0lBSVJ3Z0d5QWNsQ0VlSUIwZ0hwTWhIU0FaSUJ5VUlSa2dHWXdoR1NBYUlCdVVJUm9nR1NBYWt5RVpJQVpCQ0dvaEJDQUVJQjA0QWdBZ0hZd2hHaUFGUVFScUlRUWdCQ0FhT0FJQUlBaEJDR29oQkNBRUlCazRBZ0FnQTBFRWFpRUVJQVFnR1RnQ0FDQUJLZ0lBSVJrZ0FrRmthaUVDSUFJcUFnQWhHaUFaSUJxVUlSMGdBRUZrYWlFQUlBQXFBZ0FoR3lBSEtnSUFJUndnR3lBY2xDRWVJQjBnSHBNaEhTQVpJQnlVSVJrZ0dZd2hHU0FhSUJ1VUlSb2dHU0Fha3lFWklBWkJER29oQUNBQUlCMDRBZ0FnSFl3aEdpQUZJQm80QWdBZ0NFRU1haUVBSUFBZ0dUZ0NBQ0FESUJrNEFnQWdCa0VRYWlFR0lBaEJFR29oQ0NBRlFYQnFJUVVnQTBGd2FpRURJQUZCWUdvaEFpQUNJQXhQQkVBZ0FTRUFJQUloQVNBSElRSU1BUXNMQ3lBVUlCYzJBZ0FnRmlRR0M4VUJBUUYvSUFCQkFYWWhBU0FCUWRXcTFhb0ZjU0VCSUFCQkFYUWhBQ0FBUWFyVnF0VjZjU0VBSUFFZ0FISWhBQ0FBUVFKMklRRWdBVUd6NXN5WkEzRWhBU0FBUVFKMElRQWdBRUhNbWJQbWZIRWhBQ0FCSUFCeUlRQWdBRUVFZGlFQklBRkJqNTY4K0FCeElRRWdBRUVFZENFQUlBQkI4T0hEaDM5eElRQWdBU0FBY2lFQUlBQkJDSFloQVNBQlFmK0IvQWR4SVFFZ0FFRUlkQ0VBSUFCQmdQNkRlSEVoQUNBQklBQnlJUUFnQUVFUWRpRUJJQUJCRUhRaEFDQUJJQUJ5SVFBZ0FBdEJBUU4vSUFGQkFFb0VRQ0FBSUFGQkFuUnFJUVFEUUNBQUlBTkJBblJxSVFVZ0JTQUVOZ0lBSUFRZ0Ftb2hCQ0FEUVFGcUlRTWdBeUFCUncwQUN3c2dBQXRyQVFOL0lBRkJBMm9oQVNBQlFYeHhJUUVnQUVIRUFHb2hBaUFDS0FJQUlRSWdBZ1IvSUFCQjBBQnFJUU1nQXlnQ0FDRUVJQVFnQVdzaEFTQUFRY3dBYWlFQUlBQW9BZ0FoQUNBQklBQklCSDlCQUFVZ0F5QUJOZ0lBSUFJZ0FXb0xCU0FCRUY0TElRQWdBQXZhQmdJUGZ3SjlJQUZCRldvaERDQU1MQUFBSVF3Q2Z5QU1CSDhnQlNnQ0FDRUpJQVFvQWdBaENnSkFJQWRCQUVvRWZ5QUFRZWdLYWlFT0lBQkI1QXBxSVJBZ0FVRUlhaUVUSUFGQkYyb2hGQ0FCUWF3UWFpRVZJQVlnQTJ3aEVTQUJRUlpxSVJZZ0FVRWNhaUVTSUFjaERDQUtJUVlnQVNnQ0FDRUtJQWtoQndKQUFrQURRQUpBSUE0b0FnQWhDU0FKUVFwSUJFQWdBQkEwQ3lBUUtBSUFJUXNnQzBIL0IzRWhDU0FCUVNScUlBbEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FUS0FJQUlRZ2dDQ0FKYWlFSUlBZ3RBQUFoQ0NBSVFmOEJjU0VJSUFzZ0NIWWhDeUFRSUFzMkFnQWdEaWdDQUNFTElBc2dDR3NoQ3lBTFFRQklJUWhCQUNBTElBZ2JJUTFCZnlBSklBZ2JJUXNnRGlBTk5nSUFCU0FBSUFFUU5TRUxDeUFVTEFBQUlRa2dDUVJBSUJVb0FnQWhDU0FMSUFsT0RRTUxJQXRCQUVnTkFDQUhJQU5zSVFrZ0NpQUphaUVJSUFnZ0Jtb2hDQ0FJSUJGS0lRZ2dFU0FKYXlFSklBa2dCbW9oQ1NBSklBb2dDQnNoQ1NBQktBSUFJUW9nQ2lBTGJDRUxJQllzQUFBaENDQUpRUUJLSVFvZ0NBUkFJQW9FUUNBU0tBSUFJUTFEQUFBQUFDRVhRUUFoQ2dOQUlBb2dDMm9oQ0NBTklBaEJBblJxSVFnZ0NDb0NBQ0VZSUJjZ0dKSWhGeUFDSUFaQkFuUnFJUWdnQ0NnQ0FDRUlJQWhGSVE4Z0NDQUhRUUowYWlFSUlBOUZCRUFnQ0NvQ0FDRVlJQmNnR0pJaEdDQUlJQmc0QWdBTElBWkJBV29oQmlBR0lBTkdJUWdnQnlBSWFpRUhRUUFnQmlBSUd5RUdJQXBCQVdvaENpQUtJQWxIRFFBTEN3VWdDZ1JBUVFBaENnTkFJQUlnQmtFQ2RHb2hDQ0FJS0FJQUlRZ2dDQVJBSUJJb0FnQWhEU0FLSUF0cUlROGdEU0FQUVFKMGFpRU5JQTBxQWdBaEZ5QVhRd0FBQUFDU0lSY2dDQ0FIUVFKMGFpRUlJQWdxQWdBaEdDQVlJQmVTSVJjZ0NDQVhPQUlBQ3lBR1FRRnFJUVlnQmlBRFJpRUlJQWNnQ0dvaEIwRUFJQVlnQ0JzaEJpQUtRUUZxSVFvZ0NpQUpSdzBBQ3dzTElBd2dDV3NoRENBTVFRQk1EUVVnQ1NFS0RBRUxDd3dCQzBHbkZVSEVFMEdnRGtITEZSQUVDeUFBUWRRS2FpRUJJQUVzQUFBaEFTQUJSUVJBSUFCQjNBcHFJUUVnQVNnQ0FDRUJRUUFnQVEwRUdnc2dBRUVWRUJWQkFBd0RCU0FKSVFjZ0Nnc2hCZ3NnQkNBR05nSUFJQVVnQnpZQ0FFRUJCU0FBUVJVUUZVRUFDd3NoQUNBQUMrQUJBUUovQWtBZ0JRUkFJQVJCQUVvRVFFRUFJUVVEUUNBQ0lBTkJBblJxSVFZZ0JDQUZheUVISUFBZ0FTQUdJQWNRUUNFR0lBWkZCRUJCQUNFQURBUUxJQUVvQWdBaEJpQUdJQVZxSVFVZ0JpQURhaUVESUFVZ0JFZ05BQXRCQVNFQUJVRUJJUUFMQlNBQktBSUFJUVVnQkNBRmJTRUZJQUlnQTBFQ2RHb2hCaUFGUVFCS0JFQWdCQ0FEYXlFRFFRQWhBZ05BSUFZZ0FrRUNkR29oQkNBRElBSnJJUWNnQUNBQklBUWdCeUFGRUQ4aEJDQUVSU0VFSUFRRVFFRUFJUUFNQkFzZ0FrRUJhaUVDSUFJZ0JVZ05BQXRCQVNFQUJVRUJJUUFMQ3dzZ0FBdStBUUlEZndOOUlBQWdBUkJCSVFVZ0JVRUFTQVJBUVFBaEFBVWdBU2dDQUNFQUlBQWdBMGdoQmlBQUlBTWdCaHNoQXlBQUlBVnNJUVVnQTBFQVNnUkFJQUVvQWh3aEJpQUJMQUFXUlNFSFFRQWhBQU5BSUFBZ0JXb2hBU0FHSUFGQkFuUnFJUUVnQVNvQ0FDRUlJQWtnQ0pJaENDQUFJQVJzSVFFZ0FpQUJRUUowYWlFQklBRXFBZ0FoQ2lBS0lBaVNJUW9nQVNBS09BSUFJQWtnQ0NBSEd5RUpJQUJCQVdvaEFDQUFJQU5JRFFBTFFRRWhBQVZCQVNFQUN3c2dBQXZGQWdJRGZ3SjlJQUFnQVJCQklRVUNRQ0FGUVFCSUJFQkJBQ0VBQlNBQktBSUFJUUFnQUNBRFNDRUVJQUFnQXlBRUd5RURJQUFnQld3aEJTQUJRUlpxSVFBZ0FDd0FBQ0VFSUFOQkFFb2hBQ0FFQkVBZ0FFVUVRRUVCSVFBTUF3c2dBU2dDSENFRUlBRkJER29oQmtFQUlRQURRQ0FBSUFWcUlRRWdCQ0FCUVFKMGFpRUJJQUVxQWdBaENDQUhJQWlTSVFjZ0FpQUFRUUowYWlFQklBRXFBZ0FoQ0NBSUlBZVNJUWdnQVNBSU9BSUFJQVlxQWdBaENDQUhJQWlTSVFjZ0FFRUJhaUVBSUFBZ0EwZ05BQXRCQVNFQUJTQUFSUVJBUVFFaEFBd0RDeUFCS0FJY0lRUkJBQ0VBQTBBZ0FDQUZhaUVCSUFRZ0FVRUNkR29oQVNBQktnSUFJUWNnQjBNQUFBQUFraUVISUFJZ0FFRUNkR29oQVNBQktnSUFJUWdnQ0NBSGtpRUhJQUVnQnpnQ0FDQUFRUUZxSVFBZ0FDQURTQTBBQzBFQklRQUxDd3NnQUF2TUFnRUZmeUFCUVJWcUlRSWdBaXdBQUNFQ0FrQWdBZ1JBSUFCQjZBcHFJUVVnQlNnQ0FDRUNJQUpCQ2tnRVFDQUFFRFFMSUFCQjVBcHFJUVFnQkNnQ0FDRUdJQVpCL3dkeElRSWdBVUVrYWlBQ1FRRjBhaUVDSUFJdUFRQWhBaUFDUVg5S0JFQWdBVUVJYWlFRElBTW9BZ0FoQXlBRElBSnFJUU1nQXkwQUFDRURJQU5CL3dGeElRTWdCaUFEZGlFR0lBUWdCallDQUNBRktBSUFJUVFnQkNBRGF5RUVJQVJCQUVnaEJrRUFJQVFnQmhzaEJFRi9JQUlnQmhzaEFpQUZJQVEyQWdBRklBQWdBUkExSVFJTElBRkJGMm9oQlNBRkxBQUFJUVVnQlFSQUlBRkJyQkJxSVFFZ0FTZ0NBQ0VCSUFJZ0FVNEVRRUh2RlVIRUUwSENEVUdGRmhBRUN3c2dBa0VBU0FSQUlBQkIxQXBxSVFFZ0FTd0FBQ0VCSUFGRkJFQWdBRUhjQ21vaEFTQUJLQUlBSVFFZ0FRMERDeUFBUVJVUUZRc0ZJQUJCRlJBVlFYOGhBZ3NMSUFJTHRBSUNCWDhDZlNBRUlBSnJJUVFnQXlBQmF5RUlJQVJCZjBvaEJrRUFJQVJySVFjZ0JDQUhJQVliSVFjZ0JDQUliU0VHSUFSQkgzVWhCQ0FFUVFGeUlRb2dCa0YvU2lFRVFRQWdCbXNoQ1NBR0lBa2dCQnNoQkNBRUlBaHNJUVFnQnlBRWF5RUhJQU1nQlVvaEJDQUZJQU1nQkJzaEJDQUVJQUZLQkVBZ0FrRUNkRUdnQ0dvaEF5QURLZ0lBSVFzZ0FDQUJRUUowYWlFRElBTXFBZ0FoRENBTElBeVVJUXNnQXlBTE9BSUFJQUZCQVdvaEFTQUJJQVJJQkVCQkFDRURBMEFnQXlBSGFpRURJQU1nQ0VnaEJVRUFJQW9nQlJzaENVRUFJQWdnQlJzaEJTQURJQVZySVFNZ0FpQUdhaUFKYWlFQ0lBSkJBblJCb0FocUlRVWdCU29DQUNFTElBQWdBVUVDZEdvaEJTQUZLZ0lBSVF3Z0N5QU1sQ0VMSUFVZ0N6Z0NBQ0FCUVFGcUlRRWdBU0FFU0EwQUN3c0xDNHNIQWdSL0JuMGdBU0FDUVFKMGFpRUJJQUJCQTNFaEFpQUNCRUJCbXhaQnhCTkI0QkpCcUJZUUJBc2dBRUVEU2dSQUlBQkJBblloQUNBQklBTkJBblJxSVFNRFFDQUJLZ0lBSVFzZ0F5b0NBQ0VNSUFzZ0RKTWhEU0FCUVh4cUlRSWdBaW9DQUNFS0lBTkJmR29oQlNBRktnSUFJUWtnQ2lBSmt5RU9JQXNnREpJaENTQUJJQWs0QWdBZ0JTb0NBQ0VKSUFvZ0NaSWhDU0FDSUFrNEFnQWdCQ29DQUNFSklBMGdDWlFoQ2lBRVFRUnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0F5QUpPQUlBSUFRcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQlNBSk9BSUFJQVJCSUdvaEJ5QUJRWGhxSVFnZ0NDb0NBQ0VMSUFOQmVHb2hCU0FGS2dJQUlRd2dDeUFNa3lFTklBRkJkR29oQWlBQ0tnSUFJUW9nQTBGMGFpRUdJQVlxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFnZ0NUZ0NBQ0FHS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBSEtnSUFJUWtnRFNBSmxDRUtJQVJCSkdvaEFpQUNLZ0lBSVFrZ0RpQUpsQ0VKSUFvZ0NaTWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBNGdDWlFoQ2lBQ0tnSUFJUWtnRFNBSmxDRUpJQW9nQ1pJaENTQUdJQWs0QWdBZ0JFRkFheUVISUFGQmNHb2hDQ0FJS2dJQUlRc2dBMEZ3YWlFRklBVXFBZ0FoRENBTElBeVRJUTBnQVVGc2FpRUNJQUlxQWdBaENpQURRV3hxSVFZZ0Jpb0NBQ0VKSUFvZ0NaTWhEaUFMSUF5U0lRa2dDQ0FKT0FJQUlBWXFBZ0FoQ1NBS0lBbVNJUWtnQWlBSk9BSUFJQWNxQWdBaENTQU5JQW1VSVFvZ0JFSEVBR29oQWlBQ0tnSUFJUWtnRGlBSmxDRUpJQW9nQ1pNaENTQUZJQWs0QWdBZ0J5b0NBQ0VKSUE0Z0NaUWhDaUFDS2dJQUlRa2dEU0FKbENFSklBb2dDWkloQ1NBR0lBazRBZ0FnQkVIZ0FHb2hCeUFCUVdocUlRZ2dDQ29DQUNFTElBTkJhR29oQlNBRktnSUFJUXdnQ3lBTWt5RU5JQUZCWkdvaEFpQUNLZ0lBSVFvZ0EwRmthaUVHSUFZcUFnQWhDU0FLSUFtVElRNGdDeUFNa2lFSklBZ2dDVGdDQUNBR0tnSUFJUWtnQ2lBSmtpRUpJQUlnQ1RnQ0FDQUhLZ0lBSVFrZ0RTQUpsQ0VLSUFSQjVBQnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0JTQUpPQUlBSUFjcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQmlBSk9BSUFJQVJCZ0FGcUlRUWdBVUZnYWlFQklBTkJZR29oQXlBQVFYOXFJUUlnQUVFQlNnUkFJQUloQUF3QkN3c0xDNEVIQWdOL0JYMGdBU0FDUVFKMGFpRUJJQUJCQTBvRVFDQUFRUUoySVFZZ0FTQURRUUowYWlFQ0lBRWhBQ0FHSVFFRFFDQUFLZ0lBSVFrZ0Fpb0NBQ0VLSUFrZ0NwTWhEQ0FBUVh4cUlRWWdCaW9DQUNFTklBSkJmR29oQXlBREtnSUFJUXNnRFNBTGt5RUxJQWtnQ3BJaENTQUFJQWs0QWdBZ0F5b0NBQ0VKSUEwZ0NaSWhDU0FHSUFrNEFnQWdCQ29DQUNFSklBd2dDWlFoQ1NBRVFRUnFJUVlnQmlvQ0FDRUtJQXNnQ3BRaENpQUpJQXFUSVFrZ0FpQUpPQUlBSUFRcUFnQWhDU0FMSUFtVUlRa2dCaW9DQUNFS0lBd2dDcFFoQ2lBSklBcVNJUWtnQXlBSk9BSUFJQVFnQlVFQ2RHb2hBeUFBUVhocUlRWWdCaW9DQUNFSklBSkJlR29oQnlBSEtnSUFJUW9nQ1NBS2t5RU1JQUJCZEdvaENDQUlLZ0lBSVEwZ0FrRjBhaUVFSUFRcUFnQWhDeUFOSUF1VElRc2dDU0FLa2lFSklBWWdDVGdDQUNBRUtnSUFJUWtnRFNBSmtpRUpJQWdnQ1RnQ0FDQURLZ0lBSVFrZ0RDQUpsQ0VKSUFOQkJHb2hCaUFHS2dJQUlRb2dDeUFLbENFS0lBa2dDcE1oQ1NBSElBazRBZ0FnQXlvQ0FDRUpJQXNnQ1pRaENTQUdLZ0lBSVFvZ0RDQUtsQ0VLSUFrZ0NwSWhDU0FFSUFrNEFnQWdBeUFGUVFKMGFpRURJQUJCY0dvaEJpQUdLZ0lBSVFrZ0FrRndhaUVISUFjcUFnQWhDaUFKSUFxVElRd2dBRUZzYWlFSUlBZ3FBZ0FoRFNBQ1FXeHFJUVFnQkNvQ0FDRUxJQTBnQzVNaEN5QUpJQXFTSVFrZ0JpQUpPQUlBSUFRcUFnQWhDU0FOSUFtU0lRa2dDQ0FKT0FJQUlBTXFBZ0FoQ1NBTUlBbVVJUWtnQTBFRWFpRUdJQVlxQWdBaENpQUxJQXFVSVFvZ0NTQUtreUVKSUFjZ0NUZ0NBQ0FES2dJQUlRa2dDeUFKbENFSklBWXFBZ0FoQ2lBTUlBcVVJUW9nQ1NBS2tpRUpJQVFnQ1RnQ0FDQURJQVZCQW5ScUlRTWdBRUZvYWlFR0lBWXFBZ0FoQ1NBQ1FXaHFJUWNnQnlvQ0FDRUtJQWtnQ3BNaERDQUFRV1JxSVFnZ0NDb0NBQ0VOSUFKQlpHb2hCQ0FFS2dJQUlRc2dEU0FMa3lFTElBa2dDcEloQ1NBR0lBazRBZ0FnQkNvQ0FDRUpJQTBnQ1pJaENTQUlJQWs0QWdBZ0F5b0NBQ0VKSUF3Z0NaUWhDU0FEUVFScUlRWWdCaW9DQUNFS0lBc2dDcFFoQ2lBSklBcVRJUWtnQnlBSk9BSUFJQU1xQWdBaENTQUxJQW1VSVFrZ0Jpb0NBQ0VLSUF3Z0NwUWhDaUFKSUFxU0lRa2dCQ0FKT0FJQUlBQkJZR29oQUNBQ1FXQnFJUUlnQXlBRlFRSjBhaUVFSUFGQmYyb2hBeUFCUVFGS0JFQWdBeUVCREFFTEN3c0w2UVlDQW44T2ZTQUVLZ0lBSVE4Z0JFRUVhaUVISUFjcUFnQWhFQ0FFSUFWQkFuUnFJUWNnQnlvQ0FDRVJJQVZCQVdvaEJ5QUVJQWRCQW5ScUlRY2dCeW9DQUNFU0lBVkJBWFFoQ0NBRUlBaEJBblJxSVFjZ0J5b0NBQ0VUSUFoQkFYSWhCeUFFSUFkQkFuUnFJUWNnQnlvQ0FDRVVJQVZCQTJ3aEJ5QUVJQWRCQW5ScUlRVWdCU29DQUNFVklBZEJBV29oQlNBRUlBVkJBblJxSVFRZ0JDb0NBQ0VXSUFFZ0FrRUNkR29oQVNBQVFRQktCRUJCQUNBR2F5RUdJQUVnQTBFQ2RHb2hBd05BSUFFcUFnQWhDeUFES2dJQUlRd2dDeUFNa3lFTklBRkJmR29oQWlBQ0tnSUFJUW9nQTBGOGFpRUVJQVFxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFFZ0NUZ0NBQ0FFS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBUElBMlVJUW9nRUNBT2xDRUpJQW9nQ1pNaENTQURJQWs0QWdBZ0R5QU9sQ0VLSUJBZ0RaUWhDU0FKSUFxU0lRa2dCQ0FKT0FJQUlBRkJlR29oQlNBRktnSUFJUXNnQTBGNGFpRUVJQVFxQWdBaERDQUxJQXlUSVEwZ0FVRjBhaUVDSUFJcUFnQWhDaUFEUVhScUlRY2dCeW9DQUNFSklBb2dDWk1oRGlBTElBeVNJUWtnQlNBSk9BSUFJQWNxQWdBaENTQUtJQW1TSVFrZ0FpQUpPQUlBSUJFZ0RaUWhDaUFTSUE2VUlRa2dDaUFKa3lFSklBUWdDVGdDQUNBUklBNlVJUW9nRWlBTmxDRUpJQWtnQ3BJaENTQUhJQWs0QWdBZ0FVRndhaUVGSUFVcUFnQWhDeUFEUVhCcUlRUWdCQ29DQUNFTUlBc2dESk1oRFNBQlFXeHFJUUlnQWlvQ0FDRUtJQU5CYkdvaEJ5QUhLZ0lBSVFrZ0NpQUpreUVPSUFzZ0RKSWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBb2dDWkloQ1NBQ0lBazRBZ0FnRXlBTmxDRUtJQlFnRHBRaENTQUtJQW1USVFrZ0JDQUpPQUlBSUJNZ0RwUWhDaUFVSUEyVUlRa2dDU0FLa2lFSklBY2dDVGdDQUNBQlFXaHFJUVVnQlNvQ0FDRUxJQU5CYUdvaEJDQUVLZ0lBSVF3Z0N5QU1reUVOSUFGQlpHb2hBaUFDS2dJQUlRb2dBMEZrYWlFSElBY3FBZ0FoQ1NBS0lBbVRJUTRnQ3lBTWtpRUpJQVVnQ1RnQ0FDQUhLZ0lBSVFrZ0NpQUpraUVKSUFJZ0NUZ0NBQ0FWSUEyVUlRb2dGaUFPbENFSklBb2dDWk1oQ1NBRUlBazRBZ0FnRlNBT2xDRUtJQllnRFpRaENTQUpJQXFTSVFrZ0J5QUpPQUlBSUFFZ0JrRUNkR29oQVNBRElBWkJBblJxSVFNZ0FFRi9haUVDSUFCQkFVb0VRQ0FDSVFBTUFRc0xDd3ZXQkFJQ2Z3ZDlJQVJCQTNVaEJDQURJQVJCQW5ScUlRTWdBeW9DQUNFTklBRWdBa0VDZEdvaEFTQUFRUVIwSVFCQkFDQUFheUVBSUFFZ0FFRUNkR29oQmlBQVFRQklCRUFnQVNFQUEwQWdBQ29DQUNFSElBQkJZR29oQVNBQktnSUFJUWdnQnlBSWt5RUxJQUJCZkdvaEFpQUNLZ0lBSVFrZ0FFRmNhaUVESUFNcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBQWdCemdDQUNBSklBcVNJUWNnQWlBSE9BSUFJQUVnQ3pnQ0FDQURJQXc0QWdBZ0FFRjRhaUVDSUFJcUFnQWhCeUFBUVZocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFYUnFJUVFnQkNvQ0FDRUtJQUJCVkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFDSUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQU1nQnpnQ0FDQU1JQW1USVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBUVZCcUlRSWdBaW9DQUNFSElBQkJjR29oQXlBREtnSUFJUWdnQnlBSWt5RUxJQUJCYkdvaEJDQUVLZ0lBSVFrZ0FFRk1haUVGSUFVcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBTWdCemdDQUNBSklBcVNJUWNnQkNBSE9BSUFJQUlnRERnQ0FDQUZJQXM0QWdBZ0FFRklhaUVDSUFJcUFnQWhCeUFBUVdocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFXUnFJUVFnQkNvQ0FDRUtJQUJCUkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFESUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQUlnQnpnQ0FDQUpJQXlUSVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBRUVjZ0FSQkhJQUJCUUdvaEFDQUFJQVpMRFFBTEN3dVhBZ0lFZndaOUlBQXFBZ0FoQlNBQVFYQnFJUUVnQVNvQ0FDRUlJQVVnQ0pNaEJpQUZJQWlTSVFVZ0FFRjRhaUVDSUFJcUFnQWhDQ0FBUVdocUlRTWdBeW9DQUNFSElBZ2dCNUloQ1NBSUlBZVRJUWdnQlNBSmtpRUhJQUFnQnpnQ0FDQUZJQW1USVFVZ0FpQUZPQUlBSUFCQmRHb2hBaUFDS2dJQUlRVWdBRUZrYWlFRUlBUXFBZ0FoQnlBRklBZVRJUWtnQmlBSmtpRUtJQUVnQ2pnQ0FDQUdJQW1USVFZZ0F5QUdPQUlBSUFCQmZHb2hBU0FCS2dJQUlRWWdBRUZzYWlFQUlBQXFBZ0FoQ1NBR0lBbVRJUW9nQmlBSmtpRUdJQVVnQjVJaEJTQUZJQWFTSVFjZ0FTQUhPQUlBSUFZZ0JaTWhCU0FDSUFVNEFnQWdDaUFJa3lFRklBQWdCVGdDQUNBSUlBcVNJUVVnQkNBRk9BSUFDMklCQW44Z0FVRUJkQ0VCSUFCQjVBQnFJUUlnQWlnQ0FDRUNJQUVnQWtZRVFDQUFRYmdJYWlFREJTQUFRZWdBYWlFQ0lBSW9BZ0FoQWlBQklBSkdCRUFnQUVHOENHb2hBd1ZCdnhaQnhCTkI2eGRCd1JZUUJBc0xJQU1vQWdBaEFDQUFDeFFBSUFCQmtoZEJCaEJrSVFBZ0FFVWhBQ0FBQzZvQkFRTi9JQUJCMkFwcUlRRWdBU2dDQUNFREFuOENRQ0FEUVg5SERRQWdBRUhUQ21vaEF3TkFBa0FnQUJBeElRSkJBQ0FDUlEwREdpQURMQUFBSVFJZ0FrRUJjU0VDSUFJTkFDQUJLQUlBSVFJZ0FrRi9SZzBCREFJTEN5QUFRU0FRRlVFQURBRUxJQUJCM0FwcUlRRWdBVUVBTmdJQUlBQkI2QXBxSVFFZ0FVRUFOZ0lBSUFCQjdBcHFJUUVnQVVFQU5nSUFJQUJCMUFwcUlRQWdBRUVBT2dBQVFRRUxJUUFnQUF0RkFRSi9JQUJCRkdvaEFpQUNLQUlBSVFNZ0F5QUJhaUVCSUFJZ0FUWUNBQ0FBUVJ4cUlRSWdBaWdDQUNFQ0lBRWdBazhFUUNBQVFkUUFhaUVBSUFCQkFUWUNBQXNMYWdFRWZ3TkFRUUFoQUNBQ1FSaDBJUUVEUUNBQlFRRjBJUU1nQVVFZmRTRUJJQUZCdDd1RUpuRWhBU0FCSUFOeklRRWdBRUVCYWlFQUlBQkJDRWNOQUFzZ0FrRUNkRUhRR1dvaEFDQUFJQUUyQWdBZ0FrRUJhaUVBSUFCQmdBSkhCRUFnQUNFQ0RBRUxDd3VUQVFFRGZ5QUJRUU5xSVFFZ0FVRjhjU0VCSUFCQkNHb2hBaUFDS0FJQUlRTWdBeUFCYWlFRElBSWdBellDQUNBQVFjUUFhaUVDSUFJb0FnQWhBaUFDQkVBZ0FFSE1BR29oQXlBREtBSUFJUVFnQkNBQmFpRUJJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBRWdBRW9FUUVFQUlRQUZJQUlnQkdvaEFDQURJQUUyQWdBTEJTQUJCSDhnQVJCZUJVRUFDeUVBQ3lBQUMwZ0JBWDhnQUVIRUFHb2hBeUFES0FJQUlRTWdBd1JBSUFKQkEyb2hBU0FCUVh4eElRRWdBRUhRQUdvaEFDQUFLQUlBSVFJZ0FpQUJhaUVCSUFBZ0FUWUNBQVVnQVJCZkN3dkdCUUVMZnlNR0lRMGpCa0dBQVdva0JpQU5JZ2RDQURjREFDQUhRZ0EzQXdnZ0IwSUFOd01RSUFkQ0FEY0RHQ0FIUWdBM0F5QWdCMElBTndNb0lBZENBRGNETUNBSFFnQTNBemdnQjBGQWEwSUFOd01BSUFkQ0FEY0RTQ0FIUWdBM0ExQWdCMElBTndOWUlBZENBRGNEWUNBSFFnQTNBMmdnQjBJQU53TndJQWRDQURjRGVBSkFJQUpCQUVvRVFBTkFJQUVnQm1vaEJDQUVMQUFBSVFRZ0JFRi9SdzBDSUFaQkFXb2hCaUFHSUFKSURRQUxDd3NDUUNBR0lBSkdCRUFnQUVHc0VHb2hBQ0FBS0FJQUlRQWdBQVJBUVpnWFFjUVRRWjBJUWE4WEVBUUZRUUVoQ3dzRklBRWdCbW9oQkNBRUxRQUFJUVVnQlVIL0FYRWhCU0FBUVFBZ0JrRUFJQVVnQXhCWElBUXNBQUFoQkNBRUJFQWdCRUgvQVhFaENrRUJJUVFEUUVFZ0lBUnJJUVZCQVNBRmRDRUZJQWNnQkVFQ2RHb2hDQ0FJSUFVMkFnQWdCRUVCYWlFRklBUWdDa2tFUUNBRklRUU1BUXNMQ3lBR1FRRnFJUW9nQ2lBQ1NBUkFRUUVoQlFKQUFrQUNRQUpBQTBBZ0FTQUthaUVKSUFrc0FBQWhCaUFHUVg5R0JFQWdCU0VHQlNBR1FmOEJjU0VJSUFaRkRRZ2dDQ0VFQTBBQ1FDQUhJQVJCQW5ScUlRWWdCaWdDQUNFTUlBd05BQ0FFUVg5cUlRWWdCRUVCVEEwS0lBWWhCQXdCQ3dzZ0JFRWdUdzBDSUFaQkFEWUNBQ0FNRURvaERpQUZRUUZxSVFZZ0FDQU9JQW9nQlNBSUlBTVFWeUFKTFFBQUlRZ2dDRUgvQVhFaEJTQUVJQVZIQkVBZ0NFSC9BWEZCSUU0TkJDQUVJQVZJQkVBRFFDQUhJQVZCQW5ScUlRZ2dDQ2dDQUNFSklBa05CMEVnSUFWcklRbEJBU0FKZENFSklBa2dER29oQ1NBSUlBazJBZ0FnQlVGL2FpRUZJQVVnQkVvTkFBc0xDd3NnQ2tFQmFpRUtJQW9nQWtnRVFDQUdJUVVNQVFWQkFTRUxEQWdMQUFBTEFBdEJ3UmRCeEJOQnRBaEJyeGNRQkF3Q0MwSFNGMEhFRTBHNUNFR3ZGeEFFREFFTFFlMFhRY1FUUWJzSVFhOFhFQVFMQlVFQklRc0xDd3NnRFNRR0lBc0x0UVlCRUg4Z0FFRVhhaUVLSUFvc0FBQWhCQ0FFQkVBZ0FFR3NFR29oQ0NBSUtBSUFJUU1nQTBFQVNnUkFJQUFvQWlBaEJpQUFRYVFRYWlnQ0FDRUZRUUFoQkFOQUlBWWdCRUVDZEdvaEF5QURLQUlBSVFNZ0F4QTZJUU1nQlNBRVFRSjBhaUVISUFjZ0F6WUNBQ0FFUVFGcUlRUWdDQ2dDQUNFRElBUWdBMGdOQUFzTEJTQUFRUVJxSVFjZ0J5Z0NBQ0VFSUFSQkFFb0VRQ0FBUVNCcUlRc2dBRUdrRUdvaERFRUFJUVFEUUNBQklBWnFJUVVnQlN3QUFDRUZJQUFnQlJCWUlRVWdCUVJBSUFzb0FnQWhCU0FGSUFaQkFuUnFJUVVnQlNnQ0FDRUZJQVVRT2lFTklBd29BZ0FoRGlBRVFRRnFJUVVnRGlBRVFRSjBhaUVFSUFRZ0RUWUNBQ0FGSVFRTElBWkJBV29oQmlBSEtBSUFJUVVnQmlBRlNBMEFDd1ZCQUNFRUN5QUFRYXdRYWlFR0lBWW9BZ0FoQlNBRUlBVkdCRUFnQmlFSUlBUWhBd1ZCL3hkQnhCTkIvZ2hCbGhnUUJBc0xJQUJCcEJCcUlRVWdCU2dDQUNFRUlBUWdBMEVFUVFJUVppQUZLQUlBSVFRZ0NDZ0NBQ0VESUFRZ0EwRUNkR29oQkNBRVFYODJBZ0FnQ2l3QUFDRURJQU5GSVFRZ0FFRUVhaUVHSUFZZ0NDQUVHeUVFSUFRb0FnQWhDd0pBSUF0QkFFb0VRQ0FBUVNCcUlSRWdBRUdvRUdvaERDQUFRUWhxSVJKQkFDRUVBMEFDUUNBRFFmOEJjUVIvSUFJZ0JFRUNkR29oQXlBREtBSUFCU0FFQ3lFRElBRWdBMm9zQUFBaERTQUFJQTBRV0NFRElBTUVRQ0FSS0FJQUlRTWdBeUFFUVFKMGFpRURJQU1vQWdBaEF5QURFRG9oRGlBSUtBSUFJUU1nQlNnQ0FDRVBJQU5CQVVvRVFFRUFJUVlEUUNBRFFRRjJJUWNnQnlBR2FpRVFJQThnRUVFQ2RHb2hDU0FKS0FJQUlRa2dDU0FPU3lFSklBTWdCMnNoQXlBR0lCQWdDUnNoQmlBSElBTWdDUnNoQXlBRFFRRktEUUFMQlVFQUlRWUxJQThnQmtFQ2RHb2hBeUFES0FJQUlRTWdBeUFPUncwQklBb3NBQUFoQXlBREJFQWdBaUFFUVFKMGFpRURJQU1vQWdBaEF5QU1LQUlBSVFjZ0J5QUdRUUowYWlFSElBY2dBellDQUNBU0tBSUFJUU1nQXlBR2FpRURJQU1nRFRvQUFBVWdEQ2dDQUNFRElBTWdCa0VDZEdvaEF5QURJQVEyQWdBTEN5QUVRUUZxSVFRZ0JDQUxUZzBESUFvc0FBQWhBd3dCQ3d0QnJSaEJ4Qk5CbkFsQmxoZ1FCQXNMQzdjQ0FRcC9JQUJCSkdvaEFTQUJRWDlCZ0JBUWVob2dBRUVYYWlFQklBRXNBQUFoQVNBQlJTRUVJQUJCckJCcUlRRWdBRUVFYWlFQ0lBSWdBU0FFR3lFQklBRW9BZ0FoQVNBQlFmLy9BVWdoQWlBQlFmLy9BU0FDR3lFR0lBRkJBRW9FUUNBQVFRaHFJUUVnQUVFZ2FpRUhJQUJCcEJCcUlRZ2dBU2dDQUNFSlFRQWhBZ05BSUFrZ0Ftb2hCU0FGTFFBQUlRRWdBVUgvQVhGQkMwZ0VRQ0FFQkg4Z0J5Z0NBQ0VCSUFFZ0FrRUNkR29oQVNBQktBSUFCU0FJS0FJQUlRRWdBU0FDUVFKMGFpRUJJQUVvQWdBaEFTQUJFRG9MSVFFZ0FVR0FDRWtFUUNBQ1FmLy9BM0VoQ2dOQUlBQkJKR29nQVVFQmRHb2hBeUFESUFvN0FRQWdCUzBBQUNFRElBTkIvd0Z4SVFOQkFTQURkQ0VESUFNZ0FXb2hBU0FCUVlBSVNRMEFDd3NMSUFKQkFXb2hBaUFDSUFaSURRQUxDd3RjQXdKL0FYMENmQ0FBUWYvLy93QnhJUUlnQUVFVmRpRUJJQUZCL3dkeElRRWdBRUVBU0NFQUlBSzRJUVFnQkpvaEJTQUZJQVFnQUJzaEJDQUV0aUVESUFPN0lRUWdBVUhzZVdvaEFDQUVJQUFRY1NFRUlBUzJJUU1nQXd2aUFRTUJmd0o5QTN3Z0FMSWhBeUFEdXlFRklBVVFkaUVGSUFXMklRTWdBYkloQkNBRElBU1ZJUU1nQTdzaEJTQUZFSFVoQlNBRm5DRUZJQVdxSVFJZ0FySWhBeUFEUXdBQWdEK1NJUU1nQTdzaEJpQUJ0eUVGSUFZZ0JSQjNJUVlnQnB3aEJpQUdxaUVCSUFFZ0FFd2hBU0FCSUFKcUlRRWdBYkloQXlBRFF3QUFnRCtTSVFRZ0JMc2hCaUFHSUFVUWR5RUdJQUMzSVFjZ0JpQUhaRVVFUUVIckdFSEVFMEcxQ1VHTEdSQUVDeUFEdXlFR0lBWWdCUkIzSVFVZ0Jad2hCU0FGcWlFQ0lBSWdBRW9FUUVHYUdVSEVFMEcyQ1VHTEdSQUVCU0FCRHd0QkFBcy9BUUYvSUFBdkFRQWhBQ0FCTHdFQUlRRWdBRUgvL3dOeElBRkIvLzhEY1VnaEFpQUFRZi8vQTNFZ0FVSC8vd054U2lFQVFYOGdBQ0FDR3lFQUlBQUxpZ0VCQjM4Z0FVRUFTZ1JBSUFBZ0FVRUJkR29oQ0VHQWdBUWhDVUYvSVFvRFFDQUFJQVJCQVhScUlRVWdCUzhCQUNFR0lBWWhCU0FLSUFWSUJFQWdDQzhCQUNFSElBWWdCMGdFUUNBQ0lBUTJBZ0FnQlNFS0N3c2dDU0FGU2dSQUlBZ3ZBUUFoQnlBR0lBZEtCRUFnQXlBRU5nSUFJQVVoQ1FzTElBUkJBV29oQkNBRUlBRkhEUUFMQ3d1bUFnRUhmeUFDUVFGMklRTWdBa0Y4Y1NFRUlBSkJBM1VoQ0NBRFFRSjBJUU1nQUNBREVFMGhCU0FBUWFBSWFpQUJRUUowYWlFR0lBWWdCVFlDQUNBQUlBTVFUU0VISUFCQnFBaHFJQUZCQW5ScUlRVWdCU0FITmdJQUlBQWdCQkJOSVFRZ0FFR3dDR29nQVVFQ2RHb2hCeUFISUFRMkFnQWdCaWdDQUNFR0FuOENRQ0FHUlEwQUlBVW9BZ0FoQlNBRlJTRUhJQVJGSVFrZ0NTQUhjZzBBSUFJZ0JpQUZJQVFRV2lBQUlBTVFUU0VESUFCQnVBaHFJQUZCQW5ScUlRUWdCQ0FETmdJQUlBTkZCRUFnQUVFREVCVkJBQXdDQ3lBQ0lBTVFXeUFJUVFGMElRTWdBQ0FERUUwaEF5QUFRY0FJYWlBQlFRSjBhaUVCSUFFZ0F6WUNBQ0FEQkg4Z0FpQURFRnhCQVFVZ0FFRURFQlZCQUFzTUFRc2dBRUVERUJWQkFBc2hBQ0FBQzI4QkFuOGdBRUVYYWlFR0lBWXNBQUFoQnlBQUtBSWdJUVlnQndSL0lBWWdBMEVDZEdvaEJpQUdJQUUyQWdBZ0JFSC9BWEVoQVNBQVFRaHFJUUFnQUNnQ0FDRUFJQUFnQTJvaEFDQUFJQUU2QUFBZ0FpRUJJQVVnQTBFQ2RHb0ZJQVlnQWtFQ2RHb0xJZ0FnQVRZQ0FBdFpBUUYvSUFCQkYyb2hBQ0FBTEFBQUlRSWdBVUgvQVhGQi93RkdJUUFnQWtVRVFDQUJRZjhCY1VFS1NpRUJJQUFnQVhNaEFDQUFRUUZ4SVFBZ0FBOExJQUFFUUVITUdFSEVFMEhxQ0VIYkdCQUVCVUVCRHd0QkFBc3JBUUYvSUFBb0FnQWhBQ0FCS0FJQUlRRWdBQ0FCU1NFQ0lBQWdBVXNoQUVGL0lBQWdBaHNoQUNBQUM2WURBd1ovQVgwRGZDQUFRUUoxSVFnZ0FFRURkU0VKSUFCQkEwb0VRQ0FBdHlFTkEwQWdCa0VDZENFRUlBUzNJUXNnQzBRWUxVUlUreUVKUUtJaEN5QUxJQTJqSVF3Z0RCQnpJUXNnQzdZaENpQUJJQVZCQW5ScUlRUWdCQ0FLT0FJQUlBd1FkQ0VMSUF1MklRb2dDb3doQ2lBRlFRRnlJUWNnQVNBSFFRSjBhaUVFSUFRZ0NqZ0NBQ0FIdHlFTElBdEVHQzFFVlBzaENVQ2lJUXNnQ3lBTm95RUxJQXRFQUFBQUFBQUE0RCtpSVF3Z0RCQnpJUXNnQzdZaENpQUtRd0FBQUQrVUlRb2dBaUFGUVFKMGFpRUVJQVFnQ2pnQ0FDQU1FSFFoQ3lBTHRpRUtJQXBEQUFBQVA1UWhDaUFDSUFkQkFuUnFJUVFnQkNBS09BSUFJQVpCQVdvaEJpQUZRUUpxSVFVZ0JpQUlTQTBBQ3lBQVFRZEtCRUFnQUxjaERFRUFJUUZCQUNFQUEwQWdBRUVCY2lFRklBVkJBWFFoQWlBQ3R5RUxJQXRFR0MxRVZQc2hDVUNpSVFzZ0N5QU1veUVOSUEwUWN5RUxJQXUySVFvZ0F5QUFRUUowYWlFQ0lBSWdDamdDQUNBTkVIUWhDeUFMdGlFS0lBcU1JUW9nQXlBRlFRSjBhaUVDSUFJZ0NqZ0NBQ0FCUVFGcUlRRWdBRUVDYWlFQUlBRWdDVWdOQUFzTEN3dW5BUU1DZndGOUFud2dBRUVCZFNFQ0lBQkJBVW9FUUNBQ3R5RUdRUUFoQUFOQUlBQzNJUVVnQlVRQUFBQUFBQURnUDZBaEJTQUZJQWFqSVFVZ0JVUUFBQUFBQUFEZ1A2SWhCU0FGUkJndFJGVDdJUWxBb2lFRklBVVFkQ0VGSUFXMklRUWdCQkJkSVFRZ0JMc2hCU0FGUkJndFJGVDdJZmsvb2lFRklBVVFkQ0VGSUFXMklRUWdBU0FBUVFKMGFpRURJQU1nQkRnQ0FDQUFRUUZxSVFBZ0FDQUNTQTBBQ3dzTFh3RUVmeUFBUVFOMUlRTWdBRUVIU2dSQVFTUWdBQkF0YXlFRVFRQWhBQU5BSUFBUU9pRUNJQUlnQkhZaEFpQUNRUUowSVFJZ0FrSC8vd054SVFJZ0FTQUFRUUYwYWlFRklBVWdBanNCQUNBQVFRRnFJUUFnQUNBRFNBMEFDd3NMRFFFQmZTQUFJQUNVSVFFZ0FRdnlPZ0VYZndKQUFrQWpCaUVPSXdaQkVHb2tCaUFPSVJjQ2Z5QUFRZlVCU1FSL1FkQWhLQUlBSWdkQkVDQUFRUXRxUVhoeElBQkJDMGtiSWdKQkEzWWlBSFlpQTBFRGNRUkFJQU5CQVhGQkFYTWdBR29pQVVFRGRFSDRJV29pQWtFSWFpSUVLQUlBSWdCQkNHb2lCaWdDQUNJRElBSkdCRUJCMENFZ0IwRUJJQUYwUVg5emNUWUNBQVZCNENFb0FnQWdBMHNFUUJBR0N5QURRUXhxSWdVb0FnQWdBRVlFUUNBRklBSTJBZ0FnQkNBRE5nSUFCUkFHQ3dzZ0FDQUJRUU4wSWdOQkEzSTJBZ1FnQUNBRGFrRUVhaUlBSUFBb0FnQkJBWEkyQWdBZ0RpUUdJQVlQQ3lBQ1FkZ2hLQUlBSWcxTEJIOGdBd1JBSUFNZ0FIUkJBaUFBZENJQVFRQWdBR3R5Y1NJQVFRQWdBR3R4UVg5cUlnTkJESFpCRUhFaEFDQURJQUIySWdOQkJYWkJDSEVpQVNBQWNpQURJQUYySWdCQkFuWkJCSEVpQTNJZ0FDQURkaUlBUVFGMlFRSnhJZ055SUFBZ0EzWWlBRUVCZGtFQmNTSURjaUFBSUFOMmFpSUJRUU4wUWZnaGFpSUZRUWhxSWdrb0FnQWlBRUVJYWlJS0tBSUFJZ01nQlVZRVFFSFFJU0FIUVFFZ0FYUkJmM054SWdRMkFnQUZRZUFoS0FJQUlBTkxCRUFRQmdzZ0EwRU1haUlMS0FJQUlBQkdCRUFnQ3lBRk5nSUFJQWtnQXpZQ0FDQUhJUVFGRUFZTEN5QUFJQUpCQTNJMkFnUWdBQ0FDYWlJSElBRkJBM1FpQXlBQ2F5SUZRUUZ5TmdJRUlBQWdBMm9nQlRZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQWdCRUVCSUFOMElnTnhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VHSUFNaERBc0ZRZEFoSUFRZ0EzSTJBZ0FnQUNFR0lBQkJDR29oREFzZ0RDQUNOZ0lBSUFZZ0FqWUNEQ0FDSUFZMkFnZ2dBaUFBTmdJTUMwSFlJU0FGTmdJQVFlUWhJQWMyQWdBZ0RpUUdJQW9QQzBIVUlTZ0NBQ0lNQkg4Z0RFRUFJQXhyY1VGL2FpSURRUXgyUVJCeElRQWdBeUFBZGlJRFFRVjJRUWh4SWdRZ0FISWdBeUFFZGlJQVFRSjJRUVJ4SWdOeUlBQWdBM1lpQUVFQmRrRUNjU0lEY2lBQUlBTjJJZ0JCQVhaQkFYRWlBM0lnQUNBRGRtcEJBblJCZ0NScUtBSUFJZ1FoQXlBRUtBSUVRWGh4SUFKcklRb0RRQUpBSUFNb0FoQWlBRVVFUUNBREtBSVVJZ0JGRFFFTElBQWhBeUFBSUFRZ0FDZ0NCRUY0Y1NBQ2F5SUFJQXBKSWdZYklRUWdBQ0FLSUFZYklRb01BUXNMUWVBaEtBSUFJZzhnQkVzRVFCQUdDeUFFSUFKcUlnZ2dCRTBFUUJBR0N5QUVLQUlZSVFzQ1FDQUVLQUlNSWdBZ0JFWUVRQ0FFUVJScUlnTW9BZ0FpQUVVRVFDQUVRUkJxSWdNb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUJpZ0NBQ0lKUlFSQUlBQkJFR29pQmlnQ0FDSUpSUTBCQ3lBR0lRTWdDU0VBREFFTEN5QVBJQU5MQkVBUUJnVWdBMEVBTmdJQUlBQWhBUXNGSUE4Z0JDZ0NDQ0lEU3dSQUVBWUxJQU5CREdvaUJpZ0NBQ0FFUndSQUVBWUxJQUJCQ0dvaUNTZ0NBQ0FFUmdSQUlBWWdBRFlDQUNBSklBTTJBZ0FnQUNFQkJSQUdDd3NMQWtBZ0N3UkFJQVFnQkNnQ0hDSUFRUUowUVlBa2FpSURLQUlBUmdSQUlBTWdBVFlDQUNBQlJRUkFRZFFoSUF4QkFTQUFkRUYvYzNFMkFnQU1Bd3NGUWVBaEtBSUFJQXRMQkVBUUJnVWdDMEVRYWlJQUlBdEJGR29nQUNnQ0FDQUVSaHNnQVRZQ0FDQUJSUTBEQ3d0QjRDRW9BZ0FpQXlBQlN3UkFFQVlMSUFFZ0N6WUNHQ0FFS0FJUUlnQUVRQ0FESUFCTEJFQVFCZ1VnQVNBQU5nSVFJQUFnQVRZQ0dBc0xJQVFvQWhRaUFBUkFRZUFoS0FJQUlBQkxCRUFRQmdVZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNMQ3dzZ0NrRVFTUVJBSUFRZ0NpQUNhaUlBUVFOeU5nSUVJQVFnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRUlBSkJBM0kyQWdRZ0NDQUtRUUZ5TmdJRUlBZ2dDbW9nQ2pZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQkJBU0FEZENJRElBZHhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VGSUFNaEVBc0ZRZEFoSUFNZ0IzSTJBZ0FnQUNFRklBQkJDR29oRUFzZ0VDQUNOZ0lBSUFVZ0FqWUNEQ0FDSUFVMkFnZ2dBaUFBTmdJTUMwSFlJU0FLTmdJQVFlUWhJQWcyQWdBTElBNGtCaUFFUVFocUR3VWdBZ3NGSUFJTEJTQUFRYjkvU3dSL1FYOEZJQUJCQzJvaUFFRjRjU0VFUWRRaEtBSUFJZ1lFZnlBQVFRaDJJZ0FFZnlBRVFmLy8vd2RMQkg5Qkh3VWdCRUVPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUNJQUJ5SUFFZ0FuUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJUkpCQUNBRWF5RUNBa0FDUUNBU1FRSjBRWUFrYWlnQ0FDSUFCRUJCQUNFQklBUkJBRUVaSUJKQkFYWnJJQkpCSDBZYmRDRU1BMEFnQUNnQ0JFRjRjU0FFYXlJUUlBSkpCRUFnRUFSL0lCQWhBaUFBQlNBQUlRRkJBQ0VDREFRTElRRUxJQVVnQUNnQ0ZDSUZJQVZGSUFVZ0FFRVFhaUFNUVI5MlFRSjBhaWdDQUNJQVJuSWJJUVVnREVFQmRDRU1JQUFOQUFzZ0FTRUFCVUVBSVFBTElBVWdBSEpGQkVBZ0JFRUNJQkowSWdCQkFDQUFhM0lnQm5FaUFFVU5CaG9nQUVFQUlBQnJjVUYvYWlJRlFReDJRUkJ4SVFGQkFDRUFJQVVnQVhZaUJVRUZka0VJY1NJTUlBRnlJQVVnREhZaUFVRUNka0VFY1NJRmNpQUJJQVYySWdGQkFYWkJBbkVpQlhJZ0FTQUZkaUlCUVFGMlFRRnhJZ1Z5SUFFZ0JYWnFRUUowUVlBa2FpZ0NBQ0VGQ3lBRkJIOGdBQ0VCSUFVaEFBd0JCU0FBQ3lFRkRBRUxJQUVoQlNBQ0lRRURRQ0FBS0FJRUlRd2dBQ2dDRUNJQ1JRUkFJQUFvQWhRaEFnc2dERUY0Y1NBRWF5SVFJQUZKSVF3Z0VDQUJJQXdiSVFFZ0FDQUZJQXdiSVFVZ0FnUi9JQUloQUF3QkJTQUJDeUVDQ3dzZ0JRUi9JQUpCMkNFb0FnQWdCR3RKQkg5QjRDRW9BZ0FpRVNBRlN3UkFFQVlMSUFVZ0JHb2lDQ0FGVFFSQUVBWUxJQVVvQWhnaER3SkFJQVVvQWd3aUFDQUZSZ1JBSUFWQkZHb2lBU2dDQUNJQVJRUkFJQVZCRUdvaUFTZ0NBQ0lBUlEwQ0N3TkFBa0FnQUVFVWFpSUpLQUlBSWd0RkJFQWdBRUVRYWlJSktBSUFJZ3RGRFFFTElBa2hBU0FMSVFBTUFRc0xJQkVnQVVzRVFCQUdCU0FCUVFBMkFnQWdBQ0VIQ3dVZ0VTQUZLQUlJSWdGTEJFQVFCZ3NnQVVFTWFpSUpLQUlBSUFWSEJFQVFCZ3NnQUVFSWFpSUxLQUlBSUFWR0JFQWdDU0FBTmdJQUlBc2dBVFlDQUNBQUlRY0ZFQVlMQ3dzQ1FDQVBCRUFnQlNBRktBSWNJZ0JCQW5SQmdDUnFJZ0VvQWdCR0JFQWdBU0FITmdJQUlBZEZCRUJCMUNFZ0JrRUJJQUIwUVg5emNTSUROZ0lBREFNTEJVSGdJU2dDQUNBUFN3UkFFQVlGSUE5QkVHb2lBQ0FQUVJScUlBQW9BZ0FnQlVZYklBYzJBZ0FnQjBVRVFDQUdJUU1NQkFzTEMwSGdJU2dDQUNJQklBZExCRUFRQmdzZ0J5QVBOZ0lZSUFVb0FoQWlBQVJBSUFFZ0FFc0VRQkFHQlNBSElBQTJBaEFnQUNBSE5nSVlDd3NnQlNnQ0ZDSUFCRUJCNENFb0FnQWdBRXNFUUJBR0JTQUhJQUEyQWhRZ0FDQUhOZ0lZSUFZaEF3c0ZJQVloQXdzRklBWWhBd3NMQWtBZ0FrRVFTUVJBSUFVZ0FpQUVhaUlBUVFOeU5nSUVJQVVnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRklBUkJBM0kyQWdRZ0NDQUNRUUZ5TmdJRUlBZ2dBbW9nQWpZQ0FDQUNRUU4ySVFFZ0FrR0FBa2tFUUNBQlFRTjBRZmdoYWlFQVFkQWhLQUlBSWdOQkFTQUJkQ0lCY1FSQVFlQWhLQUlBSUFCQkNHb2lBeWdDQUNJQlN3UkFFQVlGSUFFaERTQURJUk1MQlVIUUlTQURJQUZ5TmdJQUlBQWhEU0FBUVFocUlSTUxJQk1nQ0RZQ0FDQU5JQWcyQWd3Z0NDQU5OZ0lJSUFnZ0FEWUNEQXdDQ3lBQ1FRaDJJZ0FFZnlBQ1FmLy8vd2RMQkg5Qkh3VWdBa0VPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUVJQUJ5SUFFZ0JIUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJZ0ZCQW5SQmdDUnFJUUFnQ0NBQk5nSWNJQWhCRUdvaUJFRUFOZ0lFSUFSQkFEWUNBQ0FEUVFFZ0FYUWlCSEZGQkVCQjFDRWdBeUFFY2pZQ0FDQUFJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01BZ3NDUUNBQUtBSUFJZ0FvQWdSQmVIRWdBa1lFUUNBQUlRb0ZJQUpCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VCQTBBZ0FFRVFhaUFCUVI5MlFRSjBhaUlFS0FJQUlnTUVRQ0FCUVFGMElRRWdBeWdDQkVGNGNTQUNSZ1JBSUFNaENnd0VCU0FESVFBTUFnc0FDd3RCNENFb0FnQWdCRXNFUUJBR0JTQUVJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lESUFwQkNHb2lBU2dDQUNJQVRTQURJQXBOY1FSQUlBQWdDRFlDRENBQklBZzJBZ0FnQ0NBQU5nSUlJQWdnQ2pZQ0RDQUlRUUEyQWhnRkVBWUxDd3NnRGlRR0lBVkJDR29QQlNBRUN3VWdCQXNGSUFRTEN3c0xJUU5CMkNFb0FnQWlBU0FEVHdSQVFlUWhLQUlBSVFBZ0FTQURheUlDUVE5TEJFQkI1Q0VnQUNBRGFpSUVOZ0lBUWRnaElBSTJBZ0FnQkNBQ1FRRnlOZ0lFSUFBZ0FXb2dBallDQUNBQUlBTkJBM0kyQWdRRlFkZ2hRUUEyQWdCQjVDRkJBRFlDQUNBQUlBRkJBM0kyQWdRZ0FDQUJha0VFYWlJRElBTW9BZ0JCQVhJMkFnQUxEQUlMUWR3aEtBSUFJZ0VnQTBzRVFFSGNJU0FCSUFOcklnRTJBZ0FNQVF0QnFDVW9BZ0FFZjBHd0pTZ0NBQVZCc0NWQmdDQTJBZ0JCckNWQmdDQTJBZ0JCdENWQmZ6WUNBRUc0SlVGL05nSUFRYndsUVFBMkFnQkJqQ1ZCQURZQ0FFR29KU0FYUVhCeFFkaXExYW9GY3pZQ0FFR0FJQXNpQUNBRFFTOXFJZ1pxSWdWQkFDQUFheUlIY1NJRUlBTk5CRUFnRGlRR1FRQVBDMEdJSlNnQ0FDSUFCRUJCZ0NVb0FnQWlBaUFFYWlJS0lBSk5JQW9nQUV0eUJFQWdEaVFHUVFBUEN3c2dBMEV3YWlFS0FrQUNRRUdNSlNnQ0FFRUVjUVJBUVFBaEFRVUNRQUpBQWtCQjZDRW9BZ0FpQUVVTkFFR1FKU0VDQTBBQ1FDQUNLQUlBSWcwZ0FFMEVRQ0FOSUFJb0FnUnFJQUJMRFFFTElBSW9BZ2dpQWcwQkRBSUxDeUFGSUFGcklBZHhJZ0ZCLy8vLy93ZEpCRUFnQVJCN0lnQWdBaWdDQUNBQ0tBSUVha1lFUUNBQVFYOUhEUVlGREFNTEJVRUFJUUVMREFJTFFRQVFleUlBUVg5R0JIOUJBQVZCckNVb0FnQWlBVUYvYWlJQ0lBQnFRUUFnQVd0eElBQnJRUUFnQWlBQWNSc2dCR29pQVVHQUpTZ0NBQ0lGYWlFQ0lBRWdBMHNnQVVILy8vLy9CMGx4Qkg5QmlDVW9BZ0FpQndSQUlBSWdCVTBnQWlBSFMzSUVRRUVBSVFFTUJRc0xJQUVRZXlJQ0lBQkdEUVVnQWlFQURBSUZRUUFMQ3lFQkRBRUxJQW9nQVVzZ0FVSC8vLy8vQjBrZ0FFRi9SM0Z4UlFSQUlBQkJmMFlFUUVFQUlRRU1BZ1VNQkFzQUN5QUdJQUZyUWJBbEtBSUFJZ0pxUVFBZ0FtdHhJZ0pCLy8vLy93ZFBEUUpCQUNBQmF5RUdJQUlRZTBGL1JnUi9JQVlRZXhwQkFBVWdBaUFCYWlFQkRBTUxJUUVMUVl3bFFZd2xLQUlBUVFSeU5nSUFDeUFFUWYvLy8vOEhTUVJBSUFRUWV5RUFRUUFRZXlJQ0lBQnJJZ1lnQTBFb2Frc2hCQ0FHSUFFZ0JCc2hBU0FBUVg5R0lBUkJBWE55SUFBZ0Fra2dBRUYvUnlBQ1FYOUhjWEZCQVhOeVJRMEJDd3dCQzBHQUpVR0FKU2dDQUNBQmFpSUNOZ0lBSUFKQmhDVW9BZ0JMQkVCQmhDVWdBallDQUFzQ1FFSG9JU2dDQUNJR0JFQkJrQ1VoQWdKQUFrQURRQ0FBSUFJb0FnQWlCQ0FDS0FJRUlnVnFSZzBCSUFJb0FnZ2lBZzBBQ3d3QkN5QUNRUVJxSVFjZ0FpZ0NERUVJY1VVRVFDQUFJQVpMSUFRZ0JrMXhCRUFnQnlBRklBRnFOZ0lBSUFaQkFDQUdRUWhxSWdCclFRZHhRUUFnQUVFSGNSc2lBbW9oQUVIY0lTZ0NBQ0FCYWlJRUlBSnJJUUZCNkNFZ0FEWUNBRUhjSVNBQk5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFScVFTZzJBZ1JCN0NGQnVDVW9BZ0EyQWdBTUJBc0xDeUFBUWVBaEtBSUFJZ0pKQkVCQjRDRWdBRFlDQUNBQUlRSUxJQUFnQVdvaEJVR1FKU0VFQWtBQ1FBTkFJQVFvQWdBZ0JVWU5BU0FFS0FJSUlnUU5BQXNNQVFzZ0JDZ0NERUVJY1VVRVFDQUVJQUEyQWdBZ0JFRUVhaUlFSUFRb0FnQWdBV28yQWdBZ0FFRUFJQUJCQ0dvaUFHdEJCM0ZCQUNBQVFRZHhHMm9pQ0NBRGFpRUhJQVZCQUNBRlFRaHFJZ0JyUVFkeFFRQWdBRUVIY1J0cUlnRWdDR3NnQTJzaEJDQUlJQU5CQTNJMkFnUUNRQ0FHSUFGR0JFQkIzQ0ZCM0NFb0FnQWdCR29pQURZQ0FFSG9JU0FITmdJQUlBY2dBRUVCY2pZQ0JBVkI1Q0VvQWdBZ0FVWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFjMkFnQWdCeUFBUVFGeU5nSUVJQWNnQUdvZ0FEWUNBQXdDQ3lBQktBSUVJZ0JCQTNGQkFVWUVmeUFBUVhoeElRMGdBRUVEZGlFRkFrQWdBRUdBQWtrRVFDQUJLQUlNSVFNQ1FDQUJLQUlJSWdZZ0JVRURkRUg0SVdvaUFFY0VRQ0FDSUFaTEJFQVFCZ3NnQmlnQ0RDQUJSZzBCRUFZTEN5QURJQVpHQkVCQjBDRkIwQ0VvQWdCQkFTQUZkRUYvYzNFMkFnQU1BZ3NDUUNBRElBQkdCRUFnQTBFSWFpRVVCU0FDSUFOTEJFQVFCZ3NnQTBFSWFpSUFLQUlBSUFGR0JFQWdBQ0VVREFJTEVBWUxDeUFHSUFNMkFnd2dGQ0FHTmdJQUJTQUJLQUlZSVFvQ1FDQUJLQUlNSWdBZ0FVWUVRQ0FCUVJCcUlnTkJCR29pQmlnQ0FDSUFCRUFnQmlFREJTQURLQUlBSWdCRkRRSUxBMEFDUUNBQVFSUnFJZ1lvQWdBaUJVVUVRQ0FBUVJCcUlnWW9BZ0FpQlVVTkFRc2dCaUVESUFVaEFBd0JDd3NnQWlBRFN3UkFFQVlGSUFOQkFEWUNBQ0FBSVFrTEJTQUNJQUVvQWdnaUEwc0VRQkFHQ3lBRFFReHFJZ0lvQWdBZ0FVY0VRQkFHQ3lBQVFRaHFJZ1lvQWdBZ0FVWUVRQ0FDSUFBMkFnQWdCaUFETmdJQUlBQWhDUVVRQmdzTEN5QUtSUTBCQWtBZ0FTZ0NIQ0lBUVFKMFFZQWthaUlES0FJQUlBRkdCRUFnQXlBSk5nSUFJQWtOQVVIVUlVSFVJU2dDQUVFQklBQjBRWDl6Y1RZQ0FBd0RCVUhnSVNnQ0FDQUtTd1JBRUFZRklBcEJFR29pQUNBS1FSUnFJQUFvQWdBZ0FVWWJJQWsyQWdBZ0NVVU5CQXNMQzBIZ0lTZ0NBQ0lESUFsTEJFQVFCZ3NnQ1NBS05nSVlJQUZCRUdvaUFpZ0NBQ0lBQkVBZ0F5QUFTd1JBRUFZRklBa2dBRFlDRUNBQUlBazJBaGdMQ3lBQ0tBSUVJZ0JGRFFGQjRDRW9BZ0FnQUVzRVFCQUdCU0FKSUFBMkFoUWdBQ0FKTmdJWUN3c0xJQUVnRFdvaEFTQU5JQVJxQlNBRUN5RUNJQUZCQkdvaUFDQUFLQUlBUVg1eE5nSUFJQWNnQWtFQmNqWUNCQ0FISUFKcUlBSTJBZ0FnQWtFRGRpRURJQUpCZ0FKSkJFQWdBMEVEZEVINElXb2hBQUpBUWRBaEtBSUFJZ0ZCQVNBRGRDSURjUVJBUWVBaEtBSUFJQUJCQ0dvaUF5Z0NBQ0lCVFFSQUlBRWhEeUFESVJVTUFnc1FCZ1ZCMENFZ0FTQURjallDQUNBQUlROGdBRUVJYWlFVkN3c2dGU0FITmdJQUlBOGdCellDRENBSElBODJBZ2dnQnlBQU5nSU1EQUlMQW44Z0FrRUlkaUlBQkg5Qkh5QUNRZi8vL3dkTERRRWFJQUpCRGlBQUlBQkJnUDQvYWtFUWRrRUljU0lBZENJRFFZRGdIMnBCRUhaQkJIRWlBU0FBY2lBRElBRjBJZ0JCZ0lBUGFrRVFka0VDY1NJRGNtc2dBQ0FEZEVFUGRtb2lBRUVIYW5aQkFYRWdBRUVCZEhJRlFRQUxDeUlEUVFKMFFZQWthaUVBSUFjZ0F6WUNIQ0FIUVJCcUlnRkJBRFlDQkNBQlFRQTJBZ0JCMUNFb0FnQWlBVUVCSUFOMElnUnhSUVJBUWRRaElBRWdCSEkyQWdBZ0FDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBSUxBa0FnQUNnQ0FDSUFLQUlFUVhoeElBSkdCRUFnQUNFTEJTQUNRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBUU5BSUFCQkVHb2dBVUVmZGtFQ2RHb2lCQ2dDQUNJREJFQWdBVUVCZENFQklBTW9BZ1JCZUhFZ0FrWUVRQ0FESVFzTUJBVWdBeUVBREFJTEFBc0xRZUFoS0FJQUlBUkxCRUFRQmdVZ0JDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBUUxDd3RCNENFb0FnQWlBeUFMUVFocUlnRW9BZ0FpQUUwZ0F5QUxUWEVFUUNBQUlBYzJBZ3dnQVNBSE5nSUFJQWNnQURZQ0NDQUhJQXMyQWd3Z0IwRUFOZ0lZQlJBR0N3c0xJQTRrQmlBSVFRaHFEd3NMUVpBbElRSURRQUpBSUFJb0FnQWlCQ0FHVFFSQUlBUWdBaWdDQkdvaUJTQUdTdzBCQ3lBQ0tBSUlJUUlNQVFzTElBVkJVV29pQkVFSWFpRUNJQVlnQkVFQUlBSnJRUWR4UVFBZ0FrRUhjUnRxSWdJZ0FpQUdRUkJxSWdsSkd5SUNRUWhxSVFSQjZDRWdBRUVBSUFCQkNHb2lCMnRCQjNGQkFDQUhRUWR4R3lJSGFpSUtOZ0lBUWR3aElBRkJXR29pQ3lBSGF5SUhOZ0lBSUFvZ0IwRUJjallDQkNBQUlBdHFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQWdBa0VFYWlJSFFSczJBZ0FnQkVHUUpTa0NBRGNDQUNBRVFaZ2xLUUlBTndJSVFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUVpnbElBUTJBZ0FnQWtFWWFpRUFBMEFnQUVFRWFpSUJRUWMyQWdBZ0FFRUlhaUFGU1FSQUlBRWhBQXdCQ3dzZ0FpQUdSd1JBSUFjZ0J5Z0NBRUYrY1RZQ0FDQUdJQUlnQm1zaUJFRUJjallDQkNBQ0lBUTJBZ0FnQkVFRGRpRUJJQVJCZ0FKSkJFQWdBVUVEZEVINElXb2hBRUhRSVNnQ0FDSUNRUUVnQVhRaUFYRUVRRUhnSVNnQ0FDQUFRUWhxSWdFb0FnQWlBa3NFUUJBR0JTQUNJUkVnQVNFV0N3VkIwQ0VnQWlBQmNqWUNBQ0FBSVJFZ0FFRUlhaUVXQ3lBV0lBWTJBZ0FnRVNBR05nSU1JQVlnRVRZQ0NDQUdJQUEyQWd3TUF3c2dCRUVJZGlJQUJIOGdCRUgvLy84SFN3Ui9RUjhGSUFSQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQWlBQWNpQUJJQUowSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBWWdBVFlDSENBR1FRQTJBaFFnQ1VFQU5nSUFRZFFoS0FJQUlnSkJBU0FCZENJRmNVVUVRRUhVSVNBQ0lBVnlOZ0lBSUFBZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3REN3SkFJQUFvQWdBaUFDZ0NCRUY0Y1NBRVJnUkFJQUFoQ0FVZ0JFRUFRUmtnQVVFQmRtc2dBVUVmUmh0MElRSURRQ0FBUVJCcUlBSkJIM1pCQW5ScUlnVW9BZ0FpQVFSQUlBSkJBWFFoQWlBQktBSUVRWGh4SUFSR0JFQWdBU0VJREFRRklBRWhBQXdDQ3dBTEMwSGdJU2dDQUNBRlN3UkFFQVlGSUFVZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3RkN3c0xRZUFoS0FJQUlnRWdDRUVJYWlJQ0tBSUFJZ0JOSUFFZ0NFMXhCRUFnQUNBR05nSU1JQUlnQmpZQ0FDQUdJQUEyQWdnZ0JpQUlOZ0lNSUFaQkFEWUNHQVVRQmdzTEJVSGdJU2dDQUNJQ1JTQUFJQUpKY2dSQVFlQWhJQUEyQWdBTFFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUWZRaFFhZ2xLQUlBTmdJQVFmQWhRWDgyQWdCQmhDSkIrQ0UyQWdCQmdDSkIrQ0UyQWdCQmpDSkJnQ0kyQWdCQmlDSkJnQ0kyQWdCQmxDSkJpQ0kyQWdCQmtDSkJpQ0kyQWdCQm5DSkJrQ0kyQWdCQm1DSkJrQ0kyQWdCQnBDSkJtQ0kyQWdCQm9DSkJtQ0kyQWdCQnJDSkJvQ0kyQWdCQnFDSkJvQ0kyQWdCQnRDSkJxQ0kyQWdCQnNDSkJxQ0kyQWdCQnZDSkJzQ0kyQWdCQnVDSkJzQ0kyQWdCQnhDSkJ1Q0kyQWdCQndDSkJ1Q0kyQWdCQnpDSkJ3Q0kyQWdCQnlDSkJ3Q0kyQWdCQjFDSkJ5Q0kyQWdCQjBDSkJ5Q0kyQWdCQjNDSkIwQ0kyQWdCQjJDSkIwQ0kyQWdCQjVDSkIyQ0kyQWdCQjRDSkIyQ0kyQWdCQjdDSkI0Q0kyQWdCQjZDSkI0Q0kyQWdCQjlDSkI2Q0kyQWdCQjhDSkI2Q0kyQWdCQi9DSkI4Q0kyQWdCQitDSkI4Q0kyQWdCQmhDTkIrQ0kyQWdCQmdDTkIrQ0kyQWdCQmpDTkJnQ00yQWdCQmlDTkJnQ00yQWdCQmxDTkJpQ00yQWdCQmtDTkJpQ00yQWdCQm5DTkJrQ00yQWdCQm1DTkJrQ00yQWdCQnBDTkJtQ00yQWdCQm9DTkJtQ00yQWdCQnJDTkJvQ00yQWdCQnFDTkJvQ00yQWdCQnRDTkJxQ00yQWdCQnNDTkJxQ00yQWdCQnZDTkJzQ00yQWdCQnVDTkJzQ00yQWdCQnhDTkJ1Q00yQWdCQndDTkJ1Q00yQWdCQnpDTkJ3Q00yQWdCQnlDTkJ3Q00yQWdCQjFDTkJ5Q00yQWdCQjBDTkJ5Q00yQWdCQjNDTkIwQ00yQWdCQjJDTkIwQ00yQWdCQjVDTkIyQ00yQWdCQjRDTkIyQ00yQWdCQjdDTkI0Q00yQWdCQjZDTkI0Q00yQWdCQjlDTkI2Q00yQWdCQjhDTkI2Q00yQWdCQi9DTkI4Q00yQWdCQitDTkI4Q00yQWdCQjZDRWdBRUVBSUFCQkNHb2lBbXRCQjNGQkFDQUNRUWR4R3lJQ2FpSUVOZ0lBUWR3aElBRkJXR29pQVNBQ2F5SUNOZ0lBSUFRZ0FrRUJjallDQkNBQUlBRnFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQUxDMEhjSVNnQ0FDSUFJQU5MQkVCQjNDRWdBQ0FEYXlJQk5nSUFEQUlMQ3hCalFRdzJBZ0FnRGlRR1FRQVBDMEhvSVVIb0lTZ0NBQ0lBSUFOcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0EwRURjallDQkFzZ0RpUUdJQUJCQ0dvTHJSSUJFWDhnQUVVRVFBOExJQUJCZUdvaUJFSGdJU2dDQUNJTVNRUkFFQVlMSUFCQmZHb29BZ0FpQUVFRGNTSUxRUUZHQkVBUUJnc2dCQ0FBUVhoeElnSnFJUWNDUUNBQVFRRnhCRUFnQWlFQklBUWlBeUVGQlNBRUtBSUFJUWtnQzBVRVFBOExJQVFnQ1dzaUFDQU1TUVJBRUFZTElBa2dBbW9oQkVIa0lTZ0NBQ0FBUmdSQUlBZEJCR29pQVNnQ0FDSURRUU54UVFOSEJFQWdBQ0VESUFRaEFTQUFJUVVNQXd0QjJDRWdCRFlDQUNBQklBTkJmbkUyQWdBZ0FDQUVRUUZ5TmdJRUlBQWdCR29nQkRZQ0FBOExJQWxCQTNZaEFpQUpRWUFDU1FSQUlBQW9BZ3doQXlBQUtBSUlJZ1VnQWtFRGRFSDRJV29pQVVjRVFDQU1JQVZMQkVBUUJnc2dCU2dDRENBQVJ3UkFFQVlMQ3lBRElBVkdCRUJCMENGQjBDRW9BZ0JCQVNBQ2RFRi9jM0UyQWdBZ0FDRURJQVFoQVNBQUlRVU1Bd3NnQXlBQlJnUkFJQU5CQ0dvaEJnVWdEQ0FEU3dSQUVBWUxJQU5CQ0dvaUFTZ0NBQ0FBUmdSQUlBRWhCZ1VRQmdzTElBVWdBellDRENBR0lBVTJBZ0FnQUNFRElBUWhBU0FBSVFVTUFnc2dBQ2dDR0NFTkFrQWdBQ2dDRENJQ0lBQkdCRUFnQUVFUWFpSUdRUVJxSWdrb0FnQWlBZ1JBSUFraEJnVWdCaWdDQUNJQ1JRMENDd05BQWtBZ0FrRVVhaUlKS0FJQUlndEZCRUFnQWtFUWFpSUpLQUlBSWd0RkRRRUxJQWtoQmlBTElRSU1BUXNMSUF3Z0Jrc0VRQkFHQlNBR1FRQTJBZ0FnQWlFSUN3VWdEQ0FBS0FJSUlnWkxCRUFRQmdzZ0JrRU1haUlKS0FJQUlBQkhCRUFRQmdzZ0FrRUlhaUlMS0FJQUlBQkdCRUFnQ1NBQ05nSUFJQXNnQmpZQ0FDQUNJUWdGRUFZTEN3c2dEUVJBSUFBb0Fod2lBa0VDZEVHQUpHb2lCaWdDQUNBQVJnUkFJQVlnQ0RZQ0FDQUlSUVJBUWRRaFFkUWhLQUlBUVFFZ0FuUkJmM054TmdJQUlBQWhBeUFFSVFFZ0FDRUZEQVFMQlVIZ0lTZ0NBQ0FOU3dSQUVBWUZJQTFCRUdvaUFpQU5RUlJxSUFJb0FnQWdBRVliSUFnMkFnQWdDRVVFUUNBQUlRTWdCQ0VCSUFBaEJRd0ZDd3NMUWVBaEtBSUFJZ1lnQ0VzRVFCQUdDeUFJSUEwMkFoZ2dBRUVRYWlJSktBSUFJZ0lFUUNBR0lBSkxCRUFRQmdVZ0NDQUNOZ0lRSUFJZ0NEWUNHQXNMSUFrb0FnUWlBZ1JBUWVBaEtBSUFJQUpMQkVBUUJnVWdDQ0FDTmdJVUlBSWdDRFlDR0NBQUlRTWdCQ0VCSUFBaEJRc0ZJQUFoQXlBRUlRRWdBQ0VGQ3dVZ0FDRURJQVFoQVNBQUlRVUxDd3NnQlNBSFR3UkFFQVlMSUFkQkJHb2lCQ2dDQUNJQVFRRnhSUVJBRUFZTElBQkJBbkVFZnlBRUlBQkJmbkUyQWdBZ0F5QUJRUUZ5TmdJRUlBVWdBV29nQVRZQ0FDQUJCVUhvSVNnQ0FDQUhSZ1JBUWR3aFFkd2hLQUlBSUFGcUlnQTJBZ0JCNkNFZ0F6WUNBQ0FESUFCQkFYSTJBZ1FnQTBIa0lTZ0NBRWNFUUE4TFFlUWhRUUEyQWdCQjJDRkJBRFlDQUE4TFFlUWhLQUlBSUFkR0JFQkIyQ0ZCMkNFb0FnQWdBV29pQURZQ0FFSGtJU0FGTmdJQUlBTWdBRUVCY2pZQ0JDQUZJQUJxSUFBMkFnQVBDeUFBUVhoeElBRnFJUVFnQUVFRGRpRUdBa0FnQUVHQUFra0VRQ0FIS0FJTUlRRWdCeWdDQ0NJQ0lBWkJBM1JCK0NGcUlnQkhCRUJCNENFb0FnQWdBa3NFUUJBR0N5QUNLQUlNSUFkSEJFQVFCZ3NMSUFFZ0FrWUVRRUhRSVVIUUlTZ0NBRUVCSUFaMFFYOXpjVFlDQUF3Q0N5QUJJQUJHQkVBZ0FVRUlhaUVRQlVIZ0lTZ0NBQ0FCU3dSQUVBWUxJQUZCQ0dvaUFDZ0NBQ0FIUmdSQUlBQWhFQVVRQmdzTElBSWdBVFlDRENBUUlBSTJBZ0FGSUFjb0FoZ2hDQUpBSUFjb0Fnd2lBQ0FIUmdSQUlBZEJFR29pQVVFRWFpSUNLQUlBSWdBRVFDQUNJUUVGSUFFb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUFpZ0NBQ0lHUlFSQUlBQkJFR29pQWlnQ0FDSUdSUTBCQ3lBQ0lRRWdCaUVBREFFTEMwSGdJU2dDQUNBQlN3UkFFQVlGSUFGQkFEWUNBQ0FBSVFvTEJVSGdJU2dDQUNBSEtBSUlJZ0ZMQkVBUUJnc2dBVUVNYWlJQ0tBSUFJQWRIQkVBUUJnc2dBRUVJYWlJR0tBSUFJQWRHQkVBZ0FpQUFOZ0lBSUFZZ0FUWUNBQ0FBSVFvRkVBWUxDd3NnQ0FSQUlBY29BaHdpQUVFQ2RFR0FKR29pQVNnQ0FDQUhSZ1JBSUFFZ0NqWUNBQ0FLUlFSQVFkUWhRZFFoS0FJQVFRRWdBSFJCZjNOeE5nSUFEQVFMQlVIZ0lTZ0NBQ0FJU3dSQUVBWUZJQWhCRUdvaUFDQUlRUlJxSUFBb0FnQWdCMFliSUFvMkFnQWdDa1VOQkFzTFFlQWhLQUlBSWdFZ0Nrc0VRQkFHQ3lBS0lBZzJBaGdnQjBFUWFpSUNLQUlBSWdBRVFDQUJJQUJMQkVBUUJnVWdDaUFBTmdJUUlBQWdDallDR0FzTElBSW9BZ1FpQUFSQVFlQWhLQUlBSUFCTEJFQVFCZ1VnQ2lBQU5nSVVJQUFnQ2pZQ0dBc0xDd3NMSUFNZ0JFRUJjallDQkNBRklBUnFJQVEyQWdBZ0EwSGtJU2dDQUVZRWYwSFlJU0FFTmdJQUR3VWdCQXNMSWdWQkEzWWhBU0FGUVlBQ1NRUkFJQUZCQTNSQitDRnFJUUJCMENFb0FnQWlCVUVCSUFGMElnRnhCRUJCNENFb0FnQWdBRUVJYWlJQktBSUFJZ1ZMQkVBUUJnVWdCU0VQSUFFaEVRc0ZRZEFoSUFVZ0FYSTJBZ0FnQUNFUElBQkJDR29oRVFzZ0VTQUROZ0lBSUE4Z0F6WUNEQ0FESUE4MkFnZ2dBeUFBTmdJTUR3c2dCVUVJZGlJQUJIOGdCVUgvLy84SFN3Ui9RUjhGSUFWQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQkNBQWNpQUJJQVIwSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBTWdBVFlDSENBRFFRQTJBaFFnQTBFQU5nSVFBa0JCMUNFb0FnQWlCRUVCSUFGMElnSnhCRUFDUUNBQUtBSUFJZ0FvQWdSQmVIRWdCVVlFUUNBQUlRNEZJQVZCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VFQTBBZ0FFRVFhaUFFUVI5MlFRSjBhaUlDS0FJQUlnRUVRQ0FFUVFGMElRUWdBU2dDQkVGNGNTQUZSZ1JBSUFFaERnd0VCU0FCSVFBTUFnc0FDd3RCNENFb0FnQWdBa3NFUUJBR0JTQUNJQU0yQWdBZ0F5QUFOZ0lZSUFNZ0F6WUNEQ0FESUFNMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lCSUE1QkNHb2lCU2dDQUNJQVRTQUJJQTVOY1FSQUlBQWdBellDRENBRklBTTJBZ0FnQXlBQU5nSUlJQU1nRGpZQ0RDQURRUUEyQWhnRkVBWUxCVUhVSVNBRUlBSnlOZ0lBSUFBZ0F6WUNBQ0FESUFBMkFoZ2dBeUFETmdJTUlBTWdBellDQ0FzTFFmQWhRZkFoS0FJQVFYOXFJZ0EyQWdBZ0FBUkFEd3RCbUNVaEFBTkFJQUFvQWdBaUFVRUlhaUVBSUFFTkFBdEI4Q0ZCZnpZQ0FBdUFBUUVDZnlBQVJRUkFJQUVRWGc4TElBRkJ2MzlMQkVBUVkwRU1OZ0lBUVFBUEN5QUFRWGhxUVJBZ0FVRUxha0Y0Y1NBQlFRdEpHeEJoSWdJRVFDQUNRUWhxRHdzZ0FSQmVJZ0pGQkVCQkFBOExJQUlnQUNBQVFYeHFLQUlBSWdOQmVIRkJCRUVJSUFOQkEzRWJheUlESUFFZ0F5QUJTUnNRZVJvZ0FCQmZJQUlMbUFrQkRIOENRQ0FBSUFCQkJHb2lDaWdDQUNJSVFYaHhJZ0pxSVFVZ0NFRURjU0lKUVFGSFFlQWhLQUlBSWdzZ0FFMXhJQVVnQUV0eFJRUkFFQVlMSUFWQkJHb2lCeWdDQUNJRVFRRnhSUVJBRUFZTElBbEZCRUFnQVVHQUFra05BU0FDSUFGQkJHcFBCRUFnQWlBQmEwR3dKU2dDQUVFQmRFMEVRQ0FBRHdzTERBRUxJQUlnQVU4RVFDQUNJQUZySWdOQkQwMEVRQ0FBRHdzZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBU0FEUVFOeU5nSUVJQWNnQnlnQ0FFRUJjallDQUNBQklBTVFZaUFBRHd0QjZDRW9BZ0FnQlVZRVFFSGNJU2dDQUNBQ2FpSURJQUZORFFFZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBaUFESUFGcklnRkJBWEkyQWdSQjZDRWdBallDQUVIY0lTQUJOZ0lBSUFBUEMwSGtJU2dDQUNBRlJnUkFRZGdoS0FJQUlBSnFJZ0lnQVVrTkFTQUNJQUZySWdOQkQwc0VRQ0FLSUFoQkFYRWdBWEpCQW5JMkFnQWdBQ0FCYWlJQklBTkJBWEkyQWdRZ0FDQUNhaUlDSUFNMkFnQWdBa0VFYWlJQ0lBSW9BZ0JCZm5FMkFnQUZJQW9nQ0VFQmNTQUNja0VDY2pZQ0FDQUFJQUpxUVFScUlnRWdBU2dDQUVFQmNqWUNBRUVBSVFGQkFDRURDMEhZSVNBRE5nSUFRZVFoSUFFMkFnQWdBQThMSUFSQkFuRU5BQ0FFUVhoeElBSnFJZ3dnQVVrTkFDQU1JQUZySVEwZ0JFRURkaUVDQWtBZ0JFR0FBa2tFUUNBRktBSU1JUVlnQlNnQ0NDSUVJQUpCQTNSQitDRnFJZ2RIQkVBZ0N5QUVTd1JBRUFZTElBUW9BZ3dnQlVjRVFCQUdDd3NnQmlBRVJnUkFRZEFoUWRBaEtBSUFRUUVnQW5SQmYzTnhOZ0lBREFJTElBWWdCMFlFUUNBR1FRaHFJUU1GSUFzZ0Jrc0VRQkFHQ3lBR1FRaHFJZ0lvQWdBZ0JVWUVRQ0FDSVFNRkVBWUxDeUFFSUFZMkFnd2dBeUFFTmdJQUJTQUZLQUlZSVFrQ1FDQUZLQUlNSWdNZ0JVWUVRQ0FGUVJCcUlnSkJCR29pQkNnQ0FDSURCRUFnQkNFQ0JTQUNLQUlBSWdORkRRSUxBMEFDUUNBRFFSUnFJZ1FvQWdBaUIwVUVRQ0FEUVJCcUlnUW9BZ0FpQjBVTkFRc2dCQ0VDSUFjaEF3d0JDd3NnQ3lBQ1N3UkFFQVlGSUFKQkFEWUNBQ0FESVFZTEJTQUxJQVVvQWdnaUFrc0VRQkFHQ3lBQ1FReHFJZ1FvQWdBZ0JVY0VRQkFHQ3lBRFFRaHFJZ2NvQWdBZ0JVWUVRQ0FFSUFNMkFnQWdCeUFDTmdJQUlBTWhCZ1VRQmdzTEN5QUpCRUFnQlNnQ0hDSURRUUowUVlBa2FpSUNLQUlBSUFWR0JFQWdBaUFHTmdJQUlBWkZCRUJCMUNGQjFDRW9BZ0JCQVNBRGRFRi9jM0UyQWdBTUJBc0ZRZUFoS0FJQUlBbExCRUFRQmdVZ0NVRVFhaUlESUFsQkZHb2dBeWdDQUNBRlJoc2dCallDQUNBR1JRMEVDd3RCNENFb0FnQWlBaUFHU3dSQUVBWUxJQVlnQ1RZQ0dDQUZRUkJxSWdRb0FnQWlBd1JBSUFJZ0Ewc0VRQkFHQlNBR0lBTTJBaEFnQXlBR05nSVlDd3NnQkNnQ0JDSURCRUJCNENFb0FnQWdBMHNFUUJBR0JTQUdJQU0yQWhRZ0F5QUdOZ0lZQ3dzTEN3c2dEVUVRU1FSQUlBb2dDRUVCY1NBTWNrRUNjallDQUNBQUlBeHFRUVJxSWdFZ0FTZ0NBRUVCY2pZQ0FBVWdDaUFJUVFGeElBRnlRUUp5TmdJQUlBQWdBV29pQVNBTlFRTnlOZ0lFSUFBZ0RHcEJCR29pQXlBREtBSUFRUUZ5TmdJQUlBRWdEUkJpQ3lBQUR3dEJBQXZ4RUFFT2Z3SkFJQUFnQVdvaEJnSkFJQUFvQWdRaUIwRUJjUVJBSUFBaEFpQUJJUVFGSUFBb0FnQWhCU0FIUVFOeFJRUkFEd3NnQUNBRmF5SUFRZUFoS0FJQUlneEpCRUFRQmdzZ0JTQUJhaUVCUWVRaEtBSUFJQUJHQkVBZ0JrRUVhaUlFS0FJQUlnSkJBM0ZCQTBjRVFDQUFJUUlnQVNFRURBTUxRZGdoSUFFMkFnQWdCQ0FDUVg1eE5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFFMkFnQVBDeUFGUVFOMklRY2dCVUdBQWtrRVFDQUFLQUlNSVFJZ0FDZ0NDQ0lGSUFkQkEzUkIrQ0ZxSWdSSEJFQWdEQ0FGU3dSQUVBWUxJQVVvQWd3Z0FFY0VRQkFHQ3dzZ0FpQUZSZ1JBUWRBaFFkQWhLQUlBUVFFZ0IzUkJmM054TmdJQUlBQWhBaUFCSVFRTUF3c2dBaUFFUmdSQUlBSkJDR29oQXdVZ0RDQUNTd1JBRUFZTElBSkJDR29pQkNnQ0FDQUFSZ1JBSUFRaEF3VVFCZ3NMSUFVZ0FqWUNEQ0FESUFVMkFnQWdBQ0VDSUFFaEJBd0NDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnTWdBRVlFUUNBQVFSQnFJZ1ZCQkdvaUJ5Z0NBQ0lEQkVBZ0J5RUZCU0FGS0FJQUlnTkZEUUlMQTBBQ1FDQURRUlJxSWdjb0FnQWlDMFVFUUNBRFFSQnFJZ2NvQWdBaUMwVU5BUXNnQnlFRklBc2hBd3dCQ3dzZ0RDQUZTd1JBRUFZRklBVkJBRFlDQUNBRElRZ0xCU0FNSUFBb0FnZ2lCVXNFUUJBR0N5QUZRUXhxSWdjb0FnQWdBRWNFUUJBR0N5QURRUWhxSWdzb0FnQWdBRVlFUUNBSElBTTJBZ0FnQ3lBRk5nSUFJQU1oQ0FVUUJnc0xDeUFLQkVBZ0FDZ0NIQ0lEUVFKMFFZQWthaUlGS0FJQUlBQkdCRUFnQlNBSU5nSUFJQWhGQkVCQjFDRkIxQ0VvQWdCQkFTQURkRUYvYzNFMkFnQWdBQ0VDSUFFaEJBd0VDd1ZCNENFb0FnQWdDa3NFUUJBR0JTQUtRUkJxSWdNZ0NrRVVhaUFES0FJQUlBQkdHeUFJTmdJQUlBaEZCRUFnQUNFQ0lBRWhCQXdGQ3dzTFFlQWhLQUlBSWdVZ0NFc0VRQkFHQ3lBSUlBbzJBaGdnQUVFUWFpSUhLQUlBSWdNRVFDQUZJQU5MQkVBUUJnVWdDQ0FETmdJUUlBTWdDRFlDR0FzTElBY29BZ1FpQXdSQVFlQWhLQUlBSUFOTEJFQVFCZ1VnQ0NBRE5nSVVJQU1nQ0RZQ0dDQUFJUUlnQVNFRUN3VWdBQ0VDSUFFaEJBc0ZJQUFoQWlBQklRUUxDd3NnQmtIZ0lTZ0NBQ0lIU1FSQUVBWUxJQVpCQkdvaUFTZ0NBQ0lBUVFKeEJFQWdBU0FBUVg1eE5nSUFJQUlnQkVFQmNqWUNCQ0FDSUFScUlBUTJBZ0FGUWVnaEtBSUFJQVpHQkVCQjNDRkIzQ0VvQWdBZ0JHb2lBRFlDQUVIb0lTQUNOZ0lBSUFJZ0FFRUJjallDQkNBQ1FlUWhLQUlBUndSQUR3dEI1Q0ZCQURZQ0FFSFlJVUVBTmdJQUR3dEI1Q0VvQWdBZ0JrWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFJMkFnQWdBaUFBUVFGeU5nSUVJQUlnQUdvZ0FEWUNBQThMSUFCQmVIRWdCR29oQkNBQVFRTjJJUVVDUUNBQVFZQUNTUVJBSUFZb0Fnd2hBU0FHS0FJSUlnTWdCVUVEZEVINElXb2lBRWNFUUNBSElBTkxCRUFRQmdzZ0F5Z0NEQ0FHUndSQUVBWUxDeUFCSUFOR0JFQkIwQ0ZCMENFb0FnQkJBU0FGZEVGL2MzRTJBZ0FNQWdzZ0FTQUFSZ1JBSUFGQkNHb2hEZ1VnQnlBQlN3UkFFQVlMSUFGQkNHb2lBQ2dDQUNBR1JnUkFJQUFoRGdVUUJnc0xJQU1nQVRZQ0RDQU9JQU0yQWdBRklBWW9BaGdoQ0FKQUlBWW9BZ3dpQUNBR1JnUkFJQVpCRUdvaUFVRUVhaUlES0FJQUlnQUVRQ0FESVFFRklBRW9BZ0FpQUVVTkFnc0RRQUpBSUFCQkZHb2lBeWdDQUNJRlJRUkFJQUJCRUdvaUF5Z0NBQ0lGUlEwQkN5QURJUUVnQlNFQURBRUxDeUFISUFGTEJFQVFCZ1VnQVVFQU5nSUFJQUFoQ1FzRklBY2dCaWdDQ0NJQlN3UkFFQVlMSUFGQkRHb2lBeWdDQUNBR1J3UkFFQVlMSUFCQkNHb2lCU2dDQUNBR1JnUkFJQU1nQURZQ0FDQUZJQUUyQWdBZ0FDRUpCUkFHQ3dzTElBZ0VRQ0FHS0FJY0lnQkJBblJCZ0NScUlnRW9BZ0FnQmtZRVFDQUJJQWsyQWdBZ0NVVUVRRUhVSVVIVUlTZ0NBRUVCSUFCMFFYOXpjVFlDQUF3RUN3VkI0Q0VvQWdBZ0NFc0VRQkFHQlNBSVFSQnFJZ0FnQ0VFVWFpQUFLQUlBSUFaR0d5QUpOZ0lBSUFsRkRRUUxDMEhnSVNnQ0FDSUJJQWxMQkVBUUJnc2dDU0FJTmdJWUlBWkJFR29pQXlnQ0FDSUFCRUFnQVNBQVN3UkFFQVlGSUFrZ0FEWUNFQ0FBSUFrMkFoZ0xDeUFES0FJRUlnQUVRRUhnSVNnQ0FDQUFTd1JBRUFZRklBa2dBRFlDRkNBQUlBazJBaGdMQ3dzTEN5QUNJQVJCQVhJMkFnUWdBaUFFYWlBRU5nSUFJQUpCNUNFb0FnQkdCRUJCMkNFZ0JEWUNBQThMQ3lBRVFRTjJJUUVnQkVHQUFra0VRQ0FCUVFOMFFmZ2hhaUVBUWRBaEtBSUFJZ1JCQVNBQmRDSUJjUVJBUWVBaEtBSUFJQUJCQ0dvaUFTZ0NBQ0lFU3dSQUVBWUZJQVFoRFNBQklROExCVUhRSVNBRUlBRnlOZ0lBSUFBaERTQUFRUWhxSVE4TElBOGdBallDQUNBTklBSTJBZ3dnQWlBTk5nSUlJQUlnQURZQ0RBOExJQVJCQ0hZaUFBUi9JQVJCLy8vL0Iwc0VmMEVmQlNBRVFRNGdBQ0FBUVlEK1AycEJFSFpCQ0hFaUFIUWlBVUdBNEI5cVFSQjJRUVJ4SWdNZ0FISWdBU0FEZENJQVFZQ0FEMnBCRUhaQkFuRWlBWEpySUFBZ0FYUkJEM1pxSWdCQkIycDJRUUZ4SUFCQkFYUnlDd1ZCQUFzaUFVRUNkRUdBSkdvaEFDQUNJQUUyQWh3Z0FrRUFOZ0lVSUFKQkFEWUNFRUhVSVNnQ0FDSURRUUVnQVhRaUJYRkZCRUJCMUNFZ0F5QUZjallDQUNBQUlBSTJBZ0FNQVFzQ1FDQUFLQUlBSWdBb0FnUkJlSEVnQkVZRWZ5QUFCU0FFUVFCQkdTQUJRUUYyYXlBQlFSOUdHM1FoQXdOQUlBQkJFR29nQTBFZmRrRUNkR29pQlNnQ0FDSUJCRUFnQTBFQmRDRURJQUVvQWdSQmVIRWdCRVlOQXlBQklRQU1BUXNMUWVBaEtBSUFJQVZMQkVBUUJnc2dCU0FDTmdJQURBSUxJUUVMUWVBaEtBSUFJZ1FnQVVFSWFpSURLQUlBSWdCTklBUWdBVTF4UlFSQUVBWUxJQUFnQWpZQ0RDQURJQUkyQWdBZ0FpQUFOZ0lJSUFJZ0FUWUNEQ0FDUVFBMkFoZ1BDeUFDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0FzRkFFSEFKUXRRQVFKL0FuOGdBZ1IvQTBBZ0FDd0FBQ0lESUFFc0FBQWlCRVlFUUNBQVFRRnFJUUFnQVVFQmFpRUJRUUFnQWtGL2FpSUNSUTBER2d3QkN3c2dBMEgvQVhFZ0JFSC9BWEZyQlVFQUN3c2lBQXVwQVFFQ2Z5QUJRZjhIU2dSQUlBQkVBQUFBQUFBQTRIK2lJZ0JFQUFBQUFBQUE0SCtpSUFBZ0FVSCtEMG9pQWhzaEFDQUJRWUp3YWlJRFFmOEhJQU5CL3dkSUd5QUJRWUY0YWlBQ0d5RUJCU0FCUVlKNFNBUkFJQUJFQUFBQUFBQUFFQUNpSWdCRUFBQUFBQUFBRUFDaUlBQWdBVUdFY0VnaUFoc2hBQ0FCUWZ3UGFpSURRWUo0SUFOQmduaEtHeUFCUWY0SGFpQUNHeUVCQ3dzZ0FDQUJRZjhIYXExQ05JYS9vZ3VhQkFFSWZ5TUdJUW9qQmtIUUFXb2tCaUFLSWdkQndBRnFJZ1JDQVRjREFBSkFJQUlnQVd3aUN3UkFRUUFnQW1zaENTQUhJQUkyQWdRZ0J5QUNOZ0lBUVFJaEJpQUNJUVVnQWlFQkEwQWdCeUFHUVFKMGFpQUZJQUpxSUFGcUlnZzJBZ0FnQmtFQmFpRUdJQWdnQzBrRVFDQUJJUVVnQ0NFQkRBRUxDeUFBSUF0cUlBbHFJZ1lnQUVzRVFDQUdJUWhCQVNFQlFRRWhCUU5BSUFWQkEzRkJBMFlFZnlBQUlBSWdBeUFCSUFjUVp5QUVRUUlRYUNBQlFRSnFCU0FISUFGQmYyb2lCVUVDZEdvb0FnQWdDQ0FBYTBrRVFDQUFJQUlnQXlBQklBY1Fad1VnQUNBQ0lBTWdCQ0FCUVFBZ0J4QnBDeUFCUVFGR0JIOGdCRUVCRUdwQkFBVWdCQ0FGRUdwQkFRc0xJUUVnQkNBRUtBSUFRUUZ5SWdVMkFnQWdBQ0FDYWlJQUlBWkpEUUFMSUFFaEJnVkJBU0VHUVFFaEJRc2dBQ0FDSUFNZ0JDQUdRUUFnQnhCcElBUkJCR29oQ0NBQUlRRWdCaUVBQTBBQ2Z3SkFJQUJCQVVZZ0JVRUJSbkVFZnlBSUtBSUFSUTBGREFFRklBQkJBa2dOQVNBRVFRSVFhaUFFSUFRb0FnQkJCM00yQWdBZ0JFRUJFR2dnQVNBSElBQkJmbW9pQlVFQ2RHb29BZ0JySUFscUlBSWdBeUFFSUFCQmYycEJBU0FIRUdrZ0JFRUJFR29nQkNBRUtBSUFRUUZ5SWdZMkFnQWdBU0FKYWlJQklBSWdBeUFFSUFWQkFTQUhFR2tnQlNFQUlBWUxEQUVMSUFRZ0JCQnJJZ1VRYUNBQklBbHFJUUVnQlNBQWFpRUFJQVFvQWdBTElRVU1BQUFMQUFzTElBb2tCZ3ZnQVFFSWZ5TUdJUW9qQmtId0FXb2tCaUFLSWdnZ0FEWUNBQUpBSUFOQkFVb0VRRUVBSUFGcklRd2dBQ0VHSUFNaENVRUJJUU1nQUNFRkEwQWdCU0FHSUF4cUlnY2dCQ0FKUVg1cUlnWkJBblJxS0FJQWF5SUFJQUpCQTNFUkFBQkJmMG9FUUNBRklBY2dBa0VEY1JFQUFFRi9TZzBEQ3lBQUlBY2dBa0VEY1JFQUFFRi9TaUVGSUFnZ0EwRUNkR29oQ3lBRFFRRnFJUU1nQlFSL0lBc2dBRFlDQUNBSlFYOXFCU0FMSUFjMkFnQWdCeUVBSUFZTElnbEJBVW9FUUNBQUlRWWdDQ2dDQUNFRkRBRUxDd1ZCQVNFREN3c2dBU0FJSUFNUWJTQUtKQVlMV1FFRGZ5QUFRUVJxSVFJZ0FDQUJRUjlMQkg4Z0FDQUNLQUlBSWdNMkFnQWdBa0VBTmdJQUlBRkJZR29oQVVFQUJTQUFLQUlBSVFNZ0FpZ0NBQXNpQkVFZ0lBRnJkQ0FESUFGMmNqWUNBQ0FDSUFRZ0FYWTJBZ0FMalFNQkIzOGpCaUVLSXdaQjhBRnFKQVlnQ2tIb0FXb2lDU0FES0FJQUlnYzJBZ0FnQ1VFRWFpSU1JQU1vQWdRaUF6WUNBQ0FLSWdzZ0FEWUNBQUpBQWtBZ0IwRUJSeUFEY2dSQVFRQWdBV3NoRFNBQUlBWWdCRUVDZEdvb0FnQnJJZ2dnQUNBQ1FRTnhFUUFBUVFGSUJFQkJBU0VEQlVFQklRY2dCVVVoQlNBQUlRTWdDQ0VBQTBBZ0JTQUVRUUZLY1FSQUlBWWdCRUYrYWtFQ2RHb29BZ0FoQlNBRElBMXFJZ2dnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTElBZ2dCV3NnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTEN5QUhRUUZxSVFVZ0N5QUhRUUowYWlBQU5nSUFJQWtnQ1JCcklnTVFhQ0FESUFScUlRUWdDU2dDQUVFQlJ5QU1LQUlBUVFCSGNrVUVRQ0FBSVFNTUJBc2dBQ0FHSUFSQkFuUnFLQUlBYXlJSUlBc29BZ0FnQWtFRGNSRUFBRUVCU0FSL0lBVWhBMEVBQlNBQUlRTWdCU0VIUVFFaEJTQUlJUUFNQVFzaEJRc0xCVUVCSVFNTElBVkZCRUFnQXlFRklBQWhBd3dCQ3d3QkN5QUJJQXNnQlJCdElBTWdBU0FDSUFRZ0JoQm5DeUFLSkFZTFZ3RURmeUFBUVFScUlnSWdBVUVmU3dSL0lBSWdBQ2dDQUNJRE5nSUFJQUJCQURZQ0FDQUJRV0JxSVFGQkFBVWdBaWdDQUNFRElBQW9BZ0FMSWdSQklDQUJhM1lnQXlBQmRISTJBZ0FnQUNBRUlBRjBOZ0lBQ3ljQkFYOGdBQ2dDQUVGL2FoQnNJZ0VFZnlBQkJTQUFLQUlFRUd3aUFFRWdha0VBSUFBYkN3czVBUUovSUFBRVFDQUFRUUZ4UlFSQUEwQWdBVUVCYWlFQklBQkJBWFloQWlBQVFRSnhSUVJBSUFJaEFBd0JDd3NMQlVFZ0lRRUxJQUVMcEFFQkJYOGpCaUVGSXdaQmdBSnFKQVlnQlNFREFrQWdBa0VDVGdSQUlBRWdBa0VDZEdvaUJ5QUROZ0lBSUFBRVFBTkFJQU1nQVNnQ0FDQUFRWUFDSUFCQmdBSkpHeUlFRUhrYVFRQWhBd05BSUFFZ0EwRUNkR29pQmlnQ0FDQUJJQU5CQVdvaUEwRUNkR29vQWdBZ0JCQjVHaUFHSUFZb0FnQWdCR28yQWdBZ0F5QUNSdzBBQ3lBQUlBUnJJZ0JGRFFNZ0J5Z0NBQ0VEREFBQUN3QUxDd3NnQlNRR0MvNElBd2QvQVg0RWZDTUdJUWNqQmtFd2FpUUdJQWRCRUdvaEJDQUhJUVVnQUwwaUNVSS9pS2NoQmdKL0FrQWdDVUlnaUtjaUFrSC8vLy8vQjNFaUEwSDcxTDJBQkVrRWZ5QUNRZi8vUDNGQis4TWtSZzBCSUFaQkFFY2hBaUFEUWYyeWk0QUVTUVIvSUFJRWZ5QUJJQUJFQUFCQVZQc2grVCtnSWdCRU1XTmlHbUcwMEQyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQTlvRGtEQ0VGL0JTQUJJQUJFQUFCQVZQc2grYitnSWdCRU1XTmlHbUcwMEwyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQzlvRGtEQ0VFQkN3VWdBZ1IvSUFFZ0FFUUFBRUJVK3lFSlFLQWlBRVF4WTJJYVliVGdQYUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEQyZ09RTUlRWDRGSUFFZ0FFUUFBRUJVK3lFSndLQWlBRVF4WTJJYVliVGd2YUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEwyZ09RTUlRUUlMQ3dVZ0EwRzhqUEdBQkVrRVFDQURRYjM3MTRBRVNRUkFJQU5CL0xMTGdBUkdEUU1nQmdSQUlBRWdBRVFBQURCL2ZOa1NRS0FpQUVUS2xKT25rUTdwUGFBaUNqa0RBQ0FCSUFBZ0NxRkV5cFNUcDVFTzZUMmdPUU1JUVgwTUJRVWdBU0FBUkFBQU1IOTgyUkxBb0NJQVJNcVVrNmVSRHVtOW9DSUtPUU1BSUFFZ0FDQUtvVVRLbEpPbmtRN3B2YUE1QXdoQkF3d0ZDd0FGSUFOQis4UGtnQVJHRFFNZ0JnUkFJQUVnQUVRQUFFQlUreUVaUUtBaUFFUXhZMklhWWJUd1BhQWlDamtEQUNBQklBQWdDcUZFTVdOaUdtRzA4RDJnT1FNSVFYd01CUVVnQVNBQVJBQUFRRlQ3SVJuQW9DSUFSREZqWWhwaHRQQzlvQ0lLT1FNQUlBRWdBQ0FLb1VReFkySWFZYlR3dmFBNUF3aEJCQXdGQ3dBTEFBc2dBMEg3dytTSkJFa05BU0FEUWYvL3YvOEhTd1JBSUFFZ0FDQUFvU0lBT1FNSUlBRWdBRGtEQUVFQURBTUxJQWxDLy8vLy8vLy8vd2VEUW9DQWdJQ0FnSUN3d1FDRXZ5RUFRUUFoQWdOQUlBUWdBa0VEZEdvZ0FLcTNJZ281QXdBZ0FDQUtvVVFBQUFBQUFBQndRYUloQUNBQ1FRRnFJZ0pCQWtjTkFBc2dCQ0FBT1FNUUlBQkVBQUFBQUFBQUFBQmhCRUJCQVNFQ0EwQWdBa0YvYWlFSUlBUWdBa0VEZEdvckF3QkVBQUFBQUFBQUFBQmhCRUFnQ0NFQ0RBRUxDd1ZCQWlFQ0N5QUVJQVVnQTBFVWRrSHFkMm9nQWtFQmFrRUJFRzhoQWlBRkt3TUFJUUFnQmdSL0lBRWdBSm81QXdBZ0FTQUZLd01JbWprRENFRUFJQUpyQlNBQklBQTVBd0FnQVNBRkt3TUlPUU1JSUFJTEN3d0JDeUFBUklQSXlXMHdYK1Evb2tRQUFBQUFBQUE0UTZCRUFBQUFBQUFBT01PZ0lndXFJUUlnQVNBQUlBdEVBQUJBVlBzaCtUK2lvU0lLSUF0RU1XTmlHbUcwMEQyaUlnQ2hJZ3c1QXdBZ0EwRVVkaUlJSUF5OVFqU0lwMEgvRDNGclFSQktCRUFnQzBSemNBTXVpaG1qTzZJZ0NpQUtJQXRFQUFCZ0dtRzAwRDJpSWdDaElncWhJQUNob1NFQUlBRWdDaUFBb1NJTU9RTUFJQXRFd1VrZ0pacURlem1pSUFvZ0NpQUxSQUFBQUM2S0dhTTdvaUlOb1NJTG9TQU5vYUVoRFNBSUlBeTlRalNJcDBIL0QzRnJRVEZLQkVBZ0FTQUxJQTJoSWd3NUF3QWdEU0VBSUFzaENnc0xJQUVnQ2lBTW9TQUFvVGtEQ0NBQ0N5RUJJQWNrQmlBQkMvOFFBaFovQTN3akJpRVBJd1pCc0FScUpBWWdEMEhBQW1vaEVDQUNRWDFxUVJodElnVkJBQ0FGUVFCS0d5RVNJQVJCQW5SQm9CQnFLQUlBSWcwZ0EwRi9haUlIYWtFQVRnUkFJQTBnQTJvaENTQVNJQWRySVFVRFFDQVFJQVpCQTNScUlBVkJBRWdFZkVRQUFBQUFBQUFBQUFVZ0JVRUNkRUd3RUdvb0FnQzNDeUliT1FNQUlBVkJBV29oQlNBR1FRRnFJZ1lnQ1VjTkFBc0xJQTlCNEFOcUlRd2dEMEdnQVdvaENpQVBJUTRnQWtGb2FpQVNRV2hzSWhacUlRa2dBMEVBU2lFSVFRQWhCUU5BSUFnRVFDQUZJQWRxSVF0RUFBQUFBQUFBQUFBaEcwRUFJUVlEUUNBYklBQWdCa0VEZEdvckF3QWdFQ0FMSUFaclFRTjBhaXNEQUtLZ0lSc2dCa0VCYWlJR0lBTkhEUUFMQlVRQUFBQUFBQUFBQUNFYkN5QU9JQVZCQTNScUlCczVBd0FnQlVFQmFpRUdJQVVnRFVnRVFDQUdJUVVNQVFzTElBbEJBRW9oRTBFWUlBbHJJUlJCRnlBSmF5RVhJQWxGSVJnZ0EwRUFTaUVaSUEwaEJRSkFBa0FDUUFOQUlBNGdCVUVEZEdvckF3QWhHeUFGUVFCS0lnc0VRQ0FGSVFaQkFDRUhBMEFnRENBSFFRSjBhaUFiSUJ0RUFBQUFBQUFBY0Q2aXFyY2lHMFFBQUFBQUFBQndRYUtocWpZQ0FDQU9JQVpCZjJvaUNFRURkR29yQXdBZ0c2QWhHeUFIUVFGcUlRY2dCa0VCU2dSQUlBZ2hCZ3dCQ3dzTElCc2dDUkJsSWhzZ0cwUUFBQUFBQUFEQVA2S2NSQUFBQUFBQUFDQkFvcUVpRzZvaEJpQWJJQWEzb1NFYkFrQUNRQUpBSUJNRWZ5QU1JQVZCZjJwQkFuUnFJZ2dvQWdBaUVTQVVkU0VISUFnZ0VTQUhJQlIwYXlJSU5nSUFJQWdnRjNVaENDQUhJQVpxSVFZTUFRVWdHQVIvSUF3Z0JVRi9ha0VDZEdvb0FnQkJGM1VoQ0F3Q0JTQWJSQUFBQUFBQUFPQS9aZ1IvUVFJaENBd0VCVUVBQ3dzTElRZ01BZ3NnQ0VFQVNnMEFEQUVMSUFZaEJ5QUxCRUJCQUNFR1FRQWhDd05BSUF3Z0MwRUNkR29pR2lnQ0FDRVJBa0FDUUNBR0JIOUIvLy8vQnlFVkRBRUZJQkVFZjBFQklRWkJnSUNBQ0NFVkRBSUZRUUFMQ3lFR0RBRUxJQm9nRlNBUmF6WUNBQXNnQzBFQmFpSUxJQVZIRFFBTElBWWhDd1ZCQUNFTEN5QUhRUUZxSVFZQ1FDQVRCRUFDUUFKQUFrQWdDVUVCYXc0Q0FBRUNDeUFNSUFWQmYycEJBblJxSWdjZ0J5Z0NBRUgvLy84RGNUWUNBQXdEQ3lBTUlBVkJmMnBCQW5ScUlnY2dCeWdDQUVILy8vOEJjVFlDQUFzTEN5QUlRUUpHQkVCRUFBQUFBQUFBOEQ4Z0c2RWhHeUFMQkVBZ0cwUUFBQUFBQUFEd1B5QUpFR1doSVJzTFFRSWhDQXNMSUJ0RUFBQUFBQUFBQUFCaURRSWdCU0FOU2dSQVFRQWhDeUFGSVFjRFFDQU1JQWRCZjJvaUIwRUNkR29vQWdBZ0MzSWhDeUFISUExS0RRQUxJQXNOQWd0QkFTRUdBMEFnQmtFQmFpRUhJQXdnRFNBR2EwRUNkR29vQWdCRkJFQWdCeUVHREFFTEN5QUdJQVZxSVFjRFFDQVFJQVVnQTJvaUNFRURkR29nQlVFQmFpSUdJQkpxUVFKMFFiQVFhaWdDQUxjNUF3QWdHUVJBUkFBQUFBQUFBQUFBSVJ0QkFDRUZBMEFnR3lBQUlBVkJBM1JxS3dNQUlCQWdDQ0FGYTBFRGRHb3JBd0Npb0NFYklBVkJBV29pQlNBRFJ3MEFDd1ZFQUFBQUFBQUFBQUFoR3dzZ0RpQUdRUU4wYWlBYk9RTUFJQVlnQjBnRVFDQUdJUVVNQVFzTElBY2hCUXdBQUFzQUN5QUpJUUFEUUNBQVFXaHFJUUFnRENBRlFYOXFJZ1ZCQW5ScUtBSUFSUTBBQ3lBQUlRSWdCU0VBREFFTElBd2dHMEVBSUFsckVHVWlHMFFBQUFBQUFBQndRV1lFZnlBTUlBVkJBblJxSUJzZ0cwUUFBQUFBQUFCd1BxS3FJZ08zUkFBQUFBQUFBSEJCb3FHcU5nSUFJQllnQW1vaEFpQUZRUUZxQlNBSklRSWdHNm9oQXlBRkN5SUFRUUowYWlBRE5nSUFDMFFBQUFBQUFBRHdQeUFDRUdVaEd5QUFRWDlLSWdjRVFDQUFJUUlEUUNBT0lBSkJBM1JxSUJzZ0RDQUNRUUowYWlnQ0FMZWlPUU1BSUJ0RUFBQUFBQUFBY0Q2aUlSc2dBa0YvYWlFRElBSkJBRW9FUUNBRElRSU1BUXNMSUFjRVFDQUFJUUlEUUNBQUlBSnJJUWxCQUNFRFJBQUFBQUFBQUFBQUlSc0RRQ0FiSUFOQkEzUkJ3QkpxS3dNQUlBNGdBeUFDYWtFRGRHb3JBd0Npb0NFYklBTkJBV29oQlNBRElBMU9JQU1nQ1U5eVJRUkFJQVVoQXd3QkN3c2dDaUFKUVFOMGFpQWJPUU1BSUFKQmYyb2hBeUFDUVFCS0JFQWdBeUVDREFFTEN3c0xBa0FDUUFKQUFrQWdCQTRFQUFFQkFnTUxJQWNFUUVRQUFBQUFBQUFBQUNFYkEwQWdHeUFLSUFCQkEzUnFLd01Bb0NFYklBQkJmMm9oQWlBQVFRQktCRUFnQWlFQURBRUxDd1ZFQUFBQUFBQUFBQUFoR3dzZ0FTQWJtaUFiSUFnYk9RTUFEQUlMSUFjRVFFUUFBQUFBQUFBQUFDRWJJQUFoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FYOXFJUU1nQWtFQVNnUkFJQU1oQWd3QkN3c0ZSQUFBQUFBQUFBQUFJUnNMSUFFZ0d5QWJtaUFJUlNJRUd6a0RBQ0FLS3dNQUlCdWhJUnNnQUVFQlRnUkFRUUVoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FRRnFJUU1nQWlBQVJ3UkFJQU1oQWd3QkN3c0xJQUVnR3lBYm1pQUVHemtEQ0F3QkN5QUFRUUJLQkVBZ0NpQUFJZ0pCQTNScUt3TUFJUnNEUUNBS0lBSkJmMm9pQTBFRGRHb2lCQ3NEQUNJZElCdWdJUndnQ2lBQ1FRTjBhaUFiSUIwZ0hLR2dPUU1BSUFRZ0hEa0RBQ0FDUVFGS0JFQWdBeUVDSUJ3aEd3d0JDd3NnQUVFQlNpSUVCRUFnQ2lBQUlnSkJBM1JxS3dNQUlSc0RRQ0FLSUFKQmYyb2lBMEVEZEdvaUJTc0RBQ0lkSUJ1Z0lSd2dDaUFDUVFOMGFpQWJJQjBnSEtHZ09RTUFJQVVnSERrREFDQUNRUUpLQkVBZ0F5RUNJQndoR3d3QkN3c2dCQVJBUkFBQUFBQUFBQUFBSVJzRFFDQWJJQW9nQUVFRGRHb3JBd0NnSVJzZ0FFRi9haUVDSUFCQkFrb0VRQ0FDSVFBTUFRc0xCVVFBQUFBQUFBQUFBQ0ViQ3dWRUFBQUFBQUFBQUFBaEd3c0ZSQUFBQUFBQUFBQUFJUnNMSUFvckF3QWhIQ0FJQkVBZ0FTQWNtamtEQUNBQklBb3JBd2lhT1FNSUlBRWdHNW81QXhBRklBRWdIRGtEQUNBQklBb3JBd2c1QXdnZ0FTQWJPUU1RQ3dzZ0R5UUdJQVpCQjNFTGx3RUJBM3dnQUNBQW9pSURJQU1nQTZLaUlBTkVmTlhQV2pyWjVUMmlST3VjSzRybTVWcStvS0lnQXlBRFJIMytzVmZqSGNjK29rVFZZY0Vab0FFcXY2Q2lSS2I0RUJFUkVZRS9vS0FoQlNBRElBQ2lJUVFnQUNBRVJFbFZWVlZWVmNVL29pQURJQUZFQUFBQUFBQUE0RCtpSUFRZ0JhS2hvaUFCb2FDaElBUWdBeUFGb2tSSlZWVlZWVlhGdjZDaUlBQ2dJQUliSWdBTENBQWdBQ0FCRUdVTGxBRUJCSHdnQUNBQW9pSUNJQUtpSVFORUFBQUFBQUFBOEQ4Z0FrUUFBQUFBQUFEZ1A2SWlCS0VpQlVRQUFBQUFBQUR3UHlBRm9TQUVvU0FDSUFJZ0FpQUNSSkFWeXhtZ0Fmbytva1IzVWNFV2JNRld2NkNpUkV4VlZWVlZWYVUvb0tJZ0F5QURvaUFDUk1TeHRMMmU3aUUrSUFKRTFEaUl2dW42cUQyaW9hSkVyVktjZ0U5K2tyNmdvcUNpSUFBZ0FhS2hvS0FMeEFFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ2ZDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkh3Z0EwR2V3WnJ5QTBrRWZFUUFBQUFBQUFEd1B3VWdBRVFBQUFBQUFBQUFBQkJ5Q3dVZ0FDQUFvU0FEUWYvL3YvOEhTdzBCR2dKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2dRY2d3RUN5QUJLd01BSUFFckF3aEJBUkJ3bWd3REN5QUJLd01BSUFFckF3Z1FjcG9NQWdzZ0FTc0RBQ0FCS3dNSVFRRVFjQXNMSVFBZ0FpUUdJQUFMeXdFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ1FDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkVBZ0EwR0FnTUR5QTA4RVFDQUFSQUFBQUFBQUFBQUFRUUFRY0NFQUN3VWdBMEgvLzcvL0Iwc0VRQ0FBSUFDaElRQU1BZ3NDUUFKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2hCQVJCd0lRQU1CUXNnQVNzREFDQUJLd01JRUhJaEFBd0VDeUFCS3dNQUlBRXJBd2hCQVJCd21pRUFEQU1MSUFFckF3QWdBU3NEQ0JCeW1pRUFDd3NMSUFJa0JpQUFDNXNEQXdKL0FYNENmQ0FBdlNJRFFqK0lweUVCQW53Q2Z3SkFJQU5DSUlpblFmLy8vLzhIY1NJQ1FhckdtSVFFU3dSOElBTkMvLy8vLy8vLy8vLy9BSU5DZ0lDQWdJQ0FnUGovQUZZRVFDQUFEd3NnQUVUdk9mcitRaTZHUUdRRVFDQUFSQUFBQUFBQUFPQi9vZzhGSUFCRTByeDYzU3NqaHNCaklBQkVVVEF0MVJCSmg4QmpjVVVOQWtRQUFBQUFBQUFBQUNJQUR3c0FCU0FDUWNMYzJQNERTd1JBSUFKQnNjWEMvd05MRFFJZ0FVRUJjeUFCYXd3REN5QUNRWUNBd1BFRFN3UjhRUUFoQVNBQUJTQUFSQUFBQUFBQUFQQS9vQThMQ3d3Q0N5QUFSUDZDSzJWSEZmYy9vaUFCUVFOMFFZQVRhaXNEQUtDcUN5RUJJQUFnQWJjaUJFUUFBT0QrUWk3bVA2S2hJZ0FnQkVSMlBIazE3em5xUGFJaUJhRUxJUVFnQUNBRUlBUWdCQ0FFb2lJQUlBQWdBQ0FBSUFCRTBLUytjbWszWmo2aVJQRnIwc1ZCdmJ1K29LSkVMTjRscjJwV0VUK2dva1NUdmI0V2JNRm12NkNpUkQ1VlZWVlZWY1Uvb0tLaElnQ2lSQUFBQUFBQUFBQkFJQUNob3lBRm9hQkVBQUFBQUFBQThEK2dJUUFnQVVVRVFDQUFEd3NnQUNBQkVHVUxud01EQW44QmZnVjhJQUM5SWdOQ0lJaW5JUUVDZnlBRFFnQlRJZ0lnQVVHQWdNQUFTWElFZnlBRFF2Ly8vLy8vLy8vLy93Q0RRZ0JSQkVCRUFBQUFBQUFBOEw4Z0FDQUFvcU1QQ3lBQ1JRUkFJQUJFQUFBQUFBQUFVRU9pdlNJRFFpQ0lweUVCSUFOQy8vLy8vdytESVFOQnkzY01BZ3NnQUNBQW9VUUFBQUFBQUFBQUFLTVBCU0FCUWYvL3YvOEhTd1JBSUFBUEN5QURRdi8vLy84UGd5SURRZ0JSSUFGQmdJREEvd05HY1FSL1JBQUFBQUFBQUFBQUR3VkJnWGdMQ3dzaEFpQUJRZUsrSldvaUFVSC8vejl4UVo3Qm12OERhcTFDSUlZZ0E0Uy9SQUFBQUFBQUFQQy9vQ0lGSUFWRUFBQUFBQUFBNEQraW9pRUdJQVVnQlVRQUFBQUFBQUFBUUtDaklnY2dCNklpQ0NBSW9pRUVJQUlnQVVFVWRtcTNJZ0JFQUFEZy9rSXU1aitpSUFVZ0FFUjJQSGsxN3pucVBhSWdCeUFHSUFRZ0JDQUVSSi9HZU5BSm1zTS9va1N2ZUk0ZHhYSE1QNkNpUkFUNmw1bVptZGsvb0tJZ0NDQUVJQVFnQkVSRVVqN2ZFdkhDUDZKRTNnUExsbVJHeHorZ29rUlpreUtVSkVuU1A2Q2lSSk5WVlZWVlZlVS9vS0tnb0tLZ0lBYWhvS0FMOFE4REMzOENmZ2g4QWtBQ1FBSkFJQUc5SWcxQ0lJaW5JZ1ZCLy8vLy93ZHhJZ01nRGFjaUJuSkZCRUJFQUFBQUFBQUE4RDhQQ3lBQXZTSU9RaUNJcHlFSElBNm5JZ2hGSWdvZ0IwR0FnTUQvQTBaeEJFQkVBQUFBQUFBQThEOFBDeUFIUWYvLy8vOEhjU0lFUVlDQXdQOEhUUVJBSUFoQkFFY2dCRUdBZ01EL0IwWnhJQU5CZ0lEQS93ZExja1VFUUNBR1FRQkhJQU5CZ0lEQS93ZEdJZ3R4UlFSQUFrQUNRQUpBSUFkQkFFZ2lDVVVOQUNBRFFmLy8vNWtFU3dSL1FRSWhBZ3dCQlNBRFFmLy92LzhEU3dSL0lBTkJGSFloQWlBRFFmLy8vNGtFU3dSQVFRSWdCa0d6Q0NBQ2F5SUNkaUlNUVFGeGEwRUFJQXdnQW5RZ0JrWWJJUUlNQXdzZ0JnUi9RUUFGUVFJZ0EwR1RDQ0FDYXlJQ2RpSUdRUUZ4YTBFQUlBWWdBblFnQTBZYklRSU1CQXNGREFJTEN5RUNEQUlMSUFaRkRRQU1BUXNnQ3dSQUlBUkJnSURBZ0h4cUlBaHlSUVJBUkFBQUFBQUFBUEEvRHdzZ0JVRi9TaUVDSUFSQi8vKy8vd05MQkVBZ0FVUUFBQUFBQUFBQUFDQUNHdzhGUkFBQUFBQUFBQUFBSUFHYUlBSWJEd3NBQ3lBRFFZQ0F3UDhEUmdSQUlBQkVBQUFBQUFBQThEOGdBS01nQlVGL1Noc1BDeUFGUVlDQWdJQUVSZ1JBSUFBZ0FLSVBDeUFIUVg5S0lBVkJnSUNBL3dOR2NRUkFJQUNmRHdzTElBQ1pJUThnQ2dSQUlBUkZJQVJCZ0lDQWdBUnlRWUNBd1A4SFJuSUVRRVFBQUFBQUFBRHdQeUFQb3lBUElBVkJBRWdiSVFBZ0NVVUVRQ0FBRHdzZ0FpQUVRWUNBd0lCOGFuSUVRQ0FBbWlBQUlBSkJBVVliRHdzTUJRc0xBbndnQ1FSOEFrQUNRQUpBSUFJT0FnQUJBZ3NNQnd0RUFBQUFBQUFBOEw4TUFndEVBQUFBQUFBQThEOE1BUVZFQUFBQUFBQUE4RDhMQ3lFUkFud2dBMEdBZ0lDUEJFc0VmQ0FEUVlDQXdKOEVTd1JBSUFSQmdJREEvd05KQkVBakNrUUFBQUFBQUFBQUFDQUZRUUJJR3c4Rkl3cEVBQUFBQUFBQUFBQWdCVUVBU2hzUEN3QUxJQVJCLy8rLy93TkpCRUFnRVVTY2RRQ0lQT1EzZnFKRW5IVUFpRHprTjM2aUlCRkVXZlA0d2g5dXBRR2lSRm56K01JZmJxVUJvaUFGUVFCSUd3OExJQVJCZ0lEQS93Tk5CRUFnRDBRQUFBQUFBQUR3djZBaUFFUUFBQUJnUnhYM1A2SWlFQ0FBUkVUZlhmZ0xybFErb2lBQUlBQ2lSQUFBQUFBQUFPQS9JQUJFVlZWVlZWVlYxVDhnQUVRQUFBQUFBQURRUDZLaG9xR2lSUDZDSzJWSEZmYy9vcUVpQUtDOVFvQ0FnSUJ3Zzc4aUVpRVBJQklnRUtFTUFnc2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpSUJGRVdmUDR3aDl1cFFHaVJGbnorTUlmYnFVQm9pQUZRUUJLR3c4RklBOUVBQUFBQUFBQVFFT2lJZ0M5UWlDSXB5QUVJQVJCZ0lEQUFFa2lCUnNoQWtITWQwR0JlQ0FGR3lBQ1FSUjFhaUVESUFKQi8vOC9jU0lFUVlDQXdQOERjaUVDSUFSQmo3RU9TUVJBUVFBaEJBVWdCRUg2N0M1SklnWWhCQ0FESUFaQkFYTkJBWEZxSVFNZ0FpQUNRWUNBUUdvZ0Joc2hBZ3NnQkVFRGRFR3dFMm9yQXdBaUZDQUNyVUlnaGlBQUlBOGdCUnU5UXYvLy8vOFBnNFMvSWhBZ0JFRURkRUdRRTJvckF3QWlFcUVpRTBRQUFBQUFBQUR3UHlBU0lCQ2dveUlWb2lJUHZVS0FnSUNBY0lPL0lnQWdBQ0FBb2lJV1JBQUFBQUFBQUFoQW9DQVBJQUNnSUJVZ0V5QUNRUUYxUVlDQWdJQUNja0dBZ0NCcUlBUkJFblJxclVJZ2hyOGlFeUFBb3FFZ0VDQVRJQktob1NBQW9xR2lJaENpSUE4Z0Q2SWlBQ0FBb2lBQUlBQWdBQ0FBSUFCRTcwNUZTaWgreWoraVJHWGJ5Wk5LaHMwL29LSkVBVUVkcVdCMDBUK2dva1JOSm85UlZWWFZQNkNpUlArcmI5dTJiZHMvb0tKRUF6TXpNek16NHorZ29xQWlFcUM5UW9DQWdJQndnNzhpQUtJaUV5QVFJQUNpSUE4Z0VpQUFSQUFBQUFBQUFBakFvQ0FXb2FHaW9DSVBvTDFDZ0lDQWdIQ0R2eUlBUkFBQUFPQUp4KzQvb2lJUUlBUkJBM1JCb0JOcUt3TUFJQThnQUNBVG9hRkUvUU02M0FuSDdqK2lJQUJFOVFGYkZPQXZQajZpb2FBaUFLQ2dJQU8zSWhLZ3ZVS0FnSUNBY0lPL0loTWhEeUFUSUJLaElCU2hJQkNoQ3dzaEVDQUFJQkNoSUFHaUlBRWdEVUtBZ0lDQWNJTy9JZ0NoSUEraW9DRUJJQThnQUtJaUFDQUJvQ0lQdlNJTlFpQ0lweUVDSUEybklRTWdBa0gvLzcrRUJFb0VRQ0FDUVlDQXdQdDdhaUFEY2lBQlJQNkNLMlZIRlpjOG9DQVBJQUNoWkhJTkJnVWdBa0dBK1AvL0IzRkIvNWZEaEFSTEJFQWdBa0dBNkx6N0Eyb2dBM0lnQVNBUElBQ2haWElOQmdzTElCRWdBa0gvLy8vL0IzRWlBMEdBZ0lEL0Ewc0VmeUFBUVlDQVFFR0FnTUFBSUFOQkZIWkJnbmhxZGlBQ2FpSURRUlIyUWY4UGNTSUVRWUY0YW5VZ0EzR3RRaUNHdjZFaUR5RUFJQUVnRDZDOUlRMUJBQ0FEUWYvL1AzRkJnSURBQUhKQmt3Z2dCR3QySWdOcklBTWdBa0VBU0JzRlFRQUxJZ0pCRkhSRUFBQUFBQUFBOEQ4Z0RVS0FnSUNBY0lPL0lnOUVBQUFBQUVNdTVqK2lJaEFnQVNBUElBQ2hvVVR2T2ZyK1FpN21QNklnRDBRNWJLZ01ZVndnUHFLaElnK2dJZ0FnQUNBQUlBQ2lJZ0VnQVNBQklBRWdBVVRRcEw1eWFUZG1QcUpFOFd2U3hVRzl1NzZnb2tRczNpV3ZhbFlSUDZDaVJKTzl2aFpzd1dhL29LSkVQbFZWVlZWVnhUK2dvcUVpQWFJZ0FVUUFBQUFBQUFBQXdLQ2pJQThnQUNBUW9hRWlBU0FBSUFHaW9LRWdBS0doSWdDOUlnMUNJSWluYWlJRFFZQ0F3QUJJQkh3Z0FDQUNFR1VGSUFPdFFpQ0dJQTFDLy8vLy93K0RoTDhMSWdDaUR3c0xDeUFBSUFHZ0R3c2dBQ0FBb1NJQUlBQ2pEd3NnRVVSWjgvakNIMjZsQWFKRVdmUDR3aDl1cFFHaUR3c2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpQ3dNQUFRdkRBd0VEZnlBQ1FZREFBRTRFUUNBQUlBRWdBaEFIRHdzZ0FDRUVJQUFnQW1vaEF5QUFRUU54SUFGQkEzRkdCRUFEUUNBQVFRTnhCRUFnQWtVRVFDQUVEd3NnQUNBQkxBQUFPZ0FBSUFCQkFXb2hBQ0FCUVFGcUlRRWdBa0VCYXlFQ0RBRUxDeUFEUVh4eElnSkJRR29oQlFOQUlBQWdCVXdFUUNBQUlBRW9BZ0EyQWdBZ0FDQUJLQUlFTmdJRUlBQWdBU2dDQ0RZQ0NDQUFJQUVvQWd3MkFnd2dBQ0FCS0FJUU5nSVFJQUFnQVNnQ0ZEWUNGQ0FBSUFFb0FoZzJBaGdnQUNBQktBSWNOZ0ljSUFBZ0FTZ0NJRFlDSUNBQUlBRW9BaVEyQWlRZ0FDQUJLQUlvTmdJb0lBQWdBU2dDTERZQ0xDQUFJQUVvQWpBMkFqQWdBQ0FCS0FJME5nSTBJQUFnQVNnQ09EWUNPQ0FBSUFFb0FqdzJBandnQUVGQWF5RUFJQUZCUUdzaEFRd0JDd3NEUUNBQUlBSklCRUFnQUNBQktBSUFOZ0lBSUFCQkJHb2hBQ0FCUVFScUlRRU1BUXNMQlNBRFFRUnJJUUlEUUNBQUlBSklCRUFnQUNBQkxBQUFPZ0FBSUFBZ0FTd0FBVG9BQVNBQUlBRXNBQUk2QUFJZ0FDQUJMQUFET2dBRElBQkJCR29oQUNBQlFRUnFJUUVNQVFzTEN3TkFJQUFnQTBnRVFDQUFJQUVzQUFBNkFBQWdBRUVCYWlFQUlBRkJBV29oQVF3QkN3c2dCQXVZQWdFRWZ5QUFJQUpxSVFRZ0FVSC9BWEVoQVNBQ1FjTUFUZ1JBQTBBZ0FFRURjUVJBSUFBZ0FUb0FBQ0FBUVFGcUlRQU1BUXNMSUFSQmZIRWlCVUZBYWlFR0lBRWdBVUVJZEhJZ0FVRVFkSElnQVVFWWRISWhBd05BSUFBZ0Jrd0VRQ0FBSUFNMkFnQWdBQ0FETmdJRUlBQWdBellDQ0NBQUlBTTJBZ3dnQUNBRE5nSVFJQUFnQXpZQ0ZDQUFJQU0yQWhnZ0FDQUROZ0ljSUFBZ0F6WUNJQ0FBSUFNMkFpUWdBQ0FETmdJb0lBQWdBellDTENBQUlBTTJBakFnQUNBRE5nSTBJQUFnQXpZQ09DQUFJQU0yQWp3Z0FFRkFheUVBREFFTEN3TkFJQUFnQlVnRVFDQUFJQU0yQWdBZ0FFRUVhaUVBREFFTEN3c0RRQ0FBSUFSSUJFQWdBQ0FCT2dBQUlBQkJBV29oQUF3QkN3c2dCQ0FDYXd0VkFRSi9JQUJCQUVvakJTZ0NBQ0lCSUFCcUlnQWdBVWh4SUFCQkFFaHlCRUFRQXhwQkRCQUZRWDhQQ3lNRklBQTJBZ0FRQWlFQ0lBQWdBa29FUUJBQlJRUkFJd1VnQVRZQ0FFRU1FQVZCZnc4TEN5QUJDdzRBSUFFZ0FpQUFRUU54RVFBQUN3Z0FRUUFRQUVFQUN3dkFFUVFBUVlFSUM3WUtBUUlDQXdNREF3UUVCQVFFQkFRRUFBRUFBSUFBQUFCV0FBQUFRQUFBQUQ2MDVETUprZk16aTdJQk5Ed2dDalFqR2hNMFlLa2NOS2ZYSmpSTHJ6RTBVRHM5TkhDSFNUUWpvRlkwdUpKa05GVnRjelNJbjRFMC9BdUtOSk1Fa3pScGtwdzBNcittTkQrVnNUU1RINzAwNUduSk5LMkExalEyY2VRMHBrbnpOSWlNQVRYQTl3azFCdThTTlhaN0hEWEFwaVkxTjNzeE5kb0RQVFZlVEVrMU8yRldOYmxQWkRYOEpYTTFpbm1CTlliamlUVjgyWkkxaFdTY05WS09walV6WWJFMUplaThOZHd1eVRYT1FkWTFRUzdrTlZjQzh6V1BaZ0UyVDg4Sk52WERFamFZVFJ3MjZIVW1OakpITVRaMHpEdzJYaEZKTm1VaVZqYk9ER1EydU41eU5wZFRnVFljdTRrMmNxNlNOcTgybkRhQlhhWTJOUzJ4TnNld3ZEYms4OGcyQVFQV05tRHI0ellldS9JMm9rQUJOK3VtQ1RmeG1CSTN5UjhjTng1RkpqYzlFekUzSHBVOE4yL1dTRGVpNDFVMzk4bGpONG1YY2pldkxZRTN2cEtKTjNTRGtqZm1DSnczdml5bU4wZjVzRGQ1ZWJ3My9yaklOMGZFMVRlU3FPTTMrSFB5TjhBYUFUaVRmZ2s0K1cwU09BYnlHemhpRkNZNFZ0OHdPTmhkUERpU20wZzQ4cVJWT0RPSFl6aHVVSEk0MHdlQk9HdHFpVGlDV0pJNEt0dWJPQW44cFRob3hiQTRPMEs4T0NsK3lEaWdoZFU0MldYak9PZ3M4ampwOUFBNVJsWUpPUTVERWpsUnhCczV0ZU1sT1grck1EbWlKanc1eFdCSU9WTm1WVG1EUkdNNWFBbHlPUUhpZ0Rra1FvazVuUzJTT1h1dG16bGp5NlU1bVpHd09RMEx2RGxtUThnNUMwZlZPVElqNHpudDVmRTVIYzhBT2dVdUNUb3dHQkk2cVpZYk9oV3pKVHEzZHpBNmZPODdPZ29tU0RySEoxVTY1Z0ZqT25qQ2NUbzd2SUE2NlJtSk9zWUNranJiZjVzNnk1cWxPdGhkc0RydjA3czZzd2pJT29nSTFUcWY0T0k2QjUveE9seXBBRHZRQlFrN1h1MFJPdzlwR3p1RWdpVTcvVU13TzJlNE96dGg2MGM3VGVsVU8xMi9ZanVjZTNFN2Y1YUFPN3J4aUR2NTE1RTdSMUtiTzBGcXBUc25LckE3NHB5N094TE94enNYeXRRN0lKN2lPelZZOFR1bWd3QThwOTBJUEpqQ0VUeUNPeHM4QVZJbFBGUVFNRHhoZ1RzOHlMQkhQT1dxVkR6b2ZHSTgxRFJ4UE05d2dEeVd5WWc4T3EyUlBNQWttenpGT2FVOGhmYXZQT1ZsdXp5Q2s4Yzh1WXZVUExSYjRqeDVFZkU4KzEwQVBZbTFDRDNmbHhFOUFnNGJQWTBoSlQyNTNDODliVW83UFVCMlJ6MlJiRlE5aFRwaVBTTHVjRDBxUzRBOWY2R0lQWWlDa1QxSTk1bzlXQW1sUGZMQ3J6MzRMcnM5QTFuSFBXMU4xRDFjR2VJOTBjcndQVnM0QUQ1M2pRZytNMjBSUHBEZ0dqNG44U1ErTHFrdlBvY1RPejdLTzBjK1RTNVVQamY0WVQ2RXAzQStqeVdBUG5ONWlEN2lWNUUrM01tYVB2bllwRDV0ajY4K0cvaTZQcFVleHo0ekQ5UStGOWZoUGoyRThEN0dFZ0EvY21VSVA1TkNFVDhyc3hvL3pzQWtQN0YxTHoreTNEby9aUUZIUHgzd1V6Lzd0V0UvKzJCd1B3QUFnRDhEQUFBQUJBQUFBQVFBQUFBR0FBQUFnL21pQUVST2JnRDhLUlVBMFZjbkFOMDA5UUJpMjhBQVBKbVZBRUdRUXdCalVmNEF1OTZyQUxkaHhRQTZiaVFBMGsxQ0FFa0c0QUFKNmk0QUhKTFJBT3NkL2dBcHNSd0E2RDZuQVBVMWdnQkV1eTRBbk9tRUFMUW1jQUJCZmw4QTFwRTVBRk9ET1FDYzlEa0FpMStFQUNqNXZRRDRIenNBM3YrWEFBK1lCUUFSTCs4QUNscUxBRzBmYlFEUGZqWUFDY3NuQUVaUHR3Q2VaajhBTGVwZkFMb25kUURsNjhjQVBYdnhBUGM1QndDU1Vvb0ErMnZxQUIreFh3QUlYWTBBTUFOV0FIdjhSZ0R3cTJzQUlMelBBRGIwbWdEanFSMEFYbUdSQUFnYjVnQ0ZtV1VBb0JSZkFJMUFhQUNBMlA4QUozTk5BQVlHTVFES1ZoVUF5YWh6QUh2aVlBQnJqTUFBUWNNU0MxMUEreUg1UHdBQUFBQXRSSFErQUFBQWdKaEcrRHdBQUFCZ1VjeDRPd0FBQUlDREcvQTVBQUFBUUNBbGVqZ0FBQUNBSW9Mak5nQUFBQUFkODJrMUFBQUFBQUFBNEQ4QUFBQUFBQURndndBQUFBQUFBUEEvQUFBQUFBQUErRDhBUWFnVEN3Z0cwTTlENi8xTVBnQkJ1eE1MaWdaQUE3amlQMDluWjFNdUwzTjBZbDkyYjNKaWFYTXVZd0JtTFQ1aGJHeHZZeTVoYkd4dlkxOWlkV1ptWlhKZmJHVnVaM1JvWDJsdVgySjVkR1Z6SUQwOUlHWXRQblJsYlhCZmIyWm1jMlYwQUhadmNtSnBjMTlrWldOdlpHVmZhVzVwZEdsaGJBQm1MVDVpZVhSbGMxOXBibDl6WldjZ1BpQXdBR2RsZERoZmNHRmphMlYwWDNKaGR3Qm1MVDVpZVhSbGMxOXBibDl6WldjZ1BUMGdNQUJ1WlhoMFgzTmxaMjFsYm5RQWRtOXlZbWx6WDJSbFkyOWtaVjl3WVdOclpYUmZjbVZ6ZEFBaFl5MCtjM0JoY25ObEFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5elkyRnNZWEpmY21GM0FDRmpMVDV6Y0dGeWMyVWdmSHdnZWlBOElHTXRQbk52Y25SbFpGOWxiblJ5YVdWekFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5a1pXbHVkR1Z5YkdWaGRtVmZjbVZ3WldGMEFIb2dQQ0JqTFQ1emIzSjBaV1JmWlc1MGNtbGxjd0JqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25RQUtHNGdKaUF6S1NBOVBTQXdBR2x0WkdOMFgzTjBaWEF6WDJsMFpYSXdYMnh2YjNBQU1BQm5aWFJmZDJsdVpHOTNBR1l0UG5SbGJYQmZiMlptYzJWMElEMDlJR1l0UG1Gc2JHOWpMbUZzYkc5algySjFabVpsY2w5c1pXNW5kR2hmYVc1ZllubDBaWE1BYzNSaGNuUmZaR1ZqYjJSbGNnQjJiM0ppYVhOakxUNXpiM0owWldSZlpXNTBjbWxsY3lBOVBTQXdBR052YlhCMWRHVmZZMjlrWlhkdmNtUnpBSG9nUGowZ01DQW1KaUI2SUR3Z016SUFiR1Z1VzJsZElENDlJREFnSmlZZ2JHVnVXMmxkSUR3Z016SUFZWFpoYVd4aFlteGxXM2xkSUQwOUlEQUFheUE5UFNCakxUNXpiM0owWldSZlpXNTBjbWxsY3dCamIyMXdkWFJsWDNOdmNuUmxaRjlvZFdabWJXRnVBR010UG5OdmNuUmxaRjlqYjJSbGQyOXlaSE5iZUYwZ1BUMGdZMjlrWlFCc1pXNGdJVDBnVGs5ZlEwOUVSUUJwYm1Oc2RXUmxYMmx1WDNOdmNuUUFjRzkzS0NobWJHOWhkQ2tnY2lzeExDQmthVzBwSUQ0Z1pXNTBjbWxsY3dCc2IyOXJkWEF4WDNaaGJIVmxjd0FvYVc1MEtTQm1iRzl2Y2lod2IzY29LR1pzYjJGMEtTQnlMQ0JrYVcwcEtTQThQU0JsYm5SeWFXVnpBT29QQkc1aGJXVUI0ZzkrQUFWaFltOXlkQUVOWlc1c1lYSm5aVTFsYlc5eWVRSU9aMlYwVkc5MFlXeE5aVzF2Y25rREYyRmliM0owVDI1RFlXNXViM1JIY205M1RXVnRiM0o1QkE1ZlgxOWhjM05sY25SZlptRnBiQVVMWDE5ZmMyVjBSWEp5VG04R0JsOWhZbTl5ZEFjV1gyVnRjMk55YVhCMFpXNWZiV1Z0WTNCNVgySnBad2dRWDE5bmNtOTNWMkZ6YlUxbGJXOXllUWtLYzNSaFkydEJiR3h2WXdvSmMzUmhZMnRUWVhabEN3eHpkR0ZqYTFKbGMzUnZjbVVNRTJWemRHRmliR2x6YUZOMFlXTnJVM0JoWTJVTkNITmxkRlJvY21WM0RndHpaWFJVWlcxd1VtVjBNQThMWjJWMFZHVnRjRkpsZERBUUVWOXpkR0pmZG05eVltbHpYMk5zYjNObEVRNWZkbTl5WW1selgyUmxhVzVwZEJJTFgzTmxkSFZ3WDJaeVpXVVRHbDl6ZEdKZmRtOXlZbWx6WDJac2RYTm9YM0IxYzJoa1lYUmhGQ0ZmYzNSaVgzWnZjbUpwYzE5a1pXTnZaR1ZmWm5KaGJXVmZjSFZ6YUdSaGRHRVZCbDlsY25KdmNoWWdYM1p2Y21KcGMxOXpaV0Z5WTJoZlptOXlYM0JoWjJWZmNIVnphR1JoZEdFWEdGOXBjMTkzYUc5c1pWOXdZV05yWlhSZmNISmxjMlZ1ZEJnVlgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBHUXhmWjJWME9GOXdZV05yWlhRYUZGOTJiM0ppYVhOZlptbHVhWE5vWDJaeVlXMWxHeGxmYzNSaVgzWnZjbUpwYzE5dmNHVnVYM0IxYzJoa1lYUmhIQXhmZG05eVltbHpYMmx1YVhRZERsOXpkR0Z5ZEY5a1pXTnZaR1Z5SGcxZmRtOXlZbWx6WDJGc2JHOWpIeHRmYzNSaVgzWnZjbUpwYzE5blpYUmZabWxzWlY5dlptWnpaWFFnRTE5dFlYbGlaVjl6ZEdGeWRGOXdZV05yWlhRaERWOW1iSFZ6YUY5d1lXTnJaWFFpQlY5blpYUnVJd1pmWjJWME16SWtFMTl6ZEdKZmRtOXlZbWx6WDJwelgyOXdaVzRsRkY5emRHSmZkbTl5WW1selgycHpYMk5zYjNObEpoZGZjM1JpWDNadmNtSnBjMTlxYzE5amFHRnVibVZzY3ljYVgzTjBZbDkyYjNKaWFYTmZhbk5mYzJGdGNHeGxYM0poZEdVb0ZWOXpkR0pmZG05eVltbHpYMnB6WDJSbFkyOWtaU2tOWDJOeVl6TXlYM1Z3WkdGMFpTb1dYM1p2Y21KcGMxOWtaV052WkdWZmFXNXBkR2xoYkNzYVgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBYM0psYzNRc0NWOW5aWFJmWW1sMGN5MEZYMmxzYjJjdUVGOW5aWFE0WDNCaFkydGxkRjl5WVhjdkRWOXVaWGgwWDNObFoyMWxiblF3QlY5blpYUTRNUXRmYzNSaGNuUmZjR0ZuWlRJUVgyTmhjSFIxY21WZmNHRjBkR1Z5YmpNZFgzTjBZWEowWDNCaFoyVmZibTlmWTJGd2RIVnlaWEJoZEhSbGNtNDBEVjl3Y21Wd1gyaDFabVp0WVc0MUcxOWpiMlJsWW05dmExOWtaV052WkdWZmMyTmhiR0Z5WDNKaGR6WU9YM0J5WldScFkzUmZjRzlwYm5RM0QxOWtaV052WkdWZmNtVnphV1IxWlRnSlgyUnZYMlpzYjI5eU9RMWZhVzUyWlhKelpWOXRaR04wT2d4ZlltbDBYM0psZG1WeWMyVTdFVjl0WVd0bFgySnNiMk5yWDJGeWNtRjVQQkpmYzJWMGRYQmZkR1Z0Y0Y5dFlXeHNiMk05SkY5amIyUmxZbTl2YTE5a1pXTnZaR1ZmWkdWcGJuUmxjbXhsWVhabFgzSmxjR1ZoZEQ0UFgzSmxjMmxrZFdWZlpHVmpiMlJsUHhWZlkyOWtaV0p2YjJ0ZlpHVmpiMlJsWDNOMFpYQkFFRjlqYjJSbFltOXZhMTlrWldOdlpHVkJGbDlqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25SQ0NsOWtjbUYzWDJ4cGJtVkRGMTlwYldSamRGOXpkR1Z3TTE5cGRHVnlNRjlzYjI5d1JCbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjbDlzYjI5d1JSbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1JoOWZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1gyeGtOalUwUndoZmFYUmxjbDgxTkVnTFgyZGxkRjkzYVc1a2IzZEpFRjkyYjNKaWFYTmZkbUZzYVdSaGRHVktEVjl6ZEdGeWRGOXdZV05yWlhSTEJWOXphMmx3VEF0ZlkzSmpNekpmYVc1cGRFME5YM05sZEhWd1gyMWhiR3h2WTA0UVgzTmxkSFZ3WDNSbGJYQmZabkpsWlU4U1gyTnZiWEIxZEdWZlkyOWtaWGR2Y21SelVCZGZZMjl0Y0hWMFpWOXpiM0owWldSZmFIVm1abTFoYmxFY1gyTnZiWEIxZEdWZllXTmpaV3hsY21GMFpXUmZhSFZtWm0xaGJsSVBYMlpzYjJGME16SmZkVzV3WVdOclV3OWZiRzl2YTNWd01WOTJZV3gxWlhOVURsOXdiMmx1ZEY5amIyMXdZWEpsVlFwZmJtVnBaMmhpYjNKelZnOWZhVzVwZEY5aWJHOWphM05wZW1WWENsOWhaR1JmWlc1MGNubFlFRjlwYm1Oc2RXUmxYMmx1WDNOdmNuUlpEMTkxYVc1ME16SmZZMjl0Y0dGeVpWb1lYMk52YlhCMWRHVmZkSGRwWkdSc1pWOW1ZV04wYjNKeld3OWZZMjl0Y0hWMFpWOTNhVzVrYjNkY0UxOWpiMjF3ZFhSbFgySnBkSEpsZG1WeWMyVmRCMTl6Y1hWaGNtVmVCMTl0WVd4c2IyTmZCVjltY21WbFlBaGZjbVZoYkd4dlkyRVNYM1J5ZVY5eVpXRnNiRzlqWDJOb2RXNXJZZzVmWkdsemNHOXpaVjlqYUhWdWEyTVJYMTlmWlhKeWJtOWZiRzlqWVhScGIyNWtCMTl0WlcxamJYQmxCMTl6WTJGc1ltNW1CbDl4YzI5eWRHY0ZYM05wWm5Sb0JGOXphSEpwQ0Y5MGNtbHVhMnhsYWdSZmMyaHNhd1ZmY0c1MGVtd0lYMkZmWTNSNlgyeHRCbDlqZVdOc1pXNExYMTlmY21WdFgzQnBiekp2RVY5ZlgzSmxiVjl3YVc4eVgyeGhjbWRsY0FaZlgxOXphVzV4Qmw5c1pHVjRjSElHWDE5ZlkyOXpjd1JmWTI5emRBUmZjMmx1ZFFSZlpYaHdkZ1JmYkc5bmR3UmZjRzkzZUF0eWRXNVFiM04wVTJWMGMza0hYMjFsYldOd2VYb0hYMjFsYlhObGRIc0ZYM05pY210OEMyUjVia05oYkd4ZmFXbHBmUUppTUE9PSIpLGZ1bmN0aW9uKGwpe3JldHVybiBsLmNoYXJDb2RlQXQoMCl9KTt2YXIgRT1FIT09dm9pZCAwP0U6e30sWD17fTtmb3IoZSBpbiBFKUUuaGFzT3duUHJvcGVydHkoZSkmJihYW2VdPUVbZV0pO0UuYXJndW1lbnRzPVtdLEUudGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIixFLnF1aXQ9ZnVuY3Rpb24obCx1KXt0aHJvdyB1fSxFLnByZVJ1bj1bXSxFLnBvc3RSdW49W107dmFyIE89ITEsbkE9ITEsJD0hMSxWPSExO089dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsbkE9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsJD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBKYT09ImZ1bmN0aW9uIiYmIU8mJiFuQSxWPSFPJiYhJCYmIW5BO3ZhciBxPSIiO2Z1bmN0aW9uIHoobCl7cmV0dXJuIEUubG9jYXRlRmlsZT9FLmxvY2F0ZUZpbGUobCxxKTpxK2x9JD8ocT0iLyIsRS5yZWFkPWZ1bmN0aW9uKHUsZil7dmFyIHc7cmV0dXJuIEF8fChBPXZvaWQgMCksdHx8KHQ9dm9pZCAwKSx1PXQubm9ybWFsaXplKHUpLHc9QS5yZWFkRmlsZVN5bmModSksZj93OncudG9TdHJpbmcoKX0sRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPUUucmVhZCh1LCEwKTtyZXR1cm4gZi5idWZmZXJ8fChmPW5ldyBVaW50OEFycmF5KGYpKSxVQShmLmJ1ZmZlciksZn0scHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYoRS50aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxFLmFyZ3VtZW50cz1wcm9jZXNzLmFyZ3Yuc2xpY2UoMiksdHlwZW9mIG1vZHVsZTwidSIscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKGwpe2lmKCEobCBpbnN0YW5jZW9mIG90KSl0aHJvdyBsfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixmdW5jdGlvbihsLHUpe3Byb2Nlc3MuZXhpdCgxKX0pLEUucXVpdD1mdW5jdGlvbihsKXtwcm9jZXNzLmV4aXQobCl9LEUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9KTpWPyh0eXBlb2YgcmVhZDwidSImJihFLnJlYWQ9ZnVuY3Rpb24odSl7cmV0dXJuIHJlYWQodSl9KSxFLnJlYWRCaW5hcnk9ZnVuY3Rpb24odSl7dmFyIGY7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIodSkpOihVQSh0eXBlb2YoZj1yZWFkKHUsImJpbmFyeSIpKT09Im9iamVjdCIpLGYpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/RS5hcmd1bWVudHM9c2NyaXB0QXJnczp0eXBlb2YgYXJndW1lbnRzPCJ1IiYmKEUuYXJndW1lbnRzPWFyZ3VtZW50cyksdHlwZW9mIHF1aXQ9PSJmdW5jdGlvbiImJihFLnF1aXQ9ZnVuY3Rpb24obCl7cXVpdChsKX0pKTooT3x8bkEpJiYoTz9kb2N1bWVudC5jdXJyZW50U2NyaXB0JiYocT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyk6cT1zZWxmLmxvY2F0aW9uLmhyZWYscT1xLmluZGV4T2YoImJsb2I6IikhPT0wP3Euc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5qb2luKCIvIikrIi8iOiIiLEUucmVhZD1mdW5jdGlvbih1KXt2YXIgZj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGYub3BlbigiR0VUIix1LCExKSxmLnNlbmQobnVsbCksZi5yZXNwb25zZVRleHR9LG5BJiYoRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gZi5vcGVuKCJHRVQiLHUsITEpLGYucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsZi5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KGYucmVzcG9uc2UpfSksRS5yZWFkQXN5bmM9ZnVuY3Rpb24odSxmLHcpe3ZhciBVPW5ldyBYTUxIdHRwUmVxdWVzdDtVLm9wZW4oIkdFVCIsdSwhMCksVS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixVLm9ubG9hZD1mdW5jdGlvbigpe2lmKFUuc3RhdHVzPT0yMDB8fFUuc3RhdHVzPT0wJiZVLnJlc3BvbnNlKXtmKFUucmVzcG9uc2UpO3JldHVybn13KCl9LFUub25lcnJvcj13LFUuc2VuZChudWxsKX0sRS5zZXRXaW5kb3dUaXRsZT1mdW5jdGlvbihsKXtkb2N1bWVudC50aXRsZT1sfSk7dmFyIHRBPUUucHJpbnR8fCh0eXBlb2YgY29uc29sZTwidSI/Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTp0eXBlb2YgcHJpbnQ8InUiP3ByaW50Om51bGwpLGlBPUUucHJpbnRFcnJ8fCh0eXBlb2YgcHJpbnRFcnI8InUiP3ByaW50RXJyOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuLmJpbmQoY29uc29sZSl8fHRBKTtmb3IoZSBpbiBYKVguaGFzT3duUHJvcGVydHkoZSkmJihFW2VdPVhbZV0pO2Z1bmN0aW9uIFAobCl7dmFyIHU9QztyZXR1cm4gQz1DK2wrMTUmLTE2LHV9ZnVuY3Rpb24gRyhsKXt2YXIgdT1vW0Q+PjJdLGY9dStsKzE1Ji0xNjtyZXR1cm4gb1tEPj4yXT1mLGY+PXBBJiYhbnQoKT8ob1tEPj4yXT11LDApOnV9ZnVuY3Rpb24gYihsLHUpe3JldHVybiB1fHwodT0xNiksbD1NYXRoLmNlaWwobC91KSp1fWZ1bmN0aW9uIEsobCl7c3dpdGNoKGwpe2Nhc2UiaTEiOmNhc2UiaTgiOnJldHVybiAxO2Nhc2UiaTE2IjpyZXR1cm4gMjtjYXNlImkzMiI6Y2FzZSJmbG9hdCI6cmV0dXJuIDQ7Y2FzZSJpNjQiOmNhc2UiZG91YmxlIjpyZXR1cm4gODtkZWZhdWx0OmlmKGxbbC5sZW5ndGgtMV09PT0iKiIpcmV0dXJuIDQ7aWYobFswXSE9PSJpIilyZXR1cm4gMDt2YXIgdT1wYXJzZUludChsLnN1YnN0cigxKSk7cmV0dXJuIFVBKHUlOD09MCksdS84fX1mdW5jdGlvbiBlQShsKXtlQS5zaG93bnx8KGVBLnNob3duPXt9KSxlQS5zaG93bltsXXx8KGVBLnNob3duW2xdPTEsaUEobCkpfVg9dm9pZCAwO3ZhciBhQT17ImY2NC1yZW0iOmZ1bmN0aW9uKGwsdSl7cmV0dXJuIGwldX0sZGVidWdnZXI6ZnVuY3Rpb24oKXt9fSxHQT1bXTtmdW5jdGlvbiBzZShsLHUpe2Zvcih2YXIgZj0wLHc9Zjt3PGYrMDt3KyspaWYoIUdBW3ddKXJldHVybiBHQVt3XT1sLDErdzt0aHJvdyJGaW5pc2hlZCB1cCBhbGwgcmVzZXJ2ZWQgZnVuY3Rpb24gcG9pbnRlcnMuIFVzZSBhIGhpZ2hlciB2YWx1ZSBmb3IgUkVTRVJWRURfRlVOQ1RJT05fUE9JTlRFUlMuIn1mdW5jdGlvbiB6QShsKXtHQVtsLTFdPW51bGx9dmFyIFdBPXt9O2Z1bmN0aW9uIE5lKGwsdSl7aWYobCl7VUEodSksV0FbdV18fChXQVt1XT17fSk7dmFyIGY9V0FbdV07cmV0dXJuIGZbbF18fCh1Lmxlbmd0aD09PTE/ZltsXT1mdW5jdGlvbigpe3JldHVybiBBQSh1LGwpfTp1Lmxlbmd0aD09PTI/ZltsXT1mdW5jdGlvbihVKXtyZXR1cm4gQUEodSxsLFtVXSl9OmZbbF09ZnVuY3Rpb24oKXtyZXR1cm4gQUEodSxsLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSksZltsXX19ZnVuY3Rpb24gYWUobCx1LGYpe3JldHVybiBmPysobD4+PjApKzQyOTQ5NjcyOTYqKyh1Pj4+MCk6KyhsPj4+MCkrNDI5NDk2NzI5NiorKDB8dSl9ZnVuY3Rpb24gQUEobCx1LGYpe3JldHVybiBmJiZmLmxlbmd0aD9FWyJkeW5DYWxsXyIrbF0uYXBwbHkobnVsbCxbdV0uY29uY2F0KGYpKTpFWyJkeW5DYWxsXyIrbF0uY2FsbChudWxsLHUpfXZhciBCQT0wLF9BPTA7ZnVuY3Rpb24gVUEobCx1KXtsfHxJZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit1KX1mdW5jdGlvbiBDZShsKXt2YXIgdT1FWyJfIitsXTtyZXR1cm4gVUEodSwiQ2Fubm90IGNhbGwgdW5rbm93biBmdW5jdGlvbiAiK2wrIiwgbWFrZSBzdXJlIGl0IGlzIGV4cG9ydGVkIiksdX12YXIgaGU9e3N0YWNrU2F2ZTpmdW5jdGlvbigpe2duKCl9LHN0YWNrUmVzdG9yZTpmdW5jdGlvbigpe0luKCl9LGFycmF5VG9DOmZ1bmN0aW9uKGwpe3ZhciB1LGYsdz13dChsLmxlbmd0aCk7cmV0dXJuIHU9bCxmPXcscy5zZXQodSxmKSx3fSxzdHJpbmdUb0M6ZnVuY3Rpb24obCl7dmFyIHU9MDtpZihsIT1udWxsJiZsIT09MCl7dmFyIGY9KGwubGVuZ3RoPDwyKSsxO3U9d3QoZiksZXQobCx1LGYpfXJldHVybiB1fX0sJGU9e3N0cmluZzpoZS5zdHJpbmdUb0MsYXJyYXk6aGUuYXJyYXlUb0N9O2Z1bmN0aW9uIFVlKGwsdSxmLHcsVSl7dmFyIF89Q2UobCksb0E9W10sSD0wO2lmKHcpZm9yKHZhciBEQT0wO0RBPHcubGVuZ3RoO0RBKyspe3ZhciBsQT0kZVtmW0RBXV07bEE/KEg9PT0wJiYoSD1nbigpKSxvQVtEQV09bEEod1tEQV0pKTpvQVtEQV09d1tEQV19dmFyIGRBLENBPV8uYXBwbHkobnVsbCxvQSk7cmV0dXJuIENBPShkQT1DQSx1PT09InN0cmluZyI/bGUoZEEpOnU9PT0iYm9vbGVhbiI/ISFkQTpkQSksSCE9PTAmJkluKEgpLENBfWZ1bmN0aW9uIEF0KGwsdSxmLHcpe3N3aXRjaCgoZj1mfHwiaTgiKS5jaGFyQXQoZi5sZW5ndGgtMSk9PT0iKiImJihmPSJpMzIiKSxmKXtjYXNlImkxIjpjYXNlImk4IjpzW2w+PjBdPXU7YnJlYWs7Y2FzZSJpMTYiOnJbbD4+MV09dTticmVhaztjYXNlImkzMiI6b1tsPj4yXT11O2JyZWFrO2Nhc2UiaTY0Ijp0ZW1wSTY0PVt1Pj4+MCwrVGEodGVtcERvdWJsZT11KT49MT90ZW1wRG91YmxlPjA/KDB8SGEoK2hzKHRlbXBEb3VibGUvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fit4YSgodGVtcERvdWJsZS0rKH5+dGVtcERvdWJsZT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MF0sb1tsPj4yXT10ZW1wSTY0WzBdLG9bbCs0Pj4yXT10ZW1wSTY0WzFdO2JyZWFrO2Nhc2UiZmxvYXQiOkJbbD4+Ml09dTticmVhaztjYXNlImRvdWJsZSI6ZFtsPj4zXT11O2JyZWFrO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICIrZil9fWZ1bmN0aW9uIEFuKGwsdSxmKXtzd2l0Y2goKHU9dXx8Imk4IikuY2hhckF0KHUubGVuZ3RoLTEpPT09IioiJiYodT0iaTMyIiksdSl7Y2FzZSJpMSI6Y2FzZSJpOCI6cmV0dXJuIHNbbD4+MF07Y2FzZSJpMTYiOnJldHVybiByW2w+PjFdO2Nhc2UiaTMyIjpjYXNlImk2NCI6cmV0dXJuIG9bbD4+Ml07Y2FzZSJmbG9hdCI6cmV0dXJuIEJbbD4+Ml07Y2FzZSJkb3VibGUiOnJldHVybiBkW2w+PjNdO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIrdSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZW4obCx1LGYsdyl7dHlwZW9mIGw9PSJudW1iZXIiPyhfPSEwLG9BPWwpOihfPSExLG9BPWwubGVuZ3RoKTt2YXIgVT10eXBlb2YgdT09InN0cmluZyI/dTpudWxsO2lmKEg9Zj09ND93Olt0eXBlb2YgRHQ9PSJmdW5jdGlvbiI/RHQ6UCx3dCxQLEddW2Y9PT12b2lkIDA/MjpmXShNYXRoLm1heChvQSxVPzE6dS5sZW5ndGgpKSxfKXtmb3Iodz1ILFVBKCgzJkgpPT0wKSxEQT1IKygtNCZvQSk7dzxEQTt3Kz00KW9bdz4+Ml09MDtmb3IoREE9SCtvQTt3PERBOylzW3crKz4+MF09MDtyZXR1cm4gSH1pZihVPT09Imk4IilyZXR1cm4gbC5zdWJhcnJheXx8bC5zbGljZT9hLnNldChsLEgpOmEuc2V0KG5ldyBVaW50OEFycmF5KGwpLEgpLEg7Zm9yKHZhciBfLG9BLEgsREEsbEEsZEEsQ0EsVz0wO1c8b0E7KXt2YXIgTEE9bFtXXTtpZigobEE9VXx8dVtXXSk9PT0wKXtXKys7Y29udGludWV9bEE9PSJpNjQiJiYobEE9ImkzMiIpLEF0KEgrVyxMQSxsQSksQ0EhPT1sQSYmKGRBPUsobEEpLENBPWxBKSxXKz1kQX1yZXR1cm4gSH1mdW5jdGlvbiBUZShsKXtyZXR1cm4gUT9vbj9EdChsKTpHKGwpOlAobCl9ZnVuY3Rpb24gbGUobCx1KXtpZih1PT09MHx8IWwpcmV0dXJuIiI7Zm9yKHZhciBmLHcsVSxfPTAsb0E9MDtffD13PWFbbCtvQT4+MF0sKHchPTB8fHUpJiYob0ErKywhdXx8b0EhPXUpOyk7dXx8KHU9b0EpO3ZhciBIPSIiO2lmKF88MTI4KXtmb3IoO3U+MDspVT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnN1YmFycmF5KGwsbCtNYXRoLm1pbih1LDEwMjQpKSksSD1IP0grVTpVLGwrPTEwMjQsdS09MTAyNDtyZXR1cm4gSH1yZXR1cm4gZj1sLChmdW5jdGlvbihsQSxkQSl7Zm9yKHZhciBDQT1kQTtsQVtDQV07KSsrQ0E7aWYoQ0EtZEE+MTYmJmxBLnN1YmFycmF5JiZmdClyZXR1cm4gZnQuZGVjb2RlKGxBLnN1YmFycmF5KGRBLENBKSk7Zm9yKHZhciBXLExBLFBBLEpBLHFBLHdlLEtBPSIiOzspe2lmKCEoVz1sQVtkQSsrXSkpcmV0dXJuIEtBO2lmKCEoMTI4JlcpKXtLQSs9U3RyaW5nLmZyb21DaGFyQ29kZShXKTtjb250aW51ZX1pZihMQT02MyZsQVtkQSsrXSwoMjI0JlcpPT0xOTIpe0tBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZXKTw8NnxMQSk7Y29udGludWV9aWYoUEE9NjMmbEFbZEErK10sKDI0MCZXKT09MjI0P1c9KDE1JlcpPDwxMnxMQTw8NnxQQTooSkE9NjMmbEFbZEErK10sKDI0OCZXKT09MjQwP1c9KDcmVyk8PDE4fExBPDwxMnxQQTw8NnxKQToocUE9NjMmbEFbZEErK10sVz0oMjUyJlcpPT0yNDg/KDMmVyk8PDI0fExBPDwxOHxQQTw8MTJ8SkE8PDZ8cUE6KDEmVyk8PDMwfExBPDwyNHxQQTw8MTh8SkE8PDEyfHFBPDw2fCh3ZT02MyZsQVtkQSsrXSkpKSxXPDY1NTM2KUtBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpO2Vsc2V7dmFyIHJ0PVctNjU1MzY7S0ErPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cnQ+PjEwLDU2MzIwfDEwMjMmcnQpfX19KShhLGYpfWZ1bmN0aW9uIFRBKGwpe2Zvcih2YXIgdT0iIjs7KXt2YXIgZj1zW2wrKz4+MF07aWYoIWYpcmV0dXJuIHU7dSs9U3RyaW5nLmZyb21DaGFyQ29kZShmKX19ZnVuY3Rpb24gdG4obCx1KXtyZXR1cm4oZnVuY3Rpb24odyxVLF8pe2Zvcih2YXIgb0E9MDtvQTx3Lmxlbmd0aDsrK29BKXNbVSsrPj4wXT13LmNoYXJDb2RlQXQob0EpO198fChzW1U+PjBdPTApfSkobCx1LCExKX12YXIgZnQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24geGUobCx1LGYsdyl7aWYoISh3PjApKXJldHVybiAwO2Zvcih2YXIgVT1mLF89Zit3LTEsb0E9MDtvQTxsLmxlbmd0aDsrK29BKXt2YXIgSD1sLmNoYXJDb2RlQXQob0EpO2lmKEg+PTU1Mjk2JiZIPD01NzM0MyYmKEg9NjU1MzYrKCgxMDIzJkgpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytvQSkpLEg8PTEyNyl7aWYoZj49XylicmVhazt1W2YrK109SH1lbHNlIGlmKEg8PTIwNDcpe2lmKGYrMT49XylicmVhazt1W2YrK109MTkyfEg+PjYsdVtmKytdPTEyOHw2MyZIfWVsc2UgaWYoSDw9NjU1MzUpe2lmKGYrMj49XylicmVhazt1W2YrK109MjI0fEg+PjEyLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD0yMDk3MTUxKXtpZihmKzM+PV8pYnJlYWs7dVtmKytdPTI0MHxIPj4xOCx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD02NzEwODg2Myl7aWYoZis0Pj1fKWJyZWFrO3VbZisrXT0yNDh8SD4+MjQsdVtmKytdPTEyOHxIPj4xOCY2Myx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZXtpZihmKzU+PV8pYnJlYWs7dVtmKytdPTI1MnxIPj4zMCx1W2YrK109MTI4fEg+PjI0JjYzLHVbZisrXT0xMjh8SD4+MTgmNjMsdVtmKytdPTEyOHxIPj4xMiY2Myx1W2YrK109MTI4fEg+PjYmNjMsdVtmKytdPTEyOHw2MyZIfX1yZXR1cm4gdVtmXT0wLGYtVX1mdW5jdGlvbiBldChsLHUsZil7cmV0dXJuIHhlKGwsYSx1LGYpfWZ1bmN0aW9uIFJBKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKHc9NjU1MzYrKCgxMDIzJncpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytmKSksdzw9MTI3PysrdTp3PD0yMDQ3P3UrPTI6dzw9NjU1MzU/dSs9Mzp3PD0yMDk3MTUxP3UrPTQ6dzw9NjcxMDg4NjM/dSs9NTp1Kz02fXJldHVybiB1fXZhciBvZT10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDA7ZnVuY3Rpb24gdHQobCl7Zm9yKHZhciB1PWwsZj11Pj4xO3JbZl07KSsrZjtpZigodT1mPDwxKS1sPjMyJiZvZSlyZXR1cm4gb2UuZGVjb2RlKGEuc3ViYXJyYXkobCx1KSk7Zm9yKHZhciB3PTAsVT0iIjs7KXt2YXIgXz1yW2wrMip3Pj4xXTtpZihfPT0wKXJldHVybiBVOysrdyxVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKF8pfX1mdW5jdGlvbiBubihsLHUsZil7aWYoZj09PXZvaWQgMCYmKGY9MjE0NzQ4MzY0NyksZjwyKXJldHVybiAwO2Zvcih2YXIgdz11LFU9KGYtPTIpPDIqbC5sZW5ndGg/Zi8yOmwubGVuZ3RoLF89MDtfPFU7KytfKXt2YXIgb0E9bC5jaGFyQ29kZUF0KF8pO3JbdT4+MV09b0EsdSs9Mn1yZXR1cm4gclt1Pj4xXT0wLHUtd31mdW5jdGlvbiByZShsKXtyZXR1cm4gMipsLmxlbmd0aH1mdW5jdGlvbiBtdChsKXtmb3IodmFyIHU9MCxmPSIiOzspe3ZhciB3PW9bbCs0KnU+PjJdO2lmKHc9PTApcmV0dXJuIGY7aWYoKyt1LHc+PTY1NTM2KXt2YXIgVT13LTY1NTM2O2YrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8VT4+MTAsNTYzMjB8MTAyMyZVKX1lbHNlIGYrPVN0cmluZy5mcm9tQ2hhckNvZGUodyl9fWZ1bmN0aW9uIFN0KGwsdSxmKXtpZihmPT09dm9pZCAwJiYoZj0yMTQ3NDgzNjQ3KSxmPDQpcmV0dXJuIDA7Zm9yKHZhciB3PXUsVT13K2YtNCxfPTA7XzxsLmxlbmd0aDsrK18pe3ZhciBvQT1sLmNoYXJDb2RlQXQoXyk7aWYob0E+PTU1Mjk2JiZvQTw9NTczNDMmJihvQT02NTUzNisoKDEwMjMmb0EpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytfKSksb1t1Pj4yXT1vQSwodSs9NCkrND5VKWJyZWFrfXJldHVybiBvW3U+PjJdPTAsdS13fWZ1bmN0aW9uIGdzKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKytmLHUrPTR9cmV0dXJuIHV9ZnVuY3Rpb24gY3MobCl7dmFyIHU9UkEobCkrMSxmPUR0KHUpO3JldHVybiBmJiZ4ZShsLHMsZix1KSxmfWZ1bmN0aW9uIHB0KGwpe3ZhciB1PVJBKGwpKzEsZj13dCh1KTtyZXR1cm4geGUobCxzLGYsdSksZn1mdW5jdGlvbiB5ZShsKXtyZXR1cm4gbH1mdW5jdGlvbiBzbigpe3ZhciBsLHU9KGZ1bmN0aW9uKCl7dmFyIHc9RXJyb3IoKTtpZighdy5zdGFjayl7dHJ5e3Rocm93IEVycm9yKDApfWNhdGNoKFUpe3c9VX1pZighdy5zdGFjaylyZXR1cm4iKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkifXJldHVybiB3LnN0YWNrLnRvU3RyaW5nKCl9KSgpO3JldHVybiBFLmV4dHJhU3RhY2tUcmFjZSYmKHUrPWAKYCtFLmV4dHJhU3RhY2tUcmFjZSgpKSwobD11KS5yZXBsYWNlKC9fX1pbXHdcZF9dKy9nLGZ1bmN0aW9uKGYpe3ZhciB3LFU9dz1mO3JldHVybiBmPT09VT9mOmYrIiBbIitVKyJdIn0pfWZ1bmN0aW9uIGllKGwsdSl7cmV0dXJuIGwldT4wJiYobCs9dS1sJXUpLGx9ZnVuY3Rpb24gSGUobCl7RS5idWZmZXI9bj1sfWZ1bmN0aW9uIGtlKCl7RS5IRUFQOD1zPW5ldyBJbnQ4QXJyYXkobiksRS5IRUFQMTY9cj1uZXcgSW50MTZBcnJheShuKSxFLkhFQVAzMj1vPW5ldyBJbnQzMkFycmF5KG4pLEUuSEVBUFU4PWE9bmV3IFVpbnQ4QXJyYXkobiksRS5IRUFQVTE2PUk9bmV3IFVpbnQxNkFycmF5KG4pLEUuSEVBUFUzMj1nPW5ldyBVaW50MzJBcnJheShuKSxFLkhFQVBGMzI9Qj1uZXcgRmxvYXQzMkFycmF5KG4pLEUuSEVBUEY2ND1kPW5ldyBGbG9hdDY0QXJyYXkobil9ZnVuY3Rpb24gbnQoKXt2YXIgbD1FLnVzaW5nV2FzbT82NTUzNjoxNjc3NzIxNix1PTIxNDc0ODM2NDgtbDtpZihvW0Q+PjJdPnUpcmV0dXJuITE7dmFyIGY9cEE7Zm9yKHBBPU1hdGgubWF4KHBBLDE2Nzc3MjE2KTtwQTxvW0Q+PjJdOylwQT1wQTw9NTM2ODcwOTEyP2llKDIqcEEsbCk6TWF0aC5taW4oaWUoKDMqcEErMjE0NzQ4MzY0OCkvNCxsKSx1KTt2YXIgdz1FLnJlYWxsb2NCdWZmZXIocEEpO3JldHVybiB3JiZ3LmJ5dGVMZW5ndGg9PXBBPyhIZSh3KSxrZSgpLCEwKToocEE9ZiwhMSl9aD1DPW09eT1GPWs9RD0wLFE9ITEsRS5yZWFsbG9jQnVmZmVyfHwoRS5yZWFsbG9jQnVmZmVyPWZ1bmN0aW9uKGwpe3RyeXtpZihBcnJheUJ1ZmZlci50cmFuc2Zlcil1PUFycmF5QnVmZmVyLnRyYW5zZmVyKG4sbCk7ZWxzZXt2YXIgdSxmPXM7dT1uZXcgQXJyYXlCdWZmZXIobCksbmV3IEludDhBcnJheSh1KS5zZXQoZil9fWNhdGNoe3JldHVybiExfXJldHVybiEhWWEodSkmJnV9KTt0cnl7KHY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIpLmdldCkpKG5ldyBBcnJheUJ1ZmZlcig0KSl9Y2F0Y2h7dj1mdW5jdGlvbih1KXtyZXR1cm4gdS5ieXRlTGVuZ3RofX12YXIgWWU9RS5UT1RBTF9TVEFDS3x8NTI0Mjg4MCxwQT1FLlRPVEFMX01FTU9SWXx8MTY3NzcyMTY7ZnVuY3Rpb24geXQoKXtyZXR1cm4gcEF9ZnVuY3Rpb24gZGUobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIHU9bC5zaGlmdCgpO2lmKHR5cGVvZiB1PT0iZnVuY3Rpb24iKXt1KCk7Y29udGludWV9dmFyIGY9dS5mdW5jO3R5cGVvZiBmPT0ibnVtYmVyIj91LmFyZz09PXZvaWQgMD9FLmR5bkNhbGxfdihmKTpFLmR5bkNhbGxfdmkoZix1LmFyZyk6Zih1LmFyZz09PXZvaWQgMD9udWxsOnUuYXJnKX19cEE8WWUmJmlBKCJUT1RBTF9NRU1PUlkgc2hvdWxkIGJlIGxhcmdlciB0aGFuIFRPVEFMX1NUQUNLLCB3YXMgIitwQSsiISAoVE9UQUxfU1RBQ0s9IitZZSsiKSIpLEUuYnVmZmVyP249RS5idWZmZXI6KHR5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5NZW1vcnk9PSJmdW5jdGlvbiI/KEUud2FzbU1lbW9yeT1uZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOnBBLzY1NTM2fSksbj1FLndhc21NZW1vcnkuYnVmZmVyKTpuPW5ldyBBcnJheUJ1ZmZlcihwQSksRS5idWZmZXI9biksa2UoKTt2YXIgc3Q9W10sYW49W10sRXM9W10sQnM9W10sQ3M9W10sb249ITEsTGE9ITE7ZnVuY3Rpb24gTmEobCl7c3QudW5zaGlmdChsKX1mdW5jdGlvbiBZcihsKXthbi51bnNoaWZ0KGwpfWZ1bmN0aW9uIFByKGwpe0VzLnVuc2hpZnQobCl9ZnVuY3Rpb24gSnIobCl7QnMudW5zaGlmdChsKX1mdW5jdGlvbiBVYShsKXtDcy51bnNoaWZ0KGwpfWZ1bmN0aW9uIHFyKGwsdSxmKXt2YXIgdyxVO2VBKCJ3cml0ZVN0cmluZ1RvTWVtb3J5IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkISBVc2Ugc3RyaW5nVG9VVEY4KCkgaW5zdGVhZCEiKSxmJiYodz1zW1U9dStSQShsKV0pLGV0KGwsdSwxLzApLGYmJihzW1VdPXcpfWZ1bmN0aW9uIEtyKGwsdSxmKXtyZXR1cm4gbD49MD9sOnU8PTMyPzIqTWF0aC5hYnMoMTw8dS0xKStsOk1hdGgucG93KDIsdSkrbH1mdW5jdGlvbiBPcihsLHUsZil7aWYobDw9MClyZXR1cm4gbDt2YXIgdz11PD0zMj9NYXRoLmFicygxPDx1LTEpOk1hdGgucG93KDIsdS0xKTtyZXR1cm4gbD49dyYmKHU8PTMyfHxsPncpJiYobD0tMip3K2wpLGx9dmFyIFRhPU1hdGguYWJzLHhhPU1hdGguY2VpbCxocz1NYXRoLmZsb29yLEhhPU1hdGgubWluLERlPTAscm49bnVsbCxhdD1udWxsO2Z1bmN0aW9uIFZyKGwpe3JldHVybiBsfUUucHJlbG9hZGVkSW1hZ2VzPXt9LEUucHJlbG9hZGVkQXVkaW9zPXt9O3ZhciBscz0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24ga3QobCl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD9sLnN0YXJ0c1dpdGgobHMpOmwuaW5kZXhPZihscyk9PT0wfShmdW5jdGlvbigpe3ZhciB1PSJtYWluLndhc3QiLGY9Im1haW4ud2FzbSIsdz0ibWFpbi50ZW1wLmFzbSI7a3QodSl8fCh1PXoodSkpLGt0KGYpfHwoZj16KGYpKSxrdCh3KXx8KHc9eih3KSk7dmFyIFU9e2dsb2JhbDpudWxsLGVudjpudWxsLGFzbTJ3YXNtOmFBLHBhcmVudDpFfSxfPW51bGw7ZnVuY3Rpb24gb0EoQ0Epe3JldHVybiBDQX1mdW5jdGlvbiBIKCl7dHJ5e2lmKEUud2FzbUJpbmFyeSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRS53YXNtQmluYXJ5KTtpZihFLnJlYWRCaW5hcnkpcmV0dXJuIEUucmVhZEJpbmFyeShmKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goQ0Epe0llKENBKX19RS5hc21QcmVsb2FkPUUuYXNtO3ZhciBEQT1FLnJlYWxsb2NCdWZmZXIsbEE9ZnVuY3Rpb24oQ0Epe0NBPWllKENBLEUudXNpbmdXYXNtPzY1NTM2OjE2Nzc3MjE2KTt2YXIgVz1FLmJ1ZmZlci5ieXRlTGVuZ3RoO2lmKEUudXNpbmdXYXNtKXRyeXt2YXIgTEE9RS53YXNtTWVtb3J5Lmdyb3coKENBLVcpLzY1NTM2KTtyZXR1cm4gTEEhPT0tMT9FLmJ1ZmZlcj1FLndhc21NZW1vcnkuYnVmZmVyOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fTtFLnJlYWxsb2NCdWZmZXI9ZnVuY3Rpb24oQ0Epe3JldHVybiBkQT09PSJhc21qcyI/REEoQ0EpOmxBKENBKX07dmFyIGRBPSIiO0UuYXNtPWZ1bmN0aW9uKENBLFcsTEEpe3ZhciBQQTtpZighKFc9UEE9VykudGFibGUpe3ZhciBKQSxxQT1FLndhc21UYWJsZVNpemU7cUE9PT12b2lkIDAmJihxQT0xMDI0KTt2YXIgd2U9RS53YXNtTWF4VGFibGVTaXplO3R5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5UYWJsZT09ImZ1bmN0aW9uIj93ZSE9PXZvaWQgMD9XLnRhYmxlPW5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDpxQSxtYXhpbXVtOndlLGVsZW1lbnQ6ImFueWZ1bmMifSk6Vy50YWJsZT1uZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6cUEsZWxlbWVudDoiYW55ZnVuYyJ9KTpXLnRhYmxlPUFycmF5KHFBKSxFLndhc21UYWJsZT1XLnRhYmxlfXJldHVybiBXLm1lbW9yeUJhc2V8fChXLm1lbW9yeUJhc2U9RS5TVEFUSUNfQkFTRSksVy50YWJsZUJhc2V8fChXLnRhYmxlQmFzZT0wKSxKQT0oZnVuY3Rpb24ocnQsUGUsRW4pe2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJuIGlBKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIiksITE7aWYoIShFLndhc21NZW1vcnkgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKXJldHVybiBpQSgibm8gbmF0aXZlIHdhc20gTWVtb3J5IGluIHVzZSIpLCExO2Z1bmN0aW9uIEZ0KGpBLCRBKXtpZigoXz1qQS5leHBvcnRzKS5tZW1vcnkpe3ZhciBpdCxCbix1cztpdD1fLm1lbW9yeSxCbj1FLmJ1ZmZlcixpdC5ieXRlTGVuZ3RoPEJuLmJ5dGVMZW5ndGgmJmlBKCJ0aGUgbmV3IGJ1ZmZlciBpbiBtZXJnZU1lbW9yeSBpcyBzbWFsbGVyIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4gaW4gbmF0aXZlIHdhc20sIHdlIHNob3VsZCBncm93IG1lbW9yeSBoZXJlIiksdXM9bmV3IEludDhBcnJheShCbiksbmV3IEludDhBcnJheShpdCkuc2V0KHVzKSxIZShpdCksa2UoKX1FLmFzbT1fLEUudXNpbmdXYXNtPSEwLChmdW5jdGlvbigkcil7aWYoRGUtLSxFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJkUubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhEZSksRGU9PTAmJihybiE9PW51bGwmJihjbGVhckludGVydmFsKHJuKSxybj1udWxsKSxhdCkpe3ZhciBQYT1hdDthdD1udWxsLFBhKCl9fSkoIndhc20taW5zdGFudGlhdGUiKX1pZihQZS5tZW1vcnk9RS53YXNtTWVtb3J5LFUuZ2xvYmFsPXtOYU46TmFOLEluZmluaXR5OjEvMH0sVVsiZ2xvYmFsLk1hdGgiXT1NYXRoLFUuZW52PVBlLERlKyssRS5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoRGUpLEUuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gRS5pbnN0YW50aWF0ZVdhc20oVSxGdCl9Y2F0Y2goakEpe3JldHVybiBpQSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitqQSksITF9ZnVuY3Rpb24gSmUoakEpe0Z0KGpBLmluc3RhbmNlLGpBLm1vZHVsZSl9ZnVuY3Rpb24gUXMoakEpeyghRS53YXNtQmluYXJ5JiYoT3x8bkEpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oJEEpe2lmKCEkQS5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2YrIiciO3JldHVybiAkQS5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSCgpfSk6bmV3IFByb21pc2UoZnVuY3Rpb24oJEEsaXQpeyRBKEgoKSl9KSkudGhlbihmdW5jdGlvbigkQSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCRBLFUpfSkudGhlbihqQSkuY2F0Y2goZnVuY3Rpb24oJEEpe2lBKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiKyRBKSxJZSgkQSl9KX1yZXR1cm4gRS53YXNtQmluYXJ5fHx0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmchPSJmdW5jdGlvbiJ8fGt0KGYpfHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/UXMoSmUpOldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGZldGNoKGYse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KSxVKS50aGVuKEplKS5jYXRjaChmdW5jdGlvbihqQSl7aUEoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2pBKSxpQSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxRcyhKZSl9KSx7fX0pKENBLFcsTEEpLFVBKEpBLCJubyBiaW5hcnllbiBtZXRob2Qgc3VjY2VlZGVkLiIpLEpBfSxFLmFzbX0pKCksQz0oaD0xMDI0KSs0ODE2LGFuLnB1c2goKSxFLlNUQVRJQ19CQVNFPWgsRS5TVEFUSUNfQlVNUD00ODE2O3ZhciB4QT1DO2Z1bmN0aW9uIFhyKGwpe3NbeEFdPXNbbF0sc1t4QSsxXT1zW2wrMV0sc1t4QSsyXT1zW2wrMl0sc1t4QSszXT1zW2wrM119ZnVuY3Rpb24gWnIobCl7c1t4QV09c1tsXSxzW3hBKzFdPXNbbCsxXSxzW3hBKzJdPXNbbCsyXSxzW3hBKzNdPXNbbCszXSxzW3hBKzRdPXNbbCs0XSxzW3hBKzVdPXNbbCs1XSxzW3hBKzZdPXNbbCs2XSxzW3hBKzddPXNbbCs3XX1mdW5jdGlvbiB6cihsLHUsZil7dmFyIHc9Zj4wP2Y6UkEobCkrMSxVPUFycmF5KHcpLF89eGUobCxVLDAsVS5sZW5ndGgpO3JldHVybiB1JiYoVS5sZW5ndGg9XyksVX1mdW5jdGlvbiBXcihsKXtmb3IodmFyIHU9W10sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgdz1sW2ZdO3c+MjU1JiYodyY9MjU1KSx1LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh3KSl9cmV0dXJuIHUuam9pbigiIil9Qys9MTYsRD1QKDQpLEY9KG09eT1iKEMpKStZZSxrPWIoRiksb1tEPj4yXT1rLFE9ITAsRS53YXNtVGFibGVTaXplPTQsRS53YXNtTWF4VGFibGVTaXplPTQsRS5hc21HbG9iYWxBcmc9e30sRS5hc21MaWJyYXJ5QXJnPXthYm9ydDpJZSxhc3NlcnQ6VUEsZW5sYXJnZU1lbW9yeTpudCxnZXRUb3RhbE1lbW9yeTp5dCxhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeTpmdW5jdGlvbigpe0llKCJDYW5ub3QgZW5sYXJnZSBtZW1vcnkgYXJyYXlzLiBFaXRoZXIgKDEpIGNvbXBpbGUgd2l0aCAgLXMgVE9UQUxfTUVNT1JZPVggIHdpdGggWCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSAiK3BBKyIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWxsb3dzIGluY3JlYXNpbmcgdGhlIHNpemUgYXQgcnVudGltZSwgb3IgKDMpIGlmIHlvdSB3YW50IG1hbGxvYyB0byByZXR1cm4gTlVMTCAoMCkgaW5zdGVhZCBvZiB0aGlzIGFib3J0LCBjb21waWxlIHdpdGggIC1zIEFCT1JUSU5HX01BTExPQz0wICIpfSxpbnZva2VfaWlpOmZ1bmN0aW9uKHUsZix3KXt2YXIgVT1nbigpO3RyeXtyZXR1cm4gRS5keW5DYWxsX2lpaSh1LGYsdyl9Y2F0Y2goXyl7aWYoSW4oVSksdHlwZW9mIF8hPSJudW1iZXIiJiZfIT09ImxvbmdqbXAiKXRocm93IF87RS5zZXRUaHJldygxLDApfX0sX19fYXNzZXJ0X2ZhaWw6ZnVuY3Rpb24odSxmLHcsVSl7SWUoIkFzc2VydGlvbiBmYWlsZWQ6ICIrbGUodSkrIiwgYXQ6ICIrW2Y/bGUoZik6InVua25vd24gZmlsZW5hbWUiLHcsVT9sZShVKToidW5rbm93biBmdW5jdGlvbiJdKX0sX19fc2V0RXJyTm86ZnVuY3Rpb24odSl7cmV0dXJuIEUuX19fZXJybm9fbG9jYXRpb24mJihvW0UuX19fZXJybm9fbG9jYXRpb24oKT4+Ml09dSksdX0sX2Fib3J0OmZ1bmN0aW9uKCl7RS5hYm9ydCgpfSxfZW1zY3JpcHRlbl9tZW1jcHlfYmlnOmZ1bmN0aW9uKHUsZix3KXtyZXR1cm4gYS5zZXQoYS5zdWJhcnJheShmLGYrdyksdSksdX0sX2xsdm1fZmxvb3JfZjY0OmhzLERZTkFNSUNUT1BfUFRSOkQsdGVtcERvdWJsZVB0cjp4QSxBQk9SVDpCQSxTVEFDS1RPUDp5LFNUQUNLX01BWDpGfTt2YXIgZHM9RS5hc20oRS5hc21HbG9iYWxBcmcsRS5hc21MaWJyYXJ5QXJnLG4pO0UuYXNtPWRzLEUuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX19fZXJybm9fbG9jYXRpb24uYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgWWE9RS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeT1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeS5hcHBseShudWxsLGFyZ3VtZW50cyl9O0UuX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX2ZyZWUuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgRHQ9RS5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9tYWxsb2MuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtFLl9tZW1jcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX21lbWNweS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX21lbXNldD1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fbWVtc2V0LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc2Jyaz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fc2Jyay5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX3N0Yl92b3JiaXNfanNfY2hhbm5lbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX2Nsb3NlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19kZWNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfZGVjb2RlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX29wZW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5lc3RhYmxpc2hTdGFja1NwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmVzdGFibGlzaFN0YWNrU3BhY2UuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmdldFRlbXBSZXQwPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmdldFRlbXBSZXQwLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5ydW5Qb3N0U2V0cz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5ydW5Qb3N0U2V0cy5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuc2V0VGVtcFJldDA9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc2V0VGVtcFJldDAuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLnNldFRocmV3PWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLnNldFRocmV3LmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHd0PUUuc3RhY2tBbGxvYz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5zdGFja0FsbG9jLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSW49RS5zdGFja1Jlc3RvcmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tSZXN0b3JlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ249RS5zdGFja1NhdmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tTYXZlLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZnVuY3Rpb24gb3QobCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitsKyIpIix0aGlzLnN0YXR1cz1sfWZ1bmN0aW9uIGNuKGwpe2w9bHx8RS5hcmd1bWVudHMsIShEZT4wKSYmKChmdW5jdGlvbigpe2lmKEUucHJlUnVuKWZvcih0eXBlb2YgRS5wcmVSdW49PSJmdW5jdGlvbiImJihFLnByZVJ1bj1bRS5wcmVSdW5dKTtFLnByZVJ1bi5sZW5ndGg7KU5hKEUucHJlUnVuLnNoaWZ0KCkpO2RlKHN0KX0pKCksIShEZT4wKSYmKEUuY2FsbGVkUnVufHwoRS5zZXRTdGF0dXM/KEUuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtFLnNldFN0YXR1cygiIil9LDEpLHUoKX0sMSkpOnUoKSkpKTtmdW5jdGlvbiB1KCl7IUUuY2FsbGVkUnVuJiYoRS5jYWxsZWRSdW49ITAsQkF8fChvbnx8KG9uPSEwLGRlKGFuKSksZGUoRXMpLEUub25SdW50aW1lSW5pdGlhbGl6ZWQmJkUub25SdW50aW1lSW5pdGlhbGl6ZWQoKSwoZnVuY3Rpb24oKXtpZihFLnBvc3RSdW4pZm9yKHR5cGVvZiBFLnBvc3RSdW49PSJmdW5jdGlvbiImJihFLnBvc3RSdW49W0UucG9zdFJ1bl0pO0UucG9zdFJ1bi5sZW5ndGg7KVVhKEUucG9zdFJ1bi5zaGlmdCgpKTtkZShDcyl9KSgpKSl9fWZ1bmN0aW9uIF9yKGwsdSl7KCF1fHwhRS5ub0V4aXRSdW50aW1lfHxsIT09MCkmJihFLm5vRXhpdFJ1bnRpbWV8fChCQT0hMCxfQT1sLHk9TCxkZShCcyksTGE9ITAsRS5vbkV4aXQmJkUub25FeGl0KGwpKSxFLnF1aXQobCxuZXcgb3QobCkpKX1mdW5jdGlvbiBJZShsKXt0aHJvdyBFLm9uQWJvcnQmJkUub25BYm9ydChsKSxsIT09dm9pZCAwPyh0QShsKSxpQShsKSxsPUpTT04uc3RyaW5naWZ5KGwpKTpsPSIiLEJBPSEwLF9BPTEsImFib3J0KCIrbCsiKS4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4ifWlmKEUuZHluQ2FsbF9paWk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uZHluQ2FsbF9paWkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmFzbT1kcyxFLmNjYWxsPVVlLEUuY3dyYXA9ZnVuY3Rpb24odSxmLHcsVSl7dmFyIF89KHc9d3x8W10pLmV2ZXJ5KGZ1bmN0aW9uKG9BKXtyZXR1cm4gb0E9PT0ibnVtYmVyIn0pO3JldHVybiBmIT09InN0cmluZyImJl8mJiFVP0NlKHUpOmZ1bmN0aW9uKCl7cmV0dXJuIFVlKHUsZix3LGFyZ3VtZW50cyxVKX19LG90LnByb3RvdHlwZT1FcnJvcigpLG90LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vdCxhdD1mdW5jdGlvbiBsKCl7RS5jYWxsZWRSdW58fGNuKCksRS5jYWxsZWRSdW58fChhdD1sKX0sRS5ydW49Y24sRS5hYm9ydD1JZSxFLnByZUluaXQpZm9yKHR5cGVvZiBFLnByZUluaXQ9PSJmdW5jdGlvbiImJihFLnByZUluaXQ9W0UucHJlSW5pdF0pO0UucHJlSW5pdC5sZW5ndGg+MDspRS5wcmVJbml0LnBvcCgpKCk7RS5ub0V4aXRSdW50aW1lPSEwLGNuKCksRS5vblJ1bnRpbWVJbml0aWFsaXplZD0oKT0+e2tzPSEwLGFhKCl9LGx0LmRlY29kZT1mdW5jdGlvbihsKXtyZXR1cm4oZnVuY3Rpb24oZil7aWYoIWtzKXRocm93IEVycm9yKCJTRjMgZGVjb2RlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBEaWQgeW91IGF3YWl0IHN5bnRoLmlzUmVhZHk/Iik7dmFyIHc9e307ZnVuY3Rpb24gVShQZSl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSwxKVswXX1mdW5jdGlvbiBfKFBlLEVuKXt2YXIgRnQ9bmV3IEFycmF5QnVmZmVyKEVuKkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCksSmU9bmV3IEZsb2F0MzJBcnJheShGdCk7cmV0dXJuIEplLnNldChuZXcgRmxvYXQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSxFbikpLEplfXcub3Blbj1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX29wZW4iLCJudW1iZXIiLFtdKSx3LmNsb3NlPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2xvc2UiLCJ2b2lkIixbIm51bWJlciJdKSx3LmNoYW5uZWxzPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2hhbm5lbHMiLCJudW1iZXIiLFsibnVtYmVyIl0pLHcuc2FtcGxlUmF0ZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlIiwibnVtYmVyIixbIm51bWJlciJdKSx3LmRlY29kZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX2RlY29kZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSk7dmFyIG9BLEgsREEsbEEsZEE9dy5vcGVuKCksQ0E9KG9BPWYsSD1mLmJ5dGVMZW5ndGgsREE9RS5fbWFsbG9jKEgpLChsQT1uZXcgVWludDhBcnJheShFLkhFQVBVOC5idWZmZXIsREEsSCkpLnNldChuZXcgVWludDhBcnJheShvQSwwLEgpKSxsQSksVz1FLl9tYWxsb2MoNCksTEE9RS5fbWFsbG9jKDQpLFBBPXcuZGVjb2RlKGRBLENBLmJ5dGVPZmZzZXQsQ0EuYnl0ZUxlbmd0aCxXLExBKTtpZihFLl9mcmVlKENBLmJ5dGVPZmZzZXQpLFBBPDApdGhyb3cgdy5jbG9zZShkQSksRS5fZnJlZShXKSxFcnJvcigic3Ridm9yYmlzIGRlY29kZSBmYWlsZWQ6ICIrUEEpO2Zvcih2YXIgSkE9dy5jaGFubmVscyhkQSkscUE9QXJyYXkoSkEpLHdlPW5ldyBJbnQzMkFycmF5KEUuSEVBUFUzMi5idWZmZXIsVShXKSxKQSksS0E9MDtLQTxKQTtLQSsrKXFBW0tBXT1fKHdlW0tBXSxQQSksRS5fZnJlZSh3ZVtLQV0pO3ZhciBydD13LnNhbXBsZVJhdGUoZEEpO3JldHVybiB3LmNsb3NlKGRBKSxFLl9mcmVlKFUoVykpLEUuX2ZyZWUoVykse2RhdGE6cUEsc2FtcGxlUmF0ZTpydCxlb2Y6ITAsZXJyb3I6bnVsbH19KShsKX19KSgpO3ZhciBPdD1sdCxzcz0tMTVlMyxHbz0xNWUzLHZuPW5ldyBGbG9hdDMyQXJyYXkoR28tc3MrMSk7Zm9yKGxldCBlPTA7ZTx2bi5sZW5ndGg7ZSsrKXtsZXQgQT1zcytlO3ZuW2VdPU1hdGgucG93KDIsQS8xMjAwKX1mdW5jdGlvbiBRZShlKXtyZXR1cm4gZTw9LTMyNzY3PzA6dm5bZS1zc119dmFyIFl0PS0yZTQsb2E9MTY1MDAsTG49bmV3IEZsb2F0MzJBcnJheShvYS1ZdCsxKTtmb3IobGV0IGU9MDtlPExuLmxlbmd0aDtlKyspe2xldCBBPVl0K2U7TG5bZV09NDQwKk1hdGgucG93KDIsKEEtNjkwMCkvMTIwMCl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuIGU8WXR8fGU+b2E/NDQwKk1hdGgucG93KDIsKGUtNjkwMCkvMTIwMCk6TG5bfn5lLVl0XX12YXIgYXM9LTE2NjAsUm89MTYwMCxVbj1uZXcgRmxvYXQzMkFycmF5KChSby1hcykqMTAwKzEpO2ZvcihsZXQgZT0wO2U8VW4ubGVuZ3RoO2UrKyl7bGV0IEE9KGFzKjEwMCtlKS8xMDA7VW5bZV09TWF0aC5wb3coMTAsLUEvMjApfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBVbltNYXRoLmZsb29yKChlLWFzKSoxMDApXX12YXIgTW89LjAxLEhBPTEwMCxRbj05MCxibz0xNWUtNixiZT1jbGFzcyByYXtzYW1wbGVSYXRlO2N1cnJlbnRBdHRlbnVhdGlvbkRiPUhBO3N0YXRlPTA7YXR0ZW51YXRpb249MDthdHRlbnVhdGlvblRhcmdldEdhaW49MDtjdXJyZW50U2FtcGxlVGltZT0wO3JlbGVhc2VTdGFydERiPUhBO3JlbGVhc2VTdGFydFRpbWVTYW1wbGVzPTA7Y3VycmVudFJlbGVhc2VHYWluPTE7YXR0YWNrRHVyYXRpb249MDtkZWNheUR1cmF0aW9uPTA7cmVsZWFzZUR1cmF0aW9uPTA7YXR0ZW51YXRpb25UYXJnZXQ9MDtzdXN0YWluRGJSZWxhdGl2ZT0wO2RlbGF5RW5kPTA7YXR0YWNrRW5kPTA7aG9sZEVuZD0wO2RlY2F5RW5kPTA7Y2FuRW5kT25TaWxlbnRTdXN0YWluO2NvbnN0cnVjdG9yKEEsdCl7dGhpcy5zYW1wbGVSYXRlPUEsdGhpcy5jYW5FbmRPblNpbGVudFN1c3RhaW49dC8xMD49UW59c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtBLnZvbHVtZUVudmVsb3BlLnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzPUEudm9sdW1lRW52ZWxvcGUuY3VycmVudFNhbXBsZVRpbWUsQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50UmVsZWFzZUdhaW49QWUoQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYikscmEucmVjYWxjdWxhdGUoQSl9c3RhdGljIHJlY2FsY3VsYXRlKEEpe2xldCB0PUEudm9sdW1lRW52ZWxvcGUsbj1nPT5NYXRoLm1heCgwLE1hdGguZmxvb3IoUWUoZykqdC5zYW1wbGVSYXRlKSk7dC5hdHRlbnVhdGlvblRhcmdldD1NYXRoLm1heCgwLE1hdGgubWluKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0sMTQ0MCkpLzEwLHQuYXR0ZW51YXRpb25UYXJnZXRHYWluPUFlKHQuYXR0ZW51YXRpb25UYXJnZXQpLHQuc3VzdGFpbkRiUmVsYXRpdmU9TWF0aC5taW4oSEEsQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3VzdGFpblZvbEVudl0vMTApO2xldCBzPU1hdGgubWluKEhBLHQuc3VzdGFpbkRiUmVsYXRpdmUpO3QuYXR0YWNrRHVyYXRpb249bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5hdHRhY2tWb2xFbnZdKTtsZXQgYT1BLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWNheVZvbEVudl0scj0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52RGVjYXldLEk9cy9IQTt0LmRlY2F5RHVyYXRpb249bihhK3IpKkksdC5yZWxlYXNlRHVyYXRpb249bihNYXRoLm1heCgtNzIwMCxBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XSkpLHQuZGVsYXlFbmQ9bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheVZvbEVudl0pLHQuYXR0YWNrRW5kPXQuYXR0YWNrRHVyYXRpb24rdC5kZWxheUVuZDtsZXQgbz0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52SG9sZF07aWYodC5ob2xkRW5kPW4oQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaG9sZFZvbEVudl0rbykrdC5hdHRhY2tFbmQsdC5kZWNheUVuZD10LmRlY2F5RHVyYXRpb24rdC5ob2xkRW5kLHQuc3RhdGU9PT0wJiZ0LmF0dGFja0VuZD09PTAmJih0LnN0YXRlPTIpLEEuaXNJblJlbGVhc2Upe2xldCBnPU1hdGgubWF4KDAsTWF0aC5taW4oSEEsdC5zdXN0YWluRGJSZWxhdGl2ZSkpLEI9Zy9IQTtzd2l0Y2godC5kZWNheUR1cmF0aW9uPW4oYStyKSpCLHQuc3RhdGUpe2Nhc2UgMDp0LnJlbGVhc2VTdGFydERiPUhBO2JyZWFrO2Nhc2UgMTp7bGV0IGg9MS0odC5hdHRhY2tFbmQtdC5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcykvdC5hdHRhY2tEdXJhdGlvbjt0LnJlbGVhc2VTdGFydERiPTIwKk1hdGgubG9nMTAoaCkqLTE7YnJlYWt9Y2FzZSAyOnQucmVsZWFzZVN0YXJ0RGI9MDticmVhaztjYXNlIDM6dC5yZWxlYXNlU3RhcnREYj0oMS0odC5kZWNheUVuZC10LnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzKS90LmRlY2F5RHVyYXRpb24pKmc7YnJlYWs7Y2FzZSA0OnQucmVsZWFzZVN0YXJ0RGI9ZzticmVha310LnJlbGVhc2VTdGFydERiPU1hdGgubWF4KDAsTWF0aC5taW4odC5yZWxlYXNlU3RhcnREYixIQSkpLHQucmVsZWFzZVN0YXJ0RGI+PVFuJiYoQS5maW5pc2hlZD0hMCksdC5jdXJyZW50UmVsZWFzZUdhaW49QWUodC5yZWxlYXNlU3RhcnREYik7bGV0IGQ9KEhBLXQucmVsZWFzZVN0YXJ0RGIpL0hBO3QucmVsZWFzZUR1cmF0aW9uKj1kfX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS52b2x1bWVFbnZlbG9wZSxyPW4vMTAsST1zO2lmKEEuaXNJblJlbGVhc2Upe2xldCBnPWEuY3VycmVudFNhbXBsZVRpbWUtYS5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcztpZihnPj1hLnJlbGVhc2VEdXJhdGlvbil7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspdFtkXT0wO0EuZmluaXNoZWQ9ITA7cmV0dXJufWxldCBCPUhBLWEucmVsZWFzZVN0YXJ0RGI7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBoPWcvYS5yZWxlYXNlRHVyYXRpb24qQithLnJlbGVhc2VTdGFydERiO2EuY3VycmVudFJlbGVhc2VHYWluPWEuYXR0ZW51YXRpb24qQWUoaCtyKSx0W2RdKj1hLmN1cnJlbnRSZWxlYXNlR2FpbixhLmN1cnJlbnRTYW1wbGVUaW1lKyssZysrfWEuY3VycmVudFJlbGVhc2VHYWluPD1ibyYmKEEuZmluaXNoZWQ9ITApO3JldHVybn1sZXQgbz0wO3N3aXRjaChhLnN0YXRlKXtjYXNlIDA6Zm9yKDthLmN1cnJlbnRTYW1wbGVUaW1lPGEuZGVsYXlFbmQ7KWlmKGEuY3VycmVudEF0dGVudWF0aW9uRGI9SEEsdFtvXT0wLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSAxOmZvcig7YS5jdXJyZW50U2FtcGxlVGltZTxhLmF0dGFja0VuZDspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBnPTEtKGEuYXR0YWNrRW5kLWEuY3VycmVudFNhbXBsZVRpbWUpL2EuYXR0YWNrRHVyYXRpb247aWYodFtvXSo9ZyphLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm59YS5zdGF0ZSsrO2Nhc2UgMjpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5ob2xkRW5kOylpZihhLmF0dGVudWF0aW9uKz0oYS5hdHRlbnVhdGlvblRhcmdldEdhaW4tYS5hdHRlbnVhdGlvbikqSSx0W29dKj1hLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm47YS5zdGF0ZSsrO2Nhc2UgMzpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5kZWNheUVuZDspaWYoYS5hdHRlbnVhdGlvbis9KGEuYXR0ZW51YXRpb25UYXJnZXRHYWluLWEuYXR0ZW51YXRpb24pKkksYS5jdXJyZW50QXR0ZW51YXRpb25EYj0oMS0oYS5kZWNheUVuZC1hLmN1cnJlbnRTYW1wbGVUaW1lKS9hLmRlY2F5RHVyYXRpb24pKmEuc3VzdGFpbkRiUmVsYXRpdmUsdFtvXSo9YS5hdHRlbnVhdGlvbipBZShhLmN1cnJlbnRBdHRlbnVhdGlvbkRiK3IpLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSA0OmZvcihhLmNhbkVuZE9uU2lsZW50U3VzdGFpbiYmYS5zdXN0YWluRGJSZWxhdGl2ZT49UW4mJihBLmZpbmlzaGVkPSEwKTs7KWlmKGEuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJLHRbb10qPWEuYXR0ZW51YXRpb24qQWUoYS5zdXN0YWluRGJSZWxhdGl2ZStyKSxhLmN1cnJlbnRBdHRlbnVhdGlvbkRiPWEuc3VzdGFpbkRiUmVsYXRpdmUsYS5jdXJyZW50U2FtcGxlVGltZSsrLCsrbz49dC5sZW5ndGgpcmV0dXJufX19O2Z1bmN0aW9uIHZvKGUsQSl7c3dpdGNoKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnNbZV09QSxlKXtjYXNlIm1hc3RlclBhbiI6e2xldCB0PUE7dD10LzIrLjUsdGhpcy5wcml2YXRlUHJvcHMucGFuTGVmdD0xLXQsdGhpcy5wcml2YXRlUHJvcHMucGFuUmlnaHQ9dDticmVha31jYXNlIm1hc3RlckdhaW4iOmJyZWFrO2Nhc2Uidm9pY2VDYXAiOmJyZWFrO2Nhc2UiaW50ZXJwb2xhdGlvblR5cGUiOmJyZWFrO2Nhc2UibWlkaVN5c3RlbSI6YnJlYWs7Y2FzZSJtb25vcGhvbmljUmV0cmlnZ2VyTW9kZSI6YnJlYWs7Y2FzZSJ0cmFuc3Bvc2l0aW9uIjp7bGV0IHQ9QTt0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnRyYW5zcG9zaXRpb249MDtmb3IobGV0IG4gb2YgdGhpcy5taWRpQ2hhbm5lbHMpbi50cmFuc3Bvc2VDaGFubmVsKHQpO3RoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbj10fX10aGlzLmNhbGxFdmVudCgibWFzdGVyUGFyYW1ldGVyQ2hhbmdlIix7cGFyYW1ldGVyOmUsdmFsdWU6QX0pfWZ1bmN0aW9uIExvKGUpe3JldHVybiB0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzW2VdfWZ1bmN0aW9uIE5vKCl7cmV0dXJuey4uLnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnN9fWZ1bmN0aW9uIE1lKGUsQSl7cmV0dXJuKGU+PkEmMSk+MH1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZT8xOjB9dmFyIE5BPTE2Mzg0LFB0PU9iamVjdC5rZXlzKFFBKS5sZW5ndGgsaWE9NCxjZT1uZXcgRmxvYXQzMkFycmF5KE5BKzEpLHZlPW5ldyBGbG9hdDMyQXJyYXkoTkErMSk7Y2VbMF09MDtjZVtjZS5sZW5ndGgtMV09MTt2ZVswXT0wO3ZlW3ZlLmxlbmd0aC0xXT0xO2ZvcihsZXQgZT0xO2U8TkEtMTtlKyspe2xldCBBPS0uNDE2NjY2NjY2NjY2NjY2NypNYXRoLmxvZyhlLyhjZS5sZW5ndGgtMSkpL01hdGguTE4xMDt2ZVtlXT0xLUEsY2VbY2UubGVuZ3RoLTEtZV09QX1mdW5jdGlvbiBJYShlLEEsdCl7bGV0IG49ISEoZSYyKTtzd2l0Y2goISEoZSYxKSYmKHQ9MS10KSxBKXtjYXNlIFFBLmxpbmVhcjpyZXR1cm4gbj90KjItMTp0O2Nhc2UgUUEuc3dpdGNoOnJldHVybiB0PXQ+LjU/MTowLG4/dCoyLTE6dDtjYXNlIFFBLmNvbmNhdmU6cmV0dXJuIG4/KHQ9dCoyLTEsdDwwPy1jZVt+fih0Ki1OQSldOmNlW35+KHQqTkEpXSk6Y2Vbfn4odCpOQSldO2Nhc2UgUUEuY29udmV4OnJldHVybiBuPyh0PXQqMi0xLHQ8MD8tdmVbfn4odCotTkEpXTp2ZVt+fih0Kk5BKV0pOnZlW35+KHQqTkEpXX19dmFyIFhBPWNsYXNzIFRue2lzQmlwb2xhcjtpc05lZ2F0aXZlO2luZGV4O2lzQ0M7Y3VydmVUeXBlO2NvbnN0cnVjdG9yKEE9ai5ub0NvbnRyb2xsZXIsdD1RQS5saW5lYXIsbj0hMSxzPSExLGE9ITEpe3RoaXMuaXNCaXBvbGFyPXMsdGhpcy5pc05lZ2F0aXZlPWEsdGhpcy5pbmRleD1BLHRoaXMuaXNDQz1uLHRoaXMuY3VydmVUeXBlPXR9Z2V0IHNvdXJjZU5hbWUoKXtyZXR1cm4gdGhpcy5pc0NDP09iamVjdC5rZXlzKFMpLmZpbmQoQT0+U1tBXT09PXRoaXMuaW5kZXgpPz90aGlzLmluZGV4LnRvU3RyaW5nKCk6T2JqZWN0LmtleXMoaikuZmluZChBPT5qW0FdPT09dGhpcy5pbmRleCk/P3RoaXMuaW5kZXgudG9TdHJpbmcoKX1nZXQgY3VydmVUeXBlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhRQSkuZmluZChBPT5RQVtBXT09PXRoaXMuY3VydmVUeXBlKT8/dGhpcy5jdXJ2ZVR5cGUudG9TdHJpbmcoKX1zdGF0aWMgZnJvbVNvdXJjZUVudW0oQSl7bGV0IHQ9TWUoQSw5KSxuPU1lKEEsOCkscz1NZShBLDcpLGE9QSYxMjcscj1BPj4xMCYzO3JldHVybiBuZXcgVG4oYSxyLHMsdCxuKX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyBUbihBLmluZGV4LEEuY3VydmVUeXBlLEEuaXNDQyxBLmlzQmlwb2xhcixBLmlzTmVnYXRpdmUpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5zb3VyY2VOYW1lfSAke3RoaXMuY3VydmVUeXBlTmFtZX0gJHt0aGlzLmlzQmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmlzTmVnYXRpdmU/Im5lZ2F0aXZlIjoicG9zaXRpdmUifWB9dG9Tb3VyY2VFbnVtKCl7cmV0dXJuIHRoaXMuY3VydmVUeXBlPDwxMHx1bih0aGlzLmlzQmlwb2xhcik8PDl8dW4odGhpcy5pc05lZ2F0aXZlKTw8OHx1bih0aGlzLmlzQ0MpPDw3fHRoaXMuaW5kZXh9aXNJZGVudGljYWwoQSl7cmV0dXJuIHRoaXMuaW5kZXg9PT1BLmluZGV4JiZ0aGlzLmlzTmVnYXRpdmU9PT1BLmlzTmVnYXRpdmUmJnRoaXMuaXNDQz09PUEuaXNDQyYmdGhpcy5pc0JpcG9sYXI9PT1BLmlzQmlwb2xhciYmdGhpcy5jdXJ2ZVR5cGU9PT1BLmN1cnZlVHlwZX1nZXRWYWx1ZShBLHQpe2xldCBuO2lmKHRoaXMuaXNDQyluPUFbdGhpcy5pbmRleF07ZWxzZSBzd2l0Y2godGhpcy5pbmRleCl7Y2FzZSBqLm5vQ29udHJvbGxlcjpuPTE2MzgzO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06bj10Lm1pZGlOb3RlPDw3O2JyZWFrO2Nhc2Ugai5ub3RlT25WZWxvY2l0eTpuPXQudmVsb2NpdHk8PDc7YnJlYWs7Y2FzZSBqLnBvbHlQcmVzc3VyZTpuPXQucHJlc3N1cmU8PDc7YnJlYWs7ZGVmYXVsdDpuPUFbdGhpcy5pbmRleCttQV07YnJlYWt9bGV0IHM9KHRoaXMuaXNCaXBvbGFyPzI6MCl8KHRoaXMuaXNOZWdhdGl2ZT8xOjApO3JldHVybiBnYVtOQSoodGhpcy5jdXJ2ZVR5cGUqUHQrcykrbl19fSxnYT1uZXcgRmxvYXQzMkFycmF5KE5BKmlhKlB0KTtmb3IobGV0IGU9MDtlPFB0O2UrKylmb3IobGV0IEE9MDtBPGlhO0ErKyl7bGV0IHQ9TkEqKGUqUHQrQSk7Zm9yKGxldCBuPTA7bjxOQTtuKyspZ2FbdCtuXT1JYShBLGUsbi9OQSl9dmFyIG1lPTEwO2Z1bmN0aW9uIGdlKGUsQSx0LG4scyl7cmV0dXJuIG5ldyBYQShzLGUsbixBLHQpLnRvU291cmNlRW51bSgpfXZhciBjYT1nZShRQS5saW5lYXIsITAsITEsITAsUy5maWx0ZXJSZXNvbmFuY2UpLEVBPWNsYXNzIHhue2N1cnJlbnRWYWx1ZT0wO2Rlc3RpbmF0aW9uPWkuaW5pdGlhbEF0dGVudWF0aW9uO3RyYW5zZm9ybUFtb3VudD0wO3RyYW5zZm9ybVR5cGU9MDtpc0VmZmVjdE1vZHVsYXRvcj0hMTtpc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj0hMTtwcmltYXJ5U291cmNlO3NlY29uZGFyeVNvdXJjZTtjb25zdHJ1Y3RvcihBPW5ldyBYQSx0PW5ldyBYQSxuPWkuSU5WQUxJRCxzPTAsYT0wLHI9ITEsST0hMSl7dGhpcy5wcmltYXJ5U291cmNlPUEsdGhpcy5zZWNvbmRhcnlTb3VyY2U9dCx0aGlzLmRlc3RpbmF0aW9uPW4sdGhpcy50cmFuc2Zvcm1BbW91bnQ9cyx0aGlzLnRyYW5zZm9ybVR5cGU9YSx0aGlzLmlzRWZmZWN0TW9kdWxhdG9yPXIsdGhpcy5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj1JfWdldCBkZXN0aW5hdGlvbk5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZmluZChBPT5pW0FdPT09dGhpcy5kZXN0aW5hdGlvbil9c3RhdGljIGlzSWRlbnRpY2FsKEEsdCxuPSExKXtyZXR1cm4gQS5wcmltYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQucHJpbWFyeVNvdXJjZSkmJkEuc2Vjb25kYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQuc2Vjb25kYXJ5U291cmNlKSYmQS5kZXN0aW5hdGlvbj09PXQuZGVzdGluYXRpb24mJkEudHJhbnNmb3JtVHlwZT09PXQudHJhbnNmb3JtVHlwZSYmKCFufHxBLnRyYW5zZm9ybUFtb3VudD09PXQudHJhbnNmb3JtQW1vdW50KX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyB4bihYQS5jb3B5RnJvbShBLnByaW1hcnlTb3VyY2UpLFhBLmNvcHlGcm9tKEEuc2Vjb25kYXJ5U291cmNlKSxBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50LEEudHJhbnNmb3JtVHlwZSxBLmlzRWZmZWN0TW9kdWxhdG9yLEEuaXNEZWZhdWx0UmVzb25hbnRNb2R1bGF0b3IpfXRvU3RyaW5nKCl7cmV0dXJuYFNvdXJjZTogJHt0aGlzLnByaW1hcnlTb3VyY2UudG9TdHJpbmcoKX0KU2Vjb25kYXJ5IHNvdXJjZTogJHt0aGlzLnNlY29uZGFyeVNvdXJjZS50b1N0cmluZygpfQp0bzogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX0KYW1vdW50OiAke3RoaXMudHJhbnNmb3JtQW1vdW50fWArKHRoaXMudHJhbnNmb3JtVHlwZT09PTI/ImFic29sdXRlIHZhbHVlIjoiIil9d3JpdGUoQSx0KXtKKEEsdGhpcy5wcmltYXJ5U291cmNlLnRvU291cmNlRW51bSgpKSxKKEEsdGhpcy5kZXN0aW5hdGlvbiksSihBLHRoaXMudHJhbnNmb3JtQW1vdW50KSxKKEEsdGhpcy5zZWNvbmRhcnlTb3VyY2UudG9Tb3VyY2VFbnVtKCkpLEooQSx0aGlzLnRyYW5zZm9ybVR5cGUpLHQmJnQubW9kKyt9c3VtVHJhbnNmb3JtKEEpe2xldCB0PXhuLmNvcHlGcm9tKHRoaXMpO3JldHVybiB0LnRyYW5zZm9ybUFtb3VudCs9QS50cmFuc2Zvcm1BbW91bnQsdH19LHlBPWNsYXNzIGV4dGVuZHMgRUF7Y29uc3RydWN0b3IoZSxBLHQsbixzKXtsZXQgYT0oZT09PTIxOXx8ZT09PTIyMSkmJkE9PT0wJiYodD09PWkucmV2ZXJiRWZmZWN0c1NlbmR8fHQ9PT1pLmNob3J1c0VmZmVjdHNTZW5kKSxyPWU9PT1jYSYmQT09PTAmJnQ9PT1pLmluaXRpYWxGaWx0ZXJRO3N1cGVyKFhBLmZyb21Tb3VyY2VFbnVtKGUpLFhBLmZyb21Tb3VyY2VFbnVtKEEpLHQsbixzLGEsciksdGhpcy5kZXN0aW5hdGlvbj5tbyYmKHRoaXMuZGVzdGluYXRpb249aS5JTlZBTElEKX19LGZuPTk2MCxtbj1RQS5jb25jYXZlLFVvPVtuZXcgeUEoZ2UobW4sITEsITAsITEsai5ub3RlT25WZWxvY2l0eSksMCxpLmluaXRpYWxBdHRlbnVhdGlvbixmbiwwKSxuZXcgeUEoMTI5LDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLm1haW5Wb2x1bWUpLDAsaS5pbml0aWFsQXR0ZW51YXRpb24sZm4sMCksbmV3IHlBKDEzLDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QSg1MjYsMTYsaS5maW5lVHVuZSwxMjcwMCwwKSxuZXcgeUEoNjUwLDAsaS5wYW4sNTAwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLmV4cHJlc3Npb25Db250cm9sbGVyKSwwLGkuaW5pdGlhbEF0dGVudWF0aW9uLGZuLDApLG5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDIwMCwwKSxuZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwyMDAsMCldLFRvPVtuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCExLGoucG9seVByZXNzdXJlKSwwLGkudmliTGZvVG9QaXRjaCw1MCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCEwLFMudHJlbW9sb0RlcHRoKSwwLGkubW9kTGZvVG9Wb2x1bWUsMjQsMCksbmV3IHlBKGdlKFFBLmNvbnZleCwhMCwhMSwhMCxTLmF0dGFja1RpbWUpLDAsaS5hdHRhY2tWb2xFbnYsNmUzLDApLG5ldyB5QShnZShRQS5saW5lYXIsITAsITEsITAsUy5yZWxlYXNlVGltZSksMCxpLnJlbGVhc2VWb2xFbnYsMzYwMCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCEwLCExLCEwLFMuYnJpZ2h0bmVzcyksMCxpLmluaXRpYWxGaWx0ZXJGYyw2ZTMsMCksbmV3IHlBKGNhLDAsaS5pbml0aWFsRmlsdGVyUSwyNTAsMCldLEVhPVVvLmNvbmNhdChUbyksQ3Q9NCxGQT1jbGFzc3tnZW5lcmF0b3JUeXBlO2dlbmVyYXRvclZhbHVlPTA7Y29uc3RydWN0b3IoZSxBLHQ9ITApe2lmKHRoaXMuZ2VuZXJhdG9yVHlwZT1lLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZC4iKTtpZih0aGlzLmdlbmVyYXRvclZhbHVlPU1hdGgucm91bmQoQSksdCl7bGV0IG49eFtlXTtuIT09dm9pZCAwJiYodGhpcy5nZW5lcmF0b3JWYWx1ZT1NYXRoLm1heChuLm1pbixNYXRoLm1pbihuLm1heCx0aGlzLmdlbmVyYXRvclZhbHVlKSkpfX13cml0ZShlLEEpe0ooZSx0aGlzLmdlbmVyYXRvclR5cGUpLEooZSx0aGlzLmdlbmVyYXRvclZhbHVlKSxBLmdlbisrfXRvU3RyaW5nKCl7cmV0dXJuYCR7T2JqZWN0LmtleXMoaSkuZmluZChlPT5pW2VdPT09dGhpcy5nZW5lcmF0b3JUeXBlKX06ICR7dGhpcy5nZW5lcmF0b3JWYWx1ZX1gfX07ZnVuY3Rpb24geG8oZSxBLHQpe2xldCBuPXhbZV18fHttaW46MCxtYXg6MzI3NjgsZGVmOjB9LHM9QS5maW5kKG89Pm8uZ2VuZXJhdG9yVHlwZT09PWUpLGE9MDtzJiYoYT1zLmdlbmVyYXRvclZhbHVlKTtsZXQgcj10LmZpbmQobz0+by5nZW5lcmF0b3JUeXBlPT09ZSksST1uLmRlZjtyZXR1cm4gciYmKEk9ci5nZW5lcmF0b3JWYWx1ZSksTWF0aC5tYXgoLTMyNzY3LE1hdGgubWluKDMyNzY3LEkrYSkpfXZhciBKdD00LFZ0PWNsYXNze3ZlbFJhbmdlPXttaW46LTEsbWF4OjEyN307a2V5UmFuZ2U9e21pbjotMSxtYXg6MTI3fTtnZW5lcmF0b3JzPVtdO21vZHVsYXRvcnM9W107Z2V0IGhhc0tleVJhbmdlKCl7cmV0dXJuIHRoaXMua2V5UmFuZ2UubWluIT09LTF9Z2V0IGhhc1ZlbFJhbmdlKCl7cmV0dXJuIHRoaXMudmVsUmFuZ2UubWluIT09LTF9Z2V0IGZpbmVUdW5pbmcoKXtsZXQgZT10aGlzLmdldEdlbmVyYXRvcihpLmNvYXJzZVR1bmUsMCksQT10aGlzLmdldEdlbmVyYXRvcihpLmZpbmVUdW5lLDApO3JldHVybiBlKjEwMCtBfXNldCBmaW5lVHVuaW5nKGUpe2xldCBBPU1hdGgudHJ1bmMoZS8xMDApLHQ9ZSUxMDA7dGhpcy5zZXRHZW5lcmF0b3IoaS5jb2Fyc2VUdW5lLEEpLHRoaXMuc2V0R2VuZXJhdG9yKGkuZmluZVR1bmUsdCl9YWRkVG9HZW5lcmF0b3IoZSxBLHQ9ITApe2xldCBuPXRoaXMuZ2V0R2VuZXJhdG9yKGUseFtlXS5kZWYpO3RoaXMuc2V0R2VuZXJhdG9yKGUsQStuLHQpfXNldEdlbmVyYXRvcihlLEEsdD0hMCl7c3dpdGNoKGUpe2Nhc2UgaS5zYW1wbGVJRDp0aHJvdyBuZXcgRXJyb3IoIlVzZSBzZXRTYW1wbGUoKSIpO2Nhc2UgaS5pbnN0cnVtZW50OnRocm93IG5ldyBFcnJvcigiVXNlIHNldEluc3RydW1lbnQoKSIpO2Nhc2UgaS52ZWxSYW5nZTpjYXNlIGkua2V5UmFuZ2U6dGhyb3cgbmV3IEVycm9yKCJTZXQgdGhlIHJhbmdlIG1hbnVhbGx5Iil9aWYoQT09PW51bGwpe3RoaXMuZ2VuZXJhdG9ycz10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKHM9PnMuZ2VuZXJhdG9yVHlwZSE9PWUpO3JldHVybn1sZXQgbj10aGlzLmdlbmVyYXRvcnMuZmluZEluZGV4KHM9PnMuZ2VuZXJhdG9yVHlwZT09PWUpO24+PTA/dGhpcy5nZW5lcmF0b3JzW25dPW5ldyBGQShlLEEsdCk6dGhpcy5hZGRHZW5lcmF0b3JzKG5ldyBGQShlLEEsdCkpfWFkZEdlbmVyYXRvcnMoLi4uZSl7ZS5mb3JFYWNoKEE9Pntzd2l0Y2goQS5nZW5lcmF0b3JUeXBlKXtkZWZhdWx0OnRoaXMuZ2VuZXJhdG9ycy5wdXNoKEEpO2JyZWFrO2Nhc2UgaS5zYW1wbGVJRDpjYXNlIGkuaW5zdHJ1bWVudDpicmVhaztjYXNlIGkudmVsUmFuZ2U6dGhpcy52ZWxSYW5nZS5taW49QS5nZW5lcmF0b3JWYWx1ZSYxMjcsdGhpcy52ZWxSYW5nZS5tYXg9QS5nZW5lcmF0b3JWYWx1ZT4+OCYxMjc7YnJlYWs7Y2FzZSBpLmtleVJhbmdlOnRoaXMua2V5UmFuZ2UubWluPUEuZ2VuZXJhdG9yVmFsdWUmMTI3LHRoaXMua2V5UmFuZ2UubWF4PUEuZ2VuZXJhdG9yVmFsdWU+PjgmMTI3fX0pfWFkZE1vZHVsYXRvcnMoLi4uZSl7dGhpcy5tb2R1bGF0b3JzLnB1c2goLi4uZSl9Z2V0R2VuZXJhdG9yKGUsQSl7cmV0dXJuIHRoaXMuZ2VuZXJhdG9ycy5maW5kKHQ9PnQuZ2VuZXJhdG9yVHlwZT09PWUpPy5nZW5lcmF0b3JWYWx1ZT8/QX1jb3B5RnJvbShlKXt0aGlzLmdlbmVyYXRvcnM9ZS5nZW5lcmF0b3JzLm1hcChBPT5uZXcgRkEoQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUsITEpKSx0aGlzLm1vZHVsYXRvcnM9ZS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSksdGhpcy52ZWxSYW5nZT17Li4uZS52ZWxSYW5nZX0sdGhpcy5rZXlSYW5nZT17Li4uZS5rZXlSYW5nZX19Z2V0R2VuQ291bnQoKXtsZXQgZT10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKEE9PkEuZ2VuZXJhdG9yVHlwZSE9PWkuc2FtcGxlSUQmJkEuZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmQS5nZW5lcmF0b3JUeXBlIT09aS5rZXlSYW5nZSYmQS5nZW5lcmF0b3JUeXBlIT09aS52ZWxSYW5nZSkubGVuZ3RoO3JldHVybiB0aGlzLmhhc1ZlbFJhbmdlJiZlKyssdGhpcy5oYXNLZXlSYW5nZSYmZSsrLGV9d3JpdGUoZSxBLHQsbixzKXtsZXQgYT1uLmdlbixyPW4ubW9kO0oodC5wZHRhLGEmNjU1MzUpLEoodC5wZHRhLHImNjU1MzUpLEoodC54ZHRhLGE+PjE2KSxKKHQueGR0YSxyPj4xNiksbi5iYWcrKyx0aGlzLmdldFdyaXRlR2VuZXJhdG9ycyhzKS5mb3JFYWNoKG89Pm8ud3JpdGUoZSxuKSksdGhpcy5tb2R1bGF0b3JzLmZvckVhY2gobz0+by53cml0ZShBLG4pKX1nZXRXcml0ZUdlbmVyYXRvcnMoZSl7bGV0IEE9dGhpcy5nZW5lcmF0b3JzLmZpbHRlcih0PT50LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ0LmdlbmVyYXRvclR5cGUhPT1pLmluc3RydW1lbnQmJnQuZ2VuZXJhdG9yVHlwZSE9PWkua2V5UmFuZ2UmJnQuZ2VuZXJhdG9yVHlwZSE9PWkudmVsUmFuZ2UpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gYmFuayBwcm92aWRlZCEgIik7cmV0dXJuIHRoaXMuaGFzVmVsUmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS52ZWxSYW5nZSx0aGlzLnZlbFJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLnZlbFJhbmdlLm1pbiwwKSwhMSkpLHRoaXMuaGFzS2V5UmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS5rZXlSYW5nZSx0aGlzLmtleVJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLmtleVJhbmdlLm1pbiwwKSwhMSkpLEF9fSxCYT1jbGFzcyBleHRlbmRzIFZ0e30sQ2E9Y2xhc3MgZXh0ZW5kcyBWdHtwYXJlbnRQcmVzZXQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50UHJlc2V0PWUsdGhpcy5faW5zdHJ1bWVudD1BLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1faW5zdHJ1bWVudDtnZXQgaW5zdHJ1bWVudCgpe3JldHVybiB0aGlzLl9pbnN0cnVtZW50fXNldCBpbnN0cnVtZW50KGUpe3RoaXMuX2luc3RydW1lbnQmJnRoaXMuX2luc3RydW1lbnQudW5saW5rRnJvbSh0aGlzLnBhcmVudFByZXNldCksdGhpcy5faW5zdHJ1bWVudD1lLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkluc3RydW1lbnQgSUQgY2Fubm90IGJlIGRldGVybWluZWQgd2l0aG91dCB0aGUgc291bmQgYmFuayBpdHNlbGYuIik7bGV0IHQ9ZS5pbnN0cnVtZW50cy5pbmRleE9mKHRoaXMuaW5zdHJ1bWVudCk7aWYodDwwKXRocm93IG5ldyBFcnJvcihgJHt0aGlzLmluc3RydW1lbnQubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gJHtlLnNvdW5kQmFua0luZm8ubmFtZX0hIENhbm5vdCB3cml0ZSBpbnN0cnVtZW50IGdlbmVyYXRvci5gKTtyZXR1cm4gQS5wdXNoKG5ldyBGQShpLmluc3RydW1lbnQsdCwhMSkpLEF9fSxoYT1jbGFzcyBleHRlbmRzIFZ0e3BhcmVudEluc3RydW1lbnQ7dXNlQ291bnQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50SW5zdHJ1bWVudD1lLHRoaXMuX3NhbXBsZT1BLEEubGlua1RvKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy51c2VDb3VudD1lLnVzZUNvdW50fV9zYW1wbGU7Z2V0IHNhbXBsZSgpe3JldHVybiB0aGlzLl9zYW1wbGV9c2V0IHNhbXBsZShlKXt0aGlzLl9zYW1wbGUmJnRoaXMuX3NhbXBsZS51bmxpbmtGcm9tKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy5fc2FtcGxlPWUsZS5saW5rVG8odGhpcy5wYXJlbnRJbnN0cnVtZW50KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKSx0PWUuc2FtcGxlcy5pbmRleE9mKHRoaXMuc2FtcGxlKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluICR7ZS5zb3VuZEJhbmtJbmZvLm5hbWV9ISBDYW5ub3Qgd3JpdGUgc2FtcGxlSUQgZ2VuZXJhdG9yLmApO3JldHVybiBBLnB1c2gobmV3IEZBKGkuc2FtcGxlSUQsdCwhMSkpLEF9fSxsYT0yMixIbz1uZXcgU2V0KFtpLnZlbFJhbmdlLGkua2V5UmFuZ2UsaS5pbnN0cnVtZW50LGkuc2FtcGxlSUQsaS5leGNsdXNpdmVDbGFzcyxpLmVuZE9wZXIsaS5zYW1wbGVNb2RlcyxpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5lbmRsb29wQWRkcnNPZmZzZXQsaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5zdGFydEFkZHJzT2Zmc2V0LGkuc3RhcnRBZGRyc0NvYXJzZU9mZnNldCxpLmVuZEFkZHJPZmZzZXQsaS5lbmRBZGRyc0NvYXJzZU9mZnNldCxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLmtleU51bVRvVm9sRW52SG9sZCxpLmtleU51bVRvVm9sRW52RGVjYXksaS5rZXlOdW1Ub01vZEVudkhvbGQsaS5rZXlOdW1Ub01vZEVudkRlY2F5XSksZHQ9Y2xhc3N7bmFtZT0iIjt6b25lcz1bXTtnbG9iYWxab25lPW5ldyBCYTtsaW5rZWRUbz1bXTtnZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgaGEodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKSx0aGlzLnpvbmVzLmZvckVhY2goQT0+QS51c2VDb3VudCsrKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKSx0aGlzLnpvbmVzLmZvckVhY2godD0+dC51c2VDb3VudC0tKX1kZWxldGVVbnVzZWRab25lcygpe3RoaXMuem9uZXM9dGhpcy56b25lcy5maWx0ZXIoZT0+e2xldCBBPWUudXNlQ291bnQ+MDtyZXR1cm4gQXx8ZS5zYW1wbGUudW5saW5rRnJvbSh0aGlzKSxBfSl9ZGVsZXRlKCl7aWYodGhpcy51c2VDb3VudD4wKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBhbiBpbnN0cnVtZW50IHRoYXQgaXMgdXNlZCBieTogJHt0aGlzLmxpbmtlZFRvLm1hcChlPT5lLm5hbWUpLnRvU3RyaW5nKCl9LmApO3RoaXMuem9uZXMuZm9yRWFjaChlPT5lLnNhbXBsZS51bmxpbmtGcm9tKHRoaXMpKX1kZWxldGVab25lKGUsQT0hMSl7bGV0IHQ9dGhpcy56b25lc1tlXTtyZXR1cm4gdC51c2VDb3VudC09MSx0LnVzZUNvdW50PDF8fEE/KHQuc2FtcGxlLnVubGlua0Zyb20odGhpcyksdGhpcy56b25lcy5zcGxpY2UoZSwxKSwhMCk6ITF9Z2xvYmFsaXplKCl7bGV0IGU9dGhpcy5nbG9iYWxab25lO2ZvcihsZXQgbj0wO248NTg7bisrKXtpZihIby5oYXMobikpY29udGludWU7bj1uO2xldCBzPXt9LGE9eFtuXT8uZGVmfHwwO3NbYV09MDtmb3IobGV0IHIgb2YgdGhpcy56b25lcyl7bGV0IEk9ci5nZXRHZW5lcmF0b3Iobix2b2lkIDApO0khPT12b2lkIDA/c1tJXT09PXZvaWQgMD9zW0ldPTE6c1tJXSsrOnNbYV0rKztsZXQgbztzd2l0Y2gobil7ZGVmYXVsdDpjb250aW51ZTtjYXNlIGkuZGVjYXlWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52SG9sZDticmVhaztjYXNlIGkuZGVjYXlNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52SG9sZH1pZihyLmdldEdlbmVyYXRvcihvLHZvaWQgMCkhPT12b2lkIDApe3M9e307YnJlYWt9fWlmKE9iamVjdC5rZXlzKHMpLmxlbmd0aD4wKXtsZXQgST1PYmplY3QuZW50cmllcyhzKS5yZWR1Y2UoKGcsQik9PmdbMV08QlsxXT9COmcsWyIwIiwwXSksbz1wYXJzZUludChJWzBdKTtvIT09YSYmZS5zZXRHZW5lcmF0b3IobixvLCExKSx0aGlzLnpvbmVzLmZvckVhY2goZz0+e2xldCBCPWcuZ2V0R2VuZXJhdG9yKG4sdm9pZCAwKTtCIT09dm9pZCAwP0I9PT1vJiZnLnNldEdlbmVyYXRvcihuLG51bGwpOm8hPT1hJiZnLnNldEdlbmVyYXRvcihuLGEpfSl9fWxldCB0PXRoaXMuem9uZXNbMF0ubW9kdWxhdG9ycy5tYXAobj0+RUEuY29weUZyb20obikpO2ZvcihsZXQgbiBvZiB0KXtsZXQgcz0hMDtmb3IobGV0IGEgb2YgdGhpcy56b25lcyl7aWYoIXMpY29udGludWU7YS5tb2R1bGF0b3JzLmZpbmQoST0+RUEuaXNJZGVudGljYWwoSSxuKSl8fChzPSExKX1pZihzKXtlLmFkZE1vZHVsYXRvcnMoRUEuY29weUZyb20obikpO2ZvcihsZXQgYSBvZiB0aGlzLnpvbmVzKXtsZXQgcj1hLm1vZHVsYXRvcnMuZmluZChJPT5FQS5pc0lkZW50aWNhbChJLG4pKTtyJiZyLnRyYW5zZm9ybUFtb3VudD09PW4udHJhbnNmb3JtQW1vdW50JiZhLm1vZHVsYXRvcnMuc3BsaWNlKGEubW9kdWxhdG9ycy5pbmRleE9mKHIpLDEpfX19fWdldFNpemUoKXtsZXQgZT10aGlzLnpvbmVzLnJlZHVjZSgodCxuKT0+bi5tb2R1bGF0b3JzLmxlbmd0aCt0LDApK3RoaXMuZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmxlbmd0aCxBPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLmdldEdlbkNvdW50KCkrdCwwKSt0aGlzLmdsb2JhbFpvbmUuZ2V0R2VuQ291bnQoKTtyZXR1cm57bW9kOmUqbWUsYmFnOih0aGlzLnpvbmVzLmxlbmd0aCsxKSpKdCxnZW46QSpDdCxoZHI6bGF9fXdyaXRlKGUsQSx0LG4scyxhKXtwKGAlY1dyaXRpbmcgJHt0aGlzLm5hbWV9Li4uYCxjLmluZm8pLGtBKG4ucGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShuLnhkdGEsdGhpcy5uYW1lLnN1YnN0cmluZygyMCksMjApLEoobi5wZHRhLHMuaGRyJjY1NTM1KSxKKG4ueGR0YSxzLmhkcj4+PjE2KSxzLmhkcis9dGhpcy56b25lcy5sZW5ndGgrMSx0aGlzLmdsb2JhbFpvbmUud3JpdGUoZSxBLHQscyxhKSx0aGlzLnpvbmVzLmZvckVhY2gocj0+ci53cml0ZShlLEEsdCxzLGEpKX19LGRhPTM4LHBlPWNsYXNze3BhcmVudFNvdW5kQmFuaztuYW1lPSIiO3Byb2dyYW09MDtiYW5rTVNCPTA7YmFua0xTQj0wO2lzR01HU0RydW09ITE7em9uZXM9W107Z2xvYmFsWm9uZTtsaWJyYXJ5PTA7Z2VucmU9MDttb3JwaG9sb2d5PTA7Y29uc3RydWN0b3IoZSxBPW5ldyBCYSl7dGhpcy5wYXJlbnRTb3VuZEJhbms9ZSx0aGlzLmdsb2JhbFpvbmU9QX1nZXQgaXNYR0RydW1zKCl7cmV0dXJuIHRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rJiZmQS5pc1hHRHJ1bXModGhpcy5iYW5rTVNCKX1nZXQgaXNBbnlEcnVtcygpe2xldCBlPXRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rO3JldHVybiB0aGlzLmlzR01HU0RydW18fGUmJmZBLmlzWEdEcnVtcyh0aGlzLmJhbmtNU0IpJiZ0aGlzLmJhbmtNU0IhPT0xMjZ9ZGVsZXRlKCl7dGhpcy56b25lcy5mb3JFYWNoKGU9PmUuaW5zdHJ1bWVudD8udW5saW5rRnJvbSh0aGlzKSl9ZGVsZXRlWm9uZShlKXt0aGlzLnpvbmVzW2VdPy5pbnN0cnVtZW50Py51bmxpbmtGcm9tKHRoaXMpLHRoaXMuem9uZXMuc3BsaWNlKGUsMSl9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgQ2EodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9cHJlbG9hZChlLEEpe2ZvcihsZXQgdD1lO3Q8QSsxO3QrKylmb3IobGV0IG49MDtuPDEyODtuKyspdGhpcy5nZXRTeW50aGVzaXNEYXRhKHQsbikuZm9yRWFjaChzPT57cy5zYW1wbGUuZ2V0QXVkaW9EYXRhKCl9KX1tYXRjaGVzKGUpe3JldHVybiB0ZS5tYXRjaGVzKHRoaXMsZSl9Z2V0U2l6ZSgpe2xldCBlPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLm1vZHVsYXRvcnMubGVuZ3RoK3QsMCkrdGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnMubGVuZ3RoLEE9dGhpcy56b25lcy5yZWR1Y2UoKHQsbik9Pm4uZ2V0R2VuQ291bnQoKSt0LDApK3RoaXMuZ2xvYmFsWm9uZS5nZXRHZW5Db3VudCgpO3JldHVybnttb2Q6ZSptZSxiYWc6KHRoaXMuem9uZXMubGVuZ3RoKzEpKkp0LGdlbjpBKkN0LGhkcjpkYX19Z2V0U3ludGhlc2lzRGF0YShlLEEpe2lmKHRoaXMuem9uZXMubGVuZ3RoPDEpcmV0dXJuW107ZnVuY3Rpb24gdChkLGgpe3JldHVybiBoPj1kLm1pbiYmaDw9ZC5tYXh9ZnVuY3Rpb24gbihkLGgpe2QucHVzaCguLi5oLmZpbHRlcihDPT4hZC5maW5kKFE9PlEuZ2VuZXJhdG9yVHlwZT09PUMuZ2VuZXJhdG9yVHlwZSkpKX1mdW5jdGlvbiBzKGQsaCl7ZC5wdXNoKC4uLmguZmlsdGVyKEM9PiFkLmZpbmQoUT0+RUEuaXNJZGVudGljYWwoQyxRKSkpKX1sZXQgYT1bXSxyPVsuLi50aGlzLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10sST1bLi4udGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnNdLG89dGhpcy5nbG9iYWxab25lLmtleVJhbmdlLGc9dGhpcy5nbG9iYWxab25lLnZlbFJhbmdlO3JldHVybiB0aGlzLnpvbmVzLmZpbHRlcihkPT50KGQuaGFzS2V5UmFuZ2U/ZC5rZXlSYW5nZTpvLGUpJiZ0KGQuaGFzVmVsUmFuZ2U/ZC52ZWxSYW5nZTpnLEEpKS5mb3JFYWNoKGQ9PntsZXQgaD1kLmluc3RydW1lbnQ7aWYoIWh8fGguem9uZXMubGVuZ3RoPDEpcmV0dXJuO2xldCBDPWQuZ2VuZXJhdG9ycyxRPWQubW9kdWxhdG9ycyxtPVsuLi5oLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10seT1bLi4uaC5nbG9iYWxab25lLm1vZHVsYXRvcnNdLEY9aC5nbG9iYWxab25lLmtleVJhbmdlLGs9aC5nbG9iYWxab25lLnZlbFJhbmdlO2guem9uZXMuZmlsdGVyKHY9PnQodi5oYXNLZXlSYW5nZT92LmtleVJhbmdlOkYsZSkmJnQodi5oYXNWZWxSYW5nZT92LnZlbFJhbmdlOmssQSkpLmZvckVhY2godj0+e2xldCBMPVsuLi52LmdlbmVyYXRvcnNdLEU9Wy4uLnYubW9kdWxhdG9yc107bihDLHIpLG4oTCxtKSxzKFEsSSkscyhFLHkpLHMoRSx0aGlzLnBhcmVudFNvdW5kQmFuay5kZWZhdWx0TW9kdWxhdG9ycyk7bGV0IFg9Wy4uLkVdO2ZvcihsZXQgTyBvZiBRKXtsZXQgbkE9WC5maW5kSW5kZXgoJD0+RUEuaXNJZGVudGljYWwoTywkKSk7bkEhPT0tMT9YW25BXT1YW25BXS5zdW1UcmFuc2Zvcm0oTyk6WC5wdXNoKE8pfXYuc2FtcGxlJiZhLnB1c2goe2luc3RydW1lbnRHZW5lcmF0b3JzOkwscHJlc2V0R2VuZXJhdG9yczpDLG1vZHVsYXRvcnM6WCxzYW1wbGU6di5zYW1wbGV9KX0pfSksYX10b01JRElTdHJpbmcoKXtyZXR1cm4gdGUudG9NSURJU3RyaW5nKHRoaXMpfXRvU3RyaW5nKCl7cmV0dXJuIHRlLnRvTmFtZWRNSURJU3RyaW5nKHRoaXMpfXRvRmxhdHRlbmVkSW5zdHJ1bWVudCgpe2xldCBlPShnLEIpPT57Zy5wdXNoKC4uLkIuZmlsdGVyKGQ9PiFnLmZpbmQoaD0+aC5nZW5lcmF0b3JUeXBlPT09ZC5nZW5lcmF0b3JUeXBlKSkpfSxBPShnLEIpPT4oe21pbjpNYXRoLm1heChnLm1pbixCLm1pbiksbWF4Ok1hdGgubWluKGcubWF4LEIubWF4KX0pLHQ9KGcsQik9PntnLnB1c2goLi4uQi5maWx0ZXIoZD0+IWcuZmluZChoPT5FQS5pc0lkZW50aWNhbChkLGgpKSkpfSxuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lO2xldCBzPVtdLGE9W10scj10aGlzLmdsb2JhbFpvbmU7cy5wdXNoKC4uLnIuZ2VuZXJhdG9ycyksYS5wdXNoKC4uLnIubW9kdWxhdG9ycyk7bGV0IEk9ci5rZXlSYW5nZSxvPXIudmVsUmFuZ2U7Zm9yKGxldCBnIG9mIHRoaXMuem9uZXMpe2lmKCFnLmluc3RydW1lbnQpdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IGluIGEgcHJlc2V0IHpvbmUuIik7bGV0IEI9Zy5rZXlSYW5nZTtnLmhhc0tleVJhbmdlfHwoQj1JKTtsZXQgZD1nLnZlbFJhbmdlO2cuaGFzVmVsUmFuZ2V8fChkPW8pO2xldCBoPWcuZ2VuZXJhdG9ycy5tYXAoTD0+bmV3IEZBKEwuZ2VuZXJhdG9yVHlwZSxMLmdlbmVyYXRvclZhbHVlKSk7ZShoLHMpO2xldCBDPVsuLi5nLm1vZHVsYXRvcnNdO3QoQyxhKTtsZXQgUT1nLmluc3RydW1lbnQsbT1RLnpvbmVzLHk9W10sRj1bXSxrPVEuZ2xvYmFsWm9uZTt5LnB1c2goLi4uay5nZW5lcmF0b3JzKSxGLnB1c2goLi4uay5tb2R1bGF0b3JzKTtsZXQgRD1rLmtleVJhbmdlLHY9ay52ZWxSYW5nZTtmb3IobGV0IEwgb2YgbSl7aWYoIUwuc2FtcGxlKXRocm93IG5ldyBFcnJvcigiTm8gc2FtcGxlIGluIGFuIGluc3RydW1lbnQgem9uZS4iKTtsZXQgRT1MLmtleVJhbmdlO0wuaGFzS2V5UmFuZ2V8fChFPUQpO2xldCBYPUwudmVsUmFuZ2U7aWYoTC5oYXNWZWxSYW5nZXx8KFg9diksRT1BKEUsQiksWD1BKFgsZCksRS5tYXg8RS5taW58fFgubWF4PFgubWluKWNvbnRpbnVlO2xldCBPPUwuZ2VuZXJhdG9ycy5tYXAoej0+bmV3IEZBKHouZ2VuZXJhdG9yVHlwZSx6LmdlbmVyYXRvclZhbHVlKSk7ZShPLHkpO2xldCBuQT1bLi4uTC5tb2R1bGF0b3JzXTt0KG5BLEYpO2xldCAkPVsuLi5uQV07Zm9yKGxldCB6IG9mIEMpe2xldCB0QT0kLmZpbmRJbmRleChpQT0+RUEuaXNJZGVudGljYWwoeixpQSkpO3RBIT09LTE/JFt0QV09JFt0QV0uc3VtVHJhbnNmb3JtKHopOiQucHVzaCh6KX1sZXQgVj1PLm1hcCh6PT5uZXcgRkEoei5nZW5lcmF0b3JUeXBlLHouZ2VuZXJhdG9yVmFsdWUpKTtmb3IobGV0IHogb2YgaCl7aWYoei5nZW5lcmF0b3JUeXBlPT09aS52ZWxSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5rZXlSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50fHx6LmdlbmVyYXRvclR5cGU9PT1pLmVuZE9wZXJ8fHouZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlTW9kZXMpY29udGludWU7bGV0IHRBPU8uZmluZEluZGV4KGlBPT5pQS5nZW5lcmF0b3JUeXBlPT09ei5nZW5lcmF0b3JUeXBlKTtpZih0QSE9PS0xKXtsZXQgaUE9Vlt0QV0uZ2VuZXJhdG9yVmFsdWUrei5nZW5lcmF0b3JWYWx1ZTtWW3RBXT1uZXcgRkEoei5nZW5lcmF0b3JUeXBlLGlBKX1lbHNle2xldCBpQT14W3ouZ2VuZXJhdG9yVHlwZV0uZGVmK3ouZ2VuZXJhdG9yVmFsdWU7Vi5wdXNoKG5ldyBGQSh6LmdlbmVyYXRvclR5cGUsaUEpKX19Vj1WLmZpbHRlcih6PT56LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmtleVJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLnZlbFJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmVuZE9wZXImJnouZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmei5nZW5lcmF0b3JWYWx1ZSE9PXhbei5nZW5lcmF0b3JUeXBlXS5kZWYpO2xldCBxPW4uY3JlYXRlWm9uZShMLnNhbXBsZSk7cS5rZXlSYW5nZT1FLHEudmVsUmFuZ2U9WCxxLmtleVJhbmdlLm1pbj09PTAmJnEua2V5UmFuZ2UubWF4PT09MTI3JiYocS5rZXlSYW5nZS5taW49LTEpLHEudmVsUmFuZ2UubWluPT09MCYmcS52ZWxSYW5nZS5tYXg9PT0xMjcmJihxLnZlbFJhbmdlLm1pbj0tMSkscS5hZGRHZW5lcmF0b3JzKC4uLlYpLHEuYWRkTW9kdWxhdG9ycyguLi4kKX19cmV0dXJuIG59d3JpdGUoZSxBLHQsbixzLGEpe3AoYCVjV3JpdGluZyAke3RoaXMubmFtZX0uLi5gLGMuaW5mbyksa0Eobi5wZHRhLHRoaXMubmFtZS5zdWJzdHJpbmcoMCwyMCksMjApLGtBKG4ueGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDIwKSwyMCksSihuLnBkdGEsdGhpcy5wcm9ncmFtKTtsZXQgcj10aGlzLmJhbmtNU0I7dGhpcy5pc0dNR1NEcnVtP3I9MTI4OnRoaXMuYmFua01TQj09PTAmJihyPXRoaXMuYmFua0xTQiksSihuLnBkdGEsciksbi54ZHRhLmN1cnJlbnRJbmRleCs9NCxKKG4ucGR0YSxzLmhkciY2NTUzNSksSihuLnhkdGEscy5oZHI+PjE2KSxnQShuLnBkdGEsdGhpcy5saWJyYXJ5KSxnQShuLnBkdGEsdGhpcy5nZW5yZSksZ0Eobi5wZHRhLHRoaXMubW9ycGhvbG9neSksbi54ZHRhLmN1cnJlbnRJbmRleCs9MTIscy5oZHIrPXRoaXMuem9uZXMubGVuZ3RoKzEsdGhpcy5nbG9iYWxab25lLndyaXRlKGUsQSx0LHMsYSksdGhpcy56b25lcy5mb3JFYWNoKEk9Pkkud3JpdGUoZSxBLHQscyxhKSl9fTtmdW5jdGlvbiBEcyhlLEEpe2xldCB0O3JldHVybiBBP3Q9ZS5maW5kKG49Pm4uaXNYR0RydW1zKTp0PWUuZmluZChuPT5uLmlzR01HU0RydW0pLHR8fChlLmZpbmQobj0+bi5pc0FueURydW1zKT8/ZVswXSl9ZnVuY3Rpb24gUWEoZSxBLHQpe2lmKGUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCJObyBwcmVzZXRzISIpO0EuaXNHTUdTRHJ1bSYmZkEuaXNTeXN0ZW1YRyh0KSYmKEE9ey4uLkEsaXNHTUdTRHJ1bTohMSxiYW5rTFNCOjAsYmFua01TQjpmQS5nZXREcnVtQmFuayh0KX0pO2xldHtpc0dNR1NEcnVtOm4sYmFua0xTQjpzLGJhbmtNU0I6YSxwcm9ncmFtOnJ9PUEsST1mQS5pc1N5c3RlbVhHKHQpLG89ZkEuaXNYR0RydW1zKGEpJiZJLGc9ZS5maW5kKEM9PkMubWF0Y2hlcyhBKSk7aWYoZyYmKCFvfHxvJiZnLmlzWEdEcnVtcykpcmV0dXJuIGc7bGV0IEI9Qz0+e3AoYCVjUHJlc2V0ICVjJHt0ZS50b01JRElTdHJpbmcoQSl9JWMgbm90IGZvdW5kLiAoJHt0fSkgUmVwbGFjZWQgd2l0aCAlYyR7Qy50b1N0cmluZygpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKX07aWYobil7bGV0IEM9ZS5maW5kKFE9PlEuaXNHTUdTRHJ1bSYmUS5wcm9ncmFtPT09cik7cmV0dXJuIEN8fChDPWUuZmluZChRPT5RLmlzQW55RHJ1bXMmJlEucHJvZ3JhbT09PXIpLEMpPyhCKEMpLEMpOihDPURzKGUsITEpLEIoQyksQyl9aWYobyl7bGV0IEM9ZS5maW5kKFE9PlEucHJvZ3JhbT09PXImJlEuaXNYR0RydW1zKTtyZXR1cm4gQ3x8KEM9ZS5maW5kKFE9PlEuaXNBbnlEcnVtcyYmUS5wcm9ncmFtPT09ciksQyk/KEIoQyksQyk6KEM9RHMoZSwhMCksQihDKSxDKX1sZXQgZD1lLmZpbHRlcihDPT5DLnByb2dyYW09PT1yJiYhQy5pc0FueURydW1zKTtpZihkLmxlbmd0aDwxKXJldHVybiBCKGVbMF0pLGVbMF07aWYoST9nPWQuZmluZChDPT5DLmJhbmtMU0I9PT1zKTpnPWQuZmluZChDPT5DLmJhbmtNU0I9PT1hKSxnKXJldHVybiBCKGcpLGc7bGV0IGg9TWF0aC5tYXgoYSxzKTtyZXR1cm4gZz1kLmZpbmQoQz0+Qy5iYW5rTFNCPT09aHx8Qy5iYW5rTVNCPT09aCksZz8oQihnKSxnKTooQihkWzBdKSxkWzBdKX12YXIgWW89Y2xhc3MgZXh0ZW5kcyBwZXtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKGUucGFyZW50U291bmRCYW5rLGUuZ2xvYmFsWm9uZSksdGhpcy5iYW5rTVNCPWZBLmFkZEJhbmtPZmZzZXQoZS5iYW5rTVNCLEEsZS5pc1hHRHJ1bXMpLHRoaXMubmFtZT1lLm5hbWUsdGhpcy5iYW5rTFNCPWUuYmFua0xTQix0aGlzLmlzR01HU0RydW09ZS5pc0dNR1NEcnVtLHRoaXMucHJvZ3JhbT1lLnByb2dyYW0sdGhpcy5nZW5yZT1lLmdlbnJlLHRoaXMubW9ycGhvbG9neT1lLm1vcnBob2xvZ3ksdGhpcy5saWJyYXJ5PWUubGlicmFyeSx0aGlzLnpvbmVzPWUuem9uZXN9fSxQbz1jbGFzc3tzb3VuZEJhbmtMaXN0PVtdO3ByZXNldExpc3RDaGFuZ2VDYWxsYmFjaztzZWxlY3RhYmxlUHJlc2V0TGlzdD1bXTtjb25zdHJ1Y3RvcihlKXt0aGlzLnByZXNldExpc3RDaGFuZ2VDYWxsYmFjaz1lfV9wcmVzZXRMaXN0PVtdO2dldCBwcmVzZXRMaXN0KCl7cmV0dXJuWy4uLnRoaXMuX3ByZXNldExpc3RdfWdldCBwcmlvcml0eU9yZGVyKCl7cmV0dXJuIHRoaXMuc291bmRCYW5rTGlzdC5tYXAoZT0+ZS5pZCl9c2V0IHByaW9yaXR5T3JkZXIoZSl7dGhpcy5zb3VuZEJhbmtMaXN0LnNvcnQoKEEsdCk9PmUuaW5kZXhPZihBLmlkKS1lLmluZGV4T2YodC5pZCkpLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9ZGVsZXRlU291bmRCYW5rKGUpe2lmKHRoaXMuc291bmRCYW5rTGlzdC5sZW5ndGg9PT0wKXtzQSgiMSBzb3VuZGJhbmsgbGVmdC4gQWJvcnRpbmchIik7cmV0dXJufWxldCBBPXRoaXMuc291bmRCYW5rTGlzdC5maW5kSW5kZXgodD0+dC5pZD09PWUpO2lmKEE9PT0tMSl0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdW5kIGJhbmsgd2l0aCBpZCAiJHtlfSJgKTt0aGlzLnNvdW5kQmFua0xpc3Quc3BsaWNlKEEsMSksdGhpcy5nZW5lcmF0ZVByZXNldExpc3QoKX1hZGRTb3VuZEJhbmsoZSxBLHQ9MCl7bGV0IG49dGhpcy5zb3VuZEJhbmtMaXN0LmZpbmQocz0+cy5pZD09PUEpO24hPT12b2lkIDA/KG4uc291bmRCYW5rPWUsbi5iYW5rT2Zmc2V0PXQpOnRoaXMuc291bmRCYW5rTGlzdC5wdXNoKHtpZDpBLHNvdW5kQmFuazplLGJhbmtPZmZzZXQ6dH0pLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9Z2V0UHJlc2V0KGUsQSl7aWYodGhpcy5zb3VuZEJhbmtMaXN0Lmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MhIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBvbmU/Iik7cmV0dXJuIFFhKHRoaXMuc2VsZWN0YWJsZVByZXNldExpc3QsZSxBKX1kZXN0cm95KCl7dGhpcy5zb3VuZEJhbmtMaXN0LmZvckVhY2goZT0+e2Uuc291bmRCYW5rLmRlc3Ryb3lTb3VuZEJhbmsoKX0pLHRoaXMuc291bmRCYW5rTGlzdD1bXX1nZW5lcmF0ZVByZXNldExpc3QoKXtsZXQgZT1uZXcgQXJyYXksQT1uZXcgU2V0O3RoaXMuc291bmRCYW5rTGlzdC5mb3JFYWNoKHQ9PntsZXQgbj10LnNvdW5kQmFuayxzPXQuYmFua09mZnNldDtuLnByZXNldHMuZm9yRWFjaChhPT57bGV0IHI9bmV3IFlvKGEscyk7QS5oYXMoci50b01JRElTdHJpbmcoKSl8fChBLmFkZChyLnRvTUlESVN0cmluZygpKSxlLnB1c2gocikpfSl9KSxlLnNvcnQodGUuc29ydGVyLmJpbmQodGUpKSx0aGlzLnNlbGVjdGFibGVQcmVzZXRMaXN0PWUsdGhpcy5fcHJlc2V0TGlzdD1lLm1hcCh0PT4oe2JhbmtNU0I6dC5iYW5rTVNCLGJhbmtMU0I6dC5iYW5rTFNCLHByb2dyYW06dC5wcm9ncmFtLGlzR01HU0RydW06dC5pc0dNR1NEcnVtLG5hbWU6dC5uYW1lLGlzQW55RHJ1bXM6dC5pc0FueURydW1zfSkpLHRoaXMucHJlc2V0TGlzdENoYW5nZUNhbGxiYWNrKCl9fSxKbz0uMDUscW89MzA3MCxLbz0yZTMsd3M9TWF0aC5QSS8yLE50PS01MDAsdWE9NTAwLG9zPXVhLU50LGZhPW5ldyBGbG9hdDMyQXJyYXkob3MrMSksbWE9bmV3IEZsb2F0MzJBcnJheShvcysxKTtmb3IobGV0IGU9TnQ7ZTw9dWE7ZSsrKXtsZXQgQT0oZS1OdCkvb3MsdD1lLU50O2ZhW3RdPU1hdGguY29zKHdzKkEpLG1hW3RdPU1hdGguc2luKHdzKkEpfWZ1bmN0aW9uIE9vKGUsQSx0LG4scyxhLHIsSSxvKXtpZihpc05hTihBWzBdKSlyZXR1cm47bGV0IGc7ZS5vdmVycmlkZVBhbj9nPWUub3ZlcnJpZGVQYW46KGUuY3VycmVudFBhbis9KGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnBhbl0tZS5jdXJyZW50UGFuKSp0aGlzLnN5bnRoUHJvcHMucGFuU21vb3RoaW5nRmFjdG9yLGc9ZS5jdXJyZW50UGFuKTtsZXQgQj10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tYXN0ZXJHYWluKnRoaXMuc3ludGhQcm9wcy5taWRpVm9sdW1lKmUuZ2FpbixkPX5+KGcrNTAwKSxoPWZhW2RdKkIqdGhpcy5zeW50aFByb3BzLnBhbkxlZnQsQz1tYVtkXSpCKnRoaXMuc3ludGhQcm9wcy5wYW5SaWdodDtpZih0aGlzLnN5bnRoLmVuYWJsZUVmZmVjdHMpe2xldCBRPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJldmVyYkVmZmVjdHNTZW5kXTtpZihRPjApe2xldCB5PXRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnJldmVyYkdhaW4qdGhpcy5zeW50aFByb3BzLnJldmVyYlNlbmQqQiooUS9xbyk7Zm9yKGxldCBGPTA7RjxBLmxlbmd0aDtGKyspe2xldCBrPUYrbztzW2tdKz15KkFbRl0sYVtrXSs9eSpBW0ZdfX1sZXQgbT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5jaG9ydXNFZmZlY3RzU2VuZF07aWYobT4wKXtsZXQgeT10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5jaG9ydXNHYWluKnRoaXMuc3ludGhQcm9wcy5jaG9ydXNTZW5kKihtL0tvKSxGPWgqeSxrPUMqeTtmb3IobGV0IEQ9MDtEPEEubGVuZ3RoO0QrKyl7bGV0IHY9RCtvO3Jbdl0rPUYqQVtEXSxJW3ZdKz1rKkFbRF19fX1pZihoPjApZm9yKGxldCBRPTA7UTxBLmxlbmd0aDtRKyspdFtRK29dKz1oKkFbUV07aWYoQz4wKWZvcihsZXQgUT0wO1E8QS5sZW5ndGg7USsrKW5bUStvXSs9QypBW1FdfXZhciBWbz0uMSxYdD1jbGFzcyBFdHtzdGF0aWMgY2FjaGVkQ29lZmZpY2llbnRzPVtdO3Jlc29uYW5jZUNiPTA7Y3VycmVudEluaXRpYWxGYz0xMzUwMDthMD0wO2ExPTA7YTI9MDthMz0wO2E0PTA7eDE9MDt4Mj0wO3kxPTA7eTI9MDtsYXN0VGFyZ2V0Q3V0b2ZmPTEvMDtpbml0aWFsaXplZD0hMTtzYW1wbGVSYXRlO21heEN1dG9mZjtjb25zdHJ1Y3RvcihBKXt0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm1heEN1dG9mZj1BKi40NX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlckZjXSxyPUEuZmlsdGVyO3IuaW5pdGlhbGl6ZWQ/ci5jdXJyZW50SW5pdGlhbEZjKz0oYS1yLmN1cnJlbnRJbml0aWFsRmMpKnM6KHIuaW5pdGlhbGl6ZWQ9ITAsci5jdXJyZW50SW5pdGlhbEZjPWEpO2xldCBJPXIuY3VycmVudEluaXRpYWxGYytuLG89QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlclFdO2lmKHIuY3VycmVudEluaXRpYWxGYz4xMzQ5OSYmST4xMzQ5OSYmbz09PTApe3IuY3VycmVudEluaXRpYWxGYz0xMzUwMDtyZXR1cm59KE1hdGguYWJzKHIubGFzdFRhcmdldEN1dG9mZi1JKT4xfHxyLnJlc29uYW5jZUNiIT09bykmJihyLmxhc3RUYXJnZXRDdXRvZmY9SSxyLnJlc29uYW5jZUNiPW8sRXQuY2FsY3VsYXRlQ29lZmZpY2llbnRzKHIsSSkpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKXtsZXQgQj10W2ddLGQ9ci5hMCpCK3IuYTEqci54MStyLmEyKnIueDItci5hMypyLnkxLXIuYTQqci55MjtyLngyPXIueDEsci54MT1CLHIueTI9ci55MSxyLnkxPWQsdFtnXT1kfX1zdGF0aWMgY2FsY3VsYXRlQ29lZmZpY2llbnRzKEEsdCl7dD1+fnQ7bGV0IG49QS5yZXNvbmFuY2VDYixzPUV0LmNhY2hlZENvZWZmaWNpZW50cz8uW25dPy5bdF07aWYocyE9PXZvaWQgMCl7QS5hMD1zLmEwLEEuYTE9cy5hMSxBLmEyPXMuYTIsQS5hMz1zLmEzLEEuYTQ9cy5hNDtyZXR1cm59bGV0IGE9Tm4odCk7YT1NYXRoLm1pbihhLEEubWF4Q3V0b2ZmKTtsZXQgcj1uLzEwLEk9QWUoLShyLTMuMDEpKSxvPTEvTWF0aC5zcXJ0KEFlKC1yKSksZz0yKk1hdGguUEkqYS9BLnNhbXBsZVJhdGUsQj1NYXRoLmNvcyhnKSxkPU1hdGguc2luKGcpLygyKkkpLGg9KDEtQikqbyxDPWgvMixRPUMsbT0xK2QseT0tMipCLEY9MS1kLGs9e2EwOkMvbSxhMTpoL20sYTI6US9tLGEzOnkvbSxhNDpGL219O0EuYTA9ay5hMCxBLmExPWsuYTEsQS5hMj1rLmEyLEEuYTM9ay5hMyxBLmE0PWsuYTQsRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dPz89W10sRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dW3RdPWt9fSxIbj1uZXcgWHQoNDQxMDApO0huLnJlc29uYW5jZUNiPTA7Zm9yKGxldCBlPTE1MDA7ZTwxMzUwMDtlKyspSG4uY3VycmVudEluaXRpYWxGYz1lLFh0LmNhbGN1bGF0ZUNvZWZmaWNpZW50cyhIbixlKTt2YXIgRnM9e2VuYWJsZUV2ZW50U3lzdGVtOiEwLGluaXRpYWxUaW1lOjAsZW5hYmxlRWZmZWN0czohMH07ZnVuY3Rpb24gWG8oZSxBKXtsZXQgdD0wO3JldHVybiBlLmRydW1DaGFubmVsJiYodCs9NSksQS5pc0luUmVsZWFzZSYmKHQtPTUpLHQrPUEudmVsb2NpdHkvMjUsdC09QS52b2x1bWVFbnZlbG9wZS5zdGF0ZSxBLmlzSW5SZWxlYXNlJiYodC09NSksdC09QS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYi81MCx0fWZ1bmN0aW9uIFpvKGUpe2xldCBBPVtdO2ZvcihsZXQgbiBvZiB0aGlzLm1pZGlDaGFubmVscylmb3IobGV0IHMgb2Ygbi52b2ljZXMpaWYoIXMuZmluaXNoZWQpe2xldCBhPVhvKG4scyk7QS5wdXNoKHtjaGFubmVsOm4sdm9pY2U6cyxwcmlvcml0eTphfSl9QS5zb3J0KChuLHMpPT5uLnByaW9yaXR5LXMucHJpb3JpdHkpO2xldCB0PUEuc2xpY2UoMCxlKTtmb3IobGV0e2NoYW5uZWw6bix2b2ljZTpzfW9mIHQpe2xldCBhPW4udm9pY2VzLmluZGV4T2Yocyk7YT4tMSYmbi52b2ljZXMuc3BsaWNlKGEsMSl9fXZhciBTbj0xLFluPW5ldyBGbG9hdDMyQXJyYXkoMWUzKTtmb3IobGV0IGU9MDtlPFluLmxlbmd0aDtlKyspWW5bZV09SWEoMCxRQS5jb252ZXgsZS8xZTMpO3ZhciBfZT1jbGFzcyBQbnthdHRhY2tEdXJhdGlvbj0wO2RlY2F5RHVyYXRpb249MDtob2xkRHVyYXRpb249MDtyZWxlYXNlRHVyYXRpb249MDtzdXN0YWluTGV2ZWw9MDtkZWxheUVuZD0wO2F0dGFja0VuZD0wO2hvbGRFbmQ9MDtkZWNheUVuZD0wO3JlbGVhc2VTdGFydExldmVsPTA7Y3VycmVudFZhbHVlPTA7c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtQbi5yZWNhbGN1bGF0ZShBKX1zdGF0aWMgcmVjYWxjdWxhdGUoQSl7bGV0IHQ9QS5tb2R1bGF0aW9uRW52ZWxvcGU7QS5pc0luUmVsZWFzZSYmKHQucmVsZWFzZVN0YXJ0TGV2ZWw9UG4uZ2V0VmFsdWUoQSxBLnJlbGVhc2VTdGFydFRpbWUsITApKSx0LnN1c3RhaW5MZXZlbD0xLUEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnN1c3RhaW5Nb2RFbnZdLzFlMyx0LmF0dGFja0R1cmF0aW9uPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmF0dGFja01vZEVudl0pO2xldCBuPSg2MC1BLm1pZGlOb3RlKSpBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5rZXlOdW1Ub01vZEVudkRlY2F5XSxzPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlY2F5TW9kRW52XStuKTt0LmRlY2F5RHVyYXRpb249cyooMS10LnN1c3RhaW5MZXZlbCk7bGV0IGE9KDYwLUEubWlkaU5vdGUpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvTW9kRW52SG9sZF07dC5ob2xkRHVyYXRpb249UWUoYStBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5ob2xkTW9kRW52XSk7bGV0IHI9UWUoTWF0aC5tYXgoQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucmVsZWFzZU1vZEVudl0sLTcyMDApKTt0LnJlbGVhc2VEdXJhdGlvbj1yKnQucmVsZWFzZVN0YXJ0TGV2ZWwsdC5kZWxheUVuZD1BLnN0YXJ0VGltZStRZShBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZEVudl0pLHQuYXR0YWNrRW5kPXQuZGVsYXlFbmQrdC5hdHRhY2tEdXJhdGlvbix0LmhvbGRFbmQ9dC5hdHRhY2tFbmQrdC5ob2xkRHVyYXRpb24sdC5kZWNheUVuZD10LmhvbGRFbmQrdC5kZWNheUR1cmF0aW9ufXN0YXRpYyBnZXRWYWx1ZShBLHQsbj0hMSl7bGV0IHM9QS5tb2R1bGF0aW9uRW52ZWxvcGU7cmV0dXJuIEEuaXNJblJlbGVhc2UmJiFuP3MucmVsZWFzZVN0YXJ0TGV2ZWw9PT0wPzA6TWF0aC5tYXgoMCwoMS0odC1BLnJlbGVhc2VTdGFydFRpbWUpL3MucmVsZWFzZUR1cmF0aW9uKSpzLnJlbGVhc2VTdGFydExldmVsKToodDxzLmRlbGF5RW5kP3MuY3VycmVudFZhbHVlPTA6dDxzLmF0dGFja0VuZD9zLmN1cnJlbnRWYWx1ZT1Zblt+figoMS0ocy5hdHRhY2tFbmQtdCkvcy5hdHRhY2tEdXJhdGlvbikqMWUzKV06dDxzLmhvbGRFbmQ/cy5jdXJyZW50VmFsdWU9U246dDxzLmRlY2F5RW5kP3MuY3VycmVudFZhbHVlPSgxLShzLmRlY2F5RW5kLXQpL3MuZGVjYXlEdXJhdGlvbikqKHMuc3VzdGFpbkxldmVsLVNuKStTbjpzLmN1cnJlbnRWYWx1ZT1zLnN1c3RhaW5MZXZlbCxzLmN1cnJlbnRWYWx1ZSl9fSxTYT1jbGFzc3tzYW1wbGVEYXRhO3BsYXliYWNrU3RlcD0wO2N1cnNvcj0wO3Jvb3RLZXk9MDtsb29wU3RhcnQ9MDtsb29wRW5kPTA7ZW5kPTA7bG9vcGluZ01vZGU9MDtpc0xvb3Bpbmc9ITE7Y29uc3RydWN0b3IoZSxBLHQsbixzLGEscixJKXt0aGlzLnNhbXBsZURhdGE9ZSx0aGlzLnBsYXliYWNrU3RlcD1BLHRoaXMuY3Vyc29yPXQsdGhpcy5yb290S2V5PW4sdGhpcy5sb29wU3RhcnQ9cyx0aGlzLmxvb3BFbmQ9YSx0aGlzLmVuZD1yLHRoaXMubG9vcGluZ01vZGU9SSx0aGlzLmlzTG9vcGluZz10aGlzLmxvb3BpbmdNb2RlPT09MXx8dGhpcy5sb29waW5nTW9kZT09PTN9fSx6bz0tMjMyMCxXbz0tMTEzMCxKbj1jbGFzcyBwYXtzYW1wbGU7ZmlsdGVyO2dhaW49MTtnZW5lcmF0b3JzO21vZHVsYXRvcnM9W107cmVzb25hbmNlT2Zmc2V0PTA7bW9kdWxhdGVkR2VuZXJhdG9ycztmaW5pc2hlZD0hMTtpc0luUmVsZWFzZT0hMTt2ZWxvY2l0eT0wO21pZGlOb3RlPTA7cHJlc3N1cmU9MDt0YXJnZXRLZXk9MDttb2R1bGF0aW9uRW52ZWxvcGU9bmV3IF9lO3ZvbHVtZUVudmVsb3BlO3N0YXJ0VGltZT0wO3JlbGVhc2VTdGFydFRpbWU9MS8wO2N1cnJlbnRUdW5pbmdDZW50cz0wO2N1cnJlbnRUdW5pbmdDYWxjdWxhdGVkPTE7Y3VycmVudFBhbj0wO3JlYWxLZXk7cG9ydGFtZW50b0Zyb21LZXk9LTE7cG9ydGFtZW50b0R1cmF0aW9uPTA7b3ZlcnJpZGVQYW49MDtleGNsdXNpdmVDbGFzcz0wO2NvbnN0cnVjdG9yKEEsdCxuLHMsYSxyLEksbyxnKXt0aGlzLnNhbXBsZT10LHRoaXMuZ2VuZXJhdG9ycz1vLHRoaXMuZXhjbHVzaXZlQ2xhc3M9dGhpcy5nZW5lcmF0b3JzW2kuZXhjbHVzaXZlQ2xhc3NdLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9ycz1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1vZHVsYXRvcnM9Zyx0aGlzLmZpbHRlcj1uZXcgWHQoQSksdGhpcy52ZWxvY2l0eT1zLHRoaXMubWlkaU5vdGU9bix0aGlzLnN0YXJ0VGltZT1hLHRoaXMudGFyZ2V0S2V5PXIsdGhpcy5yZWFsS2V5PUksdGhpcy52b2x1bWVFbnZlbG9wZT1uZXcgYmUoQSxvW2kuc3VzdGFpblZvbEVudl0pfXN0YXRpYyBjb3B5RnJvbShBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1uZXcgU2Eocy5zYW1wbGVEYXRhLHMucGxheWJhY2tTdGVwLHMuY3Vyc29yLHMucm9vdEtleSxzLmxvb3BTdGFydCxzLmxvb3BFbmQscy5lbmQscy5sb29waW5nTW9kZSk7cmV0dXJuIG5ldyBwYShBLnZvbHVtZUVudmVsb3BlLnNhbXBsZVJhdGUsYSxBLm1pZGlOb3RlLEEudmVsb2NpdHksdCxBLnRhcmdldEtleSxuLG5ldyBJbnQxNkFycmF5KEEuZ2VuZXJhdG9ycyksQS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSkpfWV4Y2x1c2l2ZVJlbGVhc2UoQSl7dGhpcy5yZWxlYXNlKEEsV2EpLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VWb2xFbnZdPXpvLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VNb2RFbnZdPVdvLGJlLnJlY2FsY3VsYXRlKHRoaXMpLF9lLnJlY2FsY3VsYXRlKHRoaXMpfXJlbGVhc2UoQSx0PXphKXt0aGlzLnJlbGVhc2VTdGFydFRpbWU9QSx0aGlzLnJlbGVhc2VTdGFydFRpbWUtdGhpcy5zdGFydFRpbWU8dCYmKHRoaXMucmVsZWFzZVN0YXJ0VGltZT10aGlzLnN0YXJ0VGltZSt0KX19O2Z1bmN0aW9uIF9vKGUsQSx0LG4pe2xldCBzPWUuZ2V0U3ludGhlc2lzRGF0YShBLHQpLnJlZHVjZSgoYSxyKT0+e2lmKHIuc2FtcGxlLmdldEF1ZGlvRGF0YSgpPT09dm9pZCAwKXJldHVybiBzQShgRGlzY2FyZGluZyBpbnZhbGlkIHNhbXBsZTogJHtyLnNhbXBsZS5uYW1lfWApLGE7bGV0IEk9bmV3IEludDE2QXJyYXkoTW4pO2ZvcihsZXQgbT0wO208NjA7bSsrKUlbbV09eG8obSxyLnByZXNldEdlbmVyYXRvcnMsci5pbnN0cnVtZW50R2VuZXJhdG9ycyk7SVtpLmluaXRpYWxBdHRlbnVhdGlvbl09TWF0aC5mbG9vcihJW2kuaW5pdGlhbEF0dGVudWF0aW9uXSouNCk7bGV0IG89ci5zYW1wbGUub3JpZ2luYWxLZXk7SVtpLm92ZXJyaWRpbmdSb290S2V5XT4tMSYmKG89SVtpLm92ZXJyaWRpbmdSb290S2V5XSk7bGV0IGc9QTtJW2kua2V5TnVtXT4tMSYmKGc9SVtpLmtleU51bV0pO2xldCBCPXIuc2FtcGxlLmxvb3BTdGFydCxkPXIuc2FtcGxlLmxvb3BFbmQsaD1JW2kuc2FtcGxlTW9kZXNdLEM9ci5zYW1wbGUuZ2V0QXVkaW9EYXRhKCksUT1uZXcgU2EoQyxyLnNhbXBsZS5zYW1wbGVSYXRlL3RoaXMuc2FtcGxlUmF0ZSpNYXRoLnBvdygyLHIuc2FtcGxlLnBpdGNoQ29ycmVjdGlvbi8xMjAwKSwwLG8sQixkLE1hdGguZmxvb3IoQy5sZW5ndGgpLTEsaCk7cmV0dXJuIElbaS52ZWxvY2l0eV0+LTEmJih0PUlbaS52ZWxvY2l0eV0pLGEucHVzaChuZXcgSm4odGhpcy5zYW1wbGVSYXRlLFEsQSx0LHRoaXMuY3VycmVudFN5bnRoVGltZSxnLG4sSSxyLm1vZHVsYXRvcnMubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKSkpLGF9LFtdKTtyZXR1cm4gdGhpcy5zZXRDYWNoZWRWb2ljZShlLEEsdCxzKSxzLm1hcChhPT5Kbi5jb3B5RnJvbShhLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSl9ZnVuY3Rpb24gam8oZSxBLHQsbil7bGV0IHM9dGhpcy5taWRpQ2hhbm5lbHNbZV0sYT10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5oYXNPdmVycmlkZVBhdGNoKGUsQSkscj1zLnByZXNldDtpZighcilyZXR1cm4gc0EoYE5vIHByZXNldCBmb3IgY2hhbm5lbCAke2V9IWApLFtdO2xldCBJPXsuLi5yfTthJiYoST10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5nZXRQYXRjaChlLEEpKTtsZXQgbz10aGlzLmdldENhY2hlZFZvaWNlKEksQSx0KTtyZXR1cm4gbyE9PXZvaWQgMD9vLm1hcChnPT5Kbi5jb3B5RnJvbShnLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSk6KGEmJihyPXRoaXMuc291bmRCYW5rTWFuYWdlci5nZXRQcmVzZXQoSSx0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pKSx0aGlzLmdldFZvaWNlc0ZvclByZXNldChyLEEsdCxuKSl9ZnVuY3Rpb24gR3MoZSxBLHQpe2xldCBuPWUscz1BPDw3fHQ7cmV0dXJuIGU9PT0xMjcmJkE9PT0xMjcmJnQ9PT0xMjc/e21pZGlOb3RlOi0xLGNlbnRUdW5pbmc6bnVsbH06e21pZGlOb3RlOm4sY2VudFR1bmluZzpzKi4wMDYxfX1mdW5jdGlvbiAkbyhlLEE9MCl7bGV0IHQ9ZVswXTtpZih0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmRldmljZUlEIT09QmUmJmVbMV0hPT0xMjcmJnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMuZGV2aWNlSUQhPT1lWzFdKXJldHVybjtmdW5jdGlvbiBuKGEscixJLG8pe3AoYCVjQ2hhbm5lbCAlYyR7YX0lYyAke0l9LiAlYyR7cn0gJHtvfSVjLCB3aXRoICVjJHtNQShlKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfWZ1bmN0aW9uIHMoKXtwKGAlY1VucmVjb2duaXplZCBSb2xhbmQgJWNHUyAlY1N5c0V4OiAlYyR7TUEoZSl9YCxjLndhcm4sYy5yZWNvZ25pemVkLGMud2FybixjLnVucmVjb2duaXplZCl9c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7YnJlYWs7Y2FzZSAxMjY6Y2FzZSAxMjc6c3dpdGNoKGVbMl0pe2Nhc2UgNDp7bGV0IGE7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVs1XTw8N3xlWzRdO3RoaXMuc2V0TUlESVZvbHVtZShyLzE2Mzg0KSxwKGAlY01hc3RlciBWb2x1bWUuIFZvbHVtZTogJWMke3J9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAyOntsZXQgST0oKGVbNV08PDd8ZVs0XSktODE5MikvODE5Mjt0aGlzLnNldE1hc3RlclBhcmFtZXRlcigibWFzdGVyUGFuIixJKSxwKGAlY01hc3RlciBQYW4uIFBhbjogJWMke0l9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAzOntsZXQgcj0oZVs1XTw8N3xlWzZdKS04MTkyO2E9TWF0aC5mbG9vcihyLzgxLjkyKSx0aGlzLnNldE1hc3RlclR1bmluZyhhKSxwKGAlY01hc3RlciBGaW5lIFR1bmluZy4gQ2VudHM6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpO2JyZWFrfWNhc2UgNDp7YT0oZVs1XS02NCkqMTAwLHRoaXMuc2V0TWFzdGVyVHVuaW5nKGEpLHAoYCVjTWFzdGVyIENvYXJzZSBUdW5pbmcuIENlbnRzOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKTticmVha31kZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIE1JREkgRGV2aWNlIENvbnRyb2wgUmVhbC10aW1lIG1lc3NhZ2U6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCl9YnJlYWt9Y2FzZSA5OmVbM109PT0xPyhwKCIlY0dNMSBzeXN0ZW0gb24iLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJnbSIpKTplWzNdPT09Mz8ocCgiJWNHTTIgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpOihwKCIlY0dNIHN5c3RlbSBvZmYsIGRlZmF1bHRpbmcgdG8gR1MiLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJncyIpKTticmVhaztjYXNlIDg6e2xldCBhPTQ7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVthKytdLEk9ZWUoZSwxNixhKTtpZihhKz0xNixlLmxlbmd0aDwzODQpe3NBKGBUaGUgQnVsayBUdW5pbmcgRHVtcCBpcyB0b28gc2hvcnQhICgke2UubGVuZ3RofSBieXRlcywgYXQgbGVhc3QgMzg0IGFyZSBleHBlY3RlZClgKTtyZXR1cm59Zm9yKGxldCBvPTA7bzwxMjg7bysrKXRoaXMucHJpdmF0ZVByb3BzLnR1bmluZ3Nbcl1bb109R3MoZVthKytdLGVbYSsrXSxlW2ErK10pO3AoYCVjQnVsayBUdW5pbmcgRHVtcCAlYyR7SX0lYyBQcm9ncmFtOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMjpjYXNlIDc6e2VbM109PT03JiZhKys7bGV0IHI9ZVthKytdLEk9ZVthKytdO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5wcml2YXRlUHJvcHMudHVuaW5nc1tyXVtlW2ErK11dPUdzKGVbYSsrXSxlW2ErK10sZVthKytdKTtwKGAlY1NpbmdsZSBOb3RlIFR1bmluZy4gUHJvZ3JhbTogJWMke3J9JWMgS2V5cyBhZmZlY3RlZDogJWMke0l9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgOTpjYXNlIDg6e2xldCByPW5ldyBJbnQ4QXJyYXkoMTIpO2lmKGVbM109PT04KWZvcihsZXQgST0wO0k8MTI7SSsrKXJbSV09ZVs3K0ldLTY0O2Vsc2UgZm9yKGxldCBJPTA7STwyNDtJKz0yKXtsZXQgbz0oZVs3K0ldPDw3fGVbOCtJXSktODE5MjtyW0kvMl09TWF0aC5mbG9vcihvLzgxLjkyKX0oZVs0XSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE0K0FdLnNldE9jdGF2ZVR1bmluZyhyKSwoZVs0XT4+MSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE1K0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzVdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbNytJK0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzZdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbSStBXS5zZXRPY3RhdmVUdW5pbmcocik7cChgJWNNSURJIE9jdGF2ZSBTY2FsZSAke2VbM109PT04PyIoMSBieXRlKSI6IigyIGJ5dGVzKSJ9IHR1bmluZyB2aWEgVHVuaW5nOiAlYyR7ci5qb2luKCIgIil9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBNSURJIFR1bmluZyBzdGFuZGFyZCBtZXNzYWdlOiAlYyR7TUEoZSl9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfWJyZWFrfWRlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgTUlESSBSZWFsdGltZS9ub24gcmVhbHRpbWUgbWVzc2FnZTogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX1icmVhaztjYXNlIDY1OmlmKGVbMl09PT02NiYmZVszXT09PTE4KXtsZXQgYT1lWzddO2lmKGVbNF09PT02NHx8ZVs0XT09PTAmJmVbNl09PT0xMjcpe2lmKChlWzVdJjE2KT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdO3N3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDIxOntsZXQgbz1hPjAmJmVbNV0+PjQ+MDtJLnNldEdTRHJ1bXMobykscChgJWNDaGFubmVsICVjJHtyfSVjICR7bz8iaXMgbm93IGEgZHJ1bSBjaGFubmVsIjoibm93IGlzbid0IGEgZHJ1bSBjaGFubmVsIn0lYyB2aWE6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMucmVjb2duaXplZCxjLmluZm8sYy52YWx1ZSk7cmV0dXJufWNhc2UgMjI6e2xldCBvPWEtNjQ7SS5zZXRDdXN0b21Db250cm9sbGVyKElBLmNoYW5uZWxLZXlTaGlmdCxvKSxuKHIsbywia2V5IHNoaWZ0Iiwia2V5cyIpO3JldHVybn1jYXNlIDI4OntsZXQgbz1hO289PT0wPyhJLnJhbmRvbVBhbj0hMCxwKGAlY1JhbmRvbSBwYW4gaXMgc2V0IHRvICVjT04lYyBmb3IgJWMke3J9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlKSk6KEkucmFuZG9tUGFuPSExLEkuY29udHJvbGxlckNoYW5nZShTLnBhbixvKSk7YnJlYWt9Y2FzZSAzMzpJLmNvbnRyb2xsZXJDaGFuZ2UoUy5jaG9ydXNEZXB0aCxhKTticmVhaztjYXNlIDM0OkkuY29udHJvbGxlckNoYW5nZShTLnJldmVyYkRlcHRoLGEpO2JyZWFrO2Nhc2UgNjQ6Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6Y2FzZSA3MTpjYXNlIDcyOmNhc2UgNzM6Y2FzZSA3NDpjYXNlIDc1OntsZXQgbz1lLmxlbmd0aC05LGc9bmV3IEludDhBcnJheSgxMik7Zm9yKGxldCBkPTA7ZDxvO2QrKylnW2RdPWVbZCs3XS02NDtJLnNldE9jdGF2ZVR1bmluZyhnKTtsZXQgQj1hLTY0O24ocixnLmpvaW4oIiAiKSwib2N0YXZlIHNjYWxlIHR1bmluZyIsImNlbnRzIiksSS5zZXRUdW5pbmcoQik7YnJlYWt9fXJldHVybn1lbHNlIGlmKChlWzVdJjMyKT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdLG89YS02NCxnPW8vNjQsQj1hLzEyOCxkPShoLEMsUT0hMSk9Pntzd2l0Y2goZVs2XSYxNSl7Y2FzZSAwOmg9PT1tQStqLnBpdGNoV2hlZWw/KEkuY29udHJvbGxlckNoYW5nZShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCksSS5jb250cm9sbGVyQ2hhbmdlKFMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiwwKSxJLmNvbnRyb2xsZXJDaGFuZ2UoUy5kYXRhRW50cnlNU0IsTWF0aC5mbG9vcihvKSkpOihJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmZpbmVUdW5lLG8qMTAwLFEpLG4ocixvLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJzZW1pdG9uZXMiKSk7YnJlYWs7Y2FzZSAxOkkuc3lzRXhNb2R1bGF0b3JzLnNldE1vZHVsYXRvcihoLGkuaW5pdGlhbEZpbHRlckZjLGcqOTYwMCxRKSxuKHIsZyo5NjAwLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMjpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmluaXRpYWxBdHRlbnVhdGlvbixnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gYW1wbGl0dWRlYCwiY0IiKTticmVhaztjYXNlIDQ6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1BpdGNoLEIqNjAwLFEpLG4ocixCKjYwMCxgJHtDfSBMRk8xIHBpdGNoIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDU6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub0ZpbHRlckZjLEIqMjQwMCxRKSxuKHIsQioyNDAwLGAke0N9IExGTzEgZmlsdGVyIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDY6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMSBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrO2Nhc2UgODpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvUGl0Y2gsQio2MDAsUSksbihyLEIqNjAwLGAke0N9IExGTzIgcGl0Y2ggZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgOTpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvRmlsdGVyRmMsQioyNDAwLFEpLG4ocixCKjI0MDAsYCR7Q30gTEZPMiBmaWx0ZXIgZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMTA6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS5tb2RMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMiBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrfX07c3dpdGNoKGVbNl0mMjQwKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6ZChTLm1vZHVsYXRpb25XaGVlbCwibW9kIHdoZWVsIik7YnJlYWs7Y2FzZSAxNjpkKG1BK2oucGl0Y2hXaGVlbCwicGl0Y2ggd2hlZWwiLCEwKTticmVhaztjYXNlIDMyOmQobUErai5jaGFubmVsUHJlc3N1cmUsImNoYW5uZWwgcHJlc3N1cmUiKTticmVhaztjYXNlIDQ4OmQobUErai5wb2x5UHJlc3N1cmUsInBvbHkgcHJlc3N1cmUiKTticmVha31yZXR1cm59ZWxzZSBpZihlWzVdPT09MCl7c3dpdGNoKGVbNl0pe2RlZmF1bHQ6cygpO2JyZWFrO2Nhc2UgMTI3OmE9PT0wPyhwKCIlY0dTIFJlc2V0IHJlY2VpdmVkISIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ3MiKSk6YT09PTEyNyYmKHAoIiVjR1Mgc3lzdGVtIG9mZiwgc3dpdGNoaW5nIHRvIEdNMiIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpO2JyZWFrO2Nhc2UgNjpwKGAlY1JvbGFuZCBHUyBNYXN0ZXIgUGFuIHNldCB0bzogJWMke2F9JWMgd2l0aDogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtYXN0ZXJQYW4iLChhLTY0KS82NCk7YnJlYWs7Y2FzZSA0OnAoYCVjUm9sYW5kIEdTIE1hc3RlciBWb2x1bWUgc2V0IHRvOiAlYyR7YX0lYyB3aXRoOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSxjLmluZm8sYy52YWx1ZSksdGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KTticmVhaztjYXNlIDU6e2xldCByPWEtNjQ7cChgJWNSb2xhbmQgR1MgTWFzdGVyIEtleS1TaGlmdCBzZXQgdG86ICVjJHtyfSVjIHdpdGg6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldE1hc3RlclR1bmluZyhyKjEwMCk7YnJlYWt9fXJldHVybn1lbHNlIGlmKGVbNV09PT0xKXN3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6e2xldCByPWVlKGUsMTYsNyk7cChgJWNHUyBQYXRjaCBuYW1lOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIDUxOnAoYCVjR1MgUmV2ZXJiIGxldmVsOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnByaXZhdGVQcm9wcy5yZXZlcmJTZW5kPWEvNjQ7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTU6cChgJWNVbnN1cHBvcnRlZCBHUyBSZXZlcmIgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrO2Nhc2UgNTg6cChgJWNHUyBDaG9ydXMgbGV2ZWw6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpLHRoaXMucHJpdmF0ZVByb3BzLmNob3J1c1NlbmQ9YS82NDticmVhaztjYXNlIDU2OmNhc2UgNTc6Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6cChgJWNVbnN1cHBvcnRlZCBHUyBDaG9ydXMgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfX1lbHNlIHMoKTtyZXR1cm59ZWxzZSBpZihlWzJdPT09NjkmJmVbM109PT0xOCl7aWYoZVs0XT09PTE2JiZlWzZdPT09MClpZihlWzVdPT09MCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTIpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNUZXh0fSl9ZWxzZSBpZihlWzVdPT09MSl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTMpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNEb3RNYXRyaXh9KSxwKGAlY1JvbGFuZCBTQyBEaXNwbGF5IERvdCBNYXRyaXggdmlhOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSl9ZWxzZSBzKCl9ZWxzZSBpZihlWzJdPT09MjImJmVbM109PT0xOCYmZVs0XT09PTE2KXt0aGlzLnNldE1JRElWb2x1bWUoZVs3XS8xMDApLHAoYCVjUm9sYW5kIE1hc3RlciBWb2x1bWUgY29udHJvbCBzZXQgdG86ICVjJHtlWzddfSVjIHZpYTogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpO3JldHVybn1lbHNle3AoYCVjVW5yZWNvZ25pemVkIFJvbGFuZCBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTtyZXR1cm59YnJlYWs7Y2FzZSA2NzppZihlWzJdPT09NzYpaWYoZVszXT09PTAmJmVbNF09PT0wKXN3aXRjaChlWzVdKXtjYXNlIDQ6e2xldCBhPWVbNl07dGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KSxwKGAlY1hHIG1hc3RlciB2b2x1bWUuIFZvbHVtZTogJWMke2F9YCxjLmluZm8sYy5yZWNvZ25pemVkKTticmVha31jYXNlIDY6e2xldCBhPWVbNl0tNjQ7dGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoInRyYW5zcG9zaXRpb24iLGEpLHAoYCVjWEcgbWFzdGVyIHRyYW5zcG9zZS4gVm9sdW1lOiAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMTI2OnAoIiVjWEcgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycyghMSksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJ4ZyIpO2JyZWFrfWVsc2UgaWYoZVszXT09PTgpe2lmKCFmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpcmV0dXJuO2xldCBhPWVbNF0rQTtpZihhPj10aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpcmV0dXJuO2xldCByPXRoaXMubWlkaUNoYW5uZWxzW2FdLEk9ZVs2XTtzd2l0Y2goZVs1XSl7Y2FzZSAxOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3QsSSk7YnJlYWs7Y2FzZSAyOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3RMU0IsSSk7YnJlYWs7Y2FzZSAzOnIucHJvZ3JhbUNoYW5nZShJKTticmVhaztjYXNlIDg6e2lmKHIuZHJ1bUNoYW5uZWwpcmV0dXJuO3IuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0PUktNjQ7YnJlYWt9Y2FzZSAxMTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5tYWluVm9sdW1lLEkpO2JyZWFrO2Nhc2UgMTQ6e2xldCBvPUk7bz09PTA/KHIucmFuZG9tUGFuPSEwLHAoYCVjUmFuZG9tIHBhbiBpcyBzZXQgdG8gJWNPTiVjIGZvciAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUpKTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5wYW4sbyk7YnJlYWt9Y2FzZSAxOTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZXZlcmJEZXB0aCxJKTticmVhaztjYXNlIDE4OnIuY29udHJvbGxlckNoYW5nZShTLmNob3J1c0RlcHRoLEkpO2JyZWFrO2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgWWFtYWhhIFhHIFBhcnQgU2V0dXA6ICVjJHtlWzVdLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX19ZWxzZSBpZihlWzNdPT09NiYmZVs0XT09PTApe2xldCBhPW5ldyBVaW50OEFycmF5KGUuc2xpY2UoNSxlLmxlbmd0aC0xKSk7dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJzeW50aERpc3BsYXkiLHtkaXNwbGF5RGF0YTphLGRpc3BsYXlUeXBlOmhuLnlhbWFoYVhHVGV4dH0pfWVsc2UgZkEuaXNTeXN0ZW1YRyh0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pJiZwKGAlY1VucmVjb2duaXplZCBZYW1haGEgWEcgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7ZWxzZSBmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkmJnAoYCVjVW5yZWNvZ25pemVkIFlhbWFoYSBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTticmVha319dmFyIFJzPWNsYXNzIHFue3BhdGNoO2xvY2tQcmVzZXQ7bG9ja2VkU3lzdGVtO21pZGlDb250cm9sbGVycztsb2NrZWRDb250cm9sbGVycztjdXN0b21Db250cm9sbGVycztsb2NrVmlicmF0bztjaGFubmVsVmlicmF0bztjaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ7Y2hhbm5lbE9jdGF2ZVR1bmluZztpc011dGVkO2RydW1DaGFubmVsO2NoYW5uZWxOdW1iZXI7Y29uc3RydWN0b3IoQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyl7dGhpcy5wYXRjaD1BLHRoaXMubG9ja1ByZXNldD10LHRoaXMubG9ja2VkU3lzdGVtPW4sdGhpcy5taWRpQ29udHJvbGxlcnM9cyx0aGlzLmxvY2tlZENvbnRyb2xsZXJzPWEsdGhpcy5jdXN0b21Db250cm9sbGVycz1yLHRoaXMubG9ja1ZpYnJhdG89SSx0aGlzLmNoYW5uZWxWaWJyYXRvPW8sdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9Zyx0aGlzLmNoYW5uZWxPY3RhdmVUdW5pbmc9Qix0aGlzLmlzTXV0ZWQ9ZCx0aGlzLmRydW1DaGFubmVsPWgsdGhpcy5jaGFubmVsTnVtYmVyPUN9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgcW4oey4uLkEucGF0Y2h9LEEubG9ja1ByZXNldCxBLmxvY2tlZFN5c3RlbSxBLm1pZGlDb250cm9sbGVycy5zbGljZSgpLFsuLi5BLmxvY2tlZENvbnRyb2xsZXJzXSxBLmN1c3RvbUNvbnRyb2xsZXJzLnNsaWNlKCksQS5sb2NrVmlicmF0byx7Li4uQS5jaGFubmVsVmlicmF0b30sQS5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsQS5jaGFubmVsT2N0YXZlVHVuaW5nLEEuaXNNdXRlZCxBLmRydW1DaGFubmVsLEEuY2hhbm5lbE51bWJlcil9c3RhdGljIGNyZWF0ZShBLHQpe2xldCBuPUEubWlkaUNoYW5uZWxzW3RdO3JldHVybiBuZXcgcW4oey4uLm4ucGF0Y2gsbmFtZTpuPy5wcmVzZXQ/Lm5hbWU/PyJ1bmRlZmluZWQifSxuLmxvY2tQcmVzZXQsbi5sb2NrZWRTeXN0ZW0sbi5taWRpQ29udHJvbGxlcnMuc2xpY2UoKSxbLi4ubi5sb2NrZWRDb250cm9sbGVyc10sbi5jdXN0b21Db250cm9sbGVycy5zbGljZSgpLG4ubG9ja0dTTlJQTlBhcmFtcyx7Li4ubi5jaGFubmVsVmlicmF0b30sbi5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsbi5jaGFubmVsT2N0YXZlVHVuaW5nLnNsaWNlKCksbi5pc011dGVkLG4uZHJ1bUNoYW5uZWwsdCl9YXBwbHkoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHNbdGhpcy5jaGFubmVsTnVtYmVyXTt0Lm11dGVDaGFubmVsKHRoaXMuaXNNdXRlZCksdC5zZXREcnVtcyh0aGlzLmRydW1DaGFubmVsKSx0Lm1pZGlDb250cm9sbGVycy5zZXQodGhpcy5taWRpQ29udHJvbGxlcnMpLHQubG9ja2VkQ29udHJvbGxlcnM9dGhpcy5sb2NrZWRDb250cm9sbGVycyx0LmN1c3RvbUNvbnRyb2xsZXJzLnNldCh0aGlzLmN1c3RvbUNvbnRyb2xsZXJzKSx0LnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0LmNoYW5uZWxWaWJyYXRvPXRoaXMuY2hhbm5lbFZpYnJhdG8sdC5sb2NrR1NOUlBOUGFyYW1zPXRoaXMubG9ja1ZpYnJhdG8sdC5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsdC5jaGFubmVsT2N0YXZlVHVuaW5nPXRoaXMuY2hhbm5lbE9jdGF2ZVR1bmluZyx0LnNldFByZXNldExvY2soITEpLHQuc2V0UGF0Y2godGhpcy5wYXRjaCksdC5zZXRQcmVzZXRMb2NrKHRoaXMubG9ja1ByZXNldCksdC5sb2NrZWRTeXN0ZW09dGhpcy5sb2NrZWRTeXN0ZW19fTt2YXIgQXI9Y2xhc3N7a2V5TWFwcGluZ3M9W107YWRkTWFwcGluZyhlLEEsdCl7dGhpcy5rZXlNYXBwaW5nc1tlXT8/PVtdLHRoaXMua2V5TWFwcGluZ3NbZV1bQV09dH1kZWxldGVNYXBwaW5nKGUsQSl7dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdIT09dm9pZCAwJiYodGhpcy5rZXlNYXBwaW5nc1tlXVtBXT12b2lkIDApfWNsZWFyTWFwcGluZ3MoKXt0aGlzLmtleU1hcHBpbmdzPVtdfXNldE1hcHBpbmdzKGUpe3RoaXMua2V5TWFwcGluZ3M9ZX1nZXRNYXBwaW5ncygpe3JldHVybiB0aGlzLmtleU1hcHBpbmdzfWdldFZlbG9jaXR5KGUsQSl7cmV0dXJuIHRoaXMua2V5TWFwcGluZ3NbZV0/LltBXT8udmVsb2NpdHk/Py0xfWdldEdhaW4oZSxBKXtyZXR1cm4gdGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdPy5nYWluPz8xfWhhc092ZXJyaWRlUGF0Y2goZSxBKXtsZXQgdD10aGlzLmtleU1hcHBpbmdzW2VdPy5bQV0/LnBhdGNoPy5iYW5rTVNCO3JldHVybiB0IT09dm9pZCAwJiZ0Pj0wfWdldFBhdGNoKGUsQSl7bGV0IHQ9dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdO2lmKHQpcmV0dXJuIHQucGF0Y2g7dGhyb3cgbmV3IEVycm9yKCJObyBtb2RpZmllci4iKX19LHJzPWNsYXNzIEtue2NoYW5uZWxTbmFwc2hvdHM7a2V5TWFwcGluZ3M7bWFzdGVyUGFyYW1ldGVycztjb25zdHJ1Y3RvcihBLHQsbil7dGhpcy5jaGFubmVsU25hcHNob3RzPUEsdGhpcy5tYXN0ZXJQYXJhbWV0ZXJzPXQsdGhpcy5rZXlNYXBwaW5ncz1ufXN0YXRpYyBjcmVhdGUoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHMubWFwKChuLHMpPT5Scy5jcmVhdGUoQSxzKSk7cmV0dXJuIG5ldyBLbih0LEEuZ2V0QWxsTWFzdGVyUGFyYW1ldGVycygpLEEua2V5TW9kaWZpZXJNYW5hZ2VyLmdldE1hcHBpbmdzKCkpfXN0YXRpYyBjb3B5RnJvbShBKXtyZXR1cm4gbmV3IEtuKEEuY2hhbm5lbFNuYXBzaG90cy5tYXAodD0+UnMuY29weUZyb20odCkpLHsuLi5BLm1hc3RlclBhcmFtZXRlcnN9LFsuLi5BLmtleU1hcHBpbmdzXSl9YXBwbHkoQSl7Zm9yKE9iamVjdC5lbnRyaWVzKHRoaXMubWFzdGVyUGFyYW1ldGVycykuZm9yRWFjaCgoW24sc10pPT57QS5zZXRNYXN0ZXJQYXJhbWV0ZXIobixzKX0pLEEua2V5TW9kaWZpZXJNYW5hZ2VyLnNldE1hcHBpbmdzKHRoaXMua2V5TWFwcGluZ3MpO0EubWlkaUNoYW5uZWxzLmxlbmd0aDx0aGlzLmNoYW5uZWxTbmFwc2hvdHMubGVuZ3RoOylBLmNyZWF0ZU1JRElDaGFubmVsKCk7dGhpcy5jaGFubmVsU25hcHNob3RzLmZvckVhY2gobj0+e24uYXBwbHkoQSl9KX19LGVyPXttYXN0ZXJHYWluOl9hLG1hc3RlclBhbjowLHZvaWNlQ2FwOlhhLGludGVycG9sYXRpb25UeXBlOnZ0Lmhlcm1pdGUsbWlkaVN5c3RlbTpPcyxtb25vcGhvbmljUmV0cmlnZ2VyTW9kZTohMSxyZXZlcmJHYWluOjEsY2hvcnVzR2FpbjoxLGJsYWNrTUlESU1vZGU6ITEsdHJhbnNwb3NpdGlvbjowLGRldmljZUlEOkJlfSx0cj1jbGFzc3t0dW5pbmdzPVtdO21hc3RlclBhcmFtZXRlcnM9ZXI7bWlkaVZvbHVtZT0xO3JldmVyYlNlbmQ9MTtjaG9ydXNTZW5kPTE7cGFuTGVmdD0uNTtwYW5SaWdodD0uNTtkZWZhdWx0UHJlc2V0O2RydW1QcmVzZXQ7dm9sdW1lRW52ZWxvcGVTbW9vdGhpbmdGYWN0b3I7cGFuU21vb3RoaW5nRmFjdG9yO2ZpbHRlclNtb290aGluZ0ZhY3RvcjtldmVudENhbGxiYWNrSGFuZGxlcjtnZXRWb2ljZXM7dm9pY2VLaWxsaW5nO2NhY2hlZFZvaWNlcz1bXTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcj1lLHRoaXMuZ2V0Vm9pY2VzPUEsdGhpcy52b2ljZUtpbGxpbmc9dCx0aGlzLnZvbHVtZUVudmVsb3BlU21vb3RoaW5nRmFjdG9yPW4sdGhpcy5wYW5TbW9vdGhpbmdGYWN0b3I9cyx0aGlzLmZpbHRlclNtb290aGluZ0ZhY3Rvcj1hO2ZvcihsZXQgcj0wO3I8MTI4O3IrKyl0aGlzLnR1bmluZ3MucHVzaChbXSl9Y2FsbEV2ZW50KGUsQSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcihlLEEpfX07ZnVuY3Rpb24gcG4oZSxBLHQpe2lmKHQ8ZSlyZXR1cm4gMDtsZXQgbj0odC1lKS8oMS9BKSsuMjU7cmV0dXJuIE1hdGguYWJzKG4tfn4obisuNSkpKjQtMX12YXIgbnI9Y2xhc3MgT257c3RhdGljIGdldFNhbXBsZShBLHQsbil7bGV0IHM9QS5jdXJyZW50VHVuaW5nQ2FsY3VsYXRlZCpBLnNhbXBsZS5wbGF5YmFja1N0ZXA7aWYocz09PTEpe09uLmdldFNhbXBsZU5lYXJlc3QoQSx0LHMpO3JldHVybn1zd2l0Y2gobil7Y2FzZSB2dC5oZXJtaXRlOnRoaXMuZ2V0U2FtcGxlSGVybWl0ZShBLHQscyk7cmV0dXJuO2Nhc2UgdnQubGluZWFyOmRlZmF1bHQ6dGhpcy5nZXRTYW1wbGVMaW5lYXIoQSx0LHMpO3JldHVybjtjYXNlIHZ0Lm5lYXJlc3ROZWlnaGJvcjpPbi5nZXRTYW1wbGVOZWFyZXN0KEEsdCxzKTtyZXR1cm59fXN0YXRpYyBnZXRTYW1wbGVMaW5lYXIoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxO2Zvcig7Qj49cy5sb29wRW5kOylCLT1JO2xldCBkPWEtZyxoPXJbQl0sQz1yW2ddO3Rbb109QysoaC1DKSpkLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMTtpZihnPj1zLmVuZCl7QS5maW5pc2hlZD0hMDtyZXR1cm59bGV0IEI9YS1vLGQ9cltnXSxoPXJbb107dFtJXT1oKyhkLWgpKkIsYSs9bn1BLnNhbXBsZS5jdXJzb3I9YX1zdGF0aWMgZ2V0U2FtcGxlTmVhcmVzdChBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1zLmN1cnNvcixyPXMuc2FtcGxlRGF0YTtpZihzLmlzTG9vcGluZyl7bGV0IEk9cy5sb29wRW5kLXMubG9vcFN0YXJ0O2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtmb3IoO2E+PXMubG9vcEVuZDspYS09STtsZXQgZz1+fmErMTtmb3IoO2c+PXMubG9vcEVuZDspZy09STt0W29dPXJbZ10sYSs9bn19ZWxzZSBmb3IobGV0IEk9MDtJPHQubGVuZ3RoO0krKyl7bGV0IG89fn5hKzE7aWYobz49cy5lbmQpe0EuZmluaXNoZWQ9ITA7cmV0dXJufXRbSV09cltvXSxhKz1ufXMuY3Vyc29yPWF9c3RhdGljIGdldFNhbXBsZUhlcm1pdGUoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxLGQ9ZysyLGg9ZyszLEM9YS1nO0I+PXMubG9vcEVuZCYmKEItPUkpLGQ+PXMubG9vcEVuZCYmKGQtPUkpLGg+PXMubG9vcEVuZCYmKGgtPUkpO2xldCBRPXJbZ10sbT1yW0JdLHk9cltkXSxGPXJbaF0saz0oeS1RKSouNSxEPW0teSx2PWsrRCxMPXYrRCsoRi1tKSouNSxFPXYrTDt0W29dPSgoTCpDLUUpKkMraykqQyttLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMSxCPW8rMixkPW8rMyxoPWEtbztpZihnPj1zLmVuZHx8Qj49cy5lbmR8fGQ+PXMuZW5kKXtBLmZpbmlzaGVkPSEwO3JldHVybn1sZXQgQz1yW29dLFE9cltnXSxtPXJbQl0seT1yW2RdLEY9KG0tQykqLjUsaz1RLW0sRD1GK2ssdj1EK2srKHktUSkqLjUsTD1EK3Y7dFtJXT0oKHYqaC1MKSpoK0YpKmgrUSxhKz1ufUEuc2FtcGxlLmN1cnNvcj1hfX07ZnVuY3Rpb24gc3IoZSxBLHQsbixzLGEscixJLG8sZyl7aWYoZS5pc0luUmVsZWFzZXx8QT49ZS5yZWxlYXNlU3RhcnRUaW1lJiYoZS5pc0luUmVsZWFzZT0hMCxiZS5zdGFydFJlbGVhc2UoZSksX2Uuc3RhcnRSZWxlYXNlKGUpLGUuc2FtcGxlLmxvb3BpbmdNb2RlPT09MyYmKGUuc2FtcGxlLmlzTG9vcGluZz0hMSkpLGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0+MjUwMClyZXR1cm4gZS5pc0luUmVsZWFzZSYmKGUuZmluaXNoZWQ9ITApLGUuZmluaXNoZWQ7bGV0IEI9ZS50YXJnZXRLZXksZD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5maW5lVHVuZV0rdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW2UubWlkaU5vdGVdK3RoaXMuY2hhbm5lbFR1bmluZ0NlbnRzLGg9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuY29hcnNlVHVuZV0sQz10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1t0aGlzLnByZXNldD8ucHJvZ3JhbT8/MF0/LltlLnJlYWxLZXldO2lmKEM/LmNlbnRUdW5pbmcmJihCPUMubWlkaU5vdGUsZCs9Qy5jZW50VHVuaW5nKSxlLnBvcnRhbWVudG9Gcm9tS2V5Pi0xKXtsZXQgJD1NYXRoLm1pbigoQS1lLnN0YXJ0VGltZSkvZS5wb3J0YW1lbnRvRHVyYXRpb24sMSksVj1CLWUucG9ydGFtZW50b0Zyb21LZXk7aC09ViooMS0kKX1kKz0oQi1lLnNhbXBsZS5yb290S2V5KSplLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zY2FsZVR1bmluZ107bGV0IFE9MCxtPTAseT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS52aWJMZm9Ub1BpdGNoXSxGPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvVm9sdW1lXSxrPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvRmlsdGVyRmNdO2lmKHkhPT0wfHxGIT09MHx8ayE9PTApe2xldCAkPWUuc3RhcnRUaW1lK1FlKGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlbGF5VmliTEZPXSksVj1ObihlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5mcmVxVmliTEZPXSkscT1wbigkLFYsQSk7ZCs9cSooeSp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXSksbSs9LXEqRixRKz1xKmt9bGV0IEQ9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kTGZvVG9QaXRjaF0sdj1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub1ZvbHVtZV0sTD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub0ZpbHRlckZjXTtpZihEIT09MHx8TCE9PTB8fHYhPT0wKXtsZXQgJD1lLnN0YXJ0VGltZStRZShlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZExGT10pLFY9Tm4oZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZnJlcU1vZExGT10pLHE9cG4oJCxWLEEpO2QrPXEqKEQqdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5tb2R1bGF0aW9uTXVsdGlwbGllcl0pLG0rPS1xKnYsUSs9cSpMfWlmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg+MCl7bGV0ICQ9cG4oZS5zdGFydFRpbWUrdGhpcy5jaGFubmVsVmlicmF0by5kZWxheSx0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGUsQSk7JCYmKGQrPSQqdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aCl9bGV0IEU9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kRW52VG9QaXRjaF0sWD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RFbnZUb0ZpbHRlckZjXTtpZihYIT09MHx8RSE9PTApe2xldCAkPV9lLmdldFZhbHVlKGUsQSk7USs9JCpYLGQrPSQqRX1tLT1lLnJlc29uYW5jZU9mZnNldDtsZXQgTz1+fihkK2gqMTAwKTtPIT09ZS5jdXJyZW50VHVuaW5nQ2VudHMmJihlLmN1cnJlbnRUdW5pbmdDZW50cz1PLGUuY3VycmVudFR1bmluZ0NhbGN1bGF0ZWQ9TWF0aC5wb3coMixPLzEyMDApKTtsZXQgbkE9bmV3IEZsb2F0MzJBcnJheShnKTtyZXR1cm4gZS5zYW1wbGUubG9vcGluZ01vZGU9PT0yJiYhZS5pc0luUmVsZWFzZT8oYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksZS5maW5pc2hlZCk6KG5yLmdldFNhbXBsZShlLG5BLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmludGVycG9sYXRpb25UeXBlKSxYdC5hcHBseShlLG5BLFEsdGhpcy5zeW50aFByb3BzLmZpbHRlclNtb290aGluZ0ZhY3RvciksYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksdGhpcy5wYW5BbmRNaXhWb2ljZShlLG5BLHQsbixzLGEscixJLG8pLGUuZmluaXNoZWQpfXZhciB1ZT17cGl0Y2hXaGVlbFJhbmdlOjAsZmluZVR1bmluZzoxLGNvYXJzZVR1bmluZzoyLG1vZHVsYXRpb25EZXB0aDo1LHJlc2V0UGFyYW1ldGVyczoxNjM4M30sWmU9e3BhcnRQYXJhbWV0ZXI6MSxhd2UzMjoxMjcsU0YyOjEyMH0sT2U9e3ZpYnJhdG9SYXRlOjgsdmlicmF0b0RlcHRoOjksdmlicmF0b0RlbGF5OjEwLFRWRkZpbHRlckN1dG9mZjozMixUVkZGaWx0ZXJSZXNvbmFuY2U6MzMsRUdBdHRhY2tUaW1lOjk5LEVHUmVsZWFzZVRpbWU6MTAyfTtmdW5jdGlvbiBhcihlKXt0aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeU1TQl09ZTw8NztsZXQgQT0oKT0+e3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXk9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGU9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLmRlcHRoPT09MCYmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9NTAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTgsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0uNil9LHQ9KG4scyxhKT0+e2EubGVuZ3RoPjAmJihhPSIgIithKSxwKGAlYyR7bn0gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7c30lYyR7YX0uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyl9O3N3aXRjaCh0aGlzLmRhdGFFbnRyeVN0YXRlKXtkZWZhdWx0OmNhc2UgWUEuSWRsZTpicmVhaztjYXNlIFlBLk5SUEZpbmU6e2lmKHRoaXMubG9ja0dTTlJQTlBhcmFtcylyZXR1cm47bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+NyxzPXRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl0+PjcsYT10aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeUxTQl0+Pjc7c3dpdGNoKG4pe2RlZmF1bHQ6aWYoZT09PTY0KXJldHVybjtwKGAlY1VucmVjb2duaXplZCBOUlBOIGZvciAlYyR7dGhpcy5jaGFubmVsTnVtYmVyfSVjOiAlYygweCR7cy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0gMHgke3MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KSVjIGRhdGEgdmFsdWU6ICVjJHtlfWAsYy53YXJuLGMucmVjb2duaXplZCxjLndhcm4sYy51bnJlY29nbml6ZWQsYy53YXJuLGMudmFsdWUpO2JyZWFrO2Nhc2UgWmUucGFydFBhcmFtZXRlcjpzd2l0Y2gocyl7ZGVmYXVsdDppZihlPT09NjQpcmV0dXJuO3AoYCVjVW5yZWNvZ25pemVkIE5SUE4gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWM6ICVjKDB4JHtuLnRvU3RyaW5nKDE2KX0gMHgke3MudG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIE9lLnZpYnJhdG9SYXRlOmlmKGU9PT02NClyZXR1cm47QSgpLHRoaXMuY2hhbm5lbFZpYnJhdG8ucmF0ZT1lLzY0KjgsdCgiVmlicmF0byByYXRlIixgJHtlfSA9ICR7dGhpcy5jaGFubmVsVmlicmF0by5yYXRlfWAsIkh6Iik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVwdGg6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aD1lLzIsdCgiVmlicmF0byBkZXB0aCIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGh9YCwiY2VudHMgb2YgZGV0dW5lIik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVsYXk6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT1lLzY0LzMsdCgiVmlicmF0byBkZWxheSIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXl9YCwic2Vjb25kcyIpO2JyZWFrO2Nhc2UgT2UuVFZGRmlsdGVyQ3V0b2ZmOnRoaXMuY29udHJvbGxlckNoYW5nZShTLmJyaWdodG5lc3MsZSksdCgiRmlsdGVyIGN1dG9mZiIsZS50b1N0cmluZygpLCIiKTticmVhaztjYXNlIE9lLkVHQXR0YWNrVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5hdHRhY2tUaW1lLGUpLHQoIkVHIGF0dGFjayB0aW1lIixlLnRvU3RyaW5nKCksIiIpO2JyZWFrO2Nhc2UgT2UuRUdSZWxlYXNlVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZWxlYXNlVGltZSxlKSx0KCJFRyByZWxlYXNlIHRpbWUiLGUudG9TdHJpbmcoKSwiIik7YnJlYWt9YnJlYWs7Y2FzZSBaZS5hd2UzMjpicmVhaztjYXNlIFplLlNGMjp7aWYocz4xMDApYnJlYWs7bGV0IHI9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5zZjJOUFJOR2VuZXJhdG9yTFNCXSxJPShlPDw3fGEpLTgxOTI7dGhpcy5zZXRHZW5lcmF0b3JPZmZzZXQocixJKTticmVha319YnJlYWt9Y2FzZSBZQS5SUENvYXJzZTpjYXNlIFlBLlJQRmluZTp7bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43O3N3aXRjaChuKXtkZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIFJQTiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke24udG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIHVlLnBpdGNoV2hlZWxSYW5nZTp0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV09ZTw8Nyx0KCJQaXRjaCB3aGVlbCByYW5nZSIsZS50b1N0cmluZygpLCJzZW1pdG9uZXMiKTticmVhaztjYXNlIHVlLmNvYXJzZVR1bmluZzp7bGV0IHM9ZS02NDt0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFR1bmluZ1NlbWl0b25lcyxzKSx0KCJDb2Fyc2UgdHVuaW5nIixzLnRvU3RyaW5nKCksInNlbWl0b25lcyIpO2JyZWFrfWNhc2UgdWUuZmluZVR1bmluZzp0aGlzLnNldFR1bmluZyhlLTY0LCExKTticmVhaztjYXNlIHVlLm1vZHVsYXRpb25EZXB0aDp0aGlzLnNldE1vZHVsYXRpb25EZXB0aChlKjEwMCk7YnJlYWs7Y2FzZSB1ZS5yZXNldFBhcmFtZXRlcnM6dGhpcy5yZXNldFBhcmFtZXRlcnMoKTticmVha319fX12YXIgb3I9W2kuZGVsYXlNb2RMRk8saS5mcmVxTW9kTEZPLGkuZGVsYXlWaWJMRk8saS5mcmVxVmliTEZPLGkuZGVsYXlNb2RFbnYsaS5hdHRhY2tNb2RFbnYsaS5ob2xkTW9kRW52LGkuZGVjYXlNb2RFbnYsaS5zdXN0YWluTW9kRW52LGkucmVsZWFzZU1vZEVudixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5maW5lVHVuZSxpLm1vZExmb1RvUGl0Y2gsaS52aWJMZm9Ub1BpdGNoLGkubW9kRW52VG9QaXRjaCxpLm1vZExmb1RvVm9sdW1lLGkuaW5pdGlhbEZpbHRlckZjLGkuaW5pdGlhbEZpbHRlclEsaS5tb2RMZm9Ub0ZpbHRlckZjLGkubW9kRW52VG9GaWx0ZXJGYyxpLmNob3J1c0VmZmVjdHNTZW5kLGkucmV2ZXJiRWZmZWN0c1NlbmRdO2Z1bmN0aW9uIHJyKGUsQSx0KXtsZXQgbj0oaCxDLFEpPT5NYXRoLm1heChDLE1hdGgubWluKFEsaCkpLHM9aD0+TWF0aC5tYXgoLTMyNzY4LDEyMDAqTWF0aC5sb2cyKGgvMWUzKSksYT1oPT42OTAwKzEyMDAqTWF0aC5sb2cyKGgvNDQwKSxyPXQ8PDd8QTtyLT04MTkyO2xldCBJPW9yW2VdO0l8fHNBKGBJbnZhbGlkIEFXRTMyIExTQjogJWMke2V9YCxjLnVucmVjb2duaXplZCk7bGV0IG8sZyxCLGQ7c3dpdGNoKEkpe2RlZmF1bHQ6YnJlYWs7Y2FzZSBpLmRlbGF5TW9kTEZPOmNhc2UgaS5kZWxheVZpYkxGTzpjYXNlIGkuZGVsYXlWb2xFbnY6Y2FzZSBpLmRlbGF5TW9kRW52Om89NCpuKHIsMCw1OTAwKSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEkscyhvKSk7YnJlYWs7Y2FzZSBpLmF0dGFja1ZvbEVudjpjYXNlIGkuYXR0YWNrTW9kRW52Om89bihyLDAsNTk0MCksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5ob2xkVm9sRW52OmNhc2UgaS5ob2xkTW9kRW52Om89bihyLDAsODE5MSksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5kZWNheU1vZEVudjpjYXNlIGkuZGVjYXlWb2xFbnY6Y2FzZSBpLnJlbGVhc2VWb2xFbnY6Y2FzZSBpLnJlbGVhc2VNb2RFbnY6bz00Km4ociwwLDU5NDApLHRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxzKG8pKTticmVhaztjYXNlIGkuZnJlcVZpYkxGTzpjYXNlIGkuZnJlcU1vZExGTzpnPS4wODQqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksYShnKSwhMCk7YnJlYWs7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6Y2FzZSBpLnN1c3RhaW5Nb2RFbnY6Qj1BKjcuNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQik7YnJlYWs7Y2FzZSBpLmZpbmVUdW5lOnRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxyLCEwKTticmVhaztjYXNlIGkubW9kTGZvVG9QaXRjaDpjYXNlIGkudmliTGZvVG9QaXRjaDpkPW4ociwtMTI3LDEyNykqOS4zNzUsdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLGQsITApO2JyZWFrO2Nhc2UgaS5tb2RFbnZUb1BpdGNoOmQ9bihyLC0xMjcsMTI3KSo5LjM3NSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvVm9sdW1lOkI9MS44NzUqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLmluaXRpYWxGaWx0ZXJGYzp7bGV0IGg9NDMzNSs1OSpBO3RoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxoLCEwKTticmVha31jYXNlIGkuaW5pdGlhbEZpbHRlclE6Qj0yMTUqKEEvMTI3KSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCwhMCk7YnJlYWs7Y2FzZSBpLm1vZEVudlRvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLmNob3J1c0VmZmVjdHNTZW5kOmNhc2UgaS5yZXZlcmJFZmZlY3RzU2VuZDp0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksbihyLDAsMjU1KSooMWUzLzI1NSkpO2JyZWFrfX1mdW5jdGlvbiBpcihlKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlMU0JdPWU8PDcsdGhpcy5kYXRhRW50cnlTdGF0ZSl7ZGVmYXVsdDpicmVhaztjYXNlIFlBLlJQQ29hcnNlOmNhc2UgWUEuUlBGaW5lOntzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43KXtkZWZhdWx0OmJyZWFrO2Nhc2UgdWUucGl0Y2hXaGVlbFJhbmdlOntpZihlPT09MClicmVhazt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV18PWU7bGV0IHQ9KHRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXT4+NykrZS8xMjg7cChgJWNDaGFubmVsICR7dGhpcy5jaGFubmVsTnVtYmVyfSBwaXRjaCB3aGVlbCByYW5nZS4gU2VtaXRvbmVzOiAlYyR7dH1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIHVlLmZpbmVUdW5pbmc6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFR1bmluZ108PDd8ZTt0aGlzLnNldFR1bmluZyhuKi4wMTIyMDcwMzEyNSk7YnJlYWt9Y2FzZSB1ZS5tb2R1bGF0aW9uRGVwdGg6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubW9kdWxhdGlvbk11bHRpcGxpZXJdKjUwK2UvMTI4KjEwMDt0aGlzLnNldE1vZHVsYXRpb25EZXB0aChuKTticmVha31jYXNlIDE2MzgzOnRoaXMucmVzZXRQYXJhbWV0ZXJzKCk7YnJlYWt9YnJlYWt9Y2FzZSBZQS5OUlBGaW5lOntsZXQgQT10aGlzLm1pZGlDb250cm9sbGVyc1tTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0JdPj43LHQ9dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTFNCXT4+NztpZihBPT09WmUuU0YyKXJldHVybjtzd2l0Y2goQSl7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBOUlBOIExTQiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9IDB4JHt0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIFplLmF3ZTMyOnJyLmNhbGwodGhpcyx0LGUsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlNU0JdPj43KTticmVha319fX1mdW5jdGlvbiBJcihlLEEsdD0hMCl7aWYoZT4xMjcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE1JREkgQ29udHJvbGxlci4iKTtpZihlPj1TLm1vZHVsYXRpb25XaGVlbExTQiYmZTw9Uy5lZmZlY3RDb250cm9sMkxTQiYmZSE9PVMuZGF0YUVudHJ5TFNCKXtsZXQgbj1lLTMyO2lmKHRoaXMubG9ja2VkQ29udHJvbGxlcnNbbl0pcmV0dXJuO3RoaXMubWlkaUNvbnRyb2xsZXJzW25dPXRoaXMubWlkaUNvbnRyb2xsZXJzW25dJjE2MjU2fEEmMTI3LHRoaXMudm9pY2VzLmZvckVhY2gocz0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhzLDEsbikpfWlmKCF0aGlzLmxvY2tlZENvbnRyb2xsZXJzW2VdKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbZV09QTw8NyxlKXtjYXNlIFMuYWxsTm90ZXNPZmY6dGhpcy5zdG9wQWxsTm90ZXMoKTticmVhaztjYXNlIFMuYWxsU291bmRPZmY6dGhpcy5zdG9wQWxsTm90ZXMoITApO2JyZWFrO2Nhc2UgUy5iYW5rU2VsZWN0OnRoaXMuc2V0QmFua01TQihBKSx0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSYmZkEuaXNTeXN0ZW1YRyh0aGlzLmNoYW5uZWxTeXN0ZW0pJiZ0aGlzLnNldEJhbmtNU0IoMTI3KTticmVhaztjYXNlIFMuYmFua1NlbGVjdExTQjp0aGlzLnNldEJhbmtMU0IoQSk7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUEZpbmU7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUENvYXJzZTticmVhaztjYXNlIFMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQjp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdPTAsdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBDb2Fyc2U7YnJlYWs7Y2FzZSBTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+Nz09PVplLlNGMiYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl0lMTAwIT09MCYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl09MCksQT09PTEwMD90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xMDA6QT09PTEwMT90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTM6QT09PTEwMj90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTQ6QTwxMDAmJih0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz1BKSksdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBGaW5lO2JyZWFrO2Nhc2UgUy5kYXRhRW50cnlNU0I6dGhpcy5kYXRhRW50cnlDb2Fyc2UoQSk7YnJlYWs7Y2FzZSBTLmRhdGFFbnRyeUxTQjp0aGlzLmRhdGFFbnRyeUZpbmUoQSk7YnJlYWs7Y2FzZSBTLnJlc2V0QWxsQ29udHJvbGxlcnM6dGhpcy5yZXNldENvbnRyb2xsZXJzUlAxNUNvbXBsaWFudCgpO2JyZWFrO2Nhc2UgUy5zdXN0YWluUGVkYWw6QTw2NCYmKHRoaXMuc3VzdGFpbmVkVm9pY2VzLmZvckVhY2gobj0+e24ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXM9W10pO2JyZWFrO2RlZmF1bHQ6dGhpcy52b2ljZXMuZm9yRWFjaChuPT50aGlzLmNvbXB1dGVNb2R1bGF0b3JzKG4sMSxlKSk7YnJlYWt9dCYmdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY29udHJvbGxlckNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGNvbnRyb2xsZXJOdW1iZXI6ZSxjb250cm9sbGVyVmFsdWU6QX0pfX12YXIgSXQ9ezA6MCwxOi4wMDYsMjouMDIzLDQ6LjA1LDg6LjExLDE2Oi4yNSwzMjouNSw2NDoyLjA2LDgwOjQuMiw5Njo4LjQsMTEyOjE5LjUsMTE2OjI2LjcsMTIwOjQwLDEyNDo4MCwxMjc6NDgwfTtmdW5jdGlvbiBncihlKXtpZihJdFtlXSE9PXZvaWQgMClyZXR1cm4gSXRbZV07bGV0IEE9bnVsbCx0PW51bGw7Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKEl0KSl7bGV0IHM9cGFyc2VJbnQobik7czxlJiYoQT09PW51bGx8fHM+QSkmJihBPXMpLHM+ZSYmKHQ9PT1udWxsfHxzPHQpJiYodD1zKX1pZihBIT09bnVsbCYmdCE9PW51bGwpe2xldCBuPUl0W0FdLHM9SXRbdF07cmV0dXJuIG4rKGUtQSkqKHMtbikvKHQtQSl9cmV0dXJuIDB9ZnVuY3Rpb24gY3IoZSxBKXtyZXR1cm4gZ3IoZSkqKEEvMzApfWZ1bmN0aW9uIEVyKGUsQSl7aWYoQTwxKXt0aGlzLm5vdGVPZmYoZSk7cmV0dXJufWlmKEE9TWF0aC5taW4oMTI3LEEpLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJnRoaXMuc3ludGgudG90YWxWb2ljZXNBbW91bnQ+MjAwJiZBPDQwfHx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5ibGFja01JRElNb2RlJiZBPDEwfHx0aGlzLl9pc011dGVkKXJldHVybjtpZighdGhpcy5wcmVzZXQpe3NBKGBObyBwcmVzZXQgZm9yIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IWApO3JldHVybn1sZXQgdD1lK3RoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbEtleVNoaWZ0XSxuPXQ7aWYodD4xMjd8fHQ8MClyZXR1cm47bGV0IHM9dGhpcy5wcmVzZXQ/LnByb2dyYW0sYT10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1tzXT8uW3RdPy5taWRpTm90ZTthPj0wJiYobj1hKSx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tb25vcGhvbmljUmV0cmlnZ2VyTW9kZSYmdGhpcy5raWxsTm90ZShlLC03MjAwKTtsZXQgcj10aGlzLnN5bnRoLmtleU1vZGlmaWVyTWFuYWdlci5nZXRWZWxvY2l0eSh0aGlzLmNoYW5uZWxOdW1iZXIsdCk7cj4tMSYmKEE9cik7bGV0IEk9dGhpcy5zeW50aC5rZXlNb2RpZmllck1hbmFnZXIuZ2V0R2Fpbih0aGlzLmNoYW5uZWxOdW1iZXIsdCksbz0tMSxnPTAsQj10aGlzLm1pZGlDb250cm9sbGVyc1tTLnBvcnRhbWVudG9UaW1lXT4+NyxkPXRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b0NvbnRyb2xdLGg9ZD4+NztpZighdGhpcy5kcnVtQ2hhbm5lbCYmaCE9PW4mJnRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b09uT2ZmXT49ODE5MiYmQj4wKXtpZihkIT09MSl7bGV0IHk9TWF0aC5hYnMobi1oKTtnPWNyKEIseSksbz1ofXRoaXMuY29udHJvbGxlckNoYW5nZShTLnBvcnRhbWVudG9Db250cm9sLG4pfWxldCBDPXRoaXMuc3ludGhQcm9wcy5nZXRWb2ljZXModGhpcy5jaGFubmVsTnVtYmVyLG4sQSx0KSxRPTA7dGhpcy5yYW5kb21QYW4mJihRPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxZTMtNTAwKSk7bGV0IG09dGhpcy52b2ljZXM7Qy5mb3JFYWNoKHk9Pnt5LnBvcnRhbWVudG9Gcm9tS2V5PW8seS5wb3J0YW1lbnRvRHVyYXRpb249Zyx5Lm92ZXJyaWRlUGFuPVEseS5nYWluPUksdGhpcy5zeXNFeE1vZHVsYXRvcnMubW9kdWxhdG9yTGlzdC5mb3JFYWNoKE89PntsZXQgbkE9Ty5tb2QsJD15Lm1vZHVsYXRvcnMuZmluZEluZGV4KFY9PkVBLmlzSWRlbnRpY2FsKFYsbkEpKTskIT09LTE/eS5tb2R1bGF0b3JzWyRdPUVBLmNvcHlGcm9tKG5BKTp5Lm1vZHVsYXRvcnMucHVzaChFQS5jb3B5RnJvbShuQSkpfSksdGhpcy5nZW5lcmF0b3JPdmVycmlkZXNFbmFibGVkJiZ0aGlzLmdlbmVyYXRvck92ZXJyaWRlcy5mb3JFYWNoKChPLG5BKT0+e08hPT1WcyYmKHkuZ2VuZXJhdG9yc1tuQV09Tyl9KTtsZXQgRj15LmV4Y2x1c2l2ZUNsYXNzO0YhPT0wJiZtLmZvckVhY2goTz0+e08uZXhjbHVzaXZlQ2xhc3M9PT1GJiZPLmV4Y2x1c2l2ZVJlbGVhc2UodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lKX0pLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoeSk7bGV0IGs9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc0NvYXJzZU9mZnNldF0qMzI3NjgsRD15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyc0NvYXJzZU9mZnNldF0qMzI3Njgsdj15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zdGFydGxvb3BBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEw9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZW5kbG9vcEFkZHJzT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEU9eS5zYW1wbGUsWD1PPT5NYXRoLm1heCgwLE1hdGgubWluKEUuc2FtcGxlRGF0YS5sZW5ndGgtMSxPKSk7aWYoRS5jdXJzb3I9WChFLmN1cnNvcitrKSxFLmVuZD1YKEUuZW5kK0QpLEUubG9vcFN0YXJ0PVgoRS5sb29wU3RhcnQrdiksRS5sb29wRW5kPVgoRS5sb29wRW5kK0wpLEUubG9vcEVuZDxFLmxvb3BTdGFydCl7bGV0IE89RS5sb29wU3RhcnQ7RS5sb29wU3RhcnQ9RS5sb29wRW5kLEUubG9vcEVuZD1PfUUubG9vcEVuZC1FLmxvb3BTdGFydDwxJiYoRS5sb29waW5nTW9kZT09PTF8fEUubG9vcGluZ01vZGU9PT0zKSYmKEUubG9vcGluZ01vZGU9MCxFLmlzTG9vcGluZz0hMSkseS52b2x1bWVFbnZlbG9wZS5hdHRlbnVhdGlvbj15LnZvbHVtZUVudmVsb3BlLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbix5LmN1cnJlbnRQYW49TWF0aC5tYXgoLTUwMCxNYXRoLm1pbig1MDAseS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucGFuXSkpfSksdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudCs9Qy5sZW5ndGgsdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudD50aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy52b2ljZUNhcCYmdGhpcy5zeW50aFByb3BzLnZvaWNlS2lsbGluZyhDLmxlbmd0aCksbS5wdXNoKC4uLkMpLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPbiIse21pZGlOb3RlOmUsY2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsdmVsb2NpdHk6QX0pfWZ1bmN0aW9uIEJyKGUpe2lmKGU+MTI3fHxlPDApe3NBKCJSZWNlaXZlZCBhIG5vdGVPbiBmb3Igbm90ZSIsZSwiSWdub3JpbmcuIik7cmV0dXJufWxldCBBPWUrdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQrdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdO2lmKHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJiF0aGlzLmRydW1DaGFubmVsKXt0aGlzLmtpbGxOb3RlKEEsLTY5NTApLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSk7cmV0dXJufXRoaXMudm9pY2VzLmZvckVhY2gobj0+e24ucmVhbEtleSE9PUF8fG4uaXNJblJlbGVhc2V8fCh0aGlzLmhvbGRQZWRhbD90aGlzLnN1c3RhaW5lZFZvaWNlcy5wdXNoKG4pOm4ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSl9ZnVuY3Rpb24gQ3IoZSl7aWYodGhpcy5sb2NrUHJlc2V0KXJldHVybjt0aGlzLnBhdGNoLnByb2dyYW09ZTtsZXQgQT10aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHRoaXMucGF0Y2gsdGhpcy5jaGFubmVsU3lzdGVtKTtBfHwoc0EoIk5vIHByZXNldHMhIFVzaW5nIGVtcHR5IGZhbGxiYWNrLiIpLEE9bmV3IHBlKHRoaXMuc3ludGguc291bmRCYW5rTWFuYWdlci5zb3VuZEJhbmtMaXN0WzBdLnNvdW5kQmFuayksQS5uYW1lPSJTUEVTU0EgRU1QVFkgRkFMTEJBQ0sgUFJFU0VUIiksdGhpcy5wcmVzZXQ9QSxBLmlzQW55RHJ1bXMhPT10aGlzLmRydW1DaGFubmVsJiZ0aGlzLnNldERydW1GbGFnKEEuaXNBbnlEcnVtcyksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgicHJvZ3JhbUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGJhbmtMU0I6dGhpcy5wcmVzZXQuYmFua0xTQixiYW5rTVNCOnRoaXMucHJlc2V0LmJhbmtNU0IscHJvZ3JhbTp0aGlzLnByZXNldC5wcm9ncmFtLGlzR01HU0RydW06dGhpcy5wcmVzZXQuaXNHTUdTRHJ1bX0pLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpfXZhciBocj1jbGFzc3ttb2R1bGF0b3JMaXN0PVtdO3Jlc2V0TW9kdWxhdG9ycygpe3RoaXMubW9kdWxhdG9yTGlzdD1bXX1zZXRNb2R1bGF0b3IoZSxBLHQsbj0hMSxzPSExKXtsZXQgYT10aGlzLmdldE1vZHVsYXRvcklEKGUsQSxuLHMpO3Q9PT0wJiZ0aGlzLmRlbGV0ZU1vZHVsYXRvcihhKTtsZXQgcj10aGlzLm1vZHVsYXRvckxpc3QuZmluZChJPT5JLmlkPT09YSk7aWYocilyLm1vZC50cmFuc2Zvcm1BbW91bnQ9dDtlbHNle2xldCBJLG87ZT49bUE/KEk9ZS1tQSxvPSExKTooST1lLG89ITApO2xldCBnPW5ldyBFQShuZXcgWEEoSSxRQS5saW5lYXIsbyxuKSxuZXcgWEEsQSx0LDApO3RoaXMubW9kdWxhdG9yTGlzdC5wdXNoKHttb2Q6ZyxpZDphfSl9fWdldE1vZHVsYXRvcklEKGUsQSx0LG4pe3JldHVybmAke2V9LSR7QX0tJHt0fS0ke259YH1kZWxldGVNb2R1bGF0b3IoZSl7dGhpcy5tb2R1bGF0b3JMaXN0PXRoaXMubW9kdWxhdG9yTGlzdC5maWx0ZXIoQT0+QS5pZCE9PWUpfX0sbHI9MWUzLzIwMDtmdW5jdGlvbiBNcyhlLEEsdCl7aWYoQS50cmFuc2Zvcm1BbW91bnQ9PT0wKXJldHVybiBBLmN1cnJlbnRWYWx1ZT0wLDA7bGV0IG49QS5wcmltYXJ5U291cmNlLmdldFZhbHVlKGUsdCkscz1BLnNlY29uZGFyeVNvdXJjZS5nZXRWYWx1ZShlLHQpLGE9QS50cmFuc2Zvcm1BbW91bnQ7QS5pc0VmZmVjdE1vZHVsYXRvciYmYTw9MWUzJiYoYSo9bHIsYT1NYXRoLm1pbihhLDFlMykpO2xldCByPW4qcyphO3JldHVybiBBLnRyYW5zZm9ybVR5cGU9PT0yJiYocj1NYXRoLmFicyhyKSksQS5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvciYmKHQucmVzb25hbmNlT2Zmc2V0PU1hdGgubWF4KDAsci8yKSksQS5jdXJyZW50VmFsdWU9cixyfWZ1bmN0aW9uIGRyKGUsQT0tMSx0PTApe2xldCBuPWUubW9kdWxhdG9ycyxzPWUuZ2VuZXJhdG9ycztpZih0aGlzLmdlbmVyYXRvck9mZnNldHNFbmFibGVkKXtzPW5ldyBJbnQxNkFycmF5KHMpO2ZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXNbZ10rPXRoaXMuZ2VuZXJhdG9yT2Zmc2V0c1tnXX1sZXQgYT1lLm1vZHVsYXRlZEdlbmVyYXRvcnM7aWYoQT09PS0xKXthLnNldChzKSxuLmZvckVhY2goZz0+e2FbZy5kZXN0aW5hdGlvbl0rPU1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSl9KTtmb3IobGV0IGc9MDtnPGEubGVuZ3RoO2crKyl7bGV0IEI9eFtnXTtCJiYoYVtnXT1NYXRoLm1pbihCLm1heCxNYXRoLm1heChCLm1pbixhW2ddKSkpfWJlLnJlY2FsY3VsYXRlKGUpLF9lLnJlY2FsY3VsYXRlKGUpO3JldHVybn1sZXQgcj1uZXcgU2V0KFtpLmluaXRpYWxBdHRlbnVhdGlvbixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5rZXlOdW1Ub1ZvbEVudkhvbGQsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5XSksST1uZXcgU2V0LG89ISFBO24uZm9yRWFjaChnPT57aWYoZy5wcmltYXJ5U291cmNlLmlzQ0M9PT1vJiZnLnByaW1hcnlTb3VyY2UuaW5kZXg9PT10fHxnLnNlY29uZGFyeVNvdXJjZS5pc0NDPT09byYmZy5zZWNvbmRhcnlTb3VyY2UuaW5kZXg9PT10KXtsZXQgQj1nLmRlc3RpbmF0aW9uO2lmKCFJLmhhcyhCKSl7YVtCXT1zW0JdLE1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSksbi5mb3JFYWNoKGg9PntoLmRlc3RpbmF0aW9uPT09QiYmKGFbQl0rPWguY3VycmVudFZhbHVlKX0pO2xldCBkPXhbQl07YVtCXT1NYXRoLm1heChkLm1pbixNYXRoLm1pbihhW0JdLGQubWF4KSksSS5hZGQoQil9fX0pLFsuLi5JXS5zb21lKGc9PnIuaGFzKGcpKSYmYmUucmVjYWxjdWxhdGUoZSksX2UucmVjYWxjdWxhdGUoZSl9dmFyIFFyPWNsYXNze21pZGlDb250cm9sbGVycz1uZXcgSW50MTZBcnJheShibik7bG9ja2VkQ29udHJvbGxlcnM9QXJyYXkoYm4pLmZpbGwoITEpO2N1c3RvbUNvbnRyb2xsZXJzPW5ldyBGbG9hdDMyQXJyYXkoZWEpO2NoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wO2NoYW5uZWxPY3RhdmVUdW5pbmc9bmV3IEludDhBcnJheSgxMjgpO3N5c0V4TW9kdWxhdG9ycz1uZXcgaHI7ZHJ1bUNoYW5uZWw9ITE7cmFuZG9tUGFuPSExO2RhdGFFbnRyeVN0YXRlPVlBLklkbGU7cGF0Y2g9e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTowLGlzR01HU0RydW06ITF9O3ByZXNldDtsb2NrUHJlc2V0PSExO2xvY2tlZFN5c3RlbT0iZ3MiO2xvY2tHU05SUE5QYXJhbXM9ITE7Y2hhbm5lbFZpYnJhdG89e2RlbGF5OjAsZGVwdGg6MCxyYXRlOjB9O3ZvaWNlcz1bXTtzdXN0YWluZWRWb2ljZXM9W107Y2hhbm5lbE51bWJlcjtzeW50aDtzeW50aFByb3BzO25vdGVPbj1Fci5iaW5kKHRoaXMpO25vdGVPZmY9QnIuYmluZCh0aGlzKTtwcm9ncmFtQ2hhbmdlPUNyLmJpbmQodGhpcyk7Y29udHJvbGxlckNoYW5nZT1Jci5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnM9cG8uYmluZCh0aGlzKTtyZXNldFByZXNldD15by5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnNSUDE1Q29tcGxpYW50PWtvLmJpbmQodGhpcyk7cmVzZXRQYXJhbWV0ZXJzPURvLmJpbmQodGhpcyk7ZGF0YUVudHJ5RmluZT1pci5iaW5kKHRoaXMpO2RhdGFFbnRyeUNvYXJzZT1hci5iaW5kKHRoaXMpO2NoYW5uZWxUdW5pbmdDZW50cz0wO2dlbmVyYXRvck9mZnNldHM9bmV3IEludDE2QXJyYXkoTW4pO2dlbmVyYXRvck9mZnNldHNFbmFibGVkPSExO2dlbmVyYXRvck92ZXJyaWRlcz1uZXcgSW50MTZBcnJheShNbik7Z2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMTtyZW5kZXJWb2ljZT1zci5iaW5kKHRoaXMpO3BhbkFuZE1peFZvaWNlPU9vLmJpbmQodGhpcyk7Y29tcHV0ZU1vZHVsYXRvcnM9ZHIuYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlLEEsdCxuKXt0aGlzLnN5bnRoPWUsdGhpcy5zeW50aFByb3BzPUEsdGhpcy5wcmVzZXQ9dCx0aGlzLmNoYW5uZWxOdW1iZXI9bix0aGlzLnJlc2V0R2VuZXJhdG9yT3ZlcnJpZGVzKCksdGhpcy5yZXNldEdlbmVyYXRvck9mZnNldHMoKX1faXNNdXRlZD0hMTtnZXQgaXNNdXRlZCgpe3JldHVybiB0aGlzLl9pc011dGVkfWdldCBob2xkUGVkYWwoKXtyZXR1cm4gdGhpcy5taWRpQ29udHJvbGxlcnNbUy5zdXN0YWluUGVkYWxdPj04MTkyfWdldCBjaGFubmVsU3lzdGVtKCl7cmV0dXJuIHRoaXMubG9ja1ByZXNldD90aGlzLmxvY2tlZFN5c3RlbTp0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5taWRpU3lzdGVtfXRyYW5zcG9zZUNoYW5uZWwoZSxBPSExKXt0aGlzLmRydW1DaGFubmVsfHwoZSs9dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbik7bGV0IHQ9TWF0aC50cnVuYyhlKSxuPXRoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdLzEwMDt0aGlzLmRydW1DaGFubmVsJiYhQXx8ZT09PW58fCh0IT09dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQmJnRoaXMuc3RvcEFsbE5vdGVzKCksdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dCx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsKGUtdCkqMTAwKSx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSl9c2V0T2N0YXZlVHVuaW5nKGUpe2lmKGUubGVuZ3RoIT09MTIpdGhyb3cgbmV3IEVycm9yKCJUdW5pbmcgaXMgbm90IHRoZSBsZW5ndGggb2YgMTIuIik7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nPW5ldyBJbnQ4QXJyYXkoMTI4KTtmb3IobGV0IEE9MDtBPDEyODtBKyspdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW0FdPWVbQSUxMl19c2V0TW9kdWxhdGlvbkRlcHRoKGUpe2U9TWF0aC5yb3VuZChlKSxwKGAlY0NoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IG1vZHVsYXRpb24gZGVwdGguIENlbnRzOiAlYyR7ZX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEubW9kdWxhdGlvbk11bHRpcGxpZXIsZS81MCl9c2V0VHVuaW5nKGUsQT0hMCl7ZT1NYXRoLnJvdW5kKGUpLHRoaXMuc2V0Q3VzdG9tQ29udHJvbGxlcihJQS5jaGFubmVsVHVuaW5nLGUpLEEmJnAoYCVjRmluZSB0dW5pbmcgZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7ZX0lYyBjZW50cy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvKX1waXRjaFdoZWVsKGUpe3RoaXMubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXXx8KHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoInBpdGNoV2hlZWwiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixwaXRjaDplfSksdGhpcy5taWRpQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXT1lLHRoaXMudm9pY2VzLmZvckVhY2goQT0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhBLDAsai5waXRjaFdoZWVsKSksdGhpcy5zZW5kQ2hhbm5lbFByb3BlcnR5KCkpfWNoYW5uZWxQcmVzc3VyZShlKXt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLmNoYW5uZWxQcmVzc3VyZV09ZTw8Nyx0aGlzLnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0aGlzLnZvaWNlcy5mb3JFYWNoKEE9PnRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoQSwwLGouY2hhbm5lbFByZXNzdXJlKSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIscHJlc3N1cmU6ZX0pfXBvbHlQcmVzc3VyZShlLEEpe3RoaXMudm9pY2VzLmZvckVhY2godD0+e3QubWlkaU5vdGU9PT1lJiYodC5wcmVzc3VyZT1BLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnModCwwLGoucG9seVByZXNzdXJlKSl9KSx0aGlzLnN5bnRoUHJvcHMuY2FsbEV2ZW50KCJwb2x5UHJlc3N1cmUiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixtaWRpTm90ZTplLHByZXNzdXJlOkF9KX1zZXRDdXN0b21Db250cm9sbGVyKGUsQSl7dGhpcy5jdXN0b21Db250cm9sbGVyc1tlXT1BLHRoaXMudXBkYXRlQ2hhbm5lbFR1bmluZygpfXVwZGF0ZUNoYW5uZWxUdW5pbmcoKXt0aGlzLmNoYW5uZWxUdW5pbmdDZW50cz10aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmddK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubWFzdGVyVHVuaW5nXSt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmdTZW1pdG9uZXNdKjEwMH1yZW5kZXJBdWRpbyhlLEEsdCxuLHMsYSxyLEkpe3RoaXMudm9pY2VzPXRoaXMudm9pY2VzLmZpbHRlcihvPT4hdGhpcy5yZW5kZXJWb2ljZShvLHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSxlLEEsdCxuLHMsYSxyLEkpKX1zZXRQcmVzZXRMb2NrKGUpe3RoaXMubG9ja1ByZXNldCE9PWUmJih0aGlzLmxvY2tQcmVzZXQ9ZSxlJiYodGhpcy5sb2NrZWRTeXN0ZW09dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpfXNldERydW1zKGUpe2lmKGZBLmlzU3lzdGVtWEcodGhpcy5jaGFubmVsU3lzdGVtKSlpZihlKXRoaXMuc2V0QmFua01TQihmQS5nZXREcnVtQmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCk7ZWxzZXtpZih0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkaXNhYmxlIGRydW1zIG9uIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IGZvciBYRy5gKTt0aGlzLnNldEJhbmtNU0IoMCksdGhpcy5zZXRCYW5rTFNCKDApfWVsc2UgdGhpcy5zZXRHU0RydW1zKGUpO3RoaXMuc2V0RHJ1bUZsYWcoZSksdGhpcy5wcm9ncmFtQ2hhbmdlKHRoaXMucGF0Y2gucHJvZ3JhbSl9c2V0UGF0Y2goZSl7dGhpcy5zZXRCYW5rTVNCKGUuYmFua01TQiksdGhpcy5zZXRCYW5rTFNCKGUuYmFua0xTQiksdGhpcy5zZXRHU0RydW1zKGUuaXNHTUdTRHJ1bSksdGhpcy5wcm9ncmFtQ2hhbmdlKGUucHJvZ3JhbSl9c2V0R1NEcnVtcyhlKXtlIT09dGhpcy5wYXRjaC5pc0dNR1NEcnVtJiYodGhpcy5zZXRCYW5rTFNCKDApLHRoaXMuc2V0QmFua01TQigwKSx0aGlzLnBhdGNoLmlzR01HU0RydW09ZSl9c2V0VmlicmF0byhlLEEsdCl7dGhpcy5sb2NrR1NOUlBOUGFyYW1zfHwodGhpcy5jaGFubmVsVmlicmF0by5yYXRlPUEsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT10LHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9ZSl9ZGlzYWJsZUFuZExvY2tHU05SUE4oKXt0aGlzLmxvY2tHU05SUE5QYXJhbXM9ITAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTAsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0wLHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9MH1yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpe3RoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzLmZpbGwoVnMpLHRoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMX1zZXRHZW5lcmF0b3JPdmVycmlkZShlLEEsdD0hMSl7dGhpcy5nZW5lcmF0b3JPdmVycmlkZXNbZV09QSx0aGlzLmdlbmVyYXRvck92ZXJyaWRlc0VuYWJsZWQ9ITAsdCYmdGhpcy52b2ljZXMuZm9yRWFjaChuPT57bi5nZW5lcmF0b3JzW2VdPUEsdGhpcy5jb21wdXRlTW9kdWxhdG9ycyhuKX0pfXJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpe3RoaXMuZ2VuZXJhdG9yT2Zmc2V0cy5maWxsKDApLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITF9c2V0R2VuZXJhdG9yT2Zmc2V0KGUsQSl7dGhpcy5nZW5lcmF0b3JPZmZzZXRzW2VdPUEqeFtlXS5ucnBuLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITAsdGhpcy52b2ljZXMuZm9yRWFjaCh0PT57dGhpcy5jb21wdXRlTW9kdWxhdG9ycyh0KX0pfWtpbGxOb3RlKGUsQT0tMTJlMyl7ZSs9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdLHRoaXMudm9pY2VzLmZvckVhY2godD0+e3QucmVhbEtleT09PWUmJih0Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XT1BLHQucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pfXN0b3BBbGxOb3RlcyhlPSExKXtlPyh0aGlzLnZvaWNlcy5sZW5ndGg9MCx0aGlzLnN1c3RhaW5lZFZvaWNlcy5sZW5ndGg9MCx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSk6KHRoaXMudm9pY2VzLmZvckVhY2goQT0+e0EuaXNJblJlbGVhc2V8fEEucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXMuZm9yRWFjaChBPT57QS5yZWxlYXNlKHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSl9KSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgic3RvcEFsbCIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGZvcmNlOmV9KX1tdXRlQ2hhbm5lbChlKXtlJiZ0aGlzLnN0b3BBbGxOb3RlcyghMCksdGhpcy5faXNNdXRlZD1lLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm11dGVDaGFubmVsIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsaXNNdXRlZDplfSl9c2VuZENoYW5uZWxQcm9wZXJ0eSgpe2lmKCF0aGlzLnN5bnRoLmVuYWJsZUV2ZW50U3lzdGVtKXJldHVybjtsZXQgZT17dm9pY2VzQW1vdW50OnRoaXMudm9pY2VzLmxlbmd0aCxwaXRjaFdoZWVsOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF0scGl0Y2hXaGVlbFJhbmdlOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXS8xMjgsaXNNdXRlZDp0aGlzLmlzTXV0ZWQsdHJhbnNwb3NpdGlvbjp0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDAsaXNEcnVtOnRoaXMuZHJ1bUNoYW5uZWx9O3RoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoImNoYW5uZWxQcm9wZXJ0eUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLHByb3BlcnR5OmV9KX1zZXRCYW5rTVNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua01TQj1lKX1zZXRCYW5rTFNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua0xTQj1lKX1zZXREcnVtRmxhZyhlKXt0aGlzLmxvY2tQcmVzZXR8fCF0aGlzLnByZXNldHx8dGhpcy5kcnVtQ2hhbm5lbCE9PWUmJihlPyh0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wLHRoaXMuZHJ1bUNoYW5uZWw9ITApOnRoaXMuZHJ1bUNoYW5uZWw9ITEsdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiZHJ1bUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGlzRHJ1bUNoYW5uZWw6dGhpcy5kcnVtQ2hhbm5lbH0pKX19LHluPTIwO2FzeW5jIGZ1bmN0aW9uIHVyKGUsQSx0LG4scyxhLHIpe2xldCBJPTAsbz0wLGc9W107Zm9yKGxldCBoIG9mIGUuc2FtcGxlcyl7biYmYSYmYXdhaXQgaC5jb21wcmVzc1NhbXBsZShhKSxzJiZoLnNldEF1ZGlvRGF0YShoLmdldEF1ZGlvRGF0YSgpLGguc2FtcGxlUmF0ZSk7bGV0IEM9aC5nZXRSYXdEYXRhKCEwKTtJKyssYXdhaXQgcj8uKGgubmFtZSxJLGUuc2FtcGxlcy5sZW5ndGgpLHAoYCVjRW5jb2RlZCBzYW1wbGUgJWMke0l9LiAke2gubmFtZX0lYyBvZiAlYyR7ZS5zYW1wbGVzLmxlbmd0aH0lYy4gQ29tcHJlc3NlZDogJWMke2guaXNDb21wcmVzc2VkfSVjLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxoLmlzQ29tcHJlc3NlZD9jLnJlY29nbml6ZWQ6Yy51bnJlY29nbml6ZWQsYy5pbmZvKSxvKz1DLmxlbmd0aCsoaC5pc0NvbXByZXNzZWQ/MDo5MiksZy5wdXNoKEMpfW8lMiE9PTAmJm8rKztsZXQgQj1uZXcgWShvK3luKTtrQShCLCJMSVNUIiksaHQoQixvK3luLTgsNCksa0EoQiwic2R0YSIpLGtBKEIsInNtcGwiKSxodChCLG8sNCk7bGV0IGQ9MDtyZXR1cm4gZS5zYW1wbGVzLmZvckVhY2goKGgsQyk9PntsZXQgUT1nW0NdO0Iuc2V0KFEsZCt5bik7bGV0IG0seTtoLmlzQ29tcHJlc3NlZD8obT1kLHk9bStRLmxlbmd0aCk6KG09ZC8yLHk9bStRLmxlbmd0aC8yLGQrPTkyKSxkKz1RLmxlbmd0aCxBLnB1c2gobSksdC5wdXNoKHkpfSksQn12YXIgZnI9NDhlMyxadD1jbGFzc3tuYW1lO3NhbXBsZVJhdGU7b3JpZ2luYWxLZXk7cGl0Y2hDb3JyZWN0aW9uO2xpbmtlZFNhbXBsZTtzYW1wbGVUeXBlO2xvb3BTdGFydDtsb29wRW5kO2xpbmtlZFRvPVtdO2RhdGFPdmVycmlkZGVuPSEwO2NvbXByZXNzZWREYXRhO2F1ZGlvRGF0YTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyKXt0aGlzLm5hbWU9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm9yaWdpbmFsS2V5PXQsdGhpcy5waXRjaENvcnJlY3Rpb249bix0aGlzLmxvb3BTdGFydD1hLHRoaXMubG9vcEVuZD1yLHRoaXMuc2FtcGxlVHlwZT1zfWdldCBpc0NvbXByZXNzZWQoKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSE9PXZvaWQgMH1nZXQgaXNMaW5rZWQoKXtyZXR1cm4gdGhpcy5zYW1wbGVUeXBlPT09d0EucmlnaHRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxlZnRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxpbmtlZFNhbXBsZX1nZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSYmZSYmIXRoaXMuZGF0YU92ZXJyaWRkZW4/dGhpcy5jb21wcmVzc2VkRGF0YTp0aGlzLmVuY29kZVMxNkxFKCl9cmVzYW1wbGVEYXRhKGUpe2xldCBBPXRoaXMuZ2V0QXVkaW9EYXRhKCksdD1lL3RoaXMuc2FtcGxlUmF0ZSxuPW5ldyBGbG9hdDMyQXJyYXkoTWF0aC5mbG9vcihBLmxlbmd0aCp0KSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspbltzXT1BW01hdGguZmxvb3IocyooMS90KSldO0E9bix0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLmxvb3BTdGFydD1NYXRoLmZsb29yKHRoaXMubG9vcFN0YXJ0KnQpLHRoaXMubG9vcEVuZD1NYXRoLmZsb29yKHRoaXMubG9vcEVuZCp0KSx0aGlzLmF1ZGlvRGF0YT1BfWFzeW5jIGNvbXByZXNzU2FtcGxlKGUpe2lmKCF0aGlzLmlzQ29tcHJlc3NlZCl0cnl7bGV0IEE9dGhpcy5nZXRBdWRpb0RhdGEoKTsodGhpcy5zYW1wbGVSYXRlPDhlM3x8dGhpcy5zYW1wbGVSYXRlPjk2ZTMpJiYodGhpcy5yZXNhbXBsZURhdGEoZnIpLEE9dGhpcy5nZXRBdWRpb0RhdGEoKSk7bGV0IHQ9YXdhaXQgZShBLHRoaXMuc2FtcGxlUmF0ZSk7dGhpcy5zZXRDb21wcmVzc2VkRGF0YSh0KX1jYXRjaChBKXtzQShgRmFpbGVkIHRvIGNvbXByZXNzICR7dGhpcy5uYW1lfS4gTGVhdmluZyBhcyB1bmNvbXByZXNzZWQhYCxBKSx0aGlzLmNvbXByZXNzZWREYXRhPXZvaWQgMH19c2V0U2FtcGxlVHlwZShlKXtpZih0aGlzLnNhbXBsZVR5cGU9ZSx0aGlzLmlzTGlua2VkfHwodGhpcy5saW5rZWRTYW1wbGUmJih0aGlzLmxpbmtlZFNhbXBsZS5saW5rZWRTYW1wbGU9dm9pZCAwLHRoaXMubGlua2VkU2FtcGxlLnNhbXBsZVR5cGU9ZSksdGhpcy5saW5rZWRTYW1wbGU9dm9pZCAwKSwoZSYzMjc2OCk+MCl0aHJvdyBuZXcgRXJyb3IoIlJPTSBzYW1wbGVzIGFyZSBub3Qgc3VwcG9ydGVkLiIpfXVubGlua1NhbXBsZSgpe3RoaXMuc2V0U2FtcGxlVHlwZSh3QS5tb25vU2FtcGxlKX1zZXRMaW5rZWRTYW1wbGUoZSxBKXtpZihlLmxpbmtlZFNhbXBsZSl0aHJvdyBuZXcgRXJyb3IoYCR7ZS5uYW1lfSBpcyBsaW5rZWQgdHAgJHtlLmxpbmtlZFNhbXBsZS5uYW1lfS4gVW5saW5rIGl0IGZpcnN0LmApO2lmKHRoaXMubGlua2VkU2FtcGxlPWUsZS5saW5rZWRTYW1wbGU9dGhpcyxBPT09d0EubGVmdFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EubGVmdFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLnJpZ2h0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5yaWdodFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EucmlnaHRTYW1wbGUpLGUuc2V0U2FtcGxlVHlwZSh3QS5sZWZ0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5saW5rZWRTYW1wbGUpdGhpcy5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2FtcGxlIHR5cGU6ICIrQSl9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHRoaXMuYXVkaW9EYXRhPXRoaXMuZGVjb2RlVm9yYmlzKCksdGhpcy5hdWRpb0RhdGE7dGhyb3cgbmV3IEVycm9yKCJTYW1wbGUgZGF0YSBpcyB1bmRlZmluZWQgZm9yIGEgQmFzaWNTYW1wbGUgaW5zdGFuY2UuIil9c2V0QXVkaW9EYXRhKGUsQSl7dGhpcy5hdWRpb0RhdGE9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLmRhdGFPdmVycmlkZGVuPSEwLHRoaXMuY29tcHJlc3NlZERhdGE9dm9pZCAwfXNldENvbXByZXNzZWREYXRhKGUpe3RoaXMuYXVkaW9EYXRhPXZvaWQgMCx0aGlzLmNvbXByZXNzZWREYXRhPWUsdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMX1lbmNvZGVTMTZMRSgpe2xldCBlPXRoaXMuZ2V0QXVkaW9EYXRhKCksQT1uZXcgSW50MTZBcnJheShlLmxlbmd0aCksdD1lLmxlbmd0aDtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgcz1lW25dKjMyNzY4O3M+MzI3Njc/cz0zMjc2NzpzPC0zMjc2OCYmKHM9LTMyNzY4KSxBW25dPXN9cmV0dXJuIG5ldyBZKEEuYnVmZmVyKX1kZWNvZGVWb3JiaXMoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYoIXRoaXMuY29tcHJlc3NlZERhdGEpdGhyb3cgbmV3IEVycm9yKCJDb21wcmVzc2VkIGRhdGEgaXMgbWlzc2luZy4iKTt0cnl7bGV0IEE9T3QuZGVjb2RlKHRoaXMuY29tcHJlc3NlZERhdGEpLmRhdGFbMF07aWYoQT09PXZvaWQgMClyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06IFZvcmJpcyBkZWNvZGUgcmV0dXJuZWQgdW5kZWZpbmVkLmApLG5ldyBGbG9hdDMyQXJyYXkoMCk7Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0KyspQVt0XT1NYXRoLm1heCgtMSxNYXRoLm1pbihBW3RdLC45OTk5Njk0ODI0MjE4NzUpKTtyZXR1cm4gQX1jYXRjaChlKXtyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KHRoaXMubG9vcEVuZCsxKX19fSxtcj1jbGFzcyBleHRlbmRzIFp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoIiIsNDQxMDAsNjAsMCx3QS5tb25vU2FtcGxlLDAsMCl9fSxWbj0xNixTcj1jbGFzcyBleHRlbmRzIFp0e2xpbmtlZFNhbXBsZUluZGV4O3MxNmxlRGF0YTtzdGFydEJ5dGVPZmZzZXQ7ZW5kQnl0ZU9mZnNldDtzYW1wbGVJRDtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyLEksbyxnLEIsZCl7bGV0IGg9KGcmVm4pPjA7ZyY9flZuLHN1cGVyKGUsYSxyLEksZyxuLUEvMixzLUEvMiksdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMSx0aGlzLm5hbWU9ZSx0aGlzLnN0YXJ0Qnl0ZU9mZnNldD1BLHRoaXMuZW5kQnl0ZU9mZnNldD10LHRoaXMuc2FtcGxlSUQ9ZDtsZXQgQz1CIGluc3RhbmNlb2YgWT9CLmN1cnJlbnRJbmRleDowO0IgaW5zdGFuY2VvZiBZP2g/KHRoaXMubG9vcFN0YXJ0Kz10aGlzLnN0YXJ0Qnl0ZU9mZnNldC8yLHRoaXMubG9vcEVuZCs9dGhpcy5zdGFydEJ5dGVPZmZzZXQvMix0aGlzLnNldENvbXByZXNzZWREYXRhKEIuc2xpY2UodGhpcy5zdGFydEJ5dGVPZmZzZXQvMitDLHRoaXMuZW5kQnl0ZU9mZnNldC8yK0MpKSk6dGhpcy5zMTZsZURhdGE9Qi5zbGljZShDK3RoaXMuc3RhcnRCeXRlT2Zmc2V0LEMrdGhpcy5lbmRCeXRlT2Zmc2V0KTp0aGlzLnNldEF1ZGlvRGF0YShCLnNsaWNlKHRoaXMuc3RhcnRCeXRlT2Zmc2V0LzIsdGhpcy5lbmRCeXRlT2Zmc2V0LzIpLGEpLHRoaXMubGlua2VkU2FtcGxlSW5kZXg9b31nZXRMaW5rZWRTYW1wbGUoZSl7aWYodGhpcy5saW5rZWRTYW1wbGV8fCF0aGlzLmlzTGlua2VkKXJldHVybjtsZXQgQT1lW3RoaXMubGlua2VkU2FtcGxlSW5kZXhdO0E/QS5saW5rZWRTYW1wbGU/KHAoYCVjSW52YWxpZCBsaW5rZWQgc2FtcGxlIGZvciAke3RoaXMubmFtZX06ICR7QS5uYW1lfSBpcyBhbHJlYWR5IGxpbmtlZCB0byAke0EubGlua2VkU2FtcGxlLm5hbWV9YCxjLndhcm4pLHRoaXMudW5saW5rU2FtcGxlKCkpOnRoaXMuc2V0TGlua2VkU2FtcGxlKEEsdGhpcy5zYW1wbGVUeXBlKToocChgJWNJbnZhbGlkIGxpbmtlZCBzYW1wbGUgZm9yICR7dGhpcy5uYW1lfS4gU2V0dGluZyB0byBtb25vLmAsYy53YXJuKSx0aGlzLnVubGlua1NhbXBsZSgpKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHN1cGVyLmdldEF1ZGlvRGF0YSgpO2lmKCF0aGlzLnMxNmxlRGF0YSl0aHJvdyBjb25zb2xlLmVycm9yKHRoaXMpLG5ldyBFcnJvcigiVW5leHBlY3RlZCBsYWNrIG9mIGF1ZGlvIGRhdGEuIik7bGV0IGU9dGhpcy5lbmRCeXRlT2Zmc2V0LXRoaXMuc3RhcnRCeXRlT2Zmc2V0O2lmKGU8MSlyZXR1cm4gc0EoYEludmFsaWQgc2FtcGxlICR7dGhpcy5uYW1lfSEgSW52YWxpZCBsZW5ndGg6ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KDEpO2xldCBBPW5ldyBGbG9hdDMyQXJyYXkoZS8yKSx0PW5ldyBJbnQxNkFycmF5KHRoaXMuczE2bGVEYXRhLmJ1ZmZlcik7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspQVtuXT10W25dLzMyNzY4O3JldHVybiB0aGlzLmF1ZGlvRGF0YT1BLEF9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhT3ZlcnJpZGRlbnx8dGhpcy5jb21wcmVzc2VkRGF0YT9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMuczE2bGVEYXRhPz9uZXcgVWludDhBcnJheSgwKX19O2Z1bmN0aW9uIGJzKGUsQSx0PSEwKXtsZXQgbj1bXSxzPTA7Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgYT1wcihzLGUuZGF0YSxBKTtuLnB1c2goYSkscysrfXJldHVybiBuLnBvcCgpLHQmJm4uZm9yRWFjaChhPT5hLmdldExpbmtlZFNhbXBsZShuKSksbn1mdW5jdGlvbiBwcihlLEEsdCl7bGV0IG49aEEoQSwyMCkscz1OKEEsNCkqMixhPU4oQSw0KSoyLHI9TihBLDQpLEk9TihBLDQpLG89TihBLDQpLGc9QVtBLmN1cnJlbnRJbmRleCsrXTtnPjEyNyYmKGc9NjApO2xldCBCPXFhKEFbQS5jdXJyZW50SW5kZXgrK10pLGQ9TihBLDIpLGg9TihBLDIpO3JldHVybiBuZXcgU3IobixzLGEscixJLG8sZyxCLGQsaCx0LGUpfWZ1bmN0aW9uIHlyKGUsQSx0KXtsZXQgcz00NiooZS5zYW1wbGVzLmxlbmd0aCsxKSxhPW5ldyBZKHMpLHI9bmV3IFkocyksST0wO2Uuc2FtcGxlcy5mb3JFYWNoKChCLGQpPT57a0EoYSxCLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShyLEIubmFtZS5zdWJzdHJpbmcoMjApLDIwKTtsZXQgaD1BW2RdO2dBKGEsaCksci5jdXJyZW50SW5kZXgrPTQ7bGV0IEM9dFtkXTtnQShhLEMpLHIuY3VycmVudEluZGV4Kz00O2xldCBRPUIubG9vcFN0YXJ0K2gsbT1CLmxvb3BFbmQraDtCLmlzQ29tcHJlc3NlZCYmKFEtPWgsbS09aCksZ0EoYSxRKSxnQShhLG0pLGdBKGEsQi5zYW1wbGVSYXRlKSxhW2EuY3VycmVudEluZGV4KytdPUIub3JpZ2luYWxLZXksYVthLmN1cnJlbnRJbmRleCsrXT1CLnBpdGNoQ29ycmVjdGlvbixyLmN1cnJlbnRJbmRleCs9MTQ7bGV0IHk9Qi5saW5rZWRTYW1wbGU/ZS5zYW1wbGVzLmluZGV4T2YoQi5saW5rZWRTYW1wbGUpOjA7SihhLE1hdGgubWF4KDAseSkmNjU1MzUpLEoocixNYXRoLm1heCgwLHkpPj4xNiksST1NYXRoLm1heChJLHkpO2xldCBGPUIuc2FtcGxlVHlwZTtCLmlzQ29tcHJlc3NlZCYmKEZ8PVZuKSxKKGEsRiksci5jdXJyZW50SW5kZXgrPTJ9KSxrQShhLCJFT1MiLDQ2KSxrQShyLCJFT1MiLDQ2KTtsZXQgbz1jQSgic2hkciIsYSksZz1jQSgic2hkciIscik7cmV0dXJue3BkdGE6byx4ZHRhOmd9fWZ1bmN0aW9uIHZzKGUsQT0hMSl7bGV0IHQ9QT9lLnByZXNldHM6ZS5pbnN0cnVtZW50cyxuPUE/InBnZW4iOiJpZ2VuIixzPUE/InBtb2QiOiJpbW9kIixhPUE/InBiYWciOiJpYmFnIixyPUE/InBoZHIiOiJpbnN0IixJPUE/ZGE6bGEsbz10Lm1hcChrPT4oayBpbnN0YW5jZW9mIHBlLGsuZ2V0U2l6ZSgpKSksZz1vLnJlZHVjZSgoayxEKT0+aytELmdlbiwwKStDdCxCPW5ldyBZKGcpLGQ9by5yZWR1Y2UoKGssRCk9PmsrRC5tb2QsMCkrbWUsaD1uZXcgWShkKSxDPW8ucmVkdWNlKChrLEQpPT5rK0QuYmFnLDApK0p0LFE9e3BkdGE6bmV3IFkoQykseGR0YTpuZXcgWShDKX0sbT1vLnJlZHVjZSgoayxEKT0+RC5oZHIraywwKStJLHk9e3BkdGE6bmV3IFkobSkseGR0YTpuZXcgWShtKX0sRj17Z2VuOjAsYmFnOjAsbW9kOjAsaGRyOjB9O3JldHVybiB0LmZvckVhY2goaz0+e2sgaW5zdGFuY2VvZiBwZSxrLndyaXRlKEIsaCxRLHksRixlKX0pLEE/KGtBKHkucGR0YSwiRU9QIiwyMCkseS5wZHRhLmN1cnJlbnRJbmRleCs9NCxKKHkucGR0YSxGLmhkciY2NTUzNSkseS5wZHRhLmN1cnJlbnRJbmRleCs9MTIsa0EoeS54ZHRhLCIiLDIwKSx5LnhkdGEuY3VycmVudEluZGV4Kz00LEooeS54ZHRhLEYuaGRyPj4xNikseS54ZHRhLmN1cnJlbnRJbmRleCs9MTIpOihrQSh5LnBkdGEsIkVPSSIsMjApLGtBKHkueGR0YSwiIiwyMCksSih5LnBkdGEsRi5oZHImNjU1MzUpLEooeS54ZHRhLEYuaGRyPj4xNikpLEooUS5wZHRhLEYuZ2VuJjY1NTM1KSxKKFEueGR0YSxGLmdlbj4+MTYpLEooUS5wZHRhLEYubW9kJjY1NTM1KSxKKFEueGR0YSxGLm1vZD4+MTYpLHt3cml0ZVhkdGE6TWF0aC5tYXgoZy9DdCxkL21lLEMvSnQsbS9JKT42NTUzNSxnZW46e3BkdGE6Y0EobixCKSx4ZHRhOmNBKHMsbmV3IFkoQ3QpKX0sbW9kOntwZHRhOmNBKHMsaCkseGR0YTpjQShzLG5ldyBZKG1lKSl9LGJhZzp7cGR0YTpjQShhLFEucGR0YSkseGR0YTpjQShhLFEueGR0YSl9LGhkcjp7cGR0YTpjQShyLHkucGR0YSkseGR0YTpjQShyLHkueGR0YSl9fX12YXIgWG49e2NvbXByZXNzOiExLGNvbXByZXNzaW9uRnVuY3Rpb246dm9pZCAwLHByb2dyZXNzRnVuY3Rpb246dm9pZCAwLHdyaXRlRGVmYXVsdE1vZHVsYXRvcnM6ITAsd3JpdGVFeHRlbmRlZExpbWl0czohMCxkZWNvbXByZXNzOiExfTthc3luYyBmdW5jdGlvbiBrcihlLEE9WG4pe2xldCB0PSRuKEEsWG4pO2lmKHQ/LmNvbXByZXNzKXtpZih0eXBlb2YgdD8uY29tcHJlc3Npb25GdW5jdGlvbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIk5vIGNvbXByZXNzaW9uIGZ1bmN0aW9uIHN1cHBsaWVkIGJ1dCBjb21wcmVzc2lvbiBlbmFibGVkLiIpO2lmKHQ/LmRlY29tcHJlc3MpdGhyb3cgbmV3IEVycm9yKCJEZWNvbXByZXNzZWQgYW5kIGNvbXByZXNzZWQgYXQgdGhlIHNhbWUgdGltZS4iKX1iQSgiJWNTYXZpbmcgc291bmRiYW5rLi4uIixjLmluZm8pLHAoYCVjQ29tcHJlc3Npb246ICVjJHt0Py5jb21wcmVzc3x8ImZhbHNlIn0lY2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKSxPQSgiJWNXcml0aW5nIElORk8uLi4iLGMuaW5mbyk7bGV0IG49W107ZS5zb3VuZEJhbmtJbmZvLnNvZnR3YXJlPSJTcGVzc2FTeW50aCIsKHQ/LmNvbXByZXNzfHxlLnNhbXBsZXMuc29tZShEPT5ELmlzQ29tcHJlc3NlZCkpJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MyxlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj0wKSx0Py5kZWNvbXByZXNzJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MixlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00KTtsZXQgcz0oRCx2KT0+e24ucHVzaChjQShELG5lKHYsITAsITApKSl9LGE9bmV3IFkoNCk7aWYoSihhLGUuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yKSxKKGEsZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWlub3IpLG4ucHVzaChjQSgiaWZpbCIsYSkpLGUuc291bmRCYW5rSW5mby5yb21WZXJzaW9uKXtsZXQgRD1uZXcgWSg0KTtKKEQsZS5zb3VuZEJhbmtJbmZvLnJvbVZlcnNpb24ubWFqb3IpLEooRCxlLnNvdW5kQmFua0luZm8ucm9tVmVyc2lvbi5taW5vciksbi5wdXNoKGNBKCJpdmVyIixEKSl9bGV0IHI9KGUuc291bmRCYW5rSW5mbz8uY29tbWVudD8/IiIpKyhlLnNvdW5kQmFua0luZm8uc3ViamVjdD9gCiR7ZS5zb3VuZEJhbmtJbmZvLnN1YmplY3R9YDoiIik7Zm9yKGxldFtELHZdb2YgT2JqZWN0LmVudHJpZXMoZS5zb3VuZEJhbmtJbmZvKSl7bGV0IEw9RCxFPXY7aWYoRSlzd2l0Y2goTCl7Y2FzZSJuYW1lIjpzKCJJTkFNIixFKTticmVhaztjYXNlImNvbW1lbnQiOnMoIklDTVQiLHIpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpzKCJJQ09QIixFKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6cygiSUNSRCIsRS50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpzKCJJRU5HIixFKTticmVhaztjYXNlInByb2R1Y3QiOnMoIklQUkQiLEUpO2JyZWFrO2Nhc2Uicm9tSW5mbyI6cygiaXJvbSIsRSk7YnJlYWs7Y2FzZSJzb2Z0d2FyZSI6cygiSVNGVCIsRSk7YnJlYWs7Y2FzZSJzb3VuZEVuZ2luZSI6cygiaXNuZyIsRSk7YnJlYWs7Y2FzZSJzdWJqZWN0IjpicmVha319aWYoZS5kZWZhdWx0TW9kdWxhdG9ycy5zb21lKEQ9PkVhLmZpbmRJbmRleCh2PT5FQS5pc0lkZW50aWNhbCh2LEQsITApKT09PS0xKSYmdD8ud3JpdGVEZWZhdWx0TW9kdWxhdG9ycyl7bGV0IEQ9ZS5kZWZhdWx0TW9kdWxhdG9ycztwKGAlY1dyaXRpbmcgJWMke0QubGVuZ3RofSVjIGRlZmF1bHQgbW9kdWxhdG9ycy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCB2PW1lK0QubGVuZ3RoKm1lLEw9bmV3IFkodik7Zm9yKGxldCBFIG9mIEQpRS53cml0ZShMKTtodChMLDAsbWUpLG4ucHVzaChjQSgiRE1PRCIsTCkpfVooKSxwKCIlY1dyaXRpbmcgU0RUQS4uLiIsYy5pbmZvKTtsZXQgbz1bXSxnPVtdLEI9YXdhaXQgdXIoZSxvLGcsdC5jb21wcmVzcyx0LmRlY29tcHJlc3MsdD8uY29tcHJlc3Npb25GdW5jdGlvbix0Py5wcm9ncmVzc0Z1bmN0aW9uKTtwKCIlY1dyaXRpbmcgUERUQS4uLiIsYy5pbmZvKSxwKCIlY1dyaXRpbmcgU0hEUi4uLiIsYy5pbmZvKTtsZXQgZD15cihlLG8sZyk7T0EoIiVjV3JpdGluZyBpbnN0cnVtZW50cy4uLiIsYy5pbmZvKTtsZXQgaD12cyhlLCExKTtaKCksT0EoIiVjV3JpdGluZyBwcmVzZXRzLi4uIixjLmluZm8pO2xldCBDPXZzKGUsITApO1ooKTtsZXQgUT1bQy5oZHIsQy5iYWcsQy5tb2QsQy5nZW4saC5oZHIsaC5iYWcsaC5tb2QsaC5nZW4sZF0sbT12QSgicGR0YSIsUS5tYXAoRD0+RC5wZHRhKSwhMCk7aWYodC53cml0ZUV4dGVuZGVkTGltaXRzJiYoaC53cml0ZVhkdGF8fEMud3JpdGVYZHRhfHxlLnByZXNldHMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKXx8ZS5pbnN0cnVtZW50cy5zb21lKEQ9PkQubmFtZS5sZW5ndGg+MjApfHxlLnNhbXBsZXMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKSkpe3AoIiVjV3JpdGluZyB0aGUgeGR0YSBjaHVuayBhcyB3cml0ZUV4ZW5kZWRMaW1pdHMgaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiB3YXMgbWV0LiIsYy5pbmZvLGMudmFsdWUpO2xldCBEPXZBKCJ4ZHRhIixRLm1hcCh2PT52LnhkdGEpLCEwKTtuLnB1c2goRCl9bGV0IEY9dkEoIklORk8iLG4sITApO3AoIiVjV3JpdGluZyB0aGUgb3V0cHV0IGZpbGUuLi4iLGMuaW5mbyk7bGV0IGs9dkEoIlJJRkYiLFtuZSgic2ZiayIpLEYsQixtXSk7cmV0dXJuIHAoYCVjU2F2ZWQgc3VjY2VzZnVsbHkhIEZpbmFsIGZpbGUgc2l6ZTogJWMke2subGVuZ3RofWAsYy5pbmZvLGMucmVjb2duaXplZCksWigpLGsuYnVmZmVyfXZhciBqZT1jbGFzc3tzdGF0aWMgdmVyaWZ5SGVhZGVyKGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS5oZWFkZXIudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm47dGhpcy5wYXJzaW5nRXJyb3IoYEludmFsaWQgRExTIGNodW5rIGhlYWRlciEgRXhwZWN0ZWQgIiR7QS5qb2luKCIsIG9yICIpfSIgZ290ICIke2UuaGVhZGVyLnRvTG93ZXJDYXNlKCl9ImApfXN0YXRpYyB2ZXJpZnlUZXh0KGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybjt0aGlzLnBhcnNpbmdFcnJvcihgRm91ckNDIGVycm9yOiBFeHBlY3RlZCAiJHtBLmpvaW4oIiwgb3IgIil9IiBnb3QgIiR7ZS50b0xvd2VyQ2FzZSgpfSJgKX1zdGF0aWMgcGFyc2luZ0Vycm9yKGUpe3Rocm93IFooKSxuZXcgRXJyb3IoYERMUyBwYXJzZSBlcnJvcjogJHtlfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXN0YXRpYyB2ZXJpZnlBbmRSZWFkTGlzdChlLC4uLkEpe3RoaXMudmVyaWZ5SGVhZGVyKGUsIkxJU1QiKSxlLmRhdGEuY3VycmVudEluZGV4PTAsdGhpcy52ZXJpZnlUZXh0KGhBKGUuZGF0YSw0KSwuLi5BKTtsZXQgdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKHJBKGUuZGF0YSkpO3JldHVybiB0fX0sZ3Q9MjAsa249MTYsemU9Y2xhc3MgQnQgZXh0ZW5kcyBqZXtnYWluPTA7dW5pdHlOb3RlPTYwO2ZpbmVUdW5lPTA7bG9vcHM9bmV3IEFycmF5O2Z1bE9wdGlvbnM9MjtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLnVuaXR5Tm90ZSx0LmdhaW49QS5nYWluLHQuZmluZVR1bmU9QS5maW5lVHVuZSx0Lmxvb3BzPUEubG9vcHMubWFwKG49Pih7Li4ubn0pKSx0LmZ1bE9wdGlvbnM9QS5mdWxPcHRpb25zLHR9c3RhdGljIHJlYWQoQSl7dGhpcy52ZXJpZnlIZWFkZXIoQSwid3NtcCIpO2xldCB0PW5ldyBCdCxuPU4oQS5kYXRhLDQpO2lmKG4hPT1ndCYmc0EoYFdzbXAgY2JTaXplIG1pc21hdGNoOiBnb3QgJHtufSwgZXhwZWN0ZWQgJHtndH0uYCksdC51bml0eU5vdGU9TihBLmRhdGEsMiksdC5maW5lVHVuZT1qbihBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSxBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSksdC5nYWluPU4oQS5kYXRhLDQpfDAsdC5mdWxPcHRpb25zPU4oQS5kYXRhLDQpLE4oQS5kYXRhLDQpIT09MCl7bGV0IGE9TihBLmRhdGEsNCk7YSE9PWtuJiZzQShgQ2JTaXplIGZvciBsb29wIGluIHdzbXAgbWlzbWF0Y2guIEV4cGVjdGVkICR7Z3R9LCBnb3QgJHthfS5gKTtsZXQgcj1OKEEuZGF0YSw0KSxJPU4oQS5kYXRhLDQpLG89TihBLmRhdGEsNCk7dC5sb29wcy5wdXNoKHtsb29wU3RhcnQ6SSxsb29wTGVuZ3RoOm8sbG9vcFR5cGU6cn0pfXJldHVybiB0fXN0YXRpYyBmcm9tU0ZTYW1wbGUoQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLm9yaWdpbmFsS2V5LHQuZmluZVR1bmU9QS5waXRjaENvcnJlY3Rpb24sKEEubG9vcEVuZCE9PTB8fEEubG9vcFN0YXJ0IT09MCkmJnQubG9vcHMucHVzaCh7bG9vcFN0YXJ0OkEubG9vcFN0YXJ0LGxvb3BMZW5ndGg6QS5sb29wRW5kLUEubG9vcFN0YXJ0LGxvb3BUeXBlOnlzLmZvcndhcmR9KSx0fXN0YXRpYyBmcm9tU0Zab25lKEEpe2xldCB0PW5ldyBCdDt0LnVuaXR5Tm90ZT1BLmdldEdlbmVyYXRvcihpLm92ZXJyaWRpbmdSb290S2V5LEEuc2FtcGxlLm9yaWdpbmFsS2V5KSxBLmdldEdlbmVyYXRvcihpLnNjYWxlVHVuaW5nLDEwMCk9PT0wJiZBLmtleVJhbmdlLm1heC1BLmtleVJhbmdlLm1pbj09PTAmJih0LnVuaXR5Tm90ZT1BLmtleVJhbmdlLm1pbiksdC5maW5lVHVuZT1BLmZpbmVUdW5pbmcrQS5zYW1wbGUucGl0Y2hDb3JyZWN0aW9uO2xldCBuPUEuZ2V0R2VuZXJhdG9yKGkuaW5pdGlhbEF0dGVudWF0aW9uLDApKi40O3QuZ2Fpbj0tbjw8MTY7bGV0IHM9QS5nZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcywwKTtpZihzIT09MCl7bGV0IGE9QS5zYW1wbGUubG9vcFN0YXJ0K0EuZ2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCwwKSozMjc2OCxyPUEuc2FtcGxlLmxvb3BFbmQrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsMCkqMzI3NjgsSTtzd2l0Y2gocyl7Y2FzZSAxOmRlZmF1bHQ6ST0wO2JyZWFrO2Nhc2UgMzpJPTF9dC5sb29wcy5wdXNoKHtsb29wVHlwZTpJLGxvb3BTdGFydDphLGxvb3BMZW5ndGg6ci1hfSl9cmV0dXJuIHR9dG9TRlpvbmUoQSx0KXtsZXQgbj0wLHM9dGhpcy5sb29wc1swXTtzJiYobj1zLmxvb3BUeXBlPT09eXMubG9vcEFuZFJlbGVhc2U/MzoxKSxuIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcyxuKTtsZXQgST0tKHRoaXMuZ2Fpbj4+MTYpLy40O2lmKEkhPT0wJiZBLnNldEdlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbixJKSxBLmZpbmVUdW5pbmc9dGhpcy5maW5lVHVuZS10LnBpdGNoQ29ycmVjdGlvbix0aGlzLnVuaXR5Tm90ZSE9PXQub3JpZ2luYWxLZXkmJkEuc2V0R2VuZXJhdG9yKGkub3ZlcnJpZGluZ1Jvb3RLZXksdGhpcy51bml0eU5vdGUpLHMpe2xldCBvPXMubG9vcFN0YXJ0LXQubG9vcFN0YXJ0LEI9cy5sb29wU3RhcnQrcy5sb29wTGVuZ3RoLXQubG9vcEVuZDtpZihvIT09MCl7bGV0IGQ9byUzMjc2ODtBLnNldEdlbmVyYXRvcihpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGQpO2xldCBoPU1hdGgudHJ1bmMoby8zMjc2OCk7aCE9PTAmJkEuc2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9aWYoQiE9PTApe2xldCBkPUIlMzI3Njg7QS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsZCk7bGV0IGg9TWF0aC50cnVuYyhCLzMyNzY4KTtoIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9fX13cml0ZSgpe2xldCBBPW5ldyBZKGd0K3RoaXMubG9vcHMubGVuZ3RoKmtuKTtyZXR1cm4gZ0EoQSxndCksSihBLHRoaXMudW5pdHlOb3RlKSxKKEEsdGhpcy5maW5lVHVuZSksZ0EoQSx0aGlzLmdhaW4pLGdBKEEsdGhpcy5mdWxPcHRpb25zKSxnQShBLHRoaXMubG9vcHMubGVuZ3RoKSx0aGlzLmxvb3BzLmZvckVhY2godD0+e2dBKEEsa24pLGdBKEEsdC5sb29wVHlwZSksZ0EoQSx0Lmxvb3BTdGFydCksZ0EoQSx0Lmxvb3BMZW5ndGgpfSksY0EoIndzbXAiLEEpfX0sRG49e1BDTToxLEFMQVc6Nn07ZnVuY3Rpb24gRHIoZSxBKXtsZXQgdD1NYXRoLnBvdygyLEEqOC0xKSxuPU1hdGgucG93KDIsQSo4KSxzLGE9ITE7QT09PTE/KHM9MjU1LGE9ITApOnM9dDtsZXQgcj1lLmxlbmd0aC9BLEk9bmV3IEZsb2F0MzJBcnJheShyKTtpZihBPT09Mil7bGV0IG89bmV3IEludDE2QXJyYXkoZS5idWZmZXIpO2ZvcihsZXQgZz0wO2c8by5sZW5ndGg7ZysrKUlbZ109b1tnXS8zMjc2OH1lbHNlIGZvcihsZXQgbz0wO288SS5sZW5ndGg7bysrKXtsZXQgZz1OKGUsQSk7YT9JW29dPWcvcy0uNTooZz49dCYmKGctPW4pLElbb109Zy9zKX1yZXR1cm4gSX1mdW5jdGlvbiB3cihlLEEpe2xldCB0PWUubGVuZ3RoL0Esbj1uZXcgRmxvYXQzMkFycmF5KHQpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtsZXQgYT1OKGUsQSkscj1hXjg1O3ImPTEyNztsZXQgST1yPj40LG89ciYxNTtJPjAmJihvKz0xNiksbz0obzw8NCkrOCxJPjEmJihvPW88PEktMSk7bGV0IGc9YT4xMjc/bzotbztuW3NdPWcvMzI2Nzh9cmV0dXJuIG59dmFyIEZyPWNsYXNzIGV4dGVuZHMgWnR7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtyYXdEYXRhO2NvbnN0cnVjdG9yKGUsQSx0LG4scyxhLHIsSSxvKXtzdXBlcihlLEEsdCxuLHdBLm1vbm9TYW1wbGUscyxhKSx0aGlzLmRhdGFPdmVycmlkZGVuPSExLHRoaXMucmF3RGF0YT1yLmRhdGEsdGhpcy53Rm9ybWF0VGFnPUksdGhpcy5ieXRlc1BlclNhbXBsZT1vfWdldEF1ZGlvRGF0YSgpe2lmKCF0aGlzLnJhd0RhdGEpcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMCk7aWYoIXRoaXMuYXVkaW9EYXRhKXtsZXQgZTtzd2l0Y2godGhpcy53Rm9ybWF0VGFnKXtkZWZhdWx0OnNBKGBGYWlsZWQgdG8gZGVjb2RlIHNhbXBsZS4gVW5rbm93biB3Rm9ybWF0VGFnOiAke3RoaXMud0Zvcm1hdFRhZ31gKSxlPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5yYXdEYXRhLmxlbmd0aC90aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLlBDTTplPURyKHRoaXMucmF3RGF0YSx0aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLkFMQVc6ZT13cih0aGlzLnJhd0RhdGEsdGhpcy5ieXRlc1BlclNhbXBsZSk7YnJlYWt9dGhpcy5zZXRBdWRpb0RhdGEoZSx0aGlzLnNhbXBsZVJhdGUpfXJldHVybiB0aGlzLmF1ZGlvRGF0YT8/bmV3IEZsb2F0MzJBcnJheSgwKX1nZXRSYXdEYXRhKGUpe3JldHVybiB0aGlzLmRhdGFPdmVycmlkZGVufHx0aGlzLmlzQ29tcHJlc3NlZD9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMud0Zvcm1hdFRhZz09PURuLlBDTSYmdGhpcy5ieXRlc1BlclNhbXBsZT09PTI/dGhpcy5yYXdEYXRhOnRoaXMuZW5jb2RlUzE2TEUoKX19LExzPWNsYXNzIFpuIGV4dGVuZHMgamV7d2F2ZVNhbXBsZT1uZXcgemU7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtzYW1wbGVSYXRlO2RhdGFDaHVuaztuYW1lPSJVbm5hbWVkIHNhbXBsZSI7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoKSx0aGlzLndGb3JtYXRUYWc9QSx0aGlzLmJ5dGVzUGVyU2FtcGxlPXQsdGhpcy5zYW1wbGVSYXRlPW4sdGhpcy5kYXRhQ2h1bms9c31zdGF0aWMgcmVhZChBKXtsZXQgdD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KEEsIndhdmUiKSxuPXQuZmluZChDPT5DLmhlYWRlcj09PSJmbXQgIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJObyBmbXQgY2h1bmsgaW4gdGhlIHdhdmUgZmlsZSEiKTtsZXQgcz1OKG4uZGF0YSwyKSxhPU4obi5kYXRhLDIpO2lmKGEhPT0xKXRocm93IG5ldyBFcnJvcihgT25seSBtb25vIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4gRm10IHJlcG9ydHMgJHthfSBjaGFubmVscy5gKTtsZXQgcj1OKG4uZGF0YSw0KTtOKG4uZGF0YSw0KSxOKG4uZGF0YSwyKTtsZXQgbz1OKG4uZGF0YSwyKS84LGc9dC5maW5kKEM9PkMuaGVhZGVyPT09ImRhdGEiKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgY2h1bmsgaW4gdGhlIFdBVkUgY2h1bmshIik7bGV0IEI9bmV3IFpuKHMsbyxyLGcpLGQ9ZmUodCwiSU5GTyIpO2lmKGQpe2xldCBDPXJBKGQuZGF0YSk7Zm9yKDtDLmhlYWRlciE9PSJJTkFNIiYmZC5kYXRhLmN1cnJlbnRJbmRleDxkLmRhdGEubGVuZ3RoOylDPXJBKGQuZGF0YSk7Qy5oZWFkZXI9PT0iSU5BTSImJihCLm5hbWU9aEEoQy5kYXRhLEMuc2l6ZSkudHJpbSgpKX1sZXQgaD10LmZpbmQoQz0+Qy5oZWFkZXI9PT0id3NtcCIpO3JldHVybiBoJiYoQi53YXZlU2FtcGxlPXplLnJlYWQoaCkpLEJ9c3RhdGljIGZyb21TRlNhbXBsZShBKXtsZXQgdD1BLmdldFJhd0RhdGEoITEpLG49bmV3IFpuKDEsMixBLnNhbXBsZVJhdGUsbmV3IEhzKCJkYXRhIix0Lmxlbmd0aCxuZXcgWSh0LmJ1ZmZlcikpKTtyZXR1cm4gbi5uYW1lPUEubmFtZSxuLndhdmVTYW1wbGU9emUuZnJvbVNGU2FtcGxlKEEpLG59dG9TRlNhbXBsZShBKXtsZXQgdD10aGlzLndhdmVTYW1wbGUudW5pdHlOb3RlLG49dGhpcy53YXZlU2FtcGxlLmZpbmVUdW5lLHM9TWF0aC50cnVuYyhuLzEwMCk7dCs9cyxuLT1zKjEwMDtsZXQgYT0wLHI9MCxJPXRoaXMud2F2ZVNhbXBsZS5sb29wcz8uWzBdO0kmJihhPUkubG9vcFN0YXJ0LHI9SS5sb29wU3RhcnQrSS5sb29wTGVuZ3RoKTtsZXQgbz1uZXcgRnIodGhpcy5uYW1lLHRoaXMuc2FtcGxlUmF0ZSx0LG4sYSxyLHRoaXMuZGF0YUNodW5rLHRoaXMud0Zvcm1hdFRhZyx0aGlzLmJ5dGVzUGVyU2FtcGxlKTtBLmFkZFNhbXBsZXMobyl9d3JpdGUoKXtsZXQgQT10aGlzLndyaXRlRm10KCksdD10aGlzLndhdmVTYW1wbGUud3JpdGUoKSxuPWNBKCJkYXRhIix0aGlzLmRhdGFDaHVuay5kYXRhKSxzPWNBKCJJTkFNIixuZSh0aGlzLm5hbWUsITApKSxhPWNBKCJJTkZPIixzLCExLCEwKTtyZXR1cm4gcChgJWNTYXZlZCAlYyR7dGhpcy5uYW1lfSVjIHN1Y2Nlc3NmdWxseSFgLGMucmVjb2duaXplZCxjLnZhbHVlLGMucmVjb2duaXplZCksdkEoIndhdmUiLFtBLHQsbixhXSwhMCl9d3JpdGVGbXQoKXtsZXQgQT1uZXcgWSgxOCk7cmV0dXJuIEooQSx0aGlzLndGb3JtYXRUYWcpLEooQSwxKSxnQShBLHRoaXMuc2FtcGxlUmF0ZSksZ0EoQSx0aGlzLnNhbXBsZVJhdGUqMiksSihBLDIpLEooQSx0aGlzLmJ5dGVzUGVyU2FtcGxlKjgpLGNBKCJmbXQgIixBKX19LHlhPW5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDFlMywwKSxrYT1uZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwxZTMsMCksR3I9bmV3IHlBKDEyOSwwLGkudmliTGZvVG9QaXRjaCwwLDApLFJyPW5ldyB5QSgxMywwLGkudmliTGZvVG9QaXRjaCwwLDApLFZBPWNsYXNzIHpue3NvdXJjZTt0cmFuc2Zvcm07Ymlwb2xhcjtpbnZlcnQ7Y29uc3RydWN0b3IoQT1ULm5vbmUsdD1RQS5saW5lYXIsbj0hMSxzPSExKXt0aGlzLnNvdXJjZT1BLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5iaXBvbGFyPW4sdGhpcy5pbnZlcnQ9c31nZXQgc291cmNlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhUKS5maW5kKEE9PlRbQV09PT10aGlzLnNvdXJjZSk/P3RoaXMuc291cmNlLnRvU3RyaW5nKCl9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgem4oQS5zb3VyY2UsQS50cmFuc2Zvcm0sQS5iaXBvbGFyLEEuaW52ZXJ0KX1zdGF0aWMgZnJvbVNGU291cmNlKEEpe2xldCB0O2lmKEEuaXNDQylzd2l0Y2goQS5pbmRleCl7Y2FzZSBTLm1vZHVsYXRpb25XaGVlbDp0PVQubW9kdWxhdGlvbldoZWVsO2JyZWFrO2Nhc2UgUy5tYWluVm9sdW1lOnQ9VC52b2x1bWU7YnJlYWs7Y2FzZSBTLnBhbjp0PVQucGFuO2JyZWFrO2Nhc2UgUy5leHByZXNzaW9uQ29udHJvbGxlcjp0PVQuZXhwcmVzc2lvbjticmVhaztjYXNlIFMuY2hvcnVzRGVwdGg6dD1ULmNob3J1czticmVhaztjYXNlIFMucmV2ZXJiRGVwdGg6dD1ULnJldmVyYjticmVha31lbHNlIHN3aXRjaChBLmluZGV4KXtjYXNlIGoubm9Db250cm9sbGVyOnQ9VC5ub25lO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06dD1ULmtleU51bTticmVhaztjYXNlIGoubm90ZU9uVmVsb2NpdHk6dD1ULnZlbG9jaXR5O2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsOnQ9VC5waXRjaFdoZWVsO2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsUmFuZ2U6dD1ULnBpdGNoV2hlZWxSYW5nZTticmVhaztjYXNlIGoucG9seVByZXNzdXJlOnQ9VC5wb2x5UHJlc3N1cmU7YnJlYWs7Y2FzZSBqLmNoYW5uZWxQcmVzc3VyZTp0PVQuY2hhbm5lbFByZXNzdXJlfWlmKHQhPT12b2lkIDApcmV0dXJuIG5ldyB6bih0LEEuY3VydmVUeXBlLEEuaXNCaXBvbGFyLEEuaXNOZWdhdGl2ZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZU5hbWV9ICR7dGhpcy50cmFuc2Zvcm1OYW1lfSAke3RoaXMuYmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmludmVydD8iaW52ZXJ0ZWQiOiJwb3NpdGl2ZSJ9YH10b1RyYW5zZm9ybUZsYWcoKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm18KHRoaXMuYmlwb2xhcj8xOjApPDw0fCh0aGlzLmludmVydD8xOjApPDw1fXRvU0ZTb3VyY2UoKXtsZXQgQSx0PSExO3N3aXRjaCh0aGlzLnNvdXJjZSl7ZGVmYXVsdDpjYXNlIFQubW9kTGZvOmNhc2UgVC52aWJyYXRvTGZvOmNhc2UgVC5jb2Fyc2VUdW5lOmNhc2UgVC5maW5lVHVuZTpjYXNlIFQubW9kRW52OnJldHVybjtjYXNlIFQua2V5TnVtOkE9ai5ub3RlT25LZXlOdW07YnJlYWs7Y2FzZSBULm5vbmU6QT1qLm5vQ29udHJvbGxlcjticmVhaztjYXNlIFQubW9kdWxhdGlvbldoZWVsOkE9Uy5tb2R1bGF0aW9uV2hlZWwsdD0hMDticmVhaztjYXNlIFQucGFuOkE9Uy5wYW4sdD0hMDticmVhaztjYXNlIFQucmV2ZXJiOkE9Uy5yZXZlcmJEZXB0aCx0PSEwO2JyZWFrO2Nhc2UgVC5jaG9ydXM6QT1TLmNob3J1c0RlcHRoLHQ9ITA7YnJlYWs7Y2FzZSBULmV4cHJlc3Npb246QT1TLmV4cHJlc3Npb25Db250cm9sbGVyLHQ9ITA7YnJlYWs7Y2FzZSBULnZvbHVtZTpBPVMubWFpblZvbHVtZSx0PSEwO2JyZWFrO2Nhc2UgVC52ZWxvY2l0eTpBPWoubm90ZU9uVmVsb2NpdHk7YnJlYWs7Y2FzZSBULnBvbHlQcmVzc3VyZTpBPWoucG9seVByZXNzdXJlO2JyZWFrO2Nhc2UgVC5jaGFubmVsUHJlc3N1cmU6QT1qLmNoYW5uZWxQcmVzc3VyZTticmVhaztjYXNlIFQucGl0Y2hXaGVlbDpBPWoucGl0Y2hXaGVlbDticmVhaztjYXNlIFQucGl0Y2hXaGVlbFJhbmdlOkE9ai5waXRjaFdoZWVsUmFuZ2U7YnJlYWt9aWYoQSE9PXZvaWQgMClyZXR1cm4gbmV3IFhBKEEsdGhpcy50cmFuc2Zvcm0sdCx0aGlzLmJpcG9sYXIsdGhpcy5pbnZlcnQpfX0sTXI9bmV3IFNldChbaS5zYW1wbGVNb2RlcyxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmtleVJhbmdlLGkudmVsUmFuZ2UsaS5zYW1wbGVJRCxpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLnN0YXJ0QWRkcnNPZmZzZXQsaS5zdGFydEFkZHJzQ29hcnNlT2Zmc2V0LGkuZW5kQWRkck9mZnNldCxpLmVuZEFkZHJzQ29hcnNlT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLmVuZGxvb3BBZGRyc09mZnNldCxpLmVuZGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLm92ZXJyaWRpbmdSb290S2V5LGkuZXhjbHVzaXZlQ2xhc3NdKSxjdD1jbGFzcyBSZXtzb3VyY2U7Y29udHJvbDtkZXN0aW5hdGlvbjtzY2FsZTt0cmFuc2Zvcm07Y29uc3RydWN0b3IoQT1uZXcgVkEsdD1uZXcgVkEsbixzLGEpe3RoaXMuc291cmNlPUEsdGhpcy5jb250cm9sPXQsdGhpcy5kZXN0aW5hdGlvbj1uLHRoaXMudHJhbnNmb3JtPXMsdGhpcy5zY2FsZT1hfWdldCBpc1N0YXRpY1BhcmFtZXRlcigpe3JldHVybiB0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULm5vbmUmJnRoaXMuY29udHJvbC5zb3VyY2U9PT1ULm5vbmV9Z2V0IHNob3J0U2NhbGUoKXtyZXR1cm4gdGhpcy5zY2FsZT4+MTZ9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9Z2V0IGRlc3RpbmF0aW9uTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhSKS5maW5kKEE9PlJbQV09PT10aGlzLmRlc3RpbmF0aW9uKT8/dGhpcy5kZXN0aW5hdGlvbi50b1N0cmluZygpfXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQSwyKSxuPU4oQSwyKSxzPU4oQSwyKSxhPU4oQSwyKSxyPU4oQSw0KXwwLEk9YSYxNSxvPWE+PjQmMTUsZz1NZShhLDgpLEI9TWUoYSw5KSxkPW5ldyBWQShuLG8sZyxCKSxoPWE+PjEwJjE1LEM9TWUoYSwxNCksUT1NZShhLDE1KSxtPW5ldyBWQSh0LGgsQyxRKTtyZXR1cm4gbmV3IFJlKG0sZCxzLEkscil9c3RhdGljIGZyb21TRk1vZHVsYXRvcihBLHQpe2xldCBuPUI9PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YgbW9kdWxhdG9yIGludG8gRExTOgogJHtBLnRvU3RyaW5nKCl9IAooJHtCfSlgKX07aWYoQS50cmFuc2Zvcm1UeXBlIT09MCl7bigiQWJzb2x1dGUgdHJhbnNmb3JtIHR5cGUgaXMgbm90IHN1cHBvcnRlZCIpO3JldHVybn1pZihFQS5pc0lkZW50aWNhbChBLGthLCEwKXx8RUEuaXNJZGVudGljYWwoQSx5YSwhMCkpcmV0dXJuO2xldCBzPVZBLmZyb21TRlNvdXJjZShBLnByaW1hcnlTb3VyY2UpO2lmKCFzKXtuKCJJbnZhbGlkIHByaW1hcnkgc291cmNlIik7cmV0dXJufWxldCBhPVZBLmZyb21TRlNvdXJjZShBLnNlY29uZGFyeVNvdXJjZSk7aWYoIWEpe24oIkludmFsaWQgc2Vjb25kYXJ5IHNvdXJjZSIpO3JldHVybn1sZXQgcj1SZS5mcm9tU0ZEZXN0aW5hdGlvbihBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50KTtpZihyPT09dm9pZCAwKXtuKCJJbnZhbGlkIGRlc3RpbmF0aW9uIik7cmV0dXJufWxldCBJPUEudHJhbnNmb3JtQW1vdW50LG87aWYodHlwZW9mIHI9PSJudW1iZXIiKW89cjtlbHNlIGlmKG89ci5kZXN0aW5hdGlvbixJPXIuYW1vdW50LHIuc291cmNlIT09VC5ub25lKXtpZihhLnNvdXJjZSE9PVQubm9uZSYmcy5zb3VyY2UhPT1ULm5vbmUpe24oIkFydGljdWxhdGlvbiBnZW5lcmF0b3JzIHdpdGggc2Vjb25kYXJ5IHNvdXJjZSBhcmUgbm90IHN1cHBvcnRlZCIpO3JldHVybn1zLnNvdXJjZSE9PVQubm9uZSYmKGE9cykscz1uZXcgVkEoci5zb3VyY2UsUUEubGluZWFyLHIuaXNCaXBvbGFyKX1sZXQgZz1uZXcgUmUocyxhLG8sMCxJPDwxNik7dC5jb25uZWN0aW9uQmxvY2tzLnB1c2goZyl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgUmUoVkEuY29weUZyb20oQS5zb3VyY2UpLFZBLmNvcHlGcm9tKEEuY29udHJvbCksQS5kZXN0aW5hdGlvbixBLnRyYW5zZm9ybSxBLnNjYWxlKX1zdGF0aWMgZnJvbVNGR2VuZXJhdG9yKEEsdCl7aWYoTXIuaGFzKEEuZ2VuZXJhdG9yVHlwZSkpcmV0dXJuO2xldCBuPW89PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YyIGdlbmVyYXRvciBpbnRvIERMUzoKICR7QS50b1N0cmluZygpfSAKKCR7b30pYCl9LHM9UmUuZnJvbVNGRGVzdGluYXRpb24oQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUpO2lmKHM9PT12b2lkIDApe24oIkludmFsaWQgdHlwZSIpO3JldHVybn1sZXQgYT1uZXcgVkEscixJPUEuZ2VuZXJhdG9yVmFsdWU7dHlwZW9mIHM9PSJudW1iZXIiP3I9czoocj1zLmRlc3RpbmF0aW9uLEk9cy5hbW91bnQsYS5zb3VyY2U9cy5zb3VyY2UsYS5iaXBvbGFyPXMuaXNCaXBvbGFyKSx0LmNvbm5lY3Rpb25CbG9ja3MucHVzaChuZXcgUmUoYSxuZXcgVkEsciwwLEk8PDE2KSl9c3RhdGljIGZyb21TRkRlc3RpbmF0aW9uKEEsdCl7c3dpdGNoKEEpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UgaS5pbml0aWFsQXR0ZW51YXRpb246cmV0dXJue2Rlc3RpbmF0aW9uOlIuZ2FpbixhbW91bnQ6LXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5maW5lVHVuZTpyZXR1cm4gUi5waXRjaDtjYXNlIGkucGFuOnJldHVybiBSLnBhbjtjYXNlIGkua2V5TnVtOnJldHVybiBSLmtleU51bTtjYXNlIGkucmV2ZXJiRWZmZWN0c1NlbmQ6cmV0dXJuIFIucmV2ZXJiU2VuZDtjYXNlIGkuY2hvcnVzRWZmZWN0c1NlbmQ6cmV0dXJuIFIuY2hvcnVzU2VuZDtjYXNlIGkuZnJlcU1vZExGTzpyZXR1cm4gUi5tb2RMZm9GcmVxO2Nhc2UgaS5kZWxheU1vZExGTzpyZXR1cm4gUi5tb2RMZm9EZWxheTtjYXNlIGkuZGVsYXlWaWJMRk86cmV0dXJuIFIudmliTGZvRGVsYXk7Y2FzZSBpLmZyZXFWaWJMRk86cmV0dXJuIFIudmliTGZvRnJlcTtjYXNlIGkuZGVsYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVsYXk7Y2FzZSBpLmF0dGFja1ZvbEVudjpyZXR1cm4gUi52b2xFbnZBdHRhY2s7Y2FzZSBpLmhvbGRWb2xFbnY6cmV0dXJuIFIudm9sRW52SG9sZDtjYXNlIGkuZGVjYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVjYXk7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6cmV0dXJue2Rlc3RpbmF0aW9uOlIudm9sRW52U3VzdGFpbixhbW91bnQ6MWUzLXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5yZWxlYXNlVm9sRW52OnJldHVybiBSLnZvbEVudlJlbGVhc2U7Y2FzZSBpLmRlbGF5TW9kRW52OnJldHVybiBSLm1vZEVudkRlbGF5O2Nhc2UgaS5hdHRhY2tNb2RFbnY6cmV0dXJuIFIubW9kRW52QXR0YWNrO2Nhc2UgaS5ob2xkTW9kRW52OnJldHVybiBSLm1vZEVudkhvbGQ7Y2FzZSBpLmRlY2F5TW9kRW52OnJldHVybiBSLm1vZEVudkRlY2F5O2Nhc2UgaS5zdXN0YWluTW9kRW52OnJldHVybntkZXN0aW5hdGlvbjpSLm1vZEVudlN1c3RhaW4sYW1vdW50OjFlMy10LGlzQmlwb2xhcjohMSxzb3VyY2U6VC5ub25lfTtjYXNlIGkucmVsZWFzZU1vZEVudjpyZXR1cm4gUi5tb2RFbnZSZWxlYXNlO2Nhc2UgaS5pbml0aWFsRmlsdGVyRmM6cmV0dXJuIFIuZmlsdGVyQ3V0b2ZmO2Nhc2UgaS5pbml0aWFsRmlsdGVyUTpyZXR1cm4gUi5maWx0ZXJRO2Nhc2UgaS5tb2RFbnZUb0ZpbHRlckZjOnJldHVybntzb3VyY2U6VC5tb2RFbnYsZGVzdGluYXRpb246Ui5maWx0ZXJDdXRvZmYsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kRW52VG9QaXRjaDpyZXR1cm57c291cmNlOlQubW9kRW52LGRlc3RpbmF0aW9uOlIucGl0Y2gsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kTGZvVG9GaWx0ZXJGYzpyZXR1cm57c291cmNlOlQubW9kTGZvLGRlc3RpbmF0aW9uOlIuZmlsdGVyQ3V0b2ZmLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvVm9sdW1lOnJldHVybntzb3VyY2U6VC5tb2RMZm8sZGVzdGluYXRpb246Ui5nYWluLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULm1vZExmbyxkZXN0aW5hdGlvbjpSLnBpdGNoLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnZpYkxmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULnZpYnJhdG9MZm8sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCxpc0JpcG9sYXI6ITB9O2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLnZvbEVudkhvbGQsYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Wb2xFbnZEZWNheTpyZXR1cm57c291cmNlOlQua2V5TnVtLGRlc3RpbmF0aW9uOlIudm9sRW52RGVjYXksYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Nb2RFbnZIb2xkOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5tb2RFbnZIb2xkLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLm1vZEVudkRlY2F5LGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnNjYWxlVHVuaW5nOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCoxMjgsaXNCaXBvbGFyOiExfX19dG9TdHJpbmcoKXtyZXR1cm5gU291cmNlOiAke3RoaXMuc291cmNlLnRvU3RyaW5nKCl9LApDb250cm9sOiAke3RoaXMuY29udHJvbC50b1N0cmluZygpfSwKU2NhbGU6ICR7dGhpcy5zY2FsZX0gPj4gMTYgPSAke3RoaXMuc2hvcnRTY2FsZX0sCk91dHB1dCB0cmFuc2Zvcm06ICR7dGhpcy50cmFuc2Zvcm1OYW1lfQpEZXN0aW5hdGlvbjogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX1gfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO0ooQSx0aGlzLnNvdXJjZS5zb3VyY2UpLEooQSx0aGlzLmNvbnRyb2wuc291cmNlKSxKKEEsdGhpcy5kZXN0aW5hdGlvbik7bGV0IHQ9dGhpcy50cmFuc2Zvcm18dGhpcy5jb250cm9sLnRvVHJhbnNmb3JtRmxhZygpPDw0fHRoaXMuc291cmNlLnRvVHJhbnNmb3JtRmxhZygpPDwxMDtyZXR1cm4gSihBLHQpLGdBKEEsdGhpcy5zY2FsZSksQX10b1NGR2VuZXJhdG9yKEEpe2xldCB0PXRoaXMuZGVzdGluYXRpb24sbj10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNGYWlsZWQgY29udmVydGluZyBETFMgYXJ0aWN1bGF0b3IgaW50byBTRiBnZW5lcmF0b3I6ICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKGludmFsaWQgZGVzdGluYXRpb24pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCk7cmV0dXJuO2Nhc2UgUi5wYW46QS5zZXRHZW5lcmF0b3IoaS5wYW4sbik7YnJlYWs7Y2FzZSBSLmdhaW46QS5hZGRUb0dlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbiwtbi8uNCk7YnJlYWs7Y2FzZSBSLmZpbHRlckN1dG9mZjpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJGYyxuKTticmVhaztjYXNlIFIuZmlsdGVyUTpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJRLG4pO2JyZWFrO2Nhc2UgUi5tb2RMZm9GcmVxOkEuc2V0R2VuZXJhdG9yKGkuZnJlcU1vZExGTyxuKTticmVhaztjYXNlIFIubW9kTGZvRGVsYXk6QS5zZXRHZW5lcmF0b3IoaS5kZWxheU1vZExGTyxuKTticmVhaztjYXNlIFIudmliTGZvRnJlcTpBLnNldEdlbmVyYXRvcihpLmZyZXFWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZpYkxmb0RlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja1ZvbEVudixuKTticmVhaztjYXNlIFIudm9sRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlVm9sRW52LG4pO2JyZWFrO2Nhc2UgUi52b2xFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpblZvbEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja01vZEVudixuKTticmVhaztjYXNlIFIubW9kRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlTW9kRW52LG4pO2JyZWFrO2Nhc2UgUi5tb2RFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpbk1vZEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLnJldmVyYlNlbmQ6QS5zZXRHZW5lcmF0b3IoaS5yZXZlcmJFZmZlY3RzU2VuZCxuKTticmVhaztjYXNlIFIuY2hvcnVzU2VuZDpBLnNldEdlbmVyYXRvcihpLmNob3J1c0VmZmVjdHNTZW5kLG4pO2JyZWFrO2Nhc2UgUi5waXRjaDpBLmZpbmVUdW5pbmcrPW47YnJlYWt9fXRvU0ZNb2R1bGF0b3IoQSl7bGV0IHQ9dGhpcy5zaG9ydFNjYWxlLG4scyxhPW5ldyBYQSxyPWc9PntwKGAlY0ZhaWxlZCBjb252ZXJ0aW5nIERMUyBhcnRpY3VsYXRvciBpbnRvIFNGMjoKICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKCR7Z30pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCl9LEk9dGhpcy50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKEkpe249STtsZXQgZz10aGlzLmNvbnRyb2wudG9TRlNvdXJjZSgpO2lmKCFnKXtyKCJJbnZhbGlkIGNvbnRyb2wiKTtyZXR1cm59cz1nfWVsc2V7bGV0IGc9dGhpcy50b1NGRGVzdGluYXRpb24oKTtpZighZyl7cigiSW52YWxpZCBkZXN0aW5hdGlvbiIpO3JldHVybn10eXBlb2YgZz09Im9iamVjdCI/KHQ9Zy5uZXdBbW91bnQsbj1nLmdlbik6bj1nO2xldCBCPXRoaXMuc291cmNlLnRvU0ZTb3VyY2UoKTtpZighQil7cigiSW52YWxpZCBzb3VyY2UiKTtyZXR1cm59cz1CO2xldCBkPXRoaXMuY29udHJvbC50b1NGU291cmNlKCk7aWYoIWQpe3IoIkludmFsaWQgY29udHJvbCIpO3JldHVybn1hPWR9dGhpcy50cmFuc2Zvcm0hPT1RQS5saW5lYXImJnMuY3VydmVUeXBlPT09UUEubGluZWFyJiYocy5jdXJ2ZVR5cGU9dGhpcy50cmFuc2Zvcm0pLG49PT1pLmluaXRpYWxBdHRlbnVhdGlvbiYmKCh0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZlbG9jaXR5fHx0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZvbHVtZXx8dGhpcy5zb3VyY2Uuc291cmNlPT09VC5leHByZXNzaW9uKSYmKHMuaXNOZWdhdGl2ZT0hMCksdD1NYXRoLm1pbig5NjAsTWF0aC5tYXgoMCx0KSkpO2xldCBvPW5ldyBFQShzLGEsbix0LDApO0EuYWRkTW9kdWxhdG9ycyhvKX10b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpe2xldCBBPXRoaXMuc291cmNlLnNvdXJjZSx0PXRoaXMuZGVzdGluYXRpb247cmV0dXJuIEE9PT1ULnZpYnJhdG9MZm8mJnQ9PT1SLnBpdGNoP2kudmliTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLnBpdGNoP2kubW9kTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLmZpbHRlckN1dG9mZj9pLm1vZExmb1RvRmlsdGVyRmM6QT09PVQubW9kTGZvJiZ0PT09Ui5nYWluP2kubW9kTGZvVG9Wb2x1bWU6QT09PVQubW9kRW52JiZ0PT09Ui5maWx0ZXJDdXRvZmY/aS5tb2RFbnZUb0ZpbHRlckZjOkE9PT1ULm1vZEVudiYmdD09PVIucGl0Y2g/aS5tb2RFbnZUb1BpdGNoOnZvaWQgMH10b1NGRGVzdGluYXRpb24oKXtsZXQgQT10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHRoaXMuZGVzdGluYXRpb24pe2RlZmF1bHQ6Y2FzZSBSLm5vbmU6cmV0dXJuO2Nhc2UgUi5wYW46cmV0dXJuIGkucGFuO2Nhc2UgUi5nYWluOnJldHVybntnZW46aS5pbml0aWFsQXR0ZW51YXRpb24sbmV3QW1vdW50Oi1BfTtjYXNlIFIucGl0Y2g6cmV0dXJuIGkuZmluZVR1bmU7Y2FzZSBSLmtleU51bTpyZXR1cm4gaS5vdmVycmlkaW5nUm9vdEtleTtjYXNlIFIudm9sRW52RGVsYXk6cmV0dXJuIGkuZGVsYXlWb2xFbnY7Y2FzZSBSLnZvbEVudkF0dGFjazpyZXR1cm4gaS5hdHRhY2tWb2xFbnY7Y2FzZSBSLnZvbEVudkhvbGQ6cmV0dXJuIGkuaG9sZFZvbEVudjtjYXNlIFIudm9sRW52RGVjYXk6cmV0dXJuIGkuZGVjYXlWb2xFbnY7Y2FzZSBSLnZvbEVudlN1c3RhaW46cmV0dXJue2dlbjppLnN1c3RhaW5Wb2xFbnYsbmV3QW1vdW50OjFlMy1BfTtjYXNlIFIudm9sRW52UmVsZWFzZTpyZXR1cm4gaS5yZWxlYXNlVm9sRW52O2Nhc2UgUi5tb2RFbnZEZWxheTpyZXR1cm4gaS5kZWxheU1vZEVudjtjYXNlIFIubW9kRW52QXR0YWNrOnJldHVybiBpLmF0dGFja01vZEVudjtjYXNlIFIubW9kRW52SG9sZDpyZXR1cm4gaS5ob2xkTW9kRW52O2Nhc2UgUi5tb2RFbnZEZWNheTpyZXR1cm4gaS5kZWNheU1vZEVudjtjYXNlIFIubW9kRW52U3VzdGFpbjpyZXR1cm57Z2VuOmkuc3VzdGFpbk1vZEVudixuZXdBbW91bnQ6MWUzLUF9O2Nhc2UgUi5tb2RFbnZSZWxlYXNlOnJldHVybiBpLnJlbGVhc2VNb2RFbnY7Y2FzZSBSLmZpbHRlckN1dG9mZjpyZXR1cm4gaS5pbml0aWFsRmlsdGVyRmM7Y2FzZSBSLmZpbHRlclE6cmV0dXJuIGkuaW5pdGlhbEZpbHRlclE7Y2FzZSBSLmNob3J1c1NlbmQ6cmV0dXJuIGkuY2hvcnVzRWZmZWN0c1NlbmQ7Y2FzZSBSLnJldmVyYlNlbmQ6cmV0dXJuIGkucmV2ZXJiRWZmZWN0c1NlbmQ7Y2FzZSBSLm1vZExmb0ZyZXE6cmV0dXJuIGkuZnJlcU1vZExGTztjYXNlIFIubW9kTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlNb2RMRk87Y2FzZSBSLnZpYkxmb0ZyZXE6cmV0dXJuIGkuZnJlcVZpYkxGTztjYXNlIFIudmliTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlWaWJMRk99fX0sRGE9Y2xhc3MgV24gZXh0ZW5kcyBqZXtjb25uZWN0aW9uQmxvY2tzPW5ldyBBcnJheTttb2RlPSJkbHMyIjtnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGh9Y29weUZyb20oQSl7dGhpcy5tb2RlPUEubW9kZSxBLmNvbm5lY3Rpb25CbG9ja3MuZm9yRWFjaCh0PT57dGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QuY29weUZyb20odCkpfSl9ZnJvbVNGWm9uZShBKXt0aGlzLm1vZGU9ImRsczIiO2xldCB0PW5ldyBWdDt0LmNvcHlGcm9tKEEpO2ZvcihsZXQgbiBvZiB0LmdlbmVyYXRvcnMpe2xldCBzO3N3aXRjaChuLmdlbmVyYXRvclR5cGUpe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBpLmtleU51bVRvVm9sRW52RGVjYXk6cz1pLmRlY2F5Vm9sRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cz1pLmhvbGRWb2xFbnY7YnJlYWs7Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cz1pLmRlY2F5TW9kRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub01vZEVudkhvbGQ6cz1pLmhvbGRNb2RFbnZ9bGV0IGE9dC5nZXRHZW5lcmF0b3Iocyx2b2lkIDApLHI9bi5nZW5lcmF0b3JWYWx1ZSotMTI4O2lmKGE9PT12b2lkIDApY29udGludWU7bGV0IEk9NjAvMTI4KnIsbz1hLUk7dC5zZXRHZW5lcmF0b3Iobi5nZW5lcmF0b3JUeXBlLHIsITEpLHQuc2V0R2VuZXJhdG9yKHMsbywhMSl9Zm9yKGxldCBuIG9mIHQuZ2VuZXJhdG9ycyljdC5mcm9tU0ZHZW5lcmF0b3Iobix0aGlzKTtmb3IobGV0IG4gb2YgdC5tb2R1bGF0b3JzKWN0LmZyb21TRk1vZHVsYXRvcihuLHRoaXMpfXJlYWQoQSl7bGV0IHQ9ZmUoQSwibGFydCIpLG49ZmUoQSwibGFyMiIpO2lmKHQpZm9yKHRoaXMubW9kZT0iZGxzMSI7dC5kYXRhLmN1cnJlbnRJbmRleDx0LmRhdGEubGVuZ3RoOyl7bGV0IHM9ckEodC5kYXRhKTtXbi52ZXJpZnlIZWFkZXIocywiYXJ0MSIsImFydDIiKTtsZXQgYT1zLmRhdGEscj1OKGEsNCk7ciE9PTgmJnNBKGBDYlNpemUgaW4gYXJ0aWN1bGF0aW9uIG1pc21hdGNoLiBFeHBlY3RlZCA4LCBnb3QgJHtyfWApO2xldCBJPU4oYSw0KTtmb3IobGV0IG89MDtvPEk7bysrKXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5wdXNoKGN0LnJlYWQoYSkpfWVsc2UgaWYobilmb3IodGhpcy5tb2RlPSJkbHMyIjtuLmRhdGEuY3VycmVudEluZGV4PG4uZGF0YS5sZW5ndGg7KXtsZXQgcz1yQShuLmRhdGEpO1duLnZlcmlmeUhlYWRlcihzLCJhcnQyIiwiYXJ0MSIpO2xldCBhPXMuZGF0YSxyPU4oYSw0KTtyIT09OCYmc0EoYENiU2l6ZSBpbiBhcnRpY3VsYXRpb24gbWlzbWF0Y2guIEV4cGVjdGVkIDgsIGdvdCAke3J9YCk7bGV0IEk9TihhLDQpO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QucmVhZChhKSl9fXdyaXRlKCl7bGV0IEE9bmV3IFkoOCk7Z0EoQSw4KSxnQShBLHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGgpO2xldCB0PXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5tYXAocz0+cy53cml0ZSgpKSxuPXZBKHRoaXMubW9kZT09PSJkbHMyIj8iYXJ0MiI6ImFydDEiLFtBLC4uLnRdKTtyZXR1cm4gY0EodGhpcy5tb2RlPT09ImRsczIiPyJsYXIyIjoibGFydCIsbiwhMSwhMCl9dG9TRlpvbmUoQSl7bGV0IHQ9KG4scyxhLHIpPT57bGV0IEk9bi8tMTI4O2lmKEEuc2V0R2VuZXJhdG9yKHMsSSksSTw9MTIwKXtsZXQgbz1NYXRoLnJvdW5kKC40Njg3NSpuKSxnPXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5maW5kKEI9PkIuaXNTdGF0aWNQYXJhbWV0ZXImJkIuZGVzdGluYXRpb249PT1yKTtnJiZBLnNldEdlbmVyYXRvcihhLG8rZy5zaG9ydFNjYWxlKX19O2ZvcihsZXQgbiBvZiB0aGlzLmNvbm5lY3Rpb25CbG9ja3Mpe2xldCBzPW4uc2hvcnRTY2FsZSxhPW4uc291cmNlLnNvdXJjZSxyPW4uY29udHJvbC5zb3VyY2UsST1uLmRlc3RpbmF0aW9uO2lmKG4uaXNTdGF0aWNQYXJhbWV0ZXIpe24udG9TRkdlbmVyYXRvcihBKTtjb250aW51ZX1pZihyPT09VC5ub25lKWlmKGE9PT1ULmtleU51bSl7aWYoST09PVIucGl0Y2gpe0Euc2V0R2VuZXJhdG9yKGkuc2NhbGVUdW5pbmcscy8xMjgpO2NvbnRpbnVlfWlmKEk9PT1SLm1vZEVudkhvbGR8fEk9PT1SLm1vZEVudkRlY2F5fHxJPT09Ui52b2xFbnZIb2xkfHxJPT1SLnZvbEVudkRlY2F5KWNvbnRpbnVlfWVsc2V7bGV0IG89bi50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKG8pe0Euc2V0R2VuZXJhdG9yKG8scyk7Y29udGludWV9fW4udG9TRk1vZHVsYXRvcihBKX10aGlzLm1vZGU9PT0iZGxzMSImJkEuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShHciksRUEuY29weUZyb20oUnIpKTtmb3IobGV0IG4gb2YgdGhpcy5jb25uZWN0aW9uQmxvY2tzKXtpZihuLnNvdXJjZS5zb3VyY2UhPT1ULmtleU51bSljb250aW51ZTtsZXQgcz1uLnNob3J0U2NhbGU7c3dpdGNoKG4uZGVzdGluYXRpb24pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBSLnZvbEVudkhvbGQ6dChzLGkua2V5TnVtVG9Wb2xFbnZIb2xkLGkuaG9sZFZvbEVudixSLnZvbEVudkhvbGQpO2JyZWFrO2Nhc2UgUi52b2xFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5LGkuZGVjYXlWb2xFbnYsUi52b2xFbnZEZWNheSk7YnJlYWs7Y2FzZSBSLm1vZEVudkhvbGQ6dChzLGkua2V5TnVtVG9Nb2RFbnZIb2xkLGkuaG9sZE1vZEVudixSLm1vZEVudkhvbGQpO2JyZWFrO2Nhc2UgUi5tb2RFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub01vZEVudkRlY2F5LGkuZGVjYXlNb2RFbnYsUi5tb2RFbnZEZWNheSk7YnJlYWt9fX19LHduPWNsYXNzIFV0e2NoYW5uZWw9MTt0YWJsZUluZGV4O2Z1c09wdGlvbnM9MDtwaGFzZUdyb3VwPTA7Y29uc3RydWN0b3IoQSl7dGhpcy50YWJsZUluZGV4PUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBVdChBLnRhYmxlSW5kZXgpO3JldHVybiB0LmNoYW5uZWw9QS5jaGFubmVsLHQucGhhc2VHcm91cD1BLnBoYXNlR3JvdXAsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0fXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQS5kYXRhLDIpLG49TihBLmRhdGEsMikscz1OKEEuZGF0YSw0KSxhPU4oQS5kYXRhLDQpLHI9bmV3IFV0KGEpO3JldHVybiByLmNoYW5uZWw9cyxyLmZ1c09wdGlvbnM9dCxyLnBoYXNlR3JvdXA9bixyfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49QS5pbmRleE9mKHQuc2FtcGxlKTtpZihuPDApdGhyb3cgbmV3IEVycm9yKGBXYXZlIGxpbmsgZXJyb3I6IFNhbXBsZSAke3Quc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzYW1wbGUgbGlzdC5gKTtsZXQgcz1uZXcgVXQobik7c3dpdGNoKHQuc2FtcGxlLnNhbXBsZVR5cGUpe2RlZmF1bHQ6Y2FzZSB3QS5sZWZ0U2FtcGxlOmNhc2Ugd0EubW9ub1NhbXBsZTpzLmNoYW5uZWw9MTticmVhaztjYXNlIHdBLnJpZ2h0U2FtcGxlOnMuY2hhbm5lbD0yfXJldHVybiBzfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsdGhpcy5mdXNPcHRpb25zKSxKKEEsdGhpcy5waGFzZUdyb3VwKSxnQShBLHRoaXMuY2hhbm5lbCksZ0EoQSx0aGlzLnRhYmxlSW5kZXgpLGNBKCJ3bG5rIixBKX19LFR0PWNsYXNzIFZlIGV4dGVuZHMgamV7YXJ0aWN1bGF0aW9uPW5ldyBEYTtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307dmVsUmFuZ2U9e21pbjowLG1heDoxMjd9O2tleUdyb3VwPTA7ZnVzT3B0aW9ucz0wO3VzTGF5ZXI9MDt3YXZlU2FtcGxlO3dhdmVMaW5rO2NvbnN0cnVjdG9yKEEsdCl7c3VwZXIoKSx0aGlzLndhdmVTYW1wbGU9dCx0aGlzLndhdmVMaW5rPUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBWZSh3bi5jb3B5RnJvbShBLndhdmVMaW5rKSx6ZS5jb3B5RnJvbShBLndhdmVTYW1wbGUpKTtyZXR1cm4gdC5rZXlHcm91cD1BLmtleUdyb3VwLHQua2V5UmFuZ2U9ey4uLkEua2V5UmFuZ2V9LHQudmVsUmFuZ2U9ey4uLkEudmVsUmFuZ2V9LHQudXNMYXllcj1BLnVzTGF5ZXIsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0LmFydGljdWxhdGlvbi5jb3B5RnJvbShBLmFydGljdWxhdGlvbiksdH1zdGF0aWMgcmVhZChBLHQpe2xldCBuPXRoaXMudmVyaWZ5QW5kUmVhZExpc3QodCwicmduICIsInJnbjIiKSxzPW4uZmluZChtPT5tLmhlYWRlcj09PSJ3c21wIiksYT1zP3plLnJlYWQocyk6dm9pZCAwLHI9bi5maW5kKG09Pm0uaGVhZGVyPT09IndsbmsiKTtpZighcil7c0EoIkludmFsaWQgRExTIHJlZ2lvbjogbWlzc2luZyAnd2xuaycgY2h1bmshIERpc2NhcmRpbmcuLi4iKTtyZXR1cm59bGV0IEk9d24ucmVhZChyKSxvPW4uZmluZChtPT5tLmhlYWRlcj09PSJyZ25oIik7aWYoIW8pe3NBKCJJbnZhbGlkIERMUyByZWdpb246IG1pc3NpbmcgJ3JnbmgnIGNodW5rISBEaXNjYXJkaW5nLi4uIik7cmV0dXJufWxldCBnPUFbSS50YWJsZUluZGV4XTtnfHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke0kudGFibGVJbmRleH0uIFNhbXBsZXMgYXZhaWxhYmxlOiAke0EubGVuZ3RofWApLGE/Pz1nLndhdmVTYW1wbGU7bGV0IEI9bmV3IFZlKEksYSksZD1OKG8uZGF0YSwyKSxoPU4oby5kYXRhLDIpLEM9TihvLmRhdGEsMiksUT1OKG8uZGF0YSwyKTtyZXR1cm4gQz09PTAmJlE9PT0wJiYoUT0xMjcsQz0wKSxCLmtleVJhbmdlLm1heD1oLEIua2V5UmFuZ2UubWluPWQsQi52ZWxSYW5nZS5tYXg9USxCLnZlbFJhbmdlLm1pbj1DLEIuZnVzT3B0aW9ucz1OKG8uZGF0YSwyKSxCLmtleUdyb3VwPU4oby5kYXRhLDIpLG8uZGF0YS5sZW5ndGgtby5kYXRhLmN1cnJlbnRJbmRleD49MiYmKEIudXNMYXllcj1OKG8uZGF0YSwyKSksQi5hcnRpY3VsYXRpb24ucmVhZChuKSxCfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49emUuZnJvbVNGWm9uZShBKSxzPXduLmZyb21TRlpvbmUodCxBKSxhPW5ldyBWZShzLG4pO3JldHVybiBhLmtleVJhbmdlLm1pbj1NYXRoLm1heChBLmtleVJhbmdlLm1pbiwwKSxhLmtleVJhbmdlLm1heD1BLmtleVJhbmdlLm1heCxhLnZlbFJhbmdlLm1pbj1NYXRoLm1heChBLnZlbFJhbmdlLm1pbiwwKSxhLnZlbFJhbmdlLm1heD1BLnZlbFJhbmdlLm1heCxhLmtleUdyb3VwPUEuZ2V0R2VuZXJhdG9yKGkuZXhjbHVzaXZlQ2xhc3MsMCksYS5hcnRpY3VsYXRpb24uZnJvbVNGWm9uZShBKSxhfXdyaXRlKCl7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKSx0aGlzLndhdmVTYW1wbGUud3JpdGUoKSx0aGlzLndhdmVMaW5rLndyaXRlKCksdGhpcy5hcnRpY3VsYXRpb24ud3JpdGUoKV07cmV0dXJuIHZBKCJyZ24yIixBLCEwKX10b1NGWm9uZShBLHQpe2xldCBuPXRbdGhpcy53YXZlTGluay50YWJsZUluZGV4XTtufHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke3RoaXMud2F2ZUxpbmsudGFibGVJbmRleH1gKTtsZXQgcz1BLmNyZWF0ZVpvbmUobik7cmV0dXJuIHMua2V5UmFuZ2U9dGhpcy5rZXlSYW5nZSxzLnZlbFJhbmdlPXRoaXMudmVsUmFuZ2UsdGhpcy5rZXlSYW5nZS5tYXg9PT0xMjcmJnRoaXMua2V5UmFuZ2UubWluPT09MCYmKHMua2V5UmFuZ2UubWluPS0xKSx0aGlzLnZlbFJhbmdlLm1heD09PTEyNyYmdGhpcy52ZWxSYW5nZS5taW49PT0wJiYocy52ZWxSYW5nZS5taW49LTEpLHRoaXMua2V5R3JvdXAhPT0wJiZzLnNldEdlbmVyYXRvcihpLmV4Y2x1c2l2ZUNsYXNzLHRoaXMua2V5R3JvdXApLHRoaXMud2F2ZVNhbXBsZS50b1NGWm9uZShzLG4pLHRoaXMuYXJ0aWN1bGF0aW9uLnRvU0Zab25lKHMpLHMuZ2VuZXJhdG9ycz1zLmdlbmVyYXRvcnMuZmlsdGVyKGE9PmEuZ2VuZXJhdG9yVmFsdWUhPT14W2EuZ2VuZXJhdG9yVHlwZV0uZGVmKSxzfXdyaXRlSGVhZGVyKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsTWF0aC5tYXgodGhpcy5rZXlSYW5nZS5taW4sMCkpLEooQSx0aGlzLmtleVJhbmdlLm1heCksSihBLE1hdGgubWF4KHRoaXMudmVsUmFuZ2UubWluLDApKSxKKEEsdGhpcy52ZWxSYW5nZS5tYXgpLEooQSx0aGlzLmZ1c09wdGlvbnMpLEooQSx0aGlzLmtleUdyb3VwKSxKKEEsdGhpcy51c0xheWVyKSxjQSgicmduaCIsQSl9fSxGbj1jbGFzcyB4dCBleHRlbmRzIGple2FydGljdWxhdGlvbj1uZXcgRGE7cmVnaW9ucz1uZXcgQXJyYXk7bmFtZT0iVW5uYW1lZCI7YmFua0xTQj0wO2JhbmtNU0I9MDtpc0dNR1NEcnVtPSExO3Byb2dyYW09MDtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IHh0O3JldHVybiB0Lm5hbWU9QS5uYW1lLHQuaXNHTUdTRHJ1bT1BLmlzR01HU0RydW0sdC5iYW5rTVNCPUEuYmFua01TQix0LmJhbmtMU0I9QS5iYW5rTFNCLHQucHJvZ3JhbT1BLnByb2dyYW0sdC5hcnRpY3VsYXRpb24uY29weUZyb20oQS5hcnRpY3VsYXRpb24pLEEucmVnaW9ucy5mb3JFYWNoKG49Pnt0LnJlZ2lvbnMucHVzaChUdC5jb3B5RnJvbShuKSl9KSx0fXN0YXRpYyByZWFkKEEsdCl7bGV0IG49dGhpcy52ZXJpZnlBbmRSZWFkTGlzdCh0LCJpbnMgIikscz1uLmZpbmQoaD0+aC5oZWFkZXI9PT0iaW5zaCIpO2lmKCFzKXRocm93IFooKSxuZXcgRXJyb3IoIk5vIGluc3RydW1lbnQgaGVhZGVyISIpO2xldCBhPSIiLHI9ZmUobiwiSU5GTyIpO2lmKHIpe2xldCBoPXJBKHIuZGF0YSk7Zm9yKDtoLmhlYWRlciE9PSJJTkFNIjspaD1yQShyLmRhdGEpO2E9aEEoaC5kYXRhLGguZGF0YS5sZW5ndGgpLnRyaW0oKX1hLmxlbmd0aDwxJiYoYT0iVW5uYW1lZCBJbnN0cnVtZW50Iik7bGV0IEk9bmV3IHh0O0kubmFtZT1hO2xldCBvPU4ocy5kYXRhLDQpLGc9TihzLmRhdGEsNCksQj1OKHMuZGF0YSw0KTtJLnByb2dyYW09QiYxMjcsSS5iYW5rTVNCPWc+Pj44JjEyNyxJLmJhbmtMU0I9ZyYxMjcsSS5pc0dNR1NEcnVtPWc+Pj4zMT4wLGJBKGAlY1BhcnNpbmcgJWMiJHthfSIlYy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCBkPWZlKG4sImxyZ24iKTtpZighZCl0aHJvdyBaKCksbmV3IEVycm9yKCJObyByZWdpb24gbGlzdCEiKTtJLmFydGljdWxhdGlvbi5yZWFkKG4pO2ZvcihsZXQgaD0wO2g8bztoKyspe2xldCBDPXJBKGQuZGF0YSk7dGhpcy52ZXJpZnlIZWFkZXIoQywiTElTVCIpO2xldCBRPWhBKEMuZGF0YSw0KTtRIT09InJnbiAiJiZRIT09InJnbjIiJiYoWigpLHRoaXMucGFyc2luZ0Vycm9yKGBJbnZhbGlkIERMUyByZWdpb24hIEV4cGVjdGVkICJyZ24gIiBvciAicmduMiIgZ290ICIke1F9ImApKTtsZXQgbT1UdC5yZWFkKEEsQyk7bSYmSS5yZWdpb25zLnB1c2gobSl9cmV0dXJuIFooKSxJfXN0YXRpYyBmcm9tU0ZQcmVzZXQoQSx0KXtsZXQgbj1uZXcgeHQ7cmV0dXJuIG4ubmFtZT1BLm5hbWUsbi5iYW5rTFNCPUEuYmFua0xTQixuLmJhbmtNU0I9QS5iYW5rTVNCLG4ucHJvZ3JhbT1BLnByb2dyYW0sbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxPQShgJWNDb252ZXJ0aW5nICVjJHtBLnRvU3RyaW5nKCl9JWMgdG8gRExTLi4uYCxjLmluZm8sYy52YWx1ZSxjLmluZm8pLEEudG9GbGF0dGVuZWRJbnN0cnVtZW50KCkuem9uZXMuZm9yRWFjaChhPT57bi5yZWdpb25zLnB1c2goVHQuZnJvbVNGWm9uZShhLHQpKX0pLFooKSxufXdyaXRlKCl7YkEoYCVjV3JpdGluZyAlYyR7dGhpcy5uYW1lfSVjLi4uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyk7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKV0sdD10aGlzLnJlZ2lvbnMubWFwKHM9PnMud3JpdGUoKSk7QS5wdXNoKHZBKCJscmduIix0LCEwKSksdGhpcy5hcnRpY3VsYXRpb24ubGVuZ3RoPjAmJkEucHVzaCh0aGlzLmFydGljdWxhdGlvbi53cml0ZSgpKTtsZXQgbj1jQSgiSU5BTSIsbmUodGhpcy5uYW1lLCEwKSk7cmV0dXJuIEEucHVzaChjQSgiSU5GTyIsbiwhMSwhMCkpLFooKSx2QSgiaW5zICIsQSwhMCl9dG9TRlByZXNldChBKXtsZXQgdD1uZXcgcGUoQSk7dC5uYW1lPXRoaXMubmFtZSx0LmJhbmtNU0I9dGhpcy5iYW5rTVNCLHQuYmFua0xTQj10aGlzLmJhbmtMU0IsdC5pc0dNR1NEcnVtPXRoaXMuaXNHTUdTRHJ1bSx0LnByb2dyYW09dGhpcy5wcm9ncmFtO2xldCBuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lLHQuY3JlYXRlWm9uZShuKSx0aGlzLmFydGljdWxhdGlvbi50b1NGWm9uZShuLmdsb2JhbFpvbmUpLHRoaXMucmVnaW9ucy5mb3JFYWNoKHM9PnMudG9TRlpvbmUobixBLnNhbXBsZXMpKSxuLmdsb2JhbGl6ZSgpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkucmV2ZXJiRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbSh5YSkpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkuY2hvcnVzRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShrYSkpLG4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzPW4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzLmZpbHRlcihzPT5zLmdlbmVyYXRvclZhbHVlIT09eFtzLmdlbmVyYXRvclR5cGVdLmRlZiksQS5hZGRQcmVzZXRzKHQpLEEuYWRkSW5zdHJ1bWVudHMobil9d3JpdGVIZWFkZXIoKXtsZXQgQT1uZXcgWSgxMik7Z0EoQSx0aGlzLnJlZ2lvbnMubGVuZ3RoKTtsZXQgdD0odGhpcy5iYW5rTVNCJjEyNyk8PDh8dGhpcy5iYW5rTFNCJjEyNztyZXR1cm4gdGhpcy5pc0dNR1NEcnVtJiYodHw9MTw8MzEpLGdBKEEsdCksZ0EoQSx0aGlzLnByb2dyYW0mMTI3KSxjQSgiaW5zaCIsQSl9fSx3YT17cHJvZ3Jlc3NGdW5jdGlvbjp2b2lkIDB9LEZhPWNsYXNzIF9uIGV4dGVuZHMgamV7c2FtcGxlcz1uZXcgQXJyYXk7aW5zdHJ1bWVudHM9bmV3IEFycmF5O3NvdW5kQmFua0luZm89e25hbWU6IlVubmFtZWQiLGNyZWF0aW9uRGF0ZTpuZXcgRGF0ZSxzb2Z0d2FyZToiU3Blc3NhU3ludGgiLHNvdW5kRW5naW5lOiJETFMgTGV2ZWwgMi4yIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtzdGF0aWMgcmVhZChBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQhIik7bGV0IHQ9bmV3IFkoQSk7T0EoIiVjUGFyc2luZyBETFMgZmlsZS4uLiIsYy5pbmZvKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJSSUZGIiksdGhpcy52ZXJpZnlUZXh0KGhBKHQsNCkudG9Mb3dlckNhc2UoKSwiZGxzICIpO2xldCBzPVtdO2Zvcig7dC5jdXJyZW50SW5kZXg8dC5sZW5ndGg7KXMucHVzaChyQSh0KSk7bGV0IGE9bmV3IF9uO2Euc291bmRCYW5rSW5mby5uYW1lPSJVbm5hbWVkIERMUyIsYS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9IlNwZXNzYVN5bnRoIERMUyIsYS5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9IihubyBkZXNjcmlwdGlvbikiO2xldCByPWZlKHMsIklORk8iKTtpZihyKWZvcig7ci5kYXRhLmN1cnJlbnRJbmRleDxyLmRhdGEubGVuZ3RoOyl7bGV0IFE9ckEoci5kYXRhKSxtPVEuaGVhZGVyLHk9aEEoUS5kYXRhLFEuc2l6ZSk7c3dpdGNoKG0pe2Nhc2UiSU5BTSI6YS5zb3VuZEJhbmtJbmZvLm5hbWU9eTticmVhaztjYXNlIklDUkQiOmEuc291bmRCYW5rSW5mby5jcmVhdGlvbkRhdGU9dHMoeSk7YnJlYWs7Y2FzZSJJQ01UIjphLnNvdW5kQmFua0luZm8uY29tbWVudD15O2JyZWFrO2Nhc2UiSVNCSiI6YS5zb3VuZEJhbmtJbmZvLnN1YmplY3Q9eTticmVhaztjYXNlIklDT1AiOmEuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9eTticmVhaztjYXNlIklFTkciOmEuc291bmRCYW5rSW5mby5lbmdpbmVlcj15O2JyZWFrO2Nhc2UiSVBSRCI6YS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9eTticmVhaztjYXNlIklTRlQiOmEuc291bmRCYW5rSW5mby5zb2Z0d2FyZT15fX10aGlzLnByaW50SW5mbyhhKTtsZXQgST1zLmZpbmQoUT0+US5oZWFkZXI9PT0iY29saCIpO2lmKCFJKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcigiTm8gY29saCBjaHVuayEiKSw1O2xldCBvPU4oSS5kYXRhLDQpO3AoYCVjSW5zdHJ1bWVudHMgYW1vdW50OiAlYyR7b31gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBnPWZlKHMsInd2cGwiKTtpZighZylyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIHd2cGwgY2h1bmshIiksNTt0aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGcsInd2cGwiKS5mb3JFYWNoKFE9PnthLnNhbXBsZXMucHVzaChMcy5yZWFkKFEpKX0pO2xldCBkPWZlKHMsImxpbnMiKTtpZighZClyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIGxpbnMgY2h1bmshIiksNTtsZXQgaD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGQsImxpbnMiKTtiQSgiJWNMb2FkaW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pLGgubGVuZ3RoIT09byYmc0EoYENvbGggcmVwb3J0ZWQgaW52YWxpZCBhbW91bnQgb2YgaW5zdHJ1bWVudHMuIERldGVjdGVkICR7aC5sZW5ndGh9LCBleHBlY3RlZCAke299YCksaC5mb3JFYWNoKFE9PnthLmluc3RydW1lbnRzLnB1c2goRm4ucmVhZChhLnNhbXBsZXMsUSkpfSksWigpO2xldCBDPXMuZmluZChRPT5RLmhlYWRlcj09PSJwZ2FsIik7aWYoQyl7cCgiJWNGb3VuZCB0aGUgaW5zdHJ1bWVudCBhbGlhc2luZyBjaHVuayEiLGMucmVjb2duaXplZCk7bGV0IFE9Qy5kYXRhO1FbMF09PT0yJiZRWzFdK1FbMl0rUVszXT09PTAmJihRLmN1cnJlbnRJbmRleCs9NCk7bGV0IG09YS5pbnN0cnVtZW50cy5maW5kKEY9PmZBLmlzWEdEcnVtcyhGLmJhbmtNU0IpfHxGLmlzR01HU0RydW0pO2lmKCFtKXJldHVybiBzQSgiTW9iaWxlQkFFIGFsaWFzaW5nIGNodW5rIHdpdGhvdXQgYSBkcnVtIHByZXNldC4gQWJvcnRpbmchIiksYTtsZXQgeT1RLnNsaWNlKFEuY3VycmVudEluZGV4LFEuY3VycmVudEluZGV4KzEyOCk7US5jdXJyZW50SW5kZXgrPTEyODtmb3IobGV0IEY9MDtGPDEyODtGKyspe2xldCBrPXlbRl07aWYoaz09PUYpY29udGludWU7bGV0IEQ9bS5yZWdpb25zLmZpbmQoTD0+TC5rZXlSYW5nZS5tYXg9PT1rJiZMLmtleVJhbmdlLm1pbj09PWspO2lmKCFEKXtzQShgSW52YWxpZCBkcnVtIGFsaWFzICR7Rn0gdG8gJHtrfTogcmVnaW9uIGRvZXMgbm90IGV4aXN0LmApO2NvbnRpbnVlfWxldCB2PVR0LmNvcHlGcm9tKEQpO3Yua2V5UmFuZ2UubWF4PUYsdi5rZXlSYW5nZS5taW49RixtLnJlZ2lvbnMucHVzaCh2KX1mb3IoUS5jdXJyZW50SW5kZXgrPTQ7US5jdXJyZW50SW5kZXg8US5sZW5ndGg7KXtsZXQgRj1OKFEsMiksaz1GJjEyNyxEPUY+PjcmMTI3LHY9UVtRLmN1cnJlbnRJbmRleCsrXSxMPVFbUS5jdXJyZW50SW5kZXgrK107TCE9PTAmJnNBKGBJbnZhbGlkIGFsaWFzIGJ5dGUuIEV4cGVjdGVkIDAsIGdvdCAke0x9YCk7bGV0IEU9TihRLDIpLFg9RSYxMjcsTz1FPj43JjEyNyxuQT1RW1EuY3VycmVudEluZGV4KytdO0w9UVtRLmN1cnJlbnRJbmRleCsrXSxMIT09MCYmc0EoYEludmFsaWQgYWxpYXMgaGVhZGVyLiBFeHBlY3RlZCAwLCBnb3QgJHtMfWApO2xldCAkPWEuaW5zdHJ1bWVudHMuZmluZChxPT5xLmJhbmtMU0I9PT1YJiZxLmJhbmtNU0I9PT1PJiZxLnByb2dyYW09PT1uQSYmIXEuaXNHTUdTRHJ1bSk7aWYoISQpe3NBKGBJbnZhbGlkIGFsaWFzLiBNaXNzaW5nIGluc3RydW1lbnQ6ICR7WH06JHtPfToke25BfWApO2NvbnRpbnVlfWxldCBWPUZuLmNvcHlGcm9tKCQpO1YuYmFua01TQj1ELFYuYmFua0xTQj1rLFYucHJvZ3JhbT12LGEuaW5zdHJ1bWVudHMucHVzaChWKX19cmV0dXJuIHAoYCVjUGFyc2luZyBmaW5pc2hlZCEgJWMiJHthLnNvdW5kQmFua0luZm8ubmFtZXx8IlVOTkFNRUQifSIlYyBoYXMgJWMke2EuaW5zdHJ1bWVudHMubGVuZ3RofSVjIGluc3RydW1lbnRzIGFuZCAlYyR7YS5zYW1wbGVzLmxlbmd0aH0lYyBzYW1wbGVzLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCksYX1zdGF0aWMgZnJvbVNGKEEpe2JBKCIlY1NhdmluZyBTRjIgdG8gRExTIGxldmVsIDIuLi4iLGMuaW5mbyk7bGV0IHQ9bmV3IF9uO3JldHVybiB0LnNvdW5kQmFua0luZm89ey4uLkEuc291bmRCYW5rSW5mb30sdC5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9KHQuc291bmRCYW5rSW5mby5jb21tZW50Pz8iKE5vIGRlc2NyaXB0aW9uKSIpK2AKQ29udmVydGVkIGZyb20gU0YyIHRvIERMUyB3aXRoIFNwZXNzYVN5bnRoYCxBLnNhbXBsZXMuZm9yRWFjaChuPT57dC5zYW1wbGVzLnB1c2goTHMuZnJvbVNGU2FtcGxlKG4pKX0pLEEucHJlc2V0cy5mb3JFYWNoKG49Pnt0Lmluc3RydW1lbnRzLnB1c2goRm4uZnJvbVNGUHJlc2V0KG4sQS5zYW1wbGVzKSl9KSxwKCIlY0NvbnZlcnNpb24gY29tcGxldGUhIixjLnJlY29nbml6ZWQpLFooKSx0fXN0YXRpYyBwcmludEluZm8oQSl7Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMoQS5zb3VuZEJhbmtJbmZvKSl7aWYodHlwZW9mIG49PSJvYmplY3QiJiYibWFqb3IiaW4gbil7bGV0IHM9bjtwKGAlYyR7dH06ICVjIiR7cy5tYWpvcn0uJHtzLm1pbm9yfSJgLGMuaW5mbyxjLnJlY29nbml6ZWQpfXAoYCVjJHt0fTogJWMke24udG9Mb2NhbGVTdHJpbmcoKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpfX1hc3luYyB3cml0ZShBPXdhKXtiQSgiJWNTYXZpbmcgRExTLi4uIixjLmluZm8pO2xldCB0PW5ldyBZKDQpO2dBKHQsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGgpO2xldCBuPWNBKCJjb2xoIix0KTtiQSgiJWNXcml0aW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pO2xldCBzPXZBKCJsaW5zIix0aGlzLmluc3RydW1lbnRzLm1hcCh5PT55LndyaXRlKCkpLCEwKTtwKCIlY1N1Y2Nlc3MhIixjLnJlY29nbml6ZWQpLFooKSxiQSgiJWNXcml0aW5nIFdBVkUgc2FtcGxlcy4uLiIsYy5pbmZvKTtsZXQgYT0wLHI9W10sST1bXSxvPTA7Zm9yKGxldCB5IG9mIHRoaXMuc2FtcGxlcyl7bGV0IEY9eS53cml0ZSgpO2F3YWl0IEE/LnByb2dyZXNzRnVuY3Rpb24/Lih5Lm5hbWUsbyx0aGlzLnNhbXBsZXMubGVuZ3RoKSxyLnB1c2goYSksYSs9Ri5sZW5ndGgsSS5wdXNoKEYpLG8rK31sZXQgZz12QSgid3ZwbCIsSSwhMCk7cCgiJWNTdWNjZWVkZWQhIixjLnJlY29nbml6ZWQpO2xldCBCPW5ldyBZKDgrNCpyLmxlbmd0aCk7Z0EoQiw4KSxnQShCLHIubGVuZ3RoKTtmb3IobGV0IHkgb2YgcilnQShCLHkpO2xldCBkPWNBKCJwdGJsIixCKTt0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9IlNwZXNzYVN5bnRoIjtsZXQgaD1bXSxDPSh5LEYpPT57aC5wdXNoKGNBKHksbmUoRiwhMCkpKX07Zm9yKGxldFt5LEZdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zb3VuZEJhbmtJbmZvKSl7bGV0IGs9eSxEPUY7aWYoRClzd2l0Y2goayl7Y2FzZSJuYW1lIjpDKCJJTkFNIixEKTticmVhaztjYXNlImNvbW1lbnQiOkMoIklDTVQiLEQpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpDKCJJQ09QIixEKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6QygiSUNSRCIsRC50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpDKCJJRU5HIixEKTticmVhaztjYXNlInByb2R1Y3QiOkMoIklQUkQiLEQpO2JyZWFrO2Nhc2Uicm9tVmVyc2lvbiI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInNvdW5kRW5naW5lIjpjYXNlInJvbUluZm8iOmJyZWFrO2Nhc2Uic29mdHdhcmUiOkMoIklTRlQiLEQpO2JyZWFrO2Nhc2Uic3ViamVjdCI6QygiSVNCSiIsRCl9fWxldCBRPXZBKCJJTkZPIixoLCEwKTtwKCIlY0NvbWJpbmluZyBldmVyeXRoaW5nLi4uIik7bGV0IG09dkEoIlJJRkYiLFtuZSgiRExTICIpLG4scyxkLGcsUV0pO3JldHVybiBwKCIlY1NhdmVkIHN1Y2Nlc3NmdWxseSEiLGMucmVjb2duaXplZCksWigpLG0uYnVmZmVyfXRvU0YoKXtPQSgiJWNDb252ZXJ0aW5nIERMUyB0byBTRjIuLi4iLGMuaW5mbyk7bGV0IEE9bmV3IEdhO3JldHVybiBBLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00LEEuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yPTIsQS5zb3VuZEJhbmtJbmZvPXsuLi50aGlzLnNvdW5kQmFua0luZm99LEEuc291bmRCYW5rSW5mby5jb21tZW50PShBLnNvdW5kQmFua0luZm8uY29tbWVudD8/IihObyBkZXNjcmlwdGlvbikiKStgCkNvbnZlcnRlZCBmcm9tIERMUyB0byBTRjIgd2l0aCBTcGVzc2FTeW50aGAsdGhpcy5zYW1wbGVzLmZvckVhY2godD0+e3QudG9TRlNhbXBsZShBKX0pLHRoaXMuaW5zdHJ1bWVudHMuZm9yRWFjaCh0PT57dC50b1NGUHJlc2V0KEEpfSksQS5mbHVzaCgpLHAoIiVjQ29udmVyc2lvbiBjb21wbGV0ZSEiLGMucmVjb2duaXplZCksWigpLEF9fSxHYT1jbGFzcyBIdHtzdGF0aWMgaXNTRjNEZWNvZGVyUmVhZHk9T3QuaXNJbml0aWFsaXplZDtzb3VuZEJhbmtJbmZvPXtuYW1lOiJVbm5hbWVkIixjcmVhdGlvbkRhdGU6bmV3IERhdGUsc29mdHdhcmU6IlNwZXNzYVN5bnRoIixzb3VuZEVuZ2luZToiRS1tdSAxMEsyIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtwcmVzZXRzPVtdO3NhbXBsZXM9W107aW5zdHJ1bWVudHM9W107ZGVmYXVsdE1vZHVsYXRvcnM9RWEubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKTtjdXN0b21EZWZhdWx0TW9kdWxhdG9ycz0hMTtfaXNYR0Jhbms9ITE7Z2V0IGlzWEdCYW5rKCl7cmV0dXJuIHRoaXMuX2lzWEdCYW5rfXN0YXRpYyBtZXJnZVNvdW5kQmFua3MoLi4uQSl7bGV0IHQ9QS5zaGlmdCgpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MgcHJvdmlkZWQhIik7bGV0IG49dC5wcmVzZXRzO2Zvcig7QS5sZW5ndGg7KXtsZXQgYT1BPy5zaGlmdCgpPy5wcmVzZXRzO2EmJmEuZm9yRWFjaChyPT57bi5maW5kKEk9PnIubWF0Y2hlcyhJKSk9PT12b2lkIDAmJm4ucHVzaChyKX0pfWxldCBzPW5ldyBIdDtyZXR1cm4gcy5hZGRDb21wbGV0ZVByZXNldHMobikscy5zb3VuZEJhbmtJbmZvPXsuLi50LnNvdW5kQmFua0luZm99LHN9c3RhdGljIGFzeW5jIGdldFNhbXBsZVNvdW5kQmFua0ZpbGUoKXtsZXQgQT1uZXcgSHQsdD1uZXcgRmxvYXQzMkFycmF5KDEyOCk7Zm9yKGxldCBJPTA7STwxMjg7SSsrKXRbSV09SS8xMjgqMi0xO2xldCBuPW5ldyBtcjtuLm5hbWU9IlNhdyIsbi5vcmlnaW5hbEtleT02NSxuLnBpdGNoQ29ycmVjdGlvbj0yMCxuLmxvb3BFbmQ9MTI3LG4uc2V0QXVkaW9EYXRhKHQsNDQxMDApLEEuYWRkU2FtcGxlcyhuKTtsZXQgcz1uZXcgZHQ7cy5uYW1lPSJTYXcgV2F2ZSIscy5nbG9iYWxab25lLmFkZEdlbmVyYXRvcnMobmV3IEZBKGkuaW5pdGlhbEF0dGVudWF0aW9uLDM3NSksbmV3IEZBKGkucmVsZWFzZVZvbEVudiwtMWUzKSxuZXcgRkEoaS5zYW1wbGVNb2RlcywxKSkscy5jcmVhdGVab25lKG4pLHMuY3JlYXRlWm9uZShuKS5hZGRHZW5lcmF0b3JzKG5ldyBGQShpLmZpbmVUdW5lLC05KSksQS5hZGRJbnN0cnVtZW50cyhzKTtsZXQgcj1uZXcgcGUoQSk7cmV0dXJuIHIubmFtZT0iU2F3IFdhdmUiLHIuY3JlYXRlWm9uZShzKSxBLmFkZFByZXNldHMociksQS5zb3VuZEJhbmtJbmZvLm5hbWU9IkR1bW15IixBLmZsdXNoKCksYXdhaXQgQS53cml0ZVNGMigpfXN0YXRpYyBjb3B5RnJvbShBKXtsZXQgdD1uZXcgSHQ7cmV0dXJuIEEucHJlc2V0cy5mb3JFYWNoKG49PnQuY2xvbmVQcmVzZXQobikpLHQuc291bmRCYW5rSW5mbz17Li4uQS5zb3VuZEJhbmtJbmZvfSx0fWFkZENvbXBsZXRlUHJlc2V0cyhBKXt0aGlzLmFkZFByZXNldHMoLi4uQSk7bGV0IHQ9W107Zm9yKGxldCBzIG9mIEEpZm9yKGxldCBhIG9mIHMuem9uZXMpYS5pbnN0cnVtZW50JiYhdC5pbmNsdWRlcyhhLmluc3RydW1lbnQpJiZ0LnB1c2goYS5pbnN0cnVtZW50KTt0aGlzLmFkZEluc3RydW1lbnRzKC4uLnQpO2xldCBuPVtdO2ZvcihsZXQgcyBvZiB0KWZvcihsZXQgYSBvZiBzLnpvbmVzKWEuc2FtcGxlJiYhbi5pbmNsdWRlcyhhLnNhbXBsZSkmJm4ucHVzaChhLnNhbXBsZSk7dGhpcy5hZGRTYW1wbGVzKC4uLm4pfWFzeW5jIHdyaXRlRExTKEE9d2Epe3JldHVybiBGYS5mcm9tU0YodGhpcykud3JpdGUoQSl9YXN5bmMgd3JpdGVTRjIoQT1Ybil7cmV0dXJuIGtyKHRoaXMsQSl9YWRkUHJlc2V0cyguLi5BKXt0aGlzLnByZXNldHMucHVzaCguLi5BKX1hZGRJbnN0cnVtZW50cyguLi5BKXt0aGlzLmluc3RydW1lbnRzLnB1c2goLi4uQSl9YWRkU2FtcGxlcyguLi5BKXt0aGlzLnNhbXBsZXMucHVzaCguLi5BKX1jbG9uZVNhbXBsZShBKXtsZXQgdD10aGlzLnNhbXBsZXMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IFp0KEEubmFtZSxBLnNhbXBsZVJhdGUsQS5vcmlnaW5hbEtleSxBLnBpdGNoQ29ycmVjdGlvbixBLnNhbXBsZVR5cGUsQS5sb29wU3RhcnQsQS5sb29wRW5kKTtpZihBLmlzQ29tcHJlc3NlZD9uLnNldENvbXByZXNzZWREYXRhKEEuZ2V0UmF3RGF0YSghMCkpOm4uc2V0QXVkaW9EYXRhKEEuZ2V0QXVkaW9EYXRhKCksQS5zYW1wbGVSYXRlKSx0aGlzLmFkZFNhbXBsZXMobiksQS5saW5rZWRTYW1wbGUpe2xldCBzPXRoaXMuY2xvbmVTYW1wbGUoQS5saW5rZWRTYW1wbGUpO3MubGlua2VkU2FtcGxlfHxuLnNldExpbmtlZFNhbXBsZShzLG4uc2FtcGxlVHlwZSl9cmV0dXJuIG59Y2xvbmVJbnN0cnVtZW50KEEpe2xldCB0PXRoaXMuaW5zdHJ1bWVudHMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IGR0O24ubmFtZT1BLm5hbWUsbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVTYW1wbGUocy5zYW1wbGUpKS5jb3B5RnJvbShzKTtyZXR1cm4gdGhpcy5hZGRJbnN0cnVtZW50cyhuKSxufWNsb25lUHJlc2V0KEEpe2xldCB0PXRoaXMucHJlc2V0cy5maW5kKHM9PnMubmFtZT09PUEubmFtZSk7aWYodClyZXR1cm4gdDtsZXQgbj1uZXcgcGUodGhpcyk7bi5uYW1lPUEubmFtZSxuLmJhbmtNU0I9QS5iYW5rTVNCLG4uYmFua0xTQj1BLmJhbmtMU0Isbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxuLnByb2dyYW09QS5wcm9ncmFtLG4ubGlicmFyeT1BLmxpYnJhcnksbi5nZW5yZT1BLmdlbnJlLG4ubW9ycGhvbG9neT1BLm1vcnBob2xvZ3ksbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVJbnN0cnVtZW50KHMuaW5zdHJ1bWVudCkpLmNvcHlGcm9tKHMpO3JldHVybiB0aGlzLmFkZFByZXNldHMobiksbn1mbHVzaCgpe3RoaXMucHJlc2V0cy5zb3J0KHRlLnNvcnRlci5iaW5kKHRlKSksdGhpcy5wYXJzZUludGVybmFsKCl9dHJpbVNvdW5kQmFuayhBKXtsZXQgdD0ocyxhKT0+e2xldCByPTA7Zm9yKGxldCBJPTA7STxzLnpvbmVzLmxlbmd0aDtJKyspe2xldCBvPXMuem9uZXNbSV0sZz1vLmtleVJhbmdlLEI9by52ZWxSYW5nZSxkPSExO2ZvcihsZXQgaCBvZiBhKWlmKGgua2V5Pj1nLm1pbiYmaC5rZXk8PWcubWF4JiZoLnZlbG9jaXR5Pj1CLm1pbiYmaC52ZWxvY2l0eTw9Qi5tYXgpe2Q9ITA7YnJlYWt9IWQmJm8uc2FtcGxlJiYocChgJWMke28uc2FtcGxlLm5hbWV9JWMgcmVtb3ZlZCBmcm9tICVjJHtzLm5hbWV9JWMuYCxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHMuZGVsZXRlWm9uZShJKSYmKHIrKyxJLS0scChgJWMke28uc2FtcGxlLm5hbWV9JWMgZGVsZXRlZGAsYy5yZWNvZ25pemVkLGMuaW5mbykpLG8uc2FtcGxlLnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlU2FtcGxlKG8uc2FtcGxlKSl9cmV0dXJuIHJ9O09BKCIlY1RyaW1taW5nIHNvdW5kIGJhbmsuLi4iLGMuaW5mbyk7bGV0IG49QS5nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKHRoaXMpO2JBKCIlY01vZGlmeWluZyBzb3VuZCBiYW5rLi4uIixjLmluZm8pLHAoIkRldGVjdGVkIGtleXMgZm9yIG1pZGk6IixuKTtmb3IobGV0IHM9MDtzPHRoaXMucHJlc2V0cy5sZW5ndGg7cysrKXtsZXQgYT10aGlzLnByZXNldHNbc10scj1uLmdldChhKTtpZihyPT09dm9pZCAwKXAoYCVjRGVsZXRpbmcgcHJlc2V0ICVjJHthLm5hbWV9JWMgYW5kIGl0cyB6b25lc2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHRoaXMuZGVsZXRlUHJlc2V0KGEpLHMtLTtlbHNle2xldCBJPVsuLi5yXS5tYXAoZz0+e2xldCBCPWcuc3BsaXQoIi0iKTtyZXR1cm57a2V5OnBhcnNlSW50KEJbMF0pLHZlbG9jaXR5OnBhcnNlSW50KEJbMV0pfX0pO2JBKGAlY1RyaW1taW5nICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkKSxwKGBLZXlzIGZvciAke2EubmFtZX06YCxJKTtsZXQgbz0wO2ZvcihsZXQgZz0wO2c8YS56b25lcy5sZW5ndGg7ZysrKXtsZXQgQj1hLnpvbmVzW2ddLGQ9Qi5rZXlSYW5nZSxoPUIudmVsUmFuZ2UsQz0hMTtmb3IobGV0IFEgb2YgSSlpZihRLmtleT49ZC5taW4mJlEua2V5PD1kLm1heCYmUS52ZWxvY2l0eT49aC5taW4mJlEudmVsb2NpdHk8PWgubWF4JiZCLmluc3RydW1lbnQpe0M9ITA7bGV0IG09dChCLmluc3RydW1lbnQsSSk7cChgJWNUcmltbWVkIG9mZiAlYyR7bX0lYyB6b25lcyBmcm9tICVjJHtCLmluc3RydW1lbnQubmFtZX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCk7YnJlYWt9IUMmJkIuaW5zdHJ1bWVudCYmKG8rKyxhLmRlbGV0ZVpvbmUoZyksQi5pbnN0cnVtZW50LnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlSW5zdHJ1bWVudChCLmluc3RydW1lbnQpLGctLSl9cChgJWNUcmltbWVkIG9mZiAlYyR7b30lYyB6b25lcyBmcm9tICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpLFooKX19dGhpcy5yZW1vdmVVbnVzZWRFbGVtZW50cygpLHAoIiVjU291bmQgYmFuayBtb2RpZmllZCEiLGMucmVjb2duaXplZCksWigpLFooKX1yZW1vdmVVbnVzZWRFbGVtZW50cygpe3RoaXMuaW5zdHJ1bWVudHM9dGhpcy5pbnN0cnVtZW50cy5maWx0ZXIoQT0+e0EuZGVsZXRlVW51c2VkWm9uZXMoKTtsZXQgdD1BLnVzZUNvdW50PDE7cmV0dXJuIHQmJkEuZGVsZXRlKCksIXR9KSx0aGlzLnNhbXBsZXM9dGhpcy5zYW1wbGVzLmZpbHRlcihBPT57bGV0IHQ9QS51c2VDb3VudDwxO3JldHVybiB0JiZBLnVubGlua1NhbXBsZSgpLCF0fSl9ZGVsZXRlSW5zdHJ1bWVudChBKXtBLmRlbGV0ZSgpLHRoaXMuaW5zdHJ1bWVudHMuc3BsaWNlKHRoaXMuaW5zdHJ1bWVudHMuaW5kZXhPZihBKSwxKX1kZWxldGVQcmVzZXQoQSl7QS5kZWxldGUoKSx0aGlzLnByZXNldHMuc3BsaWNlKHRoaXMucHJlc2V0cy5pbmRleE9mKEEpLDEpfWRlbGV0ZVNhbXBsZShBKXtBLnVubGlua1NhbXBsZSgpLHRoaXMuc2FtcGxlcy5zcGxpY2UodGhpcy5zYW1wbGVzLmluZGV4T2YoQSksMSl9Z2V0UHJlc2V0KEEsdCl7cmV0dXJuIFFhKHRoaXMucHJlc2V0cyxBLHQpfWRlc3Ryb3lTb3VuZEJhbmsoKXt0aGlzLnByZXNldHMubGVuZ3RoPTAsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMubGVuZ3RoPTB9cGFyc2luZ0Vycm9yKEEpe3Rocm93IG5ldyBFcnJvcihgU0YgcGFyc2luZyBlcnJvcjogJHtBfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXBhcnNlSW50ZXJuYWwoKXt0aGlzLl9pc1hHQmFuaz0hMTtsZXQgQT1uZXcgU2V0KFswLDEsMiwzLDQsNSw2LDcsOCw5LDE2LDE3LDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDQwLDQxLDQ4LDU2LDU3LDU4LDY0LDY1LDY2LDEyNiwxMjddKTtmb3IobGV0IHQgb2YgdGhpcy5wcmVzZXRzKWlmKGZBLmlzWEdEcnVtcyh0LmJhbmtNU0IpJiYodGhpcy5faXNYR0Jhbms9ITAsIUEuaGFzKHQucHJvZ3JhbSkpKXt0aGlzLl9pc1hHQmFuaz0hMSxwKGAlY1RoaXMgYmFuayBpcyBub3QgdmFsaWQgWEcuIFByZXNldCAlYyR7dC50b1N0cmluZygpfSVjIGlzIG5vdCBhIHZhbGlkIFhHIGRydW0uIFhHIG1vZGUgd2lsbCB1c2UgcHJlc2V0cyBvbiBiYW5rIDEyOC5gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyk7YnJlYWt9fXByaW50SW5mbygpe2ZvcihsZXRbQSx0XW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc291bmRCYW5rSW5mbykpe2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmIm1ham9yImluIHQpe2xldCBuPXQ7cChgJWMke0F9OiAlYyIke24ubWFqb3J9LiR7bi5taW5vcn0iYCxjLmluZm8sYy5yZWNvZ25pemVkKX1wKGAlYyR7QX06ICVjJHt0LnRvTG9jYWxlU3RyaW5nKCl9YCxjLmluZm8sYy5yZWNvZ25pemVkKX19fSxicj1jbGFzcyBleHRlbmRzIEZBe2NvbnN0cnVjdG9yKGUpe2xldCBBPWUuY3VycmVudEluZGV4LHQ9ZVtBKzFdPDw4fGVbQV0sbj1qbihlW0ErMl0sZVtBKzNdKTtlLmN1cnJlbnRJbmRleCs9NCxzdXBlcih0LG4sITEpfX07ZnVuY3Rpb24gTnMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KUEucHVzaChuZXcgYnIoZS5kYXRhKSk7cmV0dXJuIEEucG9wKCksQX12YXIgdnI9Y2xhc3MgZXh0ZW5kcyBDYXtjb25zdHJ1Y3RvcihlLEEsdCxuKXtsZXQgcz10LmZpbmQocj0+ci5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IElEIGZvdW5kIGluIHByZXNldCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVtZW50IElEOiAke3MuZ2VuZXJhdG9yVmFsdWV9LCBhdmFpbGFibGUgaW5zdHJ1bWVudHM6ICR7bi5sZW5ndGh9YCk7c3VwZXIoZSxhKSx0aGlzLmFkZEdlbmVyYXRvcnMoLi4udCksdGhpcy5hZGRNb2R1bGF0b3JzKC4uLkEpfX07ZnVuY3Rpb24gTHIoZSxBLHQsbixzKXtsZXQgYT1lLmdlbixyPWUubW9kLEk9MCxvPTA7Zm9yKGxldCBnIG9mIHMpZm9yKGxldCBCPTA7QjxnLnpvbmVzQ291bnQ7QisrKXtsZXQgZD1hW28rK10saD1hW29dLEM9QS5zbGljZShkLGgpLFE9cltJKytdLG09cltJXSx5PXQuc2xpY2UoUSxtKTtDLmZpbmQoRj0+Ri5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSE9PXZvaWQgMD9nLmNyZWF0ZVNvdW5kRm9udFpvbmUoeSxDLG4pOihnLmdsb2JhbFpvbmUuYWRkR2VuZXJhdG9ycyguLi5DKSxnLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyguLi55KSl9fXZhciBOcj1jbGFzcyBleHRlbmRzIHBle3pvbmVTdGFydEluZGV4O3pvbmVzQ291bnQ9MDtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKEEpLHRoaXMubmFtZT1oQShlLmRhdGEsMjApLnJlcGxhY2UoL1xkezN9OlxkezN9LywiIiksdGhpcy5wcm9ncmFtPU4oZS5kYXRhLDIpO2xldCB0PU4oZS5kYXRhLDIpO3RoaXMuYmFua01TQj10JjEyNyx0aGlzLmlzR01HU0RydW09KHQmMTI4KT4wLHRoaXMuYmFua0xTQj10Pj44LHRoaXMuem9uZVN0YXJ0SW5kZXg9TihlLmRhdGEsMiksdGhpcy5saWJyYXJ5PU4oZS5kYXRhLDQpLHRoaXMuZ2VucmU9TihlLmRhdGEsNCksdGhpcy5tb3JwaG9sb2d5PU4oZS5kYXRhLDQpfWNyZWF0ZVNvdW5kRm9udFpvbmUoZSxBLHQpe2xldCBuPW5ldyB2cih0aGlzLGUsQSx0KTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKG4pLG59fTtmdW5jdGlvbiBVcyhlLEEpe2xldCB0PVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IG49bmV3IE5yKGUsQSk7aWYodC5sZW5ndGg+MCl7bGV0IHM9dFt0Lmxlbmd0aC0xXTtzLnpvbmVzQ291bnQ9bi56b25lU3RhcnRJbmRleC1zLnpvbmVTdGFydEluZGV4fXQucHVzaChuKX1yZXR1cm4gdC5wb3AoKSx0fXZhciBVcj1jbGFzcyBleHRlbmRzIGhhe2NvbnN0cnVjdG9yKGUsQSx0LG4pe2xldCBzPXQuZmluZChyPT5yLmdlbmVyYXRvclR5cGU9PT1pLnNhbXBsZUlEKSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBzYW1wbGUgSUQgZm91bmQgaW4gaW5zdHJ1bWVudCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzYW1wbGUgSUQ6ICR7cy5nZW5lcmF0b3JWYWx1ZX0sIGF2YWlsYWJsZSBzYW1wbGVzOiAke24ubGVuZ3RofWApO3N1cGVyKGUsYSksdGhpcy5hZGRHZW5lcmF0b3JzKC4uLnQpLHRoaXMuYWRkTW9kdWxhdG9ycyguLi5BKX19O2Z1bmN0aW9uIFRyKGUsQSx0LG4scyl7bGV0IGE9ZS5nZW4scj1lLm1vZCxJPTAsbz0wO2ZvcihsZXQgZyBvZiBzKWZvcihsZXQgQj0wO0I8Zy56b25lc0NvdW50O0IrKyl7bGV0IGQ9YVtvKytdLGg9YVtvXSxDPUEuc2xpY2UoZCxoKSxRPXJbSSsrXSxtPXJbSV0seT10LnNsaWNlKFEsbSk7Qy5maW5kKEY9PkYuZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlSUQpP2cuY3JlYXRlU291bmRGb250Wm9uZSh5LEMsbik6KGcuZ2xvYmFsWm9uZS5hZGRHZW5lcmF0b3JzKC4uLkMpLGcuZ2xvYmFsWm9uZS5hZGRNb2R1bGF0b3JzKC4uLnkpKX19dmFyIHhyPWNsYXNzIGV4dGVuZHMgZHR7em9uZVN0YXJ0SW5kZXg7em9uZXNDb3VudD0wO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5uYW1lPWhBKGUuZGF0YSwyMCksdGhpcy56b25lU3RhcnRJbmRleD1OKGUuZGF0YSwyKX1jcmVhdGVTb3VuZEZvbnRab25lKGUsQSx0KXtsZXQgbj1uZXcgVXIodGhpcyxlLEEsdCk7cmV0dXJuIHRoaXMuem9uZXMucHVzaChuKSxufX07ZnVuY3Rpb24gVHMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgdD1uZXcgeHIoZSk7aWYoQS5sZW5ndGg+MCl7bGV0IG49QVtBLmxlbmd0aC0xXTtuLnpvbmVzQ291bnQ9dC56b25lU3RhcnRJbmRleC1uLnpvbmVTdGFydEluZGV4fUEucHVzaCh0KX1yZXR1cm4gQS5wb3AoKSxBfWZ1bmN0aW9uIEduKGUpe2xldCBBPVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IHQ9ZS5kYXRhLG49Tih0LDIpLHM9Tih0LDIpLGE9am4odFt0LmN1cnJlbnRJbmRleCsrXSx0W3QuY3VycmVudEluZGV4KytdKSxyPU4odCwyKSxJPU4odCwyKTtBLnB1c2gobmV3IHlBKG4scixzLGEsSSkpfXJldHVybiBBLnBvcCgpLEF9ZnVuY3Rpb24gYnQoZSl7bGV0IEE9W10sdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKE4oZS5kYXRhLDIpKSxBLnB1c2goTihlLmRhdGEsMikpO3JldHVybnttb2Q6QSxnZW46dH19dmFyIEhyPWNsYXNzIGV4dGVuZHMgR2F7c2FtcGxlRGF0YVN0YXJ0SW5kZXg9MDtjb25zdHJ1Y3RvcihlLEE9ITApe2lmKHN1cGVyKCksQSl0aHJvdyBuZXcgRXJyb3IoIlVzaW5nIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseSBpcyBkZXByZWNhdGVkLiBVc2UgU291bmRCYW5rTG9hZGVyLmZyb21BcnJheUJ1ZmZlcigpIGluc3RlYWQuIik7bGV0IHQ9bmV3IFkoZSk7T0EoIiVjUGFyc2luZyBhIFNvdW5kRm9udDIgZmlsZS4uLiIsYy5pbmZvKSx0fHwoWigpLHRoaXMucGFyc2luZ0Vycm9yKCJObyBkYXRhIHByb3ZpZGVkISIpKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJyaWZmIik7bGV0IHM9aEEodCw0KS50b0xvd2VyQ2FzZSgpO2lmKHMhPT0ic2ZiayImJnMhPT0ic2ZwayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJzZmJrIiBvciAic2ZwayIgZ290ICIke3N9ImApO2xldCBhPXM9PT0ic2ZwayIscj1yQSh0KTt0aGlzLnZlcmlmeUhlYWRlcihyLCJsaXN0Iik7bGV0IEk9aEEoci5kYXRhLDQpO2lmKEkhPT0iSU5GTyIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJJTkZPIiBvciAiJHtJfSJgKTtsZXQgbztmb3IoO3IuZGF0YS5sZW5ndGg+ci5kYXRhLmN1cnJlbnRJbmRleDspe2xldCBQPXJBKHIuZGF0YSksRz1lZShQLmRhdGEsUC5kYXRhLmxlbmd0aCksYj1QLmhlYWRlcjtzd2l0Y2goYil7Y2FzZSJpZmlsIjpjYXNlIml2ZXIiOmxldCBLPU4oUC5kYXRhLDIpLGVBPU4oUC5kYXRhLDIpO2I9PT0iaWZpbCI/dGhpcy5zb3VuZEJhbmtJbmZvLnZlcnNpb249e21ham9yOkssbWlub3I6ZUF9OnRoaXMuc291bmRCYW5rSW5mby5yb21WZXJzaW9uPXttYWpvcjpLLG1pbm9yOmVBfTticmVhaztjYXNlIkRNT0QiOnt0aGlzLmRlZmF1bHRNb2R1bGF0b3JzPUduKFApLHRoaXMuY3VzdG9tRGVmYXVsdE1vZHVsYXRvcnM9ITA7YnJlYWt9Y2FzZSJMSVNUIjp7aEEoUC5kYXRhLDQpPT09InhkdGEiJiYocCgiJWNFeHRlbmRlZCBTRjIgZm91bmQhIixjLnJlY29nbml6ZWQpLG89UCk7YnJlYWt9Y2FzZSJJQ1JEIjp0aGlzLnNvdW5kQmFua0luZm8uY3JlYXRpb25EYXRlPXRzKGhBKFAuZGF0YSxQLmRhdGEubGVuZ3RoKSk7YnJlYWs7Y2FzZSJJU0ZUIjp0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9RzticmVhaztjYXNlIklQUkQiOnRoaXMuc291bmRCYW5rSW5mby5wcm9kdWN0PUc7YnJlYWs7Y2FzZSJJRU5HIjp0aGlzLnNvdW5kQmFua0luZm8uZW5naW5lZXI9RzticmVhaztjYXNlIklDT1AiOnRoaXMuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9RzticmVhaztjYXNlIklOQU0iOnRoaXMuc291bmRCYW5rSW5mby5uYW1lPUc7YnJlYWs7Y2FzZSJJQ01UIjp0aGlzLnNvdW5kQmFua0luZm8uY29tbWVudD1HO2JyZWFrO2Nhc2UiaXJvbSI6dGhpcy5zb3VuZEJhbmtJbmZvLnJvbUluZm89RzticmVhaztjYXNlImlzbmciOnRoaXMuc291bmRCYW5rSW5mby5zb3VuZEVuZ2luZT1HfX10aGlzLnByaW50SW5mbygpO2xldCBnPXt9O28hPT12b2lkIDAmJihnLnBoZHI9ckEoby5kYXRhKSxnLnBiYWc9ckEoby5kYXRhKSxnLnBtb2Q9ckEoby5kYXRhKSxnLnBnZW49ckEoby5kYXRhKSxnLmluc3Q9ckEoby5kYXRhKSxnLmliYWc9ckEoby5kYXRhKSxnLmltb2Q9ckEoby5kYXRhKSxnLmlnZW49ckEoby5kYXRhKSxnLnNoZHI9ckEoby5kYXRhKSk7bGV0IEI9ckEodCwhMSk7dGhpcy52ZXJpZnlIZWFkZXIoQiwibGlzdCIpLHRoaXMudmVyaWZ5VGV4dChoQSh0LDQpLCJzZHRhIikscCgiJWNWZXJpZnlpbmcgc21wbCBjaHVuay4uLiIsYy53YXJuKTtsZXQgZD1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihkLCJzbXBsIik7bGV0IGg7aWYoYSl7cCgiJWNTRjJQYWNrIGRldGVjdGVkLCBhdHRlbXB0aW5nIHRvIGRlY29kZSB0aGUgc21wbCBjaHVuay4uLiIsYy5pbmZvKTt0cnl7aD1PdC5kZWNvZGUodC5idWZmZXIuc2xpY2UodC5jdXJyZW50SW5kZXgsdC5jdXJyZW50SW5kZXgrQi5zaXplLTEyKSkuZGF0YVswXX1jYXRjaChQKXt0aHJvdyBaKCksbmV3IEVycm9yKGBTRjJQYWNrIE9nZyBWb3JiaXMgZGVjb2RlIGVycm9yOiAke1B9YCl9cChgJWNEZWNvZGVkIHRoZSBzbXBsIGNodW5rISBMZW5ndGg6ICVjJHtoLmxlbmd0aH1gLGMuaW5mbyxjLnZhbHVlKX1lbHNlIGg9dCx0aGlzLnNhbXBsZURhdGFTdGFydEluZGV4PXQuY3VycmVudEluZGV4O3AoYCVjU2tpcHBpbmcgc2FtcGxlIGNodW5rLCBsZW5ndGg6ICVjJHtCLnNpemUtMTJ9YCxjLmluZm8sYy52YWx1ZSksdC5jdXJyZW50SW5kZXgrPUIuc2l6ZS0xMixwKCIlY0xvYWRpbmcgcHJlc2V0IGRhdGEgY2h1bmsuLi4iLGMud2Fybik7bGV0IEM9ckEodCk7dGhpcy52ZXJpZnlIZWFkZXIoQywibGlzdCIpLGhBKEMuZGF0YSw0KTtsZXQgUT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKFEsInBoZHIiKTtsZXQgbT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKG0sInBiYWciKTtsZXQgeT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHksInBtb2QiKTtsZXQgRj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEYsInBnZW4iKTtsZXQgaz1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKGssImluc3QiKTtsZXQgRD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEQsImliYWciKTtsZXQgdj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHYsImltb2QiKTtsZXQgTD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEwsImlnZW4iKTtsZXQgRT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEUsInNoZHIiKSxwKCIlY1BhcnNpbmcgc2FtcGxlcy4uLiIsYy5pbmZvKSx0LmN1cnJlbnRJbmRleD10aGlzLnNhbXBsZURhdGFTdGFydEluZGV4O2xldCBYPWJzKEUsaCxvPT09dm9pZCAwKTtpZihvJiZnLnNoZHIpe2xldCBQPWJzKGcuc2hkcixuZXcgRmxvYXQzMkFycmF5KDEpLCExKTtQLmxlbmd0aD09PVgubGVuZ3RoJiZYLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLmxpbmtlZFNhbXBsZUluZGV4fD1QW2JdLmxpbmtlZFNhbXBsZUluZGV4PDwxNn0pfVguZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5zYW1wbGVzLnB1c2goLi4uWCk7bGV0IE89TnMoTCksbkE9R24odiksJD1UcyhrKTtpZihvJiZnLmluc3Qpe2xldCBQPVRzKGcuaW5zdCk7UC5sZW5ndGg9PT0kLmxlbmd0aCYmKCQuZm9yRWFjaCgoRyxiKT0+e0cubmFtZSs9UFtiXS5uYW1lLEcuem9uZVN0YXJ0SW5kZXh8PVBbYl0uem9uZVN0YXJ0SW5kZXh9KSwkLmZvckVhY2goKEcsYik9PntiPCQubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9JFtiKzFdLnpvbmVTdGFydEluZGV4LUcuem9uZVN0YXJ0SW5kZXgpfSkpfSQuZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5pbnN0cnVtZW50cy5wdXNoKC4uLiQpO2xldCBWPWJ0KEQpO2lmKG8mJmcuaWJhZyl7bGV0IFA9YnQoZy5pYmFnKTtmb3IobGV0IEc9MDtHPFYubW9kLmxlbmd0aDtHKyspVi5tb2RbR118PVAubW9kW0ddPDwxNjtmb3IobGV0IEc9MDtHPFYuZ2VuLmxlbmd0aDtHKyspVi5nZW5bR118PVAuZ2VuW0ddPDwxNn1UcihWLE8sbkEsdGhpcy5zYW1wbGVzLCQpO2xldCBxPU5zKEYpLHo9R24oeSksdEE9VXMoUSx0aGlzKTtpZihvJiZnLnBoZHIpe2xldCBQPVVzKGcucGhkcix0aGlzKTtQLmxlbmd0aD09PXRBLmxlbmd0aCYmKHRBLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLnpvbmVTdGFydEluZGV4fD1QW2JdLnpvbmVTdGFydEluZGV4fSksdEEuZm9yRWFjaCgoRyxiKT0+e2I8dEEubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9dEFbYisxXS56b25lU3RhcnRJbmRleC1HLnpvbmVTdGFydEluZGV4KX0pKX10QS5mb3JFYWNoKFA9PlAubmFtZT09PVAubmFtZS50cmltKCkpLHRoaXMuYWRkUHJlc2V0cyguLi50QSk7bGV0IGlBPWJ0KG0pO2lmKG8mJmcucGJhZyl7bGV0IFA9YnQoZy5wYmFnKTtmb3IobGV0IEc9MDtHPGlBLm1vZC5sZW5ndGg7RysrKWlBLm1vZFtHXXw9UC5tb2RbR108PDE2O2ZvcihsZXQgRz0wO0c8aUEuZ2VuLmxlbmd0aDtHKyspaUEuZ2VuW0ddfD1QLmdlbltHXTw8MTZ9THIoaUEscSx6LHRoaXMuaW5zdHJ1bWVudHMsdEEpLHRoaXMuZmx1c2goKSxwKGAlY1BhcnNpbmcgZmluaXNoZWQhICVjIiR7dGhpcy5zb3VuZEJhbmtJbmZvLm5hbWV9IiVjIGhhcyAlYyR7dGhpcy5wcmVzZXRzLmxlbmd0aH0lYyBwcmVzZXRzLAogICAgICAgICVjJHt0aGlzLmluc3RydW1lbnRzLmxlbmd0aH0lYyBpbnN0cnVtZW50cyBhbmQgJWMke3RoaXMuc2FtcGxlcy5sZW5ndGh9JWMgc2FtcGxlcy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCl9dmVyaWZ5SGVhZGVyKGUsQSl7ZS5oZWFkZXIudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBjaHVuayBoZWFkZXIhIEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLmhlYWRlci50b0xvd2VyQ2FzZSgpfSJgKSl9dmVyaWZ5VGV4dChlLEEpe2UudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBGb3VyQ0M6IEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLnRvTG93ZXJDYXNlKCl9IlxgYCkpfX0sdXQ9Y2xhc3N7c3RhdGljIGZyb21BcnJheUJ1ZmZlcihlKXtsZXQgQT1lLnNsaWNlKDgsMTIpLHQ9bmV3IFkoQSk7cmV0dXJuIGhBKHQsNCkudG9Mb3dlckNhc2UoKT09PSJkbHMgIj90aGlzLmxvYWRETFMoZSk6bmV3IEhyKGUsITEpfXN0YXRpYyBsb2FkRExTKGUpe3JldHVybiBGYS5yZWFkKGUpLnRvU0YoKX19LFJhPWNsYXNze3NvdW5kQmFua01hbmFnZXI9bmV3IFBvKHRoaXMudXBkYXRlUHJlc2V0TGlzdC5iaW5kKHRoaXMpKTttaWRpQ2hhbm5lbHM9W107a2V5TW9kaWZpZXJNYW5hZ2VyPW5ldyBBcjt0b3RhbFZvaWNlc0Ftb3VudD0wO3Byb2Nlc3NvckluaXRpYWxpemVkPU90LmlzSW5pdGlhbGl6ZWQ7Y3VycmVudFN5bnRoVGltZT0wO3NhbXBsZVJhdGU7ZW5hYmxlRWZmZWN0cz0hMDtlbmFibGVFdmVudFN5c3RlbTtvbkV2ZW50Q2FsbDtzeXN0ZW1FeGNsdXNpdmU9JG8uYmluZCh0aGlzKTtyZXNldEFsbENvbnRyb2xsZXJzPVNvLmJpbmQodGhpcyk7c2V0TWFzdGVyUGFyYW1ldGVyPXZvLmJpbmQodGhpcyk7Z2V0TWFzdGVyUGFyYW1ldGVyPUxvLmJpbmQodGhpcyk7Z2V0QWxsTWFzdGVyUGFyYW1ldGVycz1Oby5iaW5kKHRoaXMpO2dldFZvaWNlc0ZvclByZXNldD1fby5iaW5kKHRoaXMpO2tpbGxWb2ljZXM9Wm8uYmluZCh0aGlzKTtnZXRWb2ljZXM9am8uYmluZCh0aGlzKTtwcml2YXRlUHJvcHM7c2F2ZWRTbmFwc2hvdDtldmVudFF1ZXVlPVtdO3NhbXBsZVRpbWU7Y29uc3RydWN0b3IoZSxBPUZzKXtsZXQgdD0kbihBLEZzKTtpZih0aGlzLmVuYWJsZUVmZmVjdHM9dC5lbmFibGVFZmZlY3RzLHRoaXMuZW5hYmxlRXZlbnRTeXN0ZW09dC5lbmFibGVFdmVudFN5c3RlbSx0aGlzLmN1cnJlbnRTeW50aFRpbWU9dC5pbml0aWFsVGltZSx0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLnNhbXBsZVRpbWU9MS9lLGlzTmFOKHQuaW5pdGlhbFRpbWUpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkluaXRpYWwgdGltZSBvciBzYW1wbGUgcmF0ZSBpcyBOYU4hIik7dGhpcy5wcml2YXRlUHJvcHM9bmV3IHRyKHRoaXMuY2FsbEV2ZW50LmJpbmQodGhpcyksdGhpcy5nZXRWb2ljZXMuYmluZCh0aGlzKSx0aGlzLmtpbGxWb2ljZXMuYmluZCh0aGlzKSxNbyooNDQxMDAvZSksSm8qKDQ0MTAwL2UpLFZvKig0NDEwMC9lKSk7Zm9yKGxldCBuPTA7bjxSbjtuKyspdGhpcy5jcmVhdGVNSURJQ2hhbm5lbEludGVybmFsKCExKTt0aGlzLnByb2Nlc3NvckluaXRpYWxpemVkLnRoZW4oKCk9PntwKCIlY1NwZXNzYVN5bnRoIGlzIHJlYWR5ISIsYy5yZWNvZ25pemVkKX0pfWFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdChlKXt0aGlzLnNhdmVkU25hcHNob3Q9ZSxlLmFwcGx5KHRoaXMpLHAoIiVjRmluaXNoZWQgYXBwbHlpbmcgc25hcHNob3QhIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpfWdldFNuYXBzaG90KCl7cmV0dXJuIHJzLmNyZWF0ZSh0aGlzKX1zZXRFbWJlZGRlZFNvdW5kQmFuayhlLEEpe2xldCB0PXV0LmZyb21BcnJheUJ1ZmZlcihlKTt0aGlzLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHQsUnQsQSk7bGV0IG49dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnByaW9yaXR5T3JkZXI7bi5wb3AoKSxuLnVuc2hpZnQoUnQpLHRoaXMuc291bmRCYW5rTWFuYWdlci5wcmlvcml0eU9yZGVyPW4sdGhpcy5zYXZlZFNuYXBzaG90IT09dm9pZCAwJiZ0aGlzLmFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdCh0aGlzLnNhdmVkU25hcHNob3QpLHAoYCVjRW1iZWRkZWQgc291bmQgYmFuayBzZXQgYXQgb2Zmc2V0ICVjJHtBfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpfWNsZWFyRW1iZWRkZWRCYW5rKCl7dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnNvdW5kQmFua0xpc3Quc29tZShlPT5lLmlkPT09UnQpJiZ0aGlzLnNvdW5kQmFua01hbmFnZXIuZGVsZXRlU291bmRCYW5rKFJ0KX1jcmVhdGVNSURJQ2hhbm5lbCgpe3RoaXMuY3JlYXRlTUlESUNoYW5uZWxJbnRlcm5hbCghMCl9c3RvcEFsbENoYW5uZWxzKGU9ITEpe3AoIiVjU3RvcCBhbGwgcmVjZWl2ZWQhIixjLmluZm8pO2ZvcihsZXQgQSBvZiB0aGlzLm1pZGlDaGFubmVscylBLnN0b3BBbGxOb3RlcyhlKX1yZW5kZXJBdWRpbyhlLEEsdCxuPTAscz0wKXt0aGlzLnJlbmRlckF1ZGlvU3BsaXQoQSx0LEFycmF5KDE2KS5maWxsKGUpLG4scyl9cmVuZGVyQXVkaW9TcGxpdChlLEEsdCxuPTAscz0wKXtsZXQgYT10aGlzLmN1cnJlbnRTeW50aFRpbWU7Zm9yKDt0aGlzLmV2ZW50UXVldWVbMF0/LnRpbWU8PWE7KXRoaXMuZXZlbnRRdWV1ZS5zaGlmdCgpPy5jYWxsYmFjaygpO2xldCByPWVbMF0sST1lWzFdLG89QVswXSxnPUFbMV07bj1NYXRoLm1heChuLDApO2xldCBCPXN8fHRbMF1bMF0ubGVuZ3RoLW47dGhpcy50b3RhbFZvaWNlc0Ftb3VudD0wLHRoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goKGQsaCk9PntpZihkLnZvaWNlcy5sZW5ndGg8MXx8ZC5pc011dGVkKXJldHVybjtsZXQgQz1kLnZvaWNlcy5sZW5ndGgsUT1oJTE2O2QucmVuZGVyQXVkaW8odFtRXVswXSx0W1FdWzFdLHIsSSxvLGcsbixCKSx0aGlzLnRvdGFsVm9pY2VzQW1vdW50Kz1kLnZvaWNlcy5sZW5ndGgsZC52b2ljZXMubGVuZ3RoIT09QyYmZC5zZW5kQ2hhbm5lbFByb3BlcnR5KCl9KSx0aGlzLmN1cnJlbnRTeW50aFRpbWUrPUIqdGhpcy5zYW1wbGVUaW1lfWRlc3Ryb3lTeW50aFByb2Nlc3Nvcigpe3RoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goZT0+e2Uudm9pY2VzLmxlbmd0aD0wLGUuc3VzdGFpbmVkVm9pY2VzLmxlbmd0aD0wLGUubG9ja2VkQ29udHJvbGxlcnM9W10sZS5wcmVzZXQ9dm9pZCAwfSksdGhpcy5jbGVhckNhY2hlKCksdGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoPTAsdGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmRlc3Ryb3koKX1jb250cm9sbGVyQ2hhbmdlKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5jb250cm9sbGVyQ2hhbmdlKEEsdCl9bm90ZU9uKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5ub3RlT24oQSx0KX1ub3RlT2ZmKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ubm90ZU9mZihBKX1wb2x5UHJlc3N1cmUoZSxBLHQpe3RoaXMubWlkaUNoYW5uZWxzW2VdLnBvbHlQcmVzc3VyZShBLHQpfWNoYW5uZWxQcmVzc3VyZShlLEEpe3RoaXMubWlkaUNoYW5uZWxzW2VdLmNoYW5uZWxQcmVzc3VyZShBKX1waXRjaFdoZWVsKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucGl0Y2hXaGVlbChBKX1wcm9ncmFtQ2hhbmdlKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucHJvZ3JhbUNoYW5nZShBKX1wcm9jZXNzTWVzc2FnZShlLEE9MCx0PSExLG49WmEpe2xldCBzPSgpPT57bGV0IHI9QXMoZVswXSksST1yLmNoYW5uZWwrQTtzd2l0Y2goci5zdGF0dXMpe2Nhc2UgTS5ub3RlT246e2xldCBvPWVbMl07bz4wP3RoaXMubm90ZU9uKEksZVsxXSxvKTp0aGlzLm5vdGVPZmYoSSxlWzFdKTticmVha31jYXNlIE0ubm90ZU9mZjp0P3RoaXMubWlkaUNoYW5uZWxzW0ldLmtpbGxOb3RlKGVbMV0pOnRoaXMubm90ZU9mZihJLGVbMV0pO2JyZWFrO2Nhc2UgTS5waXRjaFdoZWVsOnRoaXMucGl0Y2hXaGVlbChJLGVbMl08PDd8ZVsxXSk7YnJlYWs7Y2FzZSBNLmNvbnRyb2xsZXJDaGFuZ2U6dGhpcy5jb250cm9sbGVyQ2hhbmdlKEksZVsxXSxlWzJdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTp0aGlzLnByb2dyYW1DaGFuZ2UoSSxlWzFdKTticmVhaztjYXNlIE0ucG9seVByZXNzdXJlOnRoaXMucG9seVByZXNzdXJlKEksZVswXSxlWzFdKTticmVhaztjYXNlIE0uY2hhbm5lbFByZXNzdXJlOnRoaXMuY2hhbm5lbFByZXNzdXJlKEksZVsxXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5c3RlbUV4Y2x1c2l2ZShuZXcgWShlLnNsaWNlKDEpKSxBKTticmVhaztjYXNlIE0ucmVzZXQ6dGhpcy5zdG9wQWxsQ2hhbm5lbHMoITApLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fSxhPW4udGltZTthPnRoaXMuY3VycmVudFN5bnRoVGltZT8odGhpcy5ldmVudFF1ZXVlLnB1c2goe2NhbGxiYWNrOnMuYmluZCh0aGlzKSx0aW1lOmF9KSx0aGlzLmV2ZW50UXVldWUuc29ydCgocixJKT0+ci50aW1lLUkudGltZSkpOnMoKX1jbGVhckNhY2hlKCl7dGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzPVtdfXNldE1JRElWb2x1bWUoZSl7dGhpcy5wcml2YXRlUHJvcHMubWlkaVZvbHVtZT1NYXRoLnBvdyhlLE1hdGguRSl9c2V0TWFzdGVyVHVuaW5nKGUpe2U9TWF0aC5yb3VuZChlKTtmb3IobGV0IEEgb2YgdGhpcy5taWRpQ2hhbm5lbHMpQS5zZXRDdXN0b21Db250cm9sbGVyKElBLm1hc3RlclR1bmluZyxlKX1jYWxsRXZlbnQoZSxBKXt0aGlzLm9uRXZlbnRDYWxsPy4oe3R5cGU6ZSxkYXRhOkF9KX1nZXRDYWNoZWRWb2ljZShlLEEsdCl7bGV0IG49ZS5iYW5rTVNCLHM9ZS5iYW5rTFNCLHtpc0dNR1NEcnVtOmEscHJvZ3JhbTpyfT1lO3JldHVybiBhJiYobj0xMjgscz0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXM/LltuXT8uW3NdPy5bcl0/LltBXT8uW3RdfXNldENhY2hlZFZvaWNlKGUsQSx0LG4pe2xldCBzPWUuYmFua01TQixhPWUuYmFua0xTQix7aXNHTUdTRHJ1bTpyLHByb2dyYW06SX09ZTtyJiYocz0xMjgsYT0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc118fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc109W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXXx8KHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXT1bXSksdGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldfHwodGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldPVtdKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV18fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV09W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXVtJXVtBXVt0XT1ufWNyZWF0ZU1JRElDaGFubmVsSW50ZXJuYWwoZSl7bGV0IEE9bmV3IFFyKHRoaXMsdGhpcy5wcml2YXRlUHJvcHMsdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCx0aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpO3RoaXMubWlkaUNoYW5uZWxzLnB1c2goQSksZSYmKHRoaXMuY2FsbEV2ZW50KCJuZXdDaGFubmVsIix2b2lkIDApLEEuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMubWlkaUNoYW5uZWxzW3RoaXMubWlkaUNoYW5uZWxzLmxlbmd0aC0xXS5zZXREcnVtcyghMCkpfXVwZGF0ZVByZXNldExpc3QoKXtsZXQgZT10aGlzLnNvdW5kQmFua01hbmFnZXIucHJlc2V0TGlzdDt0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInByZXNldExpc3RDaGFuZ2UiLGUpLHRoaXMuZ2V0RGVmYXVsdFByZXNldHMoKSx0aGlzLm1pZGlDaGFubmVscy5mb3JFYWNoKEE9PntBLnNldFByZXNldExvY2soITEpfSksdGhpcy5yZXNldEFsbENvbnRyb2xsZXJzKCExKX1nZXREZWZhdWx0UHJlc2V0cygpe3RoaXMucHJpdmF0ZVByb3BzLmRlZmF1bHRQcmVzZXQ9dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmdldFByZXNldCh7YmFua0xTQjowLGJhbmtNU0I6MCxwcm9ncmFtOjAsaXNHTUdTRHJ1bTohMX0sInhnIiksdGhpcy5wcml2YXRlUHJvcHMuZHJ1bVByZXNldD10aGlzLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHtiYW5rTFNCOjAsYmFua01TQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiEwfSwiZ3MiKX19O3ZhciB6dD1FZS5jb25zb2xlQ29sb3JzO3ZhciBNYT0ic3Blc3Nhc3ludGgtd29ya2xldC1wcm9jZXNzb3IiO2Z1bmN0aW9uIGJhKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fXZhciB2YT17c2tpcFRvRmlyc3ROb3RlT246ITAsaW5pdGlhbFBsYXliYWNrUmF0ZToxfTt2YXIgaXM9Y2xhc3MgZXh0ZW5kcyBLdHtldmVudHM9W107Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5RnJvbShBKSx0aGlzLmV2ZW50cz1bXX19LFd0PWNsYXNzIGV4dGVuZHMgTGV7dHJhY2tzO2VtYmVkZGVkU291bmRCYW5rPXZvaWQgMDtlbWJlZGRlZFNvdW5kQmFua1NpemU7Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMudHJhY2tzPUEudHJhY2tzLm1hcCh0PT5uZXcgaXModCkpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbmtTaXplPUE/LmVtYmVkZGVkU291bmRCYW5rPy5ieXRlTGVuZ3RofX07dmFyIF90PXtzaHVmZmxlT246MSxzaHVmZmxlT2ZmOjIsaW5kZXg6M307dmFyIGp0PWNsYXNze3N5bnRoZXNpemVyO3NlcXVlbmNlcjtwb3N0O2FsaXZlPSExO2NvbnN0cnVjdG9yKEEsdCxuKXt0aGlzLnN5bnRoZXNpemVyPW5ldyBSYShBLHQpLHRoaXMuc2VxdWVuY2VyPW5ldyBzYSh0aGlzLnN5bnRoZXNpemVyKSx0aGlzLnBvc3Q9bix0aGlzLnN5bnRoZXNpemVyLm9uRXZlbnRDYWxsPXM9Pnt0aGlzLnBvc3Qoe3R5cGU6ImV2ZW50Q2FsbCIsZGF0YTpzLGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0pfSx0aGlzLnNlcXVlbmNlci5vbkV2ZW50Q2FsbD1zPT57aWYocy50eXBlPT09InNvbmdMaXN0Q2hhbmdlIil7bGV0IHI9cy5kYXRhLm5ld1NvbmdMaXN0Lm1hcChJPT5uZXcgV3QoSSkpO3RoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOnMudHlwZSxkYXRhOntuZXdTb25nTGlzdDpyfX0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSk7cmV0dXJufXRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnMsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fXBvc3RSZWFkeShBLHQsbj1bXSl7dGhpcy5wb3N0KHt0eXBlOiJpc0Z1bGx5SW5pdGlhbGl6ZWQiLGRhdGE6e3R5cGU6QSxkYXRhOnR9LGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0sbil9cG9zdFByb2dyZXNzKEEsdCl7dGhpcy5wb3N0KHt0eXBlOiJyZW5kZXJpbmdQcm9ncmVzcyIsZGF0YTp7dHlwZTpBLGRhdGE6dH0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9ZGVzdHJveSgpe3RoaXMuc3ludGhlc2l6ZXIuZGVzdHJveVN5bnRoUHJvY2Vzc29yKCksZGVsZXRlIHRoaXMuc3ludGhlc2l6ZXIsZGVsZXRlIHRoaXMuc2VxdWVuY2VyfWhhbmRsZU1lc3NhZ2UoQSl7bGV0IHQ9QS5jaGFubmVsTnVtYmVyLG47aWYodD49MCYmKG49dGhpcy5zeW50aGVzaXplci5taWRpQ2hhbm5lbHNbdF0sbj09PXZvaWQgMCkpe0VlLlNwZXNzYVN5bnRoV2FybihgVHJ5aW5nIHRvIGFjY2VzcyBjaGFubmVsICR7dH0gd2hpY2ggZG9lcyBub3QgZXhpc3QuLi4gaWdub3JpbmchYCk7cmV0dXJufXN3aXRjaChBLnR5cGUpe2Nhc2UibWlkaU1lc3NhZ2UiOnRoaXMuc3ludGhlc2l6ZXIucHJvY2Vzc01lc3NhZ2UoQS5kYXRhLm1lc3NhZ2VEYXRhLEEuZGF0YS5jaGFubmVsT2Zmc2V0LEEuZGF0YS5mb3JjZSxBLmRhdGEub3B0aW9ucyk7YnJlYWs7Y2FzZSJjdXN0b21DY0NoYW5nZSI6bj8uc2V0Q3VzdG9tQ29udHJvbGxlcihBLmRhdGEuY2NOdW1iZXIsQS5kYXRhLmNjVmFsdWUpO2JyZWFrO2Nhc2UiY2NSZXNldCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIucmVzZXRBbGxDb250cm9sbGVycygpOm4/LnJlc2V0Q29udHJvbGxlcnMoKTticmVhaztjYXNlInNldENoYW5uZWxWaWJyYXRvIjppZih0PT09QmUpZm9yKGxldCBzIG9mIHRoaXMuc3ludGhlc2l6ZXIubWlkaUNoYW5uZWxzKUEuZGF0YS5yYXRlPT09QmU/cy5kaXNhYmxlQW5kTG9ja0dTTlJQTigpOnMuc2V0VmlicmF0byhBLmRhdGEuZGVwdGgsQS5kYXRhLnJhdGUsQS5kYXRhLmRlbGF5KTtlbHNlIEEuZGF0YS5yYXRlPT09QmU/bj8uZGlzYWJsZUFuZExvY2tHU05SUE4oKTpuPy5zZXRWaWJyYXRvKEEuZGF0YS5kZXB0aCxBLmRhdGEucmF0ZSxBLmRhdGEuZGVsYXkpO2JyZWFrO2Nhc2Uic3RvcEFsbCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIuc3RvcEFsbENoYW5uZWxzKEEuZGF0YT09PTEpOm4/LnN0b3BBbGxOb3RlcyhBLmRhdGE9PT0xKTticmVhaztjYXNlImtpbGxOb3RlcyI6dGhpcy5zeW50aGVzaXplci5raWxsVm9pY2VzKEEuZGF0YSk7YnJlYWs7Y2FzZSJtdXRlQ2hhbm5lbCI6bj8ubXV0ZUNoYW5uZWwoQS5kYXRhKTticmVhaztjYXNlImFkZE5ld0NoYW5uZWwiOnRoaXMuc3ludGhlc2l6ZXIuY3JlYXRlTUlESUNoYW5uZWwoKTticmVhaztjYXNlInNldE1hc3RlclBhcmFtZXRlciI6dGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoQS5kYXRhLnR5cGUsQS5kYXRhLmRhdGEpO2JyZWFrO2Nhc2Uic2V0RHJ1bXMiOm4/LnNldERydW1zKEEuZGF0YSk7YnJlYWs7Y2FzZSJ0cmFuc3Bvc2VDaGFubmVsIjpuPy50cmFuc3Bvc2VDaGFubmVsKEEuZGF0YS5zZW1pdG9uZXMsQS5kYXRhLmZvcmNlKTticmVhaztjYXNlImxvY2tDb250cm9sbGVyIjppZihBLmRhdGEuY29udHJvbGxlck51bWJlcj09PUJlKW4/LnNldFByZXNldExvY2soQS5kYXRhLmlzTG9ja2VkKTtlbHNle2lmKCFuKXJldHVybjtuLmxvY2tlZENvbnRyb2xsZXJzW0EuZGF0YS5jb250cm9sbGVyTnVtYmVyXT1BLmRhdGEuaXNMb2NrZWR9YnJlYWs7Y2FzZSJzZXF1ZW5jZXJTcGVjaWZpYyI6e2lmKCF0aGlzLnNlcXVlbmNlcilyZXR1cm47bGV0IHM9dGhpcy5zZXF1ZW5jZXIsYT1BLmRhdGE7c3dpdGNoKGEudHlwZSl7ZGVmYXVsdDpicmVhaztjYXNlImxvYWROZXdTb25nTGlzdCI6dHJ5e2xldCBJPWEuZGF0YS5tYXAobz0+ImR1cmF0aW9uImluIG8/TGUuY29weUZyb20obyk6TGUuZnJvbUFycmF5QnVmZmVyKG8uYmluYXJ5LG8uZmlsZU5hbWUpKTtzLmxvYWROZXdTb25nTGlzdChJKX1jYXRjaChyKXtjb25zb2xlLmVycm9yKHIpLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6cn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9YnJlYWs7Y2FzZSJwYXVzZSI6cy5wYXVzZSgpO2JyZWFrO2Nhc2UicGxheSI6cy5wbGF5KCk7YnJlYWs7Y2FzZSJzZXRUaW1lIjpzLmN1cnJlbnRUaW1lPWEuZGF0YTticmVhaztjYXNlImNoYW5nZU1JRElNZXNzYWdlU2VuZGluZyI6cy5leHRlcm5hbE1JRElQbGF5YmFjaz1hLmRhdGE7YnJlYWs7Y2FzZSJzZXRQbGF5YmFja1JhdGUiOnMucGxheWJhY2tSYXRlPWEuZGF0YTticmVhaztjYXNlInNldExvb3BDb3VudCI6cy5sb29wQ291bnQ9YS5kYXRhO2JyZWFrO2Nhc2UiY2hhbmdlU29uZyI6c3dpdGNoKGEuZGF0YS5jaGFuZ2VUeXBlKXtjYXNlIF90LnNodWZmbGVPZmY6cy5zaHVmZmxlTW9kZT0hMTticmVhaztjYXNlIF90LnNodWZmbGVPbjpzLnNodWZmbGVNb2RlPSEwO2JyZWFrO2Nhc2UgX3QuaW5kZXg6YS5kYXRhLmRhdGEhPT12b2lkIDAmJihjb25zb2xlLmxvZygiSU5ERVgiLGEuZGF0YSkscy5zb25nSW5kZXg9YS5kYXRhLmRhdGEpO2JyZWFrfWJyZWFrO2Nhc2UiZ2V0TUlESSI6aWYoIXMubWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBNSURJIGlzIGxvYWRlZCEiKTt0aGlzLnBvc3Qoe3R5cGU6InNlcXVlbmNlclJldHVybiIsZGF0YTp7dHlwZToiZ2V0TUlESSIsZGF0YTpzLm1pZGlEYXRhfSxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KTticmVhaztjYXNlInNldFNraXBUb0ZpcnN0Tm90ZSI6cy5za2lwVG9GaXJzdE5vdGVPbj1hLmRhdGE7YnJlYWt9YnJlYWt9Y2FzZSJzb3VuZEJhbmtNYW5hZ2VyIjp0cnl7bGV0IHM9dGhpcy5zeW50aGVzaXplci5zb3VuZEJhbmtNYW5hZ2VyLGE9QS5kYXRhLHI7c3dpdGNoKGEudHlwZSl7Y2FzZSJhZGRTb3VuZEJhbmsiOnI9dXQuZnJvbUFycmF5QnVmZmVyKGEuZGF0YS5zb3VuZEJhbmtCdWZmZXIpLHMuYWRkU291bmRCYW5rKHIsYS5kYXRhLmlkLGEuZGF0YS5iYW5rT2Zmc2V0KSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCk7YnJlYWs7Y2FzZSJkZWxldGVTb3VuZEJhbmsiOnMuZGVsZXRlU291bmRCYW5rKGEuZGF0YSksdGhpcy5wb3N0UmVhZHkoInNvdW5kQmFua01hbmFnZXIiLG51bGwpO2JyZWFrO2Nhc2UicmVhcnJhbmdlU291bmRCYW5rcyI6cy5wcmlvcml0eU9yZGVyPWEuZGF0YSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCl9fWNhdGNoKHMpe3RoaXMucG9zdCh7dHlwZToic291bmRCYW5rRXJyb3IiLGRhdGE6cyxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KX1icmVhaztjYXNlImtleU1vZGlmaWVyTWFuYWdlciI6e2xldCBzPUEuZGF0YSxhPXRoaXMuc3ludGhlc2l6ZXIua2V5TW9kaWZpZXJNYW5hZ2VyO3N3aXRjaChzLnR5cGUpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiYWRkTWFwcGluZyI6YS5hZGRNYXBwaW5nKHMuZGF0YS5jaGFubmVsLHMuZGF0YS5taWRpTm90ZSxzLmRhdGEubWFwcGluZyk7YnJlYWs7Y2FzZSJjbGVhck1hcHBpbmdzIjphLmNsZWFyTWFwcGluZ3MoKTticmVhaztjYXNlImRlbGV0ZU1hcHBpbmciOmEuZGVsZXRlTWFwcGluZyhzLmRhdGEuY2hhbm5lbCxzLmRhdGEubWlkaU5vdGUpfWJyZWFrfWNhc2UicmVxdWVzdFN5bnRoZXNpemVyU25hcHNob3QiOntsZXQgcz1ycy5jcmVhdGUodGhpcy5zeW50aGVzaXplcik7dGhpcy5wb3N0UmVhZHkoInN5bnRoZXNpemVyU25hcHNob3QiLHMpO2JyZWFrfWNhc2Uic2V0TG9nTGV2ZWwiOktzKEEuZGF0YS5lbmFibGVJbmZvLEEuZGF0YS5lbmFibGVXYXJuaW5nLEEuZGF0YS5lbmFibGVHcm91cCk7YnJlYWs7Y2FzZSJkZXN0cm95V29ya2xldCI6dGhpcy5hbGl2ZT0hMSx0aGlzLnN5bnRoZXNpemVyLmRlc3Ryb3lTeW50aFByb2Nlc3NvcigpLHRoaXMuZGVzdHJveSgpO2JyZWFrO2RlZmF1bHQ6RWUuU3Blc3NhU3ludGhXYXJuKCJVbnJlY29nbml6ZWQgZXZlbnQhIixBKTticmVha319fTt2YXIgJHQ9Y2xhc3MgZXh0ZW5kcyBqdHthbGl2ZT0hMDtvbmVPdXRwdXRNb2RlO3BvcnQ7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoQSx7ZW5hYmxlRWZmZWN0czohcy5vbmVPdXRwdXQsZW5hYmxlRXZlbnRTeXN0ZW06cz8uZW5hYmxlRXZlbnRTeXN0ZW0saW5pdGlhbFRpbWU6dH0sKGEscik9PntuLnBvc3RNZXNzYWdlKGEscil9KSx0aGlzLnBvcnQ9bix0aGlzLm9uZU91dHB1dE1vZGU9cy5vbmVPdXRwdXQsdGhpcy5zeW50aGVzaXplci5wcm9jZXNzb3JJbml0aWFsaXplZC50aGVuKCgpPT57dGhpcy5wb3J0Lm9ubWVzc2FnZT1hPT50aGlzLmhhbmRsZU1lc3NhZ2UoYS5kYXRhKSx0aGlzLnBvc3RSZWFkeSgic2YzRGVjb2RlciIsbnVsbCl9KX1wcm9jZXNzKEEsdCl7aWYoIXRoaXMuYWxpdmUpcmV0dXJuITE7aWYodGhpcy5zZXF1ZW5jZXIucHJvY2Vzc1RpY2soKSx0aGlzLm9uZU91dHB1dE1vZGUpe2xldCBuPXRbMF0scz1bXTtmb3IobGV0IGE9MDthPDMyO2ErPTIpcy5wdXNoKFtuW2FdLG5bYSsxXV0pO3RoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdChbXSxbXSxzKX1lbHNlIHRoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdCh0WzBdLHRbMV0sdC5zbGljZSgyKSk7cmV0dXJuITB9aGFuZGxlTWVzc2FnZShBKXtpZihBLnR5cGU9PT0ic3RhcnRPZmZsaW5lUmVuZGVyIil7dGhpcy5zdGFydE9mZmxpbmVSZW5kZXIoQS5kYXRhKTtyZXR1cm59c3VwZXIuaGFuZGxlTWVzc2FnZShBKX1zdGFydE9mZmxpbmVSZW5kZXIoQSl7aWYoIXRoaXMuc2VxdWVuY2VyKXJldHVybjtBLnNvdW5kQmFua0xpc3QuZm9yRWFjaCgobixzKT0+e3RyeXt0aGlzLnN5bnRoZXNpemVyLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHV0LmZyb21BcnJheUJ1ZmZlcihuLnNvdW5kQmFua0J1ZmZlciksYGJhbmstJHtzfWAsbi5iYW5rT2Zmc2V0KX1jYXRjaChhKXt0aGlzLnBvc3Qoe3R5cGU6InNvdW5kQmFua0Vycm9yIixkYXRhOmEsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fSksQS5zbmFwc2hvdCE9PXZvaWQgMCYmdGhpcy5zeW50aGVzaXplci5hcHBseVN5bnRoZXNpemVyU25hcHNob3QoQS5zbmFwc2hvdCksRWUuU3Blc3NhU3ludGhJbmZvKCIlY1JlbmRlcmluZyBlbmFibGVkISBTdGFydGluZyByZW5kZXIuIix6dC5pbmZvKSx0aGlzLnNlcXVlbmNlci5sb29wQ291bnQ9QS5sb29wQ291bnQsdGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoInZvaWNlQ2FwIiwxLzApO2xldCB0PWJhKEEuc2VxdWVuY2VyT3B0aW9ucyx2YSk7dGhpcy5zZXF1ZW5jZXIuc2tpcFRvRmlyc3ROb3RlT249dC5za2lwVG9GaXJzdE5vdGVPbix0aGlzLnNlcXVlbmNlci5wbGF5YmFja1JhdGU9dC5pbml0aWFsUGxheWJhY2tSYXRlO3RyeXt0aGlzLnNlcXVlbmNlci5sb2FkTmV3U29uZ0xpc3QoW0xlLmNvcHlGcm9tKEEubWlkaVNlcXVlbmNlKV0pLHRoaXMuc2VxdWVuY2VyLnBsYXkoKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKG4pLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6bn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9dGhpcy5wb3N0UmVhZHkoInN0YXJ0T2ZmbGluZVJlbmRlciIsbnVsbCl9fTt2YXIgSXM9Y2xhc3MgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3J7cHJvY2Vzcztjb3JlO2NvbnN0cnVjdG9yKEEpe3N1cGVyKCksdGhpcy5jb3JlPW5ldyAkdChzYW1wbGVSYXRlLGN1cnJlbnRUaW1lLHRoaXMucG9ydCxBLnByb2Nlc3Nvck9wdGlvbnMpLHRoaXMucHJvY2Vzcz10aGlzLmNvcmUucHJvY2Vzcy5iaW5kKHRoaXMuY29yZSl9fTtyZWdpc3RlclByb2Nlc3NvcihNYSxJcyk7RWUuU3Blc3NhU3ludGhJbmZvKCIlY1Byb2Nlc3NvciBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCEiLHp0LnJlY29nbml6ZWQpOwovLyMgc291cmNlTWFwcGluZ1VSTD1zcGVzc2FzeW50aF9wcm9jZXNzb3IubWluLmpzLm1hcAo=";
|
|
1535
|
-
class
|
|
1538
|
+
const xU = "data:text/javascript;base64,dmFyIEZlPShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTpBKVt0XX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO3ZhciBKYT0oZT0+dHlwZW9mIEZlPCJ1Ij9GZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgRmU8InUiP0ZlOkEpW3RdfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIEZlPCJ1IilyZXR1cm4gRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxZPWNsYXNzIGV4dGVuZHMgVWludDhBcnJheXtjdXJyZW50SW5kZXg9MDtzbGljZShlLEEpe2xldCB0PXN1cGVyLnNsaWNlKGUsQSk7cmV0dXJuIHQuY3VycmVudEluZGV4PTAsdH19O2Z1bmN0aW9uIGVlKGUsQT1lLmxlbmd0aCx0PTApe2xldCBuPSIiO2ZvcihsZXQgcz0wO3M8QTtzKyspe2xldCBhPWVbdCtzXTtpZihhPT09MClyZXR1cm4gbjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufWZ1bmN0aW9uIGhBKGUsQSl7bGV0IHQ9ZS5jdXJyZW50SW5kZXg7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLGVlKGUsQSx0KX1mdW5jdGlvbiBuZShlLEE9ITEsdD0hMSl7bGV0IG49ZS5sZW5ndGg7QSYmbisrLHQmJm4lMiE9PTAmJm4rKztsZXQgcz1uZXcgWShuKTtyZXR1cm4ga0EocyxlKSxzfWZ1bmN0aW9uIGtBKGUsQSx0PTApe3Q+MCYmQS5sZW5ndGg+dCYmKEE9QS5zbGljZSgwLHQpKTtmb3IobGV0IG49MDtuPEEubGVuZ3RoO24rKyllW2UuY3VycmVudEluZGV4KytdPUEuY2hhckNvZGVBdChuKTtpZih0PkEubGVuZ3RoKWZvcihsZXQgbj0wO248dC1BLmxlbmd0aDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT0wO3JldHVybiBlfWZ1bmN0aW9uIE4oZSxBKXtsZXQgdD14cyhlLEEsZS5jdXJyZW50SW5kZXgpO3JldHVybiBlLmN1cnJlbnRJbmRleCs9QSx0fWZ1bmN0aW9uIHhzKGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKylufD1lW3Qrc108PHMqODtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gaHQoZSxBLHQpe2ZvcihsZXQgbj0wO248dDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT1BPj5uKjgmMjU1fWZ1bmN0aW9uIEooZSxBKXtlW2UuY3VycmVudEluZGV4KytdPUEmMjU1LGVbZS5jdXJyZW50SW5kZXgrK109QT4+OH1mdW5jdGlvbiBnQShlLEEpe2h0KGUsQSw0KX1mdW5jdGlvbiBqbihlLEEpe2xldCB0PUE8PDh8ZTtyZXR1cm4gdD4zMjc2Nz90LTY1NTM2OnR9ZnVuY3Rpb24gcWEoZSl7cmV0dXJuIGU+MTI3P2UtMjU2OmV9dmFyIEhzPWNsYXNze2hlYWRlcjtzaXplO2RhdGE7Y29uc3RydWN0b3IoZSxBLHQpe3RoaXMuaGVhZGVyPWUsdGhpcy5zaXplPUEsdGhpcy5kYXRhPXR9fTtmdW5jdGlvbiByQShlLEE9ITAsdD0hMSl7bGV0IG49aEEoZSw0KSxzPU4oZSw0KTtuPT09IiImJihzPTApO2xldCBhO3JldHVybiBBP2E9ZS5zbGljZShlLmN1cnJlbnRJbmRleCxlLmN1cnJlbnRJbmRleCtzKTphPW5ldyBZKDApLChBfHx0KSYmKGUuY3VycmVudEluZGV4Kz1zLHMlMiE9PTAmJmUuY3VycmVudEluZGV4KyspLG5ldyBIcyhuLHMsYSl9ZnVuY3Rpb24gY0EoZSxBLHQ9ITEsbj0hMSl7aWYoZS5sZW5ndGghPT00KXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgbGVuZ3RoOiAke2V9YCk7bGV0IHM9OCxhPWUscj1BLmxlbmd0aDt0JiZyKys7bGV0IEk9cjtuJiYocys9NCxJKz00LGE9IkxJU1QiKTtsZXQgbz1zK3I7byUyIT09MCYmbysrO2xldCBnPW5ldyBZKG8pO3JldHVybiBrQShnLGEpLGdBKGcsSSksbiYma0EoZyxlKSxnLnNldChBLHMpLGd9ZnVuY3Rpb24gdkEoZSxBLHQ9ITEpe2xldCBuPTgscz1lLGE9QS5yZWR1Y2UoKGcsQik9PkIubGVuZ3RoK2csMCkscj1hO3QmJihuKz00LHIrPTQscz0iTElTVCIpO2xldCBJPW4rYTtJJTIhPT0wJiZJKys7bGV0IG89bmV3IFkoSSk7cmV0dXJuIGtBKG8scyksZ0EobyxyKSx0JiZrQShvLGUpLEEuZm9yRWFjaChnPT57by5zZXQoZyxuKSxuKz1nLmxlbmd0aH0pLG99ZnVuY3Rpb24gZmUoZSxBKXtyZXR1cm4gZS5maW5kKHQ9PnQuaGVhZGVyIT09IkxJU1QiPyExOih0LmRhdGEuY3VycmVudEluZGV4PTQsZWUodC5kYXRhLDQpPT09QSkpfWZ1bmN0aW9uICRuKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fWZ1bmN0aW9uIFF0KGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKyluPW48PDh8ZVt0K3NdO3JldHVybiBuPj4+MH1mdW5jdGlvbiBYZShlLEEpe2xldCB0PVF0KGUsQSxlLmN1cnJlbnRJbmRleCk7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLHR9ZnVuY3Rpb24gR3QoZSxBKXtsZXQgdD1uZXcgQXJyYXkoQSkuZmlsbCgwKTtmb3IobGV0IG49QS0xO24+PTA7bi0tKXRbbl09ZSYyNTUsZT4+PTg7cmV0dXJuIHR9ZnVuY3Rpb24gdUEoZSl7bGV0IEE9MDtmb3IoO2U7KXtsZXQgdD1lW2UuY3VycmVudEluZGV4KytdO2lmKEE9QTw8N3x0JjEyNyx0Pj43IT09MSlicmVha31yZXR1cm4gQX1mdW5jdGlvbiBDbihlKXtsZXQgQT1bZSYxMjddO2ZvcihlPj49NztlPjA7KUEudW5zaGlmdChlJjEyN3wxMjgpLGU+Pj03O3JldHVybiBBfWZ1bmN0aW9uIGZzKGUpe2U9TWF0aC5mbG9vcihlKTtsZXQgQT1NYXRoLmZsb29yKGUvNjApLHQ9TWF0aC5yb3VuZChlLUEqNjApO3JldHVybnttaW51dGVzOkEsc2Vjb25kczp0LHRpbWU6YCR7QS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9fWZ1bmN0aW9uIE1BKGUpe2xldCBBPSIiO2ZvcihsZXQgdCBvZiBlKXtsZXQgbj10LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikudG9VcHBlckNhc2UoKTtBKz1uLEErPSIgIn1yZXR1cm4gQX12YXIgYz17d2FybjoiY29sb3I6IG9yYW5nZTsiLHVucmVjb2duaXplZDoiY29sb3I6IHJlZDsiLGluZm86ImNvbG9yOiBhcXVhOyIscmVjb2duaXplZDoiY29sb3I6IGxpbWUiLHZhbHVlOiJjb2xvcjogeWVsbG93OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsifSxZczsoKCk9Pnt2YXIgZT1VaW50OEFycmF5LEE9VWludDE2QXJyYXksdD1JbnQzMkFycmF5LG49bmV3IGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLHM9bmV3IGUoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksYT1uZXcgZShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHI9ZnVuY3Rpb24oRyxiKXtmb3IodmFyIEs9bmV3IEEoMzEpLGVBPTA7ZUE8MzE7KytlQSlLW2VBXT1iKz0xPDxHW2VBLTFdO2Zvcih2YXIgYUE9bmV3IHQoS1szMF0pLGVBPTE7ZUE8MzA7KytlQSlmb3IodmFyIEdBPUtbZUFdO0dBPEtbZUErMV07KytHQSlhQVtHQV09R0EtS1tlQV08PDV8ZUE7cmV0dXJue2I6SyxyOmFBfX0sST1yKG4sMiksbz1JLmIsZz1JLnI7b1syOF09MjU4LGdbMjU4XT0yODt2YXIgQj1yKHMsMCksZD1CLmIsaD1CLnIsQz1uZXcgQSgzMjc2OCk7Zm9yKGs9MDtrPDMyNzY4OysraylRPShrJjQzNjkwKT4+MXwoayYyMTg0NSk8PDEsUT0oUSY1MjQyOCk+PjJ8KFEmMTMxMDcpPDwyLFE9KFEmNjE2ODApPj40fChRJjM4NTUpPDw0LENba109KChRJjY1MjgwKT4+OHwoUSYyNTUpPDw4KT4+MTt2YXIgUSxrLG09ZnVuY3Rpb24oRyxiLEspe2Zvcih2YXIgZUE9Ry5sZW5ndGgsYUE9MCxHQT1uZXcgQShiKTthQTxlQTsrK2FBKUdbYUFdJiYrK0dBW0dbYUFdLTFdO3ZhciBzZT1uZXcgQShiKTtmb3IoYUE9MTthQTxiOysrYUEpc2VbYUFdPXNlW2FBLTFdK0dBW2FBLTFdPDwxO3ZhciB6QTtpZihLKXt6QT1uZXcgQSgxPDxiKTt2YXIgV0E9MTUtYjtmb3IoYUE9MDthQTxlQTsrK2FBKWlmKEdbYUFdKWZvcih2YXIgTmU9YUE8PDR8R1thQV0sYWU9Yi1HW2FBXSxBQT1zZVtHW2FBXS0xXSsrPDxhZSxCQT1BQXwoMTw8YWUpLTE7QUE8PUJBOysrQUEpekFbQ1tBQV0+PldBXT1OZX1lbHNlIGZvcih6QT1uZXcgQShlQSksYUE9MDthQTxlQTsrK2FBKUdbYUFdJiYoekFbYUFdPUNbc2VbR1thQV0tMV0rK10+PjE1LUdbYUFdKTtyZXR1cm4gekF9LHk9bmV3IGUoMjg4KTtmb3Ioaz0wO2s8MTQ0Oysrayl5W2tdPTg7dmFyIGs7Zm9yKGs9MTQ0O2s8MjU2Oysrayl5W2tdPTk7dmFyIGs7Zm9yKGs9MjU2O2s8MjgwOysrayl5W2tdPTc7dmFyIGs7Zm9yKGs9MjgwO2s8Mjg4Oysrayl5W2tdPTg7dmFyIGssRj1uZXcgZSgzMik7Zm9yKGs9MDtrPDMyOysraylGW2tdPTU7dmFyIGssRD1tKHksOSwxKSx2PW0oRiw1LDEpLEw9ZnVuY3Rpb24oRyl7Zm9yKHZhciBiPUdbMF0sSz0xO0s8Ry5sZW5ndGg7KytLKUdbS10+YiYmKGI9R1tLXSk7cmV0dXJuIGJ9LEU9ZnVuY3Rpb24oRyxiLEspe3ZhciBlQT1iLzh8MDtyZXR1cm4oR1tlQV18R1tlQSsxXTw8OCk+PihiJjcpJkt9LFg9ZnVuY3Rpb24oRyxiKXt2YXIgSz1iLzh8MDtyZXR1cm4oR1tLXXxHW0srMV08PDh8R1tLKzJdPDwxNik+PihiJjcpfSxPPWZ1bmN0aW9uKEcpe3JldHVybihHKzcpLzh8MH0sbkE9ZnVuY3Rpb24oRyxiLEspe3JldHVybihiPT1udWxsfHxiPDApJiYoYj0wKSwoSz09bnVsbHx8Sz5HLmxlbmd0aCkmJihLPUcubGVuZ3RoKSxuZXcgZShHLnN1YmFycmF5KGIsSykpfSwkPVsidW5leHBlY3RlZCBFT0YiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJpbnZhbGlkIGxlbmd0aC9saXRlcmFsIiwiaW52YWxpZCBkaXN0YW5jZSIsInN0cmVhbSBmaW5pc2hlZCIsIm5vIHN0cmVhbSBoYW5kbGVyIiwsIm5vIGNhbGxiYWNrIiwiaW52YWxpZCBVVEYtOCBkYXRhIiwiZXh0cmEgZmllbGQgdG9vIGxvbmciLCJkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTkiLCJmaWxlbmFtZSB0b28gbG9uZyIsInN0cmVhbSBmaW5pc2hpbmciLCJpbnZhbGlkIHppcCBkYXRhIl0sVj1mdW5jdGlvbihHLGIsSyl7dmFyIGVBPW5ldyBFcnJvcihifHwkW0ddKTtpZihlQS5jb2RlPUcsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVBLFYpLCFLKXRocm93IGVBO3JldHVybiBlQX0scT1mdW5jdGlvbihHLGIsSyxlQSl7dmFyIGFBPUcubGVuZ3RoLEdBPWVBP2VBLmxlbmd0aDowO2lmKCFhQXx8Yi5mJiYhYi5sKXJldHVybiBLfHxuZXcgZSgwKTt2YXIgc2U9IUssekE9c2V8fGIuaSE9MixXQT1iLmk7c2UmJihLPW5ldyBlKGFBKjMpKTt2YXIgTmU9ZnVuY3Rpb24oeXQpe3ZhciBkZT1LLmxlbmd0aDtpZih5dD5kZSl7dmFyIHN0PW5ldyBlKE1hdGgubWF4KGRlKjIseXQpKTtzdC5zZXQoSyksSz1zdH19LGFlPWIuZnx8MCxBQT1iLnB8fDAsQkE9Yi5ifHwwLF9BPWIubCxVQT1iLmQsQ2U9Yi5tLGhlPWIubiwkZT1hQSo4O2Rve2lmKCFfQSl7YWU9RShHLEFBLDEpO3ZhciBVZT1FKEcsQUErMSwzKTtpZihBQSs9MyxVZSlpZihVZT09MSlfQT1ELFVBPXYsQ2U9OSxoZT01O2Vsc2UgaWYoVWU9PTIpe3ZhciBBdD1FKEcsQUEsMzEpKzI1NyxBbj1FKEcsQUErMTAsMTUpKzQsZW49QXQrRShHLEFBKzUsMzEpKzE7QUErPTE0O2Zvcih2YXIgVGU9bmV3IGUoZW4pLGxlPW5ldyBlKDE5KSxUQT0wO1RBPEFuOysrVEEpbGVbYVtUQV1dPUUoRyxBQStUQSozLDcpO0FBKz1BbiozO2Zvcih2YXIgdG49TChsZSksZnQ9KDE8PHRuKS0xLHhlPW0obGUsdG4sMSksVEE9MDtUQTxlbjspe3ZhciBldD14ZVtFKEcsQUEsZnQpXTtBQSs9ZXQmMTU7dmFyIFJBPWV0Pj40O2lmKFJBPDE2KVRlW1RBKytdPVJBO2Vsc2V7dmFyIG9lPTAsdHQ9MDtmb3IoUkE9PTE2Pyh0dD0zK0UoRyxBQSwzKSxBQSs9MixvZT1UZVtUQS0xXSk6UkE9PTE3Pyh0dD0zK0UoRyxBQSw3KSxBQSs9Myk6UkE9PTE4JiYodHQ9MTErRShHLEFBLDEyNyksQUErPTcpO3R0LS07KVRlW1RBKytdPW9lfX12YXIgbm49VGUuc3ViYXJyYXkoMCxBdCkscmU9VGUuc3ViYXJyYXkoQXQpO0NlPUwobm4pLGhlPUwocmUpLF9BPW0obm4sQ2UsMSksVUE9bShyZSxoZSwxKX1lbHNlIFYoMSk7ZWxzZXt2YXIgUkE9TyhBQSkrNCxtdD1HW1JBLTRdfEdbUkEtM108PDgsU3Q9UkErbXQ7aWYoU3Q+YUEpe1dBJiZWKDApO2JyZWFrfXpBJiZOZShCQSttdCksSy5zZXQoRy5zdWJhcnJheShSQSxTdCksQkEpLGIuYj1CQSs9bXQsYi5wPUFBPVN0KjgsYi5mPWFlO2NvbnRpbnVlfWlmKEFBPiRlKXtXQSYmVigwKTticmVha319ekEmJk5lKEJBKzEzMTA3Mik7Zm9yKHZhciBncz0oMTw8Q2UpLTEsY3M9KDE8PGhlKS0xLHB0PUFBOztwdD1BQSl7dmFyIG9lPV9BW1goRyxBQSkmZ3NdLHllPW9lPj40O2lmKEFBKz1vZSYxNSxBQT4kZSl7V0EmJlYoMCk7YnJlYWt9aWYob2V8fFYoMikseWU8MjU2KUtbQkErK109eWU7ZWxzZSBpZih5ZT09MjU2KXtwdD1BQSxfQT1udWxsO2JyZWFrfWVsc2V7dmFyIHNuPXllLTI1NDtpZih5ZT4yNjQpe3ZhciBUQT15ZS0yNTcsaWU9bltUQV07c249RShHLEFBLCgxPDxpZSktMSkrb1tUQV0sQUErPWllfXZhciBIZT1VQVtYKEcsQUEpJmNzXSxrZT1IZT4+NDtIZXx8VigzKSxBQSs9SGUmMTU7dmFyIHJlPWRba2VdO2lmKGtlPjMpe3ZhciBpZT1zW2tlXTtyZSs9WChHLEFBKSYoMTw8aWUpLTEsQUErPWllfWlmKEFBPiRlKXtXQSYmVigwKTticmVha316QSYmTmUoQkErMTMxMDcyKTt2YXIgbnQ9QkErc247aWYoQkE8cmUpe3ZhciBZZT1HQS1yZSxwQT1NYXRoLm1pbihyZSxudCk7Zm9yKFllK0JBPDAmJlYoMyk7QkE8cEE7KytCQSlLW0JBXT1lQVtZZStCQV19Zm9yKDtCQTxudDsrK0JBKUtbQkFdPUtbQkEtcmVdfX1iLmw9X0EsYi5wPXB0LGIuYj1CQSxiLmY9YWUsX0EmJihhZT0xLGIubT1DZSxiLmQ9VUEsYi5uPWhlKX13aGlsZSghYWUpO3JldHVybiBCQSE9Sy5sZW5ndGgmJnNlP25BKEssMCxCQSk6Sy5zdWJhcnJheSgwLEJBKX0sej1uZXcgZSgwKTtmdW5jdGlvbiB0QShHLGIpe3JldHVybiBxKEcse2k6Mn0sYiYmYi5vdXQsYiYmYi5kaWN0aW9uYXJ5KX12YXIgaUE9dHlwZW9mIFRleHREZWNvZGVyPCJ1IiYmbmV3IFRleHREZWNvZGVyLFA9MDt0cnl7aUEuZGVjb2RlKHose3N0cmVhbTohMH0pLFA9MX1jYXRjaHt9WXM9dEF9KSgpO3ZhciBQcz1ZcyxKcz0hMSxxcz0hMCxxdD0hMTtmdW5jdGlvbiBLcyhlLEEsdCl7SnM9ZSxxcz1BLHF0PXR9ZnVuY3Rpb24gcCguLi5lKXtKcyYmY29uc29sZS5pbmZvKC4uLmUpfWZ1bmN0aW9uIHNBKC4uLmUpe3FzJiZjb25zb2xlLndhcm4oLi4uZSl9ZnVuY3Rpb24gT0EoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXAoLi4uZSl9ZnVuY3Rpb24gYkEoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoLi4uZSl9ZnVuY3Rpb24gWigpe3F0JiZjb25zb2xlLmdyb3VwRW5kKCl9dmFyIEVlPXtjb25zb2xlQ29sb3JzOmMsU3Blc3NhU3ludGhJbmZvOnAsU3Blc3NhU3ludGhXYXJuOnNBLFNwZXNzYVN5bnRoR3JvdXBDb2xsYXBzZWQ6YkEsU3Blc3NhU3ludGhHcm91cDpPQSxTcGVzc2FTeW50aEdyb3VwRW5kOloscmVhZEJ5dGVzQXNVaW50QmlnRW5kaWFuOlF0LHJlYWRMaXR0bGVFbmRpYW46TixyZWFkQnl0ZXNBc1N0cmluZzpoQSxyZWFkVmFyaWFibGVMZW5ndGhRdWFudGl0eTp1QSxpbmZsYXRlU3luYzpQc307dmFyIFpBPWNsYXNze3RpY2tzO3N0YXR1c0J5dGU7ZGF0YTtjb25zdHJ1Y3RvcihlLEEsdCl7dGhpcy50aWNrcz1lLHRoaXMuc3RhdHVzQnl0ZT1BLHRoaXMuZGF0YT10fX07ZnVuY3Rpb24gS2EoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49dDtzd2l0Y2goQSl7Y2FzZSAxMjg6Y2FzZSAxNDQ6Y2FzZSAxNjA6Y2FzZSAxNzY6Y2FzZSAxOTI6Y2FzZSAyMDg6Y2FzZSAyMjQ6YnJlYWs7Y2FzZSAyNDA6c3dpdGNoKHQpe2Nhc2UgMDpuPS0zO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpuPS0xO2JyZWFrO2Nhc2UgMTU6bj0tMjticmVha31icmVhaztkZWZhdWx0Om49LTF9cmV0dXJuIG59ZnVuY3Rpb24gQXMoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49LTEscz1lO3JldHVybiBBPj0xMjgmJkE8PTIyNCYmKG49dCxzPUEpLHtzdGF0dXM6cyxjaGFubmVsOm59fXZhciBPYT17ODoyLDk6MiwxMDoyLDExOjIsMTI6MSwxMzoxLDE0OjJ9LE09e25vdGVPZmY6MTI4LG5vdGVPbjoxNDQscG9seVByZXNzdXJlOjE2MCxjb250cm9sbGVyQ2hhbmdlOjE3Nixwcm9ncmFtQ2hhbmdlOjE5MixjaGFubmVsUHJlc3N1cmU6MjA4LHBpdGNoV2hlZWw6MjI0LHN5c3RlbUV4Y2x1c2l2ZToyNDAsdGltZWNvZGU6MjQxLHNvbmdQb3NpdGlvbjoyNDIsc29uZ1NlbGVjdDoyNDMsdHVuZVJlcXVlc3Q6MjQ2LGNsb2NrOjI0OCxzdGFydDoyNTAsY29udGludWU6MjUxLHN0b3A6MjUyLGFjdGl2ZVNlbnNpbmc6MjU0LHJlc2V0OjI1NSxzZXF1ZW5jZU51bWJlcjowLHRleHQ6MSxjb3B5cmlnaHQ6Mix0cmFja05hbWU6MyxpbnN0cnVtZW50TmFtZTo0LGx5cmljOjUsbWFya2VyOjYsY3VlUG9pbnQ6Nyxwcm9ncmFtTmFtZTo4LG1pZGlDaGFubmVsUHJlZml4OjMyLG1pZGlQb3J0OjMzLGVuZE9mVHJhY2s6NDcsc2V0VGVtcG86ODEsc21wdGVPZmZzZXQ6ODQsdGltZVNpZ25hdHVyZTo4OCxrZXlTaWduYXR1cmU6ODksc2VxdWVuY2VTcGVjaWZpYzoxMjd9LFM9e2JhbmtTZWxlY3Q6MCxtb2R1bGF0aW9uV2hlZWw6MSxicmVhdGhDb250cm9sbGVyOjIsdW5kZWZpbmVkQ0MzOjMsZm9vdENvbnRyb2xsZXI6NCxwb3J0YW1lbnRvVGltZTo1LGRhdGFFbnRyeU1TQjo2LG1haW5Wb2x1bWU6NyxiYWxhbmNlOjgsdW5kZWZpbmVkQ0M5OjkscGFuOjEwLGV4cHJlc3Npb25Db250cm9sbGVyOjExLGVmZmVjdENvbnRyb2wxOjEyLGVmZmVjdENvbnRyb2wyOjEzLHVuZGVmaW5lZENDMTQ6MTQsdW5kZWZpbmVkQ0MxNToxNSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXIxOjE2LGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjI6MTcsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyMzoxOCxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI0OjE5LHVuZGVmaW5lZENDMjA6MjAsdW5kZWZpbmVkQ0MyMToyMSx1bmRlZmluZWRDQzIyOjIyLHVuZGVmaW5lZENDMjM6MjMsdW5kZWZpbmVkQ0MyNDoyNCx1bmRlZmluZWRDQzI1OjI1LHVuZGVmaW5lZENDMjY6MjYsdW5kZWZpbmVkQ0MyNzoyNyx1bmRlZmluZWRDQzI4OjI4LHVuZGVmaW5lZENDMjk6MjksdW5kZWZpbmVkQ0MzMDozMCx1bmRlZmluZWRDQzMxOjMxLGJhbmtTZWxlY3RMU0I6MzIsbW9kdWxhdGlvbldoZWVsTFNCOjMzLGJyZWF0aENvbnRyb2xsZXJMU0I6MzQsdW5kZWZpbmVkQ0MzTFNCOjM1LGZvb3RDb250cm9sbGVyTFNCOjM2LHBvcnRhbWVudG9UaW1lTFNCOjM3LGRhdGFFbnRyeUxTQjozOCxtYWluVm9sdW1lTFNCOjM5LGJhbGFuY2VMU0I6NDAsdW5kZWZpbmVkQ0M5TFNCOjQxLHBhbkxTQjo0MixleHByZXNzaW9uQ29udHJvbGxlckxTQjo0MyxlZmZlY3RDb250cm9sMUxTQjo0NCxlZmZlY3RDb250cm9sMkxTQjo0NSx1bmRlZmluZWRDQzE0TFNCOjQ2LHVuZGVmaW5lZENDMTVMU0I6NDcsdW5kZWZpbmVkQ0MxNkxTQjo0OCx1bmRlZmluZWRDQzE3TFNCOjQ5LHVuZGVmaW5lZENDMThMU0I6NTAsdW5kZWZpbmVkQ0MxOUxTQjo1MSx1bmRlZmluZWRDQzIwTFNCOjUyLHVuZGVmaW5lZENDMjFMU0I6NTMsdW5kZWZpbmVkQ0MyMkxTQjo1NCx1bmRlZmluZWRDQzIzTFNCOjU1LHVuZGVmaW5lZENDMjRMU0I6NTYsdW5kZWZpbmVkQ0MyNUxTQjo1Nyx1bmRlZmluZWRDQzI2TFNCOjU4LHVuZGVmaW5lZENDMjdMU0I6NTksdW5kZWZpbmVkQ0MyOExTQjo2MCx1bmRlZmluZWRDQzI5TFNCOjYxLHVuZGVmaW5lZENDMzBMU0I6NjIsdW5kZWZpbmVkQ0MzMUxTQjo2MyxzdXN0YWluUGVkYWw6NjQscG9ydGFtZW50b09uT2ZmOjY1LHNvc3RlbnV0b1BlZGFsOjY2LHNvZnRQZWRhbDo2NyxsZWdhdG9Gb290c3dpdGNoOjY4LGhvbGQyUGVkYWw6Njksc291bmRWYXJpYXRpb246NzAsZmlsdGVyUmVzb25hbmNlOjcxLHJlbGVhc2VUaW1lOjcyLGF0dGFja1RpbWU6NzMsYnJpZ2h0bmVzczo3NCxkZWNheVRpbWU6NzUsdmlicmF0b1JhdGU6NzYsdmlicmF0b0RlcHRoOjc3LHZpYnJhdG9EZWxheTo3OCxzb3VuZENvbnRyb2xsZXIxMDo3OSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI1OjgwLGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjY6ODEsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNzo4MixnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4OjgzLHBvcnRhbWVudG9Db250cm9sOjg0LHVuZGVmaW5lZENDODU6ODUsdW5kZWZpbmVkQ0M4Njo4Nix1bmRlZmluZWRDQzg3Ojg3LHVuZGVmaW5lZENDODg6ODgsdW5kZWZpbmVkQ0M4OTo4OSx1bmRlZmluZWRDQzkwOjkwLHJldmVyYkRlcHRoOjkxLHRyZW1vbG9EZXB0aDo5MixjaG9ydXNEZXB0aDo5MyxkZXR1bmVEZXB0aDo5NCxwaGFzZXJEZXB0aDo5NSxkYXRhSW5jcmVtZW50Ojk2LGRhdGFEZWNyZW1lbnQ6OTcsbm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQjo5OCxub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCOjk5LHJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6MTAwLHJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6MTAxLHVuZGVmaW5lZENDMTAyTFNCOjEwMix1bmRlZmluZWRDQzEwM0xTQjoxMDMsdW5kZWZpbmVkQ0MxMDRMU0I6MTA0LHVuZGVmaW5lZENDMTA1TFNCOjEwNSx1bmRlZmluZWRDQzEwNkxTQjoxMDYsdW5kZWZpbmVkQ0MxMDdMU0I6MTA3LHVuZGVmaW5lZENDMTA4TFNCOjEwOCx1bmRlZmluZWRDQzEwOUxTQjoxMDksdW5kZWZpbmVkQ0MxMTBMU0I6MTEwLHVuZGVmaW5lZENDMTExTFNCOjExMSx1bmRlZmluZWRDQzExMkxTQjoxMTIsdW5kZWZpbmVkQ0MxMTNMU0I6MTEzLHVuZGVmaW5lZENDMTE0TFNCOjExNCx1bmRlZmluZWRDQzExNUxTQjoxMTUsdW5kZWZpbmVkQ0MxMTZMU0I6MTE2LHVuZGVmaW5lZENDMTE3TFNCOjExNyx1bmRlZmluZWRDQzExOExTQjoxMTgsdW5kZWZpbmVkQ0MxMTlMU0I6MTE5LGFsbFNvdW5kT2ZmOjEyMCxyZXNldEFsbENvbnRyb2xsZXJzOjEyMSxsb2NhbENvbnRyb2xPbk9mZjoxMjIsYWxsTm90ZXNPZmY6MTIzLG9tbmlNb2RlT2ZmOjEyNCxvbW5pTW9kZU9uOjEyNSxtb25vTW9kZU9uOjEyNixwb2x5TW9kZU9uOjEyN307ZnVuY3Rpb24gVmEoZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiTUlESSBoYXMgbm8gdHJhY2tzISIpO2xldCBBPVtdO2ZvcihsZXQgcyBvZiBlLnRyYWNrcyl7bGV0IGE9W10scj0wLEk7Zm9yKGxldCBvIG9mIHMuZXZlbnRzKXtsZXQgZz1NYXRoLm1heCgwLG8udGlja3Mtcik7aWYoby5zdGF0dXNCeXRlPT09TS5lbmRPZlRyYWNrKXtyKz1nO2NvbnRpbnVlfWxldCBCO28uc3RhdHVzQnl0ZTw9TS5zZXF1ZW5jZVNwZWNpZmljPyhCPVsyNTUsby5zdGF0dXNCeXRlLC4uLkNuKG8uZGF0YS5sZW5ndGgpLC4uLm8uZGF0YV0sST12b2lkIDApOm8uc3RhdHVzQnl0ZT09PU0uc3lzdGVtRXhjbHVzaXZlPyhCPVsyNDAsLi4uQ24oby5kYXRhLmxlbmd0aCksLi4uby5kYXRhXSxJPXZvaWQgMCk6KEI9W10sSSE9PW8uc3RhdHVzQnl0ZSYmKEk9by5zdGF0dXNCeXRlLEIucHVzaChvLnN0YXR1c0J5dGUpKSxCLnB1c2goLi4uby5kYXRhKSksYS5wdXNoKC4uLkNuKGcpKSxhLnB1c2goLi4uQikscis9Z31hLnB1c2goMCksYS5wdXNoKDI1NSksYS5wdXNoKE0uZW5kT2ZUcmFjayksYS5wdXNoKDApLEEucHVzaChuZXcgVWludDhBcnJheShhKSl9bGV0IHQ9KHMsYSk9Pntmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrKylhLnB1c2gocy5jaGFyQ29kZUF0KHIpKX0sbj1bXTt0KCJNVGhkIixuKSxuLnB1c2goLi4uR3QoNiw0KSksbi5wdXNoKDAsZS5mb3JtYXQpLG4ucHVzaCguLi5HdChlLnRyYWNrcy5sZW5ndGgsMikpLG4ucHVzaCguLi5HdChlLnRpbWVEaXZpc2lvbiwyKSk7Zm9yKGxldCBzIG9mIEEpdCgiTVRyayIsbiksbi5wdXNoKC4uLkd0KHMubGVuZ3RoLDQpKSxuLnB1c2goLi4ucyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcn12YXIgWGE9MzUwLFNlPTksUm49MTYsT3M9ImdzIixCZT0tMSxSdD1gU1BFU1NBU1lOVEhfRU1CRURERURfQkFOS18ke01hdGgucmFuZG9tKCl9X0RPX05PVF9ERUxFVEVgLFZzPTMyNzY3LFphPXt0aW1lOjB9LHphPS4wMyxXYT0uMDcsX2E9MSxqYT02NCxtcz0xMjEsZkE9Y2xhc3N7c3RhdGljIGdldERlZmF1bHRCYW5rKGUpe3JldHVybiBlPT09ImdtMiI/bXM6MH1zdGF0aWMgZ2V0RHJ1bUJhbmsoZSl7c3dpdGNoKGUpe2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke2V9IGRvZXNuJ3QgaGF2ZSBhIGJhbmsgTVNCIGZvciBkcnVtcy5gKTtjYXNlImdtMiI6cmV0dXJuIDEyMDtjYXNlInhnIjpyZXR1cm4gMTI3fX1zdGF0aWMgaXNYR0RydW1zKGUpe3JldHVybiBlPT09MTIwfHxlPT09MTI2fHxlPT09MTI3fXN0YXRpYyBpc1ZhbGlkWEdNU0IoZSl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpfHxlPT09amF8fGU9PT1tc31zdGF0aWMgaXNTeXN0ZW1YRyhlKXtyZXR1cm4gZT09PSJnbTIifHxlPT09InhnIn1zdGF0aWMgYWRkQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5taW4oZStBLDEyNyl9c3RhdGljIHN1YnRyYWNrQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5tYXgoMCxlLUEpfX07ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTY3JiZlLmRhdGFbMl09PT03NiYmZS5kYXRhWzVdPT09MTI2JiZlLmRhdGFbNl09PT0wfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBlLmRhdGFbMF09PT02NSYmZS5kYXRhWzJdPT09NjYmJmUuZGF0YVszXT09PTE4JiZlLmRhdGFbNF09PT02NCYmKGUuZGF0YVs1XSYxNikhPT0wJiZlLmRhdGFbNl09PT0yMX1mdW5jdGlvbiBacyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09NjUmJmUuZGF0YVsyXT09PTY2JiZlLmRhdGFbNl09PT0xMjd9ZnVuY3Rpb24genMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTEyNiYmZS5kYXRhWzJdPT09OSYmZS5kYXRhWzNdPT09MX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09MTI2JiZlLmRhdGFbMl09PT05JiZlLmRhdGFbM109PT0zfWZ1bmN0aW9uIF9zKGUpe3JldHVybiBuZXcgWkEoZSxNLnN5c3RlbUV4Y2x1c2l2ZSxuZXcgWShbNjUsMTYsNjYsMTgsNjQsMCwxMjcsMCw2NSwyNDddKSl9dmFyIHRlPWNsYXNzIGpze3N0YXRpYyB0b01JRElTdHJpbmcoQSl7cmV0dXJuIEEuaXNHTUdTRHJ1bT9gRFJVTToke0EucHJvZ3JhbX1gOmAke0EuYmFua0xTQn06JHtBLmJhbmtNU0J9OiR7QS5wcm9ncmFtfWB9c3RhdGljIGZyb21NSURJU3RyaW5nKEEpe2xldCB0PUEuc3BsaXQoIjoiKTtpZih0Lmxlbmd0aD4zfHx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBNSURJIHN0cmluZzoiKTtyZXR1cm4gQS5zdGFydHNXaXRoKCJEUlVNIik/e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTpwYXJzZUludCh0WzFdKSxpc0dNR1NEcnVtOiEwfTp7YmFua0xTQjpwYXJzZUludCh0WzBdKSxiYW5rTVNCOnBhcnNlSW50KHRbMV0pLHByb2dyYW06cGFyc2VJbnQodFsyXSksaXNHTUdTRHJ1bTohMX19c3RhdGljIHRvTmFtZWRNSURJU3RyaW5nKEEpe3JldHVybmAke2pzLnRvTUlESVN0cmluZyhBKX0gJHtBLm5hbWV9YH1zdGF0aWMgbWF0Y2hlcyhBLHQpe3JldHVybiBBLmlzR01HU0RydW18fHQuaXNHTUdTRHJ1bT9BLmlzR01HU0RydW09PT10LmlzR01HU0RydW0mJkEucHJvZ3JhbT09PXQucHJvZ3JhbTpBLnByb2dyYW09PT10LnByb2dyYW0mJkEuYmFua0xTQj09PXQuYmFua0xTQiYmQS5iYW5rTVNCPT09dC5iYW5rTVNCfXN0YXRpYyBmcm9tTmFtZWRNSURJU3RyaW5nKEEpe2xldCB0PUEuaW5kZXhPZigiICIpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFtZWQgTUlESSBzdHJpbmc6ICR7QX1gKTtsZXQgbj10aGlzLmZyb21NSURJU3RyaW5nKEEuc3Vic3RyaW5nKDAsdCkpLHM9QS5zdWJzdHJpbmcodCsxKTtyZXR1cm57Li4ubixuYW1lOnN9fXN0YXRpYyBzb3J0ZXIoQSx0KXtyZXR1cm4gQS5wcm9ncmFtIT09dC5wcm9ncmFtP0EucHJvZ3JhbS10LnByb2dyYW06QS5pc0dNR1NEcnVtJiYhdC5pc0dNR1NEcnVtPzE6IUEuaXNHTUdTRHJ1bSYmdC5pc0dNR1NEcnVtPy0xOkEuYmFua01TQiE9PXQuYmFua01TQj9BLmJhbmtNU0ItdC5iYW5rTVNCOkEuYmFua0xTQi10LmJhbmtMU0J9fSwkYT0iQ3JlYXRlZCB1c2luZyBTcGVzc2FTeW50aCI7ZnVuY3Rpb24gQW8oZSxBLHQpe2xldCBuPSJnbSIscz1bXSxhPUFycmF5KGUudHJhY2tzLmxlbmd0aCkuZmlsbCgwKSxyPWUudHJhY2tzLmxlbmd0aCxJPSgpPT57bGV0IGQ9MCxoPTEvMDtyZXR1cm4gZS50cmFja3MuZm9yRWFjaCgoQyxRKT0+e2FbUV0+PUMuZXZlbnRzLmxlbmd0aHx8Qy5ldmVudHNbYVtRXV0udGlja3M8aCYmKGQ9USxoPUMuZXZlbnRzW2FbUV1dLnRpY2tzKX0pLGR9LG89QXJyYXkoZS50cmFja3MubGVuZ3RoKS5maWxsKDApLGc9MTYrTWF0aC5tYXgoLi4uZS5wb3J0Q2hhbm5lbE9mZnNldE1hcCksQj1bXTtmb3IobGV0IGQ9MDtkPGc7ZCsrKUIucHVzaCh7cHJvZ3JhbTowLGRydW1zOmQlMTY9PT1TZSxsYXN0QmFuazp2b2lkIDAsbGFzdEJhbmtMU0I6dm9pZCAwLGhhc0JhbmtTZWxlY3Q6ITF9KTtmb3IoO3I+MDspe2xldCBkPUkoKSxoPWUudHJhY2tzW2RdO2lmKGFbZF0+PWguZXZlbnRzLmxlbmd0aCl7ci0tO2NvbnRpbnVlfWxldCBDPWguZXZlbnRzW2FbZF1dO2FbZF0rKztsZXQgUT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwW29bZF1dO2lmKEMuc3RhdHVzQnl0ZT09PU0ubWlkaVBvcnQpe29bZF09Qy5kYXRhWzBdO2NvbnRpbnVlfWxldCBtPUMuc3RhdHVzQnl0ZSYyNDA7aWYobSE9PU0uY29udHJvbGxlckNoYW5nZSYmbSE9PU0ucHJvZ3JhbUNoYW5nZSYmbSE9PU0uc3lzdGVtRXhjbHVzaXZlKWNvbnRpbnVlO2lmKG09PT1NLnN5c3RlbUV4Y2x1c2l2ZSl7aWYoIVhzKEMpKXtlcyhDKT9uPSJ4ZyI6WnMoQyk/bj0iZ3MiOnpzKEMpPyhuPSJnbSIscy5wdXNoKHt0TnVtOmQsZTpDfSkpOldzKEMpJiYobj0iZ20yIik7Y29udGludWV9bGV0IEQ9WzksMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTMsMTQsMTVdW0MuZGF0YVs1XSYxNV0rUTtCW0RdLmRydW1zPSEhKEMuZGF0YVs3XT4wJiZDLmRhdGFbNV0+PjQpO2NvbnRpbnVlfWxldCB5PShDLnN0YXR1c0J5dGUmMTUpK1EsRj1CW3ldO2lmKG09PT1NLnByb2dyYW1DaGFuZ2Upe2xldCB2PXtwcm9ncmFtOkMuZGF0YVswXSxiYW5rTFNCOkYubGFzdEJhbmtMU0I/LmRhdGE/LlsxXT8/MCxiYW5rTVNCOmZBLnN1YnRyYWNrQmFua09mZnNldChGLmxhc3RCYW5rPy5kYXRhPy5bMV0/PzAsZS5iYW5rT2Zmc2V0KSxpc0dNR1NEcnVtOkYuZHJ1bXN9LEw9dC5nZXRQcmVzZXQodixuKTtpZihwKGAlY0lucHV0IHBhdGNoOiAlYyR7dGUudG9NSURJU3RyaW5nKHYpfSVjLiBDaGFubmVsICVjJHt5fSVjLiBDaGFuZ2luZyBwYXRjaCB0byAke0wudG9TdHJpbmcoKX0uYCxjLmluZm8sYy51bnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLEMuZGF0YVswXT1MLnByb2dyYW0sTC5pc0dNR1NEcnVtJiZmQS5pc1N5c3RlbVhHKG4pfHxGLmxhc3RCYW5rPT09dm9pZCAwfHwoRi5sYXN0QmFuay5kYXRhWzFdPWZBLmFkZEJhbmtPZmZzZXQoTC5iYW5rTVNCLEEsTC5pc1hHRHJ1bXMpLEYubGFzdEJhbmtMU0I9PT12b2lkIDApKWNvbnRpbnVlO0YubGFzdEJhbmtMU0IuZGF0YVsxXT1MLmJhbmtMU0I7Y29udGludWV9bGV0IGs9Qy5kYXRhWzBdPT09Uy5iYW5rU2VsZWN0TFNCO0MuZGF0YVswXSE9PVMuYmFua1NlbGVjdCYmIWt8fChGLmhhc0JhbmtTZWxlY3Q9ITAsaz9GLmxhc3RCYW5rTFNCPUM6Ri5sYXN0QmFuaz1DKX1pZihCLmZvckVhY2goKGQsaCk9PntpZihkLmhhc0JhbmtTZWxlY3QpcmV0dXJuO2xldCBDPWglMTYsUT1NLnByb2dyYW1DaGFuZ2V8QyxtPU1hdGguZmxvb3IoaC8xNikqMTYseT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwLmluZGV4T2YobSksRj1lLnRyYWNrcy5maW5kKEU9PkUucG9ydD09PXkmJkUuY2hhbm5lbHMuaGFzKEMpKTtpZihGPT09dm9pZCAwKXJldHVybjtsZXQgaz1GLmV2ZW50cy5maW5kSW5kZXgoRT0+RS5zdGF0dXNCeXRlPT09USk7aWYoaz09PS0xKXtsZXQgRT1GLmV2ZW50cy5maW5kSW5kZXgobkE9Pm5BLnN0YXR1c0J5dGU+MTI4JiZuQS5zdGF0dXNCeXRlPDI0MCYmKG5BLnN0YXR1c0J5dGUmMTUpPT09Qyk7aWYoRT09PS0xKXJldHVybjtsZXQgWD1GLmV2ZW50c1tFXS50aWNrcyxPPXQuZ2V0UHJlc2V0KHtiYW5rTVNCOjAsYmFua0xTQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiExfSxuKS5wcm9ncmFtO0YuYWRkRXZlbnQobmV3IFpBKFgsTS5wcm9ncmFtQ2hhbmdlfEMsbmV3IFkoW09dKSksRSksaz1FfXAoYCVjQWRkaW5nIGJhbmsgc2VsZWN0IGZvciAlYyR7aH1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBEPUYuZXZlbnRzW2tdLnRpY2tzLHY9dC5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAscHJvZ3JhbTpkLnByb2dyYW0saXNHTUdTRHJ1bTpkLmRydW1zfSxuKSxMPWZBLmFkZEJhbmtPZmZzZXQodi5iYW5rTVNCLEEsdi5pc1hHRHJ1bXMpO0YuYWRkRXZlbnQobmV3IFpBKEQsTS5jb250cm9sbGVyQ2hhbmdlfEMsbmV3IFkoW1MuYmFua1NlbGVjdCxMXSkpLGspfSksbiE9PSJncyImJiFmQS5pc1N5c3RlbVhHKG4pKXtmb3IobGV0IGggb2Ygcyl7bGV0IEM9ZS50cmFja3NbaC50TnVtXTtDLmRlbGV0ZUV2ZW50KEMuZXZlbnRzLmluZGV4T2YoaC5lKSl9bGV0IGQ9MDtlLnRyYWNrc1swXS5ldmVudHNbMF0uc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lJiZkKyssZS50cmFja3NbMF0uYWRkRXZlbnQoX3MoMCksZCl9fXZhciBTcz17YmFua09mZnNldDowLG1ldGFkYXRhOnt9LGNvcnJlY3RCYW5rT2Zmc2V0OiEwLHNvdW5kQmFuazp2b2lkIDB9O2Z1bmN0aW9uIGVvKGUsQSx0KXtsZXQgbj10Lm1ldGFkYXRhO2lmKE9BKCIlY1dyaXRpbmcgdGhlIFJNSURJIEZpbGUuLi4iLGMuaW5mbykscCgibWV0YWRhdGEiLG4pLHAoIkluaXRpYWwgYmFuayBvZmZzZXQiLGUuYmFua09mZnNldCksdC5jb3JyZWN0QmFua09mZnNldCl7aWYoIXQuc291bmRCYW5rKXRocm93IG5ldyBFcnJvcigiU291bmQgYmFuayBtdXN0IGJlIHByb3ZpZGVkIGlmIGNvcnJlY3RpbmcgYmFuayBvZmZzZXQuIik7QW8oZSx0LmJhbmtPZmZzZXQsdC5zb3VuZEJhbmspfWxldCBzPW5ldyBZKGUud3JpdGVNSURJKCkpO24ubmFtZT8/PWUuZ2V0TmFtZSgpLG4uY3JlYXRpb25EYXRlPz89bmV3IERhdGUsbi5jb3B5cmlnaHQ/Pz0kYSxuLnNvZnR3YXJlPz89IlNwZXNzYVN5bnRoIixPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKEk9PntsZXQgbz1JO29bMV0mJmUuc2V0Uk1JREluZm8ob1swXSxvWzFdKX0pO2xldCBhPVtdO09iamVjdC5lbnRyaWVzKGUucm1pZGlJbmZvKS5mb3JFYWNoKEk9PntsZXQgbz1JWzBdLGc9SVsxXSxCPWQ9PnthLnB1c2goY0EoZCxnKSl9O3N3aXRjaChvKXtjYXNlImFsYnVtIjpCKCJJQUxCIiksQigiSVBSRCIpO2JyZWFrO2Nhc2Uic29mdHdhcmUiOkIoIklTRlQiKTticmVhaztjYXNlImluZm9FbmNvZGluZyI6QigiSUVOQyIpO2JyZWFrO2Nhc2UiY3JlYXRpb25EYXRlIjpCKCJJQ1JEIik7YnJlYWs7Y2FzZSJwaWN0dXJlIjpCKCJJUElDIik7YnJlYWs7Y2FzZSJuYW1lIjpCKCJJTkFNIik7YnJlYWs7Y2FzZSJhcnRpc3QiOkIoIklBUlQiKTticmVhaztjYXNlImdlbnJlIjpCKCJJR05SIik7YnJlYWs7Y2FzZSJjb3B5cmlnaHQiOkIoIklDT1AiKTticmVhaztjYXNlImNvbW1lbnQiOkIoIklDTVQiKTticmVhaztjYXNlImVuZ2luZWVyIjpCKCJJRU5HIik7YnJlYWs7Y2FzZSJzdWJqZWN0IjpCKCJJU0JKIik7YnJlYWs7Y2FzZSJtaWRpRW5jb2RpbmciOkIoIk1FTkMiKTticmVha319KTtsZXQgcj1uZXcgWSgyKTtyZXR1cm4gaHQocix0LmJhbmtPZmZzZXQsMiksYS5wdXNoKGNBKCJEQk5LIixyKSkscCgiJWNGaW5pc2hlZCEiLGMuaW5mbyksWigpLHZBKCJSSUZGIixbbmUoIlJNSUQiKSxjQSgiZGF0YSIscyksdkEoIklORk8iLGEsITApLG5ldyBZKEEpXSkuYnVmZmVyfWZ1bmN0aW9uIHRvKGUsQSl7YkEoIiVjU2VhcmNoaW5nIGZvciBhbGwgdXNlZCBwcm9ncmFtcyBhbmQga2V5cy4uLiIsYy5pbmZvKTtsZXQgdD0xNitNYXRoLm1heCguLi5lLnBvcnRDaGFubmVsT2Zmc2V0TWFwKSxuPVtdLHM9ImdzIjtmb3IobGV0IEI9MDtCPHQ7QisrKXtsZXQgZD1CJTE2PT09U2U7bi5wdXNoKHtwcmVzZXQ6QS5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAsaXNHTUdTRHJ1bTpkLHByb2dyYW06MH0scyksYmFua01TQjowLGJhbmtMU0I6MCxpc0RydW06ZH0pfWxldCBhPW5ldyBNYXAscj1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksST1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gbygpe2xldCBCPTAsZD0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKHtldmVudHM6aH0sQyk9PntyW0NdPj1oLmxlbmd0aHx8aFtyW0NdXS50aWNrczxkJiYoQj1DLGQ9aFtyW0NdXS50aWNrcyl9KSxCfWxldCBnPWUudHJhY2tzLm1hcChCPT5CLnBvcnQpO2Zvcig7ST4wOyl7bGV0IEI9bygpLGQ9ZS50cmFja3NbQl0uZXZlbnRzO2lmKHJbQl0+PWQubGVuZ3RoKXtJLS07Y29udGludWV9bGV0IGg9ZFtyW0JdXTtpZihyW0JdKyssaC5zdGF0dXNCeXRlPT09TS5taWRpUG9ydCl7Z1tCXT1oLmRhdGFbMF07Y29udGludWV9bGV0IEM9aC5zdGF0dXNCeXRlJjI0MDtpZihDIT09TS5ub3RlT24mJkMhPT1NLmNvbnRyb2xsZXJDaGFuZ2UmJkMhPT1NLnByb2dyYW1DaGFuZ2UmJkMhPT1NLnN5c3RlbUV4Y2x1c2l2ZSljb250aW51ZTtsZXQgUT0oaC5zdGF0dXNCeXRlJjE1KStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dfHwwLG09bltRXTtzd2l0Y2goQyl7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6bS5wcmVzZXQ9QS5nZXRQcmVzZXQoe2JhbmtNU0I6bS5iYW5rTVNCLGJhbmtMU0I6bS5iYW5rTFNCLHByb2dyYW06aC5kYXRhWzBdLGlzR01HU0RydW06bS5pc0RydW19LHMpO2JyZWFrO2Nhc2UgTS5jb250cm9sbGVyQ2hhbmdlOnN3aXRjaChoLmRhdGFbMF0pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBTLmJhbmtTZWxlY3RMU0I6bS5iYW5rTFNCPWguZGF0YVsxXTticmVhaztjYXNlIFMuYmFua1NlbGVjdDptLmJhbmtNU0I9aC5kYXRhWzFdfWJyZWFrO2Nhc2UgTS5ub3RlT246aWYoaC5kYXRhWzFdPT09MCljb250aW51ZTtsZXQgeT1hLmdldChtLnByZXNldCk7eXx8KHk9bmV3IFNldCxhLnNldChtLnByZXNldCx5KSkseS5hZGQoYCR7aC5kYXRhWzBdfS0ke2guZGF0YVsxXX1gKTticmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOntpZighWHMoaCkpe2VzKGgpJiYocz0ieGciLHAoIiVjWEcgb24gZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpKTtjb250aW51ZX1sZXQgRj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1baC5kYXRhWzVdJjE1XStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dLGs9ISEoaC5kYXRhWzddPjAmJmguZGF0YVs1XT4+NCk7bT1uW0ZdLG0uaXNEcnVtPWt9YnJlYWt9fXJldHVybiBhLmZvckVhY2goKEIsZCk9PntCLnNpemU9PT0wJiYocChgJWNEZXRlY3RlZCBjaGFuZ2UgYnV0IG5vIGtleXMgZm9yICVjJHtkLm5hbWV9YCxjLmluZm8sYy52YWx1ZSksYS5kZWxldGUoZCkpfSksWigpLGF9ZnVuY3Rpb24gbm8oZSxBPTApe2xldCB0PWg9PihoLmRhdGE9bmV3IFkoaC5kYXRhLmJ1ZmZlciksNmU3L1F0KGguZGF0YSwzKSksbj1bXSxhPWUudHJhY2tzLm1hcChoPT5oLmV2ZW50cykuZmxhdCgpO2Euc29ydCgoaCxDKT0+aC50aWNrcy1DLnRpY2tzKTtmb3IobGV0IGg9MDtoPDE2O2grKyluLnB1c2goW10pO2xldCByPTAsST02MC8oMTIwKmUudGltZURpdmlzaW9uKSxvPTAsZz0wLEI9W107Zm9yKGxldCBoPTA7aDwxNjtoKyspQi5wdXNoKFtdKTtsZXQgZD0oaCxDKT0+e2xldCBRPUJbQ10uZmluZEluZGV4KHk9PnkubWlkaU5vdGU9PT1oKSxtPUJbQ11bUV07aWYobSl7bGV0IHk9ci1tLnN0YXJ0O20ubGVuZ3RoPXksQz09PVNlJiYobS5sZW5ndGg9eTxBP0E6eSksQltDXS5zcGxpY2UoUSwxKX1nLS19O2Zvcig7bzxhLmxlbmd0aDspe2xldCBoPWFbb10sQz1oLnN0YXR1c0J5dGU+PjQsUT1oLnN0YXR1c0J5dGUmMTU7aWYoQz09PTgpZChoLmRhdGFbMF0sUSk7ZWxzZSBpZihDPT09OSlpZihoLmRhdGFbMV09PT0wKWQoaC5kYXRhWzBdLFEpO2Vsc2V7ZChoLmRhdGFbMF0sUSk7bGV0IG09e21pZGlOb3RlOmguZGF0YVswXSxzdGFydDpyLGxlbmd0aDotMSx2ZWxvY2l0eTpoLmRhdGFbMV0vMTI3fTtuW1FdLnB1c2gobSksQltRXS5wdXNoKG0pLGcrK31lbHNlIGguc3RhdHVzQnl0ZT09PTgxJiYoST02MC8odChoKSplLnRpbWVEaXZpc2lvbikpO2lmKCsrbz49YS5sZW5ndGgpYnJlYWs7cis9SSooYVtvXS50aWNrcy1oLnRpY2tzKX1yZXR1cm4gZz4wJiZCLmZvckVhY2goKGgsQyk9PntoLmZvckVhY2goUT0+e2xldCBtPXItUS5zdGFydDtRLmxlbmd0aD1tLEM9PT1TZSYmKFEubGVuZ3RoPW08QT9BOm0pfSl9KSxufXZhciB2dD17bGluZWFyOjAsbmVhcmVzdE5laWdoYm9yOjEsaGVybWl0ZToyfSxobj17c291bmRDYW52YXNUZXh0OjAseWFtYWhhWEdUZXh0OjEsc291bmRDYW52YXNEb3RNYXRyaXg6Mn0sWUE9e0lkbGU6MCxSUENvYXJzZToxLFJQRmluZToyLE5SUENvYXJzZTozLE5SUEZpbmU6NCxEYXRhQ29hcnNlOjUsRGF0YUZpbmU6Nn0sSUE9e2NoYW5uZWxUdW5pbmc6MCxjaGFubmVsVHJhbnNwb3NlRmluZToxLG1vZHVsYXRpb25NdWx0aXBsaWVyOjIsbWFzdGVyVHVuaW5nOjMsY2hhbm5lbFR1bmluZ1NlbWl0b25lczo0LGNoYW5uZWxLZXlTaGlmdDo1LHNmMk5QUk5HZW5lcmF0b3JMU0I6Nn07ZnVuY3Rpb24gcWUoZSxBLHQsbil7cmV0dXJuIG5ldyBaQShuLE0uY29udHJvbGxlckNoYW5nZXxlJTE2LG5ldyBZKFtBLHRdKSl9ZnVuY3Rpb24gc28oZSxBKXtsZXQgdD0xNnxbMSwyLDMsNCw1LDYsNyw4LDAsOSwxMCwxMSwxMiwxMywxNCwxNV1bZSUxNl0sbj1bNjUsMTYsNjYsMTgsNjQsdCwyMSwxXSxhPTEyOC0oNjQrdCsyMSsxKSUxMjg7cmV0dXJuIG5ldyBaQShBLE0uc3lzdGVtRXhjbHVzaXZlLG5ldyBZKFsuLi5uLGEsMjQ3XSkpfWZ1bmN0aW9uIGFvKGUsQT1bXSx0PVtdLG49W10scz1bXSl7YkEoIiVjQXBwbHlpbmcgY2hhbmdlcyB0byB0aGUgTUlESSBmaWxlLi4uIixjLmluZm8pLHAoIkRlc2lyZWQgcHJvZ3JhbSBjaGFuZ2VzOiIsQSkscCgiRGVzaXJlZCBDQyBjaGFuZ2VzOiIsdCkscCgiRGVzaXJlZCBjaGFubmVscyB0byBjbGVhcjoiLG4pLHAoIkRlc2lyZWQgY2hhbm5lbHMgdG8gdHJhbnNwb3NlOiIscyk7bGV0IGE9bmV3IFNldDtBLmZvckVhY2goRD0+e2EuYWRkKEQuY2hhbm5lbCl9KTtsZXQgcj0iZ3MiLEk9ITEsbz1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksZz1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gQigpe2xldCBEPTAsdj0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKEwsRSk9PntvW0VdPj1MLmV2ZW50cy5sZW5ndGh8fEwuZXZlbnRzW29bRV1dLnRpY2tzPHYmJihEPUUsdj1MLmV2ZW50c1tvW0VdXS50aWNrcyl9KSxEfWxldCBkPWUudHJhY2tzLm1hcChEPT5ELnBvcnQpLGg9e30sQz0wLFE9KEQsdik9PntlLnRyYWNrc1tEXS5jaGFubmVscy5zaXplIT09MCYmKEM9PT0wJiYoQys9MTYsaFt2XT0wKSxoW3ZdPT09dm9pZCAwJiYoaFt2XT1DLEMrPTE2KSxkW0RdPXYpfTtlLnRyYWNrcy5mb3JFYWNoKChELHYpPT57USh2LEQucG9ydCl9KTtsZXQgbT1DLHk9QXJyYXkobSkuZmlsbCghMCksRj1BcnJheShtKS5maWxsKDApLGs9QXJyYXkobSkuZmlsbCgwKTtmb3Iocy5mb3JFYWNoKEQ9PntsZXQgdj1NYXRoLnRydW5jKEQua2V5U2hpZnQpLEw9RC5rZXlTaGlmdC12O0ZbRC5jaGFubmVsXT12LGtbRC5jaGFubmVsXT1MfSk7Zz4wOyl7bGV0IEQ9QigpLHY9ZS50cmFja3NbRF07aWYob1tEXT49di5ldmVudHMubGVuZ3RoKXtnLS07Y29udGludWV9bGV0IEw9b1tEXSsrLEU9di5ldmVudHNbTF0sWD0oKT0+e3YuZGVsZXRlRXZlbnQoTCksb1tEXS0tfSxPPSh6LHRBPTApPT57di5hZGRFdmVudCh6LEwrdEEpLG9bRF0rK30sbkE9aFtkW0RdXXx8MDtpZihFLnN0YXR1c0J5dGU9PT1NLm1pZGlQb3J0KXtRKEQsRS5kYXRhWzBdKTtjb250aW51ZX1pZihFLnN0YXR1c0J5dGU8PU0uc2VxdWVuY2VTcGVjaWZpYyYmRS5zdGF0dXNCeXRlPj1NLnNlcXVlbmNlTnVtYmVyKWNvbnRpbnVlO2xldCAkPUUuc3RhdHVzQnl0ZSYyNDAsVj1FLnN0YXR1c0J5dGUmMTUscT1WK25BO2lmKG4uaW5jbHVkZXMocSkpe1goKTtjb250aW51ZX1zd2l0Y2goJCl7Y2FzZSBNLm5vdGVPbjppZih5W3FdKXt5W3FdPSExLHQuZmlsdGVyKHRBPT50QS5jaGFubmVsPT09cSkuZm9yRWFjaCh0QT0+e2xldCBpQT1xZShWLHRBLmNvbnRyb2xsZXJOdW1iZXIsdEEuY29udHJvbGxlclZhbHVlLEUudGlja3MpO08oaUEpfSk7bGV0IHo9a1txXTtpZih6IT09MCl7bGV0IHRBPXoqNjQrNjQsaUE9cWUoVixTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCxFLnRpY2tzKSxQPXFlKFYsUy5yZWdpc3RlcmVkUGFyYW1ldGVyTFNCLDEsRS50aWNrcyksRz1xZShxLFMuZGF0YUVudHJ5TVNCLHRBLEUudGlja3MpLGI9cWUoVixTLmRhdGFFbnRyeUxTQiwwLEUudGlja3MpO08oYiksTyhHKSxPKFApLE8oaUEpfWlmKGEuaGFzKHEpKXtsZXQgdEE9QS5maW5kKGVBPT5lQS5jaGFubmVsPT09cSk7aWYoIXRBKWNvbnRpbnVlO3AoYCVjU2V0dGluZyAlYyR7dEEuY2hhbm5lbH0lYyB0byAlYyR7dGUudG9NSURJU3RyaW5nKHRBKX0lYy4gVHJhY2sgbnVtOiAlYyR7RH1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgaUE9dEEuYmFua01TQixQPXRBLmJhbmtMU0IsRz10QS5wcm9ncmFtLGI9bmV3IFpBKEUudGlja3MsTS5wcm9ncmFtQ2hhbmdlfFYsbmV3IFkoW0ddKSk7TyhiKTtsZXQgSz0oZUEsYUEpPT57bGV0IEdBPXFlKFYsZUE/Uy5iYW5rU2VsZWN0TFNCOlMuYmFua1NlbGVjdCxhQSxFLnRpY2tzKTtPKEdBKX07ZkEuaXNTeXN0ZW1YRyhyKSYmdEEuaXNHTUdTRHJ1bSYmKHAoYCVjQWRkaW5nIFhHIERydW0gY2hhbmdlIG9uIHRyYWNrICVjJHtEfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpLGlBPWZBLmdldERydW1CYW5rKHIpLFA9MCksSyghMSxpQSksSyghMCxQKSx0QS5pc0dNR1NEcnVtJiYhZkEuaXNTeXN0ZW1YRyhyKSYmViE9PVNlJiYocChgJWNBZGRpbmcgR1MgRHJ1bSBjaGFuZ2Ugb24gdHJhY2sgJWMke0R9YCxjLnJlY29nbml6ZWQsYy52YWx1ZSksTyhzbyhWLEUudGlja3MpKSl9fUUuZGF0YVswXSs9RltxXTticmVhaztjYXNlIE0ubm90ZU9mZjpFLmRhdGFbMF0rPUZbcV07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6aWYoYS5oYXMocSkpe1goKTtjb250aW51ZX1icmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTp7bGV0IHo9RS5kYXRhWzBdO2lmKHQuZmluZChpQT0+aUEuY2hhbm5lbD09PXEmJno9PT1pQS5jb250cm9sbGVyTnVtYmVyKSE9PXZvaWQgMCl7WCgpO2NvbnRpbnVlfSh6PT09Uy5iYW5rU2VsZWN0fHx6PT09Uy5iYW5rU2VsZWN0TFNCKSYmYS5oYXMocSkmJlgoKX1icmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOmlmKGVzKEUpKXAoIiVjWEcgc3lzdGVtIG9uIGRldGVjdGVkIixjLmluZm8pLHI9InhnIixJPSEwO2Vsc2UgaWYoRS5kYXRhWzBdPT09NjcmJkUuZGF0YVsyXT09PTc2JiZFLmRhdGFbM109PT04JiZFLmRhdGFbNV09PT0zKWEuaGFzKEUuZGF0YVs0XStuQSkmJlgoKTtlbHNlIGlmKFdzKEUpKXAoIiVjR00yIHN5c3RlbSBvbiBkZXRlY3RlZCIsYy5pbmZvKSxyPSJnbTIiLEk9ITA7ZWxzZSBpZihacyhFKSl7ST0hMCxwKCIlY0dTIG9uIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKTticmVha31lbHNlIHpzKEUpJiYocCgiJWNHTSBvbiBkZXRlY3RlZCwgcmVtb3ZpbmchIixjLmluZm8pLFgoKSxJPSExKX19aWYoIUkmJkEubGVuZ3RoPjApe2xldCBEPTA7ZS50cmFja3NbMF0uZXZlbnRzWzBdLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSYmRCsrLGUudHJhY2tzWzBdLmFkZEV2ZW50KF9zKDApLEQpLHAoIiVjR1Mgb24gbm90IGRldGVjdGVkLiBBZGRpbmcgaXQuIixjLmluZm8pfWUuZmx1c2goKSxaKCl9ZnVuY3Rpb24gb28oZSxBKXtsZXQgdD1bXSxuPVtdLHM9W10sYT1bXTtBLmNoYW5uZWxTbmFwc2hvdHMuZm9yRWFjaCgocixJKT0+e2lmKHIuaXNNdXRlZCl7bi5wdXNoKEkpO3JldHVybn1sZXQgbz1yLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCtyLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDA7byE9PTAmJnQucHVzaCh7Y2hhbm5lbDpJLGtleVNoaWZ0Om99KSxyLmxvY2tQcmVzZXQmJnMucHVzaCh7Y2hhbm5lbDpJLC4uLnIucGF0Y2h9KSxyLmxvY2tlZENvbnRyb2xsZXJzLmZvckVhY2goKGcsQik9PntpZighZ3x8Qj4xMjd8fEI9PT1TLmJhbmtTZWxlY3QpcmV0dXJuO2xldCBkPXIubWlkaUNvbnRyb2xsZXJzW0JdPj43O2EucHVzaCh7Y2hhbm5lbDpJLGNvbnRyb2xsZXJOdW1iZXI6Qixjb250cm9sbGVyVmFsdWU6ZH0pfSl9KSxlLm1vZGlmeShzLGEsbix0KX12YXIgbG49e1hNRkZpbGVUeXBlOjAsbm9kZU5hbWU6MSxub2RlSUROdW1iZXI6MixyZXNvdXJjZUZvcm1hdDozLGZpbGVuYW1lT25EaXNrOjQsZmlsZW5hbWVFeHRlbnNpb25PbkRpc2s6NSxtYWNPU0ZpbGVUeXBlQW5kQ3JlYXRvcjo2LG1pbWVUeXBlOjcsdGl0bGU6OCxjb3B5cmlnaHROb3RpY2U6OSxjb21tZW50OjEwLGF1dG9TdGFydDoxMSxwcmVsb2FkOjEyLGNvbnRlbnREZXNjcmlwdGlvbjoxMyxJRDNNZXRhZGF0YToxNH0sS2U9e2luTGluZVJlc291cmNlOjEsaW5GaWxlUmVzb3VyY2U6MixpbkZpbGVOb2RlOjMsZXh0ZXJuYWxGaWxlOjQsZXh0ZXJuYWxYTUY6NSxYTUZGaWxlVVJJYW5kTm9kZUlEOjZ9LGRuPXtTdGFuZGFyZE1JRElGaWxlOjAsU3RhbmRhcmRNSURJRmlsZVR5cGUxOjEsRExTMToyLERMUzI6MyxETFMyMjo0LG1vYmlsZURMUzo1LHVua25vd246LTEsZm9sZGVyOi0yfSxybz17c3RhbmRhcmQ6MCxNTUE6MSxyZWdpc3RlcmVkOjIsbm9uUmVnaXN0ZXJlZDozfSxNdD17bm9uZTowLE1NQVVucGFja2VyOjEscmVnaXN0ZXJlZDoyLG5vblJlZ2lzdGVyZWQ6M30saW89Y2xhc3MgJHN7bGVuZ3RoO2l0ZW1Db3VudDttZXRhZGF0YUxlbmd0aDttZXRhZGF0YT17fTtub2RlRGF0YTtpbm5lck5vZGVzPVtdO3BhY2tlZENvbnRlbnQ9ITE7bm9kZVVucGFja2Vycz1bXTtyZXNvdXJjZUZvcm1hdD0idW5rbm93biI7cmVmZXJlbmNlVHlwZUlEO2NvbnN0cnVjdG9yKEEpe2xldCB0PUEuY3VycmVudEluZGV4O3RoaXMubGVuZ3RoPXVBKEEpLHRoaXMuaXRlbUNvdW50PXVBKEEpO2xldCBuPXVBKEEpLHM9QS5jdXJyZW50SW5kZXgtdCxhPW4tcyxyPUEuc2xpY2UoQS5jdXJyZW50SW5kZXgsQS5jdXJyZW50SW5kZXgrYSk7QS5jdXJyZW50SW5kZXgrPWEsdGhpcy5tZXRhZGF0YUxlbmd0aD11QShyKTtsZXQgST1yLnNsaWNlKHIuY3VycmVudEluZGV4LHIuY3VycmVudEluZGV4K3RoaXMubWV0YWRhdGFMZW5ndGgpO3IuY3VycmVudEluZGV4Kz10aGlzLm1ldGFkYXRhTGVuZ3RoO2xldCBvLGc7Zm9yKDtJLmN1cnJlbnRJbmRleDxJLmxlbmd0aDspe2lmKElbSS5jdXJyZW50SW5kZXhdPT09MClJLmN1cnJlbnRJbmRleCsrLG89dUEoSSksT2JqZWN0LnZhbHVlcyhsbikuaW5jbHVkZXMobyk/Zz1PYmplY3Qua2V5cyhsbikuZmluZChtPT5sblttXT09PW8pPz8iIjoocChgVW5rbm93biBmaWVsZCBzcGVjaWZpZXI6ICR7b31gKSxnPWB1bmtub3duXyR7b31gKTtlbHNle2xldCBtPXVBKEkpO289aEEoSSxtKSxnPW99bGV0IFE9dUEoSSk7aWYoUT09PTApe2xldCBtPXVBKEkpLHk9SS5zbGljZShJLmN1cnJlbnRJbmRleCxJLmN1cnJlbnRJbmRleCttKTtJLmN1cnJlbnRJbmRleCs9bSx1QSh5KTw0P3RoaXMubWV0YWRhdGFbZ109aEEoeSxtLTEpOnRoaXMubWV0YWRhdGFbZ109eS5zbGljZSh5LmN1cnJlbnRJbmRleCl9ZWxzZSBwKGBJbnRlcm5hdGlvbmFsIGNvbnRlbnQ6ICR7UX1gKSxJLmN1cnJlbnRJbmRleCs9dUEoSSl9bGV0IEI9ci5jdXJyZW50SW5kZXgsZD11QShyKSxoPXIuc2xpY2Uoci5jdXJyZW50SW5kZXgsQitkKTtpZihyLmN1cnJlbnRJbmRleD1CK2QsZD4wKWZvcih0aGlzLnBhY2tlZENvbnRlbnQ9ITA7aC5jdXJyZW50SW5kZXg8ZDspe2xldCBDPXt9O3N3aXRjaChDLmlkPXVBKGgpLEMuaWQpe2Nhc2UgTXQubm9uUmVnaXN0ZXJlZDpjYXNlIE10LnJlZ2lzdGVyZWQ6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtkZWZhdWx0OnRocm93IFooKSxuZXcgRXJyb3IoYFVua25vd24gdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtjYXNlIE10Lm5vbmU6Qy5zdGFuZGFyZElEPXVBKGgpO2JyZWFrO2Nhc2UgTXQuTU1BVW5wYWNrZXI6e2xldCBRPWhbaC5jdXJyZW50SW5kZXgrK107UT09PTAmJihRPDw9OCxRfD1oW2guY3VycmVudEluZGV4KytdLFE8PD04LFF8PWhbaC5jdXJyZW50SW5kZXgrK10pO2xldCBtPXVBKGgpO0MubWFudWZhY3R1cmVySUQ9USxDLm1hbnVmYWN0dXJlckludGVybmFsSUQ9bX1icmVha31DLmRlY29kZWRTaXplPXVBKGgpLHRoaXMubm9kZVVucGFja2Vycy5wdXNoKEMpfXN3aXRjaChBLmN1cnJlbnRJbmRleD10K24sdGhpcy5yZWZlcmVuY2VUeXBlSUQ9dUEoQSksdGhpcy5ub2RlRGF0YT1BLnNsaWNlKEEuY3VycmVudEluZGV4LHQrdGhpcy5sZW5ndGgpLEEuY3VycmVudEluZGV4PXQrdGhpcy5sZW5ndGgsdGhpcy5yZWZlcmVuY2VUeXBlSUQpe2Nhc2UgS2UuaW5MaW5lUmVzb3VyY2U6YnJlYWs7Y2FzZSBLZS5leHRlcm5hbFhNRjpjYXNlIEtlLmluRmlsZU5vZGU6Y2FzZSBLZS5YTUZGaWxlVVJJYW5kTm9kZUlEOmNhc2UgS2UuZXh0ZXJuYWxGaWxlOmNhc2UgS2UuaW5GaWxlUmVzb3VyY2U6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVmZXJlbmNlIHR5cGU6ICR7dGhpcy5yZWZlcmVuY2VUeXBlSUR9YCk7ZGVmYXVsdDp0aHJvdyBaKCksbmV3IEVycm9yKGBVbmtub3duIHJlZmVyZW5jZSB0eXBlOiAke3RoaXMucmVmZXJlbmNlVHlwZUlEfWApfWlmKHRoaXMuaXNGaWxlKXtpZih0aGlzLnBhY2tlZENvbnRlbnQpe2xldCBRPXRoaXMubm9kZURhdGEuc2xpY2UoMix0aGlzLm5vZGVEYXRhLmxlbmd0aCk7cChgJWNQYWNrZWQgY29udGVudC4gQXR0ZW1wdGluZyB0byBkZWZsYXRlLiBUYXJnZXQgc2l6ZTogJWMke3RoaXMubm9kZVVucGFja2Vyc1swXS5kZWNvZGVkU2l6ZX1gLGMud2FybixjLnZhbHVlKTt0cnl7dGhpcy5ub2RlRGF0YT1uZXcgWShQcyhRKS5idWZmZXIpfWNhdGNoKG0pe2lmKFooKSxtIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbmV3IEVycm9yKGBFcnJvciB1bnBhY2tpbmcgWE1GIGZpbGUgY29udGVudHM6ICR7bS5tZXNzYWdlfS5gKX19bGV0IEM9dGhpcy5tZXRhZGF0YS5yZXNvdXJjZUZvcm1hdDtpZihDPT09dm9pZCAwKXNBKCJObyByZXNvdXJjZSBmb3JtYXQgZm9yIHRoaXMgZmlsZSBub2RlISIpO2Vsc2V7Q1swXSE9PXJvLnN0YW5kYXJkJiYocChgTm9uLXN0YW5kYXJkIGZvcm1hdFR5cGVJRDogJHtDLnRvU3RyaW5nKCl9YCksdGhpcy5yZXNvdXJjZUZvcm1hdD1DLnRvU3RyaW5nKCkpO2xldCBtPUNbMV07T2JqZWN0LnZhbHVlcyhkbikuaW5jbHVkZXMobSk/dGhpcy5yZXNvdXJjZUZvcm1hdD1PYmplY3Qua2V5cyhkbikuZmluZCh5PT5kblt5XT09PW0pOnAoYFVucmVjb2duaXplZCByZXNvdXJjZSBmb3JtYXQ6ICR7bX1gKX19ZWxzZSBmb3IodGhpcy5yZXNvdXJjZUZvcm1hdD0iZm9sZGVyIjt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleDx0aGlzLm5vZGVEYXRhLmxlbmd0aDspe2xldCBDPXRoaXMubm9kZURhdGEuY3VycmVudEluZGV4LFE9dUEodGhpcy5ub2RlRGF0YSksbT10aGlzLm5vZGVEYXRhLnNsaWNlKEMsQytRKTt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleD1DK1EsdGhpcy5pbm5lck5vZGVzLnB1c2gobmV3ICRzKG0pKX19Z2V0IGlzRmlsZSgpe3JldHVybiB0aGlzLml0ZW1Db3VudD09PTB9fTtmdW5jdGlvbiBJbyhlLEEpe2UuYmFua09mZnNldD0wO2xldCB0PWhBKEEsNCk7aWYodCE9PSJYTUZfIil0aHJvdyBaKCksbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIFhNRiBIZWFkZXIhIEV4cGVjdGVkICJfWE1GIiwgZ290ICIke3R9ImApO09BKCIlY1BhcnNpbmcgWE1GIGZpbGUuLi4iLGMuaW5mbyk7bGV0IG49aEEoQSw0KTtpZihwKGAlY1hNRiB2ZXJzaW9uOiAlYyR7bn1gLGMuaW5mbyxjLnJlY29nbml6ZWQpLG49PT0iMi4wMCIpe2xldCBvPVhlKEEsNCksZz1YZShBLDQpO3AoYCVjRmlsZSBUeXBlIElEOiAlYyR7b30lYywgRmlsZSBUeXBlIFJldmlzaW9uIElEOiAlYyR7Z31gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dUEoQSk7bGV0IHM9dUEoQSk7QS5jdXJyZW50SW5kZXgrPXMsQS5jdXJyZW50SW5kZXg9dUEoQSk7bGV0IGE9bmV3IGlvKEEpLHIsST1vPT57bGV0IGc9KEIsZCk9PntvLm1ldGFkYXRhW0JdIT09dm9pZCAwJiZ0eXBlb2Ygby5tZXRhZGF0YVtCXT09InN0cmluZyImJihlLnJtaWRpSW5mb1tkXT1uZShvLm1ldGFkYXRhW0JdKSl9O2lmKGcoIm5vZGVOYW1lIiwibmFtZSIpLGcoInRpdGxlIiwibmFtZSIpLGcoImNvcHlyaWdodE5vdGljZSIsImNvcHlyaWdodCIpLGcoImNvbW1lbnQiLCJjb21tZW50Iiksby5pc0ZpbGUpc3dpdGNoKG8ucmVzb3VyY2VGb3JtYXQpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiRExTMSI6Y2FzZSJETFMyIjpjYXNlIkRMUzIyIjpjYXNlIm1vYmlsZURMUyI6cCgiJWNGb3VuZCBlbWJlZGRlZCBETFMhIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9by5ub2RlRGF0YS5idWZmZXI7YnJlYWs7Y2FzZSJTdGFuZGFyZE1JRElGaWxlIjpjYXNlIlN0YW5kYXJkTUlESUZpbGVUeXBlMSI6cCgiJWNGb3VuZCBlbWJlZGRlZCBNSURJISIsYy5yZWNvZ25pemVkKSxyPW8ubm9kZURhdGE7YnJlYWt9ZWxzZSBmb3IobGV0IEIgb2Ygby5pbm5lck5vZGVzKUkoQil9O2lmKEkoYSksWigpLCFyKXRocm93IG5ldyBFcnJvcigiTm8gTUlESSBkYXRhIGluIHRoZSBYTUYgZmlsZSEiKTtyZXR1cm4gcn12YXIgS3Q9Y2xhc3MgQWF7bmFtZT0iIjtwb3J0PTA7Y2hhbm5lbHM9bmV3IFNldDtldmVudHM9W107c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBBYTtyZXR1cm4gdC5jb3B5RnJvbShBKSx0fWNvcHlGcm9tKEEpe3RoaXMubmFtZT1BLm5hbWUsdGhpcy5wb3J0PUEucG9ydCx0aGlzLmNoYW5uZWxzPW5ldyBTZXQoQS5jaGFubmVscyksdGhpcy5ldmVudHM9QS5ldmVudHMubWFwKHQ9Pm5ldyBaQSh0LnRpY2tzLHQuc3RhdHVzQnl0ZSxuZXcgWSh0LmRhdGEpKSl9YWRkRXZlbnQoQSx0KXt0aGlzLmV2ZW50cy5zcGxpY2UodCwwLEEpfWRlbGV0ZUV2ZW50KEEpe3RoaXMuZXZlbnRzLnNwbGljZShBLDEpfXB1c2hFdmVudChBKXt0aGlzLmV2ZW50cy5wdXNoKEEpfX07ZnVuY3Rpb24gcHMoZSxBLHQpe2JBKCIlY1BhcnNpbmcgTUlESSBGaWxlLi4uIixjLmluZm8pLGUuZmlsZU5hbWU9dDtsZXQgbj1uZXcgWShBKSxzPW4sYT1nPT57bGV0IEI9aEEoZyw0KSxkPVhlKGcsNCksaD1uZXcgWShkKSxDPXt0eXBlOkIsc2l6ZTpkLGRhdGE6aH0sUT1nLnNsaWNlKGcuY3VycmVudEluZGV4LGcuY3VycmVudEluZGV4K0Muc2l6ZSk7cmV0dXJuIEMuZGF0YS5zZXQoUSwwKSxnLmN1cnJlbnRJbmRleCs9Qy5zaXplLEN9LHI9ZWUobiw0KTtpZihyPT09IlJJRkYiKXtuLmN1cnJlbnRJbmRleCs9ODtsZXQgZz1oQShuLDQpO2lmKGchPT0iUk1JRCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBSTUlESSBIZWFkZXIhIEV4cGVjdGVkICJSTUlEIiwgZ290ICIke2d9ImApO2xldCBCPXJBKG4pO2lmKEIuaGVhZGVyIT09ImRhdGEiKXRocm93IFooKSxuZXcgU3ludGF4RXJyb3IoYEludmFsaWQgUk1JREkgQ2h1bmsgaGVhZGVyISBFeHBlY3RlZCAiZGF0YSIsIGdvdCAiJHtnfSJgKTtzPUIuZGF0YTtsZXQgZD0hMSxoPSExO2Zvcig7bi5jdXJyZW50SW5kZXg8PW4ubGVuZ3RoOyl7bGV0IEM9bi5jdXJyZW50SW5kZXgsUT1yQShuLCEwKTtpZihRLmhlYWRlcj09PSJSSUZGIil7bGV0IG09aEEoUS5kYXRhLDQpLnRvTG93ZXJDYXNlKCk7bT09PSJzZmJrInx8bT09PSJzZnBrInx8bT09PSJkbHMgIj8ocCgiJWNGb3VuZCBlbWJlZGRlZCBzb3VuZGJhbmshIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9bi5zbGljZShDLEMrUS5zaXplKS5idWZmZXIpOnNBKGBVbmtub3duIFJJRkYgY2h1bms6ICIke219ImApLG09PT0iZGxzICI/ZS5pc0RMU1JNSURJPSEwOmQ9ITB9ZWxzZSBpZihRLmhlYWRlcj09PSJMSVNUIiYmaEEoUS5kYXRhLDQpPT09IklORk8iKWZvcihwKCIlY0ZvdW5kIFJNSURJIElORk8gY2h1bmshIixjLnJlY29nbml6ZWQpO1EuZGF0YS5jdXJyZW50SW5kZXg8PVEuc2l6ZTspe2xldCB5PXJBKFEuZGF0YSwhMCksRj15LmhlYWRlcixrPXkuZGF0YTtzd2l0Y2goRil7ZGVmYXVsdDpzQShgVW5rbm93biBSTUlESSBJbmZvOiAke0Z9YCk7YnJlYWs7Y2FzZSJJTkFNIjplLnJtaWRpSW5mby5uYW1lPWs7YnJlYWs7Y2FzZSJJQUxCIjpjYXNlIklQUkQiOmUucm1pZGlJbmZvLmFsYnVtPWs7YnJlYWs7Y2FzZSJJQ1JUIjpjYXNlIklDUkQiOmUucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1rO2JyZWFrO2Nhc2UiSUFSVCI6ZS5ybWlkaUluZm8uYXJ0aXN0PWs7YnJlYWs7Y2FzZSJJR05SIjplLnJtaWRpSW5mby5nZW5yZT1rO2JyZWFrO2Nhc2UiSVBJQyI6ZS5ybWlkaUluZm8ucGljdHVyZT1rO2JyZWFrO2Nhc2UiSUNPUCI6ZS5ybWlkaUluZm8uY29weXJpZ2h0PWs7YnJlYWs7Y2FzZSJJQ01UIjplLnJtaWRpSW5mby5jb21tZW50PWs7YnJlYWs7Y2FzZSJJRU5HIjplLnJtaWRpSW5mby5lbmdpbmVlcj1rO2JyZWFrO2Nhc2UiSVNGVCI6ZS5ybWlkaUluZm8uc29mdHdhcmU9azticmVhaztjYXNlIklTQkoiOmUucm1pZGlJbmZvLnN1YmplY3Q9azticmVhaztjYXNlIklFTkMiOmUucm1pZGlJbmZvLmluZm9FbmNvZGluZz1rO2JyZWFrO2Nhc2UiTUVOQyI6ZS5ybWlkaUluZm8ubWlkaUVuY29kaW5nPWs7YnJlYWs7Y2FzZSJEQk5LIjplLmJhbmtPZmZzZXQ9eHMoaywyKSxoPSEwO2JyZWFrfX19ZCYmIWgmJihlLmJhbmtPZmZzZXQ9MSksZS5pc0RMU1JNSURJJiYoZS5iYW5rT2Zmc2V0PTApLGUuZW1iZWRkZWRTb3VuZEJhbms9PT12b2lkIDAmJihlLmJhbmtPZmZzZXQ9MCl9ZWxzZSByPT09IlhNRl8iP3M9SW8oZSxuKTpzPW47bGV0IEk9YShzKTtpZihJLnR5cGUhPT0iTVRoZCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBNSURJIEhlYWRlciEgRXhwZWN0ZWQgIk1UaGQiLCBnb3QgIiR7SS50eXBlfSJgKTtpZihJLnNpemUhPT02KXRocm93IFooKSxuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBNSURJIGhlYWRlciBjaHVuayBzaXplISBFeHBlY3RlZCA2LCBnb3QgJHtJLnNpemV9YCk7ZS5mb3JtYXQ9WGUoSS5kYXRhLDIpO2xldCBvPVhlKEkuZGF0YSwyKTtlLnRpbWVEaXZpc2lvbj1YZShJLmRhdGEsMik7Zm9yKGxldCBnPTA7ZzxvO2crKyl7bGV0IEI9bmV3IEt0LGQ9YShzKTtpZihkLnR5cGUhPT0iTVRyayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCB0cmFjayBoZWFkZXIhIEV4cGVjdGVkICJNVHJrIiBnb3QgIiR7ZC50eXBlfSJgKTtsZXQgaCxDPTA7Zm9yKGUuZm9ybWF0PT09MiYmZz4wJiYoQys9ZS50cmFja3NbZy0xXS5ldmVudHNbZS50cmFja3NbZy0xXS5ldmVudHMubGVuZ3RoLTFdLnRpY2tzKTtkLmRhdGEuY3VycmVudEluZGV4PGQuc2l6ZTspe0MrPXVBKGQuZGF0YSk7bGV0IFE9ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXhdLG07aWYoaCE9PXZvaWQgMCYmUTwxMjgpbT1oO2Vsc2V7aWYoUTwxMjgpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgVW5leHBlY3RlZCBieXRlIHdpdGggbm8gcnVubmluZyBieXRlLiAoJHtRfSlgKTttPWQuZGF0YVtkLmRhdGEuY3VycmVudEluZGV4KytdfWxldCB5PUthKG0pLEY7c3dpdGNoKHkpe2Nhc2UtMTpGPTA7YnJlYWs7Y2FzZS0yOm09ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXgrK10sRj11QShkLmRhdGEpO2JyZWFrO2Nhc2UtMzpGPXVBKGQuZGF0YSk7YnJlYWs7ZGVmYXVsdDpGPU9hW20+PjRdLGg9bTticmVha31sZXQgaz1uZXcgWShGKTtrLnNldChkLmRhdGEuc2xpY2UoZC5kYXRhLmN1cnJlbnRJbmRleCxkLmRhdGEuY3VycmVudEluZGV4K0YpLDApO2xldCBEPW5ldyBaQShDLG0sayk7Qi5wdXNoRXZlbnQoRCksZC5kYXRhLmN1cnJlbnRJbmRleCs9Rn1lLnRyYWNrcy5wdXNoKEIpLHAoYCVjUGFyc2VkICVjJHtlLnRyYWNrcy5sZW5ndGh9JWMgLyAlYyR7ZS50cmFja3MubGVuZ3RofWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfXAoIiVjQWxsIHRyYWNrcyBwYXJzZWQgY29ycmVjdGx5ISIsYy5yZWNvZ25pemVkKSxlLmZsdXNoKCExKSxaKCkscChgJWNNSURJIGZpbGUgcGFyc2VkLiBUb3RhbCB0aWNrIHRpbWU6ICVjJHtlLmxhc3RWb2ljZUV2ZW50VGlja30lYywgdG90YWwgc2Vjb25kcyB0aW1lOiAlYyR7ZS5kdXJhdGlvbn1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dmFyIGdvPW5ldyBNYXAoW1siZG9taW5nbyIsIlN1bmRheSJdLFsic2VndW5kYS1mZWlyYSIsIk1vbmRheSJdLFsidGVyXHhFN2EtZmVpcmEiLCJUdWVzZGF5Il0sWyJxdWFydGEtZmVpcmEiLCJXZWRuZXNkYXkiXSxbInF1aW50YS1mZWlyYSIsIlRodXJzZGF5Il0sWyJzZXh0YS1mZWlyYSIsIkZyaWRheSJdLFsic1x4RTFiYWRvIiwiU2F0dXJkYXkiXSxbImphbmVpcm8iLCJKYW51YXJ5Il0sWyJmZXZlcmVpcm8iLCJGZWJydWFyeSJdLFsibWFyXHhFN28iLCJNYXJjaCJdLFsiYWJyaWwiLCJBcHJpbCJdLFsibWFpbyIsIk1heSJdLFsianVuaG8iLCJKdW5lIl0sWyJqdWxobyIsIkp1bHkiXSxbImFnb3N0byIsIkF1Z3VzdCJdLFsic2V0ZW1icm8iLCJTZXB0ZW1iZXIiXSxbIm91dHVicm8iLCJPY3RvYmVyIl0sWyJub3ZlbWJybyIsIk5vdmVtYmVyIl0sWyJkZXplbWJybyIsIkRlY2VtYmVyIl1dKSxjbz1bZ29dO2Z1bmN0aW9uIEVvKGUpe2ZvcihsZXQgQSBvZiBjbyl7bGV0IHQ9ZTtBLmZvckVhY2goKHMsYSk9PntsZXQgcj1uZXcgUmVnRXhwKGEsImdpIik7dD10LnJlcGxhY2UocixzKX0pO2xldCBuPW5ldyBEYXRlKHQpO2lmKCFpc05hTihuLmdldFRpbWUoKSkpcmV0dXJuIG59fWZ1bmN0aW9uIEJvKGUpe2xldCBBPS9eKFxkezJ9KVwuKFxkezJ9KVwuKFxkezR9KSQvLmV4ZWMoZSk7aWYoQSl7bGV0IHQ9cGFyc2VJbnQoQVsxXSksbj1wYXJzZUludChBWzJdKS0xLHM9cGFyc2VJbnQoQVszXSksYT1uZXcgRGF0ZShzLG4sdCk7aWYoIWlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4gYX19ZnVuY3Rpb24gQ28oZSl7bGV0IEE9L14oXGR7MSwyfSlcc3sxLDJ9KFxkezEsMn0pXHN7MSwyfShcZHsyfSkkLy5leGVjKGUpO2lmKEEpe2xldCB0PUFbMV0sbj0ocGFyc2VJbnQoQVsyXSkrMSkudG9TdHJpbmcoKSxzPUFbM10sYT1uZXcgRGF0ZShgJHtufS8ke3R9LyR7c31gKTtpZighaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiBhfX1mdW5jdGlvbiBobyhlKXtsZXQgdD0vXGJcZHs0fVxiLy5leGVjKGUpO3JldHVybiB0P25ldyBEYXRlKHRbMF0pOnZvaWQgMH1mdW5jdGlvbiB0cyhlKXtpZihlPWUudHJpbSgpLGUubGVuZ3RoPDEpcmV0dXJuIG5ldyBEYXRlO2xldCBBPWUucmVwbGFjZSgvXGIoXGQrKShzdHxuZHxyZHx0aClcYi9nLCIkMSIpLHQ9bmV3IERhdGUoQSk7aWYoaXNOYU4odC5nZXRUaW1lKCkpKXtsZXQgbj1FbyhlKTtpZihuKXJldHVybiBuO2xldCBzPUJvKGUpO2lmKHMpcmV0dXJuIHM7bGV0IGE9Q28oZSk7aWYoYSlyZXR1cm4gYTtsZXQgcj1obyhlKTtyZXR1cm4gcnx8KHNBKGBJbnZhbGlkIGRhdGU6ICIke2V9Ii4gUmVwbGFjaW5nIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSFgKSxuZXcgRGF0ZSl9cmV0dXJuIHR9dmFyIExlPWNsYXNzIEx0e3RyYWNrcz1bXTt0aW1lRGl2aXNpb249MDtkdXJhdGlvbj0wO3RlbXBvQ2hhbmdlcz1be3RpY2tzOjAsdGVtcG86MTIwfV07ZXh0cmFNZXRhZGF0YT1bXTtseXJpY3M9W107Zmlyc3ROb3RlT249MDtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307bGFzdFZvaWNlRXZlbnRUaWNrPTA7cG9ydENoYW5uZWxPZmZzZXRNYXA9WzBdO2xvb3A9e3N0YXJ0OjAsZW5kOjB9O2ZpbGVOYW1lO2Zvcm1hdD0wO3JtaWRpSW5mbz17fTtiYW5rT2Zmc2V0PTA7aXNLYXJhb2tlRmlsZT0hMTtpc011bHRpUG9ydD0hMTtpc0RMU1JNSURJPSExO2VtYmVkZGVkU291bmRCYW5rO2JpbmFyeU5hbWU7Z2V0IGluZm9FbmNvZGluZygpe2xldCBBPXRoaXMucm1pZGlJbmZvLmluZm9FbmNvZGluZztpZighQSlyZXR1cm47bGV0IHQ9QS5ieXRlTGVuZ3RoO3JldHVybiBBW0EuYnl0ZUxlbmd0aC0xXT09PTAmJnQtLSxlZShBLHQpfXN0YXRpYyBmcm9tQXJyYXlCdWZmZXIoQSx0PSIiKXtsZXQgbj1uZXcgTHQ7cmV0dXJuIHBzKG4sQSx0KSxufXN0YXRpYyBhc3luYyBmcm9tRmlsZShBKXtsZXQgdD1uZXcgTHQ7cmV0dXJuIHBzKHQsYXdhaXQgQS5hcnJheUJ1ZmZlcigpLEEubmFtZSksdH1zdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEx0O3JldHVybiB0LmNvcHlGcm9tKEEpLHR9Y29weUZyb20oQSl7dGhpcy5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbms9QT8uZW1iZWRkZWRTb3VuZEJhbms/LnNsaWNlKDApPz92b2lkIDAsdGhpcy50cmFja3M9QS50cmFja3MubWFwKHQ9Pkt0LmNvcHlGcm9tKHQpKX1taWRpVGlja3NUb1NlY29uZHMoQSl7bGV0IHQ9MDtmb3IoO0E+MDspe2xldCBuPXRoaXMudGVtcG9DaGFuZ2VzLmZpbmQoYT0+YS50aWNrczxBKTtpZighbilyZXR1cm4gdDtsZXQgcz1BLW4udGlja3M7dCs9cyo2MC8obi50ZW1wbyp0aGlzLnRpbWVEaXZpc2lvbiksQS09c31yZXR1cm4gdH1nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKEEpe3JldHVybiB0byh0aGlzLEEpfWZsdXNoKEE9ITApe2lmKEEpZm9yKGxldCB0IG9mIHRoaXMudHJhY2tzKXQuZXZlbnRzLnNvcnQoKG4scyk9Pm4udGlja3Mtcy50aWNrcyk7dGhpcy5wYXJzZUludGVybmFsKCl9Z2V0Tm90ZVRpbWVzKEE9MCl7cmV0dXJuIG5vKHRoaXMsQSl9d3JpdGVNSURJKCl7cmV0dXJuIFZhKHRoaXMpfXdyaXRlUk1JREkoQSx0PVNzKXtyZXR1cm4gZW8odGhpcyxBLCRuKHQsU3MpKX1tb2RpZnkoQT1bXSx0PVtdLG49W10scz1bXSl7YW8odGhpcyxBLHQsbixzKX1hcHBseVNuYXBzaG90KEEpe29vKHRoaXMsQSl9Z2V0TmFtZShBPSJTaGlmdF9KSVMiKXtsZXQgdD0iIixuPXRoaXMuZ2V0Uk1JREluZm8oIm5hbWUiKTtpZihuKXJldHVybiBuLnRyaW0oKTtpZih0aGlzLmJpbmFyeU5hbWUpe0E9dGhpcy5nZXRSTUlESW5mbygibWlkaUVuY29kaW5nIik/P0E7dHJ5e3Q9bmV3IFRleHREZWNvZGVyKEEpLmRlY29kZSh0aGlzLmJpbmFyeU5hbWUpLnRyaW0oKX1jYXRjaChzKXtzQShgRmFpbGVkIHRvIGRlY29kZSBNSURJIG5hbWU6ICR7c31gKX19cmV0dXJuIHR8fHRoaXMuZmlsZU5hbWV9Z2V0RXh0cmFNZXRhZGF0YShBPSJTaGlmdF9KSVMiKXtBPXRoaXMuaW5mb0VuY29kaW5nPz9BO2xldCB0PW5ldyBUZXh0RGVjb2RlcihBKTtyZXR1cm4gdGhpcy5leHRyYU1ldGFkYXRhLm1hcChuPT50LmRlY29kZShuLmRhdGEpLnJlcGxhY2UoL0BUfEBBL2csIiIpLnRyaW0oKSl9c2V0Uk1JREluZm8oQSx0KXtpZih0aGlzLnJtaWRpSW5mby5pbmZvRW5jb2Rpbmc9bmUoInV0Zi04IiwhMCksQT09PSJwaWN0dXJlIil0aGlzLnJtaWRpSW5mby5waWN0dXJlPW5ldyBVaW50OEFycmF5KHQpO2Vsc2UgaWYoQT09PSJjcmVhdGlvbkRhdGUiKXRoaXMucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1uZSh0LnRvSVNPU3RyaW5nKCksITApO2Vsc2V7bGV0IG49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO3RoaXMucm1pZGlJbmZvW0FdPW5ldyBVaW50OEFycmF5KFsuLi5uLDBdKX19Z2V0Uk1JREluZm8oQSl7aWYoIXRoaXMucm1pZGlJbmZvW0FdKXJldHVybjtsZXQgdD10aGlzLmluZm9FbmNvZGluZz8/IlVURi04IjtpZihBPT09InBpY3R1cmUiKXJldHVybiB0aGlzLnJtaWRpSW5mb1tBXS5idWZmZXI7aWYoQT09PSJjcmVhdGlvbkRhdGUiKXJldHVybiB0cyhlZSh0aGlzLnJtaWRpSW5mb1tBXSkpO3RyeXtsZXQgbj1uZXcgVGV4dERlY29kZXIodCkscz10aGlzLnJtaWRpSW5mb1tBXTtyZXR1cm4gc1tzLmxlbmd0aC0xXT09PTAmJihzPXM/LnNsaWNlKDAscy5sZW5ndGgtMSkpLG4uZGVjb2RlKHMuYnVmZmVyKS50cmltKCl9Y2F0Y2gobil7c0EoYEZhaWxlZCB0byBkZWNvZGUgJHtBfSBuYW1lOiAke259YCk7cmV0dXJufX1jb3B5TWV0YWRhdGFGcm9tKEEpe3RoaXMuZmlsZU5hbWU9QS5maWxlTmFtZSx0aGlzLnRpbWVEaXZpc2lvbj1BLnRpbWVEaXZpc2lvbix0aGlzLmR1cmF0aW9uPUEuZHVyYXRpb24sdGhpcy5maXJzdE5vdGVPbj1BLmZpcnN0Tm90ZU9uLHRoaXMubGFzdFZvaWNlRXZlbnRUaWNrPUEubGFzdFZvaWNlRXZlbnRUaWNrLHRoaXMuZm9ybWF0PUEuZm9ybWF0LHRoaXMuYmFua09mZnNldD1BLmJhbmtPZmZzZXQsdGhpcy5pc0thcmFva2VGaWxlPUEuaXNLYXJhb2tlRmlsZSx0aGlzLmlzTXVsdGlQb3J0PUEuaXNNdWx0aVBvcnQsdGhpcy5pc0RMU1JNSURJPUEuaXNETFNSTUlESSx0aGlzLmlzRExTUk1JREk9QS5pc0RMU1JNSURJLHRoaXMudGVtcG9DaGFuZ2VzPVsuLi5BLnRlbXBvQ2hhbmdlc10sdGhpcy5leHRyYU1ldGFkYXRhPUEuZXh0cmFNZXRhZGF0YS5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLmx5cmljcz1BLmx5cmljcy5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLnBvcnRDaGFubmVsT2Zmc2V0TWFwPVsuLi5BLnBvcnRDaGFubmVsT2Zmc2V0TWFwXSx0aGlzLmJpbmFyeU5hbWU9QT8uYmluYXJ5TmFtZT8uc2xpY2UoKSx0aGlzLmxvb3A9ey4uLkEubG9vcH0sdGhpcy5rZXlSYW5nZT17Li4uQS5rZXlSYW5nZX0sdGhpcy5ybWlkaUluZm89e30sT2JqZWN0LmVudHJpZXMoQS5ybWlkaUluZm8pLmZvckVhY2godD0+e2xldCBuPXRbMF0scz10WzFdO3RoaXMucm1pZGlJbmZvW25dPXMuc2xpY2UoKX0pfXBhcnNlSW50ZXJuYWwoKXtPQSgiJWNJbnRlcnByZXRpbmcgTUlESSBldmVudHMuLi4iLGMuaW5mbyk7bGV0IEE9ITE7dGhpcy5rZXlSYW5nZT17bWF4OjAsbWluOjEyN30sdGhpcy5leHRyYU1ldGFkYXRhPVtdO2xldCB0PSExO3R5cGVvZiB0aGlzLnJtaWRpSW5mby5uYW1lPCJ1IiYmKHQ9ITApO2xldCBuPW51bGwscz1udWxsO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9bmV3IFNldCxCPSExO2ZvcihsZXQgaD0wO2g8by5ldmVudHMubGVuZ3RoO2grKyl7bGV0IEM9by5ldmVudHNbaF07aWYoQy5zdGF0dXNCeXRlPj0xMjgmJkMuc3RhdHVzQnl0ZTwyNDApe0I9ITA7Zm9yKGxldCBtPTA7bTxDLmRhdGEubGVuZ3RoO20rKylDLmRhdGFbbV09TWF0aC5taW4oMTI3LEMuZGF0YVttXSk7c3dpdGNoKEMudGlja3M+dGhpcy5sYXN0Vm9pY2VFdmVudFRpY2smJih0aGlzLmxhc3RWb2ljZUV2ZW50VGljaz1DLnRpY2tzKSxDLnN0YXR1c0J5dGUmMjQwKXtjYXNlIE0uY29udHJvbGxlckNoYW5nZTpzd2l0Y2goQy5kYXRhWzBdKXtjYXNlIDI6Y2FzZSAxMTY6bj1DLnRpY2tzO2JyZWFrO2Nhc2UgNDpjYXNlIDExNzpzPT09bnVsbD9zPUMudGlja3M6cz0wO2JyZWFrO2Nhc2UgMDp0aGlzLmlzRExTUk1JREkmJkMuZGF0YVsxXSE9PTAmJkMuZGF0YVsxXSE9PTEyNyYmKHAoIiVjRExTIFJNSURJIHdpdGggb2Zmc2V0IDEgZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpLHRoaXMuYmFua09mZnNldD0xKX1icmVhaztjYXNlIE0ubm90ZU9uOntnLmFkZChDLnN0YXR1c0J5dGUmMTUpO2xldCBtPUMuZGF0YVswXTt0aGlzLmtleVJhbmdlLm1pbj1NYXRoLm1pbih0aGlzLmtleVJhbmdlLm1pbixtKSx0aGlzLmtleVJhbmdlLm1heD1NYXRoLm1heCh0aGlzLmtleVJhbmdlLm1heCxtKTticmVha319fWxldCBRPWVlKEMuZGF0YSk7c3dpdGNoKEMuc3RhdHVzQnl0ZSl7Y2FzZSBNLmVuZE9mVHJhY2s6aCE9PW8uZXZlbnRzLmxlbmd0aC0xJiYoaC0tLG8uZGVsZXRlRXZlbnQoaCksc0EoIlVuZXhwZWN0ZWQgRW5kT2ZUcmFjay4gUmVtb3ZpbmchIikpO2JyZWFrO2Nhc2UgTS5zZXRUZW1wbzp0aGlzLnRlbXBvQ2hhbmdlcy5wdXNoKHt0aWNrczpDLnRpY2tzLHRlbXBvOjZlNy9RdChDLmRhdGEsMyl9KTticmVhaztjYXNlIE0ubWFya2VyOnN3aXRjaChRLnRyaW0oKS50b0xvd2VyQ2FzZSgpKXtkZWZhdWx0OmJyZWFrO2Nhc2Uic3RhcnQiOmNhc2UibG9vcHN0YXJ0IjpuPUMudGlja3M7YnJlYWs7Y2FzZSJsb29wZW5kIjpzPUMudGlja3N9YnJlYWs7Y2FzZSBNLmNvcHlyaWdodDp0aGlzLmV4dHJhTWV0YWRhdGEucHVzaChDKTticmVhaztjYXNlIE0ubHlyaWM6US50cmltKCkuc3RhcnRzV2l0aCgiQEtNSURJIEtBUkFPS0UgRklMRSIpJiYodGhpcy5pc0thcmFva2VGaWxlPSEwLHAoIiVjS2FyYW9rZSBNSURJIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKSksdGhpcy5pc0thcmFva2VGaWxlP0Muc3RhdHVzQnl0ZT1NLnRleHQ6dGhpcy5seXJpY3MucHVzaChDKTtjYXNlIE0udGV4dDp7bGV0IG09US50cmltKCk7bS5zdGFydHNXaXRoKCJAS01JREkgS0FSQU9LRSBGSUxFIik/KHRoaXMuaXNLYXJhb2tlRmlsZT0hMCxwKCIlY0thcmFva2UgTUlESSBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpOnRoaXMuaXNLYXJhb2tlRmlsZSYmKG0uc3RhcnRzV2l0aCgiQFQiKXx8bS5zdGFydHNXaXRoKCJAQSIpP0E/dGhpcy5leHRyYU1ldGFkYXRhLnB1c2goQyk6KHRoaXMuYmluYXJ5TmFtZT1DLmRhdGEuc2xpY2UoMiksQT0hMCx0PSEwKTptLnN0YXJ0c1dpdGgoIkAiKXx8dGhpcy5seXJpY3MucHVzaChDKSk7YnJlYWt9fX1vLmNoYW5uZWxzPWcsby5uYW1lPSIiO2xldCBkPW8uZXZlbnRzLmZpbmQoaD0+aC5zdGF0dXNCeXRlPT09TS50cmFja05hbWUpO2QmJnRoaXMudHJhY2tzLmluZGV4T2Yobyk+MCYmKG8ubmFtZT1lZShkLmRhdGEpLCFCJiYhby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInNldHVwIikmJnRoaXMuZXh0cmFNZXRhZGF0YS5wdXNoKGQpKX10aGlzLnRlbXBvQ2hhbmdlcy5yZXZlcnNlKCkscCgiJWNDb3JyZWN0aW5nIGxvb3BzLCBwb3J0cyBhbmQgZGV0ZWN0aW5nIG5vdGVzLi4uIixjLmluZm8pO2xldCBhPVtdO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9by5ldmVudHMuZmluZChCPT4oQi5zdGF0dXNCeXRlJjI0MCk9PT1NLm5vdGVPbik7ZyYmYS5wdXNoKGcudGlja3MpfXRoaXMuZmlyc3ROb3RlT249TWF0aC5taW4oLi4uYSkscChgJWNGaXJzdCBub3RlLW9uIGRldGVjdGVkIGF0OiAlYyR7dGhpcy5maXJzdE5vdGVPbn0lYyB0aWNrcyFgLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxuIT09bnVsbCYmcz09PW51bGw/KG49dGhpcy5maXJzdE5vdGVPbixzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKToobj8/PXRoaXMuZmlyc3ROb3RlT24sKHM9PT1udWxsfHxzPT09MCkmJihzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKSksdGhpcy5sb29wPXtzdGFydDpuLGVuZDpzfSxwKGAlY0xvb3AgcG9pbnRzOiBzdGFydDogJWMke3RoaXMubG9vcC5zdGFydH0lYyBlbmQ6ICVjJHt0aGlzLmxvb3AuZW5kfWAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgcj0wO3RoaXMucG9ydENoYW5uZWxPZmZzZXRNYXA9W107Zm9yKGxldCBvIG9mIHRoaXMudHJhY2tzKWlmKG8ucG9ydD0tMSxvLmNoYW5uZWxzLnNpemUhPT0wKWZvcihsZXQgZyBvZiBvLmV2ZW50cyl7aWYoZy5zdGF0dXNCeXRlIT09TS5taWRpUG9ydCljb250aW51ZTtsZXQgQj1nLmRhdGFbMF07by5wb3J0PUIsdGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcFtCXT09PXZvaWQgMCYmKHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXBbQl09cixyKz0xNil9dGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bLi4udGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcF0ubWFwKG89Pm8/PzApO2xldCBJPTEvMDtmb3IobGV0IG8gb2YgdGhpcy50cmFja3Mpby5wb3J0IT09LTEmJkk+by5wb3J0JiYoST1vLnBvcnQpO0k9PT0xLzAmJihJPTApO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcykoby5wb3J0PT09LTF8fG8ucG9ydD09PXZvaWQgMCkmJihvLnBvcnQ9SSk7aWYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcC5sZW5ndGg9PT0wJiYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bMF0pLHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXAubGVuZ3RoPDI/cCgiJWNObyBhZGRpdGlvbmFsIE1JREkgUG9ydHMgZGV0ZWN0ZWQuIixjLmluZm8pOih0aGlzLmlzTXVsdGlQb3J0PSEwLHAoIiVjTUlESSBQb3J0cyBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpLCF0KWlmKHRoaXMudHJhY2tzLmxlbmd0aD4xKXtpZih0aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChvPT5vLnN0YXR1c0J5dGU+PU0ubm90ZU9uJiZvLnN0YXR1c0J5dGU8TS5wb2x5UHJlc3N1cmUpPT09dm9pZCAwKXtsZXQgbz10aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChnPT5nLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSk7byYmKHRoaXMuYmluYXJ5TmFtZT1vLmRhdGEpfX1lbHNle2xldCBvPXRoaXMudHJhY2tzWzBdLmV2ZW50cy5maW5kKGc9Pmcuc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lKTtvJiYodGhpcy5iaW5hcnlOYW1lPW8uZGF0YSl9aWYodGhpcy5leHRyYU1ldGFkYXRhPXRoaXMuZXh0cmFNZXRhZGF0YS5maWx0ZXIobz0+by5kYXRhLmxlbmd0aD4wKSx0aGlzLmx5cmljcy5zb3J0KChvLGcpPT5vLnRpY2tzLWcudGlja3MpLCF0aGlzLnRyYWNrcy5zb21lKG89Pm8uZXZlbnRzWzBdLnRpY2tzPT09MCkpe2xldCBvPXRoaXMudHJhY2tzWzBdLGc9dGhpcz8uYmluYXJ5TmFtZT8uYnVmZmVyO2d8fChnPW5ldyBVaW50OEFycmF5KDApLmJ1ZmZlciksby5ldmVudHMudW5zaGlmdChuZXcgWkEoMCxNLnRyYWNrTmFtZSxuZXcgWShnKSkpfXRoaXMuZHVyYXRpb249dGhpcy5taWRpVGlja3NUb1NlY29uZHModGhpcy5sYXN0Vm9pY2VFdmVudFRpY2spLHRoaXMuYmluYXJ5TmFtZSYmdGhpcy5iaW5hcnlOYW1lLmxlbmd0aDwxJiYodGhpcy5iaW5hcnlOYW1lPXZvaWQgMCkscCgiJWNTdWNjZXNzISIsYy5yZWNvZ25pemVkKSxaKCl9fTtmdW5jdGlvbiBsbyhlLEEpe2lmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJmUuc3RhdHVzQnl0ZT49MTI4KXt0aGlzLnNlbmRNSURJTWVzc2FnZShbZS5zdGF0dXNCeXRlLC4uLmUuZGF0YV0pO3JldHVybn1sZXQgdD10aGlzLl9taWRpRGF0YS50cmFja3NbQV0sbj1BcyhlLnN0YXR1c0J5dGUpLHM9dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzW3RoaXMuY3VycmVudE1JRElQb3J0c1tBXV18fDA7c3dpdGNoKG4uY2hhbm5lbCs9cyxuLnN0YXR1cyl7Y2FzZSBNLm5vdGVPbjp7bGV0IGE9ZS5kYXRhWzFdO2lmKGE+MCl0aGlzLnN5bnRoLm5vdGVPbihuLmNoYW5uZWwsZS5kYXRhWzBdLGEpLHRoaXMucGxheWluZ05vdGVzLnB1c2goe21pZGlOb3RlOmUuZGF0YVswXSxjaGFubmVsOm4uY2hhbm5lbCx2ZWxvY2l0eTphfSk7ZWxzZXt0aGlzLnN5bnRoLm5vdGVPZmYobi5jaGFubmVsLGUuZGF0YVswXSk7bGV0IHI9dGhpcy5wbGF5aW5nTm90ZXMuZmluZEluZGV4KEk9PkkubWlkaU5vdGU9PT1lLmRhdGFbMF0mJkkuY2hhbm5lbD09PW4uY2hhbm5lbCk7ciE9PS0xJiZ0aGlzLnBsYXlpbmdOb3Rlcy5zcGxpY2UociwxKX1icmVha31jYXNlIE0ubm90ZU9mZjp7dGhpcy5zeW50aC5ub3RlT2ZmKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2xldCBhPXRoaXMucGxheWluZ05vdGVzLmZpbmRJbmRleChyPT5yLm1pZGlOb3RlPT09ZS5kYXRhWzBdJiZyLmNoYW5uZWw9PT1uLmNoYW5uZWwpO2EhPT0tMSYmdGhpcy5wbGF5aW5nTm90ZXMuc3BsaWNlKGEsMSk7YnJlYWt9Y2FzZSBNLnBpdGNoV2hlZWw6dGhpcy5zeW50aC5waXRjaFdoZWVsKG4uY2hhbm5lbCxlLmRhdGFbMV08PDd8ZS5kYXRhWzBdKTticmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0sZS5kYXRhWzFdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2JyZWFrO2Nhc2UgTS5wb2x5UHJlc3N1cmU6dGhpcy5zeW50aC5wb2x5UHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSxlLmRhdGFbMV0pO2JyZWFrO2Nhc2UgTS5jaGFubmVsUHJlc3N1cmU6dGhpcy5zeW50aC5jaGFubmVsUHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5bnRoLnN5c3RlbUV4Y2x1c2l2ZShlLmRhdGEscyk7YnJlYWs7Y2FzZSBNLnNldFRlbXBvOntsZXQgYT02ZTcvUXQoZS5kYXRhLDMpO3RoaXMub25lVGlja1RvU2Vjb25kcz02MC8oYSp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHRoaXMub25lVGlja1RvU2Vjb25kcz09PTAmJih0aGlzLm9uZVRpY2tUb1NlY29uZHM9NjAvKDEyMCp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHAoImludmFsaWQgdGVtcG8hIGZhbGxpbmcgYmFjayB0byAxMjAgQlBNIiksYT0xMjApO2JyZWFrfWNhc2UgTS50aW1lU2lnbmF0dXJlOmNhc2UgTS5lbmRPZlRyYWNrOmNhc2UgTS5taWRpQ2hhbm5lbFByZWZpeDpjYXNlIE0uc29uZ1Bvc2l0aW9uOmNhc2UgTS5hY3RpdmVTZW5zaW5nOmNhc2UgTS5rZXlTaWduYXR1cmU6Y2FzZSBNLnNlcXVlbmNlTnVtYmVyOmNhc2UgTS5zZXF1ZW5jZVNwZWNpZmljOmNhc2UgTS50ZXh0OmNhc2UgTS5seXJpYzpjYXNlIE0uY29weXJpZ2h0OmNhc2UgTS50cmFja05hbWU6Y2FzZSBNLm1hcmtlcjpjYXNlIE0uY3VlUG9pbnQ6Y2FzZSBNLmluc3RydW1lbnROYW1lOmNhc2UgTS5wcm9ncmFtTmFtZTpicmVhaztjYXNlIE0ubWlkaVBvcnQ6dGhpcy5hc3NpZ25NSURJUG9ydChBLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnJlc2V0OnRoaXMuc3ludGguc3RvcEFsbENoYW5uZWxzKCksdGhpcy5zeW50aC5yZXNldEFsbENvbnRyb2xsZXJzKCk7YnJlYWs7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBFdmVudDogJWMke2Uuc3RhdHVzQnl0ZX0lYyBzdGF0dXMgYnl0ZTogJWMke09iamVjdC5rZXlzKE0pLmZpbmQoYT0+TVthXT09PW4uc3RhdHVzKX1gLGMud2FybixjLnVucmVjb2duaXplZCxjLndhcm4sYy52YWx1ZSk7YnJlYWt9bi5zdGF0dXM+PTAmJm4uc3RhdHVzPDEyOCYmdGhpcy5jYWxsRXZlbnQoIm1ldGFFdmVudCIse2V2ZW50OmUsdHJhY2tJbmRleDpBfSl9ZnVuY3Rpb24gUW8oKXtpZih0aGlzLnBhdXNlZHx8IXRoaXMuX21pZGlEYXRhKXJldHVybjtsZXQgZT10aGlzLmN1cnJlbnRUaW1lO2Zvcig7dGhpcy5wbGF5ZWRUaW1lPGU7KXtsZXQgQT10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxuPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tBXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbQV0rK107dGhpcy5wcm9jZXNzRXZlbnQobixBKTtsZXQgcz10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxhPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tzXTtpZih0aGlzLmxvb3BDb3VudD4wJiZ0aGlzLl9taWRpRGF0YS5sb29wLmVuZDw9bi50aWNrcyl7dGhpcy5sb29wQ291bnQhPT0xLzAmJih0aGlzLmxvb3BDb3VudC0tLHRoaXMuY2FsbEV2ZW50KCJsb29wQ291bnRDaGFuZ2UiLHtuZXdDb3VudDp0aGlzLmxvb3BDb3VudH0pKSx0aGlzLnNldFRpbWVUaWNrcyh0aGlzLl9taWRpRGF0YS5sb29wLnN0YXJ0KTtyZXR1cm59aWYoYS5ldmVudHMubGVuZ3RoPD10aGlzLmV2ZW50SW5kZXhlc1tzXSl7dGhpcy5zb25nSXNGaW5pc2hlZCgpO3JldHVybn1sZXQgcj1hLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tzXV07dGhpcy5wbGF5ZWRUaW1lKz10aGlzLm9uZVRpY2tUb1NlY29uZHMqKHIudGlja3Mtbi50aWNrcyl9fWZ1bmN0aW9uIHVvKGUsQSl7dGhpcy5fbWlkaURhdGEudHJhY2tzW2VdLmNoYW5uZWxzLnNpemUhPT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQ9PT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2LHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0c1tBXT0wKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09PT12b2lkIDAmJih0aGlzLnN5bnRoLm1pZGlDaGFubmVscy5sZW5ndGg8dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrMTUmJnRoaXMuYWRkTmV3TUlESVBvcnQoKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2KSx0aGlzLmN1cnJlbnRNSURJUG9ydHNbZV09QSl9ZnVuY3Rpb24gZm8oZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiVGhpcyBNSURJIGhhcyBubyB0cmFja3MhIik7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqZS50aW1lRGl2aXNpb24pLHRoaXMuX21pZGlEYXRhPWUsdGhpcy5zeW50aC5jbGVhckVtYmVkZGVkQmFuaygpLHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rIT09dm9pZCAwJiYocCgiJWNFbWJlZGRlZCBzb3VuZGJhbmsgZGV0ZWN0ZWQhIFVzaW5nIGl0LiIsYy5yZWNvZ25pemVkKSx0aGlzLnN5bnRoLnNldEVtYmVkZGVkU291bmRCYW5rKHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rLHRoaXMuX21pZGlEYXRhLmJhbmtPZmZzZXQpKSxiQSgiJWNQcmVsb2FkaW5nIHNhbXBsZXMuLi4iLGMuaW5mbyksdGhpcy5fbWlkaURhdGEuZ2V0VXNlZFByb2dyYW1zQW5kS2V5cyh0aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIpLmZvckVhY2goKHQsbik9PntwKGAlY1ByZWxvYWRpbmcgdXNlZCBzYW1wbGVzIG9uICVjJHtuLm5hbWV9JWMuLi5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKTtmb3IobGV0IHMgb2YgdCl7bGV0W2Escl09cy5zcGxpdCgiLSIpLm1hcChOdW1iZXIpO3RoaXMuc3ludGguZ2V0Vm9pY2VzRm9yUHJlc2V0KG4sYSxyLGEpfX0pLFooKSx0aGlzLmN1cnJlbnRNSURJUG9ydHM9dGhpcy5fbWlkaURhdGEudHJhY2tzLm1hcCh0PT50LnBvcnQpLHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0PTAsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzPXt9LHRoaXMuX21pZGlEYXRhLnRyYWNrcy5mb3JFYWNoKCh0LG4pPT57dGhpcy5hc3NpZ25NSURJUG9ydChuLHQucG9ydCl9KSx0aGlzLmZpcnN0Tm90ZVRpbWU9dGhpcy5fbWlkaURhdGEubWlkaVRpY2tzVG9TZWNvbmRzKHRoaXMuX21pZGlEYXRhLmZpcnN0Tm90ZU9uKSxwKGAlY1RvdGFsIHNvbmcgdGltZTogJHtmcyhNYXRoLmNlaWwodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfWAsYy5yZWNvZ25pemVkKSx0aGlzLmNhbGxFdmVudCgic29uZ0NoYW5nZSIse3NvbmdJbmRleDp0aGlzLl9zb25nSW5kZXh9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbjw9LjImJihzQShgJWNWZXJ5IHNob3J0IHNvbmc6ICgke2ZzKE1hdGgucm91bmQodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfSkuIERpc2FibGluZyBsb29wIWAsYy53YXJuKSx0aGlzLmxvb3BDb3VudD0wKSx0aGlzLmN1cnJlbnRUaW1lPTB9dmFyIGk9e0lOVkFMSUQ6LTEsc3RhcnRBZGRyc09mZnNldDowLGVuZEFkZHJPZmZzZXQ6MSxzdGFydGxvb3BBZGRyc09mZnNldDoyLGVuZGxvb3BBZGRyc09mZnNldDozLHN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXQ6NCxtb2RMZm9Ub1BpdGNoOjUsdmliTGZvVG9QaXRjaDo2LG1vZEVudlRvUGl0Y2g6Nyxpbml0aWFsRmlsdGVyRmM6OCxpbml0aWFsRmlsdGVyUTo5LG1vZExmb1RvRmlsdGVyRmM6MTAsbW9kRW52VG9GaWx0ZXJGYzoxMSxlbmRBZGRyc0NvYXJzZU9mZnNldDoxMixtb2RMZm9Ub1ZvbHVtZToxMyx1bnVzZWQxOjE0LGNob3J1c0VmZmVjdHNTZW5kOjE1LHJldmVyYkVmZmVjdHNTZW5kOjE2LHBhbjoxNyx1bnVzZWQyOjE4LHVudXNlZDM6MTksdW51c2VkNDoyMCxkZWxheU1vZExGTzoyMSxmcmVxTW9kTEZPOjIyLGRlbGF5VmliTEZPOjIzLGZyZXFWaWJMRk86MjQsZGVsYXlNb2RFbnY6MjUsYXR0YWNrTW9kRW52OjI2LGhvbGRNb2RFbnY6MjcsZGVjYXlNb2RFbnY6Mjgsc3VzdGFpbk1vZEVudjoyOSxyZWxlYXNlTW9kRW52OjMwLGtleU51bVRvTW9kRW52SG9sZDozMSxrZXlOdW1Ub01vZEVudkRlY2F5OjMyLGRlbGF5Vm9sRW52OjMzLGF0dGFja1ZvbEVudjozNCxob2xkVm9sRW52OjM1LGRlY2F5Vm9sRW52OjM2LHN1c3RhaW5Wb2xFbnY6MzcscmVsZWFzZVZvbEVudjozOCxrZXlOdW1Ub1ZvbEVudkhvbGQ6Mzksa2V5TnVtVG9Wb2xFbnZEZWNheTo0MCxpbnN0cnVtZW50OjQxLHJlc2VydmVkMTo0MixrZXlSYW5nZTo0Myx2ZWxSYW5nZTo0NCxzdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldDo0NSxrZXlOdW06NDYsdmVsb2NpdHk6NDcsaW5pdGlhbEF0dGVudWF0aW9uOjQ4LHJlc2VydmVkMjo0OSxlbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQ6NTAsY29hcnNlVHVuZTo1MSxmaW5lVHVuZTo1MixzYW1wbGVJRDo1MyxzYW1wbGVNb2Rlczo1NCxyZXNlcnZlZDM6NTUsc2NhbGVUdW5pbmc6NTYsZXhjbHVzaXZlQ2xhc3M6NTcsb3ZlcnJpZGluZ1Jvb3RLZXk6NTgsdW51c2VkNTo1OSxlbmRPcGVyOjYwLHZpYkxmb1RvVm9sdW1lOjYxLHZpYkxmb1RvRmlsdGVyRmM6NjJ9LE1uPU9iamVjdC5rZXlzKGkpLmxlbmd0aCxtbz1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGkpKSx4PVtdO3hbaS5zdGFydEFkZHJzT2Zmc2V0XT17bWluOjAsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZEFkZHJPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5zdGFydGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLnN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46MCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9QaXRjaF09e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub1BpdGNoXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvUGl0Y2hdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuaW5pdGlhbEZpbHRlckZjXT17bWluOjE1MDAsbWF4OjEzNTAwLGRlZjoxMzUwMCxucnBuOjJ9O3hbaS5pbml0aWFsRmlsdGVyUV09e21pbjowLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9GaWx0ZXJGY109e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub0ZpbHRlckZjXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvRmlsdGVyRmNdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuZW5kQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5tb2RMZm9Ub1ZvbHVtZV09e21pbjotOTYwLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kudmliTGZvVG9Wb2x1bWVdPXttaW46LTk2MCxtYXg6OTYwLGRlZjowLG5ycG46MX07eFtpLmNob3J1c0VmZmVjdHNTZW5kXT17bWluOjAsbWF4OjFlMyxkZWY6MCxucnBuOjF9O3hbaS5yZXZlcmJFZmZlY3RzU2VuZF09e21pbjowLG1heDoxZTMsZGVmOjAsbnJwbjoxfTt4W2kucGFuXT17bWluOi01MDAsbWF4OjUwMCxkZWY6MCxucnBuOjF9O3hbaS5kZWxheU1vZExGT109e21pbjotMTJlMyxtYXg6NWUzLGRlZjotMTJlMyxucnBuOjJ9O3hbaS5mcmVxTW9kTEZPXT17bWluOi0xNmUzLG1heDo0NTAwLGRlZjowLG5ycG46NH07eFtpLmRlbGF5VmliTEZPXT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmZyZXFWaWJMRk9dPXttaW46LTE2ZTMsbWF4OjQ1MDAsZGVmOjAsbnJwbjo0fTt4W2kuZGVsYXlNb2RFbnZdPXttaW46LTMyNzY4LG1heDo1ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5hdHRhY2tNb2RFbnZdPXttaW46LTMyNzY4LG1heDo4ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5ob2xkTW9kRW52XT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmRlY2F5TW9kRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLnN1c3RhaW5Nb2RFbnZdPXttaW46MCxtYXg6MWUzLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VNb2RFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Nb2RFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvTW9kRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuZGVsYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuYXR0YWNrVm9sRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmhvbGRWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuZGVjYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuc3VzdGFpblZvbEVudl09e21pbjowLG1heDoxNDQwLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Wb2xFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvVm9sRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5rZXlOdW1dPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kudmVsb2NpdHldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kuaW5pdGlhbEF0dGVudWF0aW9uXT17bWluOjAsbWF4OjE0NDAsZGVmOjAsbnJwbjoxfTt4W2kuZW5kbG9vcEFkZHJzQ29hcnNlT2Zmc2V0XT17bWluOi0zMjc2OCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kuY29hcnNlVHVuZV09e21pbjotMTIwLG1heDoxMjAsZGVmOjAsbnJwbjoxfTt4W2kuZmluZVR1bmVdPXttaW46LTEyNzAwLG1heDoxMjcwMCxkZWY6MCxucnBuOjF9O3hbaS5zY2FsZVR1bmluZ109e21pbjowLG1heDoxMjAwLGRlZjoxMDAsbnJwbjoxfTt4W2kuZXhjbHVzaXZlQ2xhc3NdPXttaW46MCxtYXg6OTk5OTksZGVmOjAsbnJwbjowfTt4W2kub3ZlcnJpZGluZ1Jvb3RLZXldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjowfTt4W2kuc2FtcGxlTW9kZXNdPXttaW46MCxtYXg6MyxkZWY6MCxucnBuOjB9O3ZhciB3QT17bW9ub1NhbXBsZToxLHJpZ2h0U2FtcGxlOjIsbGVmdFNhbXBsZTo0LGxpbmtlZFNhbXBsZTo4LHJvbU1vbm9TYW1wbGU6MzI3Njkscm9tUmlnaHRTYW1wbGU6MzI3NzAscm9tTGVmdFNhbXBsZTozMjc3Mixyb21MaW5rZWRTYW1wbGU6MzI3NzZ9LGo9e25vQ29udHJvbGxlcjowLG5vdGVPblZlbG9jaXR5OjIsbm90ZU9uS2V5TnVtOjMscG9seVByZXNzdXJlOjEwLGNoYW5uZWxQcmVzc3VyZToxMyxwaXRjaFdoZWVsOjE0LHBpdGNoV2hlZWxSYW5nZToxNixsaW5rOjEyN30sUUE9e2xpbmVhcjowLGNvbmNhdmU6MSxjb252ZXg6Mixzd2l0Y2g6M307dmFyIFQ9e25vbmU6MCxtb2RMZm86MSx2ZWxvY2l0eToyLGtleU51bTozLHZvbEVudjo0LG1vZEVudjo1LHBpdGNoV2hlZWw6Nixwb2x5UHJlc3N1cmU6NyxjaGFubmVsUHJlc3N1cmU6OCx2aWJyYXRvTGZvOjksbW9kdWxhdGlvbldoZWVsOjEyOSx2b2x1bWU6MTM1LHBhbjoxMzgsZXhwcmVzc2lvbjoxMzksY2hvcnVzOjIyMSxyZXZlcmI6MjE5LHBpdGNoV2hlZWxSYW5nZToyNTYsZmluZVR1bmU6MjU3LGNvYXJzZVR1bmU6MjU4fSxSPXtub25lOjAsZ2FpbjoxLHJlc2VydmVkOjIscGl0Y2g6MyxwYW46NCxrZXlOdW06NSxjaG9ydXNTZW5kOjEyOCxyZXZlcmJTZW5kOjEyOSxtb2RMZm9GcmVxOjI2MCxtb2RMZm9EZWxheToyNjEsdmliTGZvRnJlcToyNzYsdmliTGZvRGVsYXk6Mjc3LHZvbEVudkF0dGFjazo1MTgsdm9sRW52RGVjYXk6NTE5LHJlc2VydmVkRUcxOjUyMCx2b2xFbnZSZWxlYXNlOjUyMSx2b2xFbnZTdXN0YWluOjUyMix2b2xFbnZEZWxheTo1MjMsdm9sRW52SG9sZDo1MjQsbW9kRW52QXR0YWNrOjc3OCxtb2RFbnZEZWNheTo3NzkscmVzZXJ2ZWRFRzI6NzgwLG1vZEVudlJlbGVhc2U6NzgxLG1vZEVudlN1c3RhaW46NzgyLG1vZEVudkRlbGF5Ojc4Myxtb2RFbnZIb2xkOjc4NCxmaWx0ZXJDdXRvZmY6MTI4MCxmaWx0ZXJROjEyODF9LHlzPXtmb3J3YXJkOjAsbG9vcEFuZFJlbGVhc2U6MX0sbUE9MTI4LGJuPTE0NyxXZT1uZXcgSW50MTZBcnJheShibikuZmlsbCgwKSxTQT0oZSxBKT0+V2VbZV09QTw8NztTQShTLm1haW5Wb2x1bWUsMTAwKTtTQShTLmJhbGFuY2UsNjQpO1NBKFMuZXhwcmVzc2lvbkNvbnRyb2xsZXIsMTI3KTtTQShTLnBhbiw2NCk7U0EoUy5wb3J0YW1lbnRvT25PZmYsMTI3KTtTQShTLmZpbHRlclJlc29uYW5jZSw2NCk7U0EoUy5yZWxlYXNlVGltZSw2NCk7U0EoUy5hdHRhY2tUaW1lLDY0KTtTQShTLmJyaWdodG5lc3MsNjQpO1NBKFMuZGVjYXlUaW1lLDY0KTtTQShTLnZpYnJhdG9SYXRlLDY0KTtTQShTLnZpYnJhdG9EZXB0aCw2NCk7U0EoUy52aWJyYXRvRGVsYXksNjQpO1NBKFMuZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNiw2NCk7U0EoUy5nZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4LDY0KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTt2YXIgbnM9MTtXZVtTLnBvcnRhbWVudG9Db250cm9sXT1ucztTQShtQStqLnBpdGNoV2hlZWwsNjQpO1NBKG1BK2oucGl0Y2hXaGVlbFJhbmdlLDIpO3ZhciBlYT1PYmplY3Qua2V5cyhJQSkubGVuZ3RoLHRhPW5ldyBGbG9hdDMyQXJyYXkoZWEpO3RhW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXT0xO2Z1bmN0aW9uIFNvKGU9ITApe2lmKGUmJnAoIiVjUmVzZXR0aW5nIGFsbCBjb250cm9sbGVycyEiLGMuaW5mbyksdGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJhbGxDb250cm9sbGVyUmVzZXQiLHZvaWQgMCksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLE9zKSwhKCF0aGlzLnByaXZhdGVQcm9wcy5kcnVtUHJlc2V0fHwhdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCkpe2ZvcihsZXQgQT0wO0E8dGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoO0ErKyl7bGV0IHQ9dGhpcy5taWRpQ2hhbm5lbHNbQV07dC5yZXNldENvbnRyb2xsZXJzKCExKSx0LnJlc2V0UHJlc2V0KCk7Zm9yKGxldCBuPTA7bjwxMjg7bisrKXRoaXMubWlkaUNoYW5uZWxzW0FdLmxvY2tlZENvbnRyb2xsZXJzW25dJiZ0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoImNvbnRyb2xsZXJDaGFuZ2UiLHtjaGFubmVsOkEsY29udHJvbGxlck51bWJlcjpuLGNvbnRyb2xsZXJWYWx1ZTp0aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbl0+Pjd9KTtpZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXSl7bGV0IG49dGhpcy5taWRpQ2hhbm5lbHNbQV0ubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF07dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJwaXRjaFdoZWVsIix7Y2hhbm5lbDpBLHBpdGNoOm59KX1pZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdKXtsZXQgbj10aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdPj43O3RoaXMucHJpdmF0ZVByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDpBLHByZXNzdXJlOm59KX19dGhpcy5wcml2YXRlUHJvcHMudHVuaW5ncy5sZW5ndGg9MCx0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLmxlbmd0aD0wO2ZvcihsZXQgQT0wO0E8MTI4O0ErKyl0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLnB1c2goW10pO3RoaXMuc2V0TUlESVZvbHVtZSgxKX19ZnVuY3Rpb24gcG8oZT0hMCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxXZS5sZW5ndGg7dCsrKXtpZih0aGlzLmxvY2tlZENvbnRyb2xsZXJzW3RdKWNvbnRpbnVlO2xldCBuPVdlW3RdO3RoaXMubWlkaUNvbnRyb2xsZXJzW3RdIT09biYmdDwxMjc/dD09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbdF09bnM6dCE9PVMucG9ydGFtZW50b0NvbnRyb2wmJnQhPT1TLmRhdGFFbnRyeU1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdGhpcy5jb250cm9sbGVyQ2hhbmdlKHQsbj4+NyxlKTp0aGlzLm1pZGlDb250cm9sbGVyc1t0XT1ufXRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9LHRoaXMucmFuZG9tUGFuPSExLHRoaXMuc3lzRXhNb2R1bGF0b3JzLnJlc2V0TW9kdWxhdG9ycygpO2xldCBBPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdO3RoaXMuY3VzdG9tQ29udHJvbGxlcnMuc2V0KHRhKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsQSksdGhpcy5yZXNldFBhcmFtZXRlcnMoKX1mdW5jdGlvbiB5bygpe3RoaXMuc2V0QmFua01TQihmQS5nZXREZWZhdWx0QmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCksdGhpcy5zZXRHU0RydW1zKCExKSx0aGlzLnNldERydW1zKHRoaXMuY2hhbm5lbE51bWJlciUxNj09PVNlKSx0aGlzLnByb2dyYW1DaGFuZ2UoMCl9dmFyIG5hPW5ldyBTZXQoW1MuYmFua1NlbGVjdCxTLmJhbmtTZWxlY3RMU0IsUy5tYWluVm9sdW1lLFMubWFpblZvbHVtZUxTQixTLnBhbixTLnBhbkxTQixTLnJldmVyYkRlcHRoLFMudHJlbW9sb0RlcHRoLFMuY2hvcnVzRGVwdGgsUy5kZXR1bmVEZXB0aCxTLnBoYXNlckRlcHRoLFMuc291bmRWYXJpYXRpb24sUy5maWx0ZXJSZXNvbmFuY2UsUy5yZWxlYXNlVGltZSxTLmF0dGFja1RpbWUsUy5icmlnaHRuZXNzLFMuZGVjYXlUaW1lLFMudmlicmF0b1JhdGUsUy52aWJyYXRvRGVwdGgsUy52aWJyYXRvRGVsYXksUy5zb3VuZENvbnRyb2xsZXIxMF0pO2Z1bmN0aW9uIGtvKCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCksdGhpcy5waXRjaFdoZWVsKDgxOTIpLHRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9O2ZvcihsZXQgZT0wO2U8MTI4O2UrKyl7bGV0IEE9V2VbZV07IW5hLmhhcyhlKSYmQSE9PXRoaXMubWlkaUNvbnRyb2xsZXJzW2VdJiYoZT09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbZV09bnM6dGhpcy5jb250cm9sbGVyQ2hhbmdlKGUsQT4+NykpfXRoaXMucmVzZXRHZW5lcmF0b3JPdmVycmlkZXMoKSx0aGlzLnJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpfWZ1bmN0aW9uIERvKCl7dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5JZGxlLHRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl09MTYyNTYsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT0xNjI1Nix0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPTE2MjU2LHRoaXMubWlkaUNvbnRyb2xsZXJzW1MucmVnaXN0ZXJlZFBhcmFtZXRlck1TQl09MTYyNTYsdGhpcy5yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpLHRoaXMucmVzZXRHZW5lcmF0b3JPZmZzZXRzKCl9dmFyIEdlPVdlLnNsaWNlKDAsMTI4KTtmdW5jdGlvbiB3byhlLEE9dm9pZCAwKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuITE7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqdGhpcy5fbWlkaURhdGEudGltZURpdmlzaW9uKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElSZXNldCgpOih0aGlzLnN5bnRoLnJlc2V0QWxsQ29udHJvbGxlcnMoKSx0aGlzLnN5bnRoLnN0b3BBbGxDaGFubmVscyghMSkpLHRoaXMucGxheWVkVGltZT0wLHRoaXMuZXZlbnRJbmRleGVzPUFycmF5KHRoaXMuX21pZGlEYXRhLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCk7bGV0IHQ9dGhpcy5zeW50aC5taWRpQ2hhbm5lbHMubGVuZ3RoLG49QXJyYXkodCkuZmlsbCg4MTkyKSxzPVtdO2ZvcihsZXQgbz0wO288dDtvKyspcy5wdXNoKHtwcm9ncmFtOi0xLGJhbms6MCxhY3R1YWxCYW5rOjB9KTtsZXQgYT1vPT5vPT09Uy5kYXRhRGVjcmVtZW50fHxvPT09Uy5kYXRhSW5jcmVtZW50fHxvPT09Uy5kYXRhRW50cnlNU0J8fG89PT1TLmRhdGFFbnRyeUxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMuYmFua1NlbGVjdHx8bz09PVMuYmFua1NlbGVjdExTQnx8bz09PVMucmVzZXRBbGxDb250cm9sbGVycyxyPVtdO2ZvcihsZXQgbz0wO288dDtvKyspci5wdXNoKEFycmF5LmZyb20oR2UpKTtmdW5jdGlvbiBJKG8pe2lmKG5bb109ODE5MixyPy5bb10hPT12b2lkIDApZm9yKGxldCBnPTA7ZzxHZS5sZW5ndGg7ZysrKW5hLmhhcyhnKXx8KHJbb11bZ109R2VbZ10pfWZvcig7Oyl7bGV0IG89dGhpcy5maW5kRmlyc3RFdmVudEluZGV4KCksZz10aGlzLl9taWRpRGF0YS50cmFja3Nbb10sQj1nLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tvXV07aWYoQSE9PXZvaWQgMCl7aWYoQi50aWNrcz49QSlicmVha31lbHNlIGlmKHRoaXMucGxheWVkVGltZT49ZSlicmVhaztsZXQgZD1BcyhCLnN0YXR1c0J5dGUpLGg9ZC5jaGFubmVsKyh0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbZy5wb3J0XXx8MCk7c3dpdGNoKGQuc3RhdHVzKXtjYXNlIE0ubm90ZU9uOnJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1MucG9ydGFtZW50b0NvbnRyb2xdPUIuZGF0YVswXTticmVhaztjYXNlIE0ubm90ZU9mZjpicmVhaztjYXNlIE0ucGl0Y2hXaGVlbDpuW2hdPUIuZGF0YVsxXTw8N3xCLmRhdGFbMF07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6e2lmKHRoaXMuX21pZGlEYXRhLmlzTXVsdGlQb3J0JiZnLmNoYW5uZWxzLnNpemU9PT0wKWJyZWFrO2xldCBRPXNbaF07US5wcm9ncmFtPUIuZGF0YVswXSxRLmFjdHVhbEJhbms9US5iYW5rO2JyZWFrfWNhc2UgTS5jb250cm9sbGVyQ2hhbmdlOntpZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmZy5jaGFubmVscy5zaXplPT09MClicmVhaztsZXQgUT1CLmRhdGFbMF07aWYoYShRKSl7bGV0IG09Qi5kYXRhWzFdO2lmKFE9PT1TLmJhbmtTZWxlY3Qpe3NbaF0uYmFuaz1tO2JyZWFrfWVsc2UgUT09PVMucmVzZXRBbGxDb250cm9sbGVycyYmSShoKTt0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElDQyhoLFEsbSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGgsUSxtKX1lbHNlIHJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1FdPUIuZGF0YVsxXTticmVha31kZWZhdWx0OnRoaXMucHJvY2Vzc0V2ZW50KEIsbyk7YnJlYWt9dGhpcy5ldmVudEluZGV4ZXNbb10rKyxvPXRoaXMuZmluZEZpcnN0RXZlbnRJbmRleCgpO2xldCBDPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tvXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbb11dO2lmKEM9PT12b2lkIDApcmV0dXJuIHRoaXMuc3RvcCgpLCExO3RoaXMucGxheWVkVGltZSs9dGhpcy5vbmVUaWNrVG9TZWNvbmRzKihDLnRpY2tzLUIudGlja3MpfWlmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2spe2ZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zZW5kTUlESVBpdGNoV2hlZWwobyxuW29dPj43LG5bb10mMTI3KSxyW29dIT09dm9pZCAwJiZyW29dLmZvckVhY2goKGcsQik9PntnIT09R2VbQl0mJiFhKEIpJiZ0aGlzLnNlbmRNSURJQ0MobyxCLGcpfSksc1tvXS5wcm9ncmFtPj0wJiZzW29dLmFjdHVhbEJhbms+PTApe2xldCBnPXNbb10uYWN0dWFsQmFuazt0aGlzLnNlbmRNSURJQ0MobyxTLmJhbmtTZWxlY3QsZyksdGhpcy5zZW5kTUlESVByb2dyYW1DaGFuZ2UobyxzW29dLnByb2dyYW0pfX1lbHNlIGZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zeW50aC5waXRjaFdoZWVsKG8sbltvXSkscltvXSE9PXZvaWQgMCYmcltvXS5mb3JFYWNoKChnLEIpPT57ZyE9PUdlW0JdJiYhYShCKSYmdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sQixnKX0pLHNbb10uYWN0dWFsQmFuaz49MCl7bGV0IGc9c1tvXTtnLnByb2dyYW0hPT0tMT8odGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYWN0dWFsQmFuayksdGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG8sZy5wcm9ncmFtKSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYmFuayl9cmV0dXJuIHRoaXMucGF1c2VkJiYodGhpcy5wYXVzZWRUaW1lPXRoaXMucGxheWVkVGltZSksITB9dmFyIHNhPWNsYXNze3NvbmdzPVtdO3NodWZmbGVkU29uZ0luZGV4ZXM9W107c3ludGg7ZXh0ZXJuYWxNSURJUGxheWJhY2s9ITE7bG9vcENvdW50PTA7c2tpcFRvRmlyc3ROb3RlT249ITA7b25FdmVudENhbGw7cHJvY2Vzc1RpY2s9UW8uYmluZCh0aGlzKTtmaXJzdE5vdGVUaW1lPTA7b25lVGlja1RvU2Vjb25kcz0wO2V2ZW50SW5kZXhlcz1bXTtwbGF5ZWRUaW1lPTA7cGF1c2VkVGltZT0tMTthYnNvbHV0ZVN0YXJ0VGltZT0wO3BsYXlpbmdOb3Rlcz1bXTtjdXJyZW50TUlESVBvcnRzPVtdO21pZGlQb3J0Q2hhbm5lbE9mZnNldD0wO21pZGlQb3J0Q2hhbm5lbE9mZnNldHM9e307YXNzaWduTUlESVBvcnQ9dW8uYmluZCh0aGlzKTtsb2FkTmV3U2VxdWVuY2U9Zm8uYmluZCh0aGlzKTtwcm9jZXNzRXZlbnQ9bG8uYmluZCh0aGlzKTtzZXRUaW1lVG89d28uYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlKXt0aGlzLnN5bnRoPWUsdGhpcy5hYnNvbHV0ZVN0YXJ0VGltZT10aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWV9X21pZGlEYXRhO2dldCBtaWRpRGF0YSgpe3JldHVybiB0aGlzLl9taWRpRGF0YX1nZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fbWlkaURhdGE/LmR1cmF0aW9uPz8wfV9zb25nSW5kZXg9MDtnZXQgc29uZ0luZGV4KCl7cmV0dXJuIHRoaXMuX3NvbmdJbmRleH1zZXQgc29uZ0luZGV4KGUpe3RoaXMuX3NvbmdJbmRleD1lLHRoaXMuX3NvbmdJbmRleD1NYXRoLm1heCgwLGUldGhpcy5zb25ncy5sZW5ndGgpLHRoaXMubG9hZEN1cnJlbnRTb25nKCl9X3NodWZmbGVNb2RlPSExO2dldCBzaHVmZmxlTW9kZSgpe3JldHVybiB0aGlzLl9zaHVmZmxlTW9kZX1zZXQgc2h1ZmZsZU1vZGUoZSl7dGhpcy5fc2h1ZmZsZU1vZGU9ZSxlPyh0aGlzLnNodWZmbGVTb25nSW5kZXhlcygpLHRoaXMuX3NvbmdJbmRleD0wLHRoaXMubG9hZEN1cnJlbnRTb25nKCkpOnRoaXMuX3NvbmdJbmRleD10aGlzLnNodWZmbGVkU29uZ0luZGV4ZXNbdGhpcy5fc29uZ0luZGV4XX1fcGxheWJhY2tSYXRlPTE7Z2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9c2V0IHBsYXliYWNrUmF0ZShlKXtsZXQgQT10aGlzLmN1cnJlbnRUaW1lO3RoaXMuX3BsYXliYWNrUmF0ZT1lLHRoaXMuY3VycmVudFRpbWU9QX1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwP3RoaXMucGF1c2VkVGltZToodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLXRoaXMuYWJzb2x1dGVTdGFydFRpbWUpKnRoaXMuX3BsYXliYWNrUmF0ZX1zZXQgY3VycmVudFRpbWUoZSl7aWYodGhpcy5fbWlkaURhdGEpaWYodGhpcy5wYXVzZWQmJih0aGlzLnBhdXNlZFRpbWU9ZSksZT50aGlzLl9taWRpRGF0YS5kdXJhdGlvbnx8ZTwwKXRoaXMuc2tpcFRvRmlyc3ROb3RlT24/dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk6dGhpcy5zZXRUaW1lVGlja3MoMCk7ZWxzZSBpZih0aGlzLnNraXBUb0ZpcnN0Tm90ZU9uJiZlPHRoaXMuZmlyc3ROb3RlVGltZSl7dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk7cmV0dXJufWVsc2V7aWYodGhpcy5wbGF5aW5nTm90ZXM9W10sdGhpcy5jYWxsRXZlbnQoInRpbWVDaGFuZ2UiLHtuZXdUaW1lOmV9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbj09PTApe3NBKCJObyBkdXJhdGlvbiEiKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOiEwfSk7cmV0dXJufXRoaXMuc2V0VGltZVRvKGUpLHRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUoZSl9fWdldCBwYXVzZWQoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwfXBsYXkoKXtpZighdGhpcy5fbWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBzb25ncyBsb2FkZWQgaW4gdGhlIHNlcXVlbmNlciEiKTt0aGlzLmN1cnJlbnRUaW1lPj10aGlzLl9taWRpRGF0YS5kdXJhdGlvbiYmKHRoaXMuY3VycmVudFRpbWU9MCksdGhpcy5wYXVzZWQmJnRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUodGhpcy5wYXVzZWRUaW1lPz8wKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrfHx0aGlzLnBsYXlpbmdOb3Rlcy5mb3JFYWNoKGU9Pnt0aGlzLnN5bnRoLm5vdGVPbihlLmNoYW5uZWwsZS5taWRpTm90ZSxlLnZlbG9jaXR5KX0pLHRoaXMucGF1c2VkVGltZT12b2lkIDB9cGF1c2UoKXt0aGlzLnBhdXNlSW50ZXJuYWwoITEpfWxvYWROZXdTb25nTGlzdChlKXt0aGlzLnNvbmdzPWUsISh0aGlzLnNvbmdzLmxlbmd0aDwxKSYmKHRoaXMuX3NvbmdJbmRleD0wLHRoaXMuc2h1ZmZsZVNvbmdJbmRleGVzKCksdGhpcy5jYWxsRXZlbnQoInNvbmdMaXN0Q2hhbmdlIix7bmV3U29uZ0xpc3Q6Wy4uLnRoaXMuc29uZ3NdfSksdGhpcy5sb2FkQ3VycmVudFNvbmcoKSl9Y2FsbEV2ZW50KGUsQSl7dGhpcz8ub25FdmVudENhbGw/Lih7dHlwZTplLGRhdGE6QX0pfXBhdXNlSW50ZXJuYWwoZSl7dGhpcy5wYXVzZWR8fCh0aGlzLnN0b3AoKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOmV9KSl9c29uZ0lzRmluaXNoZWQoKXtpZih0aGlzLnNvbmdzLmxlbmd0aD09PTEpe3RoaXMucGF1c2VJbnRlcm5hbCghMCk7cmV0dXJufXRoaXMuX3NvbmdJbmRleCsrLHRoaXMuX3NvbmdJbmRleCU9dGhpcy5zb25ncy5sZW5ndGgsdGhpcy5sb2FkQ3VycmVudFNvbmcoKX1zdG9wKCl7dGhpcy5wYXVzZWRUaW1lPXRoaXMuY3VycmVudFRpbWU7Zm9yKGxldCBlPTA7ZTwxNjtlKyspdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGUsUy5zdXN0YWluUGVkYWwsMCk7aWYodGhpcy5zeW50aC5zdG9wQWxsQ2hhbm5lbHMoKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrKXtmb3IobGV0IGUgb2YgdGhpcy5wbGF5aW5nTm90ZXMpdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ubm90ZU9mZnxlLmNoYW5uZWwlMTYsZS5taWRpTm90ZV0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElDQyhlLFMuYWxsTm90ZXNPZmYsMCl9fWZpbmRGaXJzdEV2ZW50SW5kZXgoKXtsZXQgZT0wLEE9MS8wO3JldHVybiB0aGlzLl9taWRpRGF0YS50cmFja3MuZm9yRWFjaCgodCxuKT0+e2lmKHRoaXMuZXZlbnRJbmRleGVzW25dPj10LmV2ZW50cy5sZW5ndGgpcmV0dXJuO2xldCBzPXQuZXZlbnRzW3RoaXMuZXZlbnRJbmRleGVzW25dXTtzLnRpY2tzPEEmJihlPW4sQT1zLnRpY2tzKX0pLGV9YWRkTmV3TUlESVBvcnQoKXtmb3IobGV0IGU9MDtlPDE2O2UrKyl0aGlzLnN5bnRoLmNyZWF0ZU1JRElDaGFubmVsKCl9c2VuZE1JRElNZXNzYWdlKGUpe3RoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuY2FsbEV2ZW50KCJtaWRpTWVzc2FnZSIse21lc3NhZ2U6ZX0pfXNlbmRNSURJUmVzZXQoKXt0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5yZXNldF0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxTLmFsbFNvdW5kT2ZmLDBdKSx0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5jb250cm9sbGVyQ2hhbmdlfGUsUy5yZXNldEFsbENvbnRyb2xsZXJzLDBdKX1sb2FkQ3VycmVudFNvbmcoKXtsZXQgZT10aGlzLl9zb25nSW5kZXg7dGhpcy5fc2h1ZmZsZU1vZGUmJihlPXRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlc1t0aGlzLl9zb25nSW5kZXhdKSx0aGlzLmxvYWROZXdTZXF1ZW5jZSh0aGlzLnNvbmdzW2VdKX1zaHVmZmxlU29uZ0luZGV4ZXMoKXtsZXQgZT10aGlzLnNvbmdzLm1hcCgoQSx0KT0+dCk7Zm9yKHRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlcz1bXTtlLmxlbmd0aD4wOyl7bGV0IEE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTt0aGlzLnNodWZmbGVkU29uZ0luZGV4ZXMucHVzaChBKSxlLnNwbGljZShlLmluZGV4T2YoQSksMSl9fXNlbmRNSURJQ0MoZSxBLHQpe2UlPTE2LHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxBLHRdKX1zZW5kTUlESVByb2dyYW1DaGFuZ2UoZSxBKXtlJT0xNix0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrJiZ0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5wcm9ncmFtQ2hhbmdlfGUsQV0pfXNlbmRNSURJUGl0Y2hXaGVlbChlLEEsdCl7ZSU9MTYsdGhpcy5leHRlcm5hbE1JRElQbGF5YmFjayYmdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ucGl0Y2hXaGVlbHxlLHQsQV0pfXNldFRpbWVUaWNrcyhlKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuO3RoaXMucGxheWluZ05vdGVzPVtdO2xldCBBPXRoaXMuX21pZGlEYXRhLm1pZGlUaWNrc1RvU2Vjb25kcyhlKTt0aGlzLmNhbGxFdmVudCgidGltZUNoYW5nZSIse25ld1RpbWU6QX0pO2xldCB0PXRoaXMuc2V0VGltZVRvKDAsZSk7dGhpcy5yZWNhbGN1bGF0ZVN0YXJ0VGltZSh0aGlzLnBsYXllZFRpbWUpfXJlY2FsY3VsYXRlU3RhcnRUaW1lKGUpe3RoaXMuYWJzb2x1dGVTdGFydFRpbWU9dGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLWUvdGhpcy5fcGxheWJhY2tSYXRlfX0sbHQ9bHQhPT12b2lkIDA/bHQ6e30sa3M9ITEsYWE7bHQuaXNJbml0aWFsaXplZD1uZXcgUHJvbWlzZShlPT5hYT1lKTt2YXIgRm89ZnVuY3Rpb24oZSl7dmFyIEEsdCxuLHMsYSxyLEksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGc9IiIsQj0wO2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZG8gcz1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksYT1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSkscj1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksST1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksQT1zPDwyfGE+PjQsdD0oMTUmYSk8PDR8cj4+MixuPSgzJnIpPDw2fEksZys9U3RyaW5nLmZyb21DaGFyQ29kZShBKSxyIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpKSxJIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKTt3aGlsZShCPGUubGVuZ3RoKTtyZXR1cm4gZ307KGZ1bmN0aW9uKCl7dmFyIGUsQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyxRLG0seSxGLGssRCx2LEwsRT1FIT09dm9pZCAwP0U6e307RS53YXNtQmluYXJ5PVVpbnQ4QXJyYXkuZnJvbShGbygiQUdGemJRRUFBQUFCcFFFWVlBSi9md0YvWUFGL0FHQUFBWDlnQkg5L2YzOEFZQUFBWUFOL2YzOEJmMkFCZndGL1lBSi9md0JnQm45L2YzOS9md0YvWUFSL2YzOS9BWDlnQlg5L2YzOS9BWDlnQjM5L2YzOS9mMzhCZjJBR2YzOS9mMzkvQUdBSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBZC9mMzkvZjM5L0FHQURmMzkvQUdBQmZ3RjlZQUY5QVgxZ0FueC9BWHhnQW54L0FYOWdBM3g4ZndGOFlBSjhmQUY4WUFGOEFYd0NuZ0lQQTJWdWRnWnRaVzF2Y25rQ0FJQUNBMlZ1ZGdWMFlXSnNaUUZ3QVFRRUEyVnVkZ2wwWVdKc1pVSmhjMlVEZndBRFpXNTJEa1JaVGtGTlNVTlVUMUJmVUZSU0EzOEFBMlZ1ZGdoVFZFRkRTMVJQVUFOL0FBTmxibllKVTFSQlEwdGZUVUZZQTM4QUJtZHNiMkpoYkFoSmJtWnBibWwwZVFOOEFBTmxibllGWVdKdmNuUUFBUU5sYm5ZTlpXNXNZWEpuWlUxbGJXOXllUUFDQTJWdWRnNW5aWFJVYjNSaGJFMWxiVzl5ZVFBQ0EyVnVkaGRoWW05eWRFOXVRMkZ1Ym05MFIzSnZkMDFsYlc5eWVRQUNBMlZ1ZGc1ZlgxOWhjM05sY25SZlptRnBiQUFEQTJWdWRndGZYMTl6WlhSRmNuSk9id0FCQTJWdWRnWmZZV0p2Y25RQUJBTmxibllXWDJWdGMyTnlhWEIwWlc1ZmJXVnRZM0I1WDJKcFp3QUZBM2QyQmdZQ0FRY0hBUUlCQVFjQkNBY0ZBQWtHQ1FvSEJnWUdCZ0VGQmdJQkJnWUtBQWdMQUFZR0JnWUdCZ1lCQUFvTURBTUdCUUFOQ0FvSkFBd09EQThPQVFBR0JnY0VBQkFKRUFFUkFBQURCUXdBQUFNSEJ4SUdBUUFBQndJRkV3TU9CdzhIQmdZUUZBb1ZFeFlYRnhjWEZnUUZCUVlGQUFZa0IzOEJJd0VMZndFakFndC9BU01EQzM4QlFRQUxmd0ZCQUF0OEFTTUVDMzhCUVFBTEI5TUNGUkJmWDJkeWIzZFhZWE50VFdWdGIzSjVBQWdSWDE5ZlpYSnlibTlmYkc5allYUnBiMjRBWXdWZlpuSmxaUUJmQjE5dFlXeHNiMk1BWGdkZmJXVnRZM0I1QUhrSFgyMWxiWE5sZEFCNkJWOXpZbkpyQUhzWFgzTjBZbDkyYjNKaWFYTmZhbk5mWTJoaGJtNWxiSE1BSmhSZmMzUmlYM1p2Y21KcGMxOXFjMTlqYkc5elpRQWxGVjl6ZEdKZmRtOXlZbWx6WDJwelgyUmxZMjlrWlFBb0UxOXpkR0pmZG05eVltbHpYMnB6WDI5d1pXNEFKQnBmYzNSaVgzWnZjbUpwYzE5cWMxOXpZVzF3YkdWZmNtRjBaUUFuQzJSNWJrTmhiR3hmYVdscEFId1RaWE4wWVdKc2FYTm9VM1JoWTJ0VGNHRmpaUUFNQzJkbGRGUmxiWEJTWlhRd0FBOExjblZ1VUc5emRGTmxkSE1BZUF0elpYUlVaVzF3VW1WME1BQU9DSE5sZEZSb2NtVjNBQTBLYzNSaFkydEJiR3h2WXdBSkRITjBZV05yVW1WemRHOXlaUUFMQ1hOMFlXTnJVMkYyWlFBS0NRb0JBQ01BQ3dSOVZGbDlDc2IyQTNZR0FDQUFRQUFMR3dFQmZ5TUdJUUVqQmlBQWFpUUdJd1pCRDJwQmNIRWtCaUFCQ3dRQUl3WUxCZ0FnQUNRR0N3b0FJQUFrQmlBQkpBY0xFQUFqQ0VVRVFDQUFKQWdnQVNRSkN3c0dBQ0FBSkFzTEJBQWpDd3NSQUNBQUJFQWdBQkFSSUFBZ0FCQVNDd3Z2QndFS2Z5QUFRWUFEYWlFSElBY29BZ0FoQlFKQUlBVUVRQ0FBUWZ3QmFpRUVJQVFvQWdBaEFTQUJRUUJLQkVBZ0FFSHdBR29oQ0FOQUlBVWdBa0VZYkdwQkVHb2hDU0FKS0FJQUlRRWdBUVJBSUFnb0FnQWhBeUFGSUFKQkdHeHFRUTFxSVFvZ0NpMEFBQ0VHSUFaQi93RnhJUVlnQXlBR1FiQVFiR3BCQkdvaEF5QURLQUlBSVFNZ0EwRUFTZ1JBUVFBaEF3TkFJQUVnQTBFQ2RHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0EwRUJhaUVESUFnb0FnQWhBU0FLTFFBQUlRWWdCa0gvQVhFaEJpQUJJQVpCc0JCc2FrRUVhaUVCSUFFb0FnQWhCaUFKS0FJQUlRRWdBeUFHU0EwQUN3c2dBQ0FCRUJJTElBVWdBa0VZYkdwQkZHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFRb0FnQWhBU0FDSUFGT0RRTWdCeWdDQUNFRkRBQUFDd0FMQ3dzZ0FFSHdBR29oQXlBREtBSUFJUUVnQVFSQUlBQkI3QUJxSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFBSkFJQUVnQWtHd0VHeHFRUWhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRUnhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRU0JxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRYVFRYWlFRUlBUW9BZ0FoQkNBQUlBUVFFaUFCSUFKQnNCQnNha0dvRUdvaEFTQUJLQUlBSVFFZ0FVVWhCQ0FCUVh4cUlRRkJBQ0FCSUFRYklRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFVb0FnQWhBU0FDSUFGT0RRQWdBeWdDQUNFQkRBRUxDeUFES0FJQUlRRUxJQUFnQVJBU0N5QUFRZmdCYWlFQklBRW9BZ0FoQVNBQUlBRVFFaUFIS0FJQUlRRWdBQ0FCRUJJZ0FFR0lBMm9oQXlBREtBSUFJUUVnQVFSQUlBQkJoQU5xSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFDQUJJQUpCS0d4cVFRUnFJUUVnQVNnQ0FDRUJJQUFnQVJBU0lBSkJBV29oQWlBRktBSUFJUWNnQXlnQ0FDRUJJQUlnQjBnTkFBc0xJQUFnQVJBU0N5QUFRUVJxSVFJZ0FpZ0NBQ0VCSUFGQkFFb0VRRUVBSVFFRFFDQUFRWlFHYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRWlFIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRZGdIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ2hBeUFCUVJCSklRVWdCU0FEY1EwQUN3dEJBQ0VCQTBBZ0FFR2dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR29DR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR3dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFRzRDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFSEFDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FVRUJhaUVCSUFGQkFrY05BQXNMR3dBZ0FFSEVBR29oQUNBQUtBSUFJUUFnQUVVRVFDQUJFRjhMQzN3QkFYOGdBRUhVQjJvaEFTQUJRUUEyQWdBZ0FFR0FDMm9oQVNBQlFRQTJBZ0FnQUVINENtb2hBU0FCUVFBMkFnQWdBRUdjQ0dvaEFTQUJRUUEyQWdBZ0FFSFZDbW9oQVNBQlFRQTZBQUFnQUVIOENtb2hBU0FCUVFBMkFnQWdBRUhVQzJvaEFTQUJRUUEyQWdBZ0FFSFlDMm9oQUNBQVFRQTJBZ0FMOEFRQkIzOGpCaUVMSXdaQkVHb2tCaUFMUVFocUlRY2dDMEVFYWlFS0lBc2hDQ0FBUVNScUlRWWdCaXdBQUNFR0FuOGdCZ1IvSUFCQmdBdHFJUVlnQmlnQ0FDRUdJQVpCZjBvRVFDQUZRUUEyQWdBZ0FDQUJJQUlRRmd3Q0N5QUFRUlJxSVFZZ0JpQUJOZ0lBSUFFZ0Ftb2hBaUFBUVJ4cUlRa2dDU0FDTmdJQUlBQkIyQUJxSVFJZ0FrRUFOZ0lBSUFCQkFCQVhJUWtnQ1VVRVFDQUZRUUEyQWdCQkFBd0NDeUFBSUFjZ0NDQUtFQmdoQ1NBSkJFQWdCeWdDQUNFQ0lBZ29BZ0FoQ1NBS0tBSUFJUWdnQUNBQ0lBa2dDQkFhSVFvZ0J5QUtOZ0lBSUFCQkJHb2hBaUFDS0FJQUlRZ2dDRUVBU2dSQVFRQWhBZ05BSUFCQmxBWnFJQUpCQW5ScUlRY2dCeWdDQUNFSElBY2dDVUVDZEdvaEJ5QUFRZFFHYWlBQ1FRSjBhaUVNSUF3Z0J6WUNBQ0FDUVFGcUlRSWdBaUFJU0EwQUN3c2dBd1JBSUFNZ0NEWUNBQXNnQlNBS05nSUFJQUJCMUFacUlRQWdCQ0FBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQUlMQWtBQ1FBSkFBa0FDUUNBQ0tBSUFJZ05CSUdzT0JBRUNBZ0FDQ3lBQ1FRQTJBZ0FnQUVIVUFHb2hBaUFBRUJraEF3SkFJQU5CZjBjRVFBTkFJQUlvQWdBaEF5QUREUUlnQUJBWklRTWdBMEYvUncwQUN3c0xJQVZCQURZQ0FDQUdLQUlBSVFBZ0FDQUJhd3dGQ3d3QkN3d0JDeUFBUWRRSGFpRUVJQVFvQWdBaEJDQUVSUVJBSUFKQkFEWUNBQ0FBUWRRQWFpRUNJQUFRR1NFREFrQWdBMEYvUndSQUEwQWdBaWdDQUNFRElBTU5BaUFBRUJraEF5QURRWDlIRFFBTEN3c2dCVUVBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQU1MQ3lBQUVCTWdBaUFETmdJQUlBVkJBRFlDQUVFQkJTQUFRUUlRRlVFQUN3c2hBQ0FMSkFZZ0FBc0pBQ0FBSUFFMkFsZ0xwZ29CREg4Z0FFR0FDMm9oQ2lBS0tBSUFJUVlDUUFKQUFrQWdCa0VBVEEwQUEwQWdBQ0FFUVJSc2FrR1FDMm9oQXlBRFFRQTJBZ0FnQkVFQmFpRUVJQVFnQmtnTkFBc2dCa0VFU0EwQURBRUxJQUpCQkVnRVFFRUFJUUlGSUFKQmZXb2hCa0VBSVFJRFFBSkFJQUVnQW1vaEJDQUVMQUFBSVFNZ0EwSFBBRVlFUUNBRVFjQVRRUVFRWkNFRUlBUkZCRUFnQWtFYWFpRUpJQWtnQms0TkFpQUNRUnRxSVFjZ0FTQUphaUVMSUFzc0FBQWhBeUFEUWY4QmNTRUZJQWNnQldvaEJDQUVJQVpPRFFJZ0JVRWJhaUVFSUFNRVFFRUFJUU1EUUNBRElBZHFJUWdnQVNBSWFpRUlJQWd0QUFBaENDQUlRZjhCY1NFSUlBUWdDR29oQkNBRFFRRnFJUU1nQXlBRlJ3MEFDeUFFSVFNRklBUWhBd3RCQUNFRVFRQWhCUU5BSUFVZ0Ftb2hCeUFCSUFkcUlRY2dCeXdBQUNFSElBUWdCeEFwSVFRZ0JVRUJhaUVGSUFWQkZrY05BQXRCRmlFRkEwQWdCRUVBRUNraEJDQUZRUUZxSVFVZ0JVRWFSdzBBQ3lBS0tBSUFJUVVnQlVFQmFpRUhJQW9nQnpZQ0FDQURRV1pxSVFNZ0FDQUZRUlJzYWtHSUMyb2hDQ0FJSUFNMkFnQWdBQ0FGUVJSc2FrR01DMm9oQXlBRElBUTJBZ0FnQWtFV2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FSZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFWWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCR1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJaEJDQUFRWVFMYWlBRlFSUnNhaUVESUFNZ0JEWUNBQ0FMTFFBQUlRUWdCRUgvQVhFaEJDQUpJQVJxSVFRZ0FTQUVhaUVFSUFRc0FBQWhCQ0FFUVg5R0JIOUJmd1VnQWtFR2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FRZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFSWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCQ1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJTElRUWdBQ0FGUVJSc2FrR1VDMm9oQXlBRElBUTJBZ0FnQUNBRlFSUnNha0dRQzJvaEJDQUVJQWsyQWdBZ0IwRUVSZ1JBSUFZaEFnd0RDd3NMSUFKQkFXb2hBaUFDSUFaSURRRWdCaUVDQ3dzZ0NpZ0NBQ0VHSUFaQkFFb05BUXNNQVFzZ0FpRUVJQVloQWtFQUlRWURRQUpBSUFCQmhBdHFJQVpCRkd4cUlRa2dBQ0FHUVJSc2FrR1FDMm9oQXlBREtBSUFJUXNnQUNBR1FSUnNha0dJQzJvaERTQU5LQUlBSVFnZ0JDQUxheUVESUFnZ0Ewb2hCU0FESUFnZ0JSc2hCeUFBSUFaQkZHeHFRWXdMYWlFT0lBNG9BZ0FoQXlBSFFRQktCRUJCQUNFRkEwQWdCU0FMYWlFTUlBRWdER29oRENBTUxBQUFJUXdnQXlBTUVDa2hBeUFGUVFGcUlRVWdCU0FIU0EwQUN3c2dDQ0FIYXlFRklBMGdCVFlDQUNBT0lBTTJBZ0FnQlFSQUlBWkJBV29oQmdVZ0NTZ0NBQ0VGSUFNZ0JVWU5BU0FDUVg5cUlRSWdDaUFDTmdJQUlBa2dBRUdFQzJvZ0FrRVViR29pQWlrQ0FEY0NBQ0FKSUFJcEFnZzNBZ2dnQ1NBQ0tBSVFOZ0lRSUFvb0FnQWhBZ3NnQmlBQ1NBMEJJQVFoQWd3Q0N3c2dCeUFMYWlFQ0lBcEJmellDQUNBQVFkUUhhaUVCSUFGQkFEWUNBQ0FBUWRnS2FpRUJJQUZCZnpZQ0FDQUFJQVpCRkd4cVFaUUxhaUVCSUFFb0FnQWhBU0FBUVpnSWFpRUVJQVFnQVRZQ0FDQUJRWDlISVFFZ0FFR2NDR29oQUNBQUlBRTJBZ0FMSUFJTGhnVUJDSDhnQUVIWUNtb2hBaUFDS0FJQUlRTWdBRUVVYWlFQ0lBSW9BZ0FoQWdKL0FrQWdBMEYvUmdSL1FRRWhBd3dCQlNBQVFkQUlhaUVFSUFRb0FnQWhCUUpBSUFNZ0JVZ0VRQU5BSUFCQjFBaHFJQU5xSVFRZ0JDd0FBQ0VHSUFaQi93RnhJUVFnQWlBRWFpRUNJQVpCZjBjTkFpQURRUUZxSVFNZ0F5QUZTQTBBQ3dzTElBRkJBRWNoQmlBRlFYOXFJUVFnQXlBRVNDRUVJQVlnQkhFRVFDQUFRUlVRRlVFQURBTUxJQUJCSEdvaEJDQUVLQUlBSVFRZ0FpQUVTd1IvSUFCQkFSQVZRUUFGSUFNZ0JVWWhCQ0FEUVg5R0lRTWdCQ0FEY2dSL1FRQWhBd3dEQlVFQkN3c0xEQUVMSUFBb0Fod2hDQ0FBUWRRSGFpRUdJQUZCQUVjaEJDQUNJUUVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FEUUNBQlFScHFJUVVnQlNBSVR3MEJJQUZCd0JOQkJCQmtJUUlnQWcwQ0lBRkJCR29oQWlBQ0xBQUFJUUlnQWcwRElBTUVRQ0FHS0FJQUlRSWdBZ1JBSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSU5CZ3NGSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSkZEUVlMSUFVc0FBQWhBaUFDUWY4QmNTRUhJQUZCRzJvaENTQUpJQWRxSVFFZ0FTQUlTdzBHQWtBZ0FnUkFRUUFoQWdOQUlBa2dBbW9oQXlBRExBQUFJUVVnQlVIL0FYRWhBeUFCSUFOcUlRRWdCVUYvUncwQ0lBSkJBV29oQWlBQ0lBZEpEUUFMQlVFQUlRSUxDeUFIUVg5cUlRTWdBaUFEU0NFRElBUWdBM0VOQnlBQklBaExEUWhCQVNBQ0lBZEhEUW9hUVFBaEF3d0FBQXNBQ3lBQVFRRVFGVUVBREFnTElBQkJGUkFWUVFBTUJ3c2dBRUVWRUJWQkFBd0dDeUFBUVJVUUZVRUFEQVVMSUFCQkZSQVZRUUFNQkFzZ0FFRUJFQlZCQUF3REN5QUFRUlVRRlVFQURBSUxJQUJCQVJBVkMwRUFDeUVBSUFBTGV3RUZmeU1HSVFVakJrRVFhaVFHSUFWQkNHb2hCaUFGUVFScUlRUWdCU0VISUFBZ0FpQUVJQU1nQlNBR0VDb2hCQ0FFQkg4Z0JpZ0NBQ0VFSUFCQmtBTnFJQVJCQm14cUlRZ2dBaWdDQUNFR0lBTW9BZ0FoQkNBSEtBSUFJUU1nQUNBQklBZ2dCaUFFSUFNZ0FoQXJCVUVBQ3lFQUlBVWtCaUFBQ3hzQkFYOGdBQkF1SVFFZ0FFSG9DbW9oQUNBQVFRQTJBZ0FnQVF2NUF3SU1md045SUFCQjFBZHFJUWtnQ1NnQ0FDRUdJQVlFZnlBQUlBWVFTQ0VMSUFCQkJHb2hCQ0FFS0FJQUlRb2dDa0VBU2dSQUlBWkJBRW9oRENBR1FYOXFJUTBEUUNBTUJFQWdBRUdVQm1vZ0JVRUNkR29vQWdBaERpQUFRWlFIYWlBRlFRSjBhaWdDQUNFUFFRQWhCQU5BSUFRZ0Ftb2hCeUFPSUFkQkFuUnFJUWNnQnlvQ0FDRVFJQXNnQkVFQ2RHb2hDQ0FJS2dJQUlSRWdFQ0FSbENFUUlBOGdCRUVDZEdvaENDQUlLZ0lBSVJFZ0RTQUVheUVJSUFzZ0NFRUNkR29oQ0NBSUtnSUFJUklnRVNBU2xDRVJJQkFnRVpJaEVDQUhJQkE0QWdBZ0JFRUJhaUVFSUFRZ0JrY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFKS0FJQUJTQUFRUVJxSVFRZ0JDZ0NBQ0VLUVFBTElRc2dBU0FEYXlFSElBa2dCellDQUNBS1FRQktCRUFnQVNBRFNpRUpRUUFoQlFOQUlBa0VRQ0FBUVpRR2FpQUZRUUowYWlnQ0FDRU1JQUJCbEFkcUlBVkJBblJxS0FJQUlRMUJBQ0VHSUFNaEJBTkFJQXdnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdEU0FHUVFKMGFpRU9JQTRnQkRZQ0FDQUdRUUZxSVFZZ0JpQURhaUVFSUFZZ0IwY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFMUlNFRUlBRWdBMGdoQlNBQklBTWdCUnNoQVNBQklBSnJJUUVnQUVIOENtb2hBQ0FFQkVCQkFDRUJCU0FBS0FJQUlRSWdBaUFCYWlFQ0lBQWdBallDQUFzZ0FRdlJBUUVDZnlNR0lRWWpCa0hnQzJva0JpQUdJUVVnQlNBRUVCd2dCVUVVYWlFRUlBUWdBRFlDQUNBQUlBRnFJUUVnQlVFY2FpRUVJQVFnQVRZQ0FDQUZRU1JxSVFFZ0FVRUJPZ0FBSUFVUUhTRUJJQUVFUUNBRkVCNGhBU0FCQkVBZ0FTQUZRZHdMRUhrYUlBRkJGR29oQkNBRUtBSUFJUVFnQkNBQWF5RUFJQUlnQURZQ0FDQURRUUEyQWdBRklBVVFFVUVBSVFFTEJTQUZRZFFBYWlFQUlBQW9BZ0FoQUNBQVJTRUFJQVZCMkFCcUlRRWdBU2dDQUNFQklBTWdBVUVCSUFBYk5nSUFRUUFoQVFzZ0JpUUdJQUVMclFFQ0FYOEJmaUFBUVFCQjNBc1FlaG9nQVFSQUlBQkJ4QUJxSVFJZ0FTa0NBQ0VESUFJZ0F6Y0NBQ0FBUWNnQWFpRUNJQU5DSUlnaEF5QURweUVCSUFGQkEyb2hBU0FCUVh4eElRRWdBaUFCTmdJQUlBQkIwQUJxSVFJZ0FpQUJOZ0lBQ3lBQVFkUUFhaUVCSUFGQkFEWUNBQ0FBUWRnQWFpRUJJQUZCQURZQ0FDQUFRUlJxSVFFZ0FVRUFOZ0lBSUFCQjhBQnFJUUVnQVVFQU5nSUFJQUJCZ0F0cUlRQWdBRUYvTmdJQUM5Qk5BaU4vQTMwakJpRVpJd1pCZ0FocUpBWWdHVUh3QjJvaEFpQVpJZ3hCN0FkcUlSMGdERUhvQjJvaEhpQUFFREVoQVFKL0lBRUVRQ0FBUWRNS2FpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBRkJBbkVoQXlBRFJRUkFJQUJCSWhBVlFRQU1BZ3NnQVVFRWNTRURJQU1FUUNBQVFTSVFGVUVBREFJTElBRkJBWEVoQVNBQkJFQWdBRUVpRUJWQkFBd0NDeUFBUWRBSWFpRUJJQUVvQWdBaEFTQUJRUUZIQkVBZ0FFRWlFQlZCQUF3Q0N5QUFRZFFJYWlFQkFrQUNRQ0FCTEFBQVFSNXJJZ0VFUUNBQlFTSkdCRUFNQWdVTUF3c0FDeUFBRURBaEFTQUJRZjhCY1VFQlJ3UkFJQUJCSWhBVlFRQU1CQXNnQUNBQ1FRWVFJaUVCSUFGRkJFQWdBRUVLRUJWQkFBd0VDeUFDRUVraEFTQUJSUVJBSUFCQkloQVZRUUFNQkFzZ0FCQWpJUUVnQVFSQUlBQkJJaEFWUVFBTUJBc2dBQkF3SVFFZ0FVSC9BWEVoQXlBQVFRUnFJUk1nRXlBRE5nSUFJQUZCL3dGeFJRUkFJQUJCSWhBVlFRQU1CQXNnQVVIL0FYRkJFRW9FUUNBQVFRVVFGVUVBREFRTElBQVFJeUVCSUFBZ0FUWUNBQ0FCUlFSQUlBQkJJaEFWUVFBTUJBc2dBQkFqR2lBQUVDTWFJQUFRSXhvZ0FCQXdJUU1nQTBIL0FYRWhCQ0FFUVE5eElRRWdCRUVFZGlFRVFRRWdBWFFoQlNBQVFlUUFhaUVhSUJvZ0JUWUNBRUVCSUFSMElRVWdBRUhvQUdvaEZDQVVJQVUyQWdBZ0FVRjZhaUVGSUFWQkIwc0VRQ0FBUVJRUUZVRUFEQVFMSUFOQm9IOXFRUmgwUVJoMUlRTWdBMEVBU0FSQUlBQkJGQkFWUVFBTUJBc2dBU0FFU3dSQUlBQkJGQkFWUVFBTUJBc2dBQkF3SVFFZ0FVRUJjU0VCSUFGRkJFQWdBRUVpRUJWQkFBd0VDeUFBRURFaEFVRUFJQUZGRFFNYUlBQVFTaUVCUVFBZ0FVVU5BeG9nQUVIVUNtb2hBd05BSUFBUUx5RUJJQUFnQVJCTElBTkJBRG9BQUNBQkRRQUxJQUFRU2lFQlFRQWdBVVVOQXhvZ0FFRWthaUVCSUFFc0FBQWhBUUpBSUFFRVFDQUFRUUVRRnlFQklBRU5BU0FBUWRnQWFpRUFJQUFvQWdBaEFVRUFJQUZCRlVjTkJSb2dBRUVVTmdJQVFRQU1CUXNMRUV3Z0FCQVpJUUVnQVVFRlJ3UkFJQUJCRkJBVlFRQU1CQXRCQUNFQkEwQWdBQkFaSVFNZ0EwSC9BWEVoQXlBQ0lBRnFJUVFnQkNBRE9nQUFJQUZCQVdvaEFTQUJRUVpIRFFBTElBSVFTU0VCSUFGRkJFQWdBRUVVRUJWQkFBd0VDeUFBUVFnUUxDRUJJQUZCQVdvaEFTQUFRZXdBYWlFTklBMGdBVFlDQUNBQlFiQVFiQ0VCSUFBZ0FSQk5JUUVnQUVId0FHb2hGU0FWSUFFMkFnQWdBVVVFUUNBQVFRTVFGVUVBREFRTElBMG9BZ0FoQWlBQ1FiQVFiQ0VDSUFGQkFDQUNFSG9hSUEwb0FnQWhBUUpBSUFGQkFFb0VRQ0FBUVJCcUlSWURRQUpBSUJVb0FnQWhDaUFLSUFaQnNCQnNhaUVKSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWNJQVJ3UkFRVDhoQVF3QkN5QUFRUWdRTENFQklBRkIvd0Z4SVFFZ0FVSERBRWNFUUVIQkFDRUJEQUVMSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWRZQVJ3UkFRY01BSVFFTUFRc2dBRUVJRUN3aEFTQUFRUWdRTENFQ0lBSkJDSFFoQWlBQlFmOEJjU0VCSUFJZ0FYSWhBU0FKSUFFMkFnQWdBRUVJRUN3aEFTQUFRUWdRTENFQ0lBQkJDQkFzSVFNZ0EwRVFkQ0VESUFKQkNIUWhBaUFDUVlEK0EzRWhBaUFCUWY4QmNTRUJJQUlnQVhJaEFTQUJJQU55SVFFZ0NpQUdRYkFRYkdwQkJHb2hEaUFPSUFFMkFnQWdBRUVCRUN3aEFTQUJRUUJISWdNRWYwRUFCU0FBUVFFUUxBc2hBU0FCUWY4QmNTRUNJQW9nQmtHd0VHeHFRUmRxSVJFZ0VTQUNPZ0FBSUFrb0FnQWhCQ0FPS0FJQUlRRWdCRVVFUUNBQkJIOUJ5QUFoQVF3Q0JVRUFDeUVCQ3lBQ1FmOEJjUVJBSUFBZ0FSQThJUUlGSUFBZ0FSQk5JUUlnQ2lBR1FiQVFiR3BCQ0dvaEFTQUJJQUkyQWdBTElBSkZCRUJCelFBaEFRd0JDd0pBSUFNRVFDQUFRUVVRTENFRElBNG9BZ0FoQVNBQlFRQk1CRUJCQUNFRERBSUxRUUFoQkFOQUlBTkJBV29oQlNBQklBUnJJUUVnQVJBdElRRWdBQ0FCRUN3aEFTQUJJQVJxSVFNZ0RpZ0NBQ0VQSUFNZ0Qwb0VRRUhUQUNFQkRBUUxJQUlnQkdvaEJDQUZRZjhCY1NFUElBUWdEeUFCRUhvYUlBNG9BZ0FoQVNBQklBTktCSDhnQXlFRUlBVWhBd3dCQlVFQUN5RURDd1VnRGlnQ0FDRUJJQUZCQUV3RVFFRUFJUU1NQWd0QkFDRURRUUFoQVFOQUlCRXNBQUFoQkFKQUFrQWdCRVVOQUNBQVFRRVFMQ0VFSUFRTkFDQUNJQU5xSVFRZ0JFRi9PZ0FBREFFTElBQkJCUkFzSVFRZ0JFRUJhaUVFSUFSQi93RnhJUVVnQWlBRGFpRVBJQThnQlRvQUFDQUJRUUZxSVFFZ0JFSC9BWEVoQkNBRVFTQkdCRUJCMmdBaEFRd0ZDd3NnQTBFQmFpRURJQTRvQWdBaEJDQURJQVJJRFFBTElBRWhBeUFFSVFFTEN5QVJMQUFBSVFRQ2Z3SkFJQVFFZnlBQlFRSjFJUVFnQXlBRVRnUkFJQllvQWdBaEF5QUJJQU5LQkVBZ0ZpQUJOZ0lBQ3lBQUlBRVFUU0VCSUFvZ0JrR3dFR3hxUVFocUlRTWdBeUFCTmdJQUlBRkZCRUJCNFFBaEFRd0ZDeUFPS0FJQUlRUWdBU0FDSUFRUWVSb2dEaWdDQUNFQklBQWdBaUFCRUU0Z0F5Z0NBQ0VDSUJGQkFEb0FBQ0FPS0FJQUlRUU1BZ3NnQ2lBR1FiQVFiR3BCckJCcUlRUWdCQ0FETmdJQUlBTUVmeUFBSUFNUVRTRUJJQW9nQmtHd0VHeHFRUWhxSVFNZ0F5QUJOZ0lBSUFGRkJFQkI2d0FoQVF3RkN5QUVLQUlBSVFFZ0FVRUNkQ0VCSUFBZ0FSQThJUUVnQ2lBR1FiQVFiR3BCSUdvaEF5QURJQUUyQWdBZ0FVVUVRRUh0QUNFQkRBVUxJQVFvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRHdoQlNBRlJRUkFRZkFBSVFFTUJRc2dEaWdDQUNFQklBUW9BZ0FoRHlBRklRY2dCUVZCQUNFUFFRQWhCMEVBQ3lFRElBOUJBM1FoQlNBRklBRnFJUVVnRmlnQ0FDRVBJQVVnRDAwRVFDQUJJUVVnQkF3REN5QVdJQVUyQWdBZ0FTRUZJQVFGSUFFaEJBd0JDd3dCQ3lBRVFRQktCRUJCQUNFQlFRQWhBd05BSUFJZ0Eyb2hCU0FGTEFBQUlRVWdCVUgvQVhGQkNrb2hEeUFGUVg5SElRVWdEeUFGY1NFRklBVkJBWEVoQlNBQklBVnFJUUVnQTBFQmFpRURJQU1nQkVnTkFBc0ZRUUFoQVFzZ0NpQUdRYkFRYkdwQnJCQnFJUThnRHlBQk5nSUFJQVJCQW5RaEFTQUFJQUVRVFNFQklBb2dCa0d3RUd4cVFTQnFJUU1nQXlBQk5nSUFJQUZGQkVCQjZRQWhBUXdDQzBFQUlRTWdEaWdDQUNFRlFRQWhCeUFQQ3lFQklBa2dBaUFGSUFNUVR5RUVJQVJGQkVCQjlBQWhBUXdCQ3lBQktBSUFJUVFnQkFSQUlBUkJBblFoQkNBRVFRUnFJUVFnQUNBRUVFMGhCQ0FLSUFaQnNCQnNha0drRUdvaEJTQUZJQVEyQWdBZ0JFVUVRRUg1QUNFQkRBSUxJQUVvQWdBaEJDQUVRUUowSVFRZ0JFRUVhaUVFSUFBZ0JCQk5JUVFnQ2lBR1FiQVFiR3BCcUJCcUlRVWdCU0FFTmdJQUlBUkZCRUJCK3dBaEFRd0NDeUFFUVFScUlROGdCU0FQTmdJQUlBUkJmellDQUNBSklBSWdBeEJRQ3lBUkxBQUFJUU1nQXdSQUlBRW9BZ0FoQXlBRFFRSjBJUU1nQUNBSElBTVFUaUFLSUFaQnNCQnNha0VnYWlFRElBTW9BZ0FoQkNBQktBSUFJUVVnQlVFQ2RDRUZJQUFnQkNBRkVFNGdEaWdDQUNFRUlBQWdBaUFFRUU0Z0EwRUFOZ0lBQ3lBSkVGRWdBRUVFRUN3aEFpQUNRZjhCY1NFRElBb2dCa0d3RUd4cVFSVnFJUVVnQlNBRE9nQUFJQUpCL3dGeElRSWdBa0VDU3dSQVFZQUJJUUVNQVFzZ0FnUkFJQUJCSUJBc0lRSWdBaEJTSVNVZ0NpQUdRYkFRYkdwQkRHb2hEeUFQSUNVNEFnQWdBRUVnRUN3aEFpQUNFRkloSlNBS0lBWkJzQkJzYWtFUWFpRWJJQnNnSlRnQ0FDQUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjU0VDSUFvZ0JrR3dFR3hxUVJScUlRUWdCQ0FDT2dBQUlBQkJBUkFzSVFJZ0FrSC9BWEVoQWlBS0lBWkJzQkJzYWtFV2FpRWNJQndnQWpvQUFDQUZMQUFBSVFzZ0RpZ0NBQ0VDSUFrb0FnQWhBeUFMUVFGR0JIOGdBaUFERUZNRklBTWdBbXdMSVFJZ0NpQUdRYkFRYkdwQkdHb2hDeUFMSUFJMkFnQWdBa1VFUUVHR0FTRUJEQUlMSUFKQkFYUWhBaUFBSUFJUVBDRVFJQkJGQkVCQmlBRWhBUXdDQ3lBTEtBSUFJUUlnQWtFQVNnUkFRUUFoQWdOQUlBUXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBGL1JnUkFRWXdCSVFFTUJBc2dBMEgvL3dOeElRTWdFQ0FDUVFGMGFpRVhJQmNnQXpzQkFDQUNRUUZxSVFJZ0N5Z0NBQ0VESUFJZ0EwZ05BQXNnQXlFQ0N5QUZMQUFBSVFNQ1FDQURRUUZHQkVBZ0VTd0FBQ0VESUFOQkFFY2lGd1JBSUFFb0FnQWhBeUFEUlFSQUlBSWhBUXdEQ3dVZ0RpZ0NBQ0VEQ3lBS0lBWkJzQkJzYWlBQUlBTkJBblFnQ1NnQ0FHd1FUU0lmTmdJY0lCOUZCRUJCa3dFaEFRd0VDeUFCSUE0Z0Z4c2hBU0FCS0FJQUlRNGdEa0VBU2dSQUlBb2dCa0d3RUd4cVFhZ1FhaUVnSUFrb0FnQWlDa0VBU2lFSlF3QUFBQUFoSlVFQUlRRURRQ0FYQkg4Z0lDZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFCU0FCQ3lFRUlBa0VRQ0FMS0FJQUlSZ2dIQ3dBQUVVaElTQUtJQUZzSVNKQkFDRURRUUVoQWdOQUlBUWdBbTRoRWlBU0lCaHdJUklnRUNBU1FRRjBhaUVTSUJJdkFRQWhFaUFTUWYvL0EzR3lJU1FnR3lvQ0FDRW1JQ1lnSkpRaEpDQVBLZ0lBSVNZZ0pDQW1raUVrSUNVZ0pKSWhKQ0FpSUFOcUlSSWdIeUFTUVFKMGFpRVNJQklnSkRnQ0FDQWxJQ1FnSVJzaEpTQURRUUZxSVFNZ0F5QUtTQ0lTQkVCQmZ5QVliaUVqSUFJZ0kwc0VRRUdlQVNFQkRBa0xJQmdnQW13aEFnc2dFZzBBQ3dzZ0FVRUJhaUVCSUFFZ0RrZ05BQXNMSUFWQkFqb0FBQ0FMS0FJQUlRRUZJQUpCQW5RaEFTQUFJQUVRVFNFQ0lBb2dCa0d3RUd4cVFSeHFJUUVnQVNBQ05nSUFJQXNvQWdBaENDQUNSUVJBUWFVQklRRU1CQXNnQ0VFQVRBUkFJQWdoQVF3Q0N5QWNMQUFBUlNFRFF3QUFBQUFoSlVFQUlRRURRQ0FRSUFGQkFYUnFJUVFnQkM4QkFDRUVJQVJCLy84RGNiSWhKQ0FiS2dJQUlTWWdKaUFrbENFa0lBOHFBZ0FoSmlBa0lDYVNJU1FnSlNBa2tpRWtJQUlnQVVFQ2RHb2hCQ0FFSUNRNEFnQWdKU0FrSUFNYklTVWdBVUVCYWlFQklBRWdDRWdOQUFzZ0NDRUJDd3NnQVVFQmRDRUJJQUFnRUNBQkVFNExJQVpCQVdvaEJpQU5LQUlBSVFFZ0JpQUJTQTBCREFNTEN3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBVUUvYXc1bkFCWUJGZ0lXRmhZV0F4WVdGaFlFRmhZV0ZoWUZGaFlXRmhZV0JoWVdGaFlXRmdjV0ZoWVdGaFlXQ0JZSkZnb1dGZ3NXRmhZTUZoWVdGZzBXRGhZV0ZoWVBGaFlXRmhZUUZoRVdGaFlTRmhZV0ZoWVdFeFlXRmhZV0ZoWVdGaFlVRmhZV0ZoWVdGUllMSUFCQkZCQVZRUUFNR3dzZ0FFRVVFQlZCQUF3YUN5QUFRUlFRRlVFQURCa0xJQUJCRkJBVlFRQU1HQXNnQUVFREVCVkJBQXdYQ3lBQVFSUVFGVUVBREJZTElBQkJGQkFWUVFBTUZRc2dBRUVERUJWQkFBd1VDeUFBUVFNUUZVRUFEQk1MSUFCQkF4QVZRUUFNRWdzZ0FFRURFQlZCQUF3UkN5QUFRUU1RRlVFQURCQUxJQkVzQUFBaEFTQUJCRUFnQUNBSFFRQVFUZ3NnQUVFVUVCVkJBQXdQQ3lBQVFRTVFGVUVBREE0TElBQkJBeEFWUVFBTURRc2dBRUVVRUJWQkFBd01DeUFBUVJRUUZVRUFEQXNMSUFCQkF4QVZRUUFNQ2dzZ0N5Z0NBQ0VCSUFGQkFYUWhBU0FBSUJBZ0FSQk9JQUJCRkJBVlFRQU1DUXNnQ3lnQ0FDRUJJQUZCQVhRaEFTQUFJQkFnQVJCT0lBQkJBeEFWUVFBTUNBc2dHRUVCZENFQklBQWdFQ0FCRUU0Z0FFRVVFQlZCQUF3SEN5QUlRUUYwSVFFZ0FDQVFJQUVRVGlBQVFRTVFGVUVBREFZTEN3c2dBRUVHRUN3aEFTQUJRUUZxSVFFZ0FVSC9BWEVoQWdKQUlBSUVRRUVBSVFFRFFBSkFJQUJCRUJBc0lRTWdBMFVoQXlBRFJRMEFJQUZCQVdvaEFTQUJJQUpKRFFFTUF3c0xJQUJCRkJBVlFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCOUFCcUlROGdEeUFCTmdJQUlBRkJ2QXhzSVFFZ0FDQUJFRTBoQVNBQVFmZ0JhaUVPSUE0Z0FUWUNBQ0FCUlFSQUlBQkJBeEFWUVFBTUJBc2dEeWdDQUNFQkFuOGdBVUVBU2dSL1FRQWhCRUVBSVFjQ1FBSkFBa0FDUUFKQUFrQURRQ0FBUVJBUUxDRUJJQUZCLy84RGNTRUNJQUJCK0FCcUlBZEJBWFJxSVFNZ0F5QUNPd0VBSUFGQi8vOERjU0VCSUFGQkFVc05BU0FCUlEwQ0lBNG9BZ0FoQlNBQVFRVVFMQ0VCSUFGQi93RnhJUUlnQlNBSFFid01iR29oQ2lBS0lBSTZBQUFnQVVIL0FYRWhBU0FCQkVCQmZ5RUJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQ0NBRklBZEJ2QXhzYWtFQmFpQUNhaUVHSUFZZ0NEb0FBQ0FEUWY4QmNTRURJQU1nQVVvaENDQURJQUVnQ0JzaEF5QUNRUUZxSVFJZ0NpMEFBQ0VCSUFGQi93RnhJUUVnQWlBQlNRUkFJQU1oQVF3QkN3dEJBQ0VCQTBBZ0FFRURFQ3doQWlBQ1FRRnFJUUlnQWtIL0FYRWhBaUFGSUFkQnZBeHNha0VoYWlBQmFpRUlJQWdnQWpvQUFDQUFRUUlRTENFQ0lBSkIvd0Z4SVFJZ0JTQUhRYndNYkdwQk1Xb2dBV29oQ0NBSUlBSTZBQUFDUUFKQUlBSkIvd0Z4UlEwQUlBQkJDQkFzSVFJZ0FrSC9BWEVoQmlBRklBZEJ2QXhzYWtIQkFHb2dBV29oRUNBUUlBWTZBQUFnQWtIL0FYRWhBaUFOS0FJQUlRWWdBaUFHVGcwSElBZ3NBQUFoQWlBQ1FSOUhEUUFNQVF0QkFDRUNBMEFnQUVFSUVDd2hCaUFHUWYvL0Eyb2hCaUFHUWYvL0EzRWhFQ0FGSUFkQnZBeHNha0hTQUdvZ0FVRUVkR29nQWtFQmRHb2hDU0FKSUJBN0FRQWdCa0VRZENFR0lBWkJFSFVoQmlBTktBSUFJUkFnQmlBUVNDRUdJQVpGRFFnZ0FrRUJhaUVDSUFndEFBQWhCaUFHUWY4QmNTRUdRUUVnQm5RaEJpQUNJQVpJRFFBTEN5QUJRUUZxSVFJZ0FTQURTQVJBSUFJaEFRd0JDd3NMSUFCQkFoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCU0FIUWJ3TWJHcEJ0QXhxSVFJZ0FpQUJPZ0FBSUFCQkJCQXNJUUVnQVVIL0FYRWhBaUFGSUFkQnZBeHNha0cxREdvaEVDQVFJQUk2QUFBZ0JTQUhRYndNYkdwQjBnSnFJUWtnQ1VFQU93RUFJQUZCL3dGeElRRkJBU0FCZENFQklBRkIvLzhEY1NFQklBVWdCMEc4REd4cVFkUUNhaUVDSUFJZ0FUc0JBQ0FGSUFkQnZBeHNha0c0REdvaEJpQUdRUUkyQWdBZ0Npd0FBQ0VCQWtBQ1FDQUJCRUJCQUNFSVFRSWhBd05BSUFVZ0IwRzhER3hxUVFGcUlBaHFJUUlnQWkwQUFDRUNJQUpCL3dGeElRSWdCU0FIUWJ3TWJHcEJJV29nQW1vaEFpQUNMQUFBSVFzZ0N3UkFRUUFoQVFOQUlCQXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBILy93TnhJUXNnQmlnQ0FDRURJQVVnQjBHOERHeHFRZElDYWlBRFFRRjBhaUVSSUJFZ0N6c0JBQ0FEUVFGcUlRTWdCaUFETmdJQUlBRkJBV29oQVNBQ0xRQUFJUXNnQzBIL0FYRWhDeUFCSUF0SkRRQUxJQW9zQUFBaEFnVWdBU0VDQ3lBRElRRWdDRUVCYWlFSUlBSkIvd0Z4SVFNZ0NDQURTUVJBSUFFaEF5QUNJUUVNQVFzTElBRkJBRW9OQVFWQkFpRUJEQUVMREFFTFFRQWhBZ05BSUFVZ0IwRzhER3hxUWRJQ2FpQUNRUUYwYWlFRElBTXVBUUFoQXlBTUlBSkJBblJxSVFnZ0NDQURPd0VBSUFKQi8vOERjU0VESUF3Z0FrRUNkR3BCQW1vaENDQUlJQU03QVFBZ0FrRUJhaUVDSUFJZ0FVZ05BQXNMSUF3Z0FVRUVRUUVRWmlBR0tBSUFJUUVDUUNBQlFRQktCRUJCQUNFQkEwQWdEQ0FCUVFKMGFrRUNhaUVDSUFJdUFRQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFRY1lHYWlBQmFpRURJQU1nQWpvQUFDQUJRUUZxSVFFZ0JpZ0NBQ0VDSUFFZ0FrZ05BQXNnQWtFQ1RBUkFJQUloQVF3Q0MwRUNJUUVEUUNBSklBRWdIU0FlRUZVZ0hTZ0NBQ0VDSUFKQi93RnhJUUlnQlNBSFFid01iR3BCd0FocUlBRkJBWFJxSVFNZ0F5QUNPZ0FBSUI0b0FnQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFJQUZCQVhScVFjRUlhaUVESUFNZ0Fqb0FBQ0FCUVFGcUlRRWdCaWdDQUNFQ0lBRWdBa2dOQUFzZ0FpRUJDd3NnQVNBRVNpRUNJQUVnQkNBQ0d5RUVJQWRCQVdvaEJ5QVBLQUlBSVFFZ0J5QUJTQTBBREFVQUN3QUxJQUJCRkJBVlFRQU1DZ3NnRGlnQ0FDRUJJQUJCQ0JBc0lRSWdBa0gvQVhFaEFpQUJJQWRCdkF4c2FpRURJQU1nQWpvQUFDQUFRUkFRTENFQ0lBSkIvLzhEY1NFQ0lBRWdCMEc4REd4cVFRSnFJUU1nQXlBQ093RUFJQUJCRUJBc0lRSWdBa0gvL3dOeElRSWdBU0FIUWJ3TWJHcEJCR29oQXlBRElBSTdBUUFnQUVFR0VDd2hBaUFDUWY4QmNTRUNJQUVnQjBHOERHeHFRUVpxSVFNZ0F5QUNPZ0FBSUFCQkNCQXNJUUlnQWtIL0FYRWhBaUFCSUFkQnZBeHNha0VIYWlFRElBTWdBam9BQUNBQVFRUVFMQ0VDSUFKQkFXb2hBaUFDUWY4QmNTRUVJQUVnQjBHOERHeHFRUWhxSVFNZ0F5QUVPZ0FBSUFKQi93RnhJUUlnQWdSQUlBRWdCMEc4REd4cVFRbHFJUUpCQUNFQkEwQWdBRUVJRUN3aEJ5QUhRZjhCY1NFSElBSWdBV29oQkNBRUlBYzZBQUFnQVVFQmFpRUJJQU10QUFBaEJ5QUhRZjhCY1NFSElBRWdCMGtOQUFzTElBQkJCQkFWUVFBTUNRc2dBRUVVRUJVTUFnc2dBRUVVRUJVTUFRc2dCRUVCZEF3Q0MwRUFEQVVGUVFBTEN5RVFJQUJCQmhBc0lRRWdBVUVCYWlFQklBQkIvQUZxSVFVZ0JTQUJOZ0lBSUFGQkdHd2hBU0FBSUFFUVRTRUJJQUJCZ0FOcUlRNGdEaUFCTmdJQUlBRkZCRUFnQUVFREVCVkJBQXdFQ3lBRktBSUFJUUlnQWtFWWJDRUNJQUZCQUNBQ0VIb2FJQVVvQWdBaEFRSkFJQUZCQUVvRVFFRUFJUWNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnRGlnQ0FDRUVJQUJCRUJBc0lRRWdBVUgvL3dOeElRSWdBRUdBQW1vZ0IwRUJkR29oQXlBRElBSTdBUUFnQVVILy93TnhJUUVnQVVFQ1N3MEJJQUJCR0JBc0lRSWdCQ0FIUVJoc2FpRUJJQUVnQWpZQ0FDQUFRUmdRTENFQ0lBUWdCMEVZYkdwQkJHb2hBeUFESUFJMkFnQWdBU2dDQUNFQklBSWdBVWtOQWlBQVFSZ1FMQ0VCSUFGQkFXb2hBU0FFSUFkQkdHeHFRUWhxSVFJZ0FpQUJOZ0lBSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCQ0FIUVJoc2FrRU1haUVJSUFnZ0FUb0FBQ0FBUVFnUUxDRUJJQUZCL3dGeElRSWdCQ0FIUVJoc2FrRU5haUVHSUFZZ0Fqb0FBQ0FCUWY4QmNTRUJJQTBvQWdBaEFpQUJJQUpPRFFNZ0NDd0FBQ0VCSUFFRWYwRUFJUUVEUUNBQVFRTVFMQ0VESUFCQkFSQXNJUUlnQWdSL0lBQkJCUkFzQlVFQUN5RUNJQUpCQTNRaEFpQUNJQU5xSVFJZ0FrSC9BWEVoQWlBTUlBRnFJUU1nQXlBQ09nQUFJQUZCQVdvaEFTQUlMUUFBSVFJZ0FrSC9BWEVoQXlBQklBTkpEUUFMSUFKQi93RnhCVUVBQ3lFQklBRkJCSFFoQVNBQUlBRVFUU0VCSUFRZ0IwRVliR3BCRkdvaENpQUtJQUUyQWdBZ0FVVU5CQ0FJTEFBQUlRSWdBZ1JBUVFBaEFnTkFJQXdnQW1vdEFBQWhDMEVBSVFNRFFFRUJJQU4wSVFrZ0NTQUxjU0VKSUFrRVFDQUFRUWdRTENFSklBbEIvLzhEY1NFUklBb29BZ0FoQVNBQklBSkJCSFJxSUFOQkFYUnFJUllnRmlBUk93RUFJQWxCRUhRaENTQUpRUkIxSVFrZ0RTZ0NBQ0VSSUJFZ0NVd05DUVVnQVNBQ1FRUjBhaUFEUVFGMGFpRUpJQWxCZnpzQkFBc2dBMEVCYWlFRElBTkJDRWtOQUFzZ0FrRUJhaUVDSUFndEFBQWhBeUFEUWY4QmNTRURJQUlnQTBrTkFBc0xJQlVvQWdBaEFTQUdMUUFBSVFJZ0FrSC9BWEVoQWlBQklBSkJzQkJzYWtFRWFpRUJJQUVvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRTBoQVNBRUlBZEJHR3hxUVJCcUlRb2dDaUFCTmdJQUlBRkZEUVlnRlNnQ0FDRUNJQVl0QUFBaEF5QURRZjhCY1NFRElBSWdBMEd3RUd4cVFRUnFJUUlnQWlnQ0FDRUNJQUpCQW5RaEFpQUJRUUFnQWhCNkdpQVZLQUlBSVFJZ0JpMEFBQ0VCSUFGQi93RnhJUU1nQWlBRFFiQVFiR3BCQkdvaEFTQUJLQUlBSVFFZ0FVRUFTZ1JBUVFBaEFRTkFJQUlnQTBHd0VHeHFJUUlnQWlnQ0FDRURJQUFnQXhCTklRSWdDaWdDQUNFRUlBUWdBVUVDZEdvaEJDQUVJQUkyQWdBZ0NpZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFJUVFnQkVVTkNRSkFJQU5CQUVvRVFDQUlMUUFBSVFrZ0EwRi9haUVDSUFsQi93RnhJUWtnQVNBSmNDRUpJQWxCL3dGeElRa2dCQ0FDYWlFRUlBUWdDVG9BQUNBRFFRRkdEUUVnQVNFREEwQWdDQzBBQUNFSklBbEIvd0Z4SVFRZ0F5QUViU0VESUFvb0FnQWdBVUVDZEdvaEJDQUVLQUlBSVFzZ0FrRi9haUVFSUFsQi93RnhJUWtnQXlBSmJ5RUpJQWxCL3dGeElRa2dDeUFFYWlFTElBc2dDVG9BQUNBQ1FRRktCRUFnQkNFQ0RBRUxDd3NMSUFGQkFXb2hBU0FWS0FJQUlRSWdCaTBBQUNFRElBTkIvd0Z4SVFNZ0FpQURRYkFRYkdwQkJHb2hCQ0FFS0FJQUlRUWdBU0FFU0EwQUN3c2dCMEVCYWlFSElBVW9BZ0FoQVNBSElBRklEUUFNQ2dBTEFBc2dBRUVVRUJVTUJnc2dBRUVVRUJVTUJRc2dBRUVVRUJVTUJBc2dBRUVERUJVTUF3c2dBRUVVRUJVTUFnc2dBRUVERUJVTUFRc2dBRUVERUJVTFFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCaEFOcUlRY2dCeUFCTmdJQUlBRkJLR3doQVNBQUlBRVFUU0VCSUFCQmlBTnFJUW9nQ2lBQk5nSUFJQUZGQkVBZ0FFRURFQlZCQUF3RUN5QUhLQUlBSVFJZ0FrRW9iQ0VDSUFGQkFDQUNFSG9hSUFjb0FnQWhBUUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQW9vQWdBaEJDQUVJQUZCS0d4cUlRd2dBRUVRRUN3aEFpQUNEUUVnRXlnQ0FDRUNJQUpCQTJ3aEFpQUFJQUlRVFNFQ0lBUWdBVUVvYkdwQkJHb2hDQ0FJSUFJMkFnQWdBa1VOQWlBQVFRRVFMQ0VDSUFJRWZ5QUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjUVZCQVFzaEFpQUVJQUZCS0d4cVFRaHFJUVlnQmlBQ09nQUFJQUJCQVJBc0lRSUNRQ0FDQkVBZ0FFRUlFQ3doQWlBQ1FRRnFJUUlnQWtILy93TnhJUU1nRENBRE93RUFJQUpCLy84RGNTRUNJQUpGRFFGQkFDRUNJQk1vQWdBaEF3TkFJQU5CZjJvaEF5QURFQzBoQXlBQUlBTVFMQ0VESUFOQi93RnhJUU1nQ0NnQ0FDRU5JQTBnQWtFRGJHb2hEU0FOSUFNNkFBQWdFeWdDQUNFRElBTkJmMm9oQXlBREVDMGhBeUFBSUFNUUxDRU5JQTFCL3dGeElRa2dDQ2dDQUNFRElBTWdBa0VEYkdwQkFXb2hDeUFMSUFrNkFBQWdBeUFDUVFOc2FpRURJQU1zQUFBaEN5QUxRZjhCY1NFUklCTW9BZ0FoQXlBRElCRk1EUVlnRFVIL0FYRWhEU0FESUExTURRY2dDeUFKUVJoMFFSaDFSaUVOSUEwTkNDQUNRUUZxSVFJZ0RDOEJBQ0VOSUExQi8vOERjU0VOSUFJZ0RVa05BQXNGSUF4QkFEc0JBQXNMSUFCQkFoQXNJUUlnQWcwR0lBWXNBQUFoQXlBVEtBSUFJZ3hCQUVvaEFnSkFBa0FnQTBIL0FYRkJBVW9FUUNBQ1JRMEJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQXlBSUtBSUFJUXdnRENBQ1FRTnNha0VDYWlFTUlBd2dBem9BQUNBR0xRQUFJUXdnREVIL0FYRWdBMG9oQXlBRFJRMExJQUpCQVdvaEFpQVRLQUlBSVFNZ0FpQURTQTBBQ3d3QkJTQUNCRUFnQ0NnQ0FDRUlRUUFoQWdOQUlBZ2dBa0VEYkdwQkFtb2hEU0FOUVFBNkFBQWdBa0VCYWlFQ0lBSWdERWdOQUFzTElBTU5BUXNNQVF0QkFDRUNBMEFnQUVFSUVDd2FJQUJCQ0JBc0lRTWdBMEgvQVhFaENDQUVJQUZCS0d4cVFRbHFJQUpxSVFNZ0F5QUlPZ0FBSUFCQkNCQXNJUWdnQ0VIL0FYRWhEQ0FFSUFGQktHeHFRUmhxSUFKcUlRMGdEU0FNT2dBQUlBTXRBQUFoQXlBRFFmOEJjU0VESUE4b0FnQWhEQ0FNSUFOTURRb2dDRUgvQVhFaEF5QUZLQUlBSVFnZ0F5QUlTQ0VESUFORkRRc2dBa0VCYWlFQ0lBWXRBQUFoQXlBRFFmOEJjU0VESUFJZ0Ewa05BQXNMSUFGQkFXb2hBU0FIS0FJQUlRSWdBU0FDU0EwQURBd0FDd0FMSUFCQkZCQVZRUUFNRGdzZ0FFRURFQlZCQUF3TkN5QUFRUlFRRlVFQURBd0xJQUJCRkJBVlFRQU1Dd3NnQUVFVUVCVkJBQXdLQ3lBQVFSUVFGVUVBREFrTElBQkJGQkFWUVFBTUNBc2dBRUVVRUJWQkFBd0hDeUFBUVJRUUZVRUFEQVlBQ3dBTEN5QUFRUVlRTENFQklBRkJBV29oQVNBQVFZd0RhaUVDSUFJZ0FUWUNBQUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFOQUlBQkJBUkFzSVFNZ0EwSC9BWEVoQXlBQVFaQURhaUFCUVFac2FpRUVJQVFnQXpvQUFDQUFRUkFRTENFRElBTkIvLzhEY1NFRUlBQWdBVUVHYkdwQmtnTnFJUU1nQXlBRU93RUFJQUJCRUJBc0lRUWdCRUgvL3dOeElRZ2dBQ0FCUVFac2FrR1VBMm9oQkNBRUlBZzdBUUFnQUVFSUVDd2hDQ0FJUWY4QmNTRUdJQUFnQVVFR2JHcEJrUU5xSVF3Z0RDQUdPZ0FBSUFNdUFRQWhBeUFERFFFZ0JDNEJBQ0VESUFNTkFpQUlRZjhCY1NFRElBY29BZ0FoQkNBRElBUklJUU1nQTBVTkF5QUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ05BQXdHQUFzQUN5QUFRUlFRRlVFQURBZ0xJQUJCRkJBVlFRQU1Cd3NnQUVFVUVCVkJBQXdHQUFzQUN3c2dBQkFoSUFCQjFBZHFJUUVnQVVFQU5nSUFJQk1vQWdBaEFRSkFJQUZCQUVvRVFFRUFJUUVEUUFKQUlCUW9BZ0FoQWlBQ1FRSjBJUUlnQUNBQ0VFMGhBeUFBUVpRR2FpQUJRUUowYWlFQ0lBSWdBellDQUNBVUtBSUFJUU1nQTBFQmRDRURJQU5CL3YvLy93ZHhJUU1nQUNBREVFMGhCeUFBUVpRSGFpQUJRUUowYWlFRElBTWdCellDQUNBQUlCQVFUU0VISUFCQjJBZHFJQUZCQW5ScUlRUWdCQ0FITmdJQUlBSW9BZ0FoQWlBQ1JRMEFJQU1vQWdBaEF5QURSU0VESUFkRklRY2dCeUFEY2cwQUlCUW9BZ0FoQXlBRFFRSjBJUU1nQWtFQUlBTVFlaG9nQVVFQmFpRUJJQk1vQWdBaEFpQUJJQUpJRFFFTUF3c0xJQUJCQXhBVlFRQU1CUXNMSUJvb0FnQWhBU0FBUVFBZ0FSQldJUUZCQUNBQlJRMERHaUFVS0FJQUlRRWdBRUVCSUFFUVZpRUJRUUFnQVVVTkF4b2dHaWdDQUNFQklBQkIzQUJxSVFJZ0FpQUJOZ0lBSUJRb0FnQWhBU0FBUWVBQWFpRUNJQUlnQVRZQ0FDQUJRUUYwSVFJZ0FrSCsvLy8vQjNFaEJDQUZLQUlBSVFnZ0NFRUFTZ1IvSUE0b0FnQWhCeUFCUVFKdElRTkJBQ0VDUVFBaEFRTkFJQWNnQVVFWWJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFR0lBVWdBeUFHR3lFR0lBY2dBVUVZYkdwQkJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFTUlBVWdBeUFNR3lFRklBVWdCbXNoQlNBSElBRkJHR3hxUVFocUlRWWdCaWdDQUNFR0lBVWdCbTRoQlNBRklBSktJUVlnQlNBQ0lBWWJJUUlnQVVFQmFpRUJJQUVnQ0VnTkFBc2dBa0VDZENFQklBRkJCR29GUVFRTElRRWdFeWdDQUNFQ0lBSWdBV3doQVNBQVFReHFJUUlnQkNBQlN5RURJQUlnQkNBQklBTWJJZ0kyQWdBZ0FFSFZDbW9oQVNBQlFRRTZBQUFnQUVIRUFHb2hBU0FCS0FJQUlRRUNRQ0FCQkVBZ0FFSFFBR29oQVNBQktBSUFJUUVnQUVISUFHb2hBeUFES0FJQUlRTWdBU0FEUndSQVFjd1dRY1FUUWFBZ1FZUVhFQVFMSUFCQnpBQnFJUU1nQXlnQ0FDRURJQUpCM0F0cUlRSWdBaUFEYWlFQ0lBSWdBVTBOQVNBQVFRTVFGVUVBREFVTEN5QUFFQjhoQVNBQVFTaHFJUUFnQUNBQk5nSUFRUUVNQXdzZ0FDQUNRUVlRSWlFQklBRkJBRWNoQVNBQ0xBQUFJUU1nQTBIbUFFWWhBeUFCSUFOeEJFQWdBa0VCYWlFQklBRXNBQUFoQVNBQlFla0FSZ1JBSUFKQkFtb2hBU0FCTEFBQUlRRWdBVUh6QUVZRVFDQUNRUU5xSVFFZ0FTd0FBQ0VCSUFGQjZBQkdCRUFnQWtFRWFpRUJJQUVzQUFBaEFTQUJRZVVBUmdSQUlBSkJCV29oQVNBQkxBQUFJUUVnQVVIaEFFWUVRQ0FBRURBaEFTQUJRZjhCY1VIa0FFWUVRQ0FBRURBaEFTQUJRZjhCY1VVRVFDQUFRU1lRRlVFQURBb0xDd3NMQ3dzTEN3c2dBRUVpRUJVTFFRQUxJUUFnR1NRR0lBQUxEd0VCZnlBQVFkd0xFRTBoQVNBQkN6OEJBWDhnQUVFa2FpRUJJQUVzQUFBaEFTQUJCSDlCQUFVZ0FFRVVhaUVCSUFFb0FnQWhBU0FBUVJocUlRQWdBQ2dDQUNFQUlBRWdBR3NMSVFBZ0FBdUJBZ0VDZnlBQVFkZ0thaUVCSUFFb0FnQWhBUUovQWtBZ0FVRi9SdzBBSUFBUU1DRUJJQUJCMUFCcUlRSWdBaWdDQUNFQ0lBSUVmMEVBQlNBQlFmOEJjVUhQQUVjRVFDQUFRUjRRRlVFQURBTUxJQUFRTUNFQklBRkIvd0Z4UWVjQVJ3UkFJQUJCSGhBVlFRQU1Bd3NnQUJBd0lRRWdBVUgvQVhGQjV3QkhCRUFnQUVFZUVCVkJBQXdEQ3lBQUVEQWhBU0FCUWY4QmNVSFRBRWNFUUNBQVFSNFFGVUVBREFNTElBQVFNeUVCSUFFRVFDQUFRZE1LYWlFQklBRXNBQUFoQVNBQlFRRnhJUUVnQVVVTkFpQUFRZHdLYWlFQklBRkJBRFlDQUNBQVFkUUthaUVCSUFGQkFEb0FBQ0FBUVNBUUZRdEJBQXNNQVFzZ0FCQktDeUVBSUFBTEZBRUJmd05BSUFBUUxpRUJJQUZCZjBjTkFBc0xaUUVFZnlBQVFSUnFJUU1nQXlnQ0FDRUZJQVVnQW1vaEJpQUFRUnhxSVFRZ0JDZ0NBQ0VFSUFZZ0JFc0VmeUFBUWRRQWFpRUFJQUJCQVRZQ0FFRUFCU0FCSUFVZ0FoQjVHaUFES0FJQUlRQWdBQ0FDYWlFQUlBTWdBRFlDQUVFQkN5RUFJQUFMYUFFQ2Z5QUFFREFoQWlBQ1FmOEJjU0VDSUFBUU1DRUJJQUZCL3dGeElRRWdBVUVJZENFQklBRWdBbkloQWlBQUVEQWhBU0FCUWY4QmNTRUJJQUZCRUhRaEFTQUNJQUZ5SVFJZ0FCQXdJUUFnQUVIL0FYRWhBQ0FBUVJoMElRQWdBaUFBY2lFQUlBQUxFd0VCZjBFRUVGNGhBQ0FBUVFBMkFnQWdBQXNUQVFGL0lBQW9BZ0FoQVNBQkVCQWdBQkJmQ3lFQUlBQW9BZ0FoQUNBQUJIOGdBRUVFYWlFQUlBQW9BZ0FGUVFBTElRQWdBQXNhQUNBQUtBSUFJUUFnQUFSL0lBQW9BZ0FGUVFBTElRQWdBQXZiQndJU2Z3RjlJd1loRUNNR1FSQnFKQVlnRUVFRWFpRUxJQkFoRENBRVFRQTJBZ0FnQUNnQ0FDRUdBa0FDUUNBR0RRQkJJQ0VGQTBBQ1FDQUxRUUEyQWdBZ0RFRUFOZ0lBSUFVZ0Frb2hCaUFDSUFVZ0Joc2hCaUFCSUFZZ0N5QU1RUUFRR3lFS0lBQWdDallDQUFKQUFrQUNRQUpBSUF3b0FnQU9BZ0VBQWdzZ0FpQUZUQ0VISUFkQkFYTWhCU0FGUVFGeElRVWdCaUFGZENFRlFRRkJBaUFIR3lFR0lBWWhDVUVBSUFnZ0J4c2hDQ0FGSVFZTUFnc2dDeWdDQUNFSElBUW9BZ0FoQlNBRklBZHFJUVVnQkNBRk5nSUFJQUVnQjJvaEFVRUFJUWtnQWlBSGF5RUNEQUVMUVFFaENVRi9JUWdMQWtBQ1FBSkFJQWxCQTNFT0F3QUJBQUVMREFFTERBRUxJQW9FUUNBS0lRWU1Bd1VnQmlFRkRBSUxBQXNMSUFrRWZ5QUlCU0FLSVFZTUFRc2hFZ3dCQ3lBR1FRUnFJUW9nQ2lnQ0FDRUlJQWhCQW5RaENDQUlFRjRoRFNBTlJRUkFFQVlMSUFvb0FnQWhDQ0FJUVFCS0JFQWdDRUVDZENFSUlBMUJBQ0FJRUhvYUMwRUFJUVZCQUNFS0lBRWhDQ0FHSVFFQ1FBSkFBa0FEUUNBTFFRQTJBZ0FnREVFQU5nSUFJQUpCSUVnaEJpQUNRU0FnQmhzaENTQUJJQWdnQ1VFQUlBc2dEQkFVSVFFZ0FVVUVRRUVnSVFZZ0NTRUJBMEFnQWlBR1NpRUdJQVpGRFFRZ0FVRUJkQ0VHSUFZZ0Frb2hBU0FDSUFZZ0FSc2hBU0FBS0FJQUlRa2dDU0FJSUFGQkFDQUxJQXdRRkNFSklBbEZEUUFMSUFraEFRc2dCQ2dDQUNFR0lBWWdBV29oQmlBRUlBWTJBZ0FnQ0NBQmFpRUlJQUlnQVdzaEJpQU1LQUlBSVJFZ0VTQUthaUVKQWtBQ1FDQUZJQWxJQkVBZ0JVVWhBaUFGUVFGMElRRkJnQ0FnQVNBQ0d5RUNJQUFvQWdBaEFTQUJRUVJxSVFVZ0JTZ0NBQ0VGSUFWQkFFb0VRQ0FDUVFKMElRNUJBQ0VCQTBBZ0RTQUJRUUowYWlFSElBY29BZ0FoQlNBRklBNFFZQ0VGSUFWRkRRWWdCeUFGTmdJQUlBRkJBV29oQVNBQUtBSUFJUWNnQjBFRWFpRUZJQVVvQWdBaEJTQUJJQVZJRFFBTElBVWhEaUFISVFFTUFnc0ZJQUFvQWdBaUFVRUVhaUVISUFVaEFpQUhLQUlBSVE0TUFRc01BUXNnRGtFQVNnUkFJQkZCQUVvaEV5QUxLQUlBSVJSQkFDRUhBMEFnRXdSQUlCUWdCMEVDZEdvb0FnQWhGU0FOSUFkQkFuUnFLQUlBSVJaQkFDRUZBMEFnRlNBRlFRSjBhaUVQSUE4cUFnQWhGeUFYUXdBQWdEOWVCRUJEQUFDQVB5RVhCU0FYUXdBQWdMOWRCRUJEQUFDQXZ5RVhDd3NnQlNBS2FpRVBJQllnRDBFQ2RHb2hEeUFQSUJjNEFnQWdCVUVCYWlFRklBVWdFVWNOQUFzTElBZEJBV29oQlNBRklBNUlCRUFnQlNFSERBRUxDd3NMSUFJaEJTQUpJUW9nQmlFQ0RBQUFDd0FMRUFZTUFRc2dBeUFOTmdJQUlBb2hFZ3NMSUJBa0JpQVNDendCQVg4Z0FFRUlkQ0VDSUFGQi93RnhJUUVnQUVFWWRpRUFJQUFnQVhNaEFDQUFRUUowUWRBWmFpRUFJQUFvQWdBaEFDQUFJQUp6SVFBZ0FBdnZCQUVGZnlBQVFkZ0xhaUVHSUFaQkFEWUNBQ0FBUWRRTGFpRUdJQVpCQURZQ0FDQUFRZFFBYWlFSUlBZ29BZ0FoQmdKL0lBWUVmMEVBQlNBQVFTUnFJUWNDUUFKQUEwQUNRQ0FBRUNBaEJrRUFJQVpGRFFVYUlBQkJBUkFzSVFZZ0JrVU5BQ0FITEFBQUlRWWdCZzBDQTBBZ0FCQVpJUVlnQmtGL1J3MEFDeUFJS0FJQUlRWWdCa1VOQVVFQURBVUxDd3dCQ3lBQVFTTVFGVUVBREFJTElBQkJ4QUJxSVFZZ0JpZ0NBQ0VHSUFZRVFDQUFRY2dBYWlFR0lBWW9BZ0FoQnlBQVFkQUFhaUVHSUFZb0FnQWhCaUFISUFaSEJFQkIweE5CeEJOQnVoaEJpeFFRQkFzTElBQkJqQU5xSVFjZ0J5Z0NBQ0VHSUFaQmYyb2hCaUFHRUMwaEJpQUFJQVlRTENFSUlBaEJmMFlFZjBFQUJTQUhLQUlBSVFZZ0NDQUdTQVIvSUFVZ0NEWUNBQ0FBUVpBRGFpQUlRUVpzYWlFSElBY3NBQUFoQlFKQUFrQWdCUVIvSUFCQjZBQnFJUVVnQlNnQ0FDRUZJQUJCQVJBc0lRWWdBRUVCRUN3aENDQUdRUUJISVFrZ0J5d0FBQ0VHSUFaRklRY2dCVUVCZFNFR0lBa2dCM0lFZnd3Q0JTQUFRZVFBYWlFS0lBb29BZ0FoQ1NBRklBbHJJUWtnQ1VFQ2RTRUpJQUVnQ1RZQ0FDQUtLQUlBSVFFZ0FTQUZhaUVKSUFZaEFTQUpRUUoxQ3dVZ0FFSGtBR29oQlNBRktBSUFJUVpCQUNFSUlBWWhCU0FHUVFGMUlRWkJBU0VIREFFTElRWU1BUXNnQVVFQU5nSUFJQVloQVFzZ0FpQUdOZ0lBSUFoQkFFY2hBaUFDSUFkeUJFQWdBeUFCTmdJQUJTQUZRUU5zSVFJZ0FFSGtBR29oQVNBQktBSUFJUUFnQWlBQWF5RUFJQUJCQW5VaEFDQURJQUEyQWdBZ0FTZ0NBQ0VBSUFBZ0Ftb2hBQ0FBUVFKMUlRVUxJQVFnQlRZQ0FFRUJCVUVBQ3dzTEN5RUFJQUFMakIwQ0ozOERmU01HSVJ3akJrR0FGR29rQmlBY1FZQU1haUVkSUJ4QmdBUnFJU1FnSEVHQUFtb2hGQ0FjSVNBZ0FpMEFBQ0VISUFkQi93RnhJUWNnQUVIY0FHb2dCMEVDZEdvaEJ5QUhLQUlBSVI0Z0FFR0lBMm9oQnlBSEtBSUFJUllnQWtFQmFpRUhJQWN0QUFBaEJ5QUhRZjhCY1NFWElCWWdGMEVvYkdvaElpQWVRUUYxSVI5QkFDQWZheUVwSUFCQkJHb2hHaUFhS0FJQUlRY0Nmd0pBSUFkQkFFb0VmeUFXSUJkQktHeHFRUVJxSVNvZ0FFSDRBV29oS3lBQVFmQUFhaUVsSUFCQjZBcHFJUmdnQUVIa0Ntb2hJU0FVUVFGcUlTd0RRQUpBSUNvb0FnQWhCeUFISUExQkEyeHFRUUpxSVFjZ0J5MEFBQ0VISUFkQi93RnhJUWNnSFNBTlFRSjBhaUVWSUJWQkFEWUNBQ0FXSUJkQktHeHFRUWxxSUFkcUlRY2dCeTBBQUNFSElBZEIvd0Z4SVE4Z0FFSDRBR29nRDBFQmRHb2hCeUFITGdFQUlRY2dCMFVOQUNBcktBSUFJUkFnQUVFQkVDd2hCd0pBQWtBZ0IwVU5BQ0FRSUE5QnZBeHNha0cwREdvaEJ5QUhMUUFBSVFjZ0IwSC9BWEVoQnlBSFFYOXFJUWNnQjBFQ2RFR1FDR29oQnlBSEtBSUFJU01nQUVIWUIyb2dEVUVDZEdvaEJ5QUhLQUlBSVJrZ0l4QXRJUWNnQjBGL2FpRUhJQUFnQnhBc0lRZ2dDRUgvL3dOeElRZ2dHU0FJT3dFQUlBQWdCeEFzSVFjZ0IwSC8vd054SVFjZ0dVRUNhaUVJSUFnZ0J6c0JBQ0FRSUE5QnZBeHNhaUVtSUNZc0FBQWhCeUFIQkVCQkFDRVRRUUloQndOQUlCQWdEMEc4REd4cVFRRnFJQk5xSVFnZ0NDMEFBQ0VJSUFoQi93RnhJUnNnRUNBUFFid01iR3BCSVdvZ0cyb2hDQ0FJTEFBQUlRd2dERUgvQVhFaEp5QVFJQTlCdkF4c2FrRXhhaUFiYWlFSUlBZ3NBQUFoQ0NBSVFmOEJjU0VvUVFFZ0tIUWhDU0FKUVg5cUlTMGdDQVJBSUNVb0FnQWhDeUFRSUE5QnZBeHNha0hCQUdvZ0cyb2hDQ0FJTFFBQUlRZ2dDRUgvQVhFaENpQUxJQXBCc0JCc2FpRU9JQmdvQWdBaENDQUlRUXBJQkVBZ0FCQTBDeUFoS0FJQUlRa2dDVUgvQjNFaENDQUxJQXBCc0JCc2FrRWthaUFJUVFGMGFpRUlJQWd1QVFBaENDQUlRWDlLQkVBZ0N5QUtRYkFRYkdwQkNHb2hEaUFPS0FJQUlRNGdEaUFJYWlFT0lBNHRBQUFoRGlBT1FmOEJjU0VPSUFrZ0RuWWhDU0FoSUFrMkFnQWdHQ2dDQUNFSklBa2dEbXNoQ1NBSlFRQklJUTVCQUNBSklBNGJJUkZCZnlBSUlBNGJJUWtnR0NBUk5nSUFCU0FBSUE0UU5TRUpDeUFMSUFwQnNCQnNha0VYYWlFSUlBZ3NBQUFoQ0NBSUJFQWdDeUFLUWJBUWJHcEJxQkJxSVFnZ0NDZ0NBQ0VJSUFnZ0NVRUNkR29oQ0NBSUtBSUFJUWtMQlVFQUlRa0xJQXdFUUVFQUlRc2dCeUVJQTBBZ0NTQXRjU0VLSUJBZ0QwRzhER3hxUWRJQWFpQWJRUVIwYWlBS1FRRjBhaUVLSUFvdUFRQWhEQ0FKSUNoMUlRb2dERUYvU2dSL0lDVW9BZ0FoRGlBT0lBeEJzQkJzYWlFU0lCZ29BZ0FoQ1NBSlFRcElCRUFnQUJBMEN5QWhLQUlBSVJFZ0VVSC9CM0VoQ1NBT0lBeEJzQkJzYWtFa2FpQUpRUUYwYWlFSklBa3VBUUFoQ1NBSlFYOUtCRUFnRGlBTVFiQVFiR3BCQ0dvaEVpQVNLQUlBSVJJZ0VpQUphaUVTSUJJdEFBQWhFaUFTUWY4QmNTRVNJQkVnRW5ZaEVTQWhJQkUyQWdBZ0dDZ0NBQ0VSSUJFZ0Vtc2hFU0FSUVFCSUlSSkJBQ0FSSUJJYklSRkJmeUFKSUJJYklRa2dHQ0FSTmdJQUJTQUFJQklRTlNFSkN5QU9JQXhCc0JCc2FrRVhhaUVSSUJFc0FBQWhFU0FSQkVBZ0RpQU1RYkFRYkdwQnFCQnFJUXdnRENnQ0FDRU1JQXdnQ1VFQ2RHb2hDU0FKS0FJQUlRa0xJQWxCLy84RGNRVkJBQXNoQ1NBWklBaEJBWFJxSUFrN0FRQWdDRUVCYWlFSUlBdEJBV29oQ3lBTElDZEhCRUFnQ2lFSkRBRUxDeUFISUNkcUlRY0xJQk5CQVdvaEV5QW1MUUFBSVFnZ0NFSC9BWEVoQ0NBVElBaEpEUUFMQ3lBWUtBSUFJUWNnQjBGL1JnMEFJQ3hCQVRvQUFDQVVRUUU2QUFBZ0VDQVBRYndNYkdwQnVBeHFJUWNnQnlnQ0FDRVRJQk5CQWtvRVFDQWpRZi8vQTJvaEcwRUNJUWNEUUNBUUlBOUJ2QXhzYWtIQUNHb2dCMEVCZEdvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ3lBUUlBOUJ2QXhzYWlBSFFRRjBha0hCQ0dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ2lBUUlBOUJ2QXhzYWtIU0Ftb2dCMEVCZEdvaENDQUlMd0VBSVFnZ0NFSC8vd054SVFnZ0VDQVBRYndNYkdwQjBnSnFJQXRCQVhScUlRa2dDUzhCQUNFSklBbEIvLzhEY1NFSklCQWdEMEc4REd4cVFkSUNhaUFLUVFGMGFpRU1JQXd2QVFBaERDQU1RZi8vQTNFaERDQVpJQXRCQVhScUlRNGdEaTRCQUNFT0lCa2dDa0VCZEdvaEZTQVZMZ0VBSVJVZ0NDQUpJQXdnRGlBVkVEWWhDQ0FaSUFkQkFYUnFJUTRnRGk0QkFDRUpJQ01nQ0dzaERBSkFBa0FnQ1FSQUlBd2dDRWdoRlNBTUlBZ2dGUnRCQVhRaEZTQVVJQXBxSVFvZ0NrRUJPZ0FBSUJRZ0Myb2hDeUFMUVFFNkFBQWdGQ0FIYWlFTElBdEJBVG9BQUNBVklBbE1CRUFnRENBSVNnMERJQnNnQ1dzaENBd0NDeUFKUVFGeElRc2dDd1IvSUFsQkFXb2hDU0FKUVFGMklRa2dDQ0FKYXdVZ0NVRUJkU0VKSUFrZ0NHb0xJUWdGSUJRZ0Iyb2hDU0FKUVFBNkFBQUxDeUFPSUFnN0FRQUxJQWRCQVdvaEJ5QUhJQk5JRFFBTEN5QVRRUUJLQkVCQkFDRUhBMEFnRkNBSGFpRUlJQWdzQUFBaENDQUlSUVJBSUJrZ0IwRUJkR29oQ0NBSVFYODdBUUFMSUFkQkFXb2hCeUFISUJOSERRQUxDd3dCQ3lBVlFRRTJBZ0FMSUExQkFXb2hEU0FhS0FJQUlRY2dEU0FIU0EwQkRBTUxDeUFBUVJVUUZVRUFCUXdCQ3d3QkN5QUFRY1FBYWlFVElCTW9BZ0FoQ1NBSkJFQWdBRUhJQUdvaENDQUlLQUlBSVFnZ0FFSFFBR29oRFNBTktBSUFJUTBnQ0NBTlJ3UkFRZE1UUWNRVFFjOFpRZWNVRUFRTEN5QUhRUUowSVFnZ0pDQWRJQWdRZVJvZ0lpNEJBQ0VJSUFnRVFDQVdJQmRCS0d4cUtBSUVJUTBnQ0VILy93TnhJUXhCQUNFSUEwQWdEU0FJUVFOc2FpRUxJQXN0QUFBaEN5QUxRZjhCY1NFTElCMGdDMEVDZEdvaEN5QUxLQUlBSVE4Z0hTQU5JQWhCQTJ4cUxRQUJRUUowYWlFS0FrQUNRQ0FQUlEwQUlBb29BZ0FoRHlBUFJRMEFEQUVMSUFwQkFEWUNBQ0FMUVFBMkFnQUxJQWhCQVdvaENDQUlJQXhKRFFBTEN5QVdJQmRCS0d4cVFRaHFJUXNnQ3l3QUFDRUlJQWdFUUNBV0lCZEJLR3hxUVFScUlReEJBQ0VKSUFjaERRTkFBa0FnRFVFQVNnUkFJQXdvQWdBaEQwRUFJUWRCQUNFSUEwQWdEeUFJUVFOc2FrRUNhaUVLSUFvdEFBQWhDaUFLUWY4QmNTRUtJQWtnQ2tZRVFDQWRJQWhCQW5ScUlRb2dDaWdDQUNFUUlDQWdCMm9oQ2lBUUJFQWdDa0VCT2dBQUlCUWdCMEVDZEdvaENpQUtRUUEyQWdBRklBcEJBRG9BQUNBQVFaUUdhaUFJUVFKMGFpRUtJQW9vQWdBaENpQVVJQWRCQW5ScUlSQWdFQ0FLTmdJQUN5QUhRUUZxSVFjTElBaEJBV29oQ0NBSUlBMUlEUUFMQlVFQUlRY0xJQllnRjBFb2JHcEJHR29nQ1dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ0NBQUlCUWdCeUFmSUFnZ0lCQTNJQWxCQVdvaENTQUxMUUFBSVFjZ0IwSC9BWEVoQnlBSklBZFBEUUFnR2lnQ0FDRU5EQUVMQ3lBVEtBSUFJUWtMSUFrRVFDQUFRY2dBYWlFSElBY29BZ0FoQnlBQVFkQUFhaUVJSUFnb0FnQWhDQ0FISUFoSEJFQkIweE5CeEJOQjhCbEI1eFFRQkFzTElDSXVBUUFoQnlBSEJFQWdGaUFYUVNoc2FpZ0NCQ0VOSUI1QkFVb2hEQ0FIUWYvL0EzRWhDQU5BSUFoQmYyb2hDU0FOSUFsQkEyeHFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dBRUdVQm1vZ0IwRUNkR29oQnlBSEtBSUFJU0FnRFNBSlFRTnNha0VCYWlFSElBY3RBQUFoQnlBSFFmOEJjU0VISUFCQmxBWnFJQWRCQW5ScUlRY2dCeWdDQUNFUElBd0VRRUVBSVFjRFFDQWdJQWRCQW5ScUlRc2dDeW9DQUNFdUlBOGdCMEVDZEdvaUVDb0NBQ0l2UXdBQUFBQmVJUW9nTGtNQUFBQUFYZ1JBSUFvRVFDQXVJVEFnTGlBdmt5RXVCU0F1SUMrU0lUQUxCU0FLQkVBZ0xpRXdJQzRnTDVJaExnVWdMaUF2a3lFd0N3c2dDeUF3T0FJQUlCQWdMamdDQUNBSFFRRnFJUWNnQnlBZlNBMEFDd3NnQ0VFQlNnUkFJQWtoQ0F3QkN3c0xJQm9vQWdBaEJ5QUhRUUJLQkVBZ0gwRUNkQ0VKUVFBaEJ3TkFJQ1FnQjBFQ2RHb2hDQ0FJS0FJQUlRMGdBRUdVQm1vZ0IwRUNkR29oQ0NBTkJFQWdDQ2dDQUNFSUlBaEJBQ0FKRUhvYUJTQUlLQUlBSVFnZ0FFSFlCMm9nQjBFQ2RHb2hEU0FOS0FJQUlRMGdBQ0FpSUFjZ0hpQUlJQTBRT0FzZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxJQWhCQUVvRVFFRUFJUWNEUUNBQVFaUUdhaUFIUVFKMGFpRUlJQWdvQWdBaENDQUNMUUFBSVFrZ0NVSC9BWEVoQ1NBSUlCNGdBQ0FKRURrZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxDd3NnQUJBaElBQkIxUXBxSVFJZ0Fpd0FBQ0VISUFjRVFDQUFRWmdJYWlFR0lBWWdLVFlDQUNBZUlBVnJJUVlnQUVINENtb2hCeUFISUFZMkFnQWdBRUdjQ0dvaEJpQUdRUUUyQWdBZ0FrRUFPZ0FBQlNBQVFmZ0thaUVISUFjb0FnQWhBaUFDQkVBZ0JDQURheUVJSUFJZ0NFZ0VRQ0FDSUFOcUlRTWdCaUFETmdJQUlBZEJBRFlDQUFVZ0FpQUlheUVDSUFjZ0FqWUNBQ0FHSUFRMkFnQWdCQ0VEQ3dzTElBQkI0QXBxSVFJZ0FpZ0NBQ0VDSUFCQjhBcHFJUVlnQmlnQ0FDRUhJQUJCbkFocUlnZ29BZ0FoQmdKQUFrQWdBaUFIUmdSQUlBWUVRQ0FBUWRNS2FpRUNJQUlzQUFBaEFpQUNRUVJ4SVFJZ0FnUkFJQUJCOUFwcUlRSWdBaWdDQUNFQ0lBQkJtQWhxSVFZZ0JpZ0NBQ0VISUFVZ0Eyc2hDU0FKSUFkcUlRa2dBaUFKU1NFSklBSWdCMGtoRFNBQ0lBZHJJUUpCQUNBQ0lBMGJJUUlnQWlBRGFpRUNJQUlnQlVvaEJ5QUZJQUlnQnhzaEFpQUpCRUFnQVNBQ05nSUFJQVlvQWdBaEFDQUFJQUpxSVFBZ0JpQUFOZ0lBUVFFTUJnc0xDeUFBUWZRS2FpRUNJQUlvQWdBaEFpQURJQjlySVFZZ0JpQUNhaUVHSUFCQm1BaHFJUUlnQWlBR05nSUFJQWhCQVRZQ0FBd0JCU0FBUVpnSWFpRUNJQVlOQVFzTUFRc2dCQ0FEYXlFRElBSW9BZ0FoQkNBRElBUnFJUU1nQWlBRE5nSUFDeUFUS0FJQUlRSWdBZ1JBSUFCQnlBQnFJUUlnQWlnQ0FDRUNJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBSWdBRWNFUUVIVEUwSEVFMEhrR2tIbkZCQUVDd3NnQVNBRk5nSUFRUUVMSVFBZ0hDUUdJQUFMcUFJQkJYOGdBRUhvQ21vaEJTQUZLQUlBSVFJQ1FDQUNRUUJJQkVCQkFDRUFCU0FDSUFGSUJFQWdBVUVZU2dSQUlBQkJHQkFzSVFJZ0FVRm9haUVCSUFBZ0FSQXNJUUFnQUVFWWRDRUFJQUFnQW1vaEFDQUFEd3NnQWtVRVFDQUFRZVFLYWlFQ0lBSkJBRFlDQUFzZ0FFSGtDbW9oQXdKQUFrQUNRQU5BSUFBUUxpRUNJQUpCZjBZTkFTQUZLQUlBSVFRZ0FpQUVkQ0VDSUFNb0FnQWhCaUFHSUFKcUlRSWdBeUFDTmdJQUlBVWdCRUVJYWlJQ05nSUFJQUlnQVVnTkFBd0NBQXNBQ3lBRlFYODJBZ0JCQUNFQURBUUxJQVJCZUVnRVFFRUFJUUFNQkFzTEN5QUFRZVFLYWlFRUlBUW9BZ0FoQTBFQklBRjBJUUFnQUVGL2FpRUFJQU1nQUhFaEFDQURJQUYySVFNZ0JDQUROZ0lBSUFJZ0FXc2hBU0FGSUFFMkFnQUxDeUFBQzQwQ0FBSkFJQUJCQUVnRWYwRUFCU0FBUVlDQUFVZ0VRQ0FBUVJCSUJFQWdBRUdBQ0dvaEFDQUFMQUFBSVFBTUF3c2dBRUdBQkVnRVFDQUFRUVYySVFBZ0FFR0FDR29oQUNBQUxBQUFJUUFnQUVFRmFpRUFCU0FBUVFwMklRQWdBRUdBQ0dvaEFDQUFMQUFBSVFBZ0FFRUthaUVBQ3d3Q0N5QUFRWUNBZ0FoSUJIOGdBRUdBZ0NCSUJIOGdBRUVQZGlFQUlBQkJnQWhxSVFBZ0FDd0FBQ0VBSUFCQkQyb0ZJQUJCRkhZaEFDQUFRWUFJYWlFQUlBQXNBQUFoQUNBQVFSUnFDd1VnQUVHQWdJQ0FBa2dFZnlBQVFSbDJJUUFnQUVHQUNHb2hBQ0FBTEFBQUlRQWdBRUVaYWdVZ0FFRWVkaUVBSUFCQmdBaHFJUUFnQUN3QUFDRUFJQUJCSG1vTEN3c2hBQXNnQUF1aUFRRURmeUFBUWRRS2FpRUNJQUlzQUFBaEFRSkFBa0FnQVEwQUlBQkIzQXBxSVFFZ0FTZ0NBQ0VCSUFFRVFFRi9JUU1GSUFBUUx5RUJJQUVFUUNBQ0xBQUFJUUVnQVEwQ1FhRVVRY1FUUWZZTFFiVVVFQVFGUVg4aEF3c0xEQUVMSUFGQmYycEJHSFJCR0hVaEFTQUNJQUU2QUFBZ0FFSHNDbW9oQVNBQktBSUFJUUlnQWtFQmFpRUNJQUVnQWpZQ0FDQUFFREFoQUNBQVFmOEJjU0VEQ3lBREM2d0NBUWQvSUFCQjNBcHFJUUlnQWlnQ0FDRUJBa0FnQVVVRVFDQUFRZGdLYWlFRUlBUW9BZ0FoQVNBQlFYOUdCRUFnQUVIUUNHb2hBU0FCS0FJQUlRRWdBVUYvYWlFQklBQkI0QXBxSVFNZ0F5QUJOZ0lBSUFBUU1TRUJJQUZGQkVBZ0FrRUJOZ0lBREFNTElBQkIwd3BxSVFFZ0FTd0FBQ0VCSUFGQkFYRWhBU0FCQkg4Z0JDZ0NBQVVnQUVFZ0VCVU1Bd3NoQVFzZ0FVRUJhaUVISUFRZ0J6WUNBQ0FBUWRRSWFpQUJhaUVESUFNc0FBQWhCaUFHUWY4QmNTRURJQVpCZjBjRVFDQUNRUUUyQWdBZ0FFSGdDbW9oQWlBQ0lBRTJBZ0FMSUFCQjBBaHFJUUVnQVNnQ0FDRUJJQWNnQVU0RVFDQUVRWDgyQWdBTElBQkIxQXBxSVFBZ0FDd0FBQ0VCSUFFRVFFSEZGRUhFRTBIb0MwSGFGQkFFQlNBQUlBWTZBQUFnQXlFRkN3c0xJQVVMVVFFRGZ5QUFRUlJxSVFNZ0F5Z0NBQ0VCSUFCQkhHb2hBaUFDS0FJQUlRSWdBU0FDU1FSL0lBRkJBV29oQUNBRElBQTJBZ0FnQVN3QUFBVWdBRUhVQUdvaEFDQUFRUUUyQWdCQkFBc2hBQ0FBQ3lBQkFYOGdBQkF5SVFFZ0FRUi9JQUFRTXdVZ0FFRWVFQlZCQUFzaEFDQUFDMkFCQVg4Z0FCQXdJUUVnQVVIL0FYRkJ6d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUFnQUVIL0FYRkIwd0JHSVFBRlFRQWhBQXNGUVFBaEFBc0ZRUUFoQUFzZ0FBdlpBd0VHZnlBQUVEQWhBUUovSUFGQi93RnhCSDhnQUVFZkVCVkJBQVVnQUJBd0lRRWdBRUhUQ21vaEFpQUNJQUU2QUFBZ0FCQWpJUVVnQUJBaklRSWdBQkFqR2lBQUVDTWhBU0FBUWN3SWFpRURJQU1nQVRZQ0FDQUFFQ01hSUFBUU1DRUJJQUZCL3dGeElRRWdBRUhRQ0dvaEF5QURJQUUyQWdBZ0FFSFVDR29oQkNBQUlBUWdBUkFpSVFFZ0FVVUVRQ0FBUVFvUUZVRUFEQUlMSUFCQjhBcHFJUVFnQkVGK05nSUFJQUlnQlhFaEFRSkFJQUZCZjBjRVFDQURLQUlBSVFFZ0FVRUFTZ1JBQTBBQ1FDQUJRWDlxSVFJZ0FFSFVDR29nQW1vaEJpQUdMQUFBSVFZZ0JrRi9SdzBBSUFGQkFVd05CQ0FDSVFFTUFRc0xJQVFnQWpZQ0FDQUFRZlFLYWlFQklBRWdCVFlDQUFzTEN5QUFRZFVLYWlFQklBRXNBQUFoQVNBQkJFQWdBeWdDQUNFRElBTkJBRW9FZjBFQUlRSkJBQ0VCQTBBZ0FFSFVDR29nQVdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ0lBUnFJUUlnQVVFQmFpRUJJQUVnQTBnTkFBc2dBa0ViYWdWQkd3c2hBU0FBUVNocUlRSWdBaWdDQUNFQ0lBRWdBMm9oQVNBQklBSnFJUUVnQUVFc2FpRURJQU1nQWpZQ0FDQUFRVEJxSVFJZ0FpQUJOZ0lBSUFCQk5Hb2hBU0FCSUFVMkFnQUxJQUJCMkFwcUlRQWdBRUVBTmdJQVFRRUxDeUVBSUFBTG93RUJCMzhnQUVIb0Ntb2hBeUFES0FJQUlRRUNRQ0FCUVJsSUJFQWdBRUhrQ21vaEJDQUJSUVJBSUFSQkFEWUNBQXNnQUVIVUNtb2hCU0FBUWR3S2FpRUdBMEFnQmlnQ0FDRUJJQUVFUUNBRkxBQUFJUUVnQVVVTkF3c2dBQkF1SVFJZ0FrRi9SZzBDSUFNb0FnQWhBU0FDSUFGMElRSWdCQ2dDQUNFSElBY2dBbW9oQWlBRUlBSTJBZ0FnQVVFSWFpRUNJQU1nQWpZQ0FDQUJRUkZJRFFBTEN3c0xyUVVCQ1g4Z0FCQTBJQUZCSUdvaEFpQUNLQUlBSVFVQ1FBSkFJQVZGSWdORkRRQWdBVUdrRUdvaEFpQUNLQUlBSVFJZ0FnMEFRWDhoQVF3QkN5QUJRUVJxSVFJZ0FpZ0NBQ0VDQWtBQ1FDQUNRUWhLQkVBZ0FVR2tFR29oQXlBREtBSUFJUU1nQXcwQkJTQUREUUVMREFFTElBQkI1QXBxSVFnZ0NDZ0NBQ0VKSUFrUU9pRUhJQUZCckJCcUlRSWdBaWdDQUNFQ0lBSkJBVW9FUUNBQlFhUVFhaWdDQUNFS1FRQWhBd05BSUFKQkFYWWhCU0FGSUFOcUlRUWdDaUFFUVFKMGFpRUdJQVlvQWdBaEJpQUdJQWRMSVFZZ0FpQUZheUVDSUFNZ0JDQUdHeUVESUFVZ0FpQUdHeUVDSUFKQkFVb05BQXNGUVFBaEF3c2dBVUVYYWlFQ0lBSXNBQUFoQWlBQ1JRUkFJQUZCcUJCcUlRSWdBaWdDQUNFQ0lBSWdBMEVDZEdvaEFpQUNLQUlBSVFNTElBRkJDR29oQVNBQktBSUFJUUVnQVNBRGFpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBQkI2QXBxSVFJZ0FpZ0NBQ0VBSUFBZ0FVZ0VmMEVBSVFCQmZ3VWdBQ0FCYXlFQUlBa2dBWFloQVNBSUlBRTJBZ0FnQXdzaEFTQUNJQUEyQWdBTUFRc2dBVUVYYWlFRElBTXNBQUFoQXlBREJFQkJnUlZCeEJOQjZneEJqQlVRQkFzQ1FDQUNRUUJLQkVBZ0FTZ0NDQ0VJSUFCQjVBcHFJUWxCQUNFQkEwQUNRQ0FJSUFGcUlRTWdBeXdBQUNFRUlBUkIvd0Z4SVFNZ0JFRi9Sd1JBSUFVZ0FVRUNkR29oQkNBRUtBSUFJUVlnQ1NnQ0FDRUVRUUVnQTNRaEJ5QUhRWDlxSVFjZ0JDQUhjU0VISUFZZ0IwWU5BUXNnQVVFQmFpRUJJQUVnQWtnTkFRd0RDd3NnQUVIb0Ntb2hBQ0FBS0FJQUlRSWdBaUFEU0FSQUlBQkJBRFlDQUVGL0lRRUZJQWdnQVdvaEJTQUVJQU4ySVFNZ0NTQUROZ0lBSUFVdEFBQWhBeUFEUWY4QmNTRURJQUlnQTJzaEFpQUFJQUkyQWdBTERBSUxDeUFBUVJVUUZTQUFRZWdLYWlFQUlBQkJBRFlDQUVGL0lRRUxJQUVMWGdFQ2Z5QUVJQU5ySVFRZ0FpQUJheUVDSUFSQmYwb2hCVUVBSUFScklRWWdCQ0FHSUFVYklRVWdBQ0FCYXlFQUlBVWdBR3doQUNBQUlBSnRJUUFnQkVFQVNDRUJRUUFnQUdzaEFpQUNJQUFnQVJzaEFDQUFJQU5xSVFBZ0FBdjdHZ0VjZnlNR0lSd2pCa0VRYWlRR0lCeEJCR29oQ1NBY0lSSWdBRUdBQTJvaENpQUtLQUlBSVEwZ0FFR0FBbW9nQkVFQmRHb2hDaUFLTGdFQUlRb2dDa0gvL3dOeElSa2dEU0FFUVJoc2FrRU5haUVhSUJvdEFBQWhEaUFPUWY4QmNTRU9JQUJCOEFCcUlSVWdGU2dDQUNFUUlCQWdEa0d3RUd4cUlRNGdEaWdDQUNFWUlBcEJBa1loRENBRElBeDBJUW9nRFNBRVFSaHNhaUVXSUJZb0FnQWhEaUFPSUFwSklSQWdEaUFLSUJBYklSQWdEU0FFUVJoc2FrRUVhaUVPSUE0b0FnQWhEaUFPSUFwSklSUWdEaUFLSUJRYklRb2dDaUFRYXlFS0lBMGdCRUVZYkdwQkNHb2hGQ0FVS0FJQUlRNGdDaUFPYmlFUUlBQkIwQUJxSVI0Z0hpZ0NBQ0VmSUFCQnhBQnFJUW9nQ2lnQ0FDRUtJQXBGSVE0Z0FFRUVhaUVUSUJNb0FnQWhDaUFRUVFKMElRWWdCa0VFYWlFSElBb2dCMndoQnlBT0JFQWpCaUVPSXdZZ0IwRVBha0Z3Y1dva0JnVWdBQ0FIRUR3aERpQVRLQUlBSVFvTElBNGdDaUFHRURzYUlBSkJBRW9pQmdSQUlBTkJBblFoRTBFQUlRb0RRQ0FGSUFwcUlRY2dCeXdBQUNFSElBZEZCRUFnQVNBS1FRSjBhaUVISUFjb0FnQWhCeUFIUVFBZ0V4QjZHZ3NnQ2tFQmFpRUtJQW9nQWtjTkFBc0xJQUpCQVVjaENnSkFJQW9nREhFRVFBSkFJQVlFUUVFQUlRb0RRQ0FGSUFwcUlRd2dEQ3dBQUNFTUlBeEZEUUlnQ2tFQmFpRUtJQW9nQWtnTkFBc0ZRUUFoQ2dzTElBb2dBa2NFUUNBUVFRQktJUkVnQUVIb0Ntb2hEQ0FZUVFCS0lROGdBRUhrQ21vaEV5QU5JQVJCR0d4cVFSUnFJUmtnRFNBRVFSaHNha0VRYWlFYlFRQWhDZ0pBQTBBQ1FBSkFBa0FDUUNBQ1FRRnJEZ0lCQUFJTElCRUVRQ0FLUlNFWFFRQWhCRUVBSVEwRFFDQVdLQUlBSVFVZ0ZDZ0NBQ0VHSUFZZ0JHd2hCaUFHSUFWcUlRVWdCVUVCY1NFR0lBa2dCallDQUNBRlFRRjFJUVVnRWlBRk5nSUFJQmNFUUNBVktBSUFJUVlnR2kwQUFDRUZJQVZCL3dGeElRY2dCaUFIUWJBUWJHb2hDeUFNS0FJQUlRVWdCVUVLU0FSQUlBQVFOQXNnRXlnQ0FDRUlJQWhCL3dkeElRVWdCaUFIUWJBUWJHcEJKR29nQlVFQmRHb2hCU0FGTGdFQUlRVWdCVUYvU2dSQUlBWWdCMEd3RUd4cVFRaHFJUXNnQ3lnQ0FDRUxJQXNnQldvaEN5QUxMUUFBSVFzZ0MwSC9BWEVoQ3lBSUlBdDJJUWdnRXlBSU5nSUFJQXdvQWdBaENDQUlJQXRySVFnZ0NFRUFTQ0VMUVFBZ0NDQUxHeUVJUVg4Z0JTQUxHeUVGSUF3Z0NEWUNBQVVnQUNBTEVEVWhCUXNnQmlBSFFiQVFiR3BCRjJvaENDQUlMQUFBSVFnZ0NBUkFJQVlnQjBHd0VHeHFRYWdRYWlFR0lBWW9BZ0FoQmlBR0lBVkJBblJxSVFVZ0JTZ0NBQ0VGQ3lBRlFYOUdEUWNnR3lnQ0FDRUdJQVlnQlVFQ2RHb2hCU0FGS0FJQUlRVWdEaWdDQUNFR0lBWWdEVUVDZEdvaEJpQUdJQVUyQWdBTElBUWdFRWdoQlNBRklBOXhCRUJCQUNFRkEwQWdGQ2dDQUNFR0lBNG9BZ0FoQnlBSElBMUJBblJxSVFjZ0J5Z0NBQ0VISUFjZ0JXb2hCeUFITFFBQUlRY2dCMEgvQVhFaEJ5QVpLQUlBSVFnZ0NDQUhRUVIwYWlBS1FRRjBhaUVISUFjdUFRQWhCeUFIUVg5S0JFQWdGU2dDQUNFSUlBZ2dCMEd3RUd4cUlRY2dBQ0FISUFGQkFpQUpJQklnQXlBR0VEMGhCaUFHUlEwSkJTQVdLQUlBSVFjZ0JpQUViQ0VJSUFnZ0Jtb2hCaUFHSUFkcUlRWWdCa0VCY1NFSElBa2dCellDQUNBR1FRRjFJUVlnRWlBR05nSUFDeUFGUVFGcUlRVWdCRUVCYWlFRUlBVWdHRWdoQmlBRUlCQklJUWNnQnlBR2NRMEFDd3NnRFVFQmFpRU5JQVFnRUVnTkFBc0xEQUlMSUJFRVFDQUtSU0VYUVFBaERVRUFJUVFEUUNBV0tBSUFJUVVnRkNnQ0FDRUdJQVlnQkd3aEJpQUdJQVZxSVFVZ0NVRUFOZ0lBSUJJZ0JUWUNBQ0FYQkVBZ0ZTZ0NBQ0VHSUJvdEFBQWhCU0FGUWY4QmNTRUhJQVlnQjBHd0VHeHFJUXNnRENnQ0FDRUZJQVZCQ2tnRVFDQUFFRFFMSUJNb0FnQWhDQ0FJUWY4SGNTRUZJQVlnQjBHd0VHeHFRU1JxSUFWQkFYUnFJUVVnQlM0QkFDRUZJQVZCZjBvRVFDQUdJQWRCc0JCc2FrRUlhaUVMSUFzb0FnQWhDeUFMSUFWcUlRc2dDeTBBQUNFTElBdEIvd0Z4SVFzZ0NDQUxkaUVJSUJNZ0NEWUNBQ0FNS0FJQUlRZ2dDQ0FMYXlFSUlBaEJBRWdoQzBFQUlBZ2dDeHNoQ0VGL0lBVWdDeHNoQlNBTUlBZzJBZ0FGSUFBZ0N4QTFJUVVMSUFZZ0IwR3dFR3hxUVJkcUlRZ2dDQ3dBQUNFSUlBZ0VRQ0FHSUFkQnNCQnNha0dvRUdvaEJpQUdLQUlBSVFZZ0JpQUZRUUowYWlFRklBVW9BZ0FoQlFzZ0JVRi9SZzBHSUJzb0FnQWhCaUFHSUFWQkFuUnFJUVVnQlNnQ0FDRUZJQTRvQWdBaEJpQUdJQTFCQW5ScUlRWWdCaUFGTmdJQUN5QUVJQkJJSVFVZ0JTQVBjUVJBUVFBaEJRTkFJQlFvQWdBaEJpQU9LQUlBSVFjZ0J5QU5RUUowYWlFSElBY29BZ0FoQnlBSElBVnFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dHU2dDQUNFSUlBZ2dCMEVFZEdvZ0NrRUJkR29oQnlBSExnRUFJUWNnQjBGL1NnUkFJQlVvQWdBaENDQUlJQWRCc0JCc2FpRUhJQUFnQnlBQlFRRWdDU0FTSUFNZ0JoQTlJUVlnQmtVTkNBVWdGaWdDQUNFSElBWWdCR3doQ0NBSUlBWnFJUVlnQmlBSGFpRUdJQWxCQURZQ0FDQVNJQVkyQWdBTElBVkJBV29oQlNBRVFRRnFJUVFnQlNBWVNDRUdJQVFnRUVnaEJ5QUhJQVp4RFFBTEN5QU5RUUZxSVEwZ0JDQVFTQTBBQ3dzTUFRc2dFUVJBSUFwRklSZEJBQ0VOUVFBaEJBTkFJQllvQWdBaEJTQVVLQUlBSVFZZ0JpQUViQ0VHSUFZZ0JXb2hCU0FGSUFVZ0FtMGlCU0FDYkdzaEJpQUpJQVkyQWdBZ0VpQUZOZ0lBSUJjRVFDQVZLQUlBSVFZZ0dpMEFBQ0VGSUFWQi93RnhJUWNnQmlBSFFiQVFiR29oQ3lBTUtBSUFJUVVnQlVFS1NBUkFJQUFRTkFzZ0V5Z0NBQ0VJSUFoQi93ZHhJUVVnQmlBSFFiQVFiR3BCSkdvZ0JVRUJkR29oQlNBRkxnRUFJUVVnQlVGL1NnUkFJQVlnQjBHd0VHeHFRUWhxSVFzZ0N5Z0NBQ0VMSUFzZ0JXb2hDeUFMTFFBQUlRc2dDMEgvQVhFaEN5QUlJQXQySVFnZ0V5QUlOZ0lBSUF3b0FnQWhDQ0FJSUF0cklRZ2dDRUVBU0NFTFFRQWdDQ0FMR3lFSVFYOGdCU0FMR3lFRklBd2dDRFlDQUFVZ0FDQUxFRFVoQlFzZ0JpQUhRYkFRYkdwQkYyb2hDQ0FJTEFBQUlRZ2dDQVJBSUFZZ0IwR3dFR3hxUWFnUWFpRUdJQVlvQWdBaEJpQUdJQVZCQW5ScUlRVWdCU2dDQUNFRkN5QUZRWDlHRFFVZ0d5Z0NBQ0VHSUFZZ0JVRUNkR29oQlNBRktBSUFJUVVnRGlnQ0FDRUdJQVlnRFVFQ2RHb2hCaUFHSUFVMkFnQUxJQVFnRUVnaEJTQUZJQTl4QkVCQkFDRUZBMEFnRkNnQ0FDRUdJQTRvQWdBaEJ5QUhJQTFCQW5ScUlRY2dCeWdDQUNFSElBY2dCV29oQnlBSExRQUFJUWNnQjBIL0FYRWhCeUFaS0FJQUlRZ2dDQ0FIUVFSMGFpQUtRUUYwYWlFSElBY3VBUUFoQnlBSFFYOUtCRUFnRlNnQ0FDRUlJQWdnQjBHd0VHeHFJUWNnQUNBSElBRWdBaUFKSUJJZ0F5QUdFRDBoQmlBR1JRMEhCU0FXS0FJQUlRY2dCaUFFYkNFSUlBZ2dCbW9oQmlBR0lBZHFJUVlnQmlBR0lBSnRJZ1lnQW14cklRY2dDU0FITmdJQUlCSWdCallDQUFzZ0JVRUJhaUVGSUFSQkFXb2hCQ0FGSUJoSUlRWWdCQ0FRU0NFSElBY2dCbkVOQUFzTElBMUJBV29oRFNBRUlCQklEUUFMQ3dzZ0NrRUJhaUVLSUFwQkNFa05BQXNMQ3dVZ0VFRUFTaUViSUFKQkFVZ2hDQ0FZUVFCS0lRc2dBRUhvQ21vaEV5QUFRZVFLYWlFSElBMGdCRUVZYkdwQkVHb2hGeUFOSUFSQkdHeHFRUlJxSVNCQkFDRUtBMEFnR3dSQUlBcEJBRWNnQ0hJaElVRUFJUTFCQUNFREEwQWdJVVVFUUVFQUlSSURRQ0FGSUJKcUlRUWdCQ3dBQUNFRUlBUkZCRUFnRlNnQ0FDRUpJQm90QUFBaEJDQUVRZjhCY1NFTUlBa2dERUd3RUd4cUlROGdFeWdDQUNFRUlBUkJDa2dFUUNBQUVEUUxJQWNvQWdBaEVTQVJRZjhIY1NFRUlBa2dERUd3RUd4cVFTUnFJQVJCQVhScUlRUWdCQzRCQUNFRUlBUkJmMG9FUUNBSklBeEJzQkJzYWtFSWFpRVBJQThvQWdBaER5QVBJQVJxSVE4Z0R5MEFBQ0VQSUE5Qi93RnhJUThnRVNBUGRpRVJJQWNnRVRZQ0FDQVRLQUlBSVJFZ0VTQVBheUVSSUJGQkFFZ2hEMEVBSUJFZ0R4c2hFVUYvSUFRZ0R4c2hCQ0FUSUJFMkFnQUZJQUFnRHhBMUlRUUxJQWtnREVHd0VHeHFRUmRxSVJFZ0VTd0FBQ0VSSUJFRVFDQUpJQXhCc0JCc2FrR29FR29oQ1NBSktBSUFJUWtnQ1NBRVFRSjBhaUVFSUFRb0FnQWhCQXNnQkVGL1JnMEhJQmNvQWdBaENTQUpJQVJCQW5ScUlRUWdCQ2dDQUNFRUlBNGdFa0VDZEdvaENTQUpLQUlBSVFrZ0NTQU5RUUowYWlFSklBa2dCRFlDQUFzZ0VrRUJhaUVTSUJJZ0FrZ05BQXNMSUFNZ0VFZ2hCQ0FFSUF0eEJFQkJBQ0VTQTBBZ0JnUkFRUUFoQkFOQUlBVWdCR29oQ1NBSkxBQUFJUWtnQ1VVRVFDQU9JQVJCQW5ScUlRa2dDU2dDQUNFSklBa2dEVUVDZEdvaENTQUpLQUlBSVFrZ0NTQVNhaUVKSUFrdEFBQWhDU0FKUWY4QmNTRUpJQ0FvQWdBaERDQU1JQWxCQkhScUlBcEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FCSUFSQkFuUnFJUXdnRENnQ0FDRVJJQllvQWdBaER5QVVLQUlBSVF3Z0RDQURiQ0VkSUIwZ0Qyb2hEeUFWS0FJQUlSMGdIU0FKUWJBUWJHb2hDU0FBSUFrZ0VTQVBJQXdnR1JBK0lRa2dDVVVOQ2dzTElBUkJBV29oQkNBRUlBSklEUUFMQ3lBU1FRRnFJUklnQTBFQmFpRURJQklnR0VnaEJDQURJQkJJSVFrZ0NTQUVjUTBBQ3dzZ0RVRUJhaUVOSUFNZ0VFZ05BQXNMSUFwQkFXb2hDaUFLUVFoSkRRQUxDd3NnSGlBZk5nSUFJQndrQmd2UEF3SUlmd0o5SUFOQkFYVWhDU0FCUVFScUlRTWdBeWdDQUNFRElBTWdBa0VEYkdwQkFtb2hBaUFDTFFBQUlRSWdBa0gvQVhFaEFpQUJRUWxxSUFKcUlRRWdBUzBBQUNFQklBRkIvd0Z4SVFjZ0FFSDRBR29nQjBFQmRHb2hBU0FCTGdFQUlRRWdBUVJBSUFCQitBRnFJUUFnQUNnQ0FDRUlJQVV1QVFBaEFTQUlJQWRCdkF4c2FrRzBER29oQ3lBTExRQUFJUUFnQUVIL0FYRWhBQ0FBSUFGc0lRRWdDQ0FIUWJ3TWJHcEJ1QXhxSVF3Z0RDZ0NBQ0VDSUFKQkFVb0VRRUVBSVFCQkFTRUtBMEFnQ0NBSFFid01iR3BCeGdacUlBcHFJUU1nQXkwQUFDRURJQU5CL3dGeElRMGdCU0FOUVFGMGFpRURJQU11QVFBaEJpQUdRWDlLQkVBZ0N5MEFBQ0VESUFOQi93RnhJUU1nQXlBR2JDRURJQWdnQjBHOERHeHFRZElDYWlBTlFRRjBhaUVHSUFZdkFRQWhCaUFHUWYvL0EzRWhCaUFBSUFaSEJFQWdCQ0FBSUFFZ0JpQURJQWtRUWlBR0lRQWdEQ2dDQUNFQ0N5QURJUUVMSUFwQkFXb2hBeUFESUFKSUJFQWdBeUVLREFFTEN3VkJBQ0VBQ3lBQUlBbElCRUFnQVVFQ2RFR2dDR29xQWdBaER3TkFJQVFnQUVFQ2RHb2hBU0FCS2dJQUlRNGdEeUFPbENFT0lBRWdEamdDQUNBQVFRRnFJUUFnQUNBSlJ3MEFDd3NGSUFCQkZSQVZDd3VGR2dJVmZ3cDlJd1loRmlBQlFRRjFJUThnQVVFQ2RTRU5JQUZCQTNVaERpQUNRZEFBYWlFVUlCUW9BZ0FoRnlBQ1FjUUFhaUVJSUFnb0FnQWhDQ0FJUlNFSUlBOUJBblFoQlNBSUJFQWpCaUVNSXdZZ0JVRVBha0Z3Y1dva0JnVWdBaUFGRUR3aERBc2dBa0dnQ0dvZ0EwRUNkR29oQ0NBSUtBSUFJUWdnRDBGK2FpRUdJQXdnQmtFQ2RHb2hCaUFBSUE5QkFuUnFJUlVnRHdSL0lBVkJjR29oQlNBRlFRUjJJUWNnQjBFRGRDRUVJQVVnQkdzaEJTQU1JQVZxSVFRZ0IwRUJkQ0VGSUFWQkFtb2hDeUFHSVFjZ0FDRUdJQWdoQlFOQUlBWXFBZ0FoR1NBRktnSUFJUm9nR1NBYWxDRVpJQVpCQ0dvaENpQUtLZ0lBSVJvZ0JVRUVhaUVKSUFrcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha3lFWklBZEJCR29oRUNBUUlCazRBZ0FnQmlvQ0FDRVpJQWtxQWdBaEdpQVpJQnFVSVJrZ0Npb0NBQ0VhSUFVcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha2lFWklBY2dHVGdDQUNBSFFYaHFJUWNnQlVFSWFpRUZJQVpCRUdvaEJpQUdJQlZIRFFBTElBUWhCaUFJSUF0QkFuUnFCU0FJQ3lFSElBWWdERThFUUNBUFFYMXFJUVFnQmlFRklBQWdCRUVDZEdvaEJDQUhJUVlEUUNBRVFRaHFJUWNnQnlvQ0FDRVpJQVlxQWdBaEdpQVpJQnFVSVJrZ0JDb0NBQ0VhSUFaQkJHb2hDaUFLS2dJQUlSc2dHaUFibENFYUlCb2dHWk1oR1NBRlFRUnFJUWtnQ1NBWk9BSUFJQWNxQWdBaEdTQUtLZ0lBSVJvZ0dTQWFsQ0VaSUFRcUFnQWhHaUFHS2dJQUlSc2dHaUFibENFYUlCcU1JUm9nR2lBWmt5RVpJQVVnR1RnQ0FDQUZRWGhxSVFVZ0JrRUlhaUVHSUFSQmNHb2hCQ0FGSUF4UERRQUxDeUFCUVJCT0JFQWdEMEY0YWlFR0lBZ2dCa0VDZEdvaEJpQUFJQTFCQW5ScUlRY2dBQ0VFSUF3Z0RVRUNkR29oQ2lBTUlRVURRQ0FLUVFScUlRa2dDU29DQUNFWklBVkJCR29oQ1NBSktnSUFJUm9nR1NBYWt5RWJJQW9xQWdBaEhDQUZLZ0lBSVIwZ0hDQWRreUVjSUJrZ0dwSWhHU0FIUVFScUlRa2dDU0FaT0FJQUlBb3FBZ0FoR1NBRktnSUFJUm9nR1NBYWtpRVpJQWNnR1RnQ0FDQUdRUkJxSVFrZ0NTb0NBQ0VaSUJzZ0daUWhHU0FHUVJScUlRc2dDeW9DQUNFYUlCd2dHcFFoR2lBWklCcVRJUmtnQkVFRWFpRVFJQkFnR1RnQ0FDQUpLZ0lBSVJrZ0hDQVpsQ0VaSUFzcUFnQWhHaUFiSUJxVUlSb2dHU0Fha2lFWklBUWdHVGdDQUNBS1FReHFJUWtnQ1NvQ0FDRVpJQVZCREdvaENTQUpLZ0lBSVJvZ0dTQWFreUViSUFwQkNHb2hDU0FKS2dJQUlSd2dCVUVJYWlFTElBc3FBZ0FoSFNBY0lCMlRJUndnR1NBYWtpRVpJQWRCREdvaEVDQVFJQms0QWdBZ0NTb0NBQ0VaSUFzcUFnQWhHaUFaSUJxU0lSa2dCMEVJYWlFSklBa2dHVGdDQUNBR0tnSUFJUmtnR3lBWmxDRVpJQVpCQkdvaENTQUpLZ0lBSVJvZ0hDQWFsQ0VhSUJrZ0dwTWhHU0FFUVF4cUlRc2dDeUFaT0FJQUlBWXFBZ0FoR1NBY0lCbVVJUmtnQ1NvQ0FDRWFJQnNnR3BRaEdpQVpJQnFTSVJrZ0JFRUlhaUVKSUFrZ0dUZ0NBQ0FHUVdCcUlRWWdCMEVRYWlFSElBUkJFR29oQkNBS1FSQnFJUW9nQlVFUWFpRUZJQVlnQ0U4TkFBc0xJQUVRTFNFSElBRkJCSFVoQmlBUFFYOXFJUWxCQUNBT2F5RUZJQVlnQUNBSklBVWdDQkJESUFrZ0RXc2hCQ0FHSUFBZ0JDQUZJQWdRUXlBQlFRVjFJUXRCQUNBR2F5RUdJQXNnQUNBSklBWWdDRUVRRUVRZ0NTQU9heUVGSUFzZ0FDQUZJQVlnQ0VFUUVFUWdEa0VCZENFRklBa2dCV3NoQlNBTElBQWdCU0FHSUFoQkVCQkVJQTVCZld3aEJTQUpJQVZxSVFVZ0N5QUFJQVVnQmlBSVFSQVFSQ0FIUVh4cUlRWWdCa0VCZFNFT0lBZEJDVW9FUUVFQ0lRVURRQ0FGUVFKcUlRWWdBU0FHZFNFRUlBVkJBV29oQmtFQ0lBVjBJUW9nQ2tFQVNnUkFJQUVnQlVFRWFuVWhFRUVBSUFSQkFYVnJJUkpCQ0NBRmRDRVRRUUFoQlFOQUlBVWdCR3doRVNBSklCRnJJUkVnRUNBQUlCRWdFaUFJSUJNUVJDQUZRUUZxSVFVZ0JTQUtSdzBBQ3dzZ0JpQU9TQVJBSUFZaEJRd0JDd3NGUVFJaEJnc2dCMEY1YWlFT0lBWWdEa2dFUUFOQUlBWkJBbW9oQlNBQklBVjFJUkJCQ0NBR2RDRVNJQVpCQm1vaEJTQUJJQVYxSVFjZ0JrRUJhaUVFUVFJZ0JuUWhFeUFIUVFCS0JFQkJBQ0FRUVFGMWF5RVJJQkpCQW5RaEdDQUlJUVlnQ1NFRkEwQWdFeUFBSUFVZ0VTQUdJQklnRUJCRklBWWdHRUVDZEdvaEJpQUZRWGhxSVFVZ0IwRi9haUVLSUFkQkFVb0VRQ0FLSVFjTUFRc0xDeUFFSUE1SEJFQWdCQ0VHREFFTEN3c2dDeUFBSUFrZ0NDQUJFRVlnRFVGOGFpRUlJQXdnQ0VFQ2RHb2hCaUFQUVh4cUlRa2dCaUFNVHdSQUlBd2dDVUVDZEdvaENDQUNRY0FJYWlBRFFRSjBhaUVGSUFVb0FnQWhCUU5BSUFVdkFRQWhCeUFIUWYvL0EzRWhCeUFBSUFkQkFuUnFJUVFnQkNnQ0FDRUVJQWhCREdvaENpQUtJQVEyQWdBZ0IwRUJhaUVFSUFBZ0JFRUNkR29oQkNBRUtBSUFJUVFnQ0VFSWFpRUtJQW9nQkRZQ0FDQUhRUUpxSVFRZ0FDQUVRUUowYWlFRUlBUW9BZ0FoQkNBR1FReHFJUW9nQ2lBRU5nSUFJQWRCQTJvaEJ5QUFJQWRCQW5ScUlRY2dCeWdDQUNFSElBWkJDR29oQkNBRUlBYzJBZ0FnQlVFQ2FpRUhJQWN2QVFBaEJ5QUhRZi8vQTNFaEJ5QUFJQWRCQW5ScUlRUWdCQ2dDQUNFRUlBaEJCR29oQ2lBS0lBUTJBZ0FnQjBFQmFpRUVJQUFnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdDQ0FFTmdJQUlBZEJBbW9oQkNBQUlBUkJBblJxSVFRZ0JDZ0NBQ0VFSUFaQkJHb2hDaUFLSUFRMkFnQWdCMEVEYWlFSElBQWdCMEVDZEdvaEJ5QUhLQUlBSVFjZ0JpQUhOZ0lBSUFaQmNHb2hCaUFJUVhCcUlRZ2dCVUVFYWlFRklBWWdERThOQUFzTElBd2dEMEVDZEdvaUIwRndhaUVJSUFnZ0RFc0VRQ0FDUWJBSWFpQURRUUowYWlFR0lBd2hCU0FHS0FJQUlRUWdCeUVHQTBBZ0JTb0NBQ0VaSUFaQmVHb2hDaUFLS2dJQUlSb2dHU0Fha3lFYklBVkJCR29oQ3lBTEtnSUFJUndnQmtGOGFpRU5JQTBxQWdBaEhTQWNJQjJTSVI0Z0JFRUVhaUVPSUE0cUFnQWhJQ0FiSUNDVUlSOGdCQ29DQUNFaElCNGdJWlFoSWlBZklDS1NJUjhnSUNBZWxDRWVJQnNnSVpRaEd5QWVJQnVUSVJzZ0dTQWFraUVaSUJ3Z0haTWhHaUFaSUIrU0lSd2dCU0FjT0FJQUlCb2dHNUloSENBTElCdzRBZ0FnR1NBZmt5RVpJQW9nR1RnQ0FDQWJJQnFUSVJrZ0RTQVpPQUlBSUFWQkNHb2hDaUFLS2dJQUlSa2dDQ29DQUNFYUlCa2dHcE1oR3lBRlFReHFJUXNnQ3lvQ0FDRWNJQVpCZEdvaEJpQUdLZ0lBSVIwZ0hDQWRraUVlSUFSQkRHb2hEU0FOS2dJQUlTQWdHeUFnbENFZklBUkJDR29oRFNBTktnSUFJU0VnSGlBaGxDRWlJQjhnSXBJaEh5QWdJQjZVSVI0Z0d5QWhsQ0ViSUI0Z0c1TWhHeUFaSUJxU0lSa2dIQ0Fka3lFYUlCa2dINUloSENBS0lCdzRBZ0FnR2lBYmtpRWNJQXNnSERnQ0FDQVpJQitUSVJrZ0NDQVpPQUlBSUJzZ0dwTWhHU0FHSUJrNEFnQWdCRUVRYWlFS0lBVkJFR29oQlNBSVFYQnFJUVFnQlNBRVNRUkFJQWdoQmlBRUlRZ2dDaUVFREFFTEN3c2dCMEZnYWlFSUlBZ2dERThFUUNBQ1FhZ0lhaUFEUVFKMGFpRUNJQUlvQWdBaEFpQUNJQTlCQW5ScUlRSWdBVUY4YWlFQklBQWdBVUVDZEdvaEF5QUlJUUVnRlNFSUlBQWdDVUVDZEdvaEJTQUFJUVlnQnlFQUEwQWdBa0ZnYWlFSElBQkJlR29oQkNBRUtnSUFJUmtnQWtGOGFpRUVJQVFxQWdBaEdpQVpJQnFVSVIwZ0FFRjhhaUVFSUFRcUFnQWhHeUFDUVhocUlRUWdCQ29DQUNFY0lCc2dISlFoSGlBZElCNlRJUjBnR1NBY2xDRVpJQm1NSVJrZ0dpQWJsQ0VhSUJrZ0dwTWhHU0FHSUIwNEFnQWdIWXdoR2lBRlFReHFJUVFnQkNBYU9BSUFJQWdnR1RnQ0FDQURRUXhxSVFRZ0JDQVpPQUlBSUFCQmNHb2hCQ0FFS2dJQUlSa2dBa0YwYWlFRUlBUXFBZ0FoR2lBWklCcVVJUjBnQUVGMGFpRUVJQVFxQWdBaEd5QUNRWEJxSVFRZ0JDb0NBQ0VjSUJzZ0hKUWhIaUFkSUI2VElSMGdHU0FjbENFWklCbU1JUmtnR2lBYmxDRWFJQmtnR3BNaEdTQUdRUVJxSVFRZ0JDQWRPQUlBSUIyTUlSb2dCVUVJYWlFRUlBUWdHamdDQUNBSVFRUnFJUVFnQkNBWk9BSUFJQU5CQ0dvaEJDQUVJQms0QWdBZ0FFRm9haUVFSUFRcUFnQWhHU0FDUVd4cUlRUWdCQ29DQUNFYUlCa2dHcFFoSFNBQVFXeHFJUVFnQkNvQ0FDRWJJQUpCYUdvaEJDQUVLZ0lBSVJ3Z0d5QWNsQ0VlSUIwZ0hwTWhIU0FaSUJ5VUlSa2dHWXdoR1NBYUlCdVVJUm9nR1NBYWt5RVpJQVpCQ0dvaEJDQUVJQjA0QWdBZ0hZd2hHaUFGUVFScUlRUWdCQ0FhT0FJQUlBaEJDR29oQkNBRUlCazRBZ0FnQTBFRWFpRUVJQVFnR1RnQ0FDQUJLZ0lBSVJrZ0FrRmthaUVDSUFJcUFnQWhHaUFaSUJxVUlSMGdBRUZrYWlFQUlBQXFBZ0FoR3lBSEtnSUFJUndnR3lBY2xDRWVJQjBnSHBNaEhTQVpJQnlVSVJrZ0dZd2hHU0FhSUJ1VUlSb2dHU0Fha3lFWklBWkJER29oQUNBQUlCMDRBZ0FnSFl3aEdpQUZJQm80QWdBZ0NFRU1haUVBSUFBZ0dUZ0NBQ0FESUJrNEFnQWdCa0VRYWlFR0lBaEJFR29oQ0NBRlFYQnFJUVVnQTBGd2FpRURJQUZCWUdvaEFpQUNJQXhQQkVBZ0FTRUFJQUloQVNBSElRSU1BUXNMQ3lBVUlCYzJBZ0FnRmlRR0M4VUJBUUYvSUFCQkFYWWhBU0FCUWRXcTFhb0ZjU0VCSUFCQkFYUWhBQ0FBUWFyVnF0VjZjU0VBSUFFZ0FISWhBQ0FBUVFKMklRRWdBVUd6NXN5WkEzRWhBU0FBUVFKMElRQWdBRUhNbWJQbWZIRWhBQ0FCSUFCeUlRQWdBRUVFZGlFQklBRkJqNTY4K0FCeElRRWdBRUVFZENFQUlBQkI4T0hEaDM5eElRQWdBU0FBY2lFQUlBQkJDSFloQVNBQlFmK0IvQWR4SVFFZ0FFRUlkQ0VBSUFCQmdQNkRlSEVoQUNBQklBQnlJUUFnQUVFUWRpRUJJQUJCRUhRaEFDQUJJQUJ5SVFBZ0FBdEJBUU4vSUFGQkFFb0VRQ0FBSUFGQkFuUnFJUVFEUUNBQUlBTkJBblJxSVFVZ0JTQUVOZ0lBSUFRZ0Ftb2hCQ0FEUVFGcUlRTWdBeUFCUncwQUN3c2dBQXRyQVFOL0lBRkJBMm9oQVNBQlFYeHhJUUVnQUVIRUFHb2hBaUFDS0FJQUlRSWdBZ1IvSUFCQjBBQnFJUU1nQXlnQ0FDRUVJQVFnQVdzaEFTQUFRY3dBYWlFQUlBQW9BZ0FoQUNBQklBQklCSDlCQUFVZ0F5QUJOZ0lBSUFJZ0FXb0xCU0FCRUY0TElRQWdBQXZhQmdJUGZ3SjlJQUZCRldvaERDQU1MQUFBSVF3Q2Z5QU1CSDhnQlNnQ0FDRUpJQVFvQWdBaENnSkFJQWRCQUVvRWZ5QUFRZWdLYWlFT0lBQkI1QXBxSVJBZ0FVRUlhaUVUSUFGQkYyb2hGQ0FCUWF3UWFpRVZJQVlnQTJ3aEVTQUJRUlpxSVJZZ0FVRWNhaUVTSUFjaERDQUtJUVlnQVNnQ0FDRUtJQWtoQndKQUFrQURRQUpBSUE0b0FnQWhDU0FKUVFwSUJFQWdBQkEwQ3lBUUtBSUFJUXNnQzBIL0IzRWhDU0FCUVNScUlBbEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FUS0FJQUlRZ2dDQ0FKYWlFSUlBZ3RBQUFoQ0NBSVFmOEJjU0VJSUFzZ0NIWWhDeUFRSUFzMkFnQWdEaWdDQUNFTElBc2dDR3NoQ3lBTFFRQklJUWhCQUNBTElBZ2JJUTFCZnlBSklBZ2JJUXNnRGlBTk5nSUFCU0FBSUFFUU5TRUxDeUFVTEFBQUlRa2dDUVJBSUJVb0FnQWhDU0FMSUFsT0RRTUxJQXRCQUVnTkFDQUhJQU5zSVFrZ0NpQUphaUVJSUFnZ0Jtb2hDQ0FJSUJGS0lRZ2dFU0FKYXlFSklBa2dCbW9oQ1NBSklBb2dDQnNoQ1NBQktBSUFJUW9nQ2lBTGJDRUxJQllzQUFBaENDQUpRUUJLSVFvZ0NBUkFJQW9FUUNBU0tBSUFJUTFEQUFBQUFDRVhRUUFoQ2dOQUlBb2dDMm9oQ0NBTklBaEJBblJxSVFnZ0NDb0NBQ0VZSUJjZ0dKSWhGeUFDSUFaQkFuUnFJUWdnQ0NnQ0FDRUlJQWhGSVE4Z0NDQUhRUUowYWlFSUlBOUZCRUFnQ0NvQ0FDRVlJQmNnR0pJaEdDQUlJQmc0QWdBTElBWkJBV29oQmlBR0lBTkdJUWdnQnlBSWFpRUhRUUFnQmlBSUd5RUdJQXBCQVdvaENpQUtJQWxIRFFBTEN3VWdDZ1JBUVFBaENnTkFJQUlnQmtFQ2RHb2hDQ0FJS0FJQUlRZ2dDQVJBSUJJb0FnQWhEU0FLSUF0cUlROGdEU0FQUVFKMGFpRU5JQTBxQWdBaEZ5QVhRd0FBQUFDU0lSY2dDQ0FIUVFKMGFpRUlJQWdxQWdBaEdDQVlJQmVTSVJjZ0NDQVhPQUlBQ3lBR1FRRnFJUVlnQmlBRFJpRUlJQWNnQ0dvaEIwRUFJQVlnQ0JzaEJpQUtRUUZxSVFvZ0NpQUpSdzBBQ3dzTElBd2dDV3NoRENBTVFRQk1EUVVnQ1NFS0RBRUxDd3dCQzBHbkZVSEVFMEdnRGtITEZSQUVDeUFBUWRRS2FpRUJJQUVzQUFBaEFTQUJSUVJBSUFCQjNBcHFJUUVnQVNnQ0FDRUJRUUFnQVEwRUdnc2dBRUVWRUJWQkFBd0RCU0FKSVFjZ0Nnc2hCZ3NnQkNBR05nSUFJQVVnQnpZQ0FFRUJCU0FBUVJVUUZVRUFDd3NoQUNBQUMrQUJBUUovQWtBZ0JRUkFJQVJCQUVvRVFFRUFJUVVEUUNBQ0lBTkJBblJxSVFZZ0JDQUZheUVISUFBZ0FTQUdJQWNRUUNFR0lBWkZCRUJCQUNFQURBUUxJQUVvQWdBaEJpQUdJQVZxSVFVZ0JpQURhaUVESUFVZ0JFZ05BQXRCQVNFQUJVRUJJUUFMQlNBQktBSUFJUVVnQkNBRmJTRUZJQUlnQTBFQ2RHb2hCaUFGUVFCS0JFQWdCQ0FEYXlFRFFRQWhBZ05BSUFZZ0FrRUNkR29oQkNBRElBSnJJUWNnQUNBQklBUWdCeUFGRUQ4aEJDQUVSU0VFSUFRRVFFRUFJUUFNQkFzZ0FrRUJhaUVDSUFJZ0JVZ05BQXRCQVNFQUJVRUJJUUFMQ3dzZ0FBdStBUUlEZndOOUlBQWdBUkJCSVFVZ0JVRUFTQVJBUVFBaEFBVWdBU2dDQUNFQUlBQWdBMGdoQmlBQUlBTWdCaHNoQXlBQUlBVnNJUVVnQTBFQVNnUkFJQUVvQWh3aEJpQUJMQUFXUlNFSFFRQWhBQU5BSUFBZ0JXb2hBU0FHSUFGQkFuUnFJUUVnQVNvQ0FDRUlJQWtnQ0pJaENDQUFJQVJzSVFFZ0FpQUJRUUowYWlFQklBRXFBZ0FoQ2lBS0lBaVNJUW9nQVNBS09BSUFJQWtnQ0NBSEd5RUpJQUJCQVdvaEFDQUFJQU5JRFFBTFFRRWhBQVZCQVNFQUN3c2dBQXZGQWdJRGZ3SjlJQUFnQVJCQklRVUNRQ0FGUVFCSUJFQkJBQ0VBQlNBQktBSUFJUUFnQUNBRFNDRUVJQUFnQXlBRUd5RURJQUFnQld3aEJTQUJRUlpxSVFBZ0FDd0FBQ0VFSUFOQkFFb2hBQ0FFQkVBZ0FFVUVRRUVCSVFBTUF3c2dBU2dDSENFRUlBRkJER29oQmtFQUlRQURRQ0FBSUFWcUlRRWdCQ0FCUVFKMGFpRUJJQUVxQWdBaENDQUhJQWlTSVFjZ0FpQUFRUUowYWlFQklBRXFBZ0FoQ0NBSUlBZVNJUWdnQVNBSU9BSUFJQVlxQWdBaENDQUhJQWlTSVFjZ0FFRUJhaUVBSUFBZ0EwZ05BQXRCQVNFQUJTQUFSUVJBUVFFaEFBd0RDeUFCS0FJY0lRUkJBQ0VBQTBBZ0FDQUZhaUVCSUFRZ0FVRUNkR29oQVNBQktnSUFJUWNnQjBNQUFBQUFraUVISUFJZ0FFRUNkR29oQVNBQktnSUFJUWdnQ0NBSGtpRUhJQUVnQnpnQ0FDQUFRUUZxSVFBZ0FDQURTQTBBQzBFQklRQUxDd3NnQUF2TUFnRUZmeUFCUVJWcUlRSWdBaXdBQUNFQ0FrQWdBZ1JBSUFCQjZBcHFJUVVnQlNnQ0FDRUNJQUpCQ2tnRVFDQUFFRFFMSUFCQjVBcHFJUVFnQkNnQ0FDRUdJQVpCL3dkeElRSWdBVUVrYWlBQ1FRRjBhaUVDSUFJdUFRQWhBaUFDUVg5S0JFQWdBVUVJYWlFRElBTW9BZ0FoQXlBRElBSnFJUU1nQXkwQUFDRURJQU5CL3dGeElRTWdCaUFEZGlFR0lBUWdCallDQUNBRktBSUFJUVFnQkNBRGF5RUVJQVJCQUVnaEJrRUFJQVFnQmhzaEJFRi9JQUlnQmhzaEFpQUZJQVEyQWdBRklBQWdBUkExSVFJTElBRkJGMm9oQlNBRkxBQUFJUVVnQlFSQUlBRkJyQkJxSVFFZ0FTZ0NBQ0VCSUFJZ0FVNEVRRUh2RlVIRUUwSENEVUdGRmhBRUN3c2dBa0VBU0FSQUlBQkIxQXBxSVFFZ0FTd0FBQ0VCSUFGRkJFQWdBRUhjQ21vaEFTQUJLQUlBSVFFZ0FRMERDeUFBUVJVUUZRc0ZJQUJCRlJBVlFYOGhBZ3NMSUFJTHRBSUNCWDhDZlNBRUlBSnJJUVFnQXlBQmF5RUlJQVJCZjBvaEJrRUFJQVJySVFjZ0JDQUhJQVliSVFjZ0JDQUliU0VHSUFSQkgzVWhCQ0FFUVFGeUlRb2dCa0YvU2lFRVFRQWdCbXNoQ1NBR0lBa2dCQnNoQkNBRUlBaHNJUVFnQnlBRWF5RUhJQU1nQlVvaEJDQUZJQU1nQkJzaEJDQUVJQUZLQkVBZ0FrRUNkRUdnQ0dvaEF5QURLZ0lBSVFzZ0FDQUJRUUowYWlFRElBTXFBZ0FoRENBTElBeVVJUXNnQXlBTE9BSUFJQUZCQVdvaEFTQUJJQVJJQkVCQkFDRURBMEFnQXlBSGFpRURJQU1nQ0VnaEJVRUFJQW9nQlJzaENVRUFJQWdnQlJzaEJTQURJQVZySVFNZ0FpQUdhaUFKYWlFQ0lBSkJBblJCb0FocUlRVWdCU29DQUNFTElBQWdBVUVDZEdvaEJTQUZLZ0lBSVF3Z0N5QU1sQ0VMSUFVZ0N6Z0NBQ0FCUVFGcUlRRWdBU0FFU0EwQUN3c0xDNHNIQWdSL0JuMGdBU0FDUVFKMGFpRUJJQUJCQTNFaEFpQUNCRUJCbXhaQnhCTkI0QkpCcUJZUUJBc2dBRUVEU2dSQUlBQkJBblloQUNBQklBTkJBblJxSVFNRFFDQUJLZ0lBSVFzZ0F5b0NBQ0VNSUFzZ0RKTWhEU0FCUVh4cUlRSWdBaW9DQUNFS0lBTkJmR29oQlNBRktnSUFJUWtnQ2lBSmt5RU9JQXNnREpJaENTQUJJQWs0QWdBZ0JTb0NBQ0VKSUFvZ0NaSWhDU0FDSUFrNEFnQWdCQ29DQUNFSklBMGdDWlFoQ2lBRVFRUnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0F5QUpPQUlBSUFRcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQlNBSk9BSUFJQVJCSUdvaEJ5QUJRWGhxSVFnZ0NDb0NBQ0VMSUFOQmVHb2hCU0FGS2dJQUlRd2dDeUFNa3lFTklBRkJkR29oQWlBQ0tnSUFJUW9nQTBGMGFpRUdJQVlxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFnZ0NUZ0NBQ0FHS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBSEtnSUFJUWtnRFNBSmxDRUtJQVJCSkdvaEFpQUNLZ0lBSVFrZ0RpQUpsQ0VKSUFvZ0NaTWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBNGdDWlFoQ2lBQ0tnSUFJUWtnRFNBSmxDRUpJQW9nQ1pJaENTQUdJQWs0QWdBZ0JFRkFheUVISUFGQmNHb2hDQ0FJS2dJQUlRc2dBMEZ3YWlFRklBVXFBZ0FoRENBTElBeVRJUTBnQVVGc2FpRUNJQUlxQWdBaENpQURRV3hxSVFZZ0Jpb0NBQ0VKSUFvZ0NaTWhEaUFMSUF5U0lRa2dDQ0FKT0FJQUlBWXFBZ0FoQ1NBS0lBbVNJUWtnQWlBSk9BSUFJQWNxQWdBaENTQU5JQW1VSVFvZ0JFSEVBR29oQWlBQ0tnSUFJUWtnRGlBSmxDRUpJQW9nQ1pNaENTQUZJQWs0QWdBZ0J5b0NBQ0VKSUE0Z0NaUWhDaUFDS2dJQUlRa2dEU0FKbENFSklBb2dDWkloQ1NBR0lBazRBZ0FnQkVIZ0FHb2hCeUFCUVdocUlRZ2dDQ29DQUNFTElBTkJhR29oQlNBRktnSUFJUXdnQ3lBTWt5RU5JQUZCWkdvaEFpQUNLZ0lBSVFvZ0EwRmthaUVHSUFZcUFnQWhDU0FLSUFtVElRNGdDeUFNa2lFSklBZ2dDVGdDQUNBR0tnSUFJUWtnQ2lBSmtpRUpJQUlnQ1RnQ0FDQUhLZ0lBSVFrZ0RTQUpsQ0VLSUFSQjVBQnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0JTQUpPQUlBSUFjcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQmlBSk9BSUFJQVJCZ0FGcUlRUWdBVUZnYWlFQklBTkJZR29oQXlBQVFYOXFJUUlnQUVFQlNnUkFJQUloQUF3QkN3c0xDNEVIQWdOL0JYMGdBU0FDUVFKMGFpRUJJQUJCQTBvRVFDQUFRUUoySVFZZ0FTQURRUUowYWlFQ0lBRWhBQ0FHSVFFRFFDQUFLZ0lBSVFrZ0Fpb0NBQ0VLSUFrZ0NwTWhEQ0FBUVh4cUlRWWdCaW9DQUNFTklBSkJmR29oQXlBREtnSUFJUXNnRFNBTGt5RUxJQWtnQ3BJaENTQUFJQWs0QWdBZ0F5b0NBQ0VKSUEwZ0NaSWhDU0FHSUFrNEFnQWdCQ29DQUNFSklBd2dDWlFoQ1NBRVFRUnFJUVlnQmlvQ0FDRUtJQXNnQ3BRaENpQUpJQXFUSVFrZ0FpQUpPQUlBSUFRcUFnQWhDU0FMSUFtVUlRa2dCaW9DQUNFS0lBd2dDcFFoQ2lBSklBcVNJUWtnQXlBSk9BSUFJQVFnQlVFQ2RHb2hBeUFBUVhocUlRWWdCaW9DQUNFSklBSkJlR29oQnlBSEtnSUFJUW9nQ1NBS2t5RU1JQUJCZEdvaENDQUlLZ0lBSVEwZ0FrRjBhaUVFSUFRcUFnQWhDeUFOSUF1VElRc2dDU0FLa2lFSklBWWdDVGdDQUNBRUtnSUFJUWtnRFNBSmtpRUpJQWdnQ1RnQ0FDQURLZ0lBSVFrZ0RDQUpsQ0VKSUFOQkJHb2hCaUFHS2dJQUlRb2dDeUFLbENFS0lBa2dDcE1oQ1NBSElBazRBZ0FnQXlvQ0FDRUpJQXNnQ1pRaENTQUdLZ0lBSVFvZ0RDQUtsQ0VLSUFrZ0NwSWhDU0FFSUFrNEFnQWdBeUFGUVFKMGFpRURJQUJCY0dvaEJpQUdLZ0lBSVFrZ0FrRndhaUVISUFjcUFnQWhDaUFKSUFxVElRd2dBRUZzYWlFSUlBZ3FBZ0FoRFNBQ1FXeHFJUVFnQkNvQ0FDRUxJQTBnQzVNaEN5QUpJQXFTSVFrZ0JpQUpPQUlBSUFRcUFnQWhDU0FOSUFtU0lRa2dDQ0FKT0FJQUlBTXFBZ0FoQ1NBTUlBbVVJUWtnQTBFRWFpRUdJQVlxQWdBaENpQUxJQXFVSVFvZ0NTQUtreUVKSUFjZ0NUZ0NBQ0FES2dJQUlRa2dDeUFKbENFSklBWXFBZ0FoQ2lBTUlBcVVJUW9nQ1NBS2tpRUpJQVFnQ1RnQ0FDQURJQVZCQW5ScUlRTWdBRUZvYWlFR0lBWXFBZ0FoQ1NBQ1FXaHFJUWNnQnlvQ0FDRUtJQWtnQ3BNaERDQUFRV1JxSVFnZ0NDb0NBQ0VOSUFKQlpHb2hCQ0FFS2dJQUlRc2dEU0FMa3lFTElBa2dDcEloQ1NBR0lBazRBZ0FnQkNvQ0FDRUpJQTBnQ1pJaENTQUlJQWs0QWdBZ0F5b0NBQ0VKSUF3Z0NaUWhDU0FEUVFScUlRWWdCaW9DQUNFS0lBc2dDcFFoQ2lBSklBcVRJUWtnQnlBSk9BSUFJQU1xQWdBaENTQUxJQW1VSVFrZ0Jpb0NBQ0VLSUF3Z0NwUWhDaUFKSUFxU0lRa2dCQ0FKT0FJQUlBQkJZR29oQUNBQ1FXQnFJUUlnQXlBRlFRSjBhaUVFSUFGQmYyb2hBeUFCUVFGS0JFQWdBeUVCREFFTEN3c0w2UVlDQW44T2ZTQUVLZ0lBSVE4Z0JFRUVhaUVISUFjcUFnQWhFQ0FFSUFWQkFuUnFJUWNnQnlvQ0FDRVJJQVZCQVdvaEJ5QUVJQWRCQW5ScUlRY2dCeW9DQUNFU0lBVkJBWFFoQ0NBRUlBaEJBblJxSVFjZ0J5b0NBQ0VUSUFoQkFYSWhCeUFFSUFkQkFuUnFJUWNnQnlvQ0FDRVVJQVZCQTJ3aEJ5QUVJQWRCQW5ScUlRVWdCU29DQUNFVklBZEJBV29oQlNBRUlBVkJBblJxSVFRZ0JDb0NBQ0VXSUFFZ0FrRUNkR29oQVNBQVFRQktCRUJCQUNBR2F5RUdJQUVnQTBFQ2RHb2hBd05BSUFFcUFnQWhDeUFES2dJQUlRd2dDeUFNa3lFTklBRkJmR29oQWlBQ0tnSUFJUW9nQTBGOGFpRUVJQVFxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFFZ0NUZ0NBQ0FFS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBUElBMlVJUW9nRUNBT2xDRUpJQW9nQ1pNaENTQURJQWs0QWdBZ0R5QU9sQ0VLSUJBZ0RaUWhDU0FKSUFxU0lRa2dCQ0FKT0FJQUlBRkJlR29oQlNBRktnSUFJUXNnQTBGNGFpRUVJQVFxQWdBaERDQUxJQXlUSVEwZ0FVRjBhaUVDSUFJcUFnQWhDaUFEUVhScUlRY2dCeW9DQUNFSklBb2dDWk1oRGlBTElBeVNJUWtnQlNBSk9BSUFJQWNxQWdBaENTQUtJQW1TSVFrZ0FpQUpPQUlBSUJFZ0RaUWhDaUFTSUE2VUlRa2dDaUFKa3lFSklBUWdDVGdDQUNBUklBNlVJUW9nRWlBTmxDRUpJQWtnQ3BJaENTQUhJQWs0QWdBZ0FVRndhaUVGSUFVcUFnQWhDeUFEUVhCcUlRUWdCQ29DQUNFTUlBc2dESk1oRFNBQlFXeHFJUUlnQWlvQ0FDRUtJQU5CYkdvaEJ5QUhLZ0lBSVFrZ0NpQUpreUVPSUFzZ0RKSWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBb2dDWkloQ1NBQ0lBazRBZ0FnRXlBTmxDRUtJQlFnRHBRaENTQUtJQW1USVFrZ0JDQUpPQUlBSUJNZ0RwUWhDaUFVSUEyVUlRa2dDU0FLa2lFSklBY2dDVGdDQUNBQlFXaHFJUVVnQlNvQ0FDRUxJQU5CYUdvaEJDQUVLZ0lBSVF3Z0N5QU1reUVOSUFGQlpHb2hBaUFDS2dJQUlRb2dBMEZrYWlFSElBY3FBZ0FoQ1NBS0lBbVRJUTRnQ3lBTWtpRUpJQVVnQ1RnQ0FDQUhLZ0lBSVFrZ0NpQUpraUVKSUFJZ0NUZ0NBQ0FWSUEyVUlRb2dGaUFPbENFSklBb2dDWk1oQ1NBRUlBazRBZ0FnRlNBT2xDRUtJQllnRFpRaENTQUpJQXFTSVFrZ0J5QUpPQUlBSUFFZ0JrRUNkR29oQVNBRElBWkJBblJxSVFNZ0FFRi9haUVDSUFCQkFVb0VRQ0FDSVFBTUFRc0xDd3ZXQkFJQ2Z3ZDlJQVJCQTNVaEJDQURJQVJCQW5ScUlRTWdBeW9DQUNFTklBRWdBa0VDZEdvaEFTQUFRUVIwSVFCQkFDQUFheUVBSUFFZ0FFRUNkR29oQmlBQVFRQklCRUFnQVNFQUEwQWdBQ29DQUNFSElBQkJZR29oQVNBQktnSUFJUWdnQnlBSWt5RUxJQUJCZkdvaEFpQUNLZ0lBSVFrZ0FFRmNhaUVESUFNcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBQWdCemdDQUNBSklBcVNJUWNnQWlBSE9BSUFJQUVnQ3pnQ0FDQURJQXc0QWdBZ0FFRjRhaUVDSUFJcUFnQWhCeUFBUVZocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFYUnFJUVFnQkNvQ0FDRUtJQUJCVkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFDSUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQU1nQnpnQ0FDQU1JQW1USVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBUVZCcUlRSWdBaW9DQUNFSElBQkJjR29oQXlBREtnSUFJUWdnQnlBSWt5RUxJQUJCYkdvaEJDQUVLZ0lBSVFrZ0FFRk1haUVGSUFVcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBTWdCemdDQUNBSklBcVNJUWNnQkNBSE9BSUFJQUlnRERnQ0FDQUZJQXM0QWdBZ0FFRklhaUVDSUFJcUFnQWhCeUFBUVdocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFXUnFJUVFnQkNvQ0FDRUtJQUJCUkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFESUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQUlnQnpnQ0FDQUpJQXlUSVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBRUVjZ0FSQkhJQUJCUUdvaEFDQUFJQVpMRFFBTEN3dVhBZ0lFZndaOUlBQXFBZ0FoQlNBQVFYQnFJUUVnQVNvQ0FDRUlJQVVnQ0pNaEJpQUZJQWlTSVFVZ0FFRjRhaUVDSUFJcUFnQWhDQ0FBUVdocUlRTWdBeW9DQUNFSElBZ2dCNUloQ1NBSUlBZVRJUWdnQlNBSmtpRUhJQUFnQnpnQ0FDQUZJQW1USVFVZ0FpQUZPQUlBSUFCQmRHb2hBaUFDS2dJQUlRVWdBRUZrYWlFRUlBUXFBZ0FoQnlBRklBZVRJUWtnQmlBSmtpRUtJQUVnQ2pnQ0FDQUdJQW1USVFZZ0F5QUdPQUlBSUFCQmZHb2hBU0FCS2dJQUlRWWdBRUZzYWlFQUlBQXFBZ0FoQ1NBR0lBbVRJUW9nQmlBSmtpRUdJQVVnQjVJaEJTQUZJQWFTSVFjZ0FTQUhPQUlBSUFZZ0JaTWhCU0FDSUFVNEFnQWdDaUFJa3lFRklBQWdCVGdDQUNBSUlBcVNJUVVnQkNBRk9BSUFDMklCQW44Z0FVRUJkQ0VCSUFCQjVBQnFJUUlnQWlnQ0FDRUNJQUVnQWtZRVFDQUFRYmdJYWlFREJTQUFRZWdBYWlFQ0lBSW9BZ0FoQWlBQklBSkdCRUFnQUVHOENHb2hBd1ZCdnhaQnhCTkI2eGRCd1JZUUJBc0xJQU1vQWdBaEFDQUFDeFFBSUFCQmtoZEJCaEJrSVFBZ0FFVWhBQ0FBQzZvQkFRTi9JQUJCMkFwcUlRRWdBU2dDQUNFREFuOENRQ0FEUVg5SERRQWdBRUhUQ21vaEF3TkFBa0FnQUJBeElRSkJBQ0FDUlEwREdpQURMQUFBSVFJZ0FrRUJjU0VDSUFJTkFDQUJLQUlBSVFJZ0FrRi9SZzBCREFJTEN5QUFRU0FRRlVFQURBRUxJQUJCM0FwcUlRRWdBVUVBTmdJQUlBQkI2QXBxSVFFZ0FVRUFOZ0lBSUFCQjdBcHFJUUVnQVVFQU5nSUFJQUJCMUFwcUlRQWdBRUVBT2dBQVFRRUxJUUFnQUF0RkFRSi9JQUJCRkdvaEFpQUNLQUlBSVFNZ0F5QUJhaUVCSUFJZ0FUWUNBQ0FBUVJ4cUlRSWdBaWdDQUNFQ0lBRWdBazhFUUNBQVFkUUFhaUVBSUFCQkFUWUNBQXNMYWdFRWZ3TkFRUUFoQUNBQ1FSaDBJUUVEUUNBQlFRRjBJUU1nQVVFZmRTRUJJQUZCdDd1RUpuRWhBU0FCSUFOeklRRWdBRUVCYWlFQUlBQkJDRWNOQUFzZ0FrRUNkRUhRR1dvaEFDQUFJQUUyQWdBZ0FrRUJhaUVBSUFCQmdBSkhCRUFnQUNFQ0RBRUxDd3VUQVFFRGZ5QUJRUU5xSVFFZ0FVRjhjU0VCSUFCQkNHb2hBaUFDS0FJQUlRTWdBeUFCYWlFRElBSWdBellDQUNBQVFjUUFhaUVDSUFJb0FnQWhBaUFDQkVBZ0FFSE1BR29oQXlBREtBSUFJUVFnQkNBQmFpRUJJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBRWdBRW9FUUVFQUlRQUZJQUlnQkdvaEFDQURJQUUyQWdBTEJTQUJCSDhnQVJCZUJVRUFDeUVBQ3lBQUMwZ0JBWDhnQUVIRUFHb2hBeUFES0FJQUlRTWdBd1JBSUFKQkEyb2hBU0FCUVh4eElRRWdBRUhRQUdvaEFDQUFLQUlBSVFJZ0FpQUJhaUVCSUFBZ0FUWUNBQVVnQVJCZkN3dkdCUUVMZnlNR0lRMGpCa0dBQVdva0JpQU5JZ2RDQURjREFDQUhRZ0EzQXdnZ0IwSUFOd01RSUFkQ0FEY0RHQ0FIUWdBM0F5QWdCMElBTndNb0lBZENBRGNETUNBSFFnQTNBemdnQjBGQWEwSUFOd01BSUFkQ0FEY0RTQ0FIUWdBM0ExQWdCMElBTndOWUlBZENBRGNEWUNBSFFnQTNBMmdnQjBJQU53TndJQWRDQURjRGVBSkFJQUpCQUVvRVFBTkFJQUVnQm1vaEJDQUVMQUFBSVFRZ0JFRi9SdzBDSUFaQkFXb2hCaUFHSUFKSURRQUxDd3NDUUNBR0lBSkdCRUFnQUVHc0VHb2hBQ0FBS0FJQUlRQWdBQVJBUVpnWFFjUVRRWjBJUWE4WEVBUUZRUUVoQ3dzRklBRWdCbW9oQkNBRUxRQUFJUVVnQlVIL0FYRWhCU0FBUVFBZ0JrRUFJQVVnQXhCWElBUXNBQUFoQkNBRUJFQWdCRUgvQVhFaENrRUJJUVFEUUVFZ0lBUnJJUVZCQVNBRmRDRUZJQWNnQkVFQ2RHb2hDQ0FJSUFVMkFnQWdCRUVCYWlFRklBUWdDa2tFUUNBRklRUU1BUXNMQ3lBR1FRRnFJUW9nQ2lBQ1NBUkFRUUVoQlFKQUFrQUNRQUpBQTBBZ0FTQUthaUVKSUFrc0FBQWhCaUFHUVg5R0JFQWdCU0VHQlNBR1FmOEJjU0VJSUFaRkRRZ2dDQ0VFQTBBQ1FDQUhJQVJCQW5ScUlRWWdCaWdDQUNFTUlBd05BQ0FFUVg5cUlRWWdCRUVCVEEwS0lBWWhCQXdCQ3dzZ0JFRWdUdzBDSUFaQkFEWUNBQ0FNRURvaERpQUZRUUZxSVFZZ0FDQU9JQW9nQlNBSUlBTVFWeUFKTFFBQUlRZ2dDRUgvQVhFaEJTQUVJQVZIQkVBZ0NFSC9BWEZCSUU0TkJDQUVJQVZJQkVBRFFDQUhJQVZCQW5ScUlRZ2dDQ2dDQUNFSklBa05CMEVnSUFWcklRbEJBU0FKZENFSklBa2dER29oQ1NBSUlBazJBZ0FnQlVGL2FpRUZJQVVnQkVvTkFBc0xDd3NnQ2tFQmFpRUtJQW9nQWtnRVFDQUdJUVVNQVFWQkFTRUxEQWdMQUFBTEFBdEJ3UmRCeEJOQnRBaEJyeGNRQkF3Q0MwSFNGMEhFRTBHNUNFR3ZGeEFFREFFTFFlMFhRY1FUUWJzSVFhOFhFQVFMQlVFQklRc0xDd3NnRFNRR0lBc0x0UVlCRUg4Z0FFRVhhaUVLSUFvc0FBQWhCQ0FFQkVBZ0FFR3NFR29oQ0NBSUtBSUFJUU1nQTBFQVNnUkFJQUFvQWlBaEJpQUFRYVFRYWlnQ0FDRUZRUUFoQkFOQUlBWWdCRUVDZEdvaEF5QURLQUlBSVFNZ0F4QTZJUU1nQlNBRVFRSjBhaUVISUFjZ0F6WUNBQ0FFUVFGcUlRUWdDQ2dDQUNFRElBUWdBMGdOQUFzTEJTQUFRUVJxSVFjZ0J5Z0NBQ0VFSUFSQkFFb0VRQ0FBUVNCcUlRc2dBRUdrRUdvaERFRUFJUVFEUUNBQklBWnFJUVVnQlN3QUFDRUZJQUFnQlJCWUlRVWdCUVJBSUFzb0FnQWhCU0FGSUFaQkFuUnFJUVVnQlNnQ0FDRUZJQVVRT2lFTklBd29BZ0FoRGlBRVFRRnFJUVVnRGlBRVFRSjBhaUVFSUFRZ0RUWUNBQ0FGSVFRTElBWkJBV29oQmlBSEtBSUFJUVVnQmlBRlNBMEFDd1ZCQUNFRUN5QUFRYXdRYWlFR0lBWW9BZ0FoQlNBRUlBVkdCRUFnQmlFSUlBUWhBd1ZCL3hkQnhCTkIvZ2hCbGhnUUJBc0xJQUJCcEJCcUlRVWdCU2dDQUNFRUlBUWdBMEVFUVFJUVppQUZLQUlBSVFRZ0NDZ0NBQ0VESUFRZ0EwRUNkR29oQkNBRVFYODJBZ0FnQ2l3QUFDRURJQU5GSVFRZ0FFRUVhaUVHSUFZZ0NDQUVHeUVFSUFRb0FnQWhDd0pBSUF0QkFFb0VRQ0FBUVNCcUlSRWdBRUdvRUdvaERDQUFRUWhxSVJKQkFDRUVBMEFDUUNBRFFmOEJjUVIvSUFJZ0JFRUNkR29oQXlBREtBSUFCU0FFQ3lFRElBRWdBMm9zQUFBaERTQUFJQTBRV0NFRElBTUVRQ0FSS0FJQUlRTWdBeUFFUVFKMGFpRURJQU1vQWdBaEF5QURFRG9oRGlBSUtBSUFJUU1nQlNnQ0FDRVBJQU5CQVVvRVFFRUFJUVlEUUNBRFFRRjJJUWNnQnlBR2FpRVFJQThnRUVFQ2RHb2hDU0FKS0FJQUlRa2dDU0FPU3lFSklBTWdCMnNoQXlBR0lCQWdDUnNoQmlBSElBTWdDUnNoQXlBRFFRRktEUUFMQlVFQUlRWUxJQThnQmtFQ2RHb2hBeUFES0FJQUlRTWdBeUFPUncwQklBb3NBQUFoQXlBREJFQWdBaUFFUVFKMGFpRURJQU1vQWdBaEF5QU1LQUlBSVFjZ0J5QUdRUUowYWlFSElBY2dBellDQUNBU0tBSUFJUU1nQXlBR2FpRURJQU1nRFRvQUFBVWdEQ2dDQUNFRElBTWdCa0VDZEdvaEF5QURJQVEyQWdBTEN5QUVRUUZxSVFRZ0JDQUxUZzBESUFvc0FBQWhBd3dCQ3d0QnJSaEJ4Qk5CbkFsQmxoZ1FCQXNMQzdjQ0FRcC9JQUJCSkdvaEFTQUJRWDlCZ0JBUWVob2dBRUVYYWlFQklBRXNBQUFoQVNBQlJTRUVJQUJCckJCcUlRRWdBRUVFYWlFQ0lBSWdBU0FFR3lFQklBRW9BZ0FoQVNBQlFmLy9BVWdoQWlBQlFmLy9BU0FDR3lFR0lBRkJBRW9FUUNBQVFRaHFJUUVnQUVFZ2FpRUhJQUJCcEJCcUlRZ2dBU2dDQUNFSlFRQWhBZ05BSUFrZ0Ftb2hCU0FGTFFBQUlRRWdBVUgvQVhGQkMwZ0VRQ0FFQkg4Z0J5Z0NBQ0VCSUFFZ0FrRUNkR29oQVNBQktBSUFCU0FJS0FJQUlRRWdBU0FDUVFKMGFpRUJJQUVvQWdBaEFTQUJFRG9MSVFFZ0FVR0FDRWtFUUNBQ1FmLy9BM0VoQ2dOQUlBQkJKR29nQVVFQmRHb2hBeUFESUFvN0FRQWdCUzBBQUNFRElBTkIvd0Z4SVFOQkFTQURkQ0VESUFNZ0FXb2hBU0FCUVlBSVNRMEFDd3NMSUFKQkFXb2hBaUFDSUFaSURRQUxDd3RjQXdKL0FYMENmQ0FBUWYvLy93QnhJUUlnQUVFVmRpRUJJQUZCL3dkeElRRWdBRUVBU0NFQUlBSzRJUVFnQkpvaEJTQUZJQVFnQUJzaEJDQUV0aUVESUFPN0lRUWdBVUhzZVdvaEFDQUVJQUFRY1NFRUlBUzJJUU1nQXd2aUFRTUJmd0o5QTN3Z0FMSWhBeUFEdXlFRklBVVFkaUVGSUFXMklRTWdBYkloQkNBRElBU1ZJUU1nQTdzaEJTQUZFSFVoQlNBRm5DRUZJQVdxSVFJZ0FySWhBeUFEUXdBQWdEK1NJUU1nQTdzaEJpQUJ0eUVGSUFZZ0JSQjNJUVlnQnB3aEJpQUdxaUVCSUFFZ0FFd2hBU0FCSUFKcUlRRWdBYkloQXlBRFF3QUFnRCtTSVFRZ0JMc2hCaUFHSUFVUWR5RUdJQUMzSVFjZ0JpQUhaRVVFUUVIckdFSEVFMEcxQ1VHTEdSQUVDeUFEdXlFR0lBWWdCUkIzSVFVZ0Jad2hCU0FGcWlFQ0lBSWdBRW9FUUVHYUdVSEVFMEcyQ1VHTEdSQUVCU0FCRHd0QkFBcy9BUUYvSUFBdkFRQWhBQ0FCTHdFQUlRRWdBRUgvL3dOeElBRkIvLzhEY1VnaEFpQUFRZi8vQTNFZ0FVSC8vd054U2lFQVFYOGdBQ0FDR3lFQUlBQUxpZ0VCQjM4Z0FVRUFTZ1JBSUFBZ0FVRUJkR29oQ0VHQWdBUWhDVUYvSVFvRFFDQUFJQVJCQVhScUlRVWdCUzhCQUNFR0lBWWhCU0FLSUFWSUJFQWdDQzhCQUNFSElBWWdCMGdFUUNBQ0lBUTJBZ0FnQlNFS0N3c2dDU0FGU2dSQUlBZ3ZBUUFoQnlBR0lBZEtCRUFnQXlBRU5nSUFJQVVoQ1FzTElBUkJBV29oQkNBRUlBRkhEUUFMQ3d1bUFnRUhmeUFDUVFGMklRTWdBa0Y4Y1NFRUlBSkJBM1VoQ0NBRFFRSjBJUU1nQUNBREVFMGhCU0FBUWFBSWFpQUJRUUowYWlFR0lBWWdCVFlDQUNBQUlBTVFUU0VISUFCQnFBaHFJQUZCQW5ScUlRVWdCU0FITmdJQUlBQWdCQkJOSVFRZ0FFR3dDR29nQVVFQ2RHb2hCeUFISUFRMkFnQWdCaWdDQUNFR0FuOENRQ0FHUlEwQUlBVW9BZ0FoQlNBRlJTRUhJQVJGSVFrZ0NTQUhjZzBBSUFJZ0JpQUZJQVFRV2lBQUlBTVFUU0VESUFCQnVBaHFJQUZCQW5ScUlRUWdCQ0FETmdJQUlBTkZCRUFnQUVFREVCVkJBQXdDQ3lBQ0lBTVFXeUFJUVFGMElRTWdBQ0FERUUwaEF5QUFRY0FJYWlBQlFRSjBhaUVCSUFFZ0F6WUNBQ0FEQkg4Z0FpQURFRnhCQVFVZ0FFRURFQlZCQUFzTUFRc2dBRUVERUJWQkFBc2hBQ0FBQzI4QkFuOGdBRUVYYWlFR0lBWXNBQUFoQnlBQUtBSWdJUVlnQndSL0lBWWdBMEVDZEdvaEJpQUdJQUUyQWdBZ0JFSC9BWEVoQVNBQVFRaHFJUUFnQUNnQ0FDRUFJQUFnQTJvaEFDQUFJQUU2QUFBZ0FpRUJJQVVnQTBFQ2RHb0ZJQVlnQWtFQ2RHb0xJZ0FnQVRZQ0FBdFpBUUYvSUFCQkYyb2hBQ0FBTEFBQUlRSWdBVUgvQVhGQi93RkdJUUFnQWtVRVFDQUJRZjhCY1VFS1NpRUJJQUFnQVhNaEFDQUFRUUZ4SVFBZ0FBOExJQUFFUUVITUdFSEVFMEhxQ0VIYkdCQUVCVUVCRHd0QkFBc3JBUUYvSUFBb0FnQWhBQ0FCS0FJQUlRRWdBQ0FCU1NFQ0lBQWdBVXNoQUVGL0lBQWdBaHNoQUNBQUM2WURBd1ovQVgwRGZDQUFRUUoxSVFnZ0FFRURkU0VKSUFCQkEwb0VRQ0FBdHlFTkEwQWdCa0VDZENFRUlBUzNJUXNnQzBRWUxVUlUreUVKUUtJaEN5QUxJQTJqSVF3Z0RCQnpJUXNnQzdZaENpQUJJQVZCQW5ScUlRUWdCQ0FLT0FJQUlBd1FkQ0VMSUF1MklRb2dDb3doQ2lBRlFRRnlJUWNnQVNBSFFRSjBhaUVFSUFRZ0NqZ0NBQ0FIdHlFTElBdEVHQzFFVlBzaENVQ2lJUXNnQ3lBTm95RUxJQXRFQUFBQUFBQUE0RCtpSVF3Z0RCQnpJUXNnQzdZaENpQUtRd0FBQUQrVUlRb2dBaUFGUVFKMGFpRUVJQVFnQ2pnQ0FDQU1FSFFoQ3lBTHRpRUtJQXBEQUFBQVA1UWhDaUFDSUFkQkFuUnFJUVFnQkNBS09BSUFJQVpCQVdvaEJpQUZRUUpxSVFVZ0JpQUlTQTBBQ3lBQVFRZEtCRUFnQUxjaERFRUFJUUZCQUNFQUEwQWdBRUVCY2lFRklBVkJBWFFoQWlBQ3R5RUxJQXRFR0MxRVZQc2hDVUNpSVFzZ0N5QU1veUVOSUEwUWN5RUxJQXUySVFvZ0F5QUFRUUowYWlFQ0lBSWdDamdDQUNBTkVIUWhDeUFMdGlFS0lBcU1JUW9nQXlBRlFRSjBhaUVDSUFJZ0NqZ0NBQ0FCUVFGcUlRRWdBRUVDYWlFQUlBRWdDVWdOQUFzTEN3dW5BUU1DZndGOUFud2dBRUVCZFNFQ0lBQkJBVW9FUUNBQ3R5RUdRUUFoQUFOQUlBQzNJUVVnQlVRQUFBQUFBQURnUDZBaEJTQUZJQWFqSVFVZ0JVUUFBQUFBQUFEZ1A2SWhCU0FGUkJndFJGVDdJUWxBb2lFRklBVVFkQ0VGSUFXMklRUWdCQkJkSVFRZ0JMc2hCU0FGUkJndFJGVDdJZmsvb2lFRklBVVFkQ0VGSUFXMklRUWdBU0FBUVFKMGFpRURJQU1nQkRnQ0FDQUFRUUZxSVFBZ0FDQUNTQTBBQ3dzTFh3RUVmeUFBUVFOMUlRTWdBRUVIU2dSQVFTUWdBQkF0YXlFRVFRQWhBQU5BSUFBUU9pRUNJQUlnQkhZaEFpQUNRUUowSVFJZ0FrSC8vd054SVFJZ0FTQUFRUUYwYWlFRklBVWdBanNCQUNBQVFRRnFJUUFnQUNBRFNBMEFDd3NMRFFFQmZTQUFJQUNVSVFFZ0FRdnlPZ0VYZndKQUFrQWpCaUVPSXdaQkVHb2tCaUFPSVJjQ2Z5QUFRZlVCU1FSL1FkQWhLQUlBSWdkQkVDQUFRUXRxUVhoeElBQkJDMGtiSWdKQkEzWWlBSFlpQTBFRGNRUkFJQU5CQVhGQkFYTWdBR29pQVVFRGRFSDRJV29pQWtFSWFpSUVLQUlBSWdCQkNHb2lCaWdDQUNJRElBSkdCRUJCMENFZ0IwRUJJQUYwUVg5emNUWUNBQVZCNENFb0FnQWdBMHNFUUJBR0N5QURRUXhxSWdVb0FnQWdBRVlFUUNBRklBSTJBZ0FnQkNBRE5nSUFCUkFHQ3dzZ0FDQUJRUU4wSWdOQkEzSTJBZ1FnQUNBRGFrRUVhaUlBSUFBb0FnQkJBWEkyQWdBZ0RpUUdJQVlQQ3lBQ1FkZ2hLQUlBSWcxTEJIOGdBd1JBSUFNZ0FIUkJBaUFBZENJQVFRQWdBR3R5Y1NJQVFRQWdBR3R4UVg5cUlnTkJESFpCRUhFaEFDQURJQUIySWdOQkJYWkJDSEVpQVNBQWNpQURJQUYySWdCQkFuWkJCSEVpQTNJZ0FDQURkaUlBUVFGMlFRSnhJZ055SUFBZ0EzWWlBRUVCZGtFQmNTSURjaUFBSUFOMmFpSUJRUU4wUWZnaGFpSUZRUWhxSWdrb0FnQWlBRUVJYWlJS0tBSUFJZ01nQlVZRVFFSFFJU0FIUVFFZ0FYUkJmM054SWdRMkFnQUZRZUFoS0FJQUlBTkxCRUFRQmdzZ0EwRU1haUlMS0FJQUlBQkdCRUFnQ3lBRk5nSUFJQWtnQXpZQ0FDQUhJUVFGRUFZTEN5QUFJQUpCQTNJMkFnUWdBQ0FDYWlJSElBRkJBM1FpQXlBQ2F5SUZRUUZ5TmdJRUlBQWdBMm9nQlRZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQWdCRUVCSUFOMElnTnhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VHSUFNaERBc0ZRZEFoSUFRZ0EzSTJBZ0FnQUNFR0lBQkJDR29oREFzZ0RDQUNOZ0lBSUFZZ0FqWUNEQ0FDSUFZMkFnZ2dBaUFBTmdJTUMwSFlJU0FGTmdJQVFlUWhJQWMyQWdBZ0RpUUdJQW9QQzBIVUlTZ0NBQ0lNQkg4Z0RFRUFJQXhyY1VGL2FpSURRUXgyUVJCeElRQWdBeUFBZGlJRFFRVjJRUWh4SWdRZ0FISWdBeUFFZGlJQVFRSjJRUVJ4SWdOeUlBQWdBM1lpQUVFQmRrRUNjU0lEY2lBQUlBTjJJZ0JCQVhaQkFYRWlBM0lnQUNBRGRtcEJBblJCZ0NScUtBSUFJZ1FoQXlBRUtBSUVRWGh4SUFKcklRb0RRQUpBSUFNb0FoQWlBRVVFUUNBREtBSVVJZ0JGRFFFTElBQWhBeUFBSUFRZ0FDZ0NCRUY0Y1NBQ2F5SUFJQXBKSWdZYklRUWdBQ0FLSUFZYklRb01BUXNMUWVBaEtBSUFJZzhnQkVzRVFCQUdDeUFFSUFKcUlnZ2dCRTBFUUJBR0N5QUVLQUlZSVFzQ1FDQUVLQUlNSWdBZ0JFWUVRQ0FFUVJScUlnTW9BZ0FpQUVVRVFDQUVRUkJxSWdNb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUJpZ0NBQ0lKUlFSQUlBQkJFR29pQmlnQ0FDSUpSUTBCQ3lBR0lRTWdDU0VBREFFTEN5QVBJQU5MQkVBUUJnVWdBMEVBTmdJQUlBQWhBUXNGSUE4Z0JDZ0NDQ0lEU3dSQUVBWUxJQU5CREdvaUJpZ0NBQ0FFUndSQUVBWUxJQUJCQ0dvaUNTZ0NBQ0FFUmdSQUlBWWdBRFlDQUNBSklBTTJBZ0FnQUNFQkJSQUdDd3NMQWtBZ0N3UkFJQVFnQkNnQ0hDSUFRUUowUVlBa2FpSURLQUlBUmdSQUlBTWdBVFlDQUNBQlJRUkFRZFFoSUF4QkFTQUFkRUYvYzNFMkFnQU1Bd3NGUWVBaEtBSUFJQXRMQkVBUUJnVWdDMEVRYWlJQUlBdEJGR29nQUNnQ0FDQUVSaHNnQVRZQ0FDQUJSUTBEQ3d0QjRDRW9BZ0FpQXlBQlN3UkFFQVlMSUFFZ0N6WUNHQ0FFS0FJUUlnQUVRQ0FESUFCTEJFQVFCZ1VnQVNBQU5nSVFJQUFnQVRZQ0dBc0xJQVFvQWhRaUFBUkFRZUFoS0FJQUlBQkxCRUFRQmdVZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNMQ3dzZ0NrRVFTUVJBSUFRZ0NpQUNhaUlBUVFOeU5nSUVJQVFnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRUlBSkJBM0kyQWdRZ0NDQUtRUUZ5TmdJRUlBZ2dDbW9nQ2pZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQkJBU0FEZENJRElBZHhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VGSUFNaEVBc0ZRZEFoSUFNZ0IzSTJBZ0FnQUNFRklBQkJDR29oRUFzZ0VDQUNOZ0lBSUFVZ0FqWUNEQ0FDSUFVMkFnZ2dBaUFBTmdJTUMwSFlJU0FLTmdJQVFlUWhJQWcyQWdBTElBNGtCaUFFUVFocUR3VWdBZ3NGSUFJTEJTQUFRYjkvU3dSL1FYOEZJQUJCQzJvaUFFRjRjU0VFUWRRaEtBSUFJZ1lFZnlBQVFRaDJJZ0FFZnlBRVFmLy8vd2RMQkg5Qkh3VWdCRUVPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUNJQUJ5SUFFZ0FuUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJUkpCQUNBRWF5RUNBa0FDUUNBU1FRSjBRWUFrYWlnQ0FDSUFCRUJCQUNFQklBUkJBRUVaSUJKQkFYWnJJQkpCSDBZYmRDRU1BMEFnQUNnQ0JFRjRjU0FFYXlJUUlBSkpCRUFnRUFSL0lCQWhBaUFBQlNBQUlRRkJBQ0VDREFRTElRRUxJQVVnQUNnQ0ZDSUZJQVZGSUFVZ0FFRVFhaUFNUVI5MlFRSjBhaWdDQUNJQVJuSWJJUVVnREVFQmRDRU1JQUFOQUFzZ0FTRUFCVUVBSVFBTElBVWdBSEpGQkVBZ0JFRUNJQkowSWdCQkFDQUFhM0lnQm5FaUFFVU5CaG9nQUVFQUlBQnJjVUYvYWlJRlFReDJRUkJ4SVFGQkFDRUFJQVVnQVhZaUJVRUZka0VJY1NJTUlBRnlJQVVnREhZaUFVRUNka0VFY1NJRmNpQUJJQVYySWdGQkFYWkJBbkVpQlhJZ0FTQUZkaUlCUVFGMlFRRnhJZ1Z5SUFFZ0JYWnFRUUowUVlBa2FpZ0NBQ0VGQ3lBRkJIOGdBQ0VCSUFVaEFBd0JCU0FBQ3lFRkRBRUxJQUVoQlNBQ0lRRURRQ0FBS0FJRUlRd2dBQ2dDRUNJQ1JRUkFJQUFvQWhRaEFnc2dERUY0Y1NBRWF5SVFJQUZKSVF3Z0VDQUJJQXdiSVFFZ0FDQUZJQXdiSVFVZ0FnUi9JQUloQUF3QkJTQUJDeUVDQ3dzZ0JRUi9JQUpCMkNFb0FnQWdCR3RKQkg5QjRDRW9BZ0FpRVNBRlN3UkFFQVlMSUFVZ0JHb2lDQ0FGVFFSQUVBWUxJQVVvQWhnaER3SkFJQVVvQWd3aUFDQUZSZ1JBSUFWQkZHb2lBU2dDQUNJQVJRUkFJQVZCRUdvaUFTZ0NBQ0lBUlEwQ0N3TkFBa0FnQUVFVWFpSUpLQUlBSWd0RkJFQWdBRUVRYWlJSktBSUFJZ3RGRFFFTElBa2hBU0FMSVFBTUFRc0xJQkVnQVVzRVFCQUdCU0FCUVFBMkFnQWdBQ0VIQ3dVZ0VTQUZLQUlJSWdGTEJFQVFCZ3NnQVVFTWFpSUpLQUlBSUFWSEJFQVFCZ3NnQUVFSWFpSUxLQUlBSUFWR0JFQWdDU0FBTmdJQUlBc2dBVFlDQUNBQUlRY0ZFQVlMQ3dzQ1FDQVBCRUFnQlNBRktBSWNJZ0JCQW5SQmdDUnFJZ0VvQWdCR0JFQWdBU0FITmdJQUlBZEZCRUJCMUNFZ0JrRUJJQUIwUVg5emNTSUROZ0lBREFNTEJVSGdJU2dDQUNBUFN3UkFFQVlGSUE5QkVHb2lBQ0FQUVJScUlBQW9BZ0FnQlVZYklBYzJBZ0FnQjBVRVFDQUdJUU1NQkFzTEMwSGdJU2dDQUNJQklBZExCRUFRQmdzZ0J5QVBOZ0lZSUFVb0FoQWlBQVJBSUFFZ0FFc0VRQkFHQlNBSElBQTJBaEFnQUNBSE5nSVlDd3NnQlNnQ0ZDSUFCRUJCNENFb0FnQWdBRXNFUUJBR0JTQUhJQUEyQWhRZ0FDQUhOZ0lZSUFZaEF3c0ZJQVloQXdzRklBWWhBd3NMQWtBZ0FrRVFTUVJBSUFVZ0FpQUVhaUlBUVFOeU5nSUVJQVVnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRklBUkJBM0kyQWdRZ0NDQUNRUUZ5TmdJRUlBZ2dBbW9nQWpZQ0FDQUNRUU4ySVFFZ0FrR0FBa2tFUUNBQlFRTjBRZmdoYWlFQVFkQWhLQUlBSWdOQkFTQUJkQ0lCY1FSQVFlQWhLQUlBSUFCQkNHb2lBeWdDQUNJQlN3UkFFQVlGSUFFaERTQURJUk1MQlVIUUlTQURJQUZ5TmdJQUlBQWhEU0FBUVFocUlSTUxJQk1nQ0RZQ0FDQU5JQWcyQWd3Z0NDQU5OZ0lJSUFnZ0FEWUNEQXdDQ3lBQ1FRaDJJZ0FFZnlBQ1FmLy8vd2RMQkg5Qkh3VWdBa0VPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUVJQUJ5SUFFZ0JIUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJZ0ZCQW5SQmdDUnFJUUFnQ0NBQk5nSWNJQWhCRUdvaUJFRUFOZ0lFSUFSQkFEWUNBQ0FEUVFFZ0FYUWlCSEZGQkVCQjFDRWdBeUFFY2pZQ0FDQUFJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01BZ3NDUUNBQUtBSUFJZ0FvQWdSQmVIRWdBa1lFUUNBQUlRb0ZJQUpCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VCQTBBZ0FFRVFhaUFCUVI5MlFRSjBhaUlFS0FJQUlnTUVRQ0FCUVFGMElRRWdBeWdDQkVGNGNTQUNSZ1JBSUFNaENnd0VCU0FESVFBTUFnc0FDd3RCNENFb0FnQWdCRXNFUUJBR0JTQUVJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lESUFwQkNHb2lBU2dDQUNJQVRTQURJQXBOY1FSQUlBQWdDRFlDRENBQklBZzJBZ0FnQ0NBQU5nSUlJQWdnQ2pZQ0RDQUlRUUEyQWhnRkVBWUxDd3NnRGlRR0lBVkJDR29QQlNBRUN3VWdCQXNGSUFRTEN3c0xJUU5CMkNFb0FnQWlBU0FEVHdSQVFlUWhLQUlBSVFBZ0FTQURheUlDUVE5TEJFQkI1Q0VnQUNBRGFpSUVOZ0lBUWRnaElBSTJBZ0FnQkNBQ1FRRnlOZ0lFSUFBZ0FXb2dBallDQUNBQUlBTkJBM0kyQWdRRlFkZ2hRUUEyQWdCQjVDRkJBRFlDQUNBQUlBRkJBM0kyQWdRZ0FDQUJha0VFYWlJRElBTW9BZ0JCQVhJMkFnQUxEQUlMUWR3aEtBSUFJZ0VnQTBzRVFFSGNJU0FCSUFOcklnRTJBZ0FNQVF0QnFDVW9BZ0FFZjBHd0pTZ0NBQVZCc0NWQmdDQTJBZ0JCckNWQmdDQTJBZ0JCdENWQmZ6WUNBRUc0SlVGL05nSUFRYndsUVFBMkFnQkJqQ1ZCQURZQ0FFR29KU0FYUVhCeFFkaXExYW9GY3pZQ0FFR0FJQXNpQUNBRFFTOXFJZ1pxSWdWQkFDQUFheUlIY1NJRUlBTk5CRUFnRGlRR1FRQVBDMEdJSlNnQ0FDSUFCRUJCZ0NVb0FnQWlBaUFFYWlJS0lBSk5JQW9nQUV0eUJFQWdEaVFHUVFBUEN3c2dBMEV3YWlFS0FrQUNRRUdNSlNnQ0FFRUVjUVJBUVFBaEFRVUNRQUpBQWtCQjZDRW9BZ0FpQUVVTkFFR1FKU0VDQTBBQ1FDQUNLQUlBSWcwZ0FFMEVRQ0FOSUFJb0FnUnFJQUJMRFFFTElBSW9BZ2dpQWcwQkRBSUxDeUFGSUFGcklBZHhJZ0ZCLy8vLy93ZEpCRUFnQVJCN0lnQWdBaWdDQUNBQ0tBSUVha1lFUUNBQVFYOUhEUVlGREFNTEJVRUFJUUVMREFJTFFRQVFleUlBUVg5R0JIOUJBQVZCckNVb0FnQWlBVUYvYWlJQ0lBQnFRUUFnQVd0eElBQnJRUUFnQWlBQWNSc2dCR29pQVVHQUpTZ0NBQ0lGYWlFQ0lBRWdBMHNnQVVILy8vLy9CMGx4Qkg5QmlDVW9BZ0FpQndSQUlBSWdCVTBnQWlBSFMzSUVRRUVBSVFFTUJRc0xJQUVRZXlJQ0lBQkdEUVVnQWlFQURBSUZRUUFMQ3lFQkRBRUxJQW9nQVVzZ0FVSC8vLy8vQjBrZ0FFRi9SM0Z4UlFSQUlBQkJmMFlFUUVFQUlRRU1BZ1VNQkFzQUN5QUdJQUZyUWJBbEtBSUFJZ0pxUVFBZ0FtdHhJZ0pCLy8vLy93ZFBEUUpCQUNBQmF5RUdJQUlRZTBGL1JnUi9JQVlRZXhwQkFBVWdBaUFCYWlFQkRBTUxJUUVMUVl3bFFZd2xLQUlBUVFSeU5nSUFDeUFFUWYvLy8vOEhTUVJBSUFRUWV5RUFRUUFRZXlJQ0lBQnJJZ1lnQTBFb2Frc2hCQ0FHSUFFZ0JCc2hBU0FBUVg5R0lBUkJBWE55SUFBZ0Fra2dBRUYvUnlBQ1FYOUhjWEZCQVhOeVJRMEJDd3dCQzBHQUpVR0FKU2dDQUNBQmFpSUNOZ0lBSUFKQmhDVW9BZ0JMQkVCQmhDVWdBallDQUFzQ1FFSG9JU2dDQUNJR0JFQkJrQ1VoQWdKQUFrQURRQ0FBSUFJb0FnQWlCQ0FDS0FJRUlnVnFSZzBCSUFJb0FnZ2lBZzBBQ3d3QkN5QUNRUVJxSVFjZ0FpZ0NERUVJY1VVRVFDQUFJQVpMSUFRZ0JrMXhCRUFnQnlBRklBRnFOZ0lBSUFaQkFDQUdRUWhxSWdCclFRZHhRUUFnQUVFSGNSc2lBbW9oQUVIY0lTZ0NBQ0FCYWlJRUlBSnJJUUZCNkNFZ0FEWUNBRUhjSVNBQk5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFScVFTZzJBZ1JCN0NGQnVDVW9BZ0EyQWdBTUJBc0xDeUFBUWVBaEtBSUFJZ0pKQkVCQjRDRWdBRFlDQUNBQUlRSUxJQUFnQVdvaEJVR1FKU0VFQWtBQ1FBTkFJQVFvQWdBZ0JVWU5BU0FFS0FJSUlnUU5BQXNNQVFzZ0JDZ0NERUVJY1VVRVFDQUVJQUEyQWdBZ0JFRUVhaUlFSUFRb0FnQWdBV28yQWdBZ0FFRUFJQUJCQ0dvaUFHdEJCM0ZCQUNBQVFRZHhHMm9pQ0NBRGFpRUhJQVZCQUNBRlFRaHFJZ0JyUVFkeFFRQWdBRUVIY1J0cUlnRWdDR3NnQTJzaEJDQUlJQU5CQTNJMkFnUUNRQ0FHSUFGR0JFQkIzQ0ZCM0NFb0FnQWdCR29pQURZQ0FFSG9JU0FITmdJQUlBY2dBRUVCY2pZQ0JBVkI1Q0VvQWdBZ0FVWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFjMkFnQWdCeUFBUVFGeU5nSUVJQWNnQUdvZ0FEWUNBQXdDQ3lBQktBSUVJZ0JCQTNGQkFVWUVmeUFBUVhoeElRMGdBRUVEZGlFRkFrQWdBRUdBQWtrRVFDQUJLQUlNSVFNQ1FDQUJLQUlJSWdZZ0JVRURkRUg0SVdvaUFFY0VRQ0FDSUFaTEJFQVFCZ3NnQmlnQ0RDQUJSZzBCRUFZTEN5QURJQVpHQkVCQjBDRkIwQ0VvQWdCQkFTQUZkRUYvYzNFMkFnQU1BZ3NDUUNBRElBQkdCRUFnQTBFSWFpRVVCU0FDSUFOTEJFQVFCZ3NnQTBFSWFpSUFLQUlBSUFGR0JFQWdBQ0VVREFJTEVBWUxDeUFHSUFNMkFnd2dGQ0FHTmdJQUJTQUJLQUlZSVFvQ1FDQUJLQUlNSWdBZ0FVWUVRQ0FCUVJCcUlnTkJCR29pQmlnQ0FDSUFCRUFnQmlFREJTQURLQUlBSWdCRkRRSUxBMEFDUUNBQVFSUnFJZ1lvQWdBaUJVVUVRQ0FBUVJCcUlnWW9BZ0FpQlVVTkFRc2dCaUVESUFVaEFBd0JDd3NnQWlBRFN3UkFFQVlGSUFOQkFEWUNBQ0FBSVFrTEJTQUNJQUVvQWdnaUEwc0VRQkFHQ3lBRFFReHFJZ0lvQWdBZ0FVY0VRQkFHQ3lBQVFRaHFJZ1lvQWdBZ0FVWUVRQ0FDSUFBMkFnQWdCaUFETmdJQUlBQWhDUVVRQmdzTEN5QUtSUTBCQWtBZ0FTZ0NIQ0lBUVFKMFFZQWthaUlES0FJQUlBRkdCRUFnQXlBSk5nSUFJQWtOQVVIVUlVSFVJU2dDQUVFQklBQjBRWDl6Y1RZQ0FBd0RCVUhnSVNnQ0FDQUtTd1JBRUFZRklBcEJFR29pQUNBS1FSUnFJQUFvQWdBZ0FVWWJJQWsyQWdBZ0NVVU5CQXNMQzBIZ0lTZ0NBQ0lESUFsTEJFQVFCZ3NnQ1NBS05nSVlJQUZCRUdvaUFpZ0NBQ0lBQkVBZ0F5QUFTd1JBRUFZRklBa2dBRFlDRUNBQUlBazJBaGdMQ3lBQ0tBSUVJZ0JGRFFGQjRDRW9BZ0FnQUVzRVFCQUdCU0FKSUFBMkFoUWdBQ0FKTmdJWUN3c0xJQUVnRFdvaEFTQU5JQVJxQlNBRUN5RUNJQUZCQkdvaUFDQUFLQUlBUVg1eE5nSUFJQWNnQWtFQmNqWUNCQ0FISUFKcUlBSTJBZ0FnQWtFRGRpRURJQUpCZ0FKSkJFQWdBMEVEZEVINElXb2hBQUpBUWRBaEtBSUFJZ0ZCQVNBRGRDSURjUVJBUWVBaEtBSUFJQUJCQ0dvaUF5Z0NBQ0lCVFFSQUlBRWhEeUFESVJVTUFnc1FCZ1ZCMENFZ0FTQURjallDQUNBQUlROGdBRUVJYWlFVkN3c2dGU0FITmdJQUlBOGdCellDRENBSElBODJBZ2dnQnlBQU5nSU1EQUlMQW44Z0FrRUlkaUlBQkg5Qkh5QUNRZi8vL3dkTERRRWFJQUpCRGlBQUlBQkJnUDQvYWtFUWRrRUljU0lBZENJRFFZRGdIMnBCRUhaQkJIRWlBU0FBY2lBRElBRjBJZ0JCZ0lBUGFrRVFka0VDY1NJRGNtc2dBQ0FEZEVFUGRtb2lBRUVIYW5aQkFYRWdBRUVCZEhJRlFRQUxDeUlEUVFKMFFZQWthaUVBSUFjZ0F6WUNIQ0FIUVJCcUlnRkJBRFlDQkNBQlFRQTJBZ0JCMUNFb0FnQWlBVUVCSUFOMElnUnhSUVJBUWRRaElBRWdCSEkyQWdBZ0FDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBSUxBa0FnQUNnQ0FDSUFLQUlFUVhoeElBSkdCRUFnQUNFTEJTQUNRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBUU5BSUFCQkVHb2dBVUVmZGtFQ2RHb2lCQ2dDQUNJREJFQWdBVUVCZENFQklBTW9BZ1JCZUhFZ0FrWUVRQ0FESVFzTUJBVWdBeUVBREFJTEFBc0xRZUFoS0FJQUlBUkxCRUFRQmdVZ0JDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBUUxDd3RCNENFb0FnQWlBeUFMUVFocUlnRW9BZ0FpQUUwZ0F5QUxUWEVFUUNBQUlBYzJBZ3dnQVNBSE5nSUFJQWNnQURZQ0NDQUhJQXMyQWd3Z0IwRUFOZ0lZQlJBR0N3c0xJQTRrQmlBSVFRaHFEd3NMUVpBbElRSURRQUpBSUFJb0FnQWlCQ0FHVFFSQUlBUWdBaWdDQkdvaUJTQUdTdzBCQ3lBQ0tBSUlJUUlNQVFzTElBVkJVV29pQkVFSWFpRUNJQVlnQkVFQUlBSnJRUWR4UVFBZ0FrRUhjUnRxSWdJZ0FpQUdRUkJxSWdsSkd5SUNRUWhxSVFSQjZDRWdBRUVBSUFCQkNHb2lCMnRCQjNGQkFDQUhRUWR4R3lJSGFpSUtOZ0lBUWR3aElBRkJXR29pQ3lBSGF5SUhOZ0lBSUFvZ0IwRUJjallDQkNBQUlBdHFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQWdBa0VFYWlJSFFSczJBZ0FnQkVHUUpTa0NBRGNDQUNBRVFaZ2xLUUlBTndJSVFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUVpnbElBUTJBZ0FnQWtFWWFpRUFBMEFnQUVFRWFpSUJRUWMyQWdBZ0FFRUlhaUFGU1FSQUlBRWhBQXdCQ3dzZ0FpQUdSd1JBSUFjZ0J5Z0NBRUYrY1RZQ0FDQUdJQUlnQm1zaUJFRUJjallDQkNBQ0lBUTJBZ0FnQkVFRGRpRUJJQVJCZ0FKSkJFQWdBVUVEZEVINElXb2hBRUhRSVNnQ0FDSUNRUUVnQVhRaUFYRUVRRUhnSVNnQ0FDQUFRUWhxSWdFb0FnQWlBa3NFUUJBR0JTQUNJUkVnQVNFV0N3VkIwQ0VnQWlBQmNqWUNBQ0FBSVJFZ0FFRUlhaUVXQ3lBV0lBWTJBZ0FnRVNBR05nSU1JQVlnRVRZQ0NDQUdJQUEyQWd3TUF3c2dCRUVJZGlJQUJIOGdCRUgvLy84SFN3Ui9RUjhGSUFSQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQWlBQWNpQUJJQUowSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBWWdBVFlDSENBR1FRQTJBaFFnQ1VFQU5nSUFRZFFoS0FJQUlnSkJBU0FCZENJRmNVVUVRRUhVSVNBQ0lBVnlOZ0lBSUFBZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3REN3SkFJQUFvQWdBaUFDZ0NCRUY0Y1NBRVJnUkFJQUFoQ0FVZ0JFRUFRUmtnQVVFQmRtc2dBVUVmUmh0MElRSURRQ0FBUVJCcUlBSkJIM1pCQW5ScUlnVW9BZ0FpQVFSQUlBSkJBWFFoQWlBQktBSUVRWGh4SUFSR0JFQWdBU0VJREFRRklBRWhBQXdDQ3dBTEMwSGdJU2dDQUNBRlN3UkFFQVlGSUFVZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3RkN3c0xRZUFoS0FJQUlnRWdDRUVJYWlJQ0tBSUFJZ0JOSUFFZ0NFMXhCRUFnQUNBR05nSU1JQUlnQmpZQ0FDQUdJQUEyQWdnZ0JpQUlOZ0lNSUFaQkFEWUNHQVVRQmdzTEJVSGdJU2dDQUNJQ1JTQUFJQUpKY2dSQVFlQWhJQUEyQWdBTFFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUWZRaFFhZ2xLQUlBTmdJQVFmQWhRWDgyQWdCQmhDSkIrQ0UyQWdCQmdDSkIrQ0UyQWdCQmpDSkJnQ0kyQWdCQmlDSkJnQ0kyQWdCQmxDSkJpQ0kyQWdCQmtDSkJpQ0kyQWdCQm5DSkJrQ0kyQWdCQm1DSkJrQ0kyQWdCQnBDSkJtQ0kyQWdCQm9DSkJtQ0kyQWdCQnJDSkJvQ0kyQWdCQnFDSkJvQ0kyQWdCQnRDSkJxQ0kyQWdCQnNDSkJxQ0kyQWdCQnZDSkJzQ0kyQWdCQnVDSkJzQ0kyQWdCQnhDSkJ1Q0kyQWdCQndDSkJ1Q0kyQWdCQnpDSkJ3Q0kyQWdCQnlDSkJ3Q0kyQWdCQjFDSkJ5Q0kyQWdCQjBDSkJ5Q0kyQWdCQjNDSkIwQ0kyQWdCQjJDSkIwQ0kyQWdCQjVDSkIyQ0kyQWdCQjRDSkIyQ0kyQWdCQjdDSkI0Q0kyQWdCQjZDSkI0Q0kyQWdCQjlDSkI2Q0kyQWdCQjhDSkI2Q0kyQWdCQi9DSkI4Q0kyQWdCQitDSkI4Q0kyQWdCQmhDTkIrQ0kyQWdCQmdDTkIrQ0kyQWdCQmpDTkJnQ00yQWdCQmlDTkJnQ00yQWdCQmxDTkJpQ00yQWdCQmtDTkJpQ00yQWdCQm5DTkJrQ00yQWdCQm1DTkJrQ00yQWdCQnBDTkJtQ00yQWdCQm9DTkJtQ00yQWdCQnJDTkJvQ00yQWdCQnFDTkJvQ00yQWdCQnRDTkJxQ00yQWdCQnNDTkJxQ00yQWdCQnZDTkJzQ00yQWdCQnVDTkJzQ00yQWdCQnhDTkJ1Q00yQWdCQndDTkJ1Q00yQWdCQnpDTkJ3Q00yQWdCQnlDTkJ3Q00yQWdCQjFDTkJ5Q00yQWdCQjBDTkJ5Q00yQWdCQjNDTkIwQ00yQWdCQjJDTkIwQ00yQWdCQjVDTkIyQ00yQWdCQjRDTkIyQ00yQWdCQjdDTkI0Q00yQWdCQjZDTkI0Q00yQWdCQjlDTkI2Q00yQWdCQjhDTkI2Q00yQWdCQi9DTkI4Q00yQWdCQitDTkI4Q00yQWdCQjZDRWdBRUVBSUFCQkNHb2lBbXRCQjNGQkFDQUNRUWR4R3lJQ2FpSUVOZ0lBUWR3aElBRkJXR29pQVNBQ2F5SUNOZ0lBSUFRZ0FrRUJjallDQkNBQUlBRnFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQUxDMEhjSVNnQ0FDSUFJQU5MQkVCQjNDRWdBQ0FEYXlJQk5nSUFEQUlMQ3hCalFRdzJBZ0FnRGlRR1FRQVBDMEhvSVVIb0lTZ0NBQ0lBSUFOcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0EwRURjallDQkFzZ0RpUUdJQUJCQ0dvTHJSSUJFWDhnQUVVRVFBOExJQUJCZUdvaUJFSGdJU2dDQUNJTVNRUkFFQVlMSUFCQmZHb29BZ0FpQUVFRGNTSUxRUUZHQkVBUUJnc2dCQ0FBUVhoeElnSnFJUWNDUUNBQVFRRnhCRUFnQWlFQklBUWlBeUVGQlNBRUtBSUFJUWtnQzBVRVFBOExJQVFnQ1dzaUFDQU1TUVJBRUFZTElBa2dBbW9oQkVIa0lTZ0NBQ0FBUmdSQUlBZEJCR29pQVNnQ0FDSURRUU54UVFOSEJFQWdBQ0VESUFRaEFTQUFJUVVNQXd0QjJDRWdCRFlDQUNBQklBTkJmbkUyQWdBZ0FDQUVRUUZ5TmdJRUlBQWdCR29nQkRZQ0FBOExJQWxCQTNZaEFpQUpRWUFDU1FSQUlBQW9BZ3doQXlBQUtBSUlJZ1VnQWtFRGRFSDRJV29pQVVjRVFDQU1JQVZMQkVBUUJnc2dCU2dDRENBQVJ3UkFFQVlMQ3lBRElBVkdCRUJCMENGQjBDRW9BZ0JCQVNBQ2RFRi9jM0UyQWdBZ0FDRURJQVFoQVNBQUlRVU1Bd3NnQXlBQlJnUkFJQU5CQ0dvaEJnVWdEQ0FEU3dSQUVBWUxJQU5CQ0dvaUFTZ0NBQ0FBUmdSQUlBRWhCZ1VRQmdzTElBVWdBellDRENBR0lBVTJBZ0FnQUNFRElBUWhBU0FBSVFVTUFnc2dBQ2dDR0NFTkFrQWdBQ2dDRENJQ0lBQkdCRUFnQUVFUWFpSUdRUVJxSWdrb0FnQWlBZ1JBSUFraEJnVWdCaWdDQUNJQ1JRMENDd05BQWtBZ0FrRVVhaUlKS0FJQUlndEZCRUFnQWtFUWFpSUpLQUlBSWd0RkRRRUxJQWtoQmlBTElRSU1BUXNMSUF3Z0Jrc0VRQkFHQlNBR1FRQTJBZ0FnQWlFSUN3VWdEQ0FBS0FJSUlnWkxCRUFRQmdzZ0JrRU1haUlKS0FJQUlBQkhCRUFRQmdzZ0FrRUlhaUlMS0FJQUlBQkdCRUFnQ1NBQ05nSUFJQXNnQmpZQ0FDQUNJUWdGRUFZTEN3c2dEUVJBSUFBb0Fod2lBa0VDZEVHQUpHb2lCaWdDQUNBQVJnUkFJQVlnQ0RZQ0FDQUlSUVJBUWRRaFFkUWhLQUlBUVFFZ0FuUkJmM054TmdJQUlBQWhBeUFFSVFFZ0FDRUZEQVFMQlVIZ0lTZ0NBQ0FOU3dSQUVBWUZJQTFCRUdvaUFpQU5RUlJxSUFJb0FnQWdBRVliSUFnMkFnQWdDRVVFUUNBQUlRTWdCQ0VCSUFBaEJRd0ZDd3NMUWVBaEtBSUFJZ1lnQ0VzRVFCQUdDeUFJSUEwMkFoZ2dBRUVRYWlJSktBSUFJZ0lFUUNBR0lBSkxCRUFRQmdVZ0NDQUNOZ0lRSUFJZ0NEWUNHQXNMSUFrb0FnUWlBZ1JBUWVBaEtBSUFJQUpMQkVBUUJnVWdDQ0FDTmdJVUlBSWdDRFlDR0NBQUlRTWdCQ0VCSUFBaEJRc0ZJQUFoQXlBRUlRRWdBQ0VGQ3dVZ0FDRURJQVFoQVNBQUlRVUxDd3NnQlNBSFR3UkFFQVlMSUFkQkJHb2lCQ2dDQUNJQVFRRnhSUVJBRUFZTElBQkJBbkVFZnlBRUlBQkJmbkUyQWdBZ0F5QUJRUUZ5TmdJRUlBVWdBV29nQVRZQ0FDQUJCVUhvSVNnQ0FDQUhSZ1JBUWR3aFFkd2hLQUlBSUFGcUlnQTJBZ0JCNkNFZ0F6WUNBQ0FESUFCQkFYSTJBZ1FnQTBIa0lTZ0NBRWNFUUE4TFFlUWhRUUEyQWdCQjJDRkJBRFlDQUE4TFFlUWhLQUlBSUFkR0JFQkIyQ0ZCMkNFb0FnQWdBV29pQURZQ0FFSGtJU0FGTmdJQUlBTWdBRUVCY2pZQ0JDQUZJQUJxSUFBMkFnQVBDeUFBUVhoeElBRnFJUVFnQUVFRGRpRUdBa0FnQUVHQUFra0VRQ0FIS0FJTUlRRWdCeWdDQ0NJQ0lBWkJBM1JCK0NGcUlnQkhCRUJCNENFb0FnQWdBa3NFUUJBR0N5QUNLQUlNSUFkSEJFQVFCZ3NMSUFFZ0FrWUVRRUhRSVVIUUlTZ0NBRUVCSUFaMFFYOXpjVFlDQUF3Q0N5QUJJQUJHQkVBZ0FVRUlhaUVRQlVIZ0lTZ0NBQ0FCU3dSQUVBWUxJQUZCQ0dvaUFDZ0NBQ0FIUmdSQUlBQWhFQVVRQmdzTElBSWdBVFlDRENBUUlBSTJBZ0FGSUFjb0FoZ2hDQUpBSUFjb0Fnd2lBQ0FIUmdSQUlBZEJFR29pQVVFRWFpSUNLQUlBSWdBRVFDQUNJUUVGSUFFb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUFpZ0NBQ0lHUlFSQUlBQkJFR29pQWlnQ0FDSUdSUTBCQ3lBQ0lRRWdCaUVBREFFTEMwSGdJU2dDQUNBQlN3UkFFQVlGSUFGQkFEWUNBQ0FBSVFvTEJVSGdJU2dDQUNBSEtBSUlJZ0ZMQkVBUUJnc2dBVUVNYWlJQ0tBSUFJQWRIQkVBUUJnc2dBRUVJYWlJR0tBSUFJQWRHQkVBZ0FpQUFOZ0lBSUFZZ0FUWUNBQ0FBSVFvRkVBWUxDd3NnQ0FSQUlBY29BaHdpQUVFQ2RFR0FKR29pQVNnQ0FDQUhSZ1JBSUFFZ0NqWUNBQ0FLUlFSQVFkUWhRZFFoS0FJQVFRRWdBSFJCZjNOeE5nSUFEQVFMQlVIZ0lTZ0NBQ0FJU3dSQUVBWUZJQWhCRUdvaUFDQUlRUlJxSUFBb0FnQWdCMFliSUFvMkFnQWdDa1VOQkFzTFFlQWhLQUlBSWdFZ0Nrc0VRQkFHQ3lBS0lBZzJBaGdnQjBFUWFpSUNLQUlBSWdBRVFDQUJJQUJMQkVBUUJnVWdDaUFBTmdJUUlBQWdDallDR0FzTElBSW9BZ1FpQUFSQVFlQWhLQUlBSUFCTEJFQVFCZ1VnQ2lBQU5nSVVJQUFnQ2pZQ0dBc0xDd3NMSUFNZ0JFRUJjallDQkNBRklBUnFJQVEyQWdBZ0EwSGtJU2dDQUVZRWYwSFlJU0FFTmdJQUR3VWdCQXNMSWdWQkEzWWhBU0FGUVlBQ1NRUkFJQUZCQTNSQitDRnFJUUJCMENFb0FnQWlCVUVCSUFGMElnRnhCRUJCNENFb0FnQWdBRUVJYWlJQktBSUFJZ1ZMQkVBUUJnVWdCU0VQSUFFaEVRc0ZRZEFoSUFVZ0FYSTJBZ0FnQUNFUElBQkJDR29oRVFzZ0VTQUROZ0lBSUE4Z0F6WUNEQ0FESUE4MkFnZ2dBeUFBTmdJTUR3c2dCVUVJZGlJQUJIOGdCVUgvLy84SFN3Ui9RUjhGSUFWQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQkNBQWNpQUJJQVIwSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBTWdBVFlDSENBRFFRQTJBaFFnQTBFQU5nSVFBa0JCMUNFb0FnQWlCRUVCSUFGMElnSnhCRUFDUUNBQUtBSUFJZ0FvQWdSQmVIRWdCVVlFUUNBQUlRNEZJQVZCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VFQTBBZ0FFRVFhaUFFUVI5MlFRSjBhaUlDS0FJQUlnRUVRQ0FFUVFGMElRUWdBU2dDQkVGNGNTQUZSZ1JBSUFFaERnd0VCU0FCSVFBTUFnc0FDd3RCNENFb0FnQWdBa3NFUUJBR0JTQUNJQU0yQWdBZ0F5QUFOZ0lZSUFNZ0F6WUNEQ0FESUFNMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lCSUE1QkNHb2lCU2dDQUNJQVRTQUJJQTVOY1FSQUlBQWdBellDRENBRklBTTJBZ0FnQXlBQU5nSUlJQU1nRGpZQ0RDQURRUUEyQWhnRkVBWUxCVUhVSVNBRUlBSnlOZ0lBSUFBZ0F6WUNBQ0FESUFBMkFoZ2dBeUFETmdJTUlBTWdBellDQ0FzTFFmQWhRZkFoS0FJQVFYOXFJZ0EyQWdBZ0FBUkFEd3RCbUNVaEFBTkFJQUFvQWdBaUFVRUlhaUVBSUFFTkFBdEI4Q0ZCZnpZQ0FBdUFBUUVDZnlBQVJRUkFJQUVRWGc4TElBRkJ2MzlMQkVBUVkwRU1OZ0lBUVFBUEN5QUFRWGhxUVJBZ0FVRUxha0Y0Y1NBQlFRdEpHeEJoSWdJRVFDQUNRUWhxRHdzZ0FSQmVJZ0pGQkVCQkFBOExJQUlnQUNBQVFYeHFLQUlBSWdOQmVIRkJCRUVJSUFOQkEzRWJheUlESUFFZ0F5QUJTUnNRZVJvZ0FCQmZJQUlMbUFrQkRIOENRQ0FBSUFCQkJHb2lDaWdDQUNJSVFYaHhJZ0pxSVFVZ0NFRURjU0lKUVFGSFFlQWhLQUlBSWdzZ0FFMXhJQVVnQUV0eFJRUkFFQVlMSUFWQkJHb2lCeWdDQUNJRVFRRnhSUVJBRUFZTElBbEZCRUFnQVVHQUFra05BU0FDSUFGQkJHcFBCRUFnQWlBQmEwR3dKU2dDQUVFQmRFMEVRQ0FBRHdzTERBRUxJQUlnQVU4RVFDQUNJQUZySWdOQkQwMEVRQ0FBRHdzZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBU0FEUVFOeU5nSUVJQWNnQnlnQ0FFRUJjallDQUNBQklBTVFZaUFBRHd0QjZDRW9BZ0FnQlVZRVFFSGNJU2dDQUNBQ2FpSURJQUZORFFFZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBaUFESUFGcklnRkJBWEkyQWdSQjZDRWdBallDQUVIY0lTQUJOZ0lBSUFBUEMwSGtJU2dDQUNBRlJnUkFRZGdoS0FJQUlBSnFJZ0lnQVVrTkFTQUNJQUZySWdOQkQwc0VRQ0FLSUFoQkFYRWdBWEpCQW5JMkFnQWdBQ0FCYWlJQklBTkJBWEkyQWdRZ0FDQUNhaUlDSUFNMkFnQWdBa0VFYWlJQ0lBSW9BZ0JCZm5FMkFnQUZJQW9nQ0VFQmNTQUNja0VDY2pZQ0FDQUFJQUpxUVFScUlnRWdBU2dDQUVFQmNqWUNBRUVBSVFGQkFDRURDMEhZSVNBRE5nSUFRZVFoSUFFMkFnQWdBQThMSUFSQkFuRU5BQ0FFUVhoeElBSnFJZ3dnQVVrTkFDQU1JQUZySVEwZ0JFRURkaUVDQWtBZ0JFR0FBa2tFUUNBRktBSU1JUVlnQlNnQ0NDSUVJQUpCQTNSQitDRnFJZ2RIQkVBZ0N5QUVTd1JBRUFZTElBUW9BZ3dnQlVjRVFCQUdDd3NnQmlBRVJnUkFRZEFoUWRBaEtBSUFRUUVnQW5SQmYzTnhOZ0lBREFJTElBWWdCMFlFUUNBR1FRaHFJUU1GSUFzZ0Jrc0VRQkFHQ3lBR1FRaHFJZ0lvQWdBZ0JVWUVRQ0FDSVFNRkVBWUxDeUFFSUFZMkFnd2dBeUFFTmdJQUJTQUZLQUlZSVFrQ1FDQUZLQUlNSWdNZ0JVWUVRQ0FGUVJCcUlnSkJCR29pQkNnQ0FDSURCRUFnQkNFQ0JTQUNLQUlBSWdORkRRSUxBMEFDUUNBRFFSUnFJZ1FvQWdBaUIwVUVRQ0FEUVJCcUlnUW9BZ0FpQjBVTkFRc2dCQ0VDSUFjaEF3d0JDd3NnQ3lBQ1N3UkFFQVlGSUFKQkFEWUNBQ0FESVFZTEJTQUxJQVVvQWdnaUFrc0VRQkFHQ3lBQ1FReHFJZ1FvQWdBZ0JVY0VRQkFHQ3lBRFFRaHFJZ2NvQWdBZ0JVWUVRQ0FFSUFNMkFnQWdCeUFDTmdJQUlBTWhCZ1VRQmdzTEN5QUpCRUFnQlNnQ0hDSURRUUowUVlBa2FpSUNLQUlBSUFWR0JFQWdBaUFHTmdJQUlBWkZCRUJCMUNGQjFDRW9BZ0JCQVNBRGRFRi9jM0UyQWdBTUJBc0ZRZUFoS0FJQUlBbExCRUFRQmdVZ0NVRVFhaUlESUFsQkZHb2dBeWdDQUNBRlJoc2dCallDQUNBR1JRMEVDd3RCNENFb0FnQWlBaUFHU3dSQUVBWUxJQVlnQ1RZQ0dDQUZRUkJxSWdRb0FnQWlBd1JBSUFJZ0Ewc0VRQkFHQlNBR0lBTTJBaEFnQXlBR05nSVlDd3NnQkNnQ0JDSURCRUJCNENFb0FnQWdBMHNFUUJBR0JTQUdJQU0yQWhRZ0F5QUdOZ0lZQ3dzTEN3c2dEVUVRU1FSQUlBb2dDRUVCY1NBTWNrRUNjallDQUNBQUlBeHFRUVJxSWdFZ0FTZ0NBRUVCY2pZQ0FBVWdDaUFJUVFGeElBRnlRUUp5TmdJQUlBQWdBV29pQVNBTlFRTnlOZ0lFSUFBZ0RHcEJCR29pQXlBREtBSUFRUUZ5TmdJQUlBRWdEUkJpQ3lBQUR3dEJBQXZ4RUFFT2Z3SkFJQUFnQVdvaEJnSkFJQUFvQWdRaUIwRUJjUVJBSUFBaEFpQUJJUVFGSUFBb0FnQWhCU0FIUVFOeFJRUkFEd3NnQUNBRmF5SUFRZUFoS0FJQUlneEpCRUFRQmdzZ0JTQUJhaUVCUWVRaEtBSUFJQUJHQkVBZ0JrRUVhaUlFS0FJQUlnSkJBM0ZCQTBjRVFDQUFJUUlnQVNFRURBTUxRZGdoSUFFMkFnQWdCQ0FDUVg1eE5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFFMkFnQVBDeUFGUVFOMklRY2dCVUdBQWtrRVFDQUFLQUlNSVFJZ0FDZ0NDQ0lGSUFkQkEzUkIrQ0ZxSWdSSEJFQWdEQ0FGU3dSQUVBWUxJQVVvQWd3Z0FFY0VRQkFHQ3dzZ0FpQUZSZ1JBUWRBaFFkQWhLQUlBUVFFZ0IzUkJmM054TmdJQUlBQWhBaUFCSVFRTUF3c2dBaUFFUmdSQUlBSkJDR29oQXdVZ0RDQUNTd1JBRUFZTElBSkJDR29pQkNnQ0FDQUFSZ1JBSUFRaEF3VVFCZ3NMSUFVZ0FqWUNEQ0FESUFVMkFnQWdBQ0VDSUFFaEJBd0NDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnTWdBRVlFUUNBQVFSQnFJZ1ZCQkdvaUJ5Z0NBQ0lEQkVBZ0J5RUZCU0FGS0FJQUlnTkZEUUlMQTBBQ1FDQURRUlJxSWdjb0FnQWlDMFVFUUNBRFFSQnFJZ2NvQWdBaUMwVU5BUXNnQnlFRklBc2hBd3dCQ3dzZ0RDQUZTd1JBRUFZRklBVkJBRFlDQUNBRElRZ0xCU0FNSUFBb0FnZ2lCVXNFUUJBR0N5QUZRUXhxSWdjb0FnQWdBRWNFUUJBR0N5QURRUWhxSWdzb0FnQWdBRVlFUUNBSElBTTJBZ0FnQ3lBRk5nSUFJQU1oQ0FVUUJnc0xDeUFLQkVBZ0FDZ0NIQ0lEUVFKMFFZQWthaUlGS0FJQUlBQkdCRUFnQlNBSU5nSUFJQWhGQkVCQjFDRkIxQ0VvQWdCQkFTQURkRUYvYzNFMkFnQWdBQ0VDSUFFaEJBd0VDd1ZCNENFb0FnQWdDa3NFUUJBR0JTQUtRUkJxSWdNZ0NrRVVhaUFES0FJQUlBQkdHeUFJTmdJQUlBaEZCRUFnQUNFQ0lBRWhCQXdGQ3dzTFFlQWhLQUlBSWdVZ0NFc0VRQkFHQ3lBSUlBbzJBaGdnQUVFUWFpSUhLQUlBSWdNRVFDQUZJQU5MQkVBUUJnVWdDQ0FETmdJUUlBTWdDRFlDR0FzTElBY29BZ1FpQXdSQVFlQWhLQUlBSUFOTEJFQVFCZ1VnQ0NBRE5nSVVJQU1nQ0RZQ0dDQUFJUUlnQVNFRUN3VWdBQ0VDSUFFaEJBc0ZJQUFoQWlBQklRUUxDd3NnQmtIZ0lTZ0NBQ0lIU1FSQUVBWUxJQVpCQkdvaUFTZ0NBQ0lBUVFKeEJFQWdBU0FBUVg1eE5nSUFJQUlnQkVFQmNqWUNCQ0FDSUFScUlBUTJBZ0FGUWVnaEtBSUFJQVpHQkVCQjNDRkIzQ0VvQWdBZ0JHb2lBRFlDQUVIb0lTQUNOZ0lBSUFJZ0FFRUJjallDQkNBQ1FlUWhLQUlBUndSQUR3dEI1Q0ZCQURZQ0FFSFlJVUVBTmdJQUR3dEI1Q0VvQWdBZ0JrWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFJMkFnQWdBaUFBUVFGeU5nSUVJQUlnQUdvZ0FEWUNBQThMSUFCQmVIRWdCR29oQkNBQVFRTjJJUVVDUUNBQVFZQUNTUVJBSUFZb0Fnd2hBU0FHS0FJSUlnTWdCVUVEZEVINElXb2lBRWNFUUNBSElBTkxCRUFRQmdzZ0F5Z0NEQ0FHUndSQUVBWUxDeUFCSUFOR0JFQkIwQ0ZCMENFb0FnQkJBU0FGZEVGL2MzRTJBZ0FNQWdzZ0FTQUFSZ1JBSUFGQkNHb2hEZ1VnQnlBQlN3UkFFQVlMSUFGQkNHb2lBQ2dDQUNBR1JnUkFJQUFoRGdVUUJnc0xJQU1nQVRZQ0RDQU9JQU0yQWdBRklBWW9BaGdoQ0FKQUlBWW9BZ3dpQUNBR1JnUkFJQVpCRUdvaUFVRUVhaUlES0FJQUlnQUVRQ0FESVFFRklBRW9BZ0FpQUVVTkFnc0RRQUpBSUFCQkZHb2lBeWdDQUNJRlJRUkFJQUJCRUdvaUF5Z0NBQ0lGUlEwQkN5QURJUUVnQlNFQURBRUxDeUFISUFGTEJFQVFCZ1VnQVVFQU5nSUFJQUFoQ1FzRklBY2dCaWdDQ0NJQlN3UkFFQVlMSUFGQkRHb2lBeWdDQUNBR1J3UkFFQVlMSUFCQkNHb2lCU2dDQUNBR1JnUkFJQU1nQURZQ0FDQUZJQUUyQWdBZ0FDRUpCUkFHQ3dzTElBZ0VRQ0FHS0FJY0lnQkJBblJCZ0NScUlnRW9BZ0FnQmtZRVFDQUJJQWsyQWdBZ0NVVUVRRUhVSVVIVUlTZ0NBRUVCSUFCMFFYOXpjVFlDQUF3RUN3VkI0Q0VvQWdBZ0NFc0VRQkFHQlNBSVFSQnFJZ0FnQ0VFVWFpQUFLQUlBSUFaR0d5QUpOZ0lBSUFsRkRRUUxDMEhnSVNnQ0FDSUJJQWxMQkVBUUJnc2dDU0FJTmdJWUlBWkJFR29pQXlnQ0FDSUFCRUFnQVNBQVN3UkFFQVlGSUFrZ0FEWUNFQ0FBSUFrMkFoZ0xDeUFES0FJRUlnQUVRRUhnSVNnQ0FDQUFTd1JBRUFZRklBa2dBRFlDRkNBQUlBazJBaGdMQ3dzTEN5QUNJQVJCQVhJMkFnUWdBaUFFYWlBRU5nSUFJQUpCNUNFb0FnQkdCRUJCMkNFZ0JEWUNBQThMQ3lBRVFRTjJJUUVnQkVHQUFra0VRQ0FCUVFOMFFmZ2hhaUVBUWRBaEtBSUFJZ1JCQVNBQmRDSUJjUVJBUWVBaEtBSUFJQUJCQ0dvaUFTZ0NBQ0lFU3dSQUVBWUZJQVFoRFNBQklROExCVUhRSVNBRUlBRnlOZ0lBSUFBaERTQUFRUWhxSVE4TElBOGdBallDQUNBTklBSTJBZ3dnQWlBTk5nSUlJQUlnQURZQ0RBOExJQVJCQ0hZaUFBUi9JQVJCLy8vL0Iwc0VmMEVmQlNBRVFRNGdBQ0FBUVlEK1AycEJFSFpCQ0hFaUFIUWlBVUdBNEI5cVFSQjJRUVJ4SWdNZ0FISWdBU0FEZENJQVFZQ0FEMnBCRUhaQkFuRWlBWEpySUFBZ0FYUkJEM1pxSWdCQkIycDJRUUZ4SUFCQkFYUnlDd1ZCQUFzaUFVRUNkRUdBSkdvaEFDQUNJQUUyQWh3Z0FrRUFOZ0lVSUFKQkFEWUNFRUhVSVNnQ0FDSURRUUVnQVhRaUJYRkZCRUJCMUNFZ0F5QUZjallDQUNBQUlBSTJBZ0FNQVFzQ1FDQUFLQUlBSWdBb0FnUkJlSEVnQkVZRWZ5QUFCU0FFUVFCQkdTQUJRUUYyYXlBQlFSOUdHM1FoQXdOQUlBQkJFR29nQTBFZmRrRUNkR29pQlNnQ0FDSUJCRUFnQTBFQmRDRURJQUVvQWdSQmVIRWdCRVlOQXlBQklRQU1BUXNMUWVBaEtBSUFJQVZMQkVBUUJnc2dCU0FDTmdJQURBSUxJUUVMUWVBaEtBSUFJZ1FnQVVFSWFpSURLQUlBSWdCTklBUWdBVTF4UlFSQUVBWUxJQUFnQWpZQ0RDQURJQUkyQWdBZ0FpQUFOZ0lJSUFJZ0FUWUNEQ0FDUVFBMkFoZ1BDeUFDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0FzRkFFSEFKUXRRQVFKL0FuOGdBZ1IvQTBBZ0FDd0FBQ0lESUFFc0FBQWlCRVlFUUNBQVFRRnFJUUFnQVVFQmFpRUJRUUFnQWtGL2FpSUNSUTBER2d3QkN3c2dBMEgvQVhFZ0JFSC9BWEZyQlVFQUN3c2lBQXVwQVFFQ2Z5QUJRZjhIU2dSQUlBQkVBQUFBQUFBQTRIK2lJZ0JFQUFBQUFBQUE0SCtpSUFBZ0FVSCtEMG9pQWhzaEFDQUJRWUp3YWlJRFFmOEhJQU5CL3dkSUd5QUJRWUY0YWlBQ0d5RUJCU0FCUVlKNFNBUkFJQUJFQUFBQUFBQUFFQUNpSWdCRUFBQUFBQUFBRUFDaUlBQWdBVUdFY0VnaUFoc2hBQ0FCUWZ3UGFpSURRWUo0SUFOQmduaEtHeUFCUWY0SGFpQUNHeUVCQ3dzZ0FDQUJRZjhIYXExQ05JYS9vZ3VhQkFFSWZ5TUdJUW9qQmtIUUFXb2tCaUFLSWdkQndBRnFJZ1JDQVRjREFBSkFJQUlnQVd3aUN3UkFRUUFnQW1zaENTQUhJQUkyQWdRZ0J5QUNOZ0lBUVFJaEJpQUNJUVVnQWlFQkEwQWdCeUFHUVFKMGFpQUZJQUpxSUFGcUlnZzJBZ0FnQmtFQmFpRUdJQWdnQzBrRVFDQUJJUVVnQ0NFQkRBRUxDeUFBSUF0cUlBbHFJZ1lnQUVzRVFDQUdJUWhCQVNFQlFRRWhCUU5BSUFWQkEzRkJBMFlFZnlBQUlBSWdBeUFCSUFjUVp5QUVRUUlRYUNBQlFRSnFCU0FISUFGQmYyb2lCVUVDZEdvb0FnQWdDQ0FBYTBrRVFDQUFJQUlnQXlBQklBY1Fad1VnQUNBQ0lBTWdCQ0FCUVFBZ0J4QnBDeUFCUVFGR0JIOGdCRUVCRUdwQkFBVWdCQ0FGRUdwQkFRc0xJUUVnQkNBRUtBSUFRUUZ5SWdVMkFnQWdBQ0FDYWlJQUlBWkpEUUFMSUFFaEJnVkJBU0VHUVFFaEJRc2dBQ0FDSUFNZ0JDQUdRUUFnQnhCcElBUkJCR29oQ0NBQUlRRWdCaUVBQTBBQ2Z3SkFJQUJCQVVZZ0JVRUJSbkVFZnlBSUtBSUFSUTBGREFFRklBQkJBa2dOQVNBRVFRSVFhaUFFSUFRb0FnQkJCM00yQWdBZ0JFRUJFR2dnQVNBSElBQkJmbW9pQlVFQ2RHb29BZ0JySUFscUlBSWdBeUFFSUFCQmYycEJBU0FIRUdrZ0JFRUJFR29nQkNBRUtBSUFRUUZ5SWdZMkFnQWdBU0FKYWlJQklBSWdBeUFFSUFWQkFTQUhFR2tnQlNFQUlBWUxEQUVMSUFRZ0JCQnJJZ1VRYUNBQklBbHFJUUVnQlNBQWFpRUFJQVFvQWdBTElRVU1BQUFMQUFzTElBb2tCZ3ZnQVFFSWZ5TUdJUW9qQmtId0FXb2tCaUFLSWdnZ0FEWUNBQUpBSUFOQkFVb0VRRUVBSUFGcklRd2dBQ0VHSUFNaENVRUJJUU1nQUNFRkEwQWdCU0FHSUF4cUlnY2dCQ0FKUVg1cUlnWkJBblJxS0FJQWF5SUFJQUpCQTNFUkFBQkJmMG9FUUNBRklBY2dBa0VEY1JFQUFFRi9TZzBEQ3lBQUlBY2dBa0VEY1JFQUFFRi9TaUVGSUFnZ0EwRUNkR29oQ3lBRFFRRnFJUU1nQlFSL0lBc2dBRFlDQUNBSlFYOXFCU0FMSUFjMkFnQWdCeUVBSUFZTElnbEJBVW9FUUNBQUlRWWdDQ2dDQUNFRkRBRUxDd1ZCQVNFREN3c2dBU0FJSUFNUWJTQUtKQVlMV1FFRGZ5QUFRUVJxSVFJZ0FDQUJRUjlMQkg4Z0FDQUNLQUlBSWdNMkFnQWdBa0VBTmdJQUlBRkJZR29oQVVFQUJTQUFLQUlBSVFNZ0FpZ0NBQXNpQkVFZ0lBRnJkQ0FESUFGMmNqWUNBQ0FDSUFRZ0FYWTJBZ0FMalFNQkIzOGpCaUVLSXdaQjhBRnFKQVlnQ2tIb0FXb2lDU0FES0FJQUlnYzJBZ0FnQ1VFRWFpSU1JQU1vQWdRaUF6WUNBQ0FLSWdzZ0FEWUNBQUpBQWtBZ0IwRUJSeUFEY2dSQVFRQWdBV3NoRFNBQUlBWWdCRUVDZEdvb0FnQnJJZ2dnQUNBQ1FRTnhFUUFBUVFGSUJFQkJBU0VEQlVFQklRY2dCVVVoQlNBQUlRTWdDQ0VBQTBBZ0JTQUVRUUZLY1FSQUlBWWdCRUYrYWtFQ2RHb29BZ0FoQlNBRElBMXFJZ2dnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTElBZ2dCV3NnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTEN5QUhRUUZxSVFVZ0N5QUhRUUowYWlBQU5nSUFJQWtnQ1JCcklnTVFhQ0FESUFScUlRUWdDU2dDQUVFQlJ5QU1LQUlBUVFCSGNrVUVRQ0FBSVFNTUJBc2dBQ0FHSUFSQkFuUnFLQUlBYXlJSUlBc29BZ0FnQWtFRGNSRUFBRUVCU0FSL0lBVWhBMEVBQlNBQUlRTWdCU0VIUVFFaEJTQUlJUUFNQVFzaEJRc0xCVUVCSVFNTElBVkZCRUFnQXlFRklBQWhBd3dCQ3d3QkN5QUJJQXNnQlJCdElBTWdBU0FDSUFRZ0JoQm5DeUFLSkFZTFZ3RURmeUFBUVFScUlnSWdBVUVmU3dSL0lBSWdBQ2dDQUNJRE5nSUFJQUJCQURZQ0FDQUJRV0JxSVFGQkFBVWdBaWdDQUNFRElBQW9BZ0FMSWdSQklDQUJhM1lnQXlBQmRISTJBZ0FnQUNBRUlBRjBOZ0lBQ3ljQkFYOGdBQ2dDQUVGL2FoQnNJZ0VFZnlBQkJTQUFLQUlFRUd3aUFFRWdha0VBSUFBYkN3czVBUUovSUFBRVFDQUFRUUZ4UlFSQUEwQWdBVUVCYWlFQklBQkJBWFloQWlBQVFRSnhSUVJBSUFJaEFBd0JDd3NMQlVFZ0lRRUxJQUVMcEFFQkJYOGpCaUVGSXdaQmdBSnFKQVlnQlNFREFrQWdBa0VDVGdSQUlBRWdBa0VDZEdvaUJ5QUROZ0lBSUFBRVFBTkFJQU1nQVNnQ0FDQUFRWUFDSUFCQmdBSkpHeUlFRUhrYVFRQWhBd05BSUFFZ0EwRUNkR29pQmlnQ0FDQUJJQU5CQVdvaUEwRUNkR29vQWdBZ0JCQjVHaUFHSUFZb0FnQWdCR28yQWdBZ0F5QUNSdzBBQ3lBQUlBUnJJZ0JGRFFNZ0J5Z0NBQ0VEREFBQUN3QUxDd3NnQlNRR0MvNElBd2QvQVg0RWZDTUdJUWNqQmtFd2FpUUdJQWRCRUdvaEJDQUhJUVVnQUwwaUNVSS9pS2NoQmdKL0FrQWdDVUlnaUtjaUFrSC8vLy8vQjNFaUEwSDcxTDJBQkVrRWZ5QUNRZi8vUDNGQis4TWtSZzBCSUFaQkFFY2hBaUFEUWYyeWk0QUVTUVIvSUFJRWZ5QUJJQUJFQUFCQVZQc2grVCtnSWdCRU1XTmlHbUcwMEQyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQTlvRGtEQ0VGL0JTQUJJQUJFQUFCQVZQc2grYitnSWdCRU1XTmlHbUcwMEwyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQzlvRGtEQ0VFQkN3VWdBZ1IvSUFFZ0FFUUFBRUJVK3lFSlFLQWlBRVF4WTJJYVliVGdQYUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEQyZ09RTUlRWDRGSUFFZ0FFUUFBRUJVK3lFSndLQWlBRVF4WTJJYVliVGd2YUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEwyZ09RTUlRUUlMQ3dVZ0EwRzhqUEdBQkVrRVFDQURRYjM3MTRBRVNRUkFJQU5CL0xMTGdBUkdEUU1nQmdSQUlBRWdBRVFBQURCL2ZOa1NRS0FpQUVUS2xKT25rUTdwUGFBaUNqa0RBQ0FCSUFBZ0NxRkV5cFNUcDVFTzZUMmdPUU1JUVgwTUJRVWdBU0FBUkFBQU1IOTgyUkxBb0NJQVJNcVVrNmVSRHVtOW9DSUtPUU1BSUFFZ0FDQUtvVVRLbEpPbmtRN3B2YUE1QXdoQkF3d0ZDd0FGSUFOQis4UGtnQVJHRFFNZ0JnUkFJQUVnQUVRQUFFQlUreUVaUUtBaUFFUXhZMklhWWJUd1BhQWlDamtEQUNBQklBQWdDcUZFTVdOaUdtRzA4RDJnT1FNSVFYd01CUVVnQVNBQVJBQUFRRlQ3SVJuQW9DSUFSREZqWWhwaHRQQzlvQ0lLT1FNQUlBRWdBQ0FLb1VReFkySWFZYlR3dmFBNUF3aEJCQXdGQ3dBTEFBc2dBMEg3dytTSkJFa05BU0FEUWYvL3YvOEhTd1JBSUFFZ0FDQUFvU0lBT1FNSUlBRWdBRGtEQUVFQURBTUxJQWxDLy8vLy8vLy8vd2VEUW9DQWdJQ0FnSUN3d1FDRXZ5RUFRUUFoQWdOQUlBUWdBa0VEZEdvZ0FLcTNJZ281QXdBZ0FDQUtvVVFBQUFBQUFBQndRYUloQUNBQ1FRRnFJZ0pCQWtjTkFBc2dCQ0FBT1FNUUlBQkVBQUFBQUFBQUFBQmhCRUJCQVNFQ0EwQWdBa0YvYWlFSUlBUWdBa0VEZEdvckF3QkVBQUFBQUFBQUFBQmhCRUFnQ0NFQ0RBRUxDd1ZCQWlFQ0N5QUVJQVVnQTBFVWRrSHFkMm9nQWtFQmFrRUJFRzhoQWlBRkt3TUFJUUFnQmdSL0lBRWdBSm81QXdBZ0FTQUZLd01JbWprRENFRUFJQUpyQlNBQklBQTVBd0FnQVNBRkt3TUlPUU1JSUFJTEN3d0JDeUFBUklQSXlXMHdYK1Evb2tRQUFBQUFBQUE0UTZCRUFBQUFBQUFBT01PZ0lndXFJUUlnQVNBQUlBdEVBQUJBVlBzaCtUK2lvU0lLSUF0RU1XTmlHbUcwMEQyaUlnQ2hJZ3c1QXdBZ0EwRVVkaUlJSUF5OVFqU0lwMEgvRDNGclFSQktCRUFnQzBSemNBTXVpaG1qTzZJZ0NpQUtJQXRFQUFCZ0dtRzAwRDJpSWdDaElncWhJQUNob1NFQUlBRWdDaUFBb1NJTU9RTUFJQXRFd1VrZ0pacURlem1pSUFvZ0NpQUxSQUFBQUM2S0dhTTdvaUlOb1NJTG9TQU5vYUVoRFNBSUlBeTlRalNJcDBIL0QzRnJRVEZLQkVBZ0FTQUxJQTJoSWd3NUF3QWdEU0VBSUFzaENnc0xJQUVnQ2lBTW9TQUFvVGtEQ0NBQ0N5RUJJQWNrQmlBQkMvOFFBaFovQTN3akJpRVBJd1pCc0FScUpBWWdEMEhBQW1vaEVDQUNRWDFxUVJodElnVkJBQ0FGUVFCS0d5RVNJQVJCQW5SQm9CQnFLQUlBSWcwZ0EwRi9haUlIYWtFQVRnUkFJQTBnQTJvaENTQVNJQWRySVFVRFFDQVFJQVpCQTNScUlBVkJBRWdFZkVRQUFBQUFBQUFBQUFVZ0JVRUNkRUd3RUdvb0FnQzNDeUliT1FNQUlBVkJBV29oQlNBR1FRRnFJZ1lnQ1VjTkFBc0xJQTlCNEFOcUlRd2dEMEdnQVdvaENpQVBJUTRnQWtGb2FpQVNRV2hzSWhacUlRa2dBMEVBU2lFSVFRQWhCUU5BSUFnRVFDQUZJQWRxSVF0RUFBQUFBQUFBQUFBaEcwRUFJUVlEUUNBYklBQWdCa0VEZEdvckF3QWdFQ0FMSUFaclFRTjBhaXNEQUtLZ0lSc2dCa0VCYWlJR0lBTkhEUUFMQlVRQUFBQUFBQUFBQUNFYkN5QU9JQVZCQTNScUlCczVBd0FnQlVFQmFpRUdJQVVnRFVnRVFDQUdJUVVNQVFzTElBbEJBRW9oRTBFWUlBbHJJUlJCRnlBSmF5RVhJQWxGSVJnZ0EwRUFTaUVaSUEwaEJRSkFBa0FDUUFOQUlBNGdCVUVEZEdvckF3QWhHeUFGUVFCS0lnc0VRQ0FGSVFaQkFDRUhBMEFnRENBSFFRSjBhaUFiSUJ0RUFBQUFBQUFBY0Q2aXFyY2lHMFFBQUFBQUFBQndRYUtocWpZQ0FDQU9JQVpCZjJvaUNFRURkR29yQXdBZ0c2QWhHeUFIUVFGcUlRY2dCa0VCU2dSQUlBZ2hCZ3dCQ3dzTElCc2dDUkJsSWhzZ0cwUUFBQUFBQUFEQVA2S2NSQUFBQUFBQUFDQkFvcUVpRzZvaEJpQWJJQWEzb1NFYkFrQUNRQUpBSUJNRWZ5QU1JQVZCZjJwQkFuUnFJZ2dvQWdBaUVTQVVkU0VISUFnZ0VTQUhJQlIwYXlJSU5nSUFJQWdnRjNVaENDQUhJQVpxSVFZTUFRVWdHQVIvSUF3Z0JVRi9ha0VDZEdvb0FnQkJGM1VoQ0F3Q0JTQWJSQUFBQUFBQUFPQS9aZ1IvUVFJaENBd0VCVUVBQ3dzTElRZ01BZ3NnQ0VFQVNnMEFEQUVMSUFZaEJ5QUxCRUJCQUNFR1FRQWhDd05BSUF3Z0MwRUNkR29pR2lnQ0FDRVJBa0FDUUNBR0JIOUIvLy8vQnlFVkRBRUZJQkVFZjBFQklRWkJnSUNBQ0NFVkRBSUZRUUFMQ3lFR0RBRUxJQm9nRlNBUmF6WUNBQXNnQzBFQmFpSUxJQVZIRFFBTElBWWhDd1ZCQUNFTEN5QUhRUUZxSVFZQ1FDQVRCRUFDUUFKQUFrQWdDVUVCYXc0Q0FBRUNDeUFNSUFWQmYycEJBblJxSWdjZ0J5Z0NBRUgvLy84RGNUWUNBQXdEQ3lBTUlBVkJmMnBCQW5ScUlnY2dCeWdDQUVILy8vOEJjVFlDQUFzTEN5QUlRUUpHQkVCRUFBQUFBQUFBOEQ4Z0c2RWhHeUFMQkVBZ0cwUUFBQUFBQUFEd1B5QUpFR1doSVJzTFFRSWhDQXNMSUJ0RUFBQUFBQUFBQUFCaURRSWdCU0FOU2dSQVFRQWhDeUFGSVFjRFFDQU1JQWRCZjJvaUIwRUNkR29vQWdBZ0MzSWhDeUFISUExS0RRQUxJQXNOQWd0QkFTRUdBMEFnQmtFQmFpRUhJQXdnRFNBR2EwRUNkR29vQWdCRkJFQWdCeUVHREFFTEN5QUdJQVZxSVFjRFFDQVFJQVVnQTJvaUNFRURkR29nQlVFQmFpSUdJQkpxUVFKMFFiQVFhaWdDQUxjNUF3QWdHUVJBUkFBQUFBQUFBQUFBSVJ0QkFDRUZBMEFnR3lBQUlBVkJBM1JxS3dNQUlCQWdDQ0FGYTBFRGRHb3JBd0Npb0NFYklBVkJBV29pQlNBRFJ3MEFDd1ZFQUFBQUFBQUFBQUFoR3dzZ0RpQUdRUU4wYWlBYk9RTUFJQVlnQjBnRVFDQUdJUVVNQVFzTElBY2hCUXdBQUFzQUN5QUpJUUFEUUNBQVFXaHFJUUFnRENBRlFYOXFJZ1ZCQW5ScUtBSUFSUTBBQ3lBQUlRSWdCU0VBREFFTElBd2dHMEVBSUFsckVHVWlHMFFBQUFBQUFBQndRV1lFZnlBTUlBVkJBblJxSUJzZ0cwUUFBQUFBQUFCd1BxS3FJZ08zUkFBQUFBQUFBSEJCb3FHcU5nSUFJQllnQW1vaEFpQUZRUUZxQlNBSklRSWdHNm9oQXlBRkN5SUFRUUowYWlBRE5nSUFDMFFBQUFBQUFBRHdQeUFDRUdVaEd5QUFRWDlLSWdjRVFDQUFJUUlEUUNBT0lBSkJBM1JxSUJzZ0RDQUNRUUowYWlnQ0FMZWlPUU1BSUJ0RUFBQUFBQUFBY0Q2aUlSc2dBa0YvYWlFRElBSkJBRW9FUUNBRElRSU1BUXNMSUFjRVFDQUFJUUlEUUNBQUlBSnJJUWxCQUNFRFJBQUFBQUFBQUFBQUlSc0RRQ0FiSUFOQkEzUkJ3QkpxS3dNQUlBNGdBeUFDYWtFRGRHb3JBd0Npb0NFYklBTkJBV29oQlNBRElBMU9JQU1nQ1U5eVJRUkFJQVVoQXd3QkN3c2dDaUFKUVFOMGFpQWJPUU1BSUFKQmYyb2hBeUFDUVFCS0JFQWdBeUVDREFFTEN3c0xBa0FDUUFKQUFrQWdCQTRFQUFFQkFnTUxJQWNFUUVRQUFBQUFBQUFBQUNFYkEwQWdHeUFLSUFCQkEzUnFLd01Bb0NFYklBQkJmMm9oQWlBQVFRQktCRUFnQWlFQURBRUxDd1ZFQUFBQUFBQUFBQUFoR3dzZ0FTQWJtaUFiSUFnYk9RTUFEQUlMSUFjRVFFUUFBQUFBQUFBQUFDRWJJQUFoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FYOXFJUU1nQWtFQVNnUkFJQU1oQWd3QkN3c0ZSQUFBQUFBQUFBQUFJUnNMSUFFZ0d5QWJtaUFJUlNJRUd6a0RBQ0FLS3dNQUlCdWhJUnNnQUVFQlRnUkFRUUVoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FRRnFJUU1nQWlBQVJ3UkFJQU1oQWd3QkN3c0xJQUVnR3lBYm1pQUVHemtEQ0F3QkN5QUFRUUJLQkVBZ0NpQUFJZ0pCQTNScUt3TUFJUnNEUUNBS0lBSkJmMm9pQTBFRGRHb2lCQ3NEQUNJZElCdWdJUndnQ2lBQ1FRTjBhaUFiSUIwZ0hLR2dPUU1BSUFRZ0hEa0RBQ0FDUVFGS0JFQWdBeUVDSUJ3aEd3d0JDd3NnQUVFQlNpSUVCRUFnQ2lBQUlnSkJBM1JxS3dNQUlSc0RRQ0FLSUFKQmYyb2lBMEVEZEdvaUJTc0RBQ0lkSUJ1Z0lSd2dDaUFDUVFOMGFpQWJJQjBnSEtHZ09RTUFJQVVnSERrREFDQUNRUUpLQkVBZ0F5RUNJQndoR3d3QkN3c2dCQVJBUkFBQUFBQUFBQUFBSVJzRFFDQWJJQW9nQUVFRGRHb3JBd0NnSVJzZ0FFRi9haUVDSUFCQkFrb0VRQ0FDSVFBTUFRc0xCVVFBQUFBQUFBQUFBQ0ViQ3dWRUFBQUFBQUFBQUFBaEd3c0ZSQUFBQUFBQUFBQUFJUnNMSUFvckF3QWhIQ0FJQkVBZ0FTQWNtamtEQUNBQklBb3JBd2lhT1FNSUlBRWdHNW81QXhBRklBRWdIRGtEQUNBQklBb3JBd2c1QXdnZ0FTQWJPUU1RQ3dzZ0R5UUdJQVpCQjNFTGx3RUJBM3dnQUNBQW9pSURJQU1nQTZLaUlBTkVmTlhQV2pyWjVUMmlST3VjSzRybTVWcStvS0lnQXlBRFJIMytzVmZqSGNjK29rVFZZY0Vab0FFcXY2Q2lSS2I0RUJFUkVZRS9vS0FoQlNBRElBQ2lJUVFnQUNBRVJFbFZWVlZWVmNVL29pQURJQUZFQUFBQUFBQUE0RCtpSUFRZ0JhS2hvaUFCb2FDaElBUWdBeUFGb2tSSlZWVlZWVlhGdjZDaUlBQ2dJQUliSWdBTENBQWdBQ0FCRUdVTGxBRUJCSHdnQUNBQW9pSUNJQUtpSVFORUFBQUFBQUFBOEQ4Z0FrUUFBQUFBQUFEZ1A2SWlCS0VpQlVRQUFBQUFBQUR3UHlBRm9TQUVvU0FDSUFJZ0FpQUNSSkFWeXhtZ0Fmbytva1IzVWNFV2JNRld2NkNpUkV4VlZWVlZWYVUvb0tJZ0F5QURvaUFDUk1TeHRMMmU3aUUrSUFKRTFEaUl2dW42cUQyaW9hSkVyVktjZ0U5K2tyNmdvcUNpSUFBZ0FhS2hvS0FMeEFFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ2ZDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkh3Z0EwR2V3WnJ5QTBrRWZFUUFBQUFBQUFEd1B3VWdBRVFBQUFBQUFBQUFBQkJ5Q3dVZ0FDQUFvU0FEUWYvL3YvOEhTdzBCR2dKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2dRY2d3RUN5QUJLd01BSUFFckF3aEJBUkJ3bWd3REN5QUJLd01BSUFFckF3Z1FjcG9NQWdzZ0FTc0RBQ0FCS3dNSVFRRVFjQXNMSVFBZ0FpUUdJQUFMeXdFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ1FDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkVBZ0EwR0FnTUR5QTA4RVFDQUFSQUFBQUFBQUFBQUFRUUFRY0NFQUN3VWdBMEgvLzcvL0Iwc0VRQ0FBSUFDaElRQU1BZ3NDUUFKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2hCQVJCd0lRQU1CUXNnQVNzREFDQUJLd01JRUhJaEFBd0VDeUFCS3dNQUlBRXJBd2hCQVJCd21pRUFEQU1MSUFFckF3QWdBU3NEQ0JCeW1pRUFDd3NMSUFJa0JpQUFDNXNEQXdKL0FYNENmQ0FBdlNJRFFqK0lweUVCQW53Q2Z3SkFJQU5DSUlpblFmLy8vLzhIY1NJQ1FhckdtSVFFU3dSOElBTkMvLy8vLy8vLy8vLy9BSU5DZ0lDQWdJQ0FnUGovQUZZRVFDQUFEd3NnQUVUdk9mcitRaTZHUUdRRVFDQUFSQUFBQUFBQUFPQi9vZzhGSUFCRTByeDYzU3NqaHNCaklBQkVVVEF0MVJCSmg4QmpjVVVOQWtRQUFBQUFBQUFBQUNJQUR3c0FCU0FDUWNMYzJQNERTd1JBSUFKQnNjWEMvd05MRFFJZ0FVRUJjeUFCYXd3REN5QUNRWUNBd1BFRFN3UjhRUUFoQVNBQUJTQUFSQUFBQUFBQUFQQS9vQThMQ3d3Q0N5QUFSUDZDSzJWSEZmYy9vaUFCUVFOMFFZQVRhaXNEQUtDcUN5RUJJQUFnQWJjaUJFUUFBT0QrUWk3bVA2S2hJZ0FnQkVSMlBIazE3em5xUGFJaUJhRUxJUVFnQUNBRUlBUWdCQ0FFb2lJQUlBQWdBQ0FBSUFCRTBLUytjbWszWmo2aVJQRnIwc1ZCdmJ1K29LSkVMTjRscjJwV0VUK2dva1NUdmI0V2JNRm12NkNpUkQ1VlZWVlZWY1Uvb0tLaElnQ2lSQUFBQUFBQUFBQkFJQUNob3lBRm9hQkVBQUFBQUFBQThEK2dJUUFnQVVVRVFDQUFEd3NnQUNBQkVHVUxud01EQW44QmZnVjhJQUM5SWdOQ0lJaW5JUUVDZnlBRFFnQlRJZ0lnQVVHQWdNQUFTWElFZnlBRFF2Ly8vLy8vLy8vLy93Q0RRZ0JSQkVCRUFBQUFBQUFBOEw4Z0FDQUFvcU1QQ3lBQ1JRUkFJQUJFQUFBQUFBQUFVRU9pdlNJRFFpQ0lweUVCSUFOQy8vLy8vdytESVFOQnkzY01BZ3NnQUNBQW9VUUFBQUFBQUFBQUFLTVBCU0FCUWYvL3YvOEhTd1JBSUFBUEN5QURRdi8vLy84UGd5SURRZ0JSSUFGQmdJREEvd05HY1FSL1JBQUFBQUFBQUFBQUR3VkJnWGdMQ3dzaEFpQUJRZUsrSldvaUFVSC8vejl4UVo3Qm12OERhcTFDSUlZZ0E0Uy9SQUFBQUFBQUFQQy9vQ0lGSUFWRUFBQUFBQUFBNEQraW9pRUdJQVVnQlVRQUFBQUFBQUFBUUtDaklnY2dCNklpQ0NBSW9pRUVJQUlnQVVFVWRtcTNJZ0JFQUFEZy9rSXU1aitpSUFVZ0FFUjJQSGsxN3pucVBhSWdCeUFHSUFRZ0JDQUVSSi9HZU5BSm1zTS9va1N2ZUk0ZHhYSE1QNkNpUkFUNmw1bVptZGsvb0tJZ0NDQUVJQVFnQkVSRVVqN2ZFdkhDUDZKRTNnUExsbVJHeHorZ29rUlpreUtVSkVuU1A2Q2lSSk5WVlZWVlZlVS9vS0tnb0tLZ0lBYWhvS0FMOFE4REMzOENmZ2g4QWtBQ1FBSkFJQUc5SWcxQ0lJaW5JZ1ZCLy8vLy93ZHhJZ01nRGFjaUJuSkZCRUJFQUFBQUFBQUE4RDhQQ3lBQXZTSU9RaUNJcHlFSElBNm5JZ2hGSWdvZ0IwR0FnTUQvQTBaeEJFQkVBQUFBQUFBQThEOFBDeUFIUWYvLy8vOEhjU0lFUVlDQXdQOEhUUVJBSUFoQkFFY2dCRUdBZ01EL0IwWnhJQU5CZ0lEQS93ZExja1VFUUNBR1FRQkhJQU5CZ0lEQS93ZEdJZ3R4UlFSQUFrQUNRQUpBSUFkQkFFZ2lDVVVOQUNBRFFmLy8vNWtFU3dSL1FRSWhBZ3dCQlNBRFFmLy92LzhEU3dSL0lBTkJGSFloQWlBRFFmLy8vNGtFU3dSQVFRSWdCa0d6Q0NBQ2F5SUNkaUlNUVFGeGEwRUFJQXdnQW5RZ0JrWWJJUUlNQXdzZ0JnUi9RUUFGUVFJZ0EwR1RDQ0FDYXlJQ2RpSUdRUUZ4YTBFQUlBWWdBblFnQTBZYklRSU1CQXNGREFJTEN5RUNEQUlMSUFaRkRRQU1BUXNnQ3dSQUlBUkJnSURBZ0h4cUlBaHlSUVJBUkFBQUFBQUFBUEEvRHdzZ0JVRi9TaUVDSUFSQi8vKy8vd05MQkVBZ0FVUUFBQUFBQUFBQUFDQUNHdzhGUkFBQUFBQUFBQUFBSUFHYUlBSWJEd3NBQ3lBRFFZQ0F3UDhEUmdSQUlBQkVBQUFBQUFBQThEOGdBS01nQlVGL1Noc1BDeUFGUVlDQWdJQUVSZ1JBSUFBZ0FLSVBDeUFIUVg5S0lBVkJnSUNBL3dOR2NRUkFJQUNmRHdzTElBQ1pJUThnQ2dSQUlBUkZJQVJCZ0lDQWdBUnlRWUNBd1A4SFJuSUVRRVFBQUFBQUFBRHdQeUFQb3lBUElBVkJBRWdiSVFBZ0NVVUVRQ0FBRHdzZ0FpQUVRWUNBd0lCOGFuSUVRQ0FBbWlBQUlBSkJBVVliRHdzTUJRc0xBbndnQ1FSOEFrQUNRQUpBSUFJT0FnQUJBZ3NNQnd0RUFBQUFBQUFBOEw4TUFndEVBQUFBQUFBQThEOE1BUVZFQUFBQUFBQUE4RDhMQ3lFUkFud2dBMEdBZ0lDUEJFc0VmQ0FEUVlDQXdKOEVTd1JBSUFSQmdJREEvd05KQkVBakNrUUFBQUFBQUFBQUFDQUZRUUJJR3c4Rkl3cEVBQUFBQUFBQUFBQWdCVUVBU2hzUEN3QUxJQVJCLy8rLy93TkpCRUFnRVVTY2RRQ0lQT1EzZnFKRW5IVUFpRHprTjM2aUlCRkVXZlA0d2g5dXBRR2lSRm56K01JZmJxVUJvaUFGUVFCSUd3OExJQVJCZ0lEQS93Tk5CRUFnRDBRQUFBQUFBQUR3djZBaUFFUUFBQUJnUnhYM1A2SWlFQ0FBUkVUZlhmZ0xybFErb2lBQUlBQ2lSQUFBQUFBQUFPQS9JQUJFVlZWVlZWVlYxVDhnQUVRQUFBQUFBQURRUDZLaG9xR2lSUDZDSzJWSEZmYy9vcUVpQUtDOVFvQ0FnSUJ3Zzc4aUVpRVBJQklnRUtFTUFnc2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpSUJGRVdmUDR3aDl1cFFHaVJGbnorTUlmYnFVQm9pQUZRUUJLR3c4RklBOUVBQUFBQUFBQVFFT2lJZ0M5UWlDSXB5QUVJQVJCZ0lEQUFFa2lCUnNoQWtITWQwR0JlQ0FGR3lBQ1FSUjFhaUVESUFKQi8vOC9jU0lFUVlDQXdQOERjaUVDSUFSQmo3RU9TUVJBUVFBaEJBVWdCRUg2N0M1SklnWWhCQ0FESUFaQkFYTkJBWEZxSVFNZ0FpQUNRWUNBUUdvZ0Joc2hBZ3NnQkVFRGRFR3dFMm9yQXdBaUZDQUNyVUlnaGlBQUlBOGdCUnU5UXYvLy8vOFBnNFMvSWhBZ0JFRURkRUdRRTJvckF3QWlFcUVpRTBRQUFBQUFBQUR3UHlBU0lCQ2dveUlWb2lJUHZVS0FnSUNBY0lPL0lnQWdBQ0FBb2lJV1JBQUFBQUFBQUFoQW9DQVBJQUNnSUJVZ0V5QUNRUUYxUVlDQWdJQUNja0dBZ0NCcUlBUkJFblJxclVJZ2hyOGlFeUFBb3FFZ0VDQVRJQktob1NBQW9xR2lJaENpSUE4Z0Q2SWlBQ0FBb2lBQUlBQWdBQ0FBSUFCRTcwNUZTaWgreWoraVJHWGJ5Wk5LaHMwL29LSkVBVUVkcVdCMDBUK2dva1JOSm85UlZWWFZQNkNpUlArcmI5dTJiZHMvb0tKRUF6TXpNek16NHorZ29xQWlFcUM5UW9DQWdJQndnNzhpQUtJaUV5QVFJQUNpSUE4Z0VpQUFSQUFBQUFBQUFBakFvQ0FXb2FHaW9DSVBvTDFDZ0lDQWdIQ0R2eUlBUkFBQUFPQUp4KzQvb2lJUUlBUkJBM1JCb0JOcUt3TUFJQThnQUNBVG9hRkUvUU02M0FuSDdqK2lJQUJFOVFGYkZPQXZQajZpb2FBaUFLQ2dJQU8zSWhLZ3ZVS0FnSUNBY0lPL0loTWhEeUFUSUJLaElCU2hJQkNoQ3dzaEVDQUFJQkNoSUFHaUlBRWdEVUtBZ0lDQWNJTy9JZ0NoSUEraW9DRUJJQThnQUtJaUFDQUJvQ0lQdlNJTlFpQ0lweUVDSUEybklRTWdBa0gvLzcrRUJFb0VRQ0FDUVlDQXdQdDdhaUFEY2lBQlJQNkNLMlZIRlpjOG9DQVBJQUNoWkhJTkJnVWdBa0dBK1AvL0IzRkIvNWZEaEFSTEJFQWdBa0dBNkx6N0Eyb2dBM0lnQVNBUElBQ2haWElOQmdzTElCRWdBa0gvLy8vL0IzRWlBMEdBZ0lEL0Ewc0VmeUFBUVlDQVFFR0FnTUFBSUFOQkZIWkJnbmhxZGlBQ2FpSURRUlIyUWY4UGNTSUVRWUY0YW5VZ0EzR3RRaUNHdjZFaUR5RUFJQUVnRDZDOUlRMUJBQ0FEUWYvL1AzRkJnSURBQUhKQmt3Z2dCR3QySWdOcklBTWdBa0VBU0JzRlFRQUxJZ0pCRkhSRUFBQUFBQUFBOEQ4Z0RVS0FnSUNBY0lPL0lnOUVBQUFBQUVNdTVqK2lJaEFnQVNBUElBQ2hvVVR2T2ZyK1FpN21QNklnRDBRNWJLZ01ZVndnUHFLaElnK2dJZ0FnQUNBQUlBQ2lJZ0VnQVNBQklBRWdBVVRRcEw1eWFUZG1QcUpFOFd2U3hVRzl1NzZnb2tRczNpV3ZhbFlSUDZDaVJKTzl2aFpzd1dhL29LSkVQbFZWVlZWVnhUK2dvcUVpQWFJZ0FVUUFBQUFBQUFBQXdLQ2pJQThnQUNBUW9hRWlBU0FBSUFHaW9LRWdBS0doSWdDOUlnMUNJSWluYWlJRFFZQ0F3QUJJQkh3Z0FDQUNFR1VGSUFPdFFpQ0dJQTFDLy8vLy93K0RoTDhMSWdDaUR3c0xDeUFBSUFHZ0R3c2dBQ0FBb1NJQUlBQ2pEd3NnRVVSWjgvakNIMjZsQWFKRVdmUDR3aDl1cFFHaUR3c2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpQ3dNQUFRdkRBd0VEZnlBQ1FZREFBRTRFUUNBQUlBRWdBaEFIRHdzZ0FDRUVJQUFnQW1vaEF5QUFRUU54SUFGQkEzRkdCRUFEUUNBQVFRTnhCRUFnQWtVRVFDQUVEd3NnQUNBQkxBQUFPZ0FBSUFCQkFXb2hBQ0FCUVFGcUlRRWdBa0VCYXlFQ0RBRUxDeUFEUVh4eElnSkJRR29oQlFOQUlBQWdCVXdFUUNBQUlBRW9BZ0EyQWdBZ0FDQUJLQUlFTmdJRUlBQWdBU2dDQ0RZQ0NDQUFJQUVvQWd3MkFnd2dBQ0FCS0FJUU5nSVFJQUFnQVNnQ0ZEWUNGQ0FBSUFFb0FoZzJBaGdnQUNBQktBSWNOZ0ljSUFBZ0FTZ0NJRFlDSUNBQUlBRW9BaVEyQWlRZ0FDQUJLQUlvTmdJb0lBQWdBU2dDTERZQ0xDQUFJQUVvQWpBMkFqQWdBQ0FCS0FJME5nSTBJQUFnQVNnQ09EWUNPQ0FBSUFFb0FqdzJBandnQUVGQWF5RUFJQUZCUUdzaEFRd0JDd3NEUUNBQUlBSklCRUFnQUNBQktBSUFOZ0lBSUFCQkJHb2hBQ0FCUVFScUlRRU1BUXNMQlNBRFFRUnJJUUlEUUNBQUlBSklCRUFnQUNBQkxBQUFPZ0FBSUFBZ0FTd0FBVG9BQVNBQUlBRXNBQUk2QUFJZ0FDQUJMQUFET2dBRElBQkJCR29oQUNBQlFRUnFJUUVNQVFzTEN3TkFJQUFnQTBnRVFDQUFJQUVzQUFBNkFBQWdBRUVCYWlFQUlBRkJBV29oQVF3QkN3c2dCQXVZQWdFRWZ5QUFJQUpxSVFRZ0FVSC9BWEVoQVNBQ1FjTUFUZ1JBQTBBZ0FFRURjUVJBSUFBZ0FUb0FBQ0FBUVFGcUlRQU1BUXNMSUFSQmZIRWlCVUZBYWlFR0lBRWdBVUVJZEhJZ0FVRVFkSElnQVVFWWRISWhBd05BSUFBZ0Jrd0VRQ0FBSUFNMkFnQWdBQ0FETmdJRUlBQWdBellDQ0NBQUlBTTJBZ3dnQUNBRE5nSVFJQUFnQXpZQ0ZDQUFJQU0yQWhnZ0FDQUROZ0ljSUFBZ0F6WUNJQ0FBSUFNMkFpUWdBQ0FETmdJb0lBQWdBellDTENBQUlBTTJBakFnQUNBRE5nSTBJQUFnQXpZQ09DQUFJQU0yQWp3Z0FFRkFheUVBREFFTEN3TkFJQUFnQlVnRVFDQUFJQU0yQWdBZ0FFRUVhaUVBREFFTEN3c0RRQ0FBSUFSSUJFQWdBQ0FCT2dBQUlBQkJBV29oQUF3QkN3c2dCQ0FDYXd0VkFRSi9JQUJCQUVvakJTZ0NBQ0lCSUFCcUlnQWdBVWh4SUFCQkFFaHlCRUFRQXhwQkRCQUZRWDhQQ3lNRklBQTJBZ0FRQWlFQ0lBQWdBa29FUUJBQlJRUkFJd1VnQVRZQ0FFRU1FQVZCZnc4TEN5QUJDdzRBSUFFZ0FpQUFRUU54RVFBQUN3Z0FRUUFRQUVFQUN3dkFFUVFBUVlFSUM3WUtBUUlDQXdNREF3UUVCQVFFQkFRRUFBRUFBSUFBQUFCV0FBQUFRQUFBQUQ2MDVETUprZk16aTdJQk5Ed2dDalFqR2hNMFlLa2NOS2ZYSmpSTHJ6RTBVRHM5TkhDSFNUUWpvRlkwdUpKa05GVnRjelNJbjRFMC9BdUtOSk1Fa3pScGtwdzBNcittTkQrVnNUU1RINzAwNUduSk5LMkExalEyY2VRMHBrbnpOSWlNQVRYQTl3azFCdThTTlhaN0hEWEFwaVkxTjNzeE5kb0RQVFZlVEVrMU8yRldOYmxQWkRYOEpYTTFpbm1CTlliamlUVjgyWkkxaFdTY05WS09walV6WWJFMUplaThOZHd1eVRYT1FkWTFRUzdrTlZjQzh6V1BaZ0UyVDg4Sk52WERFamFZVFJ3MjZIVW1OakpITVRaMHpEdzJYaEZKTm1VaVZqYk9ER1EydU41eU5wZFRnVFljdTRrMmNxNlNOcTgybkRhQlhhWTJOUzJ4TnNld3ZEYms4OGcyQVFQV05tRHI0ellldS9JMm9rQUJOK3VtQ1RmeG1CSTN5UjhjTng1RkpqYzlFekUzSHBVOE4yL1dTRGVpNDFVMzk4bGpONG1YY2pldkxZRTN2cEtKTjNTRGtqZm1DSnczdml5bU4wZjVzRGQ1ZWJ3My9yaklOMGZFMVRlU3FPTTMrSFB5TjhBYUFUaVRmZ2s0K1cwU09BYnlHemhpRkNZNFZ0OHdPTmhkUERpU20wZzQ4cVJWT0RPSFl6aHVVSEk0MHdlQk9HdHFpVGlDV0pJNEt0dWJPQW44cFRob3hiQTRPMEs4T0NsK3lEaWdoZFU0MldYak9PZ3M4ampwOUFBNVJsWUpPUTVERWpsUnhCczV0ZU1sT1grck1EbWlKanc1eFdCSU9WTm1WVG1EUkdNNWFBbHlPUUhpZ0Rra1FvazVuUzJTT1h1dG16bGp5NlU1bVpHd09RMEx2RGxtUThnNUMwZlZPVElqNHpudDVmRTVIYzhBT2dVdUNUb3dHQkk2cVpZYk9oV3pKVHEzZHpBNmZPODdPZ29tU0RySEoxVTY1Z0ZqT25qQ2NUbzd2SUE2NlJtSk9zWUNranJiZjVzNnk1cWxPdGhkc0RydjA3czZzd2pJT29nSTFUcWY0T0k2QjUveE9seXBBRHZRQlFrN1h1MFJPdzlwR3p1RWdpVTcvVU13TzJlNE96dGg2MGM3VGVsVU8xMi9ZanVjZTNFN2Y1YUFPN3J4aUR2NTE1RTdSMUtiTzBGcXBUc25LckE3NHB5N094TE94enNYeXRRN0lKN2lPelZZOFR1bWd3QThwOTBJUEpqQ0VUeUNPeHM4QVZJbFBGUVFNRHhoZ1RzOHlMQkhQT1dxVkR6b2ZHSTgxRFJ4UE05d2dEeVd5WWc4T3EyUlBNQWttenpGT2FVOGhmYXZQT1ZsdXp5Q2s4Yzh1WXZVUExSYjRqeDVFZkU4KzEwQVBZbTFDRDNmbHhFOUFnNGJQWTBoSlQyNTNDODliVW83UFVCMlJ6MlJiRlE5aFRwaVBTTHVjRDBxUzRBOWY2R0lQWWlDa1QxSTk1bzlXQW1sUGZMQ3J6MzRMcnM5QTFuSFBXMU4xRDFjR2VJOTBjcndQVnM0QUQ1M2pRZytNMjBSUHBEZ0dqNG44U1ErTHFrdlBvY1RPejdLTzBjK1RTNVVQamY0WVQ2RXAzQStqeVdBUG5ONWlEN2lWNUUrM01tYVB2bllwRDV0ajY4K0cvaTZQcFVleHo0ekQ5UStGOWZoUGoyRThEN0dFZ0EvY21VSVA1TkNFVDhyc3hvL3pzQWtQN0YxTHoreTNEby9aUUZIUHgzd1V6Lzd0V0UvKzJCd1B3QUFnRDhEQUFBQUJBQUFBQVFBQUFBR0FBQUFnL21pQUVST2JnRDhLUlVBMFZjbkFOMDA5UUJpMjhBQVBKbVZBRUdRUXdCalVmNEF1OTZyQUxkaHhRQTZiaVFBMGsxQ0FFa0c0QUFKNmk0QUhKTFJBT3NkL2dBcHNSd0E2RDZuQVBVMWdnQkV1eTRBbk9tRUFMUW1jQUJCZmw4QTFwRTVBRk9ET1FDYzlEa0FpMStFQUNqNXZRRDRIenNBM3YrWEFBK1lCUUFSTCs4QUNscUxBRzBmYlFEUGZqWUFDY3NuQUVaUHR3Q2VaajhBTGVwZkFMb25kUURsNjhjQVBYdnhBUGM1QndDU1Vvb0ErMnZxQUIreFh3QUlYWTBBTUFOV0FIdjhSZ0R3cTJzQUlMelBBRGIwbWdEanFSMEFYbUdSQUFnYjVnQ0ZtV1VBb0JSZkFJMUFhQUNBMlA4QUozTk5BQVlHTVFES1ZoVUF5YWh6QUh2aVlBQnJqTUFBUWNNU0MxMUEreUg1UHdBQUFBQXRSSFErQUFBQWdKaEcrRHdBQUFCZ1VjeDRPd0FBQUlDREcvQTVBQUFBUUNBbGVqZ0FBQUNBSW9Mak5nQUFBQUFkODJrMUFBQUFBQUFBNEQ4QUFBQUFBQURndndBQUFBQUFBUEEvQUFBQUFBQUErRDhBUWFnVEN3Z0cwTTlENi8xTVBnQkJ1eE1MaWdaQUE3amlQMDluWjFNdUwzTjBZbDkyYjNKaWFYTXVZd0JtTFQ1aGJHeHZZeTVoYkd4dlkxOWlkV1ptWlhKZmJHVnVaM1JvWDJsdVgySjVkR1Z6SUQwOUlHWXRQblJsYlhCZmIyWm1jMlYwQUhadmNtSnBjMTlrWldOdlpHVmZhVzVwZEdsaGJBQm1MVDVpZVhSbGMxOXBibDl6WldjZ1BpQXdBR2RsZERoZmNHRmphMlYwWDNKaGR3Qm1MVDVpZVhSbGMxOXBibDl6WldjZ1BUMGdNQUJ1WlhoMFgzTmxaMjFsYm5RQWRtOXlZbWx6WDJSbFkyOWtaVjl3WVdOclpYUmZjbVZ6ZEFBaFl5MCtjM0JoY25ObEFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5elkyRnNZWEpmY21GM0FDRmpMVDV6Y0dGeWMyVWdmSHdnZWlBOElHTXRQbk52Y25SbFpGOWxiblJ5YVdWekFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5a1pXbHVkR1Z5YkdWaGRtVmZjbVZ3WldGMEFIb2dQQ0JqTFQ1emIzSjBaV1JmWlc1MGNtbGxjd0JqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25RQUtHNGdKaUF6S1NBOVBTQXdBR2x0WkdOMFgzTjBaWEF6WDJsMFpYSXdYMnh2YjNBQU1BQm5aWFJmZDJsdVpHOTNBR1l0UG5SbGJYQmZiMlptYzJWMElEMDlJR1l0UG1Gc2JHOWpMbUZzYkc5algySjFabVpsY2w5c1pXNW5kR2hmYVc1ZllubDBaWE1BYzNSaGNuUmZaR1ZqYjJSbGNnQjJiM0ppYVhOakxUNXpiM0owWldSZlpXNTBjbWxsY3lBOVBTQXdBR052YlhCMWRHVmZZMjlrWlhkdmNtUnpBSG9nUGowZ01DQW1KaUI2SUR3Z016SUFiR1Z1VzJsZElENDlJREFnSmlZZ2JHVnVXMmxkSUR3Z016SUFZWFpoYVd4aFlteGxXM2xkSUQwOUlEQUFheUE5UFNCakxUNXpiM0owWldSZlpXNTBjbWxsY3dCamIyMXdkWFJsWDNOdmNuUmxaRjlvZFdabWJXRnVBR010UG5OdmNuUmxaRjlqYjJSbGQyOXlaSE5iZUYwZ1BUMGdZMjlrWlFCc1pXNGdJVDBnVGs5ZlEwOUVSUUJwYm1Oc2RXUmxYMmx1WDNOdmNuUUFjRzkzS0NobWJHOWhkQ2tnY2lzeExDQmthVzBwSUQ0Z1pXNTBjbWxsY3dCc2IyOXJkWEF4WDNaaGJIVmxjd0FvYVc1MEtTQm1iRzl2Y2lod2IzY29LR1pzYjJGMEtTQnlMQ0JrYVcwcEtTQThQU0JsYm5SeWFXVnpBT29QQkc1aGJXVUI0ZzkrQUFWaFltOXlkQUVOWlc1c1lYSm5aVTFsYlc5eWVRSU9aMlYwVkc5MFlXeE5aVzF2Y25rREYyRmliM0owVDI1RFlXNXViM1JIY205M1RXVnRiM0o1QkE1ZlgxOWhjM05sY25SZlptRnBiQVVMWDE5ZmMyVjBSWEp5VG04R0JsOWhZbTl5ZEFjV1gyVnRjMk55YVhCMFpXNWZiV1Z0WTNCNVgySnBad2dRWDE5bmNtOTNWMkZ6YlUxbGJXOXllUWtLYzNSaFkydEJiR3h2WXdvSmMzUmhZMnRUWVhabEN3eHpkR0ZqYTFKbGMzUnZjbVVNRTJWemRHRmliR2x6YUZOMFlXTnJVM0JoWTJVTkNITmxkRlJvY21WM0RndHpaWFJVWlcxd1VtVjBNQThMWjJWMFZHVnRjRkpsZERBUUVWOXpkR0pmZG05eVltbHpYMk5zYjNObEVRNWZkbTl5WW1selgyUmxhVzVwZEJJTFgzTmxkSFZ3WDJaeVpXVVRHbDl6ZEdKZmRtOXlZbWx6WDJac2RYTm9YM0IxYzJoa1lYUmhGQ0ZmYzNSaVgzWnZjbUpwYzE5a1pXTnZaR1ZmWm5KaGJXVmZjSFZ6YUdSaGRHRVZCbDlsY25KdmNoWWdYM1p2Y21KcGMxOXpaV0Z5WTJoZlptOXlYM0JoWjJWZmNIVnphR1JoZEdFWEdGOXBjMTkzYUc5c1pWOXdZV05yWlhSZmNISmxjMlZ1ZEJnVlgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBHUXhmWjJWME9GOXdZV05yWlhRYUZGOTJiM0ppYVhOZlptbHVhWE5vWDJaeVlXMWxHeGxmYzNSaVgzWnZjbUpwYzE5dmNHVnVYM0IxYzJoa1lYUmhIQXhmZG05eVltbHpYMmx1YVhRZERsOXpkR0Z5ZEY5a1pXTnZaR1Z5SGcxZmRtOXlZbWx6WDJGc2JHOWpIeHRmYzNSaVgzWnZjbUpwYzE5blpYUmZabWxzWlY5dlptWnpaWFFnRTE5dFlYbGlaVjl6ZEdGeWRGOXdZV05yWlhRaERWOW1iSFZ6YUY5d1lXTnJaWFFpQlY5blpYUnVJd1pmWjJWME16SWtFMTl6ZEdKZmRtOXlZbWx6WDJwelgyOXdaVzRsRkY5emRHSmZkbTl5WW1selgycHpYMk5zYjNObEpoZGZjM1JpWDNadmNtSnBjMTlxYzE5amFHRnVibVZzY3ljYVgzTjBZbDkyYjNKaWFYTmZhbk5mYzJGdGNHeGxYM0poZEdVb0ZWOXpkR0pmZG05eVltbHpYMnB6WDJSbFkyOWtaU2tOWDJOeVl6TXlYM1Z3WkdGMFpTb1dYM1p2Y21KcGMxOWtaV052WkdWZmFXNXBkR2xoYkNzYVgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBYM0psYzNRc0NWOW5aWFJmWW1sMGN5MEZYMmxzYjJjdUVGOW5aWFE0WDNCaFkydGxkRjl5WVhjdkRWOXVaWGgwWDNObFoyMWxiblF3QlY5blpYUTRNUXRmYzNSaGNuUmZjR0ZuWlRJUVgyTmhjSFIxY21WZmNHRjBkR1Z5YmpNZFgzTjBZWEowWDNCaFoyVmZibTlmWTJGd2RIVnlaWEJoZEhSbGNtNDBEVjl3Y21Wd1gyaDFabVp0WVc0MUcxOWpiMlJsWW05dmExOWtaV052WkdWZmMyTmhiR0Z5WDNKaGR6WU9YM0J5WldScFkzUmZjRzlwYm5RM0QxOWtaV052WkdWZmNtVnphV1IxWlRnSlgyUnZYMlpzYjI5eU9RMWZhVzUyWlhKelpWOXRaR04wT2d4ZlltbDBYM0psZG1WeWMyVTdFVjl0WVd0bFgySnNiMk5yWDJGeWNtRjVQQkpmYzJWMGRYQmZkR1Z0Y0Y5dFlXeHNiMk05SkY5amIyUmxZbTl2YTE5a1pXTnZaR1ZmWkdWcGJuUmxjbXhsWVhabFgzSmxjR1ZoZEQ0UFgzSmxjMmxrZFdWZlpHVmpiMlJsUHhWZlkyOWtaV0p2YjJ0ZlpHVmpiMlJsWDNOMFpYQkFFRjlqYjJSbFltOXZhMTlrWldOdlpHVkJGbDlqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25SQ0NsOWtjbUYzWDJ4cGJtVkRGMTlwYldSamRGOXpkR1Z3TTE5cGRHVnlNRjlzYjI5d1JCbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjbDlzYjI5d1JSbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1JoOWZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1gyeGtOalUwUndoZmFYUmxjbDgxTkVnTFgyZGxkRjkzYVc1a2IzZEpFRjkyYjNKaWFYTmZkbUZzYVdSaGRHVktEVjl6ZEdGeWRGOXdZV05yWlhSTEJWOXphMmx3VEF0ZlkzSmpNekpmYVc1cGRFME5YM05sZEhWd1gyMWhiR3h2WTA0UVgzTmxkSFZ3WDNSbGJYQmZabkpsWlU4U1gyTnZiWEIxZEdWZlkyOWtaWGR2Y21SelVCZGZZMjl0Y0hWMFpWOXpiM0owWldSZmFIVm1abTFoYmxFY1gyTnZiWEIxZEdWZllXTmpaV3hsY21GMFpXUmZhSFZtWm0xaGJsSVBYMlpzYjJGME16SmZkVzV3WVdOclV3OWZiRzl2YTNWd01WOTJZV3gxWlhOVURsOXdiMmx1ZEY5amIyMXdZWEpsVlFwZmJtVnBaMmhpYjNKelZnOWZhVzVwZEY5aWJHOWphM05wZW1WWENsOWhaR1JmWlc1MGNubFlFRjlwYm1Oc2RXUmxYMmx1WDNOdmNuUlpEMTkxYVc1ME16SmZZMjl0Y0dGeVpWb1lYMk52YlhCMWRHVmZkSGRwWkdSc1pWOW1ZV04wYjNKeld3OWZZMjl0Y0hWMFpWOTNhVzVrYjNkY0UxOWpiMjF3ZFhSbFgySnBkSEpsZG1WeWMyVmRCMTl6Y1hWaGNtVmVCMTl0WVd4c2IyTmZCVjltY21WbFlBaGZjbVZoYkd4dlkyRVNYM1J5ZVY5eVpXRnNiRzlqWDJOb2RXNXJZZzVmWkdsemNHOXpaVjlqYUhWdWEyTVJYMTlmWlhKeWJtOWZiRzlqWVhScGIyNWtCMTl0WlcxamJYQmxCMTl6WTJGc1ltNW1CbDl4YzI5eWRHY0ZYM05wWm5Sb0JGOXphSEpwQ0Y5MGNtbHVhMnhsYWdSZmMyaHNhd1ZmY0c1MGVtd0lYMkZmWTNSNlgyeHRCbDlqZVdOc1pXNExYMTlmY21WdFgzQnBiekp2RVY5ZlgzSmxiVjl3YVc4eVgyeGhjbWRsY0FaZlgxOXphVzV4Qmw5c1pHVjRjSElHWDE5ZlkyOXpjd1JmWTI5emRBUmZjMmx1ZFFSZlpYaHdkZ1JmYkc5bmR3UmZjRzkzZUF0eWRXNVFiM04wVTJWMGMza0hYMjFsYldOd2VYb0hYMjFsYlhObGRIc0ZYM05pY210OEMyUjVia05oYkd4ZmFXbHBmUUppTUE9PSIpLGZ1bmN0aW9uKGwpe3JldHVybiBsLmNoYXJDb2RlQXQoMCl9KTt2YXIgRT1FIT09dm9pZCAwP0U6e30sWD17fTtmb3IoZSBpbiBFKUUuaGFzT3duUHJvcGVydHkoZSkmJihYW2VdPUVbZV0pO0UuYXJndW1lbnRzPVtdLEUudGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIixFLnF1aXQ9ZnVuY3Rpb24obCx1KXt0aHJvdyB1fSxFLnByZVJ1bj1bXSxFLnBvc3RSdW49W107dmFyIE89ITEsbkE9ITEsJD0hMSxWPSExO089dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsbkE9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsJD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBKYT09ImZ1bmN0aW9uIiYmIU8mJiFuQSxWPSFPJiYhJCYmIW5BO3ZhciBxPSIiO2Z1bmN0aW9uIHoobCl7cmV0dXJuIEUubG9jYXRlRmlsZT9FLmxvY2F0ZUZpbGUobCxxKTpxK2x9JD8ocT0iLyIsRS5yZWFkPWZ1bmN0aW9uKHUsZil7dmFyIHc7cmV0dXJuIEF8fChBPXZvaWQgMCksdHx8KHQ9dm9pZCAwKSx1PXQubm9ybWFsaXplKHUpLHc9QS5yZWFkRmlsZVN5bmModSksZj93OncudG9TdHJpbmcoKX0sRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPUUucmVhZCh1LCEwKTtyZXR1cm4gZi5idWZmZXJ8fChmPW5ldyBVaW50OEFycmF5KGYpKSxVQShmLmJ1ZmZlciksZn0scHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYoRS50aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxFLmFyZ3VtZW50cz1wcm9jZXNzLmFyZ3Yuc2xpY2UoMiksdHlwZW9mIG1vZHVsZTwidSIscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKGwpe2lmKCEobCBpbnN0YW5jZW9mIG90KSl0aHJvdyBsfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixmdW5jdGlvbihsLHUpe3Byb2Nlc3MuZXhpdCgxKX0pLEUucXVpdD1mdW5jdGlvbihsKXtwcm9jZXNzLmV4aXQobCl9LEUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9KTpWPyh0eXBlb2YgcmVhZDwidSImJihFLnJlYWQ9ZnVuY3Rpb24odSl7cmV0dXJuIHJlYWQodSl9KSxFLnJlYWRCaW5hcnk9ZnVuY3Rpb24odSl7dmFyIGY7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIodSkpOihVQSh0eXBlb2YoZj1yZWFkKHUsImJpbmFyeSIpKT09Im9iamVjdCIpLGYpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/RS5hcmd1bWVudHM9c2NyaXB0QXJnczp0eXBlb2YgYXJndW1lbnRzPCJ1IiYmKEUuYXJndW1lbnRzPWFyZ3VtZW50cyksdHlwZW9mIHF1aXQ9PSJmdW5jdGlvbiImJihFLnF1aXQ9ZnVuY3Rpb24obCl7cXVpdChsKX0pKTooT3x8bkEpJiYoTz9kb2N1bWVudC5jdXJyZW50U2NyaXB0JiYocT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyk6cT1zZWxmLmxvY2F0aW9uLmhyZWYscT1xLmluZGV4T2YoImJsb2I6IikhPT0wP3Euc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5qb2luKCIvIikrIi8iOiIiLEUucmVhZD1mdW5jdGlvbih1KXt2YXIgZj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGYub3BlbigiR0VUIix1LCExKSxmLnNlbmQobnVsbCksZi5yZXNwb25zZVRleHR9LG5BJiYoRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gZi5vcGVuKCJHRVQiLHUsITEpLGYucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsZi5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KGYucmVzcG9uc2UpfSksRS5yZWFkQXN5bmM9ZnVuY3Rpb24odSxmLHcpe3ZhciBVPW5ldyBYTUxIdHRwUmVxdWVzdDtVLm9wZW4oIkdFVCIsdSwhMCksVS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixVLm9ubG9hZD1mdW5jdGlvbigpe2lmKFUuc3RhdHVzPT0yMDB8fFUuc3RhdHVzPT0wJiZVLnJlc3BvbnNlKXtmKFUucmVzcG9uc2UpO3JldHVybn13KCl9LFUub25lcnJvcj13LFUuc2VuZChudWxsKX0sRS5zZXRXaW5kb3dUaXRsZT1mdW5jdGlvbihsKXtkb2N1bWVudC50aXRsZT1sfSk7dmFyIHRBPUUucHJpbnR8fCh0eXBlb2YgY29uc29sZTwidSI/Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTp0eXBlb2YgcHJpbnQ8InUiP3ByaW50Om51bGwpLGlBPUUucHJpbnRFcnJ8fCh0eXBlb2YgcHJpbnRFcnI8InUiP3ByaW50RXJyOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuLmJpbmQoY29uc29sZSl8fHRBKTtmb3IoZSBpbiBYKVguaGFzT3duUHJvcGVydHkoZSkmJihFW2VdPVhbZV0pO2Z1bmN0aW9uIFAobCl7dmFyIHU9QztyZXR1cm4gQz1DK2wrMTUmLTE2LHV9ZnVuY3Rpb24gRyhsKXt2YXIgdT1vW0Q+PjJdLGY9dStsKzE1Ji0xNjtyZXR1cm4gb1tEPj4yXT1mLGY+PXBBJiYhbnQoKT8ob1tEPj4yXT11LDApOnV9ZnVuY3Rpb24gYihsLHUpe3JldHVybiB1fHwodT0xNiksbD1NYXRoLmNlaWwobC91KSp1fWZ1bmN0aW9uIEsobCl7c3dpdGNoKGwpe2Nhc2UiaTEiOmNhc2UiaTgiOnJldHVybiAxO2Nhc2UiaTE2IjpyZXR1cm4gMjtjYXNlImkzMiI6Y2FzZSJmbG9hdCI6cmV0dXJuIDQ7Y2FzZSJpNjQiOmNhc2UiZG91YmxlIjpyZXR1cm4gODtkZWZhdWx0OmlmKGxbbC5sZW5ndGgtMV09PT0iKiIpcmV0dXJuIDQ7aWYobFswXSE9PSJpIilyZXR1cm4gMDt2YXIgdT1wYXJzZUludChsLnN1YnN0cigxKSk7cmV0dXJuIFVBKHUlOD09MCksdS84fX1mdW5jdGlvbiBlQShsKXtlQS5zaG93bnx8KGVBLnNob3duPXt9KSxlQS5zaG93bltsXXx8KGVBLnNob3duW2xdPTEsaUEobCkpfVg9dm9pZCAwO3ZhciBhQT17ImY2NC1yZW0iOmZ1bmN0aW9uKGwsdSl7cmV0dXJuIGwldX0sZGVidWdnZXI6ZnVuY3Rpb24oKXt9fSxHQT1bXTtmdW5jdGlvbiBzZShsLHUpe2Zvcih2YXIgZj0wLHc9Zjt3PGYrMDt3KyspaWYoIUdBW3ddKXJldHVybiBHQVt3XT1sLDErdzt0aHJvdyJGaW5pc2hlZCB1cCBhbGwgcmVzZXJ2ZWQgZnVuY3Rpb24gcG9pbnRlcnMuIFVzZSBhIGhpZ2hlciB2YWx1ZSBmb3IgUkVTRVJWRURfRlVOQ1RJT05fUE9JTlRFUlMuIn1mdW5jdGlvbiB6QShsKXtHQVtsLTFdPW51bGx9dmFyIFdBPXt9O2Z1bmN0aW9uIE5lKGwsdSl7aWYobCl7VUEodSksV0FbdV18fChXQVt1XT17fSk7dmFyIGY9V0FbdV07cmV0dXJuIGZbbF18fCh1Lmxlbmd0aD09PTE/ZltsXT1mdW5jdGlvbigpe3JldHVybiBBQSh1LGwpfTp1Lmxlbmd0aD09PTI/ZltsXT1mdW5jdGlvbihVKXtyZXR1cm4gQUEodSxsLFtVXSl9OmZbbF09ZnVuY3Rpb24oKXtyZXR1cm4gQUEodSxsLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSksZltsXX19ZnVuY3Rpb24gYWUobCx1LGYpe3JldHVybiBmPysobD4+PjApKzQyOTQ5NjcyOTYqKyh1Pj4+MCk6KyhsPj4+MCkrNDI5NDk2NzI5NiorKDB8dSl9ZnVuY3Rpb24gQUEobCx1LGYpe3JldHVybiBmJiZmLmxlbmd0aD9FWyJkeW5DYWxsXyIrbF0uYXBwbHkobnVsbCxbdV0uY29uY2F0KGYpKTpFWyJkeW5DYWxsXyIrbF0uY2FsbChudWxsLHUpfXZhciBCQT0wLF9BPTA7ZnVuY3Rpb24gVUEobCx1KXtsfHxJZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit1KX1mdW5jdGlvbiBDZShsKXt2YXIgdT1FWyJfIitsXTtyZXR1cm4gVUEodSwiQ2Fubm90IGNhbGwgdW5rbm93biBmdW5jdGlvbiAiK2wrIiwgbWFrZSBzdXJlIGl0IGlzIGV4cG9ydGVkIiksdX12YXIgaGU9e3N0YWNrU2F2ZTpmdW5jdGlvbigpe2duKCl9LHN0YWNrUmVzdG9yZTpmdW5jdGlvbigpe0luKCl9LGFycmF5VG9DOmZ1bmN0aW9uKGwpe3ZhciB1LGYsdz13dChsLmxlbmd0aCk7cmV0dXJuIHU9bCxmPXcscy5zZXQodSxmKSx3fSxzdHJpbmdUb0M6ZnVuY3Rpb24obCl7dmFyIHU9MDtpZihsIT1udWxsJiZsIT09MCl7dmFyIGY9KGwubGVuZ3RoPDwyKSsxO3U9d3QoZiksZXQobCx1LGYpfXJldHVybiB1fX0sJGU9e3N0cmluZzpoZS5zdHJpbmdUb0MsYXJyYXk6aGUuYXJyYXlUb0N9O2Z1bmN0aW9uIFVlKGwsdSxmLHcsVSl7dmFyIF89Q2UobCksb0E9W10sSD0wO2lmKHcpZm9yKHZhciBEQT0wO0RBPHcubGVuZ3RoO0RBKyspe3ZhciBsQT0kZVtmW0RBXV07bEE/KEg9PT0wJiYoSD1nbigpKSxvQVtEQV09bEEod1tEQV0pKTpvQVtEQV09d1tEQV19dmFyIGRBLENBPV8uYXBwbHkobnVsbCxvQSk7cmV0dXJuIENBPShkQT1DQSx1PT09InN0cmluZyI/bGUoZEEpOnU9PT0iYm9vbGVhbiI/ISFkQTpkQSksSCE9PTAmJkluKEgpLENBfWZ1bmN0aW9uIEF0KGwsdSxmLHcpe3N3aXRjaCgoZj1mfHwiaTgiKS5jaGFyQXQoZi5sZW5ndGgtMSk9PT0iKiImJihmPSJpMzIiKSxmKXtjYXNlImkxIjpjYXNlImk4IjpzW2w+PjBdPXU7YnJlYWs7Y2FzZSJpMTYiOnJbbD4+MV09dTticmVhaztjYXNlImkzMiI6b1tsPj4yXT11O2JyZWFrO2Nhc2UiaTY0Ijp0ZW1wSTY0PVt1Pj4+MCwrVGEodGVtcERvdWJsZT11KT49MT90ZW1wRG91YmxlPjA/KDB8SGEoK2hzKHRlbXBEb3VibGUvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fit4YSgodGVtcERvdWJsZS0rKH5+dGVtcERvdWJsZT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MF0sb1tsPj4yXT10ZW1wSTY0WzBdLG9bbCs0Pj4yXT10ZW1wSTY0WzFdO2JyZWFrO2Nhc2UiZmxvYXQiOkJbbD4+Ml09dTticmVhaztjYXNlImRvdWJsZSI6ZFtsPj4zXT11O2JyZWFrO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICIrZil9fWZ1bmN0aW9uIEFuKGwsdSxmKXtzd2l0Y2goKHU9dXx8Imk4IikuY2hhckF0KHUubGVuZ3RoLTEpPT09IioiJiYodT0iaTMyIiksdSl7Y2FzZSJpMSI6Y2FzZSJpOCI6cmV0dXJuIHNbbD4+MF07Y2FzZSJpMTYiOnJldHVybiByW2w+PjFdO2Nhc2UiaTMyIjpjYXNlImk2NCI6cmV0dXJuIG9bbD4+Ml07Y2FzZSJmbG9hdCI6cmV0dXJuIEJbbD4+Ml07Y2FzZSJkb3VibGUiOnJldHVybiBkW2w+PjNdO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIrdSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZW4obCx1LGYsdyl7dHlwZW9mIGw9PSJudW1iZXIiPyhfPSEwLG9BPWwpOihfPSExLG9BPWwubGVuZ3RoKTt2YXIgVT10eXBlb2YgdT09InN0cmluZyI/dTpudWxsO2lmKEg9Zj09ND93Olt0eXBlb2YgRHQ9PSJmdW5jdGlvbiI/RHQ6UCx3dCxQLEddW2Y9PT12b2lkIDA/MjpmXShNYXRoLm1heChvQSxVPzE6dS5sZW5ndGgpKSxfKXtmb3Iodz1ILFVBKCgzJkgpPT0wKSxEQT1IKygtNCZvQSk7dzxEQTt3Kz00KW9bdz4+Ml09MDtmb3IoREE9SCtvQTt3PERBOylzW3crKz4+MF09MDtyZXR1cm4gSH1pZihVPT09Imk4IilyZXR1cm4gbC5zdWJhcnJheXx8bC5zbGljZT9hLnNldChsLEgpOmEuc2V0KG5ldyBVaW50OEFycmF5KGwpLEgpLEg7Zm9yKHZhciBfLG9BLEgsREEsbEEsZEEsQ0EsVz0wO1c8b0E7KXt2YXIgTEE9bFtXXTtpZigobEE9VXx8dVtXXSk9PT0wKXtXKys7Y29udGludWV9bEE9PSJpNjQiJiYobEE9ImkzMiIpLEF0KEgrVyxMQSxsQSksQ0EhPT1sQSYmKGRBPUsobEEpLENBPWxBKSxXKz1kQX1yZXR1cm4gSH1mdW5jdGlvbiBUZShsKXtyZXR1cm4gUT9vbj9EdChsKTpHKGwpOlAobCl9ZnVuY3Rpb24gbGUobCx1KXtpZih1PT09MHx8IWwpcmV0dXJuIiI7Zm9yKHZhciBmLHcsVSxfPTAsb0E9MDtffD13PWFbbCtvQT4+MF0sKHchPTB8fHUpJiYob0ErKywhdXx8b0EhPXUpOyk7dXx8KHU9b0EpO3ZhciBIPSIiO2lmKF88MTI4KXtmb3IoO3U+MDspVT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnN1YmFycmF5KGwsbCtNYXRoLm1pbih1LDEwMjQpKSksSD1IP0grVTpVLGwrPTEwMjQsdS09MTAyNDtyZXR1cm4gSH1yZXR1cm4gZj1sLChmdW5jdGlvbihsQSxkQSl7Zm9yKHZhciBDQT1kQTtsQVtDQV07KSsrQ0E7aWYoQ0EtZEE+MTYmJmxBLnN1YmFycmF5JiZmdClyZXR1cm4gZnQuZGVjb2RlKGxBLnN1YmFycmF5KGRBLENBKSk7Zm9yKHZhciBXLExBLFBBLEpBLHFBLHdlLEtBPSIiOzspe2lmKCEoVz1sQVtkQSsrXSkpcmV0dXJuIEtBO2lmKCEoMTI4JlcpKXtLQSs9U3RyaW5nLmZyb21DaGFyQ29kZShXKTtjb250aW51ZX1pZihMQT02MyZsQVtkQSsrXSwoMjI0JlcpPT0xOTIpe0tBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZXKTw8NnxMQSk7Y29udGludWV9aWYoUEE9NjMmbEFbZEErK10sKDI0MCZXKT09MjI0P1c9KDE1JlcpPDwxMnxMQTw8NnxQQTooSkE9NjMmbEFbZEErK10sKDI0OCZXKT09MjQwP1c9KDcmVyk8PDE4fExBPDwxMnxQQTw8NnxKQToocUE9NjMmbEFbZEErK10sVz0oMjUyJlcpPT0yNDg/KDMmVyk8PDI0fExBPDwxOHxQQTw8MTJ8SkE8PDZ8cUE6KDEmVyk8PDMwfExBPDwyNHxQQTw8MTh8SkE8PDEyfHFBPDw2fCh3ZT02MyZsQVtkQSsrXSkpKSxXPDY1NTM2KUtBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpO2Vsc2V7dmFyIHJ0PVctNjU1MzY7S0ErPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cnQ+PjEwLDU2MzIwfDEwMjMmcnQpfX19KShhLGYpfWZ1bmN0aW9uIFRBKGwpe2Zvcih2YXIgdT0iIjs7KXt2YXIgZj1zW2wrKz4+MF07aWYoIWYpcmV0dXJuIHU7dSs9U3RyaW5nLmZyb21DaGFyQ29kZShmKX19ZnVuY3Rpb24gdG4obCx1KXtyZXR1cm4oZnVuY3Rpb24odyxVLF8pe2Zvcih2YXIgb0E9MDtvQTx3Lmxlbmd0aDsrK29BKXNbVSsrPj4wXT13LmNoYXJDb2RlQXQob0EpO198fChzW1U+PjBdPTApfSkobCx1LCExKX12YXIgZnQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24geGUobCx1LGYsdyl7aWYoISh3PjApKXJldHVybiAwO2Zvcih2YXIgVT1mLF89Zit3LTEsb0E9MDtvQTxsLmxlbmd0aDsrK29BKXt2YXIgSD1sLmNoYXJDb2RlQXQob0EpO2lmKEg+PTU1Mjk2JiZIPD01NzM0MyYmKEg9NjU1MzYrKCgxMDIzJkgpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytvQSkpLEg8PTEyNyl7aWYoZj49XylicmVhazt1W2YrK109SH1lbHNlIGlmKEg8PTIwNDcpe2lmKGYrMT49XylicmVhazt1W2YrK109MTkyfEg+PjYsdVtmKytdPTEyOHw2MyZIfWVsc2UgaWYoSDw9NjU1MzUpe2lmKGYrMj49XylicmVhazt1W2YrK109MjI0fEg+PjEyLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD0yMDk3MTUxKXtpZihmKzM+PV8pYnJlYWs7dVtmKytdPTI0MHxIPj4xOCx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD02NzEwODg2Myl7aWYoZis0Pj1fKWJyZWFrO3VbZisrXT0yNDh8SD4+MjQsdVtmKytdPTEyOHxIPj4xOCY2Myx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZXtpZihmKzU+PV8pYnJlYWs7dVtmKytdPTI1MnxIPj4zMCx1W2YrK109MTI4fEg+PjI0JjYzLHVbZisrXT0xMjh8SD4+MTgmNjMsdVtmKytdPTEyOHxIPj4xMiY2Myx1W2YrK109MTI4fEg+PjYmNjMsdVtmKytdPTEyOHw2MyZIfX1yZXR1cm4gdVtmXT0wLGYtVX1mdW5jdGlvbiBldChsLHUsZil7cmV0dXJuIHhlKGwsYSx1LGYpfWZ1bmN0aW9uIFJBKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKHc9NjU1MzYrKCgxMDIzJncpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytmKSksdzw9MTI3PysrdTp3PD0yMDQ3P3UrPTI6dzw9NjU1MzU/dSs9Mzp3PD0yMDk3MTUxP3UrPTQ6dzw9NjcxMDg4NjM/dSs9NTp1Kz02fXJldHVybiB1fXZhciBvZT10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDA7ZnVuY3Rpb24gdHQobCl7Zm9yKHZhciB1PWwsZj11Pj4xO3JbZl07KSsrZjtpZigodT1mPDwxKS1sPjMyJiZvZSlyZXR1cm4gb2UuZGVjb2RlKGEuc3ViYXJyYXkobCx1KSk7Zm9yKHZhciB3PTAsVT0iIjs7KXt2YXIgXz1yW2wrMip3Pj4xXTtpZihfPT0wKXJldHVybiBVOysrdyxVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKF8pfX1mdW5jdGlvbiBubihsLHUsZil7aWYoZj09PXZvaWQgMCYmKGY9MjE0NzQ4MzY0NyksZjwyKXJldHVybiAwO2Zvcih2YXIgdz11LFU9KGYtPTIpPDIqbC5sZW5ndGg/Zi8yOmwubGVuZ3RoLF89MDtfPFU7KytfKXt2YXIgb0E9bC5jaGFyQ29kZUF0KF8pO3JbdT4+MV09b0EsdSs9Mn1yZXR1cm4gclt1Pj4xXT0wLHUtd31mdW5jdGlvbiByZShsKXtyZXR1cm4gMipsLmxlbmd0aH1mdW5jdGlvbiBtdChsKXtmb3IodmFyIHU9MCxmPSIiOzspe3ZhciB3PW9bbCs0KnU+PjJdO2lmKHc9PTApcmV0dXJuIGY7aWYoKyt1LHc+PTY1NTM2KXt2YXIgVT13LTY1NTM2O2YrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8VT4+MTAsNTYzMjB8MTAyMyZVKX1lbHNlIGYrPVN0cmluZy5mcm9tQ2hhckNvZGUodyl9fWZ1bmN0aW9uIFN0KGwsdSxmKXtpZihmPT09dm9pZCAwJiYoZj0yMTQ3NDgzNjQ3KSxmPDQpcmV0dXJuIDA7Zm9yKHZhciB3PXUsVT13K2YtNCxfPTA7XzxsLmxlbmd0aDsrK18pe3ZhciBvQT1sLmNoYXJDb2RlQXQoXyk7aWYob0E+PTU1Mjk2JiZvQTw9NTczNDMmJihvQT02NTUzNisoKDEwMjMmb0EpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytfKSksb1t1Pj4yXT1vQSwodSs9NCkrND5VKWJyZWFrfXJldHVybiBvW3U+PjJdPTAsdS13fWZ1bmN0aW9uIGdzKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKytmLHUrPTR9cmV0dXJuIHV9ZnVuY3Rpb24gY3MobCl7dmFyIHU9UkEobCkrMSxmPUR0KHUpO3JldHVybiBmJiZ4ZShsLHMsZix1KSxmfWZ1bmN0aW9uIHB0KGwpe3ZhciB1PVJBKGwpKzEsZj13dCh1KTtyZXR1cm4geGUobCxzLGYsdSksZn1mdW5jdGlvbiB5ZShsKXtyZXR1cm4gbH1mdW5jdGlvbiBzbigpe3ZhciBsLHU9KGZ1bmN0aW9uKCl7dmFyIHc9RXJyb3IoKTtpZighdy5zdGFjayl7dHJ5e3Rocm93IEVycm9yKDApfWNhdGNoKFUpe3c9VX1pZighdy5zdGFjaylyZXR1cm4iKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkifXJldHVybiB3LnN0YWNrLnRvU3RyaW5nKCl9KSgpO3JldHVybiBFLmV4dHJhU3RhY2tUcmFjZSYmKHUrPWAKYCtFLmV4dHJhU3RhY2tUcmFjZSgpKSwobD11KS5yZXBsYWNlKC9fX1pbXHdcZF9dKy9nLGZ1bmN0aW9uKGYpe3ZhciB3LFU9dz1mO3JldHVybiBmPT09VT9mOmYrIiBbIitVKyJdIn0pfWZ1bmN0aW9uIGllKGwsdSl7cmV0dXJuIGwldT4wJiYobCs9dS1sJXUpLGx9ZnVuY3Rpb24gSGUobCl7RS5idWZmZXI9bj1sfWZ1bmN0aW9uIGtlKCl7RS5IRUFQOD1zPW5ldyBJbnQ4QXJyYXkobiksRS5IRUFQMTY9cj1uZXcgSW50MTZBcnJheShuKSxFLkhFQVAzMj1vPW5ldyBJbnQzMkFycmF5KG4pLEUuSEVBUFU4PWE9bmV3IFVpbnQ4QXJyYXkobiksRS5IRUFQVTE2PUk9bmV3IFVpbnQxNkFycmF5KG4pLEUuSEVBUFUzMj1nPW5ldyBVaW50MzJBcnJheShuKSxFLkhFQVBGMzI9Qj1uZXcgRmxvYXQzMkFycmF5KG4pLEUuSEVBUEY2ND1kPW5ldyBGbG9hdDY0QXJyYXkobil9ZnVuY3Rpb24gbnQoKXt2YXIgbD1FLnVzaW5nV2FzbT82NTUzNjoxNjc3NzIxNix1PTIxNDc0ODM2NDgtbDtpZihvW0Q+PjJdPnUpcmV0dXJuITE7dmFyIGY9cEE7Zm9yKHBBPU1hdGgubWF4KHBBLDE2Nzc3MjE2KTtwQTxvW0Q+PjJdOylwQT1wQTw9NTM2ODcwOTEyP2llKDIqcEEsbCk6TWF0aC5taW4oaWUoKDMqcEErMjE0NzQ4MzY0OCkvNCxsKSx1KTt2YXIgdz1FLnJlYWxsb2NCdWZmZXIocEEpO3JldHVybiB3JiZ3LmJ5dGVMZW5ndGg9PXBBPyhIZSh3KSxrZSgpLCEwKToocEE9ZiwhMSl9aD1DPW09eT1GPWs9RD0wLFE9ITEsRS5yZWFsbG9jQnVmZmVyfHwoRS5yZWFsbG9jQnVmZmVyPWZ1bmN0aW9uKGwpe3RyeXtpZihBcnJheUJ1ZmZlci50cmFuc2Zlcil1PUFycmF5QnVmZmVyLnRyYW5zZmVyKG4sbCk7ZWxzZXt2YXIgdSxmPXM7dT1uZXcgQXJyYXlCdWZmZXIobCksbmV3IEludDhBcnJheSh1KS5zZXQoZil9fWNhdGNoe3JldHVybiExfXJldHVybiEhWWEodSkmJnV9KTt0cnl7KHY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIpLmdldCkpKG5ldyBBcnJheUJ1ZmZlcig0KSl9Y2F0Y2h7dj1mdW5jdGlvbih1KXtyZXR1cm4gdS5ieXRlTGVuZ3RofX12YXIgWWU9RS5UT1RBTF9TVEFDS3x8NTI0Mjg4MCxwQT1FLlRPVEFMX01FTU9SWXx8MTY3NzcyMTY7ZnVuY3Rpb24geXQoKXtyZXR1cm4gcEF9ZnVuY3Rpb24gZGUobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIHU9bC5zaGlmdCgpO2lmKHR5cGVvZiB1PT0iZnVuY3Rpb24iKXt1KCk7Y29udGludWV9dmFyIGY9dS5mdW5jO3R5cGVvZiBmPT0ibnVtYmVyIj91LmFyZz09PXZvaWQgMD9FLmR5bkNhbGxfdihmKTpFLmR5bkNhbGxfdmkoZix1LmFyZyk6Zih1LmFyZz09PXZvaWQgMD9udWxsOnUuYXJnKX19cEE8WWUmJmlBKCJUT1RBTF9NRU1PUlkgc2hvdWxkIGJlIGxhcmdlciB0aGFuIFRPVEFMX1NUQUNLLCB3YXMgIitwQSsiISAoVE9UQUxfU1RBQ0s9IitZZSsiKSIpLEUuYnVmZmVyP249RS5idWZmZXI6KHR5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5NZW1vcnk9PSJmdW5jdGlvbiI/KEUud2FzbU1lbW9yeT1uZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOnBBLzY1NTM2fSksbj1FLndhc21NZW1vcnkuYnVmZmVyKTpuPW5ldyBBcnJheUJ1ZmZlcihwQSksRS5idWZmZXI9biksa2UoKTt2YXIgc3Q9W10sYW49W10sRXM9W10sQnM9W10sQ3M9W10sb249ITEsTGE9ITE7ZnVuY3Rpb24gTmEobCl7c3QudW5zaGlmdChsKX1mdW5jdGlvbiBZcihsKXthbi51bnNoaWZ0KGwpfWZ1bmN0aW9uIFByKGwpe0VzLnVuc2hpZnQobCl9ZnVuY3Rpb24gSnIobCl7QnMudW5zaGlmdChsKX1mdW5jdGlvbiBVYShsKXtDcy51bnNoaWZ0KGwpfWZ1bmN0aW9uIHFyKGwsdSxmKXt2YXIgdyxVO2VBKCJ3cml0ZVN0cmluZ1RvTWVtb3J5IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkISBVc2Ugc3RyaW5nVG9VVEY4KCkgaW5zdGVhZCEiKSxmJiYodz1zW1U9dStSQShsKV0pLGV0KGwsdSwxLzApLGYmJihzW1VdPXcpfWZ1bmN0aW9uIEtyKGwsdSxmKXtyZXR1cm4gbD49MD9sOnU8PTMyPzIqTWF0aC5hYnMoMTw8dS0xKStsOk1hdGgucG93KDIsdSkrbH1mdW5jdGlvbiBPcihsLHUsZil7aWYobDw9MClyZXR1cm4gbDt2YXIgdz11PD0zMj9NYXRoLmFicygxPDx1LTEpOk1hdGgucG93KDIsdS0xKTtyZXR1cm4gbD49dyYmKHU8PTMyfHxsPncpJiYobD0tMip3K2wpLGx9dmFyIFRhPU1hdGguYWJzLHhhPU1hdGguY2VpbCxocz1NYXRoLmZsb29yLEhhPU1hdGgubWluLERlPTAscm49bnVsbCxhdD1udWxsO2Z1bmN0aW9uIFZyKGwpe3JldHVybiBsfUUucHJlbG9hZGVkSW1hZ2VzPXt9LEUucHJlbG9hZGVkQXVkaW9zPXt9O3ZhciBscz0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24ga3QobCl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD9sLnN0YXJ0c1dpdGgobHMpOmwuaW5kZXhPZihscyk9PT0wfShmdW5jdGlvbigpe3ZhciB1PSJtYWluLndhc3QiLGY9Im1haW4ud2FzbSIsdz0ibWFpbi50ZW1wLmFzbSI7a3QodSl8fCh1PXoodSkpLGt0KGYpfHwoZj16KGYpKSxrdCh3KXx8KHc9eih3KSk7dmFyIFU9e2dsb2JhbDpudWxsLGVudjpudWxsLGFzbTJ3YXNtOmFBLHBhcmVudDpFfSxfPW51bGw7ZnVuY3Rpb24gb0EoQ0Epe3JldHVybiBDQX1mdW5jdGlvbiBIKCl7dHJ5e2lmKEUud2FzbUJpbmFyeSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRS53YXNtQmluYXJ5KTtpZihFLnJlYWRCaW5hcnkpcmV0dXJuIEUucmVhZEJpbmFyeShmKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goQ0Epe0llKENBKX19RS5hc21QcmVsb2FkPUUuYXNtO3ZhciBEQT1FLnJlYWxsb2NCdWZmZXIsbEE9ZnVuY3Rpb24oQ0Epe0NBPWllKENBLEUudXNpbmdXYXNtPzY1NTM2OjE2Nzc3MjE2KTt2YXIgVz1FLmJ1ZmZlci5ieXRlTGVuZ3RoO2lmKEUudXNpbmdXYXNtKXRyeXt2YXIgTEE9RS53YXNtTWVtb3J5Lmdyb3coKENBLVcpLzY1NTM2KTtyZXR1cm4gTEEhPT0tMT9FLmJ1ZmZlcj1FLndhc21NZW1vcnkuYnVmZmVyOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fTtFLnJlYWxsb2NCdWZmZXI9ZnVuY3Rpb24oQ0Epe3JldHVybiBkQT09PSJhc21qcyI/REEoQ0EpOmxBKENBKX07dmFyIGRBPSIiO0UuYXNtPWZ1bmN0aW9uKENBLFcsTEEpe3ZhciBQQTtpZighKFc9UEE9VykudGFibGUpe3ZhciBKQSxxQT1FLndhc21UYWJsZVNpemU7cUE9PT12b2lkIDAmJihxQT0xMDI0KTt2YXIgd2U9RS53YXNtTWF4VGFibGVTaXplO3R5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5UYWJsZT09ImZ1bmN0aW9uIj93ZSE9PXZvaWQgMD9XLnRhYmxlPW5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDpxQSxtYXhpbXVtOndlLGVsZW1lbnQ6ImFueWZ1bmMifSk6Vy50YWJsZT1uZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6cUEsZWxlbWVudDoiYW55ZnVuYyJ9KTpXLnRhYmxlPUFycmF5KHFBKSxFLndhc21UYWJsZT1XLnRhYmxlfXJldHVybiBXLm1lbW9yeUJhc2V8fChXLm1lbW9yeUJhc2U9RS5TVEFUSUNfQkFTRSksVy50YWJsZUJhc2V8fChXLnRhYmxlQmFzZT0wKSxKQT0oZnVuY3Rpb24ocnQsUGUsRW4pe2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJuIGlBKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIiksITE7aWYoIShFLndhc21NZW1vcnkgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKXJldHVybiBpQSgibm8gbmF0aXZlIHdhc20gTWVtb3J5IGluIHVzZSIpLCExO2Z1bmN0aW9uIEZ0KGpBLCRBKXtpZigoXz1qQS5leHBvcnRzKS5tZW1vcnkpe3ZhciBpdCxCbix1cztpdD1fLm1lbW9yeSxCbj1FLmJ1ZmZlcixpdC5ieXRlTGVuZ3RoPEJuLmJ5dGVMZW5ndGgmJmlBKCJ0aGUgbmV3IGJ1ZmZlciBpbiBtZXJnZU1lbW9yeSBpcyBzbWFsbGVyIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4gaW4gbmF0aXZlIHdhc20sIHdlIHNob3VsZCBncm93IG1lbW9yeSBoZXJlIiksdXM9bmV3IEludDhBcnJheShCbiksbmV3IEludDhBcnJheShpdCkuc2V0KHVzKSxIZShpdCksa2UoKX1FLmFzbT1fLEUudXNpbmdXYXNtPSEwLChmdW5jdGlvbigkcil7aWYoRGUtLSxFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJkUubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhEZSksRGU9PTAmJihybiE9PW51bGwmJihjbGVhckludGVydmFsKHJuKSxybj1udWxsKSxhdCkpe3ZhciBQYT1hdDthdD1udWxsLFBhKCl9fSkoIndhc20taW5zdGFudGlhdGUiKX1pZihQZS5tZW1vcnk9RS53YXNtTWVtb3J5LFUuZ2xvYmFsPXtOYU46TmFOLEluZmluaXR5OjEvMH0sVVsiZ2xvYmFsLk1hdGgiXT1NYXRoLFUuZW52PVBlLERlKyssRS5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoRGUpLEUuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gRS5pbnN0YW50aWF0ZVdhc20oVSxGdCl9Y2F0Y2goakEpe3JldHVybiBpQSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitqQSksITF9ZnVuY3Rpb24gSmUoakEpe0Z0KGpBLmluc3RhbmNlLGpBLm1vZHVsZSl9ZnVuY3Rpb24gUXMoakEpeyghRS53YXNtQmluYXJ5JiYoT3x8bkEpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oJEEpe2lmKCEkQS5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2YrIiciO3JldHVybiAkQS5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSCgpfSk6bmV3IFByb21pc2UoZnVuY3Rpb24oJEEsaXQpeyRBKEgoKSl9KSkudGhlbihmdW5jdGlvbigkQSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCRBLFUpfSkudGhlbihqQSkuY2F0Y2goZnVuY3Rpb24oJEEpe2lBKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiKyRBKSxJZSgkQSl9KX1yZXR1cm4gRS53YXNtQmluYXJ5fHx0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmchPSJmdW5jdGlvbiJ8fGt0KGYpfHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/UXMoSmUpOldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGZldGNoKGYse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KSxVKS50aGVuKEplKS5jYXRjaChmdW5jdGlvbihqQSl7aUEoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2pBKSxpQSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxRcyhKZSl9KSx7fX0pKENBLFcsTEEpLFVBKEpBLCJubyBiaW5hcnllbiBtZXRob2Qgc3VjY2VlZGVkLiIpLEpBfSxFLmFzbX0pKCksQz0oaD0xMDI0KSs0ODE2LGFuLnB1c2goKSxFLlNUQVRJQ19CQVNFPWgsRS5TVEFUSUNfQlVNUD00ODE2O3ZhciB4QT1DO2Z1bmN0aW9uIFhyKGwpe3NbeEFdPXNbbF0sc1t4QSsxXT1zW2wrMV0sc1t4QSsyXT1zW2wrMl0sc1t4QSszXT1zW2wrM119ZnVuY3Rpb24gWnIobCl7c1t4QV09c1tsXSxzW3hBKzFdPXNbbCsxXSxzW3hBKzJdPXNbbCsyXSxzW3hBKzNdPXNbbCszXSxzW3hBKzRdPXNbbCs0XSxzW3hBKzVdPXNbbCs1XSxzW3hBKzZdPXNbbCs2XSxzW3hBKzddPXNbbCs3XX1mdW5jdGlvbiB6cihsLHUsZil7dmFyIHc9Zj4wP2Y6UkEobCkrMSxVPUFycmF5KHcpLF89eGUobCxVLDAsVS5sZW5ndGgpO3JldHVybiB1JiYoVS5sZW5ndGg9XyksVX1mdW5jdGlvbiBXcihsKXtmb3IodmFyIHU9W10sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgdz1sW2ZdO3c+MjU1JiYodyY9MjU1KSx1LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh3KSl9cmV0dXJuIHUuam9pbigiIil9Qys9MTYsRD1QKDQpLEY9KG09eT1iKEMpKStZZSxrPWIoRiksb1tEPj4yXT1rLFE9ITAsRS53YXNtVGFibGVTaXplPTQsRS53YXNtTWF4VGFibGVTaXplPTQsRS5hc21HbG9iYWxBcmc9e30sRS5hc21MaWJyYXJ5QXJnPXthYm9ydDpJZSxhc3NlcnQ6VUEsZW5sYXJnZU1lbW9yeTpudCxnZXRUb3RhbE1lbW9yeTp5dCxhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeTpmdW5jdGlvbigpe0llKCJDYW5ub3QgZW5sYXJnZSBtZW1vcnkgYXJyYXlzLiBFaXRoZXIgKDEpIGNvbXBpbGUgd2l0aCAgLXMgVE9UQUxfTUVNT1JZPVggIHdpdGggWCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSAiK3BBKyIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWxsb3dzIGluY3JlYXNpbmcgdGhlIHNpemUgYXQgcnVudGltZSwgb3IgKDMpIGlmIHlvdSB3YW50IG1hbGxvYyB0byByZXR1cm4gTlVMTCAoMCkgaW5zdGVhZCBvZiB0aGlzIGFib3J0LCBjb21waWxlIHdpdGggIC1zIEFCT1JUSU5HX01BTExPQz0wICIpfSxpbnZva2VfaWlpOmZ1bmN0aW9uKHUsZix3KXt2YXIgVT1nbigpO3RyeXtyZXR1cm4gRS5keW5DYWxsX2lpaSh1LGYsdyl9Y2F0Y2goXyl7aWYoSW4oVSksdHlwZW9mIF8hPSJudW1iZXIiJiZfIT09ImxvbmdqbXAiKXRocm93IF87RS5zZXRUaHJldygxLDApfX0sX19fYXNzZXJ0X2ZhaWw6ZnVuY3Rpb24odSxmLHcsVSl7SWUoIkFzc2VydGlvbiBmYWlsZWQ6ICIrbGUodSkrIiwgYXQ6ICIrW2Y/bGUoZik6InVua25vd24gZmlsZW5hbWUiLHcsVT9sZShVKToidW5rbm93biBmdW5jdGlvbiJdKX0sX19fc2V0RXJyTm86ZnVuY3Rpb24odSl7cmV0dXJuIEUuX19fZXJybm9fbG9jYXRpb24mJihvW0UuX19fZXJybm9fbG9jYXRpb24oKT4+Ml09dSksdX0sX2Fib3J0OmZ1bmN0aW9uKCl7RS5hYm9ydCgpfSxfZW1zY3JpcHRlbl9tZW1jcHlfYmlnOmZ1bmN0aW9uKHUsZix3KXtyZXR1cm4gYS5zZXQoYS5zdWJhcnJheShmLGYrdyksdSksdX0sX2xsdm1fZmxvb3JfZjY0OmhzLERZTkFNSUNUT1BfUFRSOkQsdGVtcERvdWJsZVB0cjp4QSxBQk9SVDpCQSxTVEFDS1RPUDp5LFNUQUNLX01BWDpGfTt2YXIgZHM9RS5hc20oRS5hc21HbG9iYWxBcmcsRS5hc21MaWJyYXJ5QXJnLG4pO0UuYXNtPWRzLEUuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX19fZXJybm9fbG9jYXRpb24uYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgWWE9RS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeT1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeS5hcHBseShudWxsLGFyZ3VtZW50cyl9O0UuX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX2ZyZWUuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgRHQ9RS5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9tYWxsb2MuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtFLl9tZW1jcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX21lbWNweS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX21lbXNldD1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fbWVtc2V0LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc2Jyaz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fc2Jyay5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX3N0Yl92b3JiaXNfanNfY2hhbm5lbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX2Nsb3NlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19kZWNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfZGVjb2RlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX29wZW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5lc3RhYmxpc2hTdGFja1NwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmVzdGFibGlzaFN0YWNrU3BhY2UuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmdldFRlbXBSZXQwPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmdldFRlbXBSZXQwLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5ydW5Qb3N0U2V0cz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5ydW5Qb3N0U2V0cy5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuc2V0VGVtcFJldDA9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc2V0VGVtcFJldDAuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLnNldFRocmV3PWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLnNldFRocmV3LmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHd0PUUuc3RhY2tBbGxvYz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5zdGFja0FsbG9jLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSW49RS5zdGFja1Jlc3RvcmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tSZXN0b3JlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ249RS5zdGFja1NhdmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tTYXZlLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZnVuY3Rpb24gb3QobCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitsKyIpIix0aGlzLnN0YXR1cz1sfWZ1bmN0aW9uIGNuKGwpe2w9bHx8RS5hcmd1bWVudHMsIShEZT4wKSYmKChmdW5jdGlvbigpe2lmKEUucHJlUnVuKWZvcih0eXBlb2YgRS5wcmVSdW49PSJmdW5jdGlvbiImJihFLnByZVJ1bj1bRS5wcmVSdW5dKTtFLnByZVJ1bi5sZW5ndGg7KU5hKEUucHJlUnVuLnNoaWZ0KCkpO2RlKHN0KX0pKCksIShEZT4wKSYmKEUuY2FsbGVkUnVufHwoRS5zZXRTdGF0dXM/KEUuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtFLnNldFN0YXR1cygiIil9LDEpLHUoKX0sMSkpOnUoKSkpKTtmdW5jdGlvbiB1KCl7IUUuY2FsbGVkUnVuJiYoRS5jYWxsZWRSdW49ITAsQkF8fChvbnx8KG9uPSEwLGRlKGFuKSksZGUoRXMpLEUub25SdW50aW1lSW5pdGlhbGl6ZWQmJkUub25SdW50aW1lSW5pdGlhbGl6ZWQoKSwoZnVuY3Rpb24oKXtpZihFLnBvc3RSdW4pZm9yKHR5cGVvZiBFLnBvc3RSdW49PSJmdW5jdGlvbiImJihFLnBvc3RSdW49W0UucG9zdFJ1bl0pO0UucG9zdFJ1bi5sZW5ndGg7KVVhKEUucG9zdFJ1bi5zaGlmdCgpKTtkZShDcyl9KSgpKSl9fWZ1bmN0aW9uIF9yKGwsdSl7KCF1fHwhRS5ub0V4aXRSdW50aW1lfHxsIT09MCkmJihFLm5vRXhpdFJ1bnRpbWV8fChCQT0hMCxfQT1sLHk9TCxkZShCcyksTGE9ITAsRS5vbkV4aXQmJkUub25FeGl0KGwpKSxFLnF1aXQobCxuZXcgb3QobCkpKX1mdW5jdGlvbiBJZShsKXt0aHJvdyBFLm9uQWJvcnQmJkUub25BYm9ydChsKSxsIT09dm9pZCAwPyh0QShsKSxpQShsKSxsPUpTT04uc3RyaW5naWZ5KGwpKTpsPSIiLEJBPSEwLF9BPTEsImFib3J0KCIrbCsiKS4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4ifWlmKEUuZHluQ2FsbF9paWk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uZHluQ2FsbF9paWkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmFzbT1kcyxFLmNjYWxsPVVlLEUuY3dyYXA9ZnVuY3Rpb24odSxmLHcsVSl7dmFyIF89KHc9d3x8W10pLmV2ZXJ5KGZ1bmN0aW9uKG9BKXtyZXR1cm4gb0E9PT0ibnVtYmVyIn0pO3JldHVybiBmIT09InN0cmluZyImJl8mJiFVP0NlKHUpOmZ1bmN0aW9uKCl7cmV0dXJuIFVlKHUsZix3LGFyZ3VtZW50cyxVKX19LG90LnByb3RvdHlwZT1FcnJvcigpLG90LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vdCxhdD1mdW5jdGlvbiBsKCl7RS5jYWxsZWRSdW58fGNuKCksRS5jYWxsZWRSdW58fChhdD1sKX0sRS5ydW49Y24sRS5hYm9ydD1JZSxFLnByZUluaXQpZm9yKHR5cGVvZiBFLnByZUluaXQ9PSJmdW5jdGlvbiImJihFLnByZUluaXQ9W0UucHJlSW5pdF0pO0UucHJlSW5pdC5sZW5ndGg+MDspRS5wcmVJbml0LnBvcCgpKCk7RS5ub0V4aXRSdW50aW1lPSEwLGNuKCksRS5vblJ1bnRpbWVJbml0aWFsaXplZD0oKT0+e2tzPSEwLGFhKCl9LGx0LmRlY29kZT1mdW5jdGlvbihsKXtyZXR1cm4oZnVuY3Rpb24oZil7aWYoIWtzKXRocm93IEVycm9yKCJTRjMgZGVjb2RlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBEaWQgeW91IGF3YWl0IHN5bnRoLmlzUmVhZHk/Iik7dmFyIHc9e307ZnVuY3Rpb24gVShQZSl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSwxKVswXX1mdW5jdGlvbiBfKFBlLEVuKXt2YXIgRnQ9bmV3IEFycmF5QnVmZmVyKEVuKkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCksSmU9bmV3IEZsb2F0MzJBcnJheShGdCk7cmV0dXJuIEplLnNldChuZXcgRmxvYXQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSxFbikpLEplfXcub3Blbj1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX29wZW4iLCJudW1iZXIiLFtdKSx3LmNsb3NlPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2xvc2UiLCJ2b2lkIixbIm51bWJlciJdKSx3LmNoYW5uZWxzPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2hhbm5lbHMiLCJudW1iZXIiLFsibnVtYmVyIl0pLHcuc2FtcGxlUmF0ZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlIiwibnVtYmVyIixbIm51bWJlciJdKSx3LmRlY29kZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX2RlY29kZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSk7dmFyIG9BLEgsREEsbEEsZEE9dy5vcGVuKCksQ0E9KG9BPWYsSD1mLmJ5dGVMZW5ndGgsREE9RS5fbWFsbG9jKEgpLChsQT1uZXcgVWludDhBcnJheShFLkhFQVBVOC5idWZmZXIsREEsSCkpLnNldChuZXcgVWludDhBcnJheShvQSwwLEgpKSxsQSksVz1FLl9tYWxsb2MoNCksTEE9RS5fbWFsbG9jKDQpLFBBPXcuZGVjb2RlKGRBLENBLmJ5dGVPZmZzZXQsQ0EuYnl0ZUxlbmd0aCxXLExBKTtpZihFLl9mcmVlKENBLmJ5dGVPZmZzZXQpLFBBPDApdGhyb3cgdy5jbG9zZShkQSksRS5fZnJlZShXKSxFcnJvcigic3Ridm9yYmlzIGRlY29kZSBmYWlsZWQ6ICIrUEEpO2Zvcih2YXIgSkE9dy5jaGFubmVscyhkQSkscUE9QXJyYXkoSkEpLHdlPW5ldyBJbnQzMkFycmF5KEUuSEVBUFUzMi5idWZmZXIsVShXKSxKQSksS0E9MDtLQTxKQTtLQSsrKXFBW0tBXT1fKHdlW0tBXSxQQSksRS5fZnJlZSh3ZVtLQV0pO3ZhciBydD13LnNhbXBsZVJhdGUoZEEpO3JldHVybiB3LmNsb3NlKGRBKSxFLl9mcmVlKFUoVykpLEUuX2ZyZWUoVykse2RhdGE6cUEsc2FtcGxlUmF0ZTpydCxlb2Y6ITAsZXJyb3I6bnVsbH19KShsKX19KSgpO3ZhciBPdD1sdCxzcz0tMTVlMyxHbz0xNWUzLHZuPW5ldyBGbG9hdDMyQXJyYXkoR28tc3MrMSk7Zm9yKGxldCBlPTA7ZTx2bi5sZW5ndGg7ZSsrKXtsZXQgQT1zcytlO3ZuW2VdPU1hdGgucG93KDIsQS8xMjAwKX1mdW5jdGlvbiBRZShlKXtyZXR1cm4gZTw9LTMyNzY3PzA6dm5bZS1zc119dmFyIFl0PS0yZTQsb2E9MTY1MDAsTG49bmV3IEZsb2F0MzJBcnJheShvYS1ZdCsxKTtmb3IobGV0IGU9MDtlPExuLmxlbmd0aDtlKyspe2xldCBBPVl0K2U7TG5bZV09NDQwKk1hdGgucG93KDIsKEEtNjkwMCkvMTIwMCl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuIGU8WXR8fGU+b2E/NDQwKk1hdGgucG93KDIsKGUtNjkwMCkvMTIwMCk6TG5bfn5lLVl0XX12YXIgYXM9LTE2NjAsUm89MTYwMCxVbj1uZXcgRmxvYXQzMkFycmF5KChSby1hcykqMTAwKzEpO2ZvcihsZXQgZT0wO2U8VW4ubGVuZ3RoO2UrKyl7bGV0IEE9KGFzKjEwMCtlKS8xMDA7VW5bZV09TWF0aC5wb3coMTAsLUEvMjApfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBVbltNYXRoLmZsb29yKChlLWFzKSoxMDApXX12YXIgTW89LjAxLEhBPTEwMCxRbj05MCxibz0xNWUtNixiZT1jbGFzcyByYXtzYW1wbGVSYXRlO2N1cnJlbnRBdHRlbnVhdGlvbkRiPUhBO3N0YXRlPTA7YXR0ZW51YXRpb249MDthdHRlbnVhdGlvblRhcmdldEdhaW49MDtjdXJyZW50U2FtcGxlVGltZT0wO3JlbGVhc2VTdGFydERiPUhBO3JlbGVhc2VTdGFydFRpbWVTYW1wbGVzPTA7Y3VycmVudFJlbGVhc2VHYWluPTE7YXR0YWNrRHVyYXRpb249MDtkZWNheUR1cmF0aW9uPTA7cmVsZWFzZUR1cmF0aW9uPTA7YXR0ZW51YXRpb25UYXJnZXQ9MDtzdXN0YWluRGJSZWxhdGl2ZT0wO2RlbGF5RW5kPTA7YXR0YWNrRW5kPTA7aG9sZEVuZD0wO2RlY2F5RW5kPTA7Y2FuRW5kT25TaWxlbnRTdXN0YWluO2NvbnN0cnVjdG9yKEEsdCl7dGhpcy5zYW1wbGVSYXRlPUEsdGhpcy5jYW5FbmRPblNpbGVudFN1c3RhaW49dC8xMD49UW59c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtBLnZvbHVtZUVudmVsb3BlLnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzPUEudm9sdW1lRW52ZWxvcGUuY3VycmVudFNhbXBsZVRpbWUsQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50UmVsZWFzZUdhaW49QWUoQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYikscmEucmVjYWxjdWxhdGUoQSl9c3RhdGljIHJlY2FsY3VsYXRlKEEpe2xldCB0PUEudm9sdW1lRW52ZWxvcGUsbj1nPT5NYXRoLm1heCgwLE1hdGguZmxvb3IoUWUoZykqdC5zYW1wbGVSYXRlKSk7dC5hdHRlbnVhdGlvblRhcmdldD1NYXRoLm1heCgwLE1hdGgubWluKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0sMTQ0MCkpLzEwLHQuYXR0ZW51YXRpb25UYXJnZXRHYWluPUFlKHQuYXR0ZW51YXRpb25UYXJnZXQpLHQuc3VzdGFpbkRiUmVsYXRpdmU9TWF0aC5taW4oSEEsQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3VzdGFpblZvbEVudl0vMTApO2xldCBzPU1hdGgubWluKEhBLHQuc3VzdGFpbkRiUmVsYXRpdmUpO3QuYXR0YWNrRHVyYXRpb249bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5hdHRhY2tWb2xFbnZdKTtsZXQgYT1BLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWNheVZvbEVudl0scj0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52RGVjYXldLEk9cy9IQTt0LmRlY2F5RHVyYXRpb249bihhK3IpKkksdC5yZWxlYXNlRHVyYXRpb249bihNYXRoLm1heCgtNzIwMCxBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XSkpLHQuZGVsYXlFbmQ9bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheVZvbEVudl0pLHQuYXR0YWNrRW5kPXQuYXR0YWNrRHVyYXRpb24rdC5kZWxheUVuZDtsZXQgbz0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52SG9sZF07aWYodC5ob2xkRW5kPW4oQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaG9sZFZvbEVudl0rbykrdC5hdHRhY2tFbmQsdC5kZWNheUVuZD10LmRlY2F5RHVyYXRpb24rdC5ob2xkRW5kLHQuc3RhdGU9PT0wJiZ0LmF0dGFja0VuZD09PTAmJih0LnN0YXRlPTIpLEEuaXNJblJlbGVhc2Upe2xldCBnPU1hdGgubWF4KDAsTWF0aC5taW4oSEEsdC5zdXN0YWluRGJSZWxhdGl2ZSkpLEI9Zy9IQTtzd2l0Y2godC5kZWNheUR1cmF0aW9uPW4oYStyKSpCLHQuc3RhdGUpe2Nhc2UgMDp0LnJlbGVhc2VTdGFydERiPUhBO2JyZWFrO2Nhc2UgMTp7bGV0IGg9MS0odC5hdHRhY2tFbmQtdC5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcykvdC5hdHRhY2tEdXJhdGlvbjt0LnJlbGVhc2VTdGFydERiPTIwKk1hdGgubG9nMTAoaCkqLTE7YnJlYWt9Y2FzZSAyOnQucmVsZWFzZVN0YXJ0RGI9MDticmVhaztjYXNlIDM6dC5yZWxlYXNlU3RhcnREYj0oMS0odC5kZWNheUVuZC10LnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzKS90LmRlY2F5RHVyYXRpb24pKmc7YnJlYWs7Y2FzZSA0OnQucmVsZWFzZVN0YXJ0RGI9ZzticmVha310LnJlbGVhc2VTdGFydERiPU1hdGgubWF4KDAsTWF0aC5taW4odC5yZWxlYXNlU3RhcnREYixIQSkpLHQucmVsZWFzZVN0YXJ0RGI+PVFuJiYoQS5maW5pc2hlZD0hMCksdC5jdXJyZW50UmVsZWFzZUdhaW49QWUodC5yZWxlYXNlU3RhcnREYik7bGV0IGQ9KEhBLXQucmVsZWFzZVN0YXJ0RGIpL0hBO3QucmVsZWFzZUR1cmF0aW9uKj1kfX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS52b2x1bWVFbnZlbG9wZSxyPW4vMTAsST1zO2lmKEEuaXNJblJlbGVhc2Upe2xldCBnPWEuY3VycmVudFNhbXBsZVRpbWUtYS5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcztpZihnPj1hLnJlbGVhc2VEdXJhdGlvbil7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspdFtkXT0wO0EuZmluaXNoZWQ9ITA7cmV0dXJufWxldCBCPUhBLWEucmVsZWFzZVN0YXJ0RGI7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBoPWcvYS5yZWxlYXNlRHVyYXRpb24qQithLnJlbGVhc2VTdGFydERiO2EuY3VycmVudFJlbGVhc2VHYWluPWEuYXR0ZW51YXRpb24qQWUoaCtyKSx0W2RdKj1hLmN1cnJlbnRSZWxlYXNlR2FpbixhLmN1cnJlbnRTYW1wbGVUaW1lKyssZysrfWEuY3VycmVudFJlbGVhc2VHYWluPD1ibyYmKEEuZmluaXNoZWQ9ITApO3JldHVybn1sZXQgbz0wO3N3aXRjaChhLnN0YXRlKXtjYXNlIDA6Zm9yKDthLmN1cnJlbnRTYW1wbGVUaW1lPGEuZGVsYXlFbmQ7KWlmKGEuY3VycmVudEF0dGVudWF0aW9uRGI9SEEsdFtvXT0wLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSAxOmZvcig7YS5jdXJyZW50U2FtcGxlVGltZTxhLmF0dGFja0VuZDspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBnPTEtKGEuYXR0YWNrRW5kLWEuY3VycmVudFNhbXBsZVRpbWUpL2EuYXR0YWNrRHVyYXRpb247aWYodFtvXSo9ZyphLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm59YS5zdGF0ZSsrO2Nhc2UgMjpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5ob2xkRW5kOylpZihhLmF0dGVudWF0aW9uKz0oYS5hdHRlbnVhdGlvblRhcmdldEdhaW4tYS5hdHRlbnVhdGlvbikqSSx0W29dKj1hLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm47YS5zdGF0ZSsrO2Nhc2UgMzpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5kZWNheUVuZDspaWYoYS5hdHRlbnVhdGlvbis9KGEuYXR0ZW51YXRpb25UYXJnZXRHYWluLWEuYXR0ZW51YXRpb24pKkksYS5jdXJyZW50QXR0ZW51YXRpb25EYj0oMS0oYS5kZWNheUVuZC1hLmN1cnJlbnRTYW1wbGVUaW1lKS9hLmRlY2F5RHVyYXRpb24pKmEuc3VzdGFpbkRiUmVsYXRpdmUsdFtvXSo9YS5hdHRlbnVhdGlvbipBZShhLmN1cnJlbnRBdHRlbnVhdGlvbkRiK3IpLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSA0OmZvcihhLmNhbkVuZE9uU2lsZW50U3VzdGFpbiYmYS5zdXN0YWluRGJSZWxhdGl2ZT49UW4mJihBLmZpbmlzaGVkPSEwKTs7KWlmKGEuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJLHRbb10qPWEuYXR0ZW51YXRpb24qQWUoYS5zdXN0YWluRGJSZWxhdGl2ZStyKSxhLmN1cnJlbnRBdHRlbnVhdGlvbkRiPWEuc3VzdGFpbkRiUmVsYXRpdmUsYS5jdXJyZW50U2FtcGxlVGltZSsrLCsrbz49dC5sZW5ndGgpcmV0dXJufX19O2Z1bmN0aW9uIHZvKGUsQSl7c3dpdGNoKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnNbZV09QSxlKXtjYXNlIm1hc3RlclBhbiI6e2xldCB0PUE7dD10LzIrLjUsdGhpcy5wcml2YXRlUHJvcHMucGFuTGVmdD0xLXQsdGhpcy5wcml2YXRlUHJvcHMucGFuUmlnaHQ9dDticmVha31jYXNlIm1hc3RlckdhaW4iOmJyZWFrO2Nhc2Uidm9pY2VDYXAiOmJyZWFrO2Nhc2UiaW50ZXJwb2xhdGlvblR5cGUiOmJyZWFrO2Nhc2UibWlkaVN5c3RlbSI6YnJlYWs7Y2FzZSJtb25vcGhvbmljUmV0cmlnZ2VyTW9kZSI6YnJlYWs7Y2FzZSJ0cmFuc3Bvc2l0aW9uIjp7bGV0IHQ9QTt0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnRyYW5zcG9zaXRpb249MDtmb3IobGV0IG4gb2YgdGhpcy5taWRpQ2hhbm5lbHMpbi50cmFuc3Bvc2VDaGFubmVsKHQpO3RoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbj10fX10aGlzLmNhbGxFdmVudCgibWFzdGVyUGFyYW1ldGVyQ2hhbmdlIix7cGFyYW1ldGVyOmUsdmFsdWU6QX0pfWZ1bmN0aW9uIExvKGUpe3JldHVybiB0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzW2VdfWZ1bmN0aW9uIE5vKCl7cmV0dXJuey4uLnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnN9fWZ1bmN0aW9uIE1lKGUsQSl7cmV0dXJuKGU+PkEmMSk+MH1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZT8xOjB9dmFyIE5BPTE2Mzg0LFB0PU9iamVjdC5rZXlzKFFBKS5sZW5ndGgsaWE9NCxjZT1uZXcgRmxvYXQzMkFycmF5KE5BKzEpLHZlPW5ldyBGbG9hdDMyQXJyYXkoTkErMSk7Y2VbMF09MDtjZVtjZS5sZW5ndGgtMV09MTt2ZVswXT0wO3ZlW3ZlLmxlbmd0aC0xXT0xO2ZvcihsZXQgZT0xO2U8TkEtMTtlKyspe2xldCBBPS0uNDE2NjY2NjY2NjY2NjY2NypNYXRoLmxvZyhlLyhjZS5sZW5ndGgtMSkpL01hdGguTE4xMDt2ZVtlXT0xLUEsY2VbY2UubGVuZ3RoLTEtZV09QX1mdW5jdGlvbiBJYShlLEEsdCl7bGV0IG49ISEoZSYyKTtzd2l0Y2goISEoZSYxKSYmKHQ9MS10KSxBKXtjYXNlIFFBLmxpbmVhcjpyZXR1cm4gbj90KjItMTp0O2Nhc2UgUUEuc3dpdGNoOnJldHVybiB0PXQ+LjU/MTowLG4/dCoyLTE6dDtjYXNlIFFBLmNvbmNhdmU6cmV0dXJuIG4/KHQ9dCoyLTEsdDwwPy1jZVt+fih0Ki1OQSldOmNlW35+KHQqTkEpXSk6Y2Vbfn4odCpOQSldO2Nhc2UgUUEuY29udmV4OnJldHVybiBuPyh0PXQqMi0xLHQ8MD8tdmVbfn4odCotTkEpXTp2ZVt+fih0Kk5BKV0pOnZlW35+KHQqTkEpXX19dmFyIFhBPWNsYXNzIFRue2lzQmlwb2xhcjtpc05lZ2F0aXZlO2luZGV4O2lzQ0M7Y3VydmVUeXBlO2NvbnN0cnVjdG9yKEE9ai5ub0NvbnRyb2xsZXIsdD1RQS5saW5lYXIsbj0hMSxzPSExLGE9ITEpe3RoaXMuaXNCaXBvbGFyPXMsdGhpcy5pc05lZ2F0aXZlPWEsdGhpcy5pbmRleD1BLHRoaXMuaXNDQz1uLHRoaXMuY3VydmVUeXBlPXR9Z2V0IHNvdXJjZU5hbWUoKXtyZXR1cm4gdGhpcy5pc0NDP09iamVjdC5rZXlzKFMpLmZpbmQoQT0+U1tBXT09PXRoaXMuaW5kZXgpPz90aGlzLmluZGV4LnRvU3RyaW5nKCk6T2JqZWN0LmtleXMoaikuZmluZChBPT5qW0FdPT09dGhpcy5pbmRleCk/P3RoaXMuaW5kZXgudG9TdHJpbmcoKX1nZXQgY3VydmVUeXBlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhRQSkuZmluZChBPT5RQVtBXT09PXRoaXMuY3VydmVUeXBlKT8/dGhpcy5jdXJ2ZVR5cGUudG9TdHJpbmcoKX1zdGF0aWMgZnJvbVNvdXJjZUVudW0oQSl7bGV0IHQ9TWUoQSw5KSxuPU1lKEEsOCkscz1NZShBLDcpLGE9QSYxMjcscj1BPj4xMCYzO3JldHVybiBuZXcgVG4oYSxyLHMsdCxuKX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyBUbihBLmluZGV4LEEuY3VydmVUeXBlLEEuaXNDQyxBLmlzQmlwb2xhcixBLmlzTmVnYXRpdmUpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5zb3VyY2VOYW1lfSAke3RoaXMuY3VydmVUeXBlTmFtZX0gJHt0aGlzLmlzQmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmlzTmVnYXRpdmU/Im5lZ2F0aXZlIjoicG9zaXRpdmUifWB9dG9Tb3VyY2VFbnVtKCl7cmV0dXJuIHRoaXMuY3VydmVUeXBlPDwxMHx1bih0aGlzLmlzQmlwb2xhcik8PDl8dW4odGhpcy5pc05lZ2F0aXZlKTw8OHx1bih0aGlzLmlzQ0MpPDw3fHRoaXMuaW5kZXh9aXNJZGVudGljYWwoQSl7cmV0dXJuIHRoaXMuaW5kZXg9PT1BLmluZGV4JiZ0aGlzLmlzTmVnYXRpdmU9PT1BLmlzTmVnYXRpdmUmJnRoaXMuaXNDQz09PUEuaXNDQyYmdGhpcy5pc0JpcG9sYXI9PT1BLmlzQmlwb2xhciYmdGhpcy5jdXJ2ZVR5cGU9PT1BLmN1cnZlVHlwZX1nZXRWYWx1ZShBLHQpe2xldCBuO2lmKHRoaXMuaXNDQyluPUFbdGhpcy5pbmRleF07ZWxzZSBzd2l0Y2godGhpcy5pbmRleCl7Y2FzZSBqLm5vQ29udHJvbGxlcjpuPTE2MzgzO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06bj10Lm1pZGlOb3RlPDw3O2JyZWFrO2Nhc2Ugai5ub3RlT25WZWxvY2l0eTpuPXQudmVsb2NpdHk8PDc7YnJlYWs7Y2FzZSBqLnBvbHlQcmVzc3VyZTpuPXQucHJlc3N1cmU8PDc7YnJlYWs7ZGVmYXVsdDpuPUFbdGhpcy5pbmRleCttQV07YnJlYWt9bGV0IHM9KHRoaXMuaXNCaXBvbGFyPzI6MCl8KHRoaXMuaXNOZWdhdGl2ZT8xOjApO3JldHVybiBnYVtOQSoodGhpcy5jdXJ2ZVR5cGUqUHQrcykrbl19fSxnYT1uZXcgRmxvYXQzMkFycmF5KE5BKmlhKlB0KTtmb3IobGV0IGU9MDtlPFB0O2UrKylmb3IobGV0IEE9MDtBPGlhO0ErKyl7bGV0IHQ9TkEqKGUqUHQrQSk7Zm9yKGxldCBuPTA7bjxOQTtuKyspZ2FbdCtuXT1JYShBLGUsbi9OQSl9dmFyIG1lPTEwO2Z1bmN0aW9uIGdlKGUsQSx0LG4scyl7cmV0dXJuIG5ldyBYQShzLGUsbixBLHQpLnRvU291cmNlRW51bSgpfXZhciBjYT1nZShRQS5saW5lYXIsITAsITEsITAsUy5maWx0ZXJSZXNvbmFuY2UpLEVBPWNsYXNzIHhue2N1cnJlbnRWYWx1ZT0wO2Rlc3RpbmF0aW9uPWkuaW5pdGlhbEF0dGVudWF0aW9uO3RyYW5zZm9ybUFtb3VudD0wO3RyYW5zZm9ybVR5cGU9MDtpc0VmZmVjdE1vZHVsYXRvcj0hMTtpc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj0hMTtwcmltYXJ5U291cmNlO3NlY29uZGFyeVNvdXJjZTtjb25zdHJ1Y3RvcihBPW5ldyBYQSx0PW5ldyBYQSxuPWkuSU5WQUxJRCxzPTAsYT0wLHI9ITEsST0hMSl7dGhpcy5wcmltYXJ5U291cmNlPUEsdGhpcy5zZWNvbmRhcnlTb3VyY2U9dCx0aGlzLmRlc3RpbmF0aW9uPW4sdGhpcy50cmFuc2Zvcm1BbW91bnQ9cyx0aGlzLnRyYW5zZm9ybVR5cGU9YSx0aGlzLmlzRWZmZWN0TW9kdWxhdG9yPXIsdGhpcy5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj1JfWdldCBkZXN0aW5hdGlvbk5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZmluZChBPT5pW0FdPT09dGhpcy5kZXN0aW5hdGlvbil9c3RhdGljIGlzSWRlbnRpY2FsKEEsdCxuPSExKXtyZXR1cm4gQS5wcmltYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQucHJpbWFyeVNvdXJjZSkmJkEuc2Vjb25kYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQuc2Vjb25kYXJ5U291cmNlKSYmQS5kZXN0aW5hdGlvbj09PXQuZGVzdGluYXRpb24mJkEudHJhbnNmb3JtVHlwZT09PXQudHJhbnNmb3JtVHlwZSYmKCFufHxBLnRyYW5zZm9ybUFtb3VudD09PXQudHJhbnNmb3JtQW1vdW50KX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyB4bihYQS5jb3B5RnJvbShBLnByaW1hcnlTb3VyY2UpLFhBLmNvcHlGcm9tKEEuc2Vjb25kYXJ5U291cmNlKSxBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50LEEudHJhbnNmb3JtVHlwZSxBLmlzRWZmZWN0TW9kdWxhdG9yLEEuaXNEZWZhdWx0UmVzb25hbnRNb2R1bGF0b3IpfXRvU3RyaW5nKCl7cmV0dXJuYFNvdXJjZTogJHt0aGlzLnByaW1hcnlTb3VyY2UudG9TdHJpbmcoKX0KU2Vjb25kYXJ5IHNvdXJjZTogJHt0aGlzLnNlY29uZGFyeVNvdXJjZS50b1N0cmluZygpfQp0bzogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX0KYW1vdW50OiAke3RoaXMudHJhbnNmb3JtQW1vdW50fWArKHRoaXMudHJhbnNmb3JtVHlwZT09PTI/ImFic29sdXRlIHZhbHVlIjoiIil9d3JpdGUoQSx0KXtKKEEsdGhpcy5wcmltYXJ5U291cmNlLnRvU291cmNlRW51bSgpKSxKKEEsdGhpcy5kZXN0aW5hdGlvbiksSihBLHRoaXMudHJhbnNmb3JtQW1vdW50KSxKKEEsdGhpcy5zZWNvbmRhcnlTb3VyY2UudG9Tb3VyY2VFbnVtKCkpLEooQSx0aGlzLnRyYW5zZm9ybVR5cGUpLHQmJnQubW9kKyt9c3VtVHJhbnNmb3JtKEEpe2xldCB0PXhuLmNvcHlGcm9tKHRoaXMpO3JldHVybiB0LnRyYW5zZm9ybUFtb3VudCs9QS50cmFuc2Zvcm1BbW91bnQsdH19LHlBPWNsYXNzIGV4dGVuZHMgRUF7Y29uc3RydWN0b3IoZSxBLHQsbixzKXtsZXQgYT0oZT09PTIxOXx8ZT09PTIyMSkmJkE9PT0wJiYodD09PWkucmV2ZXJiRWZmZWN0c1NlbmR8fHQ9PT1pLmNob3J1c0VmZmVjdHNTZW5kKSxyPWU9PT1jYSYmQT09PTAmJnQ9PT1pLmluaXRpYWxGaWx0ZXJRO3N1cGVyKFhBLmZyb21Tb3VyY2VFbnVtKGUpLFhBLmZyb21Tb3VyY2VFbnVtKEEpLHQsbixzLGEsciksdGhpcy5kZXN0aW5hdGlvbj5tbyYmKHRoaXMuZGVzdGluYXRpb249aS5JTlZBTElEKX19LGZuPTk2MCxtbj1RQS5jb25jYXZlLFVvPVtuZXcgeUEoZ2UobW4sITEsITAsITEsai5ub3RlT25WZWxvY2l0eSksMCxpLmluaXRpYWxBdHRlbnVhdGlvbixmbiwwKSxuZXcgeUEoMTI5LDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLm1haW5Wb2x1bWUpLDAsaS5pbml0aWFsQXR0ZW51YXRpb24sZm4sMCksbmV3IHlBKDEzLDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QSg1MjYsMTYsaS5maW5lVHVuZSwxMjcwMCwwKSxuZXcgeUEoNjUwLDAsaS5wYW4sNTAwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLmV4cHJlc3Npb25Db250cm9sbGVyKSwwLGkuaW5pdGlhbEF0dGVudWF0aW9uLGZuLDApLG5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDIwMCwwKSxuZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwyMDAsMCldLFRvPVtuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCExLGoucG9seVByZXNzdXJlKSwwLGkudmliTGZvVG9QaXRjaCw1MCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCEwLFMudHJlbW9sb0RlcHRoKSwwLGkubW9kTGZvVG9Wb2x1bWUsMjQsMCksbmV3IHlBKGdlKFFBLmNvbnZleCwhMCwhMSwhMCxTLmF0dGFja1RpbWUpLDAsaS5hdHRhY2tWb2xFbnYsNmUzLDApLG5ldyB5QShnZShRQS5saW5lYXIsITAsITEsITAsUy5yZWxlYXNlVGltZSksMCxpLnJlbGVhc2VWb2xFbnYsMzYwMCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCEwLCExLCEwLFMuYnJpZ2h0bmVzcyksMCxpLmluaXRpYWxGaWx0ZXJGYyw2ZTMsMCksbmV3IHlBKGNhLDAsaS5pbml0aWFsRmlsdGVyUSwyNTAsMCldLEVhPVVvLmNvbmNhdChUbyksQ3Q9NCxGQT1jbGFzc3tnZW5lcmF0b3JUeXBlO2dlbmVyYXRvclZhbHVlPTA7Y29uc3RydWN0b3IoZSxBLHQ9ITApe2lmKHRoaXMuZ2VuZXJhdG9yVHlwZT1lLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZC4iKTtpZih0aGlzLmdlbmVyYXRvclZhbHVlPU1hdGgucm91bmQoQSksdCl7bGV0IG49eFtlXTtuIT09dm9pZCAwJiYodGhpcy5nZW5lcmF0b3JWYWx1ZT1NYXRoLm1heChuLm1pbixNYXRoLm1pbihuLm1heCx0aGlzLmdlbmVyYXRvclZhbHVlKSkpfX13cml0ZShlLEEpe0ooZSx0aGlzLmdlbmVyYXRvclR5cGUpLEooZSx0aGlzLmdlbmVyYXRvclZhbHVlKSxBLmdlbisrfXRvU3RyaW5nKCl7cmV0dXJuYCR7T2JqZWN0LmtleXMoaSkuZmluZChlPT5pW2VdPT09dGhpcy5nZW5lcmF0b3JUeXBlKX06ICR7dGhpcy5nZW5lcmF0b3JWYWx1ZX1gfX07ZnVuY3Rpb24geG8oZSxBLHQpe2xldCBuPXhbZV18fHttaW46MCxtYXg6MzI3NjgsZGVmOjB9LHM9QS5maW5kKG89Pm8uZ2VuZXJhdG9yVHlwZT09PWUpLGE9MDtzJiYoYT1zLmdlbmVyYXRvclZhbHVlKTtsZXQgcj10LmZpbmQobz0+by5nZW5lcmF0b3JUeXBlPT09ZSksST1uLmRlZjtyZXR1cm4gciYmKEk9ci5nZW5lcmF0b3JWYWx1ZSksTWF0aC5tYXgoLTMyNzY3LE1hdGgubWluKDMyNzY3LEkrYSkpfXZhciBKdD00LFZ0PWNsYXNze3ZlbFJhbmdlPXttaW46LTEsbWF4OjEyN307a2V5UmFuZ2U9e21pbjotMSxtYXg6MTI3fTtnZW5lcmF0b3JzPVtdO21vZHVsYXRvcnM9W107Z2V0IGhhc0tleVJhbmdlKCl7cmV0dXJuIHRoaXMua2V5UmFuZ2UubWluIT09LTF9Z2V0IGhhc1ZlbFJhbmdlKCl7cmV0dXJuIHRoaXMudmVsUmFuZ2UubWluIT09LTF9Z2V0IGZpbmVUdW5pbmcoKXtsZXQgZT10aGlzLmdldEdlbmVyYXRvcihpLmNvYXJzZVR1bmUsMCksQT10aGlzLmdldEdlbmVyYXRvcihpLmZpbmVUdW5lLDApO3JldHVybiBlKjEwMCtBfXNldCBmaW5lVHVuaW5nKGUpe2xldCBBPU1hdGgudHJ1bmMoZS8xMDApLHQ9ZSUxMDA7dGhpcy5zZXRHZW5lcmF0b3IoaS5jb2Fyc2VUdW5lLEEpLHRoaXMuc2V0R2VuZXJhdG9yKGkuZmluZVR1bmUsdCl9YWRkVG9HZW5lcmF0b3IoZSxBLHQ9ITApe2xldCBuPXRoaXMuZ2V0R2VuZXJhdG9yKGUseFtlXS5kZWYpO3RoaXMuc2V0R2VuZXJhdG9yKGUsQStuLHQpfXNldEdlbmVyYXRvcihlLEEsdD0hMCl7c3dpdGNoKGUpe2Nhc2UgaS5zYW1wbGVJRDp0aHJvdyBuZXcgRXJyb3IoIlVzZSBzZXRTYW1wbGUoKSIpO2Nhc2UgaS5pbnN0cnVtZW50OnRocm93IG5ldyBFcnJvcigiVXNlIHNldEluc3RydW1lbnQoKSIpO2Nhc2UgaS52ZWxSYW5nZTpjYXNlIGkua2V5UmFuZ2U6dGhyb3cgbmV3IEVycm9yKCJTZXQgdGhlIHJhbmdlIG1hbnVhbGx5Iil9aWYoQT09PW51bGwpe3RoaXMuZ2VuZXJhdG9ycz10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKHM9PnMuZ2VuZXJhdG9yVHlwZSE9PWUpO3JldHVybn1sZXQgbj10aGlzLmdlbmVyYXRvcnMuZmluZEluZGV4KHM9PnMuZ2VuZXJhdG9yVHlwZT09PWUpO24+PTA/dGhpcy5nZW5lcmF0b3JzW25dPW5ldyBGQShlLEEsdCk6dGhpcy5hZGRHZW5lcmF0b3JzKG5ldyBGQShlLEEsdCkpfWFkZEdlbmVyYXRvcnMoLi4uZSl7ZS5mb3JFYWNoKEE9Pntzd2l0Y2goQS5nZW5lcmF0b3JUeXBlKXtkZWZhdWx0OnRoaXMuZ2VuZXJhdG9ycy5wdXNoKEEpO2JyZWFrO2Nhc2UgaS5zYW1wbGVJRDpjYXNlIGkuaW5zdHJ1bWVudDpicmVhaztjYXNlIGkudmVsUmFuZ2U6dGhpcy52ZWxSYW5nZS5taW49QS5nZW5lcmF0b3JWYWx1ZSYxMjcsdGhpcy52ZWxSYW5nZS5tYXg9QS5nZW5lcmF0b3JWYWx1ZT4+OCYxMjc7YnJlYWs7Y2FzZSBpLmtleVJhbmdlOnRoaXMua2V5UmFuZ2UubWluPUEuZ2VuZXJhdG9yVmFsdWUmMTI3LHRoaXMua2V5UmFuZ2UubWF4PUEuZ2VuZXJhdG9yVmFsdWU+PjgmMTI3fX0pfWFkZE1vZHVsYXRvcnMoLi4uZSl7dGhpcy5tb2R1bGF0b3JzLnB1c2goLi4uZSl9Z2V0R2VuZXJhdG9yKGUsQSl7cmV0dXJuIHRoaXMuZ2VuZXJhdG9ycy5maW5kKHQ9PnQuZ2VuZXJhdG9yVHlwZT09PWUpPy5nZW5lcmF0b3JWYWx1ZT8/QX1jb3B5RnJvbShlKXt0aGlzLmdlbmVyYXRvcnM9ZS5nZW5lcmF0b3JzLm1hcChBPT5uZXcgRkEoQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUsITEpKSx0aGlzLm1vZHVsYXRvcnM9ZS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSksdGhpcy52ZWxSYW5nZT17Li4uZS52ZWxSYW5nZX0sdGhpcy5rZXlSYW5nZT17Li4uZS5rZXlSYW5nZX19Z2V0R2VuQ291bnQoKXtsZXQgZT10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKEE9PkEuZ2VuZXJhdG9yVHlwZSE9PWkuc2FtcGxlSUQmJkEuZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmQS5nZW5lcmF0b3JUeXBlIT09aS5rZXlSYW5nZSYmQS5nZW5lcmF0b3JUeXBlIT09aS52ZWxSYW5nZSkubGVuZ3RoO3JldHVybiB0aGlzLmhhc1ZlbFJhbmdlJiZlKyssdGhpcy5oYXNLZXlSYW5nZSYmZSsrLGV9d3JpdGUoZSxBLHQsbixzKXtsZXQgYT1uLmdlbixyPW4ubW9kO0oodC5wZHRhLGEmNjU1MzUpLEoodC5wZHRhLHImNjU1MzUpLEoodC54ZHRhLGE+PjE2KSxKKHQueGR0YSxyPj4xNiksbi5iYWcrKyx0aGlzLmdldFdyaXRlR2VuZXJhdG9ycyhzKS5mb3JFYWNoKG89Pm8ud3JpdGUoZSxuKSksdGhpcy5tb2R1bGF0b3JzLmZvckVhY2gobz0+by53cml0ZShBLG4pKX1nZXRXcml0ZUdlbmVyYXRvcnMoZSl7bGV0IEE9dGhpcy5nZW5lcmF0b3JzLmZpbHRlcih0PT50LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ0LmdlbmVyYXRvclR5cGUhPT1pLmluc3RydW1lbnQmJnQuZ2VuZXJhdG9yVHlwZSE9PWkua2V5UmFuZ2UmJnQuZ2VuZXJhdG9yVHlwZSE9PWkudmVsUmFuZ2UpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gYmFuayBwcm92aWRlZCEgIik7cmV0dXJuIHRoaXMuaGFzVmVsUmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS52ZWxSYW5nZSx0aGlzLnZlbFJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLnZlbFJhbmdlLm1pbiwwKSwhMSkpLHRoaXMuaGFzS2V5UmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS5rZXlSYW5nZSx0aGlzLmtleVJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLmtleVJhbmdlLm1pbiwwKSwhMSkpLEF9fSxCYT1jbGFzcyBleHRlbmRzIFZ0e30sQ2E9Y2xhc3MgZXh0ZW5kcyBWdHtwYXJlbnRQcmVzZXQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50UHJlc2V0PWUsdGhpcy5faW5zdHJ1bWVudD1BLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1faW5zdHJ1bWVudDtnZXQgaW5zdHJ1bWVudCgpe3JldHVybiB0aGlzLl9pbnN0cnVtZW50fXNldCBpbnN0cnVtZW50KGUpe3RoaXMuX2luc3RydW1lbnQmJnRoaXMuX2luc3RydW1lbnQudW5saW5rRnJvbSh0aGlzLnBhcmVudFByZXNldCksdGhpcy5faW5zdHJ1bWVudD1lLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkluc3RydW1lbnQgSUQgY2Fubm90IGJlIGRldGVybWluZWQgd2l0aG91dCB0aGUgc291bmQgYmFuayBpdHNlbGYuIik7bGV0IHQ9ZS5pbnN0cnVtZW50cy5pbmRleE9mKHRoaXMuaW5zdHJ1bWVudCk7aWYodDwwKXRocm93IG5ldyBFcnJvcihgJHt0aGlzLmluc3RydW1lbnQubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gJHtlLnNvdW5kQmFua0luZm8ubmFtZX0hIENhbm5vdCB3cml0ZSBpbnN0cnVtZW50IGdlbmVyYXRvci5gKTtyZXR1cm4gQS5wdXNoKG5ldyBGQShpLmluc3RydW1lbnQsdCwhMSkpLEF9fSxoYT1jbGFzcyBleHRlbmRzIFZ0e3BhcmVudEluc3RydW1lbnQ7dXNlQ291bnQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50SW5zdHJ1bWVudD1lLHRoaXMuX3NhbXBsZT1BLEEubGlua1RvKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy51c2VDb3VudD1lLnVzZUNvdW50fV9zYW1wbGU7Z2V0IHNhbXBsZSgpe3JldHVybiB0aGlzLl9zYW1wbGV9c2V0IHNhbXBsZShlKXt0aGlzLl9zYW1wbGUmJnRoaXMuX3NhbXBsZS51bmxpbmtGcm9tKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy5fc2FtcGxlPWUsZS5saW5rVG8odGhpcy5wYXJlbnRJbnN0cnVtZW50KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKSx0PWUuc2FtcGxlcy5pbmRleE9mKHRoaXMuc2FtcGxlKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluICR7ZS5zb3VuZEJhbmtJbmZvLm5hbWV9ISBDYW5ub3Qgd3JpdGUgc2FtcGxlSUQgZ2VuZXJhdG9yLmApO3JldHVybiBBLnB1c2gobmV3IEZBKGkuc2FtcGxlSUQsdCwhMSkpLEF9fSxsYT0yMixIbz1uZXcgU2V0KFtpLnZlbFJhbmdlLGkua2V5UmFuZ2UsaS5pbnN0cnVtZW50LGkuc2FtcGxlSUQsaS5leGNsdXNpdmVDbGFzcyxpLmVuZE9wZXIsaS5zYW1wbGVNb2RlcyxpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5lbmRsb29wQWRkcnNPZmZzZXQsaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5zdGFydEFkZHJzT2Zmc2V0LGkuc3RhcnRBZGRyc0NvYXJzZU9mZnNldCxpLmVuZEFkZHJPZmZzZXQsaS5lbmRBZGRyc0NvYXJzZU9mZnNldCxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLmtleU51bVRvVm9sRW52SG9sZCxpLmtleU51bVRvVm9sRW52RGVjYXksaS5rZXlOdW1Ub01vZEVudkhvbGQsaS5rZXlOdW1Ub01vZEVudkRlY2F5XSksZHQ9Y2xhc3N7bmFtZT0iIjt6b25lcz1bXTtnbG9iYWxab25lPW5ldyBCYTtsaW5rZWRUbz1bXTtnZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgaGEodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKSx0aGlzLnpvbmVzLmZvckVhY2goQT0+QS51c2VDb3VudCsrKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKSx0aGlzLnpvbmVzLmZvckVhY2godD0+dC51c2VDb3VudC0tKX1kZWxldGVVbnVzZWRab25lcygpe3RoaXMuem9uZXM9dGhpcy56b25lcy5maWx0ZXIoZT0+e2xldCBBPWUudXNlQ291bnQ+MDtyZXR1cm4gQXx8ZS5zYW1wbGUudW5saW5rRnJvbSh0aGlzKSxBfSl9ZGVsZXRlKCl7aWYodGhpcy51c2VDb3VudD4wKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBhbiBpbnN0cnVtZW50IHRoYXQgaXMgdXNlZCBieTogJHt0aGlzLmxpbmtlZFRvLm1hcChlPT5lLm5hbWUpLnRvU3RyaW5nKCl9LmApO3RoaXMuem9uZXMuZm9yRWFjaChlPT5lLnNhbXBsZS51bmxpbmtGcm9tKHRoaXMpKX1kZWxldGVab25lKGUsQT0hMSl7bGV0IHQ9dGhpcy56b25lc1tlXTtyZXR1cm4gdC51c2VDb3VudC09MSx0LnVzZUNvdW50PDF8fEE/KHQuc2FtcGxlLnVubGlua0Zyb20odGhpcyksdGhpcy56b25lcy5zcGxpY2UoZSwxKSwhMCk6ITF9Z2xvYmFsaXplKCl7bGV0IGU9dGhpcy5nbG9iYWxab25lO2ZvcihsZXQgbj0wO248NTg7bisrKXtpZihIby5oYXMobikpY29udGludWU7bj1uO2xldCBzPXt9LGE9eFtuXT8uZGVmfHwwO3NbYV09MDtmb3IobGV0IHIgb2YgdGhpcy56b25lcyl7bGV0IEk9ci5nZXRHZW5lcmF0b3Iobix2b2lkIDApO0khPT12b2lkIDA/c1tJXT09PXZvaWQgMD9zW0ldPTE6c1tJXSsrOnNbYV0rKztsZXQgbztzd2l0Y2gobil7ZGVmYXVsdDpjb250aW51ZTtjYXNlIGkuZGVjYXlWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52SG9sZDticmVhaztjYXNlIGkuZGVjYXlNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52SG9sZH1pZihyLmdldEdlbmVyYXRvcihvLHZvaWQgMCkhPT12b2lkIDApe3M9e307YnJlYWt9fWlmKE9iamVjdC5rZXlzKHMpLmxlbmd0aD4wKXtsZXQgST1PYmplY3QuZW50cmllcyhzKS5yZWR1Y2UoKGcsQik9PmdbMV08QlsxXT9COmcsWyIwIiwwXSksbz1wYXJzZUludChJWzBdKTtvIT09YSYmZS5zZXRHZW5lcmF0b3IobixvLCExKSx0aGlzLnpvbmVzLmZvckVhY2goZz0+e2xldCBCPWcuZ2V0R2VuZXJhdG9yKG4sdm9pZCAwKTtCIT09dm9pZCAwP0I9PT1vJiZnLnNldEdlbmVyYXRvcihuLG51bGwpOm8hPT1hJiZnLnNldEdlbmVyYXRvcihuLGEpfSl9fWxldCB0PXRoaXMuem9uZXNbMF0ubW9kdWxhdG9ycy5tYXAobj0+RUEuY29weUZyb20obikpO2ZvcihsZXQgbiBvZiB0KXtsZXQgcz0hMDtmb3IobGV0IGEgb2YgdGhpcy56b25lcyl7aWYoIXMpY29udGludWU7YS5tb2R1bGF0b3JzLmZpbmQoST0+RUEuaXNJZGVudGljYWwoSSxuKSl8fChzPSExKX1pZihzKXtlLmFkZE1vZHVsYXRvcnMoRUEuY29weUZyb20obikpO2ZvcihsZXQgYSBvZiB0aGlzLnpvbmVzKXtsZXQgcj1hLm1vZHVsYXRvcnMuZmluZChJPT5FQS5pc0lkZW50aWNhbChJLG4pKTtyJiZyLnRyYW5zZm9ybUFtb3VudD09PW4udHJhbnNmb3JtQW1vdW50JiZhLm1vZHVsYXRvcnMuc3BsaWNlKGEubW9kdWxhdG9ycy5pbmRleE9mKHIpLDEpfX19fWdldFNpemUoKXtsZXQgZT10aGlzLnpvbmVzLnJlZHVjZSgodCxuKT0+bi5tb2R1bGF0b3JzLmxlbmd0aCt0LDApK3RoaXMuZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmxlbmd0aCxBPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLmdldEdlbkNvdW50KCkrdCwwKSt0aGlzLmdsb2JhbFpvbmUuZ2V0R2VuQ291bnQoKTtyZXR1cm57bW9kOmUqbWUsYmFnOih0aGlzLnpvbmVzLmxlbmd0aCsxKSpKdCxnZW46QSpDdCxoZHI6bGF9fXdyaXRlKGUsQSx0LG4scyxhKXtwKGAlY1dyaXRpbmcgJHt0aGlzLm5hbWV9Li4uYCxjLmluZm8pLGtBKG4ucGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShuLnhkdGEsdGhpcy5uYW1lLnN1YnN0cmluZygyMCksMjApLEoobi5wZHRhLHMuaGRyJjY1NTM1KSxKKG4ueGR0YSxzLmhkcj4+PjE2KSxzLmhkcis9dGhpcy56b25lcy5sZW5ndGgrMSx0aGlzLmdsb2JhbFpvbmUud3JpdGUoZSxBLHQscyxhKSx0aGlzLnpvbmVzLmZvckVhY2gocj0+ci53cml0ZShlLEEsdCxzLGEpKX19LGRhPTM4LHBlPWNsYXNze3BhcmVudFNvdW5kQmFuaztuYW1lPSIiO3Byb2dyYW09MDtiYW5rTVNCPTA7YmFua0xTQj0wO2lzR01HU0RydW09ITE7em9uZXM9W107Z2xvYmFsWm9uZTtsaWJyYXJ5PTA7Z2VucmU9MDttb3JwaG9sb2d5PTA7Y29uc3RydWN0b3IoZSxBPW5ldyBCYSl7dGhpcy5wYXJlbnRTb3VuZEJhbms9ZSx0aGlzLmdsb2JhbFpvbmU9QX1nZXQgaXNYR0RydW1zKCl7cmV0dXJuIHRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rJiZmQS5pc1hHRHJ1bXModGhpcy5iYW5rTVNCKX1nZXQgaXNBbnlEcnVtcygpe2xldCBlPXRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rO3JldHVybiB0aGlzLmlzR01HU0RydW18fGUmJmZBLmlzWEdEcnVtcyh0aGlzLmJhbmtNU0IpJiZ0aGlzLmJhbmtNU0IhPT0xMjZ9ZGVsZXRlKCl7dGhpcy56b25lcy5mb3JFYWNoKGU9PmUuaW5zdHJ1bWVudD8udW5saW5rRnJvbSh0aGlzKSl9ZGVsZXRlWm9uZShlKXt0aGlzLnpvbmVzW2VdPy5pbnN0cnVtZW50Py51bmxpbmtGcm9tKHRoaXMpLHRoaXMuem9uZXMuc3BsaWNlKGUsMSl9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgQ2EodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9cHJlbG9hZChlLEEpe2ZvcihsZXQgdD1lO3Q8QSsxO3QrKylmb3IobGV0IG49MDtuPDEyODtuKyspdGhpcy5nZXRTeW50aGVzaXNEYXRhKHQsbikuZm9yRWFjaChzPT57cy5zYW1wbGUuZ2V0QXVkaW9EYXRhKCl9KX1tYXRjaGVzKGUpe3JldHVybiB0ZS5tYXRjaGVzKHRoaXMsZSl9Z2V0U2l6ZSgpe2xldCBlPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLm1vZHVsYXRvcnMubGVuZ3RoK3QsMCkrdGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnMubGVuZ3RoLEE9dGhpcy56b25lcy5yZWR1Y2UoKHQsbik9Pm4uZ2V0R2VuQ291bnQoKSt0LDApK3RoaXMuZ2xvYmFsWm9uZS5nZXRHZW5Db3VudCgpO3JldHVybnttb2Q6ZSptZSxiYWc6KHRoaXMuem9uZXMubGVuZ3RoKzEpKkp0LGdlbjpBKkN0LGhkcjpkYX19Z2V0U3ludGhlc2lzRGF0YShlLEEpe2lmKHRoaXMuem9uZXMubGVuZ3RoPDEpcmV0dXJuW107ZnVuY3Rpb24gdChkLGgpe3JldHVybiBoPj1kLm1pbiYmaDw9ZC5tYXh9ZnVuY3Rpb24gbihkLGgpe2QucHVzaCguLi5oLmZpbHRlcihDPT4hZC5maW5kKFE9PlEuZ2VuZXJhdG9yVHlwZT09PUMuZ2VuZXJhdG9yVHlwZSkpKX1mdW5jdGlvbiBzKGQsaCl7ZC5wdXNoKC4uLmguZmlsdGVyKEM9PiFkLmZpbmQoUT0+RUEuaXNJZGVudGljYWwoQyxRKSkpKX1sZXQgYT1bXSxyPVsuLi50aGlzLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10sST1bLi4udGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnNdLG89dGhpcy5nbG9iYWxab25lLmtleVJhbmdlLGc9dGhpcy5nbG9iYWxab25lLnZlbFJhbmdlO3JldHVybiB0aGlzLnpvbmVzLmZpbHRlcihkPT50KGQuaGFzS2V5UmFuZ2U/ZC5rZXlSYW5nZTpvLGUpJiZ0KGQuaGFzVmVsUmFuZ2U/ZC52ZWxSYW5nZTpnLEEpKS5mb3JFYWNoKGQ9PntsZXQgaD1kLmluc3RydW1lbnQ7aWYoIWh8fGguem9uZXMubGVuZ3RoPDEpcmV0dXJuO2xldCBDPWQuZ2VuZXJhdG9ycyxRPWQubW9kdWxhdG9ycyxtPVsuLi5oLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10seT1bLi4uaC5nbG9iYWxab25lLm1vZHVsYXRvcnNdLEY9aC5nbG9iYWxab25lLmtleVJhbmdlLGs9aC5nbG9iYWxab25lLnZlbFJhbmdlO2guem9uZXMuZmlsdGVyKHY9PnQodi5oYXNLZXlSYW5nZT92LmtleVJhbmdlOkYsZSkmJnQodi5oYXNWZWxSYW5nZT92LnZlbFJhbmdlOmssQSkpLmZvckVhY2godj0+e2xldCBMPVsuLi52LmdlbmVyYXRvcnNdLEU9Wy4uLnYubW9kdWxhdG9yc107bihDLHIpLG4oTCxtKSxzKFEsSSkscyhFLHkpLHMoRSx0aGlzLnBhcmVudFNvdW5kQmFuay5kZWZhdWx0TW9kdWxhdG9ycyk7bGV0IFg9Wy4uLkVdO2ZvcihsZXQgTyBvZiBRKXtsZXQgbkE9WC5maW5kSW5kZXgoJD0+RUEuaXNJZGVudGljYWwoTywkKSk7bkEhPT0tMT9YW25BXT1YW25BXS5zdW1UcmFuc2Zvcm0oTyk6WC5wdXNoKE8pfXYuc2FtcGxlJiZhLnB1c2goe2luc3RydW1lbnRHZW5lcmF0b3JzOkwscHJlc2V0R2VuZXJhdG9yczpDLG1vZHVsYXRvcnM6WCxzYW1wbGU6di5zYW1wbGV9KX0pfSksYX10b01JRElTdHJpbmcoKXtyZXR1cm4gdGUudG9NSURJU3RyaW5nKHRoaXMpfXRvU3RyaW5nKCl7cmV0dXJuIHRlLnRvTmFtZWRNSURJU3RyaW5nKHRoaXMpfXRvRmxhdHRlbmVkSW5zdHJ1bWVudCgpe2xldCBlPShnLEIpPT57Zy5wdXNoKC4uLkIuZmlsdGVyKGQ9PiFnLmZpbmQoaD0+aC5nZW5lcmF0b3JUeXBlPT09ZC5nZW5lcmF0b3JUeXBlKSkpfSxBPShnLEIpPT4oe21pbjpNYXRoLm1heChnLm1pbixCLm1pbiksbWF4Ok1hdGgubWluKGcubWF4LEIubWF4KX0pLHQ9KGcsQik9PntnLnB1c2goLi4uQi5maWx0ZXIoZD0+IWcuZmluZChoPT5FQS5pc0lkZW50aWNhbChkLGgpKSkpfSxuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lO2xldCBzPVtdLGE9W10scj10aGlzLmdsb2JhbFpvbmU7cy5wdXNoKC4uLnIuZ2VuZXJhdG9ycyksYS5wdXNoKC4uLnIubW9kdWxhdG9ycyk7bGV0IEk9ci5rZXlSYW5nZSxvPXIudmVsUmFuZ2U7Zm9yKGxldCBnIG9mIHRoaXMuem9uZXMpe2lmKCFnLmluc3RydW1lbnQpdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IGluIGEgcHJlc2V0IHpvbmUuIik7bGV0IEI9Zy5rZXlSYW5nZTtnLmhhc0tleVJhbmdlfHwoQj1JKTtsZXQgZD1nLnZlbFJhbmdlO2cuaGFzVmVsUmFuZ2V8fChkPW8pO2xldCBoPWcuZ2VuZXJhdG9ycy5tYXAoTD0+bmV3IEZBKEwuZ2VuZXJhdG9yVHlwZSxMLmdlbmVyYXRvclZhbHVlKSk7ZShoLHMpO2xldCBDPVsuLi5nLm1vZHVsYXRvcnNdO3QoQyxhKTtsZXQgUT1nLmluc3RydW1lbnQsbT1RLnpvbmVzLHk9W10sRj1bXSxrPVEuZ2xvYmFsWm9uZTt5LnB1c2goLi4uay5nZW5lcmF0b3JzKSxGLnB1c2goLi4uay5tb2R1bGF0b3JzKTtsZXQgRD1rLmtleVJhbmdlLHY9ay52ZWxSYW5nZTtmb3IobGV0IEwgb2YgbSl7aWYoIUwuc2FtcGxlKXRocm93IG5ldyBFcnJvcigiTm8gc2FtcGxlIGluIGFuIGluc3RydW1lbnQgem9uZS4iKTtsZXQgRT1MLmtleVJhbmdlO0wuaGFzS2V5UmFuZ2V8fChFPUQpO2xldCBYPUwudmVsUmFuZ2U7aWYoTC5oYXNWZWxSYW5nZXx8KFg9diksRT1BKEUsQiksWD1BKFgsZCksRS5tYXg8RS5taW58fFgubWF4PFgubWluKWNvbnRpbnVlO2xldCBPPUwuZ2VuZXJhdG9ycy5tYXAoej0+bmV3IEZBKHouZ2VuZXJhdG9yVHlwZSx6LmdlbmVyYXRvclZhbHVlKSk7ZShPLHkpO2xldCBuQT1bLi4uTC5tb2R1bGF0b3JzXTt0KG5BLEYpO2xldCAkPVsuLi5uQV07Zm9yKGxldCB6IG9mIEMpe2xldCB0QT0kLmZpbmRJbmRleChpQT0+RUEuaXNJZGVudGljYWwoeixpQSkpO3RBIT09LTE/JFt0QV09JFt0QV0uc3VtVHJhbnNmb3JtKHopOiQucHVzaCh6KX1sZXQgVj1PLm1hcCh6PT5uZXcgRkEoei5nZW5lcmF0b3JUeXBlLHouZ2VuZXJhdG9yVmFsdWUpKTtmb3IobGV0IHogb2YgaCl7aWYoei5nZW5lcmF0b3JUeXBlPT09aS52ZWxSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5rZXlSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50fHx6LmdlbmVyYXRvclR5cGU9PT1pLmVuZE9wZXJ8fHouZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlTW9kZXMpY29udGludWU7bGV0IHRBPU8uZmluZEluZGV4KGlBPT5pQS5nZW5lcmF0b3JUeXBlPT09ei5nZW5lcmF0b3JUeXBlKTtpZih0QSE9PS0xKXtsZXQgaUE9Vlt0QV0uZ2VuZXJhdG9yVmFsdWUrei5nZW5lcmF0b3JWYWx1ZTtWW3RBXT1uZXcgRkEoei5nZW5lcmF0b3JUeXBlLGlBKX1lbHNle2xldCBpQT14W3ouZ2VuZXJhdG9yVHlwZV0uZGVmK3ouZ2VuZXJhdG9yVmFsdWU7Vi5wdXNoKG5ldyBGQSh6LmdlbmVyYXRvclR5cGUsaUEpKX19Vj1WLmZpbHRlcih6PT56LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmtleVJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLnZlbFJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmVuZE9wZXImJnouZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmei5nZW5lcmF0b3JWYWx1ZSE9PXhbei5nZW5lcmF0b3JUeXBlXS5kZWYpO2xldCBxPW4uY3JlYXRlWm9uZShMLnNhbXBsZSk7cS5rZXlSYW5nZT1FLHEudmVsUmFuZ2U9WCxxLmtleVJhbmdlLm1pbj09PTAmJnEua2V5UmFuZ2UubWF4PT09MTI3JiYocS5rZXlSYW5nZS5taW49LTEpLHEudmVsUmFuZ2UubWluPT09MCYmcS52ZWxSYW5nZS5tYXg9PT0xMjcmJihxLnZlbFJhbmdlLm1pbj0tMSkscS5hZGRHZW5lcmF0b3JzKC4uLlYpLHEuYWRkTW9kdWxhdG9ycyguLi4kKX19cmV0dXJuIG59d3JpdGUoZSxBLHQsbixzLGEpe3AoYCVjV3JpdGluZyAke3RoaXMubmFtZX0uLi5gLGMuaW5mbyksa0Eobi5wZHRhLHRoaXMubmFtZS5zdWJzdHJpbmcoMCwyMCksMjApLGtBKG4ueGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDIwKSwyMCksSihuLnBkdGEsdGhpcy5wcm9ncmFtKTtsZXQgcj10aGlzLmJhbmtNU0I7dGhpcy5pc0dNR1NEcnVtP3I9MTI4OnRoaXMuYmFua01TQj09PTAmJihyPXRoaXMuYmFua0xTQiksSihuLnBkdGEsciksbi54ZHRhLmN1cnJlbnRJbmRleCs9NCxKKG4ucGR0YSxzLmhkciY2NTUzNSksSihuLnhkdGEscy5oZHI+PjE2KSxnQShuLnBkdGEsdGhpcy5saWJyYXJ5KSxnQShuLnBkdGEsdGhpcy5nZW5yZSksZ0Eobi5wZHRhLHRoaXMubW9ycGhvbG9neSksbi54ZHRhLmN1cnJlbnRJbmRleCs9MTIscy5oZHIrPXRoaXMuem9uZXMubGVuZ3RoKzEsdGhpcy5nbG9iYWxab25lLndyaXRlKGUsQSx0LHMsYSksdGhpcy56b25lcy5mb3JFYWNoKEk9Pkkud3JpdGUoZSxBLHQscyxhKSl9fTtmdW5jdGlvbiBEcyhlLEEpe2xldCB0O3JldHVybiBBP3Q9ZS5maW5kKG49Pm4uaXNYR0RydW1zKTp0PWUuZmluZChuPT5uLmlzR01HU0RydW0pLHR8fChlLmZpbmQobj0+bi5pc0FueURydW1zKT8/ZVswXSl9ZnVuY3Rpb24gUWEoZSxBLHQpe2lmKGUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCJObyBwcmVzZXRzISIpO0EuaXNHTUdTRHJ1bSYmZkEuaXNTeXN0ZW1YRyh0KSYmKEE9ey4uLkEsaXNHTUdTRHJ1bTohMSxiYW5rTFNCOjAsYmFua01TQjpmQS5nZXREcnVtQmFuayh0KX0pO2xldHtpc0dNR1NEcnVtOm4sYmFua0xTQjpzLGJhbmtNU0I6YSxwcm9ncmFtOnJ9PUEsST1mQS5pc1N5c3RlbVhHKHQpLG89ZkEuaXNYR0RydW1zKGEpJiZJLGc9ZS5maW5kKEM9PkMubWF0Y2hlcyhBKSk7aWYoZyYmKCFvfHxvJiZnLmlzWEdEcnVtcykpcmV0dXJuIGc7bGV0IEI9Qz0+e3AoYCVjUHJlc2V0ICVjJHt0ZS50b01JRElTdHJpbmcoQSl9JWMgbm90IGZvdW5kLiAoJHt0fSkgUmVwbGFjZWQgd2l0aCAlYyR7Qy50b1N0cmluZygpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKX07aWYobil7bGV0IEM9ZS5maW5kKFE9PlEuaXNHTUdTRHJ1bSYmUS5wcm9ncmFtPT09cik7cmV0dXJuIEN8fChDPWUuZmluZChRPT5RLmlzQW55RHJ1bXMmJlEucHJvZ3JhbT09PXIpLEMpPyhCKEMpLEMpOihDPURzKGUsITEpLEIoQyksQyl9aWYobyl7bGV0IEM9ZS5maW5kKFE9PlEucHJvZ3JhbT09PXImJlEuaXNYR0RydW1zKTtyZXR1cm4gQ3x8KEM9ZS5maW5kKFE9PlEuaXNBbnlEcnVtcyYmUS5wcm9ncmFtPT09ciksQyk/KEIoQyksQyk6KEM9RHMoZSwhMCksQihDKSxDKX1sZXQgZD1lLmZpbHRlcihDPT5DLnByb2dyYW09PT1yJiYhQy5pc0FueURydW1zKTtpZihkLmxlbmd0aDwxKXJldHVybiBCKGVbMF0pLGVbMF07aWYoST9nPWQuZmluZChDPT5DLmJhbmtMU0I9PT1zKTpnPWQuZmluZChDPT5DLmJhbmtNU0I9PT1hKSxnKXJldHVybiBCKGcpLGc7bGV0IGg9TWF0aC5tYXgoYSxzKTtyZXR1cm4gZz1kLmZpbmQoQz0+Qy5iYW5rTFNCPT09aHx8Qy5iYW5rTVNCPT09aCksZz8oQihnKSxnKTooQihkWzBdKSxkWzBdKX12YXIgWW89Y2xhc3MgZXh0ZW5kcyBwZXtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKGUucGFyZW50U291bmRCYW5rLGUuZ2xvYmFsWm9uZSksdGhpcy5iYW5rTVNCPWZBLmFkZEJhbmtPZmZzZXQoZS5iYW5rTVNCLEEsZS5pc1hHRHJ1bXMpLHRoaXMubmFtZT1lLm5hbWUsdGhpcy5iYW5rTFNCPWUuYmFua0xTQix0aGlzLmlzR01HU0RydW09ZS5pc0dNR1NEcnVtLHRoaXMucHJvZ3JhbT1lLnByb2dyYW0sdGhpcy5nZW5yZT1lLmdlbnJlLHRoaXMubW9ycGhvbG9neT1lLm1vcnBob2xvZ3ksdGhpcy5saWJyYXJ5PWUubGlicmFyeSx0aGlzLnpvbmVzPWUuem9uZXN9fSxQbz1jbGFzc3tzb3VuZEJhbmtMaXN0PVtdO3ByZXNldExpc3RDaGFuZ2VDYWxsYmFjaztzZWxlY3RhYmxlUHJlc2V0TGlzdD1bXTtjb25zdHJ1Y3RvcihlKXt0aGlzLnByZXNldExpc3RDaGFuZ2VDYWxsYmFjaz1lfV9wcmVzZXRMaXN0PVtdO2dldCBwcmVzZXRMaXN0KCl7cmV0dXJuWy4uLnRoaXMuX3ByZXNldExpc3RdfWdldCBwcmlvcml0eU9yZGVyKCl7cmV0dXJuIHRoaXMuc291bmRCYW5rTGlzdC5tYXAoZT0+ZS5pZCl9c2V0IHByaW9yaXR5T3JkZXIoZSl7dGhpcy5zb3VuZEJhbmtMaXN0LnNvcnQoKEEsdCk9PmUuaW5kZXhPZihBLmlkKS1lLmluZGV4T2YodC5pZCkpLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9ZGVsZXRlU291bmRCYW5rKGUpe2lmKHRoaXMuc291bmRCYW5rTGlzdC5sZW5ndGg9PT0wKXtzQSgiMSBzb3VuZGJhbmsgbGVmdC4gQWJvcnRpbmchIik7cmV0dXJufWxldCBBPXRoaXMuc291bmRCYW5rTGlzdC5maW5kSW5kZXgodD0+dC5pZD09PWUpO2lmKEE9PT0tMSl0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdW5kIGJhbmsgd2l0aCBpZCAiJHtlfSJgKTt0aGlzLnNvdW5kQmFua0xpc3Quc3BsaWNlKEEsMSksdGhpcy5nZW5lcmF0ZVByZXNldExpc3QoKX1hZGRTb3VuZEJhbmsoZSxBLHQ9MCl7bGV0IG49dGhpcy5zb3VuZEJhbmtMaXN0LmZpbmQocz0+cy5pZD09PUEpO24hPT12b2lkIDA/KG4uc291bmRCYW5rPWUsbi5iYW5rT2Zmc2V0PXQpOnRoaXMuc291bmRCYW5rTGlzdC5wdXNoKHtpZDpBLHNvdW5kQmFuazplLGJhbmtPZmZzZXQ6dH0pLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9Z2V0UHJlc2V0KGUsQSl7aWYodGhpcy5zb3VuZEJhbmtMaXN0Lmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MhIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBvbmU/Iik7cmV0dXJuIFFhKHRoaXMuc2VsZWN0YWJsZVByZXNldExpc3QsZSxBKX1kZXN0cm95KCl7dGhpcy5zb3VuZEJhbmtMaXN0LmZvckVhY2goZT0+e2Uuc291bmRCYW5rLmRlc3Ryb3lTb3VuZEJhbmsoKX0pLHRoaXMuc291bmRCYW5rTGlzdD1bXX1nZW5lcmF0ZVByZXNldExpc3QoKXtsZXQgZT1uZXcgQXJyYXksQT1uZXcgU2V0O3RoaXMuc291bmRCYW5rTGlzdC5mb3JFYWNoKHQ9PntsZXQgbj10LnNvdW5kQmFuayxzPXQuYmFua09mZnNldDtuLnByZXNldHMuZm9yRWFjaChhPT57bGV0IHI9bmV3IFlvKGEscyk7QS5oYXMoci50b01JRElTdHJpbmcoKSl8fChBLmFkZChyLnRvTUlESVN0cmluZygpKSxlLnB1c2gocikpfSl9KSxlLnNvcnQodGUuc29ydGVyLmJpbmQodGUpKSx0aGlzLnNlbGVjdGFibGVQcmVzZXRMaXN0PWUsdGhpcy5fcHJlc2V0TGlzdD1lLm1hcCh0PT4oe2JhbmtNU0I6dC5iYW5rTVNCLGJhbmtMU0I6dC5iYW5rTFNCLHByb2dyYW06dC5wcm9ncmFtLGlzR01HU0RydW06dC5pc0dNR1NEcnVtLG5hbWU6dC5uYW1lLGlzQW55RHJ1bXM6dC5pc0FueURydW1zfSkpLHRoaXMucHJlc2V0TGlzdENoYW5nZUNhbGxiYWNrKCl9fSxKbz0uMDUscW89MzA3MCxLbz0yZTMsd3M9TWF0aC5QSS8yLE50PS01MDAsdWE9NTAwLG9zPXVhLU50LGZhPW5ldyBGbG9hdDMyQXJyYXkob3MrMSksbWE9bmV3IEZsb2F0MzJBcnJheShvcysxKTtmb3IobGV0IGU9TnQ7ZTw9dWE7ZSsrKXtsZXQgQT0oZS1OdCkvb3MsdD1lLU50O2ZhW3RdPU1hdGguY29zKHdzKkEpLG1hW3RdPU1hdGguc2luKHdzKkEpfWZ1bmN0aW9uIE9vKGUsQSx0LG4scyxhLHIsSSxvKXtpZihpc05hTihBWzBdKSlyZXR1cm47bGV0IGc7ZS5vdmVycmlkZVBhbj9nPWUub3ZlcnJpZGVQYW46KGUuY3VycmVudFBhbis9KGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnBhbl0tZS5jdXJyZW50UGFuKSp0aGlzLnN5bnRoUHJvcHMucGFuU21vb3RoaW5nRmFjdG9yLGc9ZS5jdXJyZW50UGFuKTtsZXQgQj10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tYXN0ZXJHYWluKnRoaXMuc3ludGhQcm9wcy5taWRpVm9sdW1lKmUuZ2FpbixkPX5+KGcrNTAwKSxoPWZhW2RdKkIqdGhpcy5zeW50aFByb3BzLnBhbkxlZnQsQz1tYVtkXSpCKnRoaXMuc3ludGhQcm9wcy5wYW5SaWdodDtpZih0aGlzLnN5bnRoLmVuYWJsZUVmZmVjdHMpe2xldCBRPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJldmVyYkVmZmVjdHNTZW5kXTtpZihRPjApe2xldCB5PXRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnJldmVyYkdhaW4qdGhpcy5zeW50aFByb3BzLnJldmVyYlNlbmQqQiooUS9xbyk7Zm9yKGxldCBGPTA7RjxBLmxlbmd0aDtGKyspe2xldCBrPUYrbztzW2tdKz15KkFbRl0sYVtrXSs9eSpBW0ZdfX1sZXQgbT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5jaG9ydXNFZmZlY3RzU2VuZF07aWYobT4wKXtsZXQgeT10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5jaG9ydXNHYWluKnRoaXMuc3ludGhQcm9wcy5jaG9ydXNTZW5kKihtL0tvKSxGPWgqeSxrPUMqeTtmb3IobGV0IEQ9MDtEPEEubGVuZ3RoO0QrKyl7bGV0IHY9RCtvO3Jbdl0rPUYqQVtEXSxJW3ZdKz1rKkFbRF19fX1pZihoPjApZm9yKGxldCBRPTA7UTxBLmxlbmd0aDtRKyspdFtRK29dKz1oKkFbUV07aWYoQz4wKWZvcihsZXQgUT0wO1E8QS5sZW5ndGg7USsrKW5bUStvXSs9QypBW1FdfXZhciBWbz0uMSxYdD1jbGFzcyBFdHtzdGF0aWMgY2FjaGVkQ29lZmZpY2llbnRzPVtdO3Jlc29uYW5jZUNiPTA7Y3VycmVudEluaXRpYWxGYz0xMzUwMDthMD0wO2ExPTA7YTI9MDthMz0wO2E0PTA7eDE9MDt4Mj0wO3kxPTA7eTI9MDtsYXN0VGFyZ2V0Q3V0b2ZmPTEvMDtpbml0aWFsaXplZD0hMTtzYW1wbGVSYXRlO21heEN1dG9mZjtjb25zdHJ1Y3RvcihBKXt0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm1heEN1dG9mZj1BKi40NX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlckZjXSxyPUEuZmlsdGVyO3IuaW5pdGlhbGl6ZWQ/ci5jdXJyZW50SW5pdGlhbEZjKz0oYS1yLmN1cnJlbnRJbml0aWFsRmMpKnM6KHIuaW5pdGlhbGl6ZWQ9ITAsci5jdXJyZW50SW5pdGlhbEZjPWEpO2xldCBJPXIuY3VycmVudEluaXRpYWxGYytuLG89QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlclFdO2lmKHIuY3VycmVudEluaXRpYWxGYz4xMzQ5OSYmST4xMzQ5OSYmbz09PTApe3IuY3VycmVudEluaXRpYWxGYz0xMzUwMDtyZXR1cm59KE1hdGguYWJzKHIubGFzdFRhcmdldEN1dG9mZi1JKT4xfHxyLnJlc29uYW5jZUNiIT09bykmJihyLmxhc3RUYXJnZXRDdXRvZmY9SSxyLnJlc29uYW5jZUNiPW8sRXQuY2FsY3VsYXRlQ29lZmZpY2llbnRzKHIsSSkpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKXtsZXQgQj10W2ddLGQ9ci5hMCpCK3IuYTEqci54MStyLmEyKnIueDItci5hMypyLnkxLXIuYTQqci55MjtyLngyPXIueDEsci54MT1CLHIueTI9ci55MSxyLnkxPWQsdFtnXT1kfX1zdGF0aWMgY2FsY3VsYXRlQ29lZmZpY2llbnRzKEEsdCl7dD1+fnQ7bGV0IG49QS5yZXNvbmFuY2VDYixzPUV0LmNhY2hlZENvZWZmaWNpZW50cz8uW25dPy5bdF07aWYocyE9PXZvaWQgMCl7QS5hMD1zLmEwLEEuYTE9cy5hMSxBLmEyPXMuYTIsQS5hMz1zLmEzLEEuYTQ9cy5hNDtyZXR1cm59bGV0IGE9Tm4odCk7YT1NYXRoLm1pbihhLEEubWF4Q3V0b2ZmKTtsZXQgcj1uLzEwLEk9QWUoLShyLTMuMDEpKSxvPTEvTWF0aC5zcXJ0KEFlKC1yKSksZz0yKk1hdGguUEkqYS9BLnNhbXBsZVJhdGUsQj1NYXRoLmNvcyhnKSxkPU1hdGguc2luKGcpLygyKkkpLGg9KDEtQikqbyxDPWgvMixRPUMsbT0xK2QseT0tMipCLEY9MS1kLGs9e2EwOkMvbSxhMTpoL20sYTI6US9tLGEzOnkvbSxhNDpGL219O0EuYTA9ay5hMCxBLmExPWsuYTEsQS5hMj1rLmEyLEEuYTM9ay5hMyxBLmE0PWsuYTQsRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dPz89W10sRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dW3RdPWt9fSxIbj1uZXcgWHQoNDQxMDApO0huLnJlc29uYW5jZUNiPTA7Zm9yKGxldCBlPTE1MDA7ZTwxMzUwMDtlKyspSG4uY3VycmVudEluaXRpYWxGYz1lLFh0LmNhbGN1bGF0ZUNvZWZmaWNpZW50cyhIbixlKTt2YXIgRnM9e2VuYWJsZUV2ZW50U3lzdGVtOiEwLGluaXRpYWxUaW1lOjAsZW5hYmxlRWZmZWN0czohMH07ZnVuY3Rpb24gWG8oZSxBKXtsZXQgdD0wO3JldHVybiBlLmRydW1DaGFubmVsJiYodCs9NSksQS5pc0luUmVsZWFzZSYmKHQtPTUpLHQrPUEudmVsb2NpdHkvMjUsdC09QS52b2x1bWVFbnZlbG9wZS5zdGF0ZSxBLmlzSW5SZWxlYXNlJiYodC09NSksdC09QS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYi81MCx0fWZ1bmN0aW9uIFpvKGUpe2xldCBBPVtdO2ZvcihsZXQgbiBvZiB0aGlzLm1pZGlDaGFubmVscylmb3IobGV0IHMgb2Ygbi52b2ljZXMpaWYoIXMuZmluaXNoZWQpe2xldCBhPVhvKG4scyk7QS5wdXNoKHtjaGFubmVsOm4sdm9pY2U6cyxwcmlvcml0eTphfSl9QS5zb3J0KChuLHMpPT5uLnByaW9yaXR5LXMucHJpb3JpdHkpO2xldCB0PUEuc2xpY2UoMCxlKTtmb3IobGV0e2NoYW5uZWw6bix2b2ljZTpzfW9mIHQpe2xldCBhPW4udm9pY2VzLmluZGV4T2Yocyk7YT4tMSYmbi52b2ljZXMuc3BsaWNlKGEsMSl9fXZhciBTbj0xLFluPW5ldyBGbG9hdDMyQXJyYXkoMWUzKTtmb3IobGV0IGU9MDtlPFluLmxlbmd0aDtlKyspWW5bZV09SWEoMCxRQS5jb252ZXgsZS8xZTMpO3ZhciBfZT1jbGFzcyBQbnthdHRhY2tEdXJhdGlvbj0wO2RlY2F5RHVyYXRpb249MDtob2xkRHVyYXRpb249MDtyZWxlYXNlRHVyYXRpb249MDtzdXN0YWluTGV2ZWw9MDtkZWxheUVuZD0wO2F0dGFja0VuZD0wO2hvbGRFbmQ9MDtkZWNheUVuZD0wO3JlbGVhc2VTdGFydExldmVsPTA7Y3VycmVudFZhbHVlPTA7c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtQbi5yZWNhbGN1bGF0ZShBKX1zdGF0aWMgcmVjYWxjdWxhdGUoQSl7bGV0IHQ9QS5tb2R1bGF0aW9uRW52ZWxvcGU7QS5pc0luUmVsZWFzZSYmKHQucmVsZWFzZVN0YXJ0TGV2ZWw9UG4uZ2V0VmFsdWUoQSxBLnJlbGVhc2VTdGFydFRpbWUsITApKSx0LnN1c3RhaW5MZXZlbD0xLUEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnN1c3RhaW5Nb2RFbnZdLzFlMyx0LmF0dGFja0R1cmF0aW9uPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmF0dGFja01vZEVudl0pO2xldCBuPSg2MC1BLm1pZGlOb3RlKSpBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5rZXlOdW1Ub01vZEVudkRlY2F5XSxzPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlY2F5TW9kRW52XStuKTt0LmRlY2F5RHVyYXRpb249cyooMS10LnN1c3RhaW5MZXZlbCk7bGV0IGE9KDYwLUEubWlkaU5vdGUpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvTW9kRW52SG9sZF07dC5ob2xkRHVyYXRpb249UWUoYStBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5ob2xkTW9kRW52XSk7bGV0IHI9UWUoTWF0aC5tYXgoQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucmVsZWFzZU1vZEVudl0sLTcyMDApKTt0LnJlbGVhc2VEdXJhdGlvbj1yKnQucmVsZWFzZVN0YXJ0TGV2ZWwsdC5kZWxheUVuZD1BLnN0YXJ0VGltZStRZShBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZEVudl0pLHQuYXR0YWNrRW5kPXQuZGVsYXlFbmQrdC5hdHRhY2tEdXJhdGlvbix0LmhvbGRFbmQ9dC5hdHRhY2tFbmQrdC5ob2xkRHVyYXRpb24sdC5kZWNheUVuZD10LmhvbGRFbmQrdC5kZWNheUR1cmF0aW9ufXN0YXRpYyBnZXRWYWx1ZShBLHQsbj0hMSl7bGV0IHM9QS5tb2R1bGF0aW9uRW52ZWxvcGU7cmV0dXJuIEEuaXNJblJlbGVhc2UmJiFuP3MucmVsZWFzZVN0YXJ0TGV2ZWw9PT0wPzA6TWF0aC5tYXgoMCwoMS0odC1BLnJlbGVhc2VTdGFydFRpbWUpL3MucmVsZWFzZUR1cmF0aW9uKSpzLnJlbGVhc2VTdGFydExldmVsKToodDxzLmRlbGF5RW5kP3MuY3VycmVudFZhbHVlPTA6dDxzLmF0dGFja0VuZD9zLmN1cnJlbnRWYWx1ZT1Zblt+figoMS0ocy5hdHRhY2tFbmQtdCkvcy5hdHRhY2tEdXJhdGlvbikqMWUzKV06dDxzLmhvbGRFbmQ/cy5jdXJyZW50VmFsdWU9U246dDxzLmRlY2F5RW5kP3MuY3VycmVudFZhbHVlPSgxLShzLmRlY2F5RW5kLXQpL3MuZGVjYXlEdXJhdGlvbikqKHMuc3VzdGFpbkxldmVsLVNuKStTbjpzLmN1cnJlbnRWYWx1ZT1zLnN1c3RhaW5MZXZlbCxzLmN1cnJlbnRWYWx1ZSl9fSxTYT1jbGFzc3tzYW1wbGVEYXRhO3BsYXliYWNrU3RlcD0wO2N1cnNvcj0wO3Jvb3RLZXk9MDtsb29wU3RhcnQ9MDtsb29wRW5kPTA7ZW5kPTA7bG9vcGluZ01vZGU9MDtpc0xvb3Bpbmc9ITE7Y29uc3RydWN0b3IoZSxBLHQsbixzLGEscixJKXt0aGlzLnNhbXBsZURhdGE9ZSx0aGlzLnBsYXliYWNrU3RlcD1BLHRoaXMuY3Vyc29yPXQsdGhpcy5yb290S2V5PW4sdGhpcy5sb29wU3RhcnQ9cyx0aGlzLmxvb3BFbmQ9YSx0aGlzLmVuZD1yLHRoaXMubG9vcGluZ01vZGU9SSx0aGlzLmlzTG9vcGluZz10aGlzLmxvb3BpbmdNb2RlPT09MXx8dGhpcy5sb29waW5nTW9kZT09PTN9fSx6bz0tMjMyMCxXbz0tMTEzMCxKbj1jbGFzcyBwYXtzYW1wbGU7ZmlsdGVyO2dhaW49MTtnZW5lcmF0b3JzO21vZHVsYXRvcnM9W107cmVzb25hbmNlT2Zmc2V0PTA7bW9kdWxhdGVkR2VuZXJhdG9ycztmaW5pc2hlZD0hMTtpc0luUmVsZWFzZT0hMTt2ZWxvY2l0eT0wO21pZGlOb3RlPTA7cHJlc3N1cmU9MDt0YXJnZXRLZXk9MDttb2R1bGF0aW9uRW52ZWxvcGU9bmV3IF9lO3ZvbHVtZUVudmVsb3BlO3N0YXJ0VGltZT0wO3JlbGVhc2VTdGFydFRpbWU9MS8wO2N1cnJlbnRUdW5pbmdDZW50cz0wO2N1cnJlbnRUdW5pbmdDYWxjdWxhdGVkPTE7Y3VycmVudFBhbj0wO3JlYWxLZXk7cG9ydGFtZW50b0Zyb21LZXk9LTE7cG9ydGFtZW50b0R1cmF0aW9uPTA7b3ZlcnJpZGVQYW49MDtleGNsdXNpdmVDbGFzcz0wO2NvbnN0cnVjdG9yKEEsdCxuLHMsYSxyLEksbyxnKXt0aGlzLnNhbXBsZT10LHRoaXMuZ2VuZXJhdG9ycz1vLHRoaXMuZXhjbHVzaXZlQ2xhc3M9dGhpcy5nZW5lcmF0b3JzW2kuZXhjbHVzaXZlQ2xhc3NdLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9ycz1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1vZHVsYXRvcnM9Zyx0aGlzLmZpbHRlcj1uZXcgWHQoQSksdGhpcy52ZWxvY2l0eT1zLHRoaXMubWlkaU5vdGU9bix0aGlzLnN0YXJ0VGltZT1hLHRoaXMudGFyZ2V0S2V5PXIsdGhpcy5yZWFsS2V5PUksdGhpcy52b2x1bWVFbnZlbG9wZT1uZXcgYmUoQSxvW2kuc3VzdGFpblZvbEVudl0pfXN0YXRpYyBjb3B5RnJvbShBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1uZXcgU2Eocy5zYW1wbGVEYXRhLHMucGxheWJhY2tTdGVwLHMuY3Vyc29yLHMucm9vdEtleSxzLmxvb3BTdGFydCxzLmxvb3BFbmQscy5lbmQscy5sb29waW5nTW9kZSk7cmV0dXJuIG5ldyBwYShBLnZvbHVtZUVudmVsb3BlLnNhbXBsZVJhdGUsYSxBLm1pZGlOb3RlLEEudmVsb2NpdHksdCxBLnRhcmdldEtleSxuLG5ldyBJbnQxNkFycmF5KEEuZ2VuZXJhdG9ycyksQS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSkpfWV4Y2x1c2l2ZVJlbGVhc2UoQSl7dGhpcy5yZWxlYXNlKEEsV2EpLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VWb2xFbnZdPXpvLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VNb2RFbnZdPVdvLGJlLnJlY2FsY3VsYXRlKHRoaXMpLF9lLnJlY2FsY3VsYXRlKHRoaXMpfXJlbGVhc2UoQSx0PXphKXt0aGlzLnJlbGVhc2VTdGFydFRpbWU9QSx0aGlzLnJlbGVhc2VTdGFydFRpbWUtdGhpcy5zdGFydFRpbWU8dCYmKHRoaXMucmVsZWFzZVN0YXJ0VGltZT10aGlzLnN0YXJ0VGltZSt0KX19O2Z1bmN0aW9uIF9vKGUsQSx0LG4pe2xldCBzPWUuZ2V0U3ludGhlc2lzRGF0YShBLHQpLnJlZHVjZSgoYSxyKT0+e2lmKHIuc2FtcGxlLmdldEF1ZGlvRGF0YSgpPT09dm9pZCAwKXJldHVybiBzQShgRGlzY2FyZGluZyBpbnZhbGlkIHNhbXBsZTogJHtyLnNhbXBsZS5uYW1lfWApLGE7bGV0IEk9bmV3IEludDE2QXJyYXkoTW4pO2ZvcihsZXQgbT0wO208NjA7bSsrKUlbbV09eG8obSxyLnByZXNldEdlbmVyYXRvcnMsci5pbnN0cnVtZW50R2VuZXJhdG9ycyk7SVtpLmluaXRpYWxBdHRlbnVhdGlvbl09TWF0aC5mbG9vcihJW2kuaW5pdGlhbEF0dGVudWF0aW9uXSouNCk7bGV0IG89ci5zYW1wbGUub3JpZ2luYWxLZXk7SVtpLm92ZXJyaWRpbmdSb290S2V5XT4tMSYmKG89SVtpLm92ZXJyaWRpbmdSb290S2V5XSk7bGV0IGc9QTtJW2kua2V5TnVtXT4tMSYmKGc9SVtpLmtleU51bV0pO2xldCBCPXIuc2FtcGxlLmxvb3BTdGFydCxkPXIuc2FtcGxlLmxvb3BFbmQsaD1JW2kuc2FtcGxlTW9kZXNdLEM9ci5zYW1wbGUuZ2V0QXVkaW9EYXRhKCksUT1uZXcgU2EoQyxyLnNhbXBsZS5zYW1wbGVSYXRlL3RoaXMuc2FtcGxlUmF0ZSpNYXRoLnBvdygyLHIuc2FtcGxlLnBpdGNoQ29ycmVjdGlvbi8xMjAwKSwwLG8sQixkLE1hdGguZmxvb3IoQy5sZW5ndGgpLTEsaCk7cmV0dXJuIElbaS52ZWxvY2l0eV0+LTEmJih0PUlbaS52ZWxvY2l0eV0pLGEucHVzaChuZXcgSm4odGhpcy5zYW1wbGVSYXRlLFEsQSx0LHRoaXMuY3VycmVudFN5bnRoVGltZSxnLG4sSSxyLm1vZHVsYXRvcnMubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKSkpLGF9LFtdKTtyZXR1cm4gdGhpcy5zZXRDYWNoZWRWb2ljZShlLEEsdCxzKSxzLm1hcChhPT5Kbi5jb3B5RnJvbShhLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSl9ZnVuY3Rpb24gam8oZSxBLHQsbil7bGV0IHM9dGhpcy5taWRpQ2hhbm5lbHNbZV0sYT10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5oYXNPdmVycmlkZVBhdGNoKGUsQSkscj1zLnByZXNldDtpZighcilyZXR1cm4gc0EoYE5vIHByZXNldCBmb3IgY2hhbm5lbCAke2V9IWApLFtdO2xldCBJPXsuLi5yfTthJiYoST10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5nZXRQYXRjaChlLEEpKTtsZXQgbz10aGlzLmdldENhY2hlZFZvaWNlKEksQSx0KTtyZXR1cm4gbyE9PXZvaWQgMD9vLm1hcChnPT5Kbi5jb3B5RnJvbShnLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSk6KGEmJihyPXRoaXMuc291bmRCYW5rTWFuYWdlci5nZXRQcmVzZXQoSSx0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pKSx0aGlzLmdldFZvaWNlc0ZvclByZXNldChyLEEsdCxuKSl9ZnVuY3Rpb24gR3MoZSxBLHQpe2xldCBuPWUscz1BPDw3fHQ7cmV0dXJuIGU9PT0xMjcmJkE9PT0xMjcmJnQ9PT0xMjc/e21pZGlOb3RlOi0xLGNlbnRUdW5pbmc6bnVsbH06e21pZGlOb3RlOm4sY2VudFR1bmluZzpzKi4wMDYxfX1mdW5jdGlvbiAkbyhlLEE9MCl7bGV0IHQ9ZVswXTtpZih0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmRldmljZUlEIT09QmUmJmVbMV0hPT0xMjcmJnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMuZGV2aWNlSUQhPT1lWzFdKXJldHVybjtmdW5jdGlvbiBuKGEscixJLG8pe3AoYCVjQ2hhbm5lbCAlYyR7YX0lYyAke0l9LiAlYyR7cn0gJHtvfSVjLCB3aXRoICVjJHtNQShlKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfWZ1bmN0aW9uIHMoKXtwKGAlY1VucmVjb2duaXplZCBSb2xhbmQgJWNHUyAlY1N5c0V4OiAlYyR7TUEoZSl9YCxjLndhcm4sYy5yZWNvZ25pemVkLGMud2FybixjLnVucmVjb2duaXplZCl9c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7YnJlYWs7Y2FzZSAxMjY6Y2FzZSAxMjc6c3dpdGNoKGVbMl0pe2Nhc2UgNDp7bGV0IGE7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVs1XTw8N3xlWzRdO3RoaXMuc2V0TUlESVZvbHVtZShyLzE2Mzg0KSxwKGAlY01hc3RlciBWb2x1bWUuIFZvbHVtZTogJWMke3J9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAyOntsZXQgST0oKGVbNV08PDd8ZVs0XSktODE5MikvODE5Mjt0aGlzLnNldE1hc3RlclBhcmFtZXRlcigibWFzdGVyUGFuIixJKSxwKGAlY01hc3RlciBQYW4uIFBhbjogJWMke0l9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAzOntsZXQgcj0oZVs1XTw8N3xlWzZdKS04MTkyO2E9TWF0aC5mbG9vcihyLzgxLjkyKSx0aGlzLnNldE1hc3RlclR1bmluZyhhKSxwKGAlY01hc3RlciBGaW5lIFR1bmluZy4gQ2VudHM6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpO2JyZWFrfWNhc2UgNDp7YT0oZVs1XS02NCkqMTAwLHRoaXMuc2V0TWFzdGVyVHVuaW5nKGEpLHAoYCVjTWFzdGVyIENvYXJzZSBUdW5pbmcuIENlbnRzOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKTticmVha31kZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIE1JREkgRGV2aWNlIENvbnRyb2wgUmVhbC10aW1lIG1lc3NhZ2U6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCl9YnJlYWt9Y2FzZSA5OmVbM109PT0xPyhwKCIlY0dNMSBzeXN0ZW0gb24iLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJnbSIpKTplWzNdPT09Mz8ocCgiJWNHTTIgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpOihwKCIlY0dNIHN5c3RlbSBvZmYsIGRlZmF1bHRpbmcgdG8gR1MiLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJncyIpKTticmVhaztjYXNlIDg6e2xldCBhPTQ7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVthKytdLEk9ZWUoZSwxNixhKTtpZihhKz0xNixlLmxlbmd0aDwzODQpe3NBKGBUaGUgQnVsayBUdW5pbmcgRHVtcCBpcyB0b28gc2hvcnQhICgke2UubGVuZ3RofSBieXRlcywgYXQgbGVhc3QgMzg0IGFyZSBleHBlY3RlZClgKTtyZXR1cm59Zm9yKGxldCBvPTA7bzwxMjg7bysrKXRoaXMucHJpdmF0ZVByb3BzLnR1bmluZ3Nbcl1bb109R3MoZVthKytdLGVbYSsrXSxlW2ErK10pO3AoYCVjQnVsayBUdW5pbmcgRHVtcCAlYyR7SX0lYyBQcm9ncmFtOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMjpjYXNlIDc6e2VbM109PT03JiZhKys7bGV0IHI9ZVthKytdLEk9ZVthKytdO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5wcml2YXRlUHJvcHMudHVuaW5nc1tyXVtlW2ErK11dPUdzKGVbYSsrXSxlW2ErK10sZVthKytdKTtwKGAlY1NpbmdsZSBOb3RlIFR1bmluZy4gUHJvZ3JhbTogJWMke3J9JWMgS2V5cyBhZmZlY3RlZDogJWMke0l9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgOTpjYXNlIDg6e2xldCByPW5ldyBJbnQ4QXJyYXkoMTIpO2lmKGVbM109PT04KWZvcihsZXQgST0wO0k8MTI7SSsrKXJbSV09ZVs3K0ldLTY0O2Vsc2UgZm9yKGxldCBJPTA7STwyNDtJKz0yKXtsZXQgbz0oZVs3K0ldPDw3fGVbOCtJXSktODE5MjtyW0kvMl09TWF0aC5mbG9vcihvLzgxLjkyKX0oZVs0XSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE0K0FdLnNldE9jdGF2ZVR1bmluZyhyKSwoZVs0XT4+MSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE1K0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzVdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbNytJK0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzZdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbSStBXS5zZXRPY3RhdmVUdW5pbmcocik7cChgJWNNSURJIE9jdGF2ZSBTY2FsZSAke2VbM109PT04PyIoMSBieXRlKSI6IigyIGJ5dGVzKSJ9IHR1bmluZyB2aWEgVHVuaW5nOiAlYyR7ci5qb2luKCIgIil9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBNSURJIFR1bmluZyBzdGFuZGFyZCBtZXNzYWdlOiAlYyR7TUEoZSl9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfWJyZWFrfWRlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgTUlESSBSZWFsdGltZS9ub24gcmVhbHRpbWUgbWVzc2FnZTogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX1icmVhaztjYXNlIDY1OmlmKGVbMl09PT02NiYmZVszXT09PTE4KXtsZXQgYT1lWzddO2lmKGVbNF09PT02NHx8ZVs0XT09PTAmJmVbNl09PT0xMjcpe2lmKChlWzVdJjE2KT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdO3N3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDIxOntsZXQgbz1hPjAmJmVbNV0+PjQ+MDtJLnNldEdTRHJ1bXMobykscChgJWNDaGFubmVsICVjJHtyfSVjICR7bz8iaXMgbm93IGEgZHJ1bSBjaGFubmVsIjoibm93IGlzbid0IGEgZHJ1bSBjaGFubmVsIn0lYyB2aWE6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMucmVjb2duaXplZCxjLmluZm8sYy52YWx1ZSk7cmV0dXJufWNhc2UgMjI6e2xldCBvPWEtNjQ7SS5zZXRDdXN0b21Db250cm9sbGVyKElBLmNoYW5uZWxLZXlTaGlmdCxvKSxuKHIsbywia2V5IHNoaWZ0Iiwia2V5cyIpO3JldHVybn1jYXNlIDI4OntsZXQgbz1hO289PT0wPyhJLnJhbmRvbVBhbj0hMCxwKGAlY1JhbmRvbSBwYW4gaXMgc2V0IHRvICVjT04lYyBmb3IgJWMke3J9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlKSk6KEkucmFuZG9tUGFuPSExLEkuY29udHJvbGxlckNoYW5nZShTLnBhbixvKSk7YnJlYWt9Y2FzZSAzMzpJLmNvbnRyb2xsZXJDaGFuZ2UoUy5jaG9ydXNEZXB0aCxhKTticmVhaztjYXNlIDM0OkkuY29udHJvbGxlckNoYW5nZShTLnJldmVyYkRlcHRoLGEpO2JyZWFrO2Nhc2UgNjQ6Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6Y2FzZSA3MTpjYXNlIDcyOmNhc2UgNzM6Y2FzZSA3NDpjYXNlIDc1OntsZXQgbz1lLmxlbmd0aC05LGc9bmV3IEludDhBcnJheSgxMik7Zm9yKGxldCBkPTA7ZDxvO2QrKylnW2RdPWVbZCs3XS02NDtJLnNldE9jdGF2ZVR1bmluZyhnKTtsZXQgQj1hLTY0O24ocixnLmpvaW4oIiAiKSwib2N0YXZlIHNjYWxlIHR1bmluZyIsImNlbnRzIiksSS5zZXRUdW5pbmcoQik7YnJlYWt9fXJldHVybn1lbHNlIGlmKChlWzVdJjMyKT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdLG89YS02NCxnPW8vNjQsQj1hLzEyOCxkPShoLEMsUT0hMSk9Pntzd2l0Y2goZVs2XSYxNSl7Y2FzZSAwOmg9PT1tQStqLnBpdGNoV2hlZWw/KEkuY29udHJvbGxlckNoYW5nZShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCksSS5jb250cm9sbGVyQ2hhbmdlKFMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiwwKSxJLmNvbnRyb2xsZXJDaGFuZ2UoUy5kYXRhRW50cnlNU0IsTWF0aC5mbG9vcihvKSkpOihJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmZpbmVUdW5lLG8qMTAwLFEpLG4ocixvLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJzZW1pdG9uZXMiKSk7YnJlYWs7Y2FzZSAxOkkuc3lzRXhNb2R1bGF0b3JzLnNldE1vZHVsYXRvcihoLGkuaW5pdGlhbEZpbHRlckZjLGcqOTYwMCxRKSxuKHIsZyo5NjAwLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMjpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmluaXRpYWxBdHRlbnVhdGlvbixnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gYW1wbGl0dWRlYCwiY0IiKTticmVhaztjYXNlIDQ6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1BpdGNoLEIqNjAwLFEpLG4ocixCKjYwMCxgJHtDfSBMRk8xIHBpdGNoIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDU6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub0ZpbHRlckZjLEIqMjQwMCxRKSxuKHIsQioyNDAwLGAke0N9IExGTzEgZmlsdGVyIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDY6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMSBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrO2Nhc2UgODpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvUGl0Y2gsQio2MDAsUSksbihyLEIqNjAwLGAke0N9IExGTzIgcGl0Y2ggZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgOTpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvRmlsdGVyRmMsQioyNDAwLFEpLG4ocixCKjI0MDAsYCR7Q30gTEZPMiBmaWx0ZXIgZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMTA6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS5tb2RMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMiBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrfX07c3dpdGNoKGVbNl0mMjQwKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6ZChTLm1vZHVsYXRpb25XaGVlbCwibW9kIHdoZWVsIik7YnJlYWs7Y2FzZSAxNjpkKG1BK2oucGl0Y2hXaGVlbCwicGl0Y2ggd2hlZWwiLCEwKTticmVhaztjYXNlIDMyOmQobUErai5jaGFubmVsUHJlc3N1cmUsImNoYW5uZWwgcHJlc3N1cmUiKTticmVhaztjYXNlIDQ4OmQobUErai5wb2x5UHJlc3N1cmUsInBvbHkgcHJlc3N1cmUiKTticmVha31yZXR1cm59ZWxzZSBpZihlWzVdPT09MCl7c3dpdGNoKGVbNl0pe2RlZmF1bHQ6cygpO2JyZWFrO2Nhc2UgMTI3OmE9PT0wPyhwKCIlY0dTIFJlc2V0IHJlY2VpdmVkISIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ3MiKSk6YT09PTEyNyYmKHAoIiVjR1Mgc3lzdGVtIG9mZiwgc3dpdGNoaW5nIHRvIEdNMiIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpO2JyZWFrO2Nhc2UgNjpwKGAlY1JvbGFuZCBHUyBNYXN0ZXIgUGFuIHNldCB0bzogJWMke2F9JWMgd2l0aDogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtYXN0ZXJQYW4iLChhLTY0KS82NCk7YnJlYWs7Y2FzZSA0OnAoYCVjUm9sYW5kIEdTIE1hc3RlciBWb2x1bWUgc2V0IHRvOiAlYyR7YX0lYyB3aXRoOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSxjLmluZm8sYy52YWx1ZSksdGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KTticmVhaztjYXNlIDU6e2xldCByPWEtNjQ7cChgJWNSb2xhbmQgR1MgTWFzdGVyIEtleS1TaGlmdCBzZXQgdG86ICVjJHtyfSVjIHdpdGg6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldE1hc3RlclR1bmluZyhyKjEwMCk7YnJlYWt9fXJldHVybn1lbHNlIGlmKGVbNV09PT0xKXN3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6e2xldCByPWVlKGUsMTYsNyk7cChgJWNHUyBQYXRjaCBuYW1lOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIDUxOnAoYCVjR1MgUmV2ZXJiIGxldmVsOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnByaXZhdGVQcm9wcy5yZXZlcmJTZW5kPWEvNjQ7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTU6cChgJWNVbnN1cHBvcnRlZCBHUyBSZXZlcmIgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrO2Nhc2UgNTg6cChgJWNHUyBDaG9ydXMgbGV2ZWw6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpLHRoaXMucHJpdmF0ZVByb3BzLmNob3J1c1NlbmQ9YS82NDticmVhaztjYXNlIDU2OmNhc2UgNTc6Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6cChgJWNVbnN1cHBvcnRlZCBHUyBDaG9ydXMgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfX1lbHNlIHMoKTtyZXR1cm59ZWxzZSBpZihlWzJdPT09NjkmJmVbM109PT0xOCl7aWYoZVs0XT09PTE2JiZlWzZdPT09MClpZihlWzVdPT09MCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTIpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNUZXh0fSl9ZWxzZSBpZihlWzVdPT09MSl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTMpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNEb3RNYXRyaXh9KSxwKGAlY1JvbGFuZCBTQyBEaXNwbGF5IERvdCBNYXRyaXggdmlhOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSl9ZWxzZSBzKCl9ZWxzZSBpZihlWzJdPT09MjImJmVbM109PT0xOCYmZVs0XT09PTE2KXt0aGlzLnNldE1JRElWb2x1bWUoZVs3XS8xMDApLHAoYCVjUm9sYW5kIE1hc3RlciBWb2x1bWUgY29udHJvbCBzZXQgdG86ICVjJHtlWzddfSVjIHZpYTogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpO3JldHVybn1lbHNle3AoYCVjVW5yZWNvZ25pemVkIFJvbGFuZCBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTtyZXR1cm59YnJlYWs7Y2FzZSA2NzppZihlWzJdPT09NzYpaWYoZVszXT09PTAmJmVbNF09PT0wKXN3aXRjaChlWzVdKXtjYXNlIDQ6e2xldCBhPWVbNl07dGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KSxwKGAlY1hHIG1hc3RlciB2b2x1bWUuIFZvbHVtZTogJWMke2F9YCxjLmluZm8sYy5yZWNvZ25pemVkKTticmVha31jYXNlIDY6e2xldCBhPWVbNl0tNjQ7dGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoInRyYW5zcG9zaXRpb24iLGEpLHAoYCVjWEcgbWFzdGVyIHRyYW5zcG9zZS4gVm9sdW1lOiAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMTI2OnAoIiVjWEcgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycyghMSksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJ4ZyIpO2JyZWFrfWVsc2UgaWYoZVszXT09PTgpe2lmKCFmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpcmV0dXJuO2xldCBhPWVbNF0rQTtpZihhPj10aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpcmV0dXJuO2xldCByPXRoaXMubWlkaUNoYW5uZWxzW2FdLEk9ZVs2XTtzd2l0Y2goZVs1XSl7Y2FzZSAxOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3QsSSk7YnJlYWs7Y2FzZSAyOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3RMU0IsSSk7YnJlYWs7Y2FzZSAzOnIucHJvZ3JhbUNoYW5nZShJKTticmVhaztjYXNlIDg6e2lmKHIuZHJ1bUNoYW5uZWwpcmV0dXJuO3IuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0PUktNjQ7YnJlYWt9Y2FzZSAxMTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5tYWluVm9sdW1lLEkpO2JyZWFrO2Nhc2UgMTQ6e2xldCBvPUk7bz09PTA/KHIucmFuZG9tUGFuPSEwLHAoYCVjUmFuZG9tIHBhbiBpcyBzZXQgdG8gJWNPTiVjIGZvciAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUpKTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5wYW4sbyk7YnJlYWt9Y2FzZSAxOTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZXZlcmJEZXB0aCxJKTticmVhaztjYXNlIDE4OnIuY29udHJvbGxlckNoYW5nZShTLmNob3J1c0RlcHRoLEkpO2JyZWFrO2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgWWFtYWhhIFhHIFBhcnQgU2V0dXA6ICVjJHtlWzVdLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX19ZWxzZSBpZihlWzNdPT09NiYmZVs0XT09PTApe2xldCBhPW5ldyBVaW50OEFycmF5KGUuc2xpY2UoNSxlLmxlbmd0aC0xKSk7dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJzeW50aERpc3BsYXkiLHtkaXNwbGF5RGF0YTphLGRpc3BsYXlUeXBlOmhuLnlhbWFoYVhHVGV4dH0pfWVsc2UgZkEuaXNTeXN0ZW1YRyh0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pJiZwKGAlY1VucmVjb2duaXplZCBZYW1haGEgWEcgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7ZWxzZSBmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkmJnAoYCVjVW5yZWNvZ25pemVkIFlhbWFoYSBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTticmVha319dmFyIFJzPWNsYXNzIHFue3BhdGNoO2xvY2tQcmVzZXQ7bG9ja2VkU3lzdGVtO21pZGlDb250cm9sbGVycztsb2NrZWRDb250cm9sbGVycztjdXN0b21Db250cm9sbGVycztsb2NrVmlicmF0bztjaGFubmVsVmlicmF0bztjaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ7Y2hhbm5lbE9jdGF2ZVR1bmluZztpc011dGVkO2RydW1DaGFubmVsO2NoYW5uZWxOdW1iZXI7Y29uc3RydWN0b3IoQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyl7dGhpcy5wYXRjaD1BLHRoaXMubG9ja1ByZXNldD10LHRoaXMubG9ja2VkU3lzdGVtPW4sdGhpcy5taWRpQ29udHJvbGxlcnM9cyx0aGlzLmxvY2tlZENvbnRyb2xsZXJzPWEsdGhpcy5jdXN0b21Db250cm9sbGVycz1yLHRoaXMubG9ja1ZpYnJhdG89SSx0aGlzLmNoYW5uZWxWaWJyYXRvPW8sdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9Zyx0aGlzLmNoYW5uZWxPY3RhdmVUdW5pbmc9Qix0aGlzLmlzTXV0ZWQ9ZCx0aGlzLmRydW1DaGFubmVsPWgsdGhpcy5jaGFubmVsTnVtYmVyPUN9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgcW4oey4uLkEucGF0Y2h9LEEubG9ja1ByZXNldCxBLmxvY2tlZFN5c3RlbSxBLm1pZGlDb250cm9sbGVycy5zbGljZSgpLFsuLi5BLmxvY2tlZENvbnRyb2xsZXJzXSxBLmN1c3RvbUNvbnRyb2xsZXJzLnNsaWNlKCksQS5sb2NrVmlicmF0byx7Li4uQS5jaGFubmVsVmlicmF0b30sQS5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsQS5jaGFubmVsT2N0YXZlVHVuaW5nLEEuaXNNdXRlZCxBLmRydW1DaGFubmVsLEEuY2hhbm5lbE51bWJlcil9c3RhdGljIGNyZWF0ZShBLHQpe2xldCBuPUEubWlkaUNoYW5uZWxzW3RdO3JldHVybiBuZXcgcW4oey4uLm4ucGF0Y2gsbmFtZTpuPy5wcmVzZXQ/Lm5hbWU/PyJ1bmRlZmluZWQifSxuLmxvY2tQcmVzZXQsbi5sb2NrZWRTeXN0ZW0sbi5taWRpQ29udHJvbGxlcnMuc2xpY2UoKSxbLi4ubi5sb2NrZWRDb250cm9sbGVyc10sbi5jdXN0b21Db250cm9sbGVycy5zbGljZSgpLG4ubG9ja0dTTlJQTlBhcmFtcyx7Li4ubi5jaGFubmVsVmlicmF0b30sbi5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsbi5jaGFubmVsT2N0YXZlVHVuaW5nLnNsaWNlKCksbi5pc011dGVkLG4uZHJ1bUNoYW5uZWwsdCl9YXBwbHkoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHNbdGhpcy5jaGFubmVsTnVtYmVyXTt0Lm11dGVDaGFubmVsKHRoaXMuaXNNdXRlZCksdC5zZXREcnVtcyh0aGlzLmRydW1DaGFubmVsKSx0Lm1pZGlDb250cm9sbGVycy5zZXQodGhpcy5taWRpQ29udHJvbGxlcnMpLHQubG9ja2VkQ29udHJvbGxlcnM9dGhpcy5sb2NrZWRDb250cm9sbGVycyx0LmN1c3RvbUNvbnRyb2xsZXJzLnNldCh0aGlzLmN1c3RvbUNvbnRyb2xsZXJzKSx0LnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0LmNoYW5uZWxWaWJyYXRvPXRoaXMuY2hhbm5lbFZpYnJhdG8sdC5sb2NrR1NOUlBOUGFyYW1zPXRoaXMubG9ja1ZpYnJhdG8sdC5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsdC5jaGFubmVsT2N0YXZlVHVuaW5nPXRoaXMuY2hhbm5lbE9jdGF2ZVR1bmluZyx0LnNldFByZXNldExvY2soITEpLHQuc2V0UGF0Y2godGhpcy5wYXRjaCksdC5zZXRQcmVzZXRMb2NrKHRoaXMubG9ja1ByZXNldCksdC5sb2NrZWRTeXN0ZW09dGhpcy5sb2NrZWRTeXN0ZW19fTt2YXIgQXI9Y2xhc3N7a2V5TWFwcGluZ3M9W107YWRkTWFwcGluZyhlLEEsdCl7dGhpcy5rZXlNYXBwaW5nc1tlXT8/PVtdLHRoaXMua2V5TWFwcGluZ3NbZV1bQV09dH1kZWxldGVNYXBwaW5nKGUsQSl7dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdIT09dm9pZCAwJiYodGhpcy5rZXlNYXBwaW5nc1tlXVtBXT12b2lkIDApfWNsZWFyTWFwcGluZ3MoKXt0aGlzLmtleU1hcHBpbmdzPVtdfXNldE1hcHBpbmdzKGUpe3RoaXMua2V5TWFwcGluZ3M9ZX1nZXRNYXBwaW5ncygpe3JldHVybiB0aGlzLmtleU1hcHBpbmdzfWdldFZlbG9jaXR5KGUsQSl7cmV0dXJuIHRoaXMua2V5TWFwcGluZ3NbZV0/LltBXT8udmVsb2NpdHk/Py0xfWdldEdhaW4oZSxBKXtyZXR1cm4gdGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdPy5nYWluPz8xfWhhc092ZXJyaWRlUGF0Y2goZSxBKXtsZXQgdD10aGlzLmtleU1hcHBpbmdzW2VdPy5bQV0/LnBhdGNoPy5iYW5rTVNCO3JldHVybiB0IT09dm9pZCAwJiZ0Pj0wfWdldFBhdGNoKGUsQSl7bGV0IHQ9dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdO2lmKHQpcmV0dXJuIHQucGF0Y2g7dGhyb3cgbmV3IEVycm9yKCJObyBtb2RpZmllci4iKX19LHJzPWNsYXNzIEtue2NoYW5uZWxTbmFwc2hvdHM7a2V5TWFwcGluZ3M7bWFzdGVyUGFyYW1ldGVycztjb25zdHJ1Y3RvcihBLHQsbil7dGhpcy5jaGFubmVsU25hcHNob3RzPUEsdGhpcy5tYXN0ZXJQYXJhbWV0ZXJzPXQsdGhpcy5rZXlNYXBwaW5ncz1ufXN0YXRpYyBjcmVhdGUoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHMubWFwKChuLHMpPT5Scy5jcmVhdGUoQSxzKSk7cmV0dXJuIG5ldyBLbih0LEEuZ2V0QWxsTWFzdGVyUGFyYW1ldGVycygpLEEua2V5TW9kaWZpZXJNYW5hZ2VyLmdldE1hcHBpbmdzKCkpfXN0YXRpYyBjb3B5RnJvbShBKXtyZXR1cm4gbmV3IEtuKEEuY2hhbm5lbFNuYXBzaG90cy5tYXAodD0+UnMuY29weUZyb20odCkpLHsuLi5BLm1hc3RlclBhcmFtZXRlcnN9LFsuLi5BLmtleU1hcHBpbmdzXSl9YXBwbHkoQSl7Zm9yKE9iamVjdC5lbnRyaWVzKHRoaXMubWFzdGVyUGFyYW1ldGVycykuZm9yRWFjaCgoW24sc10pPT57QS5zZXRNYXN0ZXJQYXJhbWV0ZXIobixzKX0pLEEua2V5TW9kaWZpZXJNYW5hZ2VyLnNldE1hcHBpbmdzKHRoaXMua2V5TWFwcGluZ3MpO0EubWlkaUNoYW5uZWxzLmxlbmd0aDx0aGlzLmNoYW5uZWxTbmFwc2hvdHMubGVuZ3RoOylBLmNyZWF0ZU1JRElDaGFubmVsKCk7dGhpcy5jaGFubmVsU25hcHNob3RzLmZvckVhY2gobj0+e24uYXBwbHkoQSl9KX19LGVyPXttYXN0ZXJHYWluOl9hLG1hc3RlclBhbjowLHZvaWNlQ2FwOlhhLGludGVycG9sYXRpb25UeXBlOnZ0Lmhlcm1pdGUsbWlkaVN5c3RlbTpPcyxtb25vcGhvbmljUmV0cmlnZ2VyTW9kZTohMSxyZXZlcmJHYWluOjEsY2hvcnVzR2FpbjoxLGJsYWNrTUlESU1vZGU6ITEsdHJhbnNwb3NpdGlvbjowLGRldmljZUlEOkJlfSx0cj1jbGFzc3t0dW5pbmdzPVtdO21hc3RlclBhcmFtZXRlcnM9ZXI7bWlkaVZvbHVtZT0xO3JldmVyYlNlbmQ9MTtjaG9ydXNTZW5kPTE7cGFuTGVmdD0uNTtwYW5SaWdodD0uNTtkZWZhdWx0UHJlc2V0O2RydW1QcmVzZXQ7dm9sdW1lRW52ZWxvcGVTbW9vdGhpbmdGYWN0b3I7cGFuU21vb3RoaW5nRmFjdG9yO2ZpbHRlclNtb290aGluZ0ZhY3RvcjtldmVudENhbGxiYWNrSGFuZGxlcjtnZXRWb2ljZXM7dm9pY2VLaWxsaW5nO2NhY2hlZFZvaWNlcz1bXTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcj1lLHRoaXMuZ2V0Vm9pY2VzPUEsdGhpcy52b2ljZUtpbGxpbmc9dCx0aGlzLnZvbHVtZUVudmVsb3BlU21vb3RoaW5nRmFjdG9yPW4sdGhpcy5wYW5TbW9vdGhpbmdGYWN0b3I9cyx0aGlzLmZpbHRlclNtb290aGluZ0ZhY3Rvcj1hO2ZvcihsZXQgcj0wO3I8MTI4O3IrKyl0aGlzLnR1bmluZ3MucHVzaChbXSl9Y2FsbEV2ZW50KGUsQSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcihlLEEpfX07ZnVuY3Rpb24gcG4oZSxBLHQpe2lmKHQ8ZSlyZXR1cm4gMDtsZXQgbj0odC1lKS8oMS9BKSsuMjU7cmV0dXJuIE1hdGguYWJzKG4tfn4obisuNSkpKjQtMX12YXIgbnI9Y2xhc3MgT257c3RhdGljIGdldFNhbXBsZShBLHQsbil7bGV0IHM9QS5jdXJyZW50VHVuaW5nQ2FsY3VsYXRlZCpBLnNhbXBsZS5wbGF5YmFja1N0ZXA7aWYocz09PTEpe09uLmdldFNhbXBsZU5lYXJlc3QoQSx0LHMpO3JldHVybn1zd2l0Y2gobil7Y2FzZSB2dC5oZXJtaXRlOnRoaXMuZ2V0U2FtcGxlSGVybWl0ZShBLHQscyk7cmV0dXJuO2Nhc2UgdnQubGluZWFyOmRlZmF1bHQ6dGhpcy5nZXRTYW1wbGVMaW5lYXIoQSx0LHMpO3JldHVybjtjYXNlIHZ0Lm5lYXJlc3ROZWlnaGJvcjpPbi5nZXRTYW1wbGVOZWFyZXN0KEEsdCxzKTtyZXR1cm59fXN0YXRpYyBnZXRTYW1wbGVMaW5lYXIoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxO2Zvcig7Qj49cy5sb29wRW5kOylCLT1JO2xldCBkPWEtZyxoPXJbQl0sQz1yW2ddO3Rbb109QysoaC1DKSpkLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMTtpZihnPj1zLmVuZCl7QS5maW5pc2hlZD0hMDtyZXR1cm59bGV0IEI9YS1vLGQ9cltnXSxoPXJbb107dFtJXT1oKyhkLWgpKkIsYSs9bn1BLnNhbXBsZS5jdXJzb3I9YX1zdGF0aWMgZ2V0U2FtcGxlTmVhcmVzdChBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1zLmN1cnNvcixyPXMuc2FtcGxlRGF0YTtpZihzLmlzTG9vcGluZyl7bGV0IEk9cy5sb29wRW5kLXMubG9vcFN0YXJ0O2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtmb3IoO2E+PXMubG9vcEVuZDspYS09STtsZXQgZz1+fmErMTtmb3IoO2c+PXMubG9vcEVuZDspZy09STt0W29dPXJbZ10sYSs9bn19ZWxzZSBmb3IobGV0IEk9MDtJPHQubGVuZ3RoO0krKyl7bGV0IG89fn5hKzE7aWYobz49cy5lbmQpe0EuZmluaXNoZWQ9ITA7cmV0dXJufXRbSV09cltvXSxhKz1ufXMuY3Vyc29yPWF9c3RhdGljIGdldFNhbXBsZUhlcm1pdGUoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxLGQ9ZysyLGg9ZyszLEM9YS1nO0I+PXMubG9vcEVuZCYmKEItPUkpLGQ+PXMubG9vcEVuZCYmKGQtPUkpLGg+PXMubG9vcEVuZCYmKGgtPUkpO2xldCBRPXJbZ10sbT1yW0JdLHk9cltkXSxGPXJbaF0saz0oeS1RKSouNSxEPW0teSx2PWsrRCxMPXYrRCsoRi1tKSouNSxFPXYrTDt0W29dPSgoTCpDLUUpKkMraykqQyttLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMSxCPW8rMixkPW8rMyxoPWEtbztpZihnPj1zLmVuZHx8Qj49cy5lbmR8fGQ+PXMuZW5kKXtBLmZpbmlzaGVkPSEwO3JldHVybn1sZXQgQz1yW29dLFE9cltnXSxtPXJbQl0seT1yW2RdLEY9KG0tQykqLjUsaz1RLW0sRD1GK2ssdj1EK2srKHktUSkqLjUsTD1EK3Y7dFtJXT0oKHYqaC1MKSpoK0YpKmgrUSxhKz1ufUEuc2FtcGxlLmN1cnNvcj1hfX07ZnVuY3Rpb24gc3IoZSxBLHQsbixzLGEscixJLG8sZyl7aWYoZS5pc0luUmVsZWFzZXx8QT49ZS5yZWxlYXNlU3RhcnRUaW1lJiYoZS5pc0luUmVsZWFzZT0hMCxiZS5zdGFydFJlbGVhc2UoZSksX2Uuc3RhcnRSZWxlYXNlKGUpLGUuc2FtcGxlLmxvb3BpbmdNb2RlPT09MyYmKGUuc2FtcGxlLmlzTG9vcGluZz0hMSkpLGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0+MjUwMClyZXR1cm4gZS5pc0luUmVsZWFzZSYmKGUuZmluaXNoZWQ9ITApLGUuZmluaXNoZWQ7bGV0IEI9ZS50YXJnZXRLZXksZD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5maW5lVHVuZV0rdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW2UubWlkaU5vdGVdK3RoaXMuY2hhbm5lbFR1bmluZ0NlbnRzLGg9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuY29hcnNlVHVuZV0sQz10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1t0aGlzLnByZXNldD8ucHJvZ3JhbT8/MF0/LltlLnJlYWxLZXldO2lmKEM/LmNlbnRUdW5pbmcmJihCPUMubWlkaU5vdGUsZCs9Qy5jZW50VHVuaW5nKSxlLnBvcnRhbWVudG9Gcm9tS2V5Pi0xKXtsZXQgJD1NYXRoLm1pbigoQS1lLnN0YXJ0VGltZSkvZS5wb3J0YW1lbnRvRHVyYXRpb24sMSksVj1CLWUucG9ydGFtZW50b0Zyb21LZXk7aC09ViooMS0kKX1kKz0oQi1lLnNhbXBsZS5yb290S2V5KSplLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zY2FsZVR1bmluZ107bGV0IFE9MCxtPTAseT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS52aWJMZm9Ub1BpdGNoXSxGPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvVm9sdW1lXSxrPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvRmlsdGVyRmNdO2lmKHkhPT0wfHxGIT09MHx8ayE9PTApe2xldCAkPWUuc3RhcnRUaW1lK1FlKGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlbGF5VmliTEZPXSksVj1ObihlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5mcmVxVmliTEZPXSkscT1wbigkLFYsQSk7ZCs9cSooeSp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXSksbSs9LXEqRixRKz1xKmt9bGV0IEQ9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kTGZvVG9QaXRjaF0sdj1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub1ZvbHVtZV0sTD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub0ZpbHRlckZjXTtpZihEIT09MHx8TCE9PTB8fHYhPT0wKXtsZXQgJD1lLnN0YXJ0VGltZStRZShlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZExGT10pLFY9Tm4oZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZnJlcU1vZExGT10pLHE9cG4oJCxWLEEpO2QrPXEqKEQqdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5tb2R1bGF0aW9uTXVsdGlwbGllcl0pLG0rPS1xKnYsUSs9cSpMfWlmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg+MCl7bGV0ICQ9cG4oZS5zdGFydFRpbWUrdGhpcy5jaGFubmVsVmlicmF0by5kZWxheSx0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGUsQSk7JCYmKGQrPSQqdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aCl9bGV0IEU9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kRW52VG9QaXRjaF0sWD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RFbnZUb0ZpbHRlckZjXTtpZihYIT09MHx8RSE9PTApe2xldCAkPV9lLmdldFZhbHVlKGUsQSk7USs9JCpYLGQrPSQqRX1tLT1lLnJlc29uYW5jZU9mZnNldDtsZXQgTz1+fihkK2gqMTAwKTtPIT09ZS5jdXJyZW50VHVuaW5nQ2VudHMmJihlLmN1cnJlbnRUdW5pbmdDZW50cz1PLGUuY3VycmVudFR1bmluZ0NhbGN1bGF0ZWQ9TWF0aC5wb3coMixPLzEyMDApKTtsZXQgbkE9bmV3IEZsb2F0MzJBcnJheShnKTtyZXR1cm4gZS5zYW1wbGUubG9vcGluZ01vZGU9PT0yJiYhZS5pc0luUmVsZWFzZT8oYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksZS5maW5pc2hlZCk6KG5yLmdldFNhbXBsZShlLG5BLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmludGVycG9sYXRpb25UeXBlKSxYdC5hcHBseShlLG5BLFEsdGhpcy5zeW50aFByb3BzLmZpbHRlclNtb290aGluZ0ZhY3RvciksYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksdGhpcy5wYW5BbmRNaXhWb2ljZShlLG5BLHQsbixzLGEscixJLG8pLGUuZmluaXNoZWQpfXZhciB1ZT17cGl0Y2hXaGVlbFJhbmdlOjAsZmluZVR1bmluZzoxLGNvYXJzZVR1bmluZzoyLG1vZHVsYXRpb25EZXB0aDo1LHJlc2V0UGFyYW1ldGVyczoxNjM4M30sWmU9e3BhcnRQYXJhbWV0ZXI6MSxhd2UzMjoxMjcsU0YyOjEyMH0sT2U9e3ZpYnJhdG9SYXRlOjgsdmlicmF0b0RlcHRoOjksdmlicmF0b0RlbGF5OjEwLFRWRkZpbHRlckN1dG9mZjozMixUVkZGaWx0ZXJSZXNvbmFuY2U6MzMsRUdBdHRhY2tUaW1lOjk5LEVHUmVsZWFzZVRpbWU6MTAyfTtmdW5jdGlvbiBhcihlKXt0aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeU1TQl09ZTw8NztsZXQgQT0oKT0+e3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXk9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGU9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLmRlcHRoPT09MCYmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9NTAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTgsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0uNil9LHQ9KG4scyxhKT0+e2EubGVuZ3RoPjAmJihhPSIgIithKSxwKGAlYyR7bn0gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7c30lYyR7YX0uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyl9O3N3aXRjaCh0aGlzLmRhdGFFbnRyeVN0YXRlKXtkZWZhdWx0OmNhc2UgWUEuSWRsZTpicmVhaztjYXNlIFlBLk5SUEZpbmU6e2lmKHRoaXMubG9ja0dTTlJQTlBhcmFtcylyZXR1cm47bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+NyxzPXRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl0+PjcsYT10aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeUxTQl0+Pjc7c3dpdGNoKG4pe2RlZmF1bHQ6aWYoZT09PTY0KXJldHVybjtwKGAlY1VucmVjb2duaXplZCBOUlBOIGZvciAlYyR7dGhpcy5jaGFubmVsTnVtYmVyfSVjOiAlYygweCR7cy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0gMHgke3MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KSVjIGRhdGEgdmFsdWU6ICVjJHtlfWAsYy53YXJuLGMucmVjb2duaXplZCxjLndhcm4sYy51bnJlY29nbml6ZWQsYy53YXJuLGMudmFsdWUpO2JyZWFrO2Nhc2UgWmUucGFydFBhcmFtZXRlcjpzd2l0Y2gocyl7ZGVmYXVsdDppZihlPT09NjQpcmV0dXJuO3AoYCVjVW5yZWNvZ25pemVkIE5SUE4gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWM6ICVjKDB4JHtuLnRvU3RyaW5nKDE2KX0gMHgke3MudG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIE9lLnZpYnJhdG9SYXRlOmlmKGU9PT02NClyZXR1cm47QSgpLHRoaXMuY2hhbm5lbFZpYnJhdG8ucmF0ZT1lLzY0KjgsdCgiVmlicmF0byByYXRlIixgJHtlfSA9ICR7dGhpcy5jaGFubmVsVmlicmF0by5yYXRlfWAsIkh6Iik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVwdGg6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aD1lLzIsdCgiVmlicmF0byBkZXB0aCIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGh9YCwiY2VudHMgb2YgZGV0dW5lIik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVsYXk6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT1lLzY0LzMsdCgiVmlicmF0byBkZWxheSIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXl9YCwic2Vjb25kcyIpO2JyZWFrO2Nhc2UgT2UuVFZGRmlsdGVyQ3V0b2ZmOnRoaXMuY29udHJvbGxlckNoYW5nZShTLmJyaWdodG5lc3MsZSksdCgiRmlsdGVyIGN1dG9mZiIsZS50b1N0cmluZygpLCIiKTticmVhaztjYXNlIE9lLkVHQXR0YWNrVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5hdHRhY2tUaW1lLGUpLHQoIkVHIGF0dGFjayB0aW1lIixlLnRvU3RyaW5nKCksIiIpO2JyZWFrO2Nhc2UgT2UuRUdSZWxlYXNlVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZWxlYXNlVGltZSxlKSx0KCJFRyByZWxlYXNlIHRpbWUiLGUudG9TdHJpbmcoKSwiIik7YnJlYWt9YnJlYWs7Y2FzZSBaZS5hd2UzMjpicmVhaztjYXNlIFplLlNGMjp7aWYocz4xMDApYnJlYWs7bGV0IHI9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5zZjJOUFJOR2VuZXJhdG9yTFNCXSxJPShlPDw3fGEpLTgxOTI7dGhpcy5zZXRHZW5lcmF0b3JPZmZzZXQocixJKTticmVha319YnJlYWt9Y2FzZSBZQS5SUENvYXJzZTpjYXNlIFlBLlJQRmluZTp7bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43O3N3aXRjaChuKXtkZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIFJQTiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke24udG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIHVlLnBpdGNoV2hlZWxSYW5nZTp0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV09ZTw8Nyx0KCJQaXRjaCB3aGVlbCByYW5nZSIsZS50b1N0cmluZygpLCJzZW1pdG9uZXMiKTticmVhaztjYXNlIHVlLmNvYXJzZVR1bmluZzp7bGV0IHM9ZS02NDt0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFR1bmluZ1NlbWl0b25lcyxzKSx0KCJDb2Fyc2UgdHVuaW5nIixzLnRvU3RyaW5nKCksInNlbWl0b25lcyIpO2JyZWFrfWNhc2UgdWUuZmluZVR1bmluZzp0aGlzLnNldFR1bmluZyhlLTY0LCExKTticmVhaztjYXNlIHVlLm1vZHVsYXRpb25EZXB0aDp0aGlzLnNldE1vZHVsYXRpb25EZXB0aChlKjEwMCk7YnJlYWs7Y2FzZSB1ZS5yZXNldFBhcmFtZXRlcnM6dGhpcy5yZXNldFBhcmFtZXRlcnMoKTticmVha319fX12YXIgb3I9W2kuZGVsYXlNb2RMRk8saS5mcmVxTW9kTEZPLGkuZGVsYXlWaWJMRk8saS5mcmVxVmliTEZPLGkuZGVsYXlNb2RFbnYsaS5hdHRhY2tNb2RFbnYsaS5ob2xkTW9kRW52LGkuZGVjYXlNb2RFbnYsaS5zdXN0YWluTW9kRW52LGkucmVsZWFzZU1vZEVudixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5maW5lVHVuZSxpLm1vZExmb1RvUGl0Y2gsaS52aWJMZm9Ub1BpdGNoLGkubW9kRW52VG9QaXRjaCxpLm1vZExmb1RvVm9sdW1lLGkuaW5pdGlhbEZpbHRlckZjLGkuaW5pdGlhbEZpbHRlclEsaS5tb2RMZm9Ub0ZpbHRlckZjLGkubW9kRW52VG9GaWx0ZXJGYyxpLmNob3J1c0VmZmVjdHNTZW5kLGkucmV2ZXJiRWZmZWN0c1NlbmRdO2Z1bmN0aW9uIHJyKGUsQSx0KXtsZXQgbj0oaCxDLFEpPT5NYXRoLm1heChDLE1hdGgubWluKFEsaCkpLHM9aD0+TWF0aC5tYXgoLTMyNzY4LDEyMDAqTWF0aC5sb2cyKGgvMWUzKSksYT1oPT42OTAwKzEyMDAqTWF0aC5sb2cyKGgvNDQwKSxyPXQ8PDd8QTtyLT04MTkyO2xldCBJPW9yW2VdO0l8fHNBKGBJbnZhbGlkIEFXRTMyIExTQjogJWMke2V9YCxjLnVucmVjb2duaXplZCk7bGV0IG8sZyxCLGQ7c3dpdGNoKEkpe2RlZmF1bHQ6YnJlYWs7Y2FzZSBpLmRlbGF5TW9kTEZPOmNhc2UgaS5kZWxheVZpYkxGTzpjYXNlIGkuZGVsYXlWb2xFbnY6Y2FzZSBpLmRlbGF5TW9kRW52Om89NCpuKHIsMCw1OTAwKSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEkscyhvKSk7YnJlYWs7Y2FzZSBpLmF0dGFja1ZvbEVudjpjYXNlIGkuYXR0YWNrTW9kRW52Om89bihyLDAsNTk0MCksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5ob2xkVm9sRW52OmNhc2UgaS5ob2xkTW9kRW52Om89bihyLDAsODE5MSksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5kZWNheU1vZEVudjpjYXNlIGkuZGVjYXlWb2xFbnY6Y2FzZSBpLnJlbGVhc2VWb2xFbnY6Y2FzZSBpLnJlbGVhc2VNb2RFbnY6bz00Km4ociwwLDU5NDApLHRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxzKG8pKTticmVhaztjYXNlIGkuZnJlcVZpYkxGTzpjYXNlIGkuZnJlcU1vZExGTzpnPS4wODQqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksYShnKSwhMCk7YnJlYWs7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6Y2FzZSBpLnN1c3RhaW5Nb2RFbnY6Qj1BKjcuNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQik7YnJlYWs7Y2FzZSBpLmZpbmVUdW5lOnRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxyLCEwKTticmVhaztjYXNlIGkubW9kTGZvVG9QaXRjaDpjYXNlIGkudmliTGZvVG9QaXRjaDpkPW4ociwtMTI3LDEyNykqOS4zNzUsdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLGQsITApO2JyZWFrO2Nhc2UgaS5tb2RFbnZUb1BpdGNoOmQ9bihyLC0xMjcsMTI3KSo5LjM3NSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvVm9sdW1lOkI9MS44NzUqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLmluaXRpYWxGaWx0ZXJGYzp7bGV0IGg9NDMzNSs1OSpBO3RoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxoLCEwKTticmVha31jYXNlIGkuaW5pdGlhbEZpbHRlclE6Qj0yMTUqKEEvMTI3KSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCwhMCk7YnJlYWs7Y2FzZSBpLm1vZEVudlRvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLmNob3J1c0VmZmVjdHNTZW5kOmNhc2UgaS5yZXZlcmJFZmZlY3RzU2VuZDp0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksbihyLDAsMjU1KSooMWUzLzI1NSkpO2JyZWFrfX1mdW5jdGlvbiBpcihlKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlMU0JdPWU8PDcsdGhpcy5kYXRhRW50cnlTdGF0ZSl7ZGVmYXVsdDpicmVhaztjYXNlIFlBLlJQQ29hcnNlOmNhc2UgWUEuUlBGaW5lOntzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43KXtkZWZhdWx0OmJyZWFrO2Nhc2UgdWUucGl0Y2hXaGVlbFJhbmdlOntpZihlPT09MClicmVhazt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV18PWU7bGV0IHQ9KHRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXT4+NykrZS8xMjg7cChgJWNDaGFubmVsICR7dGhpcy5jaGFubmVsTnVtYmVyfSBwaXRjaCB3aGVlbCByYW5nZS4gU2VtaXRvbmVzOiAlYyR7dH1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIHVlLmZpbmVUdW5pbmc6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFR1bmluZ108PDd8ZTt0aGlzLnNldFR1bmluZyhuKi4wMTIyMDcwMzEyNSk7YnJlYWt9Y2FzZSB1ZS5tb2R1bGF0aW9uRGVwdGg6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubW9kdWxhdGlvbk11bHRpcGxpZXJdKjUwK2UvMTI4KjEwMDt0aGlzLnNldE1vZHVsYXRpb25EZXB0aChuKTticmVha31jYXNlIDE2MzgzOnRoaXMucmVzZXRQYXJhbWV0ZXJzKCk7YnJlYWt9YnJlYWt9Y2FzZSBZQS5OUlBGaW5lOntsZXQgQT10aGlzLm1pZGlDb250cm9sbGVyc1tTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0JdPj43LHQ9dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTFNCXT4+NztpZihBPT09WmUuU0YyKXJldHVybjtzd2l0Y2goQSl7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBOUlBOIExTQiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9IDB4JHt0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIFplLmF3ZTMyOnJyLmNhbGwodGhpcyx0LGUsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlNU0JdPj43KTticmVha319fX1mdW5jdGlvbiBJcihlLEEsdD0hMCl7aWYoZT4xMjcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE1JREkgQ29udHJvbGxlci4iKTtpZihlPj1TLm1vZHVsYXRpb25XaGVlbExTQiYmZTw9Uy5lZmZlY3RDb250cm9sMkxTQiYmZSE9PVMuZGF0YUVudHJ5TFNCKXtsZXQgbj1lLTMyO2lmKHRoaXMubG9ja2VkQ29udHJvbGxlcnNbbl0pcmV0dXJuO3RoaXMubWlkaUNvbnRyb2xsZXJzW25dPXRoaXMubWlkaUNvbnRyb2xsZXJzW25dJjE2MjU2fEEmMTI3LHRoaXMudm9pY2VzLmZvckVhY2gocz0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhzLDEsbikpfWlmKCF0aGlzLmxvY2tlZENvbnRyb2xsZXJzW2VdKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbZV09QTw8NyxlKXtjYXNlIFMuYWxsTm90ZXNPZmY6dGhpcy5zdG9wQWxsTm90ZXMoKTticmVhaztjYXNlIFMuYWxsU291bmRPZmY6dGhpcy5zdG9wQWxsTm90ZXMoITApO2JyZWFrO2Nhc2UgUy5iYW5rU2VsZWN0OnRoaXMuc2V0QmFua01TQihBKSx0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSYmZkEuaXNTeXN0ZW1YRyh0aGlzLmNoYW5uZWxTeXN0ZW0pJiZ0aGlzLnNldEJhbmtNU0IoMTI3KTticmVhaztjYXNlIFMuYmFua1NlbGVjdExTQjp0aGlzLnNldEJhbmtMU0IoQSk7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUEZpbmU7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUENvYXJzZTticmVhaztjYXNlIFMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQjp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdPTAsdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBDb2Fyc2U7YnJlYWs7Y2FzZSBTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+Nz09PVplLlNGMiYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl0lMTAwIT09MCYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl09MCksQT09PTEwMD90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xMDA6QT09PTEwMT90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTM6QT09PTEwMj90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTQ6QTwxMDAmJih0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz1BKSksdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBGaW5lO2JyZWFrO2Nhc2UgUy5kYXRhRW50cnlNU0I6dGhpcy5kYXRhRW50cnlDb2Fyc2UoQSk7YnJlYWs7Y2FzZSBTLmRhdGFFbnRyeUxTQjp0aGlzLmRhdGFFbnRyeUZpbmUoQSk7YnJlYWs7Y2FzZSBTLnJlc2V0QWxsQ29udHJvbGxlcnM6dGhpcy5yZXNldENvbnRyb2xsZXJzUlAxNUNvbXBsaWFudCgpO2JyZWFrO2Nhc2UgUy5zdXN0YWluUGVkYWw6QTw2NCYmKHRoaXMuc3VzdGFpbmVkVm9pY2VzLmZvckVhY2gobj0+e24ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXM9W10pO2JyZWFrO2RlZmF1bHQ6dGhpcy52b2ljZXMuZm9yRWFjaChuPT50aGlzLmNvbXB1dGVNb2R1bGF0b3JzKG4sMSxlKSk7YnJlYWt9dCYmdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY29udHJvbGxlckNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGNvbnRyb2xsZXJOdW1iZXI6ZSxjb250cm9sbGVyVmFsdWU6QX0pfX12YXIgSXQ9ezA6MCwxOi4wMDYsMjouMDIzLDQ6LjA1LDg6LjExLDE2Oi4yNSwzMjouNSw2NDoyLjA2LDgwOjQuMiw5Njo4LjQsMTEyOjE5LjUsMTE2OjI2LjcsMTIwOjQwLDEyNDo4MCwxMjc6NDgwfTtmdW5jdGlvbiBncihlKXtpZihJdFtlXSE9PXZvaWQgMClyZXR1cm4gSXRbZV07bGV0IEE9bnVsbCx0PW51bGw7Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKEl0KSl7bGV0IHM9cGFyc2VJbnQobik7czxlJiYoQT09PW51bGx8fHM+QSkmJihBPXMpLHM+ZSYmKHQ9PT1udWxsfHxzPHQpJiYodD1zKX1pZihBIT09bnVsbCYmdCE9PW51bGwpe2xldCBuPUl0W0FdLHM9SXRbdF07cmV0dXJuIG4rKGUtQSkqKHMtbikvKHQtQSl9cmV0dXJuIDB9ZnVuY3Rpb24gY3IoZSxBKXtyZXR1cm4gZ3IoZSkqKEEvMzApfWZ1bmN0aW9uIEVyKGUsQSl7aWYoQTwxKXt0aGlzLm5vdGVPZmYoZSk7cmV0dXJufWlmKEE9TWF0aC5taW4oMTI3LEEpLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJnRoaXMuc3ludGgudG90YWxWb2ljZXNBbW91bnQ+MjAwJiZBPDQwfHx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5ibGFja01JRElNb2RlJiZBPDEwfHx0aGlzLl9pc011dGVkKXJldHVybjtpZighdGhpcy5wcmVzZXQpe3NBKGBObyBwcmVzZXQgZm9yIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IWApO3JldHVybn1sZXQgdD1lK3RoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbEtleVNoaWZ0XSxuPXQ7aWYodD4xMjd8fHQ8MClyZXR1cm47bGV0IHM9dGhpcy5wcmVzZXQ/LnByb2dyYW0sYT10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1tzXT8uW3RdPy5taWRpTm90ZTthPj0wJiYobj1hKSx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tb25vcGhvbmljUmV0cmlnZ2VyTW9kZSYmdGhpcy5raWxsTm90ZShlLC03MjAwKTtsZXQgcj10aGlzLnN5bnRoLmtleU1vZGlmaWVyTWFuYWdlci5nZXRWZWxvY2l0eSh0aGlzLmNoYW5uZWxOdW1iZXIsdCk7cj4tMSYmKEE9cik7bGV0IEk9dGhpcy5zeW50aC5rZXlNb2RpZmllck1hbmFnZXIuZ2V0R2Fpbih0aGlzLmNoYW5uZWxOdW1iZXIsdCksbz0tMSxnPTAsQj10aGlzLm1pZGlDb250cm9sbGVyc1tTLnBvcnRhbWVudG9UaW1lXT4+NyxkPXRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b0NvbnRyb2xdLGg9ZD4+NztpZighdGhpcy5kcnVtQ2hhbm5lbCYmaCE9PW4mJnRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b09uT2ZmXT49ODE5MiYmQj4wKXtpZihkIT09MSl7bGV0IHk9TWF0aC5hYnMobi1oKTtnPWNyKEIseSksbz1ofXRoaXMuY29udHJvbGxlckNoYW5nZShTLnBvcnRhbWVudG9Db250cm9sLG4pfWxldCBDPXRoaXMuc3ludGhQcm9wcy5nZXRWb2ljZXModGhpcy5jaGFubmVsTnVtYmVyLG4sQSx0KSxRPTA7dGhpcy5yYW5kb21QYW4mJihRPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxZTMtNTAwKSk7bGV0IG09dGhpcy52b2ljZXM7Qy5mb3JFYWNoKHk9Pnt5LnBvcnRhbWVudG9Gcm9tS2V5PW8seS5wb3J0YW1lbnRvRHVyYXRpb249Zyx5Lm92ZXJyaWRlUGFuPVEseS5nYWluPUksdGhpcy5zeXNFeE1vZHVsYXRvcnMubW9kdWxhdG9yTGlzdC5mb3JFYWNoKE89PntsZXQgbkE9Ty5tb2QsJD15Lm1vZHVsYXRvcnMuZmluZEluZGV4KFY9PkVBLmlzSWRlbnRpY2FsKFYsbkEpKTskIT09LTE/eS5tb2R1bGF0b3JzWyRdPUVBLmNvcHlGcm9tKG5BKTp5Lm1vZHVsYXRvcnMucHVzaChFQS5jb3B5RnJvbShuQSkpfSksdGhpcy5nZW5lcmF0b3JPdmVycmlkZXNFbmFibGVkJiZ0aGlzLmdlbmVyYXRvck92ZXJyaWRlcy5mb3JFYWNoKChPLG5BKT0+e08hPT1WcyYmKHkuZ2VuZXJhdG9yc1tuQV09Tyl9KTtsZXQgRj15LmV4Y2x1c2l2ZUNsYXNzO0YhPT0wJiZtLmZvckVhY2goTz0+e08uZXhjbHVzaXZlQ2xhc3M9PT1GJiZPLmV4Y2x1c2l2ZVJlbGVhc2UodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lKX0pLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoeSk7bGV0IGs9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc0NvYXJzZU9mZnNldF0qMzI3NjgsRD15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyc0NvYXJzZU9mZnNldF0qMzI3Njgsdj15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zdGFydGxvb3BBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEw9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZW5kbG9vcEFkZHJzT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEU9eS5zYW1wbGUsWD1PPT5NYXRoLm1heCgwLE1hdGgubWluKEUuc2FtcGxlRGF0YS5sZW5ndGgtMSxPKSk7aWYoRS5jdXJzb3I9WChFLmN1cnNvcitrKSxFLmVuZD1YKEUuZW5kK0QpLEUubG9vcFN0YXJ0PVgoRS5sb29wU3RhcnQrdiksRS5sb29wRW5kPVgoRS5sb29wRW5kK0wpLEUubG9vcEVuZDxFLmxvb3BTdGFydCl7bGV0IE89RS5sb29wU3RhcnQ7RS5sb29wU3RhcnQ9RS5sb29wRW5kLEUubG9vcEVuZD1PfUUubG9vcEVuZC1FLmxvb3BTdGFydDwxJiYoRS5sb29waW5nTW9kZT09PTF8fEUubG9vcGluZ01vZGU9PT0zKSYmKEUubG9vcGluZ01vZGU9MCxFLmlzTG9vcGluZz0hMSkseS52b2x1bWVFbnZlbG9wZS5hdHRlbnVhdGlvbj15LnZvbHVtZUVudmVsb3BlLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbix5LmN1cnJlbnRQYW49TWF0aC5tYXgoLTUwMCxNYXRoLm1pbig1MDAseS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucGFuXSkpfSksdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudCs9Qy5sZW5ndGgsdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudD50aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy52b2ljZUNhcCYmdGhpcy5zeW50aFByb3BzLnZvaWNlS2lsbGluZyhDLmxlbmd0aCksbS5wdXNoKC4uLkMpLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPbiIse21pZGlOb3RlOmUsY2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsdmVsb2NpdHk6QX0pfWZ1bmN0aW9uIEJyKGUpe2lmKGU+MTI3fHxlPDApe3NBKCJSZWNlaXZlZCBhIG5vdGVPbiBmb3Igbm90ZSIsZSwiSWdub3JpbmcuIik7cmV0dXJufWxldCBBPWUrdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQrdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdO2lmKHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJiF0aGlzLmRydW1DaGFubmVsKXt0aGlzLmtpbGxOb3RlKEEsLTY5NTApLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSk7cmV0dXJufXRoaXMudm9pY2VzLmZvckVhY2gobj0+e24ucmVhbEtleSE9PUF8fG4uaXNJblJlbGVhc2V8fCh0aGlzLmhvbGRQZWRhbD90aGlzLnN1c3RhaW5lZFZvaWNlcy5wdXNoKG4pOm4ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSl9ZnVuY3Rpb24gQ3IoZSl7aWYodGhpcy5sb2NrUHJlc2V0KXJldHVybjt0aGlzLnBhdGNoLnByb2dyYW09ZTtsZXQgQT10aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHRoaXMucGF0Y2gsdGhpcy5jaGFubmVsU3lzdGVtKTtBfHwoc0EoIk5vIHByZXNldHMhIFVzaW5nIGVtcHR5IGZhbGxiYWNrLiIpLEE9bmV3IHBlKHRoaXMuc3ludGguc291bmRCYW5rTWFuYWdlci5zb3VuZEJhbmtMaXN0WzBdLnNvdW5kQmFuayksQS5uYW1lPSJTUEVTU0EgRU1QVFkgRkFMTEJBQ0sgUFJFU0VUIiksdGhpcy5wcmVzZXQ9QSxBLmlzQW55RHJ1bXMhPT10aGlzLmRydW1DaGFubmVsJiZ0aGlzLnNldERydW1GbGFnKEEuaXNBbnlEcnVtcyksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgicHJvZ3JhbUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGJhbmtMU0I6dGhpcy5wcmVzZXQuYmFua0xTQixiYW5rTVNCOnRoaXMucHJlc2V0LmJhbmtNU0IscHJvZ3JhbTp0aGlzLnByZXNldC5wcm9ncmFtLGlzR01HU0RydW06dGhpcy5wcmVzZXQuaXNHTUdTRHJ1bX0pLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpfXZhciBocj1jbGFzc3ttb2R1bGF0b3JMaXN0PVtdO3Jlc2V0TW9kdWxhdG9ycygpe3RoaXMubW9kdWxhdG9yTGlzdD1bXX1zZXRNb2R1bGF0b3IoZSxBLHQsbj0hMSxzPSExKXtsZXQgYT10aGlzLmdldE1vZHVsYXRvcklEKGUsQSxuLHMpO3Q9PT0wJiZ0aGlzLmRlbGV0ZU1vZHVsYXRvcihhKTtsZXQgcj10aGlzLm1vZHVsYXRvckxpc3QuZmluZChJPT5JLmlkPT09YSk7aWYocilyLm1vZC50cmFuc2Zvcm1BbW91bnQ9dDtlbHNle2xldCBJLG87ZT49bUE/KEk9ZS1tQSxvPSExKTooST1lLG89ITApO2xldCBnPW5ldyBFQShuZXcgWEEoSSxRQS5saW5lYXIsbyxuKSxuZXcgWEEsQSx0LDApO3RoaXMubW9kdWxhdG9yTGlzdC5wdXNoKHttb2Q6ZyxpZDphfSl9fWdldE1vZHVsYXRvcklEKGUsQSx0LG4pe3JldHVybmAke2V9LSR7QX0tJHt0fS0ke259YH1kZWxldGVNb2R1bGF0b3IoZSl7dGhpcy5tb2R1bGF0b3JMaXN0PXRoaXMubW9kdWxhdG9yTGlzdC5maWx0ZXIoQT0+QS5pZCE9PWUpfX0sbHI9MWUzLzIwMDtmdW5jdGlvbiBNcyhlLEEsdCl7aWYoQS50cmFuc2Zvcm1BbW91bnQ9PT0wKXJldHVybiBBLmN1cnJlbnRWYWx1ZT0wLDA7bGV0IG49QS5wcmltYXJ5U291cmNlLmdldFZhbHVlKGUsdCkscz1BLnNlY29uZGFyeVNvdXJjZS5nZXRWYWx1ZShlLHQpLGE9QS50cmFuc2Zvcm1BbW91bnQ7QS5pc0VmZmVjdE1vZHVsYXRvciYmYTw9MWUzJiYoYSo9bHIsYT1NYXRoLm1pbihhLDFlMykpO2xldCByPW4qcyphO3JldHVybiBBLnRyYW5zZm9ybVR5cGU9PT0yJiYocj1NYXRoLmFicyhyKSksQS5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvciYmKHQucmVzb25hbmNlT2Zmc2V0PU1hdGgubWF4KDAsci8yKSksQS5jdXJyZW50VmFsdWU9cixyfWZ1bmN0aW9uIGRyKGUsQT0tMSx0PTApe2xldCBuPWUubW9kdWxhdG9ycyxzPWUuZ2VuZXJhdG9ycztpZih0aGlzLmdlbmVyYXRvck9mZnNldHNFbmFibGVkKXtzPW5ldyBJbnQxNkFycmF5KHMpO2ZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXNbZ10rPXRoaXMuZ2VuZXJhdG9yT2Zmc2V0c1tnXX1sZXQgYT1lLm1vZHVsYXRlZEdlbmVyYXRvcnM7aWYoQT09PS0xKXthLnNldChzKSxuLmZvckVhY2goZz0+e2FbZy5kZXN0aW5hdGlvbl0rPU1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSl9KTtmb3IobGV0IGc9MDtnPGEubGVuZ3RoO2crKyl7bGV0IEI9eFtnXTtCJiYoYVtnXT1NYXRoLm1pbihCLm1heCxNYXRoLm1heChCLm1pbixhW2ddKSkpfWJlLnJlY2FsY3VsYXRlKGUpLF9lLnJlY2FsY3VsYXRlKGUpO3JldHVybn1sZXQgcj1uZXcgU2V0KFtpLmluaXRpYWxBdHRlbnVhdGlvbixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5rZXlOdW1Ub1ZvbEVudkhvbGQsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5XSksST1uZXcgU2V0LG89ISFBO24uZm9yRWFjaChnPT57aWYoZy5wcmltYXJ5U291cmNlLmlzQ0M9PT1vJiZnLnByaW1hcnlTb3VyY2UuaW5kZXg9PT10fHxnLnNlY29uZGFyeVNvdXJjZS5pc0NDPT09byYmZy5zZWNvbmRhcnlTb3VyY2UuaW5kZXg9PT10KXtsZXQgQj1nLmRlc3RpbmF0aW9uO2lmKCFJLmhhcyhCKSl7YVtCXT1zW0JdLE1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSksbi5mb3JFYWNoKGg9PntoLmRlc3RpbmF0aW9uPT09QiYmKGFbQl0rPWguY3VycmVudFZhbHVlKX0pO2xldCBkPXhbQl07YVtCXT1NYXRoLm1heChkLm1pbixNYXRoLm1pbihhW0JdLGQubWF4KSksSS5hZGQoQil9fX0pLFsuLi5JXS5zb21lKGc9PnIuaGFzKGcpKSYmYmUucmVjYWxjdWxhdGUoZSksX2UucmVjYWxjdWxhdGUoZSl9dmFyIFFyPWNsYXNze21pZGlDb250cm9sbGVycz1uZXcgSW50MTZBcnJheShibik7bG9ja2VkQ29udHJvbGxlcnM9QXJyYXkoYm4pLmZpbGwoITEpO2N1c3RvbUNvbnRyb2xsZXJzPW5ldyBGbG9hdDMyQXJyYXkoZWEpO2NoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wO2NoYW5uZWxPY3RhdmVUdW5pbmc9bmV3IEludDhBcnJheSgxMjgpO3N5c0V4TW9kdWxhdG9ycz1uZXcgaHI7ZHJ1bUNoYW5uZWw9ITE7cmFuZG9tUGFuPSExO2RhdGFFbnRyeVN0YXRlPVlBLklkbGU7cGF0Y2g9e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTowLGlzR01HU0RydW06ITF9O3ByZXNldDtsb2NrUHJlc2V0PSExO2xvY2tlZFN5c3RlbT0iZ3MiO2xvY2tHU05SUE5QYXJhbXM9ITE7Y2hhbm5lbFZpYnJhdG89e2RlbGF5OjAsZGVwdGg6MCxyYXRlOjB9O3ZvaWNlcz1bXTtzdXN0YWluZWRWb2ljZXM9W107Y2hhbm5lbE51bWJlcjtzeW50aDtzeW50aFByb3BzO25vdGVPbj1Fci5iaW5kKHRoaXMpO25vdGVPZmY9QnIuYmluZCh0aGlzKTtwcm9ncmFtQ2hhbmdlPUNyLmJpbmQodGhpcyk7Y29udHJvbGxlckNoYW5nZT1Jci5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnM9cG8uYmluZCh0aGlzKTtyZXNldFByZXNldD15by5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnNSUDE1Q29tcGxpYW50PWtvLmJpbmQodGhpcyk7cmVzZXRQYXJhbWV0ZXJzPURvLmJpbmQodGhpcyk7ZGF0YUVudHJ5RmluZT1pci5iaW5kKHRoaXMpO2RhdGFFbnRyeUNvYXJzZT1hci5iaW5kKHRoaXMpO2NoYW5uZWxUdW5pbmdDZW50cz0wO2dlbmVyYXRvck9mZnNldHM9bmV3IEludDE2QXJyYXkoTW4pO2dlbmVyYXRvck9mZnNldHNFbmFibGVkPSExO2dlbmVyYXRvck92ZXJyaWRlcz1uZXcgSW50MTZBcnJheShNbik7Z2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMTtyZW5kZXJWb2ljZT1zci5iaW5kKHRoaXMpO3BhbkFuZE1peFZvaWNlPU9vLmJpbmQodGhpcyk7Y29tcHV0ZU1vZHVsYXRvcnM9ZHIuYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlLEEsdCxuKXt0aGlzLnN5bnRoPWUsdGhpcy5zeW50aFByb3BzPUEsdGhpcy5wcmVzZXQ9dCx0aGlzLmNoYW5uZWxOdW1iZXI9bix0aGlzLnJlc2V0R2VuZXJhdG9yT3ZlcnJpZGVzKCksdGhpcy5yZXNldEdlbmVyYXRvck9mZnNldHMoKX1faXNNdXRlZD0hMTtnZXQgaXNNdXRlZCgpe3JldHVybiB0aGlzLl9pc011dGVkfWdldCBob2xkUGVkYWwoKXtyZXR1cm4gdGhpcy5taWRpQ29udHJvbGxlcnNbUy5zdXN0YWluUGVkYWxdPj04MTkyfWdldCBjaGFubmVsU3lzdGVtKCl7cmV0dXJuIHRoaXMubG9ja1ByZXNldD90aGlzLmxvY2tlZFN5c3RlbTp0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5taWRpU3lzdGVtfXRyYW5zcG9zZUNoYW5uZWwoZSxBPSExKXt0aGlzLmRydW1DaGFubmVsfHwoZSs9dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbik7bGV0IHQ9TWF0aC50cnVuYyhlKSxuPXRoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdLzEwMDt0aGlzLmRydW1DaGFubmVsJiYhQXx8ZT09PW58fCh0IT09dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQmJnRoaXMuc3RvcEFsbE5vdGVzKCksdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dCx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsKGUtdCkqMTAwKSx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSl9c2V0T2N0YXZlVHVuaW5nKGUpe2lmKGUubGVuZ3RoIT09MTIpdGhyb3cgbmV3IEVycm9yKCJUdW5pbmcgaXMgbm90IHRoZSBsZW5ndGggb2YgMTIuIik7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nPW5ldyBJbnQ4QXJyYXkoMTI4KTtmb3IobGV0IEE9MDtBPDEyODtBKyspdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW0FdPWVbQSUxMl19c2V0TW9kdWxhdGlvbkRlcHRoKGUpe2U9TWF0aC5yb3VuZChlKSxwKGAlY0NoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IG1vZHVsYXRpb24gZGVwdGguIENlbnRzOiAlYyR7ZX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEubW9kdWxhdGlvbk11bHRpcGxpZXIsZS81MCl9c2V0VHVuaW5nKGUsQT0hMCl7ZT1NYXRoLnJvdW5kKGUpLHRoaXMuc2V0Q3VzdG9tQ29udHJvbGxlcihJQS5jaGFubmVsVHVuaW5nLGUpLEEmJnAoYCVjRmluZSB0dW5pbmcgZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7ZX0lYyBjZW50cy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvKX1waXRjaFdoZWVsKGUpe3RoaXMubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXXx8KHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoInBpdGNoV2hlZWwiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixwaXRjaDplfSksdGhpcy5taWRpQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXT1lLHRoaXMudm9pY2VzLmZvckVhY2goQT0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhBLDAsai5waXRjaFdoZWVsKSksdGhpcy5zZW5kQ2hhbm5lbFByb3BlcnR5KCkpfWNoYW5uZWxQcmVzc3VyZShlKXt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLmNoYW5uZWxQcmVzc3VyZV09ZTw8Nyx0aGlzLnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0aGlzLnZvaWNlcy5mb3JFYWNoKEE9PnRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoQSwwLGouY2hhbm5lbFByZXNzdXJlKSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIscHJlc3N1cmU6ZX0pfXBvbHlQcmVzc3VyZShlLEEpe3RoaXMudm9pY2VzLmZvckVhY2godD0+e3QubWlkaU5vdGU9PT1lJiYodC5wcmVzc3VyZT1BLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnModCwwLGoucG9seVByZXNzdXJlKSl9KSx0aGlzLnN5bnRoUHJvcHMuY2FsbEV2ZW50KCJwb2x5UHJlc3N1cmUiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixtaWRpTm90ZTplLHByZXNzdXJlOkF9KX1zZXRDdXN0b21Db250cm9sbGVyKGUsQSl7dGhpcy5jdXN0b21Db250cm9sbGVyc1tlXT1BLHRoaXMudXBkYXRlQ2hhbm5lbFR1bmluZygpfXVwZGF0ZUNoYW5uZWxUdW5pbmcoKXt0aGlzLmNoYW5uZWxUdW5pbmdDZW50cz10aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmddK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubWFzdGVyVHVuaW5nXSt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmdTZW1pdG9uZXNdKjEwMH1yZW5kZXJBdWRpbyhlLEEsdCxuLHMsYSxyLEkpe3RoaXMudm9pY2VzPXRoaXMudm9pY2VzLmZpbHRlcihvPT4hdGhpcy5yZW5kZXJWb2ljZShvLHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSxlLEEsdCxuLHMsYSxyLEkpKX1zZXRQcmVzZXRMb2NrKGUpe3RoaXMubG9ja1ByZXNldCE9PWUmJih0aGlzLmxvY2tQcmVzZXQ9ZSxlJiYodGhpcy5sb2NrZWRTeXN0ZW09dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpfXNldERydW1zKGUpe2lmKGZBLmlzU3lzdGVtWEcodGhpcy5jaGFubmVsU3lzdGVtKSlpZihlKXRoaXMuc2V0QmFua01TQihmQS5nZXREcnVtQmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCk7ZWxzZXtpZih0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkaXNhYmxlIGRydW1zIG9uIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IGZvciBYRy5gKTt0aGlzLnNldEJhbmtNU0IoMCksdGhpcy5zZXRCYW5rTFNCKDApfWVsc2UgdGhpcy5zZXRHU0RydW1zKGUpO3RoaXMuc2V0RHJ1bUZsYWcoZSksdGhpcy5wcm9ncmFtQ2hhbmdlKHRoaXMucGF0Y2gucHJvZ3JhbSl9c2V0UGF0Y2goZSl7dGhpcy5zZXRCYW5rTVNCKGUuYmFua01TQiksdGhpcy5zZXRCYW5rTFNCKGUuYmFua0xTQiksdGhpcy5zZXRHU0RydW1zKGUuaXNHTUdTRHJ1bSksdGhpcy5wcm9ncmFtQ2hhbmdlKGUucHJvZ3JhbSl9c2V0R1NEcnVtcyhlKXtlIT09dGhpcy5wYXRjaC5pc0dNR1NEcnVtJiYodGhpcy5zZXRCYW5rTFNCKDApLHRoaXMuc2V0QmFua01TQigwKSx0aGlzLnBhdGNoLmlzR01HU0RydW09ZSl9c2V0VmlicmF0byhlLEEsdCl7dGhpcy5sb2NrR1NOUlBOUGFyYW1zfHwodGhpcy5jaGFubmVsVmlicmF0by5yYXRlPUEsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT10LHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9ZSl9ZGlzYWJsZUFuZExvY2tHU05SUE4oKXt0aGlzLmxvY2tHU05SUE5QYXJhbXM9ITAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTAsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0wLHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9MH1yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpe3RoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzLmZpbGwoVnMpLHRoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMX1zZXRHZW5lcmF0b3JPdmVycmlkZShlLEEsdD0hMSl7dGhpcy5nZW5lcmF0b3JPdmVycmlkZXNbZV09QSx0aGlzLmdlbmVyYXRvck92ZXJyaWRlc0VuYWJsZWQ9ITAsdCYmdGhpcy52b2ljZXMuZm9yRWFjaChuPT57bi5nZW5lcmF0b3JzW2VdPUEsdGhpcy5jb21wdXRlTW9kdWxhdG9ycyhuKX0pfXJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpe3RoaXMuZ2VuZXJhdG9yT2Zmc2V0cy5maWxsKDApLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITF9c2V0R2VuZXJhdG9yT2Zmc2V0KGUsQSl7dGhpcy5nZW5lcmF0b3JPZmZzZXRzW2VdPUEqeFtlXS5ucnBuLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITAsdGhpcy52b2ljZXMuZm9yRWFjaCh0PT57dGhpcy5jb21wdXRlTW9kdWxhdG9ycyh0KX0pfWtpbGxOb3RlKGUsQT0tMTJlMyl7ZSs9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdLHRoaXMudm9pY2VzLmZvckVhY2godD0+e3QucmVhbEtleT09PWUmJih0Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XT1BLHQucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pfXN0b3BBbGxOb3RlcyhlPSExKXtlPyh0aGlzLnZvaWNlcy5sZW5ndGg9MCx0aGlzLnN1c3RhaW5lZFZvaWNlcy5sZW5ndGg9MCx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSk6KHRoaXMudm9pY2VzLmZvckVhY2goQT0+e0EuaXNJblJlbGVhc2V8fEEucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXMuZm9yRWFjaChBPT57QS5yZWxlYXNlKHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSl9KSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgic3RvcEFsbCIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGZvcmNlOmV9KX1tdXRlQ2hhbm5lbChlKXtlJiZ0aGlzLnN0b3BBbGxOb3RlcyghMCksdGhpcy5faXNNdXRlZD1lLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm11dGVDaGFubmVsIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsaXNNdXRlZDplfSl9c2VuZENoYW5uZWxQcm9wZXJ0eSgpe2lmKCF0aGlzLnN5bnRoLmVuYWJsZUV2ZW50U3lzdGVtKXJldHVybjtsZXQgZT17dm9pY2VzQW1vdW50OnRoaXMudm9pY2VzLmxlbmd0aCxwaXRjaFdoZWVsOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF0scGl0Y2hXaGVlbFJhbmdlOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXS8xMjgsaXNNdXRlZDp0aGlzLmlzTXV0ZWQsdHJhbnNwb3NpdGlvbjp0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDAsaXNEcnVtOnRoaXMuZHJ1bUNoYW5uZWx9O3RoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoImNoYW5uZWxQcm9wZXJ0eUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLHByb3BlcnR5OmV9KX1zZXRCYW5rTVNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua01TQj1lKX1zZXRCYW5rTFNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua0xTQj1lKX1zZXREcnVtRmxhZyhlKXt0aGlzLmxvY2tQcmVzZXR8fCF0aGlzLnByZXNldHx8dGhpcy5kcnVtQ2hhbm5lbCE9PWUmJihlPyh0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wLHRoaXMuZHJ1bUNoYW5uZWw9ITApOnRoaXMuZHJ1bUNoYW5uZWw9ITEsdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiZHJ1bUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGlzRHJ1bUNoYW5uZWw6dGhpcy5kcnVtQ2hhbm5lbH0pKX19LHluPTIwO2FzeW5jIGZ1bmN0aW9uIHVyKGUsQSx0LG4scyxhLHIpe2xldCBJPTAsbz0wLGc9W107Zm9yKGxldCBoIG9mIGUuc2FtcGxlcyl7biYmYSYmYXdhaXQgaC5jb21wcmVzc1NhbXBsZShhKSxzJiZoLnNldEF1ZGlvRGF0YShoLmdldEF1ZGlvRGF0YSgpLGguc2FtcGxlUmF0ZSk7bGV0IEM9aC5nZXRSYXdEYXRhKCEwKTtJKyssYXdhaXQgcj8uKGgubmFtZSxJLGUuc2FtcGxlcy5sZW5ndGgpLHAoYCVjRW5jb2RlZCBzYW1wbGUgJWMke0l9LiAke2gubmFtZX0lYyBvZiAlYyR7ZS5zYW1wbGVzLmxlbmd0aH0lYy4gQ29tcHJlc3NlZDogJWMke2guaXNDb21wcmVzc2VkfSVjLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxoLmlzQ29tcHJlc3NlZD9jLnJlY29nbml6ZWQ6Yy51bnJlY29nbml6ZWQsYy5pbmZvKSxvKz1DLmxlbmd0aCsoaC5pc0NvbXByZXNzZWQ/MDo5MiksZy5wdXNoKEMpfW8lMiE9PTAmJm8rKztsZXQgQj1uZXcgWShvK3luKTtrQShCLCJMSVNUIiksaHQoQixvK3luLTgsNCksa0EoQiwic2R0YSIpLGtBKEIsInNtcGwiKSxodChCLG8sNCk7bGV0IGQ9MDtyZXR1cm4gZS5zYW1wbGVzLmZvckVhY2goKGgsQyk9PntsZXQgUT1nW0NdO0Iuc2V0KFEsZCt5bik7bGV0IG0seTtoLmlzQ29tcHJlc3NlZD8obT1kLHk9bStRLmxlbmd0aCk6KG09ZC8yLHk9bStRLmxlbmd0aC8yLGQrPTkyKSxkKz1RLmxlbmd0aCxBLnB1c2gobSksdC5wdXNoKHkpfSksQn12YXIgZnI9NDhlMyxadD1jbGFzc3tuYW1lO3NhbXBsZVJhdGU7b3JpZ2luYWxLZXk7cGl0Y2hDb3JyZWN0aW9uO2xpbmtlZFNhbXBsZTtzYW1wbGVUeXBlO2xvb3BTdGFydDtsb29wRW5kO2xpbmtlZFRvPVtdO2RhdGFPdmVycmlkZGVuPSEwO2NvbXByZXNzZWREYXRhO2F1ZGlvRGF0YTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyKXt0aGlzLm5hbWU9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm9yaWdpbmFsS2V5PXQsdGhpcy5waXRjaENvcnJlY3Rpb249bix0aGlzLmxvb3BTdGFydD1hLHRoaXMubG9vcEVuZD1yLHRoaXMuc2FtcGxlVHlwZT1zfWdldCBpc0NvbXByZXNzZWQoKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSE9PXZvaWQgMH1nZXQgaXNMaW5rZWQoKXtyZXR1cm4gdGhpcy5zYW1wbGVUeXBlPT09d0EucmlnaHRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxlZnRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxpbmtlZFNhbXBsZX1nZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSYmZSYmIXRoaXMuZGF0YU92ZXJyaWRkZW4/dGhpcy5jb21wcmVzc2VkRGF0YTp0aGlzLmVuY29kZVMxNkxFKCl9cmVzYW1wbGVEYXRhKGUpe2xldCBBPXRoaXMuZ2V0QXVkaW9EYXRhKCksdD1lL3RoaXMuc2FtcGxlUmF0ZSxuPW5ldyBGbG9hdDMyQXJyYXkoTWF0aC5mbG9vcihBLmxlbmd0aCp0KSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspbltzXT1BW01hdGguZmxvb3IocyooMS90KSldO0E9bix0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLmxvb3BTdGFydD1NYXRoLmZsb29yKHRoaXMubG9vcFN0YXJ0KnQpLHRoaXMubG9vcEVuZD1NYXRoLmZsb29yKHRoaXMubG9vcEVuZCp0KSx0aGlzLmF1ZGlvRGF0YT1BfWFzeW5jIGNvbXByZXNzU2FtcGxlKGUpe2lmKCF0aGlzLmlzQ29tcHJlc3NlZCl0cnl7bGV0IEE9dGhpcy5nZXRBdWRpb0RhdGEoKTsodGhpcy5zYW1wbGVSYXRlPDhlM3x8dGhpcy5zYW1wbGVSYXRlPjk2ZTMpJiYodGhpcy5yZXNhbXBsZURhdGEoZnIpLEE9dGhpcy5nZXRBdWRpb0RhdGEoKSk7bGV0IHQ9YXdhaXQgZShBLHRoaXMuc2FtcGxlUmF0ZSk7dGhpcy5zZXRDb21wcmVzc2VkRGF0YSh0KX1jYXRjaChBKXtzQShgRmFpbGVkIHRvIGNvbXByZXNzICR7dGhpcy5uYW1lfS4gTGVhdmluZyBhcyB1bmNvbXByZXNzZWQhYCxBKSx0aGlzLmNvbXByZXNzZWREYXRhPXZvaWQgMH19c2V0U2FtcGxlVHlwZShlKXtpZih0aGlzLnNhbXBsZVR5cGU9ZSx0aGlzLmlzTGlua2VkfHwodGhpcy5saW5rZWRTYW1wbGUmJih0aGlzLmxpbmtlZFNhbXBsZS5saW5rZWRTYW1wbGU9dm9pZCAwLHRoaXMubGlua2VkU2FtcGxlLnNhbXBsZVR5cGU9ZSksdGhpcy5saW5rZWRTYW1wbGU9dm9pZCAwKSwoZSYzMjc2OCk+MCl0aHJvdyBuZXcgRXJyb3IoIlJPTSBzYW1wbGVzIGFyZSBub3Qgc3VwcG9ydGVkLiIpfXVubGlua1NhbXBsZSgpe3RoaXMuc2V0U2FtcGxlVHlwZSh3QS5tb25vU2FtcGxlKX1zZXRMaW5rZWRTYW1wbGUoZSxBKXtpZihlLmxpbmtlZFNhbXBsZSl0aHJvdyBuZXcgRXJyb3IoYCR7ZS5uYW1lfSBpcyBsaW5rZWQgdHAgJHtlLmxpbmtlZFNhbXBsZS5uYW1lfS4gVW5saW5rIGl0IGZpcnN0LmApO2lmKHRoaXMubGlua2VkU2FtcGxlPWUsZS5saW5rZWRTYW1wbGU9dGhpcyxBPT09d0EubGVmdFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EubGVmdFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLnJpZ2h0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5yaWdodFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EucmlnaHRTYW1wbGUpLGUuc2V0U2FtcGxlVHlwZSh3QS5sZWZ0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5saW5rZWRTYW1wbGUpdGhpcy5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2FtcGxlIHR5cGU6ICIrQSl9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHRoaXMuYXVkaW9EYXRhPXRoaXMuZGVjb2RlVm9yYmlzKCksdGhpcy5hdWRpb0RhdGE7dGhyb3cgbmV3IEVycm9yKCJTYW1wbGUgZGF0YSBpcyB1bmRlZmluZWQgZm9yIGEgQmFzaWNTYW1wbGUgaW5zdGFuY2UuIil9c2V0QXVkaW9EYXRhKGUsQSl7dGhpcy5hdWRpb0RhdGE9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLmRhdGFPdmVycmlkZGVuPSEwLHRoaXMuY29tcHJlc3NlZERhdGE9dm9pZCAwfXNldENvbXByZXNzZWREYXRhKGUpe3RoaXMuYXVkaW9EYXRhPXZvaWQgMCx0aGlzLmNvbXByZXNzZWREYXRhPWUsdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMX1lbmNvZGVTMTZMRSgpe2xldCBlPXRoaXMuZ2V0QXVkaW9EYXRhKCksQT1uZXcgSW50MTZBcnJheShlLmxlbmd0aCksdD1lLmxlbmd0aDtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgcz1lW25dKjMyNzY4O3M+MzI3Njc/cz0zMjc2NzpzPC0zMjc2OCYmKHM9LTMyNzY4KSxBW25dPXN9cmV0dXJuIG5ldyBZKEEuYnVmZmVyKX1kZWNvZGVWb3JiaXMoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYoIXRoaXMuY29tcHJlc3NlZERhdGEpdGhyb3cgbmV3IEVycm9yKCJDb21wcmVzc2VkIGRhdGEgaXMgbWlzc2luZy4iKTt0cnl7bGV0IEE9T3QuZGVjb2RlKHRoaXMuY29tcHJlc3NlZERhdGEpLmRhdGFbMF07aWYoQT09PXZvaWQgMClyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06IFZvcmJpcyBkZWNvZGUgcmV0dXJuZWQgdW5kZWZpbmVkLmApLG5ldyBGbG9hdDMyQXJyYXkoMCk7Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0KyspQVt0XT1NYXRoLm1heCgtMSxNYXRoLm1pbihBW3RdLC45OTk5Njk0ODI0MjE4NzUpKTtyZXR1cm4gQX1jYXRjaChlKXtyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KHRoaXMubG9vcEVuZCsxKX19fSxtcj1jbGFzcyBleHRlbmRzIFp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoIiIsNDQxMDAsNjAsMCx3QS5tb25vU2FtcGxlLDAsMCl9fSxWbj0xNixTcj1jbGFzcyBleHRlbmRzIFp0e2xpbmtlZFNhbXBsZUluZGV4O3MxNmxlRGF0YTtzdGFydEJ5dGVPZmZzZXQ7ZW5kQnl0ZU9mZnNldDtzYW1wbGVJRDtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyLEksbyxnLEIsZCl7bGV0IGg9KGcmVm4pPjA7ZyY9flZuLHN1cGVyKGUsYSxyLEksZyxuLUEvMixzLUEvMiksdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMSx0aGlzLm5hbWU9ZSx0aGlzLnN0YXJ0Qnl0ZU9mZnNldD1BLHRoaXMuZW5kQnl0ZU9mZnNldD10LHRoaXMuc2FtcGxlSUQ9ZDtsZXQgQz1CIGluc3RhbmNlb2YgWT9CLmN1cnJlbnRJbmRleDowO0IgaW5zdGFuY2VvZiBZP2g/KHRoaXMubG9vcFN0YXJ0Kz10aGlzLnN0YXJ0Qnl0ZU9mZnNldC8yLHRoaXMubG9vcEVuZCs9dGhpcy5zdGFydEJ5dGVPZmZzZXQvMix0aGlzLnNldENvbXByZXNzZWREYXRhKEIuc2xpY2UodGhpcy5zdGFydEJ5dGVPZmZzZXQvMitDLHRoaXMuZW5kQnl0ZU9mZnNldC8yK0MpKSk6dGhpcy5zMTZsZURhdGE9Qi5zbGljZShDK3RoaXMuc3RhcnRCeXRlT2Zmc2V0LEMrdGhpcy5lbmRCeXRlT2Zmc2V0KTp0aGlzLnNldEF1ZGlvRGF0YShCLnNsaWNlKHRoaXMuc3RhcnRCeXRlT2Zmc2V0LzIsdGhpcy5lbmRCeXRlT2Zmc2V0LzIpLGEpLHRoaXMubGlua2VkU2FtcGxlSW5kZXg9b31nZXRMaW5rZWRTYW1wbGUoZSl7aWYodGhpcy5saW5rZWRTYW1wbGV8fCF0aGlzLmlzTGlua2VkKXJldHVybjtsZXQgQT1lW3RoaXMubGlua2VkU2FtcGxlSW5kZXhdO0E/QS5saW5rZWRTYW1wbGU/KHAoYCVjSW52YWxpZCBsaW5rZWQgc2FtcGxlIGZvciAke3RoaXMubmFtZX06ICR7QS5uYW1lfSBpcyBhbHJlYWR5IGxpbmtlZCB0byAke0EubGlua2VkU2FtcGxlLm5hbWV9YCxjLndhcm4pLHRoaXMudW5saW5rU2FtcGxlKCkpOnRoaXMuc2V0TGlua2VkU2FtcGxlKEEsdGhpcy5zYW1wbGVUeXBlKToocChgJWNJbnZhbGlkIGxpbmtlZCBzYW1wbGUgZm9yICR7dGhpcy5uYW1lfS4gU2V0dGluZyB0byBtb25vLmAsYy53YXJuKSx0aGlzLnVubGlua1NhbXBsZSgpKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHN1cGVyLmdldEF1ZGlvRGF0YSgpO2lmKCF0aGlzLnMxNmxlRGF0YSl0aHJvdyBjb25zb2xlLmVycm9yKHRoaXMpLG5ldyBFcnJvcigiVW5leHBlY3RlZCBsYWNrIG9mIGF1ZGlvIGRhdGEuIik7bGV0IGU9dGhpcy5lbmRCeXRlT2Zmc2V0LXRoaXMuc3RhcnRCeXRlT2Zmc2V0O2lmKGU8MSlyZXR1cm4gc0EoYEludmFsaWQgc2FtcGxlICR7dGhpcy5uYW1lfSEgSW52YWxpZCBsZW5ndGg6ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KDEpO2xldCBBPW5ldyBGbG9hdDMyQXJyYXkoZS8yKSx0PW5ldyBJbnQxNkFycmF5KHRoaXMuczE2bGVEYXRhLmJ1ZmZlcik7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspQVtuXT10W25dLzMyNzY4O3JldHVybiB0aGlzLmF1ZGlvRGF0YT1BLEF9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhT3ZlcnJpZGRlbnx8dGhpcy5jb21wcmVzc2VkRGF0YT9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMuczE2bGVEYXRhPz9uZXcgVWludDhBcnJheSgwKX19O2Z1bmN0aW9uIGJzKGUsQSx0PSEwKXtsZXQgbj1bXSxzPTA7Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgYT1wcihzLGUuZGF0YSxBKTtuLnB1c2goYSkscysrfXJldHVybiBuLnBvcCgpLHQmJm4uZm9yRWFjaChhPT5hLmdldExpbmtlZFNhbXBsZShuKSksbn1mdW5jdGlvbiBwcihlLEEsdCl7bGV0IG49aEEoQSwyMCkscz1OKEEsNCkqMixhPU4oQSw0KSoyLHI9TihBLDQpLEk9TihBLDQpLG89TihBLDQpLGc9QVtBLmN1cnJlbnRJbmRleCsrXTtnPjEyNyYmKGc9NjApO2xldCBCPXFhKEFbQS5jdXJyZW50SW5kZXgrK10pLGQ9TihBLDIpLGg9TihBLDIpO3JldHVybiBuZXcgU3IobixzLGEscixJLG8sZyxCLGQsaCx0LGUpfWZ1bmN0aW9uIHlyKGUsQSx0KXtsZXQgcz00NiooZS5zYW1wbGVzLmxlbmd0aCsxKSxhPW5ldyBZKHMpLHI9bmV3IFkocyksST0wO2Uuc2FtcGxlcy5mb3JFYWNoKChCLGQpPT57a0EoYSxCLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShyLEIubmFtZS5zdWJzdHJpbmcoMjApLDIwKTtsZXQgaD1BW2RdO2dBKGEsaCksci5jdXJyZW50SW5kZXgrPTQ7bGV0IEM9dFtkXTtnQShhLEMpLHIuY3VycmVudEluZGV4Kz00O2xldCBRPUIubG9vcFN0YXJ0K2gsbT1CLmxvb3BFbmQraDtCLmlzQ29tcHJlc3NlZCYmKFEtPWgsbS09aCksZ0EoYSxRKSxnQShhLG0pLGdBKGEsQi5zYW1wbGVSYXRlKSxhW2EuY3VycmVudEluZGV4KytdPUIub3JpZ2luYWxLZXksYVthLmN1cnJlbnRJbmRleCsrXT1CLnBpdGNoQ29ycmVjdGlvbixyLmN1cnJlbnRJbmRleCs9MTQ7bGV0IHk9Qi5saW5rZWRTYW1wbGU/ZS5zYW1wbGVzLmluZGV4T2YoQi5saW5rZWRTYW1wbGUpOjA7SihhLE1hdGgubWF4KDAseSkmNjU1MzUpLEoocixNYXRoLm1heCgwLHkpPj4xNiksST1NYXRoLm1heChJLHkpO2xldCBGPUIuc2FtcGxlVHlwZTtCLmlzQ29tcHJlc3NlZCYmKEZ8PVZuKSxKKGEsRiksci5jdXJyZW50SW5kZXgrPTJ9KSxrQShhLCJFT1MiLDQ2KSxrQShyLCJFT1MiLDQ2KTtsZXQgbz1jQSgic2hkciIsYSksZz1jQSgic2hkciIscik7cmV0dXJue3BkdGE6byx4ZHRhOmd9fWZ1bmN0aW9uIHZzKGUsQT0hMSl7bGV0IHQ9QT9lLnByZXNldHM6ZS5pbnN0cnVtZW50cyxuPUE/InBnZW4iOiJpZ2VuIixzPUE/InBtb2QiOiJpbW9kIixhPUE/InBiYWciOiJpYmFnIixyPUE/InBoZHIiOiJpbnN0IixJPUE/ZGE6bGEsbz10Lm1hcChrPT4oayBpbnN0YW5jZW9mIHBlLGsuZ2V0U2l6ZSgpKSksZz1vLnJlZHVjZSgoayxEKT0+aytELmdlbiwwKStDdCxCPW5ldyBZKGcpLGQ9by5yZWR1Y2UoKGssRCk9PmsrRC5tb2QsMCkrbWUsaD1uZXcgWShkKSxDPW8ucmVkdWNlKChrLEQpPT5rK0QuYmFnLDApK0p0LFE9e3BkdGE6bmV3IFkoQykseGR0YTpuZXcgWShDKX0sbT1vLnJlZHVjZSgoayxEKT0+RC5oZHIraywwKStJLHk9e3BkdGE6bmV3IFkobSkseGR0YTpuZXcgWShtKX0sRj17Z2VuOjAsYmFnOjAsbW9kOjAsaGRyOjB9O3JldHVybiB0LmZvckVhY2goaz0+e2sgaW5zdGFuY2VvZiBwZSxrLndyaXRlKEIsaCxRLHksRixlKX0pLEE/KGtBKHkucGR0YSwiRU9QIiwyMCkseS5wZHRhLmN1cnJlbnRJbmRleCs9NCxKKHkucGR0YSxGLmhkciY2NTUzNSkseS5wZHRhLmN1cnJlbnRJbmRleCs9MTIsa0EoeS54ZHRhLCIiLDIwKSx5LnhkdGEuY3VycmVudEluZGV4Kz00LEooeS54ZHRhLEYuaGRyPj4xNikseS54ZHRhLmN1cnJlbnRJbmRleCs9MTIpOihrQSh5LnBkdGEsIkVPSSIsMjApLGtBKHkueGR0YSwiIiwyMCksSih5LnBkdGEsRi5oZHImNjU1MzUpLEooeS54ZHRhLEYuaGRyPj4xNikpLEooUS5wZHRhLEYuZ2VuJjY1NTM1KSxKKFEueGR0YSxGLmdlbj4+MTYpLEooUS5wZHRhLEYubW9kJjY1NTM1KSxKKFEueGR0YSxGLm1vZD4+MTYpLHt3cml0ZVhkdGE6TWF0aC5tYXgoZy9DdCxkL21lLEMvSnQsbS9JKT42NTUzNSxnZW46e3BkdGE6Y0EobixCKSx4ZHRhOmNBKHMsbmV3IFkoQ3QpKX0sbW9kOntwZHRhOmNBKHMsaCkseGR0YTpjQShzLG5ldyBZKG1lKSl9LGJhZzp7cGR0YTpjQShhLFEucGR0YSkseGR0YTpjQShhLFEueGR0YSl9LGhkcjp7cGR0YTpjQShyLHkucGR0YSkseGR0YTpjQShyLHkueGR0YSl9fX12YXIgWG49e2NvbXByZXNzOiExLGNvbXByZXNzaW9uRnVuY3Rpb246dm9pZCAwLHByb2dyZXNzRnVuY3Rpb246dm9pZCAwLHdyaXRlRGVmYXVsdE1vZHVsYXRvcnM6ITAsd3JpdGVFeHRlbmRlZExpbWl0czohMCxkZWNvbXByZXNzOiExfTthc3luYyBmdW5jdGlvbiBrcihlLEE9WG4pe2xldCB0PSRuKEEsWG4pO2lmKHQ/LmNvbXByZXNzKXtpZih0eXBlb2YgdD8uY29tcHJlc3Npb25GdW5jdGlvbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIk5vIGNvbXByZXNzaW9uIGZ1bmN0aW9uIHN1cHBsaWVkIGJ1dCBjb21wcmVzc2lvbiBlbmFibGVkLiIpO2lmKHQ/LmRlY29tcHJlc3MpdGhyb3cgbmV3IEVycm9yKCJEZWNvbXByZXNzZWQgYW5kIGNvbXByZXNzZWQgYXQgdGhlIHNhbWUgdGltZS4iKX1iQSgiJWNTYXZpbmcgc291bmRiYW5rLi4uIixjLmluZm8pLHAoYCVjQ29tcHJlc3Npb246ICVjJHt0Py5jb21wcmVzc3x8ImZhbHNlIn0lY2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKSxPQSgiJWNXcml0aW5nIElORk8uLi4iLGMuaW5mbyk7bGV0IG49W107ZS5zb3VuZEJhbmtJbmZvLnNvZnR3YXJlPSJTcGVzc2FTeW50aCIsKHQ/LmNvbXByZXNzfHxlLnNhbXBsZXMuc29tZShEPT5ELmlzQ29tcHJlc3NlZCkpJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MyxlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj0wKSx0Py5kZWNvbXByZXNzJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MixlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00KTtsZXQgcz0oRCx2KT0+e24ucHVzaChjQShELG5lKHYsITAsITApKSl9LGE9bmV3IFkoNCk7aWYoSihhLGUuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yKSxKKGEsZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWlub3IpLG4ucHVzaChjQSgiaWZpbCIsYSkpLGUuc291bmRCYW5rSW5mby5yb21WZXJzaW9uKXtsZXQgRD1uZXcgWSg0KTtKKEQsZS5zb3VuZEJhbmtJbmZvLnJvbVZlcnNpb24ubWFqb3IpLEooRCxlLnNvdW5kQmFua0luZm8ucm9tVmVyc2lvbi5taW5vciksbi5wdXNoKGNBKCJpdmVyIixEKSl9bGV0IHI9KGUuc291bmRCYW5rSW5mbz8uY29tbWVudD8/IiIpKyhlLnNvdW5kQmFua0luZm8uc3ViamVjdD9gCiR7ZS5zb3VuZEJhbmtJbmZvLnN1YmplY3R9YDoiIik7Zm9yKGxldFtELHZdb2YgT2JqZWN0LmVudHJpZXMoZS5zb3VuZEJhbmtJbmZvKSl7bGV0IEw9RCxFPXY7aWYoRSlzd2l0Y2goTCl7Y2FzZSJuYW1lIjpzKCJJTkFNIixFKTticmVhaztjYXNlImNvbW1lbnQiOnMoIklDTVQiLHIpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpzKCJJQ09QIixFKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6cygiSUNSRCIsRS50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpzKCJJRU5HIixFKTticmVhaztjYXNlInByb2R1Y3QiOnMoIklQUkQiLEUpO2JyZWFrO2Nhc2Uicm9tSW5mbyI6cygiaXJvbSIsRSk7YnJlYWs7Y2FzZSJzb2Z0d2FyZSI6cygiSVNGVCIsRSk7YnJlYWs7Y2FzZSJzb3VuZEVuZ2luZSI6cygiaXNuZyIsRSk7YnJlYWs7Y2FzZSJzdWJqZWN0IjpicmVha319aWYoZS5kZWZhdWx0TW9kdWxhdG9ycy5zb21lKEQ9PkVhLmZpbmRJbmRleCh2PT5FQS5pc0lkZW50aWNhbCh2LEQsITApKT09PS0xKSYmdD8ud3JpdGVEZWZhdWx0TW9kdWxhdG9ycyl7bGV0IEQ9ZS5kZWZhdWx0TW9kdWxhdG9ycztwKGAlY1dyaXRpbmcgJWMke0QubGVuZ3RofSVjIGRlZmF1bHQgbW9kdWxhdG9ycy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCB2PW1lK0QubGVuZ3RoKm1lLEw9bmV3IFkodik7Zm9yKGxldCBFIG9mIEQpRS53cml0ZShMKTtodChMLDAsbWUpLG4ucHVzaChjQSgiRE1PRCIsTCkpfVooKSxwKCIlY1dyaXRpbmcgU0RUQS4uLiIsYy5pbmZvKTtsZXQgbz1bXSxnPVtdLEI9YXdhaXQgdXIoZSxvLGcsdC5jb21wcmVzcyx0LmRlY29tcHJlc3MsdD8uY29tcHJlc3Npb25GdW5jdGlvbix0Py5wcm9ncmVzc0Z1bmN0aW9uKTtwKCIlY1dyaXRpbmcgUERUQS4uLiIsYy5pbmZvKSxwKCIlY1dyaXRpbmcgU0hEUi4uLiIsYy5pbmZvKTtsZXQgZD15cihlLG8sZyk7T0EoIiVjV3JpdGluZyBpbnN0cnVtZW50cy4uLiIsYy5pbmZvKTtsZXQgaD12cyhlLCExKTtaKCksT0EoIiVjV3JpdGluZyBwcmVzZXRzLi4uIixjLmluZm8pO2xldCBDPXZzKGUsITApO1ooKTtsZXQgUT1bQy5oZHIsQy5iYWcsQy5tb2QsQy5nZW4saC5oZHIsaC5iYWcsaC5tb2QsaC5nZW4sZF0sbT12QSgicGR0YSIsUS5tYXAoRD0+RC5wZHRhKSwhMCk7aWYodC53cml0ZUV4dGVuZGVkTGltaXRzJiYoaC53cml0ZVhkdGF8fEMud3JpdGVYZHRhfHxlLnByZXNldHMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKXx8ZS5pbnN0cnVtZW50cy5zb21lKEQ9PkQubmFtZS5sZW5ndGg+MjApfHxlLnNhbXBsZXMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKSkpe3AoIiVjV3JpdGluZyB0aGUgeGR0YSBjaHVuayBhcyB3cml0ZUV4ZW5kZWRMaW1pdHMgaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiB3YXMgbWV0LiIsYy5pbmZvLGMudmFsdWUpO2xldCBEPXZBKCJ4ZHRhIixRLm1hcCh2PT52LnhkdGEpLCEwKTtuLnB1c2goRCl9bGV0IEY9dkEoIklORk8iLG4sITApO3AoIiVjV3JpdGluZyB0aGUgb3V0cHV0IGZpbGUuLi4iLGMuaW5mbyk7bGV0IGs9dkEoIlJJRkYiLFtuZSgic2ZiayIpLEYsQixtXSk7cmV0dXJuIHAoYCVjU2F2ZWQgc3VjY2VzZnVsbHkhIEZpbmFsIGZpbGUgc2l6ZTogJWMke2subGVuZ3RofWAsYy5pbmZvLGMucmVjb2duaXplZCksWigpLGsuYnVmZmVyfXZhciBqZT1jbGFzc3tzdGF0aWMgdmVyaWZ5SGVhZGVyKGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS5oZWFkZXIudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm47dGhpcy5wYXJzaW5nRXJyb3IoYEludmFsaWQgRExTIGNodW5rIGhlYWRlciEgRXhwZWN0ZWQgIiR7QS5qb2luKCIsIG9yICIpfSIgZ290ICIke2UuaGVhZGVyLnRvTG93ZXJDYXNlKCl9ImApfXN0YXRpYyB2ZXJpZnlUZXh0KGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybjt0aGlzLnBhcnNpbmdFcnJvcihgRm91ckNDIGVycm9yOiBFeHBlY3RlZCAiJHtBLmpvaW4oIiwgb3IgIil9IiBnb3QgIiR7ZS50b0xvd2VyQ2FzZSgpfSJgKX1zdGF0aWMgcGFyc2luZ0Vycm9yKGUpe3Rocm93IFooKSxuZXcgRXJyb3IoYERMUyBwYXJzZSBlcnJvcjogJHtlfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXN0YXRpYyB2ZXJpZnlBbmRSZWFkTGlzdChlLC4uLkEpe3RoaXMudmVyaWZ5SGVhZGVyKGUsIkxJU1QiKSxlLmRhdGEuY3VycmVudEluZGV4PTAsdGhpcy52ZXJpZnlUZXh0KGhBKGUuZGF0YSw0KSwuLi5BKTtsZXQgdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKHJBKGUuZGF0YSkpO3JldHVybiB0fX0sZ3Q9MjAsa249MTYsemU9Y2xhc3MgQnQgZXh0ZW5kcyBqZXtnYWluPTA7dW5pdHlOb3RlPTYwO2ZpbmVUdW5lPTA7bG9vcHM9bmV3IEFycmF5O2Z1bE9wdGlvbnM9MjtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLnVuaXR5Tm90ZSx0LmdhaW49QS5nYWluLHQuZmluZVR1bmU9QS5maW5lVHVuZSx0Lmxvb3BzPUEubG9vcHMubWFwKG49Pih7Li4ubn0pKSx0LmZ1bE9wdGlvbnM9QS5mdWxPcHRpb25zLHR9c3RhdGljIHJlYWQoQSl7dGhpcy52ZXJpZnlIZWFkZXIoQSwid3NtcCIpO2xldCB0PW5ldyBCdCxuPU4oQS5kYXRhLDQpO2lmKG4hPT1ndCYmc0EoYFdzbXAgY2JTaXplIG1pc21hdGNoOiBnb3QgJHtufSwgZXhwZWN0ZWQgJHtndH0uYCksdC51bml0eU5vdGU9TihBLmRhdGEsMiksdC5maW5lVHVuZT1qbihBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSxBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSksdC5nYWluPU4oQS5kYXRhLDQpfDAsdC5mdWxPcHRpb25zPU4oQS5kYXRhLDQpLE4oQS5kYXRhLDQpIT09MCl7bGV0IGE9TihBLmRhdGEsNCk7YSE9PWtuJiZzQShgQ2JTaXplIGZvciBsb29wIGluIHdzbXAgbWlzbWF0Y2guIEV4cGVjdGVkICR7Z3R9LCBnb3QgJHthfS5gKTtsZXQgcj1OKEEuZGF0YSw0KSxJPU4oQS5kYXRhLDQpLG89TihBLmRhdGEsNCk7dC5sb29wcy5wdXNoKHtsb29wU3RhcnQ6SSxsb29wTGVuZ3RoOm8sbG9vcFR5cGU6cn0pfXJldHVybiB0fXN0YXRpYyBmcm9tU0ZTYW1wbGUoQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLm9yaWdpbmFsS2V5LHQuZmluZVR1bmU9QS5waXRjaENvcnJlY3Rpb24sKEEubG9vcEVuZCE9PTB8fEEubG9vcFN0YXJ0IT09MCkmJnQubG9vcHMucHVzaCh7bG9vcFN0YXJ0OkEubG9vcFN0YXJ0LGxvb3BMZW5ndGg6QS5sb29wRW5kLUEubG9vcFN0YXJ0LGxvb3BUeXBlOnlzLmZvcndhcmR9KSx0fXN0YXRpYyBmcm9tU0Zab25lKEEpe2xldCB0PW5ldyBCdDt0LnVuaXR5Tm90ZT1BLmdldEdlbmVyYXRvcihpLm92ZXJyaWRpbmdSb290S2V5LEEuc2FtcGxlLm9yaWdpbmFsS2V5KSxBLmdldEdlbmVyYXRvcihpLnNjYWxlVHVuaW5nLDEwMCk9PT0wJiZBLmtleVJhbmdlLm1heC1BLmtleVJhbmdlLm1pbj09PTAmJih0LnVuaXR5Tm90ZT1BLmtleVJhbmdlLm1pbiksdC5maW5lVHVuZT1BLmZpbmVUdW5pbmcrQS5zYW1wbGUucGl0Y2hDb3JyZWN0aW9uO2xldCBuPUEuZ2V0R2VuZXJhdG9yKGkuaW5pdGlhbEF0dGVudWF0aW9uLDApKi40O3QuZ2Fpbj0tbjw8MTY7bGV0IHM9QS5nZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcywwKTtpZihzIT09MCl7bGV0IGE9QS5zYW1wbGUubG9vcFN0YXJ0K0EuZ2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCwwKSozMjc2OCxyPUEuc2FtcGxlLmxvb3BFbmQrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsMCkqMzI3NjgsSTtzd2l0Y2gocyl7Y2FzZSAxOmRlZmF1bHQ6ST0wO2JyZWFrO2Nhc2UgMzpJPTF9dC5sb29wcy5wdXNoKHtsb29wVHlwZTpJLGxvb3BTdGFydDphLGxvb3BMZW5ndGg6ci1hfSl9cmV0dXJuIHR9dG9TRlpvbmUoQSx0KXtsZXQgbj0wLHM9dGhpcy5sb29wc1swXTtzJiYobj1zLmxvb3BUeXBlPT09eXMubG9vcEFuZFJlbGVhc2U/MzoxKSxuIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcyxuKTtsZXQgST0tKHRoaXMuZ2Fpbj4+MTYpLy40O2lmKEkhPT0wJiZBLnNldEdlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbixJKSxBLmZpbmVUdW5pbmc9dGhpcy5maW5lVHVuZS10LnBpdGNoQ29ycmVjdGlvbix0aGlzLnVuaXR5Tm90ZSE9PXQub3JpZ2luYWxLZXkmJkEuc2V0R2VuZXJhdG9yKGkub3ZlcnJpZGluZ1Jvb3RLZXksdGhpcy51bml0eU5vdGUpLHMpe2xldCBvPXMubG9vcFN0YXJ0LXQubG9vcFN0YXJ0LEI9cy5sb29wU3RhcnQrcy5sb29wTGVuZ3RoLXQubG9vcEVuZDtpZihvIT09MCl7bGV0IGQ9byUzMjc2ODtBLnNldEdlbmVyYXRvcihpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGQpO2xldCBoPU1hdGgudHJ1bmMoby8zMjc2OCk7aCE9PTAmJkEuc2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9aWYoQiE9PTApe2xldCBkPUIlMzI3Njg7QS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsZCk7bGV0IGg9TWF0aC50cnVuYyhCLzMyNzY4KTtoIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9fX13cml0ZSgpe2xldCBBPW5ldyBZKGd0K3RoaXMubG9vcHMubGVuZ3RoKmtuKTtyZXR1cm4gZ0EoQSxndCksSihBLHRoaXMudW5pdHlOb3RlKSxKKEEsdGhpcy5maW5lVHVuZSksZ0EoQSx0aGlzLmdhaW4pLGdBKEEsdGhpcy5mdWxPcHRpb25zKSxnQShBLHRoaXMubG9vcHMubGVuZ3RoKSx0aGlzLmxvb3BzLmZvckVhY2godD0+e2dBKEEsa24pLGdBKEEsdC5sb29wVHlwZSksZ0EoQSx0Lmxvb3BTdGFydCksZ0EoQSx0Lmxvb3BMZW5ndGgpfSksY0EoIndzbXAiLEEpfX0sRG49e1BDTToxLEFMQVc6Nn07ZnVuY3Rpb24gRHIoZSxBKXtsZXQgdD1NYXRoLnBvdygyLEEqOC0xKSxuPU1hdGgucG93KDIsQSo4KSxzLGE9ITE7QT09PTE/KHM9MjU1LGE9ITApOnM9dDtsZXQgcj1lLmxlbmd0aC9BLEk9bmV3IEZsb2F0MzJBcnJheShyKTtpZihBPT09Mil7bGV0IG89bmV3IEludDE2QXJyYXkoZS5idWZmZXIpO2ZvcihsZXQgZz0wO2c8by5sZW5ndGg7ZysrKUlbZ109b1tnXS8zMjc2OH1lbHNlIGZvcihsZXQgbz0wO288SS5sZW5ndGg7bysrKXtsZXQgZz1OKGUsQSk7YT9JW29dPWcvcy0uNTooZz49dCYmKGctPW4pLElbb109Zy9zKX1yZXR1cm4gSX1mdW5jdGlvbiB3cihlLEEpe2xldCB0PWUubGVuZ3RoL0Esbj1uZXcgRmxvYXQzMkFycmF5KHQpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtsZXQgYT1OKGUsQSkscj1hXjg1O3ImPTEyNztsZXQgST1yPj40LG89ciYxNTtJPjAmJihvKz0xNiksbz0obzw8NCkrOCxJPjEmJihvPW88PEktMSk7bGV0IGc9YT4xMjc/bzotbztuW3NdPWcvMzI2Nzh9cmV0dXJuIG59dmFyIEZyPWNsYXNzIGV4dGVuZHMgWnR7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtyYXdEYXRhO2NvbnN0cnVjdG9yKGUsQSx0LG4scyxhLHIsSSxvKXtzdXBlcihlLEEsdCxuLHdBLm1vbm9TYW1wbGUscyxhKSx0aGlzLmRhdGFPdmVycmlkZGVuPSExLHRoaXMucmF3RGF0YT1yLmRhdGEsdGhpcy53Rm9ybWF0VGFnPUksdGhpcy5ieXRlc1BlclNhbXBsZT1vfWdldEF1ZGlvRGF0YSgpe2lmKCF0aGlzLnJhd0RhdGEpcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMCk7aWYoIXRoaXMuYXVkaW9EYXRhKXtsZXQgZTtzd2l0Y2godGhpcy53Rm9ybWF0VGFnKXtkZWZhdWx0OnNBKGBGYWlsZWQgdG8gZGVjb2RlIHNhbXBsZS4gVW5rbm93biB3Rm9ybWF0VGFnOiAke3RoaXMud0Zvcm1hdFRhZ31gKSxlPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5yYXdEYXRhLmxlbmd0aC90aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLlBDTTplPURyKHRoaXMucmF3RGF0YSx0aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLkFMQVc6ZT13cih0aGlzLnJhd0RhdGEsdGhpcy5ieXRlc1BlclNhbXBsZSk7YnJlYWt9dGhpcy5zZXRBdWRpb0RhdGEoZSx0aGlzLnNhbXBsZVJhdGUpfXJldHVybiB0aGlzLmF1ZGlvRGF0YT8/bmV3IEZsb2F0MzJBcnJheSgwKX1nZXRSYXdEYXRhKGUpe3JldHVybiB0aGlzLmRhdGFPdmVycmlkZGVufHx0aGlzLmlzQ29tcHJlc3NlZD9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMud0Zvcm1hdFRhZz09PURuLlBDTSYmdGhpcy5ieXRlc1BlclNhbXBsZT09PTI/dGhpcy5yYXdEYXRhOnRoaXMuZW5jb2RlUzE2TEUoKX19LExzPWNsYXNzIFpuIGV4dGVuZHMgamV7d2F2ZVNhbXBsZT1uZXcgemU7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtzYW1wbGVSYXRlO2RhdGFDaHVuaztuYW1lPSJVbm5hbWVkIHNhbXBsZSI7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoKSx0aGlzLndGb3JtYXRUYWc9QSx0aGlzLmJ5dGVzUGVyU2FtcGxlPXQsdGhpcy5zYW1wbGVSYXRlPW4sdGhpcy5kYXRhQ2h1bms9c31zdGF0aWMgcmVhZChBKXtsZXQgdD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KEEsIndhdmUiKSxuPXQuZmluZChDPT5DLmhlYWRlcj09PSJmbXQgIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJObyBmbXQgY2h1bmsgaW4gdGhlIHdhdmUgZmlsZSEiKTtsZXQgcz1OKG4uZGF0YSwyKSxhPU4obi5kYXRhLDIpO2lmKGEhPT0xKXRocm93IG5ldyBFcnJvcihgT25seSBtb25vIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4gRm10IHJlcG9ydHMgJHthfSBjaGFubmVscy5gKTtsZXQgcj1OKG4uZGF0YSw0KTtOKG4uZGF0YSw0KSxOKG4uZGF0YSwyKTtsZXQgbz1OKG4uZGF0YSwyKS84LGc9dC5maW5kKEM9PkMuaGVhZGVyPT09ImRhdGEiKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgY2h1bmsgaW4gdGhlIFdBVkUgY2h1bmshIik7bGV0IEI9bmV3IFpuKHMsbyxyLGcpLGQ9ZmUodCwiSU5GTyIpO2lmKGQpe2xldCBDPXJBKGQuZGF0YSk7Zm9yKDtDLmhlYWRlciE9PSJJTkFNIiYmZC5kYXRhLmN1cnJlbnRJbmRleDxkLmRhdGEubGVuZ3RoOylDPXJBKGQuZGF0YSk7Qy5oZWFkZXI9PT0iSU5BTSImJihCLm5hbWU9aEEoQy5kYXRhLEMuc2l6ZSkudHJpbSgpKX1sZXQgaD10LmZpbmQoQz0+Qy5oZWFkZXI9PT0id3NtcCIpO3JldHVybiBoJiYoQi53YXZlU2FtcGxlPXplLnJlYWQoaCkpLEJ9c3RhdGljIGZyb21TRlNhbXBsZShBKXtsZXQgdD1BLmdldFJhd0RhdGEoITEpLG49bmV3IFpuKDEsMixBLnNhbXBsZVJhdGUsbmV3IEhzKCJkYXRhIix0Lmxlbmd0aCxuZXcgWSh0LmJ1ZmZlcikpKTtyZXR1cm4gbi5uYW1lPUEubmFtZSxuLndhdmVTYW1wbGU9emUuZnJvbVNGU2FtcGxlKEEpLG59dG9TRlNhbXBsZShBKXtsZXQgdD10aGlzLndhdmVTYW1wbGUudW5pdHlOb3RlLG49dGhpcy53YXZlU2FtcGxlLmZpbmVUdW5lLHM9TWF0aC50cnVuYyhuLzEwMCk7dCs9cyxuLT1zKjEwMDtsZXQgYT0wLHI9MCxJPXRoaXMud2F2ZVNhbXBsZS5sb29wcz8uWzBdO0kmJihhPUkubG9vcFN0YXJ0LHI9SS5sb29wU3RhcnQrSS5sb29wTGVuZ3RoKTtsZXQgbz1uZXcgRnIodGhpcy5uYW1lLHRoaXMuc2FtcGxlUmF0ZSx0LG4sYSxyLHRoaXMuZGF0YUNodW5rLHRoaXMud0Zvcm1hdFRhZyx0aGlzLmJ5dGVzUGVyU2FtcGxlKTtBLmFkZFNhbXBsZXMobyl9d3JpdGUoKXtsZXQgQT10aGlzLndyaXRlRm10KCksdD10aGlzLndhdmVTYW1wbGUud3JpdGUoKSxuPWNBKCJkYXRhIix0aGlzLmRhdGFDaHVuay5kYXRhKSxzPWNBKCJJTkFNIixuZSh0aGlzLm5hbWUsITApKSxhPWNBKCJJTkZPIixzLCExLCEwKTtyZXR1cm4gcChgJWNTYXZlZCAlYyR7dGhpcy5uYW1lfSVjIHN1Y2Nlc3NmdWxseSFgLGMucmVjb2duaXplZCxjLnZhbHVlLGMucmVjb2duaXplZCksdkEoIndhdmUiLFtBLHQsbixhXSwhMCl9d3JpdGVGbXQoKXtsZXQgQT1uZXcgWSgxOCk7cmV0dXJuIEooQSx0aGlzLndGb3JtYXRUYWcpLEooQSwxKSxnQShBLHRoaXMuc2FtcGxlUmF0ZSksZ0EoQSx0aGlzLnNhbXBsZVJhdGUqMiksSihBLDIpLEooQSx0aGlzLmJ5dGVzUGVyU2FtcGxlKjgpLGNBKCJmbXQgIixBKX19LHlhPW5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDFlMywwKSxrYT1uZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwxZTMsMCksR3I9bmV3IHlBKDEyOSwwLGkudmliTGZvVG9QaXRjaCwwLDApLFJyPW5ldyB5QSgxMywwLGkudmliTGZvVG9QaXRjaCwwLDApLFZBPWNsYXNzIHpue3NvdXJjZTt0cmFuc2Zvcm07Ymlwb2xhcjtpbnZlcnQ7Y29uc3RydWN0b3IoQT1ULm5vbmUsdD1RQS5saW5lYXIsbj0hMSxzPSExKXt0aGlzLnNvdXJjZT1BLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5iaXBvbGFyPW4sdGhpcy5pbnZlcnQ9c31nZXQgc291cmNlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhUKS5maW5kKEE9PlRbQV09PT10aGlzLnNvdXJjZSk/P3RoaXMuc291cmNlLnRvU3RyaW5nKCl9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgem4oQS5zb3VyY2UsQS50cmFuc2Zvcm0sQS5iaXBvbGFyLEEuaW52ZXJ0KX1zdGF0aWMgZnJvbVNGU291cmNlKEEpe2xldCB0O2lmKEEuaXNDQylzd2l0Y2goQS5pbmRleCl7Y2FzZSBTLm1vZHVsYXRpb25XaGVlbDp0PVQubW9kdWxhdGlvbldoZWVsO2JyZWFrO2Nhc2UgUy5tYWluVm9sdW1lOnQ9VC52b2x1bWU7YnJlYWs7Y2FzZSBTLnBhbjp0PVQucGFuO2JyZWFrO2Nhc2UgUy5leHByZXNzaW9uQ29udHJvbGxlcjp0PVQuZXhwcmVzc2lvbjticmVhaztjYXNlIFMuY2hvcnVzRGVwdGg6dD1ULmNob3J1czticmVhaztjYXNlIFMucmV2ZXJiRGVwdGg6dD1ULnJldmVyYjticmVha31lbHNlIHN3aXRjaChBLmluZGV4KXtjYXNlIGoubm9Db250cm9sbGVyOnQ9VC5ub25lO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06dD1ULmtleU51bTticmVhaztjYXNlIGoubm90ZU9uVmVsb2NpdHk6dD1ULnZlbG9jaXR5O2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsOnQ9VC5waXRjaFdoZWVsO2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsUmFuZ2U6dD1ULnBpdGNoV2hlZWxSYW5nZTticmVhaztjYXNlIGoucG9seVByZXNzdXJlOnQ9VC5wb2x5UHJlc3N1cmU7YnJlYWs7Y2FzZSBqLmNoYW5uZWxQcmVzc3VyZTp0PVQuY2hhbm5lbFByZXNzdXJlfWlmKHQhPT12b2lkIDApcmV0dXJuIG5ldyB6bih0LEEuY3VydmVUeXBlLEEuaXNCaXBvbGFyLEEuaXNOZWdhdGl2ZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZU5hbWV9ICR7dGhpcy50cmFuc2Zvcm1OYW1lfSAke3RoaXMuYmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmludmVydD8iaW52ZXJ0ZWQiOiJwb3NpdGl2ZSJ9YH10b1RyYW5zZm9ybUZsYWcoKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm18KHRoaXMuYmlwb2xhcj8xOjApPDw0fCh0aGlzLmludmVydD8xOjApPDw1fXRvU0ZTb3VyY2UoKXtsZXQgQSx0PSExO3N3aXRjaCh0aGlzLnNvdXJjZSl7ZGVmYXVsdDpjYXNlIFQubW9kTGZvOmNhc2UgVC52aWJyYXRvTGZvOmNhc2UgVC5jb2Fyc2VUdW5lOmNhc2UgVC5maW5lVHVuZTpjYXNlIFQubW9kRW52OnJldHVybjtjYXNlIFQua2V5TnVtOkE9ai5ub3RlT25LZXlOdW07YnJlYWs7Y2FzZSBULm5vbmU6QT1qLm5vQ29udHJvbGxlcjticmVhaztjYXNlIFQubW9kdWxhdGlvbldoZWVsOkE9Uy5tb2R1bGF0aW9uV2hlZWwsdD0hMDticmVhaztjYXNlIFQucGFuOkE9Uy5wYW4sdD0hMDticmVhaztjYXNlIFQucmV2ZXJiOkE9Uy5yZXZlcmJEZXB0aCx0PSEwO2JyZWFrO2Nhc2UgVC5jaG9ydXM6QT1TLmNob3J1c0RlcHRoLHQ9ITA7YnJlYWs7Y2FzZSBULmV4cHJlc3Npb246QT1TLmV4cHJlc3Npb25Db250cm9sbGVyLHQ9ITA7YnJlYWs7Y2FzZSBULnZvbHVtZTpBPVMubWFpblZvbHVtZSx0PSEwO2JyZWFrO2Nhc2UgVC52ZWxvY2l0eTpBPWoubm90ZU9uVmVsb2NpdHk7YnJlYWs7Y2FzZSBULnBvbHlQcmVzc3VyZTpBPWoucG9seVByZXNzdXJlO2JyZWFrO2Nhc2UgVC5jaGFubmVsUHJlc3N1cmU6QT1qLmNoYW5uZWxQcmVzc3VyZTticmVhaztjYXNlIFQucGl0Y2hXaGVlbDpBPWoucGl0Y2hXaGVlbDticmVhaztjYXNlIFQucGl0Y2hXaGVlbFJhbmdlOkE9ai5waXRjaFdoZWVsUmFuZ2U7YnJlYWt9aWYoQSE9PXZvaWQgMClyZXR1cm4gbmV3IFhBKEEsdGhpcy50cmFuc2Zvcm0sdCx0aGlzLmJpcG9sYXIsdGhpcy5pbnZlcnQpfX0sTXI9bmV3IFNldChbaS5zYW1wbGVNb2RlcyxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmtleVJhbmdlLGkudmVsUmFuZ2UsaS5zYW1wbGVJRCxpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLnN0YXJ0QWRkcnNPZmZzZXQsaS5zdGFydEFkZHJzQ29hcnNlT2Zmc2V0LGkuZW5kQWRkck9mZnNldCxpLmVuZEFkZHJzQ29hcnNlT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLmVuZGxvb3BBZGRyc09mZnNldCxpLmVuZGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLm92ZXJyaWRpbmdSb290S2V5LGkuZXhjbHVzaXZlQ2xhc3NdKSxjdD1jbGFzcyBSZXtzb3VyY2U7Y29udHJvbDtkZXN0aW5hdGlvbjtzY2FsZTt0cmFuc2Zvcm07Y29uc3RydWN0b3IoQT1uZXcgVkEsdD1uZXcgVkEsbixzLGEpe3RoaXMuc291cmNlPUEsdGhpcy5jb250cm9sPXQsdGhpcy5kZXN0aW5hdGlvbj1uLHRoaXMudHJhbnNmb3JtPXMsdGhpcy5zY2FsZT1hfWdldCBpc1N0YXRpY1BhcmFtZXRlcigpe3JldHVybiB0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULm5vbmUmJnRoaXMuY29udHJvbC5zb3VyY2U9PT1ULm5vbmV9Z2V0IHNob3J0U2NhbGUoKXtyZXR1cm4gdGhpcy5zY2FsZT4+MTZ9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9Z2V0IGRlc3RpbmF0aW9uTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhSKS5maW5kKEE9PlJbQV09PT10aGlzLmRlc3RpbmF0aW9uKT8/dGhpcy5kZXN0aW5hdGlvbi50b1N0cmluZygpfXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQSwyKSxuPU4oQSwyKSxzPU4oQSwyKSxhPU4oQSwyKSxyPU4oQSw0KXwwLEk9YSYxNSxvPWE+PjQmMTUsZz1NZShhLDgpLEI9TWUoYSw5KSxkPW5ldyBWQShuLG8sZyxCKSxoPWE+PjEwJjE1LEM9TWUoYSwxNCksUT1NZShhLDE1KSxtPW5ldyBWQSh0LGgsQyxRKTtyZXR1cm4gbmV3IFJlKG0sZCxzLEkscil9c3RhdGljIGZyb21TRk1vZHVsYXRvcihBLHQpe2xldCBuPUI9PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YgbW9kdWxhdG9yIGludG8gRExTOgogJHtBLnRvU3RyaW5nKCl9IAooJHtCfSlgKX07aWYoQS50cmFuc2Zvcm1UeXBlIT09MCl7bigiQWJzb2x1dGUgdHJhbnNmb3JtIHR5cGUgaXMgbm90IHN1cHBvcnRlZCIpO3JldHVybn1pZihFQS5pc0lkZW50aWNhbChBLGthLCEwKXx8RUEuaXNJZGVudGljYWwoQSx5YSwhMCkpcmV0dXJuO2xldCBzPVZBLmZyb21TRlNvdXJjZShBLnByaW1hcnlTb3VyY2UpO2lmKCFzKXtuKCJJbnZhbGlkIHByaW1hcnkgc291cmNlIik7cmV0dXJufWxldCBhPVZBLmZyb21TRlNvdXJjZShBLnNlY29uZGFyeVNvdXJjZSk7aWYoIWEpe24oIkludmFsaWQgc2Vjb25kYXJ5IHNvdXJjZSIpO3JldHVybn1sZXQgcj1SZS5mcm9tU0ZEZXN0aW5hdGlvbihBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50KTtpZihyPT09dm9pZCAwKXtuKCJJbnZhbGlkIGRlc3RpbmF0aW9uIik7cmV0dXJufWxldCBJPUEudHJhbnNmb3JtQW1vdW50LG87aWYodHlwZW9mIHI9PSJudW1iZXIiKW89cjtlbHNlIGlmKG89ci5kZXN0aW5hdGlvbixJPXIuYW1vdW50LHIuc291cmNlIT09VC5ub25lKXtpZihhLnNvdXJjZSE9PVQubm9uZSYmcy5zb3VyY2UhPT1ULm5vbmUpe24oIkFydGljdWxhdGlvbiBnZW5lcmF0b3JzIHdpdGggc2Vjb25kYXJ5IHNvdXJjZSBhcmUgbm90IHN1cHBvcnRlZCIpO3JldHVybn1zLnNvdXJjZSE9PVQubm9uZSYmKGE9cykscz1uZXcgVkEoci5zb3VyY2UsUUEubGluZWFyLHIuaXNCaXBvbGFyKX1sZXQgZz1uZXcgUmUocyxhLG8sMCxJPDwxNik7dC5jb25uZWN0aW9uQmxvY2tzLnB1c2goZyl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgUmUoVkEuY29weUZyb20oQS5zb3VyY2UpLFZBLmNvcHlGcm9tKEEuY29udHJvbCksQS5kZXN0aW5hdGlvbixBLnRyYW5zZm9ybSxBLnNjYWxlKX1zdGF0aWMgZnJvbVNGR2VuZXJhdG9yKEEsdCl7aWYoTXIuaGFzKEEuZ2VuZXJhdG9yVHlwZSkpcmV0dXJuO2xldCBuPW89PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YyIGdlbmVyYXRvciBpbnRvIERMUzoKICR7QS50b1N0cmluZygpfSAKKCR7b30pYCl9LHM9UmUuZnJvbVNGRGVzdGluYXRpb24oQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUpO2lmKHM9PT12b2lkIDApe24oIkludmFsaWQgdHlwZSIpO3JldHVybn1sZXQgYT1uZXcgVkEscixJPUEuZ2VuZXJhdG9yVmFsdWU7dHlwZW9mIHM9PSJudW1iZXIiP3I9czoocj1zLmRlc3RpbmF0aW9uLEk9cy5hbW91bnQsYS5zb3VyY2U9cy5zb3VyY2UsYS5iaXBvbGFyPXMuaXNCaXBvbGFyKSx0LmNvbm5lY3Rpb25CbG9ja3MucHVzaChuZXcgUmUoYSxuZXcgVkEsciwwLEk8PDE2KSl9c3RhdGljIGZyb21TRkRlc3RpbmF0aW9uKEEsdCl7c3dpdGNoKEEpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UgaS5pbml0aWFsQXR0ZW51YXRpb246cmV0dXJue2Rlc3RpbmF0aW9uOlIuZ2FpbixhbW91bnQ6LXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5maW5lVHVuZTpyZXR1cm4gUi5waXRjaDtjYXNlIGkucGFuOnJldHVybiBSLnBhbjtjYXNlIGkua2V5TnVtOnJldHVybiBSLmtleU51bTtjYXNlIGkucmV2ZXJiRWZmZWN0c1NlbmQ6cmV0dXJuIFIucmV2ZXJiU2VuZDtjYXNlIGkuY2hvcnVzRWZmZWN0c1NlbmQ6cmV0dXJuIFIuY2hvcnVzU2VuZDtjYXNlIGkuZnJlcU1vZExGTzpyZXR1cm4gUi5tb2RMZm9GcmVxO2Nhc2UgaS5kZWxheU1vZExGTzpyZXR1cm4gUi5tb2RMZm9EZWxheTtjYXNlIGkuZGVsYXlWaWJMRk86cmV0dXJuIFIudmliTGZvRGVsYXk7Y2FzZSBpLmZyZXFWaWJMRk86cmV0dXJuIFIudmliTGZvRnJlcTtjYXNlIGkuZGVsYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVsYXk7Y2FzZSBpLmF0dGFja1ZvbEVudjpyZXR1cm4gUi52b2xFbnZBdHRhY2s7Y2FzZSBpLmhvbGRWb2xFbnY6cmV0dXJuIFIudm9sRW52SG9sZDtjYXNlIGkuZGVjYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVjYXk7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6cmV0dXJue2Rlc3RpbmF0aW9uOlIudm9sRW52U3VzdGFpbixhbW91bnQ6MWUzLXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5yZWxlYXNlVm9sRW52OnJldHVybiBSLnZvbEVudlJlbGVhc2U7Y2FzZSBpLmRlbGF5TW9kRW52OnJldHVybiBSLm1vZEVudkRlbGF5O2Nhc2UgaS5hdHRhY2tNb2RFbnY6cmV0dXJuIFIubW9kRW52QXR0YWNrO2Nhc2UgaS5ob2xkTW9kRW52OnJldHVybiBSLm1vZEVudkhvbGQ7Y2FzZSBpLmRlY2F5TW9kRW52OnJldHVybiBSLm1vZEVudkRlY2F5O2Nhc2UgaS5zdXN0YWluTW9kRW52OnJldHVybntkZXN0aW5hdGlvbjpSLm1vZEVudlN1c3RhaW4sYW1vdW50OjFlMy10LGlzQmlwb2xhcjohMSxzb3VyY2U6VC5ub25lfTtjYXNlIGkucmVsZWFzZU1vZEVudjpyZXR1cm4gUi5tb2RFbnZSZWxlYXNlO2Nhc2UgaS5pbml0aWFsRmlsdGVyRmM6cmV0dXJuIFIuZmlsdGVyQ3V0b2ZmO2Nhc2UgaS5pbml0aWFsRmlsdGVyUTpyZXR1cm4gUi5maWx0ZXJRO2Nhc2UgaS5tb2RFbnZUb0ZpbHRlckZjOnJldHVybntzb3VyY2U6VC5tb2RFbnYsZGVzdGluYXRpb246Ui5maWx0ZXJDdXRvZmYsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kRW52VG9QaXRjaDpyZXR1cm57c291cmNlOlQubW9kRW52LGRlc3RpbmF0aW9uOlIucGl0Y2gsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kTGZvVG9GaWx0ZXJGYzpyZXR1cm57c291cmNlOlQubW9kTGZvLGRlc3RpbmF0aW9uOlIuZmlsdGVyQ3V0b2ZmLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvVm9sdW1lOnJldHVybntzb3VyY2U6VC5tb2RMZm8sZGVzdGluYXRpb246Ui5nYWluLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULm1vZExmbyxkZXN0aW5hdGlvbjpSLnBpdGNoLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnZpYkxmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULnZpYnJhdG9MZm8sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCxpc0JpcG9sYXI6ITB9O2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLnZvbEVudkhvbGQsYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Wb2xFbnZEZWNheTpyZXR1cm57c291cmNlOlQua2V5TnVtLGRlc3RpbmF0aW9uOlIudm9sRW52RGVjYXksYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Nb2RFbnZIb2xkOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5tb2RFbnZIb2xkLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLm1vZEVudkRlY2F5LGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnNjYWxlVHVuaW5nOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCoxMjgsaXNCaXBvbGFyOiExfX19dG9TdHJpbmcoKXtyZXR1cm5gU291cmNlOiAke3RoaXMuc291cmNlLnRvU3RyaW5nKCl9LApDb250cm9sOiAke3RoaXMuY29udHJvbC50b1N0cmluZygpfSwKU2NhbGU6ICR7dGhpcy5zY2FsZX0gPj4gMTYgPSAke3RoaXMuc2hvcnRTY2FsZX0sCk91dHB1dCB0cmFuc2Zvcm06ICR7dGhpcy50cmFuc2Zvcm1OYW1lfQpEZXN0aW5hdGlvbjogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX1gfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO0ooQSx0aGlzLnNvdXJjZS5zb3VyY2UpLEooQSx0aGlzLmNvbnRyb2wuc291cmNlKSxKKEEsdGhpcy5kZXN0aW5hdGlvbik7bGV0IHQ9dGhpcy50cmFuc2Zvcm18dGhpcy5jb250cm9sLnRvVHJhbnNmb3JtRmxhZygpPDw0fHRoaXMuc291cmNlLnRvVHJhbnNmb3JtRmxhZygpPDwxMDtyZXR1cm4gSihBLHQpLGdBKEEsdGhpcy5zY2FsZSksQX10b1NGR2VuZXJhdG9yKEEpe2xldCB0PXRoaXMuZGVzdGluYXRpb24sbj10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNGYWlsZWQgY29udmVydGluZyBETFMgYXJ0aWN1bGF0b3IgaW50byBTRiBnZW5lcmF0b3I6ICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKGludmFsaWQgZGVzdGluYXRpb24pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCk7cmV0dXJuO2Nhc2UgUi5wYW46QS5zZXRHZW5lcmF0b3IoaS5wYW4sbik7YnJlYWs7Y2FzZSBSLmdhaW46QS5hZGRUb0dlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbiwtbi8uNCk7YnJlYWs7Y2FzZSBSLmZpbHRlckN1dG9mZjpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJGYyxuKTticmVhaztjYXNlIFIuZmlsdGVyUTpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJRLG4pO2JyZWFrO2Nhc2UgUi5tb2RMZm9GcmVxOkEuc2V0R2VuZXJhdG9yKGkuZnJlcU1vZExGTyxuKTticmVhaztjYXNlIFIubW9kTGZvRGVsYXk6QS5zZXRHZW5lcmF0b3IoaS5kZWxheU1vZExGTyxuKTticmVhaztjYXNlIFIudmliTGZvRnJlcTpBLnNldEdlbmVyYXRvcihpLmZyZXFWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZpYkxmb0RlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja1ZvbEVudixuKTticmVhaztjYXNlIFIudm9sRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlVm9sRW52LG4pO2JyZWFrO2Nhc2UgUi52b2xFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpblZvbEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja01vZEVudixuKTticmVhaztjYXNlIFIubW9kRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlTW9kRW52LG4pO2JyZWFrO2Nhc2UgUi5tb2RFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpbk1vZEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLnJldmVyYlNlbmQ6QS5zZXRHZW5lcmF0b3IoaS5yZXZlcmJFZmZlY3RzU2VuZCxuKTticmVhaztjYXNlIFIuY2hvcnVzU2VuZDpBLnNldEdlbmVyYXRvcihpLmNob3J1c0VmZmVjdHNTZW5kLG4pO2JyZWFrO2Nhc2UgUi5waXRjaDpBLmZpbmVUdW5pbmcrPW47YnJlYWt9fXRvU0ZNb2R1bGF0b3IoQSl7bGV0IHQ9dGhpcy5zaG9ydFNjYWxlLG4scyxhPW5ldyBYQSxyPWc9PntwKGAlY0ZhaWxlZCBjb252ZXJ0aW5nIERMUyBhcnRpY3VsYXRvciBpbnRvIFNGMjoKICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKCR7Z30pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCl9LEk9dGhpcy50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKEkpe249STtsZXQgZz10aGlzLmNvbnRyb2wudG9TRlNvdXJjZSgpO2lmKCFnKXtyKCJJbnZhbGlkIGNvbnRyb2wiKTtyZXR1cm59cz1nfWVsc2V7bGV0IGc9dGhpcy50b1NGRGVzdGluYXRpb24oKTtpZighZyl7cigiSW52YWxpZCBkZXN0aW5hdGlvbiIpO3JldHVybn10eXBlb2YgZz09Im9iamVjdCI/KHQ9Zy5uZXdBbW91bnQsbj1nLmdlbik6bj1nO2xldCBCPXRoaXMuc291cmNlLnRvU0ZTb3VyY2UoKTtpZighQil7cigiSW52YWxpZCBzb3VyY2UiKTtyZXR1cm59cz1CO2xldCBkPXRoaXMuY29udHJvbC50b1NGU291cmNlKCk7aWYoIWQpe3IoIkludmFsaWQgY29udHJvbCIpO3JldHVybn1hPWR9dGhpcy50cmFuc2Zvcm0hPT1RQS5saW5lYXImJnMuY3VydmVUeXBlPT09UUEubGluZWFyJiYocy5jdXJ2ZVR5cGU9dGhpcy50cmFuc2Zvcm0pLG49PT1pLmluaXRpYWxBdHRlbnVhdGlvbiYmKCh0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZlbG9jaXR5fHx0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZvbHVtZXx8dGhpcy5zb3VyY2Uuc291cmNlPT09VC5leHByZXNzaW9uKSYmKHMuaXNOZWdhdGl2ZT0hMCksdD1NYXRoLm1pbig5NjAsTWF0aC5tYXgoMCx0KSkpO2xldCBvPW5ldyBFQShzLGEsbix0LDApO0EuYWRkTW9kdWxhdG9ycyhvKX10b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpe2xldCBBPXRoaXMuc291cmNlLnNvdXJjZSx0PXRoaXMuZGVzdGluYXRpb247cmV0dXJuIEE9PT1ULnZpYnJhdG9MZm8mJnQ9PT1SLnBpdGNoP2kudmliTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLnBpdGNoP2kubW9kTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLmZpbHRlckN1dG9mZj9pLm1vZExmb1RvRmlsdGVyRmM6QT09PVQubW9kTGZvJiZ0PT09Ui5nYWluP2kubW9kTGZvVG9Wb2x1bWU6QT09PVQubW9kRW52JiZ0PT09Ui5maWx0ZXJDdXRvZmY/aS5tb2RFbnZUb0ZpbHRlckZjOkE9PT1ULm1vZEVudiYmdD09PVIucGl0Y2g/aS5tb2RFbnZUb1BpdGNoOnZvaWQgMH10b1NGRGVzdGluYXRpb24oKXtsZXQgQT10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHRoaXMuZGVzdGluYXRpb24pe2RlZmF1bHQ6Y2FzZSBSLm5vbmU6cmV0dXJuO2Nhc2UgUi5wYW46cmV0dXJuIGkucGFuO2Nhc2UgUi5nYWluOnJldHVybntnZW46aS5pbml0aWFsQXR0ZW51YXRpb24sbmV3QW1vdW50Oi1BfTtjYXNlIFIucGl0Y2g6cmV0dXJuIGkuZmluZVR1bmU7Y2FzZSBSLmtleU51bTpyZXR1cm4gaS5vdmVycmlkaW5nUm9vdEtleTtjYXNlIFIudm9sRW52RGVsYXk6cmV0dXJuIGkuZGVsYXlWb2xFbnY7Y2FzZSBSLnZvbEVudkF0dGFjazpyZXR1cm4gaS5hdHRhY2tWb2xFbnY7Y2FzZSBSLnZvbEVudkhvbGQ6cmV0dXJuIGkuaG9sZFZvbEVudjtjYXNlIFIudm9sRW52RGVjYXk6cmV0dXJuIGkuZGVjYXlWb2xFbnY7Y2FzZSBSLnZvbEVudlN1c3RhaW46cmV0dXJue2dlbjppLnN1c3RhaW5Wb2xFbnYsbmV3QW1vdW50OjFlMy1BfTtjYXNlIFIudm9sRW52UmVsZWFzZTpyZXR1cm4gaS5yZWxlYXNlVm9sRW52O2Nhc2UgUi5tb2RFbnZEZWxheTpyZXR1cm4gaS5kZWxheU1vZEVudjtjYXNlIFIubW9kRW52QXR0YWNrOnJldHVybiBpLmF0dGFja01vZEVudjtjYXNlIFIubW9kRW52SG9sZDpyZXR1cm4gaS5ob2xkTW9kRW52O2Nhc2UgUi5tb2RFbnZEZWNheTpyZXR1cm4gaS5kZWNheU1vZEVudjtjYXNlIFIubW9kRW52U3VzdGFpbjpyZXR1cm57Z2VuOmkuc3VzdGFpbk1vZEVudixuZXdBbW91bnQ6MWUzLUF9O2Nhc2UgUi5tb2RFbnZSZWxlYXNlOnJldHVybiBpLnJlbGVhc2VNb2RFbnY7Y2FzZSBSLmZpbHRlckN1dG9mZjpyZXR1cm4gaS5pbml0aWFsRmlsdGVyRmM7Y2FzZSBSLmZpbHRlclE6cmV0dXJuIGkuaW5pdGlhbEZpbHRlclE7Y2FzZSBSLmNob3J1c1NlbmQ6cmV0dXJuIGkuY2hvcnVzRWZmZWN0c1NlbmQ7Y2FzZSBSLnJldmVyYlNlbmQ6cmV0dXJuIGkucmV2ZXJiRWZmZWN0c1NlbmQ7Y2FzZSBSLm1vZExmb0ZyZXE6cmV0dXJuIGkuZnJlcU1vZExGTztjYXNlIFIubW9kTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlNb2RMRk87Y2FzZSBSLnZpYkxmb0ZyZXE6cmV0dXJuIGkuZnJlcVZpYkxGTztjYXNlIFIudmliTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlWaWJMRk99fX0sRGE9Y2xhc3MgV24gZXh0ZW5kcyBqZXtjb25uZWN0aW9uQmxvY2tzPW5ldyBBcnJheTttb2RlPSJkbHMyIjtnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGh9Y29weUZyb20oQSl7dGhpcy5tb2RlPUEubW9kZSxBLmNvbm5lY3Rpb25CbG9ja3MuZm9yRWFjaCh0PT57dGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QuY29weUZyb20odCkpfSl9ZnJvbVNGWm9uZShBKXt0aGlzLm1vZGU9ImRsczIiO2xldCB0PW5ldyBWdDt0LmNvcHlGcm9tKEEpO2ZvcihsZXQgbiBvZiB0LmdlbmVyYXRvcnMpe2xldCBzO3N3aXRjaChuLmdlbmVyYXRvclR5cGUpe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBpLmtleU51bVRvVm9sRW52RGVjYXk6cz1pLmRlY2F5Vm9sRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cz1pLmhvbGRWb2xFbnY7YnJlYWs7Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cz1pLmRlY2F5TW9kRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub01vZEVudkhvbGQ6cz1pLmhvbGRNb2RFbnZ9bGV0IGE9dC5nZXRHZW5lcmF0b3Iocyx2b2lkIDApLHI9bi5nZW5lcmF0b3JWYWx1ZSotMTI4O2lmKGE9PT12b2lkIDApY29udGludWU7bGV0IEk9NjAvMTI4KnIsbz1hLUk7dC5zZXRHZW5lcmF0b3Iobi5nZW5lcmF0b3JUeXBlLHIsITEpLHQuc2V0R2VuZXJhdG9yKHMsbywhMSl9Zm9yKGxldCBuIG9mIHQuZ2VuZXJhdG9ycyljdC5mcm9tU0ZHZW5lcmF0b3Iobix0aGlzKTtmb3IobGV0IG4gb2YgdC5tb2R1bGF0b3JzKWN0LmZyb21TRk1vZHVsYXRvcihuLHRoaXMpfXJlYWQoQSl7bGV0IHQ9ZmUoQSwibGFydCIpLG49ZmUoQSwibGFyMiIpO2lmKHQpZm9yKHRoaXMubW9kZT0iZGxzMSI7dC5kYXRhLmN1cnJlbnRJbmRleDx0LmRhdGEubGVuZ3RoOyl7bGV0IHM9ckEodC5kYXRhKTtXbi52ZXJpZnlIZWFkZXIocywiYXJ0MSIsImFydDIiKTtsZXQgYT1zLmRhdGEscj1OKGEsNCk7ciE9PTgmJnNBKGBDYlNpemUgaW4gYXJ0aWN1bGF0aW9uIG1pc21hdGNoLiBFeHBlY3RlZCA4LCBnb3QgJHtyfWApO2xldCBJPU4oYSw0KTtmb3IobGV0IG89MDtvPEk7bysrKXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5wdXNoKGN0LnJlYWQoYSkpfWVsc2UgaWYobilmb3IodGhpcy5tb2RlPSJkbHMyIjtuLmRhdGEuY3VycmVudEluZGV4PG4uZGF0YS5sZW5ndGg7KXtsZXQgcz1yQShuLmRhdGEpO1duLnZlcmlmeUhlYWRlcihzLCJhcnQyIiwiYXJ0MSIpO2xldCBhPXMuZGF0YSxyPU4oYSw0KTtyIT09OCYmc0EoYENiU2l6ZSBpbiBhcnRpY3VsYXRpb24gbWlzbWF0Y2guIEV4cGVjdGVkIDgsIGdvdCAke3J9YCk7bGV0IEk9TihhLDQpO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QucmVhZChhKSl9fXdyaXRlKCl7bGV0IEE9bmV3IFkoOCk7Z0EoQSw4KSxnQShBLHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGgpO2xldCB0PXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5tYXAocz0+cy53cml0ZSgpKSxuPXZBKHRoaXMubW9kZT09PSJkbHMyIj8iYXJ0MiI6ImFydDEiLFtBLC4uLnRdKTtyZXR1cm4gY0EodGhpcy5tb2RlPT09ImRsczIiPyJsYXIyIjoibGFydCIsbiwhMSwhMCl9dG9TRlpvbmUoQSl7bGV0IHQ9KG4scyxhLHIpPT57bGV0IEk9bi8tMTI4O2lmKEEuc2V0R2VuZXJhdG9yKHMsSSksSTw9MTIwKXtsZXQgbz1NYXRoLnJvdW5kKC40Njg3NSpuKSxnPXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5maW5kKEI9PkIuaXNTdGF0aWNQYXJhbWV0ZXImJkIuZGVzdGluYXRpb249PT1yKTtnJiZBLnNldEdlbmVyYXRvcihhLG8rZy5zaG9ydFNjYWxlKX19O2ZvcihsZXQgbiBvZiB0aGlzLmNvbm5lY3Rpb25CbG9ja3Mpe2xldCBzPW4uc2hvcnRTY2FsZSxhPW4uc291cmNlLnNvdXJjZSxyPW4uY29udHJvbC5zb3VyY2UsST1uLmRlc3RpbmF0aW9uO2lmKG4uaXNTdGF0aWNQYXJhbWV0ZXIpe24udG9TRkdlbmVyYXRvcihBKTtjb250aW51ZX1pZihyPT09VC5ub25lKWlmKGE9PT1ULmtleU51bSl7aWYoST09PVIucGl0Y2gpe0Euc2V0R2VuZXJhdG9yKGkuc2NhbGVUdW5pbmcscy8xMjgpO2NvbnRpbnVlfWlmKEk9PT1SLm1vZEVudkhvbGR8fEk9PT1SLm1vZEVudkRlY2F5fHxJPT09Ui52b2xFbnZIb2xkfHxJPT1SLnZvbEVudkRlY2F5KWNvbnRpbnVlfWVsc2V7bGV0IG89bi50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKG8pe0Euc2V0R2VuZXJhdG9yKG8scyk7Y29udGludWV9fW4udG9TRk1vZHVsYXRvcihBKX10aGlzLm1vZGU9PT0iZGxzMSImJkEuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShHciksRUEuY29weUZyb20oUnIpKTtmb3IobGV0IG4gb2YgdGhpcy5jb25uZWN0aW9uQmxvY2tzKXtpZihuLnNvdXJjZS5zb3VyY2UhPT1ULmtleU51bSljb250aW51ZTtsZXQgcz1uLnNob3J0U2NhbGU7c3dpdGNoKG4uZGVzdGluYXRpb24pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBSLnZvbEVudkhvbGQ6dChzLGkua2V5TnVtVG9Wb2xFbnZIb2xkLGkuaG9sZFZvbEVudixSLnZvbEVudkhvbGQpO2JyZWFrO2Nhc2UgUi52b2xFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5LGkuZGVjYXlWb2xFbnYsUi52b2xFbnZEZWNheSk7YnJlYWs7Y2FzZSBSLm1vZEVudkhvbGQ6dChzLGkua2V5TnVtVG9Nb2RFbnZIb2xkLGkuaG9sZE1vZEVudixSLm1vZEVudkhvbGQpO2JyZWFrO2Nhc2UgUi5tb2RFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub01vZEVudkRlY2F5LGkuZGVjYXlNb2RFbnYsUi5tb2RFbnZEZWNheSk7YnJlYWt9fX19LHduPWNsYXNzIFV0e2NoYW5uZWw9MTt0YWJsZUluZGV4O2Z1c09wdGlvbnM9MDtwaGFzZUdyb3VwPTA7Y29uc3RydWN0b3IoQSl7dGhpcy50YWJsZUluZGV4PUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBVdChBLnRhYmxlSW5kZXgpO3JldHVybiB0LmNoYW5uZWw9QS5jaGFubmVsLHQucGhhc2VHcm91cD1BLnBoYXNlR3JvdXAsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0fXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQS5kYXRhLDIpLG49TihBLmRhdGEsMikscz1OKEEuZGF0YSw0KSxhPU4oQS5kYXRhLDQpLHI9bmV3IFV0KGEpO3JldHVybiByLmNoYW5uZWw9cyxyLmZ1c09wdGlvbnM9dCxyLnBoYXNlR3JvdXA9bixyfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49QS5pbmRleE9mKHQuc2FtcGxlKTtpZihuPDApdGhyb3cgbmV3IEVycm9yKGBXYXZlIGxpbmsgZXJyb3I6IFNhbXBsZSAke3Quc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzYW1wbGUgbGlzdC5gKTtsZXQgcz1uZXcgVXQobik7c3dpdGNoKHQuc2FtcGxlLnNhbXBsZVR5cGUpe2RlZmF1bHQ6Y2FzZSB3QS5sZWZ0U2FtcGxlOmNhc2Ugd0EubW9ub1NhbXBsZTpzLmNoYW5uZWw9MTticmVhaztjYXNlIHdBLnJpZ2h0U2FtcGxlOnMuY2hhbm5lbD0yfXJldHVybiBzfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsdGhpcy5mdXNPcHRpb25zKSxKKEEsdGhpcy5waGFzZUdyb3VwKSxnQShBLHRoaXMuY2hhbm5lbCksZ0EoQSx0aGlzLnRhYmxlSW5kZXgpLGNBKCJ3bG5rIixBKX19LFR0PWNsYXNzIFZlIGV4dGVuZHMgamV7YXJ0aWN1bGF0aW9uPW5ldyBEYTtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307dmVsUmFuZ2U9e21pbjowLG1heDoxMjd9O2tleUdyb3VwPTA7ZnVzT3B0aW9ucz0wO3VzTGF5ZXI9MDt3YXZlU2FtcGxlO3dhdmVMaW5rO2NvbnN0cnVjdG9yKEEsdCl7c3VwZXIoKSx0aGlzLndhdmVTYW1wbGU9dCx0aGlzLndhdmVMaW5rPUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBWZSh3bi5jb3B5RnJvbShBLndhdmVMaW5rKSx6ZS5jb3B5RnJvbShBLndhdmVTYW1wbGUpKTtyZXR1cm4gdC5rZXlHcm91cD1BLmtleUdyb3VwLHQua2V5UmFuZ2U9ey4uLkEua2V5UmFuZ2V9LHQudmVsUmFuZ2U9ey4uLkEudmVsUmFuZ2V9LHQudXNMYXllcj1BLnVzTGF5ZXIsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0LmFydGljdWxhdGlvbi5jb3B5RnJvbShBLmFydGljdWxhdGlvbiksdH1zdGF0aWMgcmVhZChBLHQpe2xldCBuPXRoaXMudmVyaWZ5QW5kUmVhZExpc3QodCwicmduICIsInJnbjIiKSxzPW4uZmluZChtPT5tLmhlYWRlcj09PSJ3c21wIiksYT1zP3plLnJlYWQocyk6dm9pZCAwLHI9bi5maW5kKG09Pm0uaGVhZGVyPT09IndsbmsiKTtpZighcil7c0EoIkludmFsaWQgRExTIHJlZ2lvbjogbWlzc2luZyAnd2xuaycgY2h1bmshIERpc2NhcmRpbmcuLi4iKTtyZXR1cm59bGV0IEk9d24ucmVhZChyKSxvPW4uZmluZChtPT5tLmhlYWRlcj09PSJyZ25oIik7aWYoIW8pe3NBKCJJbnZhbGlkIERMUyByZWdpb246IG1pc3NpbmcgJ3JnbmgnIGNodW5rISBEaXNjYXJkaW5nLi4uIik7cmV0dXJufWxldCBnPUFbSS50YWJsZUluZGV4XTtnfHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke0kudGFibGVJbmRleH0uIFNhbXBsZXMgYXZhaWxhYmxlOiAke0EubGVuZ3RofWApLGE/Pz1nLndhdmVTYW1wbGU7bGV0IEI9bmV3IFZlKEksYSksZD1OKG8uZGF0YSwyKSxoPU4oby5kYXRhLDIpLEM9TihvLmRhdGEsMiksUT1OKG8uZGF0YSwyKTtyZXR1cm4gQz09PTAmJlE9PT0wJiYoUT0xMjcsQz0wKSxCLmtleVJhbmdlLm1heD1oLEIua2V5UmFuZ2UubWluPWQsQi52ZWxSYW5nZS5tYXg9USxCLnZlbFJhbmdlLm1pbj1DLEIuZnVzT3B0aW9ucz1OKG8uZGF0YSwyKSxCLmtleUdyb3VwPU4oby5kYXRhLDIpLG8uZGF0YS5sZW5ndGgtby5kYXRhLmN1cnJlbnRJbmRleD49MiYmKEIudXNMYXllcj1OKG8uZGF0YSwyKSksQi5hcnRpY3VsYXRpb24ucmVhZChuKSxCfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49emUuZnJvbVNGWm9uZShBKSxzPXduLmZyb21TRlpvbmUodCxBKSxhPW5ldyBWZShzLG4pO3JldHVybiBhLmtleVJhbmdlLm1pbj1NYXRoLm1heChBLmtleVJhbmdlLm1pbiwwKSxhLmtleVJhbmdlLm1heD1BLmtleVJhbmdlLm1heCxhLnZlbFJhbmdlLm1pbj1NYXRoLm1heChBLnZlbFJhbmdlLm1pbiwwKSxhLnZlbFJhbmdlLm1heD1BLnZlbFJhbmdlLm1heCxhLmtleUdyb3VwPUEuZ2V0R2VuZXJhdG9yKGkuZXhjbHVzaXZlQ2xhc3MsMCksYS5hcnRpY3VsYXRpb24uZnJvbVNGWm9uZShBKSxhfXdyaXRlKCl7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKSx0aGlzLndhdmVTYW1wbGUud3JpdGUoKSx0aGlzLndhdmVMaW5rLndyaXRlKCksdGhpcy5hcnRpY3VsYXRpb24ud3JpdGUoKV07cmV0dXJuIHZBKCJyZ24yIixBLCEwKX10b1NGWm9uZShBLHQpe2xldCBuPXRbdGhpcy53YXZlTGluay50YWJsZUluZGV4XTtufHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke3RoaXMud2F2ZUxpbmsudGFibGVJbmRleH1gKTtsZXQgcz1BLmNyZWF0ZVpvbmUobik7cmV0dXJuIHMua2V5UmFuZ2U9dGhpcy5rZXlSYW5nZSxzLnZlbFJhbmdlPXRoaXMudmVsUmFuZ2UsdGhpcy5rZXlSYW5nZS5tYXg9PT0xMjcmJnRoaXMua2V5UmFuZ2UubWluPT09MCYmKHMua2V5UmFuZ2UubWluPS0xKSx0aGlzLnZlbFJhbmdlLm1heD09PTEyNyYmdGhpcy52ZWxSYW5nZS5taW49PT0wJiYocy52ZWxSYW5nZS5taW49LTEpLHRoaXMua2V5R3JvdXAhPT0wJiZzLnNldEdlbmVyYXRvcihpLmV4Y2x1c2l2ZUNsYXNzLHRoaXMua2V5R3JvdXApLHRoaXMud2F2ZVNhbXBsZS50b1NGWm9uZShzLG4pLHRoaXMuYXJ0aWN1bGF0aW9uLnRvU0Zab25lKHMpLHMuZ2VuZXJhdG9ycz1zLmdlbmVyYXRvcnMuZmlsdGVyKGE9PmEuZ2VuZXJhdG9yVmFsdWUhPT14W2EuZ2VuZXJhdG9yVHlwZV0uZGVmKSxzfXdyaXRlSGVhZGVyKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsTWF0aC5tYXgodGhpcy5rZXlSYW5nZS5taW4sMCkpLEooQSx0aGlzLmtleVJhbmdlLm1heCksSihBLE1hdGgubWF4KHRoaXMudmVsUmFuZ2UubWluLDApKSxKKEEsdGhpcy52ZWxSYW5nZS5tYXgpLEooQSx0aGlzLmZ1c09wdGlvbnMpLEooQSx0aGlzLmtleUdyb3VwKSxKKEEsdGhpcy51c0xheWVyKSxjQSgicmduaCIsQSl9fSxGbj1jbGFzcyB4dCBleHRlbmRzIGple2FydGljdWxhdGlvbj1uZXcgRGE7cmVnaW9ucz1uZXcgQXJyYXk7bmFtZT0iVW5uYW1lZCI7YmFua0xTQj0wO2JhbmtNU0I9MDtpc0dNR1NEcnVtPSExO3Byb2dyYW09MDtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IHh0O3JldHVybiB0Lm5hbWU9QS5uYW1lLHQuaXNHTUdTRHJ1bT1BLmlzR01HU0RydW0sdC5iYW5rTVNCPUEuYmFua01TQix0LmJhbmtMU0I9QS5iYW5rTFNCLHQucHJvZ3JhbT1BLnByb2dyYW0sdC5hcnRpY3VsYXRpb24uY29weUZyb20oQS5hcnRpY3VsYXRpb24pLEEucmVnaW9ucy5mb3JFYWNoKG49Pnt0LnJlZ2lvbnMucHVzaChUdC5jb3B5RnJvbShuKSl9KSx0fXN0YXRpYyByZWFkKEEsdCl7bGV0IG49dGhpcy52ZXJpZnlBbmRSZWFkTGlzdCh0LCJpbnMgIikscz1uLmZpbmQoaD0+aC5oZWFkZXI9PT0iaW5zaCIpO2lmKCFzKXRocm93IFooKSxuZXcgRXJyb3IoIk5vIGluc3RydW1lbnQgaGVhZGVyISIpO2xldCBhPSIiLHI9ZmUobiwiSU5GTyIpO2lmKHIpe2xldCBoPXJBKHIuZGF0YSk7Zm9yKDtoLmhlYWRlciE9PSJJTkFNIjspaD1yQShyLmRhdGEpO2E9aEEoaC5kYXRhLGguZGF0YS5sZW5ndGgpLnRyaW0oKX1hLmxlbmd0aDwxJiYoYT0iVW5uYW1lZCBJbnN0cnVtZW50Iik7bGV0IEk9bmV3IHh0O0kubmFtZT1hO2xldCBvPU4ocy5kYXRhLDQpLGc9TihzLmRhdGEsNCksQj1OKHMuZGF0YSw0KTtJLnByb2dyYW09QiYxMjcsSS5iYW5rTVNCPWc+Pj44JjEyNyxJLmJhbmtMU0I9ZyYxMjcsSS5pc0dNR1NEcnVtPWc+Pj4zMT4wLGJBKGAlY1BhcnNpbmcgJWMiJHthfSIlYy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCBkPWZlKG4sImxyZ24iKTtpZighZCl0aHJvdyBaKCksbmV3IEVycm9yKCJObyByZWdpb24gbGlzdCEiKTtJLmFydGljdWxhdGlvbi5yZWFkKG4pO2ZvcihsZXQgaD0wO2g8bztoKyspe2xldCBDPXJBKGQuZGF0YSk7dGhpcy52ZXJpZnlIZWFkZXIoQywiTElTVCIpO2xldCBRPWhBKEMuZGF0YSw0KTtRIT09InJnbiAiJiZRIT09InJnbjIiJiYoWigpLHRoaXMucGFyc2luZ0Vycm9yKGBJbnZhbGlkIERMUyByZWdpb24hIEV4cGVjdGVkICJyZ24gIiBvciAicmduMiIgZ290ICIke1F9ImApKTtsZXQgbT1UdC5yZWFkKEEsQyk7bSYmSS5yZWdpb25zLnB1c2gobSl9cmV0dXJuIFooKSxJfXN0YXRpYyBmcm9tU0ZQcmVzZXQoQSx0KXtsZXQgbj1uZXcgeHQ7cmV0dXJuIG4ubmFtZT1BLm5hbWUsbi5iYW5rTFNCPUEuYmFua0xTQixuLmJhbmtNU0I9QS5iYW5rTVNCLG4ucHJvZ3JhbT1BLnByb2dyYW0sbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxPQShgJWNDb252ZXJ0aW5nICVjJHtBLnRvU3RyaW5nKCl9JWMgdG8gRExTLi4uYCxjLmluZm8sYy52YWx1ZSxjLmluZm8pLEEudG9GbGF0dGVuZWRJbnN0cnVtZW50KCkuem9uZXMuZm9yRWFjaChhPT57bi5yZWdpb25zLnB1c2goVHQuZnJvbVNGWm9uZShhLHQpKX0pLFooKSxufXdyaXRlKCl7YkEoYCVjV3JpdGluZyAlYyR7dGhpcy5uYW1lfSVjLi4uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyk7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKV0sdD10aGlzLnJlZ2lvbnMubWFwKHM9PnMud3JpdGUoKSk7QS5wdXNoKHZBKCJscmduIix0LCEwKSksdGhpcy5hcnRpY3VsYXRpb24ubGVuZ3RoPjAmJkEucHVzaCh0aGlzLmFydGljdWxhdGlvbi53cml0ZSgpKTtsZXQgbj1jQSgiSU5BTSIsbmUodGhpcy5uYW1lLCEwKSk7cmV0dXJuIEEucHVzaChjQSgiSU5GTyIsbiwhMSwhMCkpLFooKSx2QSgiaW5zICIsQSwhMCl9dG9TRlByZXNldChBKXtsZXQgdD1uZXcgcGUoQSk7dC5uYW1lPXRoaXMubmFtZSx0LmJhbmtNU0I9dGhpcy5iYW5rTVNCLHQuYmFua0xTQj10aGlzLmJhbmtMU0IsdC5pc0dNR1NEcnVtPXRoaXMuaXNHTUdTRHJ1bSx0LnByb2dyYW09dGhpcy5wcm9ncmFtO2xldCBuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lLHQuY3JlYXRlWm9uZShuKSx0aGlzLmFydGljdWxhdGlvbi50b1NGWm9uZShuLmdsb2JhbFpvbmUpLHRoaXMucmVnaW9ucy5mb3JFYWNoKHM9PnMudG9TRlpvbmUobixBLnNhbXBsZXMpKSxuLmdsb2JhbGl6ZSgpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkucmV2ZXJiRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbSh5YSkpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkuY2hvcnVzRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShrYSkpLG4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzPW4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzLmZpbHRlcihzPT5zLmdlbmVyYXRvclZhbHVlIT09eFtzLmdlbmVyYXRvclR5cGVdLmRlZiksQS5hZGRQcmVzZXRzKHQpLEEuYWRkSW5zdHJ1bWVudHMobil9d3JpdGVIZWFkZXIoKXtsZXQgQT1uZXcgWSgxMik7Z0EoQSx0aGlzLnJlZ2lvbnMubGVuZ3RoKTtsZXQgdD0odGhpcy5iYW5rTVNCJjEyNyk8PDh8dGhpcy5iYW5rTFNCJjEyNztyZXR1cm4gdGhpcy5pc0dNR1NEcnVtJiYodHw9MTw8MzEpLGdBKEEsdCksZ0EoQSx0aGlzLnByb2dyYW0mMTI3KSxjQSgiaW5zaCIsQSl9fSx3YT17cHJvZ3Jlc3NGdW5jdGlvbjp2b2lkIDB9LEZhPWNsYXNzIF9uIGV4dGVuZHMgamV7c2FtcGxlcz1uZXcgQXJyYXk7aW5zdHJ1bWVudHM9bmV3IEFycmF5O3NvdW5kQmFua0luZm89e25hbWU6IlVubmFtZWQiLGNyZWF0aW9uRGF0ZTpuZXcgRGF0ZSxzb2Z0d2FyZToiU3Blc3NhU3ludGgiLHNvdW5kRW5naW5lOiJETFMgTGV2ZWwgMi4yIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtzdGF0aWMgcmVhZChBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQhIik7bGV0IHQ9bmV3IFkoQSk7T0EoIiVjUGFyc2luZyBETFMgZmlsZS4uLiIsYy5pbmZvKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJSSUZGIiksdGhpcy52ZXJpZnlUZXh0KGhBKHQsNCkudG9Mb3dlckNhc2UoKSwiZGxzICIpO2xldCBzPVtdO2Zvcig7dC5jdXJyZW50SW5kZXg8dC5sZW5ndGg7KXMucHVzaChyQSh0KSk7bGV0IGE9bmV3IF9uO2Euc291bmRCYW5rSW5mby5uYW1lPSJVbm5hbWVkIERMUyIsYS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9IlNwZXNzYVN5bnRoIERMUyIsYS5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9IihubyBkZXNjcmlwdGlvbikiO2xldCByPWZlKHMsIklORk8iKTtpZihyKWZvcig7ci5kYXRhLmN1cnJlbnRJbmRleDxyLmRhdGEubGVuZ3RoOyl7bGV0IFE9ckEoci5kYXRhKSxtPVEuaGVhZGVyLHk9aEEoUS5kYXRhLFEuc2l6ZSk7c3dpdGNoKG0pe2Nhc2UiSU5BTSI6YS5zb3VuZEJhbmtJbmZvLm5hbWU9eTticmVhaztjYXNlIklDUkQiOmEuc291bmRCYW5rSW5mby5jcmVhdGlvbkRhdGU9dHMoeSk7YnJlYWs7Y2FzZSJJQ01UIjphLnNvdW5kQmFua0luZm8uY29tbWVudD15O2JyZWFrO2Nhc2UiSVNCSiI6YS5zb3VuZEJhbmtJbmZvLnN1YmplY3Q9eTticmVhaztjYXNlIklDT1AiOmEuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9eTticmVhaztjYXNlIklFTkciOmEuc291bmRCYW5rSW5mby5lbmdpbmVlcj15O2JyZWFrO2Nhc2UiSVBSRCI6YS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9eTticmVhaztjYXNlIklTRlQiOmEuc291bmRCYW5rSW5mby5zb2Z0d2FyZT15fX10aGlzLnByaW50SW5mbyhhKTtsZXQgST1zLmZpbmQoUT0+US5oZWFkZXI9PT0iY29saCIpO2lmKCFJKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcigiTm8gY29saCBjaHVuayEiKSw1O2xldCBvPU4oSS5kYXRhLDQpO3AoYCVjSW5zdHJ1bWVudHMgYW1vdW50OiAlYyR7b31gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBnPWZlKHMsInd2cGwiKTtpZighZylyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIHd2cGwgY2h1bmshIiksNTt0aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGcsInd2cGwiKS5mb3JFYWNoKFE9PnthLnNhbXBsZXMucHVzaChMcy5yZWFkKFEpKX0pO2xldCBkPWZlKHMsImxpbnMiKTtpZighZClyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIGxpbnMgY2h1bmshIiksNTtsZXQgaD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGQsImxpbnMiKTtiQSgiJWNMb2FkaW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pLGgubGVuZ3RoIT09byYmc0EoYENvbGggcmVwb3J0ZWQgaW52YWxpZCBhbW91bnQgb2YgaW5zdHJ1bWVudHMuIERldGVjdGVkICR7aC5sZW5ndGh9LCBleHBlY3RlZCAke299YCksaC5mb3JFYWNoKFE9PnthLmluc3RydW1lbnRzLnB1c2goRm4ucmVhZChhLnNhbXBsZXMsUSkpfSksWigpO2xldCBDPXMuZmluZChRPT5RLmhlYWRlcj09PSJwZ2FsIik7aWYoQyl7cCgiJWNGb3VuZCB0aGUgaW5zdHJ1bWVudCBhbGlhc2luZyBjaHVuayEiLGMucmVjb2duaXplZCk7bGV0IFE9Qy5kYXRhO1FbMF09PT0yJiZRWzFdK1FbMl0rUVszXT09PTAmJihRLmN1cnJlbnRJbmRleCs9NCk7bGV0IG09YS5pbnN0cnVtZW50cy5maW5kKEY9PmZBLmlzWEdEcnVtcyhGLmJhbmtNU0IpfHxGLmlzR01HU0RydW0pO2lmKCFtKXJldHVybiBzQSgiTW9iaWxlQkFFIGFsaWFzaW5nIGNodW5rIHdpdGhvdXQgYSBkcnVtIHByZXNldC4gQWJvcnRpbmchIiksYTtsZXQgeT1RLnNsaWNlKFEuY3VycmVudEluZGV4LFEuY3VycmVudEluZGV4KzEyOCk7US5jdXJyZW50SW5kZXgrPTEyODtmb3IobGV0IEY9MDtGPDEyODtGKyspe2xldCBrPXlbRl07aWYoaz09PUYpY29udGludWU7bGV0IEQ9bS5yZWdpb25zLmZpbmQoTD0+TC5rZXlSYW5nZS5tYXg9PT1rJiZMLmtleVJhbmdlLm1pbj09PWspO2lmKCFEKXtzQShgSW52YWxpZCBkcnVtIGFsaWFzICR7Rn0gdG8gJHtrfTogcmVnaW9uIGRvZXMgbm90IGV4aXN0LmApO2NvbnRpbnVlfWxldCB2PVR0LmNvcHlGcm9tKEQpO3Yua2V5UmFuZ2UubWF4PUYsdi5rZXlSYW5nZS5taW49RixtLnJlZ2lvbnMucHVzaCh2KX1mb3IoUS5jdXJyZW50SW5kZXgrPTQ7US5jdXJyZW50SW5kZXg8US5sZW5ndGg7KXtsZXQgRj1OKFEsMiksaz1GJjEyNyxEPUY+PjcmMTI3LHY9UVtRLmN1cnJlbnRJbmRleCsrXSxMPVFbUS5jdXJyZW50SW5kZXgrK107TCE9PTAmJnNBKGBJbnZhbGlkIGFsaWFzIGJ5dGUuIEV4cGVjdGVkIDAsIGdvdCAke0x9YCk7bGV0IEU9TihRLDIpLFg9RSYxMjcsTz1FPj43JjEyNyxuQT1RW1EuY3VycmVudEluZGV4KytdO0w9UVtRLmN1cnJlbnRJbmRleCsrXSxMIT09MCYmc0EoYEludmFsaWQgYWxpYXMgaGVhZGVyLiBFeHBlY3RlZCAwLCBnb3QgJHtMfWApO2xldCAkPWEuaW5zdHJ1bWVudHMuZmluZChxPT5xLmJhbmtMU0I9PT1YJiZxLmJhbmtNU0I9PT1PJiZxLnByb2dyYW09PT1uQSYmIXEuaXNHTUdTRHJ1bSk7aWYoISQpe3NBKGBJbnZhbGlkIGFsaWFzLiBNaXNzaW5nIGluc3RydW1lbnQ6ICR7WH06JHtPfToke25BfWApO2NvbnRpbnVlfWxldCBWPUZuLmNvcHlGcm9tKCQpO1YuYmFua01TQj1ELFYuYmFua0xTQj1rLFYucHJvZ3JhbT12LGEuaW5zdHJ1bWVudHMucHVzaChWKX19cmV0dXJuIHAoYCVjUGFyc2luZyBmaW5pc2hlZCEgJWMiJHthLnNvdW5kQmFua0luZm8ubmFtZXx8IlVOTkFNRUQifSIlYyBoYXMgJWMke2EuaW5zdHJ1bWVudHMubGVuZ3RofSVjIGluc3RydW1lbnRzIGFuZCAlYyR7YS5zYW1wbGVzLmxlbmd0aH0lYyBzYW1wbGVzLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCksYX1zdGF0aWMgZnJvbVNGKEEpe2JBKCIlY1NhdmluZyBTRjIgdG8gRExTIGxldmVsIDIuLi4iLGMuaW5mbyk7bGV0IHQ9bmV3IF9uO3JldHVybiB0LnNvdW5kQmFua0luZm89ey4uLkEuc291bmRCYW5rSW5mb30sdC5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9KHQuc291bmRCYW5rSW5mby5jb21tZW50Pz8iKE5vIGRlc2NyaXB0aW9uKSIpK2AKQ29udmVydGVkIGZyb20gU0YyIHRvIERMUyB3aXRoIFNwZXNzYVN5bnRoYCxBLnNhbXBsZXMuZm9yRWFjaChuPT57dC5zYW1wbGVzLnB1c2goTHMuZnJvbVNGU2FtcGxlKG4pKX0pLEEucHJlc2V0cy5mb3JFYWNoKG49Pnt0Lmluc3RydW1lbnRzLnB1c2goRm4uZnJvbVNGUHJlc2V0KG4sQS5zYW1wbGVzKSl9KSxwKCIlY0NvbnZlcnNpb24gY29tcGxldGUhIixjLnJlY29nbml6ZWQpLFooKSx0fXN0YXRpYyBwcmludEluZm8oQSl7Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMoQS5zb3VuZEJhbmtJbmZvKSl7aWYodHlwZW9mIG49PSJvYmplY3QiJiYibWFqb3IiaW4gbil7bGV0IHM9bjtwKGAlYyR7dH06ICVjIiR7cy5tYWpvcn0uJHtzLm1pbm9yfSJgLGMuaW5mbyxjLnJlY29nbml6ZWQpfXAoYCVjJHt0fTogJWMke24udG9Mb2NhbGVTdHJpbmcoKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpfX1hc3luYyB3cml0ZShBPXdhKXtiQSgiJWNTYXZpbmcgRExTLi4uIixjLmluZm8pO2xldCB0PW5ldyBZKDQpO2dBKHQsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGgpO2xldCBuPWNBKCJjb2xoIix0KTtiQSgiJWNXcml0aW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pO2xldCBzPXZBKCJsaW5zIix0aGlzLmluc3RydW1lbnRzLm1hcCh5PT55LndyaXRlKCkpLCEwKTtwKCIlY1N1Y2Nlc3MhIixjLnJlY29nbml6ZWQpLFooKSxiQSgiJWNXcml0aW5nIFdBVkUgc2FtcGxlcy4uLiIsYy5pbmZvKTtsZXQgYT0wLHI9W10sST1bXSxvPTA7Zm9yKGxldCB5IG9mIHRoaXMuc2FtcGxlcyl7bGV0IEY9eS53cml0ZSgpO2F3YWl0IEE/LnByb2dyZXNzRnVuY3Rpb24/Lih5Lm5hbWUsbyx0aGlzLnNhbXBsZXMubGVuZ3RoKSxyLnB1c2goYSksYSs9Ri5sZW5ndGgsSS5wdXNoKEYpLG8rK31sZXQgZz12QSgid3ZwbCIsSSwhMCk7cCgiJWNTdWNjZWVkZWQhIixjLnJlY29nbml6ZWQpO2xldCBCPW5ldyBZKDgrNCpyLmxlbmd0aCk7Z0EoQiw4KSxnQShCLHIubGVuZ3RoKTtmb3IobGV0IHkgb2YgcilnQShCLHkpO2xldCBkPWNBKCJwdGJsIixCKTt0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9IlNwZXNzYVN5bnRoIjtsZXQgaD1bXSxDPSh5LEYpPT57aC5wdXNoKGNBKHksbmUoRiwhMCkpKX07Zm9yKGxldFt5LEZdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zb3VuZEJhbmtJbmZvKSl7bGV0IGs9eSxEPUY7aWYoRClzd2l0Y2goayl7Y2FzZSJuYW1lIjpDKCJJTkFNIixEKTticmVhaztjYXNlImNvbW1lbnQiOkMoIklDTVQiLEQpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpDKCJJQ09QIixEKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6QygiSUNSRCIsRC50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpDKCJJRU5HIixEKTticmVhaztjYXNlInByb2R1Y3QiOkMoIklQUkQiLEQpO2JyZWFrO2Nhc2Uicm9tVmVyc2lvbiI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInNvdW5kRW5naW5lIjpjYXNlInJvbUluZm8iOmJyZWFrO2Nhc2Uic29mdHdhcmUiOkMoIklTRlQiLEQpO2JyZWFrO2Nhc2Uic3ViamVjdCI6QygiSVNCSiIsRCl9fWxldCBRPXZBKCJJTkZPIixoLCEwKTtwKCIlY0NvbWJpbmluZyBldmVyeXRoaW5nLi4uIik7bGV0IG09dkEoIlJJRkYiLFtuZSgiRExTICIpLG4scyxkLGcsUV0pO3JldHVybiBwKCIlY1NhdmVkIHN1Y2Nlc3NmdWxseSEiLGMucmVjb2duaXplZCksWigpLG0uYnVmZmVyfXRvU0YoKXtPQSgiJWNDb252ZXJ0aW5nIERMUyB0byBTRjIuLi4iLGMuaW5mbyk7bGV0IEE9bmV3IEdhO3JldHVybiBBLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00LEEuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yPTIsQS5zb3VuZEJhbmtJbmZvPXsuLi50aGlzLnNvdW5kQmFua0luZm99LEEuc291bmRCYW5rSW5mby5jb21tZW50PShBLnNvdW5kQmFua0luZm8uY29tbWVudD8/IihObyBkZXNjcmlwdGlvbikiKStgCkNvbnZlcnRlZCBmcm9tIERMUyB0byBTRjIgd2l0aCBTcGVzc2FTeW50aGAsdGhpcy5zYW1wbGVzLmZvckVhY2godD0+e3QudG9TRlNhbXBsZShBKX0pLHRoaXMuaW5zdHJ1bWVudHMuZm9yRWFjaCh0PT57dC50b1NGUHJlc2V0KEEpfSksQS5mbHVzaCgpLHAoIiVjQ29udmVyc2lvbiBjb21wbGV0ZSEiLGMucmVjb2duaXplZCksWigpLEF9fSxHYT1jbGFzcyBIdHtzdGF0aWMgaXNTRjNEZWNvZGVyUmVhZHk9T3QuaXNJbml0aWFsaXplZDtzb3VuZEJhbmtJbmZvPXtuYW1lOiJVbm5hbWVkIixjcmVhdGlvbkRhdGU6bmV3IERhdGUsc29mdHdhcmU6IlNwZXNzYVN5bnRoIixzb3VuZEVuZ2luZToiRS1tdSAxMEsyIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtwcmVzZXRzPVtdO3NhbXBsZXM9W107aW5zdHJ1bWVudHM9W107ZGVmYXVsdE1vZHVsYXRvcnM9RWEubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKTtjdXN0b21EZWZhdWx0TW9kdWxhdG9ycz0hMTtfaXNYR0Jhbms9ITE7Z2V0IGlzWEdCYW5rKCl7cmV0dXJuIHRoaXMuX2lzWEdCYW5rfXN0YXRpYyBtZXJnZVNvdW5kQmFua3MoLi4uQSl7bGV0IHQ9QS5zaGlmdCgpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MgcHJvdmlkZWQhIik7bGV0IG49dC5wcmVzZXRzO2Zvcig7QS5sZW5ndGg7KXtsZXQgYT1BPy5zaGlmdCgpPy5wcmVzZXRzO2EmJmEuZm9yRWFjaChyPT57bi5maW5kKEk9PnIubWF0Y2hlcyhJKSk9PT12b2lkIDAmJm4ucHVzaChyKX0pfWxldCBzPW5ldyBIdDtyZXR1cm4gcy5hZGRDb21wbGV0ZVByZXNldHMobikscy5zb3VuZEJhbmtJbmZvPXsuLi50LnNvdW5kQmFua0luZm99LHN9c3RhdGljIGFzeW5jIGdldFNhbXBsZVNvdW5kQmFua0ZpbGUoKXtsZXQgQT1uZXcgSHQsdD1uZXcgRmxvYXQzMkFycmF5KDEyOCk7Zm9yKGxldCBJPTA7STwxMjg7SSsrKXRbSV09SS8xMjgqMi0xO2xldCBuPW5ldyBtcjtuLm5hbWU9IlNhdyIsbi5vcmlnaW5hbEtleT02NSxuLnBpdGNoQ29ycmVjdGlvbj0yMCxuLmxvb3BFbmQ9MTI3LG4uc2V0QXVkaW9EYXRhKHQsNDQxMDApLEEuYWRkU2FtcGxlcyhuKTtsZXQgcz1uZXcgZHQ7cy5uYW1lPSJTYXcgV2F2ZSIscy5nbG9iYWxab25lLmFkZEdlbmVyYXRvcnMobmV3IEZBKGkuaW5pdGlhbEF0dGVudWF0aW9uLDM3NSksbmV3IEZBKGkucmVsZWFzZVZvbEVudiwtMWUzKSxuZXcgRkEoaS5zYW1wbGVNb2RlcywxKSkscy5jcmVhdGVab25lKG4pLHMuY3JlYXRlWm9uZShuKS5hZGRHZW5lcmF0b3JzKG5ldyBGQShpLmZpbmVUdW5lLC05KSksQS5hZGRJbnN0cnVtZW50cyhzKTtsZXQgcj1uZXcgcGUoQSk7cmV0dXJuIHIubmFtZT0iU2F3IFdhdmUiLHIuY3JlYXRlWm9uZShzKSxBLmFkZFByZXNldHMociksQS5zb3VuZEJhbmtJbmZvLm5hbWU9IkR1bW15IixBLmZsdXNoKCksYXdhaXQgQS53cml0ZVNGMigpfXN0YXRpYyBjb3B5RnJvbShBKXtsZXQgdD1uZXcgSHQ7cmV0dXJuIEEucHJlc2V0cy5mb3JFYWNoKG49PnQuY2xvbmVQcmVzZXQobikpLHQuc291bmRCYW5rSW5mbz17Li4uQS5zb3VuZEJhbmtJbmZvfSx0fWFkZENvbXBsZXRlUHJlc2V0cyhBKXt0aGlzLmFkZFByZXNldHMoLi4uQSk7bGV0IHQ9W107Zm9yKGxldCBzIG9mIEEpZm9yKGxldCBhIG9mIHMuem9uZXMpYS5pbnN0cnVtZW50JiYhdC5pbmNsdWRlcyhhLmluc3RydW1lbnQpJiZ0LnB1c2goYS5pbnN0cnVtZW50KTt0aGlzLmFkZEluc3RydW1lbnRzKC4uLnQpO2xldCBuPVtdO2ZvcihsZXQgcyBvZiB0KWZvcihsZXQgYSBvZiBzLnpvbmVzKWEuc2FtcGxlJiYhbi5pbmNsdWRlcyhhLnNhbXBsZSkmJm4ucHVzaChhLnNhbXBsZSk7dGhpcy5hZGRTYW1wbGVzKC4uLm4pfWFzeW5jIHdyaXRlRExTKEE9d2Epe3JldHVybiBGYS5mcm9tU0YodGhpcykud3JpdGUoQSl9YXN5bmMgd3JpdGVTRjIoQT1Ybil7cmV0dXJuIGtyKHRoaXMsQSl9YWRkUHJlc2V0cyguLi5BKXt0aGlzLnByZXNldHMucHVzaCguLi5BKX1hZGRJbnN0cnVtZW50cyguLi5BKXt0aGlzLmluc3RydW1lbnRzLnB1c2goLi4uQSl9YWRkU2FtcGxlcyguLi5BKXt0aGlzLnNhbXBsZXMucHVzaCguLi5BKX1jbG9uZVNhbXBsZShBKXtsZXQgdD10aGlzLnNhbXBsZXMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IFp0KEEubmFtZSxBLnNhbXBsZVJhdGUsQS5vcmlnaW5hbEtleSxBLnBpdGNoQ29ycmVjdGlvbixBLnNhbXBsZVR5cGUsQS5sb29wU3RhcnQsQS5sb29wRW5kKTtpZihBLmlzQ29tcHJlc3NlZD9uLnNldENvbXByZXNzZWREYXRhKEEuZ2V0UmF3RGF0YSghMCkpOm4uc2V0QXVkaW9EYXRhKEEuZ2V0QXVkaW9EYXRhKCksQS5zYW1wbGVSYXRlKSx0aGlzLmFkZFNhbXBsZXMobiksQS5saW5rZWRTYW1wbGUpe2xldCBzPXRoaXMuY2xvbmVTYW1wbGUoQS5saW5rZWRTYW1wbGUpO3MubGlua2VkU2FtcGxlfHxuLnNldExpbmtlZFNhbXBsZShzLG4uc2FtcGxlVHlwZSl9cmV0dXJuIG59Y2xvbmVJbnN0cnVtZW50KEEpe2xldCB0PXRoaXMuaW5zdHJ1bWVudHMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IGR0O24ubmFtZT1BLm5hbWUsbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVTYW1wbGUocy5zYW1wbGUpKS5jb3B5RnJvbShzKTtyZXR1cm4gdGhpcy5hZGRJbnN0cnVtZW50cyhuKSxufWNsb25lUHJlc2V0KEEpe2xldCB0PXRoaXMucHJlc2V0cy5maW5kKHM9PnMubmFtZT09PUEubmFtZSk7aWYodClyZXR1cm4gdDtsZXQgbj1uZXcgcGUodGhpcyk7bi5uYW1lPUEubmFtZSxuLmJhbmtNU0I9QS5iYW5rTVNCLG4uYmFua0xTQj1BLmJhbmtMU0Isbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxuLnByb2dyYW09QS5wcm9ncmFtLG4ubGlicmFyeT1BLmxpYnJhcnksbi5nZW5yZT1BLmdlbnJlLG4ubW9ycGhvbG9neT1BLm1vcnBob2xvZ3ksbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVJbnN0cnVtZW50KHMuaW5zdHJ1bWVudCkpLmNvcHlGcm9tKHMpO3JldHVybiB0aGlzLmFkZFByZXNldHMobiksbn1mbHVzaCgpe3RoaXMucHJlc2V0cy5zb3J0KHRlLnNvcnRlci5iaW5kKHRlKSksdGhpcy5wYXJzZUludGVybmFsKCl9dHJpbVNvdW5kQmFuayhBKXtsZXQgdD0ocyxhKT0+e2xldCByPTA7Zm9yKGxldCBJPTA7STxzLnpvbmVzLmxlbmd0aDtJKyspe2xldCBvPXMuem9uZXNbSV0sZz1vLmtleVJhbmdlLEI9by52ZWxSYW5nZSxkPSExO2ZvcihsZXQgaCBvZiBhKWlmKGgua2V5Pj1nLm1pbiYmaC5rZXk8PWcubWF4JiZoLnZlbG9jaXR5Pj1CLm1pbiYmaC52ZWxvY2l0eTw9Qi5tYXgpe2Q9ITA7YnJlYWt9IWQmJm8uc2FtcGxlJiYocChgJWMke28uc2FtcGxlLm5hbWV9JWMgcmVtb3ZlZCBmcm9tICVjJHtzLm5hbWV9JWMuYCxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHMuZGVsZXRlWm9uZShJKSYmKHIrKyxJLS0scChgJWMke28uc2FtcGxlLm5hbWV9JWMgZGVsZXRlZGAsYy5yZWNvZ25pemVkLGMuaW5mbykpLG8uc2FtcGxlLnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlU2FtcGxlKG8uc2FtcGxlKSl9cmV0dXJuIHJ9O09BKCIlY1RyaW1taW5nIHNvdW5kIGJhbmsuLi4iLGMuaW5mbyk7bGV0IG49QS5nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKHRoaXMpO2JBKCIlY01vZGlmeWluZyBzb3VuZCBiYW5rLi4uIixjLmluZm8pLHAoIkRldGVjdGVkIGtleXMgZm9yIG1pZGk6IixuKTtmb3IobGV0IHM9MDtzPHRoaXMucHJlc2V0cy5sZW5ndGg7cysrKXtsZXQgYT10aGlzLnByZXNldHNbc10scj1uLmdldChhKTtpZihyPT09dm9pZCAwKXAoYCVjRGVsZXRpbmcgcHJlc2V0ICVjJHthLm5hbWV9JWMgYW5kIGl0cyB6b25lc2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHRoaXMuZGVsZXRlUHJlc2V0KGEpLHMtLTtlbHNle2xldCBJPVsuLi5yXS5tYXAoZz0+e2xldCBCPWcuc3BsaXQoIi0iKTtyZXR1cm57a2V5OnBhcnNlSW50KEJbMF0pLHZlbG9jaXR5OnBhcnNlSW50KEJbMV0pfX0pO2JBKGAlY1RyaW1taW5nICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkKSxwKGBLZXlzIGZvciAke2EubmFtZX06YCxJKTtsZXQgbz0wO2ZvcihsZXQgZz0wO2c8YS56b25lcy5sZW5ndGg7ZysrKXtsZXQgQj1hLnpvbmVzW2ddLGQ9Qi5rZXlSYW5nZSxoPUIudmVsUmFuZ2UsQz0hMTtmb3IobGV0IFEgb2YgSSlpZihRLmtleT49ZC5taW4mJlEua2V5PD1kLm1heCYmUS52ZWxvY2l0eT49aC5taW4mJlEudmVsb2NpdHk8PWgubWF4JiZCLmluc3RydW1lbnQpe0M9ITA7bGV0IG09dChCLmluc3RydW1lbnQsSSk7cChgJWNUcmltbWVkIG9mZiAlYyR7bX0lYyB6b25lcyBmcm9tICVjJHtCLmluc3RydW1lbnQubmFtZX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCk7YnJlYWt9IUMmJkIuaW5zdHJ1bWVudCYmKG8rKyxhLmRlbGV0ZVpvbmUoZyksQi5pbnN0cnVtZW50LnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlSW5zdHJ1bWVudChCLmluc3RydW1lbnQpLGctLSl9cChgJWNUcmltbWVkIG9mZiAlYyR7b30lYyB6b25lcyBmcm9tICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpLFooKX19dGhpcy5yZW1vdmVVbnVzZWRFbGVtZW50cygpLHAoIiVjU291bmQgYmFuayBtb2RpZmllZCEiLGMucmVjb2duaXplZCksWigpLFooKX1yZW1vdmVVbnVzZWRFbGVtZW50cygpe3RoaXMuaW5zdHJ1bWVudHM9dGhpcy5pbnN0cnVtZW50cy5maWx0ZXIoQT0+e0EuZGVsZXRlVW51c2VkWm9uZXMoKTtsZXQgdD1BLnVzZUNvdW50PDE7cmV0dXJuIHQmJkEuZGVsZXRlKCksIXR9KSx0aGlzLnNhbXBsZXM9dGhpcy5zYW1wbGVzLmZpbHRlcihBPT57bGV0IHQ9QS51c2VDb3VudDwxO3JldHVybiB0JiZBLnVubGlua1NhbXBsZSgpLCF0fSl9ZGVsZXRlSW5zdHJ1bWVudChBKXtBLmRlbGV0ZSgpLHRoaXMuaW5zdHJ1bWVudHMuc3BsaWNlKHRoaXMuaW5zdHJ1bWVudHMuaW5kZXhPZihBKSwxKX1kZWxldGVQcmVzZXQoQSl7QS5kZWxldGUoKSx0aGlzLnByZXNldHMuc3BsaWNlKHRoaXMucHJlc2V0cy5pbmRleE9mKEEpLDEpfWRlbGV0ZVNhbXBsZShBKXtBLnVubGlua1NhbXBsZSgpLHRoaXMuc2FtcGxlcy5zcGxpY2UodGhpcy5zYW1wbGVzLmluZGV4T2YoQSksMSl9Z2V0UHJlc2V0KEEsdCl7cmV0dXJuIFFhKHRoaXMucHJlc2V0cyxBLHQpfWRlc3Ryb3lTb3VuZEJhbmsoKXt0aGlzLnByZXNldHMubGVuZ3RoPTAsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMubGVuZ3RoPTB9cGFyc2luZ0Vycm9yKEEpe3Rocm93IG5ldyBFcnJvcihgU0YgcGFyc2luZyBlcnJvcjogJHtBfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXBhcnNlSW50ZXJuYWwoKXt0aGlzLl9pc1hHQmFuaz0hMTtsZXQgQT1uZXcgU2V0KFswLDEsMiwzLDQsNSw2LDcsOCw5LDE2LDE3LDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDQwLDQxLDQ4LDU2LDU3LDU4LDY0LDY1LDY2LDEyNiwxMjddKTtmb3IobGV0IHQgb2YgdGhpcy5wcmVzZXRzKWlmKGZBLmlzWEdEcnVtcyh0LmJhbmtNU0IpJiYodGhpcy5faXNYR0Jhbms9ITAsIUEuaGFzKHQucHJvZ3JhbSkpKXt0aGlzLl9pc1hHQmFuaz0hMSxwKGAlY1RoaXMgYmFuayBpcyBub3QgdmFsaWQgWEcuIFByZXNldCAlYyR7dC50b1N0cmluZygpfSVjIGlzIG5vdCBhIHZhbGlkIFhHIGRydW0uIFhHIG1vZGUgd2lsbCB1c2UgcHJlc2V0cyBvbiBiYW5rIDEyOC5gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyk7YnJlYWt9fXByaW50SW5mbygpe2ZvcihsZXRbQSx0XW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc291bmRCYW5rSW5mbykpe2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmIm1ham9yImluIHQpe2xldCBuPXQ7cChgJWMke0F9OiAlYyIke24ubWFqb3J9LiR7bi5taW5vcn0iYCxjLmluZm8sYy5yZWNvZ25pemVkKX1wKGAlYyR7QX06ICVjJHt0LnRvTG9jYWxlU3RyaW5nKCl9YCxjLmluZm8sYy5yZWNvZ25pemVkKX19fSxicj1jbGFzcyBleHRlbmRzIEZBe2NvbnN0cnVjdG9yKGUpe2xldCBBPWUuY3VycmVudEluZGV4LHQ9ZVtBKzFdPDw4fGVbQV0sbj1qbihlW0ErMl0sZVtBKzNdKTtlLmN1cnJlbnRJbmRleCs9NCxzdXBlcih0LG4sITEpfX07ZnVuY3Rpb24gTnMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KUEucHVzaChuZXcgYnIoZS5kYXRhKSk7cmV0dXJuIEEucG9wKCksQX12YXIgdnI9Y2xhc3MgZXh0ZW5kcyBDYXtjb25zdHJ1Y3RvcihlLEEsdCxuKXtsZXQgcz10LmZpbmQocj0+ci5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IElEIGZvdW5kIGluIHByZXNldCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVtZW50IElEOiAke3MuZ2VuZXJhdG9yVmFsdWV9LCBhdmFpbGFibGUgaW5zdHJ1bWVudHM6ICR7bi5sZW5ndGh9YCk7c3VwZXIoZSxhKSx0aGlzLmFkZEdlbmVyYXRvcnMoLi4udCksdGhpcy5hZGRNb2R1bGF0b3JzKC4uLkEpfX07ZnVuY3Rpb24gTHIoZSxBLHQsbixzKXtsZXQgYT1lLmdlbixyPWUubW9kLEk9MCxvPTA7Zm9yKGxldCBnIG9mIHMpZm9yKGxldCBCPTA7QjxnLnpvbmVzQ291bnQ7QisrKXtsZXQgZD1hW28rK10saD1hW29dLEM9QS5zbGljZShkLGgpLFE9cltJKytdLG09cltJXSx5PXQuc2xpY2UoUSxtKTtDLmZpbmQoRj0+Ri5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSE9PXZvaWQgMD9nLmNyZWF0ZVNvdW5kRm9udFpvbmUoeSxDLG4pOihnLmdsb2JhbFpvbmUuYWRkR2VuZXJhdG9ycyguLi5DKSxnLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyguLi55KSl9fXZhciBOcj1jbGFzcyBleHRlbmRzIHBle3pvbmVTdGFydEluZGV4O3pvbmVzQ291bnQ9MDtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKEEpLHRoaXMubmFtZT1oQShlLmRhdGEsMjApLnJlcGxhY2UoL1xkezN9OlxkezN9LywiIiksdGhpcy5wcm9ncmFtPU4oZS5kYXRhLDIpO2xldCB0PU4oZS5kYXRhLDIpO3RoaXMuYmFua01TQj10JjEyNyx0aGlzLmlzR01HU0RydW09KHQmMTI4KT4wLHRoaXMuYmFua0xTQj10Pj44LHRoaXMuem9uZVN0YXJ0SW5kZXg9TihlLmRhdGEsMiksdGhpcy5saWJyYXJ5PU4oZS5kYXRhLDQpLHRoaXMuZ2VucmU9TihlLmRhdGEsNCksdGhpcy5tb3JwaG9sb2d5PU4oZS5kYXRhLDQpfWNyZWF0ZVNvdW5kRm9udFpvbmUoZSxBLHQpe2xldCBuPW5ldyB2cih0aGlzLGUsQSx0KTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKG4pLG59fTtmdW5jdGlvbiBVcyhlLEEpe2xldCB0PVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IG49bmV3IE5yKGUsQSk7aWYodC5sZW5ndGg+MCl7bGV0IHM9dFt0Lmxlbmd0aC0xXTtzLnpvbmVzQ291bnQ9bi56b25lU3RhcnRJbmRleC1zLnpvbmVTdGFydEluZGV4fXQucHVzaChuKX1yZXR1cm4gdC5wb3AoKSx0fXZhciBVcj1jbGFzcyBleHRlbmRzIGhhe2NvbnN0cnVjdG9yKGUsQSx0LG4pe2xldCBzPXQuZmluZChyPT5yLmdlbmVyYXRvclR5cGU9PT1pLnNhbXBsZUlEKSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBzYW1wbGUgSUQgZm91bmQgaW4gaW5zdHJ1bWVudCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzYW1wbGUgSUQ6ICR7cy5nZW5lcmF0b3JWYWx1ZX0sIGF2YWlsYWJsZSBzYW1wbGVzOiAke24ubGVuZ3RofWApO3N1cGVyKGUsYSksdGhpcy5hZGRHZW5lcmF0b3JzKC4uLnQpLHRoaXMuYWRkTW9kdWxhdG9ycyguLi5BKX19O2Z1bmN0aW9uIFRyKGUsQSx0LG4scyl7bGV0IGE9ZS5nZW4scj1lLm1vZCxJPTAsbz0wO2ZvcihsZXQgZyBvZiBzKWZvcihsZXQgQj0wO0I8Zy56b25lc0NvdW50O0IrKyl7bGV0IGQ9YVtvKytdLGg9YVtvXSxDPUEuc2xpY2UoZCxoKSxRPXJbSSsrXSxtPXJbSV0seT10LnNsaWNlKFEsbSk7Qy5maW5kKEY9PkYuZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlSUQpP2cuY3JlYXRlU291bmRGb250Wm9uZSh5LEMsbik6KGcuZ2xvYmFsWm9uZS5hZGRHZW5lcmF0b3JzKC4uLkMpLGcuZ2xvYmFsWm9uZS5hZGRNb2R1bGF0b3JzKC4uLnkpKX19dmFyIHhyPWNsYXNzIGV4dGVuZHMgZHR7em9uZVN0YXJ0SW5kZXg7em9uZXNDb3VudD0wO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5uYW1lPWhBKGUuZGF0YSwyMCksdGhpcy56b25lU3RhcnRJbmRleD1OKGUuZGF0YSwyKX1jcmVhdGVTb3VuZEZvbnRab25lKGUsQSx0KXtsZXQgbj1uZXcgVXIodGhpcyxlLEEsdCk7cmV0dXJuIHRoaXMuem9uZXMucHVzaChuKSxufX07ZnVuY3Rpb24gVHMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgdD1uZXcgeHIoZSk7aWYoQS5sZW5ndGg+MCl7bGV0IG49QVtBLmxlbmd0aC0xXTtuLnpvbmVzQ291bnQ9dC56b25lU3RhcnRJbmRleC1uLnpvbmVTdGFydEluZGV4fUEucHVzaCh0KX1yZXR1cm4gQS5wb3AoKSxBfWZ1bmN0aW9uIEduKGUpe2xldCBBPVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IHQ9ZS5kYXRhLG49Tih0LDIpLHM9Tih0LDIpLGE9am4odFt0LmN1cnJlbnRJbmRleCsrXSx0W3QuY3VycmVudEluZGV4KytdKSxyPU4odCwyKSxJPU4odCwyKTtBLnB1c2gobmV3IHlBKG4scixzLGEsSSkpfXJldHVybiBBLnBvcCgpLEF9ZnVuY3Rpb24gYnQoZSl7bGV0IEE9W10sdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKE4oZS5kYXRhLDIpKSxBLnB1c2goTihlLmRhdGEsMikpO3JldHVybnttb2Q6QSxnZW46dH19dmFyIEhyPWNsYXNzIGV4dGVuZHMgR2F7c2FtcGxlRGF0YVN0YXJ0SW5kZXg9MDtjb25zdHJ1Y3RvcihlLEE9ITApe2lmKHN1cGVyKCksQSl0aHJvdyBuZXcgRXJyb3IoIlVzaW5nIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseSBpcyBkZXByZWNhdGVkLiBVc2UgU291bmRCYW5rTG9hZGVyLmZyb21BcnJheUJ1ZmZlcigpIGluc3RlYWQuIik7bGV0IHQ9bmV3IFkoZSk7T0EoIiVjUGFyc2luZyBhIFNvdW5kRm9udDIgZmlsZS4uLiIsYy5pbmZvKSx0fHwoWigpLHRoaXMucGFyc2luZ0Vycm9yKCJObyBkYXRhIHByb3ZpZGVkISIpKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJyaWZmIik7bGV0IHM9aEEodCw0KS50b0xvd2VyQ2FzZSgpO2lmKHMhPT0ic2ZiayImJnMhPT0ic2ZwayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJzZmJrIiBvciAic2ZwayIgZ290ICIke3N9ImApO2xldCBhPXM9PT0ic2ZwayIscj1yQSh0KTt0aGlzLnZlcmlmeUhlYWRlcihyLCJsaXN0Iik7bGV0IEk9aEEoci5kYXRhLDQpO2lmKEkhPT0iSU5GTyIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJJTkZPIiBvciAiJHtJfSJgKTtsZXQgbztmb3IoO3IuZGF0YS5sZW5ndGg+ci5kYXRhLmN1cnJlbnRJbmRleDspe2xldCBQPXJBKHIuZGF0YSksRz1lZShQLmRhdGEsUC5kYXRhLmxlbmd0aCksYj1QLmhlYWRlcjtzd2l0Y2goYil7Y2FzZSJpZmlsIjpjYXNlIml2ZXIiOmxldCBLPU4oUC5kYXRhLDIpLGVBPU4oUC5kYXRhLDIpO2I9PT0iaWZpbCI/dGhpcy5zb3VuZEJhbmtJbmZvLnZlcnNpb249e21ham9yOkssbWlub3I6ZUF9OnRoaXMuc291bmRCYW5rSW5mby5yb21WZXJzaW9uPXttYWpvcjpLLG1pbm9yOmVBfTticmVhaztjYXNlIkRNT0QiOnt0aGlzLmRlZmF1bHRNb2R1bGF0b3JzPUduKFApLHRoaXMuY3VzdG9tRGVmYXVsdE1vZHVsYXRvcnM9ITA7YnJlYWt9Y2FzZSJMSVNUIjp7aEEoUC5kYXRhLDQpPT09InhkdGEiJiYocCgiJWNFeHRlbmRlZCBTRjIgZm91bmQhIixjLnJlY29nbml6ZWQpLG89UCk7YnJlYWt9Y2FzZSJJQ1JEIjp0aGlzLnNvdW5kQmFua0luZm8uY3JlYXRpb25EYXRlPXRzKGhBKFAuZGF0YSxQLmRhdGEubGVuZ3RoKSk7YnJlYWs7Y2FzZSJJU0ZUIjp0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9RzticmVhaztjYXNlIklQUkQiOnRoaXMuc291bmRCYW5rSW5mby5wcm9kdWN0PUc7YnJlYWs7Y2FzZSJJRU5HIjp0aGlzLnNvdW5kQmFua0luZm8uZW5naW5lZXI9RzticmVhaztjYXNlIklDT1AiOnRoaXMuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9RzticmVhaztjYXNlIklOQU0iOnRoaXMuc291bmRCYW5rSW5mby5uYW1lPUc7YnJlYWs7Y2FzZSJJQ01UIjp0aGlzLnNvdW5kQmFua0luZm8uY29tbWVudD1HO2JyZWFrO2Nhc2UiaXJvbSI6dGhpcy5zb3VuZEJhbmtJbmZvLnJvbUluZm89RzticmVhaztjYXNlImlzbmciOnRoaXMuc291bmRCYW5rSW5mby5zb3VuZEVuZ2luZT1HfX10aGlzLnByaW50SW5mbygpO2xldCBnPXt9O28hPT12b2lkIDAmJihnLnBoZHI9ckEoby5kYXRhKSxnLnBiYWc9ckEoby5kYXRhKSxnLnBtb2Q9ckEoby5kYXRhKSxnLnBnZW49ckEoby5kYXRhKSxnLmluc3Q9ckEoby5kYXRhKSxnLmliYWc9ckEoby5kYXRhKSxnLmltb2Q9ckEoby5kYXRhKSxnLmlnZW49ckEoby5kYXRhKSxnLnNoZHI9ckEoby5kYXRhKSk7bGV0IEI9ckEodCwhMSk7dGhpcy52ZXJpZnlIZWFkZXIoQiwibGlzdCIpLHRoaXMudmVyaWZ5VGV4dChoQSh0LDQpLCJzZHRhIikscCgiJWNWZXJpZnlpbmcgc21wbCBjaHVuay4uLiIsYy53YXJuKTtsZXQgZD1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihkLCJzbXBsIik7bGV0IGg7aWYoYSl7cCgiJWNTRjJQYWNrIGRldGVjdGVkLCBhdHRlbXB0aW5nIHRvIGRlY29kZSB0aGUgc21wbCBjaHVuay4uLiIsYy5pbmZvKTt0cnl7aD1PdC5kZWNvZGUodC5idWZmZXIuc2xpY2UodC5jdXJyZW50SW5kZXgsdC5jdXJyZW50SW5kZXgrQi5zaXplLTEyKSkuZGF0YVswXX1jYXRjaChQKXt0aHJvdyBaKCksbmV3IEVycm9yKGBTRjJQYWNrIE9nZyBWb3JiaXMgZGVjb2RlIGVycm9yOiAke1B9YCl9cChgJWNEZWNvZGVkIHRoZSBzbXBsIGNodW5rISBMZW5ndGg6ICVjJHtoLmxlbmd0aH1gLGMuaW5mbyxjLnZhbHVlKX1lbHNlIGg9dCx0aGlzLnNhbXBsZURhdGFTdGFydEluZGV4PXQuY3VycmVudEluZGV4O3AoYCVjU2tpcHBpbmcgc2FtcGxlIGNodW5rLCBsZW5ndGg6ICVjJHtCLnNpemUtMTJ9YCxjLmluZm8sYy52YWx1ZSksdC5jdXJyZW50SW5kZXgrPUIuc2l6ZS0xMixwKCIlY0xvYWRpbmcgcHJlc2V0IGRhdGEgY2h1bmsuLi4iLGMud2Fybik7bGV0IEM9ckEodCk7dGhpcy52ZXJpZnlIZWFkZXIoQywibGlzdCIpLGhBKEMuZGF0YSw0KTtsZXQgUT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKFEsInBoZHIiKTtsZXQgbT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKG0sInBiYWciKTtsZXQgeT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHksInBtb2QiKTtsZXQgRj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEYsInBnZW4iKTtsZXQgaz1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKGssImluc3QiKTtsZXQgRD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEQsImliYWciKTtsZXQgdj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHYsImltb2QiKTtsZXQgTD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEwsImlnZW4iKTtsZXQgRT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEUsInNoZHIiKSxwKCIlY1BhcnNpbmcgc2FtcGxlcy4uLiIsYy5pbmZvKSx0LmN1cnJlbnRJbmRleD10aGlzLnNhbXBsZURhdGFTdGFydEluZGV4O2xldCBYPWJzKEUsaCxvPT09dm9pZCAwKTtpZihvJiZnLnNoZHIpe2xldCBQPWJzKGcuc2hkcixuZXcgRmxvYXQzMkFycmF5KDEpLCExKTtQLmxlbmd0aD09PVgubGVuZ3RoJiZYLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLmxpbmtlZFNhbXBsZUluZGV4fD1QW2JdLmxpbmtlZFNhbXBsZUluZGV4PDwxNn0pfVguZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5zYW1wbGVzLnB1c2goLi4uWCk7bGV0IE89TnMoTCksbkE9R24odiksJD1UcyhrKTtpZihvJiZnLmluc3Qpe2xldCBQPVRzKGcuaW5zdCk7UC5sZW5ndGg9PT0kLmxlbmd0aCYmKCQuZm9yRWFjaCgoRyxiKT0+e0cubmFtZSs9UFtiXS5uYW1lLEcuem9uZVN0YXJ0SW5kZXh8PVBbYl0uem9uZVN0YXJ0SW5kZXh9KSwkLmZvckVhY2goKEcsYik9PntiPCQubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9JFtiKzFdLnpvbmVTdGFydEluZGV4LUcuem9uZVN0YXJ0SW5kZXgpfSkpfSQuZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5pbnN0cnVtZW50cy5wdXNoKC4uLiQpO2xldCBWPWJ0KEQpO2lmKG8mJmcuaWJhZyl7bGV0IFA9YnQoZy5pYmFnKTtmb3IobGV0IEc9MDtHPFYubW9kLmxlbmd0aDtHKyspVi5tb2RbR118PVAubW9kW0ddPDwxNjtmb3IobGV0IEc9MDtHPFYuZ2VuLmxlbmd0aDtHKyspVi5nZW5bR118PVAuZ2VuW0ddPDwxNn1UcihWLE8sbkEsdGhpcy5zYW1wbGVzLCQpO2xldCBxPU5zKEYpLHo9R24oeSksdEE9VXMoUSx0aGlzKTtpZihvJiZnLnBoZHIpe2xldCBQPVVzKGcucGhkcix0aGlzKTtQLmxlbmd0aD09PXRBLmxlbmd0aCYmKHRBLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLnpvbmVTdGFydEluZGV4fD1QW2JdLnpvbmVTdGFydEluZGV4fSksdEEuZm9yRWFjaCgoRyxiKT0+e2I8dEEubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9dEFbYisxXS56b25lU3RhcnRJbmRleC1HLnpvbmVTdGFydEluZGV4KX0pKX10QS5mb3JFYWNoKFA9PlAubmFtZT09PVAubmFtZS50cmltKCkpLHRoaXMuYWRkUHJlc2V0cyguLi50QSk7bGV0IGlBPWJ0KG0pO2lmKG8mJmcucGJhZyl7bGV0IFA9YnQoZy5wYmFnKTtmb3IobGV0IEc9MDtHPGlBLm1vZC5sZW5ndGg7RysrKWlBLm1vZFtHXXw9UC5tb2RbR108PDE2O2ZvcihsZXQgRz0wO0c8aUEuZ2VuLmxlbmd0aDtHKyspaUEuZ2VuW0ddfD1QLmdlbltHXTw8MTZ9THIoaUEscSx6LHRoaXMuaW5zdHJ1bWVudHMsdEEpLHRoaXMuZmx1c2goKSxwKGAlY1BhcnNpbmcgZmluaXNoZWQhICVjIiR7dGhpcy5zb3VuZEJhbmtJbmZvLm5hbWV9IiVjIGhhcyAlYyR7dGhpcy5wcmVzZXRzLmxlbmd0aH0lYyBwcmVzZXRzLAogICAgICAgICVjJHt0aGlzLmluc3RydW1lbnRzLmxlbmd0aH0lYyBpbnN0cnVtZW50cyBhbmQgJWMke3RoaXMuc2FtcGxlcy5sZW5ndGh9JWMgc2FtcGxlcy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCl9dmVyaWZ5SGVhZGVyKGUsQSl7ZS5oZWFkZXIudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBjaHVuayBoZWFkZXIhIEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLmhlYWRlci50b0xvd2VyQ2FzZSgpfSJgKSl9dmVyaWZ5VGV4dChlLEEpe2UudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBGb3VyQ0M6IEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLnRvTG93ZXJDYXNlKCl9IlxgYCkpfX0sdXQ9Y2xhc3N7c3RhdGljIGZyb21BcnJheUJ1ZmZlcihlKXtsZXQgQT1lLnNsaWNlKDgsMTIpLHQ9bmV3IFkoQSk7cmV0dXJuIGhBKHQsNCkudG9Mb3dlckNhc2UoKT09PSJkbHMgIj90aGlzLmxvYWRETFMoZSk6bmV3IEhyKGUsITEpfXN0YXRpYyBsb2FkRExTKGUpe3JldHVybiBGYS5yZWFkKGUpLnRvU0YoKX19LFJhPWNsYXNze3NvdW5kQmFua01hbmFnZXI9bmV3IFBvKHRoaXMudXBkYXRlUHJlc2V0TGlzdC5iaW5kKHRoaXMpKTttaWRpQ2hhbm5lbHM9W107a2V5TW9kaWZpZXJNYW5hZ2VyPW5ldyBBcjt0b3RhbFZvaWNlc0Ftb3VudD0wO3Byb2Nlc3NvckluaXRpYWxpemVkPU90LmlzSW5pdGlhbGl6ZWQ7Y3VycmVudFN5bnRoVGltZT0wO3NhbXBsZVJhdGU7ZW5hYmxlRWZmZWN0cz0hMDtlbmFibGVFdmVudFN5c3RlbTtvbkV2ZW50Q2FsbDtzeXN0ZW1FeGNsdXNpdmU9JG8uYmluZCh0aGlzKTtyZXNldEFsbENvbnRyb2xsZXJzPVNvLmJpbmQodGhpcyk7c2V0TWFzdGVyUGFyYW1ldGVyPXZvLmJpbmQodGhpcyk7Z2V0TWFzdGVyUGFyYW1ldGVyPUxvLmJpbmQodGhpcyk7Z2V0QWxsTWFzdGVyUGFyYW1ldGVycz1Oby5iaW5kKHRoaXMpO2dldFZvaWNlc0ZvclByZXNldD1fby5iaW5kKHRoaXMpO2tpbGxWb2ljZXM9Wm8uYmluZCh0aGlzKTtnZXRWb2ljZXM9am8uYmluZCh0aGlzKTtwcml2YXRlUHJvcHM7c2F2ZWRTbmFwc2hvdDtldmVudFF1ZXVlPVtdO3NhbXBsZVRpbWU7Y29uc3RydWN0b3IoZSxBPUZzKXtsZXQgdD0kbihBLEZzKTtpZih0aGlzLmVuYWJsZUVmZmVjdHM9dC5lbmFibGVFZmZlY3RzLHRoaXMuZW5hYmxlRXZlbnRTeXN0ZW09dC5lbmFibGVFdmVudFN5c3RlbSx0aGlzLmN1cnJlbnRTeW50aFRpbWU9dC5pbml0aWFsVGltZSx0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLnNhbXBsZVRpbWU9MS9lLGlzTmFOKHQuaW5pdGlhbFRpbWUpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkluaXRpYWwgdGltZSBvciBzYW1wbGUgcmF0ZSBpcyBOYU4hIik7dGhpcy5wcml2YXRlUHJvcHM9bmV3IHRyKHRoaXMuY2FsbEV2ZW50LmJpbmQodGhpcyksdGhpcy5nZXRWb2ljZXMuYmluZCh0aGlzKSx0aGlzLmtpbGxWb2ljZXMuYmluZCh0aGlzKSxNbyooNDQxMDAvZSksSm8qKDQ0MTAwL2UpLFZvKig0NDEwMC9lKSk7Zm9yKGxldCBuPTA7bjxSbjtuKyspdGhpcy5jcmVhdGVNSURJQ2hhbm5lbEludGVybmFsKCExKTt0aGlzLnByb2Nlc3NvckluaXRpYWxpemVkLnRoZW4oKCk9PntwKCIlY1NwZXNzYVN5bnRoIGlzIHJlYWR5ISIsYy5yZWNvZ25pemVkKX0pfWFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdChlKXt0aGlzLnNhdmVkU25hcHNob3Q9ZSxlLmFwcGx5KHRoaXMpLHAoIiVjRmluaXNoZWQgYXBwbHlpbmcgc25hcHNob3QhIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpfWdldFNuYXBzaG90KCl7cmV0dXJuIHJzLmNyZWF0ZSh0aGlzKX1zZXRFbWJlZGRlZFNvdW5kQmFuayhlLEEpe2xldCB0PXV0LmZyb21BcnJheUJ1ZmZlcihlKTt0aGlzLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHQsUnQsQSk7bGV0IG49dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnByaW9yaXR5T3JkZXI7bi5wb3AoKSxuLnVuc2hpZnQoUnQpLHRoaXMuc291bmRCYW5rTWFuYWdlci5wcmlvcml0eU9yZGVyPW4sdGhpcy5zYXZlZFNuYXBzaG90IT09dm9pZCAwJiZ0aGlzLmFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdCh0aGlzLnNhdmVkU25hcHNob3QpLHAoYCVjRW1iZWRkZWQgc291bmQgYmFuayBzZXQgYXQgb2Zmc2V0ICVjJHtBfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpfWNsZWFyRW1iZWRkZWRCYW5rKCl7dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnNvdW5kQmFua0xpc3Quc29tZShlPT5lLmlkPT09UnQpJiZ0aGlzLnNvdW5kQmFua01hbmFnZXIuZGVsZXRlU291bmRCYW5rKFJ0KX1jcmVhdGVNSURJQ2hhbm5lbCgpe3RoaXMuY3JlYXRlTUlESUNoYW5uZWxJbnRlcm5hbCghMCl9c3RvcEFsbENoYW5uZWxzKGU9ITEpe3AoIiVjU3RvcCBhbGwgcmVjZWl2ZWQhIixjLmluZm8pO2ZvcihsZXQgQSBvZiB0aGlzLm1pZGlDaGFubmVscylBLnN0b3BBbGxOb3RlcyhlKX1yZW5kZXJBdWRpbyhlLEEsdCxuPTAscz0wKXt0aGlzLnJlbmRlckF1ZGlvU3BsaXQoQSx0LEFycmF5KDE2KS5maWxsKGUpLG4scyl9cmVuZGVyQXVkaW9TcGxpdChlLEEsdCxuPTAscz0wKXtsZXQgYT10aGlzLmN1cnJlbnRTeW50aFRpbWU7Zm9yKDt0aGlzLmV2ZW50UXVldWVbMF0/LnRpbWU8PWE7KXRoaXMuZXZlbnRRdWV1ZS5zaGlmdCgpPy5jYWxsYmFjaygpO2xldCByPWVbMF0sST1lWzFdLG89QVswXSxnPUFbMV07bj1NYXRoLm1heChuLDApO2xldCBCPXN8fHRbMF1bMF0ubGVuZ3RoLW47dGhpcy50b3RhbFZvaWNlc0Ftb3VudD0wLHRoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goKGQsaCk9PntpZihkLnZvaWNlcy5sZW5ndGg8MXx8ZC5pc011dGVkKXJldHVybjtsZXQgQz1kLnZvaWNlcy5sZW5ndGgsUT1oJTE2O2QucmVuZGVyQXVkaW8odFtRXVswXSx0W1FdWzFdLHIsSSxvLGcsbixCKSx0aGlzLnRvdGFsVm9pY2VzQW1vdW50Kz1kLnZvaWNlcy5sZW5ndGgsZC52b2ljZXMubGVuZ3RoIT09QyYmZC5zZW5kQ2hhbm5lbFByb3BlcnR5KCl9KSx0aGlzLmN1cnJlbnRTeW50aFRpbWUrPUIqdGhpcy5zYW1wbGVUaW1lfWRlc3Ryb3lTeW50aFByb2Nlc3Nvcigpe3RoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goZT0+e2Uudm9pY2VzLmxlbmd0aD0wLGUuc3VzdGFpbmVkVm9pY2VzLmxlbmd0aD0wLGUubG9ja2VkQ29udHJvbGxlcnM9W10sZS5wcmVzZXQ9dm9pZCAwfSksdGhpcy5jbGVhckNhY2hlKCksdGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoPTAsdGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmRlc3Ryb3koKX1jb250cm9sbGVyQ2hhbmdlKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5jb250cm9sbGVyQ2hhbmdlKEEsdCl9bm90ZU9uKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5ub3RlT24oQSx0KX1ub3RlT2ZmKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ubm90ZU9mZihBKX1wb2x5UHJlc3N1cmUoZSxBLHQpe3RoaXMubWlkaUNoYW5uZWxzW2VdLnBvbHlQcmVzc3VyZShBLHQpfWNoYW5uZWxQcmVzc3VyZShlLEEpe3RoaXMubWlkaUNoYW5uZWxzW2VdLmNoYW5uZWxQcmVzc3VyZShBKX1waXRjaFdoZWVsKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucGl0Y2hXaGVlbChBKX1wcm9ncmFtQ2hhbmdlKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucHJvZ3JhbUNoYW5nZShBKX1wcm9jZXNzTWVzc2FnZShlLEE9MCx0PSExLG49WmEpe2xldCBzPSgpPT57bGV0IHI9QXMoZVswXSksST1yLmNoYW5uZWwrQTtzd2l0Y2goci5zdGF0dXMpe2Nhc2UgTS5ub3RlT246e2xldCBvPWVbMl07bz4wP3RoaXMubm90ZU9uKEksZVsxXSxvKTp0aGlzLm5vdGVPZmYoSSxlWzFdKTticmVha31jYXNlIE0ubm90ZU9mZjp0P3RoaXMubWlkaUNoYW5uZWxzW0ldLmtpbGxOb3RlKGVbMV0pOnRoaXMubm90ZU9mZihJLGVbMV0pO2JyZWFrO2Nhc2UgTS5waXRjaFdoZWVsOnRoaXMucGl0Y2hXaGVlbChJLGVbMl08PDd8ZVsxXSk7YnJlYWs7Y2FzZSBNLmNvbnRyb2xsZXJDaGFuZ2U6dGhpcy5jb250cm9sbGVyQ2hhbmdlKEksZVsxXSxlWzJdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTp0aGlzLnByb2dyYW1DaGFuZ2UoSSxlWzFdKTticmVhaztjYXNlIE0ucG9seVByZXNzdXJlOnRoaXMucG9seVByZXNzdXJlKEksZVswXSxlWzFdKTticmVhaztjYXNlIE0uY2hhbm5lbFByZXNzdXJlOnRoaXMuY2hhbm5lbFByZXNzdXJlKEksZVsxXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5c3RlbUV4Y2x1c2l2ZShuZXcgWShlLnNsaWNlKDEpKSxBKTticmVhaztjYXNlIE0ucmVzZXQ6dGhpcy5zdG9wQWxsQ2hhbm5lbHMoITApLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fSxhPW4udGltZTthPnRoaXMuY3VycmVudFN5bnRoVGltZT8odGhpcy5ldmVudFF1ZXVlLnB1c2goe2NhbGxiYWNrOnMuYmluZCh0aGlzKSx0aW1lOmF9KSx0aGlzLmV2ZW50UXVldWUuc29ydCgocixJKT0+ci50aW1lLUkudGltZSkpOnMoKX1jbGVhckNhY2hlKCl7dGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzPVtdfXNldE1JRElWb2x1bWUoZSl7dGhpcy5wcml2YXRlUHJvcHMubWlkaVZvbHVtZT1NYXRoLnBvdyhlLE1hdGguRSl9c2V0TWFzdGVyVHVuaW5nKGUpe2U9TWF0aC5yb3VuZChlKTtmb3IobGV0IEEgb2YgdGhpcy5taWRpQ2hhbm5lbHMpQS5zZXRDdXN0b21Db250cm9sbGVyKElBLm1hc3RlclR1bmluZyxlKX1jYWxsRXZlbnQoZSxBKXt0aGlzLm9uRXZlbnRDYWxsPy4oe3R5cGU6ZSxkYXRhOkF9KX1nZXRDYWNoZWRWb2ljZShlLEEsdCl7bGV0IG49ZS5iYW5rTVNCLHM9ZS5iYW5rTFNCLHtpc0dNR1NEcnVtOmEscHJvZ3JhbTpyfT1lO3JldHVybiBhJiYobj0xMjgscz0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXM/LltuXT8uW3NdPy5bcl0/LltBXT8uW3RdfXNldENhY2hlZFZvaWNlKGUsQSx0LG4pe2xldCBzPWUuYmFua01TQixhPWUuYmFua0xTQix7aXNHTUdTRHJ1bTpyLHByb2dyYW06SX09ZTtyJiYocz0xMjgsYT0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc118fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc109W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXXx8KHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXT1bXSksdGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldfHwodGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldPVtdKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV18fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV09W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXVtJXVtBXVt0XT1ufWNyZWF0ZU1JRElDaGFubmVsSW50ZXJuYWwoZSl7bGV0IEE9bmV3IFFyKHRoaXMsdGhpcy5wcml2YXRlUHJvcHMsdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCx0aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpO3RoaXMubWlkaUNoYW5uZWxzLnB1c2goQSksZSYmKHRoaXMuY2FsbEV2ZW50KCJuZXdDaGFubmVsIix2b2lkIDApLEEuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMubWlkaUNoYW5uZWxzW3RoaXMubWlkaUNoYW5uZWxzLmxlbmd0aC0xXS5zZXREcnVtcyghMCkpfXVwZGF0ZVByZXNldExpc3QoKXtsZXQgZT10aGlzLnNvdW5kQmFua01hbmFnZXIucHJlc2V0TGlzdDt0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInByZXNldExpc3RDaGFuZ2UiLGUpLHRoaXMuZ2V0RGVmYXVsdFByZXNldHMoKSx0aGlzLm1pZGlDaGFubmVscy5mb3JFYWNoKEE9PntBLnNldFByZXNldExvY2soITEpfSksdGhpcy5yZXNldEFsbENvbnRyb2xsZXJzKCExKX1nZXREZWZhdWx0UHJlc2V0cygpe3RoaXMucHJpdmF0ZVByb3BzLmRlZmF1bHRQcmVzZXQ9dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmdldFByZXNldCh7YmFua0xTQjowLGJhbmtNU0I6MCxwcm9ncmFtOjAsaXNHTUdTRHJ1bTohMX0sInhnIiksdGhpcy5wcml2YXRlUHJvcHMuZHJ1bVByZXNldD10aGlzLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHtiYW5rTFNCOjAsYmFua01TQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiEwfSwiZ3MiKX19O3ZhciB6dD1FZS5jb25zb2xlQ29sb3JzO3ZhciBNYT0ic3Blc3Nhc3ludGgtd29ya2xldC1wcm9jZXNzb3IiO2Z1bmN0aW9uIGJhKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fXZhciB2YT17c2tpcFRvRmlyc3ROb3RlT246ITAsaW5pdGlhbFBsYXliYWNrUmF0ZToxfTt2YXIgaXM9Y2xhc3MgZXh0ZW5kcyBLdHtldmVudHM9W107Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5RnJvbShBKSx0aGlzLmV2ZW50cz1bXX19LFd0PWNsYXNzIGV4dGVuZHMgTGV7dHJhY2tzO2VtYmVkZGVkU291bmRCYW5rPXZvaWQgMDtlbWJlZGRlZFNvdW5kQmFua1NpemU7Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMudHJhY2tzPUEudHJhY2tzLm1hcCh0PT5uZXcgaXModCkpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbmtTaXplPUE/LmVtYmVkZGVkU291bmRCYW5rPy5ieXRlTGVuZ3RofX07dmFyIF90PXtzaHVmZmxlT246MSxzaHVmZmxlT2ZmOjIsaW5kZXg6M307dmFyIGp0PWNsYXNze3N5bnRoZXNpemVyO3NlcXVlbmNlcjtwb3N0O2FsaXZlPSExO2NvbnN0cnVjdG9yKEEsdCxuKXt0aGlzLnN5bnRoZXNpemVyPW5ldyBSYShBLHQpLHRoaXMuc2VxdWVuY2VyPW5ldyBzYSh0aGlzLnN5bnRoZXNpemVyKSx0aGlzLnBvc3Q9bix0aGlzLnN5bnRoZXNpemVyLm9uRXZlbnRDYWxsPXM9Pnt0aGlzLnBvc3Qoe3R5cGU6ImV2ZW50Q2FsbCIsZGF0YTpzLGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0pfSx0aGlzLnNlcXVlbmNlci5vbkV2ZW50Q2FsbD1zPT57aWYocy50eXBlPT09InNvbmdMaXN0Q2hhbmdlIil7bGV0IHI9cy5kYXRhLm5ld1NvbmdMaXN0Lm1hcChJPT5uZXcgV3QoSSkpO3RoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOnMudHlwZSxkYXRhOntuZXdTb25nTGlzdDpyfX0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSk7cmV0dXJufXRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnMsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fXBvc3RSZWFkeShBLHQsbj1bXSl7dGhpcy5wb3N0KHt0eXBlOiJpc0Z1bGx5SW5pdGlhbGl6ZWQiLGRhdGE6e3R5cGU6QSxkYXRhOnR9LGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0sbil9cG9zdFByb2dyZXNzKEEsdCl7dGhpcy5wb3N0KHt0eXBlOiJyZW5kZXJpbmdQcm9ncmVzcyIsZGF0YTp7dHlwZTpBLGRhdGE6dH0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9ZGVzdHJveSgpe3RoaXMuc3ludGhlc2l6ZXIuZGVzdHJveVN5bnRoUHJvY2Vzc29yKCksZGVsZXRlIHRoaXMuc3ludGhlc2l6ZXIsZGVsZXRlIHRoaXMuc2VxdWVuY2VyfWhhbmRsZU1lc3NhZ2UoQSl7bGV0IHQ9QS5jaGFubmVsTnVtYmVyLG47aWYodD49MCYmKG49dGhpcy5zeW50aGVzaXplci5taWRpQ2hhbm5lbHNbdF0sbj09PXZvaWQgMCkpe0VlLlNwZXNzYVN5bnRoV2FybihgVHJ5aW5nIHRvIGFjY2VzcyBjaGFubmVsICR7dH0gd2hpY2ggZG9lcyBub3QgZXhpc3QuLi4gaWdub3JpbmchYCk7cmV0dXJufXN3aXRjaChBLnR5cGUpe2Nhc2UibWlkaU1lc3NhZ2UiOnRoaXMuc3ludGhlc2l6ZXIucHJvY2Vzc01lc3NhZ2UoQS5kYXRhLm1lc3NhZ2VEYXRhLEEuZGF0YS5jaGFubmVsT2Zmc2V0LEEuZGF0YS5mb3JjZSxBLmRhdGEub3B0aW9ucyk7YnJlYWs7Y2FzZSJjdXN0b21DY0NoYW5nZSI6bj8uc2V0Q3VzdG9tQ29udHJvbGxlcihBLmRhdGEuY2NOdW1iZXIsQS5kYXRhLmNjVmFsdWUpO2JyZWFrO2Nhc2UiY2NSZXNldCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIucmVzZXRBbGxDb250cm9sbGVycygpOm4/LnJlc2V0Q29udHJvbGxlcnMoKTticmVhaztjYXNlInNldENoYW5uZWxWaWJyYXRvIjppZih0PT09QmUpZm9yKGxldCBzIG9mIHRoaXMuc3ludGhlc2l6ZXIubWlkaUNoYW5uZWxzKUEuZGF0YS5yYXRlPT09QmU/cy5kaXNhYmxlQW5kTG9ja0dTTlJQTigpOnMuc2V0VmlicmF0byhBLmRhdGEuZGVwdGgsQS5kYXRhLnJhdGUsQS5kYXRhLmRlbGF5KTtlbHNlIEEuZGF0YS5yYXRlPT09QmU/bj8uZGlzYWJsZUFuZExvY2tHU05SUE4oKTpuPy5zZXRWaWJyYXRvKEEuZGF0YS5kZXB0aCxBLmRhdGEucmF0ZSxBLmRhdGEuZGVsYXkpO2JyZWFrO2Nhc2Uic3RvcEFsbCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIuc3RvcEFsbENoYW5uZWxzKEEuZGF0YT09PTEpOm4/LnN0b3BBbGxOb3RlcyhBLmRhdGE9PT0xKTticmVhaztjYXNlImtpbGxOb3RlcyI6dGhpcy5zeW50aGVzaXplci5raWxsVm9pY2VzKEEuZGF0YSk7YnJlYWs7Y2FzZSJtdXRlQ2hhbm5lbCI6bj8ubXV0ZUNoYW5uZWwoQS5kYXRhKTticmVhaztjYXNlImFkZE5ld0NoYW5uZWwiOnRoaXMuc3ludGhlc2l6ZXIuY3JlYXRlTUlESUNoYW5uZWwoKTticmVhaztjYXNlInNldE1hc3RlclBhcmFtZXRlciI6dGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoQS5kYXRhLnR5cGUsQS5kYXRhLmRhdGEpO2JyZWFrO2Nhc2Uic2V0RHJ1bXMiOm4/LnNldERydW1zKEEuZGF0YSk7YnJlYWs7Y2FzZSJ0cmFuc3Bvc2VDaGFubmVsIjpuPy50cmFuc3Bvc2VDaGFubmVsKEEuZGF0YS5zZW1pdG9uZXMsQS5kYXRhLmZvcmNlKTticmVhaztjYXNlImxvY2tDb250cm9sbGVyIjppZihBLmRhdGEuY29udHJvbGxlck51bWJlcj09PUJlKW4/LnNldFByZXNldExvY2soQS5kYXRhLmlzTG9ja2VkKTtlbHNle2lmKCFuKXJldHVybjtuLmxvY2tlZENvbnRyb2xsZXJzW0EuZGF0YS5jb250cm9sbGVyTnVtYmVyXT1BLmRhdGEuaXNMb2NrZWR9YnJlYWs7Y2FzZSJzZXF1ZW5jZXJTcGVjaWZpYyI6e2lmKCF0aGlzLnNlcXVlbmNlcilyZXR1cm47bGV0IHM9dGhpcy5zZXF1ZW5jZXIsYT1BLmRhdGE7c3dpdGNoKGEudHlwZSl7ZGVmYXVsdDpicmVhaztjYXNlImxvYWROZXdTb25nTGlzdCI6dHJ5e2xldCBJPWEuZGF0YS5tYXAobz0+ImR1cmF0aW9uImluIG8/TGUuY29weUZyb20obyk6TGUuZnJvbUFycmF5QnVmZmVyKG8uYmluYXJ5LG8uZmlsZU5hbWUpKTtzLmxvYWROZXdTb25nTGlzdChJKX1jYXRjaChyKXtjb25zb2xlLmVycm9yKHIpLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6cn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9YnJlYWs7Y2FzZSJwYXVzZSI6cy5wYXVzZSgpO2JyZWFrO2Nhc2UicGxheSI6cy5wbGF5KCk7YnJlYWs7Y2FzZSJzZXRUaW1lIjpzLmN1cnJlbnRUaW1lPWEuZGF0YTticmVhaztjYXNlImNoYW5nZU1JRElNZXNzYWdlU2VuZGluZyI6cy5leHRlcm5hbE1JRElQbGF5YmFjaz1hLmRhdGE7YnJlYWs7Y2FzZSJzZXRQbGF5YmFja1JhdGUiOnMucGxheWJhY2tSYXRlPWEuZGF0YTticmVhaztjYXNlInNldExvb3BDb3VudCI6cy5sb29wQ291bnQ9YS5kYXRhO2JyZWFrO2Nhc2UiY2hhbmdlU29uZyI6c3dpdGNoKGEuZGF0YS5jaGFuZ2VUeXBlKXtjYXNlIF90LnNodWZmbGVPZmY6cy5zaHVmZmxlTW9kZT0hMTticmVhaztjYXNlIF90LnNodWZmbGVPbjpzLnNodWZmbGVNb2RlPSEwO2JyZWFrO2Nhc2UgX3QuaW5kZXg6YS5kYXRhLmRhdGEhPT12b2lkIDAmJihjb25zb2xlLmxvZygiSU5ERVgiLGEuZGF0YSkscy5zb25nSW5kZXg9YS5kYXRhLmRhdGEpO2JyZWFrfWJyZWFrO2Nhc2UiZ2V0TUlESSI6aWYoIXMubWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBNSURJIGlzIGxvYWRlZCEiKTt0aGlzLnBvc3Qoe3R5cGU6InNlcXVlbmNlclJldHVybiIsZGF0YTp7dHlwZToiZ2V0TUlESSIsZGF0YTpzLm1pZGlEYXRhfSxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KTticmVhaztjYXNlInNldFNraXBUb0ZpcnN0Tm90ZSI6cy5za2lwVG9GaXJzdE5vdGVPbj1hLmRhdGE7YnJlYWt9YnJlYWt9Y2FzZSJzb3VuZEJhbmtNYW5hZ2VyIjp0cnl7bGV0IHM9dGhpcy5zeW50aGVzaXplci5zb3VuZEJhbmtNYW5hZ2VyLGE9QS5kYXRhLHI7c3dpdGNoKGEudHlwZSl7Y2FzZSJhZGRTb3VuZEJhbmsiOnI9dXQuZnJvbUFycmF5QnVmZmVyKGEuZGF0YS5zb3VuZEJhbmtCdWZmZXIpLHMuYWRkU291bmRCYW5rKHIsYS5kYXRhLmlkLGEuZGF0YS5iYW5rT2Zmc2V0KSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCk7YnJlYWs7Y2FzZSJkZWxldGVTb3VuZEJhbmsiOnMuZGVsZXRlU291bmRCYW5rKGEuZGF0YSksdGhpcy5wb3N0UmVhZHkoInNvdW5kQmFua01hbmFnZXIiLG51bGwpO2JyZWFrO2Nhc2UicmVhcnJhbmdlU291bmRCYW5rcyI6cy5wcmlvcml0eU9yZGVyPWEuZGF0YSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCl9fWNhdGNoKHMpe3RoaXMucG9zdCh7dHlwZToic291bmRCYW5rRXJyb3IiLGRhdGE6cyxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KX1icmVhaztjYXNlImtleU1vZGlmaWVyTWFuYWdlciI6e2xldCBzPUEuZGF0YSxhPXRoaXMuc3ludGhlc2l6ZXIua2V5TW9kaWZpZXJNYW5hZ2VyO3N3aXRjaChzLnR5cGUpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiYWRkTWFwcGluZyI6YS5hZGRNYXBwaW5nKHMuZGF0YS5jaGFubmVsLHMuZGF0YS5taWRpTm90ZSxzLmRhdGEubWFwcGluZyk7YnJlYWs7Y2FzZSJjbGVhck1hcHBpbmdzIjphLmNsZWFyTWFwcGluZ3MoKTticmVhaztjYXNlImRlbGV0ZU1hcHBpbmciOmEuZGVsZXRlTWFwcGluZyhzLmRhdGEuY2hhbm5lbCxzLmRhdGEubWlkaU5vdGUpfWJyZWFrfWNhc2UicmVxdWVzdFN5bnRoZXNpemVyU25hcHNob3QiOntsZXQgcz1ycy5jcmVhdGUodGhpcy5zeW50aGVzaXplcik7dGhpcy5wb3N0UmVhZHkoInN5bnRoZXNpemVyU25hcHNob3QiLHMpO2JyZWFrfWNhc2Uic2V0TG9nTGV2ZWwiOktzKEEuZGF0YS5lbmFibGVJbmZvLEEuZGF0YS5lbmFibGVXYXJuaW5nLEEuZGF0YS5lbmFibGVHcm91cCk7YnJlYWs7Y2FzZSJkZXN0cm95V29ya2xldCI6dGhpcy5hbGl2ZT0hMSx0aGlzLnN5bnRoZXNpemVyLmRlc3Ryb3lTeW50aFByb2Nlc3NvcigpLHRoaXMuZGVzdHJveSgpO2JyZWFrO2RlZmF1bHQ6RWUuU3Blc3NhU3ludGhXYXJuKCJVbnJlY29nbml6ZWQgZXZlbnQhIixBKTticmVha319fTt2YXIgJHQ9Y2xhc3MgZXh0ZW5kcyBqdHthbGl2ZT0hMDtvbmVPdXRwdXRNb2RlO3BvcnQ7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoQSx7ZW5hYmxlRWZmZWN0czohcy5vbmVPdXRwdXQsZW5hYmxlRXZlbnRTeXN0ZW06cz8uZW5hYmxlRXZlbnRTeXN0ZW0saW5pdGlhbFRpbWU6dH0sKGEscik9PntuLnBvc3RNZXNzYWdlKGEscil9KSx0aGlzLnBvcnQ9bix0aGlzLm9uZU91dHB1dE1vZGU9cy5vbmVPdXRwdXQsdGhpcy5zeW50aGVzaXplci5wcm9jZXNzb3JJbml0aWFsaXplZC50aGVuKCgpPT57dGhpcy5wb3J0Lm9ubWVzc2FnZT1hPT50aGlzLmhhbmRsZU1lc3NhZ2UoYS5kYXRhKSx0aGlzLnBvc3RSZWFkeSgic2YzRGVjb2RlciIsbnVsbCl9KX1wcm9jZXNzKEEsdCl7aWYoIXRoaXMuYWxpdmUpcmV0dXJuITE7aWYodGhpcy5zZXF1ZW5jZXIucHJvY2Vzc1RpY2soKSx0aGlzLm9uZU91dHB1dE1vZGUpe2xldCBuPXRbMF0scz1bXTtmb3IobGV0IGE9MDthPDMyO2ErPTIpcy5wdXNoKFtuW2FdLG5bYSsxXV0pO3RoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdChbXSxbXSxzKX1lbHNlIHRoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdCh0WzBdLHRbMV0sdC5zbGljZSgyKSk7cmV0dXJuITB9aGFuZGxlTWVzc2FnZShBKXtpZihBLnR5cGU9PT0ic3RhcnRPZmZsaW5lUmVuZGVyIil7dGhpcy5zdGFydE9mZmxpbmVSZW5kZXIoQS5kYXRhKTtyZXR1cm59c3VwZXIuaGFuZGxlTWVzc2FnZShBKX1zdGFydE9mZmxpbmVSZW5kZXIoQSl7aWYoIXRoaXMuc2VxdWVuY2VyKXJldHVybjtBLnNvdW5kQmFua0xpc3QuZm9yRWFjaCgobixzKT0+e3RyeXt0aGlzLnN5bnRoZXNpemVyLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHV0LmZyb21BcnJheUJ1ZmZlcihuLnNvdW5kQmFua0J1ZmZlciksYGJhbmstJHtzfWAsbi5iYW5rT2Zmc2V0KX1jYXRjaChhKXt0aGlzLnBvc3Qoe3R5cGU6InNvdW5kQmFua0Vycm9yIixkYXRhOmEsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fSksQS5zbmFwc2hvdCE9PXZvaWQgMCYmdGhpcy5zeW50aGVzaXplci5hcHBseVN5bnRoZXNpemVyU25hcHNob3QoQS5zbmFwc2hvdCksRWUuU3Blc3NhU3ludGhJbmZvKCIlY1JlbmRlcmluZyBlbmFibGVkISBTdGFydGluZyByZW5kZXIuIix6dC5pbmZvKSx0aGlzLnNlcXVlbmNlci5sb29wQ291bnQ9QS5sb29wQ291bnQsdGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoInZvaWNlQ2FwIiwxLzApO2xldCB0PWJhKEEuc2VxdWVuY2VyT3B0aW9ucyx2YSk7dGhpcy5zZXF1ZW5jZXIuc2tpcFRvRmlyc3ROb3RlT249dC5za2lwVG9GaXJzdE5vdGVPbix0aGlzLnNlcXVlbmNlci5wbGF5YmFja1JhdGU9dC5pbml0aWFsUGxheWJhY2tSYXRlO3RyeXt0aGlzLnNlcXVlbmNlci5sb2FkTmV3U29uZ0xpc3QoW0xlLmNvcHlGcm9tKEEubWlkaVNlcXVlbmNlKV0pLHRoaXMuc2VxdWVuY2VyLnBsYXkoKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKG4pLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6bn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9dGhpcy5wb3N0UmVhZHkoInN0YXJ0T2ZmbGluZVJlbmRlciIsbnVsbCl9fTt2YXIgSXM9Y2xhc3MgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3J7cHJvY2Vzcztjb3JlO2NvbnN0cnVjdG9yKEEpe3N1cGVyKCksdGhpcy5jb3JlPW5ldyAkdChzYW1wbGVSYXRlLGN1cnJlbnRUaW1lLHRoaXMucG9ydCxBLnByb2Nlc3Nvck9wdGlvbnMpLHRoaXMucHJvY2Vzcz10aGlzLmNvcmUucHJvY2Vzcy5iaW5kKHRoaXMuY29yZSl9fTtyZWdpc3RlclByb2Nlc3NvcihNYSxJcyk7RWUuU3Blc3NhU3ludGhJbmZvKCIlY1Byb2Nlc3NvciBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCEiLHp0LnJlY29nbml6ZWQpOwovLyMgc291cmNlTWFwcGluZ1VSTD1zcGVzc2FzeW50aF9wcm9jZXNzb3IubWluLmpzLm1hcAo=";
|
|
1539
|
+
class MU extends Bl {
|
|
1536
1540
|
constructor(l, U = {}) {
|
|
1537
1541
|
super(l, U), this.synthesizer = null, this.soundfont = null, this.channelCounter = 0, this.partToMidiChannel = /* @__PURE__ */ new Map(), this.midiChannelToPart = /* @__PURE__ */ new Map(), this.individualOutputs = [], this.metronomeAnalyser = null;
|
|
1538
1542
|
}
|
|
@@ -1555,7 +1559,7 @@ class xU extends Bl {
|
|
|
1555
1559
|
if (F >= 15)
|
|
1556
1560
|
throw new Error("Maximum number of musical part channels (15) exceeded. Channel 15 is reserved for metronome.");
|
|
1557
1561
|
this.channelCounter++, this.partToMidiChannel.set(l, F), this.midiChannelToPart.set(F, l);
|
|
1558
|
-
const d = new
|
|
1562
|
+
const d = new CU(
|
|
1559
1563
|
this,
|
|
1560
1564
|
l,
|
|
1561
1565
|
F,
|
|
@@ -1689,7 +1693,7 @@ class xU extends Bl {
|
|
|
1689
1693
|
async _loadAudioWorkletSafely() {
|
|
1690
1694
|
for (let l = 1; l <= 5; l++)
|
|
1691
1695
|
try {
|
|
1692
|
-
await this.audioContext.audioWorklet.addModule(
|
|
1696
|
+
await this.audioContext.audioWorklet.addModule(xU);
|
|
1693
1697
|
return;
|
|
1694
1698
|
} catch (U) {
|
|
1695
1699
|
if (console.warn(`AudioWorklet loading failed (attempt ${l}/5):`, U.message), l === 5)
|
|
@@ -1778,7 +1782,7 @@ class xU extends Bl {
|
|
|
1778
1782
|
return this.metronomeAnalyser;
|
|
1779
1783
|
}
|
|
1780
1784
|
}
|
|
1781
|
-
class
|
|
1785
|
+
class zU extends il {
|
|
1782
1786
|
constructor(l, U, F = {}) {
|
|
1783
1787
|
super(l, U, F), this.currentVolume = F.initialVolume || 1, this.currentInstrument = 0, this.outputGain = null, this.activeSources = /* @__PURE__ */ new Map(), this.synthMode = "sample", this.tinySynthChannel = null, this._setupOutputNode(), F.instrument !== void 0 && this.setInstrument(F.instrument);
|
|
1784
1788
|
}
|
|
@@ -1924,14 +1928,14 @@ class MU extends il {
|
|
|
1924
1928
|
this.outputGain = this.engine._getChannelOutput(this.partId), this.outputGain || (console.warn(`No output gain node for channel ${this.partId}, creating fallback`), this.outputGain = this.engine.audioContext.createGain(), this.outputGain.gain.value = this.currentVolume);
|
|
1925
1929
|
}
|
|
1926
1930
|
}
|
|
1927
|
-
const zU = "/assets/samples/grand_piano.json", IU = "/assets/samples/choir_aahs.json", vU = "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", gU = "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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
|
|
1928
|
-
class
|
|
1931
|
+
const IU = "/assets/samples/grand_piano.json", vU = "/assets/samples/choir_aahs.json", gU = "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", KU = "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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
|
|
1932
|
+
class HU extends Bl {
|
|
1929
1933
|
constructor(l, U = {}) {
|
|
1930
1934
|
super(l, U), this.pianoSamples = null, this.choirSamples = null, this.channelCounter = 0, this.partToChannel = /* @__PURE__ */ new Map(), this.channelOutputs = /* @__PURE__ */ new Map(), this.tinySynth = null, this.tinySynthChannels = /* @__PURE__ */ new Set();
|
|
1931
1935
|
}
|
|
1932
1936
|
async initialize(l = {}) {
|
|
1933
1937
|
this._emitProgress("loading-samples", "Loading audio samples...");
|
|
1934
|
-
const U = l.pianoUrl ||
|
|
1938
|
+
const U = l.pianoUrl || IU, F = l.choirUrl || vU;
|
|
1935
1939
|
this._emitProgress("loading-piano", "Loading piano samples...", 0.1), this.pianoSamples = await this._loadSampleFile(U, !1), this._emitProgress("loading-choir", "Loading choir samples...", 0.5), this.choirSamples = await this._loadSampleFile(F, !0), this._emitProgress("loading-metronome", "Loading metronome sounds...", 0.9), await this._loadEmbeddedMetronomeSounds(), this._emitProgress("ready", "Audio engine ready", 1), this.isInitialized = !0;
|
|
1936
1940
|
}
|
|
1937
1941
|
/**
|
|
@@ -1981,11 +1985,11 @@ class KU extends Bl {
|
|
|
1981
1985
|
*/
|
|
1982
1986
|
async _loadEmbeddedMetronomeSounds() {
|
|
1983
1987
|
try {
|
|
1984
|
-
const l = atob(
|
|
1988
|
+
const l = atob(gU), U = new Uint8Array(l.length);
|
|
1985
1989
|
for (let Z = 0; Z < l.length; Z++)
|
|
1986
1990
|
U[Z] = l.charCodeAt(Z);
|
|
1987
1991
|
this.regularTickBuffer = await this.audioContext.decodeAudioData(U.buffer);
|
|
1988
|
-
const F = atob(
|
|
1992
|
+
const F = atob(KU), d = new Uint8Array(F.length);
|
|
1989
1993
|
for (let Z = 0; Z < F.length; Z++)
|
|
1990
1994
|
d[Z] = F.charCodeAt(Z);
|
|
1991
1995
|
this.accentTickBuffer = await this.audioContext.decodeAudioData(d.buffer);
|
|
@@ -2017,7 +2021,7 @@ class KU extends Bl {
|
|
|
2017
2021
|
throw new Error(`Channel for part '${l}' already exists`);
|
|
2018
2022
|
const F = this.audioContext.createGain();
|
|
2019
2023
|
F.gain.value = U.initialVolume || 1, this.channelOutputs.set(l, F);
|
|
2020
|
-
const d = new
|
|
2024
|
+
const d = new zU(
|
|
2021
2025
|
this,
|
|
2022
2026
|
l,
|
|
2023
2027
|
U
|
|
@@ -2084,7 +2088,7 @@ class KU extends Bl {
|
|
|
2084
2088
|
}), this.channelOutputs.clear(), this.tinySynthGain && this.tinySynthGain.disconnect(), this.tinySynth = null, this.tinySynthGain = null, this._metronomeAnalyser && (this._metronomeAnalyser.disconnect(), this._metronomeAnalyser = null), this.partToChannel.clear(), this.tinySynthChannels.clear(), super.destroy(), this.pianoSamples = null, this.choirSamples = null;
|
|
2085
2089
|
}
|
|
2086
2090
|
}
|
|
2087
|
-
class
|
|
2091
|
+
class DU {
|
|
2088
2092
|
constructor() {
|
|
2089
2093
|
this.partNames = [
|
|
2090
2094
|
"soprano",
|
|
@@ -2672,7 +2676,7 @@ class HU {
|
|
|
2672
2676
|
return Z;
|
|
2673
2677
|
}
|
|
2674
2678
|
}
|
|
2675
|
-
class
|
|
2679
|
+
class jU {
|
|
2676
2680
|
constructor() {
|
|
2677
2681
|
this.barOrder = [], this.beatTable = [];
|
|
2678
2682
|
}
|
|
@@ -2897,7 +2901,7 @@ class Jl {
|
|
|
2897
2901
|
constructor(l = null, U, F = null, d = null) {
|
|
2898
2902
|
if (!U)
|
|
2899
2903
|
throw new Error("Parsed MIDI data is required");
|
|
2900
|
-
this.audioEngine = l, this._audioEngineReady = !!(l && l.isInitialized), this.instrumentMap = F || {}, this.parsedData = U, this._isPlaying = !1, this._currentTime = 0, this._totalDuration = 0, this.playbackSpeed = 1, this.partChannels = /* @__PURE__ */ new Map(), this.partOutputs = /* @__PURE__ */ new Map(), this.playbackStartTime = 0, this.lookAheadTime = 0.05, this.scheduleInterval = null, this.partNotePointers = /* @__PURE__ */ new Map(), this.partProgramPointers = /* @__PURE__ */ new Map(), this.eventBus = pl(), this.beatMapper = new
|
|
2904
|
+
this.audioEngine = l, this._audioEngineReady = !!(l && l.isInitialized), this.instrumentMap = F || {}, this.parsedData = U, this._isPlaying = !1, this._currentTime = 0, this._totalDuration = 0, this.playbackSpeed = 1, this.partChannels = /* @__PURE__ */ new Map(), this.partOutputs = /* @__PURE__ */ new Map(), this.playbackStartTime = 0, this.lookAheadTime = 0.05, this.scheduleInterval = null, this.partNotePointers = /* @__PURE__ */ new Map(), this.partProgramPointers = /* @__PURE__ */ new Map(), this.eventBus = pl(), this.beatMapper = new jU(), this.beats = [], this.structureMetadata = d, this._calculateTotalDuration();
|
|
2901
2905
|
const Z = d || this._createDefaultStructureMetadata();
|
|
2902
2906
|
this.beats = this.beatMapper.mapBeats(U, Z), this._audioEngineReady && (this._setupPartChannels(), this._resetNotePointers(), this._resetProgramPointers());
|
|
2903
2907
|
}
|
|
@@ -3307,7 +3311,7 @@ class Jl {
|
|
|
3307
3311
|
}), this.partOutputs.clear(), this.partNotePointers.clear(), this.partProgramPointers.clear(), this.eventBus.all.clear();
|
|
3308
3312
|
}
|
|
3309
3313
|
}
|
|
3310
|
-
class
|
|
3314
|
+
class qU {
|
|
3311
3315
|
/**
|
|
3312
3316
|
* Create a new PlaybackManager instance
|
|
3313
3317
|
* @param {AudioEngine|MidiPlayer} [audioEngineOrPlayer] - Optional initialized AudioEngine instance or MidiPlayer (can be set later with setAudioEngine())
|
|
@@ -3324,7 +3328,7 @@ class jU {
|
|
|
3324
3328
|
* @param {number} [options.startup.delayMs=25] - Startup delay in milliseconds
|
|
3325
3329
|
*/
|
|
3326
3330
|
constructor(l = null, U = {}) {
|
|
3327
|
-
l instanceof Jl ? (this.audioEngine = l.audioEngine, this.midiPlayer = l, this.parsedData = l.parsedData, this._audioEngineReady = !!(this.audioEngine && this.audioEngine.isInitialized)) : (this.audioEngine = l, this._audioEngineReady = !!(l && l.isInitialized), this.midiPlayer = null, this.parsedData = null), this.eventBus = pl(), this._parser = new
|
|
3331
|
+
l instanceof Jl ? (this.audioEngine = l.audioEngine, this.midiPlayer = l, this.parsedData = l.parsedData, this._audioEngineReady = !!(this.audioEngine && this.audioEngine.isInitialized)) : (this.audioEngine = l, this._audioEngineReady = !!(l && l.isInitialized), this.midiPlayer = null, this.parsedData = null), this.eventBus = pl(), this._parser = new DU(), this._partOutputsMap = /* @__PURE__ */ new Map(), this.instrumentMap = null, this.metronomeConfig = {
|
|
3328
3332
|
enabled: !1,
|
|
3329
3333
|
tickInstrument: 115,
|
|
3330
3334
|
// woodblock
|
|
@@ -4507,7 +4511,7 @@ class jU {
|
|
|
4507
4511
|
}
|
|
4508
4512
|
}
|
|
4509
4513
|
const Ll = ["spessasynth", "lightweight"];
|
|
4510
|
-
class
|
|
4514
|
+
class PU {
|
|
4511
4515
|
constructor() {
|
|
4512
4516
|
this._engineType = "spessasynth";
|
|
4513
4517
|
}
|
|
@@ -4537,8 +4541,8 @@ class qU {
|
|
|
4537
4541
|
this._engineType = "spessasynth";
|
|
4538
4542
|
}
|
|
4539
4543
|
}
|
|
4540
|
-
const
|
|
4541
|
-
class
|
|
4544
|
+
const wU = new PU();
|
|
4545
|
+
class OU {
|
|
4542
4546
|
constructor() {
|
|
4543
4547
|
this.eventBus = _l(), this.currentTime = 0, this.isPlaying = !1, this.playbackSpeed = 1, this.masterVolume = 0.75, this.metronomeVolume = 0.7, this.parts = /* @__PURE__ */ new Map(), this.playbackTimer = null, this.lastTimestamp = 0, this.audioContext = null, this.audioEngine = null, this.playbackManager = null, this.musicData = null, this.beats = [], this.practiceMarks = {}, this.songDuration = 0, this.maxBar = 0, this.masterGain = null, this.metronomeGain = null, this.partGainNodes = /* @__PURE__ */ new Map(), this.partAnalyserNodes = /* @__PURE__ */ new Map(), this.isInitialized = !1;
|
|
4544
4548
|
}
|
|
@@ -4551,8 +4555,8 @@ class wU {
|
|
|
4551
4555
|
async initializeAudioSystem(l = {}) {
|
|
4552
4556
|
if (this.isInitialized) return;
|
|
4553
4557
|
this.audioContext = new (window.AudioContext || window.webkitAudioContext)(), this.audioContext.state === "suspended" && await this.audioContext.resume();
|
|
4554
|
-
const U =
|
|
4555
|
-
if (U === "lightweight" ? (this.audioEngine = new
|
|
4558
|
+
const U = wU.getEngineType();
|
|
4559
|
+
if (U === "lightweight" ? (this.audioEngine = new HU(this.audioContext), console.log("Using LightweightAudioEngine")) : (this.audioEngine = new MU(this.audioContext), console.log("Using SpessaSynthAudioEngine")), this.audioEngine.on("initProgress", (F) => {
|
|
4556
4560
|
this.eventBus.emit("initProgress", F);
|
|
4557
4561
|
}), U === "spessasynth") {
|
|
4558
4562
|
const F = l.soundfontUrl ? [l.soundfontUrl] : [
|
|
@@ -4609,7 +4613,7 @@ class wU {
|
|
|
4609
4613
|
// Set up MIDI playback with real audio engine
|
|
4610
4614
|
async setupMidiPlayback(l, U) {
|
|
4611
4615
|
try {
|
|
4612
|
-
this.playbackManager = new
|
|
4616
|
+
this.playbackManager = new qU(this.audioEngine, {
|
|
4613
4617
|
metronome: {
|
|
4614
4618
|
enabled: !0,
|
|
4615
4619
|
tickInstrument: 115,
|
|
@@ -4959,7 +4963,7 @@ class wU {
|
|
|
4959
4963
|
this.cleanup(), this.audioEngine && this.audioEngine.destroy(), this.audioContext && this.audioContext.state !== "closed" && this.audioContext.close(), this.eventBus.all.clear();
|
|
4960
4964
|
}
|
|
4961
4965
|
}
|
|
4962
|
-
const s = new
|
|
4966
|
+
const s = new OU();
|
|
4963
4967
|
function Vl(t = {}) {
|
|
4964
4968
|
const l = dl(), U = ll(), F = fl(), d = {
|
|
4965
4969
|
soundfontUrl: t.soundfontUrl
|
|
@@ -5067,12 +5071,15 @@ function Vl(t = {}) {
|
|
|
5067
5071
|
}, ZU = () => {
|
|
5068
5072
|
const W = !l.leadInEnabled;
|
|
5069
5073
|
return l.setLeadInEnabled(W), s.updateToggleStates(l.metronomeEnabled, W), W;
|
|
5074
|
+
}, QU = () => {
|
|
5075
|
+
s.stop(), l.setLoaded(!1), U.clear(), console.log("Audio mixer reset - ready for new score");
|
|
5070
5076
|
};
|
|
5071
5077
|
return cl(() => {
|
|
5072
5078
|
Y();
|
|
5073
5079
|
}), {
|
|
5074
5080
|
// Initialization
|
|
5075
5081
|
initialize: r,
|
|
5082
|
+
reset: QU,
|
|
5076
5083
|
// Transport controls
|
|
5077
5084
|
play: q,
|
|
5078
5085
|
stop: G,
|
|
@@ -5109,7 +5116,7 @@ function Vl(t = {}) {
|
|
|
5109
5116
|
audioEngine: s
|
|
5110
5117
|
};
|
|
5111
5118
|
}
|
|
5112
|
-
const
|
|
5119
|
+
const AU = {
|
|
5113
5120
|
__name: "PartControl",
|
|
5114
5121
|
props: /* @__PURE__ */ Sl({
|
|
5115
5122
|
name: {
|
|
@@ -5167,7 +5174,7 @@ const OU = {
|
|
|
5167
5174
|
ref: Q,
|
|
5168
5175
|
class: L([R.value, "part"])
|
|
5169
5176
|
}, [
|
|
5170
|
-
C(
|
|
5177
|
+
C(kU, {
|
|
5171
5178
|
class: "tri",
|
|
5172
5179
|
mute: d.value,
|
|
5173
5180
|
"onUpdate:mute": b[0] || (b[0] = (B) => d.value = B),
|
|
@@ -5192,10 +5199,10 @@ const OU = {
|
|
|
5192
5199
|
}, null, 8, ["level", "value"])
|
|
5193
5200
|
], 2));
|
|
5194
5201
|
}
|
|
5195
|
-
},
|
|
5202
|
+
}, fU = /* @__PURE__ */ H(AU, [["__scopeId", "data-v-9ca7f6e9"]]), _U = { class: "mark" }, $U = { class: "rpt" }, lF = { class: "beat-ind" }, UF = { class: "beat" }, FF = {
|
|
5196
5203
|
key: 1,
|
|
5197
5204
|
class: "mark-grid-container"
|
|
5198
|
-
},
|
|
5205
|
+
}, dF = { class: "mark-grid" }, tF = ["onClick"], ZF = {
|
|
5199
5206
|
__name: "BarInput",
|
|
5200
5207
|
setup(t) {
|
|
5201
5208
|
Ul((i) => ({
|
|
@@ -5277,7 +5284,7 @@ const OU = {
|
|
|
5277
5284
|
class: L(["mark-input", { empty: !n.value, edit: c.value, disabled: !D.value }]),
|
|
5278
5285
|
onClick: G
|
|
5279
5286
|
}, [
|
|
5280
|
-
h("div",
|
|
5287
|
+
h("div", _U, K(D.value ? n.value : "-"), 1)
|
|
5281
5288
|
], 2),
|
|
5282
5289
|
o[7] || (o[7] = h("div", { class: "mark-title" }, "Mark", -1)),
|
|
5283
5290
|
c.value ? _("", !0) : (N(), y(nl, { key: 0 }, [
|
|
@@ -5288,7 +5295,7 @@ const OU = {
|
|
|
5288
5295
|
inputmode: "decimal",
|
|
5289
5296
|
pattern: "\\d*",
|
|
5290
5297
|
onChange: j,
|
|
5291
|
-
onKeyup:
|
|
5298
|
+
onKeyup: aU(j, ["enter"])
|
|
5292
5299
|
}, null, 544), [
|
|
5293
5300
|
[Hl, a.value]
|
|
5294
5301
|
]),
|
|
@@ -5298,7 +5305,7 @@ const OU = {
|
|
|
5298
5305
|
ref: U,
|
|
5299
5306
|
class: L(["rpt-input", { edit: b.value, available: m.value > 1 }])
|
|
5300
5307
|
}, [
|
|
5301
|
-
h("div",
|
|
5308
|
+
h("div", $U, K(T(Q).currentRepeat || "-"), 1),
|
|
5302
5309
|
(N(), y("svg", {
|
|
5303
5310
|
class: L(["inc", { disabled: T(Q).currentRepeat >= m.value }]),
|
|
5304
5311
|
viewBox: "0 -100 100 100",
|
|
@@ -5315,23 +5322,23 @@ const OU = {
|
|
|
5315
5322
|
]), 2))
|
|
5316
5323
|
], 2),
|
|
5317
5324
|
o[4] || (o[4] = h("div", { class: "rpt-title" }, "Rpt", -1)),
|
|
5318
|
-
h("div",
|
|
5319
|
-
h("div",
|
|
5325
|
+
h("div", lF, [
|
|
5326
|
+
h("div", UF, K(T(Q).currentBeat), 1)
|
|
5320
5327
|
]),
|
|
5321
5328
|
o[5] || (o[5] = h("div", { class: "beat-title" }, "Beat", -1))
|
|
5322
5329
|
], 64)),
|
|
5323
|
-
c.value ? (N(), y("div",
|
|
5324
|
-
h("div",
|
|
5330
|
+
c.value ? (N(), y("div", FF, [
|
|
5331
|
+
h("div", dF, [
|
|
5325
5332
|
(N(!0), y(nl, null, Xl(z.value, (k) => (N(), y("div", {
|
|
5326
5333
|
key: k,
|
|
5327
5334
|
class: L(["mark-option", { selected: k === n.value }]),
|
|
5328
5335
|
onClick: (I) => p(k, I)
|
|
5329
|
-
}, K(k), 11,
|
|
5336
|
+
}, K(k), 11, tF))), 128))
|
|
5330
5337
|
])
|
|
5331
5338
|
])) : _("", !0)
|
|
5332
5339
|
], 2));
|
|
5333
5340
|
}
|
|
5334
|
-
},
|
|
5341
|
+
}, QF = /* @__PURE__ */ H(ZF, [["__scopeId", "data-v-6281baf2"]]), VF = { class: "title" }, aF = {
|
|
5335
5342
|
__name: "BaseNumericInput",
|
|
5336
5343
|
props: /* @__PURE__ */ Sl({
|
|
5337
5344
|
title: {
|
|
@@ -5432,7 +5439,7 @@ const OU = {
|
|
|
5432
5439
|
}, null, 544), [
|
|
5433
5440
|
[Hl, Q.value]
|
|
5434
5441
|
]),
|
|
5435
|
-
h("div",
|
|
5442
|
+
h("div", VF, K(t.title), 1),
|
|
5436
5443
|
C(Wl, {
|
|
5437
5444
|
class: "slider",
|
|
5438
5445
|
value: Z.value,
|
|
@@ -5443,7 +5450,7 @@ const OU = {
|
|
|
5443
5450
|
}, null, 8, ["value", "thumb-length", "max", "min"])
|
|
5444
5451
|
], 512));
|
|
5445
5452
|
}
|
|
5446
|
-
}, UU = /* @__PURE__ */ H(
|
|
5453
|
+
}, UU = /* @__PURE__ */ H(aF, [["__scopeId", "data-v-79c7a539"]]), nF = {
|
|
5447
5454
|
__name: "SpeedInput",
|
|
5448
5455
|
setup(t) {
|
|
5449
5456
|
const l = dl(), U = Vl(), F = J({
|
|
@@ -5471,7 +5478,7 @@ const OU = {
|
|
|
5471
5478
|
"max-chars": 3
|
|
5472
5479
|
}, null, 8, ["value"]));
|
|
5473
5480
|
}
|
|
5474
|
-
},
|
|
5481
|
+
}, RF = {
|
|
5475
5482
|
__name: "TimeInput",
|
|
5476
5483
|
setup(t) {
|
|
5477
5484
|
const l = dl(), U = ll(), F = Vl(), d = (n) => n.toFixed(1), Z = (n) => parseFloat(n), Q = (n) => n.replace(/[^0-9.]/g, ""), V = (n) => n, a = (n) => n;
|
|
@@ -5496,7 +5503,7 @@ const OU = {
|
|
|
5496
5503
|
"thumb-length": 2
|
|
5497
5504
|
}, null, 8, ["value", "onUpdate:value", "slider-max"]));
|
|
5498
5505
|
}
|
|
5499
|
-
},
|
|
5506
|
+
}, mF = { class: "inner" }, eF = {
|
|
5500
5507
|
__name: "AudioButton",
|
|
5501
5508
|
setup(t) {
|
|
5502
5509
|
const l = x(!1), U = () => l.value = !0, F = () => l.value = !1;
|
|
@@ -5506,15 +5513,15 @@ const OU = {
|
|
|
5506
5513
|
onPointerup: F,
|
|
5507
5514
|
onPointerleave: F
|
|
5508
5515
|
}, [
|
|
5509
|
-
h("div",
|
|
5516
|
+
h("div", mF, [
|
|
5510
5517
|
Ql(d.$slots, "default", {}, void 0, !0)
|
|
5511
5518
|
])
|
|
5512
5519
|
], 34));
|
|
5513
5520
|
}
|
|
5514
|
-
}, tl = /* @__PURE__ */ H(
|
|
5521
|
+
}, tl = /* @__PURE__ */ H(eF, [["__scopeId", "data-v-0d7af06e"]]), WF = { class: "outer" }, cF = { class: "title" }, bF = { class: "buttons" }, sF = {
|
|
5515
5522
|
class: "icon",
|
|
5516
5523
|
viewBox: "0 0 48 48"
|
|
5517
|
-
},
|
|
5524
|
+
}, hF = ["d"], BF = {
|
|
5518
5525
|
__name: "MixerControls",
|
|
5519
5526
|
props: {
|
|
5520
5527
|
/** When true, menu button emits 'menu-click' event instead of showing dropdown */
|
|
@@ -5581,8 +5588,8 @@ const OU = {
|
|
|
5581
5588
|
get: () => Z.metronomeVolume,
|
|
5582
5589
|
set: (Y) => Z.setMetronomeVolume(Y)
|
|
5583
5590
|
});
|
|
5584
|
-
return (Y, p) => (N(), y("div",
|
|
5585
|
-
h("div",
|
|
5591
|
+
return (Y, p) => (N(), y("div", WF, [
|
|
5592
|
+
h("div", cF, [
|
|
5586
5593
|
C(Ol, {
|
|
5587
5594
|
class: "text",
|
|
5588
5595
|
align: "centre"
|
|
@@ -5627,10 +5634,10 @@ const OU = {
|
|
|
5627
5634
|
}, null, 8, ["value"]),
|
|
5628
5635
|
p[8] || (p[8] = h("div", { class: "main-t" }, "Main", -1)),
|
|
5629
5636
|
p[9] || (p[9] = h("div", { class: "tick-t" }, "Tick", -1)),
|
|
5630
|
-
C(
|
|
5631
|
-
C(
|
|
5632
|
-
C(
|
|
5633
|
-
h("div",
|
|
5637
|
+
C(QF, { class: "bar" }),
|
|
5638
|
+
C(RF, { class: "time" }),
|
|
5639
|
+
C(nF, { class: "speed" }),
|
|
5640
|
+
h("div", bF, [
|
|
5634
5641
|
C(tl, {
|
|
5635
5642
|
class: "button",
|
|
5636
5643
|
onClick: n
|
|
@@ -5651,10 +5658,10 @@ const OU = {
|
|
|
5651
5658
|
onClick: a
|
|
5652
5659
|
}, {
|
|
5653
5660
|
default: w(() => [
|
|
5654
|
-
(N(), y("svg",
|
|
5661
|
+
(N(), y("svg", sF, [
|
|
5655
5662
|
h("path", {
|
|
5656
5663
|
d: T(Z).isPlaying ? "M27.4 35.4V12.6h8v22.8Zm-14.8 0V12.6h8.05v22.8Z" : "M16 37.85v-28l22 14Z"
|
|
5657
|
-
}, null, 8,
|
|
5664
|
+
}, null, 8, hF)
|
|
5658
5665
|
]))
|
|
5659
5666
|
]),
|
|
5660
5667
|
_: 1
|
|
@@ -5721,10 +5728,10 @@ const OU = {
|
|
|
5721
5728
|
])
|
|
5722
5729
|
]));
|
|
5723
5730
|
}
|
|
5724
|
-
},
|
|
5731
|
+
}, iF = /* @__PURE__ */ H(BF, [["__scopeId", "data-v-5e330688"]]), uF = { class: "init-progress" }, JF = {
|
|
5725
5732
|
key: 0,
|
|
5726
5733
|
class: "progress-track"
|
|
5727
|
-
},
|
|
5734
|
+
}, GF = { class: "message-container" }, oF = {
|
|
5728
5735
|
__name: "InitializationProgress",
|
|
5729
5736
|
props: {
|
|
5730
5737
|
/** Current initialization stage */
|
|
@@ -5755,21 +5762,21 @@ const OU = {
|
|
|
5755
5762
|
},
|
|
5756
5763
|
setup(t) {
|
|
5757
5764
|
const l = t, U = J(() => l.progress !== null), F = J(() => l.progress === null ? 0 : Math.max(0, Math.min(100, l.progress * 100))), d = J(() => l.hasError ? l.errorMessage : l.message);
|
|
5758
|
-
return (Z, Q) => (N(), y("div",
|
|
5759
|
-
U.value ? (N(), y("div",
|
|
5765
|
+
return (Z, Q) => (N(), y("div", uF, [
|
|
5766
|
+
U.value ? (N(), y("div", JF, [
|
|
5760
5767
|
h("div", {
|
|
5761
5768
|
class: "progress-fill",
|
|
5762
5769
|
style: gl({ width: `${F.value}%` })
|
|
5763
5770
|
}, null, 4)
|
|
5764
5771
|
])) : _("", !0),
|
|
5765
|
-
h("div",
|
|
5772
|
+
h("div", GF, [
|
|
5766
5773
|
h("div", {
|
|
5767
5774
|
class: L(["message", { error: t.hasError }])
|
|
5768
5775
|
}, K(d.value), 3)
|
|
5769
5776
|
])
|
|
5770
5777
|
]));
|
|
5771
5778
|
}
|
|
5772
|
-
},
|
|
5779
|
+
}, SF = /* @__PURE__ */ H(oF, [["__scopeId", "data-v-a9ed87f2"]]), XF = sl("initialization", {
|
|
5773
5780
|
state: () => ({
|
|
5774
5781
|
// Current initialization stage
|
|
5775
5782
|
currentStage: null,
|
|
@@ -5830,10 +5837,10 @@ const OU = {
|
|
|
5830
5837
|
*/
|
|
5831
5838
|
hasProgressBar: (t) => t.progress !== null
|
|
5832
5839
|
}
|
|
5833
|
-
}),
|
|
5840
|
+
}), NF = { class: "container" }, pF = { class: "panel" }, yF = {
|
|
5834
5841
|
key: 0,
|
|
5835
5842
|
class: "blur"
|
|
5836
|
-
}, Cl = 40, xl = 40, Ml = 100,
|
|
5843
|
+
}, Cl = 40, xl = 40, Ml = 100, YF = 50, zl = 400, Il = 570, vl = 570, EF = 350, kF = 330, TF = 360, rF = 360, LF = {
|
|
5837
5844
|
__name: "MixerLayout",
|
|
5838
5845
|
props: {
|
|
5839
5846
|
/** Whether to show initialization progress (default: true) */
|
|
@@ -5854,7 +5861,7 @@ const OU = {
|
|
|
5854
5861
|
"3572ead6": e.value,
|
|
5855
5862
|
"78cf8203": c.value
|
|
5856
5863
|
}));
|
|
5857
|
-
const U = t, F = l, d = ll(), Z = dl(), Q =
|
|
5864
|
+
const U = t, F = l, d = ll(), Z = dl(), Q = XF();
|
|
5858
5865
|
bl(() => {
|
|
5859
5866
|
Q.initializeListeners();
|
|
5860
5867
|
});
|
|
@@ -5864,13 +5871,13 @@ const OU = {
|
|
|
5864
5871
|
}), m = J(() => {
|
|
5865
5872
|
switch (R.value) {
|
|
5866
5873
|
case 0:
|
|
5867
|
-
return `${
|
|
5874
|
+
return `${EF}px ` + `${YF}px `.repeat(d.parts.length);
|
|
5868
5875
|
case 1:
|
|
5869
|
-
return `${EF}px`;
|
|
5870
|
-
case 2:
|
|
5871
5876
|
return `${kF}px`;
|
|
5872
|
-
|
|
5877
|
+
case 2:
|
|
5873
5878
|
return `${TF}px`;
|
|
5879
|
+
default:
|
|
5880
|
+
return `${rF}px`;
|
|
5874
5881
|
}
|
|
5875
5882
|
}), e = J(() => {
|
|
5876
5883
|
switch (R.value) {
|
|
@@ -5892,9 +5899,9 @@ const OU = {
|
|
|
5892
5899
|
ref_key: "container",
|
|
5893
5900
|
ref: V
|
|
5894
5901
|
}, [
|
|
5895
|
-
h("div",
|
|
5896
|
-
h("div",
|
|
5897
|
-
(N(!0), y(nl, null, Xl(T(d).parts, (u, X) => (N(), Rl(
|
|
5902
|
+
h("div", NF, [
|
|
5903
|
+
h("div", pF, [
|
|
5904
|
+
(N(!0), y(nl, null, Xl(T(d).parts, (u, X) => (N(), Rl(fU, {
|
|
5898
5905
|
key: u.name,
|
|
5899
5906
|
class: L("part" + X),
|
|
5900
5907
|
name: u.name,
|
|
@@ -5907,7 +5914,7 @@ const OU = {
|
|
|
5907
5914
|
ref_for: !0,
|
|
5908
5915
|
ref: "parts"
|
|
5909
5916
|
}, null, 8, ["class", "name", "volume", "onUpdate:volume", "solo", "onUpdate:solo", "mute", "onUpdate:mute"]))), 128)),
|
|
5910
|
-
C(
|
|
5917
|
+
C(iF, {
|
|
5911
5918
|
title: T(d).title,
|
|
5912
5919
|
"external-menu-control": U.externalMenuControl,
|
|
5913
5920
|
onMenuClick: B[0] || (B[0] = (u) => F("menu-click")),
|
|
@@ -5918,8 +5925,8 @@ const OU = {
|
|
|
5918
5925
|
]),
|
|
5919
5926
|
_: 3
|
|
5920
5927
|
}, 8, ["title", "external-menu-control"]),
|
|
5921
|
-
n.value ? _("", !0) : (N(), y("div",
|
|
5922
|
-
U.showInitProgress && T(Q).shouldShowProgress ? (N(), Rl(
|
|
5928
|
+
n.value ? _("", !0) : (N(), y("div", yF)),
|
|
5929
|
+
U.showInitProgress && T(Q).shouldShowProgress ? (N(), Rl(SF, {
|
|
5923
5930
|
key: 1,
|
|
5924
5931
|
stage: T(Q).currentStage,
|
|
5925
5932
|
message: T(Q).message,
|
|
@@ -5931,10 +5938,10 @@ const OU = {
|
|
|
5931
5938
|
])
|
|
5932
5939
|
], 512));
|
|
5933
5940
|
}
|
|
5934
|
-
},
|
|
5941
|
+
}, DF = /* @__PURE__ */ H(LF, [["__scopeId", "data-v-7163154f"]]), CF = { class: "outer" }, xF = { class: "mid" }, MF = { class: "inner" }, zF = {
|
|
5935
5942
|
key: 0,
|
|
5936
5943
|
class: "content"
|
|
5937
|
-
},
|
|
5944
|
+
}, IF = {
|
|
5938
5945
|
__name: "Placeholder",
|
|
5939
5946
|
props: {
|
|
5940
5947
|
colour: {
|
|
@@ -5949,10 +5956,10 @@ const OU = {
|
|
|
5949
5956
|
setup(t) {
|
|
5950
5957
|
return Ul((l) => ({
|
|
5951
5958
|
"66bea586": t.colour
|
|
5952
|
-
})), (l, U) => (N(), y("div",
|
|
5953
|
-
h("div",
|
|
5954
|
-
h("div",
|
|
5955
|
-
t.text || l.$slots.default ? (N(), y("div",
|
|
5959
|
+
})), (l, U) => (N(), y("div", CF, [
|
|
5960
|
+
h("div", xF, [
|
|
5961
|
+
h("div", MF, [
|
|
5962
|
+
t.text || l.$slots.default ? (N(), y("div", zF, [
|
|
5956
5963
|
Nl(K(t.text) + " ", 1),
|
|
5957
5964
|
Ql(l.$slots, "default", {}, void 0, !0)
|
|
5958
5965
|
])) : _("", !0)
|
|
@@ -5960,8 +5967,8 @@ const OU = {
|
|
|
5960
5967
|
])
|
|
5961
5968
|
]));
|
|
5962
5969
|
}
|
|
5963
|
-
},
|
|
5964
|
-
class
|
|
5970
|
+
}, jF = /* @__PURE__ */ H(IF, [["__scopeId", "data-v-dff76c48"]]);
|
|
5971
|
+
class vF {
|
|
5965
5972
|
constructor() {
|
|
5966
5973
|
this.eventBus = _l(), this.currentTime = 0, this.isPlaying = !1, this.playbackSpeed = 1, this.masterVolume = 0.75, this.parts = /* @__PURE__ */ new Map(), this.playbackTimer = null, this.lastTimestamp = 0;
|
|
5967
5974
|
}
|
|
@@ -6107,29 +6114,29 @@ class IF {
|
|
|
6107
6114
|
this.stop(), this.eventBus.all.clear(), this.parts.clear();
|
|
6108
6115
|
}
|
|
6109
6116
|
}
|
|
6110
|
-
new
|
|
6117
|
+
new vF();
|
|
6111
6118
|
export {
|
|
6112
6119
|
tl as AudioButton,
|
|
6113
6120
|
Wl as AudioSlider,
|
|
6114
|
-
|
|
6121
|
+
QF as BarInput,
|
|
6115
6122
|
UU as BaseNumericInput,
|
|
6116
6123
|
ol as DEV_MODE,
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
|
|
6120
|
-
|
|
6121
|
-
|
|
6122
|
-
|
|
6123
|
-
|
|
6124
|
-
|
|
6124
|
+
vF as DummyAudioEngine,
|
|
6125
|
+
SF as InitializationProgress,
|
|
6126
|
+
iF as MixerControls,
|
|
6127
|
+
DF as MixerLayout,
|
|
6128
|
+
fU as PartControl,
|
|
6129
|
+
jF as Placeholder,
|
|
6130
|
+
nF as SpeedInput,
|
|
6131
|
+
RF as TimeInput,
|
|
6125
6132
|
Ol as TitleText,
|
|
6126
|
-
|
|
6127
|
-
|
|
6133
|
+
kU as TriState,
|
|
6134
|
+
wU as audioEngineConfig,
|
|
6128
6135
|
Al as isDevFeature,
|
|
6129
|
-
|
|
6136
|
+
HF as isDevMode,
|
|
6130
6137
|
dl as useAudioStateStore,
|
|
6131
6138
|
Fl as useElementSize,
|
|
6132
|
-
|
|
6139
|
+
XF as useInitializationState,
|
|
6133
6140
|
Vl as useMasterAudioControl,
|
|
6134
6141
|
ll as useMusicDataStore,
|
|
6135
6142
|
fl as usePlaybackStateStore
|