faastjs
Version:
Serverless batch computing made simple.
233 lines • 21.8 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZml4dHVyZXMvZnVuY3Rpb25zLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFFekMsTUFBTSxVQUFVLElBQUk7SUFDaEIsT0FBTyxvQ0FBb0MsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssS0FBSSxDQUFDO0FBRTFCLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFTO0lBQ2pDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBVTtJQUNuQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsQ0FBWTtJQUMxQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQU87SUFDaEMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxDQUFTO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFXO0lBQ3hDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxDQUFXO0lBQzNDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBWTtJQUNyQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQWE7SUFDdkMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLG9CQUFvQixDQUFDLENBQW9CO0lBQ3JELE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBYTtJQUN2QyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQWM7SUFDekMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFhO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBYztJQUN6QyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFDLENBQWU7SUFDM0MsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLGVBQWUsQ0FBQyxDQUFlO0lBQzNDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFnQjtJQUM3QyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsQ0FBaUI7SUFDL0MsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFzQjtJQUM5QyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQWM7SUFDdEMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUVyRCxNQUFNLFVBQVUsS0FBSyxDQUFDLElBQVk7SUFDOUIsT0FBTyxTQUFTLElBQUksR0FBRyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLENBQVM7SUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFTO0lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNO0lBQ2xCLE9BQU8sK0JBQStCLENBQUM7QUFDM0MsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM1QixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQVU7SUFDbEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLO0lBQ3ZCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLE9BQU8seUJBQXlCLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxJQUFJO0lBQ2hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVztJQUN2QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVE7SUFDcEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDcEQsQ0FBQztBQU9ELE1BQU0sQ0FBQyxLQUFLLFVBQVUsS0FBSyxDQUFDLE9BQWU7SUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEVBQVU7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sSUFBSSxFQUFFO1FBQ1QsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsRUFBRTtZQUMxQixNQUFNO1NBQ1Q7S0FDSjtJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWTtJQUN4QixPQUFPLElBQUksRUFBRSxHQUFFO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVk7SUFDcEMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFXO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFhO0lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sV0FBWSxTQUFRLEtBQUs7SUFDM0IsWUFBWSxPQUFlLEVBQVMsTUFBYztRQUM5QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEaUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUVsRCxDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVUsV0FBVztJQUN2QixNQUFNLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWTtJQUN4QixPQUFPLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQVc7SUFDOUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFPRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWU7SUFDeEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM5QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixNQUFNLEVBQUUsQ0FBQztTQUNaO0tBQ0o7SUFDRCxPQUFPO1FBQ0gsTUFBTTtRQUNOLE9BQU87S0FDVixDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQWM7SUFDckMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBYztJQUNoRCxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQVc7SUFDdkQsTUFBTSxHQUFHLENBQUM7SUFDVixPQUFPLElBQUksRUFBRSxHQUFFO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFjLEVBQUUsS0FBYTtJQUNwRSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtRQUNwQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixNQUFNLEdBQUcsQ0FBQztLQUNiO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQVc7SUFDbEQsTUFBTSxDQUFDLENBQUM7SUFDUixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxPQUFxQjtJQUM1QyxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEVBQWM7SUFDM0MsT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWM7SUFDMUIsT0FBTyxHQUFHLEVBQUU7UUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBVztJQUN0QyxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVM7SUFDbEMsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUc7SUFDWixnQkFBZSxDQUFDO0NBQ25CO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFRO0lBQ2xDLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXO0lBQ3ZCLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEZBQVNUX1VSTCA9IGltcG9ydC5tZXRhLnVybDtcblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgcmV0dXJuIFwiU3VjY2Vzc2Z1bGx5IGNhbGxlZCB0ZXN0IGZ1bmN0aW9uLlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHkoKSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlTdHJpbmcobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlOdW0objogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG47XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCb29sKGI6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVuZGVmaW5lZCh1OiB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU51bGwobjogbnVsbCkge1xuICAgIHJldHVybiBuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5T2JqZWN0KG86IG9iamVjdCkge1xuICAgIHJldHVybiBvO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QXJyYXlOdW0objogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUFycmF5U3RyaW5nKHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHM7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlJbnQ4KGE6IEludDhBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDgoYTogVWludDhBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDhDbGFtcGVkKGE6IFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlJbnQxNihhOiBJbnQxNkFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50MTYoYTogVWludDE2QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDMyKGE6IEludDMyQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVpbnQzMihhOiBVaW50MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RmxvYXQzMihhOiBGbG9hdDMyQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUZsb2F0NjQoYTogRmxvYXQ2NEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCaWdJbnQ2NChhOiBCaWdJbnQ2NEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCaWdVaW50NjQoYTogQmlnVWludDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU1hcChtOiBNYXA8bnVtYmVyLCBudW1iZXI+KSB7XG4gICAgcmV0dXJuIG07XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlTZXQoczogU2V0PG51bWJlcj4pIHtcbiAgICByZXR1cm4gcztcbn1cblxuZXhwb3J0IGNvbnN0IGFycm93ID0gKHN0cjogc3RyaW5nKSA9PiBzdHI7XG5cbmV4cG9ydCBjb25zdCBhc3luY0Fycm93ID0gYXN5bmMgKHN0cjogc3RyaW5nKSA9PiBzdHI7XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWxsbyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYEhlbGxvICR7bmFtZX0hYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhY3QobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbiA8PSAxID8gMSA6IG4gKiBmYWN0KG4gLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICAgIHJldHVybiBhICsgYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yKGE6IHN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXJyb3IuIEFyZzogJHthfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9hcmdzKCkge1xuICAgIHJldHVybiBcImNhbGxlZCBmdW5jdGlvbiB3aXRoIG5vIGFyZ3MuXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsYXlSZWplY3QobXM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiBzZXRUaW1lb3V0KHJlamVjdCwgbXMpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuICAgIGF3YWl0IHNsZWVwKDIwMCk7XG4gICAgcmV0dXJuIFwiYXN5bmMgZnVuY3Rpb246IHN1Y2Nlc3NcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gc2xlZXAoMjAwKS50aGVuKCgpID0+IHByb2Nlc3MuZW52LlBBVEggfHwgXCJubyBQQVRIIHZhcmlhYmxlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlSZWplY3QoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3RlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJpbnRlbnRpb25hbGx5IHJlamVjdGVkXCIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZyB7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVyKGRlbGF5TXM6IG51bWJlcik6IFByb21pc2U8VGltaW5nPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGF3YWl0IHNsZWVwKGRlbGF5TXMpO1xuICAgIGNvbnN0IGVuZCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BpbihtczogbnVtYmVyKTogVGltaW5nIHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydCA+PSBtcykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZUxvb3AoKSB7XG4gICAgd2hpbGUgKHRydWUpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbEFyZyhhcmc/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJnID8gYXJnIDogXCJObyBhcmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVMb2coc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZVdhcm4oc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLndhcm4oc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVFcnJvcihzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUuZXJyb3Ioc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVJbmZvKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc29sZS5pbmZvKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRXhpdChjb2RlPzogbnVtYmVyKSB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5jbGFzcyBDdXN0b21FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBjdXN0b206IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FcnJvcigpIHtcbiAgICB0aHJvdyBuZXcgQ3VzdG9tRXJyb3IoXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcImN1c3RvbSB2YWx1ZVwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybnNFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFwiYSByZXR1cm5lZCBub24tdGhyb3duIGVycm9yXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWxsb2NhdGUoYnl0ZXM6IG51bWJlcikge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KGJ5dGVzIC8gOCk7XG4gICAgY29uc3QgZWxlbXMgPSBhcnJheS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtczsgaSsrKSB7XG4gICAgICAgIGFycmF5W2ldID0gaTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYGFsbG9jYXRlZDogJU9gLCB7IGJ5dGVzLCBlbGVtcyB9KTtcbiAgICBjb25zb2xlLmxvZyhgcG9zdCBhbGxvY2F0ZSBtZW1vcnkgdXNhZ2U6ICVPYCwgcHJvY2Vzcy5tZW1vcnlVc2FnZSgpKTtcbiAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICBjb25zb2xlLmxvZyhgUmV0dXJuaW5nIGZyb20gYWxsb2NhdGVgKTtcbiAgICByZXR1cm4geyBieXRlcywgZWxlbXMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltrZXldO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRlQ2FybG9SZXR1cm4ge1xuICAgIGluc2lkZTogbnVtYmVyO1xuICAgIHNhbXBsZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRlQ2FybG9QSShzYW1wbGVzOiBudW1iZXIpOiBNb250ZUNhcmxvUmV0dXJuIHtcbiAgICBsZXQgaW5zaWRlID0gMDtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IHNhbXBsZXM7IG4rKykge1xuICAgICAgICBjb25zdCBbeCwgeV0gPSBbTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKV07XG4gICAgICAgIGlmICh4ICoqIDIgKyB5ICoqIDIgPD0gMSkge1xuICAgICAgICAgICAgaW5zaWRlKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5zaWRlLFxuICAgICAgICBzYW1wbGVzXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBnZW5lcmF0b3IoYXJnczogc3RyaW5nW10pIHtcbiAgICB5aWVsZCogYXJncztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvcihhcmdzOiBzdHJpbmdbXSkge1xuICAgIHlpZWxkKiBhcmdzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlVGhlbkluZmluaXRlTG9vcChhcmc6IHN0cmluZykge1xuICAgIHlpZWxkIGFyZztcbiAgICB3aGlsZSAodHJ1ZSkge31cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvckRlbGF5KGFyZ3M6IHN0cmluZ1tdLCBkZWxheTogbnVtYmVyKSB7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgICAgIHlpZWxkIGFyZztcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogYXN5bmNHZW5lcmF0b3JFcnJvcihtc2c6IHN0cmluZykge1xuICAgIHlpZWxkIDE7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbi8qKlxuICogTm90IHN1cHBvcnRlZC5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlcyBvZiBmdW5jdGlvbnMgYXJndW1lbnRzIG9yIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VBcmcocHJvbWlzZTogUHJvbWlzZTxhbnk+KSB7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUZ1bmN0aW9uKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIGZuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25SZXR1cm4oKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXR1cm5lZCBhIGZ1bmN0aW9uXCIpO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJ1ZmZlcihidWY6IEJ1ZmZlcikge1xuICAgIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eURhdGUoYXJnOiBEYXRlKSB7XG4gICAgcmV0dXJuIGFyZztcbn1cblxuZXhwb3J0IGNsYXNzIENscyB7XG4gICAgY29uc3RydWN0b3IoKSB7fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlDbGFzcyhhcmc6IENscykge1xuICAgIHJldHVybiBhcmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc1JldHVybigpIHtcbiAgICByZXR1cm4gbmV3IENscygpO1xufVxuIl19