UNPKG

faastjs

Version:

Serverless batch computing made simple.

233 lines 21.9 kB
export const FAAST_URL = import.meta.url; export function test() { return "Successfully called test function."; } export function empty() { } export function identityString(name) { return name; } export function identityNum(n) { return n; } export function identityBool(b) { return b; } export function identityUndefined(u) { return u; } export function identityNull(n) { return n; } export function identityObject(o) { return o; } export function identityArrayNum(n) { return n; } export function identityArrayString(s) { return s; } export function identityInt8(a) { return a; } export function identityUint8(a) { return a; } export function identityUint8Clamped(a) { return a; } export function identityInt16(a) { return a; } export function identityUint16(a) { return a; } export function identityInt32(a) { return a; } export function identityUint32(a) { return a; } export function identityFloat32(a) { return a; } export function identityFloat64(a) { return a; } export function identityBigInt64(a) { return a; } export function identityBigUint64(a) { return a; } export function identityMap(m) { return m; } export function identitySet(s) { return s; } export const arrow = (str) => str; export const asyncArrow = async (str) => str; export function hello(name) { return `Hello ${name}!`; } export function fact(n) { return n <= 1 ? 1 : n * fact(n - 1); } export function concat(a, b) { return a + b; } export function error(a) { throw new Error(`Expected error. Arg: ${a}`); } export function noargs() { return "called function with no args."; } export function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } export function delayReject(ms) { return new Promise((_, reject) => setTimeout(reject, ms)); } export async function async() { await sleep(200); return "async function: success"; } export function path() { return sleep(200).then(() => process.env.PATH || "no PATH variable"); } export function emptyReject() { return Promise.reject(); } export function rejected() { return Promise.reject("intentionally rejected"); } export async function timer(delayMs) { const start = Date.now(); await sleep(delayMs); const end = Date.now(); return { start, end }; } export function spin(ms) { const start = Date.now(); while (true) { if (Date.now() - start >= ms) { break; } } const end = Date.now(); return { start, end }; } export function infiniteLoop() { while (true) { } } export function optionalArg(arg) { return arg ? arg : "No arg"; } export function consoleLog(str) { console.log(str); } export function consoleWarn(str) { console.warn(str); } export function consoleError(str) { console.error(str); } export function consoleInfo(str) { console.info(str); } export function processExit(code) { process.exit(code); } class CustomError extends Error { constructor(message, custom) { super(message); this.custom = custom; } } export function customError() { throw new CustomError("custom error message", "custom value"); } export function returnsError() { return new Error("a returned non-thrown error"); } export async function allocate(bytes) { const array = new Array(bytes / 8); const elems = array.length; for (let i = 0; i < elems; i++) { array[i] = i; } console.log(`allocated: %O`, { bytes, elems }); console.log(`post allocate memory usage: %O`, process.memoryUsage()); await sleep(1000); console.log(`Returning from allocate`); return { bytes, elems }; } export function getEnv(key) { return process.env[key]; } export function monteCarloPI(samples) { let inside = 0; for (let n = 0; n < samples; n++) { const [x, y] = [Math.random(), Math.random()]; if (x ** 2 + y ** 2 <= 1) { inside++; } } return { inside, samples }; } export function* generator(args) { yield* args; } export async function* asyncGenerator(args) { yield* args; } export async function* generateThenInfiniteLoop(arg) { yield arg; while (true) { } } export async function* asyncGeneratorDelay(args, delay) { for (const arg of args) { await sleep(delay); yield arg; } } export async function* asyncGeneratorError(msg) { yield 1; throw new Error(msg); } /** * Not supported. * @remarks * Examples of functions arguments or return values that are not supported. */ export function promiseArg(promise) { return promise; } export function identityFunction(fn) { return fn; } export function functionReturn() { return () => { console.log("returned a function"); }; } export function identityBuffer(buf) { return buf; } export function identityDate(arg) { return arg; } export class Cls { constructor() { } } export function identityClass(arg) { return arg; } export function classReturn() { return new Cls(); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZml4dHVyZXMvZnVuY3Rpb25zLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFFekMsTUFBTSxVQUFVLElBQUk7SUFDaEIsT0FBTyxvQ0FBb0MsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssS0FBSSxDQUFDO0FBRTFCLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFTO0lBQ2pDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBVTtJQUNuQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsQ0FBWTtJQUMxQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQU87SUFDaEMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxDQUFTO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFXO0lBQ3hDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxDQUFXO0lBQzNDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBWTtJQUNyQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQWE7SUFDdkMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxV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TyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRkFBU1RfVVJMID0gaW1wb3J0Lm1ldGEudXJsO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVzdCgpIHtcbiAgICByZXR1cm4gXCJTdWNjZXNzZnVsbHkgY2FsbGVkIHRlc3QgZnVuY3Rpb24uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eSgpIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVN0cmluZyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmFtZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU51bShuOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJvb2woYjogYm9vbGVhbikge1xuICAgIHJldHVybiBiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VW5kZWZpbmVkKHU6IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5TnVsbChuOiBudWxsKSB7XG4gICAgcmV0dXJuIG47XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlPYmplY3Qobzogb2JqZWN0KSB7XG4gICAgcmV0dXJuIG87XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlBcnJheU51bShuOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QXJyYXlTdHJpbmcoczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDgoYTogSW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50OChhOiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50OENsYW1wZWQoYTogVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDE2KGE6IEludDE2QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVpbnQxNihhOiBVaW50MTZBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5SW50MzIoYTogSW50MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDMyKGE6IFVpbnQzMkFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlGbG9hdDMyKGE6IEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RmxvYXQ2NChhOiBGbG9hdDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJpZ0ludDY0KGE6IEJpZ0ludDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJpZ1VpbnQ2NChhOiBCaWdVaW50NjRBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5TWFwKG06IE1hcDxudW1iZXIsIG51bWJlcj4pIHtcbiAgICByZXR1cm4gbTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVNldChzOiBTZXQ8bnVtYmVyPikge1xuICAgIHJldHVybiBzO1xufVxuXG5leHBvcnQgY29uc3QgYXJyb3cgPSAoc3RyOiBzdHJpbmcpID0+IHN0cjtcblxuZXhwb3J0IGNvbnN0IGFzeW5jQXJyb3cgPSBhc3luYyAoc3RyOiBzdHJpbmcpID0+IHN0cjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhlbGxvKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgSGVsbG8gJHtuYW1lfSFgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFjdChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBuIDw9IDEgPyAxIDogbiAqIGZhY3QobiAtIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGEgKyBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3IoYTogc3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBlcnJvci4gQXJnOiAke2F9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2FyZ3MoKSB7XG4gICAgcmV0dXJuIFwiY2FsbGVkIGZ1bmN0aW9uIHdpdGggbm8gYXJncy5cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheVJlamVjdChtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQocmVqZWN0LCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmMoKSB7XG4gICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICByZXR1cm4gXCJhc3luYyBmdW5jdGlvbjogc3VjY2Vzc1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBzbGVlcCgyMDApLnRoZW4oKCkgPT4gcHJvY2Vzcy5lbnYuUEFUSCB8fCBcIm5vIFBBVEggdmFyaWFibGVcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eVJlamVjdCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcImludGVudGlvbmFsbHkgcmVqZWN0ZWRcIik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltaW5nIHtcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGltZXIoZGVsYXlNczogbnVtYmVyKTogUHJvbWlzZTxUaW1pbmc+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgYXdhaXQgc2xlZXAoZGVsYXlNcyk7XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGluKG1zOiBudW1iZXIpOiBUaW1pbmcge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID49IG1zKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbmQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlTG9vcCgpIHtcbiAgICB3aGlsZSAodHJ1ZSkge31cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsQXJnKGFyZz86IHN0cmluZykge1xuICAgIHJldHVybiBhcmcgPyBhcmcgOiBcIk5vIGFyZ1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZUxvZyhzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xlV2FybihzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUud2FybihzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZUVycm9yKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc29sZS5lcnJvcihzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZUluZm8oc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmluZm8oc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NFeGl0KGNvZGU/OiBudW1iZXIpIHtcbiAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmNsYXNzIEN1c3RvbUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGN1c3RvbTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUVycm9yKCkge1xuICAgIHRocm93IG5ldyBDdXN0b21FcnJvcihcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiY3VzdG9tIHZhbHVlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuc0Vycm9yKCkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoXCJhIHJldHVybmVkIG5vbi10aHJvd24gZXJyb3JcIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhbGxvY2F0ZShieXRlczogbnVtYmVyKSB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkoYnl0ZXMgLyA4KTtcbiAgICBjb25zdCBlbGVtcyA9IGFycmF5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zOyBpKyspIHtcbiAgICAgICAgYXJyYXlbaV0gPSBpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgYWxsb2NhdGVkOiAlT2AsIHsgYnl0ZXMsIGVsZW1zIH0pO1xuICAgIGNvbnNvbGUubG9nKGBwb3N0IGFsbG9jYXRlIG1lbW9yeSB1c2FnZTogJU9gLCBwcm9jZXNzLm1lbW9yeVVzYWdlKCkpO1xuICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgIGNvbnNvbGUubG9nKGBSZXR1cm5pbmcgZnJvbSBhbGxvY2F0ZWApO1xuICAgIHJldHVybiB7IGJ5dGVzLCBlbGVtcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGVDYXJsb1JldHVybiB7XG4gICAgaW5zaWRlOiBudW1iZXI7XG4gICAgc2FtcGxlczogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGVDYXJsb1BJKHNhbXBsZXM6IG51bWJlcik6IE1vbnRlQ2FybG9SZXR1cm4ge1xuICAgIGxldCBpbnNpZGUgPSAwO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgc2FtcGxlczsgbisrKSB7XG4gICAgICAgIGNvbnN0IFt4LCB5XSA9IFtNYXRoLnJhbmRvbSgpLCBNYXRoLnJhbmRvbSgpXTtcbiAgICAgICAgaWYgKHggKiogMiArIHkgKiogMiA8PSAxKSB7XG4gICAgICAgICAgICBpbnNpZGUrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpbnNpZGUsXG4gICAgICAgIHNhbXBsZXNcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGdlbmVyYXRvcihhcmdzOiBzdHJpbmdbXSkge1xuICAgIHlpZWxkKiBhcmdzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGFzeW5jR2VuZXJhdG9yKGFyZ3M6IHN0cmluZ1tdKSB7XG4gICAgeWllbGQqIGFyZ3M7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuZXJhdGVUaGVuSW5maW5pdGVMb29wKGFyZzogc3RyaW5nKSB7XG4gICAgeWllbGQgYXJnO1xuICAgIHdoaWxlICh0cnVlKSB7fVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGFzeW5jR2VuZXJhdG9yRGVsYXkoYXJnczogc3RyaW5nW10sIGRlbGF5OiBudW1iZXIpIHtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICAgICAgeWllbGQgYXJnO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvckVycm9yKG1zZzogc3RyaW5nKSB7XG4gICAgeWllbGQgMTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuLyoqXG4gKiBOb3Qgc3VwcG9ydGVkLlxuICogQHJlbWFya3NcbiAqIEV4YW1wbGVzIG9mIGZ1bmN0aW9ucyBhcmd1bWVudHMgb3IgcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUFyZyhwcm9taXNlOiBQcm9taXNlPGFueT4pIHtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RnVuY3Rpb24oZm46ICgpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gZm47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvblJldHVybigpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJldHVybmVkIGEgZnVuY3Rpb25cIik7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QnVmZmVyKGJ1ZjogQnVmZmVyKSB7XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RGF0ZShhcmc6IERhdGUpIHtcbiAgICByZXR1cm4gYXJnO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUNsYXNzKGFyZzogQ2xzKSB7XG4gICAgcmV0dXJuIGFyZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzUmV0dXJuKCkge1xuICAgIHJldHVybiBuZXcgQ2xzKCk7XG59XG4iXX0=