PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/avalanche/typings/tests/apis/avm

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const utxos_1 = require("../../../src/apis/avm/utxos");
const keychain_1 = require("../../../src/apis/avm/keychain");
const inputs_1 = require("../../../src/apis/avm/inputs");
const create_hash_1 = __importDefault(require("create-hash"));
const bintools_1 = __importDefault(require("../../../src/utils/bintools"));
const bn_js_1 = __importDefault(require("bn.js"));
const buffer_1 = require("buffer/");
const outputs_1 = require("../../../src/apis/avm/outputs");
const constants_1 = require("../../../src/apis/avm/constants");
const input_1 = require("../../../src/common/input");
/**
 * @ignore
 */
const bintools = bintools_1.default.getInstance();
describe("Inputs", () => {
    let set;
    let keymgr1;
    let keymgr2;
    let addrs1;
    let addrs2;
    let utxos;
    let hrp = "tests";
    const amnt = 10000;
    const codecID_zero = 0;
    const codecID_one = 1;
    beforeEach(() => {
        set = new utxos_1.UTXOSet();
        keymgr1 = new keychain_1.KeyChain(hrp, "X");
        keymgr2 = new keychain_1.KeyChain(hrp, "X");
        addrs1 = [];
        addrs2 = [];
        utxos = [];
        for (let i = 0; i < 3; i++) {
            addrs1.push(keymgr1.makeKey().getAddress());
            addrs2.push(keymgr2.makeKey().getAddress());
        }
        const amount = new bn_js_1.default(amnt);
        const addresses = keymgr1.getAddresses();
        const locktime = new bn_js_1.default(54321);
        const threshold = 3;
        for (let i = 0; i < 3; i++) {
            const txid = buffer_1.Buffer.from((0, create_hash_1.default)("sha256")
                .update(bintools.fromBNToBuffer(new bn_js_1.default(i), 32))
                .digest());
            const txidx = buffer_1.Buffer.from(bintools.fromBNToBuffer(new bn_js_1.default(i), 4));
            const assetID = buffer_1.Buffer.from((0, create_hash_1.default)("sha256").update(txid).digest());
            const out = new outputs_1.SECPTransferOutput(amount.add(new bn_js_1.default(i)), addresses, locktime, threshold);
            const xferout = new outputs_1.TransferableOutput(assetID, out);
            const u = new utxos_1.UTXO(constants_1.AVMConstants.LATESTCODEC, txid, txidx, assetID, out);
            u.fromBuffer(buffer_1.Buffer.concat([u.getCodecIDBuffer(), txid, txidx, xferout.toBuffer()]));
            utxos.push(u);
        }
        set.addArray(utxos);
    });
    test("SECPInput", () => {
        let u;
        let txid;
        let txidx;
        const amount = new bn_js_1.default(amnt);
        let input;
        let xferinput;
        u = utxos[0];
        txid = u.getTxID();
        txidx = u.getOutputIdx();
        const asset = u.getAssetID();
        input = new inputs_1.SECPTransferInput(amount);
        xferinput = new inputs_1.TransferableInput(txid, txidx, asset, input);
        expect(xferinput.getUTXOID()).toBe(u.getUTXOID());
        expect(input.getInputID()).toBe(constants_1.AVMConstants.SECPINPUTID);
        input.addSignatureIdx(0, addrs2[0]);
        input.addSignatureIdx(1, addrs2[1]);
        const newin = new inputs_1.SECPTransferInput();
        newin.fromBuffer(bintools.b58ToBuffer(input.toString()));
        expect(newin.toBuffer().toString("hex")).toBe(input.toBuffer().toString("hex"));
        expect(newin.getSigIdxs().toString()).toBe(input.getSigIdxs().toString());
    });
    test("Input comparator", () => {
        const inpt1 = new inputs_1.SECPTransferInput(utxos[0].getOutput().getAmount());
        const inpt2 = new inputs_1.SECPTransferInput(utxos[1].getOutput().getAmount());
        const inpt3 = new inputs_1.SECPTransferInput(utxos[2].getOutput().getAmount());
        const cmp = input_1.Input.comparator();
        expect(cmp(inpt1, inpt2)).toBe(-1);
        expect(cmp(inpt1, inpt3)).toBe(-1);
        expect(cmp(inpt1, inpt1)).toBe(0);
        expect(cmp(inpt2, inpt2)).toBe(0);
        expect(cmp(inpt3, inpt3)).toBe(0);
    });
    test("TransferableInput comparator", () => {
        const inpt1 = new inputs_1.SECPTransferInput(utxos[0].getOutput().getAmount());
        const in1 = new inputs_1.TransferableInput(utxos[0].getTxID(), utxos[0].getOutputIdx(), utxos[0].getAssetID(), inpt1);
        const inpt2 = new inputs_1.SECPTransferInput(utxos[1].getOutput().getAmount());
        const in2 = new inputs_1.TransferableInput(utxos[1].getTxID(), utxos[1].getOutputIdx(), utxos[1].getAssetID(), inpt2);
        const inpt3 = new inputs_1.SECPTransferInput(utxos[2].getOutput().getAmount());
        const in3 = new inputs_1.TransferableInput(utxos[2].getTxID(), utxos[2].getOutputIdx(), utxos[2].getAssetID(), inpt3);
        const cmp = inputs_1.TransferableInput.comparator();
        expect(cmp(in1, in2)).toBe(-1);
        expect(cmp(in1, in3)).toBe(-1);
        expect(cmp(in1, in1)).toBe(0);
        expect(cmp(in2, in2)).toBe(0);
        expect(cmp(in3, in3)).toBe(0);
    });
    test("SECPTransferInput codecIDs", () => {
        const secpTransferInput = new inputs_1.SECPTransferInput(utxos[0].getOutput().getAmount());
        expect(secpTransferInput.getCodecID()).toBe(codecID_zero);
        expect(secpTransferInput.getInputID()).toBe(constants_1.AVMConstants.SECPINPUTID);
        secpTransferInput.setCodecID(codecID_one);
        expect(secpTransferInput.getCodecID()).toBe(codecID_one);
        expect(secpTransferInput.getInputID()).toBe(constants_1.AVMConstants.SECPINPUTID_CODECONE);
        secpTransferInput.setCodecID(codecID_zero);
        expect(secpTransferInput.getCodecID()).toBe(codecID_zero);
        expect(secpTransferInput.getInputID()).toBe(constants_1.AVMConstants.SECPINPUTID);
    });
    test("Invalid SECPTransferInput codecID", () => {
        const secpTransferInput = new inputs_1.SECPTransferInput(utxos[0].getOutput().getAmount());
        expect(() => {
            secpTransferInput.setCodecID(2);
        }).toThrow("Error - SECPTransferInput.setCodecID: invalid codecID. Valid codecIDs are 0 and 1.");
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0cy9hcGlzL2F2bS9pbnB1dHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVEQUEyRDtBQUMzRCw2REFBeUQ7QUFDekQseURBR3FDO0FBQ3JDLDhEQUFvQztBQUNwQywyRUFBa0Q7QUFDbEQsa0RBQXNCO0FBQ3RCLG9DQUFnQztBQUNoQywyREFJc0M7QUFDdEMsK0RBQThEO0FBQzlELHFEQUFpRDtBQUdqRDs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFhLGtCQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7QUFFakQsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFTLEVBQUU7SUFDNUIsSUFBSSxHQUFZLENBQUE7SUFDaEIsSUFBSSxPQUFpQixDQUFBO0lBQ3JCLElBQUksT0FBaUIsQ0FBQTtJQUNyQixJQUFJLE1BQWdCLENBQUE7SUFDcEIsSUFBSSxNQUFnQixDQUFBO0lBQ3BCLElBQUksS0FBYSxDQUFBO0lBQ2pCLElBQUksR0FBRyxHQUFXLE9BQU8sQ0FBQTtJQUN6QixNQUFNLElBQUksR0FBVyxLQUFLLENBQUE7SUFDMUIsTUFBTSxZQUFZLEdBQVcsQ0FBQyxDQUFBO0lBQzlCLE1BQU0sV0FBVyxHQUFXLENBQUMsQ0FBQTtJQUM3QixVQUFVLENBQUMsR0FBUyxFQUFFO1FBQ3BCLEdBQUcsR0FBRyxJQUFJLGVBQU8sRUFBRSxDQUFBO1FBQ25CLE9BQU8sR0FBRyxJQUFJLG1CQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLE9BQU8sR0FBRyxJQUFJLG1CQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFDWCxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ1gsS0FBSyxHQUFHLEVBQUUsQ0FBQTtRQUNWLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtZQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1NBQzVDO1FBQ0QsTUFBTSxNQUFNLEdBQU8sSUFBSSxlQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsTUFBTSxTQUFTLEdBQWEsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2xELE1BQU0sUUFBUSxHQUFPLElBQUksZUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sU0FBUyxHQUFXLENBQUMsQ0FBQTtRQUUzQixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFXLGVBQU0sQ0FBQyxJQUFJLENBQzlCLElBQUEscUJBQVUsRUFBQyxRQUFRLENBQUM7aUJBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksZUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QyxNQUFNLEVBQUUsQ0FDWixDQUFBO1lBQ0QsTUFBTSxLQUFLLEdBQVcsZUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksZUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEUsTUFBTSxPQUFPLEdBQVcsZUFBTSxDQUFDLElBQUksQ0FDakMsSUFBQSxxQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDM0MsQ0FBQTtZQUNELE1BQU0sR0FBRyxHQUFXLElBQUksNEJBQWtCLENBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckIsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLENBQ1YsQ0FBQTtZQUNELE1BQU0sT0FBTyxHQUF1QixJQUFJLDRCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUN4RSxNQUFNLENBQUMsR0FBUyxJQUFJLFlBQUksQ0FDdEIsd0JBQVksQ0FBQyxXQUFXLEVBQ3hCLElBQUksRUFDSixLQUFLLEVBQ0wsT0FBTyxFQUNQLEdBQUcsQ0FDSixDQUFBO1lBQ0QsQ0FBQyxDQUFDLFVBQVUsQ0FDVixlQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUN2RSxDQUFBO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNkO1FBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNyQixDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBUyxFQUFFO1FBQzNCLElBQUksQ0FBTyxDQUFBO1FBQ1gsSUFBSSxJQUFZLENBQUE7UUFDaEIsSUFBSSxLQUFhLENBQUE7UUFDakIsTUFBTSxNQUFNLEdBQU8sSUFBSSxlQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsSUFBSSxLQUF3QixDQUFBO1FBQzVCLElBQUksU0FBNEIsQ0FBQTtRQUVoQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1osSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNsQixLQUFLLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUU1QixLQUFLLEdBQUcsSUFBSSwwQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxTQUFTLEdBQUcsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1RCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV6RCxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNuQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVuQyxNQUFNLEtBQUssR0FBc0IsSUFBSSwwQkFBaUIsRUFBRSxDQUFBO1FBQ3hELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNqQyxDQUFBO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUMzRSxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFTLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQXNCLElBQUksMEJBQWlCLENBQ25ELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQW1CLENBQUMsU0FBUyxFQUFFLENBQ25ELENBQUE7UUFDRCxNQUFNLEtBQUssR0FBc0IsSUFBSSwwQkFBaUIsQ0FDbkQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FDbkQsQ0FBQTtRQUNELE1BQU0sS0FBSyxHQUFzQixJQUFJLDBCQUFpQixDQUNuRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFtQixDQUFDLFNBQVMsRUFBRSxDQUNuRCxDQUFBO1FBQ0QsTUFBTSxHQUFHLEdBQUcsYUFBSyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQyxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxHQUFTLEVBQUU7UUFDOUMsTUFBTSxLQUFLLEdBQXNCLElBQUksMEJBQWlCLENBQ25ELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQW1CLENBQUMsU0FBUyxFQUFFLENBQ25ELENBQUE7UUFDRCxNQUFNLEdBQUcsR0FBc0IsSUFBSSwwQkFBaUIsQ0FDbEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQ3ZCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFDckIsS0FBSyxDQUNOLENBQUE7UUFFRCxNQUFNLEtBQUssR0FBc0IsSUFBSSwwQkFBaUIsQ0FDbkQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FDbkQsQ0FBQTtRQUNELE1BQU0sR0FBRyxHQUFzQixJQUFJLDBCQUFpQixDQUNsRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ2xCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFDdkIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUNyQixLQUFLLENBQ04sQ0FBQTtRQUVELE1BQU0sS0FBSyxHQUFzQixJQUFJLDBCQUFpQixDQUNuRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFtQixDQUFDLFNBQVMsRUFBRSxDQUNuRCxDQUFBO1FBQ0QsTUFBTSxHQUFHLEdBQXNCLElBQUksMEJBQWlCLENBQ2xELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFDbEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUN2QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQ3JCLEtBQUssQ0FDTixDQUFBO1FBRUQsTUFBTSxHQUFHLEdBQUcsMEJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9CLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQVMsRUFBRTtRQUM1QyxNQUFNLGlCQUFpQixHQUFzQixJQUFJLDBCQUFpQixDQUMvRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFtQixDQUFDLFNBQVMsRUFBRSxDQUNuRCxDQUFBO1FBQ0QsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3JFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN6QyxNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDeEQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN6Qyx3QkFBWSxDQUFDLG9CQUFvQixDQUNsQyxDQUFBO1FBQ0QsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN6RCxNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxHQUFTLEVBQUU7UUFDbkQsTUFBTSxpQkFBaUIsR0FBc0IsSUFBSSwwQkFBaUIsQ0FDL0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FDbkQsQ0FBQTtRQUNELE1BQU0sQ0FBQyxHQUFTLEVBQUU7WUFDaEIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDUixvRkFBb0YsQ0FDckYsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVVFhPU2V0LCBVVFhPIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hcGlzL2F2bS91dHhvc1wiXG5pbXBvcnQgeyBLZXlDaGFpbiB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYXBpcy9hdm0va2V5Y2hhaW5cIlxuaW1wb3J0IHtcbiAgU0VDUFRyYW5zZmVySW5wdXQsXG4gIFRyYW5zZmVyYWJsZUlucHV0XG59IGZyb20gXCIuLi8uLi8uLi9zcmMvYXBpcy9hdm0vaW5wdXRzXCJcbmltcG9ydCBjcmVhdGVIYXNoIGZyb20gXCJjcmVhdGUtaGFzaFwiXG5pbXBvcnQgQmluVG9vbHMgZnJvbSBcIi4uLy4uLy4uL3NyYy91dGlscy9iaW50b29sc1wiXG5pbXBvcnQgQk4gZnJvbSBcImJuLmpzXCJcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJidWZmZXIvXCJcbmltcG9ydCB7XG4gIFNFQ1BUcmFuc2Zlck91dHB1dCxcbiAgQW1vdW50T3V0cHV0LFxuICBUcmFuc2ZlcmFibGVPdXRwdXRcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hcGlzL2F2bS9vdXRwdXRzXCJcbmltcG9ydCB7IEFWTUNvbnN0YW50cyB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYXBpcy9hdm0vY29uc3RhbnRzXCJcbmltcG9ydCB7IElucHV0IH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9jb21tb24vaW5wdXRcIlxuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9jb21tb24vb3V0cHV0XCJcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmNvbnN0IGJpbnRvb2xzOiBCaW5Ub29scyA9IEJpblRvb2xzLmdldEluc3RhbmNlKClcblxuZGVzY3JpYmUoXCJJbnB1dHNcIiwgKCk6IHZvaWQgPT4ge1xuICBsZXQgc2V0OiBVVFhPU2V0XG4gIGxldCBrZXltZ3IxOiBLZXlDaGFpblxuICBsZXQga2V5bWdyMjogS2V5Q2hhaW5cbiAgbGV0IGFkZHJzMTogQnVmZmVyW11cbiAgbGV0IGFkZHJzMjogQnVmZmVyW11cbiAgbGV0IHV0eG9zOiBVVFhPW11cbiAgbGV0IGhycDogc3RyaW5nID0gXCJ0ZXN0c1wiXG4gIGNvbnN0IGFtbnQ6IG51bWJlciA9IDEwMDAwXG4gIGNvbnN0IGNvZGVjSURfemVybzogbnVtYmVyID0gMFxuICBjb25zdCBjb2RlY0lEX29uZTogbnVtYmVyID0gMVxuICBiZWZvcmVFYWNoKCgpOiB2b2lkID0+IHtcbiAgICBzZXQgPSBuZXcgVVRYT1NldCgpXG4gICAga2V5bWdyMSA9IG5ldyBLZXlDaGFpbihocnAsIFwiWFwiKVxuICAgIGtleW1ncjIgPSBuZXcgS2V5Q2hhaW4oaHJwLCBcIlhcIilcbiAgICBhZGRyczEgPSBbXVxuICAgIGFkZHJzMiA9IFtdXG4gICAgdXR4b3MgPSBbXVxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGFkZHJzMS5wdXNoKGtleW1ncjEubWFrZUtleSgpLmdldEFkZHJlc3MoKSlcbiAgICAgIGFkZHJzMi5wdXNoKGtleW1ncjIubWFrZUtleSgpLmdldEFkZHJlc3MoKSlcbiAgICB9XG4gICAgY29uc3QgYW1vdW50OiBCTiA9IG5ldyBCTihhbW50KVxuICAgIGNvbnN0IGFkZHJlc3NlczogQnVmZmVyW10gPSBrZXltZ3IxLmdldEFkZHJlc3NlcygpXG4gICAgY29uc3QgbG9ja3RpbWU6IEJOID0gbmV3IEJOKDU0MzIxKVxuICAgIGNvbnN0IHRocmVzaG9sZDogbnVtYmVyID0gM1xuXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgY29uc3QgdHhpZDogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICAgIGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgICAgICAudXBkYXRlKGJpbnRvb2xzLmZyb21CTlRvQnVmZmVyKG5ldyBCTihpKSwgMzIpKVxuICAgICAgICAgIC5kaWdlc3QoKVxuICAgICAgKVxuICAgICAgY29uc3QgdHhpZHg6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJpbnRvb2xzLmZyb21CTlRvQnVmZmVyKG5ldyBCTihpKSwgNCkpXG4gICAgICBjb25zdCBhc3NldElEOiBCdWZmZXIgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUodHhpZCkuZGlnZXN0KClcbiAgICAgIClcbiAgICAgIGNvbnN0IG91dDogT3V0cHV0ID0gbmV3IFNFQ1BUcmFuc2Zlck91dHB1dChcbiAgICAgICAgYW1vdW50LmFkZChuZXcgQk4oaSkpLFxuICAgICAgICBhZGRyZXNzZXMsXG4gICAgICAgIGxvY2t0aW1lLFxuICAgICAgICB0aHJlc2hvbGRcbiAgICAgIClcbiAgICAgIGNvbnN0IHhmZXJvdXQ6IFRyYW5zZmVyYWJsZU91dHB1dCA9IG5ldyBUcmFuc2ZlcmFibGVPdXRwdXQoYXNzZXRJRCwgb3V0KVxuICAgICAgY29uc3QgdTogVVRYTyA9IG5ldyBVVFhPKFxuICAgICAgICBBVk1Db25zdGFudHMuTEFURVNUQ09ERUMsXG4gICAgICAgIHR4aWQsXG4gICAgICAgIHR4aWR4LFxuICAgICAgICBhc3NldElELFxuICAgICAgICBvdXRcbiAgICAgIClcbiAgICAgIHUuZnJvbUJ1ZmZlcihcbiAgICAgICAgQnVmZmVyLmNvbmNhdChbdS5nZXRDb2RlY0lEQnVmZmVyKCksIHR4aWQsIHR4aWR4LCB4ZmVyb3V0LnRvQnVmZmVyKCldKVxuICAgICAgKVxuICAgICAgdXR4b3MucHVzaCh1KVxuICAgIH1cbiAgICBzZXQuYWRkQXJyYXkodXR4b3MpXG4gIH0pXG4gIHRlc3QoXCJTRUNQSW5wdXRcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGxldCB1OiBVVFhPXG4gICAgbGV0IHR4aWQ6IEJ1ZmZlclxuICAgIGxldCB0eGlkeDogQnVmZmVyXG4gICAgY29uc3QgYW1vdW50OiBCTiA9IG5ldyBCTihhbW50KVxuICAgIGxldCBpbnB1dDogU0VDUFRyYW5zZmVySW5wdXRcbiAgICBsZXQgeGZlcmlucHV0OiBUcmFuc2ZlcmFibGVJbnB1dFxuXG4gICAgdSA9IHV0eG9zWzBdXG4gICAgdHhpZCA9IHUuZ2V0VHhJRCgpXG4gICAgdHhpZHggPSB1LmdldE91dHB1dElkeCgpXG4gICAgY29uc3QgYXNzZXQgPSB1LmdldEFzc2V0SUQoKVxuXG4gICAgaW5wdXQgPSBuZXcgU0VDUFRyYW5zZmVySW5wdXQoYW1vdW50KVxuICAgIHhmZXJpbnB1dCA9IG5ldyBUcmFuc2ZlcmFibGVJbnB1dCh0eGlkLCB0eGlkeCwgYXNzZXQsIGlucHV0KVxuICAgIGV4cGVjdCh4ZmVyaW5wdXQuZ2V0VVRYT0lEKCkpLnRvQmUodS5nZXRVVFhPSUQoKSlcbiAgICBleHBlY3QoaW5wdXQuZ2V0SW5wdXRJRCgpKS50b0JlKEFWTUNvbnN0YW50cy5TRUNQSU5QVVRJRClcblxuICAgIGlucHV0LmFkZFNpZ25hdHVyZUlkeCgwLCBhZGRyczJbMF0pXG4gICAgaW5wdXQuYWRkU2lnbmF0dXJlSWR4KDEsIGFkZHJzMlsxXSlcblxuICAgIGNvbnN0IG5ld2luOiBTRUNQVHJhbnNmZXJJbnB1dCA9IG5ldyBTRUNQVHJhbnNmZXJJbnB1dCgpXG4gICAgbmV3aW4uZnJvbUJ1ZmZlcihiaW50b29scy5iNThUb0J1ZmZlcihpbnB1dC50b1N0cmluZygpKSlcbiAgICBleHBlY3QobmV3aW4udG9CdWZmZXIoKS50b1N0cmluZyhcImhleFwiKSkudG9CZShcbiAgICAgIGlucHV0LnRvQnVmZmVyKCkudG9TdHJpbmcoXCJoZXhcIilcbiAgICApXG4gICAgZXhwZWN0KG5ld2luLmdldFNpZ0lkeHMoKS50b1N0cmluZygpKS50b0JlKGlucHV0LmdldFNpZ0lkeHMoKS50b1N0cmluZygpKVxuICB9KVxuXG4gIHRlc3QoXCJJbnB1dCBjb21wYXJhdG9yXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBpbnB0MTogU0VDUFRyYW5zZmVySW5wdXQgPSBuZXcgU0VDUFRyYW5zZmVySW5wdXQoXG4gICAgICAodXR4b3NbMF0uZ2V0T3V0cHV0KCkgYXMgQW1vdW50T3V0cHV0KS5nZXRBbW91bnQoKVxuICAgIClcbiAgICBjb25zdCBpbnB0MjogU0VDUFRyYW5zZmVySW5wdXQgPSBuZXcgU0VDUFRyYW5zZmVySW5wdXQoXG4gICAgICAodXR4b3NbMV0uZ2V0T3V0cHV0KCkgYXMgQW1vdW50T3V0cHV0KS5nZXRBbW91bnQoKVxuICAgIClcbiAgICBjb25zdCBpbnB0MzogU0VDUFRyYW5zZmVySW5wdXQgPSBuZXcgU0VDUFRyYW5zZmVySW5wdXQoXG4gICAgICAodXR4b3NbMl0uZ2V0T3V0cHV0KCkgYXMgQW1vdW50T3V0cHV0KS5nZXRBbW91bnQoKVxuICAgIClcbiAgICBjb25zdCBjbXAgPSBJbnB1dC5jb21wYXJhdG9yKClcbiAgICBleHBlY3QoY21wKGlucHQxLCBpbnB0MikpLnRvQmUoLTEpXG4gICAgZXhwZWN0KGNtcChpbnB0MSwgaW5wdDMpKS50b0JlKC0xKVxuICAgIGV4cGVjdChjbXAoaW5wdDEsIGlucHQxKSkudG9CZSgwKVxuICAgIGV4cGVjdChjbXAoaW5wdDIsIGlucHQyKSkudG9CZSgwKVxuICAgIGV4cGVjdChjbXAoaW5wdDMsIGlucHQzKSkudG9CZSgwKVxuICB9KVxuXG4gIHRlc3QoXCJUcmFuc2ZlcmFibGVJbnB1dCBjb21wYXJhdG9yXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBpbnB0MTogU0VDUFRyYW5zZmVySW5wdXQgPSBuZXcgU0VDUFRyYW5zZmVySW5wdXQoXG4gICAgICAodXR4b3NbMF0uZ2V0T3V0cHV0KCkgYXMgQW1vdW50T3V0cHV0KS5nZXRBbW91bnQoKVxuICAgIClcbiAgICBjb25zdCBpbjE6IFRyYW5zZmVyYWJsZUlucHV0ID0gbmV3IFRyYW5zZmVyYWJsZUlucHV0KFxuICAgICAgdXR4b3NbMF0uZ2V0VHhJRCgpLFxuICAgICAgdXR4b3NbMF0uZ2V0T3V0cHV0SWR4KCksXG4gICAgICB1dHhvc1swXS5nZXRBc3NldElEKCksXG4gICAgICBpbnB0MVxuICAgIClcblxuICAgIGNvbnN0IGlucHQyOiBTRUNQVHJhbnNmZXJJbnB1dCA9IG5ldyBTRUNQVHJhbnNmZXJJbnB1dChcbiAgICAgICh1dHhvc1sxXS5nZXRPdXRwdXQoKSBhcyBBbW91bnRPdXRwdXQpLmdldEFtb3VudCgpXG4gICAgKVxuICAgIGNvbnN0IGluMjogVHJhbnNmZXJhYmxlSW5wdXQgPSBuZXcgVHJhbnNmZXJhYmxlSW5wdXQoXG4gICAgICB1dHhvc1sxXS5nZXRUeElEKCksXG4gICAgICB1dHhvc1sxXS5nZXRPdXRwdXRJZHgoKSxcbiAgICAgIHV0eG9zWzFdLmdldEFzc2V0SUQoKSxcbiAgICAgIGlucHQyXG4gICAgKVxuXG4gICAgY29uc3QgaW5wdDM6IFNFQ1BUcmFuc2ZlcklucHV0ID0gbmV3IFNFQ1BUcmFuc2ZlcklucHV0KFxuICAgICAgKHV0eG9zWzJdLmdldE91dHB1dCgpIGFzIEFtb3VudE91dHB1dCkuZ2V0QW1vdW50KClcbiAgICApXG4gICAgY29uc3QgaW4zOiBUcmFuc2ZlcmFibGVJbnB1dCA9IG5ldyBUcmFuc2ZlcmFibGVJbnB1dChcbiAgICAgIHV0eG9zWzJdLmdldFR4SUQoKSxcbiAgICAgIHV0eG9zWzJdLmdldE91dHB1dElkeCgpLFxuICAgICAgdXR4b3NbMl0uZ2V0QXNzZXRJRCgpLFxuICAgICAgaW5wdDNcbiAgICApXG5cbiAgICBjb25zdCBjbXAgPSBUcmFuc2ZlcmFibGVJbnB1dC5jb21wYXJhdG9yKClcbiAgICBleHBlY3QoY21wKGluMSwgaW4yKSkudG9CZSgtMSlcbiAgICBleHBlY3QoY21wKGluMSwgaW4zKSkudG9CZSgtMSlcbiAgICBleHBlY3QoY21wKGluMSwgaW4xKSkudG9CZSgwKVxuICAgIGV4cGVjdChjbXAoaW4yLCBpbjIpKS50b0JlKDApXG4gICAgZXhwZWN0KGNtcChpbjMsIGluMykpLnRvQmUoMClcbiAgfSlcblxuICB0ZXN0KFwiU0VDUFRyYW5zZmVySW5wdXQgY29kZWNJRHNcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHNlY3BUcmFuc2ZlcklucHV0OiBTRUNQVHJhbnNmZXJJbnB1dCA9IG5ldyBTRUNQVHJhbnNmZXJJbnB1dChcbiAgICAgICh1dHhvc1swXS5nZXRPdXRwdXQoKSBhcyBBbW91bnRPdXRwdXQpLmdldEFtb3VudCgpXG4gICAgKVxuICAgIGV4cGVjdChzZWNwVHJhbnNmZXJJbnB1dC5nZXRDb2RlY0lEKCkpLnRvQmUoY29kZWNJRF96ZXJvKVxuICAgIGV4cGVjdChzZWNwVHJhbnNmZXJJbnB1dC5nZXRJbnB1dElEKCkpLnRvQmUoQVZNQ29uc3RhbnRzLlNFQ1BJTlBVVElEKVxuICAgIHNlY3BUcmFuc2ZlcklucHV0LnNldENvZGVjSUQoY29kZWNJRF9vbmUpXG4gICAgZXhwZWN0KHNlY3BUcmFuc2ZlcklucHV0LmdldENvZGVjSUQoKSkudG9CZShjb2RlY0lEX29uZSlcbiAgICBleHBlY3Qoc2VjcFRyYW5zZmVySW5wdXQuZ2V0SW5wdXRJRCgpKS50b0JlKFxuICAgICAgQVZNQ29uc3RhbnRzLlNFQ1BJTlBVVElEX0NPREVDT05FXG4gICAgKVxuICAgIHNlY3BUcmFuc2ZlcklucHV0LnNldENvZGVjSUQoY29kZWNJRF96ZXJvKVxuICAgIGV4cGVjdChzZWNwVHJhbnNmZXJJbnB1dC5nZXRDb2RlY0lEKCkpLnRvQmUoY29kZWNJRF96ZXJvKVxuICAgIGV4cGVjdChzZWNwVHJhbnNmZXJJbnB1dC5nZXRJbnB1dElEKCkpLnRvQmUoQVZNQ29uc3RhbnRzLlNFQ1BJTlBVVElEKVxuICB9KVxuXG4gIHRlc3QoXCJJbnZhbGlkIFNFQ1BUcmFuc2ZlcklucHV0IGNvZGVjSURcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHNlY3BUcmFuc2ZlcklucHV0OiBTRUNQVHJhbnNmZXJJbnB1dCA9IG5ldyBTRUNQVHJhbnNmZXJJbnB1dChcbiAgICAgICh1dHhvc1swXS5nZXRPdXRwdXQoKSBhcyBBbW91bnRPdXRwdXQpLmdldEFtb3VudCgpXG4gICAgKVxuICAgIGV4cGVjdCgoKTogdm9pZCA9PiB7XG4gICAgICBzZWNwVHJhbnNmZXJJbnB1dC5zZXRDb2RlY0lEKDIpXG4gICAgfSkudG9UaHJvdyhcbiAgICAgIFwiRXJyb3IgLSBTRUNQVHJhbnNmZXJJbnB1dC5zZXRDb2RlY0lEOiBpbnZhbGlkIGNvZGVjSUQuIFZhbGlkIGNvZGVjSURzIGFyZSAwIGFuZCAxLlwiXG4gICAgKVxuICB9KVxufSlcbiJdfQ==

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


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