1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const client_common_1 = require("@neo-one/client-common");
|
4 | const errors_1 = require("../errors");
|
5 | const utils_1 = require("../utils");
|
6 | const TransactionBase_1 = require("./TransactionBase");
|
7 | const TransactionType_1 = require("./TransactionType");
|
8 | const MAX_SCRIPT_SIZE = 65536;
|
9 | class InvocationTransaction extends TransactionBase_1.TransactionBase(client_common_1.InvocationTransactionModel) {
|
10 | constructor() {
|
11 | super(...arguments);
|
12 | this.sizeExclusive = utils_1.utils.lazy(() => client_common_1.IOHelper.sizeOfUInt8 + client_common_1.IOHelper.sizeOfVarBytesLE(this.script));
|
13 | }
|
14 | static deserializeWireBase(options) {
|
15 | const { reader } = options;
|
16 | const { type, version } = super.deserializeTransactionBaseStartWireBase(options);
|
17 | if (type !== TransactionType_1.TransactionType.Invocation) {
|
18 | throw new client_common_1.InvalidFormatError(`Expected transaction type to be ${TransactionType_1.TransactionType.Invocation}. Received: ${type}`);
|
19 | }
|
20 | const script = reader.readVarBytesLE(MAX_SCRIPT_SIZE);
|
21 | if (script.length === 0) {
|
22 | throw new client_common_1.InvalidFormatError('Expected invocation script length to not be 0');
|
23 | }
|
24 | let gas = utils_1.utils.ZERO;
|
25 | if (version >= 1) {
|
26 | gas = reader.readFixed8();
|
27 | }
|
28 | const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options);
|
29 | return new this({
|
30 | version,
|
31 | attributes,
|
32 | inputs,
|
33 | outputs,
|
34 | scripts,
|
35 | script,
|
36 | gas,
|
37 | });
|
38 | }
|
39 | async serializeJSON(context) {
|
40 | const transactionBaseJSON = await super.serializeTransactionBaseJSON(context);
|
41 | const data = await context.tryGetInvocationData(this);
|
42 | let invocationDataJSON;
|
43 | if (data !== undefined) {
|
44 | const { asset, contracts, deletedContractHashes, migratedContractHashes, voteUpdates, actions, result, storageChanges, } = data;
|
45 | invocationDataJSON = {
|
46 | result: result.serializeJSON(context),
|
47 | asset: asset === undefined ? undefined : asset.serializeJSON(context),
|
48 | contracts: contracts.map((contract) => contract.serializeJSON(context)),
|
49 | deletedContractHashes: deletedContractHashes.map((hash) => client_common_1.common.uInt160ToString(hash)),
|
50 | migratedContractHashes: migratedContractHashes.map(([from, to]) => [client_common_1.common.uInt160ToString(from), client_common_1.common.uInt160ToString(to)]),
|
51 | voteUpdates: voteUpdates.map(([address, votes]) => [
|
52 | client_common_1.crypto.scriptHashToAddress({
|
53 | addressVersion: context.addressVersion,
|
54 | scriptHash: address,
|
55 | }),
|
56 | votes.map((vote) => client_common_1.common.ecPointToString(vote)),
|
57 | ]),
|
58 | actions: actions.map((action) => action.serializeJSON(context)),
|
59 | storageChanges: storageChanges.map((storageChange) => storageChange.serializeJSON(context)),
|
60 | };
|
61 | }
|
62 | return Object.assign({}, transactionBaseJSON, { type: 'InvocationTransaction', script: client_common_1.JSONHelper.writeBuffer(this.script), gas: client_common_1.JSONHelper.writeFixed8(this.gas), invocationData: invocationDataJSON });
|
63 | }
|
64 | getSystemFee(_context) {
|
65 | return this.gas;
|
66 | }
|
67 | async verify(options) {
|
68 | if (!this.gas.mod(utils_1.utils.ONE_HUNDRED_MILLION).eq(utils_1.utils.ZERO)) {
|
69 | throw new errors_1.VerifyError('Invalid GAS amount');
|
70 | }
|
71 | return super.verify(options);
|
72 | }
|
73 | }
|
74 | exports.InvocationTransaction = InvocationTransaction;
|
75 |
|
76 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludm9jYXRpb25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBEQVVnQztBQUdoQyxzQ0FBd0M7QUFFeEMsb0NBQWlDO0FBTWpDLHVEQUEwRjtBQUMxRix1REFBb0Q7QUFJcEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBRTlCLE1BQWEscUJBQXNCLFNBQVEsaUNBQWUsQ0FJeEQsMENBQTBCLENBQUM7SUFKN0I7O1FBcUNxQixrQkFBYSxHQUFpQixhQUFLLENBQUMsSUFBSSxDQUN6RCxHQUFHLEVBQUUsQ0FBQyx3QkFBUSxDQUFDLFdBQVcsR0FBRyx3QkFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDcEUsQ0FBQztJQTZESixDQUFDO0lBL0ZRLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpGLElBQUksSUFBSSxLQUFLLGlDQUFlLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxrQ0FBa0IsQ0FBQyxtQ0FBbUMsaUNBQWUsQ0FBQyxVQUFVLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNsSDtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksa0NBQWtCLENBQUMsK0NBQStDLENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksR0FBRyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2hCLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDM0I7UUFFRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRHLE9BQU8sSUFBSSxJQUFJLENBQUM7WUFDZCxPQUFPO1lBQ1AsVUFBVTtZQUNWLE1BQU07WUFDTixPQUFPO1lBQ1AsT0FBTztZQUNQLE1BQU07WUFDTixHQUFHO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQU1NLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBNkI7UUFDdEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RSxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLGtCQUFrRCxDQUFDO1FBQ3ZELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixNQUFNLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsTUFBTSxFQUNOLGNBQWMsR0FDZixHQUFHLElBQUksQ0FBQztZQUNULGtCQUFrQixHQUFHO2dCQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2dCQUNyRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkUscUJBQXFCLEVBQUUscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxzQkFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEYsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsR0FBRyxDQUNoRCxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLHNCQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLHNCQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQ3BGO2dCQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUMxQixDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FDbkI7b0JBQ0Usc0JBQU0sQ0FBQyxtQkFBbUIsQ0FBQzt3QkFDekIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO3dCQUN0QyxVQUFVLEVBQUUsT0FBTztxQkFDcEIsQ0FBQztvQkFDRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxzQkFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekMsQ0FDYjtnQkFDRCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0QsY0FBYyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDNUYsQ0FBQztTQUNIO1FBRUQseUJBQ0ssbUJBQW1CLElBQ3RCLElBQUksRUFBRSx1QkFBdUIsRUFDN0IsTUFBTSxFQUFFLDBCQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDM0MsR0FBRyxFQUFFLDBCQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDckMsY0FBYyxFQUFFLGtCQUFrQixJQUNsQztJQUNKLENBQUM7SUFFTSxZQUFZLENBQUMsUUFBb0I7UUFDdEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWlDO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNELE1BQU0sSUFBSSxvQkFBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDN0M7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBcEdELHNEQW9HQyIsImZpbGUiOiJuZW8tb25lLW5vZGUtY29yZS9zcmMvdHJhbnNhY3Rpb24vSW52b2NhdGlvblRyYW5zYWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29tbW9uLFxuICBjcnlwdG8sXG4gIEludmFsaWRGb3JtYXRFcnJvcixcbiAgSW52b2NhdGlvbkRhdGFKU09OLFxuICBJbnZvY2F0aW9uVHJhbnNhY3Rpb25KU09OLFxuICBJbnZvY2F0aW9uVHJhbnNhY3Rpb25Nb2RlbCxcbiAgSW52b2NhdGlvblRyYW5zYWN0aW9uTW9kZWxBZGQsXG4gIElPSGVscGVyLFxuICBKU09OSGVscGVyLFxufSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29tbW9uJztcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSAnQG5lby1vbmUvdXRpbHMnO1xuaW1wb3J0IHsgQk4gfSBmcm9tICdibi5qcyc7XG5pbXBvcnQgeyBWZXJpZnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucywgU2VyaWFsaXplSlNPTkNvbnRleHQgfSBmcm9tICcuLi9TZXJpYWxpemFibGUnO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBWZXJpZnlTY3JpcHRSZXN1bHQgfSBmcm9tICcuLi92bSc7XG5pbXBvcnQgeyBXaXRuZXNzIH0gZnJvbSAnLi4vV2l0bmVzcyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tICcuL2F0dHJpYnV0ZSc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnLi9PdXRwdXQnO1xuaW1wb3J0IHsgRmVlQ29udGV4dCwgVHJhbnNhY3Rpb25CYXNlLCBUcmFuc2FjdGlvblZlcmlmeU9wdGlvbnMgfSBmcm9tICcuL1RyYW5zYWN0aW9uQmFzZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuL1RyYW5zYWN0aW9uVHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2NhdGlvblRyYW5zYWN0aW9uQWRkIGV4dGVuZHMgSW52b2NhdGlvblRyYW5zYWN0aW9uTW9kZWxBZGQ8QXR0cmlidXRlLCBJbnB1dCwgT3V0cHV0LCBXaXRuZXNzPiB7fVxuXG5jb25zdCBNQVhfU0NSSVBUX1NJWkUgPSA2NTUzNjtcblxuZXhwb3J0IGNsYXNzIEludm9jYXRpb25UcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uQmFzZTxcbiAgVHJhbnNhY3Rpb25UeXBlLkludm9jYXRpb24sXG4gIEludm9jYXRpb25UcmFuc2FjdGlvbkpTT04sXG4gIENvbnN0cnVjdG9yPEludm9jYXRpb25UcmFuc2FjdGlvbk1vZGVsPEF0dHJpYnV0ZSwgSW5wdXQsIE91dHB1dCwgV2l0bmVzcz4+XG4+KEludm9jYXRpb25UcmFuc2FjdGlvbk1vZGVsKSB7XG4gIHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemVXaXJlQmFzZShvcHRpb25zOiBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucyk6IEludm9jYXRpb25UcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgeyByZWFkZXIgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB7IHR5cGUsIHZlcnNpb24gfSA9IHN1cGVyLmRlc2VyaWFsaXplVHJhbnNhY3Rpb25CYXNlU3RhcnRXaXJlQmFzZShvcHRpb25zKTtcblxuICAgIGlmICh0eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuSW52b2NhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRGb3JtYXRFcnJvcihgRXhwZWN0ZWQgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSAke1RyYW5zYWN0aW9uVHlwZS5JbnZvY2F0aW9ufS4gUmVjZWl2ZWQ6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHQgPSByZWFkZXIucmVhZFZhckJ5dGVzTEUoTUFYX1NDUklQVF9TSVpFKTtcbiAgICBpZiAoc2NyaXB0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRGb3JtYXRFcnJvcignRXhwZWN0ZWQgaW52b2NhdGlvbiBzY3JpcHQgbGVuZ3RoIHRvIG5vdCBiZSAwJyk7XG4gICAgfVxuXG4gICAgbGV0IGdhcyA9IHV0aWxzLlpFUk87XG4gICAgaWYgKHZlcnNpb24gPj0gMSkge1xuICAgICAgZ2FzID0gcmVhZGVyLnJlYWRGaXhlZDgoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIGlucHV0cywgb3V0cHV0cywgc2NyaXB0cyB9ID0gc3VwZXIuZGVzZXJpYWxpemVUcmFuc2FjdGlvbkJhc2VFbmRXaXJlQmFzZShvcHRpb25zKTtcblxuICAgIHJldHVybiBuZXcgdGhpcyh7XG4gICAgICB2ZXJzaW9uLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgc2NyaXB0LFxuICAgICAgZ2FzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpemVFeGNsdXNpdmU6ICgpID0+IG51bWJlciA9IHV0aWxzLmxhenkoXG4gICAgKCkgPT4gSU9IZWxwZXIuc2l6ZU9mVUludDggKyBJT0hlbHBlci5zaXplT2ZWYXJCeXRlc0xFKHRoaXMuc2NyaXB0KSxcbiAgKTtcblxuICBwdWJsaWMgYXN5bmMgc2VyaWFsaXplSlNPTihjb250ZXh0OiBTZXJpYWxpemVKU09OQ29udGV4dCk6IFByb21pc2U8SW52b2NhdGlvblRyYW5zYWN0aW9uSlNPTj4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uQmFzZUpTT04gPSBhd2FpdCBzdXBlci5zZXJpYWxpemVUcmFuc2FjdGlvbkJhc2VKU09OKGNvbnRleHQpO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGNvbnRleHQudHJ5R2V0SW52b2NhdGlvbkRhdGEodGhpcyk7XG4gICAgbGV0IGludm9jYXRpb25EYXRhSlNPTjogSW52b2NhdGlvbkRhdGFKU09OIHwgdW5kZWZpbmVkO1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGNvbnRyYWN0cyxcbiAgICAgICAgZGVsZXRlZENvbnRyYWN0SGFzaGVzLFxuICAgICAgICBtaWdyYXRlZENvbnRyYWN0SGFzaGVzLFxuICAgICAgICB2b3RlVXBkYXRlcyxcbiAgICAgICAgYWN0aW9ucyxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBzdG9yYWdlQ2hhbmdlcyxcbiAgICAgIH0gPSBkYXRhO1xuICAgICAgaW52b2NhdGlvbkRhdGFKU09OID0ge1xuICAgICAgICByZXN1bHQ6IHJlc3VsdC5zZXJpYWxpemVKU09OKGNvbnRleHQpLFxuICAgICAgICBhc3NldDogYXNzZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGFzc2V0LnNlcmlhbGl6ZUpTT04oY29udGV4dCksXG4gICAgICAgIGNvbnRyYWN0czogY29udHJhY3RzLm1hcCgoY29udHJhY3QpID0+IGNvbnRyYWN0LnNlcmlhbGl6ZUpTT04oY29udGV4dCkpLFxuICAgICAgICBkZWxldGVkQ29udHJhY3RIYXNoZXM6IGRlbGV0ZWRDb250cmFjdEhhc2hlcy5tYXAoKGhhc2gpID0+IGNvbW1vbi51SW50MTYwVG9TdHJpbmcoaGFzaCkpLFxuICAgICAgICBtaWdyYXRlZENvbnRyYWN0SGFzaGVzOiBtaWdyYXRlZENvbnRyYWN0SGFzaGVzLm1hcDxyZWFkb25seSBbc3RyaW5nLCBzdHJpbmddPihcbiAgICAgICAgICAoW2Zyb20sIHRvXSkgPT4gW2NvbW1vbi51SW50MTYwVG9TdHJpbmcoZnJvbSksIGNvbW1vbi51SW50MTYwVG9TdHJpbmcodG8pXSBhcyBjb25zdCxcbiAgICAgICAgKSxcbiAgICAgICAgdm90ZVVwZGF0ZXM6IHZvdGVVcGRhdGVzLm1hcDxyZWFkb25seSBbc3RyaW5nLCBzdHJpbmdbXV0+KFxuICAgICAgICAgIChbYWRkcmVzcywgdm90ZXNdKSA9PlxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBjcnlwdG8uc2NyaXB0SGFzaFRvQWRkcmVzcyh7XG4gICAgICAgICAgICAgICAgYWRkcmVzc1ZlcnNpb246IGNvbnRleHQuYWRkcmVzc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgc2NyaXB0SGFzaDogYWRkcmVzcyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHZvdGVzLm1hcCgodm90ZSkgPT4gY29tbW9uLmVjUG9pbnRUb1N0cmluZyh2b3RlKSksXG4gICAgICAgICAgICBdIGFzIGNvbnN0LFxuICAgICAgICApLFxuICAgICAgICBhY3Rpb25zOiBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBhY3Rpb24uc2VyaWFsaXplSlNPTihjb250ZXh0KSksXG4gICAgICAgIHN0b3JhZ2VDaGFuZ2VzOiBzdG9yYWdlQ2hhbmdlcy5tYXAoKHN0b3JhZ2VDaGFuZ2UpID0+IHN0b3JhZ2VDaGFuZ2Uuc2VyaWFsaXplSlNPTihjb250ZXh0KSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50cmFuc2FjdGlvbkJhc2VKU09OLFxuICAgICAgdHlwZTogJ0ludm9jYXRpb25UcmFuc2FjdGlvbicsXG4gICAgICBzY3JpcHQ6IEpTT05IZWxwZXIud3JpdGVCdWZmZXIodGhpcy5zY3JpcHQpLFxuICAgICAgZ2FzOiBKU09OSGVscGVyLndyaXRlRml4ZWQ4KHRoaXMuZ2FzKSxcbiAgICAgIGludm9jYXRpb25EYXRhOiBpbnZvY2F0aW9uRGF0YUpTT04sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTeXN0ZW1GZWUoX2NvbnRleHQ6IEZlZUNvbnRleHQpOiBCTiB7XG4gICAgcmV0dXJuIHRoaXMuZ2FzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeShvcHRpb25zOiBUcmFuc2FjdGlvblZlcmlmeU9wdGlvbnMpOiBQcm9taXNlPHJlYWRvbmx5IFZlcmlmeVNjcmlwdFJlc3VsdFtdPiB7XG4gICAgaWYgKCF0aGlzLmdhcy5tb2QodXRpbHMuT05FX0hVTkRSRURfTUlMTElPTikuZXEodXRpbHMuWkVSTykpIHtcbiAgICAgIHRocm93IG5ldyBWZXJpZnlFcnJvcignSW52YWxpZCBHQVMgYW1vdW50Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnZlcmlmeShvcHRpb25zKTtcbiAgfVxufVxuIl19
|