PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-sui/dist/src/lib

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WalrusWithdrawStakeTransaction = void 0;
const transaction_1 = require("./transaction");
const utils_1 = __importDefault(require("./utils"));
const sdk_core_1 = require("@bitgo/sdk-core");
const types_1 = require("./mystenlab/types");
const builder_1 = require("./mystenlab/builder");
const constants_1 = require("./constants");
const bcs_1 = require("@mysten/bcs");
const buffer_1 = require("buffer");
class WalrusWithdrawStakeTransaction extends transaction_1.Transaction {
    constructor(_coinConfig) {
        super(_coinConfig);
    }
    get suiTransaction() {
        return this._suiTransaction;
    }
    addSignature(publicKey, signature) {
        this._signatures.push(signature.toString('hex'));
        this._signature = { publicKey, signature };
        this.serialize();
    }
    get suiSignature() {
        return this._signature;
    }
    canSign(key) {
        return true;
    }
    toBroadcastFormat() {
        if (!this._suiTransaction) {
            throw new sdk_core_1.InvalidTransactionError('Empty transaction');
        }
        return this.serialize();
    }
    toJson() {
        if (!this._suiTransaction) {
            throw new sdk_core_1.ParseTransactionError('Empty transaction');
        }
        const tx = this._suiTransaction;
        return {
            id: this._id,
            sender: tx.sender,
            kind: { ProgrammableTransaction: tx.tx },
            gasData: tx.gasData,
            expiration: { None: null },
            inputObjects: [utils_1.default.getWalrusWithdrawStakeRequests(tx.tx).stakedWal],
        };
    }
    explainTransaction() {
        const result = this.toJson();
        const displayOrder = [
            'id',
            'outputs',
            'outputAmount',
            'changeOutputs',
            'changeAmount',
            'fee',
            'type',
            'module',
            'function',
            'validatorAddress',
        ];
        const outputs = [];
        const explanationResult = {
            displayOrder,
            id: this.id,
            outputs,
            outputAmount: '0',
            changeOutputs: [],
            changeAmount: '0',
            fee: { fee: this.suiTransaction.gasData.budget.toString() },
            type: this.type,
        };
        switch (this.type) {
            case sdk_core_1.TransactionType.StakingDeactivate:
                return this.explainRequestWithdrawStakedWalTransaction(result, explanationResult);
            case sdk_core_1.TransactionType.StakingWithdraw:
                return this.explainWithdrawStakedWalTransaction(result, explanationResult);
            default:
                throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
        }
    }
    explainRequestWithdrawStakedWalTransaction(result, explanationResult) {
        const outputs = [
            {
                address: this.suiTransaction.sender,
                amount: constants_1.AMOUNT_UNKNOWN_TEXT,
            },
        ];
        const outputAmount = constants_1.AMOUNT_UNKNOWN_TEXT;
        return {
            ...explanationResult,
            outputAmount,
            outputs,
        };
    }
    explainWithdrawStakedWalTransaction(result, explanationResult) {
        const outputs = [
            {
                address: this.suiTransaction.sender,
                amount: constants_1.AMOUNT_UNKNOWN_TEXT,
            },
        ];
        const outputAmount = constants_1.AMOUNT_UNKNOWN_TEXT;
        return {
            ...explanationResult,
            outputAmount,
            outputs,
        };
    }
    fromRawTransaction(rawTransaction) {
        try {
            utils_1.default.isValidRawTransaction(rawTransaction);
            this._suiTransaction = transaction_1.Transaction.deserializeSuiTransaction(rawTransaction);
            this._type = utils_1.default.getTransactionType(this._suiTransaction.type);
            this._id = this._suiTransaction.id;
            this.loadInputsAndOutputs();
        }
        catch (e) {
            throw e;
        }
    }
    getTxData() {
        if (!this._suiTransaction) {
            throw new sdk_core_1.InvalidTransactionError('empty transaction');
        }
        const inputs = this._suiTransaction.tx.inputs.map((input, index) => {
            if (input.hasOwnProperty('Object')) {
                return input;
            }
            if (input.hasOwnProperty('Pure')) {
                if (input.Pure.length === constants_1.SUI_ADDRESS_LENGTH) {
                    const address = (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64'));
                    return builder_1.Inputs.Pure(address, bcs_1.BCS.ADDRESS);
                }
                else {
                    const amount = builder_1.builder.de(bcs_1.BCS.U64, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64');
                    return builder_1.Inputs.Pure(amount, bcs_1.BCS.U64);
                }
            }
            if (input.kind === 'Input' && (input.value.hasOwnProperty('Object') || input.value.hasOwnProperty('Pure'))) {
                return input.value;
            }
            // what's left is the pure number or address string
            return builder_1.Inputs.Pure(input.value, input.type === 'pure' ? bcs_1.BCS.U64 : bcs_1.BCS.ADDRESS);
        });
        const programmableTx = {
            inputs: inputs,
            transactions: this._suiTransaction.tx.transactions,
        };
        return {
            sender: this._suiTransaction.sender,
            expiration: { None: null },
            gasData: this._suiTransaction.gasData,
            kind: {
                ProgrammableTransaction: programmableTx,
            },
        };
    }
    loadInputsAndOutputs() {
        if (!this._suiTransaction) {
            return;
        }
        const withdrawRequest = utils_1.default.getWalrusWithdrawStakeRequests(this._suiTransaction.tx);
        this._inputs = [
            {
                address: withdrawRequest.stakedWal.objectId,
                value: withdrawRequest.amount === undefined ? constants_1.AMOUNT_UNKNOWN_TEXT : withdrawRequest.amount.toString(),
                coin: this._coinConfig.name,
            },
        ];
        if (utils_1.default.isWalrusRequestWithdrawStakeTx(this._suiTransaction.tx)) {
            // request withdraw stake should have no outputs
            return;
        }
        this._outputs = [
            {
                address: this.suiTransaction.sender,
                value: withdrawRequest.amount === undefined ? constants_1.AMOUNT_UNKNOWN_TEXT : withdrawRequest.amount.toString(),
                coin: this._coinConfig.name,
            },
        ];
    }
}
exports.WalrusWithdrawStakeTransaction = WalrusWithdrawStakeTransaction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FscnVzV2l0aGRyYXdTdGFrZVRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93YWxydXNXaXRoZHJhd1N0YWtlVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsK0NBQTRDO0FBRzVDLG9EQUE0QjtBQUM1Qiw4Q0FReUI7QUFDekIsNkNBQWlFO0FBQ2pFLGlEQUE2RTtBQUM3RSwyQ0FBc0U7QUFDdEUscUNBQWtDO0FBQ2xDLG1DQUFnQztBQUVoQyxNQUFhLDhCQUErQixTQUFRLHlCQUF1RDtJQUN6RyxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQXdCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFB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QUNKLHVCQUF1QixFQUFFLGNBQWM7YUFDeEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsZUFBSyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiO2dCQUNFLE9BQU8sRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVE7Z0JBQzNDLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsK0JBQW1CLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNyRyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2FBQzVCO1NBQ0YsQ0FBQztRQUVGLElBQUksZUFBSyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsRSxnREFBZ0Q7WUFDaEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2Q7Z0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtnQkFDbkMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JHLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7YUFDNUI7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBM01ELHdFQTJNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1aVRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUeERhdGEsIFdhbHJ1c1dpdGhkcmF3U3Rha2VQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBDYWxsQXJnLCBub3JtYWxpemVTdWlBZGRyZXNzIH0gZnJvbSAnLi9teXN0ZW5sYWIvdHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRlciwgSW5wdXRzLCBUcmFuc2FjdGlvbkJsb2NrSW5wdXQgfSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCB7IEFNT1VOVF9VTktOT1dOX1RFWFQsIFNVSV9BRERSRVNTX0xFTkdUSCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJDUyB9IGZyb20gJ0BteXN0ZW4vYmNzJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5cbmV4cG9ydCBjbGFzcyBXYWxydXNXaXRoZHJhd1N0YWtlVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbjxXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFdhbHJ1c1dpdGhkcmF3U3Rha2VQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgICB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IHN1aVNpZ25hdHVyZSgpOiBTaWduYXR1cmUge1xuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmU7XG4gIH1cblxuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQsXG4gICAgICBzZW5kZXI6IHR4LnNlbmRlcixcbiAgICAgIGtpbmQ6IHsgUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb246IHR4LnR4IH0sXG4gICAgICBnYXNEYXRhOiB0eC5nYXNEYXRhLFxuICAgICAgZXhwaXJhdGlvbjogeyBOb25lOiBudWxsIH0sXG4gICAgICBpbnB1dE9iamVjdHM6IFt1dGlscy5nZXRXYWxydXNXaXRoZHJhd1N0YWtlUmVxdWVzdHModHgudHgpLnN0YWtlZFdhbF0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFtcbiAgICAgICdpZCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgJ2ZlZScsXG4gICAgICAndHlwZScsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICdmdW5jdGlvbicsXG4gICAgICAndmFsaWRhdG9yQWRkcmVzcycsXG4gICAgXTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG5cbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogJzAnLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YS5idWRnZXQudG9TdHJpbmcoKSB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5SZXF1ZXN0V2l0aGRyYXdTdGFrZWRXYWxUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpbldpdGhkcmF3U3Rha2VkV2FsVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgZXhwbGFpblJlcXVlc3RXaXRoZHJhd1N0YWtlZFdhbFRyYW5zYWN0aW9uKFxuICAgIHJlc3VsdDogVHhEYXRhLFxuICAgIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgICBhbW91bnQ6IEFNT1VOVF9VTktOT1dOX1RFWFQsXG4gICAgICB9LFxuICAgIF07XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gQU1PVU5UX1VOS05PV05fVEVYVDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICBleHBsYWluV2l0aGRyYXdTdGFrZWRXYWxUcmFuc2FjdGlvbihcbiAgICByZXN1bHQ6IFR4RGF0YSxcbiAgICBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICApOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLnN1aVRyYW5zYWN0aW9uLnNlbmRlcixcbiAgICAgICAgYW1vdW50OiBBTU9VTlRfVU5LTk9XTl9URVhULFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IEFNT1VOVF9VTktOT1dOX1RFWFQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgb3V0cHV0cyxcbiAgICB9O1xuICB9XG5cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihcbiAgICAgICAgcmF3VHJhbnNhY3Rpb25cbiAgICAgICkgYXMgU3VpVHJhbnNhY3Rpb248V2FscnVzV2l0aGRyYXdTdGFrZVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPjtcbiAgICAgIHRoaXMuX3R5cGUgPSB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGUodGhpcy5fc3VpVHJhbnNhY3Rpb24udHlwZSk7XG4gICAgICB0aGlzLl9pZCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmlkO1xuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHhEYXRhKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dHM6IENhbGxBcmdbXSB8IFRyYW5zYWN0aW9uQmxvY2tJbnB1dFtdID0gdGhpcy5fc3VpVHJhbnNhY3Rpb24udHguaW5wdXRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkoJ09iamVjdCcpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnUHVyZScpKSB7XG4gICAgICAgIGlmIChpbnB1dC5QdXJlLmxlbmd0aCA9PT0gU1VJX0FERFJFU1NfTEVOR1RIKSB7XG4gICAgICAgICAgY29uc3QgYWRkcmVzcyA9IG5vcm1hbGl6ZVN1aUFkZHJlc3MoXG4gICAgICAgICAgICBidWlsZGVyLmRlKEJDUy5BRERSRVNTLCBCdWZmZXIuZnJvbShpbnB1dC5QdXJlKS50b1N0cmluZygnYmFzZTY0JyksICdiYXNlNjQnKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGFkZHJlc3MsIEJDUy5BRERSRVNTKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSBidWlsZGVyLmRlKEJDUy5VNjQsIEJ1ZmZlci5mcm9tKGlucHV0LlB1cmUpLnRvU3RyaW5nKCdiYXNlNjQnKSwgJ2Jhc2U2NCcpO1xuICAgICAgICAgIHJldHVybiBJbnB1dHMuUHVyZShhbW91bnQsIEJDUy5VNjQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQua2luZCA9PT0gJ0lucHV0JyAmJiAoaW5wdXQudmFsdWUuaGFzT3duUHJvcGVydHkoJ09iamVjdCcpIHx8IGlucHV0LnZhbHVlLmhhc093blByb3BlcnR5KCdQdXJlJykpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gd2hhdCdzIGxlZnQgaXMgdGhlIHB1cmUgbnVtYmVyIG9yIGFkZHJlc3Mgc3RyaW5nXG4gICAgICByZXR1cm4gSW5wdXRzLlB1cmUoaW5wdXQudmFsdWUsIGlucHV0LnR5cGUgPT09ICdwdXJlJyA/IEJDUy5VNjQgOiBCQ1MuQUREUkVTUyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeCA9IHtcbiAgICAgIGlucHV0czogaW5wdXRzLFxuICAgICAgdHJhbnNhY3Rpb25zOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi50eC50cmFuc2FjdGlvbnMsXG4gICAgfSBhcyBXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb247XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVyOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICBleHBpcmF0aW9uOiB7IE5vbmU6IG51bGwgfSxcbiAgICAgIGdhc0RhdGE6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmdhc0RhdGEsXG4gICAgICBraW5kOiB7XG4gICAgICAgIFByb2dyYW1tYWJsZVRyYW5zYWN0aW9uOiBwcm9ncmFtbWFibGVUeCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3aXRoZHJhd1JlcXVlc3QgPSB1dGlscy5nZXRXYWxydXNXaXRoZHJhd1N0YWtlUmVxdWVzdHModGhpcy5fc3VpVHJhbnNhY3Rpb24udHgpO1xuICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogd2l0aGRyYXdSZXF1ZXN0LnN0YWtlZFdhbC5vYmplY3RJZCxcbiAgICAgICAgdmFsdWU6IHdpdGhkcmF3UmVxdWVzdC5hbW91bnQgPT09IHVuZGVmaW5lZCA/IEFNT1VOVF9VTktOT1dOX1RFWFQgOiB3aXRoZHJhd1JlcXVlc3QuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmICh1dGlscy5pc1dhbHJ1c1JlcXVlc3RXaXRoZHJhd1N0YWtlVHgodGhpcy5fc3VpVHJhbnNhY3Rpb24udHgpKSB7XG4gICAgICAvLyByZXF1ZXN0IHdpdGhkcmF3IHN0YWtlIHNob3VsZCBoYXZlIG5vIG91dHB1dHNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLnN1aVRyYW5zYWN0aW9uLnNlbmRlcixcbiAgICAgICAgdmFsdWU6IHdpdGhkcmF3UmVxdWVzdC5hbW91bnQgPT09IHVuZGVmaW5lZCA/IEFNT1VOVF9VTktOT1dOX1RFWFQgOiB3aXRoZHJhd1JlcXVlc3QuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIl19

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


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