PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
← All changes | includes/page-form-builder/_out/export/builder-exporter.js +95 -16 11.4 → 11.9 View file →
@@ -47,15 +47,58 @@
47 47 return out;
48 48 }
49 49
50 50 // == Helpers – column styles parsing & CSS vars builder ===========================================================
51 + var wpbc_column_overflow_values = ['visible', 'auto', 'hidden'];
51 52
53 + /**
54 + * Constrain a column spacing length to units supported by the Inspector.
55 + *
56 + * @param {*} candidate_value Saved column-style value.
57 + * @returns {string} Valid non-negative CSS length or `0px`.
58 + */
59 + function normalize_column_length(candidate_value) {
60 + var normalized_value = String(candidate_value == null ? '' : candidate_value).trim();
61 + if (/^\d+(\.\d+)?$/.test(normalized_value)) {
62 + return normalized_value + 'px';
63 + }
64 + return /^\d+(\.\d+)?(px|rem|em|%)$/.test(normalized_value) ? normalized_value : '0px';
65 + }
66 +
67 + /**
68 + * Constrain an optional column maximum dimension.
69 + *
70 + * @param {*} candidate_value Saved column-style value.
71 + * @returns {string} Valid maximum dimension or `none`.
72 + */
73 + function normalize_column_maximum(candidate_value) {
74 + var normalized_value = String(candidate_value == null ? '' : candidate_value).trim();
75 + if (!normalized_value || 'none' === normalized_value) {
76 + return 'none';
77 + }
78 + if (/^\d+(\.\d+)?$/.test(normalized_value)) {
79 + return normalized_value + 'px';
80 + }
81 + return /^\d+(\.\d+)?(px|rem|em|%|vh|vw)$/.test(normalized_value) ? normalized_value : 'none';
82 + }
83 +
84 + /**
85 + * Constrain column overflow to the Inspector allowlist.
86 + *
87 + * @param {*} candidate_value Saved column-style value.
88 + * @returns {string} Allowlisted overflow value.
89 + */
90 + function normalize_column_overflow(candidate_value) {
91 + var normalized_value = String(candidate_value || '');
92 + return wpbc_column_overflow_values.indexOf(normalized_value) !== -1 ? normalized_value : wpbc_column_overflow_values[0];
93 + }
94 +
52 95 // Known keys we treat as real per-column style overrides.
53 96 function has_non_default_col_styles(obj) {
54 97 if (!obj || typeof obj !== 'object') {
55 98 return false;
56 99 }
57 - var keys = ['dir', 'wrap', 'jc', 'ai', 'gap', 'aself', 'ac'];
100 + var keys = ['dir', 'wrap', 'jc', 'ai', 'gap', 'padding', 'margin', 'padding_top', 'padding_right', 'padding_bottom', 'padding_left', 'margin_top', 'margin_right', 'margin_bottom', 'margin_left', 'max_width', 'max_height', 'overflow', 'overflow_x', 'overflow_y', 'aself', 'ac'];
58 101 for (var i = 0; i < keys.length; i++) {
59 102 var k = keys[i];
60 103 if (obj[k] != null && String(obj[k]).trim() !== '') {
61 104 return true;
@@ -95,10 +138,19 @@
95 138 * - dir -> --wpbc-bfb-col-dir
96 139 * - wrap -> --wpbc-bfb-col-wrap
97 140 * - jc -> --wpbc-bfb-col-jc
98 141 * - ai -> --wpbc-bfb-col-ai
99 - * - gap -> --wpbc-bfb-col-gap
100 - * - ac -> --wpbc-bfb-col-ac
142 + * - gap -> --wpbc-bfb-col-gap
143 + * - padding -> --wpbc-bfb-col-padding
144 + * - margin -> --wpbc-bfb-col-margin
145 + * - padding_top/right/bottom/left -> --wpbc-bfb-col-padding-*
146 + * - margin_top/right/bottom/left -> --wpbc-bfb-col-margin-*
147 + * - max_width -> --wpbc-bfb-col-max-width
148 + * - max_height -> --wpbc-bfb-col-max-height
149 + * - overflow -> --wpbc-bfb-col-overflow
150 + * - overflow_x -> --wpbc-bfb-col-overflow-x
151 + * - overflow_y -> --wpbc-bfb-col-overflow-y
152 + * - ac -> --wpbc-bfb-col-ac
101 153 * - aself-> --wpbc-bfb-col-aself
102 154 *
103 155 * Unknown keys are exported as `--wpbc-bfb-col-${key}`.
104 156 *
@@ -112,8 +164,23 @@
112 164 wrap: '--wpbc-bfb-col-wrap',
113 165 jc: '--wpbc-bfb-col-jc',
114 166 ai: '--wpbc-bfb-col-ai',
115 167 gap: '--wpbc-bfb-col-gap',
168 + padding: '--wpbc-bfb-col-padding',
169 + margin: '--wpbc-bfb-col-margin',
170 + padding_top: '--wpbc-bfb-col-padding-top',
171 + padding_right: '--wpbc-bfb-col-padding-right',
172 + padding_bottom: '--wpbc-bfb-col-padding-bottom',
173 + padding_left: '--wpbc-bfb-col-padding-left',
174 + margin_top: '--wpbc-bfb-col-margin-top',
175 + margin_right: '--wpbc-bfb-col-margin-right',
176 + margin_bottom: '--wpbc-bfb-col-margin-bottom',
177 + margin_left: '--wpbc-bfb-col-margin-left',
178 + max_width: '--wpbc-bfb-col-max-width',
179 + max_height: '--wpbc-bfb-col-max-height',
180 + overflow: '--wpbc-bfb-col-overflow',
181 + overflow_x: '--wpbc-bfb-col-overflow-x',
182 + overflow_y: '--wpbc-bfb-col-overflow-y',
116 183 ac: '--wpbc-bfb-col-ac',
117 184 aself: '--wpbc-bfb-col-aself'
118 185 };
119 186 var parts = [];
@@ -118,10 +185,19 @@
118 185 };
119 186 var parts = [];
120 187 for (var k in obj) {
121 188 if (!Object.prototype.hasOwnProperty.call(obj, k)) continue;
189 + // Ignore the removed experimental child-flex setting in previously saved Builder JSON.
190 + if ('item_flex' === k) continue;
122 191 var v = obj[k];
123 192 if (v == null || v === '') continue;
193 + if (['padding_top', 'padding_right', 'padding_bottom', 'padding_left', 'margin_top', 'margin_right', 'margin_bottom', 'margin_left'].indexOf(k) !== -1) {
194 + v = normalize_column_length(v);
195 + } else if ('max_width' === k || 'max_height' === k) {
196 + v = normalize_column_maximum(v);
197 + } else if (['overflow', 'overflow_x', 'overflow_y'].indexOf(k) !== -1) {
198 + v = normalize_column_overflow(v);
199 + }
124 200 var var_name = map[k] || '--wpbc-bfb-col-' + String(k).replace(/[^a-z0-9_-]/gi, '').toLowerCase();
125 201 parts.push(var_name + ': ' + String(v));
126 202 }
127 203
@@ -216,8 +292,10 @@
216 292 const walk_section = sec => {
217 293 const section_col_styles = parse_col_styles_json(sec && sec.col_styles);
218 294 return {
219 295 id: sec?.id,
296 + html_id: sec?.html_id || '',
297 + cssclass: sec?.cssclass || '',
220 298 columns: (sec?.columns || []).map((col, col_index) => {
221 299 const items = Array.isArray(col?.items) ? col.items : [...(col?.fields || []).map(f => ({
222 300 type: 'field',
223 301 data: f
@@ -476,9 +554,10 @@
476 554 var row_is_active = cols.some(function (col) {
477 555 return has_non_default_col_styles(col && col.col_styles);
478 556 });
479 557 var row_attr_active = row_is_active ? ' data-colstyles-active="1"' : '';
480 - open(`<r${row_attr_active}>`);
558 + var row_custom_attrs = WPBC_BFB_Exporter.item_wrapper_attrs(section, ctx);
559 + open(`<r${row_custom_attrs}${row_attr_active}>`);
481 560 const bases = compute_effective_bases(cols, cfg.gapPercent);
482 561 const esc_attr = core.WPBC_BFB_Sanitize.escape_html;
483 562 cols.forEach((col, idx) => {
484 563 // (1) Resolve flex-basis.
@@ -511,18 +590,18 @@
511 590 close(`</r>`);
512 591 }
513 592
514 593 /**
515 - * Build attribute string for the <item> wrapper.
516 - * Currently only used for CAPTCHA: pushes css classes and html_id to the wrapper.
517 - * Also ensures uniqueness of the html_id across the export (uses ctx.usedIds).
518 - *
519 - * @param {Object} field
520 - * @param {{usedIds:Set<string>}} ctx
521 - * @returns {string} e.g. ' class="x y" id="myId"'
594 + * Build a sanitized custom CSS class and HTML ID attribute string for an exported wrapper.
595 + * Used by section row wrappers and fields whose attributes belong on the <item> wrapper.
596 + * Also ensures uniqueness of the html_id across the export (uses ctx.usedIds).
597 + *
598 + * @param {Object} wrapper_data Object containing optional cssclass and html_id properties.
599 + * @param {{usedIds:Set<string>}} ctx
600 + * @returns {string} e.g. ' class="x y" id="myId"'
522 601 */
523 - static item_wrapper_attrs(field, ctx) {
524 - if (!field) {
602 + static item_wrapper_attrs(wrapper_data, ctx) {
603 + if (!wrapper_data) {
525 604 return '';
526 605 }
527 606 const esc_html = core.WPBC_BFB_Sanitize.escape_html;
528 607 const cls_sanit = core.WPBC_BFB_Sanitize.sanitize_css_classlist;
@@ -527,11 +606,11 @@
527 606 const esc_html = core.WPBC_BFB_Sanitize.escape_html;
528 607 const cls_sanit = core.WPBC_BFB_Sanitize.sanitize_css_classlist;
529 608 const sid = core.WPBC_BFB_Sanitize.sanitize_html_id;
530 609 let out = '';
531 - const cls_raw = String(field.cssclass_extra || field.cssclass || field.class || '');
610 + const cls_raw = String(wrapper_data.cssclass_extra || wrapper_data.cssclass || wrapper_data.class || '');
532 611 const cls = cls_sanit(cls_raw);
533 - let html_id = field.html_id ? sid(String(field.html_id)) : '';
612 + let html_id = wrapper_data.html_id ? sid(String(wrapper_data.html_id)) : '';
534 613 if (html_id && ctx?.usedIds) {
535 614 let unique = html_id,
536 615 i = 2;
537 616 while (ctx.usedIds.has(unique)) {
@@ -1141,5 +1220,5 @@
1141 1220 // expose + ready event for packs to register their content exporters.
1142 1221 window.WPBC_BFB_ContentExporter = window.WPBC_BFB_ContentExporter || WPBC_BFB_ContentExporter;
1143 1222 wpbc_bfb__dispatch_event_safe('wpbc:bfb:content-exporter-ready', {});
1144 1223 })();
1145 -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9leHBvcnQvYnVpbGRlci1leHBvcnRlci5qcyIsIm5hbWVzIjpbImNvcmUiLCJ3aW5kb3ciLCJXUEJDX0JGQl9Db3JlIiwid3BiY19leHBvcnRfc2tpcF9hdHRyc19kZWZhdWx0Iiwic3RyaXBfYXR0cmlidXRlc19mcm9tX21hcmt1cCIsImh0bWwiLCJhdHRyc19sb3dlcmNhc2UiLCJsZW5ndGgiLCJvdXQiLCJTdHJpbmciLCJyYXdOYW1lIiwibmFtZSIsInRvTG93ZXJDYXNlIiwidHJpbSIsImVzYyIsInJlcGxhY2UiLCJyZSIsIlJlZ0V4cCIsImhhc19ub25fZGVmYXVsdF9jb2xfc3R5bGVzIiwib2JqIiwia2V5cyIsImkiLCJrIiwicGFyc2VfY29sX3N0eWxlc19qc29uIiwicmF3IiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwieCIsImFyciIsIkpTT04iLCJwYXJzZSIsIl9lIiwiYnVpbGRfY29sX2Nzc192YXJzIiwibWFwIiwiZGlyIiwid3JhcCIsImpjIiwiYWkiLCJnYXAiLCJhYyIsImFzZWxmIiwicGFydHMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ2IiwidmFyX25hbWUiLCJwdXNoIiwiam9pbiIsInJlc29sdmVfZmxleF9iYXNpc19wZXJjZW50Iiwid2lkdGhfdG9rZW4iLCJmYWxsYmFja19wZXJjZW50IiwicyIsImVuZHNXaXRoIiwicCIsInBhcnNlRmxvYXQiLCJpc0Zpbml0ZSIsImNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzIiwiY29sdW1ucyIsImdhcF9wZXJjZW50IiwibiIsImNvbCIsInciLCJ3aWR0aCIsIk5hTiIsIk51bWJlciIsInN1bV9yYXciLCJyZWR1Y2UiLCJhIiwiYiIsImdwIiwidG90YWxfZ2FwcyIsIk1hdGgiLCJtYXgiLCJhdmFpbGFibGUiLCJzY2FsZV9yYXRpbyIsImFkYXB0X2J1aWxkZXJfc3RydWN0dXJlX3RvX2V4cG9ydGVyIiwic3RydWN0dXJlIiwicGFnZXMiLCJpdGVtcyIsIm5vcm1hbGl6ZV9vcHRpb25zIiwib3B0cyIsIm8iLCJsYWJlbCIsInZhbHVlIiwic2VsZWN0ZWQiLCJ3YWxrX3NlY3Rpb24iLCJzZWMiLCJzZWN0aW9uX2NvbF9zdHlsZXMiLCJjb2xfc3R5bGVzIiwiaWQiLCJjb2xfaW5kZXgiLCJmaWVsZHMiLCJmIiwidHlwZSIsImRhdGEiLCJzZWN0aW9ucyIsIml0Iiwib3B0aW9ucyIsInN0eWxlIiwicGFnZSIsImNvbnRlbnQiLCJmb3JFYWNoIiwiaXRlbSIsImtpbmQiLCJXUEJDX0JGQl9FeHBvcnRlciIsInNraXBfYXR0cnMiLCJTZXQiLCJzZXRfc2tpcF9hdHRycyIsIkJvb2xlYW4iLCJhZGRfc2tpcF9hdHRycyIsIm5hbWVzIiwiYWRkIiwicmVtb3ZlX3NraXBfYXR0ciIsImRlbGV0ZSIsInNhbml0aXplX2V4cG9ydCIsImZyb20iLCJleHBvcnRfZm9ybSIsImFkYXB0ZWQiLCJjZmciLCJuZXdsaW5lIiwiYWRkTGFiZWxzIiwiZ2FwUGVyY2VudCIsImluZGVudCIsIklORCIsImRlcHRoIiwibGluZXMiLCJyZXBlYXQiLCJvcGVuIiwiY2xvc2UiLCJibGFuayIsImN0eCIsInVzZWRJZHMiLCJvbmNlIiwiY2FwdGNoYSIsImNvdW50cnkiLCJjb3Vwb24iLCJjb3N0X2NvcnJlY3Rpb25zIiwic3VibWl0IiwicGFnZV9pbmRleCIsImlzX2ZpcnN0Iiwic3RlcF9udW0iLCJoaWRkZW5fY2xhc3MiLCJoaWRkZW5fc3R5bGUiLCJyZW5kZXJfc2VjdGlvbiIsInJlbmRlcl9maWVsZF9ub2RlIiwiZXhwb3J0X2FsbCIsImFkdmFuY2VkX2Zvcm0iLCJmaWVsZHNfZGF0YSIsIldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlciIsImV4cG9ydF9jb250ZW50Iiwic2VwIiwic2VjdGlvbiIsImlvIiwiY29scyIsInJvd19pc19hY3RpdmUiLCJzb21lIiwicm93X2F0dHJfYWN0aXZlIiwiYmFzZXMiLCJlc2NfYXR0ciIsIldQQkNfQkZCX1Nhbml0aXplIiwiZXNjYXBlX2h0bWwiLCJpZHgiLCJlZmZfYmFzaXMiLCJzdHlsZV9wYXJ0cyIsInRvU3RyaW5nIiwiY3NzX3ZhcnNfc3RyIiwic3R5bGVfYXR0ciIsImNvbF9pc19hY3RpdmUiLCJjb2xfYXR0cl9hY3RpdmUiLCJub2RlIiwibmVzdGVkIiwiaXRlbV93cmFwcGVyX2F0dHJzIiwiZmllbGQiLCJlc2NfaHRtbCIsImNsc19zYW5pdCIsInNhbml0aXplX2Nzc19jbGFzc2xpc3QiLCJzaWQiLCJzYW5pdGl6ZV9odG1sX2lkIiwiY2xzX3JhdyIsImNzc2NsYXNzX2V4dHJhIiwiY3NzY2xhc3MiLCJjbGFzcyIsImNscyIsImh0bWxfaWQiLCJ1bmlxdWUiLCJoYXMiLCJpdGVtX2F0dHJzIiwiaGFuZGxlZCIsImhhc19leHBvcnRlciIsInJ1bl9yZWdpc3RlcmVkX2V4cG9ydGVyIiwiY29tcHV0ZV9uYW1lIiwiaGVscCIsImlzX3JlcXVpcmVkIiwicmVxdWlyZWQiLCJlbWl0X2xhYmVsX3RoZW4iLCJlbWl0IiwiYm9keSIsImlzX3JlcSIsInJlcV9tYXJrIiwiaXNfdGltZXNsb3RfcGlja2VyX2VuYWJsZWQiLCJfd3BiYyIsImdldF9vdGhlcl9wYXJhbSIsIl8iLCJ0aW1lX3BsYWNlaG9sZGVyX2ZvciIsInBsYWNlaG9sZGVyIiwiYnVpbGRfdGltZV9zZWxlY3RfdG9rZW5zIiwidG9rZW5zX3N0ciIsIm9wdGlvbl90b2tlbnMiLCJkZWZfc3RyIiwiZGVmYXVsdF9vcHRpb25fc3VmZml4IiwiaGFzX3NlbGVjdGVkX2RlZmF1bHQiLCJoYXNfZW1wdHlfdmFsdWVfb3B0aW9uIiwicGhUZXh0IiwicGhUb2tlblN0ciIsImVzY2FwZV9mb3Jfc2hvcnRjb2RlIiwib3RoZXIiLCJlbWl0X3RpbWVfc2VsZWN0IiwiaWRfb3B0IiwiY2xzX29wdHMiLCJnZXRfZGVmYXVsdF92YWx1ZSIsImRlZmF1bHRfdmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0X3RleHRfc3VmZml4IiwiY2xhc3Nfb3B0aW9ucyIsImNsYXNzTmFtZSIsInNwbGl0IiwiYyIsInRvX3Rva2VuIiwiaWRfb3B0aW9uIiwicmF3X2lkIiwiaWRfYXR0ciIsImJhc2UiLCJwaF9hdHRyIiwiZXNjYXBlX2Zvcl9hdHRyX3F1b3RlZCIsInNpemVfbWF4X3Rva2VuIiwic2l6ZSIsInBhcnNlSW50IiwibWF4bGVuZ3RoIiwiY29sc19yb3dzX3Rva2VuIiwicm93cyIsInRpdGxlIiwidG9rZW5zIiwiZmluZCIsImRlZl92YWwiLCJlc2NhcGVfdmFsdWVfZm9yX2F0dHIiLCJjaG9pY2VfdGFnIiwiZGVmIiwidWxlIiwidXNlX2xhYmVsX2VsZW1lbnQiLCJtdWx0aXBsZV9mbGFnIiwibXVsdGlwbGUiLCJyYXdQaCIsInBoIiwiUyIsImVzY19zYyIsInBoVG9rZW4iLCJsZiIsImxhYmVsX2ZpcnN0IiwiU2FuaXQiLCJzYW5pdGl6ZV9odG1sX25hbWUiLCJyZWdpc3RlciIsImZuIiwiX19yZWdpc3RyeSIsIk1hcCIsInNldCIsInVucmVnaXN0ZXIiLCJrZXkiLCJnZXQiLCJjb2RlIiwiZSIsImRldiIsImVycm9yIiwid3BiY19iZmJfX2Rpc3BhdGNoX2V2ZW50X3NhZmUiLCJXUEJDX0JGQl9FWFBPUlRfU0tJUF9BVFRSUyIsImVtaXRfbGluZV9ib2xkX2ZpZWxkIiwidG9rZW4iLCJsaW5lIiwic2tpcFR5cGVzIiwiZmFsbGJhY2tMaW5lIiwiZGVmYXVsdENvbnRlbnRGb3IiLCJyZXNlcnZlZCIsImluY2x1ZGVzIiwid2Fsa1NlY3Rpb24iLCJwcm9jZXNzRmllbGQiLCJwcm9jZXNzSXRlbSJdLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL19zcmMvZXhwb3J0L2J1aWxkZXItZXhwb3J0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBmaWxlOiAuLi9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2V4cG9ydC9idWlsZGVyLWV4cG9ydGVyLmpzXHJcbiAqL1xyXG4oZnVuY3Rpb24gKCkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cclxuXHRjb25zdCBjb3JlID0gd2luZG93LldQQkNfQkZCX0NvcmUgfHwge307XHJcblxyXG5cdC8vID09IEhlbHBlcnMg4oCUIFNoYXJlZCBoZWxwZXIgQVBJIGZvciBmaWVsZCBwYWNrcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0Ly8gPT0gVGhlc2UgYXJlIGdlbmVyaWMgdXRpbGl0aWVzIHRoYXQgcGFja3MgY2FuIGNhbGwgZnJvbSB0aGVpciBvd24gZXhwb3J0ZXJzOlxyXG5cdC8vID09ICAtIGNvbXB1dGVfbmFtZSgpLCBpZF9vcHRpb24oKSwgY2xhc3Nfb3B0aW9ucygpLCBzaXplX21heF90b2tlbigpLCBlbWl0X3RpbWVfc2VsZWN0KCksIGV0Yy5cclxuXHQvLyA9PSBObyBmaWVsZC10eXBlIGJyYW5jaGluZyBzaG91bGQgbGl2ZSBpbiB0aGUgY29yZSBleHBvcnRlci5cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmF1bHQgc2tpcCBsaXN0IChjYW4gYmUgZXh0ZW5kZWQvb3ZlcnJpZGRlbiBhdCBydW50aW1lKS5cclxuXHQgKiAtIE9ubHkgYXR0cmlidXRlIE5BTUVTIGhlcmUgKGNhc2UtaW5zZW5zaXRpdmUpLiBWYWx1ZXMgYXJlIHJlbW92ZWQgd2l0aCB0aGVtLlxyXG5cdCAqL1xyXG5cdGNvbnN0IHdwYmNfZXhwb3J0X3NraXBfYXR0cnNfZGVmYXVsdCA9IFsgJ2RhdGEtY29sc3R5bGVzLWFjdGl2ZScgXTtcclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGF0dHJpYnV0ZXMgYnkgbmFtZSBmcm9tIGFuIEhUTUwtbGlrZSBzdHJpbmcuXHJcblx0ICogTWF0Y2hlczpcclxuXHQgKiAgIC0gbmFtZVxyXG5cdCAqICAgLSBuYW1lPVwiLi4uXCIvbmFtZT0nLi4uJy9uYW1lPXZhbHVlXHJcblx0ICogd2l0aCBhbnkgc3Vycm91bmRpbmcgd2hpdGVzcGFjZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXHJcblx0ICogQHBhcmFtIHtzdHJpbmdbXX0gYXR0cnNfbG93ZXJjYXNlICAgYXR0cmlidXRlIG5hbWVzIChsb3dlcmNhc2UpXHJcblx0ICogQHJldHVybiB7c3RyaW5nfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHN0cmlwX2F0dHJpYnV0ZXNfZnJvbV9tYXJrdXAoaHRtbCwgYXR0cnNfbG93ZXJjYXNlKSB7XHJcblx0XHRpZiAoIWh0bWwgfHwgIWF0dHJzX2xvd2VyY2FzZT8ubGVuZ3RoKSByZXR1cm4gaHRtbDtcclxuXHRcdGxldCBvdXQgPSBTdHJpbmcoaHRtbCk7XHJcblx0XHRmb3IgKGNvbnN0IHJhd05hbWUgb2YgYXR0cnNfbG93ZXJjYXNlKSB7XHJcblx0XHRcdGlmICghcmF3TmFtZSkgY29udGludWU7XHJcblx0XHRcdGNvbnN0IG5hbWUgPSBTdHJpbmcocmF3TmFtZSkudG9Mb3dlckNhc2UoKS50cmltKCk7XHJcblx0XHRcdC8vIEVzY2FwZSBmb3IgcmVnZXhcclxuXHRcdFx0Y29uc3QgZXNjID0gbmFtZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xyXG5cdFx0XHQvLyBNYXRjaCBmdWxsIGF0dHJpYnV0ZSBuYW1lIG9ubHkgKG5leHQgY2hhciBpcyBOT1QgYSB2YWxpZCBuYW1lIGNoYXIpXHJcblx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChcclxuXHRcdFx0XHRgXFxcXHMke2VzY30oPyFbQS1aYS16MC05XzpcXFxcLV0pKD86PSg/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxcXFxzPl0qKSk/YCxcclxuXHRcdFx0XHQnZ2knXHJcblx0XHRcdCk7XHJcblx0XHRcdG91dCA9IG91dC5yZXBsYWNlKHJlLCAnJyk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gb3V0O1xyXG5cdH1cclxuXHJcblx0Ly8gPT0gSGVscGVycyDigJMgY29sdW1uIHN0eWxlcyBwYXJzaW5nICYgQ1NTIHZhcnMgYnVpbGRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHQvLyBLbm93biBrZXlzIHdlIHRyZWF0IGFzIHJlYWwgcGVyLWNvbHVtbiBzdHlsZSBvdmVycmlkZXMuXHJcblx0ZnVuY3Rpb24gaGFzX25vbl9kZWZhdWx0X2NvbF9zdHlsZXMob2JqKSB7XHJcblx0XHRpZiAoICFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHZhciBrZXlzID0gWyAnZGlyJywgJ3dyYXAnLCAnamMnLCAnYWknLCAnZ2FwJywgJ2FzZWxmJywgJ2FjJyBdO1xyXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xyXG5cdFx0XHRpZiAoIG9ialtrXSAhPSBudWxsICYmIFN0cmluZyggb2JqW2tdICkudHJpbSgpICE9PSAnJyApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgYGNvbF9zdHlsZXNgIGNvbWluZyBmcm9tIGEgU2VjdGlvbi5cclxuXHQgKiBBY2NlcHRzOiBKU09OIHN0cmluZyBvciBhcnJheSBvZiBvYmplY3RzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8QXJyYXl8dW5kZWZpbmVkfG51bGx9IHJhd1xyXG5cdCAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBhcnJheSBhbGlnbmVkIHRvIGNvbHVtbnMgKG1heSBiZSBlbXB0eSlcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBwYXJzZV9jb2xfc3R5bGVzX2pzb24ocmF3KSB7XHJcblx0XHRpZiAoICFyYXcgKSByZXR1cm4gW107XHJcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHJhdyApICkgcmV0dXJuIHJhdy5maWx0ZXIoIGZ1bmN0aW9uICh4KSB7XHJcblx0XHRcdHJldHVybiB4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JztcclxuXHRcdH0gKTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiByYXcgPT09ICdzdHJpbmcnICkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBhcnIgPSBKU09OLnBhcnNlKCByYXcgKTtcclxuXHRcdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSggYXJyICkgPyBhcnIuZmlsdGVyKCBmdW5jdGlvbiAoeCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnO1xyXG5cdFx0XHRcdH0gKSA6IFtdO1xyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gW107XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBCdWlsZCBDU1MgdmFyaWFibGUgZGVjbGFyYXRpb25zIHN0cmluZyBmb3IgYSBjb2x1bW4gc3R5bGUgb2JqZWN0LlxyXG5cdCAqIEtub3duIGtleXMgLT4gQ1NTIHZhcnM6XHJcblx0ICogIC0gZGlyICAtPiAtLXdwYmMtYmZiLWNvbC1kaXJcclxuXHQgKiAgLSB3cmFwIC0+IC0td3BiYy1iZmItY29sLXdyYXBcclxuXHQgKiAgLSBqYyAgIC0+IC0td3BiYy1iZmItY29sLWpjXHJcblx0ICogIC0gYWkgICAtPiAtLXdwYmMtYmZiLWNvbC1haVxyXG5cdCAqICAtIGdhcCAgLT4gLS13cGJjLWJmYi1jb2wtZ2FwXHJcblx0ICogIC0gYWMgICAtPiAtLXdwYmMtYmZiLWNvbC1hY1xyXG5cdCAqICAtIGFzZWxmLT4gLS13cGJjLWJmYi1jb2wtYXNlbGZcclxuXHQgKlxyXG5cdCAqIFVua25vd24ga2V5cyBhcmUgZXhwb3J0ZWQgYXMgYC0td3BiYy1iZmItY29sLSR7a2V5fWAuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdHxudWxsfHVuZGVmaW5lZH0gb2JqXHJcblx0ICogQHJldHVybnMge3N0cmluZ30gZS5nLiBcIi0td3BiYy1iZmItY29sLWRpcjogcm93OyAtLXdwYmMtYmZiLWNvbC13cmFwOiB3cmFwO1wiXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYnVpbGRfY29sX2Nzc192YXJzKG9iaikge1xyXG5cdFx0aWYgKCAhb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnICkgcmV0dXJuICcnO1xyXG5cclxuXHRcdHZhciBtYXAgPSB7XHJcblx0XHRcdGRpciAgOiAnLS13cGJjLWJmYi1jb2wtZGlyJyxcclxuXHRcdFx0d3JhcCA6ICctLXdwYmMtYmZiLWNvbC13cmFwJyxcclxuXHRcdFx0amMgICA6ICctLXdwYmMtYmZiLWNvbC1qYycsXHJcblx0XHRcdGFpICAgOiAnLS13cGJjLWJmYi1jb2wtYWknLFxyXG5cdFx0XHRnYXAgIDogJy0td3BiYy1iZmItY29sLWdhcCcsXHJcblx0XHRcdGFjICAgOiAnLS13cGJjLWJmYi1jb2wtYWMnLFxyXG5cdFx0XHRhc2VsZjogJy0td3BiYy1iZmItY29sLWFzZWxmJ1xyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgcGFydHMgPSBbXTtcclxuXHJcblx0XHRmb3IgKCB2YXIgayBpbiBvYmogKSB7XHJcblx0XHRcdGlmICggIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggb2JqLCBrICkgKSBjb250aW51ZTtcclxuXHRcdFx0dmFyIHYgPSBvYmpba107XHJcblx0XHRcdGlmICggdiA9PSBudWxsIHx8IHYgPT09ICcnICkgY29udGludWU7XHJcblxyXG5cdFx0XHR2YXIgdmFyX25hbWUgPSBtYXBba10gfHwgKCctLXdwYmMtYmZiLWNvbC0nICsgU3RyaW5nKCBrICkucmVwbGFjZSggL1teYS16MC05Xy1dL2dpLCAnJyApLnRvTG93ZXJDYXNlKCkpO1xyXG5cdFx0XHRwYXJ0cy5wdXNoKCB2YXJfbmFtZSArICc6ICcgKyBTdHJpbmcoIHYgKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFsd2F5cyBpbmNsdWRlIGV4cGxpY2l0IG1pbiBndWFyZCAocmVxdWVzdGVkKTogLS13cGJjLWNvbC1taW46IDBweDtcclxuXHRcdHBhcnRzLnB1c2goICctLXdwYmMtY29sLW1pbjogMHB4JyApO1xyXG5cclxuXHRcdHJldHVybiBwYXJ0cy5qb2luKCAnOycgKSArIChwYXJ0cy5sZW5ndGggPyAnOycgOiAnJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNvbHZlIG51bWVyaWMgcGVyY2VudCBmcm9tIGEgd2lkdGggdG9rZW4gbGlrZSBcIjQ4LjUlXCIuXHJcblx0ICogRmFsbHMgYmFjayB0byBgZmFsbGJhY2tfcGVyY2VudGAgaWYgbm90IGluIHBlcmNlbnQgZm9ybWF0LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZHxudWxsfSB3aWR0aF90b2tlblxyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBmYWxsYmFja19wZXJjZW50XHJcblx0ICogQHJldHVybnMge251bWJlcn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiByZXNvbHZlX2ZsZXhfYmFzaXNfcGVyY2VudCh3aWR0aF90b2tlbiwgZmFsbGJhY2tfcGVyY2VudCkge1xyXG5cdFx0aWYgKCB0eXBlb2Ygd2lkdGhfdG9rZW4gPT09ICdzdHJpbmcnICkge1xyXG5cdFx0XHR2YXIgcyA9IHdpZHRoX3Rva2VuLnRyaW0oKTtcclxuXHRcdFx0aWYgKCBzLmVuZHNXaXRoKCAnJScgKSApIHtcclxuXHRcdFx0XHR2YXIgcCA9IHBhcnNlRmxvYXQoIHMgKTtcclxuXHRcdFx0XHRpZiAoIGlzRmluaXRlKCBwICkgKSByZXR1cm4gcDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKCB0eXBlb2Ygd2lkdGhfdG9rZW4gPT09ICdudW1iZXInICYmIGlzRmluaXRlKCB3aWR0aF90b2tlbiApICkge1xyXG5cdFx0XHRyZXR1cm4gd2lkdGhfdG9rZW47XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsbGJhY2tfcGVyY2VudDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbXB1dGUgZWZmZWN0aXZlIGZsZXgtYmFzaXMgdmFsdWVzIHRoYXQgcmVzcGVjdCBpbnRlci1jb2x1bW4gZ2FwXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gY29sdW1uc1xyXG5cdCAqIEBwYXJhbSBnYXBfcGVyY2VudFxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzKGNvbHVtbnMsIGdhcF9wZXJjZW50ID0gMykge1xyXG5cclxuXHRcdGNvbnN0IG4gPSBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID8gY29sdW1ucy5sZW5ndGggOiAxO1xyXG5cclxuXHRcdGNvbnN0IHJhdyA9IGNvbHVtbnMubWFwKCAoY29sKSA9PiB7XHJcblx0XHRcdGNvbnN0IHcgPSBjb2wgJiYgY29sLndpZHRoICE9IG51bGwgPyBTdHJpbmcoIGNvbC53aWR0aCApLnRyaW0oKSA6ICcnO1xyXG5cdFx0XHRjb25zdCBwID0gdy5lbmRzV2l0aCggJyUnICkgPyBwYXJzZUZsb2F0KCB3ICkgOiB3ID8gcGFyc2VGbG9hdCggdyApIDogTmFOO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBwICkgPyBwIDogMTAwIC8gbjtcclxuXHRcdH0gKTtcclxuXHJcblx0XHRjb25zdCBzdW1fcmF3ICAgICA9IHJhdy5yZWR1Y2UoIChhLCBiKSA9PiBhICsgYiwgMCApIHx8IDEwMDtcclxuXHRcdGNvbnN0IGdwICAgICAgICAgID0gTnVtYmVyLmlzRmluaXRlKCArZ2FwX3BlcmNlbnQgKSA/ICtnYXBfcGVyY2VudCA6IDM7XHJcblx0XHRjb25zdCB0b3RhbF9nYXBzICA9IE1hdGgubWF4KCAwLCBuIC0gMSApICogZ3A7XHJcblx0XHRjb25zdCBhdmFpbGFibGUgICA9IE1hdGgubWF4KCAwLCAxMDAgLSB0b3RhbF9nYXBzICk7XHJcblx0XHRjb25zdCBzY2FsZV9yYXRpbyA9IGF2YWlsYWJsZSAvIHN1bV9yYXc7XHJcblxyXG5cdFx0cmV0dXJuIHJhdy5tYXAoIChwKSA9PiBNYXRoLm1heCggMCwgcCAqIHNjYWxlX3JhdGlvICkgKTtcclxuXHR9XHJcblxyXG5cdC8vID09IGFkYXB0ZXI6IGJ1aWxkZXIgKGFycmF5LW9mLXBhZ2VzKSA+IGV4cG9ydGVyIHNoYXBlIHsgcGFnZXM6IFsgeyBpdGVtczpbIHtraW5kLGRhdGF9IF0gfSBdIH0gPT09PT09PT09PT09PT09PT09XHJcblx0ZnVuY3Rpb24gYWRhcHRfYnVpbGRlcl9zdHJ1Y3R1cmVfdG9fZXhwb3J0ZXIoc3RydWN0dXJlKSB7XHJcblxyXG4vL1x0XHRpZiAoICFBcnJheS5pc0FycmF5KCBzdHJ1Y3R1cmUgKSApIHJldHVybiB7IHBhZ2VzOiBbXSB9O1xyXG5cclxuXHRcdC8vIEVuc3VyZSBhdCBsZWFzdCBvbmUgcGFnZSBleGlzdHMsIGV2ZW4gd2hlbiBCdWlsZGVyIHN0cnVjdHVyZSBpcyBlbXB0eSBgW11gLlxyXG5cdFx0Ly8gVGhpcyBrZWVwcyBleHBvcnRlZCBBZHZhbmNlZCBGb3JtIHZhbGlkICh3aXphcmQgc3RlcCAjMSBleGlzdHMpLlxyXG5cdFx0aWYgKCAhIEFycmF5LmlzQXJyYXkoIHN0cnVjdHVyZSApIHx8IHN0cnVjdHVyZS5sZW5ndGggPT09IDAgKSB7XHJcblx0XHRcdHJldHVybiB7IHBhZ2VzOiBbIHsgaXRlbXM6IFtdIH0gXSB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG5vcm1hbGl6ZV9vcHRpb25zID0gKG9wdHMpID0+IHtcclxuXHRcdFx0aWYgKCAhQXJyYXkuaXNBcnJheSggb3B0cyApICkgcmV0dXJuIFtdO1xyXG5cdFx0XHRyZXR1cm4gb3B0cy5tYXAoIChvKSA9PiB7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgbyA9PT0gJ3N0cmluZycgKSByZXR1cm4geyBsYWJlbDogbywgdmFsdWU6IG8sIHNlbGVjdGVkOiBmYWxzZSB9O1xyXG5cdFx0XHRcdGlmICggbyAmJiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRsYWJlbCAgIDogU3RyaW5nKCBvLmxhYmVsID8/IG8udmFsdWUgPz8gJycgKSxcclxuXHRcdFx0XHRcdFx0dmFsdWUgICA6IFN0cmluZyggby52YWx1ZSA/PyBvLmxhYmVsID8/ICcnICksXHJcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiAhIW8uc2VsZWN0ZWRcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB7IGxhYmVsOiBTdHJpbmcoIG8gKSwgdmFsdWU6IFN0cmluZyggbyApLCBzZWxlY3RlZDogZmFsc2UgfTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyA9PSBBZGFwdGVyIOKAkyBhdHRhY2ggcGFyc2VkIHBlci1jb2x1bW4gYGNvbF9zdHlsZXNgIGZyb20gU2VjdGlvbiBpbnRvIGVhY2ggY29sdW1uXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHRjb25zdCB3YWxrX3NlY3Rpb24gPSAoc2VjKSA9PiB7XHJcblx0XHRcdGNvbnN0IHNlY3Rpb25fY29sX3N0eWxlcyA9IHBhcnNlX2NvbF9zdHlsZXNfanNvbiggc2VjICYmIHNlYy5jb2xfc3R5bGVzICk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGlkICAgICA6IHNlYz8uaWQsXHJcblx0XHRcdFx0Y29sdW1uczogKHNlYz8uY29sdW1ucyB8fCBbXSkubWFwKCAoY29sLCBjb2xfaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheSggY29sPy5pdGVtcyApXHJcblx0XHRcdFx0XHRcdD8gY29sLml0ZW1zXHJcblx0XHRcdFx0XHRcdDogW1xyXG5cdFx0XHRcdFx0XHRcdC4uLihjb2w/LmZpZWxkcyB8fCBbXSkubWFwKCAoZikgPT4gKHsgdHlwZTogJ2ZpZWxkJywgZGF0YTogZiB9KSApLFxyXG5cdFx0XHRcdFx0XHRcdC4uLihjb2w/LnNlY3Rpb25zIHx8IFtdKS5tYXAoIChzKSA9PiAoeyB0eXBlOiAnc2VjdGlvbicsIGRhdGE6IHMgfSkgKVxyXG5cdFx0XHRcdFx0XHRdO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IGl0ZW1zXHJcblx0XHRcdFx0XHRcdC5maWx0ZXIoIChpdCkgPT4gaXQgJiYgaXQudHlwZSA9PT0gJ2ZpZWxkJyApXHJcblx0XHRcdFx0XHRcdC5tYXAoIChpdCkgPT4gKHsgLi4uaXQuZGF0YSwgb3B0aW9uczogbm9ybWFsaXplX29wdGlvbnMoIGl0LmRhdGE/Lm9wdGlvbnMgKSB9KSApO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHNlY3Rpb25zID0gaXRlbXNcclxuXHRcdFx0XHRcdFx0LmZpbHRlciggKGl0KSA9PiBpdCAmJiBpdC50eXBlID09PSAnc2VjdGlvbicgKVxyXG5cdFx0XHRcdFx0XHQubWFwKCAoaXQpID0+IHdhbGtfc2VjdGlvbiggaXQuZGF0YSApICk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0d2lkdGggICAgICA6IGNvbD8ud2lkdGggfHwgJzEwMCUnLFxyXG5cdFx0XHRcdFx0XHRzdHlsZSAgICAgIDogY29sPy5zdHlsZSB8fCBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb2xfc3R5bGVzIDogc2VjdGlvbl9jb2xfc3R5bGVzWyBjb2xfaW5kZXggXSB8fCBudWxsLCAgIC8vIDwtIGF0dGFjaCBzdHlsZSBvYmplY3QgcGVyIGNvbHVtblxyXG5cdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdHNlY3Rpb25zXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH0gKVxyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHJcblxyXG5cdFx0Y29uc3QgcGFnZXMgPSBzdHJ1Y3R1cmUubWFwKCAocGFnZSkgPT4ge1xyXG5cdFx0XHRjb25zdCBpdGVtcyA9IFtdO1xyXG5cdFx0XHQocGFnZT8uY29udGVudCB8fCBbXSkuZm9yRWFjaCggKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRpZiAoICFpdGVtICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlmICggaXRlbS50eXBlID09PSAnc2VjdGlvbicgJiYgaXRlbS5kYXRhICkge1xyXG5cdFx0XHRcdFx0aXRlbXMucHVzaCggeyBraW5kOiAnc2VjdGlvbicsIGRhdGE6IHdhbGtfc2VjdGlvbiggaXRlbS5kYXRhICkgfSApO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGl0ZW0udHlwZSA9PT0gJ2ZpZWxkJyAmJiBpdGVtLmRhdGEgKSB7XHJcblx0XHRcdFx0XHRpdGVtcy5wdXNoKCB7XHJcblx0XHRcdFx0XHRcdGtpbmQ6ICdmaWVsZCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHsgLi4uaXRlbS5kYXRhLCBvcHRpb25zOiBub3JtYWxpemVfb3B0aW9ucyggaXRlbS5kYXRhLm9wdGlvbnMgKSB9XHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiB7IGl0ZW1zIH07XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0cmV0dXJuIHsgcGFnZXMgfTtcclxuXHR9XHJcblxyXG5cclxuXHQvLyA9PSBCb29raW5nIEZyb20gRXhwb3J0ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdGNsYXNzIFdQQkNfQkZCX0V4cG9ydGVyIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE11dGFibGUgc2tpcC1saXN0IGZvciBhdHRyaWJ1dGUgbmFtZXMgKGxvd2VyY2FzZSkuXHJcblx0XHQgKiBZb3UgY2FuIG92ZXJyaWRlIGl0IHZpYSBzZXRfc2tpcF9hdHRycygpIG9yIGFkZCB3aXRoIGFkZF9za2lwX2F0dHJzKCkuXHJcblx0XHQgKiBAdHlwZSB7U2V0PHN0cmluZz59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBza2lwX2F0dHJzID0gbmV3IFNldCgpO1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVwbGFjZSB0aGUgZW50aXJlIHNraXAgbGlzdC5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nW119IGFyclxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2V0X3NraXBfYXR0cnMoIGFyciApIHtcclxuXHRcdFx0dGhpcy5za2lwX2F0dHJzID0gbmV3IFNldChcclxuXHRcdFx0XHQoQXJyYXkuaXNBcnJheSggYXJyICkgPyBhcnIgOiBbXSkubWFwKCAobikgPT4gU3RyaW5nKCBuICkudG9Mb3dlckNhc2UoKS50cmltKCkgKS5maWx0ZXIoIEJvb2xlYW4gKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWRkIG9uZSBvciBtYW55IGF0dHJpYnV0ZXMgdG8gdGhlIHNraXAgbGlzdC5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBuYW1lc1xyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgYWRkX3NraXBfYXR0cnMoIG5hbWVzICkge1xyXG5cdFx0XHQoIEFycmF5LmlzQXJyYXkoIG5hbWVzICkgPyBuYW1lcyA6IFsgbmFtZXMgXSApXHJcblx0XHRcdFx0Lm1hcCggKG4pID0+IFN0cmluZyggbiApLnRvTG93ZXJDYXNlKCkudHJpbSgpIClcclxuXHRcdFx0XHQuZmlsdGVyKCBCb29sZWFuIClcclxuXHRcdFx0XHQuZm9yRWFjaCggKG4pID0+IHRoaXMuc2tpcF9hdHRycy5hZGQoIG4gKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVtb3ZlIG9uZSBhdHRyaWJ1dGUgZnJvbSB0aGUgc2tpcCBsaXN0LlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJlbW92ZV9za2lwX2F0dHIoIG5hbWUgKSB7XHJcblx0XHRcdGlmICggISBuYW1lICkgeyByZXR1cm47IH1cclxuXHRcdFx0dGhpcy5za2lwX2F0dHJzLmRlbGV0ZSggU3RyaW5nKCBuYW1lICkudG9Mb3dlckNhc2UoKS50cmltKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEFwcGx5IGF0dHJpYnV0ZSBza2lwcGluZyB0byBhIGZpbmFsIEhUTUwgc3RyaW5nLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcclxuXHRcdCAqIEByZXR1cm4ge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2V4cG9ydCggaHRtbCApIHtcclxuXHRcdFx0cmV0dXJuIHN0cmlwX2F0dHJpYnV0ZXNfZnJvbV9tYXJrdXAoIGh0bWwsIEFycmF5LmZyb20oIHRoaXMuc2tpcF9hdHRycyApICk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXhwb3J0IGFkYXB0ZWQgc3RydWN0dXJlIHRvIGFkdmFuY2VkIGZvcm0gdGV4dCAod2l0aCA8cj4vPGM+IGxheW91dCBhbmQgd2l6YXJkIHdyYXBwZXIpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhZGFwdGVkXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gIFtvcHRpb25zLm5ld2xpbmU9XCJcXG5cIl1cclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWRkTGFiZWxzPXRydWVdXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gIFtvcHRpb25zLmdhcFBlcmNlbnQ9M11cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBleHBvcnRfZm9ybShhZGFwdGVkLCBvcHRpb25zID0ge30pIHtcclxuXHRcdFx0Ly8gaW5kZW50OiB1c2UgcmVhbCBUQUIgYnkgZGVmYXVsdCAoY2FuIGJlIG92ZXJyaWRkZW4gdmlhIG9wdGlvbnMuaW5kZW50KVxyXG5cdFx0XHRjb25zdCBjZmcgPSB7IG5ld2xpbmU6ICdcXG4nLCBhZGRMYWJlbHM6IHRydWUsIGdhcFBlcmNlbnQ6IDMsIGluZGVudDogJ1xcdCcsIC4uLm9wdGlvbnMgfTtcclxuXHRcdFx0Y29uc3QgSU5EID0gKHR5cGVvZiBjZmcuaW5kZW50ID09PSAnc3RyaW5nJykgPyBjZmcuaW5kZW50IDogJ1xcdCc7XHJcblxyXG5cdFx0XHRsZXQgZGVwdGggICA9IDA7XHJcblx0XHRcdGNvbnN0IGxpbmVzID0gW107XHJcblx0XHRcdGNvbnN0IHB1c2ggID0gKHMgPSAnJykgPT4gbGluZXMucHVzaCggSU5ELnJlcGVhdCggZGVwdGggKSArIFN0cmluZyggcyApICk7XHJcblx0XHRcdGNvbnN0IG9wZW4gID0gKHMgPSAnJykgPT4ge1xyXG5cdFx0XHRcdHB1c2goIHMgKTtcclxuXHRcdFx0XHRkZXB0aCsrO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRjb25zdCBjbG9zZSA9IChzID0gJycpID0+IHtcclxuXHRcdFx0XHRkZXB0aCA9IE1hdGgubWF4KCAwLCBkZXB0aCAtIDEgKTtcclxuXHRcdFx0XHRwdXNoKCBzICk7XHJcblx0XHRcdH07XHJcblx0XHRcdGNvbnN0IGJsYW5rID0gKCkgPT4ge1xyXG5cdFx0XHRcdGxpbmVzLnB1c2goICcnICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoICFhZGFwdGVkIHx8ICFBcnJheS5pc0FycmF5KCBhZGFwdGVkLnBhZ2VzICkgKSByZXR1cm4gJyc7XHJcblxyXG5cdFx0XHQvLyBBbHdheXMgZXhwb3J0IGF0IGxlYXN0IG9uZSB3aXphcmQgc3RlcCB0byBrZWVwIEFkdmFuY2VkIEZvcm0gc3RydWN0dXJlIHZhbGlkLlxyXG5cdFx0XHRjb25zdCBwYWdlcyA9IGFkYXB0ZWQucGFnZXMubGVuZ3RoID8gYWRhcHRlZC5wYWdlcyA6IFsgeyBpdGVtczogW10gfSBdO1xyXG5cclxuXHRcdFx0Y29uc3QgY3R4ID0geyB1c2VkSWRzOiBuZXcgU2V0KCkgfTtcclxuXHJcblx0XHRcdG9wZW4oIGA8ZGl2IGNsYXNzPVwid3BiY19iZmJfZm9ybSB3cGJjX3dpemFyZF9fYm9yZGVyX2NvbnRhaW5lclwiPmAgKTtcclxuXHJcblx0XHRcdC8vIG9uZS1wZXItZm9ybSBndWFyZHMgKGNhbGVuZGFyIGlzIG5vdCBnYXRlZCBoZXJlKVxyXG5cdFx0XHRjb25zdCBvbmNlID0geyBjYXB0Y2hhOiAwLCBjb3VudHJ5OiAwLCBjb3Vwb246IDAsIGNvc3RfY29ycmVjdGlvbnM6IDAsIHN1Ym1pdDogMCB9O1xyXG5cclxuXHRcdFx0cGFnZXMuZm9yRWFjaCggKHBhZ2UsIHBhZ2VfaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBpc19maXJzdCA9IHBhZ2VfaW5kZXggPT09IDA7XHJcblx0XHRcdFx0Y29uc3Qgc3RlcF9udW0gPSBwYWdlX2luZGV4ICsgMTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaGlkZGVuX2NsYXNzID0gaXNfZmlyc3QgPyAnJyA6ICcgd3BiY193aXphcmRfc3RlcF9oaWRkZW4nO1xyXG5cdFx0XHRcdGNvbnN0IGhpZGRlbl9zdHlsZSA9IGlzX2ZpcnN0ID8gJycgOiAnIHN0eWxlPVwiZGlzcGxheTpub25lO2NsZWFyOmJvdGg7XCInO1xyXG5cdFx0XHRcdG9wZW4oIGA8ZGl2IGNsYXNzPVwid3BiY193aXphcmRfc3RlcCB3cGJjX19mb3JtX19kaXYgd3BiY193aXphcmRfc3RlcCR7c3RlcF9udW19JHtoaWRkZW5fY2xhc3N9XCIke2hpZGRlbl9zdHlsZX0+YCApO1xyXG5cclxuXHRcdFx0XHQocGFnZS5pdGVtcyB8fCBbXSkuZm9yRWFjaCggKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdGlmICggaXRlbS5raW5kID09PSAnc2VjdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFdQQkNfQkZCX0V4cG9ydGVyLnJlbmRlcl9zZWN0aW9uKCBpdGVtLmRhdGEsIHsgb3BlbiwgY2xvc2UsIHB1c2gsIGJsYW5rIH0sIGNmZywgb25jZSwgY3R4ICk7XHJcblx0XHRcdFx0XHRcdC8vIGJsYW5rKCk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBpdGVtLmtpbmQgPT09ICdmaWVsZCcgKSB7XHJcblx0XHRcdFx0XHRcdG9wZW4oIGA8cj5gICk7XHJcblx0XHRcdFx0XHRcdG9wZW4oIGA8Yz5gICk7XHJcblx0XHRcdFx0XHRcdFdQQkNfQkZCX0V4cG9ydGVyLnJlbmRlcl9maWVsZF9ub2RlKCBpdGVtLmRhdGEsIHsgb3BlbiwgY2xvc2UsIHB1c2gsIGJsYW5rIH0sIGNmZywgb25jZSwgY3R4ICk7XHJcblx0XHRcdFx0XHRcdGNsb3NlKCBgPC9jPmAgKTtcclxuXHRcdFx0XHRcdFx0Y2xvc2UoIGA8L3I+YCApO1xyXG5cdFx0XHRcdFx0XHQvLyBibGFuaygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHJcblx0XHRcdFx0Y2xvc2UoIGA8L2Rpdj5gICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGNsb3NlKCBgPC9kaXY+YCApO1xyXG5cdFx0XHRyZXR1cm4gV1BCQ19CRkJfRXhwb3J0ZXIuc2FuaXRpemVfZXhwb3J0KCBsaW5lcy5qb2luKCBjZmcubmV3bGluZSApICk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSGlnaC1sZXZlbCBoZWxwZXI6IGV4cG9ydCBmdWxsIHBhY2thZ2UgZnJvbSByYXcgQnVpbGRlciBzdHJ1Y3R1cmUuXHJcblx0XHQgKlxyXG5cdFx0ICogLSBBZGFwdHMgcmF3IEJ1aWxkZXIgc3RydWN0dXJlIChwYWdlcy9zZWN0aW9ucy9jb2x1bW5zL2l0ZW1zKSBmb3IgZXhwb3J0ZXJzLlxyXG5cdFx0ICogLSBCdWlsZHM6XHJcblx0XHQgKiAgICAgIOKAoiBhZHZhbmNlZF9mb3JtICAtPiDigJxBZHZhbmNlZCBGb3JtIChleHBvcnQp4oCdIHRleHQuXHJcblx0XHQgKiAgICAgIOKAoiBmaWVsZHNfZGF0YSAgICAtPiDigJxDb250ZW50IG9mIGJvb2tpbmcgZmllbGRzIGRhdGEgKGV4cG9ydCnigJ0gdGV4dC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0FycmF5fSAgc3RydWN0dXJlICBSYXcgQnVpbGRlciBzdHJ1Y3R1cmUgZnJvbSB3cGJjX2JmYi5nZXRfc3RydWN0dXJlKCkuXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ2FwUGVyY2VudD0zXSAgQ29sdW1uIGdhcCBwZXJjZW50IGZvciBsYXlvdXQgbWF0aC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7e1xyXG5cdFx0ICogICBhZHZhbmNlZF9mb3JtOiBzdHJpbmcsXHJcblx0XHQgKiAgIGZpZWxkc19kYXRhOiBzdHJpbmcsXHJcblx0XHQgKiAgIHN0cnVjdHVyZTogQXJyYXksXHJcblx0XHQgKiAgIGFkYXB0ZWQ6IE9iamVjdFxyXG5cdFx0ICogfX1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGV4cG9ydF9hbGwoIHN0cnVjdHVyZSwgb3B0aW9ucyA9IHt9ICkge1xyXG5cclxuXHRcdFx0Ly8gMSkgQWRhcHQgQnVpbGRlciBKU09OIHRvIGV4cG9ydGVyIHNoYXBlIChwYWdlc1tdIC0+IGl0ZW1zW10pLlxyXG5cdFx0XHRjb25zdCBhZGFwdGVkID0gYWRhcHRfYnVpbGRlcl9zdHJ1Y3R1cmVfdG9fZXhwb3J0ZXIoIHN0cnVjdHVyZSB8fCBbXSApO1xyXG5cclxuXHRcdFx0Ly8gMikgQWR2YW5jZWQgRm9ybSB0ZXh0IChzYW1lIGxvZ2ljIGFzIGRlYnVnIHBhbmVsKS5cclxuXHRcdFx0Y29uc3QgZ2FwX3BlcmNlbnQgICA9ICggb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5nYXBQZXJjZW50ID09PSAnbnVtYmVyJyApID8gb3B0aW9ucy5nYXBQZXJjZW50IDogMztcclxuXHRcdFx0Y29uc3QgYWR2YW5jZWRfZm9ybSA9IFdQQkNfQkZCX0V4cG9ydGVyLmV4cG9ydF9mb3JtKFxyXG5cdFx0XHRcdGFkYXB0ZWQsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0YWRkTGFiZWxzIDogdHJ1ZSxcclxuXHRcdFx0XHRcdGdhcFBlcmNlbnQ6IGdhcF9wZXJjZW50XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gMykgQ29udGVudCBvZiBib29raW5nIGZpZWxkcyBkYXRhIChpZiBjb250ZW50IGV4cG9ydGVyIGlzIGF2YWlsYWJsZSkuXHJcblx0XHRcdGxldCBmaWVsZHNfZGF0YSA9ICcnO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0d2luZG93LldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlciAmJlxyXG5cdFx0XHRcdHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyLmV4cG9ydF9jb250ZW50ID09PSAnZnVuY3Rpb24nXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGZpZWxkc19kYXRhID0gd2luZG93LldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5leHBvcnRfY29udGVudChcclxuXHRcdFx0XHRcdGFkYXB0ZWQsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGFkZExhYmVsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0c2VwICAgICAgOiAnOiAnXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRhZHZhbmNlZF9mb3JtOiBhZHZhbmNlZF9mb3JtIHx8ICcnLFxyXG5cdFx0XHRcdGZpZWxkc19kYXRhICA6IGZpZWxkc19kYXRhIHx8ICcnLFxyXG5cdFx0XHRcdHN0cnVjdHVyZSAgICA6IHN0cnVjdHVyZSB8fCBbXSxcclxuXHRcdFx0XHRhZGFwdGVkICAgICAgOiBhZGFwdGVkXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gRXhwb3J0ZXIg4oCTIHJlbmRlcl9zZWN0aW9uKCkgbm93IGluamVjdHMgcGVyLWNvbHVtbiBDU1MgdmFycyBmcm9tIGBjb2xfc3R5bGVzYFxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0c3RhdGljIHJlbmRlcl9zZWN0aW9uKHNlY3Rpb24sIGlvLCBjZmcsIG9uY2UsIGN0eCkge1xyXG5cclxuXHRcdFx0b25jZSA9IG9uY2UgfHwgeyBjYXB0Y2hhOiAwLCBjb3VudHJ5OiAwLCBjb3Vwb246IDAsIGNvc3RfY29ycmVjdGlvbnM6IDAsIHN1Ym1pdDogMCB9O1xyXG5cdFx0XHRjdHggID0gY3R4IHx8IHsgdXNlZElkczogbmV3IFNldCgpIH07XHJcblxyXG5cdFx0XHRjb25zdCB7IG9wZW4sIGNsb3NlIH0gPSBpbztcclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5pc0FycmF5KCBzZWN0aW9uLmNvbHVtbnMgKSAmJiBzZWN0aW9uLmNvbHVtbnMubGVuZ3RoXHJcblx0XHRcdFx0PyBzZWN0aW9uLmNvbHVtbnNcclxuXHRcdFx0XHQ6IFsgeyB3aWR0aDogJzEwMCUnLCBmaWVsZHM6IFtdLCBzZWN0aW9uczogW10gfSBdO1xyXG5cclxuXHRcdFx0Ly8gUm93IGlzIGFjdGl2ZSBpZiBBTlkgY29sdW1uIGNhcnJpZXMgc3R5bGVzLlxyXG5cdFx0XHR2YXIgcm93X2lzX2FjdGl2ZSA9IGNvbHMuc29tZSggZnVuY3Rpb24gKGNvbCkgeyByZXR1cm4gaGFzX25vbl9kZWZhdWx0X2NvbF9zdHlsZXMoIGNvbCAmJiBjb2wuY29sX3N0eWxlcyApOyB9ICk7XHJcblx0XHRcdHZhciByb3dfYXR0cl9hY3RpdmUgPSByb3dfaXNfYWN0aXZlID8gJyBkYXRhLWNvbHN0eWxlcy1hY3RpdmU9XCIxXCInIDogJyc7XHJcblxyXG5cdFx0XHRvcGVuKCBgPHIke3Jvd19hdHRyX2FjdGl2ZX0+YCApO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFzZXMgICAgPSBjb21wdXRlX2VmZmVjdGl2ZV9iYXNlcyggY29scywgY2ZnLmdhcFBlcmNlbnQgKTtcclxuXHRcdFx0Y29uc3QgZXNjX2F0dHIgPSBjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV9odG1sO1xyXG5cclxuXHRcdFx0Y29scy5mb3JFYWNoKCAoY29sLCBpZHgpID0+IHtcclxuXHRcdFx0XHQvLyAoMSkgUmVzb2x2ZSBmbGV4LWJhc2lzLlxyXG5cdFx0XHRcdHZhciBlZmZfYmFzaXMgPSByZXNvbHZlX2ZsZXhfYmFzaXNfcGVyY2VudCggY29sICYmIGNvbC53aWR0aCwgTnVtYmVyLmlzRmluaXRlKCBiYXNlc1tpZHhdICkgPyArYmFzZXNbaWR4XSA6IDEwMCApO1xyXG5cclxuXHRcdFx0XHQvLyAoMikgQnVpbGQgaW5saW5lIHN0eWxlLlxyXG5cdFx0XHRcdHZhciBzdHlsZV9wYXJ0cyA9IFtdO1xyXG5cclxuXHRcdFx0XHRpZiAoIGNvbCAmJiB0eXBlb2YgY29sLnN0eWxlID09PSAnc3RyaW5nJyAmJiBjb2wuc3R5bGUudHJpbSgpICkge1xyXG5cdFx0XHRcdFx0c3R5bGVfcGFydHMucHVzaCggY29sLnN0eWxlLnRyaW0oKS5yZXBsYWNlKCAvOytcXHMqJC8sICcnICkgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3R5bGVfcGFydHMucHVzaCggJ2ZsZXgtYmFzaXM6ICcgKyAoIE51bWJlci5pc0Zpbml0ZSggZWZmX2Jhc2lzICkgPyBlZmZfYmFzaXMudG9TdHJpbmcoKSA6ICcxMDAnICkgKyAnJScgKTtcclxuXHJcblx0XHRcdFx0dmFyIGNzc192YXJzX3N0ciA9IGJ1aWxkX2NvbF9jc3NfdmFycyggY29sICYmIGNvbC5jb2xfc3R5bGVzICk7XHJcblx0XHRcdFx0aWYgKCBjc3NfdmFyc19zdHIgKSB7XHJcblx0XHRcdFx0XHRzdHlsZV9wYXJ0cy5wdXNoKCBjc3NfdmFyc19zdHIucmVwbGFjZSggL147fDskL2csICcnICkgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHZhciBzdHlsZV9hdHRyID0gYCBzdHlsZT1cIiR7ZXNjX2F0dHIoIHN0eWxlX3BhcnRzLmpvaW4oICc7ICcgKSApfVwiYDtcclxuXHJcblx0XHRcdFx0Ly8gKDMpIENvbHVtbi1sZXZlbCBhY3RpdmF0aW9uIChtb3JlIHByZWNpc2Ugc2NvcGluZylcclxuXHRcdFx0XHR2YXIgY29sX2lzX2FjdGl2ZSAgID0gaGFzX25vbl9kZWZhdWx0X2NvbF9zdHlsZXMoIGNvbCAmJiBjb2wuY29sX3N0eWxlcyApO1xyXG5cdFx0XHRcdHZhciBjb2xfYXR0cl9hY3RpdmUgPSBjb2xfaXNfYWN0aXZlID8gJyBkYXRhLWNvbHN0eWxlcy1hY3RpdmU9XCIxXCInIDogJyc7XHJcblxyXG5cdFx0XHRcdG9wZW4oIGA8YyR7Y29sX2F0dHJfYWN0aXZlfSR7c3R5bGVfYXR0cn0+YCApO1xyXG5cclxuXHRcdFx0XHQvLyBVc2UgdGhlIHNoYXJlZCBvbmNlL2N0eCBvYmplY3RzIHNvIHNpbmdsZS1wZXItZm9ybSBndWFyZHMgd29yayBhY3Jvc3MgdGhlIHdob2xlIGZvcm0uXHJcblx0XHRcdFx0KGNvbC5maWVsZHMgfHwgW10pLmZvckVhY2goIChub2RlKSA9PlxyXG5cdFx0XHRcdFx0V1BCQ19CRkJfRXhwb3J0ZXIucmVuZGVyX2ZpZWxkX25vZGUoIG5vZGUsIGlvLCBjZmcsIG9uY2UsIGN0eCApXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Ly8gUmVjdXJzZSB3aXRoIHRoZSBzYW1lIG9uY2UvY3R4IGFzIHdlbGwuXHJcblx0XHRcdFx0KGNvbC5zZWN0aW9ucyB8fCBbXSkuZm9yRWFjaCggKG5lc3RlZCkgPT5cclxuXHRcdFx0XHRcdFdQQkNfQkZCX0V4cG9ydGVyLnJlbmRlcl9zZWN0aW9uKCBuZXN0ZWQsIGlvLCBjZmcsIG9uY2UsIGN0eCApXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Y2xvc2UoIGA8L2M+YCApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRjbG9zZSggYDwvcj5gICk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVpbGQgYXR0cmlidXRlIHN0cmluZyBmb3IgdGhlIDxpdGVtPiB3cmFwcGVyLlxyXG5cdFx0ICogQ3VycmVudGx5IG9ubHkgdXNlZCBmb3IgQ0FQVENIQTogcHVzaGVzIGNzcyBjbGFzc2VzIGFuZCBodG1sX2lkIHRvIHRoZSB3cmFwcGVyLlxyXG5cdFx0ICogQWxzbyBlbnN1cmVzIHVuaXF1ZW5lc3Mgb2YgdGhlIGh0bWxfaWQgYWNyb3NzIHRoZSBleHBvcnQgKHVzZXMgY3R4LnVzZWRJZHMpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZFxyXG5cdFx0ICogQHBhcmFtIHt7dXNlZElkczpTZXQ8c3RyaW5nPn19IGN0eFxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gZS5nLiAnIGNsYXNzPVwieCB5XCIgaWQ9XCJteUlkXCInXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBpdGVtX3dyYXBwZXJfYXR0cnMoZmllbGQsIGN0eCkge1xyXG5cdFx0XHRpZiAoICEgZmllbGQgKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGVzY19odG1sICA9IGNvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX2h0bWw7XHJcblx0XHRcdGNvbnN0IGNsc19zYW5pdCA9IGNvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfY3NzX2NsYXNzbGlzdDtcclxuXHRcdFx0Y29uc3Qgc2lkICAgICAgID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX2lkO1xyXG5cclxuXHRcdFx0bGV0IG91dCA9ICcnO1xyXG5cclxuXHRcdFx0Y29uc3QgY2xzX3JhdyA9IFN0cmluZyggZmllbGQuY3NzY2xhc3NfZXh0cmEgfHwgZmllbGQuY3NzY2xhc3MgfHwgZmllbGQuY2xhc3MgfHwgJycgKTtcclxuXHRcdFx0Y29uc3QgY2xzICAgICA9IGNsc19zYW5pdCggY2xzX3JhdyApO1xyXG5cdFx0XHRsZXQgaHRtbF9pZCAgID0gZmllbGQuaHRtbF9pZCA/IHNpZCggU3RyaW5nKCBmaWVsZC5odG1sX2lkICkgKSA6ICcnO1xyXG5cdFx0XHRpZiAoIGh0bWxfaWQgJiYgY3R4Py51c2VkSWRzICkge1xyXG5cdFx0XHRcdGxldCB1bmlxdWUgPSBodG1sX2lkLCBpID0gMjtcclxuXHRcdFx0XHR3aGlsZSAoIGN0eC51c2VkSWRzLmhhcyggdW5pcXVlICkgKSB7XHJcblx0XHRcdFx0XHR1bmlxdWUgPSBgJHtodG1sX2lkfV8ke2krK31gO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjdHgudXNlZElkcy5hZGQoIHVuaXF1ZSApO1xyXG5cdFx0XHRcdGh0bWxfaWQgPSB1bmlxdWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBjbHMgKSB7XHJcblx0XHRcdFx0b3V0ICs9IGAgY2xhc3M9XCIke2VzY19odG1sKCBjbHMgKX1cImA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBodG1sX2lkICkge1xyXG5cdFx0XHRcdG91dCArPSBgIGlkPVwiJHtlc2NfaHRtbCggaHRtbF9pZCApfVwiYDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIG91dDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyA9PSBGaWVsZHMg4oCTIHBsdWdnYWJsZSwgcGFjay1kcml2ZW4gZXhwb3J0XHJcblx0XHQvLyA9PSBXcmFwIGV2ZXJ5IGV4cG9ydGVkIGZpZWxkIGluc2lkZSA8aXRlbT7igKY8L2l0ZW0+IGFuZCBkZWxlZ2F0ZSBhY3R1YWwgc2hvcnRjb2RlIGV4cG9ydFxyXG5cdFx0Ly8gPT0gdG8gcGVyLXBhY2sgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgdmlhIFdQQkNfQkZCX0V4cG9ydGVyLnJlZ2lzdGVyKHR5cGUsIGZuKS5cclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRcdHN0YXRpYyByZW5kZXJfZmllbGRfbm9kZShmaWVsZCwgaW8sIGNmZywgb25jZSwgY3R4KSB7XHJcblxyXG5cdFx0XHRjb25zdCB7IG9wZW4sIGNsb3NlLCBwdXNoIH0gPSBpbztcclxuXHRcdFx0aWYgKCAhIGZpZWxkIHx8ICEgZmllbGQudHlwZSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNoYXJlZCBjb250ZXh0ICh1c2VkSWRzLCDigJxvbmNlLXBlci1mb3Jt4oCdIGd1YXJkcywgZXRjLikuXHJcblx0XHRcdG9uY2UgPSBvbmNlIHx8IHt9O1xyXG5cdFx0XHRjdHggID0gY3R4ICB8fCB7IHVzZWRJZHM6IG5ldyBTZXQoKSB9O1xyXG5cclxuXHRcdFx0Y29uc3QgdHlwZSA9IFN0cmluZyggZmllbGQudHlwZSApLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0XHQvLyBPcHRpb25hbCB3cmFwcGVyIGF0dHJzIGZvciBzcGVjaWFsIHR5cGVzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IGNhcHRjaGEpLlxyXG5cdFx0XHRsZXQgaXRlbV9hdHRycyA9ICcnO1xyXG5cdFx0XHRpZiAoIHR5cGUgPT09ICdjYXB0Y2hhJyApIHtcclxuXHRcdFx0XHRpdGVtX2F0dHJzID0gV1BCQ19CRkJfRXhwb3J0ZXIuaXRlbV93cmFwcGVyX2F0dHJzKCBmaWVsZCwgY3R4ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG9wZW4oIGA8aXRlbSR7aXRlbV9hdHRyc30+YCApO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyAxKSBMZXQgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgcGFjayBoYW5kbGUgZXhwb3J0LlxyXG5cdFx0XHRcdGxldCBoYW5kbGVkID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKCBXUEJDX0JGQl9FeHBvcnRlci5oYXNfZXhwb3J0ZXIoIHR5cGUgKSApIHtcclxuXHRcdFx0XHRcdGhhbmRsZWQgPSBXUEJDX0JGQl9FeHBvcnRlci5ydW5fcmVnaXN0ZXJlZF9leHBvcnRlciggZmllbGQsIGlvLCBjZmcsIG9uY2UsIGN0eCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gMikgRmFsbGJhY2s6IHNob3cgYSBjbGVhciBUT0RPIGNvbW1lbnQgaWYgbm8gZXhwb3J0ZXIgaXMgcmVnaXN0ZXJlZC5cclxuXHRcdFx0XHRpZiAoICEgaGFuZGxlZCApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBXUEJDX0JGQl9FeHBvcnRlci5jb21wdXRlX25hbWUoIHR5cGUsIGZpZWxkICk7XHJcblx0XHRcdFx0XHRwdXNoKCBgPCEtLSBUT0RPOiBtYXAgZmllbGQgdHlwZSBcIiR7dHlwZX1cIiBuYW1lPVwiJHtuYW1lfVwiIGluIGEgcGFjayBleHBvcnRlciAtLT5gICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAzKSBBcHBlbmQgaGVscCB0ZXh0IGNvbnNpc3RlbnRseSAocGFja3Mgc2hvdWxkbuKAmXQgZHVwbGljYXRlIHRoaXMpLlxyXG5cdFx0XHRcdGlmICggZmllbGQuaGVscCApIHtcclxuXHRcdFx0XHRcdHB1c2goXHJcblx0XHRcdFx0XHRcdGA8ZGl2IGNsYXNzPVwid3BiY19maWVsZF9kZXNjcmlwdGlvblwiPiR7Y29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NhcGVfaHRtbChcclxuXHRcdFx0XHRcdFx0XHRTdHJpbmcoIGZpZWxkLmhlbHAgKVxyXG5cdFx0XHRcdFx0XHQpfTwvZGl2PmBcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGZpbmFsbHkge1xyXG5cdFx0XHRcdC8vIEFsd2F5cyBjbG9zZSB3cmFwcGVyLlxyXG5cdFx0XHRcdGNsb3NlKCBgPC9pdGVtPmAgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRcdC8vID09IEhlbHBlcnMgPT1cclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRcdHN0YXRpYyBpc19yZXF1aXJlZChmaWVsZCkge1xyXG5cdFx0XHRjb25zdCB2ID0gZmllbGQgJiYgZmllbGQucmVxdWlyZWQ7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0diA9PT0gdHJ1ZSB8fFxyXG5cdFx0XHRcdHYgPT09ICd0cnVlJyB8fFxyXG5cdFx0XHRcdHYgPT09IDEgfHxcclxuXHRcdFx0XHR2ID09PSAnMScgfHxcclxuXHRcdFx0XHR2ID09PSAncmVxdWlyZWQnXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2hhcmVkIGxhYmVsIGVtaXR0ZXIgdXNlZCBieSBwZXItcGFjayBleHBvcnRlcnMuXHJcblx0XHQgKlxyXG5cdFx0ICogRW1pdHMgb3B0aW9uYWwgPGw+TGFiZWw8L2w+ICsgPGJyPiBiZWZvcmUgdGhlIHByb3ZpZGVkIGJvZHksXHJcblx0XHQgKiByZXNwZWN0aW5nIGNmZy5hZGRMYWJlbHMuIEhlbHAgdGV4dCBpcyBlbWl0dGVkIGNlbnRyYWxseSBpblxyXG5cdFx0ICogcmVuZGVyX2ZpZWxkX25vZGUoKSwgc28gaXQgaXMgaW50ZW50aW9uYWxseSBOT1QgaGFuZGxlZCBoZXJlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIGZpZWxkXHJcblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9ICBlbWl0XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBib2R5XHJcblx0XHQgKiBAcGFyYW0ge3thZGRMYWJlbHM/OiBib29sZWFufX0gIFtjZmddXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlbWl0X2xhYmVsX3RoZW4oZmllbGQsIGVtaXQsIGJvZHksIGNmZykge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBlbWl0ICE9PSAnZnVuY3Rpb24nICkgeyByZXR1cm47IH1cclxuXHJcblx0XHRcdGNmZyA9IGNmZyB8fCB7fTtcclxuXHRcdFx0Y29uc3QgYWRkTGFiZWxzID0gY2ZnLmFkZExhYmVscyAhPT0gZmFsc2U7XHJcblxyXG5cdFx0XHRjb25zdCByYXcgICA9IChmaWVsZCAmJiB0eXBlb2YgZmllbGQubGFiZWwgPT09ICdzdHJpbmcnKSA/IGZpZWxkLmxhYmVsIDogJyc7XHJcblx0XHRcdGNvbnN0IGxhYmVsID0gcmF3LnRyaW0oKTtcclxuXHJcblx0XHRcdHZhciBpc19yZXEgICA9IHRoaXMuaXNfcmVxdWlyZWQoIGZpZWxkICk7XHJcblx0XHRcdHZhciByZXFfbWFyayA9IGlzX3JlcSA/ICcqJyA6ICcnO1xyXG5cclxuXHRcdFx0aWYgKCBsYWJlbCAmJiBhZGRMYWJlbHMgKSB7XHJcblx0XHRcdFx0Y29uc3QgZXNjX2h0bWwgPSBjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV9odG1sO1xyXG5cdFx0XHRcdGVtaXQoICc8bD4nICsgZXNjX2h0bWwoIGxhYmVsICkgKyByZXFfbWFyayArICc8L2w+JyApO1xyXG5cdFx0XHRcdGVtaXQoICc8YnI+JyArIGJvZHkgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbWl0KCBib2R5ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gSGVscGVycyA9PVxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRcdC8vIC0tIFRpbWUgU2VsZWN0IEhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdHN0YXRpYyBpc190aW1lc2xvdF9waWNrZXJfZW5hYmxlZCgpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRyZXR1cm4gISEod2luZG93Ll93cGJjICYmIHR5cGVvZiB3aW5kb3cuX3dwYmMuZ2V0X290aGVyX3BhcmFtID09PSAnZnVuY3Rpb24nXHJcblx0XHRcdFx0XHQmJiB3aW5kb3cuX3dwYmMuZ2V0X290aGVyX3BhcmFtKCdpc19lbmFibGVkX2Jvb2tpbmdfdGltZXNsb3RfcGlja2VyJykpO1xyXG5cdFx0XHR9IGNhdGNoIChfKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyB0aW1lX3BsYWNlaG9sZGVyX2ZvcihuYW1lLCBmaWVsZCkge1xyXG5cdFx0XHQvLyBQcmVmZXIgZmllbGQtc3BlY2lmaWMgcGxhY2Vob2xkZXI7IGVsc2Ugc2Vuc2libGUgZGVmYXVsdCBwZXIgZmllbGQuXHJcblx0XHRcdGlmICh0eXBlb2YgZmllbGQucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnICYmIGZpZWxkLnBsYWNlaG9sZGVyLnRyaW0oKSkge1xyXG5cdFx0XHRcdHJldHVybiBmaWVsZC5wbGFjZWhvbGRlci50cmltKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG5hbWUgPT09ICdkdXJhdGlvbnRpbWUnKSByZXR1cm4gJy0tLSBTZWxlY3QgZHVyYXRpb24gLS0tJztcclxuXHRcdFx0cmV0dXJuICctLS0gU2VsZWN0IHRpbWUgLS0tJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIHRva2Vucy9kZWZhdWx0IGZvciBhIHRpbWUtbGlrZSBzZWxlY3QgKHN0YXJ0L2VuZC9yYW5nZS9kdXJhdGlvbikuXHJcblx0XHQgKiAtIEFkZHMgYW4gZW1wdHktdmFsdWUgcGxhY2Vob2xkZXIgYXMgdGhlIGZpcnN0IG9wdGlvbiBvbmx5IHdoZW46XHJcblx0XHQgKiAgIOKAoiB0aW1lIHBpY2tlciBpcyBPRkYsIGFuZFxyXG5cdFx0ICogICDigKIgbm8gb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQsIGFuZFxyXG5cdFx0ICogICDigKIgdGhlcmUgaXNuJ3QgYWxyZWFkeSBhbiBlbXB0eS12YWx1ZSBvcHRpb24uXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBidWlsZF90aW1lX3NlbGVjdF90b2tlbnMoZmllbGQsIG5hbWUpIHtcclxuXHRcdFx0bGV0IHRva2Vuc19zdHIgPSB0aGlzLm9wdGlvbl90b2tlbnMoZmllbGQpO1xyXG5cdFx0XHRsZXQgZGVmX3N0ciAgICA9IHRoaXMuZGVmYXVsdF9vcHRpb25fc3VmZml4KGZpZWxkLCB0b2tlbnNfc3RyKTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5pc190aW1lc2xvdF9waWNrZXJfZW5hYmxlZCgpKSB7XHJcblx0XHRcdFx0Y29uc3Qgb3B0cyA9IEFycmF5LmlzQXJyYXkoZmllbGQub3B0aW9ucykgPyBmaWVsZC5vcHRpb25zIDogW107XHJcblxyXG5cdFx0XHRcdGNvbnN0IGhhc19zZWxlY3RlZF9kZWZhdWx0ID0gb3B0cy5zb21lKG8gPT5cclxuXHRcdFx0XHRcdG8gJiYgKG8uc2VsZWN0ZWQgPT09IHRydWUgfHwgby5zZWxlY3RlZCA9PT0gJ3RydWUnIHx8IG8uc2VsZWN0ZWQgPT09IDEgfHwgby5zZWxlY3RlZCA9PT0gJzEnKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmICghaGFzX3NlbGVjdGVkX2RlZmF1bHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGhhc19lbXB0eV92YWx1ZV9vcHRpb24gPSBvcHRzLnNvbWUobyA9PlxyXG5cdFx0XHRcdFx0XHRvICYmIHR5cGVvZiBvLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiBTdHJpbmcoby52YWx1ZSkudHJpbSgpID09PSAnJ1xyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIWhhc19lbXB0eV92YWx1ZV9vcHRpb24pIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGhUZXh0ICAgICA9IHRoaXMudGltZV9wbGFjZWhvbGRlcl9mb3IobmFtZSwgZmllbGQpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwaFRva2VuU3RyID0gJ1wiJyArIGNvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX2Zvcl9zaG9ydGNvZGUocGhUZXh0ICsgJ0BAJykgKyAnXCInO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uc3Qgb3RoZXIgPSB0aGlzLm9wdGlvbl90b2tlbnMoZmllbGQpLnRyaW0oKTsgLy8gcmVjb21wdXRlLCB0cmltIGxlYWRpbmcgc3BhY2VcclxuXHRcdFx0XHRcdFx0dG9rZW5zX3N0ciAgPSAnICcgKyBwaFRva2VuU3RyICsgKG90aGVyID8gKCcgJyArIG90aGVyKSA6ICcnKTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIEVuc3VyZSBmaXJzdCBvcHRpb24gKG91ciBwbGFjZWhvbGRlcikgYmVjb21lcyB0aGUgZGVmYXVsdCBpbXBsaWNpdGx5XHJcblx0XHRcdFx0XHRcdGRlZl9zdHIgPSAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHsgdG9rZW5zX3N0ciwgZGVmX3N0ciB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBlbWl0X3RpbWVfc2VsZWN0KG5hbWUsIGZpZWxkLCByZXFfbWFyaywgaWRfb3B0LCBjbHNfb3B0cywgZW1pdF9sYWJlbF90aGVuKSB7XHJcblx0XHRcdGNvbnN0IHsgdG9rZW5zX3N0ciwgZGVmX3N0ciB9ID0gdGhpcy5idWlsZF90aW1lX3NlbGVjdF90b2tlbnMoZmllbGQsIG5hbWUpO1xyXG5cdFx0XHQvLyBOT1RFOiBObyBzaXplL3BoIHRva2VucyBoZXJlIHRvIG1pcnJvciByYW5nZXRpbWUgYmVoYXZpb3IgZXhhY3RseS5cclxuXHRcdFx0ZW1pdF9sYWJlbF90aGVuKGBbc2VsZWN0Ym94JHtyZXFfbWFya30gJHtuYW1lfSR7aWRfb3B0fSR7Y2xzX29wdHN9JHtkZWZfc3RyfSR7dG9rZW5zX3N0cn1dYCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0gT3RoZXIgSGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0Ly8gUmV0dXJuIGEgZmllbGQncyBkZWZhdWx0IHZhbHVlIChzdXBwb3J0cyBib3RoIGNhbWVsQ2FzZSBhbmQgc25ha2VfY2FzZSkuXHJcblx0XHRzdGF0aWMgZ2V0X2RlZmF1bHRfdmFsdWUoZmllbGQpIHtcclxuXHRcdFx0Y29uc3QgdiA9IGZpZWxkPy5kZWZhdWx0X3ZhbHVlID8/IGZpZWxkPy5kZWZhdWx0VmFsdWUgPz8gJyc7XHJcblx0XHRcdHJldHVybiAodiA9PSBudWxsKSA/ICcnIDogU3RyaW5nKCB2ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRm9yIHRleHQtbGlrZSBmaWVsZHMsIHRoZSBkZWZhdWx0IGlzIGEgZmluYWwgcXVvdGVkIHRva2VuIGluIHRoZSBzaG9ydGNvZGUuXHJcblx0XHRzdGF0aWMgZGVmYXVsdF90ZXh0X3N1ZmZpeChmaWVsZCkge1xyXG5cdFx0XHRjb25zdCB2ID0gdGhpcy5nZXRfZGVmYXVsdF92YWx1ZSggZmllbGQgKTtcclxuXHRcdFx0aWYgKCAhdiApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIGAgXCIke2NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX2Zvcl9zaG9ydGNvZGUoIHYgKX1cImA7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGNsYXNzX29wdGlvbnMoZmllbGQpIHtcclxuXHRcdFx0Y29uc3QgcmF3ID0gZmllbGQuY2xhc3MgfHwgZmllbGQuY2xhc3NOYW1lIHx8IGZpZWxkLmNzc2NsYXNzIHx8ICcnO1xyXG5cdFx0XHRjb25zdCBjbHMgPSBjb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2Nzc19jbGFzc2xpc3QoIFN0cmluZyggcmF3ICkgKTtcclxuXHRcdFx0aWYgKCAhY2xzICkgcmV0dXJuICcnO1xyXG5cdFx0XHRyZXR1cm4gY2xzXHJcblx0XHRcdFx0LnNwbGl0KCAvXFxzKy8gKVxyXG5cdFx0XHRcdC5maWx0ZXIoIEJvb2xlYW4gKVxyXG5cdFx0XHRcdC5tYXAoIChjKSA9PiBgIGNsYXNzOiR7Y29yZS5XUEJDX0JGQl9TYW5pdGl6ZS50b190b2tlbiggYyApfWAgKVxyXG5cdFx0XHRcdC5qb2luKCAnJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBpZF9vcHRpb24oZmllbGQsIGN0eCkge1xyXG5cdFx0XHRjb25zdCByYXdfaWQgPSBmaWVsZC5odG1sX2lkIHx8IGZpZWxkLmlkX2F0dHI7XHJcblx0XHRcdGlmICggIXJhd19pZCApIHJldHVybiAnJztcclxuXHRcdFx0Y29uc3QgYmFzZSA9IGNvcmUuV1BCQ19CRkJfU2FuaXRpemUudG9fdG9rZW4oIHJhd19pZCApO1xyXG5cdFx0XHRpZiAoICFiYXNlICkgcmV0dXJuICcnO1xyXG5cdFx0XHRsZXQgdW5pcXVlID0gYmFzZSwgaSA9IDI7XHJcblx0XHRcdHdoaWxlICggY3R4LnVzZWRJZHMuaGFzKCB1bmlxdWUgKSApIHVuaXF1ZSA9IGAke2Jhc2V9XyR7aSsrfWA7XHJcblx0XHRcdGN0eC51c2VkSWRzLmFkZCggdW5pcXVlICk7XHJcblx0XHRcdHJldHVybiBgIGlkOiR7dW5pcXVlfWA7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHBoX2F0dHIodikge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCB8fCB2ID09PSAnJyApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIGAgcGxhY2Vob2xkZXI6XCIke2NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX2Zvcl9hdHRyX3F1b3RlZCggdiApfVwiYDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyB0ZXh0LWxpa2Ugc2l6ZS9tYXhsZW5ndGggdG9rZW46IFwiNDAvMjU1XCIgKG9yIFwiNDAvXCIgb3IgXCIvMjU1XCIpXHJcblx0XHRzdGF0aWMgc2l6ZV9tYXhfdG9rZW4oZikge1xyXG5cdFx0XHRjb25zdCBzaXplID0gcGFyc2VJbnQoIGYuc2l6ZSwgMTAgKTtcclxuXHRcdFx0Y29uc3QgbWF4ICA9IHBhcnNlSW50KCBmLm1heGxlbmd0aCwgMTAgKTtcclxuXHRcdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIHNpemUgKSAmJiBOdW1iZXIuaXNGaW5pdGUoIG1heCApICkgcmV0dXJuIGAgJHtzaXplfS8ke21heH1gO1xyXG5cdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggc2l6ZSApICkgcmV0dXJuIGAgJHtzaXplfS9gO1xyXG5cdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggbWF4ICkgKSByZXR1cm4gYCAvJHttYXh9YDtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHRleHRhcmVhIGNvbHMvcm93cyB0b2tlbjogXCI2MHg0XCIgKG9yIFwiNjB4XCIgb3IgXCJ4NFwiKVxyXG5cdFx0c3RhdGljIGNvbHNfcm93c190b2tlbihmKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBwYXJzZUludCggZi5jb2xzLCAxMCApO1xyXG5cdFx0XHRjb25zdCByb3dzID0gcGFyc2VJbnQoIGYucm93cywgMTAgKTtcclxuXHRcdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIGNvbHMgKSAmJiBOdW1iZXIuaXNGaW5pdGUoIHJvd3MgKSApIHJldHVybiBgICR7Y29sc314JHtyb3dzfWA7XHJcblx0XHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBjb2xzICkgKSByZXR1cm4gYCAke2NvbHN9eGA7XHJcblx0XHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCByb3dzICkgKSByZXR1cm4gYCB4JHtyb3dzfWA7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgb3B0aW9uX3Rva2VucyhmaWVsZCkge1xyXG5cdFx0XHRjb25zdCBvcHRpb25zID0gQXJyYXkuaXNBcnJheSggZmllbGQub3B0aW9ucyApID8gZmllbGQub3B0aW9ucyA6IFtdO1xyXG5cdFx0XHRpZiAoIG9wdGlvbnMubGVuZ3RoID09PSAwICkgcmV0dXJuICcnO1xyXG5cdFx0XHRjb25zdCBwYXJ0cyA9IG9wdGlvbnMubWFwKCAobykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHRpdGxlID0gU3RyaW5nKCBvLmxhYmVsID8/IG8udmFsdWUgPz8gJycgKS50cmltKCk7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBTdHJpbmcoIG8udmFsdWUgPz8gby5sYWJlbCA/PyAnJyApLnRyaW0oKTtcclxuXHRcdFx0XHRyZXR1cm4gdGl0bGUgJiYgdmFsdWUgJiYgdGl0bGUgIT09IHZhbHVlXHJcblx0XHRcdFx0XHQ/IGBcIiR7Y29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NhcGVfZm9yX3Nob3J0Y29kZSggYCR7dGl0bGV9QEAke3ZhbHVlfWAgKX1cImBcclxuXHRcdFx0XHRcdDogYFwiJHtjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV9mb3Jfc2hvcnRjb2RlKCB0aXRsZSB8fCB2YWx1ZSApfVwiYDtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRyZXR1cm4gJyAnICsgcGFydHMuam9pbiggJyAnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGRlZmF1bHRfb3B0aW9uX3N1ZmZpeChmaWVsZCwgdG9rZW5zKSB7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnMgID0gQXJyYXkuaXNBcnJheSggZmllbGQub3B0aW9ucyApID8gZmllbGQub3B0aW9ucyA6IFtdO1xyXG5cdFx0XHRjb25zdCBzZWxlY3RlZCA9IG9wdGlvbnMuZmluZCggKG8pID0+IG8uc2VsZWN0ZWQgKTtcclxuXHRcdFx0Y29uc3QgZGVmX3ZhbCA9IHNlbGVjdGVkID8gKHNlbGVjdGVkLnZhbHVlID8/IHNlbGVjdGVkLmxhYmVsKSA6IChmaWVsZC5kZWZhdWx0X3ZhbHVlID8/IGZpZWxkLmRlZmF1bHRWYWx1ZSA/PyAnJyk7XHJcblx0XHRcdGlmICggIWRlZl92YWwgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBgIGRlZmF1bHQ9XCIke2NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyKCBkZWZfdmFsICl9XCJgO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU0VMRUNUQk9YIC8gUkFESU8gLSBCdWlsZCB0aGUgZmluYWwgc2hvcnRjb2RlIGZvciBjaG9pY2UtYmFzZWQgZmllbGRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIFJlc3BvbnNpYmlsaXRpZXM6XHJcblx0XHQgKiAgLSBEZWxlZ2F0ZXMgb3B0aW9uL2RlZmF1bHQgZW5jb2RpbmcgdG86XHJcblx0XHQgKiAgICAgIC0gV1BCQ19CRkJfRXhwb3J0ZXIub3B0aW9uX3Rva2VucyggZmllbGQgKVxyXG5cdFx0ICogICAgICAtIFdQQkNfQkZCX0V4cG9ydGVyLmRlZmF1bHRfb3B0aW9uX3N1ZmZpeCggZmllbGQsIHRva2VucyApXHJcblx0XHQgKiAgLSBGb3IgYHJhZGlvYDpcclxuXHRcdCAqICAgICAgLSBBTFdBWVMgYXBwZW5kcyBhIGJhcmUgYHVzZV9sYWJlbF9lbGVtZW50YCB0b2tlbi5cclxuXHRcdCAqICAtIEZvciBgc2VsZWN0Ym94YDpcclxuXHRcdCAqICAgICAgLSBBZGRzIGEgYmFyZSBgbXVsdGlwbGVgIHRva2VuIHdoZW4gYGZpZWxkLm11bHRpcGxlYCBpcyB0cnV0aHlcclxuXHRcdCAqICAgICAgICAodHJ1ZSwgXCJ0cnVlXCIsIDEsIFwiMVwiLCBcIm11bHRpcGxlXCIpIC0+IGBbc2VsZWN0Ym94IHNlcnZpY2VzIG11bHRpcGxlIFwiMVwiIFwiMlwiXWAuXHJcblx0XHQgKiAgICAgIC0gV2hlbiBzaW5nbGUtc2VsZWN0IEFORCB0aGVyZSBpcyBubyBgZGVmYXVsdD1cIi4uLlwiYCBhdHRyaWJ1dGUgQU5EXHJcblx0XHQgKiAgICAgICAgYSBub24tZW1wdHkgYGZpZWxkLnBsYWNlaG9sZGVyYCBpcyBwcmVzZW50LCBlbmNvZGVzIHRoZSBwbGFjZWhvbGRlclxyXG5cdFx0ICogICAgICAgIGFzIHRoZSBGSVJTVCBvcHRpb24gd2l0aCBlbXB0eSB2YWx1ZSB2aWEgdGhlIGBAQGAgc3ludGF4OlxyXG5cdFx0ICogICAgICAgICAgIHBsYWNlaG9sZGVyIFwiLS0tLSBTZWxlY3QgLS0tLVwiICAtPiAgYFwiLS0tLSBTZWxlY3QgLS0tLUBAXCJgXHJcblx0XHQgKiAgICAgICAgYW5kIGNsZWFycyBhbnkgZGVmYXVsdCBhdHRyaWJ1dGU6XHJcblx0XHQgKiAgICAgICAgICAgW3NlbGVjdGJveCogc2VydmljZXMgXCItLS0gU2VsZWN0IC0tLUBAXCIgXCJPcHRpb24gMVwiIFwiT3B0aW9uIDJcIl1cclxuXHRcdCAqICAgICAgLSBSZXNwZWN0cyBgZmllbGQudXNlX2xhYmVsX2VsZW1lbnRgIChhZGRzIGJhcmUgYHVzZV9sYWJlbF9lbGVtZW50YCB3aGVuIHRydWUpLlxyXG5cdFx0ICogIC0gRm9yIGJvdGgga2luZHM6XHJcblx0XHQgKiAgICAgIC0gSG9ub3JzIGBmaWVsZC5sYWJlbF9maXJzdGAgYnkgYXBwZW5kaW5nIGBsYWJlbF9maXJzdDpcIjFcImAgd2hlbiB0cnV0aHkuXHJcblx0XHQgKiAgICAgIC0gS2VlcHMgdGhlIHJlcXVpcmVkIHN0YXIsIGlkIGFuZCBjc3NjbGFzcyB0b2tlbnMgaW4gdGhlIGNhbm9uaWNhbCBvcmRlci5cclxuXHRcdCAqXHJcblx0XHQgKiBGaW5hbCBzaG9ydGNvZGUgbGF5b3V0IChvcmRlciBpcyBpbXBvcnRhbnQpOlxyXG5cdFx0ICogICBba2luZCByZXEgbmFtZSBpZCBjbHMgdXNlX2xhYmVsX2VsZW1lbnQgbXVsdGlwbGUgZGVmYXVsdCB0b2tlbnMgbGFiZWxfZmlyc3RdXHJcblx0XHQgKlxyXG5cdFx0ICogQGpEb2NcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBraW5kXHJcblx0XHQgKiAgIFNob3J0Y29kZSBraW5kOyB0eXBpY2FsbHkgXCJyYWRpb1wiIG9yIFwic2VsZWN0Ym94XCIuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHJlcV9tYXJrXHJcblx0XHQgKiAgIFJlcXVpcmVkIG1hcmtlciB1c2VkIGJ5IENvbnRhY3QgRm9ybSA3IHN0eWxlIHNob3J0Y29kZXM6XHJcblx0XHQgKiAgIGVpdGhlciBcIlwiIChub3QgcmVxdWlyZWQpIG9yIFwiKlwiIChyZXF1aXJlZCkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuXHRcdCAqICAgU2FuaXRpemVkIGZpZWxkIG5hbWUgYXMgZXhwb3J0ZWQgaW50byB0aGUgc2hvcnRjb2RlLCBlLmcuIFwic2VydmljZXNcIi5cclxuXHRcdCAqICAgTXVzdCBhbHJlYWR5IGJlIGNvbXB1dGVkIHZpYSBXUEJDX0JGQl9FeHBvcnRlci5jb21wdXRlX25hbWUoKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZmllbGRcclxuXHRcdCAqICAgTm9ybWFsaXplZCBmaWVsZCBkYXRhIG9iamVjdCBhcyBzdG9yZWQgaW4gdGhlIEJ1aWxkZXIgc3RydWN0dXJlLiBDb21tb24ga2V5czpcclxuXHRcdCAqICAgICAtIHR5cGUgICAgICAgICAgIHtzdHJpbmd9ICAgRmllbGQgdHlwZSwgZS5nLiBcInJhZGlvXCIgfCBcInNlbGVjdFwiLlxyXG5cdFx0ICogICAgIC0gb3B0aW9ucyAgICAgICAge0FycmF5fSAgICBPcHRpb24gb2JqZWN0czogeyBsYWJlbCwgdmFsdWUsIHNlbGVjdGVkIH0uXHJcblx0XHQgKiAgICAgLSBwbGFjZWhvbGRlciAgICB7c3RyaW5nfSAgIFBsYWNlaG9sZGVyIHRleHQgKHNpbmdsZS1zZWxlY3Qgb25seSkuXHJcblx0XHQgKiAgICAgLSBtdWx0aXBsZSAgICAgICB7Ym9vbGVhbnxzdHJpbmd8bnVtYmVyfSAgRW5hYmxlcyBtdWx0aS1zZWxlY3Qgd2hlbiB0cnV0aHkuXHJcblx0XHQgKiAgICAgLSB1c2VfbGFiZWxfZWxlbWVudCB7Ym9vbGVhbn0gIFJlcXVlc3QgYmFyZSBgdXNlX2xhYmVsX2VsZW1lbnRgIHRva2VuIChub24tcmFkaW8pLlxyXG5cdFx0ICogICAgIC0gbGFiZWxfZmlyc3QgICAge2Jvb2xlYW59ICBJZiB0cnVlLCBhcHBlbmRzIGBsYWJlbF9maXJzdDpcIjFcImAgdG9rZW4uXHJcblx0XHQgKiAgICAgLSBkZWZhdWx0X3ZhbHVlICB7c3RyaW5nfSAgIE9wdGlvbmFsIGRlZmF1bHQgdmFsdWUgKHVzZWQgYnkgZGVmYXVsdF9vcHRpb25fc3VmZml4KCkpLlxyXG5cdFx0ICogICAgIC0gaHRtbF9pZCAvIGNzc2NsYXNzIC8gY2xhc3MgLyBjbGFzc05hbWUgIHtzdHJpbmd9ICBVc2VkIHVwc3RyZWFtIGluIGlkX29wdC9jbHNfb3B0cy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaWRfb3B0XHJcblx0XHQgKiAgIE9wdGlvbmFsIGlkIHRva2VuIGJ1aWx0IGJ5IFdQQkNfQkZCX0V4cG9ydGVyLmlkX29wdGlvbihmaWVsZCwgY3R4KSxcclxuXHRcdCAqICAgZS5nLiBcIiBpZDpteV9pZFwiIG9yIGVtcHR5IHN0cmluZy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gY2xzX29wdHNcclxuXHRcdCAqICAgQ2xhc3MgdG9rZW5zIGJ1aWx0IGJ5IFdQQkNfQkZCX0V4cG9ydGVyLmNsYXNzX29wdGlvbnMoZmllbGQpLFxyXG5cdFx0ICogICBlLmcuIFwiIGNsYXNzOm15X2NsYXNzIGNsYXNzOm90aGVyXCIuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqICAgQ29tcGxldGUgc2hvcnRjb2RlIGJvZHkgZm9yIHRoZSBjaG9pY2UgZmllbGQsIGZvciBleGFtcGxlOlxyXG5cdFx0ICogICAgIFwiW3JhZGlvKiBzZXJ2aWNlcyB1c2VfbGFiZWxfZWxlbWVudCBcXFwiQVxcXCIgXFxcIkJcXFwiXVwiXHJcblx0XHQgKiAgICAgXCJbc2VsZWN0Ym94IHNlcnZpY2VzIG11bHRpcGxlIFxcXCIxXFxcIiBcXFwiMlxcXCIgXFxcIjNcXFwiXVwiXHJcblx0XHQgKiAgICAgXCJbc2VsZWN0Ym94KiBzZXJ2aWNlcyBcXFwiLS0tIFNlbGVjdCAtLS1AQFxcXCIgXFxcIk9wdGlvbiAxXFxcIiBcXFwiT3B0aW9uIDJcXFwiXVwiXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjaG9pY2VfdGFnKGtpbmQsIHJlcV9tYXJrLCBuYW1lLCBmaWVsZCwgaWRfb3B0LCBjbHNfb3B0cykge1xyXG5cdFx0XHQvLyBTdGFydCBmcm9tIHRoZSByYXcgb3B0aW9ucy9kZWZhdWx0IGFzIGJlZm9yZS5cclxuXHRcdFx0bGV0IHRva2VucyA9IFdQQkNfQkZCX0V4cG9ydGVyLm9wdGlvbl90b2tlbnMoIGZpZWxkICk7XHJcblx0XHRcdGxldCBkZWYgICAgPSBXUEJDX0JGQl9FeHBvcnRlci5kZWZhdWx0X29wdGlvbl9zdWZmaXgoIGZpZWxkLCB0b2tlbnMgKTtcclxuXHJcblx0XHRcdC8vIEZvciBSQURJTyB3ZSBtdXN0IEFMV0FZUyBpbmNsdWRlIGEgYmFyZSBgdXNlX2xhYmVsX2VsZW1lbnRgIHRva2VuIChubyB2YWx1ZS9xdW90ZXMpLlxyXG5cdFx0XHQvLyBGb3Igb3RoZXIga2luZHMsIGtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogaW5jbHVkZSBvbmx5IGlmIGV4cGxpY2l0bHkgc2V0LlxyXG5cdFx0XHRsZXQgdWxlID0gJyc7XHJcblx0XHRcdGlmICgga2luZCA9PT0gJ3JhZGlvJyApIHtcclxuXHRcdFx0XHR1bGUgPSAnIHVzZV9sYWJlbF9lbGVtZW50JztcclxuXHRcdFx0fSBlbHNlIGlmICggZmllbGQgJiYgZmllbGQudXNlX2xhYmVsX2VsZW1lbnQgKSB7XHJcblx0XHRcdFx0dWxlID0gJyB1c2VfbGFiZWxfZWxlbWVudCc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNFTEVDVEJPWC1zcGVjaWZpYyBleHRyYXM6XHJcblx0XHRcdC8vICAtIFwibXVsdGlwbGVcIiBmbGFnXHJcblx0XHRcdC8vICAtIHBsYWNlaG9sZGVyIGV4cG9ydGVkIGFzIEZJUlNUIE9QVElPTiB3aGVuIHNpbmdsZS1zZWxlY3QgYW5kIG5vIGRlZmF1bHQuXHJcblx0XHRcdGxldCBtdWx0aXBsZV9mbGFnID0gJyc7XHJcblxyXG5cdFx0XHRpZiAoIGtpbmQgPT09ICdzZWxlY3Rib3gnICYmIGZpZWxkICkge1xyXG5cdFx0XHRcdGNvbnN0IG11bHRpcGxlID1cclxuXHRcdFx0XHRcdGZpZWxkLm11bHRpcGxlID09PSB0cnVlICAgfHxcclxuXHRcdFx0XHRcdGZpZWxkLm11bHRpcGxlID09PSAndHJ1ZScgfHxcclxuXHRcdFx0XHRcdGZpZWxkLm11bHRpcGxlID09PSAxICAgICAgfHxcclxuXHRcdFx0XHRcdGZpZWxkLm11bHRpcGxlID09PSAnMScgICAgfHxcclxuXHRcdFx0XHRcdGZpZWxkLm11bHRpcGxlID09PSAnbXVsdGlwbGUnO1xyXG5cclxuXHRcdFx0XHRpZiAoIG11bHRpcGxlICkge1xyXG5cdFx0XHRcdFx0Ly8gRXhwb3J0IGJhcmUgXCJtdWx0aXBsZVwiIHRva2VuIGFzIGluOiBbc2VsZWN0Ym94IHNlcnZpY2VzIG11bHRpcGxlIFwiMVwiIFwiMlwiIFwiM1wiXS5cclxuXHRcdFx0XHRcdG11bHRpcGxlX2ZsYWcgPSAnIG11bHRpcGxlJztcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAhZGVmICkge1xyXG5cdFx0XHRcdFx0Ly8gU2luZ2xlLXNlbGVjdCArIE5PIGRlZmF1bHQgc2VsZWN0ZWQ6XHJcblx0XHRcdFx0XHQvLyBleHBvcnQgcGxhY2Vob2xkZXIgYXMgdGhlIEZJUlNUIE9QVElPTiB3aXRoIGVtcHR5IHZhbHVlOlxyXG5cdFx0XHRcdFx0Ly8gICBbc2VsZWN0Ym94KiBzZXJ2aWNlcyBcIi0tLSBTZWxlY3QgLS0tQEBcIiBcIk9wdGlvbiAxXCIgXCJPcHRpb24gMlwiXVxyXG5cdFx0XHRcdFx0Y29uc3QgcmF3UGggPSBmaWVsZC5wbGFjZWhvbGRlcjtcclxuXHRcdFx0XHRcdGNvbnN0IHBoICAgID0gKHR5cGVvZiByYXdQaCA9PT0gJ3N0cmluZycpID8gcmF3UGgudHJpbSgpIDogJyc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwaCApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgUyAgICAgID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZXNjX3NjID0gKFMgJiYgUy5lc2NhcGVfZm9yX3Nob3J0Y29kZSkgPyBTLmVzY2FwZV9mb3Jfc2hvcnRjb2RlIDogKHYpID0+IFN0cmluZyggdiApO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uc3QgcGhUb2tlbiA9IGBcIiR7ZXNjX3NjKCBwaCArICdAQCcgKX1cImA7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIHRva2VucyAmJiB0b2tlbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRva2VucyBhbHJlYWR5IHN0YXJ0cyB3aXRoIGEgbGVhZGluZyBzcGFjZS5cclxuXHRcdFx0XHRcdFx0XHR0b2tlbnMgPSAnICcgKyBwaFRva2VuICsgdG9rZW5zO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHRva2VucyA9ICcgJyArIHBoVG9rZW47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGVyZSBpcyBzdGlsbCBOTyBkZWZhdWx0IGF0dHJpYnV0ZSB3aGVuIHVzaW5nIHBsYWNlaG9sZGVyLWFzLW9wdGlvbi5cclxuXHRcdFx0XHRcdFx0ZGVmID0gJyc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPcHRpb25hbDogbGFiZWxfZmlyc3Qgc3RheXMgYXMgcXVvdGVkIGZsYWcgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC5cclxuXHRcdFx0Y29uc3QgbGYgPSAoZmllbGQgJiYgZmllbGQubGFiZWxfZmlyc3QpID8gJyBsYWJlbF9maXJzdDpcIjFcIicgOiAnJztcclxuXHJcblx0XHRcdC8vIElNUE9SVEFOVCBPUkRFUiAocGVyIHJlcXVlc3QpOlxyXG5cdFx0XHQvLyBba2luZCByZXEgbmFtZSBpZCBjbHMgdXNlX2xhYmVsX2VsZW1lbnQgbXVsdGlwbGUgZGVmYXVsdCB0b2tlbnMgbGFiZWxfZmlyc3RdXHJcblx0XHRcdC8vIGkuZS4gYHVzZV9sYWJlbF9lbGVtZW50YCAoYW5kIHNlbGVjdCBleHRyYXMpIGNvbWUgQkVGT1JFIGRlZmF1bHQvdG9rZW5zLlxyXG5cdFx0XHRyZXR1cm4gYFske2tpbmR9JHtyZXFfbWFya30gJHtuYW1lfSR7aWRfb3B0fSR7Y2xzX29wdHN9JHt1bGV9JHttdWx0aXBsZV9mbGFnfSR7ZGVmfSR7dG9rZW5zfSR7bGZ9XWA7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGNvbXB1dGVfbmFtZSh0eXBlLCBmaWVsZCkge1xyXG5cdFx0XHQvLyBOYW1lcyBhcmUgZnVsbHkgdmFsaWRhdGVkIHdoZW4gdGhlIGZpZWxkIGlzIGFkZGVkIHRvIHRoZSBjYW52YXMuXHJcblx0XHRcdC8vIFRoZSBleHBvcnRlciBtdXN0IHRoZXJlZm9yZSBwcmVzZXJ2ZSB0aGVtIChhcGFydCBmcm9tIGlkZW1wb3RlbnQgc2FuaXRpemF0aW9uKSwgb3RoZXJ3aXNlIGV4aXN0aW5nIGZvcm1zIGNhbiBicmVhay5cclxuXHRcdFx0Y29uc3QgU2FuaXQgPSBjb3JlLldQQkNfQkZCX1Nhbml0aXplO1xyXG5cclxuXHRcdFx0Y29uc3QgcmF3ID0gKGZpZWxkICYmIChmaWVsZC5uYW1lIHx8IGZpZWxkLmlkKSkgPyBTdHJpbmcoZmllbGQubmFtZSB8fCBmaWVsZC5pZCkgOiBTdHJpbmcodHlwZSB8fCAnZmllbGQnKTtcclxuXHJcblx0XHRcdC8vIElkZW1wb3RlbnQgc2FuaXRpemF0aW9uIG9ubHkg4oCTIG5vIGF1dG8tcHJlZml4aW5nIG9yIHJlbmFtaW5nLlxyXG5cdFx0XHRjb25zdCBuYW1lID0gU2FuaXQuc2FuaXRpemVfaHRtbF9uYW1lKCByYXcgKTtcclxuXHJcblx0XHRcdC8vIEluIHRoZSB1bmxpa2VseSBjYXNlIHNhbml0aXphdGlvbiByZXR1cm5zIGFuIGVtcHR5IHN0cmluZywgZmFsbCBiYWNrIHRvIGEgc2FuaXRpemVkIHR5cGUtYmFzZWQgdG9rZW4uXHJcblx0XHRcdHJldHVybiBuYW1lIHx8IFNhbml0LnNhbml0aXplX2h0bWxfbmFtZSggU3RyaW5nKHR5cGUgfHwgJ2ZpZWxkJykgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlZ2lzdGVyIGEgcGVyLWZpZWxkIGV4cG9ydGVyLlxyXG5cdFx0ICpcclxuXHRcdCAqIFRoaXMgaXMgdGhlIE9OTFkgcGxhY2Ugd2hlcmUgZmllbGQtc3BlY2lmaWMgc2hvcnRjb2RlIG1hcmt1cCBzaG91bGQgbGl2ZS5cclxuXHRcdCAqIENvcmUgc3RheXMgZ2VuZXJpYzsgcGFja3MgcHJvdmlkZSB0aW55IHBsdWdpbnMsIGZvciBleGFtcGxlOlxyXG5cdFx0ICpcclxuXHRcdCAqICAgV1BCQ19CRkJfRXhwb3J0ZXIucmVnaXN0ZXIoICd0ZXh0JywgKGZpZWxkLCBlbWl0LCBleHRyYXMpID0+IHsgLi4uIH0gKTtcclxuXHRcdCAqXHJcblx0XHQgKiBAakRvY1xyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgIEZpZWxkIHR5cGUga2V5LCBlLmcuICdzdGVwc190aW1lbGluZSdcclxuXHRcdCAqIEBwYXJhbSB7KGZpZWxkOmFueSwgZW1pdDooY29kZTpzdHJpbmcpPT52b2lkLCBleHRyYXM/Ontpbz86YW55LGNmZz86YW55LG9uY2U/OmFueSxjdHg/OmFueSxjb3JlPzphbnl9KT0+dm9pZH1cclxuXHRcdCAqICAgICBmblxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZWdpc3Rlcih0eXBlLCBmbikge1xyXG5cdFx0XHRpZiAoICEgdHlwZSB8fCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicgKSB7IHJldHVybjsgfVxyXG5cdFx0XHRpZiAoICEgdGhpcy5fX3JlZ2lzdHJ5ICkgeyB0aGlzLl9fcmVnaXN0cnkgPSBuZXcgTWFwKCk7IH1cclxuXHRcdFx0dGhpcy5fX3JlZ2lzdHJ5LnNldCggU3RyaW5nKCB0eXBlICkudG9Mb3dlckNhc2UoKSwgZm4gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgZXhwb3J0ZXIuXHJcblx0XHQgKlxyXG5cdFx0ICogQGpEb2NcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHVucmVnaXN0ZXIodHlwZSkge1xyXG5cdFx0XHRpZiAoICEgdGhpcy5fX3JlZ2lzdHJ5IHx8ICEgdHlwZSApIHsgcmV0dXJuOyB9XHJcblx0XHRcdHRoaXMuX19yZWdpc3RyeS5kZWxldGUoIFN0cmluZyggdHlwZSApLnRvTG93ZXJDYXNlKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENoZWNrIGlmIGFuIGV4cG9ydGVyIGV4aXN0cyBmb3IgYSBnaXZlbiBmaWVsZCB0eXBlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBqRG9jXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBoYXNfZXhwb3J0ZXIodHlwZSkge1xyXG5cdFx0XHRyZXR1cm4gISEoIHRoaXMuX19yZWdpc3RyeSAmJiB0aGlzLl9fcmVnaXN0cnkuaGFzKCBTdHJpbmcoIHR5cGUgKS50b0xvd2VyQ2FzZSgpICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJ1biBhIHJlZ2lzdGVyZWQgZXhwb3J0ZXIgZm9yIGEgZmllbGQsIGlmIHByZXNlbnQuXHJcblx0XHQgKiBSZXR1cm5zIHRydWUgaWYgYSByZWdpc3RlcmVkIGV4cG9ydGVyIGhhbmRsZWQgaXQuXHJcblx0XHQgKlxyXG5cdFx0ICogQGpEb2NcclxuXHRcdCAqIEBwYXJhbSB7YW55fSBmaWVsZFxyXG5cdFx0ICogQHBhcmFtIHt7b3BlbjpGdW5jdGlvbixjbG9zZTpGdW5jdGlvbixwdXNoOkZ1bmN0aW9uLGJsYW5rOkZ1bmN0aW9ufX0gaW9cclxuXHRcdCAqIEBwYXJhbSB7YW55fSBjZmdcclxuXHRcdCAqIEBwYXJhbSB7YW55fSBvbmNlXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gY3R4XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJ1bl9yZWdpc3RlcmVkX2V4cG9ydGVyKGZpZWxkLCBpbywgY2ZnLCBvbmNlLCBjdHgpIHtcclxuXHRcdFx0aWYgKCAhIGZpZWxkIHx8ICEgZmllbGQudHlwZSB8fCAhIHRoaXMuX19yZWdpc3RyeSApIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyggZmllbGQudHlwZSApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdGNvbnN0IGZuICA9IHRoaXMuX19yZWdpc3RyeS5nZXQoIGtleSApO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJyApIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIE1pbmltYWwsIGNvbnNpc3RlbnQgZW1pdCgpIGJyaWRnZSBpbnRvIG91ciBsaW5lIGJ1ZmZlcjpcclxuXHRcdFx0XHRjb25zdCBlbWl0ID0gKGNvZGUpID0+IHsgaWYgKCB0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycgKSB7IGlvLnB1c2goIGNvZGUgKTsgfSB9O1xyXG5cdFx0XHRcdGZuKCBmaWVsZCwgZW1pdCwgeyBpbywgY2ZnLCBvbmNlLCBjdHgsIGNvcmUgfSApO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0X3dwYmM/LmRldj8uZXJyb3I/LiggJ1dQQkNfQkZCX0V4cG9ydGVyLnJ1bl9yZWdpc3RlcmVkX2V4cG9ydGVyJywgZSApO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIGV4cG9zZSBnbG9iYWxseSBmb3IgcGFja3MgKGlmIG5vdCBhbHJlYWR5KS5cclxuXHR3aW5kb3cuV1BCQ19CRkJfRXhwb3J0ZXIgPSB3aW5kb3cuV1BCQ19CRkJfRXhwb3J0ZXIgfHwgV1BCQ19CRkJfRXhwb3J0ZXI7XHJcblx0d3BiY19iZmJfX2Rpc3BhdGNoX2V2ZW50X3NhZmUoICd3cGJjOmJmYjpleHBvcnRlci1yZWFkeScsIHt9ICk7XHJcblxyXG5cdC8vIEluaXRpYWxpemUgZGVmYXVsdCBza2lwIGxpc3Q7IGFsbG93IGEgZ2xvYmFsIG92ZXJyaWRlIGFycmF5IGJlZm9yZSBleHBvcnQgcnVucy5cclxuXHRXUEJDX0JGQl9FeHBvcnRlci5zZXRfc2tpcF9hdHRycyggd2luZG93LldQQkNfQkZCX0VYUE9SVF9TS0lQX0FUVFJTIHx8IHdwYmNfZXhwb3J0X3NraXBfYXR0cnNfZGVmYXVsdCApO1xyXG5cclxuXHQvLyA9PSBcIkNvbnRlbnQgb2YgYm9va2luZyBmaWVsZHMgZGF0YVwiIEV4cG9ydGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdC8vIOKAkyBwYWNrLWV4dGVuc2libGUgZ2VuZXJhdG9yIGZvciBcIkNvbnRlbnQgb2YgYm9va2luZyBmaWVsZHMgZGF0YVwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0Ly8gPT0gUHJvZHVjZXMgbWFya3VwIGxpa2U6ICBcIjxkaXYgY2xhc3M9XFxcInN0YW5kYXJkLWNvbnRlbnQtZm9ybVxcXCI+PGI+VGl0bGU8L2I+OiA8Zj5bc2hvcnRjb2RlXTwvZj48YnI+IC4uLiA8L2Rpdj5cIlxyXG5cdC8vID09IFBhY2tzIGNhbiBvdmVycmlkZSBwZXIgdHlwZSB2aWE6IFdQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5yZWdpc3RlcignY2FsZW5kYXInLCAoZmllbGQsIGVtaXQsIGN0eCk9PnsuLi59KVxyXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRjbGFzcyBXUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIge1xyXG5cclxuXHRcdHN0YXRpYyByZWdpc3Rlcih0eXBlLCBmbikge1xyXG5cdFx0XHRpZiAoICF0eXBlIHx8IHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJyApIHJldHVybjtcclxuXHRcdFx0aWYgKCAhdGhpcy5fX3JlZ2lzdHJ5ICkgdGhpcy5fX3JlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xyXG5cdFx0XHR0aGlzLl9fcmVnaXN0cnkuc2V0KCBTdHJpbmcoIHR5cGUgKS50b0xvd2VyQ2FzZSgpLCBmbiApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyB1bnJlZ2lzdGVyKHR5cGUpIHtcclxuXHRcdFx0aWYgKCAhdGhpcy5fX3JlZ2lzdHJ5IHx8ICF0eXBlICkgcmV0dXJuO1xyXG5cdFx0XHR0aGlzLl9fcmVnaXN0cnkuZGVsZXRlKCBTdHJpbmcoIHR5cGUgKS50b0xvd2VyQ2FzZSgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc19leHBvcnRlcih0eXBlKSB7XHJcblx0XHRcdHJldHVybiAhISh0aGlzLl9fcmVnaXN0cnkgJiYgdGhpcy5fX3JlZ2lzdHJ5LmhhcyggU3RyaW5nKCB0eXBlICkudG9Mb3dlckNhc2UoKSApKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgcnVuX3JlZ2lzdGVyZWRfZXhwb3J0ZXIoZmllbGQsIGVtaXQsIGN0eCkge1xyXG5cdFx0XHRpZiAoICFmaWVsZCB8fCAhZmllbGQudHlwZSB8fCAhdGhpcy5fX3JlZ2lzdHJ5ICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRjb25zdCBrZXkgPSBTdHJpbmcoIGZpZWxkLnR5cGUgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRjb25zdCBmbiAgPSB0aGlzLl9fcmVnaXN0cnkuZ2V0KCBrZXkgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicgKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Zm4oIGZpZWxkLCBlbWl0LCBjdHggfHwge30gKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0X3dwYmM/LmRldj8uZXJyb3I/LiggJ1dQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5ydW5fcmVnaXN0ZXJlZF9leHBvcnRlcicsIGUgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyA9PT0gTkVXOiBzaGFyZWQgbGluZSBmb3JtYXR0ZXIgZm9yIFwiQ29udGVudCBvZiBib29raW5nIGZpZWxkcyBkYXRhXCIgPT09XHJcblx0XHRzdGF0aWMgZW1pdF9saW5lX2JvbGRfZmllbGQoZW1pdCwgbGFiZWwsIHRva2VuLCBjZmcpIHtcclxuXHRcdFx0Y29uc3QgUyAgICAgICAgID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0Y29uc3Qgc2VwICAgICAgID0gKGNmZyAmJiB0eXBlb2YgY2ZnLnNlcCA9PT0gJ3N0cmluZycpID8gY2ZnLnNlcCA6ICc6ICc7XHJcblx0XHRcdGNvbnN0IGFkZExhYmVscyA9IChjZmcgJiYgJ2FkZExhYmVscycgaW4gY2ZnKSA/ICEhY2ZnLmFkZExhYmVscyA6IHRydWU7XHJcblxyXG5cdFx0XHRjb25zdCB0aXRsZSA9IChhZGRMYWJlbHMgJiYgbGFiZWwpID8gYDxiPiR7Uy5lc2NhcGVfaHRtbChsYWJlbCl9PC9iPiR7c2VwfWAgOiAnJztcclxuXHJcblx0XHRcdGVtaXQoYCR7dGl0bGV9PGY+WyR7dG9rZW59XTwvZj48YnI+YCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFeHBvcnQgYWRhcHRlZCBzdHJ1Y3R1cmUgdG8g4oCcY29udGVudCBvZiBib29raW5nIGZpZWxkcyBkYXRh4oCdLlxyXG5cdFx0ICogQHBhcmFtIHt7cGFnZXM6QXJyYXl9fSBhZGFwdGVkICByZXN1bHQgb2YgYWRhcHRfYnVpbGRlcl9zdHJ1Y3R1cmVfdG9fZXhwb3J0ZXIoKVxyXG5cdFx0ICogQHBhcmFtIHt7bmV3bGluZT86c3RyaW5nLCBhZGRMYWJlbHM/OmJvb2xlYW4sIHNlcD86c3RyaW5nfX0gb3B0aW9uc1xyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGV4cG9ydF9jb250ZW50KGFkYXB0ZWQsIG9wdGlvbnMgPSB7fSkge1xyXG5cclxuXHRcdFx0Y29uc3QgY2ZnICAgPSB7IG5ld2xpbmU6ICdcXG4nLCBhZGRMYWJlbHM6IHRydWUsIHNlcDogJzogJywgaW5kZW50OiAnXFx0JywgLi4ub3B0aW9ucyB9O1xyXG5cdFx0XHRjb25zdCBJTkQgICA9ICh0eXBlb2YgY2ZnLmluZGVudCA9PT0gJ3N0cmluZycpID8gY2ZnLmluZGVudCA6ICdcXHQnO1xyXG5cdFx0XHRsZXQgZGVwdGggICA9IDA7XHJcblx0XHRcdGNvbnN0IGxpbmVzID0gW107XHJcblxyXG5cdFx0XHRjb25zdCBwdXNoICA9IChzID0gJycpID0+IGxpbmVzLnB1c2goIElORC5yZXBlYXQoIGRlcHRoICkgKyBTdHJpbmcoIHMgKSApO1xyXG5cdFx0XHRjb25zdCBvcGVuICA9IChzID0gJycpID0+IHsgcHVzaCggcyApOyBkZXB0aCsrOyB9O1xyXG5cdFx0XHRjb25zdCBjbG9zZSA9IChzID0gJycpID0+IHsgZGVwdGggPSBNYXRoLm1heCggMCwgZGVwdGggLSAxICk7IHB1c2goIHMgKTsgfTtcclxuXHJcblx0XHRcdGNvbnN0IGVtaXQgPSAocykgPT4ge1xyXG5cdFx0XHRcdGlmICggdHlwZW9mIHMgIT09ICdzdHJpbmcnICkgeyByZXR1cm47IH1cclxuXHRcdFx0XHRTdHJpbmcoIHMgKS5zcGxpdCggL1xccj9cXG4vICkuZm9yRWFjaCggKGxpbmUpID0+IHB1c2goIGxpbmUgKSApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKCAhYWRhcHRlZCB8fCAhQXJyYXkuaXNBcnJheSggYWRhcHRlZC5wYWdlcyApICkgcmV0dXJuICcnO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2tpcFR5cGVzID0gbmV3IFNldCggWyAnY2FwdGNoYScsICdzdWJtaXQnLCAnZGl2aWRlcicsICd3aXphcmRfbmF2JywgJ2Nvc3RfY29ycmVjdGlvbnMnIF0gKTtcclxuXHJcblx0XHRcdGNvbnN0IGZhbGxiYWNrTGluZSA9IChmaWVsZCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHR5cGUgID0gU3RyaW5nKCBmaWVsZC50eXBlIHx8ICcnICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRjb25zdCBuYW1lICA9IFdQQkNfQkZCX0V4cG9ydGVyLmNvbXB1dGVfbmFtZSggdHlwZSwgZmllbGQgKTtcclxuXHRcdFx0XHRjb25zdCBsYWJlbCA9ICh0eXBlb2YgZmllbGQubGFiZWwgPT09ICdzdHJpbmcnICYmIGZpZWxkLmxhYmVsLnRyaW0oKSkgPyBmaWVsZC5sYWJlbC50cmltKCkgOiBuYW1lO1xyXG5cdFx0XHRcdGlmICggIW5hbWUgKSByZXR1cm47XHJcblx0XHRcdFx0V1BCQ19CRkJfQ29udGVudEV4cG9ydGVyLmVtaXRfbGluZV9ib2xkX2ZpZWxkKCBlbWl0LCBsYWJlbCwgbmFtZSwgY2ZnICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBQZXItdHlwZSBzZW5zaWJsZSBkZWZhdWx0cyAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFja3MgdmlhIHJlZ2lzdGVyKCkpXHJcblx0XHRcdGNvbnN0IGRlZmF1bHRDb250ZW50Rm9yID0gKGZpZWxkKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdHlwZSA9IFN0cmluZyggZmllbGQudHlwZSB8fCAnJyApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCBza2lwVHlwZXMuaGFzKCB0eXBlICkgKSByZXR1cm47XHJcblx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlcyBvdXQgb2YgdGhlIGJveDpcclxuXHRcdFx0XHRpZiAoIHR5cGUgPT09ICdjYWxlbmRhcicgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBsYWJlbCA9ICh0eXBlb2YgZmllbGQubGFiZWwgPT09ICdzdHJpbmcnICYmIGZpZWxkLmxhYmVsLnRyaW0oKSkgPyBmaWVsZC5sYWJlbC50cmltKCkgOiAnRGF0ZXMnO1xyXG5cdFx0XHRcdFx0V1BCQ19CRkJfQ29udGVudEV4cG9ydGVyLmVtaXRfbGluZV9ib2xkX2ZpZWxkKCBlbWl0LCBsYWJlbCwgJ2RhdGVzJywgY2ZnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIHRpbWUtbGlrZSByZXNlcnZlZCBuYW1lcyAtPiBrZWVwIHBsYWNlaG9sZGVyIHRva2VuIGVxdWFsIHRvIG5hbWVcclxuXHRcdFx0XHRjb25zdCByZXNlcnZlZCA9IFN0cmluZyggZmllbGQubmFtZSB8fCBmaWVsZC5pZCB8fCAnJyApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCBbICdyYW5nZXRpbWUnLCAnc3RhcnR0aW1lJywgJ2VuZHRpbWUnLCAnZHVyYXRpb250aW1lJyBdLmluY2x1ZGVzKCByZXNlcnZlZCApICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSAodHlwZW9mIGZpZWxkLmxhYmVsID09PSAnc3RyaW5nJyAmJiBmaWVsZC5sYWJlbC50cmltKCkpID8gZmllbGQubGFiZWwudHJpbSgpIDogcmVzZXJ2ZWQ7XHJcblx0XHRcdFx0XHQvLyBLZWVwIHlvdXIgc3BlY2lhbCB0b2tlbiBmb3IgZHVyYXRpb24gdGltZSBpbiBjb250ZW50OiBbZHVyYXRpb250aW1lX3ZhbF1cclxuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gKHJlc2VydmVkID09PSAnZHVyYXRpb250aW1lJykgPyAnZHVyYXRpb250aW1lX3ZhbCcgOiByZXNlcnZlZDtcclxuXHRcdFx0XHRcdFdQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5lbWl0X2xpbmVfYm9sZF9maWVsZCggZW1pdCwgbGFiZWwsIHRva2VuLCBjZmcgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gRmFsbGJhY2sgKHRleHQvZW1haWwvdGVsL251bWJlci90ZXh0YXJlYS9zZWxlY3QvY2hlY2tib3gvcmFkaW8gZXRjLilcclxuXHRcdFx0XHRmYWxsYmFja0xpbmUoIGZpZWxkICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBXYWxrIHBhZ2VzL3NlY3Rpb25zL2NvbHVtbnMvZmllbGRzIChzYW1lIG9yZGVyIGFzIGZvcm0pXHJcblx0XHRcdGNvbnN0IHdhbGtTZWN0aW9uICA9IChzZWMpID0+IHtcclxuXHRcdFx0XHQoc2VjLmNvbHVtbnMgfHwgW10pLmZvckVhY2goIChjb2wpID0+IHtcclxuXHRcdFx0XHRcdChjb2wuZmllbGRzIHx8IFtdKS5mb3JFYWNoKCAoZikgPT4gcHJvY2Vzc0ZpZWxkKCBmICkgKTtcclxuXHRcdFx0XHRcdChjb2wuc2VjdGlvbnMgfHwgW10pLmZvckVhY2goIChzKSA9PiB3YWxrU2VjdGlvbiggcyApICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRjb25zdCBwcm9jZXNzSXRlbSAgPSAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdGlmICggIWl0ZW0gKSByZXR1cm47XHJcblx0XHRcdFx0aWYgKCBpdGVtLmtpbmQgPT09ICdmaWVsZCcgKSBwcm9jZXNzRmllbGQoIGl0ZW0uZGF0YSApO1xyXG5cdFx0XHRcdGlmICggaXRlbS5raW5kID09PSAnc2VjdGlvbicgKSB3YWxrU2VjdGlvbiggaXRlbS5kYXRhICk7XHJcblx0XHRcdH07XHJcblx0XHRcdGNvbnN0IHByb2Nlc3NGaWVsZCA9IChmaWVsZCkgPT4ge1xyXG5cdFx0XHRcdGlmICggIWZpZWxkICkgcmV0dXJuO1xyXG5cdFx0XHRcdC8vIGFsbG93IHBhY2tzIHRvIG92ZXJyaWRlOlxyXG5cdFx0XHRcdGlmICggV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyLnJ1bl9yZWdpc3RlcmVkX2V4cG9ydGVyKCBmaWVsZCwgZW1pdCwgeyBjZmcsIGNvcmUgfSApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGRlZmF1bHRDb250ZW50Rm9yKCBmaWVsZCApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gV3JhcHBlciBmaXJzdCAtPiBpbm5lciBsaW5lcyB3aWxsIGJlIFRBQi1pbmRlbnRlZFxyXG5cdFx0XHRvcGVuKCBgPGRpdiBjbGFzcz1cInN0YW5kYXJkLWNvbnRlbnQtZm9ybVwiPmAgKTtcclxuXHRcdFx0YWRhcHRlZC5wYWdlcy5mb3JFYWNoKCAocGFnZSkgPT4gKHBhZ2UuaXRlbXMgfHwgW10pLmZvckVhY2goIHByb2Nlc3NJdGVtICkgKTtcclxuXHRcdFx0Y2xvc2UoIGA8L2Rpdj5gICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbGluZXMuam9pbiggY2ZnLm5ld2xpbmUgKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyBleHBvc2UgKyByZWFkeSBldmVudCBmb3IgcGFja3MgdG8gcmVnaXN0ZXIgdGhlaXIgY29udGVudCBleHBvcnRlcnMuXHJcblx0d2luZG93LldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlciA9IHdpbmRvdy5XUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIgfHwgV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyO1xyXG5cdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKCAnd3BiYzpiZmI6Y29udGVudC1leHBvcnRlci1yZWFkeScsIHt9ICk7XHJcbn0pKCk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFlBQVk7RUFDWixZQUFZOztFQUVaLE1BQU1BLElBQUksR0FBR0MsTUFBTSxDQUFDQyxhQUFhLElBQUksQ0FBQyxDQUFDOztFQUV2QztFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7QUFDRDtBQUNBO0FBQ0E7RUFDQyxNQUFNQyw4QkFBOEIsR0FBRyxDQUFFLHVCQUF1QixDQUFFOztFQUVsRTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0MsU0FBU0MsNEJBQTRCQSxDQUFDQyxJQUFJLEVBQUVDLGVBQWUsRUFBRTtJQUM1RCxJQUFJLENBQUNELElBQUksSUFBSSxDQUFDQyxlQUFlLEVBQUVDLE1BQU0sRUFBRSxPQUFPRixJQUFJO0lBQ2xELElBQUlHLEdB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O1VBQ3JDLENBQUNBLEdBQUcsQ0FBQytCLE1BQU0sSUFBSSxFQUFFLEVBQUVVLE9BQU8sQ0FBR1QsQ0FBQyxJQUFLK0wsWUFBWSxDQUFFL0wsQ0FBRSxDQUFFLENBQUM7VUFDdEQsQ0FBQ2hDLEdBQUcsQ0FBQ21DLFFBQVEsSUFBSSxFQUFFLEVBQUVNLE9BQU8sQ0FBR2xELENBQUMsSUFBS3VPLFdBQVcsQ0FBRXZPLENBQUUsQ0FBRSxDQUFDO1FBQ3hELENBQUUsQ0FBQztNQUNKLENBQUM7TUFDRCxNQUFNeU8sV0FBVyxHQUFLdEwsSUFBSSxJQUFLO1FBQzlCLElBQUssQ0FBQ0EsSUFBSSxFQUFHO1FBQ2IsSUFBS0EsSUFBSSxDQUFDQyxJQUFJLEtBQUssT0FBTyxFQUFHb0wsWUFBWSxDQUFFckwsSUFBSSxDQUFDUixJQUFLLENBQUM7UUFDdEQsSUFBS1EsSUFBSSxDQUFDQyxJQUFJLEtBQUssU0FBUyxFQUFHbUwsV0FBVyxDQUFFcEwsSUFBSSxDQUFDUixJQUFLLENBQUM7TUFDeEQsQ0FBQztNQUNELE1BQU02TCxZQUFZLEdBQUkvRyxLQUFLLElBQUs7UUFDL0IsSUFBSyxDQUFDQSxLQUFLLEVBQUc7UUFDZDtRQUNBLElBQUt4Qix3QkFBd0IsQ0FBQ3lDLHVCQUF1QixDQUFFakIsS0FBSyxFQUFFdUIsSUFBSSxFQUFFO1VBQUU3RSxHQUFHO1VBQUV6SDtRQUFLLENBQUUsQ0FBQyxFQUFHO1FBQ3RGMFIsaUJBQWlCLENBQUUzRyxLQUFNLENBQUM7TUFDM0IsQ0FBQzs7TUFFRDtNQUNBN0MsSUFBSSxDQUFFLHFDQUFzQyxDQUFDO01BQzdDVixPQUFPLENBQUN4QyxLQUFLLENBQUN3QixPQUFPLENBQUdGLElBQUksSUFBSyxDQUFDQSxJQUFJLENBQUNyQixLQUFLLElBQUksRUFBRSxFQUFFdUIsT0FBTyxDQUFFdUwsV0FBWSxDQUFFLENBQUM7TUFDNUU1SixLQUFLLENBQUUsUUFBUyxDQUFDO01BRWpCLE9BQU9ILEtBQUssQ0FBQzlFLElBQUksQ0FBRXVFLEdBQUcsQ0FBQ0MsT0FBUSxDQUFDO0lBQ2pDO0VBRUQ7O0VBRUE7RUFDQXpILE1BQU0sQ0FBQ3NKLHdCQUF3QixHQUFHdEosTUFBTSxDQUFDc0osd0JBQXdCLElBQUlBLHdCQUF3QjtFQUM3RjRILDZCQUE2QixDQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBRSxDQUFDO0FBQ3ZFLENBQUMsRUFBRSxDQUFDIiwiaWdub3JlTGlzdCI6W119
1224 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9leHBvcnQvYnVpbGRlci1leHBvcnRlci5qcyIsIm5hbWVzIjpbImNvcmUiLCJ3aW5kb3ciLCJXUEJDX0JGQl9Db3JlIiwid3BiY19leHBvcnRfc2tpcF9hdHRyc19kZWZhdWx0Iiwic3RyaXBfYXR0cmlidXRlc19mcm9tX21hcmt1cCIsImh0bWwiLCJhdHRyc19sb3dlcmNhc2UiLCJsZW5ndGgiLCJvdXQiLCJTdHJpbmciLCJyYXdOYW1lIiwibmFtZSIsInRvTG93ZXJDYXNlIiwidHJpbSIsImVzYyIsInJlcGxhY2UiLCJyZSIsIlJlZ0V4cCIsIndwYmNfY29sdW1uX292ZXJmbG93X3ZhbHVlcyIsIm5vcm1hbGl6ZV9jb2x1bW5fbGVuZ3RoIiwiY2FuZGlkYXRlX3ZhbHVlIiwibm9ybWFsaXplZF92YWx1ZSIsInRlc3QiLCJub3JtYWxpemVfY29sdW1uX21heGltdW0iLCJub3JtYWxpemVfY29sdW1uX292ZXJmbG93IiwiaW5kZXhPZiIsImhhc19ub25fZGVmYXVsdF9jb2xfc3R5bGVzIiwib2JqIiwia2V5cyIsImkiLCJrIiwicGFyc2VfY29sX3N0eWxlc19qc29uIiwicmF3IiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwieCIsImFyciIsIkpTT04iLCJwYXJzZSIsIl9lIiwiYnVpbGRfY29sX2Nzc192YXJzIiwibWFwIiwiZGlyIiwid3JhcCIsImpjIiwiYWkiLCJnYXAiLCJwYWRkaW5nIiwibWFyZ2luIiwicGFkZGluZ190b3AiLCJwYWRkaW5nX3JpZ2h0IiwicGFkZGluZ19ib3R0b20iLCJwYWRkaW5nX2xlZnQiLCJtYXJnaW5fdG9wIiwibWFyZ2luX3JpZ2h0IiwibWFyZ2luX2JvdHRvbSIsIm1hcmdpbl9sZWZ0IiwibWF4X3dpZHRoIiwibWF4X2hlaWdodCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dfeCIsIm92ZXJmbG93X3kiLCJhYyIsImFzZWxmIiwicGFydHMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ2IiwidmFyX25hbWUiLCJwdXNoIiwiam9pbiIsInJlc29sdmVfZmxleF9iYXNpc19wZXJjZW50Iiwid2lkdGhfdG9rZW4iLCJmYWxsYmFja19wZXJjZW50IiwicyIsImVuZHNXaXRoIiwicCIsInBhcnNlRmxvYXQiLCJpc0Zpbml0ZSIsImNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzIiwiY29sdW1ucyIsImdhcF9wZXJjZW50IiwibiIsImNvbCIsInciLCJ3aWR0aCIsIk5hTiIsIk51bWJlciIsInN1bV9yYXciLCJyZWR1Y2UiLCJhIiwiYiIsImdwIiwidG90YWxfZ2FwcyIsIk1hdGgiLCJtYXgiLCJhdmFpbGFibGUiLCJzY2FsZV9yYXRpbyIsImFkYXB0X2J1aWxkZXJfc3RydWN0dXJlX3RvX2V4cG9ydGVyIiwic3RydWN0dXJlIiwicGFnZXMiLCJpdGVtcyIsIm5vcm1hbGl6ZV9vcHRpb25zIiwib3B0cyIsIm8iLCJsYWJlbCIsInZhbHVlIiwic2VsZWN0ZWQiLCJ3YWxrX3NlY3Rpb24iLCJzZWMiLCJzZWN0aW9uX2NvbF9zdHlsZXMiLCJjb2xfc3R5bGVzIiwiaWQiLCJodG1sX2lkIiwiY3NzY2xhc3MiLCJjb2xfaW5kZXgiLCJmaWVsZHMiLCJmIiwidHlwZSIsImRhdGEiLCJzZWN0aW9ucyIsIml0Iiwib3B0aW9ucyIsInN0eWxlIiwicGFnZSIsImNvbnRlbnQiLCJmb3JFYWNoIiwiaXRlbSIsImtpbmQiLCJXUEJDX0JGQl9FeHBvcnRlciIsInNraXBfYXR0cnMiLCJTZXQiLCJzZXRfc2tpcF9hdHRycyIsIkJvb2xlYW4iLCJhZGRfc2tpcF9hdHRycyIsIm5hbWVzIiwiYWRkIiwicmVtb3ZlX3NraXBfYXR0ciIsImRlbGV0ZSIsInNhbml0aXplX2V4cG9ydCIsImZyb20iLCJleHBvcnRfZm9ybSIsImFkYXB0ZWQiLCJjZmciLCJuZXdsaW5lIiwiYWRkTGFiZWxzIiwiZ2FwUGVyY2VudCIsImluZGVudCIsIklORCIsImRlcHRoIiwibGluZXMiLCJyZXBlYXQiLCJvcGVuIiwiY2xvc2UiLCJibGFuayIsImN0eCIsInVzZWRJZHMiLCJvbmNlIiwiY2FwdGNoYSIsImNvdW50cnkiLCJjb3Vwb24iLCJjb3N0X2NvcnJlY3Rpb25zIiwic3VibWl0IiwicGFnZV9pbmRleCIsImlzX2ZpcnN0Iiwic3RlcF9udW0iLCJoaWRkZW5fY2xhc3MiLCJoaWRkZW5fc3R5bGUiLCJyZW5kZXJfc2VjdGlvbiIsInJlbmRlcl9maWVsZF9ub2RlIiwiZXhwb3J0X2FsbCIsImFkdmFuY2VkX2Zvcm0iLCJmaWVsZHNfZGF0YSIsIldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlciIsImV4cG9ydF9jb250ZW50Iiwic2VwIiwic2VjdGlvbiIsImlvIiwiY29scyIsInJvd19pc19hY3RpdmUiLCJzb21lIiwicm93X2F0dHJfYWN0aXZlIiwicm93X2N1c3RvbV9hdHRycyIsIml0ZW1fd3JhcHBlcl9hdHRycyIsImJhc2VzIiwiZXNjX2F0dHIiLCJXUEJDX0JGQl9TYW5pdGl6ZSIsImVzY2FwZV9odG1sIiwiaWR4IiwiZWZmX2Jhc2lzIiwic3R5bGVfcGFydHMiLCJ0b1N0cmluZyIsImNzc192YXJzX3N0ciIsInN0eWxlX2F0dHIiLCJjb2xfaXNfYWN0aXZlIiwiY29sX2F0dHJfYWN0aXZlIiwibm9kZSIsIm5lc3RlZCIsIndyYXBwZXJfZGF0YSIsImVzY19odG1sIiwiY2xzX3Nhbml0Iiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInNpZCIsInNhbml0aXplX2h0bWxfaWQiLCJjbHNfcmF3IiwiY3NzY2xhc3NfZXh0cmEiLCJjbGFzcyIsImNscyIsInVuaXF1ZSIsImhhcyIsImZpZWxkIiwiaXRlbV9hdHRycyIsImhhbmRsZWQiLCJoYXNfZXhwb3J0ZXIiLCJydW5fcmVnaXN0ZXJlZF9leHBvcnRlciIsImNvbXB1dGVfbmFtZSIsImhlbHAiLCJpc19yZXF1aXJlZCIsInJlcXVpcmVkIiwiZW1pdF9sYWJlbF90aGVuIiwiZW1pdCIsImJvZHkiLCJpc19yZXEiLCJyZXFfbWFyayIsImlzX3RpbWVzbG90X3BpY2tlcl9lbmFibGVkIiwiX3dwYmMiLCJnZXRfb3RoZXJfcGFyYW0iLCJfIiwidGltZV9wbGFjZWhvbGRlcl9mb3IiLCJwbGFjZWhvbGRlciIsImJ1aWxkX3RpbWVfc2VsZWN0X3Rva2VucyIsInRva2Vuc19zdHIiLCJvcHRpb25fdG9rZW5zIiwiZGVmX3N0ciIsImRlZmF1bHRfb3B0aW9uX3N1ZmZpeCIsImhhc19zZWxlY3RlZF9kZWZhdWx0IiwiaGFzX2VtcHR5X3ZhbHVlX29wdGlvbiIsInBoVGV4dCIsInBoVG9rZW5TdHIiLCJlc2NhcGVfZm9yX3Nob3J0Y29kZSIsIm90aGVyIiwiZW1pdF90aW1lX3NlbGVjdCIsImlkX29wdCIsImNsc19vcHRzIiwiZ2V0X2RlZmF1bHRfdmFsdWUiLCJkZWZhdWx0X3ZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdF90ZXh0X3N1ZmZpeCIsImNsYXNzX29wdGlvbnMiLCJjbGFzc05hbWUiLCJzcGxpdCIsImMiLCJ0b190b2tlbiIsImlkX29wdGlvbiIsInJhd19pZCIsImlkX2F0dHIiLCJiYXNlIiwicGhfYXR0ciIsImVzY2FwZV9mb3JfYXR0cl9xdW90ZWQiLCJzaXplX21heF90b2tlbiIsInNpemUiLCJwYXJzZUludCIsIm1heGxlbmd0aCIsImNvbHNfcm93c190b2tlbiIsInJvd3MiLCJ0aXRsZSIsInRva2VucyIsImZpbmQiLCJkZWZfdmFsIiwiZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyIiwiY2hvaWNlX3RhZyIsImRlZiIsInVsZSIsInVzZV9sYWJlbF9lbGVtZW50IiwibXVsdGlwbGVfZmxhZyIsIm11bHRpcGxlIiwicmF3UGgiLCJwaCIsIlMiLCJlc2Nfc2MiLCJwaFRva2VuIiwibGYiLCJsYWJlbF9maXJzdCIsIlNhbml0Iiwic2FuaXRpemVfaHRtbF9uYW1lIiwicmVnaXN0ZXIiLCJmbiIsIl9fcmVnaXN0cnkiLCJNYXAiLCJzZXQiLCJ1bnJlZ2lzdGVyIiwia2V5IiwiZ2V0IiwiY29kZSIsImUiLCJkZXYiLCJlcnJvciIsIndwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlIiwiV1BCQ19CRkJfRVhQT1JUX1NLSVBfQVRUUlMiLCJlbWl0X2xpbmVfYm9sZF9maWVsZCIsInRva2VuIiwibGluZSIsInNraXBUeXBlcyIsImZhbGxiYWNrTGluZSIsImRlZmF1bHRDb250ZW50Rm9yIiwicmVzZXJ2ZWQiLCJpbmNsdWRlcyIsIndhbGtTZWN0aW9uIiwicHJvY2Vzc0ZpZWxkIiwicHJvY2Vzc0l0ZW0iXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fc3JjL2V4cG9ydC9idWlsZGVyLWV4cG9ydGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZmlsZTogLi4vaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9leHBvcnQvYnVpbGRlci1leHBvcnRlci5qc1xyXG4gKi9cclxuKGZ1bmN0aW9uICgpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHJcblx0Y29uc3QgY29yZSA9IHdpbmRvdy5XUEJDX0JGQl9Db3JlIHx8IHt9O1xyXG5cclxuXHQvLyA9PSBIZWxwZXJzIOKAlCBTaGFyZWQgaGVscGVyIEFQSSBmb3IgZmllbGQgcGFja3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdC8vID09IFRoZXNlIGFyZSBnZW5lcmljIHV0aWxpdGllcyB0aGF0IHBhY2tzIGNhbiBjYWxsIGZyb20gdGhlaXIgb3duIGV4cG9ydGVyczpcclxuXHQvLyA9PSAgLSBjb21wdXRlX25hbWUoKSwgaWRfb3B0aW9uKCksIGNsYXNzX29wdGlvbnMoKSwgc2l6ZV9tYXhfdG9rZW4oKSwgZW1pdF90aW1lX3NlbGVjdCgpLCBldGMuXHJcblx0Ly8gPT0gTm8gZmllbGQtdHlwZSBicmFuY2hpbmcgc2hvdWxkIGxpdmUgaW4gdGhlIGNvcmUgZXhwb3J0ZXIuXHJcblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWZhdWx0IHNraXAgbGlzdCAoY2FuIGJlIGV4dGVuZGVkL292ZXJyaWRkZW4gYXQgcnVudGltZSkuXHJcblx0ICogLSBPbmx5IGF0dHJpYnV0ZSBOQU1FUyBoZXJlIChjYXNlLWluc2Vuc2l0aXZlKS4gVmFsdWVzIGFyZSByZW1vdmVkIHdpdGggdGhlbS5cclxuXHQgKi9cclxuXHRjb25zdCB3cGJjX2V4cG9ydF9za2lwX2F0dHJzX2RlZmF1bHQgPSBbICdkYXRhLWNvbHN0eWxlcy1hY3RpdmUnIF07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZSBhdHRyaWJ1dGVzIGJ5IG5hbWUgZnJvbSBhbiBIVE1MLWxpa2Ugc3RyaW5nLlxyXG5cdCAqIE1hdGNoZXM6XHJcblx0ICogICAtIG5hbWVcclxuXHQgKiAgIC0gbmFtZT1cIi4uLlwiL25hbWU9Jy4uLicvbmFtZT12YWx1ZVxyXG5cdCAqIHdpdGggYW55IHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IGF0dHJzX2xvd2VyY2FzZSAgIGF0dHJpYnV0ZSBuYW1lcyAobG93ZXJjYXNlKVxyXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBzdHJpcF9hdHRyaWJ1dGVzX2Zyb21fbWFya3VwKGh0bWwsIGF0dHJzX2xvd2VyY2FzZSkge1xyXG5cdFx0aWYgKCFodG1sIHx8ICFhdHRyc19sb3dlcmNhc2U/Lmxlbmd0aCkgcmV0dXJuIGh0bWw7XHJcblx0XHRsZXQgb3V0ID0gU3RyaW5nKGh0bWwpO1xyXG5cdFx0Zm9yIChjb25zdCByYXdOYW1lIG9mIGF0dHJzX2xvd2VyY2FzZSkge1xyXG5cdFx0XHRpZiAoIXJhd05hbWUpIGNvbnRpbnVlO1xyXG5cdFx0XHRjb25zdCBuYW1lID0gU3RyaW5nKHJhd05hbWUpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG5cdFx0XHQvLyBFc2NhcGUgZm9yIHJlZ2V4XHJcblx0XHRcdGNvbnN0IGVzYyA9IG5hbWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcclxuXHRcdFx0Ly8gTWF0Y2ggZnVsbCBhdHRyaWJ1dGUgbmFtZSBvbmx5IChuZXh0IGNoYXIgaXMgTk9UIGEgdmFsaWQgbmFtZSBjaGFyKVxyXG5cdFx0XHRjb25zdCByZSA9IG5ldyBSZWdFeHAoXHJcblx0XHRcdFx0YFxcXFxzJHtlc2N9KD8hW0EtWmEtejAtOV86XFxcXC1dKSg/Oj0oPzpcIlteXCJdKlwifCdbXiddKid8W15cXFxccz5dKikpP2AsXHJcblx0XHRcdFx0J2dpJ1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRvdXQgPSBvdXQucmVwbGFjZShyZSwgJycpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG91dDtcclxuXHR9XHJcblxyXG5cdC8vID09IEhlbHBlcnMg4oCTIGNvbHVtbiBzdHlsZXMgcGFyc2luZyAmIENTUyB2YXJzIGJ1aWxkZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0dmFyIHdwYmNfY29sdW1uX292ZXJmbG93X3ZhbHVlcyA9IFsgJ3Zpc2libGUnLCAnYXV0bycsICdoaWRkZW4nIF07XG5cblx0LyoqXG5cdCAqIENvbnN0cmFpbiBhIGNvbHVtbiBzcGFjaW5nIGxlbmd0aCB0byB1bml0cyBzdXBwb3J0ZWQgYnkgdGhlIEluc3BlY3Rvci5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBjYW5kaWRhdGVfdmFsdWUgU2F2ZWQgY29sdW1uLXN0eWxlIHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBWYWxpZCBub24tbmVnYXRpdmUgQ1NTIGxlbmd0aCBvciBgMHB4YC5cblx0ICovXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZV9jb2x1bW5fbGVuZ3RoKCBjYW5kaWRhdGVfdmFsdWUgKSB7XG5cdFx0dmFyIG5vcm1hbGl6ZWRfdmFsdWUgPSBTdHJpbmcoIGNhbmRpZGF0ZV92YWx1ZSA9PSBudWxsID8gJycgOiBjYW5kaWRhdGVfdmFsdWUgKS50cmltKCk7XG5cdFx0aWYgKCAvXlxcZCsoXFwuXFxkKyk/JC8udGVzdCggbm9ybWFsaXplZF92YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIG5vcm1hbGl6ZWRfdmFsdWUgKyAncHgnO1xuXHRcdH1cblx0XHRyZXR1cm4gL15cXGQrKFxcLlxcZCspPyhweHxyZW18ZW18JSkkLy50ZXN0KCBub3JtYWxpemVkX3ZhbHVlICkgPyBub3JtYWxpemVkX3ZhbHVlIDogJzBweCc7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RyYWluIGFuIG9wdGlvbmFsIGNvbHVtbiBtYXhpbXVtIGRpbWVuc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBjYW5kaWRhdGVfdmFsdWUgU2F2ZWQgY29sdW1uLXN0eWxlIHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBWYWxpZCBtYXhpbXVtIGRpbWVuc2lvbiBvciBgbm9uZWAuXG5cdCAqL1xuXHRmdW5jdGlvbiBub3JtYWxpemVfY29sdW1uX21heGltdW0oIGNhbmRpZGF0ZV92YWx1ZSApIHtcblx0XHR2YXIgbm9ybWFsaXplZF92YWx1ZSA9IFN0cmluZyggY2FuZGlkYXRlX3ZhbHVlID09IG51bGwgPyAnJyA6IGNhbmRpZGF0ZV92YWx1ZSApLnRyaW0oKTtcblx0XHRpZiAoICEgbm9ybWFsaXplZF92YWx1ZSB8fCAnbm9uZScgPT09IG5vcm1hbGl6ZWRfdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gJ25vbmUnO1xuXHRcdH1cblx0XHRpZiAoIC9eXFxkKyhcXC5cXGQrKT8kLy50ZXN0KCBub3JtYWxpemVkX3ZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gbm9ybWFsaXplZF92YWx1ZSArICdweCc7XG5cdFx0fVxuXHRcdHJldHVybiAvXlxcZCsoXFwuXFxkKyk/KHB4fHJlbXxlbXwlfHZofHZ3KSQvLnRlc3QoIG5vcm1hbGl6ZWRfdmFsdWUgKSA/IG5vcm1hbGl6ZWRfdmFsdWUgOiAnbm9uZSc7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RyYWluIGNvbHVtbiBvdmVyZmxvdyB0byB0aGUgSW5zcGVjdG9yIGFsbG93bGlzdC5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBjYW5kaWRhdGVfdmFsdWUgU2F2ZWQgY29sdW1uLXN0eWxlIHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBBbGxvd2xpc3RlZCBvdmVyZmxvdyB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZV9jb2x1bW5fb3ZlcmZsb3coIGNhbmRpZGF0ZV92YWx1ZSApIHtcblx0XHR2YXIgbm9ybWFsaXplZF92YWx1ZSA9IFN0cmluZyggY2FuZGlkYXRlX3ZhbHVlIHx8ICcnICk7XG5cdFx0cmV0dXJuIHdwYmNfY29sdW1uX292ZXJmbG93X3ZhbHVlcy5pbmRleE9mKCBub3JtYWxpemVkX3ZhbHVlICkgIT09IC0xID8gbm9ybWFsaXplZF92YWx1ZSA6IHdwYmNfY29sdW1uX292ZXJmbG93X3ZhbHVlc1swXTtcblx0fVxuXG5cdC8vIEtub3duIGtleXMgd2UgdHJlYXQgYXMgcmVhbCBwZXItY29sdW1uIHN0eWxlIG92ZXJyaWRlcy5cblx0ZnVuY3Rpb24gaGFzX25vbl9kZWZhdWx0X2NvbF9zdHlsZXMob2JqKSB7XHJcblx0XHRpZiAoICFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHZhciBrZXlzID0gW1xuXHRcdFx0J2RpcicsICd3cmFwJywgJ2pjJywgJ2FpJywgJ2dhcCcsICdwYWRkaW5nJywgJ21hcmdpbicsXG5cdFx0XHQncGFkZGluZ190b3AnLCAncGFkZGluZ19yaWdodCcsICdwYWRkaW5nX2JvdHRvbScsICdwYWRkaW5nX2xlZnQnLFxuXHRcdFx0J21hcmdpbl90b3AnLCAnbWFyZ2luX3JpZ2h0JywgJ21hcmdpbl9ib3R0b20nLCAnbWFyZ2luX2xlZnQnLFxuXHRcdFx0J21heF93aWR0aCcsICdtYXhfaGVpZ2h0JywgJ292ZXJmbG93JywgJ292ZXJmbG93X3gnLCAnb3ZlcmZsb3dfeScsICdhc2VsZicsICdhYydcblx0XHRdO1xuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcclxuXHRcdFx0aWYgKCBvYmpba10gIT0gbnVsbCAmJiBTdHJpbmcoIG9ialtrXSApLnRyaW0oKSAhPT0gJycgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIGBjb2xfc3R5bGVzYCBjb21pbmcgZnJvbSBhIFNlY3Rpb24uXHJcblx0ICogQWNjZXB0czogSlNPTiBzdHJpbmcgb3IgYXJyYXkgb2Ygb2JqZWN0cy5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfEFycmF5fHVuZGVmaW5lZHxudWxsfSByYXdcclxuXHQgKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gYXJyYXkgYWxpZ25lZCB0byBjb2x1bW5zIChtYXkgYmUgZW1wdHkpXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gcGFyc2VfY29sX3N0eWxlc19qc29uKHJhdykge1xyXG5cdFx0aWYgKCAhcmF3ICkgcmV0dXJuIFtdO1xyXG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCByYXcgKSApIHJldHVybiByYXcuZmlsdGVyKCBmdW5jdGlvbiAoeCkge1xyXG5cdFx0XHRyZXR1cm4geCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCc7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR2YXIgYXJyID0gSlNPTi5wYXJzZSggcmF3ICk7XHJcblx0XHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoIGFyciApID8gYXJyLmZpbHRlciggZnVuY3Rpb24gKHgpIHtcclxuXHRcdFx0XHRcdHJldHVybiB4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JztcclxuXHRcdFx0XHR9ICkgOiBbXTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdHJldHVybiBbXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIFtdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGQgQ1NTIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBzdHJpbmcgZm9yIGEgY29sdW1uIHN0eWxlIG9iamVjdC5cclxuXHQgKiBLbm93biBrZXlzIC0+IENTUyB2YXJzOlxyXG5cdCAqICAtIGRpciAgLT4gLS13cGJjLWJmYi1jb2wtZGlyXHJcblx0ICogIC0gd3JhcCAtPiAtLXdwYmMtYmZiLWNvbC13cmFwXHJcblx0ICogIC0gamMgICAtPiAtLXdwYmMtYmZiLWNvbC1qY1xyXG5cdCAqICAtIGFpICAgLT4gLS13cGJjLWJmYi1jb2wtYWlcclxuXHQgKiAgLSBnYXAgIC0+IC0td3BiYy1iZmItY29sLWdhcFxuXHQgKiAgLSBwYWRkaW5nIC0+IC0td3BiYy1iZmItY29sLXBhZGRpbmdcblx0ICogIC0gbWFyZ2luICAtPiAtLXdwYmMtYmZiLWNvbC1tYXJnaW5cblx0ICogIC0gcGFkZGluZ190b3AvcmlnaHQvYm90dG9tL2xlZnQgLT4gLS13cGJjLWJmYi1jb2wtcGFkZGluZy0qXG5cdCAqICAtIG1hcmdpbl90b3AvcmlnaHQvYm90dG9tL2xlZnQgIC0+IC0td3BiYy1iZmItY29sLW1hcmdpbi0qXG5cdCAqICAtIG1heF93aWR0aCAgLT4gLS13cGJjLWJmYi1jb2wtbWF4LXdpZHRoXG5cdCAqICAtIG1heF9oZWlnaHQgLT4gLS13cGJjLWJmYi1jb2wtbWF4LWhlaWdodFxuXHQgKiAgLSBvdmVyZmxvdyAgIC0+IC0td3BiYy1iZmItY29sLW92ZXJmbG93XG5cdCAqICAtIG92ZXJmbG93X3ggLT4gLS13cGJjLWJmYi1jb2wtb3ZlcmZsb3cteFxuXHQgKiAgLSBvdmVyZmxvd195IC0+IC0td3BiYy1iZmItY29sLW92ZXJmbG93LXlcblx0ICogIC0gYWMgICAtPiAtLXdwYmMtYmZiLWNvbC1hY1xuXHQgKiAgLSBhc2VsZi0+IC0td3BiYy1iZmItY29sLWFzZWxmXHJcblx0ICpcclxuXHQgKiBVbmtub3duIGtleXMgYXJlIGV4cG9ydGVkIGFzIGAtLXdwYmMtYmZiLWNvbC0ke2tleX1gLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtPYmplY3R8bnVsbHx1bmRlZmluZWR9IG9ialxyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IGUuZy4gXCItLXdwYmMtYmZiLWNvbC1kaXI6IHJvdzsgLS13cGJjLWJmYi1jb2wtd3JhcDogd3JhcDtcIlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGJ1aWxkX2NvbF9jc3NfdmFycyhvYmopIHtcclxuXHRcdGlmICggIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyApIHJldHVybiAnJztcclxuXHJcblx0XHR2YXIgbWFwID0ge1xyXG5cdFx0XHRkaXIgIDogJy0td3BiYy1iZmItY29sLWRpcicsXHJcblx0XHRcdHdyYXAgOiAnLS13cGJjLWJmYi1jb2wtd3JhcCcsXHJcblx0XHRcdGpjICAgOiAnLS13cGJjLWJmYi1jb2wtamMnLFxyXG5cdFx0XHRhaSAgIDogJy0td3BiYy1iZmItY29sLWFpJyxcclxuXHRcdFx0Z2FwICA6ICctLXdwYmMtYmZiLWNvbC1nYXAnLFxuXHRcdFx0cGFkZGluZzogJy0td3BiYy1iZmItY29sLXBhZGRpbmcnLFxuXHRcdFx0bWFyZ2luIDogJy0td3BiYy1iZmItY29sLW1hcmdpbicsXG5cdFx0XHRwYWRkaW5nX3RvcCAgIDogJy0td3BiYy1iZmItY29sLXBhZGRpbmctdG9wJyxcblx0XHRcdHBhZGRpbmdfcmlnaHQgOiAnLS13cGJjLWJmYi1jb2wtcGFkZGluZy1yaWdodCcsXG5cdFx0XHRwYWRkaW5nX2JvdHRvbTogJy0td3BiYy1iZmItY29sLXBhZGRpbmctYm90dG9tJyxcblx0XHRcdHBhZGRpbmdfbGVmdCAgOiAnLS13cGJjLWJmYi1jb2wtcGFkZGluZy1sZWZ0Jyxcblx0XHRcdG1hcmdpbl90b3AgICAgOiAnLS13cGJjLWJmYi1jb2wtbWFyZ2luLXRvcCcsXG5cdFx0XHRtYXJnaW5fcmlnaHQgIDogJy0td3BiYy1iZmItY29sLW1hcmdpbi1yaWdodCcsXG5cdFx0XHRtYXJnaW5fYm90dG9tIDogJy0td3BiYy1iZmItY29sLW1hcmdpbi1ib3R0b20nLFxuXHRcdFx0bWFyZ2luX2xlZnQgICA6ICctLXdwYmMtYmZiLWNvbC1tYXJnaW4tbGVmdCcsXG5cdFx0XHRtYXhfd2lkdGggICAgIDogJy0td3BiYy1iZmItY29sLW1heC13aWR0aCcsXG5cdFx0XHRtYXhfaGVpZ2h0ICAgIDogJy0td3BiYy1iZmItY29sLW1heC1oZWlnaHQnLFxuXHRcdFx0b3ZlcmZsb3cgICAgICA6ICctLXdwYmMtYmZiLWNvbC1vdmVyZmxvdycsXG5cdFx0XHRvdmVyZmxvd194ICAgIDogJy0td3BiYy1iZmItY29sLW92ZXJmbG93LXgnLFxuXHRcdFx0b3ZlcmZsb3dfeSAgICA6ICctLXdwYmMtYmZiLWNvbC1vdmVyZmxvdy15Jyxcblx0XHRcdGFjICAgOiAnLS13cGJjLWJmYi1jb2wtYWMnLFxuXHRcdFx0YXNlbGY6ICctLXdwYmMtYmZiLWNvbC1hc2VsZidcclxuXHRcdH07XHJcblxyXG5cdFx0dmFyIHBhcnRzID0gW107XHJcblxyXG5cdFx0Zm9yICggdmFyIGsgaW4gb2JqICkge1xuXHRcdFx0aWYgKCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBvYmosIGsgKSApIGNvbnRpbnVlO1xuXHRcdFx0Ly8gSWdub3JlIHRoZSByZW1vdmVkIGV4cGVyaW1lbnRhbCBjaGlsZC1mbGV4IHNldHRpbmcgaW4gcHJldmlvdXNseSBzYXZlZCBCdWlsZGVyIEpTT04uXG5cdFx0XHRpZiAoICdpdGVtX2ZsZXgnID09PSBrICkgY29udGludWU7XG5cdFx0XHR2YXIgdiA9IG9ialtrXTtcblx0XHRcdGlmICggdiA9PSBudWxsIHx8IHYgPT09ICcnICkgY29udGludWU7XG5cdFx0XHRpZiAoIFsgJ3BhZGRpbmdfdG9wJywgJ3BhZGRpbmdfcmlnaHQnLCAncGFkZGluZ19ib3R0b20nLCAncGFkZGluZ19sZWZ0JywgJ21hcmdpbl90b3AnLCAnbWFyZ2luX3JpZ2h0JywgJ21hcmdpbl9ib3R0b20nLCAnbWFyZ2luX2xlZnQnIF0uaW5kZXhPZiggayApICE9PSAtMSApIHtcblx0XHRcdFx0diA9IG5vcm1hbGl6ZV9jb2x1bW5fbGVuZ3RoKCB2ICk7XG5cdFx0XHR9IGVsc2UgaWYgKCAnbWF4X3dpZHRoJyA9PT0gayB8fCAnbWF4X2hlaWdodCcgPT09IGsgKSB7XG5cdFx0XHRcdHYgPSBub3JtYWxpemVfY29sdW1uX21heGltdW0oIHYgKTtcblx0XHRcdH0gZWxzZSBpZiAoIFsgJ292ZXJmbG93JywgJ292ZXJmbG93X3gnLCAnb3ZlcmZsb3dfeScgXS5pbmRleE9mKCBrICkgIT09IC0xICkge1xuXHRcdFx0XHR2ID0gbm9ybWFsaXplX2NvbHVtbl9vdmVyZmxvdyggdiApO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdmFyX25hbWUgPSBtYXBba10gfHwgKCctLXdwYmMtYmZiLWNvbC0nICsgU3RyaW5nKCBrICkucmVwbGFjZSggL1teYS16MC05Xy1dL2dpLCAnJyApLnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0cGFydHMucHVzaCggdmFyX25hbWUgKyAnOiAnICsgU3RyaW5nKCB2ICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBbHdheXMgaW5jbHVkZSBleHBsaWNpdCBtaW4gZ3VhcmQgKHJlcXVlc3RlZCk6IC0td3BiYy1jb2wtbWluOiAwcHg7XHJcblx0XHRwYXJ0cy5wdXNoKCAnLS13cGJjLWNvbC1taW46IDBweCcgKTtcclxuXHJcblx0XHRyZXR1cm4gcGFydHMuam9pbiggJzsnICkgKyAocGFydHMubGVuZ3RoID8gJzsnIDogJycpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzb2x2ZSBudW1lcmljIHBlcmNlbnQgZnJvbSBhIHdpZHRoIHRva2VuIGxpa2UgXCI0OC41JVwiLlxyXG5cdCAqIEZhbGxzIGJhY2sgdG8gYGZhbGxiYWNrX3BlcmNlbnRgIGlmIG5vdCBpbiBwZXJjZW50IGZvcm1hdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnx1bmRlZmluZWR8bnVsbH0gd2lkdGhfdG9rZW5cclxuXHQgKiBAcGFyYW0ge251bWJlcn0gZmFsbGJhY2tfcGVyY2VudFxyXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9XHJcblx0ICovXHJcblx0ZnVuY3Rpb24gcmVzb2x2ZV9mbGV4X2Jhc2lzX3BlcmNlbnQod2lkdGhfdG9rZW4sIGZhbGxiYWNrX3BlcmNlbnQpIHtcclxuXHRcdGlmICggdHlwZW9mIHdpZHRoX3Rva2VuID09PSAnc3RyaW5nJyApIHtcclxuXHRcdFx0dmFyIHMgPSB3aWR0aF90b2tlbi50cmltKCk7XHJcblx0XHRcdGlmICggcy5lbmRzV2l0aCggJyUnICkgKSB7XHJcblx0XHRcdFx0dmFyIHAgPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdFx0aWYgKCBpc0Zpbml0ZSggcCApICkgcmV0dXJuIHA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICggdHlwZW9mIHdpZHRoX3Rva2VuID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSggd2lkdGhfdG9rZW4gKSApIHtcclxuXHRcdFx0cmV0dXJuIHdpZHRoX3Rva2VuO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbGxiYWNrX3BlcmNlbnQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb21wdXRlIGVmZmVjdGl2ZSBmbGV4LWJhc2lzIHZhbHVlcyB0aGF0IHJlc3BlY3QgaW50ZXItY29sdW1uIGdhcFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGNvbHVtbnNcclxuXHQgKiBAcGFyYW0gZ2FwX3BlcmNlbnRcclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBjb21wdXRlX2VmZmVjdGl2ZV9iYXNlcyhjb2x1bW5zLCBnYXBfcGVyY2VudCA9IDMpIHtcclxuXHJcblx0XHRjb25zdCBuID0gY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA/IGNvbHVtbnMubGVuZ3RoIDogMTtcclxuXHJcblx0XHRjb25zdCByYXcgPSBjb2x1bW5zLm1hcCggKGNvbCkgPT4ge1xyXG5cdFx0XHRjb25zdCB3ID0gY29sICYmIGNvbC53aWR0aCAhPSBudWxsID8gU3RyaW5nKCBjb2wud2lkdGggKS50cmltKCkgOiAnJztcclxuXHRcdFx0Y29uc3QgcCA9IHcuZW5kc1dpdGgoICclJyApID8gcGFyc2VGbG9hdCggdyApIDogdyA/IHBhcnNlRmxvYXQoIHcgKSA6IE5hTjtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggcCApID8gcCA6IDEwMCAvIG47XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0Y29uc3Qgc3VtX3JhdyAgICAgPSByYXcucmVkdWNlKCAoYSwgYikgPT4gYSArIGIsIDAgKSB8fCAxMDA7XHJcblx0XHRjb25zdCBncCAgICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0Y29uc3QgdG90YWxfZ2FwcyAgPSBNYXRoLm1heCggMCwgbiAtIDEgKSAqIGdwO1xyXG5cdFx0Y29uc3QgYXZhaWxhYmxlICAgPSBNYXRoLm1heCggMCwgMTAwIC0gdG90YWxfZ2FwcyApO1xyXG5cdFx0Y29uc3Qgc2NhbGVfcmF0aW8gPSBhdmFpbGFibGUgLyBzdW1fcmF3O1xyXG5cclxuXHRcdHJldHVybiByYXcubWFwKCAocCkgPT4gTWF0aC5tYXgoIDAsIHAgKiBzY2FsZV9yYXRpbyApICk7XHJcblx0fVxyXG5cclxuXHQvLyA9PSBhZGFwdGVyOiBidWlsZGVyIChhcnJheS1vZi1wYWdlcykgPiBleHBvcnRlciBzaGFwZSB7IHBhZ2VzOiBbIHsgaXRlbXM6WyB7a2luZCxkYXRhfSBdIH0gXSB9ID09PT09PT09PT09PT09PT09PVxyXG5cdGZ1bmN0aW9uIGFkYXB0X2J1aWxkZXJfc3RydWN0dXJlX3RvX2V4cG9ydGVyKHN0cnVjdHVyZSkge1xyXG5cclxuLy9cdFx0aWYgKCAhQXJyYXkuaXNBcnJheSggc3RydWN0dXJlICkgKSByZXR1cm4geyBwYWdlczogW10gfTtcclxuXHJcblx0XHQvLyBFbnN1cmUgYXQgbGVhc3Qgb25lIHBhZ2UgZXhpc3RzLCBldmVuIHdoZW4gQnVpbGRlciBzdHJ1Y3R1cmUgaXMgZW1wdHkgYFtdYC5cclxuXHRcdC8vIFRoaXMga2VlcHMgZXhwb3J0ZWQgQWR2YW5jZWQgRm9ybSB2YWxpZCAod2l6YXJkIHN0ZXAgIzEgZXhpc3RzKS5cclxuXHRcdGlmICggISBBcnJheS5pc0FycmF5KCBzdHJ1Y3R1cmUgKSB8fCBzdHJ1Y3R1cmUubGVuZ3RoID09PSAwICkge1xyXG5cdFx0XHRyZXR1cm4geyBwYWdlczogWyB7IGl0ZW1zOiBbXSB9IF0gfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBub3JtYWxpemVfb3B0aW9ucyA9IChvcHRzKSA9PiB7XHJcblx0XHRcdGlmICggIUFycmF5LmlzQXJyYXkoIG9wdHMgKSApIHJldHVybiBbXTtcclxuXHRcdFx0cmV0dXJuIG9wdHMubWFwKCAobykgPT4ge1xyXG5cdFx0XHRcdGlmICggdHlwZW9mIG8gPT09ICdzdHJpbmcnICkgcmV0dXJuIHsgbGFiZWw6IG8sIHZhbHVlOiBvLCBzZWxlY3RlZDogZmFsc2UgfTtcclxuXHRcdFx0XHRpZiAoIG8gJiYgdHlwZW9mIG8gPT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0bGFiZWwgICA6IFN0cmluZyggby5sYWJlbCA/PyBvLnZhbHVlID8/ICcnICksXHJcblx0XHRcdFx0XHRcdHZhbHVlICAgOiBTdHJpbmcoIG8udmFsdWUgPz8gby5sYWJlbCA/PyAnJyApLFxyXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogISFvLnNlbGVjdGVkXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4geyBsYWJlbDogU3RyaW5nKCBvICksIHZhbHVlOiBTdHJpbmcoIG8gKSwgc2VsZWN0ZWQ6IGZhbHNlIH07XHJcblx0XHRcdH0gKTtcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gQWRhcHRlciDigJMgYXR0YWNoIHBhcnNlZCBwZXItY29sdW1uIGBjb2xfc3R5bGVzYCBmcm9tIFNlY3Rpb24gaW50byBlYWNoIGNvbHVtblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Y29uc3Qgd2Fsa19zZWN0aW9uID0gKHNlYykgPT4ge1xyXG5cdFx0XHRjb25zdCBzZWN0aW9uX2NvbF9zdHlsZXMgPSBwYXJzZV9jb2xfc3R5bGVzX2pzb24oIHNlYyAmJiBzZWMuY29sX3N0eWxlcyApO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQgICAgICAgOiBzZWM/LmlkLFxuXHRcdFx0XHRodG1sX2lkICA6IHNlYz8uaHRtbF9pZCB8fCAnJyxcblx0XHRcdFx0Y3NzY2xhc3MgOiBzZWM/LmNzc2NsYXNzIHx8ICcnLFxuXHRcdFx0XHRjb2x1bW5zICA6IChzZWM/LmNvbHVtbnMgfHwgW10pLm1hcCggKGNvbCwgY29sX2luZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KCBjb2w/Lml0ZW1zIClcclxuXHRcdFx0XHRcdFx0PyBjb2wuaXRlbXNcclxuXHRcdFx0XHRcdFx0OiBbXHJcblx0XHRcdFx0XHRcdFx0Li4uKGNvbD8uZmllbGRzIHx8IFtdKS5tYXAoIChmKSA9PiAoeyB0eXBlOiAnZmllbGQnLCBkYXRhOiBmIH0pICksXHJcblx0XHRcdFx0XHRcdFx0Li4uKGNvbD8uc2VjdGlvbnMgfHwgW10pLm1hcCggKHMpID0+ICh7IHR5cGU6ICdzZWN0aW9uJywgZGF0YTogcyB9KSApXHJcblx0XHRcdFx0XHRcdF07XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gaXRlbXNcclxuXHRcdFx0XHRcdFx0LmZpbHRlciggKGl0KSA9PiBpdCAmJiBpdC50eXBlID09PSAnZmllbGQnIClcclxuXHRcdFx0XHRcdFx0Lm1hcCggKGl0KSA9PiAoeyAuLi5pdC5kYXRhLCBvcHRpb25zOiBub3JtYWxpemVfb3B0aW9ucyggaXQuZGF0YT8ub3B0aW9ucyApIH0pICk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSBpdGVtc1xyXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCAoaXQpID0+IGl0ICYmIGl0LnR5cGUgPT09ICdzZWN0aW9uJyApXHJcblx0XHRcdFx0XHRcdC5tYXAoIChpdCkgPT4gd2Fsa19zZWN0aW9uKCBpdC5kYXRhICkgKTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHR3aWR0aCAgICAgIDogY29sPy53aWR0aCB8fCAnMTAwJScsXHJcblx0XHRcdFx0XHRcdHN0eWxlICAgICAgOiBjb2w/LnN0eWxlIHx8IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbF9zdHlsZXMgOiBzZWN0aW9uX2NvbF9zdHlsZXNbIGNvbF9pbmRleCBdIHx8IG51bGwsICAgLy8gPC0gYXR0YWNoIHN0eWxlIG9iamVjdCBwZXIgY29sdW1uXHJcblx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0c2VjdGlvbnNcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSApXHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cclxuXHJcblx0XHRjb25zdCBwYWdlcyA9IHN0cnVjdHVyZS5tYXAoIChwYWdlKSA9PiB7XHJcblx0XHRcdGNvbnN0IGl0ZW1zID0gW107XHJcblx0XHRcdChwYWdlPy5jb250ZW50IHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdGlmICggIWl0ZW0gKSByZXR1cm47XHJcblx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdzZWN0aW9uJyAmJiBpdGVtLmRhdGEgKSB7XHJcblx0XHRcdFx0XHRpdGVtcy5wdXNoKCB7IGtpbmQ6ICdzZWN0aW9uJywgZGF0YTogd2Fsa19zZWN0aW9uKCBpdGVtLmRhdGEgKSB9ICk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICggaXRlbS50eXBlID09PSAnZmllbGQnICYmIGl0ZW0uZGF0YSApIHtcclxuXHRcdFx0XHRcdGl0ZW1zLnB1c2goIHtcclxuXHRcdFx0XHRcdFx0a2luZDogJ2ZpZWxkJyxcclxuXHRcdFx0XHRcdFx0ZGF0YTogeyAuLi5pdGVtLmRhdGEsIG9wdGlvbnM6IG5vcm1hbGl6ZV9vcHRpb25zKCBpdGVtLmRhdGEub3B0aW9ucyApIH1cclxuXHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0cmV0dXJuIHsgaXRlbXMgfTtcclxuXHRcdH0gKTtcclxuXHJcblx0XHRyZXR1cm4geyBwYWdlcyB9O1xyXG5cdH1cclxuXHJcblxyXG5cdC8vID09IEJvb2tpbmcgRnJvbSBFeHBvcnRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0Y2xhc3MgV1BCQ19CRkJfRXhwb3J0ZXIge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogTXV0YWJsZSBza2lwLWxpc3QgZm9yIGF0dHJpYnV0ZSBuYW1lcyAobG93ZXJjYXNlKS5cclxuXHRcdCAqIFlvdSBjYW4gb3ZlcnJpZGUgaXQgdmlhIHNldF9za2lwX2F0dHJzKCkgb3IgYWRkIHdpdGggYWRkX3NraXBfYXR0cnMoKS5cclxuXHRcdCAqIEB0eXBlIHtTZXQ8c3RyaW5nPn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNraXBfYXR0cnMgPSBuZXcgU2V0KCk7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXBsYWNlIHRoZSBlbnRpcmUgc2tpcCBsaXN0LlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzZXRfc2tpcF9hdHRycyggYXJyICkge1xyXG5cdFx0XHR0aGlzLnNraXBfYXR0cnMgPSBuZXcgU2V0KFxyXG5cdFx0XHRcdChBcnJheS5pc0FycmF5KCBhcnIgKSA/IGFyciA6IFtdKS5tYXAoIChuKSA9PiBTdHJpbmcoIG4gKS50b0xvd2VyQ2FzZSgpLnRyaW0oKSApLmZpbHRlciggQm9vbGVhbiApXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBZGQgb25lIG9yIG1hbnkgYXR0cmlidXRlcyB0byB0aGUgc2tpcCBsaXN0LlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IG5hbWVzXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBhZGRfc2tpcF9hdHRycyggbmFtZXMgKSB7XHJcblx0XHRcdCggQXJyYXkuaXNBcnJheSggbmFtZXMgKSA/IG5hbWVzIDogWyBuYW1lcyBdIClcclxuXHRcdFx0XHQubWFwKCAobikgPT4gU3RyaW5nKCBuICkudG9Mb3dlckNhc2UoKS50cmltKCkgKVxyXG5cdFx0XHRcdC5maWx0ZXIoIEJvb2xlYW4gKVxyXG5cdFx0XHRcdC5mb3JFYWNoKCAobikgPT4gdGhpcy5za2lwX2F0dHJzLmFkZCggbiApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZW1vdmUgb25lIGF0dHJpYnV0ZSBmcm9tIHRoZSBza2lwIGxpc3QuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVtb3ZlX3NraXBfYXR0ciggbmFtZSApIHtcclxuXHRcdFx0aWYgKCAhIG5hbWUgKSB7IHJldHVybjsgfVxyXG5cdFx0XHR0aGlzLnNraXBfYXR0cnMuZGVsZXRlKCBTdHJpbmcoIG5hbWUgKS50b0xvd2VyQ2FzZSgpLnRyaW0oKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQXBwbHkgYXR0cmlidXRlIHNraXBwaW5nIHRvIGEgZmluYWwgSFRNTCBzdHJpbmcuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxyXG5cdFx0ICogQHJldHVybiB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FuaXRpemVfZXhwb3J0KCBodG1sICkge1xyXG5cdFx0XHRyZXR1cm4gc3RyaXBfYXR0cmlidXRlc19mcm9tX21hcmt1cCggaHRtbCwgQXJyYXkuZnJvbSggdGhpcy5za2lwX2F0dHJzICkgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFeHBvcnQgYWRhcHRlZCBzdHJ1Y3R1cmUgdG8gYWR2YW5jZWQgZm9ybSB0ZXh0ICh3aXRoIDxyPi88Yz4gbGF5b3V0IGFuZCB3aXphcmQgd3JhcHBlcikuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFkYXB0ZWRcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSAgW29wdGlvbnMubmV3bGluZT1cIlxcblwiXVxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hZGRMYWJlbHM9dHJ1ZV1cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSAgW29wdGlvbnMuZ2FwUGVyY2VudD0zXVxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGV4cG9ydF9mb3JtKGFkYXB0ZWQsIG9wdGlvbnMgPSB7fSkge1xyXG5cdFx0XHQvLyBpbmRlbnQ6IHVzZSByZWFsIFRBQiBieSBkZWZhdWx0IChjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgb3B0aW9ucy5pbmRlbnQpXHJcblx0XHRcdGNvbnN0IGNmZyA9IHsgbmV3bGluZTogJ1xcbicsIGFkZExhYmVsczogdHJ1ZSwgZ2FwUGVyY2VudDogMywgaW5kZW50OiAnXFx0JywgLi4ub3B0aW9ucyB9O1xyXG5cdFx0XHRjb25zdCBJTkQgPSAodHlwZW9mIGNmZy5pbmRlbnQgPT09ICdzdHJpbmcnKSA/IGNmZy5pbmRlbnQgOiAnXFx0JztcclxuXHJcblx0XHRcdGxldCBkZXB0aCAgID0gMDtcclxuXHRcdFx0Y29uc3QgbGluZXMgPSBbXTtcclxuXHRcdFx0Y29uc3QgcHVzaCAgPSAocyA9ICcnKSA9PiBsaW5lcy5wdXNoKCBJTkQucmVwZWF0KCBkZXB0aCApICsgU3RyaW5nKCBzICkgKTtcclxuXHRcdFx0Y29uc3Qgb3BlbiAgPSAocyA9ICcnKSA9PiB7XHJcblx0XHRcdFx0cHVzaCggcyApO1xyXG5cdFx0XHRcdGRlcHRoKys7XHJcblx0XHRcdH07XHJcblx0XHRcdGNvbnN0IGNsb3NlID0gKHMgPSAnJykgPT4ge1xyXG5cdFx0XHRcdGRlcHRoID0gTWF0aC5tYXgoIDAsIGRlcHRoIC0gMSApO1xyXG5cdFx0XHRcdHB1c2goIHMgKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Y29uc3QgYmxhbmsgPSAoKSA9PiB7XHJcblx0XHRcdFx0bGluZXMucHVzaCggJycgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlmICggIWFkYXB0ZWQgfHwgIUFycmF5LmlzQXJyYXkoIGFkYXB0ZWQucGFnZXMgKSApIHJldHVybiAnJztcclxuXHJcblx0XHRcdC8vIEFsd2F5cyBleHBvcnQgYXQgbGVhc3Qgb25lIHdpemFyZCBzdGVwIHRvIGtlZXAgQWR2YW5jZWQgRm9ybSBzdHJ1Y3R1cmUgdmFsaWQuXHJcblx0XHRcdGNvbnN0IHBhZ2VzID0gYWRhcHRlZC5wYWdlcy5sZW5ndGggPyBhZGFwdGVkLnBhZ2VzIDogWyB7IGl0ZW1zOiBbXSB9IF07XHJcblxyXG5cdFx0XHRjb25zdCBjdHggPSB7IHVzZWRJZHM6IG5ldyBTZXQoKSB9O1xyXG5cclxuXHRcdFx0b3BlbiggYDxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9mb3JtIHdwYmNfd2l6YXJkX19ib3JkZXJfY29udGFpbmVyXCI+YCApO1xyXG5cclxuXHRcdFx0Ly8gb25lLXBlci1mb3JtIGd1YXJkcyAoY2FsZW5kYXIgaXMgbm90IGdhdGVkIGhlcmUpXHJcblx0XHRcdGNvbnN0IG9uY2UgPSB7IGNhcHRjaGE6IDAsIGNvdW50cnk6IDAsIGNvdXBvbjogMCwgY29zdF9jb3JyZWN0aW9uczogMCwgc3VibWl0OiAwIH07XHJcblxyXG5cdFx0XHRwYWdlcy5mb3JFYWNoKCAocGFnZSwgcGFnZV9pbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGlzX2ZpcnN0ID0gcGFnZV9pbmRleCA9PT0gMDtcclxuXHRcdFx0XHRjb25zdCBzdGVwX251bSA9IHBhZ2VfaW5kZXggKyAxO1xyXG5cclxuXHRcdFx0XHRjb25zdCBoaWRkZW5fY2xhc3MgPSBpc19maXJzdCA/ICcnIDogJyB3cGJjX3dpemFyZF9zdGVwX2hpZGRlbic7XHJcblx0XHRcdFx0Y29uc3QgaGlkZGVuX3N0eWxlID0gaXNfZmlyc3QgPyAnJyA6ICcgc3R5bGU9XCJkaXNwbGF5Om5vbmU7Y2xlYXI6Ym90aDtcIic7XHJcblx0XHRcdFx0b3BlbiggYDxkaXYgY2xhc3M9XCJ3cGJjX3dpemFyZF9zdGVwIHdwYmNfX2Zvcm1fX2RpdiB3cGJjX3dpemFyZF9zdGVwJHtzdGVwX251bX0ke2hpZGRlbl9jbGFzc31cIiR7aGlkZGVuX3N0eWxlfT5gICk7XHJcblxyXG5cdFx0XHRcdChwYWdlLml0ZW1zIHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLmtpbmQgPT09ICdzZWN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0V1BCQ19CRkJfRXhwb3J0ZXIucmVuZGVyX3NlY3Rpb24oIGl0ZW0uZGF0YSwgeyBvcGVuLCBjbG9zZSwgcHVzaCwgYmxhbmsgfSwgY2ZnLCBvbmNlLCBjdHggKTtcclxuXHRcdFx0XHRcdFx0Ly8gYmxhbmsoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIGl0ZW0ua2luZCA9PT0gJ2ZpZWxkJyApIHtcclxuXHRcdFx0XHRcdFx0b3BlbiggYDxyPmAgKTtcclxuXHRcdFx0XHRcdFx0b3BlbiggYDxjPmAgKTtcclxuXHRcdFx0XHRcdFx0V1BCQ19CRkJfRXhwb3J0ZXIucmVuZGVyX2ZpZWxkX25vZGUoIGl0ZW0uZGF0YSwgeyBvcGVuLCBjbG9zZSwgcHVzaCwgYmxhbmsgfSwgY2ZnLCBvbmNlLCBjdHggKTtcclxuXHRcdFx0XHRcdFx0Y2xvc2UoIGA8L2M+YCApO1xyXG5cdFx0XHRcdFx0XHRjbG9zZSggYDwvcj5gICk7XHJcblx0XHRcdFx0XHRcdC8vIGJsYW5rKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cclxuXHRcdFx0XHRjbG9zZSggYDwvZGl2PmAgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Y2xvc2UoIGA8L2Rpdj5gICk7XHJcblx0XHRcdHJldHVybiBXUEJDX0JGQl9FeHBvcnRlci5zYW5pdGl6ZV9leHBvcnQoIGxpbmVzLmpvaW4oIGNmZy5uZXdsaW5lICkgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIaWdoLWxldmVsIGhlbHBlcjogZXhwb3J0IGZ1bGwgcGFja2FnZSBmcm9tIHJhdyBCdWlsZGVyIHN0cnVjdHVyZS5cclxuXHRcdCAqXHJcblx0XHQgKiAtIEFkYXB0cyByYXcgQnVpbGRlciBzdHJ1Y3R1cmUgKHBhZ2VzL3NlY3Rpb25zL2NvbHVtbnMvaXRlbXMpIGZvciBleHBvcnRlcnMuXHJcblx0XHQgKiAtIEJ1aWxkczpcclxuXHRcdCAqICAgICAg4oCiIGFkdmFuY2VkX2Zvcm0gIC0+IOKAnEFkdmFuY2VkIEZvcm0gKGV4cG9ydCnigJ0gdGV4dC5cclxuXHRcdCAqICAgICAg4oCiIGZpZWxkc19kYXRhICAgIC0+IOKAnENvbnRlbnQgb2YgYm9va2luZyBmaWVsZHMgZGF0YSAoZXhwb3J0KeKAnSB0ZXh0LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9ICBzdHJ1Y3R1cmUgIFJhdyBCdWlsZGVyIHN0cnVjdHVyZSBmcm9tIHdwYmNfYmZiLmdldF9zdHJ1Y3R1cmUoKS5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nYXBQZXJjZW50PTNdICBDb2x1bW4gZ2FwIHBlcmNlbnQgZm9yIGxheW91dCBtYXRoLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHt7XHJcblx0XHQgKiAgIGFkdmFuY2VkX2Zvcm06IHN0cmluZyxcclxuXHRcdCAqICAgZmllbGRzX2RhdGE6IHN0cmluZyxcclxuXHRcdCAqICAgc3RydWN0dXJlOiBBcnJheSxcclxuXHRcdCAqICAgYWRhcHRlZDogT2JqZWN0XHJcblx0XHQgKiB9fVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXhwb3J0X2FsbCggc3RydWN0dXJlLCBvcHRpb25zID0ge30gKSB7XHJcblxyXG5cdFx0XHQvLyAxKSBBZGFwdCBCdWlsZGVyIEpTT04gdG8gZXhwb3J0ZXIgc2hhcGUgKHBhZ2VzW10gLT4gaXRlbXNbXSkuXHJcblx0XHRcdGNvbnN0IGFkYXB0ZWQgPSBhZGFwdF9idWlsZGVyX3N0cnVjdHVyZV90b19leHBvcnRlciggc3RydWN0dXJlIHx8IFtdICk7XHJcblxyXG5cdFx0XHQvLyAyKSBBZHZhbmNlZCBGb3JtIHRleHQgKHNhbWUgbG9naWMgYXMgZGVidWcgcGFuZWwpLlxyXG5cdFx0XHRjb25zdCBnYXBfcGVyY2VudCAgID0gKCBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmdhcFBlcmNlbnQgPT09ICdudW1iZXInICkgPyBvcHRpb25zLmdhcFBlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCBhZHZhbmNlZF9mb3JtID0gV1BCQ19CRkJfRXhwb3J0ZXIuZXhwb3J0X2Zvcm0oXHJcblx0XHRcdFx0YWRhcHRlZCxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRhZGRMYWJlbHMgOiB0cnVlLFxyXG5cdFx0XHRcdFx0Z2FwUGVyY2VudDogZ2FwX3BlcmNlbnRcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHQvLyAzKSBDb250ZW50IG9mIGJvb2tpbmcgZmllbGRzIGRhdGEgKGlmIGNvbnRlbnQgZXhwb3J0ZXIgaXMgYXZhaWxhYmxlKS5cclxuXHRcdFx0bGV0IGZpZWxkc19kYXRhID0gJyc7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR3aW5kb3cuV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyICYmXHJcblx0XHRcdFx0dHlwZW9mIHdpbmRvdy5XUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIuZXhwb3J0X2NvbnRlbnQgPT09ICdmdW5jdGlvbidcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZmllbGRzX2RhdGEgPSB3aW5kb3cuV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyLmV4cG9ydF9jb250ZW50KFxyXG5cdFx0XHRcdFx0YWRhcHRlZCxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YWRkTGFiZWxzOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRzZXAgICAgICA6ICc6ICdcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGFkdmFuY2VkX2Zvcm06IGFkdmFuY2VkX2Zvcm0gfHwgJycsXHJcblx0XHRcdFx0ZmllbGRzX2RhdGEgIDogZmllbGRzX2RhdGEgfHwgJycsXHJcblx0XHRcdFx0c3RydWN0dXJlICAgIDogc3RydWN0dXJlIHx8IFtdLFxyXG5cdFx0XHRcdGFkYXB0ZWQgICAgICA6IGFkYXB0ZWRcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyA9PSBFeHBvcnRlciDigJMgcmVuZGVyX3NlY3Rpb24oKSBub3cgaW5qZWN0cyBwZXItY29sdW1uIENTUyB2YXJzIGZyb20gYGNvbF9zdHlsZXNgXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHRzdGF0aWMgcmVuZGVyX3NlY3Rpb24oc2VjdGlvbiwgaW8sIGNmZywgb25jZSwgY3R4KSB7XHJcblxyXG5cdFx0XHRvbmNlID0gb25jZSB8fCB7IGNhcHRjaGE6IDAsIGNvdW50cnk6IDAsIGNvdXBvbjogMCwgY29zdF9jb3JyZWN0aW9uczogMCwgc3VibWl0OiAwIH07XHJcblx0XHRcdGN0eCAgPSBjdHggfHwgeyB1c2VkSWRzOiBuZXcgU2V0KCkgfTtcclxuXHJcblx0XHRcdGNvbnN0IHsgb3BlbiwgY2xvc2UgfSA9IGlvO1xyXG5cclxuXHRcdFx0Y29uc3QgY29scyA9IEFycmF5LmlzQXJyYXkoIHNlY3Rpb24uY29sdW1ucyApICYmIHNlY3Rpb24uY29sdW1ucy5sZW5ndGhcclxuXHRcdFx0XHQ/IHNlY3Rpb24uY29sdW1uc1xyXG5cdFx0XHRcdDogWyB7IHdpZHRoOiAnMTAwJScsIGZpZWxkczogW10sIHNlY3Rpb25zOiBbXSB9IF07XHJcblxyXG5cdFx0XHQvLyBSb3cgaXMgYWN0aXZlIGlmIEFOWSBjb2x1bW4gY2FycmllcyBzdHlsZXMuXHJcblx0XHRcdHZhciByb3dfaXNfYWN0aXZlID0gY29scy5zb21lKCBmdW5jdGlvbiAoY29sKSB7IHJldHVybiBoYXNfbm9uX2RlZmF1bHRfY29sX3N0eWxlcyggY29sICYmIGNvbC5jb2xfc3R5bGVzICk7IH0gKTtcblx0XHRcdHZhciByb3dfYXR0cl9hY3RpdmUgPSByb3dfaXNfYWN0aXZlID8gJyBkYXRhLWNvbHN0eWxlcy1hY3RpdmU9XCIxXCInIDogJyc7XG5cdFx0XHR2YXIgcm93X2N1c3RvbV9hdHRycyA9IFdQQkNfQkZCX0V4cG9ydGVyLml0ZW1fd3JhcHBlcl9hdHRycyggc2VjdGlvbiwgY3R4ICk7XG5cblx0XHRcdG9wZW4oIGA8ciR7cm93X2N1c3RvbV9hdHRyc30ke3Jvd19hdHRyX2FjdGl2ZX0+YCApO1xuXHJcblx0XHRcdGNvbnN0IGJhc2VzICAgID0gY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXMoIGNvbHMsIGNmZy5nYXBQZXJjZW50ICk7XHJcblx0XHRcdGNvbnN0IGVzY19hdHRyID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NhcGVfaHRtbDtcclxuXHJcblx0XHRcdGNvbHMuZm9yRWFjaCggKGNvbCwgaWR4KSA9PiB7XHJcblx0XHRcdFx0Ly8gKDEpIFJlc29sdmUgZmxleC1iYXNpcy5cclxuXHRcdFx0XHR2YXIgZWZmX2Jhc2lzID0gcmVzb2x2ZV9mbGV4X2Jhc2lzX3BlcmNlbnQoIGNvbCAmJiBjb2wud2lkdGgsIE51bWJlci5pc0Zpbml0ZSggYmFzZXNbaWR4XSApID8gK2Jhc2VzW2lkeF0gOiAxMDAgKTtcclxuXHJcblx0XHRcdFx0Ly8gKDIpIEJ1aWxkIGlubGluZSBzdHlsZS5cclxuXHRcdFx0XHR2YXIgc3R5bGVfcGFydHMgPSBbXTtcclxuXHJcblx0XHRcdFx0aWYgKCBjb2wgJiYgdHlwZW9mIGNvbC5zdHlsZSA9PT0gJ3N0cmluZycgJiYgY29sLnN0eWxlLnRyaW0oKSApIHtcclxuXHRcdFx0XHRcdHN0eWxlX3BhcnRzLnB1c2goIGNvbC5zdHlsZS50cmltKCkucmVwbGFjZSggLzsrXFxzKiQvLCAnJyApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHN0eWxlX3BhcnRzLnB1c2goICdmbGV4LWJhc2lzOiAnICsgKCBOdW1iZXIuaXNGaW5pdGUoIGVmZl9iYXNpcyApID8gZWZmX2Jhc2lzLnRvU3RyaW5nKCkgOiAnMTAwJyApICsgJyUnICk7XHJcblxyXG5cdFx0XHRcdHZhciBjc3NfdmFyc19zdHIgPSBidWlsZF9jb2xfY3NzX3ZhcnMoIGNvbCAmJiBjb2wuY29sX3N0eWxlcyApO1xyXG5cdFx0XHRcdGlmICggY3NzX3ZhcnNfc3RyICkge1xyXG5cdFx0XHRcdFx0c3R5bGVfcGFydHMucHVzaCggY3NzX3ZhcnNfc3RyLnJlcGxhY2UoIC9eO3w7JC9nLCAnJyApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR2YXIgc3R5bGVfYXR0ciA9IGAgc3R5bGU9XCIke2VzY19hdHRyKCBzdHlsZV9wYXJ0cy5qb2luKCAnOyAnICkgKX1cImA7XHJcblxyXG5cdFx0XHRcdC8vICgzKSBDb2x1bW4tbGV2ZWwgYWN0aXZhdGlvbiAobW9yZSBwcmVjaXNlIHNjb3BpbmcpXHJcblx0XHRcdFx0dmFyIGNvbF9pc19hY3RpdmUgICA9IGhhc19ub25fZGVmYXVsdF9jb2xfc3R5bGVzKCBjb2wgJiYgY29sLmNvbF9zdHlsZXMgKTtcclxuXHRcdFx0XHR2YXIgY29sX2F0dHJfYWN0aXZlID0gY29sX2lzX2FjdGl2ZSA/ICcgZGF0YS1jb2xzdHlsZXMtYWN0aXZlPVwiMVwiJyA6ICcnO1xyXG5cclxuXHRcdFx0XHRvcGVuKCBgPGMke2NvbF9hdHRyX2FjdGl2ZX0ke3N0eWxlX2F0dHJ9PmAgKTtcclxuXHJcblx0XHRcdFx0Ly8gVXNlIHRoZSBzaGFyZWQgb25jZS9jdHggb2JqZWN0cyBzbyBzaW5nbGUtcGVyLWZvcm0gZ3VhcmRzIHdvcmsgYWNyb3NzIHRoZSB3aG9sZSBmb3JtLlxyXG5cdFx0XHRcdChjb2wuZmllbGRzIHx8IFtdKS5mb3JFYWNoKCAobm9kZSkgPT5cclxuXHRcdFx0XHRcdFdQQkNfQkZCX0V4cG9ydGVyLnJlbmRlcl9maWVsZF9ub2RlKCBub2RlLCBpbywgY2ZnLCBvbmNlLCBjdHggKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdC8vIFJlY3Vyc2Ugd2l0aCB0aGUgc2FtZSBvbmNlL2N0eCBhcyB3ZWxsLlxyXG5cdFx0XHRcdChjb2wuc2VjdGlvbnMgfHwgW10pLmZvckVhY2goIChuZXN0ZWQpID0+XHJcblx0XHRcdFx0XHRXUEJDX0JGQl9FeHBvcnRlci5yZW5kZXJfc2VjdGlvbiggbmVzdGVkLCBpbywgY2ZnLCBvbmNlLCBjdHggKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGNsb3NlKCBgPC9jPmAgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Y2xvc2UoIGA8L3I+YCApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIGEgc2FuaXRpemVkIGN1c3RvbSBDU1MgY2xhc3MgYW5kIEhUTUwgSUQgYXR0cmlidXRlIHN0cmluZyBmb3IgYW4gZXhwb3J0ZWQgd3JhcHBlci5cblx0XHQgKiBVc2VkIGJ5IHNlY3Rpb24gcm93IHdyYXBwZXJzIGFuZCBmaWVsZHMgd2hvc2UgYXR0cmlidXRlcyBiZWxvbmcgb24gdGhlIDxpdGVtPiB3cmFwcGVyLlxuXHRcdCAqIEFsc28gZW5zdXJlcyB1bmlxdWVuZXNzIG9mIHRoZSBodG1sX2lkIGFjcm9zcyB0aGUgZXhwb3J0ICh1c2VzIGN0eC51c2VkSWRzKS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyX2RhdGEgT2JqZWN0IGNvbnRhaW5pbmcgb3B0aW9uYWwgY3NzY2xhc3MgYW5kIGh0bWxfaWQgcHJvcGVydGllcy5cblx0XHQgKiBAcGFyYW0ge3t1c2VkSWRzOlNldDxzdHJpbmc+fX0gY3R4XG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gZS5nLiAnIGNsYXNzPVwieCB5XCIgaWQ9XCJteUlkXCInXG5cdFx0ICovXG5cdFx0c3RhdGljIGl0ZW1fd3JhcHBlcl9hdHRycyh3cmFwcGVyX2RhdGEsIGN0eCkge1xuXHRcdFx0aWYgKCAhIHdyYXBwZXJfZGF0YSApIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZXNjX2h0bWwgID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NhcGVfaHRtbDtcclxuXHRcdFx0Y29uc3QgY2xzX3Nhbml0ID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9jc3NfY2xhc3NsaXN0O1xyXG5cdFx0XHRjb25zdCBzaWQgICAgICAgPSBjb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQ7XHJcblxyXG5cdFx0XHRsZXQgb3V0ID0gJyc7XHJcblxyXG5cdFx0XHRjb25zdCBjbHNfcmF3ID0gU3RyaW5nKCB3cmFwcGVyX2RhdGEuY3NzY2xhc3NfZXh0cmEgfHwgd3JhcHBlcl9kYXRhLmNzc2NsYXNzIHx8IHdyYXBwZXJfZGF0YS5jbGFzcyB8fCAnJyApO1xuXHRcdFx0Y29uc3QgY2xzICAgICA9IGNsc19zYW5pdCggY2xzX3JhdyApO1xuXHRcdFx0bGV0IGh0bWxfaWQgICA9IHdyYXBwZXJfZGF0YS5odG1sX2lkID8gc2lkKCBTdHJpbmcoIHdyYXBwZXJfZGF0YS5odG1sX2lkICkgKSA6ICcnO1xuXHRcdFx0aWYgKCBodG1sX2lkICYmIGN0eD8udXNlZElkcyApIHtcclxuXHRcdFx0XHRsZXQgdW5pcXVlID0gaHRtbF9pZCwgaSA9IDI7XHJcblx0XHRcdFx0d2hpbGUgKCBjdHgudXNlZElkcy5oYXMoIHVuaXF1ZSApICkge1xyXG5cdFx0XHRcdFx0dW5pcXVlID0gYCR7aHRtbF9pZH1fJHtpKyt9YDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y3R4LnVzZWRJZHMuYWRkKCB1bmlxdWUgKTtcclxuXHRcdFx0XHRodG1sX2lkID0gdW5pcXVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggY2xzICkge1xyXG5cdFx0XHRcdG91dCArPSBgIGNsYXNzPVwiJHtlc2NfaHRtbCggY2xzICl9XCJgO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggaHRtbF9pZCApIHtcclxuXHRcdFx0XHRvdXQgKz0gYCBpZD1cIiR7ZXNjX2h0bWwoIGh0bWxfaWQgKX1cImA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBvdXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gRmllbGRzIOKAkyBwbHVnZ2FibGUsIHBhY2stZHJpdmVuIGV4cG9ydFxyXG5cdFx0Ly8gPT0gV3JhcCBldmVyeSBleHBvcnRlZCBmaWVsZCBpbnNpZGUgPGl0ZW0+4oCmPC9pdGVtPiBhbmQgZGVsZWdhdGUgYWN0dWFsIHNob3J0Y29kZSBleHBvcnRcclxuXHRcdC8vID09IHRvIHBlci1wYWNrIGNhbGxiYWNrcyByZWdpc3RlcmVkIHZpYSBXUEJDX0JGQl9FeHBvcnRlci5yZWdpc3Rlcih0eXBlLCBmbikuXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHRzdGF0aWMgcmVuZGVyX2ZpZWxkX25vZGUoZmllbGQsIGlvLCBjZmcsIG9uY2UsIGN0eCkge1xyXG5cclxuXHRcdFx0Y29uc3QgeyBvcGVuLCBjbG9zZSwgcHVzaCB9ID0gaW87XHJcblx0XHRcdGlmICggISBmaWVsZCB8fCAhIGZpZWxkLnR5cGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTaGFyZWQgY29udGV4dCAodXNlZElkcywg4oCcb25jZS1wZXItZm9ybeKAnSBndWFyZHMsIGV0Yy4pLlxyXG5cdFx0XHRvbmNlID0gb25jZSB8fCB7fTtcclxuXHRcdFx0Y3R4ICA9IGN0eCAgfHwgeyB1c2VkSWRzOiBuZXcgU2V0KCkgfTtcclxuXHJcblx0XHRcdGNvbnN0IHR5cGUgPSBTdHJpbmcoIGZpZWxkLnR5cGUgKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdFx0Ly8gT3B0aW9uYWwgd3JhcHBlciBhdHRycyBmb3Igc3BlY2lhbCB0eXBlcyAoY3VycmVudGx5IG9ubHkgdXNlZCBieSBjYXB0Y2hhKS5cclxuXHRcdFx0bGV0IGl0ZW1fYXR0cnMgPSAnJztcclxuXHRcdFx0aWYgKCB0eXBlID09PSAnY2FwdGNoYScgKSB7XHJcblx0XHRcdFx0aXRlbV9hdHRycyA9IFdQQkNfQkZCX0V4cG9ydGVyLml0ZW1fd3JhcHBlcl9hdHRycyggZmllbGQsIGN0eCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRvcGVuKCBgPGl0ZW0ke2l0ZW1fYXR0cnN9PmAgKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Ly8gMSkgTGV0IHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHBhY2sgaGFuZGxlIGV4cG9ydC5cclxuXHRcdFx0XHRsZXQgaGFuZGxlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmICggV1BCQ19CRkJfRXhwb3J0ZXIuaGFzX2V4cG9ydGVyKCB0eXBlICkgKSB7XHJcblx0XHRcdFx0XHRoYW5kbGVkID0gV1BCQ19CRkJfRXhwb3J0ZXIucnVuX3JlZ2lzdGVyZWRfZXhwb3J0ZXIoIGZpZWxkLCBpbywgY2ZnLCBvbmNlLCBjdHggKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIDIpIEZhbGxiYWNrOiBzaG93IGEgY2xlYXIgVE9ETyBjb21tZW50IGlmIG5vIGV4cG9ydGVyIGlzIHJlZ2lzdGVyZWQuXHJcblx0XHRcdFx0aWYgKCAhIGhhbmRsZWQgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBuYW1lID0gV1BCQ19CRkJfRXhwb3J0ZXIuY29tcHV0ZV9uYW1lKCB0eXBlLCBmaWVsZCApO1xyXG5cdFx0XHRcdFx0cHVzaCggYDwhLS0gVE9ETzogbWFwIGZpZWxkIHR5cGUgXCIke3R5cGV9XCIgbmFtZT1cIiR7bmFtZX1cIiBpbiBhIHBhY2sgZXhwb3J0ZXIgLS0+YCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gMykgQXBwZW5kIGhlbHAgdGV4dCBjb25zaXN0ZW50bHkgKHBhY2tzIHNob3VsZG7igJl0IGR1cGxpY2F0ZSB0aGlzKS5cclxuXHRcdFx0XHRpZiAoIGZpZWxkLmhlbHAgKSB7XHJcblx0XHRcdFx0XHRwdXNoKFxyXG5cdFx0XHRcdFx0XHRgPGRpdiBjbGFzcz1cIndwYmNfZmllbGRfZGVzY3JpcHRpb25cIj4ke2NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX2h0bWwoXHJcblx0XHRcdFx0XHRcdFx0U3RyaW5nKCBmaWVsZC5oZWxwIClcclxuXHRcdFx0XHRcdFx0KX08L2Rpdj5gXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBmaW5hbGx5IHtcclxuXHRcdFx0XHQvLyBBbHdheXMgY2xvc2Ugd3JhcHBlci5cclxuXHRcdFx0XHRjbG9zZSggYDwvaXRlbT5gICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyA9PSBIZWxwZXJzID09XHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHRzdGF0aWMgaXNfcmVxdWlyZWQoZmllbGQpIHtcclxuXHRcdFx0Y29uc3QgdiA9IGZpZWxkICYmIGZpZWxkLnJlcXVpcmVkO1xyXG5cdFx0XHRyZXR1cm4gKFxyXG5cdFx0XHRcdHYgPT09IHRydWUgfHxcclxuXHRcdFx0XHR2ID09PSAndHJ1ZScgfHxcclxuXHRcdFx0XHR2ID09PSAxIHx8XHJcblx0XHRcdFx0diA9PT0gJzEnIHx8XHJcblx0XHRcdFx0diA9PT0gJ3JlcXVpcmVkJ1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNoYXJlZCBsYWJlbCBlbWl0dGVyIHVzZWQgYnkgcGVyLXBhY2sgZXhwb3J0ZXJzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEVtaXRzIG9wdGlvbmFsIDxsPkxhYmVsPC9sPiArIDxicj4gYmVmb3JlIHRoZSBwcm92aWRlZCBib2R5LFxyXG5cdFx0ICogcmVzcGVjdGluZyBjZmcuYWRkTGFiZWxzLiBIZWxwIHRleHQgaXMgZW1pdHRlZCBjZW50cmFsbHkgaW5cclxuXHRcdCAqIHJlbmRlcl9maWVsZF9ub2RlKCksIHNvIGl0IGlzIGludGVudGlvbmFsbHkgTk9UIGhhbmRsZWQgaGVyZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBmaWVsZFxyXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSAgZW1pdFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgYm9keVxyXG5cdFx0ICogQHBhcmFtIHt7YWRkTGFiZWxzPzogYm9vbGVhbn19ICBbY2ZnXVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZW1pdF9sYWJlbF90aGVuKGZpZWxkLCBlbWl0LCBib2R5LCBjZmcpIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgZW1pdCAhPT0gJ2Z1bmN0aW9uJyApIHsgcmV0dXJuOyB9XHJcblxyXG5cdFx0XHRjZmcgPSBjZmcgfHwge307XHJcblx0XHRcdGNvbnN0IGFkZExhYmVscyA9IGNmZy5hZGRMYWJlbHMgIT09IGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgcmF3ICAgPSAoZmllbGQgJiYgdHlwZW9mIGZpZWxkLmxhYmVsID09PSAnc3RyaW5nJykgPyBmaWVsZC5sYWJlbCA6ICcnO1xyXG5cdFx0XHRjb25zdCBsYWJlbCA9IHJhdy50cmltKCk7XHJcblxyXG5cdFx0XHR2YXIgaXNfcmVxICAgPSB0aGlzLmlzX3JlcXVpcmVkKCBmaWVsZCApO1xyXG5cdFx0XHR2YXIgcmVxX21hcmsgPSBpc19yZXEgPyAnKicgOiAnJztcclxuXHJcblx0XHRcdGlmICggbGFiZWwgJiYgYWRkTGFiZWxzICkge1xyXG5cdFx0XHRcdGNvbnN0IGVzY19odG1sID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NhcGVfaHRtbDtcclxuXHRcdFx0XHRlbWl0KCAnPGw+JyArIGVzY19odG1sKCBsYWJlbCApICsgcmVxX21hcmsgKyAnPC9sPicgKTtcclxuXHRcdFx0XHRlbWl0KCAnPGJyPicgKyBib2R5ICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZW1pdCggYm9keSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRcdC8vID09IEhlbHBlcnMgPT1cclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcblx0XHQvLyAtLSBUaW1lIFNlbGVjdCBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRzdGF0aWMgaXNfdGltZXNsb3RfcGlja2VyX2VuYWJsZWQoKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0cmV0dXJuICEhKHdpbmRvdy5fd3BiYyAmJiB0eXBlb2Ygd2luZG93Ll93cGJjLmdldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJ1xyXG5cdFx0XHRcdFx0JiYgd2luZG93Ll93cGJjLmdldF9vdGhlcl9wYXJhbSgnaXNfZW5hYmxlZF9ib29raW5nX3RpbWVzbG90X3BpY2tlcicpKTtcclxuXHRcdFx0fSBjYXRjaCAoXykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgdGltZV9wbGFjZWhvbGRlcl9mb3IobmFtZSwgZmllbGQpIHtcclxuXHRcdFx0Ly8gUHJlZmVyIGZpZWxkLXNwZWNpZmljIHBsYWNlaG9sZGVyOyBlbHNlIHNlbnNpYmxlIGRlZmF1bHQgcGVyIGZpZWxkLlxyXG5cdFx0XHRpZiAodHlwZW9mIGZpZWxkLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyAmJiBmaWVsZC5wbGFjZWhvbGRlci50cmltKCkpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmllbGQucGxhY2Vob2xkZXIudHJpbSgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChuYW1lID09PSAnZHVyYXRpb250aW1lJykgcmV0dXJuICctLS0gU2VsZWN0IGR1cmF0aW9uIC0tLSc7XHJcblx0XHRcdHJldHVybiAnLS0tIFNlbGVjdCB0aW1lIC0tLSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCB0b2tlbnMvZGVmYXVsdCBmb3IgYSB0aW1lLWxpa2Ugc2VsZWN0IChzdGFydC9lbmQvcmFuZ2UvZHVyYXRpb24pLlxyXG5cdFx0ICogLSBBZGRzIGFuIGVtcHR5LXZhbHVlIHBsYWNlaG9sZGVyIGFzIHRoZSBmaXJzdCBvcHRpb24gb25seSB3aGVuOlxyXG5cdFx0ICogICDigKIgdGltZSBwaWNrZXIgaXMgT0ZGLCBhbmRcclxuXHRcdCAqICAg4oCiIG5vIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBkZWZhdWx0LCBhbmRcclxuXHRcdCAqICAg4oCiIHRoZXJlIGlzbid0IGFscmVhZHkgYW4gZW1wdHktdmFsdWUgb3B0aW9uLlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgYnVpbGRfdGltZV9zZWxlY3RfdG9rZW5zKGZpZWxkLCBuYW1lKSB7XHJcblx0XHRcdGxldCB0b2tlbnNfc3RyID0gdGhpcy5vcHRpb25fdG9rZW5zKGZpZWxkKTtcclxuXHRcdFx0bGV0IGRlZl9zdHIgICAgPSB0aGlzLmRlZmF1bHRfb3B0aW9uX3N1ZmZpeChmaWVsZCwgdG9rZW5zX3N0cik7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuaXNfdGltZXNsb3RfcGlja2VyX2VuYWJsZWQoKSkge1xyXG5cdFx0XHRcdGNvbnN0IG9wdHMgPSBBcnJheS5pc0FycmF5KGZpZWxkLm9wdGlvbnMpID8gZmllbGQub3B0aW9ucyA6IFtdO1xyXG5cclxuXHRcdFx0XHRjb25zdCBoYXNfc2VsZWN0ZWRfZGVmYXVsdCA9IG9wdHMuc29tZShvID0+XHJcblx0XHRcdFx0XHRvICYmIChvLnNlbGVjdGVkID09PSB0cnVlIHx8IG8uc2VsZWN0ZWQgPT09ICd0cnVlJyB8fCBvLnNlbGVjdGVkID09PSAxIHx8IG8uc2VsZWN0ZWQgPT09ICcxJylcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoIWhhc19zZWxlY3RlZF9kZWZhdWx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBoYXNfZW1wdHlfdmFsdWVfb3B0aW9uID0gb3B0cy5zb21lKG8gPT5cclxuXHRcdFx0XHRcdFx0byAmJiB0eXBlb2Ygby52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG8udmFsdWUpLnRyaW0oKSA9PT0gJydcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCFoYXNfZW1wdHlfdmFsdWVfb3B0aW9uKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHBoVGV4dCAgICAgPSB0aGlzLnRpbWVfcGxhY2Vob2xkZXJfZm9yKG5hbWUsIGZpZWxkKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGhUb2tlblN0ciA9ICdcIicgKyBjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV9mb3Jfc2hvcnRjb2RlKHBoVGV4dCArICdAQCcpICsgJ1wiJztcclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IG90aGVyID0gdGhpcy5vcHRpb25fdG9rZW5zKGZpZWxkKS50cmltKCk7IC8vIHJlY29tcHV0ZSwgdHJpbSBsZWFkaW5nIHNwYWNlXHJcblx0XHRcdFx0XHRcdHRva2Vuc19zdHIgID0gJyAnICsgcGhUb2tlblN0ciArIChvdGhlciA/ICgnICcgKyBvdGhlcikgOiAnJyk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBFbnN1cmUgZmlyc3Qgb3B0aW9uIChvdXIgcGxhY2Vob2xkZXIpIGJlY29tZXMgdGhlIGRlZmF1bHQgaW1wbGljaXRseVxyXG5cdFx0XHRcdFx0XHRkZWZfc3RyID0gJyc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB7IHRva2Vuc19zdHIsIGRlZl9zdHIgfTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgZW1pdF90aW1lX3NlbGVjdChuYW1lLCBmaWVsZCwgcmVxX21hcmssIGlkX29wdCwgY2xzX29wdHMsIGVtaXRfbGFiZWxfdGhlbikge1xyXG5cdFx0XHRjb25zdCB7IHRva2Vuc19zdHIsIGRlZl9zdHIgfSA9IHRoaXMuYnVpbGRfdGltZV9zZWxlY3RfdG9rZW5zKGZpZWxkLCBuYW1lKTtcclxuXHRcdFx0Ly8gTk9URTogTm8gc2l6ZS9waCB0b2tlbnMgaGVyZSB0byBtaXJyb3IgcmFuZ2V0aW1lIGJlaGF2aW9yIGV4YWN0bHkuXHJcblx0XHRcdGVtaXRfbGFiZWxfdGhlbihgW3NlbGVjdGJveCR7cmVxX21hcmt9ICR7bmFtZX0ke2lkX29wdH0ke2Nsc19vcHRzfSR7ZGVmX3N0cn0ke3Rva2Vuc19zdHJ9XWApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIC0tIE90aGVyIEhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vIFJldHVybiBhIGZpZWxkJ3MgZGVmYXVsdCB2YWx1ZSAoc3VwcG9ydHMgYm90aCBjYW1lbENhc2UgYW5kIHNuYWtlX2Nhc2UpLlxyXG5cdFx0c3RhdGljIGdldF9kZWZhdWx0X3ZhbHVlKGZpZWxkKSB7XHJcblx0XHRcdGNvbnN0IHYgPSBmaWVsZD8uZGVmYXVsdF92YWx1ZSA/PyBmaWVsZD8uZGVmYXVsdFZhbHVlID8/ICcnO1xyXG5cdFx0XHRyZXR1cm4gKHYgPT0gbnVsbCkgPyAnJyA6IFN0cmluZyggdiApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZvciB0ZXh0LWxpa2UgZmllbGRzLCB0aGUgZGVmYXVsdCBpcyBhIGZpbmFsIHF1b3RlZCB0b2tlbiBpbiB0aGUgc2hvcnRjb2RlLlxyXG5cdFx0c3RhdGljIGRlZmF1bHRfdGV4dF9zdWZmaXgoZmllbGQpIHtcclxuXHRcdFx0Y29uc3QgdiA9IHRoaXMuZ2V0X2RlZmF1bHRfdmFsdWUoIGZpZWxkICk7XHJcblx0XHRcdGlmICggIXYgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBgIFwiJHtjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV9mb3Jfc2hvcnRjb2RlKCB2ICl9XCJgO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBjbGFzc19vcHRpb25zKGZpZWxkKSB7XHJcblx0XHRcdGNvbnN0IHJhdyA9IGZpZWxkLmNsYXNzIHx8IGZpZWxkLmNsYXNzTmFtZSB8fCBmaWVsZC5jc3NjbGFzcyB8fCAnJztcclxuXHRcdFx0Y29uc3QgY2xzID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9jc3NfY2xhc3NsaXN0KCBTdHJpbmcoIHJhdyApICk7XHJcblx0XHRcdGlmICggIWNscyApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIGNsc1xyXG5cdFx0XHRcdC5zcGxpdCggL1xccysvIClcclxuXHRcdFx0XHQuZmlsdGVyKCBCb29sZWFuIClcclxuXHRcdFx0XHQubWFwKCAoYykgPT4gYCBjbGFzczoke2NvcmUuV1BCQ19CRkJfU2FuaXRpemUudG9fdG9rZW4oIGMgKX1gIClcclxuXHRcdFx0XHQuam9pbiggJycgKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaWRfb3B0aW9uKGZpZWxkLCBjdHgpIHtcclxuXHRcdFx0Y29uc3QgcmF3X2lkID0gZmllbGQuaHRtbF9pZCB8fCBmaWVsZC5pZF9hdHRyO1xyXG5cdFx0XHRpZiAoICFyYXdfaWQgKSByZXR1cm4gJyc7XHJcblx0XHRcdGNvbnN0IGJhc2UgPSBjb3JlLldQQkNfQkZCX1Nhbml0aXplLnRvX3Rva2VuKCByYXdfaWQgKTtcclxuXHRcdFx0aWYgKCAhYmFzZSApIHJldHVybiAnJztcclxuXHRcdFx0bGV0IHVuaXF1ZSA9IGJhc2UsIGkgPSAyO1xyXG5cdFx0XHR3aGlsZSAoIGN0eC51c2VkSWRzLmhhcyggdW5pcXVlICkgKSB1bmlxdWUgPSBgJHtiYXNlfV8ke2krK31gO1xyXG5cdFx0XHRjdHgudXNlZElkcy5hZGQoIHVuaXF1ZSApO1xyXG5cdFx0XHRyZXR1cm4gYCBpZDoke3VuaXF1ZX1gO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBwaF9hdHRyKHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgfHwgdiA9PT0gJycgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBgIHBsYWNlaG9sZGVyOlwiJHtjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV9mb3JfYXR0cl9xdW90ZWQoIHYgKX1cImA7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gdGV4dC1saWtlIHNpemUvbWF4bGVuZ3RoIHRva2VuOiBcIjQwLzI1NVwiIChvciBcIjQwL1wiIG9yIFwiLzI1NVwiKVxyXG5cdFx0c3RhdGljIHNpemVfbWF4X3Rva2VuKGYpIHtcclxuXHRcdFx0Y29uc3Qgc2l6ZSA9IHBhcnNlSW50KCBmLnNpemUsIDEwICk7XHJcblx0XHRcdGNvbnN0IG1heCAgPSBwYXJzZUludCggZi5tYXhsZW5ndGgsIDEwICk7XHJcblx0XHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBzaXplICkgJiYgTnVtYmVyLmlzRmluaXRlKCBtYXggKSApIHJldHVybiBgICR7c2l6ZX0vJHttYXh9YDtcclxuXHRcdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIHNpemUgKSApIHJldHVybiBgICR7c2l6ZX0vYDtcclxuXHRcdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIG1heCApICkgcmV0dXJuIGAgLyR7bWF4fWA7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyB0ZXh0YXJlYSBjb2xzL3Jvd3MgdG9rZW46IFwiNjB4NFwiIChvciBcIjYweFwiIG9yIFwieDRcIilcclxuXHRcdHN0YXRpYyBjb2xzX3Jvd3NfdG9rZW4oZikge1xyXG5cdFx0XHRjb25zdCBjb2xzID0gcGFyc2VJbnQoIGYuY29scywgMTAgKTtcclxuXHRcdFx0Y29uc3Qgcm93cyA9IHBhcnNlSW50KCBmLnJvd3MsIDEwICk7XHJcblx0XHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBjb2xzICkgJiYgTnVtYmVyLmlzRmluaXRlKCByb3dzICkgKSByZXR1cm4gYCAke2NvbHN9eCR7cm93c31gO1xyXG5cdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggY29scyApICkgcmV0dXJuIGAgJHtjb2xzfXhgO1xyXG5cdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggcm93cyApICkgcmV0dXJuIGAgeCR7cm93c31gO1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIG9wdGlvbl90b2tlbnMoZmllbGQpIHtcclxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IEFycmF5LmlzQXJyYXkoIGZpZWxkLm9wdGlvbnMgKSA/IGZpZWxkLm9wdGlvbnMgOiBbXTtcclxuXHRcdFx0aWYgKCBvcHRpb25zLmxlbmd0aCA9PT0gMCApIHJldHVybiAnJztcclxuXHRcdFx0Y29uc3QgcGFydHMgPSBvcHRpb25zLm1hcCggKG8pID0+IHtcclxuXHRcdFx0XHRjb25zdCB0aXRsZSA9IFN0cmluZyggby5sYWJlbCA/PyBvLnZhbHVlID8/ICcnICkudHJpbSgpO1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gU3RyaW5nKCBvLnZhbHVlID8/IG8ubGFiZWwgPz8gJycgKS50cmltKCk7XHJcblx0XHRcdFx0cmV0dXJuIHRpdGxlICYmIHZhbHVlICYmIHRpdGxlICE9PSB2YWx1ZVxyXG5cdFx0XHRcdFx0PyBgXCIke2NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjYXBlX2Zvcl9zaG9ydGNvZGUoIGAke3RpdGxlfUBAJHt2YWx1ZX1gICl9XCJgXHJcblx0XHRcdFx0XHQ6IGBcIiR7Y29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NhcGVfZm9yX3Nob3J0Y29kZSggdGl0bGUgfHwgdmFsdWUgKX1cImA7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0cmV0dXJuICcgJyArIHBhcnRzLmpvaW4oICcgJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBkZWZhdWx0X29wdGlvbl9zdWZmaXgoZmllbGQsIHRva2Vucykge1xyXG5cdFx0XHRjb25zdCBvcHRpb25zICA9IEFycmF5LmlzQXJyYXkoIGZpZWxkLm9wdGlvbnMgKSA/IGZpZWxkLm9wdGlvbnMgOiBbXTtcclxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBvcHRpb25zLmZpbmQoIChvKSA9PiBvLnNlbGVjdGVkICk7XHJcblx0XHRcdGNvbnN0IGRlZl92YWwgPSBzZWxlY3RlZCA/IChzZWxlY3RlZC52YWx1ZSA/PyBzZWxlY3RlZC5sYWJlbCkgOiAoZmllbGQuZGVmYXVsdF92YWx1ZSA/PyBmaWVsZC5kZWZhdWx0VmFsdWUgPz8gJycpO1xyXG5cdFx0XHRpZiAoICFkZWZfdmFsICkgcmV0dXJuICcnO1xyXG5cdFx0XHRyZXR1cm4gYCBkZWZhdWx0PVwiJHtjb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY2FwZV92YWx1ZV9mb3JfYXR0ciggZGVmX3ZhbCApfVwiYDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNFTEVDVEJPWCAvIFJBRElPIC0gQnVpbGQgdGhlIGZpbmFsIHNob3J0Y29kZSBmb3IgY2hvaWNlLWJhc2VkIGZpZWxkcy5cclxuXHRcdCAqXHJcblx0XHQgKiBSZXNwb25zaWJpbGl0aWVzOlxyXG5cdFx0ICogIC0gRGVsZWdhdGVzIG9wdGlvbi9kZWZhdWx0IGVuY29kaW5nIHRvOlxyXG5cdFx0ICogICAgICAtIFdQQkNfQkZCX0V4cG9ydGVyLm9wdGlvbl90b2tlbnMoIGZpZWxkIClcclxuXHRcdCAqICAgICAgLSBXUEJDX0JGQl9FeHBvcnRlci5kZWZhdWx0X29wdGlvbl9zdWZmaXgoIGZpZWxkLCB0b2tlbnMgKVxyXG5cdFx0ICogIC0gRm9yIGByYWRpb2A6XHJcblx0XHQgKiAgICAgIC0gQUxXQVlTIGFwcGVuZHMgYSBiYXJlIGB1c2VfbGFiZWxfZWxlbWVudGAgdG9rZW4uXHJcblx0XHQgKiAgLSBGb3IgYHNlbGVjdGJveGA6XHJcblx0XHQgKiAgICAgIC0gQWRkcyBhIGJhcmUgYG11bHRpcGxlYCB0b2tlbiB3aGVuIGBmaWVsZC5tdWx0aXBsZWAgaXMgdHJ1dGh5XHJcblx0XHQgKiAgICAgICAgKHRydWUsIFwidHJ1ZVwiLCAxLCBcIjFcIiwgXCJtdWx0aXBsZVwiKSAtPiBgW3NlbGVjdGJveCBzZXJ2aWNlcyBtdWx0aXBsZSBcIjFcIiBcIjJcIl1gLlxyXG5cdFx0ICogICAgICAtIFdoZW4gc2luZ2xlLXNlbGVjdCBBTkQgdGhlcmUgaXMgbm8gYGRlZmF1bHQ9XCIuLi5cImAgYXR0cmlidXRlIEFORFxyXG5cdFx0ICogICAgICAgIGEgbm9uLWVtcHR5IGBmaWVsZC5wbGFjZWhvbGRlcmAgaXMgcHJlc2VudCwgZW5jb2RlcyB0aGUgcGxhY2Vob2xkZXJcclxuXHRcdCAqICAgICAgICBhcyB0aGUgRklSU1Qgb3B0aW9uIHdpdGggZW1wdHkgdmFsdWUgdmlhIHRoZSBgQEBgIHN5bnRheDpcclxuXHRcdCAqICAgICAgICAgICBwbGFjZWhvbGRlciBcIi0tLS0gU2VsZWN0IC0tLS1cIiAgLT4gIGBcIi0tLS0gU2VsZWN0IC0tLS1AQFwiYFxyXG5cdFx0ICogICAgICAgIGFuZCBjbGVhcnMgYW55IGRlZmF1bHQgYXR0cmlidXRlOlxyXG5cdFx0ICogICAgICAgICAgIFtzZWxlY3Rib3gqIHNlcnZpY2VzIFwiLS0tIFNlbGVjdCAtLS1AQFwiIFwiT3B0aW9uIDFcIiBcIk9wdGlvbiAyXCJdXHJcblx0XHQgKiAgICAgIC0gUmVzcGVjdHMgYGZpZWxkLnVzZV9sYWJlbF9lbGVtZW50YCAoYWRkcyBiYXJlIGB1c2VfbGFiZWxfZWxlbWVudGAgd2hlbiB0cnVlKS5cclxuXHRcdCAqICAtIEZvciBib3RoIGtpbmRzOlxyXG5cdFx0ICogICAgICAtIEhvbm9ycyBgZmllbGQubGFiZWxfZmlyc3RgIGJ5IGFwcGVuZGluZyBgbGFiZWxfZmlyc3Q6XCIxXCJgIHdoZW4gdHJ1dGh5LlxyXG5cdFx0ICogICAgICAtIEtlZXBzIHRoZSByZXF1aXJlZCBzdGFyLCBpZCBhbmQgY3NzY2xhc3MgdG9rZW5zIGluIHRoZSBjYW5vbmljYWwgb3JkZXIuXHJcblx0XHQgKlxyXG5cdFx0ICogRmluYWwgc2hvcnRjb2RlIGxheW91dCAob3JkZXIgaXMgaW1wb3J0YW50KTpcclxuXHRcdCAqICAgW2tpbmQgcmVxIG5hbWUgaWQgY2xzIHVzZV9sYWJlbF9lbGVtZW50IG11bHRpcGxlIGRlZmF1bHQgdG9rZW5zIGxhYmVsX2ZpcnN0XVxyXG5cdFx0ICpcclxuXHRcdCAqIEBqRG9jXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2luZFxyXG5cdFx0ICogICBTaG9ydGNvZGUga2luZDsgdHlwaWNhbGx5IFwicmFkaW9cIiBvciBcInNlbGVjdGJveFwiLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSByZXFfbWFya1xyXG5cdFx0ICogICBSZXF1aXJlZCBtYXJrZXIgdXNlZCBieSBDb250YWN0IEZvcm0gNyBzdHlsZSBzaG9ydGNvZGVzOlxyXG5cdFx0ICogICBlaXRoZXIgXCJcIiAobm90IHJlcXVpcmVkKSBvciBcIipcIiAocmVxdWlyZWQpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcblx0XHQgKiAgIFNhbml0aXplZCBmaWVsZCBuYW1lIGFzIGV4cG9ydGVkIGludG8gdGhlIHNob3J0Y29kZSwgZS5nLiBcInNlcnZpY2VzXCIuXHJcblx0XHQgKiAgIE11c3QgYWxyZWFkeSBiZSBjb21wdXRlZCB2aWEgV1BCQ19CRkJfRXhwb3J0ZXIuY29tcHV0ZV9uYW1lKCkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkXHJcblx0XHQgKiAgIE5vcm1hbGl6ZWQgZmllbGQgZGF0YSBvYmplY3QgYXMgc3RvcmVkIGluIHRoZSBCdWlsZGVyIHN0cnVjdHVyZS4gQ29tbW9uIGtleXM6XHJcblx0XHQgKiAgICAgLSB0eXBlICAgICAgICAgICB7c3RyaW5nfSAgIEZpZWxkIHR5cGUsIGUuZy4gXCJyYWRpb1wiIHwgXCJzZWxlY3RcIi5cclxuXHRcdCAqICAgICAtIG9wdGlvbnMgICAgICAgIHtBcnJheX0gICAgT3B0aW9uIG9iamVjdHM6IHsgbGFiZWwsIHZhbHVlLCBzZWxlY3RlZCB9LlxyXG5cdFx0ICogICAgIC0gcGxhY2Vob2xkZXIgICAge3N0cmluZ30gICBQbGFjZWhvbGRlciB0ZXh0IChzaW5nbGUtc2VsZWN0IG9ubHkpLlxyXG5cdFx0ICogICAgIC0gbXVsdGlwbGUgICAgICAge2Jvb2xlYW58c3RyaW5nfG51bWJlcn0gIEVuYWJsZXMgbXVsdGktc2VsZWN0IHdoZW4gdHJ1dGh5LlxyXG5cdFx0ICogICAgIC0gdXNlX2xhYmVsX2VsZW1lbnQge2Jvb2xlYW59ICBSZXF1ZXN0IGJhcmUgYHVzZV9sYWJlbF9lbGVtZW50YCB0b2tlbiAobm9uLXJhZGlvKS5cclxuXHRcdCAqICAgICAtIGxhYmVsX2ZpcnN0ICAgIHtib29sZWFufSAgSWYgdHJ1ZSwgYXBwZW5kcyBgbGFiZWxfZmlyc3Q6XCIxXCJgIHRva2VuLlxyXG5cdFx0ICogICAgIC0gZGVmYXVsdF92YWx1ZSAge3N0cmluZ30gICBPcHRpb25hbCBkZWZhdWx0IHZhbHVlICh1c2VkIGJ5IGRlZmF1bHRfb3B0aW9uX3N1ZmZpeCgpKS5cclxuXHRcdCAqICAgICAtIGh0bWxfaWQgLyBjc3NjbGFzcyAvIGNsYXNzIC8gY2xhc3NOYW1lICB7c3RyaW5nfSAgVXNlZCB1cHN0cmVhbSBpbiBpZF9vcHQvY2xzX29wdHMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlkX29wdFxyXG5cdFx0ICogICBPcHRpb25hbCBpZCB0b2tlbiBidWlsdCBieSBXUEJDX0JGQl9FeHBvcnRlci5pZF9vcHRpb24oZmllbGQsIGN0eCksXHJcblx0XHQgKiAgIGUuZy4gXCIgaWQ6bXlfaWRcIiBvciBlbXB0eSBzdHJpbmcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGNsc19vcHRzXHJcblx0XHQgKiAgIENsYXNzIHRva2VucyBidWlsdCBieSBXUEJDX0JGQl9FeHBvcnRlci5jbGFzc19vcHRpb25zKGZpZWxkKSxcclxuXHRcdCAqICAgZS5nLiBcIiBjbGFzczpteV9jbGFzcyBjbGFzczpvdGhlclwiLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKiAgIENvbXBsZXRlIHNob3J0Y29kZSBib2R5IGZvciB0aGUgY2hvaWNlIGZpZWxkLCBmb3IgZXhhbXBsZTpcclxuXHRcdCAqICAgICBcIltyYWRpbyogc2VydmljZXMgdXNlX2xhYmVsX2VsZW1lbnQgXFxcIkFcXFwiIFxcXCJCXFxcIl1cIlxyXG5cdFx0ICogICAgIFwiW3NlbGVjdGJveCBzZXJ2aWNlcyBtdWx0aXBsZSBcXFwiMVxcXCIgXFxcIjJcXFwiIFxcXCIzXFxcIl1cIlxyXG5cdFx0ICogICAgIFwiW3NlbGVjdGJveCogc2VydmljZXMgXFxcIi0tLSBTZWxlY3QgLS0tQEBcXFwiIFxcXCJPcHRpb24gMVxcXCIgXFxcIk9wdGlvbiAyXFxcIl1cIlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgY2hvaWNlX3RhZyhraW5kLCByZXFfbWFyaywgbmFtZSwgZmllbGQsIGlkX29wdCwgY2xzX29wdHMpIHtcclxuXHRcdFx0Ly8gU3RhcnQgZnJvbSB0aGUgcmF3IG9wdGlvbnMvZGVmYXVsdCBhcyBiZWZvcmUuXHJcblx0XHRcdGxldCB0b2tlbnMgPSBXUEJDX0JGQl9FeHBvcnRlci5vcHRpb25fdG9rZW5zKCBmaWVsZCApO1xyXG5cdFx0XHRsZXQgZGVmICAgID0gV1BCQ19CRkJfRXhwb3J0ZXIuZGVmYXVsdF9vcHRpb25fc3VmZml4KCBmaWVsZCwgdG9rZW5zICk7XHJcblxyXG5cdFx0XHQvLyBGb3IgUkFESU8gd2UgbXVzdCBBTFdBWVMgaW5jbHVkZSBhIGJhcmUgYHVzZV9sYWJlbF9lbGVtZW50YCB0b2tlbiAobm8gdmFsdWUvcXVvdGVzKS5cclxuXHRcdFx0Ly8gRm9yIG90aGVyIGtpbmRzLCBrZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGluY2x1ZGUgb25seSBpZiBleHBsaWNpdGx5IHNldC5cclxuXHRcdFx0bGV0IHVsZSA9ICcnO1xyXG5cdFx0XHRpZiAoIGtpbmQgPT09ICdyYWRpbycgKSB7XHJcblx0XHRcdFx0dWxlID0gJyB1c2VfbGFiZWxfZWxlbWVudCc7XHJcblx0XHRcdH0gZWxzZSBpZiAoIGZpZWxkICYmIGZpZWxkLnVzZV9sYWJlbF9lbGVtZW50ICkge1xyXG5cdFx0XHRcdHVsZSA9ICcgdXNlX2xhYmVsX2VsZW1lbnQnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTRUxFQ1RCT1gtc3BlY2lmaWMgZXh0cmFzOlxyXG5cdFx0XHQvLyAgLSBcIm11bHRpcGxlXCIgZmxhZ1xyXG5cdFx0XHQvLyAgLSBwbGFjZWhvbGRlciBleHBvcnRlZCBhcyBGSVJTVCBPUFRJT04gd2hlbiBzaW5nbGUtc2VsZWN0IGFuZCBubyBkZWZhdWx0LlxyXG5cdFx0XHRsZXQgbXVsdGlwbGVfZmxhZyA9ICcnO1xyXG5cclxuXHRcdFx0aWYgKCBraW5kID09PSAnc2VsZWN0Ym94JyAmJiBmaWVsZCApIHtcclxuXHRcdFx0XHRjb25zdCBtdWx0aXBsZSA9XHJcblx0XHRcdFx0XHRmaWVsZC5tdWx0aXBsZSA9PT0gdHJ1ZSAgIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5tdWx0aXBsZSA9PT0gJ3RydWUnIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5tdWx0aXBsZSA9PT0gMSAgICAgIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5tdWx0aXBsZSA9PT0gJzEnICAgIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5tdWx0aXBsZSA9PT0gJ211bHRpcGxlJztcclxuXHJcblx0XHRcdFx0aWYgKCBtdWx0aXBsZSApIHtcclxuXHRcdFx0XHRcdC8vIEV4cG9ydCBiYXJlIFwibXVsdGlwbGVcIiB0b2tlbiBhcyBpbjogW3NlbGVjdGJveCBzZXJ2aWNlcyBtdWx0aXBsZSBcIjFcIiBcIjJcIiBcIjNcIl0uXHJcblx0XHRcdFx0XHRtdWx0aXBsZV9mbGFnID0gJyBtdWx0aXBsZSc7XHJcblx0XHRcdFx0fSBlbHNlIGlmICggIWRlZiApIHtcclxuXHRcdFx0XHRcdC8vIFNpbmdsZS1zZWxlY3QgKyBOTyBkZWZhdWx0IHNlbGVjdGVkOlxyXG5cdFx0XHRcdFx0Ly8gZXhwb3J0IHBsYWNlaG9sZGVyIGFzIHRoZSBGSVJTVCBPUFRJT04gd2l0aCBlbXB0eSB2YWx1ZTpcclxuXHRcdFx0XHRcdC8vICAgW3NlbGVjdGJveCogc2VydmljZXMgXCItLS0gU2VsZWN0IC0tLUBAXCIgXCJPcHRpb24gMVwiIFwiT3B0aW9uIDJcIl1cclxuXHRcdFx0XHRcdGNvbnN0IHJhd1BoID0gZmllbGQucGxhY2Vob2xkZXI7XHJcblx0XHRcdFx0XHRjb25zdCBwaCAgICA9ICh0eXBlb2YgcmF3UGggPT09ICdzdHJpbmcnKSA/IHJhd1BoLnRyaW0oKSA6ICcnO1xyXG5cclxuXHRcdFx0XHRcdGlmICggcGggKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IFMgICAgICA9IGNvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGVzY19zYyA9IChTICYmIFMuZXNjYXBlX2Zvcl9zaG9ydGNvZGUpID8gUy5lc2NhcGVfZm9yX3Nob3J0Y29kZSA6ICh2KSA9PiBTdHJpbmcoIHYgKTtcclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IHBoVG9rZW4gPSBgXCIke2VzY19zYyggcGggKyAnQEAnICl9XCJgO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCB0b2tlbnMgJiYgdG9rZW5zLmxlbmd0aCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyB0b2tlbnMgYWxyZWFkeSBzdGFydHMgd2l0aCBhIGxlYWRpbmcgc3BhY2UuXHJcblx0XHRcdFx0XHRcdFx0dG9rZW5zID0gJyAnICsgcGhUb2tlbiArIHRva2VucztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0b2tlbnMgPSAnICcgKyBwaFRva2VuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBFbnN1cmUgdGhlcmUgaXMgc3RpbGwgTk8gZGVmYXVsdCBhdHRyaWJ1dGUgd2hlbiB1c2luZyBwbGFjZWhvbGRlci1hcy1vcHRpb24uXHJcblx0XHRcdFx0XHRcdGRlZiA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT3B0aW9uYWw6IGxhYmVsX2ZpcnN0IHN0YXlzIGFzIHF1b3RlZCBmbGFnIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuXHJcblx0XHRcdGNvbnN0IGxmID0gKGZpZWxkICYmIGZpZWxkLmxhYmVsX2ZpcnN0KSA/ICcgbGFiZWxfZmlyc3Q6XCIxXCInIDogJyc7XHJcblxyXG5cdFx0XHQvLyBJTVBPUlRBTlQgT1JERVIgKHBlciByZXF1ZXN0KTpcclxuXHRcdFx0Ly8gW2tpbmQgcmVxIG5hbWUgaWQgY2xzIHVzZV9sYWJlbF9lbGVtZW50IG11bHRpcGxlIGRlZmF1bHQgdG9rZW5zIGxhYmVsX2ZpcnN0XVxyXG5cdFx0XHQvLyBpLmUuIGB1c2VfbGFiZWxfZWxlbWVudGAgKGFuZCBzZWxlY3QgZXh0cmFzKSBjb21lIEJFRk9SRSBkZWZhdWx0L3Rva2Vucy5cclxuXHRcdFx0cmV0dXJuIGBbJHtraW5kfSR7cmVxX21hcmt9ICR7bmFtZX0ke2lkX29wdH0ke2Nsc19vcHRzfSR7dWxlfSR7bXVsdGlwbGVfZmxhZ30ke2RlZn0ke3Rva2Vuc30ke2xmfV1gO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBjb21wdXRlX25hbWUodHlwZSwgZmllbGQpIHtcclxuXHRcdFx0Ly8gTmFtZXMgYXJlIGZ1bGx5IHZhbGlkYXRlZCB3aGVuIHRoZSBmaWVsZCBpcyBhZGRlZCB0byB0aGUgY2FudmFzLlxyXG5cdFx0XHQvLyBUaGUgZXhwb3J0ZXIgbXVzdCB0aGVyZWZvcmUgcHJlc2VydmUgdGhlbSAoYXBhcnQgZnJvbSBpZGVtcG90ZW50IHNhbml0aXphdGlvbiksIG90aGVyd2lzZSBleGlzdGluZyBmb3JtcyBjYW4gYnJlYWsuXHJcblx0XHRcdGNvbnN0IFNhbml0ID0gY29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHJcblx0XHRcdGNvbnN0IHJhdyA9IChmaWVsZCAmJiAoZmllbGQubmFtZSB8fCBmaWVsZC5pZCkpID8gU3RyaW5nKGZpZWxkLm5hbWUgfHwgZmllbGQuaWQpIDogU3RyaW5nKHR5cGUgfHwgJ2ZpZWxkJyk7XHJcblxyXG5cdFx0XHQvLyBJZGVtcG90ZW50IHNhbml0aXphdGlvbiBvbmx5IOKAkyBubyBhdXRvLXByZWZpeGluZyBvciByZW5hbWluZy5cclxuXHRcdFx0Y29uc3QgbmFtZSA9IFNhbml0LnNhbml0aXplX2h0bWxfbmFtZSggcmF3ICk7XHJcblxyXG5cdFx0XHQvLyBJbiB0aGUgdW5saWtlbHkgY2FzZSBzYW5pdGl6YXRpb24gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsIGZhbGwgYmFjayB0byBhIHNhbml0aXplZCB0eXBlLWJhc2VkIHRva2VuLlxyXG5cdFx0XHRyZXR1cm4gbmFtZSB8fCBTYW5pdC5zYW5pdGl6ZV9odG1sX25hbWUoIFN0cmluZyh0eXBlIHx8ICdmaWVsZCcpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZWdpc3RlciBhIHBlci1maWVsZCBleHBvcnRlci5cclxuXHRcdCAqXHJcblx0XHQgKiBUaGlzIGlzIHRoZSBPTkxZIHBsYWNlIHdoZXJlIGZpZWxkLXNwZWNpZmljIHNob3J0Y29kZSBtYXJrdXAgc2hvdWxkIGxpdmUuXHJcblx0XHQgKiBDb3JlIHN0YXlzIGdlbmVyaWM7IHBhY2tzIHByb3ZpZGUgdGlueSBwbHVnaW5zLCBmb3IgZXhhbXBsZTpcclxuXHRcdCAqXHJcblx0XHQgKiAgIFdQQkNfQkZCX0V4cG9ydGVyLnJlZ2lzdGVyKCAndGV4dCcsIChmaWVsZCwgZW1pdCwgZXh0cmFzKSA9PiB7IC4uLiB9ICk7XHJcblx0XHQgKlxyXG5cdFx0ICogQGpEb2NcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICBGaWVsZCB0eXBlIGtleSwgZS5nLiAnc3RlcHNfdGltZWxpbmUnXHJcblx0XHQgKiBAcGFyYW0geyhmaWVsZDphbnksIGVtaXQ6KGNvZGU6c3RyaW5nKT0+dm9pZCwgZXh0cmFzPzp7aW8/OmFueSxjZmc/OmFueSxvbmNlPzphbnksY3R4PzphbnksY29yZT86YW55fSk9PnZvaWR9XHJcblx0XHQgKiAgICAgZm5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVnaXN0ZXIodHlwZSwgZm4pIHtcclxuXHRcdFx0aWYgKCAhIHR5cGUgfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nICkgeyByZXR1cm47IH1cclxuXHRcdFx0aWYgKCAhIHRoaXMuX19yZWdpc3RyeSApIHsgdGhpcy5fX3JlZ2lzdHJ5ID0gbmV3IE1hcCgpOyB9XHJcblx0XHRcdHRoaXMuX19yZWdpc3RyeS5zZXQoIFN0cmluZyggdHlwZSApLnRvTG93ZXJDYXNlKCksIGZuICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVbnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGV4cG9ydGVyLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBqRG9jXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB1bnJlZ2lzdGVyKHR5cGUpIHtcclxuXHRcdFx0aWYgKCAhIHRoaXMuX19yZWdpc3RyeSB8fCAhIHR5cGUgKSB7IHJldHVybjsgfVxyXG5cdFx0XHR0aGlzLl9fcmVnaXN0cnkuZGVsZXRlKCBTdHJpbmcoIHR5cGUgKS50b0xvd2VyQ2FzZSgpICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBhbiBleHBvcnRlciBleGlzdHMgZm9yIGEgZ2l2ZW4gZmllbGQgdHlwZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAakRvY1xyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgaGFzX2V4cG9ydGVyKHR5cGUpIHtcclxuXHRcdFx0cmV0dXJuICEhKCB0aGlzLl9fcmVnaXN0cnkgJiYgdGhpcy5fX3JlZ2lzdHJ5LmhhcyggU3RyaW5nKCB0eXBlICkudG9Mb3dlckNhc2UoKSApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSdW4gYSByZWdpc3RlcmVkIGV4cG9ydGVyIGZvciBhIGZpZWxkLCBpZiBwcmVzZW50LlxyXG5cdFx0ICogUmV0dXJucyB0cnVlIGlmIGEgcmVnaXN0ZXJlZCBleHBvcnRlciBoYW5kbGVkIGl0LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBqRG9jXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gZmllbGRcclxuXHRcdCAqIEBwYXJhbSB7e29wZW46RnVuY3Rpb24sY2xvc2U6RnVuY3Rpb24scHVzaDpGdW5jdGlvbixibGFuazpGdW5jdGlvbn19IGlvXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gY2ZnXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gb25jZVxyXG5cdFx0ICogQHBhcmFtIHthbnl9IGN0eFxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBydW5fcmVnaXN0ZXJlZF9leHBvcnRlcihmaWVsZCwgaW8sIGNmZywgb25jZSwgY3R4KSB7XHJcblx0XHRcdGlmICggISBmaWVsZCB8fCAhIGZpZWxkLnR5cGUgfHwgISB0aGlzLl9fcmVnaXN0cnkgKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRjb25zdCBrZXkgPSBTdHJpbmcoIGZpZWxkLnR5cGUgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRjb25zdCBmbiAgPSB0aGlzLl9fcmVnaXN0cnkuZ2V0KCBrZXkgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicgKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyBNaW5pbWFsLCBjb25zaXN0ZW50IGVtaXQoKSBicmlkZ2UgaW50byBvdXIgbGluZSBidWZmZXI6XHJcblx0XHRcdFx0Y29uc3QgZW1pdCA9IChjb2RlKSA9PiB7IGlmICggdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICkgeyBpby5wdXNoKCBjb2RlICk7IH0gfTtcclxuXHRcdFx0XHRmbiggZmllbGQsIGVtaXQsIHsgaW8sIGNmZywgb25jZSwgY3R4LCBjb3JlIH0gKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdF93cGJjPy5kZXY/LmVycm9yPy4oICdXUEJDX0JGQl9FeHBvcnRlci5ydW5fcmVnaXN0ZXJlZF9leHBvcnRlcicsIGUgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvLyBleHBvc2UgZ2xvYmFsbHkgZm9yIHBhY2tzIChpZiBub3QgYWxyZWFkeSkuXHJcblx0d2luZG93LldQQkNfQkZCX0V4cG9ydGVyID0gd2luZG93LldQQkNfQkZCX0V4cG9ydGVyIHx8IFdQQkNfQkZCX0V4cG9ydGVyO1xyXG5cdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKCAnd3BiYzpiZmI6ZXhwb3J0ZXItcmVhZHknLCB7fSApO1xyXG5cclxuXHQvLyBJbml0aWFsaXplIGRlZmF1bHQgc2tpcCBsaXN0OyBhbGxvdyBhIGdsb2JhbCBvdmVycmlkZSBhcnJheSBiZWZvcmUgZXhwb3J0IHJ1bnMuXHJcblx0V1BCQ19CRkJfRXhwb3J0ZXIuc2V0X3NraXBfYXR0cnMoIHdpbmRvdy5XUEJDX0JGQl9FWFBPUlRfU0tJUF9BVFRSUyB8fCB3cGJjX2V4cG9ydF9za2lwX2F0dHJzX2RlZmF1bHQgKTtcclxuXHJcblx0Ly8gPT0gXCJDb250ZW50IG9mIGJvb2tpbmcgZmllbGRzIGRhdGFcIiBFeHBvcnRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHQvLyDigJMgcGFjay1leHRlbnNpYmxlIGdlbmVyYXRvciBmb3IgXCJDb250ZW50IG9mIGJvb2tpbmcgZmllbGRzIGRhdGFcIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdC8vID09IFByb2R1Y2VzIG1hcmt1cCBsaWtlOiAgXCI8ZGl2IGNsYXNzPVxcXCJzdGFuZGFyZC1jb250ZW50LWZvcm1cXFwiPjxiPlRpdGxlPC9iPjogPGY+W3Nob3J0Y29kZV08L2Y+PGJyPiAuLi4gPC9kaXY+XCJcclxuXHQvLyA9PSBQYWNrcyBjYW4gb3ZlcnJpZGUgcGVyIHR5cGUgdmlhOiBXUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIucmVnaXN0ZXIoJ2NhbGVuZGFyJywgKGZpZWxkLCBlbWl0LCBjdHgpPT57Li4ufSlcclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0Y2xhc3MgV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyIHtcclxuXHJcblx0XHRzdGF0aWMgcmVnaXN0ZXIodHlwZSwgZm4pIHtcclxuXHRcdFx0aWYgKCAhdHlwZSB8fCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicgKSByZXR1cm47XHJcblx0XHRcdGlmICggIXRoaXMuX19yZWdpc3RyeSApIHRoaXMuX19yZWdpc3RyeSA9IG5ldyBNYXAoKTtcclxuXHRcdFx0dGhpcy5fX3JlZ2lzdHJ5LnNldCggU3RyaW5nKCB0eXBlICkudG9Mb3dlckNhc2UoKSwgZm4gKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgdW5yZWdpc3Rlcih0eXBlKSB7XHJcblx0XHRcdGlmICggIXRoaXMuX19yZWdpc3RyeSB8fCAhdHlwZSApIHJldHVybjtcclxuXHRcdFx0dGhpcy5fX3JlZ2lzdHJ5LmRlbGV0ZSggU3RyaW5nKCB0eXBlICkudG9Mb3dlckNhc2UoKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBoYXNfZXhwb3J0ZXIodHlwZSkge1xyXG5cdFx0XHRyZXR1cm4gISEodGhpcy5fX3JlZ2lzdHJ5ICYmIHRoaXMuX19yZWdpc3RyeS5oYXMoIFN0cmluZyggdHlwZSApLnRvTG93ZXJDYXNlKCkgKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHJ1bl9yZWdpc3RlcmVkX2V4cG9ydGVyKGZpZWxkLCBlbWl0LCBjdHgpIHtcclxuXHRcdFx0aWYgKCAhZmllbGQgfHwgIWZpZWxkLnR5cGUgfHwgIXRoaXMuX19yZWdpc3RyeSApIHJldHVybiBmYWxzZTtcclxuXHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKCBmaWVsZC50eXBlICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0Y29uc3QgZm4gID0gdGhpcy5fX3JlZ2lzdHJ5LmdldCgga2V5ICk7XHJcblx0XHRcdGlmICggdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGZuKCBmaWVsZCwgZW1pdCwgY3R4IHx8IHt9ICk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdF93cGJjPy5kZXY/LmVycm9yPy4oICdXUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIucnVuX3JlZ2lzdGVyZWRfZXhwb3J0ZXInLCBlICk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09IE5FVzogc2hhcmVkIGxpbmUgZm9ybWF0dGVyIGZvciBcIkNvbnRlbnQgb2YgYm9va2luZyBmaWVsZHMgZGF0YVwiID09PVxyXG5cdFx0c3RhdGljIGVtaXRfbGluZV9ib2xkX2ZpZWxkKGVtaXQsIGxhYmVsLCB0b2tlbiwgY2ZnKSB7XHJcblx0XHRcdGNvbnN0IFMgICAgICAgICA9IGNvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdGNvbnN0IHNlcCAgICAgICA9IChjZmcgJiYgdHlwZW9mIGNmZy5zZXAgPT09ICdzdHJpbmcnKSA/IGNmZy5zZXAgOiAnOiAnO1xyXG5cdFx0XHRjb25zdCBhZGRMYWJlbHMgPSAoY2ZnICYmICdhZGRMYWJlbHMnIGluIGNmZykgPyAhIWNmZy5hZGRMYWJlbHMgOiB0cnVlO1xyXG5cclxuXHRcdFx0Y29uc3QgdGl0bGUgPSAoYWRkTGFiZWxzICYmIGxhYmVsKSA/IGA8Yj4ke1MuZXNjYXBlX2h0bWwobGFiZWwpfTwvYj4ke3NlcH1gIDogJyc7XHJcblxyXG5cdFx0XHRlbWl0KGAke3RpdGxlfTxmPlske3Rva2VufV08L2Y+PGJyPmApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXhwb3J0IGFkYXB0ZWQgc3RydWN0dXJlIHRvIOKAnGNvbnRlbnQgb2YgYm9va2luZyBmaWVsZHMgZGF0YeKAnS5cclxuXHRcdCAqIEBwYXJhbSB7e3BhZ2VzOkFycmF5fX0gYWRhcHRlZCAgcmVzdWx0IG9mIGFkYXB0X2J1aWxkZXJfc3RydWN0dXJlX3RvX2V4cG9ydGVyKClcclxuXHRcdCAqIEBwYXJhbSB7e25ld2xpbmU/OnN0cmluZywgYWRkTGFiZWxzPzpib29sZWFuLCBzZXA/OnN0cmluZ319IG9wdGlvbnNcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBleHBvcnRfY29udGVudChhZGFwdGVkLCBvcHRpb25zID0ge30pIHtcclxuXHJcblx0XHRcdGNvbnN0IGNmZyAgID0geyBuZXdsaW5lOiAnXFxuJywgYWRkTGFiZWxzOiB0cnVlLCBzZXA6ICc6ICcsIGluZGVudDogJ1xcdCcsIC4uLm9wdGlvbnMgfTtcclxuXHRcdFx0Y29uc3QgSU5EICAgPSAodHlwZW9mIGNmZy5pbmRlbnQgPT09ICdzdHJpbmcnKSA/IGNmZy5pbmRlbnQgOiAnXFx0JztcclxuXHRcdFx0bGV0IGRlcHRoICAgPSAwO1xyXG5cdFx0XHRjb25zdCBsaW5lcyA9IFtdO1xyXG5cclxuXHRcdFx0Y29uc3QgcHVzaCAgPSAocyA9ICcnKSA9PiBsaW5lcy5wdXNoKCBJTkQucmVwZWF0KCBkZXB0aCApICsgU3RyaW5nKCBzICkgKTtcclxuXHRcdFx0Y29uc3Qgb3BlbiAgPSAocyA9ICcnKSA9PiB7IHB1c2goIHMgKTsgZGVwdGgrKzsgfTtcclxuXHRcdFx0Y29uc3QgY2xvc2UgPSAocyA9ICcnKSA9PiB7IGRlcHRoID0gTWF0aC5tYXgoIDAsIGRlcHRoIC0gMSApOyBwdXNoKCBzICk7IH07XHJcblxyXG5cdFx0XHRjb25zdCBlbWl0ID0gKHMpID0+IHtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiBzICE9PSAnc3RyaW5nJyApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0U3RyaW5nKCBzICkuc3BsaXQoIC9cXHI/XFxuLyApLmZvckVhY2goIChsaW5lKSA9PiBwdXNoKCBsaW5lICkgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlmICggIWFkYXB0ZWQgfHwgIUFycmF5LmlzQXJyYXkoIGFkYXB0ZWQucGFnZXMgKSApIHJldHVybiAnJztcclxuXHJcblx0XHRcdGNvbnN0IHNraXBUeXBlcyA9IG5ldyBTZXQoIFsgJ2NhcHRjaGEnLCAnc3VibWl0JywgJ2RpdmlkZXInLCAnd2l6YXJkX25hdicsICdjb3N0X2NvcnJlY3Rpb25zJyBdICk7XHJcblxyXG5cdFx0XHRjb25zdCBmYWxsYmFja0xpbmUgPSAoZmllbGQpID0+IHtcclxuXHRcdFx0XHRjb25zdCB0eXBlICA9IFN0cmluZyggZmllbGQudHlwZSB8fCAnJyApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0Y29uc3QgbmFtZSAgPSBXUEJDX0JGQl9FeHBvcnRlci5jb21wdXRlX25hbWUoIHR5cGUsIGZpZWxkICk7XHJcblx0XHRcdFx0Y29uc3QgbGFiZWwgPSAodHlwZW9mIGZpZWxkLmxhYmVsID09PSAnc3RyaW5nJyAmJiBmaWVsZC5sYWJlbC50cmltKCkpID8gZmllbGQubGFiZWwudHJpbSgpIDogbmFtZTtcclxuXHRcdFx0XHRpZiAoICFuYW1lICkgcmV0dXJuO1xyXG5cdFx0XHRcdFdQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5lbWl0X2xpbmVfYm9sZF9maWVsZCggZW1pdCwgbGFiZWwsIG5hbWUsIGNmZyApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gUGVyLXR5cGUgc2Vuc2libGUgZGVmYXVsdHMgKGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhY2tzIHZpYSByZWdpc3RlcigpKVxyXG5cdFx0XHRjb25zdCBkZWZhdWx0Q29udGVudEZvciA9IChmaWVsZCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHR5cGUgPSBTdHJpbmcoIGZpZWxkLnR5cGUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICggc2tpcFR5cGVzLmhhcyggdHlwZSApICkgcmV0dXJuO1xyXG5cdFx0XHRcdC8vIFNwZWNpYWwgY2FzZXMgb3V0IG9mIHRoZSBib3g6XHJcblx0XHRcdFx0aWYgKCB0eXBlID09PSAnY2FsZW5kYXInICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSAodHlwZW9mIGZpZWxkLmxhYmVsID09PSAnc3RyaW5nJyAmJiBmaWVsZC5sYWJlbC50cmltKCkpID8gZmllbGQubGFiZWwudHJpbSgpIDogJ0RhdGVzJztcclxuXHRcdFx0XHRcdFdQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5lbWl0X2xpbmVfYm9sZF9maWVsZCggZW1pdCwgbGFiZWwsICdkYXRlcycsIGNmZyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyB0aW1lLWxpa2UgcmVzZXJ2ZWQgbmFtZXMgLT4ga2VlcCBwbGFjZWhvbGRlciB0b2tlbiBlcXVhbCB0byBuYW1lXHJcblx0XHRcdFx0Y29uc3QgcmVzZXJ2ZWQgPSBTdHJpbmcoIGZpZWxkLm5hbWUgfHwgZmllbGQuaWQgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICggWyAncmFuZ2V0aW1lJywgJ3N0YXJ0dGltZScsICdlbmR0aW1lJywgJ2R1cmF0aW9udGltZScgXS5pbmNsdWRlcyggcmVzZXJ2ZWQgKSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gKHR5cGVvZiBmaWVsZC5sYWJlbCA9PT0gJ3N0cmluZycgJiYgZmllbGQubGFiZWwudHJpbSgpKSA/IGZpZWxkLmxhYmVsLnRyaW0oKSA6IHJlc2VydmVkO1xyXG5cdFx0XHRcdFx0Ly8gS2VlcCB5b3VyIHNwZWNpYWwgdG9rZW4gZm9yIGR1cmF0aW9uIHRpbWUgaW4gY29udGVudDogW2R1cmF0aW9udGltZV92YWxdXHJcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IChyZXNlcnZlZCA9PT0gJ2R1cmF0aW9udGltZScpID8gJ2R1cmF0aW9udGltZV92YWwnIDogcmVzZXJ2ZWQ7XHJcblx0XHRcdFx0XHRXUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIuZW1pdF9saW5lX2JvbGRfZmllbGQoIGVtaXQsIGxhYmVsLCB0b2tlbiwgY2ZnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIEZhbGxiYWNrICh0ZXh0L2VtYWlsL3RlbC9udW1iZXIvdGV4dGFyZWEvc2VsZWN0L2NoZWNrYm94L3JhZGlvIGV0Yy4pXHJcblx0XHRcdFx0ZmFsbGJhY2tMaW5lKCBmaWVsZCApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gV2FsayBwYWdlcy9zZWN0aW9ucy9jb2x1bW5zL2ZpZWxkcyAoc2FtZSBvcmRlciBhcyBmb3JtKVxyXG5cdFx0XHRjb25zdCB3YWxrU2VjdGlvbiAgPSAoc2VjKSA9PiB7XHJcblx0XHRcdFx0KHNlYy5jb2x1bW5zIHx8IFtdKS5mb3JFYWNoKCAoY29sKSA9PiB7XHJcblx0XHRcdFx0XHQoY29sLmZpZWxkcyB8fCBbXSkuZm9yRWFjaCggKGYpID0+IHByb2Nlc3NGaWVsZCggZiApICk7XHJcblx0XHRcdFx0XHQoY29sLnNlY3Rpb25zIHx8IFtdKS5mb3JFYWNoKCAocykgPT4gd2Fsa1NlY3Rpb24oIHMgKSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Y29uc3QgcHJvY2Vzc0l0ZW0gID0gKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRpZiAoICFpdGVtICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlmICggaXRlbS5raW5kID09PSAnZmllbGQnICkgcHJvY2Vzc0ZpZWxkKCBpdGVtLmRhdGEgKTtcclxuXHRcdFx0XHRpZiAoIGl0ZW0ua2luZCA9PT0gJ3NlY3Rpb24nICkgd2Fsa1NlY3Rpb24oIGl0ZW0uZGF0YSApO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRjb25zdCBwcm9jZXNzRmllbGQgPSAoZmllbGQpID0+IHtcclxuXHRcdFx0XHRpZiAoICFmaWVsZCApIHJldHVybjtcclxuXHRcdFx0XHQvLyBhbGxvdyBwYWNrcyB0byBvdmVycmlkZTpcclxuXHRcdFx0XHRpZiAoIFdQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5ydW5fcmVnaXN0ZXJlZF9leHBvcnRlciggZmllbGQsIGVtaXQsIHsgY2ZnLCBjb3JlIH0gKSApIHJldHVybjtcclxuXHRcdFx0XHRkZWZhdWx0Q29udGVudEZvciggZmllbGQgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIFdyYXBwZXIgZmlyc3QgLT4gaW5uZXIgbGluZXMgd2lsbCBiZSBUQUItaW5kZW50ZWRcclxuXHRcdFx0b3BlbiggYDxkaXYgY2xhc3M9XCJzdGFuZGFyZC1jb250ZW50LWZvcm1cIj5gICk7XHJcblx0XHRcdGFkYXB0ZWQucGFnZXMuZm9yRWFjaCggKHBhZ2UpID0+IChwYWdlLml0ZW1zIHx8IFtdKS5mb3JFYWNoKCBwcm9jZXNzSXRlbSApICk7XHJcblx0XHRcdGNsb3NlKCBgPC9kaXY+YCApO1xyXG5cclxuXHRcdFx0cmV0dXJuIGxpbmVzLmpvaW4oIGNmZy5uZXdsaW5lICk7XHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gZXhwb3NlICsgcmVhZHkgZXZlbnQgZm9yIHBhY2tzIHRvIHJlZ2lzdGVyIHRoZWlyIGNvbnRlbnQgZXhwb3J0ZXJzLlxyXG5cdHdpbmRvdy5XUEJDX0JGQl9Db250ZW50RXhwb3J0ZXIgPSB3aW5kb3cuV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyIHx8IFdQQkNfQkZCX0NvbnRlbnRFeHBvcnRlcjtcclxuXHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSggJ3dwYmM6YmZiOmNvbnRlbnQtZXhwb3J0ZXItcmVhZHknLCB7fSApO1xyXG59KSgpO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxZQUFZO0VBQ1osWUFBWTs7RUFFWixNQUFNQSxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsYUFBYSxJQUFJLENBQUMsQ0FBQzs7RUFFdkM7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0FBQ0Q7QUFDQTtBQUNBO0VBQ0MsTUFBTUMsOEJBQThCLEdBQUcsQ0FBRSx1QkFBdUIsQ0FBRTs7RUFFbEU7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLFNBQVNDLDRCQUE0QkEsQ0FBQ0MsSUFBSSxFQUFFQyxlQUFlLEVBQUU7SUFDNUQsSUFBSSxDQUFDRCxJQUFJLElBQUksQ0FBQ0MsZUFBZSxFQUFFQyxNQUFNLEVBQUUsT0FBT0YsSUFBSTtJQUNsRCxJQUFJRyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0osSUFBSSxDQUFDO0lBQ3RCLEtBQUssTUFBTUssT0FBTyxJQUFJSixlQUFlLEVBQUU7TUFDdEMsSUFBSSxDQUFDSSxPQUFPLEVBQUU7TUFDZCxNQUFNQyxJQUFJLEdBQUdGLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLENBQUNFLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO01BQ2pEO01BQ0EsTUFBTUMsR0FBRyxHQUFHSCxJQUFJLENBQUNJLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUM7TUFDdkQ7TUFDQSxNQUFNQyxFQUFFLEdBQUcsSUFBSUMsTUFBTSxDQUNwQixNQUFNSCxHQUFHLHdEQUF3RCxFQUNqRSxJQUNELENBQUM7TUFDRE4sR0FBRyxHQUFHQSxHQUFHLENBQUNPLE9BQU8sQ0FBQ0MsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxQjtJQUNBLE9BQU9SLEdBQUc7RUFDWDs7RUFFQTtFQUNBLElBQUlVLDJCQUEyQixHQUFHLENBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUU7O0VBRWpFO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLFNBQVNDLHVCQUF1QkEsQ0FBRUMsZUFBZSxFQUFHO0lBQ25ELElBQUlDLGdCQUFnQixHQUFHWixNQUFNLENBQUVXLGVBQWUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxlQUFnQixDQUFDLENBQUNQLElBQUksQ0FBQyxDQUFDO0lBQ3RGLElBQUssZUFBZSxDQUFDUyxJQUFJLENBQUVELGdCQUFpQixDQUFDLEVBQUc7TUFDL0MsT0FBT0EsZ0JBQWdCLEdBQUcsSUFBSTtJQUMvQjtJQUNBLE9BQU8sNEJBQTRCLENBQUNDLElBQUksQ0FBRUQsZ0JBQWlCLENBQUMsR0FBR0EsZ0JBQWdCLEdBQUcsS0FBSztFQUN4Rjs7RUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQyxTQUFTRSx3QkFBd0JBLENBQUVILGVBQWUsRUFBRztJQUNwRCxJQUFJQyxnQkFBZ0IsR0FBR1osTUFBTSxDQUFFVyxlQUFlLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBR0EsZUFBZ0IsQ0FBQyxDQUFDUCxJQUFJLENBQUMsQ0FBQztJQUN0RixJQUFLLENBQUVRLGdCQUFnQixJQUFJLE1BQU0sS0FBS0EsZ0JBQWdCLEVBQUc7TUFDeEQsT0FBTyxNQUFNO0lBQ2Q7SUFDQSxJQUFLLGVBQWUsQ0FBQ0MsSUFBSSxDQUFFRCxnQkFBaUIsQ0FBQyxFQUFHO01BQy9DLE9BQU9BLGdCQUFnQixHQUFHLElBQUk7SUFDL0I7SUFDQSxPQUFPLGtDQUFrQyxDQUFDQyxJQUFJLENBQUVELGdCQUFpQixDQUFDLEdBQUdBLGdCQUFnQixHQUFHLE1BQU07RUFDL0Y7O0VBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0MsU0FBU0cseUJBQXlCQSxDQUFFSixlQUFlLEVBQUc7SUFDckQsSUFBSUMsZ0JBQWdCLEdBQUdaLE1BQU0sQ0FBRVcsZUFBZSxJQUFJLEVBQUcsQ0FBQztJQUN0RCxPQUFPRiwyQkFBMkIsQ0FBQ08sT0FBTyxDQUFFSixnQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHQSxnQkFBZ0IsR0FBR0gsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0VBQzFIOztFQUVBO0VBQ0EsU0FBU1EsMEJBQTBCQSxDQUFDQyxHQUFHLEVBQUU7SUFDeEMsSUFBSyxDQUFDQSxHQUFHLElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsRUFBRztNQUN0QyxPQUFPLEtBQUs7SUFDYjtJQUNBLElBQUlDLElBQUksR0FBRyxDQUNWLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFDckQsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQ2hFLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFDNUQsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUNoRjtJQUNELEtBQU0sSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxJQUFJLENBQUNyQixNQUFNLEVBQUVzQixDQUFDLEVBQUUsRUFBRztNQUN2QyxJQUFJQyxDQUFDLEdBQUdGLElBQUksQ0FBQ0MsQ0FBQyxDQUFDO01BQ2YsSUFBS0YsR0FBRyxDQUFDRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUlyQixNQUFNLENBQUVrQixHQUFHLENBQUNHLENBQUMsQ0FBRSxDQUFDLENBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRztRQUN2RCxPQUFPLElBQUk7TUFDWjtJQUNEO0lBQ0EsT0FBTyxLQUFLO0VBQ2I7O0VBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQyxTQUFTa0IscUJBQXFCQSxDQUFDQyxHQUFHLEVBQUU7SUFDbkMsSUFBSyxDQUFDQSxHQUFHLEVBQUcsT0FBTyxFQUFFO0lBQ3JCLElBQUtDLEtBQUssQ0FBQ0MsT0FBTyxDQUFFRixHQUFJLENBQUMsRUFBRyxPQUFPQSxHQUFHLENBQUNHLE1BQU0sQ0FBRSxVQUFVQyxDQUFDLEVBQUU7TUFDM0QsT0FBT0EsQ0FBQyxJQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRO0lBQ2xDLENBQUUsQ0FBQztJQUVILElBQUssT0FBT0osR0FBRyxLQUFLLFFBQVEsRUFBRztNQUM5QixJQUFJO1FBQ0gsSUFBSUssR0FBRyxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBRVAsR0FBSSxDQUFDO1FBQzNCLE9BQU9DLEtBQUssQ0FBQ0MsT0FBTyxDQUFFRyxHQUFJLENBQUMsR0FBR0EsR0FBRyxDQUFDRixNQUFNLENBQUUsVUFBVUMsQ0FBQyxFQUFFO1VBQ3RELE9BQU9BLENBQUMsSUFBSSxPQUFPQSxDQUFDLEtBQUssUUFBUTtRQUNsQyxDQUFFLENBQUMsR0FBRyxFQUFFO01BQ1QsQ0FBQyxDQUFDLE9BQVFJLEVBQUUsRUFBRztRQUNkLE9BQU8sRUFBRTtNQUNWO0lBQ0Q7SUFDQSxPQUFPLEVBQUU7RUFDVjs7RUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLFNBQVNDLGtCQUFrQkEsQ0FBQ2QsR0FBRyxFQUFFO0lBQ2hDLElBQUssQ0FBQ0EsR0FBRyxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUcsT0FBTyxFQUFFO0lBRWhELElBQUllLEdBQUcsR0FBRztNQUNUQyxHQUFHLEVBQUksb0JBQW9CO01BQzNCQyxJQUFJLEVBQUcscUJBQXFCO01BQzVCQyxFQUFFLEVBQUssbUJBQW1CO01BQzFCQyxFQUFFLEVBQUssbUJBQW1CO01BQzFCQyxHQUFHLEVBQUksb0JBQW9CO01BQzNCQyxPQUFPLEVBQUUsd0JBQXdCO01BQ2pDQyxNQUFNLEVBQUcsdUJBQXVCO01BQ2hDQyxXQUFXLEVBQUssNEJBQTRCO01BQzVDQyxhQUFhLEVBQUcsOEJBQThCO01BQzlDQyxjQUFjLEVBQUUsK0JBQStCO01BQy9DQyxZQUFZLEVBQUksNkJBQTZCO01BQzdDQyxVQUFVLEVBQU0sMkJBQTJCO01BQzNDQyxZQUFZLEVBQUksNkJBQTZCO01BQzdDQyxhQUFhLEVBQUcsOEJBQThCO01BQzlDQyxXQUFXLEVBQUssNEJBQTRCO01BQzVDQyxTQUFTLEVBQU8sMEJBQTBCO01BQzFDQyxVQUFVLEVBQU0sMkJBQTJCO01BQzNDQyxRQUFRLEVBQVEseUJBQXlCO01BQ3pDQyxVQUFVLEVBQU0sMkJBQTJCO01BQzNDQyxVQUFVLEVBQU0sMkJBQTJCO01BQzNDQyxFQUFFLEVBQUssbUJBQW1CO01BQzFCQyxLQUFLLEVBQUU7SUFDUixDQUFDO0lBRUQsSUFBSUMsS0FBSyxHQUFHLEVBQUU7SUFFZCxLQUFNLElBQUluQyxDQUFDLElBQUlILEdBQUcsRUFBRztNQUNwQixJQUFLLENBQUN1QyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUUxQyxHQUFHLEVBQUVHLENBQUUsQ0FBQyxFQUFHO01BQ3ZEO01BQ0EsSUFBSyxXQUFXLEtBQUtBLENBQUMsRUFBRztNQUN6QixJQUFJd0MsQ0FBQyxHQUFHM0MsR0FBRyxDQUFDRyxDQUFDLENBQUM7TUFDZCxJQUFLd0MsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxLQUFLLEVBQUUsRUFBRztNQUM3QixJQUFLLENBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFFLENBQUM3QyxPQUFPLENBQUVLLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFHO1FBQzdKd0MsQ0FBQyxHQUFHbkQsdUJBQXVCLENBQUVtRCxDQUFFLENBQUM7TUFDakMsQ0FBQyxNQUFNLElBQUssV0FBVyxLQUFLeEMsQ0FBQyxJQUFJLFlBQVksS0FBS0EsQ0FBQyxFQUFHO1FBQ3JEd0MsQ0FBQyxHQUFHL0Msd0JBQXdCLENBQUUrQyxDQUFFLENBQUM7TUFDbEMsQ0FBQyxNQUFNLElBQUssQ0FBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBRSxDQUFDN0MsT0FBTyxDQUFFSyxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRztRQUM1RXdDLENBQUMsR0FBRzlDLHlCQUF5QixDQUFFOEMsQ0FBRSxDQUFDO01BQ25DO01BRUEsSUFBSUMsUUFBUSxHQUFHN0IsR0FBRyxDQUFDWixDQUFDLENBQUMsSUFBSyxpQkFBaUIsR0FBR3JCLE1BQU0sQ0FBRXFCLENBQUUsQ0FBQyxDQUFDZixPQUFPLENBQUUsZUFBZSxFQUFFLEVBQUcsQ0FBQyxDQUFDSCxXQUFXLENBQUMsQ0FBRTtNQUN2R3FELEtBQUssQ0FBQ08sSUFBSSxDQUFFRCxRQUFRLEdBQUcsSUFBSSxHQUFHOUQsTUFBTSxDQUFFNkQsQ0FBRSxDQUFFLENBQUM7SUFDNUM7O0lBRUE7SUFDQUwsS0FBSyxDQUFDTyxJQUFJLENBQUUscUJBQXNCLENBQUM7SUFFbkMsT0FBT1AsS0FBSyxDQUFDUSxJQUFJLENBQUUsR0FBSSxDQUFDLElBQUlSLEtBQUssQ0FBQzFELE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ3JEOztFQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQyxTQUFTbUUsMEJBQTBCQSxDQUFDQyxXQUFXLEVBQUVDLGdCQUFnQixFQUFFO0lBQ2xFLElBQUssT0FBT0QsV0FBVyxLQUFLLFFBQVEsRUFBRztNQUN0QyxJQUFJRSxDQUFDLEdBQUdGLFdBQVcsQ0FBQzlELElBQUksQ0FBQyxDQUFDO01BQzFCLElBQUtnRSxDQUFDLENBQUNDLFFBQVEsQ0FBRSxHQUFJLENBQUMsRUFBRztRQUN4QixJQUFJQyxDQUFDLEdBQUdDLFVBQVUsQ0FBRUgsQ0FBRSxDQUFDO1FBQ3ZCLElBQUtJLFFBQVEsQ0FBRUYsQ0FBRSxDQUFDLEVBQUcsT0FBT0EsQ0FBQztNQUM5QjtJQUNEO0lBQ0EsSUFBSyxPQUFPSixXQUFXLEtBQUssUUFBUSxJQUFJTSxRQUFRLENBQUVOLFdBQVksQ0FBQyxFQUFHO01BQ2pFLE9BQU9BLFdBQVc7SUFDbkI7SUFDQSxPQUFPQyxnQkFBZ0I7RUFDeEI7O0VBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQyxTQUFTTSx1QkFBdUJBLENBQUNDLE9BQU8sRUFBRUMsV0FBVyxHQUFHLENBQUMsRUFBRTtJQUUxRCxNQUFNQyxDQUFDLEdBQUdGLE9BQU8sSUFBSUEsT0FBTyxDQUFDNUUsTUFBTSxHQUFHNEUsT0FBTyxDQUFDNUUsTUFBTSxHQUFHLENBQUM7SUFFeEQsTUFBTXlCLEdBQUcsR0FBR21ELE9BQU8sQ0FBQ3pDLEdBQUcsQ0FBRzRDLEdBQUcsSUFBSztNQUNqQyxNQUFNQyxDQUFDLEdBQUdELEdBQUcsSUFBSUEsR0FBRyxDQUFDRSxLQUFLLElBQUksSUFBSSxHQUFHL0UsTUFBTSxDQUFFNkUsR0FBRyxDQUFDRSxLQUFNLENBQUMsQ0FBQzNFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtNQUNwRSxNQUFNa0UsQ0FBQyxHQUFHUSxDQUFDLENBQUNULFFBQVEsQ0FBRSxHQUFJLENBQUMsR0FBR0UsVUFBVSxDQUFFTyxDQUFFLENBQUMsR0FBR0EsQ0FBQyxHQUFHUCxVQUFVLENBQUVPLENBQUUsQ0FBQyxHQUFHRSxHQUFHO01BQ3pFLE9BQU9DLE1BQU0sQ0FBQ1QsUUFBUSxDQUFFRixDQUFFLENBQUMsR0FBR0EsQ0FBQyxHQUFHLEdBQUcsR0FBR00sQ0FBQztJQUMxQyxDQUFFLENBQUM7SUFFSCxNQUFNTSxPQUFPLEdBQU8zRCxHQUFHLENBQUM0RCxNQUFNLENBQUUsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUtELENBQUMsR0FBR0MsQ0FBQyxFQUFFLENBQUUsQ0FBQyxJQUFJLEdBQUc7SUFDM0QsTUFBTUMsRUFBRSxHQUFZTCxNQUFNLENBQUNULFFBQVEsQ0FBRSxDQUFDRyxXQUFZLENBQUMsR0FBRyxDQUFDQSxXQUFXLEdBQUcsQ0FBQztJQUN0RSxNQUFNWSxVQUFVLEdBQUlDLElBQUksQ0FBQ0MsR0FBRyxDQUFFLENBQUMsRUFBRWIsQ0FBQyxHQUFHLENBQUUsQ0FBQyxHQUFHVSxFQUFFO0lBQzdDLE1BQU1JLFNBQVMsR0FBS0YsSUFBSSxDQUFDQyxHQUFHLENBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBR0YsVUFBVyxDQUFDO0lBQ25ELE1BQU1JLFdBQVcsR0FBR0QsU0FBUyxHQUFHUixPQUFPO0lBRXZDLE9BQU8zRCxHQUFHLENBQUNVLEdBQUcsQ0FBR3FDLENBQUMsSUFBS2tCLElBQUksQ0FBQ0MsR0FBRyxDQUFFLENBQUMsRUFBRW5CLENBQUMsR0FBR3FCLFdBQVksQ0FBRSxDQUFDO0VBQ3hEOztFQUVBO0VBQ0EsU0FBU0MsbUNBQW1DQSxDQUFDQyxTQUFTLEVBQUU7SUFFekQ7O0lBRUU7SUFDQTtJQUNBLElBQUssQ0FBRXJFLEtBQUssQ0FBQ0MsT0FBTyxDQUFFb0UsU0FBVSxDQUFDLElBQUlBLFNBQVMsQ0FBQy9GLE1BQU0sS0FBSyxDQUFDLEVBQUc7TUFDN0QsT0FBTztRQUFFZ0csS0FBSyxFQUFFLENBQUU7VUFBRUMsS0FBSyxFQUFFO1FBQUcsQ0FBQztNQUFHLENBQUM7SUFDcEM7SUFFQSxNQUFNQyxpQkFBaUIsR0FBSUMsSUFBSSxJQUFLO01BQ25DLElBQUssQ0FBQ3pFLEtBQUssQ0FBQ0MsT0FBTyxDQUFFd0UsSUFBSyxDQUFDLEVBQUcsT0FBTyxFQUFFO01BQ3ZDLE9BQU9BLElBQUksQ0FBQ2hFLEdBQUcsQ0FBR2lFLENBQUMsSUFBSztRQUN2QixJQUFLLE9BQU9BLENBQUMsS0FBSyxRQUFRLEVBQUcsT0FBTztVQUFFQyxLQUFLLEVBQUVELENBQUM7VUFBRUUsS0FBSyxFQUFFRixDQUFDO1VBQUVHLFFBQVEsRUFBRTtRQUFNLENBQUM7UUFDM0UsSUFBS0gsQ0FBQyxJQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRLEVBQUc7VUFDakMsT0FBTztZQUNOQyxLQUFLLEVBQUtuRyxNQUFNLENBQUVrRyxDQUFDLENBQUNDLEtBQUssSUFBSUQsQ0FBQyxDQUFDRSxLQUFLLElBQUksRUFBRyxDQUFDO1lBQzVDQSxLQUFLLEVBQUtwRyxNQUFNLENBQUVrRyxDQUFDLENBQUNFLEtBQUssSUFBSUYsQ0FBQyxDQUFDQyxLQUFLLElBQUksRUFBRyxDQUFDO1lBQzVDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDSCxDQUFDLENBQUNHO1VBQ2YsQ0FBQztRQUNGO1FBQ0EsT0FBTztVQUFFRixLQUFLLEVBQUVuRyxNQUFNLENBQUVrRyxDQUFFLENBQUM7VUFBRUUsS0FBSyxFQUFFcEcsTUFBTSxDQUFFa0csQ0FBRSxDQUFDO1VBQUVHLFFBQVEsRUFBRTtRQUFNLENBQUM7TUFDbkUsQ0FBRSxDQUFDO0lBQ0osQ0FBQzs7SUFFRDtJQUNBO0lBQ0E7SUFDQSxNQUFNQyxZQUFZLEdBQUlDLEdBQUcsSUFBSztNQUM3QixNQUFNQyxrQkFBa0IsR0FBR2xGLHFCQUFxQixDQUFFaUYsR0FBRyxJQUFJQSxHQUFHLENBQUNFLFVBQVcsQ0FBQztNQUV6RSxPQUFPO1FBQ05DLEVBQUUsRUFBU0gsR0FBRyxFQUFFRyxFQUFFO1FBQ2xCQyxPQUFPLEVBQUlKLEdBQUcsRUFBRUksT0FBTyxJQUFJLEVBQUU7UUFDN0JDLFFBQVEsRUFBR0wsR0FBRyxFQUFFSyxRQUFRLElBQUksRUFBRTtRQUM5QmxDLE9BQU8sRUFBSSxDQUFDNkIsR0FBRyxFQUFFN0IsT0FBTyxJQUFJLEVBQUUsRUFBRXpDLEdBQUcsQ0FBRSxDQUFDNEMsR0FBRyxFQUFFZ0MsU0FBUyxLQUFLO1VBQ3hELE1BQU1kLEtBQUssR0FBR3ZFLEtBQUssQ0FBQ0MsT0FBTyxDQUFFb0QsR0FBRyxFQUFFa0IsS0FBTSxDQUFDLEdBQ3RDbEIsR0FBRyxDQUFDa0IsS0FBSyxHQUNULENBQ0QsR0FBRyxDQUFDbEIsR0FBRyxFQUFFaUMsTUFBTSxJQUFJLEVBQUUsRUFBRTdFLEdBQUcsQ0FBRzhFLENBQUMsS0FBTTtZQUFFQyxJQUFJLEVBQUUsT0FBTztZQUFFQyxJQUFJLEVBQUVGO1VBQUUsQ0FBQyxDQUFFLENBQUMsRUFDakUsR0FBRyxDQUFDbEMsR0FBRyxFQUFFcUMsUUFBUSxJQUFJLEVBQUUsRUFBRWpGLEdBQUcsQ0FBR21DLENBQUMsS0FBTTtZQUFFNEMsSUFBSSxFQUFFLFNBQVM7WUFBRUMsSUFBSSxFQUFFN0M7VUFBRSxDQUFDLENBQUUsQ0FBQyxDQUNyRTtVQUVGLE1BQU0wQyxNQUFNLEdBQUdmLEtBQUssQ0FDbEJyRSxNQUFNLENBQUd5RixFQUFFLElBQUtBLEVBQUUsSUFBSUEsRUFBRSxDQUFDSCxJQUFJLEtBQUssT0FBUSxDQUFDLENBQzNDL0UsR0FBRyxDQUFHa0YsRUFBRSxLQUFNO1lBQUUsR0FBR0EsRUFBRSxDQUFDRixJQUFJO1lBQUVHLE9BQU8sRUFBRXBCLGlCQUFpQixDQUFFbUIsRUFBRSxDQUFDRixJQUFJLEVBQUVHLE9BQVE7VUFBRSxDQUFDLENBQUUsQ0FBQztVQUVqRixNQUFNRixRQUFRLEdBQUduQixLQUFLLENBQ3BCckUsTUFBTSxDQUFHeUYsRUFBRSxJQUFLQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0gsSUFBSSxLQUFLLFNBQVUsQ0FBQyxDQUM3Qy9FLEdBQUcsQ0FBR2tGLEVBQUUsSUFBS2IsWUFBWSxDQUFFYSxFQUFFLENBQUNGLElBQUssQ0FBRSxDQUFDO1VBRXhDLE9BQU87WUFDTmxDLEtBQUssRUFBUUYsR0FBRyxFQUFFRSxLQUFLLElBQUksTUFBTTtZQUNqQ3NDLEtBQUssRUFBUXhDLEdBQUcsRUFBRXdDLEtBQUssSUFBSSxJQUFJO1lBQy9CWixVQUFVLEVBQUdELGtCQUFrQixDQUFFSyxTQUFTLENBQUUsSUFBSSxJQUFJO1lBQUk7WUFDeERDLE1BQU07WUFDTkk7VUFDRCxDQUFDO1FBQ0YsQ0FBRTtNQUNILENBQUM7SUFDRixDQUFDO0lBR0QsTUFBTXBCLEtBQUssR0FBR0QsU0FBUyxDQUFDNUQsR0FBRyxDQUFHcUYsSUFBSSxJQUFLO01BQ3RDLE1BQU12QixLQUFLLEdBQUcsRUFBRTtNQUNoQixDQUFDdUIsSUFBSSxFQUFFQyxPQUFPLElBQUksRUFBRSxFQUFFQyxPQUFPLENBQUdDLElBQUksSUFBSztRQUN4QyxJQUFLLENBQUNBLElBQUksRUFBRztRQUNiLElBQUtBLElBQUksQ0FBQ1QsSUFBSSxLQUFLLFNBQVMsSUFBSVMsSUFBSSxDQUFDUixJQUFJLEVBQUc7VUFDM0NsQixLQUFLLENBQUNoQyxJQUFJLENBQUU7WUFBRTJELElBQUksRUFBRSxTQUFTO1lBQUVULElBQUksRUFBRVgsWUFBWSxDQUFFbUIsSUFBSSxDQUFDUixJQUFLO1VBQUUsQ0FBRSxDQUFDO1FBQ25FLENBQUMsTUFBTSxJQUFLUSxJQUFJLENBQUNULElBQUksS0FBSyxPQUFPLElBQUlTLElBQUksQ0FBQ1IsSUFBSSxFQUFHO1VBQ2hEbEIsS0FBSyxDQUFDaEMsSUFBSSxDQUFFO1lBQ1gyRCxJQUFJLEVBQUUsT0FBTztZQUNiVCxJQUFJLEVBQUU7Y0FBRSxHQUFHUSxJQUFJLENBQUNSLElBQUk7Y0FBRUcsT0FBTyxFQUFFcEIsaUJBQWlCLENBQUV5QixJQUFJLENBQUNSLElBQUksQ0FBQ0csT0FBUTtZQUFFO1VBQ3ZFLENBQUUsQ0FBQztRQUNKO01BQ0QsQ0FBRSxDQUFDO01BQ0gsT0FBTztRQUFFckI7TUFBTSxDQUFDO0lBQ2pCLENBQUUsQ0FBQztJQUVILE9BQU87TUFBRUQ7SUFBTSxDQUFDO0VBQ2pCOztFQUdBO0VBQ0EsTUFBTTZCLGlCQUFpQixDQUFDO0lBRXZCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFDRSxPQUFPQyxVQUFVLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7O0lBRTdCO0FBQ0Y7QUFDQTtBQUNBO0lBQ0UsT0FBT0MsY0FBY0EsQ0FBRWxHLEdBQUcsRUFBRztNQUM1QixJQUFJLENBQUNnRyxVQUFVLEdBQUcsSUFBSUMsR0FBRyxDQUN4QixDQUFDckcsS0FBSyxDQUFDQyxPQUFPLENBQUVHLEdBQUksQ0FBQyxHQUFHQSxHQUFHLEdBQUcsRUFBRSxFQUFFSyxHQUFHLENBQUcyQyxDQUFDLElBQUs1RSxNQUFNLENBQUU0RSxDQUFFLENBQUMsQ0FBQ3pFLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFFLENBQUMsQ0FBQ3NCLE1BQU0sQ0FBRXFHLE9BQVEsQ0FDbEcsQ0FBQztJQUNGOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0lBQ0UsT0FBT0MsY0FBY0EsQ0FBRUMsS0FBSyxFQUFHO01BQzlCLENBQUV6RyxLQUFLLENBQUNDLE9BQU8sQ0FBRXdHLEtBQU0sQ0FBQyxHQUFHQSxLQUFLLEdBQUcsQ0FBRUEsS0FBSyxDQUFFLEVBQzFDaEcsR0FBRyxDQUFHMkMsQ0FBQyxJQUFLNUUsTUFBTSxDQUFFNEUsQ0FBRSxDQUFDLENBQUN6RSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBRSxDQUFDLENBQzlDc0IsTUFBTSxDQUFFcUcsT0FBUSxDQUFDLENBQ2pCUCxPQUFPLENBQUc1QyxDQUFDLElBQUssSUFBSSxDQUFDZ0QsVUFBVSxDQUFDTSxHQUFHLENBQUV0RCxDQUFFLENBQUUsQ0FBQztJQUM3Qzs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtJQUNFLE9BQU91RCxnQkFBZ0JBLENBQUVqSSxJQUFJLEVBQUc7TUFDL0IsSUFBSyxDQUFFQSxJQUFJLEVBQUc7UUFBRTtNQUFRO01BQ3hCLElBQUksQ0FBQzBILFVBQVUsQ0FBQ1EsTUFBTSxDQUFFcEksTUFBTSxDQUFFRSxJQUFLLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUUsQ0FBQztJQUM5RDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBT2lJLGVBQWVBLENBQUV6SSxJQUFJLEVBQUc7TUFDOUIsT0FBT0QsNEJBQTRCLENBQUVDLElBQUksRUFBRTRCLEtBQUssQ0FBQzhHLElBQUksQ0FBRSxJQUFJLENBQUNWLFVBQVcsQ0FBRSxDQUFDO0lBQzNFOztJQUdBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBT1csV0FBV0EsQ0FBQ0MsT0FBTyxFQUFFcEIsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQ3pDO01BQ0EsTUFBTXFCLEdBQUcsR0FBRztRQUFFQyxPQUFPLEVBQUUsSUFBSTtRQUFFQyxTQUFTLEVBQUUsSUFBSTtRQUFFQyxVQUFVLEVBQUUsQ0FBQztRQUFFQyxNQUFNLEVBQUUsSUFBSTtRQUFFLEdBQUd6QjtNQUFRLENBQUM7TUFDdkYsTUFBTTBCLEdBQUcsR0FBSSxPQUFPTCxHQUFHLENBQUNJLE1BQU0sS0FBSyxRQUFRLEdBQUlKLEdBQUcsQ0FBQ0ksTUFBTSxHQUFHLElBQUk7TUFFaEUsSUFBSUUsS0FBSyxHQUFLLENBQUM7TUFDZixNQUFNQyxLQUFLLEdBQUcsRUFBRTtNQUNoQixNQUFNakYsSUFBSSxHQUFJQSxDQUFDSyxDQUFDLEdBQUcsRUFBRSxLQUFLNEUsS0FBSyxDQUFDakYsSUFBSSxDQUFFK0UsR0FBRyxDQUFDRyxNQUFNLENBQUVGLEtBQU0sQ0FBQyxHQUFHL0ksTUFBTSxDQUFFb0UsQ0FBRSxDQUFFLENBQUM7TUFDekUsTUFBTThFLElBQUksR0FBSUEsQ0FBQzlFLENBQUMsR0FBRyxFQUFFLEtBQUs7UUFDekJMLElBQUksQ0FBRUssQ0FBRSxDQUFDO1FBQ1QyRSxLQUFLLEVBQUU7TUFDUixDQUFDO01BQ0QsTUFBTUksS0FBSyxHQUFHQSxDQUFDL0UsQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUN6QjJFLEtBQUssR0FBR3ZELElBQUksQ0FBQ0MsR0FBRyxDQUFFLENBQUMsRUFBRXNELEtBQUssR0FBRyxDQUFFLENBQUM7UUFDaENoRixJQUFJLENBQUVLLENBQUUsQ0FBQztNQUNWLENBQUM7TUFDRCxNQUFNZ0YsS0FBSyxHQUFHQSxDQUFBLEtBQU07UUFDbkJKLEtBQUssQ0FBQ2pGLElBQUksQ0FBRSxFQUFHLENBQUM7TUFDakIsQ0FBQztNQUVELElBQUssQ0FBQ3lFLE9BQU8sSUFBSSxDQUFDaEgsS0FBSyxDQUFDQyxPQUFPLENBQUUrRyxPQUFPLENBQUMxQyxLQUFNLENBQUMsRUFBRyxPQUFPLEVBQUU7O01BRTVEO01BQ0EsTUFBTUEsS0FBSyxHQUFHMEMsT0FBTyxDQUFDMUMsS0FBSyxDQUFDaEcsTUFBTSxHQUFHMEksT0FBTyxDQUFDMUMsS0FBSyxHQUFHLENBQUU7UUFBRUMsS0FBSyxFQUFFO01BQUcsQ0FBQyxDQUFFO01BRXRFLE1BQU1zRCxHQUFHLEdBQUc7UUFBRUMsT0FBTyxFQUFFLElBQUl6QixHQUFHLENBQUM7TUFBRSxDQUFDO01BRWxDcUIsSUFBSSxDQUFFLDJEQUE0RCxDQUFDOztNQUVuRTtNQUNBLE1BQU1LLElBQUksR0FBRztRQUFFQyxPQUFPLEVBQUUsQ0FBQztRQUFFQyxPQUFPLEVBQUUsQ0FBQztRQUFFQyxNQUFNLEVBQUUsQ0FBQztRQUFFQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQUVDLE1BQU0sRUFBRTtNQUFFLENBQUM7TUFFbEY5RCxLQUFLLENBQUMwQixPQUFPLENBQUUsQ0FBQ0YsSUFBSSxFQUFFdUMsVUFBVSxLQUFLO1FBQ3BDLE1BQU1DLFFBQVEsR0FBR0QsVUFBVSxLQUFLLENBQUM7UUFDakMsTUFBTUUsUUFBUSxHQUFHRixVQUFVLEdBQUcsQ0FBQztRQUUvQixNQUFNRyxZQUFZLEdBQUdGLFFBQVEsR0FBRyxFQUFFLEdBQUcsMEJBQTBCO1FBQy9ELE1BQU1HLFlBQVksR0FBR0gsUUFBUSxHQUFHLEVBQUUsR0FBRyxtQ0FBbUM7UUFDeEVaLElBQUksQ0FBRSxnRUFBZ0VhLFFBQVEsR0FBR0MsWUFBWSxJQUFJQyxZQUFZLEdBQUksQ0FBQztRQUVsSCxDQUFDM0MsSUFBSSxDQUFDdkIsS0FBSyxJQUFJLEVBQUUsRUFBRXlCLE9BQU8sQ0FBR0MsSUFBSSxJQUFLO1VBQ3JDLElBQUtBLElBQUksQ0FBQ0MsSUFBSSxLQUFLLFNBQVMsRUFBRztZQUM5QkMsaUJBQWlCLENBQUN1QyxjQUFjLENBQUV6QyxJQUFJLENBQUNSLElBQUksRUFBRTtjQUFFaUMsSUFBSTtjQUFFQyxLQUFLO2NBQUVwRixJQUFJO2NBQUVxRjtZQUFNLENBQUMsRUFBRVgsR0FBRyxFQUFFYyxJQUFJLEVBQUVGLEdBQUksQ0FBQztZQUMzRjtVQUNELENBQUMsTUFBTSxJQUFLNUIsSUFBSSxDQUFDQyxJQUFJLEtBQUssT0FBTyxFQUFHO1lBQ25Dd0IsSUFBSSxDQUFFLEtBQU0sQ0FBQztZQUNiQSxJQUFJLENBQUUsS0FBTSxDQUFDO1lBQ2J2QixpQkFBaUIsQ0FBQ3dDLGlCQUFpQixDQUFFMUMsSUFBSSxDQUFDUixJQUFJLEVBQUU7Y0FBRWlDLElBQUk7Y0FBRUMsS0FBSztjQUFFcEYsSUFBSTtjQUFFcUY7WUFBTSxDQUFDLEVBQUVYLEdBQUcsRUFBRWMsSUFBSSxFQUFFRixHQUFJLENBQUM7WUFDOUZGLEtBQUssQ0FBRSxNQUFPLENBQUM7WUFDZkEsS0FBSyxDQUFFLE1BQU8sQ0FBQztZQUNmO1VBQ0Q7UUFDRCxDQUFFLENBQUM7UUFFSEEsS0FBSyxDQUFFLFFBQVMsQ0FBQztNQUNsQixDQUFFLENBQUM7TUFFSEEsS0FBSyxDQUFFLFFBQVMsQ0FBQztNQUNqQixPQUFPeEIsaUJBQWlCLENBQUNVLGVBQWUsQ0FBRVcsS0FBSyxDQUFDaEYsSUFBSSxDQUFFeUUsR0FBRyxDQUFDQyxPQUFRLENBQUUsQ0FBQztJQUN0RTs7SUFHQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFLE9BQU8wQixVQUFVQSxDQUFFdkUsU0FBUyxFQUFFdUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFHO01BRTVDO01BQ0EsTUFBTW9CLE9BQU8sR0FBRzVDLG1DQUFtQyxDQUFFQyxTQUFTLElBQUksRUFBRyxDQUFDOztNQUV0RTtNQUNBLE1BQU1sQixXQUFXLEdBQU95QyxPQUFPLElBQUksT0FBT0EsT0FBTyxDQUFDd0IsVUFBVSxLQUFLLFFBQVEsR0FBS3hCLE9BQU8sQ0FBQ3dCLFVBQVUsR0FBRyxDQUFDO01BQ3BHLE1BQU15QixhQUFhLEdBQUcxQyxpQkFBaUIsQ0FBQ1ksV0FBVyxDQUNsREMsT0FBTyxFQUNQO1FBQ0NHLFNBQVMsRUFBRyxJQUFJO1FBQ2hCQyxVQUFVLEVBQUVqRTtNQUNiLENBQ0QsQ0FBQzs7TUFFRDtNQUNBLElBQUkyRixXQUFXLEdBQUcsRUFBRTtNQUNwQixJQUNDOUssTUFBTSxDQUFDK0ssd0JBQXdCLElBQy9CLE9BQU8vSyxNQUFNLENBQUMrSyx3QkFBd0IsQ0FBQ0MsY0FBYyxLQUFLLFVBQVUsRUFDbkU7UUFDREYsV0FBVyxHQUFHOUssTUFBTSxDQUFDK0ssd0JBQXdCLENBQUNDLGNBQWMsQ0FDM0RoQyxPQUFPLEVBQ1A7VUFDQ0csU0FBUyxFQUFFLElBQUk7VUFDZjhCLEdBQUcsRUFBUTtRQUNaLENBQ0QsQ0FBQztNQUNGO01BRUEsT0FBTztRQUNOSixhQUFhLEVBQUVBLGFBQWEsSUFBSSxFQUFFO1FBQ2xDQyxXQUFXLEVBQUlBLFdBQVcsSUFBSSxFQUFFO1FBQ2hDekUsU0FBUyxFQUFNQSxTQUFTLElBQUksRUFBRTtRQUM5QjJDLE9BQU8sRUFBUUE7TUFDaEIsQ0FBQztJQUNGOztJQUVBO0lBQ0E7SUFDQTtJQUNBLE9BQU8wQixjQUFjQSxDQUFDUSxPQUFPLEVBQUVDLEVBQUUsRUFBRWxDLEdBQUcsRUFBRWMsSUFBSSxFQUFFRixHQUFHLEVBQUU7TUFFbERFLElBQUksR0FBR0EsSUFBSSxJQUFJO1FBQUVDLE9BQU8sRUFBRSxDQUFDO1FBQUVDLE9BQU8sRUFBRSxDQUFDO1FBQUVDLE1BQU0sRUFBRSxDQUFDO1FBQUVDLGdCQUFnQixFQUFFLENBQUM7UUFBRUMsTUFBTSxFQUFFO01BQUUsQ0FBQztNQUNwRlAsR0FBRyxHQUFJQSxHQUFHLElBQUk7UUFBRUMsT0FBTyxFQUFFLElBQUl6QixHQUFHLENBQUM7TUFBRSxDQUFDO01BRXBDLE1BQU07UUFBRXFCLElBQUk7UUFBRUM7TUFBTSxDQUFDLEdBQUd3QixFQUFFO01BRTFCLE1BQU1DLElBQUksR0FBR3BKLEtBQUssQ0FBQ0MsT0FBTyxDQUFFaUosT0FBTyxDQUFDaEcsT0FBUSxDQUFDLElBQUlnRyxPQUFPLENBQUNoRyxPQUFPLENBQUM1RSxNQUFNLEdBQ3BFNEssT0FBTyxDQUFDaEcsT0FBTyxHQUNmLENBQUU7UUFBRUssS0FBSyxFQUFFLE1BQU07UUFBRStCLE1BQU0sRUFBRSxFQUFFO1FBQUVJLFFBQVEsRUFBRTtNQUFHLENBQUMsQ0FBRTs7TUFFbEQ7TUFDQSxJQUFJMkQsYUFBYSxHQUFHRCxJQUFJLENBQUNFLElBQUksQ0FBRSxVQUFVakcsR0FBRyxFQUFFO1FBQUUsT0FBTzVELDBCQUEwQixDQUFFNEQsR0FBRyxJQUFJQSxHQUFHLENBQUM0QixVQUFXLENBQUM7TUFBRSxDQUFFLENBQUM7TUFDL0csSUFBSXNFLGVBQWUsR0FBR0YsYUFBYSxHQUFHLDRCQUE0QixHQUFHLEVBQUU7TUFDdkUsSUFBSUcsZ0JBQWdCLEdBQUdyRCxpQkFBaUIsQ0FBQ3NELGtCQUFrQixDQUFFUCxPQUFPLEVBQUVyQixHQUFJLENBQUM7TUFFM0VILElBQUksQ0FBRSxLQUFLOEIsZ0JBQWdCLEdBQUdELGVBQWUsR0FBSSxDQUFDO01BRWxELE1BQU1HLEtBQUssR0FBTXpHLHVCQUF1QixDQUFFbUcsSUFBSSxFQUFFbkMsR0FBRyxDQUFDRyxVQUFXLENBQUM7TUFDaEUsTUFBTXVDLFFBQVEsR0FBRzVMLElBQUksQ0FBQzZMLGlCQUFpQixDQUFDQyxXQUFXO01BRW5EVCxJQUFJLENBQUNwRCxPQUFPLENBQUUsQ0FBQzNDLEdBQUcsRUFBRXlHLEdBQUcsS0FBSztRQUMzQjtRQUNBLElBQUlDLFNBQVMsR0FBR3RILDBCQUEwQixDQUFFWSxHQUFHLElBQUlBLEdBQUcsQ0FBQ0UsS0FBSyxFQUFFRSxNQUFNLENBQUNULFFBQVEsQ0FBRTBHLEtBQUssQ0FBQ0ksR0FBRyxDQUFFLENBQUMsR0FBRyxDQUFDSixLQUFLLENBQUNJLEdBQUcsQ0FBQyxHQUFHLEdBQUksQ0FBQzs7UUFFakg7UUFDQSxJQUFJRSxXQUFXLEdBQUcsRUFBRTtRQUVwQixJQUFLM0csR0FBRyxJQUFJLE9BQU9BLEdBQUcsQ0FBQ3dDLEtBQUssS0FBSyxRQUFRLElBQUl4QyxHQUFHLENBQUN3QyxLQUFLLENBQUNqSCxJQUFJLENBQUMsQ0FBQyxFQUFHO1VBQy9Eb0wsV0FBVyxDQUFDekgsSUFBSSxDQUFFYyxHQUFHLENBQUN3QyxLQUFLLENBQUNqSCxJQUFJLENBQUMsQ0FBQyxDQUFDRSxPQUFPLENBQUUsUUFBUSxFQUFFLEVBQUcsQ0FBRSxDQUFDO1FBQzdEO1FBQ0FrTCxXQUFXLENBQUN6SCxJQUFJLENBQUUsY0FBYyxJQUFLa0IsTUFBTSxDQUFDVCxRQUFRLENBQUUrRyxTQUFVLENBQUMsR0FBR0EsU0FBUyxDQUFDRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBRSxHQUFHLEdBQUksQ0FBQztRQUUxRyxJQUFJQyxZQUFZLEdBQUcxSixrQkFBa0IsQ0FBRTZDLEdBQUcsSUFBSUEsR0FBRyxDQUFDNEIsVUFBVyxDQUFDO1FBQzlELElBQUtpRixZQUFZLEVBQUc7VUFDbkJGLFdBQVcsQ0FBQ3pILElBQUksQ0FBRTJILFlBQVksQ0FBQ3BMLE9BQU8sQ0FBRSxRQUFRLEVBQUUsRUFBRyxDQUFFLENBQUM7UUFDekQ7UUFFQSxJQUFJcUwsVUFBVSxHQUFHLFdBQVdSLFFBQVEsQ0FBRUssV0FBVyxDQUFDeEgsSUFBSSxDQUFFLElBQUssQ0FBRSxDQUFDLEdBQUc7O1FBRW5FO1FBQ0EsSUFBSTRILGFBQWEsR0FBSzNLLDBCQUEwQixDQUFFNEQsR0FBRyxJQUFJQSxHQUFHLENBQUM0QixVQUFXLENBQUM7UUFDekUsSUFBSW9GLGVBQWUsR0FBR0QsYUFBYSxHQUFHLDRCQUE0QixHQUFHLEVBQUU7UUFFdkUxQyxJQUFJLENBQUUsS0FBSzJDLGVBQWUsR0FBR0YsVUFBVSxHQUFJLENBQUM7O1FBRTVDO1FBQ0EsQ0FBQzlHLEdBQUcsQ0FBQ2lDLE1BQU0sSUFBSSxFQUFFLEVBQUVVLE9BQU8sQ0FBR3NFLElBQUksSUFDaENuRSxpQkFBaUIsQ0FBQ3dDLGlCQUFpQixDQUFFMkIsSUFBSSxFQUFFbkIsRUFBRSxFQUFFbEMsR0FBRyxFQUFFYyxJQUFJLEVBQUVGLEdBQUksQ0FDL0QsQ0FBQzs7UUFFRDtRQUNBLENBQUN4RSxHQUFHLENBQUNxQyxRQUFRLElBQUksRUFBRSxFQUFFTSxPQUFPLENBQUd1RSxNQUFNLElBQ3BDcEUsaUJBQWlCLENBQUN1QyxjQUFjLENBQUU2QixNQUFNLEVBQUVwQixFQUFFLEVBQUVsQyxHQUFHLEVBQUVjLElBQUksRUFBRUYsR0FBSSxDQUM5RCxDQUFDO1FBRURGLEtBQUssQ0FBRSxNQUFPLENBQUM7TUFDaEIsQ0FBRSxDQUFDO01BRUhBLEtBQUssQ0FBRSxNQUFPLENBQUM7SUFDaEI7O0lBR0E7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBTzhCLGtCQUFrQkEsQ0FBQ2UsWUFBWSxFQUFFM0MsR0FBRyxFQUFFO01BQzVDLElBQUssQ0FBRTJDLFlBQVksRUFBRztRQUNyQixPQUFPLEVBQUU7TUFDVjtNQUNBLE1BQU1DLFFBQVEsR0FBSTFNLElBQUksQ0FBQzZMLGlCQUFpQixDQUFDQyxXQUFXO01BQ3BELE1BQU1hLFNBQVMsR0FBRzNNLElBQUksQ0FBQzZMLGlCQUFpQixDQUFDZSxzQkFBc0I7TUFDL0QsTUFBTUMsR0FBRyxHQUFTN00sSUFBSSxDQUFDNkwsaUJBQWlCLENBQUNpQixnQkFBZ0I7TUFFekQsSUFBSXRNLEdBQUcsR0FBRyxFQUFFO01BRVosTUFBTXVNLE9BQU8sR0FBR3RNLE1BQU0sQ0FBRWdNLFlBQVksQ0FBQ08sY0FBYyxJQUFJUCxZQUFZLENBQUNwRixRQUFRLElBQUlvRixZQUFZLENBQUNRLEtBQUssSUFBSSxFQUFHLENBQUM7TUFDMUcsTUFBTUMsR0FBRyxHQUFPUCxTQUFTLENBQUVJLE9BQVEsQ0FBQztNQUNwQyxJQUFJM0YsT0FBTyxHQUFLcUYsWUFBWSxDQUFDckYsT0FBTyxHQUFHeUYsR0FBRyxDQUFFcE0sTUFBTSxDQUFFZ00sWUFBWSxDQUFDckYsT0FBUSxDQUFFLENBQUMsR0FBRyxFQUFFO01BQ2pGLElBQUtBLE9BQU8sSUFBSTBDLEdBQUcsRUFBRUMsT0FBTyxFQUFHO1FBQzlCLElBQUlvRCxNQUFNLEdBQUcvRixPQUFPO1VBQUV2RixDQUFDLEdBQUcsQ0FBQztRQUMzQixPQUFRaUksR0FBRyxDQUFDQyxPQUFPLENBQUNxRCxHQUFHLENBQUVELE1BQU8sQ0FBQyxFQUFHO1VBQ25DQSxNQUFNLEdBQUcsR0FBRy9GLE9BQU8sSUFBSXZGLENBQUMsRUFBRSxFQUFFO1FBQzdCO1FBQ0FpSSxHQUFHLENBQUNDLE9BQU8sQ0FBQ3BCLEdBQUcsQ0FBRXdFLE1BQU8sQ0FBQztRQUN6Qi9GLE9BQU8sR0FBRytGLE1BQU07TUFDakI7TUFDQSxJQUFLRCxHQUFHLEVBQUc7UUFDVjFNLEdBQUcsSUFBSSxXQUFXa00sUUFBUSxDQUFFUSxHQUFJLENBQUMsR0FBRztNQUNyQztNQUNBLElBQUs5RixPQUFPLEVBQUc7UUFDZDVHLEdBQUcsSUFBSSxRQUFRa00sUUFBUSxDQUFFdEYsT0FBUSxDQUFDLEdBQUc7TUFDdEM7TUFFQSxPQUFPNUcsR0FBRztJQUNYOztJQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQSxPQUFPb0ssaUJBQWlCQSxDQUFDeUMsS0FBSyxFQUFFakMsRUFBRSxFQUFFbEMsR0FBRyxFQUFFYyxJQUFJLEVBQUVGLEdBQUcsRUFBRTtNQUVuRCxNQUFNO1FBQUVILElBQUk7UUFBRUMsS0FBSztRQUFFcEY7TUFBSyxDQUFDLEdBQUc0RyxFQUFFO01BQ2hDLElBQUssQ0FBRWlDLEtBQUssSUFBSSxDQUFFQSxLQUFLLENBQUM1RixJQUFJLEVBQUc7UUFDOUI7TUFDRDs7TUFFQTtNQUNBdUMsSUFBSSxHQUFHQSxJQUFJLElBQUksQ0FBQyxDQUFDO01BQ2pCRixHQUFHLEdBQUlBLEdBQUcsSUFBSztRQUFFQyxPQUFPLEVBQUUsSUFBSXpCLEdBQUcsQ0FBQztNQUFFLENBQUM7TUFFckMsTUFBTWIsSUFBSSxHQUFHaEgsTUFBTSxDQUFFNE0sS0FBSyxDQUFDNUYsSUFBSyxDQUFDLENBQUM3RyxXQUFXLENBQUMsQ0FBQzs7TUFFL0M7TUFDQSxJQUFJME0sVUFBVSxHQUFHLEVBQUU7TUFDbkIsSUFBSzdGLElBQUksS0FBSyxTQUFTLEVBQUc7UUFDekI2RixVQUFVLEdBQUdsRixpQkFBaUIsQ0FBQ3NELGtCQUFrQixDQUFFMkIsS0FBSyxFQUFFdkQsR0FBSSxDQUFDO01BQ2hFO01BRUFILElBQUksQ0FBRSxRQUFRMkQsVUFBVSxHQUFJLENBQUM7TUFFN0IsSUFBSTtRQUNIO1FBQ0EsSUFBSUMsT0FBTyxHQUFHLEtBQUs7UUFDbkIsSUFBS25GLGlCQUFpQixDQUFDb0YsWUFBWSxDQUFFL0YsSUFBSyxDQUFDLEVBQUc7VUFDN0M4RixPQUFPLEdBQUduRixpQkFBaUIsQ0FBQ3FGLHVCQUF1QixDQUFFSixLQUFLLEVBQUVqQyxFQUFFLEVBQUVsQyxHQUFHLEVBQUVjLElBQUksRUFBRUYsR0FBSSxDQUFDO1FBQ2pGOztRQUVBO1FBQ0EsSUFBSyxDQUFFeUQsT0FBTyxFQUFHO1VBQ2hCLE1BQU01TSxJQUFJLEdBQUd5SCxpQkFBaUIsQ0FBQ3NGLFlBQVksQ0FBRWpHLElBQUksRUFBRTRGLEtBQU0sQ0FBQztVQUMxRDdJLElBQUksQ0FBRSw4QkFBOEJpRCxJQUFJLFdBQVc5RyxJQUFJLDBCQUEyQixDQUFDO1FBQ3BGOztRQUVBO1FBQ0EsSUFBSzBNLEtBQUssQ0FBQ00sSUFBSSxFQUFHO1VBQ2pCbkosSUFBSSxDQUNILHVDQUF1Q3hFLElBQUksQ0FBQzZMLGlCQUFpQixDQUFDQyxXQUFXLENBQ3hFckwsTUFBTSxDQUFFNE0sS0FBSyxDQUFDTSxJQUFLLENBQ3BCLENBQUMsUUFDRixDQUFDO1FBQ0Y7TUFDRCxDQUFDLFNBQVM7UUFDVDtRQUNBL0QsS0FBSyxDQUFFLFNBQVUsQ0FBQztNQUNuQjtJQUNEOztJQUVBO0lBQ0E7SUFDQTtJQUNBLE9BQU9nRSxXQUFXQSxDQUFDUCxLQUFLLEVBQUU7TUFDekIsTUFBTS9JLENBQUMsR0FBRytJLEtBQUssSUFBSUEsS0FBSyxDQUFDUSxRQUFRO01BQ2pDLE9BQ0N2SixDQUFDLEtBQUssSUFBSSxJQUNWQSxDQUFDLEtBQUssTUFBTSxJQUNaQSxDQUFDLEtBQUssQ0FBQyxJQUNQQSxDQUFDLEtBQUssR0FBRyxJQUNUQSxDQUFDLEtBQUssVUFBVTtJQUVsQjs7SUFHQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRSxPQUFPd0osZUFBZUEsQ0FBQ1QsS0FBSyxFQUFFVSxJQUFJLEVBQUVDLElBQUksRUFBRTlFLEdBQUcsRUFBRTtNQUM5QyxJQUFLLE9BQU82RSxJQUFJLEtBQUssVUFBVSxFQUFHO1FBQUU7TUFBUTtNQUU1QzdFLEdBQUcsR0FBR0EsR0FBRyxJQUFJLENBQUMsQ0FBQztNQUNmLE1BQU1FLFNBQVMsR0FBR0YsR0FBRyxDQUFDRSxTQUFTLEtBQUssS0FBSztNQUV6QyxNQUFNcEgsR0FBRyxHQUFNcUwsS0FBSyxJQUFJLE9BQU9BLEtBQUssQ0FBQ3pHLEtBQUssS0FBSyxRQUFRLEdBQUl5RyxLQUFLLENBQUN6RyxLQUFLLEdBQUcsRUFBRTtNQUMzRSxNQUFNQSxLQUFLLEdBQUc1RSxHQUFHLENBQUNuQixJQUFJLENBQUMsQ0FBQztNQUV4QixJQUFJb04sTUFBTSxHQUFLLElBQUksQ0FBQ0wsV0FBVyxDQUFFUCxLQUFNLENBQUM7TUFDeEMsSUFBSWEsUUFBUSxHQUFHRCxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7TUFFaEMsSUFBS3JILEtBQUssSUFBSXdDLFNBQVMsRUFBRztRQUN6QixNQUFNc0QsUUFBUSxHQUFHMU0sSUFBSSxDQUFDNkwsaUJBQWlCLENBQUNDLFdBQVc7UUFDbkRpQyxJQUFJLENBQUUsS0FBSyxHQUFHckIsUUFBUSxDQUFFOUYsS0FBTSxDQUFDLEdBQUdzSCxRQUFRLEdBQUcsTUFBTyxDQUFDO1FBQ3JESCxJQUFJLENBQUUsTUFBTSxHQUFHQyxJQUFLLENBQUM7TUFDdEIsQ0FBQyxNQUFNO1FBQ05ELElBQUksQ0FBRUMsSUFBSyxDQUFDO01BQ2I7SUFDRDs7SUFHQTtJQUNBO0lBQ0E7O0lBRUE7SUFDQSxPQUFPRywwQkFBMEJBLENBQUEsRUFBRztNQUNuQyxJQUFJO1FBQ0gsT0FBTyxDQUFDLEVBQUVsTyxNQUFNLENBQUNtTyxLQUFLLElBQUksT0FBT25PLE1BQU0sQ0FBQ21PLEtBQUssQ0FBQ0MsZUFBZSxLQUFLLFVBQVUsSUFDeEVwTyxNQUFNLENBQUNtTyxLQUFLLENBQUNDLGVBQWUsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO01BQ3hFLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7UUFBRSxPQUFPLEtBQUs7TUFBRTtJQUM3QjtJQUVBLE9BQU9DLG9CQUFvQkEsQ0FBQzVOLElBQUksRUFBRTBNLEtBQUssRUFBRTtNQUN4QztNQUNBLElBQUksT0FBT0EsS0FBSyxDQUFDbUIsV0FBVyxLQUFLLFFBQVEsSUFBSW5CLEtBQUssQ0FBQ21CLFdBQVcsQ0FBQzNOLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDdEUsT0FBT3dNLEtBQUssQ0FBQ21CLFdBQVcsQ0FBQzNOLElBQUksQ0FBQyxDQUFDO01BQ2hDO01BQ0EsSUFBSUYsSUFBSSxLQUFLLGNBQWMsRUFBRSxPQUFPLHlCQUF5QjtNQUM3RCxPQUFPLHFCQUFxQjtJQUM3Qjs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFLE9BQU84Tix3QkFBd0JBLENBQUNwQixLQUFLLEVBQUUxTSxJQUFJLEVBQUU7TUFDNUMsSUFBSStOLFVBQVUsR0FBRyxJQUFJLENBQUNDLGFBQWEsQ0FBQ3RCLEtBQUssQ0FBQztNQUMxQyxJQUFJdUIsT0FBTyxHQUFNLElBQUksQ0FBQ0MscUJBQXFCLENBQUN4QixLQUFLLEVBQUVxQixVQUFVLENBQUM7TUFFOUQsSUFBSSxDQUFDLElBQUksQ0FBQ1AsMEJBQTBCLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLE1BQU16SCxJQUFJLEdBQUd6RSxLQUFLLENBQUNDLE9BQU8sQ0FBQ21MLEtBQUssQ0FBQ3hGLE9BQU8sQ0FBQyxHQUFHd0YsS0FBSyxDQUFDeEYsT0FBTyxHQUFHLEVBQUU7UUFFOUQsTUFBTWlILG9CQUFvQixHQUFHcEksSUFBSSxDQUFDNkUsSUFBSSxDQUFDNUUsQ0FBQyxJQUN2Q0EsQ0FBQyxLQUFLQSxDQUFDLENBQUNHLFFBQVEsS0FBSyxJQUFJLElBQUlILENBQUMsQ0FBQ0csUUFBUSxLQUFLLE1BQU0sSUFBSUgsQ0FBQyxDQUFDRyxRQUFRLEtBQUssQ0FBQyxJQUFJSCxDQUFDLENBQUNHLFFBQVEsS0FBSyxHQUFHLENBQzdGLENBQUM7UUFFRCxJQUFJLENBQUNnSSxvQkFBb0IsRUFBRTtVQUMxQixNQUFNQyxzQkFBc0IsR0FBR3JJLElBQUksQ0FBQzZFLElBQUksQ0FBQzVFLENBQUMsSUFDekNBLENBQUMsSUFBSSxPQUFPQSxDQUFDLENBQUNFLEtBQUssS0FBSyxXQUFXLElBQUlwRyxNQUFNLENBQUNrRyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDaEcsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUNuRSxDQUFDO1VBRUQsSUFBSSxDQUFDa08sc0JBQXNCLEVBQUU7WUFDNUIsTUFBTUMsTUFBTSxHQUFPLElBQUksQ0FBQ1Qsb0JBQW9CLENBQUM1TixJQUFJLEVBQUUwTSxLQUFLLENBQUM7WUFDekQsTUFBTTRCLFVBQVUsR0FBRyxHQUFHLEdBQUdqUCxJQUFJLENBQUM2TCxpQkFBaUIsQ0FBQ3FELG9CQUFvQixDQUFDRixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRztZQUV6RixNQUFNRyxLQUFLLEdBQUcsSUFBSSxDQUFDUixhQUFhLENBQUN0QixLQUFLLENBQUMsQ0FBQ3hNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRDZOLFVBQVUsR0FBSSxHQUFHLEdBQUdPLFVBQVUsSUFBSUUsS0FBSyxHQUFJLEdBQUcsR0FBR0EsS0FBSyxHQUFJLEVBQUUsQ0FBQzs7WUFFN0Q7WUFDQVAsT0FBTyxHQUFHLEVBQUU7VUFDYjtRQUNEO01BQ0Q7TUFDQSxPQUFPO1FBQUVGLFVBQVU7UUFBRUU7TUFBUSxDQUFDO0lBQy9CO0lBRUEsT0FBT1EsZ0JBQWdCQSxDQUFDek8sSUFBSSxFQUFFME0sS0FBSyxFQUFFYSxRQUFRLEVBQUVtQixNQUFNLEVBQUVDLFFBQVEsRUFBRXhCLGVBQWUsRUFBRTtNQUNqRixNQUFNO1FBQUVZLFVBQVU7UUFBRUU7TUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDSCx3QkFBd0IsQ0FBQ3BCLEtBQUssRUFBRTFNLElBQUksQ0FBQztNQUMxRTtNQUNBbU4sZUFBZSxDQUFDLGFBQWFJLFFBQVEsSUFBSXZOLElBQUksR0FBRzBPLE1BQU0sR0FBR0MsUUFBUSxHQUFHVixPQUFPLEdBQUdGLFVBQVUsR0FBRyxDQUFDO0lBQzdGOztJQUVBO0lBQ0E7SUFDQSxPQUFPYSxpQkFBaUJBLENBQUNsQyxLQUFLLEVBQUU7TUFDL0IsTUFBTS9JLENBQUMsR0FBRytJLEtBQUssRUFBRW1DLGFBQWEsSUFBSW5DLEtBQUssRUFBRW9DLFlBQVksSUFBSSxFQUFFO01BQzNELE9BQVFuTCxDQUFDLElBQUksSUFBSSxHQUFJLEVBQUUsR0FBRzdELE1BQU0sQ0FBRTZELENBQUUsQ0FBQztJQUN0Qzs7SUFFQTtJQUNBLE9BQU9vTCxtQkFBbUJBLENBQUNyQyxLQUFLLEVBQUU7TUFDakMsTUFBTS9JLENBQUMsR0FBRyxJQUFJLENBQUNpTCxpQkFBaUIsQ0FBRWxDLEtBQU0sQ0FBQztNQUN6QyxJQUFLLENBQUMvSSxDQUFDLEVBQUcsT0FBTyxFQUFFO01BQ25CLE9BQU8sS0FBS3RFLElBQUksQ0FBQzZMLGlCQUFpQixDQUFDcUQsb0JBQW9CLENBQUU1SyxDQUFFLENBQUMsR0FBRztJQUNoRTtJQUVBLE9BQU9xTCxhQUFhQSxDQUFDdEMsS0FBSyxFQUFFO01BQzNCLE1BQU1yTCxHQUFHLEdBQUdxTCxLQUFLLENBQUNKLEtBQUssSUFBSUksS0FBSyxDQUFDdUMsU0FBUyxJQUFJdkMsS0FBSyxDQUFDaEcsUUFBUSxJQUFJLEVBQUU7TUFDbEUsTUFBTTZGLEdBQUcsR0FBR2xOLElBQUksQ0FBQzZMLGlCQUFpQixDQUFDZSxzQkFBc0IsQ0FBRW5NLE1BQU0sQ0FBRXVCLEdBQUksQ0FBRSxDQUFDO01BQzFFLElBQUssQ0FBQ2tMLEdBQUcsRUFBRyxPQUFPLEVBQUU7TUFDckIsT0FBT0EsR0FBRyxDQUNSMkMsS0FBSyxDQUFFLEtBQU0sQ0FBQyxDQUNkMU4sTUFBTSxDQUFFcUcsT0FBUSxDQUFDLENBQ2pCOUYsR0FBRyxDQUFHb04sQ0FBQyxJQUFLLFVBQVU5UCxJQUFJLENBQUM2TCxpQkFBaUIsQ0FBQ2tFLFFBQVEsQ0FBRUQsQ0FBRSxDQUFDLEVBQUcsQ0FBQyxDQUM5RHJMLElBQUksQ0FBRSxFQUFHLENBQUM7SUFDYjtJQUVBLE9BQU91TCxTQUFTQSxDQUFDM0MsS0FBSyxFQUFFdkQsR0FBRyxFQUFFO01BQzVCLE1BQU1tRyxNQUFNLEdBQUc1QyxLQUFLLENBQUNqRyxPQUFPLElBQUlpRyxLQUFLLENBQUM2QyxPQUFPO01BQzdDLElBQUssQ0FBQ0QsTUFBTSxFQUFHLE9BQU8sRUFBRTtNQUN4QixNQUFNRSxJQUFJLEdBQUduUSxJQUFJLENBQUM2TCxpQkFBaUIsQ0FBQ2tFLFFBQVEsQ0FBRUUsTUFBTyxDQUFDO01BQ3RELElBQUssQ0FBQ0UsSUFBSSxFQUFHLE9BQU8sRUFBRTtNQUN0QixJQUFJaEQsTUFBTSxHQUFHZ0QsSUFBSTtRQUFFdE8sQ0FBQyxHQUFHLENBQUM7TUFDeEIsT0FBUWlJLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDcUQsR0FBRyxDQUFFRCxNQUFPLENBQUMsRUFBR0EsTUFBTSxHQUFHLEdBQUdnRCxJQUFJLElBQUl0TyxDQUFDLEVBQUUsRUFBRTtNQUM3RGlJLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDcEIsR0FBRyxDQUFFd0UsTUFBTyxDQUFDO01BQ3pCLE9BQU8sT0FBT0EsTUFBTSxFQUFFO0lBQ3ZCO0lBRUEsT0FBT2lELE9BQU9BLENBQUM5TCxDQUFDLEVBQUU7TUFDakIsSUFBS0EsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxLQUFLLEVBQUUsRUFBRyxPQUFPLEVBQUU7TUFDdEMsT0FBTyxpQkFBaUJ0RSxJQUFJLENBQUM2TCxpQkFBaUIsQ0FBQ3dFLHNCQUFzQixDQUFFL0wsQ0FBRSxDQUFDLEdBQUc7SUFDOUU7O0lBRUE7SUFDQSxPQUFPZ00sY0FBY0EsQ0FBQzlJLENBQUMsRUFBRTtNQUN4QixNQUFNK0ksSUFBSSxHQUFHQyxRQUFRLENBQUVoSixDQUFDLENBQUMrSSxJQUFJLEVBQUUsRUFBRyxDQUFDO01BQ25DLE1BQU1ySyxHQUFHLEdBQUlzSyxRQUFRLENBQUVoSixDQUFDLENBQUNpSixTQUFTLEVBQUUsRUFBRyxDQUFDO01BQ3hDLElBQUsvSyxNQUFNLENBQUNULFFBQVEsQ0FBRXNMLElBQUssQ0FBQyxJQUFJN0ssTUFBTSxDQUFDVCxRQUFRLENBQUVpQixHQUFJLENBQUMsRUFBRyxPQUFPLElBQUlxSyxJQUFJLElBQUlySyxHQUFHLEVBQUU7TUFDakYsSUFBS1IsTUFBTSxDQUFDVCxRQUFRLENBQUVzTCxJQUFLLENBQUMsRUFBRyxPQUFPLElBQUlBLElBQUksR0FBRztNQUNqRCxJQUFLN0ssTUFBTSxDQUFDVCxRQUFRLENBQUVpQixHQUFJLENBQUMsRUFBRyxPQUFPLEtBQUtBLEdBQUcsRUFBRTtNQUMvQyxPQUFPLEVBQUU7SUFDVjs7SUFFQTtJQUNBLE9BQU93SyxlQUFlQSxDQUFDbEosQ0FBQyxFQUFFO01BQ3pCLE1BQU02RCxJQUFJLEdBQUdtRixRQUFRLENBQUVoSixDQUFDLENBQUM2RCxJQUFJLEVBQUUsRUFBRyxDQUFDO01BQ25DLE1BQU1zRixJQUFJLEdBQUdILFFBQVEsQ0FBRWhKLENBQUMsQ0FBQ21KLElBQUksRUFBRSxFQUFHLENBQUM7TUFDbkMsSUFBS2pMLE1BQU0sQ0FBQ1QsUUFBUSxDQUFFb0csSUFBSyxDQUFDLElBQUkzRixNQUFNLENBQUNULFFBQVEsQ0FBRTBMLElBQUssQ0FBQyxFQUFHLE9BQU8sSUFBSXRGLElBQUksSUFBSXNGLElBQUksRUFBRTtNQUNuRixJQUFLakwsTUFBTSxDQUFDVCxRQUFRLENBQUVvRyxJQUFLLENBQUMsRUFBRyxPQUFPLElBQUlBLElBQUksR0FBRztNQUNqRCxJQUFLM0YsTUFBTSxDQUFDVCxRQUFRLENBQUUwTCxJQUFLLENBQUMsRUFBRyxPQUFPLEtBQUtBLElBQUksRUFBRTtNQUNqRCxPQUFPLEVBQUU7SUFDVjtJQUVBLE9BQU9oQyxhQUFhQSxDQUFDdEIsS0FBSyxFQUFFO01BQzNCLE1BQU14RixPQUFPLEdBQUc1RixLQUFLLENBQUNDLE9BQU8sQ0FBRW1MLEtBQUssQ0FBQ3hGLE9BQVEsQ0FBQyxHQUFHd0YsS0FBSyxDQUFDeEYsT0FBTyxHQUFHLEVBQUU7TUFDbkUsSUFBS0EsT0FBTyxDQUFDdEgsTUFBTSxLQUFLLENBQUMsRUFBRyxPQUFPLEVBQUU7TUFDckMsTUFBTTBELEtBQUssR0FBRzRELE9BQU8sQ0FBQ25GLEdBQUcsQ0FBR2lFLENBQUMsSUFBSztRQUNqQyxNQUFNaUssS0FBSyxHQUFHblEsTUFBTSxDQUFFa0csQ0FBQyxDQUFDQyxLQUFLLElBQUlELENBQUMsQ0FBQ0UsS0FBSyxJQUFJLEVBQUcsQ0FBQyxDQUFDaEcsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTWdHLEtBQUssR0FBR3BHLE1BQU0sQ0FBRWtHLENBQUMsQ0FBQ0UsS0FBSyxJQUFJRixDQUFDLENBQUNDLEtBQUssSUFBSSxFQUFHLENBQUMsQ0FBQy9GLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8rUCxLQUFLLElBQUkvSixLQUFLLElBQUkrSixLQUFLLEtBQUsvSixLQUFLLEdBQ3JDLElBQUk3RyxJQUFJLENBQUM2TCxpQkFBaUIsQ0FBQ3FELG9CQUFvQixDQUFFLEdBQUcwQixLQUFLLEtBQUsvSixLQUFLLEVBQUcsQ0FBQyxHQUFHLEdBQzFFLElBQUk3RyxJQUFJLENBQUM2TCxpQkFBaUIsQ0FBQ3FELG9CQUFvQixDQUFFMEIsS0FBSyxJQUFJL0osS0FBTSxDQUFDLEdBQUc7TUFDeEUsQ0FBRSxDQUFDO01BQ0gsT0FBTyxHQUFHLEdBQUc1QyxLQUFLLENBQUNRLElBQUksQ0FBRSxHQUFJLENBQUM7SUFDL0I7SUFFQSxPQUFPb0sscUJBQXFCQSxDQUFDeEIsS0FBSyxFQUFFd0QsTUFBTSxFQUFFO01BQzNDLE1BQU1oSixPQUFPLEdBQUk1RixLQUFLLENBQUNDLE9BQU8sQ0FBRW1MLEtBQUssQ0FBQ3hGLE9BQVEsQ0FBQyxHQUFHd0YsS0FBSyxDQUFDeEYsT0FBTyxHQUFHLEVBQUU7TUFDcEUsTUFBTWYsUUFBUSxHQUFHZSxPQUFPLENBQUNpSixJQUFJLENBQUduSyxDQUFDLElBQUtBLENBQUMsQ0FBQ0csUUFBUyxDQUFDO01BQ2xELE1BQU1pSyxPQUFPLEdBQUdqSyxRQUFRLEdBQUlBLFFBQVEsQ0FBQ0QsS0FBSyxJQUFJQyxRQUFRLENBQUNGLEtBQUssR0FBS3lHLEtBQUssQ0FBQ21DLGFBQWEsSUFBSW5DLEtBQUssQ0FBQ29DLFlBQVksSUFBSSxFQUFHO01BQ2pILElBQUssQ0FBQ3NCLE9BQU8sRUFBRyxPQUFPLEVBQUU7TUFDekIsT0FBTyxhQUFhL1EsSUFBSSxDQUFDNkwsaUJBQWlCLENBQUNtRixxQkFBcUIsQ0FBRUQsT0FBUSxDQUFDLEdBQUc7SUFDL0U7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBT0UsVUFBVUEsQ0FBQzlJLElBQUksRUFBRStGLFFBQVEsRUFBRXZOLElBQUksRUFBRTBNLEtBQUssRUFBRWdDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO01BQ2hFO01BQ0EsSUFBSXVCLE1BQU0sR0FBR3pJLGlCQUFpQixDQUFDdUcsYUFBYSxDQUFFdEIsS0FBTSxDQUFDO01BQ3JELElBQUk2RCxHQUFHLEdBQU05SSxpQkFBaUIsQ0FBQ3lHLHFCQUFxQixDQUFFeEIsS0FBSyxFQUFFd0QsTUFBTyxDQUFDOztNQUVyRTtNQUNBO01BQ0EsSUFBSU0sR0FBRyxHQUFHLEVBQUU7TUFDWixJQUFLaEosSUFBSSxLQUFLLE9BQU8sRUFBRztRQUN2QmdKLEdBQUcsR0FBRyxvQkFBb0I7TUFDM0IsQ0FBQyxNQUFNLElBQUs5RCxLQUFLLElBQUlBLEtBQUssQ0FBQytELGlCQUFpQixFQUFHO1FBQzlDRCxHQUFHLEdBQUcsb0JBQW9CO01BQzNCOztNQUVBO01BQ0E7TUFDQTtNQUNBLElBQUlFLGFBQWEsR0FBRyxFQUFFO01BRXRCLElBQUtsSixJQUFJLEtBQUssV0FBVyxJQUFJa0YsS0FBSyxFQUFHO1FBQ3BDLE1BQU1pRSxRQUFRLEdBQ2JqRSxLQUFLLENBQUNpRSxRQUFRLEtBQUssSUFBSSxJQUN2QmpFLEtBQUssQ0FBQ2lFLFFBQVEsS0FBSyxNQUFNLElBQ3pCakUsS0FBSyxDQUFDaUUsUUFBUSxLQUFLLENBQUMsSUFDcEJqRSxLQUFLLENBQUNpRSxRQUFRLEtBQUssR0FBRyxJQUN0QmpFLEtBQUssQ0FBQ2lFLFFBQVEsS0FBSyxVQUFVO1FBRTlCLElBQUtBLFFBQVEsRUFBRztVQUNmO1VBQ0FELGFBQWEsR0FBRyxXQUFXO1FBQzVCLENBQUMsTUFBTSxJQUFLLENBQUNILEdBQUcsRUFBRztVQUNsQjtVQUNBO1VBQ0E7VUFDQSxNQUFNSyxLQUFLLEdBQUdsRSxLQUFLLENBQUNtQixXQUFXO1VBQy9CLE1BQU1nRCxFQUFFLEdBQU8sT0FBT0QsS0FBSyxLQUFLLFFBQVEsR0FBSUEsS0FBSyxDQUFDMVEsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO1VBRTdELElBQUsyUSxFQUFFLEVBQUc7WUFDVCxNQUFNQyxDQUFDLEdBQVF6UixJQUFJLENBQUM2TCxpQkFBaUI7WUFDckMsTUFBTTZGLE1BQU0sR0FBSUQsQ0FBQyxJQUFJQSxDQUFDLENBQUN2QyxvQkFBb0IsR0FBSXVDLENBQUMsQ0FBQ3ZDLG9CQUFvQixHQUFJNUssQ0FBQyxJQUFLN0QsTUFBTSxDQUFFNkQsQ0FBRSxDQUFDO1lBRTFGLE1BQU1xTixPQUFPLEdBQUcsSUFBSUQsTUFBTSxDQUFFRixFQUFFLEdBQUcsSUFBSyxDQUFDLEdBQUc7WUFFMUMsSUFBS1gsTUFBTSxJQUFJQSxNQUFNLENBQUN0USxNQUFNLEVBQUc7Y0FDOUI7Y0FDQXNRLE1BQU0sR0FBRyxHQUFHLEdBQUdjLE9BQU8sR0FBR2QsTUFBTTtZQUNoQyxDQUFDLE1BQU07Y0FDTkEsTUFBTSxHQUFHLEdBQUcsR0FBR2MsT0FBTztZQUN2Qjs7WUFFQTtZQUNBVCxHQUFHLEdBQUcsRUFBRTtVQUNUO1FBQ0Q7TUFDRDs7TUFFQTtNQUNBLE1BQU1VLEVBQUUsR0FBSXZFLEtBQUssSUFBSUEsS0FBSyxDQUFDd0UsV0FBVyxHQUFJLGtCQUFrQixHQUFHLEVBQUU7O01BRWpFO01BQ0E7TUFDQTtNQUNBLE9BQU8sSUFBSTFKLElBQUksR0FBRytGLFFBQVEsSUFBSXZOLElBQUksR0FBRzBPLE1BQU0sR0FBR0MsUUFBUSxHQUFHNkIsR0FBRyxHQUFHRSxhQUFhLEdBQUdILEdBQUcsR0FBR0wsTUFBTSxHQUFHZSxFQUFFLEdBQUc7SUFDcEc7SUFFQSxPQUFPbEUsWUFBWUEsQ0FBQ2pHLElBQUksRUFBRTRGLEtBQUssRUFBRTtNQUNoQztNQUNBO01BQ0EsTUFBTXlFLEtBQUssR0FBRzlSLElBQUksQ0FBQzZMLGlCQUFpQjtNQUVwQyxNQUFNN0osR0FBRyxHQUFJcUwsS0FBSyxLQUFLQSxLQUFLLENBQUMxTSxJQUFJLElBQUkwTSxLQUFLLENBQUNsRyxFQUFFLENBQUMsR0FBSTFHLE1BQU0sQ0FBQzRNLEtBQUssQ0FBQzFNLElBQUksSUFBSTBNLEtBQUssQ0FBQ2xHLEVBQUUsQ0FBQyxHQUFHMUcsTUFBTSxDQUFDZ0gsSUFBSSxJQUFJLE9BQU8sQ0FBQzs7TUFFMUc7TUFDQSxNQUFNOUcsSUFBSSxHQUFHbVIsS0FBSyxDQUFDQyxrQkFBa0IsQ0FBRS9QLEdBQUksQ0FBQzs7TUFFNUM7TUFDQSxPQUFPckIsSUFBSSxJQUFJbVIsS0FBSyxDQUFDQyxrQkFBa0IsQ0FBRXRSLE1BQU0sQ0FBQ2dILElBQUksSUFBSSxPQUFPLENBQUUsQ0FBQztJQUNuRTs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBT3VLLFFBQVFBLENBQUN2SyxJQUFJLEVBQUV3SyxFQUFFLEVBQUU7TUFDekIsSUFBSyxDQUFFeEssSUFBSSxJQUFJLE9BQU93SyxFQUFFLEtBQUssVUFBVSxFQUFHO1FBQUU7TUFBUTtNQUNwRCxJQUFLLENBQUUsSUFBSSxDQUFDQyxVQUFVLEVBQUc7UUFBRSxJQUFJLENBQUNBLFVBQVUsR0FBRyxJQUFJQyxHQUFHLENBQUMsQ0FBQztNQUFFO01BQ3hELElBQUksQ0FBQ0QsVUFBVSxDQUFDRSxHQUFHLENBQUUzUixNQUFNLENBQUVnSCxJQUFLLENBQUMsQ0FBQzdHLFdBQVcsQ0FBQyxDQUFDLEVBQUVxUixFQUFHLENBQUM7SUFDeEQ7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRSxPQUFPSSxVQUFVQSxDQUFDNUssSUFBSSxFQUFFO01BQ3ZCLElBQUssQ0FBRSxJQUFJLENBQUN5SyxVQUFVLElBQUksQ0FBRXpLLElBQUksRUFBRztRQUFFO01BQVE7TUFDN0MsSUFBSSxDQUFDeUssVUFBVSxDQUFDckosTUFBTSxDQUFFcEksTUFBTSxDQUFFZ0gsSUFBSyxDQUFDLENBQUM3RyxXQUFXLENBQUMsQ0FBRSxDQUFDO0lBQ3ZEOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBTzRNLFlBQVlBLENBQUMvRixJQUFJLEVBQUU7TUFDekIsT0FBTyxDQUFDLEVBQUcsSUFBSSxDQUFDeUssVUFBVSxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDOUUsR0FBRyxDQUFFM00sTUFBTSxDQUFFZ0gsSUFBSyxDQUFDLENBQUM3RyxXQUFXLENBQUMsQ0FBRSxDQUFDLENBQUU7SUFDcEY7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0UsT0FBTzZNLHVCQUF1QkEsQ0FBQ0osS0FBSyxFQUFFakMsRUFBRSxFQUFFbEMsR0FBRyxFQUFFYyxJQUFJLEVBQUVGLEdBQUcsRUFBRTtNQUN6RCxJQUFLLENBQUV1RCxLQUFLLElBQUksQ0FBRUEsS0FBSyxDQUFDNUYsSUFBSSxJQUFJLENBQUUsSUFBSSxDQUFDeUssVUFBVSxFQUFHO1FBQUUsT0FBTyxLQUFLO01BQUU7TUFDcEUsTUFBTUksR0FBRyxHQUFHN1IsTUFBTSxDQUFFNE0sS0FBSyxDQUFDNUYsSUFBSyxDQUFDLENBQUM3RyxXQUFXLENBQUMsQ0FBQztNQUM5QyxNQUFNcVIsRUFBRSxHQUFJLElBQUksQ0FBQ0MsVUFBVSxDQUFDSyxHQUFHLENBQUVELEdBQUksQ0FBQztNQUN0QyxJQUFLLE9BQU9MLEVBQUUsS0FBSyxVQUFVLEVBQUc7UUFBRSxPQUFPLEtBQUs7TUFBRTtNQUVoRCxJQUFJO1FBQ0g7UUFDQSxNQUFNbEUsSUFBSSxHQUFJeUUsSUFBSSxJQUFLO1VBQUUsSUFBSyxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFHO1lBQUVwSCxFQUFFLENBQUM1RyxJQUFJLENBQUVnTyxJQUFLLENBQUM7VUFBRTtRQUFFLENBQUM7UUFDL0VQLEVBQUUsQ0FBRTVFLEtBQUssRUFBRVUsSUFBSSxFQUFFO1VBQUUzQyxFQUFFO1VBQUVsQyxHQUFHO1VBQUVjLElBQUk7VUFBRUYsR0FBRztVQUFFOUo7UUFBSyxDQUFFLENBQUM7UUFDL0MsT0FBTyxJQUFJO01BQ1osQ0FBQyxDQUFDLE9BQU95UyxDQUFDLEVBQUU7UUFDWHJFLEtBQUssRUFBRXNFLEdBQUcsRUFBRUMsS0FBSyxHQUFJLDJDQUEyQyxFQUFFRixDQUFFLENBQUM7UUFDckUsT0FBTyxLQUFLO01BQ2I7SUFDRDtFQUVEOztFQUVBO0VBQ0F4UyxNQUFNLENBQUNtSSxpQkFBaUIsR0FBR25JLE1BQU0sQ0FBQ21JLGlCQUFpQixJQUFJQSxpQkFBaUI7RUFDeEV3Syw2QkFBNkIsQ0FBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUUsQ0FBQzs7RUFFOUQ7RUFDQXhLLGlCQUFpQixDQUFDRyxjQUFjLENBQUV0SSxNQUFNLENBQUM0UywwQkFBMEIsSUFBSTFTLDhCQUErQixDQUFDOztFQUV2Rzs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLE1BQU02Syx3QkFBd0IsQ0FBQztJQUU5QixPQUFPZ0gsUUFBUUEsQ0FBQ3ZLLElBQUksRUFBRXdLLEVBQUUsRUFBRTtNQUN6QixJQUFLLENBQUN4SyxJQUFJLElBQUksT0FBT3dLLEVBQUUsS0FBSyxVQUFVLEVBQUc7TUFDekMsSUFBSyxDQUFDLElBQUksQ0FBQ0MsVUFBVSxFQUFHLElBQUksQ0FBQ0EsVUFBVSxHQUFHLElBQUlDLEdBQUcsQ0FBQyxDQUFDO01BQ25ELElBQUksQ0FBQ0QsVUFBVSxDQUFDRSxHQUFHLENBQUUzUixNQUFNLENBQUVnSCxJQUFLLENBQUMsQ0FBQzdHLFdBQVcsQ0FBQyxDQUFDLEVBQUVxUixFQUFHLENBQUM7SUFDeEQ7SUFFQSxPQUFPSSxVQUFVQSxDQUFDNUssSUFBSSxFQUFFO01BQ3ZCLElBQUssQ0FBQyxJQUFJLENBQUN5SyxVQUFVLElBQUksQ0FBQ3pLLElBQUksRUFBRztNQUNqQyxJQUFJLENBQUN5SyxVQUFVLENBQUNySixNQUFNLENBQUVwSSxNQUFNLENBQUVnSCxJQUFLLENBQUMsQ0FBQzdHLFdBQVcsQ0FBQyxDQUFFLENBQUM7SUFDdkQ7SUFFQSxPQUFPNE0sWUFBWUEsQ0FBQy9GLElBQUksRUFBRTtNQUN6QixPQUFPLENBQUMsRUFBRSxJQUFJLENBQUN5SyxVQUFVLElBQUksSUFBSSxDQUFDQSxVQUFVLENBQUM5RSxHQUFHLENBQUUzTSxNQUFNLENBQUVnSCxJQUFLLENBQUMsQ0FBQzdHLFdBQVcsQ0FBQyxDQUFFLENBQUMsQ0FBQztJQUNsRjtJQUVBLE9BQU82TSx1QkFBdUJBLENBQUNKLEtBQUssRUFBRVUsSUFBSSxFQUFFakUsR0FBRyxFQUFFO01BQ2hELElBQUssQ0FBQ3VELEtBQUssSUFBSSxDQUFDQSxLQUFLLENBQUM1RixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUN5SyxVQUFVLEVBQUcsT0FBTyxLQUFLO01BQzdELE1BQU1JLEdBQUcsR0FBRzdSLE1BQU0sQ0FBRTRNLEtBQUssQ0FBQzVGLElBQUssQ0FBQyxDQUFDN0csV0FBVyxDQUFDLENBQUM7TUFDOUMsTUFBTXFSLEVBQUUsR0FBSSxJQUFJLENBQUNDLFVBQVUsQ0FBQ0ssR0FBRyxDQUFFRCxHQUFJLENBQUM7TUFDdEMsSUFBSyxPQUFPTCxFQUFFLEtBQUssVUFBVSxFQUFHLE9BQU8sS0FBSztNQUM1QyxJQUFJO1FBQ0hBLEVBQUUsQ0FBRTVFLEtBQUssRUFBRVUsSUFBSSxFQUFFakUsR0FBRyxJQUFJLENBQUMsQ0FBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSTtNQUNaLENBQUMsQ0FBQyxPQUFRMkksQ0FBQyxFQUFHO1FBQ2JyRSxLQUFLLEVBQUVzRSxHQUFHLEVBQUVDLEtBQUssR0FBSSxrREFBa0QsRUFBRUYsQ0FBRSxDQUFDO1FBQzVFLE9BQU8sS0FBSztNQUNiO0lBQ0Q7O0lBRUE7SUFDQSxPQUFPSyxvQkFBb0JBLENBQUMvRSxJQUFJLEVBQUVuSCxLQUFLLEVBQUVtTSxLQUFLLEVBQUU3SixHQUFHLEVBQUU7TUFDcEQsTUFBTXVJLENBQUMsR0FBV3pSLElBQUksQ0FBQzZMLGlCQUFpQjtNQUN4QyxNQUFNWCxHQUFHLEdBQVVoQyxHQUFHLElBQUksT0FBT0EsR0FBRyxDQUFDZ0MsR0FBRyxLQUFLLFFBQVEsR0FBSWhDLEdBQUcsQ0FBQ2dDLEdBQUcsR0FBRyxJQUFJO01BQ3ZFLE1BQU05QixTQUFTLEdBQUlGLEdBQUcsSUFBSSxXQUFXLElBQUlBLEdBQUcsR0FBSSxDQUFDLENBQUNBLEdBQUcsQ0FBQ0UsU0FBUyxHQUFHLElBQUk7TUFFdEUsTUFBTXdILEtBQUssR0FBSXhILFNBQVMsSUFBSXhDLEtBQUssR0FBSSxNQUFNNkssQ0FBQyxDQUFDM0YsV0FBVyxDQUFDbEYsS0FBSyxDQUFDLE9BQU9zRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BRWhGNkMsSUFBSSxDQUFDLEdBQUc2QyxLQUFLLE9BQU9tQyxLQUFLLFdBQVcsQ0FBQztJQUN0Qzs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDRSxPQUFPOUgsY0FBY0EsQ0FBQ2hDLE9BQU8sRUFBRXBCLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtNQUU1QyxNQUFNcUIsR0FBRyxHQUFLO1FBQUVDLE9BQU8sRUFBRSxJQUFJO1FBQUVDLFNBQVMsRUFBRSxJQUFJO1FBQUU4QixHQUFHLEVBQUUsSUFBSTtRQUFFNUIsTUFBTSxFQUFFLElBQUk7UUFBRSxHQUFHekI7TUFBUSxDQUFDO01BQ3JGLE1BQU0wQixHQUFHLEdBQU0sT0FBT0wsR0FBRyxDQUFDSSxNQUFNLEtBQUssUUFBUSxHQUFJSixHQUFHLENBQUNJLE1BQU0sR0FBRyxJQUFJO01BQ2xFLElBQUlFLEtBQUssR0FBSyxDQUFDO01BQ2YsTUFBTUMsS0FBSyxHQUFHLEVBQUU7TUFFaEIsTUFBTWpGLElBQUksR0FBSUEsQ0FBQ0ssQ0FBQyxHQUFHLEVBQUUsS0FBSzRFLEtBQUssQ0FBQ2pGLElBQUksQ0FBRStFLEdBQUcsQ0FBQ0csTUFBTSxDQUFFRixLQUFNLENBQUMsR0FBRy9JLE1BQU0sQ0FBRW9FLENBQUUsQ0FBRSxDQUFDO01BQ3pFLE1BQU04RSxJQUFJLEdBQUlBLENBQUM5RSxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQUVMLElBQUksQ0FBRUssQ0FBRSxDQUFDO1FBQUUyRSxLQUFLLEVBQUU7TUFBRSxDQUFDO01BQ2pELE1BQU1JLEtBQUssR0FBR0EsQ0FBQy9FLENBQUMsR0FBRyxFQUFFLEtBQUs7UUFBRTJFLEtBQUssR0FBR3ZELElBQUksQ0FBQ0MsR0FBRyxDQUFFLENBQUMsRUFBRXNELEtBQUssR0FBRyxDQUFFLENBQUM7UUFBRWhGLElBQUksQ0FBRUssQ0FBRSxDQUFDO01BQUUsQ0FBQztNQUUxRSxNQUFNa0osSUFBSSxHQUFJbEosQ0FBQyxJQUFLO1FBQ25CLElBQUssT0FBT0EsQ0FBQyxLQUFLLFFBQVEsRUFBRztVQUFFO1FBQVE7UUFDdkNwRSxNQUFNLENBQUVvRSxDQUFFLENBQUMsQ0FBQ2dMLEtBQUssQ0FBRSxPQUFRLENBQUMsQ0FBQzVILE9BQU8sQ0FBRytLLElBQUksSUFBS3hPLElBQUksQ0FBRXdPLElBQUssQ0FBRSxDQUFDO01BQy9ELENBQUM7TUFFRCxJQUFLLENBQUMvSixPQUFPLElBQUksQ0FBQ2hILEtBQUssQ0FBQ0MsT0FBTyxDQUFFK0csT0FBTyxDQUFDMUMsS0FBTSxDQUFDLEVBQUcsT0FBTyxFQUFFO01BRTVELE1BQU0wTSxTQUFTLEdBQUcsSUFBSTNLLEdBQUcsQ0FBRSxDQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBRyxDQUFDO01BRWpHLE1BQU00SyxZQUFZLEdBQUk3RixLQUFLLElBQUs7UUFDL0IsTUFBTTVGLElBQUksR0FBSWhILE1BQU0sQ0FBRTRNLEtBQUssQ0FBQzVGLElBQUksSUFBSSxFQUFHLENBQUMsQ0FBQzdHLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELE1BQU1ELElBQUksR0FBSXlILGlCQUFpQixDQUFDc0YsWUFBWSxDQUFFakcsSUFBSSxFQUFFNEYsS0FBTSxDQUFDO1FBQzNELE1BQU16RyxLQUFLLEdBQUksT0FBT3lHLEtBQUssQ0FBQ3pHLEtBQUssS0FBSyxRQUFRLElBQUl5RyxLQUFLLENBQUN6RyxLQUFLLENBQUMvRixJQUFJLENBQUMsQ0FBQyxHQUFJd00sS0FBSyxDQUFDekcsS0FBSyxDQUFDL0YsSUFBSSxDQUFDLENBQUMsR0FBR0YsSUFBSTtRQUNqRyxJQUFLLENBQUNBLElBQUksRUFBRztRQUNicUssd0JBQXdCLENBQUM4SCxvQkFBb0IsQ0FBRS9FLElBQUksRUFBRW5ILEtBQUssRUFBRWpHLElBQUksRUFBRXVJLEdBQUksQ0FBQztNQUN4RSxDQUFDOztNQUVEO01BQ0EsTUFBTWlLLGlCQUFpQixHQUFJOUYsS0FBSyxJQUFLO1FBQ3BDLE1BQU01RixJQUFJLEdBQUdoSCxNQUFNLENBQUU0TSxLQUFLLENBQUM1RixJQUFJLElBQUksRUFBRyxDQUFDLENBQUM3RyxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFLcVMsU0FBUyxDQUFDN0YsR0FBRyxDQUFFM0YsSUFBSyxDQUFDLEVBQUc7UUFDN0I7UUFDQSxJQUFLQSxJQUFJLEtBQUssVUFBVSxFQUFHO1VBQzFCLE1BQU1iLEtBQUssR0FBSSxPQUFPeUcsS0FBSyxDQUFDekcsS0FBSyxLQUFLLFFBQVEsSUFBSXlHLEtBQUssQ0FBQ3pHLEtBQUssQ0FBQy9GLElBQUksQ0FBQyxDQUFDLEdBQUl3TSxLQUFLLENBQUN6RyxLQUFLLENBQUMvRixJQUFJLENBQUMsQ0FBQyxHQUFHLE9BQU87VUFDcEdtSyx3QkFBd0IsQ0FBQzhILG9CQUFvQixDQUFFL0UsSUFBSSxFQUFFbkgsS0FBSyxFQUFFLE9BQU8sRUFBRXNDLEdBQUksQ0FBQztVQUMxRTtRQUNEO1FBQ0E7UUFDQSxNQUFNa0ssUUFBUSxHQUFHM1MsTUFBTSxDQUFFNE0sS0FBSyxDQUFDMU0sSUFBSSxJQUFJME0sS0FBSyxDQUFDbEcsRUFBRSxJQUFJLEVBQUcsQ0FBQyxDQUFDdkcsV0FBVyxDQUFDLENBQUM7UUFDckUsSUFBSyxDQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBRSxDQUFDeVMsUUFBUSxDQUFFRCxRQUFTLENBQUMsRUFBRztVQUNuRixNQUFNeE0sS0FBSyxHQUFJLE9BQU95RyxLQUFLLENBQUN6RyxLQUFLLEtBQUssUUFBUSxJQUFJeUcsS0FBSyxDQUFDekcsS0FBSyxDQUFDL0YsSUFBSSxDQUFDLENBQUMsR0FBSXdNLEtBQUssQ0FBQ3pHLEtBQUssQ0FBQy9GLElBQUksQ0FBQyxDQUFDLEdBQUd1UyxRQUFRO1VBQ3JHO1VBQ0EsTUFBTUwsS0FBSyxHQUFJSyxRQUFRLEtBQUssY0FBYyxHQUFJLGtCQUFrQixHQUFHQSxRQUFRO1VBQzNFcEksd0JBQXdCLENBQUM4SCxvQkFBb0IsQ0FBRS9FLElBQUksRUFBRW5ILEtBQUssRUFBRW1NLEtBQUssRUFBRTdKLEdBQUksQ0FBQztVQUN4RTtRQUNEO1FBQ0E7UUFDQWdLLFlBQVksQ0FBRTdGLEtBQU0sQ0FBQztNQUN0QixDQUFDOztNQUVEO01BQ0EsTUFBTWlHLFdBQVcsR0FBS3RNLEdBQUcsSUFBSztRQUM3QixDQUFDQSxHQUFHLENBQUM3QixPQUFPLElBQUksRUFBRSxFQUFFOEMsT0FBTyxDQUFHM0MsR0FBRyxJQUFLO1VBQ3JDLENBQUNBLEdBQUcsQ0FBQ2lDLE1BQU0sSUFBSSxFQUFFLEVBQUVVLE9BQU8sQ0FBR1QsQ0FBQyxJQUFLK0wsWUFBWSxDQUFFL0wsQ0FBRSxDQUFFLENBQUM7VUFDdEQsQ0FBQ2xDLEdBQUcsQ0FBQ3FDLFFBQVEsSUFBSSxFQUFFLEVBQUVNLE9BQU8sQ0FBR3BELENBQUMsSUFBS3lPLFdBQVcsQ0FBRXpPLENBQUUsQ0FBRSxDQUFDO1FBQ3hELENBQUUsQ0FBQztNQUNKLENBQUM7TUFDRCxNQUFNMk8sV0FBVyxHQUFLdEwsSUFBSSxJQUFLO1FBQzlCLElBQUssQ0FBQ0EsSUFBSSxFQUFHO1FBQ2IsSUFBS0EsSUFBSSxDQUFDQyxJQUFJLEtBQUssT0FBTyxFQUFHb0wsWUFBWSxDQUFFckwsSUFBSSxDQUFDUixJQUFLLENBQUM7UUFDdEQsSUFBS1EsSUFBSSxDQUFDQyxJQUFJLEtBQUssU0FBUyxFQUFHbUwsV0FBVyxDQUFFcEwsSUFBSSxDQUFDUixJQUFLLENBQUM7TUFDeEQsQ0FBQztNQUNELE1BQU02TCxZQUFZLEdBQUlsRyxLQUFLLElBQUs7UUFDL0IsSUFBSyxDQUFDQSxLQUFLLEVBQUc7UUFDZDtRQUNBLElBQUtyQyx3QkFBd0IsQ0FBQ3lDLHVCQUF1QixDQUFFSixLQUFLLEVBQUVVLElBQUksRUFBRTtVQUFFN0UsR0FBRztVQUFFbEo7UUFBSyxDQUFFLENBQUMsRUFBRztRQUN0Rm1ULGlCQUFpQixDQUFFOUYsS0FBTSxDQUFDO01BQzNCLENBQUM7O01BRUQ7TUFDQTFELElBQUksQ0FBRSxxQ0FBc0MsQ0FBQztNQUM3Q1YsT0FBTyxDQUFDMUMsS0FBSyxDQUFDMEIsT0FBTyxDQUFHRixJQUFJLElBQUssQ0FBQ0EsSUFBSSxDQUFDdkIsS0FBSyxJQUFJLEVBQUUsRUFBRXlCLE9BQU8sQ0FBRXVMLFdBQVksQ0FBRSxDQUFDO01BQzVFNUosS0FBSyxDQUFFLFFBQVMsQ0FBQztNQUVqQixPQUFPSCxLQUFLLENBQUNoRixJQUFJLENBQUV5RSxHQUFHLENBQUNDLE9BQVEsQ0FBQztJQUNqQztFQUVEOztFQUVBO0VBQ0FsSixNQUFNLENBQUMrSyx3QkFBd0IsR0FBRy9LLE1BQU0sQ0FBQytLLHdCQUF3QixJQUFJQSx3QkFBd0I7RUFDN0Y0SCw2QkFBNkIsQ0FBRSxpQ0FBaUMsRUFBRSxDQUFDLENBQUUsQ0FBQztBQUN2RSxDQUFDLEVBQUUsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==