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
booking / includes / page-form-builder / field-packs / _shared / _out / hint-shortcode-wptpl.js

hint-shortcode-wptpl.js in Booking Calendar 11.9, at includes/page-form-builder/field-packs/_shared/_out/hint-shortcode-wptpl.js

173 lines 26.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 // == WPBC BFB Shared Pack Helper: Generic Hint Shortcode
4 (function (w, d) {
5 'use strict';
6
7 /**
8 * Register one shortcode-backed hint field.
9 *
10 * @param {Object} cfg Hint field configuration.
11 * @param {boolean} cfg.export_to_booking_data Whether the Content exporter should include this hint.
12 * @return {void}
13 */
14 w.WPBC_BFB_RegisterShortcodeHintPack = function (cfg) {
15 cfg = cfg || {};
16 var T = String(cfg.token || '');
17 var S = String(cfg.shortcode || T);
18 var P = String(cfg.prefix || '');
19 var L = String(cfg.label || T);
20 var B = String(cfg.boot || '');
21 var F = String(cfg.fallback || '');
22 var export_to_booking_data = true === cfg.export_to_booking_data;
23 var Core = w.WPBC_BFB_Core || {};
24 var Registry = Core.WPBC_BFB_Field_Renderer_Registry;
25 var Base = Core.WPBC_BFB_Field_Base;
26 if (!T) {
27 return;
28 }
29 if (!Registry || typeof Registry.register !== 'function' || !Base) {
30 w._wpbc?.dev?.error?.('wpbc_bfb_field_' + T, 'Core registry/base missing');
31 return;
32 }
33 class ShortcodeHintField extends Base {
34 static template_id = 'wpbc-bfb-field-' + T;
35 static get_defaults() {
36 return {
37 type: T,
38 prefix_text: P,
39 html_id: '',
40 cssclass: '',
41 help: ''
42 };
43 }
44 static get_boot() {
45 return B ? w[B] || {} : {};
46 }
47 static render(el, data, ctx) {
48 if (!el) {
49 return;
50 }
51 var d_normalized = this.normalize_data(data);
52 var s = Core.WPBC_BFB_Sanitize || {};
53 var boot = this.get_boot();
54 var html_id = d_normalized.html_id ? s.sanitize_html_id ? s.sanitize_html_id(String(d_normalized.html_id)) : String(d_normalized.html_id) : '';
55 var cssclass = d_normalized.cssclass ? s.sanitize_css_classlist ? s.sanitize_css_classlist(String(d_normalized.cssclass)) : String(d_normalized.cssclass) : '';
56 var tpl = this.get_template(this.template_id);
57 var is_supported = String(boot.is_supported || '0') === '1';
58 if (typeof tpl !== 'function') {
59 el.innerHTML = '<div class="wpbc_bfb__error" role="alert">Template not found: ' + this.template_id + '.</div>';
60 return;
61 }
62 try {
63 el.innerHTML = tpl(Object.assign({}, d_normalized, {
64 html_id: html_id,
65 cssclass: cssclass,
66 is_supported: is_supported,
67 upgrade_text: String(boot.upgrade_text || ''),
68 preview_value: String(boot.preview_value || F)
69 }));
70 } catch (er) {
71 w._wpbc?.dev?.error?.(T + '_wptpl.tpl.render', er);
72 el.innerHTML = '<div class="wpbc_bfb__error" role="alert">Error rendering ' + L + ' preview.</div>';
73 return;
74 }
75 el.dataset.type = T;
76 el.dataset.prefix_text = d_normalized.prefix_text != null ? String(d_normalized.prefix_text) : '';
77 el.dataset.html_id = html_id;
78 el.dataset.cssclass = cssclass;
79 el.dataset.help = d_normalized.help != null ? String(d_normalized.help) : '';
80 el.setAttribute('data-label', d_normalized.prefix_text != null ? String(d_normalized.prefix_text) : '');
81 Core.UI?.WPBC_BFB_Overlay?.ensure?.(ctx?.builder, el);
82 }
83 static on_field_drop(data, el, ctx) {
84 super.on_field_drop?.(data, el, ctx);
85 }
86 }
87 try {
88 Registry.register(T, ShortcodeHintField);
89 } catch (er) {
90 w._wpbc?.dev?.error?.('wpbc_bfb_field_' + T + '.register', er);
91 }
92 function register_booking_form_exporter() {
93 var exporter = w.WPBC_BFB_Exporter;
94 if (!exporter || typeof exporter.register !== 'function') {
95 return;
96 }
97 if (typeof exporter.has_exporter === 'function' && exporter.has_exporter(T)) {
98 return;
99 }
100 var s = Core.WPBC_BFB_Sanitize || {};
101 var esc_html = s.escape_html || function (value) {
102 return String(value).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;');
103 };
104 var sanitize_html_id = s.sanitize_html_id || function (value) {
105 return String(value || '');
106 };
107 var sanitize_css_classlist = s.sanitize_css_classlist || function (value) {
108 return String(value || '');
109 };
110 exporter.register(T, function (field, emit) {
111 var prefix_text = field && typeof field.prefix_text === 'string' ? field.prefix_text.trim() : P;
112 var html_id = field && field.html_id ? sanitize_html_id(field.html_id) : '';
113 var cssclass = field && field.cssclass ? sanitize_css_classlist(field.cssclass) : '';
114 var body_html = '';
115 var attrs = '';
116 if (prefix_text) {
117 body_html += esc_html(prefix_text) + '&nbsp;';
118 }
119 body_html += '<strong>[' + S + ']</strong>';
120 if (html_id) {
121 attrs += ' id="' + esc_html(html_id) + '"';
122 }
123 if (cssclass) {
124 attrs += ' class="' + esc_html(cssclass) + '"';
125 }
126 if (attrs) {
127 body_html = '<span' + attrs + '>' + body_html + '</span>';
128 }
129 emit(body_html);
130 });
131 }
132 if (w.WPBC_BFB_Exporter && typeof w.WPBC_BFB_Exporter.register === 'function') {
133 register_booking_form_exporter();
134 } else {
135 d.addEventListener('wpbc:bfb:exporter-ready', register_booking_form_exporter, {
136 once: true
137 });
138 }
139 function register_booking_data_exporter() {
140 var content_exporter = w.WPBC_BFB_ContentExporter;
141 if (!content_exporter || typeof content_exporter.register !== 'function') {
142 return;
143 }
144 if (typeof content_exporter.has_exporter === 'function' && content_exporter.has_exporter(T)) {
145 return;
146 }
147 content_exporter.register(T, function (field, emit, extras) {
148 extras = extras || {};
149 var cfg_export = extras.cfg || {};
150 var has_prefix_text = field && typeof field.prefix_text === 'string';
151 var raw_label = has_prefix_text ? field.prefix_text.trim() : '';
152 var label = has_prefix_text ? raw_label.replace(/\s*:\s*$/, '') : L;
153 if (!export_to_booking_data) {
154 return;
155 }
156 if (typeof content_exporter.emit_line_bold_field === 'function') {
157 content_exporter.emit_line_bold_field(emit, label, S, cfg_export);
158 return;
159 }
160 emit((label ? '<b>' + label + '</b>: ' : '') + '<f>[' + S + ']</f><br>');
161 });
162 }
163 if (w.WPBC_BFB_ContentExporter && typeof w.WPBC_BFB_ContentExporter.register === 'function') {
164 register_booking_data_exporter();
165 } else {
166 d.addEventListener('wpbc:bfb:content-exporter-ready', register_booking_data_exporter, {
167 once: true
168 });
169 }
170 };
171 })(window, document);
172 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZmllbGQtcGFja3MvX3NoYXJlZC9fb3V0L2hpbnQtc2hvcnRjb2RlLXdwdHBsLmpzIiwibmFtZXMiOlsidyIsImQiLCJXUEJDX0JGQl9SZWdpc3RlclNob3J0Y29kZUhpbnRQYWNrIiwiY2ZnIiwiVCIsIlN0cmluZyIsInRva2VuIiwiUyIsInNob3J0Y29kZSIsIlAiLCJwcmVmaXgiLCJMIiwibGFiZWwiLCJCIiwiYm9vdCIsIkYiLCJmYWxsYmFjayIsImV4cG9ydF90b19ib29raW5nX2RhdGEiLCJDb3JlIiwiV1BCQ19CRkJfQ29yZSIsIlJlZ2lzdHJ5IiwiV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnkiLCJCYXNlIiwiV1BCQ19CRkJfRmllbGRfQmFzZSIsInJlZ2lzdGVyIiwiX3dwYmMiLCJkZXYiLCJlcnJvciIsIlNob3J0Y29kZUhpbnRGaWVsZCIsInRlbXBsYXRlX2lkIiwiZ2V0X2RlZmF1bHRzIiwidHlwZSIsInByZWZpeF90ZXh0IiwiaHRtbF9pZCIsImNzc2NsYXNzIiwiaGVscCIsImdldF9ib290IiwicmVuZGVyIiwiZWwiLCJkYXRhIiwiY3R4IiwiZF9ub3JtYWxpemVkIiwibm9ybWFsaXplX2RhdGEiLCJzIiwiV1BCQ19CRkJfU2FuaXRpemUiLCJzYW5pdGl6ZV9odG1sX2lkIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRwbCIsImdldF90ZW1wbGF0ZSIsImlzX3N1cHBvcnRlZCIsImlubmVySFRNTCIsIk9iamVjdCIsImFzc2lnbiIsInVwZ3JhZGVfdGV4dCIsInByZXZpZXdfdmFsdWUiLCJlciIsImRhdGFzZXQiLCJzZXRBdHRyaWJ1dGUiLCJVSSIsIldQQkNfQkZCX092ZXJsYXkiLCJlbnN1cmUiLCJidWlsZGVyIiwib25fZmllbGRfZHJvcCIsInJlZ2lzdGVyX2Jvb2tpbmdfZm9ybV9leHBvcnRlciIsImV4cG9ydGVyIiwiV1BCQ19CRkJfRXhwb3J0ZXIiLCJoYXNfZXhwb3J0ZXIiLCJlc2NfaHRtbCIsImVzY2FwZV9odG1sIiwidmFsdWUiLCJyZXBsYWNlIiwiZmllbGQiLCJlbWl0IiwidHJpbSIsImJvZHlfaHRtbCIsImF0dHJzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uY2UiLCJyZWdpc3Rlcl9ib29raW5nX2RhdGFfZXhwb3J0ZXIiLCJjb250ZW50X2V4cG9ydGVyIiwiV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyIiwiZXh0cmFzIiwiY2ZnX2V4cG9ydCIsImhhc19wcmVmaXhfdGV4dCIsInJhd19sYWJlbCIsImVtaXRfbGluZV9ib2xkX2ZpZWxkIiwid2luZG93IiwiZG9jdW1lbnQiXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9maWVsZC1wYWNrcy9fc2hhcmVkL19zcmMvaGludC1zaG9ydGNvZGUtd3B0cGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gPT0gV1BCQyBCRkIgU2hhcmVkIFBhY2sgSGVscGVyOiBHZW5lcmljIEhpbnQgU2hvcnRjb2RlXG4oZnVuY3Rpb24gKCB3LCBkICkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIG9uZSBzaG9ydGNvZGUtYmFja2VkIGhpbnQgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSAgY2ZnICAgICAgICAgICAgICAgICAgICAgICAgSGludCBmaWVsZCBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGNmZy5leHBvcnRfdG9fYm9va2luZ19kYXRhIFdoZXRoZXIgdGhlIENvbnRlbnQgZXhwb3J0ZXIgc2hvdWxkIGluY2x1ZGUgdGhpcyBoaW50LlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0dy5XUEJDX0JGQl9SZWdpc3RlclNob3J0Y29kZUhpbnRQYWNrID0gZnVuY3Rpb24gKCBjZmcgKSB7XG5cdFx0Y2ZnID0gY2ZnIHx8IHt9O1xuXG5cdFx0dmFyIFQgPSBTdHJpbmcoIGNmZy50b2tlbiB8fCAnJyApO1xuXHRcdHZhciBTID0gU3RyaW5nKCBjZmcuc2hvcnRjb2RlIHx8IFQgKTtcblx0XHR2YXIgUCA9IFN0cmluZyggY2ZnLnByZWZpeCB8fCAnJyApO1xuXHRcdHZhciBMID0gU3RyaW5nKCBjZmcubGFiZWwgfHwgVCApO1xuXHRcdHZhciBCID0gU3RyaW5nKCBjZmcuYm9vdCB8fCAnJyApO1xuXHRcdHZhciBGID0gU3RyaW5nKCBjZmcuZmFsbGJhY2sgfHwgJycgKTtcblx0XHR2YXIgZXhwb3J0X3RvX2Jvb2tpbmdfZGF0YSA9IHRydWUgPT09IGNmZy5leHBvcnRfdG9fYm9va2luZ19kYXRhO1xuXHRcdHZhciBDb3JlID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9O1xuXHRcdHZhciBSZWdpc3RyeSA9IENvcmUuV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnk7XG5cdFx0dmFyIEJhc2UgPSBDb3JlLldQQkNfQkZCX0ZpZWxkX0Jhc2U7XG5cblx0XHRpZiAoICEgVCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICEgUmVnaXN0cnkgfHwgdHlwZW9mIFJlZ2lzdHJ5LnJlZ2lzdGVyICE9PSAnZnVuY3Rpb24nIHx8ICEgQmFzZSApIHtcblx0XHRcdHcuX3dwYmM/LmRldj8uZXJyb3I/LiggJ3dwYmNfYmZiX2ZpZWxkXycgKyBULCAnQ29yZSByZWdpc3RyeS9iYXNlIG1pc3NpbmcnICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2xhc3MgU2hvcnRjb2RlSGludEZpZWxkIGV4dGVuZHMgQmFzZSB7XG5cdFx0XHRzdGF0aWMgdGVtcGxhdGVfaWQgPSAnd3BiYy1iZmItZmllbGQtJyArIFQ7XG5cblx0XHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XG5cdFx0XHRcdHJldHVybiB7IHR5cGU6IFQsIHByZWZpeF90ZXh0OiBQLCBodG1sX2lkOiAnJywgY3NzY2xhc3M6ICcnLCBoZWxwOiAnJyB9O1xuXHRcdFx0fVxuXG5cdFx0XHRzdGF0aWMgZ2V0X2Jvb3QoKSB7XG5cdFx0XHRcdHJldHVybiBCID8gKCB3WyBCIF0gfHwge30gKSA6IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRzdGF0aWMgcmVuZGVyKCBlbCwgZGF0YSwgY3R4ICkge1xuXHRcdFx0XHRpZiAoICEgZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGRfbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplX2RhdGEoIGRhdGEgKTtcblx0XHRcdFx0dmFyIHMgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplIHx8IHt9O1xuXHRcdFx0XHR2YXIgYm9vdCA9IHRoaXMuZ2V0X2Jvb3QoKTtcblx0XHRcdFx0dmFyIGh0bWxfaWQgPSBkX25vcm1hbGl6ZWQuaHRtbF9pZCA/ICggcy5zYW5pdGl6ZV9odG1sX2lkID8gcy5zYW5pdGl6ZV9odG1sX2lkKCBTdHJpbmcoIGRfbm9ybWFsaXplZC5odG1sX2lkICkgKSA6IFN0cmluZyggZF9ub3JtYWxpemVkLmh0bWxfaWQgKSApIDogJyc7XG5cdFx0XHRcdHZhciBjc3NjbGFzcyA9IGRfbm9ybWFsaXplZC5jc3NjbGFzcyA/ICggcy5zYW5pdGl6ZV9jc3NfY2xhc3NsaXN0ID8gcy5zYW5pdGl6ZV9jc3NfY2xhc3NsaXN0KCBTdHJpbmcoIGRfbm9ybWFsaXplZC5jc3NjbGFzcyApICkgOiBTdHJpbmcoIGRfbm9ybWFsaXplZC5jc3NjbGFzcyApICkgOiAnJztcblx0XHRcdFx0dmFyIHRwbCA9IHRoaXMuZ2V0X3RlbXBsYXRlKCB0aGlzLnRlbXBsYXRlX2lkICk7XG5cdFx0XHRcdHZhciBpc19zdXBwb3J0ZWQgPSBTdHJpbmcoIGJvb3QuaXNfc3VwcG9ydGVkIHx8ICcwJyApID09PSAnMSc7XG5cblx0XHRcdFx0aWYgKCB0eXBlb2YgdHBsICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+VGVtcGxhdGUgbm90IGZvdW5kOiAnICsgdGhpcy50ZW1wbGF0ZV9pZCArICcuPC9kaXY+Jztcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsLmlubmVySFRNTCA9IHRwbCggT2JqZWN0LmFzc2lnbigge30sIGRfbm9ybWFsaXplZCwge1xuXHRcdFx0XHRcdFx0aHRtbF9pZDogaHRtbF9pZCxcblx0XHRcdFx0XHRcdGNzc2NsYXNzOiBjc3NjbGFzcyxcblx0XHRcdFx0XHRcdGlzX3N1cHBvcnRlZDogaXNfc3VwcG9ydGVkLFxuXHRcdFx0XHRcdFx0dXBncmFkZV90ZXh0OiBTdHJpbmcoIGJvb3QudXBncmFkZV90ZXh0IHx8ICcnICksXG5cdFx0XHRcdFx0XHRwcmV2aWV3X3ZhbHVlOiBTdHJpbmcoIGJvb3QucHJldmlld192YWx1ZSB8fCBGIClcblx0XHRcdFx0XHR9ICkgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGVyICkge1xuXHRcdFx0XHRcdHcuX3dwYmM/LmRldj8uZXJyb3I/LiggVCArICdfd3B0cGwudHBsLnJlbmRlcicsIGVyICk7XG5cdFx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9fZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5FcnJvciByZW5kZXJpbmcgJyArIEwgKyAnIHByZXZpZXcuPC9kaXY+Jztcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbC5kYXRhc2V0LnR5cGUgPSBUO1xuXHRcdFx0XHRlbC5kYXRhc2V0LnByZWZpeF90ZXh0ID0gZF9ub3JtYWxpemVkLnByZWZpeF90ZXh0ICE9IG51bGwgPyBTdHJpbmcoIGRfbm9ybWFsaXplZC5wcmVmaXhfdGV4dCApIDogJyc7XG5cdFx0XHRcdGVsLmRhdGFzZXQuaHRtbF9pZCA9IGh0bWxfaWQ7XG5cdFx0XHRcdGVsLmRhdGFzZXQuY3NzY2xhc3MgPSBjc3NjbGFzcztcblx0XHRcdFx0ZWwuZGF0YXNldC5oZWxwID0gZF9ub3JtYWxpemVkLmhlbHAgIT0gbnVsbCA/IFN0cmluZyggZF9ub3JtYWxpemVkLmhlbHAgKSA6ICcnO1xuXHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLWxhYmVsJywgZF9ub3JtYWxpemVkLnByZWZpeF90ZXh0ICE9IG51bGwgPyBTdHJpbmcoIGRfbm9ybWFsaXplZC5wcmVmaXhfdGV4dCApIDogJycgKTtcblx0XHRcdFx0Q29yZS5VST8uV1BCQ19CRkJfT3ZlcmxheT8uZW5zdXJlPy4oIGN0eD8uYnVpbGRlciwgZWwgKTtcblx0XHRcdH1cblxuXHRcdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoIGRhdGEsIGVsLCBjdHggKSB7XG5cdFx0XHRcdHN1cGVyLm9uX2ZpZWxkX2Ryb3A/LiggZGF0YSwgZWwsIGN0eCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRSZWdpc3RyeS5yZWdpc3RlciggVCwgU2hvcnRjb2RlSGludEZpZWxkICk7XG5cdFx0fSBjYXRjaCAoIGVyICkge1xuXHRcdFx0dy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnd3BiY19iZmJfZmllbGRfJyArIFQgKyAnLnJlZ2lzdGVyJywgZXIgKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZWdpc3Rlcl9ib29raW5nX2Zvcm1fZXhwb3J0ZXIoKSB7XG5cdFx0XHR2YXIgZXhwb3J0ZXIgPSB3LldQQkNfQkZCX0V4cG9ydGVyO1xuXHRcdFx0aWYgKCAhIGV4cG9ydGVyIHx8IHR5cGVvZiBleHBvcnRlci5yZWdpc3RlciAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0eXBlb2YgZXhwb3J0ZXIuaGFzX2V4cG9ydGVyID09PSAnZnVuY3Rpb24nICYmIGV4cG9ydGVyLmhhc19leHBvcnRlciggVCApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZSB8fCB7fTtcblx0XHRcdHZhciBlc2NfaHRtbCA9IHMuZXNjYXBlX2h0bWwgfHwgZnVuY3Rpb24gKCB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuIFN0cmluZyggdmFsdWUgKS5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnICkucmVwbGFjZSggLzwvZywgJyZsdDsnICkucmVwbGFjZSggLz4vZywgJyZndDsnICkucmVwbGFjZSggL1wiL2csICcmcXVvdDsnICkucmVwbGFjZSggLycvZywgJyYjMDM5OycgKTtcblx0XHRcdH07XG5cdFx0XHR2YXIgc2FuaXRpemVfaHRtbF9pZCA9IHMuc2FuaXRpemVfaHRtbF9pZCB8fCBmdW5jdGlvbiAoIHZhbHVlICkgeyByZXR1cm4gU3RyaW5nKCB2YWx1ZSB8fCAnJyApOyB9O1xuXHRcdFx0dmFyIHNhbml0aXplX2Nzc19jbGFzc2xpc3QgPSBzLnNhbml0aXplX2Nzc19jbGFzc2xpc3QgfHwgZnVuY3Rpb24gKCB2YWx1ZSApIHsgcmV0dXJuIFN0cmluZyggdmFsdWUgfHwgJycgKTsgfTtcblxuXHRcdFx0ZXhwb3J0ZXIucmVnaXN0ZXIoIFQsIGZ1bmN0aW9uICggZmllbGQsIGVtaXQgKSB7XG5cdFx0XHRcdHZhciBwcmVmaXhfdGV4dCA9ICggZmllbGQgJiYgdHlwZW9mIGZpZWxkLnByZWZpeF90ZXh0ID09PSAnc3RyaW5nJyApID8gZmllbGQucHJlZml4X3RleHQudHJpbSgpIDogUDtcblx0XHRcdFx0dmFyIGh0bWxfaWQgPSBmaWVsZCAmJiBmaWVsZC5odG1sX2lkID8gc2FuaXRpemVfaHRtbF9pZCggZmllbGQuaHRtbF9pZCApIDogJyc7XG5cdFx0XHRcdHZhciBjc3NjbGFzcyA9IGZpZWxkICYmIGZpZWxkLmNzc2NsYXNzID8gc2FuaXRpemVfY3NzX2NsYXNzbGlzdCggZmllbGQuY3NzY2xhc3MgKSA6ICcnO1xuXHRcdFx0XHR2YXIgYm9keV9odG1sID0gJyc7XG5cdFx0XHRcdHZhciBhdHRycyA9ICcnO1xuXG5cdFx0XHRcdGlmICggcHJlZml4X3RleHQgKSB7XG5cdFx0XHRcdFx0Ym9keV9odG1sICs9IGVzY19odG1sKCBwcmVmaXhfdGV4dCApICsgJyZuYnNwOyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ym9keV9odG1sICs9ICc8c3Ryb25nPlsnICsgUyArICddPC9zdHJvbmc+Jztcblx0XHRcdFx0aWYgKCBodG1sX2lkICkge1xuXHRcdFx0XHRcdGF0dHJzICs9ICcgaWQ9XCInICsgZXNjX2h0bWwoIGh0bWxfaWQgKSArICdcIic7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBjc3NjbGFzcyApIHtcblx0XHRcdFx0XHRhdHRycyArPSAnIGNsYXNzPVwiJyArIGVzY19odG1sKCBjc3NjbGFzcyApICsgJ1wiJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGF0dHJzICkge1xuXHRcdFx0XHRcdGJvZHlfaHRtbCA9ICc8c3BhbicgKyBhdHRycyArICc+JyArIGJvZHlfaHRtbCArICc8L3NwYW4+Jztcblx0XHRcdFx0fVxuXHRcdFx0XHRlbWl0KCBib2R5X2h0bWwgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHcuV1BCQ19CRkJfRXhwb3J0ZXIgJiYgdHlwZW9mIHcuV1BCQ19CRkJfRXhwb3J0ZXIucmVnaXN0ZXIgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRyZWdpc3Rlcl9ib29raW5nX2Zvcm1fZXhwb3J0ZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6ZXhwb3J0ZXItcmVhZHknLCByZWdpc3Rlcl9ib29raW5nX2Zvcm1fZXhwb3J0ZXIsIHsgb25jZTogdHJ1ZSB9ICk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVnaXN0ZXJfYm9va2luZ19kYXRhX2V4cG9ydGVyKCkge1xuXHRcdFx0dmFyIGNvbnRlbnRfZXhwb3J0ZXIgPSB3LldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlcjtcblx0XHRcdGlmICggISBjb250ZW50X2V4cG9ydGVyIHx8IHR5cGVvZiBjb250ZW50X2V4cG9ydGVyLnJlZ2lzdGVyICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZW50X2V4cG9ydGVyLmhhc19leHBvcnRlciA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZW50X2V4cG9ydGVyLmhhc19leHBvcnRlciggVCApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRlbnRfZXhwb3J0ZXIucmVnaXN0ZXIoIFQsIGZ1bmN0aW9uICggZmllbGQsIGVtaXQsIGV4dHJhcyApIHtcblx0XHRcdFx0ZXh0cmFzID0gZXh0cmFzIHx8IHt9O1xuXHRcdFx0XHR2YXIgY2ZnX2V4cG9ydCA9IGV4dHJhcy5jZmcgfHwge307XG5cdFx0XHRcdHZhciBoYXNfcHJlZml4X3RleHQgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQucHJlZml4X3RleHQgPT09ICdzdHJpbmcnO1xuXHRcdFx0XHR2YXIgcmF3X2xhYmVsID0gaGFzX3ByZWZpeF90ZXh0ID8gZmllbGQucHJlZml4X3RleHQudHJpbSgpIDogJyc7XG5cdFx0XHRcdHZhciBsYWJlbCA9IGhhc19wcmVmaXhfdGV4dCA/IHJhd19sYWJlbC5yZXBsYWNlKCAvXFxzKjpcXHMqJC8sICcnICkgOiBMO1xuXG5cdFx0XHRcdGlmICggISBleHBvcnRfdG9fYm9va2luZ19kYXRhICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggdHlwZW9mIGNvbnRlbnRfZXhwb3J0ZXIuZW1pdF9saW5lX2JvbGRfZmllbGQgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdFx0Y29udGVudF9leHBvcnRlci5lbWl0X2xpbmVfYm9sZF9maWVsZCggZW1pdCwgbGFiZWwsIFMsIGNmZ19leHBvcnQgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZW1pdCggKCBsYWJlbCA/ICc8Yj4nICsgbGFiZWwgKyAnPC9iPjogJyA6ICcnICkgKyAnPGY+WycgKyBTICsgJ108L2Y+PGJyPicgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHcuV1BCQ19CRkJfQ29udGVudEV4cG9ydGVyICYmIHR5cGVvZiB3LldQQkNfQkZCX0NvbnRlbnRFeHBvcnRlci5yZWdpc3RlciA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHJlZ2lzdGVyX2Jvb2tpbmdfZGF0YV9leHBvcnRlcigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkLmFkZEV2ZW50TGlzdGVuZXIoICd3cGJjOmJmYjpjb250ZW50LWV4cG9ydGVyLXJlYWR5JywgcmVnaXN0ZXJfYm9va2luZ19kYXRhX2V4cG9ydGVyLCB7IG9uY2U6IHRydWUgfSApO1xuXHRcdH1cblx0fTtcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxDQUFDLFVBQVdBLENBQUMsRUFBRUMsQ0FBQyxFQUFHO0VBQ2xCLFlBQVk7O0VBRVo7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQ0QsQ0FBQyxDQUFDRSxrQ0FBa0MsR0FBRyxVQUFXQyxHQUFHLEVBQUc7SUFDdkRBLEdBQUcsR0FBR0EsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUVmLElBQUlDLENBQUMsR0FBR0MsTUFBTSxDQUFFRixHQUFHLENBQUNHLEtBQUssSUFBSSxFQUFHLENBQUM7SUFDakMsSUFBSUMsQ0FBQyxHQUFHRixNQUFNLENBQUVGLEdBQUcsQ0FBQ0ssU0FBUyxJQUFJSixDQUFFLENBQUM7SUFDcEMsSUFBSUssQ0FBQyxHQUFHSixNQUFNLENBQUVGLEdBQUcsQ0FBQ08sTUFBTSxJQUFJLEVBQUcsQ0FBQztJQUNsQyxJQUFJQyxDQUFDLEdBQUdOLE1BQU0sQ0FBRUYsR0FBRyxDQUFDUyxLQUFLLElBQUlSLENBQUUsQ0FBQztJQUNoQyxJQUFJUyxDQUFDLEdBQUdSLE1BQU0sQ0FBRUYsR0FBRyxDQUFDVyxJQUFJLElBQUksRUFBRyxDQUFDO0lBQ2hDLElBQUlDLENBQUMsR0FBR1YsTUFBTSxDQUFFRixHQUFHLENBQUNhLFFBQVEsSUFBSSxFQUFHLENBQUM7SUFDcEMsSUFBSUMsc0JBQXNCLEdB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
173