@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
138 lines (136 loc) • 22.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../constants");
const Helper_1 = require("../Helper");
const serialize_1 = require("./serialize");
class GenericLogSerializeHelper extends Helper_1.Helper {
constructor() {
super(...arguments);
this.needsGlobal = true;
}
emitGlobal(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
const doNothing = () => {
};
const throwTypeError = (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
};
const handleArray = (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapArray);
sb.emitHelper(node, innerOptions, sb.helpers.arrMap({
map: (innerInnerOptions) => {
serialize_1.invokeLogSerialize(sb, node, innerInnerOptions);
},
}));
sb.emitHelper(node, innerOptions, sb.helpers.wrapArray);
};
const handleMap = (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapMap);
sb.emitPushInt(node, 0);
sb.emitOp(node, 'NEWARRAY');
sb.emitHelper(node, innerOptions, sb.helpers.mapReduce({
each: (innerInnerOptions) => {
sb.emitOp(node, 'ROT');
serialize_1.invokeLogSerialize(sb, node, innerInnerOptions);
sb.emitOp(node, 'ROT');
serialize_1.invokeLogSerialize(sb, node, innerInnerOptions);
sb.emitPushInt(node, 2);
sb.emitOp(node, 'PACK');
sb.emitOp(node, 'OVER');
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'APPEND');
},
}));
sb.emitHelper(node, innerOptions, sb.helpers.wrapMap);
};
const handleSet = (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapSet);
sb.emitPushInt(node, 0);
sb.emitOp(node, 'NEWARRAY');
sb.emitHelper(node, innerOptions, sb.helpers.mapReduce({
each: (innerInnerOptions) => {
sb.emitOp(node, 'ROT');
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SWAP');
serialize_1.invokeLogSerialize(sb, node, innerInnerOptions);
sb.emitOp(node, 'APPEND');
},
}));
sb.emitHelper(node, innerOptions, sb.helpers.wrapSet);
};
const handleObject = (innerOptions) => {
sb.emitOp(node, 'DUP');
sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectValues);
sb.emitHelper(node, innerOptions, sb.helpers.arrMap({
map: (innerInnerOptions) => {
serialize_1.invokeLogSerialize(sb, node, innerInnerOptions);
},
}));
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectKeys);
sb.emitHelper(node, innerOptions, sb.helpers.arrMap({
map: (innerInnerOptions) => {
sb.emitHelper(node, innerInnerOptions, sb.helpers.wrapString);
},
}));
sb.emitPushInt(node, 2);
sb.emitOp(node, 'PACK');
sb.emitHelper(node, innerOptions, sb.helpers.wrapObject);
};
sb.emitPushInt(node, constants_1.GlobalProperty.GenericLogSerialize);
sb.emitHelper(node, options, sb.helpers.createFunctionArray({
body: (innerOptionsIn) => {
const innerOptions = sb.pushValueOptions(innerOptionsIn);
sb.emitPushInt(node, 0);
sb.emitOp(node, 'PICKITEM');
sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({
type: undefined,
array: handleArray,
arrayStorage: throwTypeError,
boolean: doNothing,
buffer: doNothing,
null: doNothing,
number: doNothing,
object: handleObject,
string: doNothing,
symbol: doNothing,
undefined: doNothing,
map: handleMap,
mapStorage: throwTypeError,
set: handleSet,
setStorage: throwTypeError,
error: throwTypeError,
forwardValue: throwTypeError,
iteratorResult: throwTypeError,
iterable: throwTypeError,
iterableIterator: throwTypeError,
transaction: throwTypeError,
output: throwTypeError,
attribute: throwTypeError,
input: throwTypeError,
account: throwTypeError,
asset: throwTypeError,
contract: throwTypeError,
header: throwTypeError,
block: throwTypeError,
}));
sb.emitHelper(node, innerOptions, sb.helpers.return);
},
}));
sb.emitHelper(node, options, sb.helpers.createFunctionObject({
property: constants_1.InternalObjectProperty.Call,
}));
sb.emitOp(node, 'SETITEM');
}
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
return;
}
serialize_1.invokeLogSerialize(sb, node, options);
}
}
exports.GenericLogSerializeHelper = GenericLogSerializeHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkdlbmVyaWNMb2dTZXJpYWxpemVIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwrQ0FBeUU7QUFHekUsc0NBQW1DO0FBQ25DLDJDQUFpRDtBQUlqRCxNQUFhLHlCQUEwQixTQUFRLGVBQU07SUFBckQ7O1FBQ2tCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO0lBcU5yQyxDQUFDO0lBbk5RLFVBQVUsQ0FBQyxFQUFpQixFQUFFLElBQWEsRUFBRSxTQUF1QjtRQUN6RSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBRXZCLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsWUFBMEIsRUFBRSxFQUFFO1lBRXBELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsWUFBMEIsRUFBRSxFQUFFO1lBRWpELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFELEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLFlBQVksRUFDWixFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDaEIsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtvQkFDekIsOEJBQWtCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2FBQ0YsQ0FBQyxDQUNILENBQUM7WUFFRixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUs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LE1BQU0sRUFBRSxjQUFjO29CQUN0QixTQUFTLEVBQUUsY0FBYztvQkFDekIsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLE9BQU8sRUFBRSxjQUFjO29CQUN2QixLQUFLLEVBQUUsY0FBYztvQkFDckIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLE1BQU0sRUFBRSxjQUFjO29CQUN0QixLQUFLLEVBQUUsY0FBYztpQkFDdEIsQ0FBQyxDQUNILENBQUM7Z0JBRUYsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO1FBRUYsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDOUIsUUFBUSxFQUFFLGtDQUFzQixDQUFDLElBQUk7U0FDdEMsQ0FBQyxDQUNILENBQUM7UUFFRixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLE9BQXFCO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLE9BQU87U0FDUjtRQUVELDhCQUFrQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBdE5ELDhEQXNOQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9jb21tb24vR2VuZXJpY0xvZ1NlcmlhbGl6ZUhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IEdsb2JhbFByb3BlcnR5LCBJbnRlcm5hbE9iamVjdFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuaW1wb3J0IHsgaW52b2tlTG9nU2VyaWFsaXplIH0gZnJvbSAnLi9zZXJpYWxpemUnO1xuXG4vLyBJbnB1dDogW3ZhbF1cbi8vIE91dHB1dDogW11cbmV4cG9ydCBjbGFzcyBHZW5lcmljTG9nU2VyaWFsaXplSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IG5lZWRzR2xvYmFsID0gdHJ1ZTtcblxuICBwdWJsaWMgZW1pdEdsb2JhbChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgY29uc3QgZG9Ob3RoaW5nID0gKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH07XG5cbiAgICBjb25zdCB0aHJvd1R5cGVFcnJvciA9IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW11cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3dUeXBlRXJyb3IpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVBcnJheSA9IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW2Fycl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEFycmF5KTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5hcnJNYXAoe1xuICAgICAgICAgIG1hcDogKGlubmVySW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpbnZva2VMb2dTZXJpYWxpemUoc2IsIG5vZGUsIGlubmVySW5uZXJPcHRpb25zKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEFycmF5KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlTWFwID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBbbWFwXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwTWFwKTtcbiAgICAgIC8vIFswLCBtYXBdXG4gICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgIC8vIFthcnIsIG1hcF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnTkVXQVJSQVknKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5tYXBSZWR1Y2Uoe1xuICAgICAgICAgIGVhY2g6IChpbm5lcklubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbCwgYXJyLCBrZXldXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgICAgICAgLy8gW3ZhbCwgYXJyLCBrZXldXG4gICAgICAgICAgICBpbnZva2VMb2dTZXJpYWxpemUoc2IsIG5vZGUsIGlubmVySW5uZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIFtrZXksIHZhbCwgYXJyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAgIC8vIFtrZXksIHZhbCwgYXJyXVxuICAgICAgICAgICAgaW52b2tlTG9nU2VyaWFsaXplKHNiLCBub2RlLCBpbm5lcklubmVyT3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBbMiwga2V5LCB2YWwsIGFycl1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDIpO1xuICAgICAgICAgICAgLy8gW2VudHJ5QXJyLCBhcnJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BBQ0snKTtcbiAgICAgICAgICAgIC8vIFthcnIsIGVudHJ5QXJyLCBhcnJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ09WRVInKTtcbiAgICAgICAgICAgIC8vIFtlbnRyeUFyciwgYXJyLCBhcnJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgIC8vIFthcnJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0FQUEVORCcpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFt2YWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwTWFwKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlU2V0ID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBbbWFwXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwU2V0KTtcbiAgICAgIC8vIFswLCBtYXBdXG4gICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgIC8vIFthcnIsIG1hcF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnTkVXQVJSQVknKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5tYXBSZWR1Y2Uoe1xuICAgICAgICAgIGVhY2g6IChpbm5lcklubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbCwgYXJyLCBrZXldXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgICAgICAgLy8gW2Fyciwga2V5XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAvLyBbYXJyLCBrZXksIGFycl1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgICAgICAgLy8gW2tleSwgYXJyLCBhcnJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgIC8vIFtrZXksIGFyciwgYXJyXVxuICAgICAgICAgICAgaW52b2tlTG9nU2VyaWFsaXplKHNiLCBub2RlLCBpbm5lcklubmVyT3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBbYXJyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdBUFBFTkQnKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFNldCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU9iamVjdCA9IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW3ZhbCwgdmFsXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgIC8vIFt2YWx1ZXMsIHZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmdldFByb3BlcnR5T2JqZWN0VmFsdWVzKTtcbiAgICAgIC8vIFt2YWx1ZXMsIHZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5hcnJNYXAoe1xuICAgICAgICAgIG1hcDogKGlubmVySW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBbdmFsXVxuICAgICAgICAgICAgaW52b2tlTG9nU2VyaWFsaXplKHNiLCBub2RlLCBpbm5lcklubmVyT3B0aW9ucyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgLy8gW3ZhbCwgdmFsdWVzXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAvLyBba2V5cywgdmFsdWVzXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0UHJvcGVydHlPYmplY3RLZXlzKTtcbiAgICAgIC8vIFtrZXlzLCB2YWx1ZXNdXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBpbm5lck9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuYXJyTWFwKHtcbiAgICAgICAgICBtYXA6IChpbm5lcklubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJJbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFN0cmluZyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgLy8gWzIsIGtleXMsIHZhbHVlc11cbiAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDIpO1xuICAgICAgLy8gW2Fycl1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnUEFDSycpO1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBPYmplY3QpO1xuICAgIH07XG5cbiAgICAvLyBbbnVtYmVyLCBnbG9iYWxPYmplY3RdXG4gICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgR2xvYmFsUHJvcGVydHkuR2VuZXJpY0xvZ1NlcmlhbGl6ZSk7XG4gICAgLy8gW2ZhcnIsIG51bWJlciwgZ2xvYmFsT2JqZWN0XVxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuY3JlYXRlRnVuY3Rpb25BcnJheSh7XG4gICAgICAgIGJvZHk6IChpbm5lck9wdGlvbnNJbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlubmVyT3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zSW4pO1xuICAgICAgICAgIC8vIFswLCBhcmdzYXJyXVxuICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDApO1xuICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdQSUNLSVRFTScpO1xuICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBpbm5lck9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLmZvckJ1aWx0aW5UeXBlKHtcbiAgICAgICAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBhcnJheTogaGFuZGxlQXJyYXksXG4gICAgICAgICAgICAgIGFycmF5U3RvcmFnZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGJvb2xlYW46IGRvTm90aGluZyxcbiAgICAgICAgICAgICAgYnVmZmVyOiBkb05vdGhpbmcsXG4gICAgICAgICAgICAgIG51bGw6IGRvTm90aGluZyxcbiAgICAgICAgICAgICAgbnVtYmVyOiBkb05vdGhpbmcsXG4gICAgICAgICAgICAgIG9iamVjdDogaGFuZGxlT2JqZWN0LFxuICAgICAgICAgICAgICBzdHJpbmc6IGRvTm90aGluZyxcbiAgICAgICAgICAgICAgc3ltYm9sOiBkb05vdGhpbmcsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZDogZG9Ob3RoaW5nLFxuICAgICAgICAgICAgICBtYXA6IGhhbmRsZU1hcCxcbiAgICAgICAgICAgICAgbWFwU3RvcmFnZTogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIHNldDogaGFuZGxlU2V0LFxuICAgICAgICAgICAgICBzZXRTdG9yYWdlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgZXJyb3I6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBmb3J3YXJkVmFsdWU6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBpdGVyYXRvclJlc3VsdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGl0ZXJhYmxlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgb3V0cHV0OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgYXR0cmlidXRlOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgaW5wdXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBhY2NvdW50OiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgICAgYXNzZXQ6IHRocm93VHlwZUVycm9yLFxuICAgICAgICAgICAgICBjb250cmFjdDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGhlYWRlcjogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgICAgICAgIGJsb2NrOiB0aHJvd1R5cGVFcnJvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5yZXR1cm4pO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgICAvLyBbb2JqZWN0VmFsLCBudW1iZXIsIGdsb2JhbE9iamVjdF1cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmNyZWF0ZUZ1bmN0aW9uT2JqZWN0KHtcbiAgICAgICAgcHJvcGVydHk6IEludGVybmFsT2JqZWN0UHJvcGVydHkuQ2FsbCxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gW11cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NFVElURU0nKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludm9rZUxvZ1NlcmlhbGl6ZShzYiwgbm9kZSwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==