PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-algo/dist/test/unit/lib
Просмотр файла: transaction.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const should_1 = __importDefault(require("should"));
const statics_1 = require("@bitgo/statics");
const AlgoResources = __importStar(require("../../fixtures/resources"));
const transaction_1 = require("../../../src/lib/transaction");
const lib_1 = require("../../../src/lib");
describe('Algo Transaction', () => {
let tx;
let txnBuilder;
const address = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ4';
beforeEach(() => {
const config = statics_1.coins.get('algo');
const tokenConfig = statics_1.coins.get('talgo:USON-16026728');
const firstRound = 167;
const lastRound = 1167;
const fee = 1000;
const tokenId = 1;
const amount = '0';
tx = new transaction_1.Transaction(config);
txnBuilder = new lib_1.TransactionBuilderFactory(tokenConfig).getAssetTransferBuilder();
txnBuilder
.fee({ fee: fee.toString() })
.isFlatFee(true)
.firstRound(firstRound)
.lastRound(lastRound)
.testnet()
.sender({ address: address })
.tokenId(tokenId)
.amount(BigInt(amount))
.to({ address: address });
});
describe('empty transaction', () => {
it('should throw empty transaction', () => {
assert_1.default.throws(() => tx.toJson(), /Empty transaction/);
assert_1.default.throws(() => tx.toBroadcastFormat(), /Empty transaction/);
});
it('should not sign', () => {
assert_1.default.throws(() => tx.sign([new lib_1.KeyPair({ prv: AlgoResources.accounts.default.secretKey.toString('hex') })]), /Empty transaction/);
tx.setNumberOfRequiredSigners(2);
assert_1.default.throws(() => tx.sign([new lib_1.KeyPair({ prv: AlgoResources.accounts.default.secretKey.toString('hex') })]), /Empty transaction/);
});
});
describe('sign transaction', () => {
it('cannot sign - no signer required', () => {
should_1.default.deepEqual(tx.canSign({ key: 'some' }), false);
});
it('cannot sign - wrong account secret', () => {
tx.setNumberOfRequiredSigners(1);
tx.sender(AlgoResources.accounts.account1.address);
should_1.default.deepEqual(tx.canSign({ key: AlgoResources.accounts.account2.secretKey.toString('hex') }), false);
});
it('can sign', () => {
tx.setNumberOfRequiredSigners(1);
tx.sender(AlgoResources.accounts.account2.address);
should_1.default.deepEqual(tx.canSign({ key: AlgoResources.accounts.account2.secretKey.toString('hex') }), true);
});
});
describe('Transaction type', () => {
it('field txType and tokenName are added on enableToken transaction', async () => {
const tx = await txnBuilder.build();
const txHex = tx.toBroadcastFormat();
const txInfo = tx.toJson();
should_1.default.exists(txHex);
txInfo.to.should.equal(address);
txInfo.from.should.equal(address);
txInfo.amount.should.equal('0');
txInfo.firstRound.should.equal(167);
txInfo.tokenId.should.equal(1);
txInfo.fee.should.equal(1000);
txInfo.lastRound.should.equal(1167);
txInfo.genesisID.should.equal('testnet-v1.0');
txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
txInfo.should.have.property('txType');
txInfo.txType.should.equal('enableToken');
txInfo.should.have.property('tokenName');
txInfo.tokenName.should.equal('USON');
});
it('field txType and tokenName are added on disableToken transaction', async () => {
const closeRemainderTo = 'SP745JJR4KPRQEXJZHVIEN736LYTL2T2DFMG3OIIFJBV66K73PHNMDCZVM';
const tx = await txnBuilder.closeRemainderTo({ address: closeRemainderTo }).build();
const txHex = tx.toBroadcastFormat();
const txInfo = tx.toJson();
should_1.default.exists(txHex);
txInfo.to.should.equal(address);
txInfo.from.should.equal(address);
txInfo.amount.should.equal('0');
txInfo.firstRound.should.equal(167);
txInfo.tokenId.should.equal(1);
txInfo.fee.should.equal(1000);
txInfo.closeRemainderTo.should.equal(closeRemainderTo);
txInfo.lastRound.should.equal(1167);
txInfo.genesisID.should.equal('testnet-v1.0');
txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
txInfo.should.have.property('txType');
txInfo.txType.should.equal('disableToken');
txInfo.should.have.property('txType');
txInfo.tokenName.should.equal('USON');
});
it('field txType and tokenName are added on transferToken transaction', async () => {
const tx = await txnBuilder.amount(BigInt('1000')).build();
const txHex = tx.toBroadcastFormat();
const txInfo = tx.toJson();
should_1.default.exists(txHex);
txInfo.to.should.equal(address);
txInfo.from.should.equal(address);
txInfo.amount.should.equal('1000');
txInfo.firstRound.should.equal(167);
txInfo.tokenId.should.equal(1);
txInfo.fee.should.equal(1000);
txInfo.lastRound.should.equal(1167);
txInfo.genesisID.should.equal('testnet-v1.0');
txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
txInfo.txType.should.equal('transferToken');
txInfo.should.have.property('txType');
txInfo.tokenName.should.equal('USON');
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsd0VBQTBEO0FBQzFELDhEQUEyRDtBQUMzRCwwQ0FBNEY7QUFFNUYsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFJLEVBQWUsQ0FBQztJQUNwQixJQUFJLFVBQWdDLENBQUM7SUFDckMsTUFBTSxPQUFPLEdBQUcsNERBQTRELENBQUM7SUFFN0UsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sTUFBTSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNsQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFFbkIsRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixVQUFVLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2xGLFVBQVU7YUFDUCxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7YUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQzthQUNmLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDdEIsU0FBUyxD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QUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQWxnb1Jlc291cmNlcyBmcm9tICcuLi8uLi9maXh0dXJlcy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEtleVBhaXIsIEFzc2V0VHJhbnNmZXJCdWlsZGVyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5cbmRlc2NyaWJlKCdBbGdvIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICBsZXQgdHg6IFRyYW5zYWN0aW9uO1xuICBsZXQgdHhuQnVpbGRlcjogQXNzZXRUcmFuc2ZlckJ1aWxkZXI7XG4gIGNvbnN0IGFkZHJlc3MgPSAnUklKVkxEWVdBU1paTkdPU1FOT0s3SE42Sk5GTE1NWjNGRkJCRkcyTk5ST001Q0U3NDREQUpTUFpKNCc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gY29pbnMuZ2V0KCdhbGdvJyk7XG4gICAgY29uc3QgdG9rZW5Db25maWcgPSBjb2lucy5nZXQoJ3RhbGdvOlVTT04tMTYwMjY3MjgnKTtcbiAgICBjb25zdCBmaXJzdFJvdW5kID0gMTY3O1xuICAgIGNvbnN0IGxhc3RSb3VuZCA9IDExNjc7XG4gICAgY29uc3QgZmVlID0gMTAwMDtcbiAgICBjb25zdCB0b2tlbklkID0gMTtcbiAgICBjb25zdCBhbW91bnQgPSAnMCc7XG5cbiAgICB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb25maWcpO1xuICAgIHR4bkJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSh0b2tlbkNvbmZpZykuZ2V0QXNzZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eG5CdWlsZGVyXG4gICAgICAuZmVlKHsgZmVlOiBmZWUudG9TdHJpbmcoKSB9KVxuICAgICAgLmlzRmxhdEZlZSh0cnVlKVxuICAgICAgLmZpcnN0Um91bmQoZmlyc3RSb3VuZClcbiAgICAgIC5sYXN0Um91bmQobGFzdFJvdW5kKVxuICAgICAgLnRlc3RuZXQoKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IGFkZHJlc3MgfSlcbiAgICAgIC50b2tlbklkKHRva2VuSWQpXG4gICAgICAuYW1vdW50KEJpZ0ludChhbW91bnQpKVxuICAgICAgLnRvKHsgYWRkcmVzczogYWRkcmVzcyB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VtcHR5IHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZW1wdHkgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4LnRvSnNvbigpLCAvRW1wdHkgdHJhbnNhY3Rpb24vKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgL0VtcHR5IHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBzaWduJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdHguc2lnbihbbmV3IEtleVBhaXIoeyBwcnY6IEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuZGVmYXVsdC5zZWNyZXRLZXkudG9TdHJpbmcoJ2hleCcpIH0pXSksXG4gICAgICAgIC9FbXB0eSB0cmFuc2FjdGlvbi9cbiAgICAgICk7XG4gICAgICB0eC5zZXROdW1iZXJPZlJlcXVpcmVkU2lnbmVycygyKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHR4LnNpZ24oW25ldyBLZXlQYWlyKHsgcHJ2OiBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmRlZmF1bHQuc2VjcmV0S2V5LnRvU3RyaW5nKCdoZXgnKSB9KV0pLFxuICAgICAgICAvRW1wdHkgdHJhbnNhY3Rpb24vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbiB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnY2Fubm90IHNpZ24gLSBubyBzaWduZXIgcmVxdWlyZWQnLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmNhblNpZ24oeyBrZXk6ICdzb21lJyB9KSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Nhbm5vdCBzaWduIC0gd3JvbmcgYWNjb3VudCBzZWNyZXQnLCAoKSA9PiB7XG4gICAgICB0eC5zZXROdW1iZXJPZlJlcXVpcmVkU2lnbmVycygxKTtcbiAgICAgIHR4LnNlbmRlcihBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5jYW5TaWduKHsga2V5OiBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQyLnNlY3JldEtleS50b1N0cmluZygnaGV4JykgfSksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYW4gc2lnbicsICgpID0+IHtcbiAgICAgIHR4LnNldE51bWJlck9mUmVxdWlyZWRTaWduZXJzKDEpO1xuICAgICAgdHguc2VuZGVyKEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmNhblNpZ24oeyBrZXk6IEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDIuc2VjcmV0S2V5LnRvU3RyaW5nKCdoZXgnKSB9KSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiB0eXBlJywgKCkgPT4ge1xuICAgIGl0KCdmaWVsZCB0eFR5cGUgYW5kIHRva2VuTmFtZSBhcmUgYWRkZWQgb24gZW5hYmxlVG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4bkJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdHhJbmZvID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdHModHhIZXgpO1xuXG4gICAgICB0eEluZm8udG8uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmZyb20uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIHR4SW5mby5maXJzdFJvdW5kLnNob3VsZC5lcXVhbCgxNjcpO1xuICAgICAgdHhJbmZvLnRva2VuSWQuc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHhJbmZvLmZlZS5zaG91bGQuZXF1YWwoMTAwMCk7XG4gICAgICB0eEluZm8ubGFzdFJvdW5kLnNob3VsZC5lcXVhbCgxMTY3KTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSUQuc2hvdWxkLmVxdWFsKCd0ZXN0bmV0LXYxLjAnKTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSGFzaC5zaG91bGQuZXF1YWwoJ1NHTzFHS1N6eUU3SUVQSXRUeENCeXc5eDhGbW5yQ0RleGk5L2NPVUpPaUk9Jyk7XG4gICAgICB0eEluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4VHlwZScpO1xuICAgICAgdHhJbmZvLnR4VHlwZS5zaG91bGQuZXF1YWwoJ2VuYWJsZVRva2VuJyk7XG4gICAgICB0eEluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuTmFtZScpO1xuICAgICAgdHhJbmZvLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ1VTT04nKTtcbiAgICB9KTtcblxuICAgIGl0KCdmaWVsZCB0eFR5cGUgYW5kIHRva2VuTmFtZSBhcmUgYWRkZWQgb24gZGlzYWJsZVRva2VuIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY2xvc2VSZW1haW5kZXJUbyA9ICdTUDc0NUpKUjRLUFJRRVhKWkhWSUVONzM2TFlUTDJUMkRGTUczT0lJRkpCVjY2SzczUEhOTURDWlZNJztcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyLmNsb3NlUmVtYWluZGVyVG8oeyBhZGRyZXNzOiBjbG9zZVJlbWFpbmRlclRvIH0pLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBzaG91bGQuZXhpc3RzKHR4SGV4KTtcblxuICAgICAgdHhJbmZvLnRvLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICAgIHR4SW5mby5mcm9tLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICAgIHR4SW5mby5hbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICB0eEluZm8uZmlyc3RSb3VuZC5zaG91bGQuZXF1YWwoMTY3KTtcbiAgICAgIHR4SW5mby50b2tlbklkLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4SW5mby5mZWUuc2hvdWxkLmVxdWFsKDEwMDApO1xuICAgICAgdHhJbmZvLmNsb3NlUmVtYWluZGVyVG8uc2hvdWxkLmVxdWFsKGNsb3NlUmVtYWluZGVyVG8pO1xuICAgICAgdHhJbmZvLmxhc3RSb3VuZC5zaG91bGQuZXF1YWwoMTE2Nyk7XG4gICAgICB0eEluZm8uZ2VuZXNpc0lELnNob3VsZC5lcXVhbCgndGVzdG5ldC12MS4wJyk7XG4gICAgICB0eEluZm8uZ2VuZXNpc0hhc2guc2hvdWxkLmVxdWFsKCdTR08xR0tTenlFN0lFUEl0VHhDQnl3OXg4Rm1uckNEZXhpOS9jT1VKT2lJPScpO1xuICAgICAgdHhJbmZvLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFR5cGUnKTtcbiAgICAgIHR4SW5mby50eFR5cGUuc2hvdWxkLmVxdWFsKCdkaXNhYmxlVG9rZW4nKTtcbiAgICAgIHR4SW5mby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhUeXBlJyk7XG4gICAgICB0eEluZm8udG9rZW5OYW1lLnNob3VsZC5lcXVhbCgnVVNPTicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZpZWxkIHR4VHlwZSBhbmQgdG9rZW5OYW1lIGFyZSBhZGRlZCBvbiB0cmFuc2ZlclRva2VuIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyLmFtb3VudChCaWdJbnQoJzEwMDAnKSkuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdHhJbmZvID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdHModHhIZXgpO1xuXG4gICAgICB0eEluZm8udG8uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmZyb20uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmFtb3VudC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SW5mby5maXJzdFJvdW5kLnNob3VsZC5lcXVhbCgxNjcpO1xuICAgICAgdHhJbmZvLnRva2VuSWQuc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHhJbmZvLmZlZS5zaG91bGQuZXF1YWwoMTAwMCk7XG4gICAgICB0eEluZm8ubGFzdFJvdW5kLnNob3VsZC5lcXVhbCgxMTY3KTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSUQuc2hvdWxkLmVxdWFsKCd0ZXN0bmV0LXYxLjAnKTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSGFzaC5zaG91bGQuZXF1YWwoJ1NHTzFHS1N6eUU3SUVQSXRUeENCeXc5eDhGbW5yQ0RleGk5L2NPVUpPaUk9Jyk7XG4gICAgICB0eEluZm8udHhUeXBlLnNob3VsZC5lcXVhbCgndHJhbnNmZXJUb2tlbicpO1xuICAgICAgdHhJbmZvLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFR5cGUnKTtcbiAgICAgIHR4SW5mby50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCdVU09OJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!