PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-rune/dist/test/unit

Просмотр файла: utils.js

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const statics_1 = require("@bitgo/statics");
const should_1 = __importDefault(require("should"));
const utils_1 = require("../../src/lib/utils");
const constants_1 = require("../../src/lib/constants");
const rune_1 = require("../resources/rune");
const trune_1 = require("../resources/trune");
const bech32 = require('bech32-buffer');
describe('utils', () => {
    const mainnetUtils = new utils_1.RuneUtils(statics_1.NetworkType.MAINNET);
    const testnetUtils = new utils_1.RuneUtils(statics_1.NetworkType.TESTNET);
    const testnetDecodedAddress = bech32.decode(trune_1.testnetAddress.address1).data;
    const mainnetDecodedAddress = bech32.decode(rune_1.mainnetAddress.address1).data;
    it('should validate block hash correctly', () => {
        should_1.default.equal(mainnetUtils.isValidBlockId(rune_1.blockHash.hash1), true);
        should_1.default.equal(mainnetUtils.isValidBlockId(rune_1.blockHash.hash2), true);
        // param is coming as undefined so it was causing an issue
        should_1.default.equal(mainnetUtils.isValidBlockId(undefined), false);
        should_1.default.equal(mainnetUtils.isValidBlockId(''), false);
    });
    it('should validate invalid block hash correctly', () => {
        should_1.default.equal(mainnetUtils.isValidBlockId(''), false);
        should_1.default.equal(mainnetUtils.isValidBlockId('0xade35465gfvdcsxsz24300'), false);
        should_1.default.equal(mainnetUtils.isValidBlockId(rune_1.blockHash.hash2 + 'ff'), false);
        should_1.default.equal(mainnetUtils.isValidBlockId('latest'), false);
    });
    it('should validate transaction id correctly', () => {
        should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash1), true);
        should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash2), true);
        should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash3), true);
    });
    it('should validate invalid transaction id correctly', () => {
        should_1.default.equal(mainnetUtils.isValidTransactionId(''), false);
        should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash1.slice(3)), false);
        should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash3 + '00'), false);
        should_1.default.equal(mainnetUtils.isValidTransactionId('dalij43ta0ga2dadda02'), false);
    });
    it('validateAmount', function () {
        should_1.default.doesNotThrow(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount1]));
        should_1.default.doesNotThrow(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount2]));
        should_1.default.doesNotThrow(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount3]));
        (0, should_1.default)(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount4])).throwError('transactionBuilder: validateAmount: Invalid amount: ' + rune_1.mainnetCoinAmounts.amount4.amount);
        (0, should_1.default)(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount5])).throwError('transactionBuilder: validateAmount: Invalid denom: ' + rune_1.mainnetCoinAmounts.amount5.denom);
        should_1.default.doesNotThrow(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount1]));
        should_1.default.doesNotThrow(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount2]));
        should_1.default.doesNotThrow(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount3]));
        (0, should_1.default)(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount4])).throwError('transactionBuilder: validateAmount: Invalid amount: ' + trune_1.testnetCoinAmounts.amount4.amount);
        (0, should_1.default)(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount5])).throwError('transactionBuilder: validateAmount: Invalid denom: ' + trune_1.testnetCoinAmounts.amount5.denom);
    });
    it('validate gas amount', function () {
        const gasBudget = { amount: [rune_1.mainnetGasAmounts.positiveGasAmount], gasLimit: 1 };
        should_1.default.doesNotThrow(() => mainnetUtils.validateGasBudget(gasBudget));
        gasBudget.amount[0] = rune_1.mainnetGasAmounts.zeroGasAmount;
        should_1.default.doesNotThrow(() => mainnetUtils.validateGasBudget(gasBudget));
        gasBudget.amount[0] = rune_1.mainnetGasAmounts.emptyGasAmount;
        (0, should_1.default)(() => mainnetUtils.validateGasBudget(gasBudget)).throwError('transactionBuilder: validateAmount: Invalid amount: ');
        gasBudget.amount[0] = rune_1.mainnetGasAmounts.alphabeticGasAmount;
        (0, should_1.default)(() => mainnetUtils.validateGasBudget(gasBudget)).throwError('transactionBuilder: validateAmount: Invalid amount: xyz');
    });
    it('should validate mainnet address', () => {
        should_1.default.equal(mainnetUtils.isValidAddress(rune_1.mainnetAddress.address1), true);
        should_1.default.equal(mainnetUtils.isValidAddress(rune_1.mainnetAddress.validMemoIdAddress), true);
        should_1.default.equal(mainnetUtils.isValidAddress(mainnetDecodedAddress), true);
        should_1.default.equal(mainnetUtils.isValidAddress(trune_1.testnetAddress.address1), false);
        should_1.default.equal(mainnetUtils.isValidAddress('12345'), false);
    });
    it('should validate testnet address', () => {
        should_1.default.equal(testnetUtils.isValidAddress(trune_1.testnetAddress.address1), true);
        should_1.default.equal(testnetUtils.isValidAddress(trune_1.testnetAddress.validMemoIdAddress), true);
        should_1.default.equal(mainnetUtils.isValidAddress(testnetDecodedAddress), true);
        should_1.default.equal(testnetUtils.isValidAddress(rune_1.mainnetAddress.address1), false);
        should_1.default.equal(testnetUtils.isValidAddress('12345'), false);
    });
    it('should convert string type testnet address to Uint8Array', () => {
        const decodedAddress = testnetUtils.getDecodedAddress(trune_1.testnetAddress.address1);
        should_1.default.equal(decodedAddress.length, 20);
    });
    it('should convert string type mainnet address to Uint8Array', () => {
        const decodedAddress = mainnetUtils.getDecodedAddress(rune_1.mainnetAddress.address1);
        should_1.default.equal(decodedAddress.length, 20);
    });
    it('should convert Uint8Array type testnet address to string', () => {
        const encodedAddress = testnetUtils.getEncodedAddress(testnetDecodedAddress);
        should_1.default.equal(encodedAddress, trune_1.testnetAddress.address1);
        should_1.default.equal(typeof encodedAddress, 'string');
        should_1.default.equal(encodedAddress.length, 44);
        should_1.default.equal(encodedAddress.startsWith(constants_1.TESTNET_ADDRESS_PREFIX), true);
    });
    it('should convert Uint8Array type mainnet address to string', () => {
        const encodedAddress = mainnetUtils.getEncodedAddress(mainnetDecodedAddress);
        should_1.default.equal(encodedAddress, rune_1.mainnetAddress.address1);
        should_1.default.equal(typeof encodedAddress, 'string');
        should_1.default.equal(encodedAddress.length, 43);
        should_1.default.equal(encodedAddress.startsWith(constants_1.MAINNET_ADDRESS_PREFIX), true);
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBNkM7QUFDN0Msb0RBQTRCO0FBQzVCLCtDQUFnRDtBQUNoRCx1REFBeUY7QUFDekYsNENBQTRHO0FBQzVHLDhDQUF3RTtBQUN4RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFeEMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckIsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUUxRSxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsZ0JBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGdCQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakUsMERBQTBEO1FBQzFELGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBOEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FB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d29ya1R5cGUgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBSdW5lVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IE1BSU5ORVRfQUREUkVTU19QUkVGSVgsIFRFU1RORVRfQUREUkVTU19QUkVGSVggfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBibG9ja0hhc2gsIG1haW5uZXRDb2luQW1vdW50cywgdHhJZHMsIG1haW5uZXRBZGRyZXNzLCBtYWlubmV0R2FzQW1vdW50cyB9IGZyb20gJy4uL3Jlc291cmNlcy9ydW5lJztcbmltcG9ydCB7IHRlc3RuZXRDb2luQW1vdW50cywgdGVzdG5ldEFkZHJlc3MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHJ1bmUnO1xuY29uc3QgYmVjaDMyID0gcmVxdWlyZSgnYmVjaDMyLWJ1ZmZlcicpO1xuXG5kZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIGNvbnN0IG1haW5uZXRVdGlscyA9IG5ldyBSdW5lVXRpbHMoTmV0d29ya1R5cGUuTUFJTk5FVCk7XG4gIGNvbnN0IHRlc3RuZXRVdGlscyA9IG5ldyBSdW5lVXRpbHMoTmV0d29ya1R5cGUuVEVTVE5FVCk7XG5cbiAgY29uc3QgdGVzdG5ldERlY29kZWRBZGRyZXNzID0gYmVjaDMyLmRlY29kZSh0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSkuZGF0YTtcbiAgY29uc3QgbWFpbm5ldERlY29kZWRBZGRyZXNzID0gYmVjaDMyLmRlY29kZShtYWlubmV0QWRkcmVzcy5hZGRyZXNzMSkuZGF0YTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJsb2NrIGhhc2ggY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoLmhhc2gxKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2guaGFzaDIpLCB0cnVlKTtcbiAgICAvLyBwYXJhbSBpcyBjb21pbmcgYXMgdW5kZWZpbmVkIHNvIGl0IHdhcyBjYXVzaW5nIGFuIGlzc3VlXG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBpbnZhbGlkIGJsb2NrIGhhc2ggY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEJsb2NrSWQoJycpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCgnMHhhZGUzNTQ2NWdmdmRjc3hzejI0MzAwJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaC5oYXNoMiArICdmZicpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCgnbGF0ZXN0JyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0cmFuc2FjdGlvbiBpZCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDIpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gzKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgaW52YWxpZCB0cmFuc2FjdGlvbiBpZCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gxLnNsaWNlKDMpKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDMgKyAnMDAnKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ2RhbGlqNDN0YTBnYTJkYWRkYTAyJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlQW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gbWFpbm5ldFV0aWxzLnZhbGlkYXRlQW1vdW50RGF0YShbbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDFdKSk7XG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFttYWlubmV0Q29pbkFtb3VudHMuYW1vdW50Ml0pKTtcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IG1haW5uZXRVdGlscy52YWxpZGF0ZUFtb3VudERhdGEoW21haW5uZXRDb2luQW1vdW50cy5hbW91bnQzXSkpO1xuICAgIHNob3VsZCgoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFttYWlubmV0Q29pbkFtb3VudHMuYW1vdW50NF0pKS50aHJvd0Vycm9yKFxuICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogdmFsaWRhdGVBbW91bnQ6IEludmFsaWQgYW1vdW50OiAnICsgbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDQuYW1vdW50XG4gICAgKTtcbiAgICBzaG91bGQoKCkgPT4gbWFpbm5ldFV0aWxzLnZhbGlkYXRlQW1vdW50RGF0YShbbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDVdKSkudGhyb3dFcnJvcihcbiAgICAgICd0cmFuc2FjdGlvbkJ1aWxkZXI6IHZhbGlkYXRlQW1vdW50OiBJbnZhbGlkIGRlbm9tOiAnICsgbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDUuZGVub21cbiAgICApO1xuXG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0ZXN0bmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50MV0pKTtcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHRlc3RuZXRVdGlscy52YWxpZGF0ZUFtb3VudERhdGEoW3Rlc3RuZXRDb2luQW1vdW50cy5hbW91bnQyXSkpO1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdGVzdG5ldFV0aWxzLnZhbGlkYXRlQW1vdW50RGF0YShbdGVzdG5ldENvaW5BbW91bnRzLmFtb3VudDNdKSk7XG4gICAgc2hvdWxkKCgpID0+IHRlc3RuZXRVdGlscy52YWxpZGF0ZUFtb3VudERhdGEoW3Rlc3RuZXRDb2luQW1vdW50cy5hbW91bnQ0XSkpLnRocm93RXJyb3IoXG4gICAgICAndHJhbnNhY3Rpb25CdWlsZGVyOiB2YWxpZGF0ZUFtb3VudDogSW52YWxpZCBhbW91bnQ6ICcgKyB0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50NC5hbW91bnRcbiAgICApO1xuICAgIHNob3VsZCgoKSA9PiB0ZXN0bmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50NV0pKS50aHJvd0Vycm9yKFxuICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogdmFsaWRhdGVBbW91bnQ6IEludmFsaWQgZGVub206ICcgKyB0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50NS5kZW5vbVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZSBnYXMgYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGdhc0J1ZGdldCA9IHsgYW1vdW50OiBbbWFpbm5ldEdhc0Ftb3VudHMucG9zaXRpdmVHYXNBbW91bnRdLCBnYXNMaW1pdDogMSB9O1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gbWFpbm5ldFV0aWxzLnZhbGlkYXRlR2FzQnVkZ2V0KGdhc0J1ZGdldCkpO1xuXG4gICAgZ2FzQnVkZ2V0LmFtb3VudFswXSA9IG1haW5uZXRHYXNBbW91bnRzLnplcm9HYXNBbW91bnQ7XG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVHYXNCdWRnZXQoZ2FzQnVkZ2V0KSk7XG5cbiAgICBnYXNCdWRnZXQuYW1vdW50WzBdID0gbWFpbm5ldEdhc0Ftb3VudHMuZW1wdHlHYXNBbW91bnQ7XG4gICAgc2hvdWxkKCgpID0+IG1haW5uZXRVdGlscy52YWxpZGF0ZUdhc0J1ZGdldChnYXNCdWRnZXQpKS50aHJvd0Vycm9yKFxuICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogdmFsaWRhdGVBbW91bnQ6IEludmFsaWQgYW1vdW50OiAnXG4gICAgKTtcblxuICAgIGdhc0J1ZGdldC5hbW91bnRbMF0gPSBtYWlubmV0R2FzQW1vdW50cy5hbHBoYWJldGljR2FzQW1vdW50O1xuICAgIHNob3VsZCgoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVHYXNCdWRnZXQoZ2FzQnVkZ2V0KSkudGhyb3dFcnJvcihcbiAgICAgICd0cmFuc2FjdGlvbkJ1aWxkZXI6IHZhbGlkYXRlQW1vdW50OiBJbnZhbGlkIGFtb3VudDogeHl6J1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgbWFpbm5ldCBhZGRyZXNzJywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEFkZHJlc3MobWFpbm5ldEFkZHJlc3MuYWRkcmVzczEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKG1haW5uZXRBZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEFkZHJlc3MobWFpbm5ldERlY29kZWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQWRkcmVzcyh0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKCcxMjM0NScpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgdGVzdG5ldCBhZGRyZXNzJywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbCh0ZXN0bmV0VXRpbHMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldEFkZHJlc3MuYWRkcmVzczEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwodGVzdG5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRBZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldERlY29kZWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKHRlc3RuZXRVdGlscy5pc1ZhbGlkQWRkcmVzcyhtYWlubmV0QWRkcmVzcy5hZGRyZXNzMSksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodGVzdG5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKCcxMjM0NScpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBzdHJpbmcgdHlwZSB0ZXN0bmV0IGFkZHJlc3MgdG8gVWludDhBcnJheScsICgpID0+IHtcbiAgICBjb25zdCBkZWNvZGVkQWRkcmVzcyA9IHRlc3RuZXRVdGlscy5nZXREZWNvZGVkQWRkcmVzcyh0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRBZGRyZXNzLmxlbmd0aCwgMjApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNvbnZlcnQgc3RyaW5nIHR5cGUgbWFpbm5ldCBhZGRyZXNzIHRvIFVpbnQ4QXJyYXknLCAoKSA9PiB7XG4gICAgY29uc3QgZGVjb2RlZEFkZHJlc3MgPSBtYWlubmV0VXRpbHMuZ2V0RGVjb2RlZEFkZHJlc3MobWFpbm5ldEFkZHJlc3MuYWRkcmVzczEpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkQWRkcmVzcy5sZW5ndGgsIDIwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb252ZXJ0IFVpbnQ4QXJyYXkgdHlwZSB0ZXN0bmV0IGFkZHJlc3MgdG8gc3RyaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRBZGRyZXNzID0gdGVzdG5ldFV0aWxzLmdldEVuY29kZWRBZGRyZXNzKHRlc3RuZXREZWNvZGVkQWRkcmVzcyk7XG4gICAgc2hvdWxkLmVxdWFsKGVuY29kZWRBZGRyZXNzLCB0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSk7XG4gICAgc2hvdWxkLmVxdWFsKHR5cGVvZiBlbmNvZGVkQWRkcmVzcywgJ3N0cmluZycpO1xuICAgIHNob3VsZC5lcXVhbChlbmNvZGVkQWRkcmVzcy5sZW5ndGgsIDQ0KTtcbiAgICBzaG91bGQuZXF1YWwoZW5jb2RlZEFkZHJlc3Muc3RhcnRzV2l0aChURVNUTkVUX0FERFJFU1NfUFJFRklYKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBVaW50OEFycmF5IHR5cGUgbWFpbm5ldCBhZGRyZXNzIHRvIHN0cmluZycsICgpID0+IHtcbiAgICBjb25zdCBlbmNvZGVkQWRkcmVzcyA9IG1haW5uZXRVdGlscy5nZXRFbmNvZGVkQWRkcmVzcyhtYWlubmV0RGVjb2RlZEFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChlbmNvZGVkQWRkcmVzcywgbWFpbm5ldEFkZHJlc3MuYWRkcmVzczEpO1xuICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgZW5jb2RlZEFkZHJlc3MsICdzdHJpbmcnKTtcbiAgICBzaG91bGQuZXF1YWwoZW5jb2RlZEFkZHJlc3MubGVuZ3RoLCA0Myk7XG4gICAgc2hvdWxkLmVxdWFsKGVuY29kZWRBZGRyZXNzLnN0YXJ0c1dpdGgoTUFJTk5FVF9BRERSRVNTX1BSRUZJWCksIHRydWUpO1xuICB9KTtcbn0pO1xuIl19

Выполнить команду


Для локальной разработки. Не используйте в интернете!