1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const client_common_1 = require("@neo-one/client-common");
|
4 | const AssetType_1 = require("../AssetType");
|
5 | const errors_1 = require("../errors");
|
6 | const utils_1 = require("../utils");
|
7 | const TransactionBase_1 = require("./TransactionBase");
|
8 | const TransactionType_1 = require("./TransactionType");
|
9 | class RegisterTransaction extends TransactionBase_1.TransactionBase(client_common_1.TransactionBaseModel) {
|
10 | constructor({ version, attributes, inputs, outputs, scripts, hash, asset }) {
|
11 | super({
|
12 | version,
|
13 | type: TransactionType_1.TransactionType.Register,
|
14 | attributes,
|
15 | inputs,
|
16 | outputs,
|
17 | scripts,
|
18 | hash,
|
19 | });
|
20 | this.sizeExclusive = utils_1.utils.lazy(() => client_common_1.IOHelper.sizeOfUInt8 +
|
21 | client_common_1.IOHelper.sizeOfUInt8 +
|
22 | client_common_1.IOHelper.sizeOfVarString(this.asset.name) +
|
23 | client_common_1.IOHelper.sizeOfFixed8 +
|
24 | client_common_1.IOHelper.sizeOfUInt8 +
|
25 | client_common_1.IOHelper.sizeOfECPoint(this.asset.owner) +
|
26 | client_common_1.IOHelper.sizeOfUInt160);
|
27 | this.asset = asset;
|
28 | if (this.version !== 0) {
|
29 | throw new client_common_1.InvalidFormatError(`Expected version to be 0. Received: ${this.version}`);
|
30 | }
|
31 | if (client_common_1.common.ecPointIsInfinity(asset.owner) &&
|
32 | asset.type !== AssetType_1.AssetType.GoverningToken &&
|
33 | asset.type !== AssetType_1.AssetType.UtilityToken) {
|
34 | throw new client_common_1.InvalidFormatError(`AssetType and asset owner are invalid`);
|
35 | }
|
36 | const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this);
|
37 | this.registerGetScriptHashesForVerifyingInternal = utils_1.utils.lazyAsync(async (options) => {
|
38 | const hashes = await getScriptHashesForVerifying(options);
|
39 | const scriptHash = client_common_1.common.uInt160ToHex(client_common_1.crypto.getVerificationScriptHash(this.asset.owner));
|
40 | return new Set([...hashes, scriptHash]);
|
41 | });
|
42 | }
|
43 | static deserializeWireBase(options) {
|
44 | const { reader } = options;
|
45 | const { type, version } = super.deserializeTransactionBaseStartWireBase(options);
|
46 | if (type !== TransactionType_1.TransactionType.Register) {
|
47 | throw new client_common_1.InvalidFormatError(`Expected transaction type ${TransactionType_1.TransactionType.Register}. Received: ${type}`);
|
48 | }
|
49 | const assetType = AssetType_1.assertAssetType(reader.readUInt8());
|
50 | const name = reader.readVarString(1024);
|
51 | const amount = reader.readFixed8();
|
52 | const precision = reader.readUInt8();
|
53 | const owner = reader.readECPoint();
|
54 | const admin = reader.readUInt160();
|
55 | const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options);
|
56 | return new this({
|
57 | version,
|
58 | attributes,
|
59 | inputs,
|
60 | outputs,
|
61 | scripts,
|
62 | asset: {
|
63 | type: assetType,
|
64 | name,
|
65 | amount,
|
66 | precision,
|
67 | owner,
|
68 | admin,
|
69 | },
|
70 | });
|
71 | }
|
72 | clone({ scripts = this.scripts, attributes = this.attributes, inputs = this.inputs, outputs = this.outputs, }) {
|
73 | return new this.constructor({
|
74 | version: this.version,
|
75 | attributes,
|
76 | inputs,
|
77 | outputs,
|
78 | scripts,
|
79 | hash: this.hash,
|
80 | asset: this.asset,
|
81 | });
|
82 | }
|
83 | serializeExclusiveBase(writer) {
|
84 | writer.writeUInt8(this.asset.type);
|
85 | writer.writeVarString(this.asset.name);
|
86 | writer.writeFixed8(this.asset.amount);
|
87 | writer.writeUInt8(this.asset.precision);
|
88 | writer.writeECPoint(this.asset.owner);
|
89 | writer.writeUInt160(this.asset.admin);
|
90 | }
|
91 | async serializeJSON(context) {
|
92 | const transactionBaseJSON = await super.serializeTransactionBaseJSON(context);
|
93 | let { name } = this.asset;
|
94 | try {
|
95 | name = JSON.parse(name);
|
96 | }
|
97 | catch (_a) {
|
98 | }
|
99 | return Object.assign({}, transactionBaseJSON, { type: 'RegisterTransaction', asset: {
|
100 | type: AssetType_1.toJSONAssetType(this.asset.type),
|
101 | name,
|
102 | amount: client_common_1.JSONHelper.writeFixed8(this.asset.amount),
|
103 | precision: this.asset.precision,
|
104 | owner: client_common_1.JSONHelper.writeECPoint(this.asset.owner),
|
105 | admin: client_common_1.crypto.scriptHashToAddress({
|
106 | addressVersion: context.addressVersion,
|
107 | scriptHash: this.asset.admin,
|
108 | }),
|
109 | } });
|
110 | }
|
111 | getSystemFee(context) {
|
112 | if (this.asset.type === AssetType_1.AssetType.GoverningToken || this.asset.type === AssetType_1.AssetType.UtilityToken) {
|
113 | return utils_1.utils.ZERO;
|
114 | }
|
115 | return super.getSystemFee(context);
|
116 | }
|
117 | async getScriptHashesForVerifying(options) {
|
118 | return this.registerGetScriptHashesForVerifyingInternal(options);
|
119 | }
|
120 | async verify(_options) {
|
121 | throw new errors_1.VerifyError('Register transactions are obsolete');
|
122 | }
|
123 | }
|
124 | exports.RegisterTransaction = RegisterTransaction;
|
125 |
|
126 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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LENBQUMsbUJBQW1CLENBQUM7b0JBQ2hDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDdEMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztpQkFDN0IsQ0FBQzthQUNILElBQ0Q7SUFDSixDQUFDO0lBRU0sWUFBWSxDQUFDLE9BQW1CO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUsscUJBQVMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUsscUJBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDOUYsT0FBTyxhQUFLLENBQUMsSUFBSSxDQUFDO1NBQ25CO1FBRUQsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQ3RDLE9BQXNEO1FBRXRELE9BQU8sSUFBSSxDQUFDLDJDQUEyQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWtDO1FBQ3BELE1BQU0sSUFBSSxvQkFBVyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUNGO0FBeEtELGtEQXdLQyIsImZpbGUiOiJuZW8tb25lLW5vZGUtY29yZS9zcmMvdHJhbnNhY3Rpb24vUmVnaXN0ZXJUcmFuc2FjdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJpbmFyeVdyaXRlcixcbiAgY29tbW9uLFxuICBjcnlwdG8sXG4gIEVDUG9pbnQsXG4gIEludmFsaWRGb3JtYXRFcnJvcixcbiAgSU9IZWxwZXIsXG4gIEpTT05IZWxwZXIsXG4gIFJlZ2lzdGVyVHJhbnNhY3Rpb25KU09OLFxuICBUcmFuc2FjdGlvbkJhc2VNb2RlbCxcbiAgVUludDE2MCxcbiAgVUludDE2MEhleCxcbn0gZnJvbSAnQG5lby1vbmUvY2xpZW50LWNvbW1vbic7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gJ0BuZW8tb25lL3V0aWxzJztcbmltcG9ydCB7IEJOIH0gZnJvbSAnYm4uanMnO1xuaW1wb3J0IHsgYXNzZXJ0QXNzZXRUeXBlLCBBc3NldFR5cGUsIHRvSlNPTkFzc2V0VHlwZSB9IGZyb20gJy4uL0Fzc2V0VHlwZSc7XG5pbXBvcnQgeyBWZXJpZnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucywgU2VyaWFsaXplSlNPTkNvbnRleHQgfSBmcm9tICcuLi9TZXJpYWxpemFibGUnO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBWZXJpZnlTY3JpcHRSZXN1bHQgfSBmcm9tICcuLi92bSc7XG5pbXBvcnQgeyBXaXRuZXNzIH0gZnJvbSAnLi4vV2l0bmVzcyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tICcuL2F0dHJpYnV0ZSc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnLi9PdXRwdXQnO1xuaW1wb3J0IHtcbiAgRmVlQ29udGV4dCxcbiAgVHJhbnNhY3Rpb25CYXNlLFxuICBUcmFuc2FjdGlvbkJhc2VBZGQsXG4gIFRyYW5zYWN0aW9uR2V0U2NyaXB0SGFzaGVzRm9yVmVyaWZ5aW5nT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25WZXJpZnlPcHRpb25zLFxufSBmcm9tICcuL1RyYW5zYWN0aW9uQmFzZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuL1RyYW5zYWN0aW9uVHlwZSc7XG5cbmludGVyZmFjZSBBc3NldCB7XG4gIHJlYWRvbmx5IHR5cGU6IEFzc2V0VHlwZTtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhbW91bnQ6IEJOO1xuICByZWFkb25seSBwcmVjaXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgb3duZXI6IEVDUG9pbnQ7XG4gIHJlYWRvbmx5IGFkbWluOiBVSW50MTYwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyVHJhbnNhY3Rpb25BZGQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJhc2VBZGQge1xuICByZWFkb25seSBhc3NldDogQXNzZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RlclRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb25CYXNlPFxuICBUcmFuc2FjdGlvblR5cGUuUmVnaXN0ZXIsXG4gIFJlZ2lzdGVyVHJhbnNhY3Rpb25KU09OLFxuICBDb25zdHJ1Y3RvcjxUcmFuc2FjdGlvbkJhc2VNb2RlbDxUcmFuc2FjdGlvblR5cGUuUmVnaXN0ZXIsIEF0dHJpYnV0ZSwgSW5wdXQsIE91dHB1dCwgV2l0bmVzcz4+XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbj4oVHJhbnNhY3Rpb25CYXNlTW9kZWwgYXMgYW55KSB7XG4gIHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemVXaXJlQmFzZShvcHRpb25zOiBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucyk6IFJlZ2lzdGVyVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHsgcmVhZGVyIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgeyB0eXBlLCB2ZXJzaW9uIH0gPSBzdXBlci5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZVN0YXJ0V2lyZUJhc2Uob3B0aW9ucyk7XG5cbiAgICBpZiAodHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlJlZ2lzdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEZvcm1hdEVycm9yKGBFeHBlY3RlZCB0cmFuc2FjdGlvbiB0eXBlICR7VHJhbnNhY3Rpb25UeXBlLlJlZ2lzdGVyfS4gUmVjZWl2ZWQ6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldFR5cGUgPSBhc3NlcnRBc3NldFR5cGUocmVhZGVyLnJlYWRVSW50OCgpKTtcbiAgICBjb25zdCBuYW1lID0gcmVhZGVyLnJlYWRWYXJTdHJpbmcoMTAyNCk7XG4gICAgY29uc3QgYW1vdW50ID0gcmVhZGVyLnJlYWRGaXhlZDgoKTtcbiAgICBjb25zdCBwcmVjaXNpb24gPSByZWFkZXIucmVhZFVJbnQ4KCk7XG4gICAgY29uc3Qgb3duZXIgPSByZWFkZXIucmVhZEVDUG9pbnQoKTtcbiAgICBjb25zdCBhZG1pbiA9IHJlYWRlci5yZWFkVUludDE2MCgpO1xuXG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBpbnB1dHMsIG91dHB1dHMsIHNjcmlwdHMgfSA9IHN1cGVyLmRlc2VyaWFsaXplVHJhbnNhY3Rpb25CYXNlRW5kV2lyZUJhc2Uob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgdmVyc2lvbixcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBpbnB1dHMsXG4gICAgICBvdXRwdXRzLFxuICAgICAgc2NyaXB0cyxcbiAgICAgIGFzc2V0OiB7XG4gICAgICAgIHR5cGU6IGFzc2V0VHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgIG93bmVyLFxuICAgICAgICBhZG1pbixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYXNzZXQ6IEFzc2V0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2l6ZUV4Y2x1c2l2ZTogKCkgPT4gbnVtYmVyID0gdXRpbHMubGF6eShcbiAgICAoKSA9PlxuICAgICAgSU9IZWxwZXIuc2l6ZU9mVUludDggK1xuICAgICAgSU9IZWxwZXIuc2l6ZU9mVUludDggK1xuICAgICAgSU9IZWxwZXIuc2l6ZU9mVmFyU3RyaW5nKHRoaXMuYXNzZXQubmFtZSkgK1xuICAgICAgSU9IZWxwZXIuc2l6ZU9mRml4ZWQ4ICtcbiAgICAgIElPSGVscGVyLnNpemVPZlVJbnQ4ICtcbiAgICAgIElPSGVscGVyLnNpemVPZkVDUG9pbnQodGhpcy5hc3NldC5vd25lcikgK1xuICAgICAgSU9IZWxwZXIuc2l6ZU9mVUludDE2MCxcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RlckdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZ0ludGVybmFsOiAoXG4gICAgb3B0aW9uczogVHJhbnNhY3Rpb25HZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmdPcHRpb25zLFxuICApID0+IFByb21pc2U8U2V0PFVJbnQxNjBIZXg+PjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyB2ZXJzaW9uLCBhdHRyaWJ1dGVzLCBpbnB1dHMsIG91dHB1dHMsIHNjcmlwdHMsIGhhc2gsIGFzc2V0IH06IFJlZ2lzdGVyVHJhbnNhY3Rpb25BZGQpIHtcbiAgICBzdXBlcih7XG4gICAgICB2ZXJzaW9uLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlJlZ2lzdGVyLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgaGFzaCxcbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXQgPSBhc3NldDtcblxuICAgIGlmICh0aGlzLnZlcnNpb24gIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRm9ybWF0RXJyb3IoYEV4cGVjdGVkIHZlcnNpb24gdG8gYmUgMC4gUmVjZWl2ZWQ6ICR7dGhpcy52ZXJzaW9ufWApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNvbW1vbi5lY1BvaW50SXNJbmZpbml0eShhc3NldC5vd25lcikgJiZcbiAgICAgIGFzc2V0LnR5cGUgIT09IEFzc2V0VHlwZS5Hb3Zlcm5pbmdUb2tlbiAmJlxuICAgICAgYXNzZXQudHlwZSAhPT0gQXNzZXRUeXBlLlV0aWxpdHlUb2tlblxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRGb3JtYXRFcnJvcihgQXNzZXRUeXBlIGFuZCBhc3NldCBvd25lciBhcmUgaW52YWxpZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZyA9IHN1cGVyLmdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJHZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmdJbnRlcm5hbCA9IHV0aWxzLmxhenlBc3luYyhcbiAgICAgIGFzeW5jIChvcHRpb25zOiBUcmFuc2FjdGlvbkdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZ09wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaGVzID0gYXdhaXQgZ2V0U2NyaXB0SGFzaGVzRm9yVmVyaWZ5aW5nKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzY3JpcHRIYXNoID0gY29tbW9uLnVJbnQxNjBUb0hleChjcnlwdG8uZ2V0VmVyaWZpY2F0aW9uU2NyaXB0SGFzaCh0aGlzLmFzc2V0Lm93bmVyKSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTZXQoWy4uLmhhc2hlcywgc2NyaXB0SGFzaF0pO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsb25lKHtcbiAgICBzY3JpcHRzID0gdGhpcy5zY3JpcHRzLFxuICAgIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgaW5wdXRzID0gdGhpcy5pbnB1dHMsXG4gICAgb3V0cHV0cyA9IHRoaXMub3V0cHV0cyxcbiAgfToge1xuICAgIHJlYWRvbmx5IHNjcmlwdHM/OiByZWFkb25seSBXaXRuZXNzW107XG4gICAgcmVhZG9ubHkgYXR0cmlidXRlcz86IHJlYWRvbmx5IEF0dHJpYnV0ZVtdO1xuICAgIHJlYWRvbmx5IGlucHV0cz86IHJlYWRvbmx5IElucHV0W107XG4gICAgcmVhZG9ubHkgb3V0cHV0cz86IHJlYWRvbmx5IE91dHB1dFtdO1xuICB9KTogdGhpcyB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICAgIHJldHVybiBuZXcgKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KSh7XG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgaW5wdXRzLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIHNjcmlwdHMsXG4gICAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgICBhc3NldDogdGhpcy5hc3NldCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXJpYWxpemVFeGNsdXNpdmVCYXNlKHdyaXRlcjogQmluYXJ5V3JpdGVyKTogdm9pZCB7XG4gICAgd3JpdGVyLndyaXRlVUludDgodGhpcy5hc3NldC50eXBlKTtcbiAgICB3cml0ZXIud3JpdGVWYXJTdHJpbmcodGhpcy5hc3NldC5uYW1lKTtcbiAgICB3cml0ZXIud3JpdGVGaXhlZDgodGhpcy5hc3NldC5hbW91bnQpO1xuICAgIHdyaXRlci53cml0ZVVJbnQ4KHRoaXMuYXNzZXQucHJlY2lzaW9uKTtcbiAgICB3cml0ZXIud3JpdGVFQ1BvaW50KHRoaXMuYXNzZXQub3duZXIpO1xuICAgIHdyaXRlci53cml0ZVVJbnQxNjAodGhpcy5hc3NldC5hZG1pbik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2VyaWFsaXplSlNPTihjb250ZXh0OiBTZXJpYWxpemVKU09OQ29udGV4dCk6IFByb21pc2U8UmVnaXN0ZXJUcmFuc2FjdGlvbkpTT04+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkJhc2VKU09OID0gYXdhaXQgc3VwZXIuc2VyaWFsaXplVHJhbnNhY3Rpb25CYXNlSlNPTihjb250ZXh0KTtcblxuICAgIGxldCB7IG5hbWUgfSA9IHRoaXMuYXNzZXQ7XG4gICAgdHJ5IHtcbiAgICAgIG5hbWUgPSBKU09OLnBhcnNlKG5hbWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGVycm9yc1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50cmFuc2FjdGlvbkJhc2VKU09OLFxuICAgICAgdHlwZTogJ1JlZ2lzdGVyVHJhbnNhY3Rpb24nLFxuICAgICAgYXNzZXQ6IHtcbiAgICAgICAgdHlwZTogdG9KU09OQXNzZXRUeXBlKHRoaXMuYXNzZXQudHlwZSksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFtb3VudDogSlNPTkhlbHBlci53cml0ZUZpeGVkOCh0aGlzLmFzc2V0LmFtb3VudCksXG4gICAgICAgIHByZWNpc2lvbjogdGhpcy5hc3NldC5wcmVjaXNpb24sXG4gICAgICAgIG93bmVyOiBKU09OSGVscGVyLndyaXRlRUNQb2ludCh0aGlzLmFzc2V0Lm93bmVyKSxcbiAgICAgICAgYWRtaW46IGNyeXB0by5zY3JpcHRIYXNoVG9BZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzVmVyc2lvbjogY29udGV4dC5hZGRyZXNzVmVyc2lvbixcbiAgICAgICAgICBzY3JpcHRIYXNoOiB0aGlzLmFzc2V0LmFkbWluLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTeXN0ZW1GZWUoY29udGV4dDogRmVlQ29udGV4dCk6IEJOIHtcbiAgICBpZiAodGhpcy5hc3NldC50eXBlID09PSBBc3NldFR5cGUuR292ZXJuaW5nVG9rZW4gfHwgdGhpcy5hc3NldC50eXBlID09PSBBc3NldFR5cGUuVXRpbGl0eVRva2VuKSB7XG4gICAgICByZXR1cm4gdXRpbHMuWkVSTztcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZ2V0U3lzdGVtRmVlKGNvbnRleHQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZyhcbiAgICBvcHRpb25zOiBUcmFuc2FjdGlvbkdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZ09wdGlvbnMsXG4gICk6IFByb21pc2U8U2V0PFVJbnQxNjBIZXg+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJHZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmdJbnRlcm5hbChvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkoX29wdGlvbnM6IFRyYW5zYWN0aW9uVmVyaWZ5T3B0aW9ucyk6IFByb21pc2U8cmVhZG9ubHkgVmVyaWZ5U2NyaXB0UmVzdWx0W10+IHtcbiAgICB0aHJvdyBuZXcgVmVyaWZ5RXJyb3IoJ1JlZ2lzdGVyIHRyYW5zYWN0aW9ucyBhcmUgb2Jzb2xldGUnKTtcbiAgfVxufVxuIl19
|