@buildonspark/spark-sdk 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/bare/index.cjs +1608 -3635
- package/dist/bare/index.d.cts +27 -435
- package/dist/bare/index.d.ts +27 -435
- package/dist/bare/index.js +1608 -3634
- package/dist/{chunk-RU434ZAE.js → chunk-F3BFSHVR.js} +357 -391
- package/dist/{chunk-UYEB2VPG.js → chunk-IOIEBLMK.js} +7 -1
- package/dist/{chunk-EU3I7GFB.js → chunk-STB6WMU7.js} +1 -1
- package/dist/{chunk-JE3MXMPW.js → chunk-UTECVGQQ.js} +93 -202
- package/dist/{chunk-ZP6Z6DFX.js → chunk-YFVVYZCS.js} +37 -5
- package/dist/{client-D1dLzWu0.d.ts → client-C9kc4cog.d.cts} +9 -3
- package/dist/{client-CVn0R_eM.d.cts → client-eyjf4knu.d.ts} +9 -3
- package/dist/graphql/objects/index.cjs +7 -1
- package/dist/graphql/objects/index.d.cts +3 -3
- package/dist/graphql/objects/index.d.ts +3 -3
- package/dist/graphql/objects/index.js +1 -1
- package/dist/index.browser.d.ts +27 -435
- package/dist/index.browser.js +1613 -3639
- package/dist/index.node.cjs +1613 -3640
- package/dist/index.node.d.cts +7 -8
- package/dist/index.node.d.ts +7 -8
- package/dist/index.node.js +5 -7
- package/dist/native/index.react-native.cjs +1613 -3640
- package/dist/native/index.react-native.d.cts +27 -435
- package/dist/native/index.react-native.d.ts +27 -435
- package/dist/native/index.react-native.js +1613 -3639
- package/dist/proto/spark.cjs +93 -202
- package/dist/proto/spark.d.cts +1 -1
- package/dist/proto/spark.d.ts +1 -1
- package/dist/proto/spark.js +1 -1
- package/dist/proto/spark_token.cjs +36 -4
- package/dist/proto/spark_token.d.cts +4 -1
- package/dist/proto/spark_token.d.ts +4 -1
- package/dist/proto/spark_token.js +2 -2
- package/dist/{spark-2Fxnvl8K.d.cts → spark-d6w3BLGZ.d.cts} +10 -328
- package/dist/{spark-2Fxnvl8K.d.ts → spark-d6w3BLGZ.d.ts} +10 -328
- package/dist/{spark-wallet.node-DlhZiDgY.d.ts → spark-wallet.node-MReThHBY.d.ts} +6 -7
- package/dist/{spark-wallet.node-xKJXzAEd.d.cts → spark-wallet.node-eR0svGws.d.cts} +6 -7
- package/dist/tests/test-utils.cjs +409 -2429
- package/dist/tests/test-utils.d.cts +3 -3
- package/dist/tests/test-utils.d.ts +3 -3
- package/dist/tests/test-utils.js +5 -5
- package/dist/types/index.cjs +100 -203
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +3 -3
- package/package.json +3 -3
- package/src/graphql/client.ts +36 -1
- package/src/graphql/objects/LightningSendRequestStatus.ts +25 -13
- package/src/proto/common.ts +1 -1
- package/src/proto/google/protobuf/descriptor.ts +1 -1
- package/src/proto/google/protobuf/duration.ts +1 -1
- package/src/proto/google/protobuf/empty.ts +1 -1
- package/src/proto/google/protobuf/timestamp.ts +1 -1
- package/src/proto/mock.ts +1 -1
- package/src/proto/spark.ts +113 -446
- package/src/proto/spark_authn.ts +1 -1
- package/src/proto/spark_token.ts +41 -2
- package/src/proto/validate/validate.ts +1 -1
- package/src/services/connection/connection.ts +23 -60
- package/src/services/coop-exit.ts +3 -5
- package/src/services/deposit.ts +1 -1
- package/src/services/lightning.ts +1 -1
- package/src/services/signing.ts +5 -6
- package/src/services/transfer.ts +250 -240
- package/src/services/wallet-config.ts +22 -5
- package/src/spark-wallet/proto-descriptors.ts +1 -1
- package/src/spark-wallet/proto-reflection.ts +0 -2
- package/src/spark-wallet/spark-wallet.ts +2 -2
- package/src/spark_descriptors.pb +0 -0
- package/src/tests/bufbuild-reflection.test.ts +2 -3
- package/src/tests/integration/coop-exit.test.ts +6 -1
- package/src/tests/integration/htlc.test.ts +5 -0
- package/src/tests/integration/lightning.test.ts +24 -4
- package/src/tests/integration/time-sync.test.ts +18 -0
- package/src/tests/integration/transfer.test.ts +42 -7
- package/src/tests/ssp-client-retry.test.ts +161 -0
- package/src/tests/token-hashing.test.ts +92 -0
- package/src/utils/token-hashing.ts +4 -51
- package/src/utils/transaction.ts +1 -2
- package/src/utils/unilateral-exit.ts +139 -142
|
@@ -73,7 +73,7 @@ var isWebExtension = (
|
|
|
73
73
|
);
|
|
74
74
|
var isWebExtensionContentScript = isWebExtension && "window" in globalThis;
|
|
75
75
|
var userAgent = "navigator" in globalThis ? parseUserAgent(globalThis.navigator.userAgent) || "unknown-user-agent" : void 0;
|
|
76
|
-
var packageVersion = true ? "0.5.
|
|
76
|
+
var packageVersion = true ? "0.5.1" : "unknown";
|
|
77
77
|
var baseEnvStr = "unknown";
|
|
78
78
|
if (isBun) {
|
|
79
79
|
const bunVersion = "version" in globalThis.Bun ? globalThis.Bun.version : "unknown-version";
|
|
@@ -802,6 +802,9 @@ function preimageRequestRoleFromJSON(object) {
|
|
|
802
802
|
case 1:
|
|
803
803
|
case "PREIMAGE_REQUEST_ROLE_SENDER":
|
|
804
804
|
return 1 /* PREIMAGE_REQUEST_ROLE_SENDER */;
|
|
805
|
+
case 2:
|
|
806
|
+
case "PREIMAGE_REQUEST_ROLE_RECEIVER_AND_SENDER":
|
|
807
|
+
return 2 /* PREIMAGE_REQUEST_ROLE_RECEIVER_AND_SENDER */;
|
|
805
808
|
case -1:
|
|
806
809
|
case "UNRECOGNIZED":
|
|
807
810
|
default:
|
|
@@ -814,36 +817,8 @@ function preimageRequestRoleToJSON(object) {
|
|
|
814
817
|
return "PREIMAGE_REQUEST_ROLE_RECEIVER";
|
|
815
818
|
case 1 /* PREIMAGE_REQUEST_ROLE_SENDER */:
|
|
816
819
|
return "PREIMAGE_REQUEST_ROLE_SENDER";
|
|
817
|
-
case
|
|
818
|
-
|
|
819
|
-
return "UNRECOGNIZED";
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
function utxoSwapRequestTypeFromJSON(object) {
|
|
823
|
-
switch (object) {
|
|
824
|
-
case 0:
|
|
825
|
-
case "Fixed":
|
|
826
|
-
return 0 /* Fixed */;
|
|
827
|
-
case 1:
|
|
828
|
-
case "MaxFee":
|
|
829
|
-
return 1 /* MaxFee */;
|
|
830
|
-
case 2:
|
|
831
|
-
case "Refund":
|
|
832
|
-
return 2 /* Refund */;
|
|
833
|
-
case -1:
|
|
834
|
-
case "UNRECOGNIZED":
|
|
835
|
-
default:
|
|
836
|
-
return -1 /* UNRECOGNIZED */;
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
function utxoSwapRequestTypeToJSON(object) {
|
|
840
|
-
switch (object) {
|
|
841
|
-
case 0 /* Fixed */:
|
|
842
|
-
return "Fixed";
|
|
843
|
-
case 1 /* MaxFee */:
|
|
844
|
-
return "MaxFee";
|
|
845
|
-
case 2 /* Refund */:
|
|
846
|
-
return "Refund";
|
|
820
|
+
case 2 /* PREIMAGE_REQUEST_ROLE_RECEIVER_AND_SENDER */:
|
|
821
|
+
return "PREIMAGE_REQUEST_ROLE_RECEIVER_AND_SENDER";
|
|
847
822
|
case -1 /* UNRECOGNIZED */:
|
|
848
823
|
default:
|
|
849
824
|
return "UNRECOGNIZED";
|
|
@@ -916,6 +891,9 @@ function treeNodeStatusFromJSON(object) {
|
|
|
916
891
|
case 9:
|
|
917
892
|
case "TREE_NODE_STATUS_EXITED":
|
|
918
893
|
return 9 /* TREE_NODE_STATUS_EXITED */;
|
|
894
|
+
case 10:
|
|
895
|
+
case "TREE_NODE_STATUS_RENEW_LOCKED":
|
|
896
|
+
return 10 /* TREE_NODE_STATUS_RENEW_LOCKED */;
|
|
919
897
|
case -1:
|
|
920
898
|
case "UNRECOGNIZED":
|
|
921
899
|
default:
|
|
@@ -944,6 +922,8 @@ function treeNodeStatusToJSON(object) {
|
|
|
944
922
|
return "TREE_NODE_STATUS_AGGREGATE_LOCK";
|
|
945
923
|
case 9 /* TREE_NODE_STATUS_EXITED */:
|
|
946
924
|
return "TREE_NODE_STATUS_EXITED";
|
|
925
|
+
case 10 /* TREE_NODE_STATUS_RENEW_LOCKED */:
|
|
926
|
+
return "TREE_NODE_STATUS_RENEW_LOCKED";
|
|
947
927
|
case -1 /* UNRECOGNIZED */:
|
|
948
928
|
default:
|
|
949
929
|
return "UNRECOGNIZED";
|
|
@@ -3884,225 +3864,6 @@ var NodeSignatures = {
|
|
|
3884
3864
|
return message;
|
|
3885
3865
|
}
|
|
3886
3866
|
};
|
|
3887
|
-
function createBaseStartTreeCreationRequest() {
|
|
3888
|
-
return {
|
|
3889
|
-
identityPublicKey: new Uint8Array(0),
|
|
3890
|
-
onChainUtxo: void 0,
|
|
3891
|
-
rootTxSigningJob: void 0,
|
|
3892
|
-
refundTxSigningJob: void 0,
|
|
3893
|
-
directRootTxSigningJob: void 0,
|
|
3894
|
-
directRefundTxSigningJob: void 0,
|
|
3895
|
-
directFromCpfpRefundTxSigningJob: void 0
|
|
3896
|
-
};
|
|
3897
|
-
}
|
|
3898
|
-
var StartTreeCreationRequest = {
|
|
3899
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
3900
|
-
if (message.identityPublicKey.length !== 0) {
|
|
3901
|
-
writer.uint32(10).bytes(message.identityPublicKey);
|
|
3902
|
-
}
|
|
3903
|
-
if (message.onChainUtxo !== void 0) {
|
|
3904
|
-
UTXO.encode(message.onChainUtxo, writer.uint32(18).fork()).join();
|
|
3905
|
-
}
|
|
3906
|
-
if (message.rootTxSigningJob !== void 0) {
|
|
3907
|
-
SigningJob.encode(message.rootTxSigningJob, writer.uint32(26).fork()).join();
|
|
3908
|
-
}
|
|
3909
|
-
if (message.refundTxSigningJob !== void 0) {
|
|
3910
|
-
SigningJob.encode(message.refundTxSigningJob, writer.uint32(34).fork()).join();
|
|
3911
|
-
}
|
|
3912
|
-
if (message.directRootTxSigningJob !== void 0) {
|
|
3913
|
-
SigningJob.encode(message.directRootTxSigningJob, writer.uint32(42).fork()).join();
|
|
3914
|
-
}
|
|
3915
|
-
if (message.directRefundTxSigningJob !== void 0) {
|
|
3916
|
-
SigningJob.encode(message.directRefundTxSigningJob, writer.uint32(50).fork()).join();
|
|
3917
|
-
}
|
|
3918
|
-
if (message.directFromCpfpRefundTxSigningJob !== void 0) {
|
|
3919
|
-
SigningJob.encode(message.directFromCpfpRefundTxSigningJob, writer.uint32(58).fork()).join();
|
|
3920
|
-
}
|
|
3921
|
-
return writer;
|
|
3922
|
-
},
|
|
3923
|
-
decode(input, length) {
|
|
3924
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
3925
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
3926
|
-
const message = createBaseStartTreeCreationRequest();
|
|
3927
|
-
while (reader.pos < end) {
|
|
3928
|
-
const tag = reader.uint32();
|
|
3929
|
-
switch (tag >>> 3) {
|
|
3930
|
-
case 1: {
|
|
3931
|
-
if (tag !== 10) {
|
|
3932
|
-
break;
|
|
3933
|
-
}
|
|
3934
|
-
message.identityPublicKey = reader.bytes();
|
|
3935
|
-
continue;
|
|
3936
|
-
}
|
|
3937
|
-
case 2: {
|
|
3938
|
-
if (tag !== 18) {
|
|
3939
|
-
break;
|
|
3940
|
-
}
|
|
3941
|
-
message.onChainUtxo = UTXO.decode(reader, reader.uint32());
|
|
3942
|
-
continue;
|
|
3943
|
-
}
|
|
3944
|
-
case 3: {
|
|
3945
|
-
if (tag !== 26) {
|
|
3946
|
-
break;
|
|
3947
|
-
}
|
|
3948
|
-
message.rootTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
3949
|
-
continue;
|
|
3950
|
-
}
|
|
3951
|
-
case 4: {
|
|
3952
|
-
if (tag !== 34) {
|
|
3953
|
-
break;
|
|
3954
|
-
}
|
|
3955
|
-
message.refundTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
3956
|
-
continue;
|
|
3957
|
-
}
|
|
3958
|
-
case 5: {
|
|
3959
|
-
if (tag !== 42) {
|
|
3960
|
-
break;
|
|
3961
|
-
}
|
|
3962
|
-
message.directRootTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
3963
|
-
continue;
|
|
3964
|
-
}
|
|
3965
|
-
case 6: {
|
|
3966
|
-
if (tag !== 50) {
|
|
3967
|
-
break;
|
|
3968
|
-
}
|
|
3969
|
-
message.directRefundTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
3970
|
-
continue;
|
|
3971
|
-
}
|
|
3972
|
-
case 7: {
|
|
3973
|
-
if (tag !== 58) {
|
|
3974
|
-
break;
|
|
3975
|
-
}
|
|
3976
|
-
message.directFromCpfpRefundTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
3977
|
-
continue;
|
|
3978
|
-
}
|
|
3979
|
-
}
|
|
3980
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3981
|
-
break;
|
|
3982
|
-
}
|
|
3983
|
-
reader.skip(tag & 7);
|
|
3984
|
-
}
|
|
3985
|
-
return message;
|
|
3986
|
-
},
|
|
3987
|
-
fromJSON(object) {
|
|
3988
|
-
return {
|
|
3989
|
-
identityPublicKey: isSet3(object.identityPublicKey) ? bytesFromBase642(object.identityPublicKey) : new Uint8Array(0),
|
|
3990
|
-
onChainUtxo: isSet3(object.onChainUtxo) ? UTXO.fromJSON(object.onChainUtxo) : void 0,
|
|
3991
|
-
rootTxSigningJob: isSet3(object.rootTxSigningJob) ? SigningJob.fromJSON(object.rootTxSigningJob) : void 0,
|
|
3992
|
-
refundTxSigningJob: isSet3(object.refundTxSigningJob) ? SigningJob.fromJSON(object.refundTxSigningJob) : void 0,
|
|
3993
|
-
directRootTxSigningJob: isSet3(object.directRootTxSigningJob) ? SigningJob.fromJSON(object.directRootTxSigningJob) : void 0,
|
|
3994
|
-
directRefundTxSigningJob: isSet3(object.directRefundTxSigningJob) ? SigningJob.fromJSON(object.directRefundTxSigningJob) : void 0,
|
|
3995
|
-
directFromCpfpRefundTxSigningJob: isSet3(object.directFromCpfpRefundTxSigningJob) ? SigningJob.fromJSON(object.directFromCpfpRefundTxSigningJob) : void 0
|
|
3996
|
-
};
|
|
3997
|
-
},
|
|
3998
|
-
toJSON(message) {
|
|
3999
|
-
const obj = {};
|
|
4000
|
-
if (message.identityPublicKey.length !== 0) {
|
|
4001
|
-
obj.identityPublicKey = base64FromBytes2(message.identityPublicKey);
|
|
4002
|
-
}
|
|
4003
|
-
if (message.onChainUtxo !== void 0) {
|
|
4004
|
-
obj.onChainUtxo = UTXO.toJSON(message.onChainUtxo);
|
|
4005
|
-
}
|
|
4006
|
-
if (message.rootTxSigningJob !== void 0) {
|
|
4007
|
-
obj.rootTxSigningJob = SigningJob.toJSON(message.rootTxSigningJob);
|
|
4008
|
-
}
|
|
4009
|
-
if (message.refundTxSigningJob !== void 0) {
|
|
4010
|
-
obj.refundTxSigningJob = SigningJob.toJSON(message.refundTxSigningJob);
|
|
4011
|
-
}
|
|
4012
|
-
if (message.directRootTxSigningJob !== void 0) {
|
|
4013
|
-
obj.directRootTxSigningJob = SigningJob.toJSON(message.directRootTxSigningJob);
|
|
4014
|
-
}
|
|
4015
|
-
if (message.directRefundTxSigningJob !== void 0) {
|
|
4016
|
-
obj.directRefundTxSigningJob = SigningJob.toJSON(message.directRefundTxSigningJob);
|
|
4017
|
-
}
|
|
4018
|
-
if (message.directFromCpfpRefundTxSigningJob !== void 0) {
|
|
4019
|
-
obj.directFromCpfpRefundTxSigningJob = SigningJob.toJSON(message.directFromCpfpRefundTxSigningJob);
|
|
4020
|
-
}
|
|
4021
|
-
return obj;
|
|
4022
|
-
},
|
|
4023
|
-
create(base) {
|
|
4024
|
-
return StartTreeCreationRequest.fromPartial(base ?? {});
|
|
4025
|
-
},
|
|
4026
|
-
fromPartial(object) {
|
|
4027
|
-
const message = createBaseStartTreeCreationRequest();
|
|
4028
|
-
message.identityPublicKey = object.identityPublicKey ?? new Uint8Array(0);
|
|
4029
|
-
message.onChainUtxo = object.onChainUtxo !== void 0 && object.onChainUtxo !== null ? UTXO.fromPartial(object.onChainUtxo) : void 0;
|
|
4030
|
-
message.rootTxSigningJob = object.rootTxSigningJob !== void 0 && object.rootTxSigningJob !== null ? SigningJob.fromPartial(object.rootTxSigningJob) : void 0;
|
|
4031
|
-
message.refundTxSigningJob = object.refundTxSigningJob !== void 0 && object.refundTxSigningJob !== null ? SigningJob.fromPartial(object.refundTxSigningJob) : void 0;
|
|
4032
|
-
message.directRootTxSigningJob = object.directRootTxSigningJob !== void 0 && object.directRootTxSigningJob !== null ? SigningJob.fromPartial(object.directRootTxSigningJob) : void 0;
|
|
4033
|
-
message.directRefundTxSigningJob = object.directRefundTxSigningJob !== void 0 && object.directRefundTxSigningJob !== null ? SigningJob.fromPartial(object.directRefundTxSigningJob) : void 0;
|
|
4034
|
-
message.directFromCpfpRefundTxSigningJob = object.directFromCpfpRefundTxSigningJob !== void 0 && object.directFromCpfpRefundTxSigningJob !== null ? SigningJob.fromPartial(object.directFromCpfpRefundTxSigningJob) : void 0;
|
|
4035
|
-
return message;
|
|
4036
|
-
}
|
|
4037
|
-
};
|
|
4038
|
-
function createBaseStartTreeCreationResponse() {
|
|
4039
|
-
return { treeId: "", rootNodeSignatureShares: void 0 };
|
|
4040
|
-
}
|
|
4041
|
-
var StartTreeCreationResponse = {
|
|
4042
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
4043
|
-
if (message.treeId !== "") {
|
|
4044
|
-
writer.uint32(10).string(message.treeId);
|
|
4045
|
-
}
|
|
4046
|
-
if (message.rootNodeSignatureShares !== void 0) {
|
|
4047
|
-
NodeSignatureShares.encode(message.rootNodeSignatureShares, writer.uint32(18).fork()).join();
|
|
4048
|
-
}
|
|
4049
|
-
return writer;
|
|
4050
|
-
},
|
|
4051
|
-
decode(input, length) {
|
|
4052
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
4053
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
4054
|
-
const message = createBaseStartTreeCreationResponse();
|
|
4055
|
-
while (reader.pos < end) {
|
|
4056
|
-
const tag = reader.uint32();
|
|
4057
|
-
switch (tag >>> 3) {
|
|
4058
|
-
case 1: {
|
|
4059
|
-
if (tag !== 10) {
|
|
4060
|
-
break;
|
|
4061
|
-
}
|
|
4062
|
-
message.treeId = reader.string();
|
|
4063
|
-
continue;
|
|
4064
|
-
}
|
|
4065
|
-
case 2: {
|
|
4066
|
-
if (tag !== 18) {
|
|
4067
|
-
break;
|
|
4068
|
-
}
|
|
4069
|
-
message.rootNodeSignatureShares = NodeSignatureShares.decode(reader, reader.uint32());
|
|
4070
|
-
continue;
|
|
4071
|
-
}
|
|
4072
|
-
}
|
|
4073
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
4074
|
-
break;
|
|
4075
|
-
}
|
|
4076
|
-
reader.skip(tag & 7);
|
|
4077
|
-
}
|
|
4078
|
-
return message;
|
|
4079
|
-
},
|
|
4080
|
-
fromJSON(object) {
|
|
4081
|
-
return {
|
|
4082
|
-
treeId: isSet3(object.treeId) ? globalThis.String(object.treeId) : "",
|
|
4083
|
-
rootNodeSignatureShares: isSet3(object.rootNodeSignatureShares) ? NodeSignatureShares.fromJSON(object.rootNodeSignatureShares) : void 0
|
|
4084
|
-
};
|
|
4085
|
-
},
|
|
4086
|
-
toJSON(message) {
|
|
4087
|
-
const obj = {};
|
|
4088
|
-
if (message.treeId !== "") {
|
|
4089
|
-
obj.treeId = message.treeId;
|
|
4090
|
-
}
|
|
4091
|
-
if (message.rootNodeSignatureShares !== void 0) {
|
|
4092
|
-
obj.rootNodeSignatureShares = NodeSignatureShares.toJSON(message.rootNodeSignatureShares);
|
|
4093
|
-
}
|
|
4094
|
-
return obj;
|
|
4095
|
-
},
|
|
4096
|
-
create(base) {
|
|
4097
|
-
return StartTreeCreationResponse.fromPartial(base ?? {});
|
|
4098
|
-
},
|
|
4099
|
-
fromPartial(object) {
|
|
4100
|
-
const message = createBaseStartTreeCreationResponse();
|
|
4101
|
-
message.treeId = object.treeId ?? "";
|
|
4102
|
-
message.rootNodeSignatureShares = object.rootNodeSignatureShares !== void 0 && object.rootNodeSignatureShares !== null ? NodeSignatureShares.fromPartial(object.rootNodeSignatureShares) : void 0;
|
|
4103
|
-
return message;
|
|
4104
|
-
}
|
|
4105
|
-
};
|
|
4106
3867
|
function createBaseStartDepositTreeCreationRequest() {
|
|
4107
3868
|
return {
|
|
4108
3869
|
identityPublicKey: new Uint8Array(0),
|
|
@@ -6078,104 +5839,6 @@ var SendLeafKeyTweak_PubkeySharesTweakEntry = {
|
|
|
6078
5839
|
return message;
|
|
6079
5840
|
}
|
|
6080
5841
|
};
|
|
6081
|
-
function createBaseFinalizeTransferRequest() {
|
|
6082
|
-
return { transferId: "", ownerIdentityPublicKey: new Uint8Array(0), leavesToSend: [], sparkPaymentIntent: "" };
|
|
6083
|
-
}
|
|
6084
|
-
var FinalizeTransferRequest = {
|
|
6085
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
6086
|
-
if (message.transferId !== "") {
|
|
6087
|
-
writer.uint32(10).string(message.transferId);
|
|
6088
|
-
}
|
|
6089
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
6090
|
-
writer.uint32(18).bytes(message.ownerIdentityPublicKey);
|
|
6091
|
-
}
|
|
6092
|
-
for (const v of message.leavesToSend) {
|
|
6093
|
-
SendLeafKeyTweak.encode(v, writer.uint32(26).fork()).join();
|
|
6094
|
-
}
|
|
6095
|
-
if (message.sparkPaymentIntent !== "") {
|
|
6096
|
-
writer.uint32(34).string(message.sparkPaymentIntent);
|
|
6097
|
-
}
|
|
6098
|
-
return writer;
|
|
6099
|
-
},
|
|
6100
|
-
decode(input, length) {
|
|
6101
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
6102
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
6103
|
-
const message = createBaseFinalizeTransferRequest();
|
|
6104
|
-
while (reader.pos < end) {
|
|
6105
|
-
const tag = reader.uint32();
|
|
6106
|
-
switch (tag >>> 3) {
|
|
6107
|
-
case 1: {
|
|
6108
|
-
if (tag !== 10) {
|
|
6109
|
-
break;
|
|
6110
|
-
}
|
|
6111
|
-
message.transferId = reader.string();
|
|
6112
|
-
continue;
|
|
6113
|
-
}
|
|
6114
|
-
case 2: {
|
|
6115
|
-
if (tag !== 18) {
|
|
6116
|
-
break;
|
|
6117
|
-
}
|
|
6118
|
-
message.ownerIdentityPublicKey = reader.bytes();
|
|
6119
|
-
continue;
|
|
6120
|
-
}
|
|
6121
|
-
case 3: {
|
|
6122
|
-
if (tag !== 26) {
|
|
6123
|
-
break;
|
|
6124
|
-
}
|
|
6125
|
-
message.leavesToSend.push(SendLeafKeyTweak.decode(reader, reader.uint32()));
|
|
6126
|
-
continue;
|
|
6127
|
-
}
|
|
6128
|
-
case 4: {
|
|
6129
|
-
if (tag !== 34) {
|
|
6130
|
-
break;
|
|
6131
|
-
}
|
|
6132
|
-
message.sparkPaymentIntent = reader.string();
|
|
6133
|
-
continue;
|
|
6134
|
-
}
|
|
6135
|
-
}
|
|
6136
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
6137
|
-
break;
|
|
6138
|
-
}
|
|
6139
|
-
reader.skip(tag & 7);
|
|
6140
|
-
}
|
|
6141
|
-
return message;
|
|
6142
|
-
},
|
|
6143
|
-
fromJSON(object) {
|
|
6144
|
-
return {
|
|
6145
|
-
transferId: isSet3(object.transferId) ? globalThis.String(object.transferId) : "",
|
|
6146
|
-
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
6147
|
-
leavesToSend: globalThis.Array.isArray(object?.leavesToSend) ? object.leavesToSend.map((e) => SendLeafKeyTweak.fromJSON(e)) : [],
|
|
6148
|
-
sparkPaymentIntent: isSet3(object.sparkPaymentIntent) ? globalThis.String(object.sparkPaymentIntent) : ""
|
|
6149
|
-
};
|
|
6150
|
-
},
|
|
6151
|
-
toJSON(message) {
|
|
6152
|
-
const obj = {};
|
|
6153
|
-
if (message.transferId !== "") {
|
|
6154
|
-
obj.transferId = message.transferId;
|
|
6155
|
-
}
|
|
6156
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
6157
|
-
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
6158
|
-
}
|
|
6159
|
-
if (message.leavesToSend?.length) {
|
|
6160
|
-
obj.leavesToSend = message.leavesToSend.map((e) => SendLeafKeyTweak.toJSON(e));
|
|
6161
|
-
}
|
|
6162
|
-
if (message.sparkPaymentIntent !== "") {
|
|
6163
|
-
obj.sparkPaymentIntent = message.sparkPaymentIntent;
|
|
6164
|
-
}
|
|
6165
|
-
return obj;
|
|
6166
|
-
},
|
|
6167
|
-
create(base) {
|
|
6168
|
-
return FinalizeTransferRequest.fromPartial(base ?? {});
|
|
6169
|
-
},
|
|
6170
|
-
fromPartial(object) {
|
|
6171
|
-
const message = createBaseFinalizeTransferRequest();
|
|
6172
|
-
message.transferId = object.transferId ?? "";
|
|
6173
|
-
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
6174
|
-
message.leavesToSend = object.leavesToSend?.map((e) => SendLeafKeyTweak.fromPartial(e)) || [];
|
|
6175
|
-
message.sparkPaymentIntent = object.sparkPaymentIntent ?? "";
|
|
6176
|
-
return message;
|
|
6177
|
-
}
|
|
6178
|
-
};
|
|
6179
5842
|
function createBaseFinalizeTransferWithTransferPackageRequest() {
|
|
6180
5843
|
return { transferId: "", ownerIdentityPublicKey: new Uint8Array(0), transferPackage: void 0 };
|
|
6181
5844
|
}
|
|
@@ -8547,753 +8210,6 @@ var CooperativeExitResponse = {
|
|
|
8547
8210
|
return message;
|
|
8548
8211
|
}
|
|
8549
8212
|
};
|
|
8550
|
-
function createBaseCounterLeafSwapRequest() {
|
|
8551
|
-
return {
|
|
8552
|
-
transfer: void 0,
|
|
8553
|
-
swapId: "",
|
|
8554
|
-
adaptorPublicKey: new Uint8Array(0),
|
|
8555
|
-
directAdaptorPublicKey: new Uint8Array(0),
|
|
8556
|
-
directFromCpfpAdaptorPublicKey: new Uint8Array(0)
|
|
8557
|
-
};
|
|
8558
|
-
}
|
|
8559
|
-
var CounterLeafSwapRequest = {
|
|
8560
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
8561
|
-
if (message.transfer !== void 0) {
|
|
8562
|
-
StartTransferRequest.encode(message.transfer, writer.uint32(10).fork()).join();
|
|
8563
|
-
}
|
|
8564
|
-
if (message.swapId !== "") {
|
|
8565
|
-
writer.uint32(18).string(message.swapId);
|
|
8566
|
-
}
|
|
8567
|
-
if (message.adaptorPublicKey.length !== 0) {
|
|
8568
|
-
writer.uint32(26).bytes(message.adaptorPublicKey);
|
|
8569
|
-
}
|
|
8570
|
-
if (message.directAdaptorPublicKey.length !== 0) {
|
|
8571
|
-
writer.uint32(34).bytes(message.directAdaptorPublicKey);
|
|
8572
|
-
}
|
|
8573
|
-
if (message.directFromCpfpAdaptorPublicKey.length !== 0) {
|
|
8574
|
-
writer.uint32(42).bytes(message.directFromCpfpAdaptorPublicKey);
|
|
8575
|
-
}
|
|
8576
|
-
return writer;
|
|
8577
|
-
},
|
|
8578
|
-
decode(input, length) {
|
|
8579
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
8580
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
8581
|
-
const message = createBaseCounterLeafSwapRequest();
|
|
8582
|
-
while (reader.pos < end) {
|
|
8583
|
-
const tag = reader.uint32();
|
|
8584
|
-
switch (tag >>> 3) {
|
|
8585
|
-
case 1: {
|
|
8586
|
-
if (tag !== 10) {
|
|
8587
|
-
break;
|
|
8588
|
-
}
|
|
8589
|
-
message.transfer = StartTransferRequest.decode(reader, reader.uint32());
|
|
8590
|
-
continue;
|
|
8591
|
-
}
|
|
8592
|
-
case 2: {
|
|
8593
|
-
if (tag !== 18) {
|
|
8594
|
-
break;
|
|
8595
|
-
}
|
|
8596
|
-
message.swapId = reader.string();
|
|
8597
|
-
continue;
|
|
8598
|
-
}
|
|
8599
|
-
case 3: {
|
|
8600
|
-
if (tag !== 26) {
|
|
8601
|
-
break;
|
|
8602
|
-
}
|
|
8603
|
-
message.adaptorPublicKey = reader.bytes();
|
|
8604
|
-
continue;
|
|
8605
|
-
}
|
|
8606
|
-
case 4: {
|
|
8607
|
-
if (tag !== 34) {
|
|
8608
|
-
break;
|
|
8609
|
-
}
|
|
8610
|
-
message.directAdaptorPublicKey = reader.bytes();
|
|
8611
|
-
continue;
|
|
8612
|
-
}
|
|
8613
|
-
case 5: {
|
|
8614
|
-
if (tag !== 42) {
|
|
8615
|
-
break;
|
|
8616
|
-
}
|
|
8617
|
-
message.directFromCpfpAdaptorPublicKey = reader.bytes();
|
|
8618
|
-
continue;
|
|
8619
|
-
}
|
|
8620
|
-
}
|
|
8621
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
8622
|
-
break;
|
|
8623
|
-
}
|
|
8624
|
-
reader.skip(tag & 7);
|
|
8625
|
-
}
|
|
8626
|
-
return message;
|
|
8627
|
-
},
|
|
8628
|
-
fromJSON(object) {
|
|
8629
|
-
return {
|
|
8630
|
-
transfer: isSet3(object.transfer) ? StartTransferRequest.fromJSON(object.transfer) : void 0,
|
|
8631
|
-
swapId: isSet3(object.swapId) ? globalThis.String(object.swapId) : "",
|
|
8632
|
-
adaptorPublicKey: isSet3(object.adaptorPublicKey) ? bytesFromBase642(object.adaptorPublicKey) : new Uint8Array(0),
|
|
8633
|
-
directAdaptorPublicKey: isSet3(object.directAdaptorPublicKey) ? bytesFromBase642(object.directAdaptorPublicKey) : new Uint8Array(0),
|
|
8634
|
-
directFromCpfpAdaptorPublicKey: isSet3(object.directFromCpfpAdaptorPublicKey) ? bytesFromBase642(object.directFromCpfpAdaptorPublicKey) : new Uint8Array(0)
|
|
8635
|
-
};
|
|
8636
|
-
},
|
|
8637
|
-
toJSON(message) {
|
|
8638
|
-
const obj = {};
|
|
8639
|
-
if (message.transfer !== void 0) {
|
|
8640
|
-
obj.transfer = StartTransferRequest.toJSON(message.transfer);
|
|
8641
|
-
}
|
|
8642
|
-
if (message.swapId !== "") {
|
|
8643
|
-
obj.swapId = message.swapId;
|
|
8644
|
-
}
|
|
8645
|
-
if (message.adaptorPublicKey.length !== 0) {
|
|
8646
|
-
obj.adaptorPublicKey = base64FromBytes2(message.adaptorPublicKey);
|
|
8647
|
-
}
|
|
8648
|
-
if (message.directAdaptorPublicKey.length !== 0) {
|
|
8649
|
-
obj.directAdaptorPublicKey = base64FromBytes2(message.directAdaptorPublicKey);
|
|
8650
|
-
}
|
|
8651
|
-
if (message.directFromCpfpAdaptorPublicKey.length !== 0) {
|
|
8652
|
-
obj.directFromCpfpAdaptorPublicKey = base64FromBytes2(message.directFromCpfpAdaptorPublicKey);
|
|
8653
|
-
}
|
|
8654
|
-
return obj;
|
|
8655
|
-
},
|
|
8656
|
-
create(base) {
|
|
8657
|
-
return CounterLeafSwapRequest.fromPartial(base ?? {});
|
|
8658
|
-
},
|
|
8659
|
-
fromPartial(object) {
|
|
8660
|
-
const message = createBaseCounterLeafSwapRequest();
|
|
8661
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ? StartTransferRequest.fromPartial(object.transfer) : void 0;
|
|
8662
|
-
message.swapId = object.swapId ?? "";
|
|
8663
|
-
message.adaptorPublicKey = object.adaptorPublicKey ?? new Uint8Array(0);
|
|
8664
|
-
message.directAdaptorPublicKey = object.directAdaptorPublicKey ?? new Uint8Array(0);
|
|
8665
|
-
message.directFromCpfpAdaptorPublicKey = object.directFromCpfpAdaptorPublicKey ?? new Uint8Array(0);
|
|
8666
|
-
return message;
|
|
8667
|
-
}
|
|
8668
|
-
};
|
|
8669
|
-
function createBaseCounterLeafSwapResponse() {
|
|
8670
|
-
return { transfer: void 0, signingResults: [] };
|
|
8671
|
-
}
|
|
8672
|
-
var CounterLeafSwapResponse = {
|
|
8673
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
8674
|
-
if (message.transfer !== void 0) {
|
|
8675
|
-
Transfer.encode(message.transfer, writer.uint32(10).fork()).join();
|
|
8676
|
-
}
|
|
8677
|
-
for (const v of message.signingResults) {
|
|
8678
|
-
LeafRefundTxSigningResult.encode(v, writer.uint32(18).fork()).join();
|
|
8679
|
-
}
|
|
8680
|
-
return writer;
|
|
8681
|
-
},
|
|
8682
|
-
decode(input, length) {
|
|
8683
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
8684
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
8685
|
-
const message = createBaseCounterLeafSwapResponse();
|
|
8686
|
-
while (reader.pos < end) {
|
|
8687
|
-
const tag = reader.uint32();
|
|
8688
|
-
switch (tag >>> 3) {
|
|
8689
|
-
case 1: {
|
|
8690
|
-
if (tag !== 10) {
|
|
8691
|
-
break;
|
|
8692
|
-
}
|
|
8693
|
-
message.transfer = Transfer.decode(reader, reader.uint32());
|
|
8694
|
-
continue;
|
|
8695
|
-
}
|
|
8696
|
-
case 2: {
|
|
8697
|
-
if (tag !== 18) {
|
|
8698
|
-
break;
|
|
8699
|
-
}
|
|
8700
|
-
message.signingResults.push(LeafRefundTxSigningResult.decode(reader, reader.uint32()));
|
|
8701
|
-
continue;
|
|
8702
|
-
}
|
|
8703
|
-
}
|
|
8704
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
8705
|
-
break;
|
|
8706
|
-
}
|
|
8707
|
-
reader.skip(tag & 7);
|
|
8708
|
-
}
|
|
8709
|
-
return message;
|
|
8710
|
-
},
|
|
8711
|
-
fromJSON(object) {
|
|
8712
|
-
return {
|
|
8713
|
-
transfer: isSet3(object.transfer) ? Transfer.fromJSON(object.transfer) : void 0,
|
|
8714
|
-
signingResults: globalThis.Array.isArray(object?.signingResults) ? object.signingResults.map((e) => LeafRefundTxSigningResult.fromJSON(e)) : []
|
|
8715
|
-
};
|
|
8716
|
-
},
|
|
8717
|
-
toJSON(message) {
|
|
8718
|
-
const obj = {};
|
|
8719
|
-
if (message.transfer !== void 0) {
|
|
8720
|
-
obj.transfer = Transfer.toJSON(message.transfer);
|
|
8721
|
-
}
|
|
8722
|
-
if (message.signingResults?.length) {
|
|
8723
|
-
obj.signingResults = message.signingResults.map((e) => LeafRefundTxSigningResult.toJSON(e));
|
|
8724
|
-
}
|
|
8725
|
-
return obj;
|
|
8726
|
-
},
|
|
8727
|
-
create(base) {
|
|
8728
|
-
return CounterLeafSwapResponse.fromPartial(base ?? {});
|
|
8729
|
-
},
|
|
8730
|
-
fromPartial(object) {
|
|
8731
|
-
const message = createBaseCounterLeafSwapResponse();
|
|
8732
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ? Transfer.fromPartial(object.transfer) : void 0;
|
|
8733
|
-
message.signingResults = object.signingResults?.map((e) => LeafRefundTxSigningResult.fromPartial(e)) || [];
|
|
8734
|
-
return message;
|
|
8735
|
-
}
|
|
8736
|
-
};
|
|
8737
|
-
function createBaseRefreshTimelockRequest() {
|
|
8738
|
-
return { leafId: "", ownerIdentityPublicKey: new Uint8Array(0), signingJobs: [] };
|
|
8739
|
-
}
|
|
8740
|
-
var RefreshTimelockRequest = {
|
|
8741
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
8742
|
-
if (message.leafId !== "") {
|
|
8743
|
-
writer.uint32(10).string(message.leafId);
|
|
8744
|
-
}
|
|
8745
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
8746
|
-
writer.uint32(18).bytes(message.ownerIdentityPublicKey);
|
|
8747
|
-
}
|
|
8748
|
-
for (const v of message.signingJobs) {
|
|
8749
|
-
SigningJob.encode(v, writer.uint32(26).fork()).join();
|
|
8750
|
-
}
|
|
8751
|
-
return writer;
|
|
8752
|
-
},
|
|
8753
|
-
decode(input, length) {
|
|
8754
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
8755
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
8756
|
-
const message = createBaseRefreshTimelockRequest();
|
|
8757
|
-
while (reader.pos < end) {
|
|
8758
|
-
const tag = reader.uint32();
|
|
8759
|
-
switch (tag >>> 3) {
|
|
8760
|
-
case 1: {
|
|
8761
|
-
if (tag !== 10) {
|
|
8762
|
-
break;
|
|
8763
|
-
}
|
|
8764
|
-
message.leafId = reader.string();
|
|
8765
|
-
continue;
|
|
8766
|
-
}
|
|
8767
|
-
case 2: {
|
|
8768
|
-
if (tag !== 18) {
|
|
8769
|
-
break;
|
|
8770
|
-
}
|
|
8771
|
-
message.ownerIdentityPublicKey = reader.bytes();
|
|
8772
|
-
continue;
|
|
8773
|
-
}
|
|
8774
|
-
case 3: {
|
|
8775
|
-
if (tag !== 26) {
|
|
8776
|
-
break;
|
|
8777
|
-
}
|
|
8778
|
-
message.signingJobs.push(SigningJob.decode(reader, reader.uint32()));
|
|
8779
|
-
continue;
|
|
8780
|
-
}
|
|
8781
|
-
}
|
|
8782
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
8783
|
-
break;
|
|
8784
|
-
}
|
|
8785
|
-
reader.skip(tag & 7);
|
|
8786
|
-
}
|
|
8787
|
-
return message;
|
|
8788
|
-
},
|
|
8789
|
-
fromJSON(object) {
|
|
8790
|
-
return {
|
|
8791
|
-
leafId: isSet3(object.leafId) ? globalThis.String(object.leafId) : "",
|
|
8792
|
-
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
8793
|
-
signingJobs: globalThis.Array.isArray(object?.signingJobs) ? object.signingJobs.map((e) => SigningJob.fromJSON(e)) : []
|
|
8794
|
-
};
|
|
8795
|
-
},
|
|
8796
|
-
toJSON(message) {
|
|
8797
|
-
const obj = {};
|
|
8798
|
-
if (message.leafId !== "") {
|
|
8799
|
-
obj.leafId = message.leafId;
|
|
8800
|
-
}
|
|
8801
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
8802
|
-
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
8803
|
-
}
|
|
8804
|
-
if (message.signingJobs?.length) {
|
|
8805
|
-
obj.signingJobs = message.signingJobs.map((e) => SigningJob.toJSON(e));
|
|
8806
|
-
}
|
|
8807
|
-
return obj;
|
|
8808
|
-
},
|
|
8809
|
-
create(base) {
|
|
8810
|
-
return RefreshTimelockRequest.fromPartial(base ?? {});
|
|
8811
|
-
},
|
|
8812
|
-
fromPartial(object) {
|
|
8813
|
-
const message = createBaseRefreshTimelockRequest();
|
|
8814
|
-
message.leafId = object.leafId ?? "";
|
|
8815
|
-
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
8816
|
-
message.signingJobs = object.signingJobs?.map((e) => SigningJob.fromPartial(e)) || [];
|
|
8817
|
-
return message;
|
|
8818
|
-
}
|
|
8819
|
-
};
|
|
8820
|
-
function createBaseRefreshTimelockSigningResult() {
|
|
8821
|
-
return { signingResult: void 0, verifyingKey: new Uint8Array(0) };
|
|
8822
|
-
}
|
|
8823
|
-
var RefreshTimelockSigningResult = {
|
|
8824
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
8825
|
-
if (message.signingResult !== void 0) {
|
|
8826
|
-
SigningResult.encode(message.signingResult, writer.uint32(10).fork()).join();
|
|
8827
|
-
}
|
|
8828
|
-
if (message.verifyingKey.length !== 0) {
|
|
8829
|
-
writer.uint32(18).bytes(message.verifyingKey);
|
|
8830
|
-
}
|
|
8831
|
-
return writer;
|
|
8832
|
-
},
|
|
8833
|
-
decode(input, length) {
|
|
8834
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
8835
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
8836
|
-
const message = createBaseRefreshTimelockSigningResult();
|
|
8837
|
-
while (reader.pos < end) {
|
|
8838
|
-
const tag = reader.uint32();
|
|
8839
|
-
switch (tag >>> 3) {
|
|
8840
|
-
case 1: {
|
|
8841
|
-
if (tag !== 10) {
|
|
8842
|
-
break;
|
|
8843
|
-
}
|
|
8844
|
-
message.signingResult = SigningResult.decode(reader, reader.uint32());
|
|
8845
|
-
continue;
|
|
8846
|
-
}
|
|
8847
|
-
case 2: {
|
|
8848
|
-
if (tag !== 18) {
|
|
8849
|
-
break;
|
|
8850
|
-
}
|
|
8851
|
-
message.verifyingKey = reader.bytes();
|
|
8852
|
-
continue;
|
|
8853
|
-
}
|
|
8854
|
-
}
|
|
8855
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
8856
|
-
break;
|
|
8857
|
-
}
|
|
8858
|
-
reader.skip(tag & 7);
|
|
8859
|
-
}
|
|
8860
|
-
return message;
|
|
8861
|
-
},
|
|
8862
|
-
fromJSON(object) {
|
|
8863
|
-
return {
|
|
8864
|
-
signingResult: isSet3(object.signingResult) ? SigningResult.fromJSON(object.signingResult) : void 0,
|
|
8865
|
-
verifyingKey: isSet3(object.verifyingKey) ? bytesFromBase642(object.verifyingKey) : new Uint8Array(0)
|
|
8866
|
-
};
|
|
8867
|
-
},
|
|
8868
|
-
toJSON(message) {
|
|
8869
|
-
const obj = {};
|
|
8870
|
-
if (message.signingResult !== void 0) {
|
|
8871
|
-
obj.signingResult = SigningResult.toJSON(message.signingResult);
|
|
8872
|
-
}
|
|
8873
|
-
if (message.verifyingKey.length !== 0) {
|
|
8874
|
-
obj.verifyingKey = base64FromBytes2(message.verifyingKey);
|
|
8875
|
-
}
|
|
8876
|
-
return obj;
|
|
8877
|
-
},
|
|
8878
|
-
create(base) {
|
|
8879
|
-
return RefreshTimelockSigningResult.fromPartial(base ?? {});
|
|
8880
|
-
},
|
|
8881
|
-
fromPartial(object) {
|
|
8882
|
-
const message = createBaseRefreshTimelockSigningResult();
|
|
8883
|
-
message.signingResult = object.signingResult !== void 0 && object.signingResult !== null ? SigningResult.fromPartial(object.signingResult) : void 0;
|
|
8884
|
-
message.verifyingKey = object.verifyingKey ?? new Uint8Array(0);
|
|
8885
|
-
return message;
|
|
8886
|
-
}
|
|
8887
|
-
};
|
|
8888
|
-
function createBaseRefreshTimelockResponse() {
|
|
8889
|
-
return { signingResults: [] };
|
|
8890
|
-
}
|
|
8891
|
-
var RefreshTimelockResponse = {
|
|
8892
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
8893
|
-
for (const v of message.signingResults) {
|
|
8894
|
-
RefreshTimelockSigningResult.encode(v, writer.uint32(10).fork()).join();
|
|
8895
|
-
}
|
|
8896
|
-
return writer;
|
|
8897
|
-
},
|
|
8898
|
-
decode(input, length) {
|
|
8899
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
8900
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
8901
|
-
const message = createBaseRefreshTimelockResponse();
|
|
8902
|
-
while (reader.pos < end) {
|
|
8903
|
-
const tag = reader.uint32();
|
|
8904
|
-
switch (tag >>> 3) {
|
|
8905
|
-
case 1: {
|
|
8906
|
-
if (tag !== 10) {
|
|
8907
|
-
break;
|
|
8908
|
-
}
|
|
8909
|
-
message.signingResults.push(RefreshTimelockSigningResult.decode(reader, reader.uint32()));
|
|
8910
|
-
continue;
|
|
8911
|
-
}
|
|
8912
|
-
}
|
|
8913
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
8914
|
-
break;
|
|
8915
|
-
}
|
|
8916
|
-
reader.skip(tag & 7);
|
|
8917
|
-
}
|
|
8918
|
-
return message;
|
|
8919
|
-
},
|
|
8920
|
-
fromJSON(object) {
|
|
8921
|
-
return {
|
|
8922
|
-
signingResults: globalThis.Array.isArray(object?.signingResults) ? object.signingResults.map((e) => RefreshTimelockSigningResult.fromJSON(e)) : []
|
|
8923
|
-
};
|
|
8924
|
-
},
|
|
8925
|
-
toJSON(message) {
|
|
8926
|
-
const obj = {};
|
|
8927
|
-
if (message.signingResults?.length) {
|
|
8928
|
-
obj.signingResults = message.signingResults.map((e) => RefreshTimelockSigningResult.toJSON(e));
|
|
8929
|
-
}
|
|
8930
|
-
return obj;
|
|
8931
|
-
},
|
|
8932
|
-
create(base) {
|
|
8933
|
-
return RefreshTimelockResponse.fromPartial(base ?? {});
|
|
8934
|
-
},
|
|
8935
|
-
fromPartial(object) {
|
|
8936
|
-
const message = createBaseRefreshTimelockResponse();
|
|
8937
|
-
message.signingResults = object.signingResults?.map((e) => RefreshTimelockSigningResult.fromPartial(e)) || [];
|
|
8938
|
-
return message;
|
|
8939
|
-
}
|
|
8940
|
-
};
|
|
8941
|
-
function createBaseExtendLeafRequest() {
|
|
8942
|
-
return {
|
|
8943
|
-
leafId: "",
|
|
8944
|
-
ownerIdentityPublicKey: new Uint8Array(0),
|
|
8945
|
-
nodeTxSigningJob: void 0,
|
|
8946
|
-
refundTxSigningJob: void 0,
|
|
8947
|
-
directNodeTxSigningJob: void 0,
|
|
8948
|
-
directRefundTxSigningJob: void 0,
|
|
8949
|
-
directFromCpfpRefundTxSigningJob: void 0
|
|
8950
|
-
};
|
|
8951
|
-
}
|
|
8952
|
-
var ExtendLeafRequest = {
|
|
8953
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
8954
|
-
if (message.leafId !== "") {
|
|
8955
|
-
writer.uint32(10).string(message.leafId);
|
|
8956
|
-
}
|
|
8957
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
8958
|
-
writer.uint32(18).bytes(message.ownerIdentityPublicKey);
|
|
8959
|
-
}
|
|
8960
|
-
if (message.nodeTxSigningJob !== void 0) {
|
|
8961
|
-
SigningJob.encode(message.nodeTxSigningJob, writer.uint32(26).fork()).join();
|
|
8962
|
-
}
|
|
8963
|
-
if (message.refundTxSigningJob !== void 0) {
|
|
8964
|
-
SigningJob.encode(message.refundTxSigningJob, writer.uint32(34).fork()).join();
|
|
8965
|
-
}
|
|
8966
|
-
if (message.directNodeTxSigningJob !== void 0) {
|
|
8967
|
-
SigningJob.encode(message.directNodeTxSigningJob, writer.uint32(42).fork()).join();
|
|
8968
|
-
}
|
|
8969
|
-
if (message.directRefundTxSigningJob !== void 0) {
|
|
8970
|
-
SigningJob.encode(message.directRefundTxSigningJob, writer.uint32(50).fork()).join();
|
|
8971
|
-
}
|
|
8972
|
-
if (message.directFromCpfpRefundTxSigningJob !== void 0) {
|
|
8973
|
-
SigningJob.encode(message.directFromCpfpRefundTxSigningJob, writer.uint32(58).fork()).join();
|
|
8974
|
-
}
|
|
8975
|
-
return writer;
|
|
8976
|
-
},
|
|
8977
|
-
decode(input, length) {
|
|
8978
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
8979
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
8980
|
-
const message = createBaseExtendLeafRequest();
|
|
8981
|
-
while (reader.pos < end) {
|
|
8982
|
-
const tag = reader.uint32();
|
|
8983
|
-
switch (tag >>> 3) {
|
|
8984
|
-
case 1: {
|
|
8985
|
-
if (tag !== 10) {
|
|
8986
|
-
break;
|
|
8987
|
-
}
|
|
8988
|
-
message.leafId = reader.string();
|
|
8989
|
-
continue;
|
|
8990
|
-
}
|
|
8991
|
-
case 2: {
|
|
8992
|
-
if (tag !== 18) {
|
|
8993
|
-
break;
|
|
8994
|
-
}
|
|
8995
|
-
message.ownerIdentityPublicKey = reader.bytes();
|
|
8996
|
-
continue;
|
|
8997
|
-
}
|
|
8998
|
-
case 3: {
|
|
8999
|
-
if (tag !== 26) {
|
|
9000
|
-
break;
|
|
9001
|
-
}
|
|
9002
|
-
message.nodeTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
9003
|
-
continue;
|
|
9004
|
-
}
|
|
9005
|
-
case 4: {
|
|
9006
|
-
if (tag !== 34) {
|
|
9007
|
-
break;
|
|
9008
|
-
}
|
|
9009
|
-
message.refundTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
9010
|
-
continue;
|
|
9011
|
-
}
|
|
9012
|
-
case 5: {
|
|
9013
|
-
if (tag !== 42) {
|
|
9014
|
-
break;
|
|
9015
|
-
}
|
|
9016
|
-
message.directNodeTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
9017
|
-
continue;
|
|
9018
|
-
}
|
|
9019
|
-
case 6: {
|
|
9020
|
-
if (tag !== 50) {
|
|
9021
|
-
break;
|
|
9022
|
-
}
|
|
9023
|
-
message.directRefundTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
9024
|
-
continue;
|
|
9025
|
-
}
|
|
9026
|
-
case 7: {
|
|
9027
|
-
if (tag !== 58) {
|
|
9028
|
-
break;
|
|
9029
|
-
}
|
|
9030
|
-
message.directFromCpfpRefundTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
9031
|
-
continue;
|
|
9032
|
-
}
|
|
9033
|
-
}
|
|
9034
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
9035
|
-
break;
|
|
9036
|
-
}
|
|
9037
|
-
reader.skip(tag & 7);
|
|
9038
|
-
}
|
|
9039
|
-
return message;
|
|
9040
|
-
},
|
|
9041
|
-
fromJSON(object) {
|
|
9042
|
-
return {
|
|
9043
|
-
leafId: isSet3(object.leafId) ? globalThis.String(object.leafId) : "",
|
|
9044
|
-
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
9045
|
-
nodeTxSigningJob: isSet3(object.nodeTxSigningJob) ? SigningJob.fromJSON(object.nodeTxSigningJob) : void 0,
|
|
9046
|
-
refundTxSigningJob: isSet3(object.refundTxSigningJob) ? SigningJob.fromJSON(object.refundTxSigningJob) : void 0,
|
|
9047
|
-
directNodeTxSigningJob: isSet3(object.directNodeTxSigningJob) ? SigningJob.fromJSON(object.directNodeTxSigningJob) : void 0,
|
|
9048
|
-
directRefundTxSigningJob: isSet3(object.directRefundTxSigningJob) ? SigningJob.fromJSON(object.directRefundTxSigningJob) : void 0,
|
|
9049
|
-
directFromCpfpRefundTxSigningJob: isSet3(object.directFromCpfpRefundTxSigningJob) ? SigningJob.fromJSON(object.directFromCpfpRefundTxSigningJob) : void 0
|
|
9050
|
-
};
|
|
9051
|
-
},
|
|
9052
|
-
toJSON(message) {
|
|
9053
|
-
const obj = {};
|
|
9054
|
-
if (message.leafId !== "") {
|
|
9055
|
-
obj.leafId = message.leafId;
|
|
9056
|
-
}
|
|
9057
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
9058
|
-
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
9059
|
-
}
|
|
9060
|
-
if (message.nodeTxSigningJob !== void 0) {
|
|
9061
|
-
obj.nodeTxSigningJob = SigningJob.toJSON(message.nodeTxSigningJob);
|
|
9062
|
-
}
|
|
9063
|
-
if (message.refundTxSigningJob !== void 0) {
|
|
9064
|
-
obj.refundTxSigningJob = SigningJob.toJSON(message.refundTxSigningJob);
|
|
9065
|
-
}
|
|
9066
|
-
if (message.directNodeTxSigningJob !== void 0) {
|
|
9067
|
-
obj.directNodeTxSigningJob = SigningJob.toJSON(message.directNodeTxSigningJob);
|
|
9068
|
-
}
|
|
9069
|
-
if (message.directRefundTxSigningJob !== void 0) {
|
|
9070
|
-
obj.directRefundTxSigningJob = SigningJob.toJSON(message.directRefundTxSigningJob);
|
|
9071
|
-
}
|
|
9072
|
-
if (message.directFromCpfpRefundTxSigningJob !== void 0) {
|
|
9073
|
-
obj.directFromCpfpRefundTxSigningJob = SigningJob.toJSON(message.directFromCpfpRefundTxSigningJob);
|
|
9074
|
-
}
|
|
9075
|
-
return obj;
|
|
9076
|
-
},
|
|
9077
|
-
create(base) {
|
|
9078
|
-
return ExtendLeafRequest.fromPartial(base ?? {});
|
|
9079
|
-
},
|
|
9080
|
-
fromPartial(object) {
|
|
9081
|
-
const message = createBaseExtendLeafRequest();
|
|
9082
|
-
message.leafId = object.leafId ?? "";
|
|
9083
|
-
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
9084
|
-
message.nodeTxSigningJob = object.nodeTxSigningJob !== void 0 && object.nodeTxSigningJob !== null ? SigningJob.fromPartial(object.nodeTxSigningJob) : void 0;
|
|
9085
|
-
message.refundTxSigningJob = object.refundTxSigningJob !== void 0 && object.refundTxSigningJob !== null ? SigningJob.fromPartial(object.refundTxSigningJob) : void 0;
|
|
9086
|
-
message.directNodeTxSigningJob = object.directNodeTxSigningJob !== void 0 && object.directNodeTxSigningJob !== null ? SigningJob.fromPartial(object.directNodeTxSigningJob) : void 0;
|
|
9087
|
-
message.directRefundTxSigningJob = object.directRefundTxSigningJob !== void 0 && object.directRefundTxSigningJob !== null ? SigningJob.fromPartial(object.directRefundTxSigningJob) : void 0;
|
|
9088
|
-
message.directFromCpfpRefundTxSigningJob = object.directFromCpfpRefundTxSigningJob !== void 0 && object.directFromCpfpRefundTxSigningJob !== null ? SigningJob.fromPartial(object.directFromCpfpRefundTxSigningJob) : void 0;
|
|
9089
|
-
return message;
|
|
9090
|
-
}
|
|
9091
|
-
};
|
|
9092
|
-
function createBaseExtendLeafSigningResult() {
|
|
9093
|
-
return { signingResult: void 0, verifyingKey: new Uint8Array(0) };
|
|
9094
|
-
}
|
|
9095
|
-
var ExtendLeafSigningResult = {
|
|
9096
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
9097
|
-
if (message.signingResult !== void 0) {
|
|
9098
|
-
SigningResult.encode(message.signingResult, writer.uint32(10).fork()).join();
|
|
9099
|
-
}
|
|
9100
|
-
if (message.verifyingKey.length !== 0) {
|
|
9101
|
-
writer.uint32(18).bytes(message.verifyingKey);
|
|
9102
|
-
}
|
|
9103
|
-
return writer;
|
|
9104
|
-
},
|
|
9105
|
-
decode(input, length) {
|
|
9106
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
9107
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
9108
|
-
const message = createBaseExtendLeafSigningResult();
|
|
9109
|
-
while (reader.pos < end) {
|
|
9110
|
-
const tag = reader.uint32();
|
|
9111
|
-
switch (tag >>> 3) {
|
|
9112
|
-
case 1: {
|
|
9113
|
-
if (tag !== 10) {
|
|
9114
|
-
break;
|
|
9115
|
-
}
|
|
9116
|
-
message.signingResult = SigningResult.decode(reader, reader.uint32());
|
|
9117
|
-
continue;
|
|
9118
|
-
}
|
|
9119
|
-
case 2: {
|
|
9120
|
-
if (tag !== 18) {
|
|
9121
|
-
break;
|
|
9122
|
-
}
|
|
9123
|
-
message.verifyingKey = reader.bytes();
|
|
9124
|
-
continue;
|
|
9125
|
-
}
|
|
9126
|
-
}
|
|
9127
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
9128
|
-
break;
|
|
9129
|
-
}
|
|
9130
|
-
reader.skip(tag & 7);
|
|
9131
|
-
}
|
|
9132
|
-
return message;
|
|
9133
|
-
},
|
|
9134
|
-
fromJSON(object) {
|
|
9135
|
-
return {
|
|
9136
|
-
signingResult: isSet3(object.signingResult) ? SigningResult.fromJSON(object.signingResult) : void 0,
|
|
9137
|
-
verifyingKey: isSet3(object.verifyingKey) ? bytesFromBase642(object.verifyingKey) : new Uint8Array(0)
|
|
9138
|
-
};
|
|
9139
|
-
},
|
|
9140
|
-
toJSON(message) {
|
|
9141
|
-
const obj = {};
|
|
9142
|
-
if (message.signingResult !== void 0) {
|
|
9143
|
-
obj.signingResult = SigningResult.toJSON(message.signingResult);
|
|
9144
|
-
}
|
|
9145
|
-
if (message.verifyingKey.length !== 0) {
|
|
9146
|
-
obj.verifyingKey = base64FromBytes2(message.verifyingKey);
|
|
9147
|
-
}
|
|
9148
|
-
return obj;
|
|
9149
|
-
},
|
|
9150
|
-
create(base) {
|
|
9151
|
-
return ExtendLeafSigningResult.fromPartial(base ?? {});
|
|
9152
|
-
},
|
|
9153
|
-
fromPartial(object) {
|
|
9154
|
-
const message = createBaseExtendLeafSigningResult();
|
|
9155
|
-
message.signingResult = object.signingResult !== void 0 && object.signingResult !== null ? SigningResult.fromPartial(object.signingResult) : void 0;
|
|
9156
|
-
message.verifyingKey = object.verifyingKey ?? new Uint8Array(0);
|
|
9157
|
-
return message;
|
|
9158
|
-
}
|
|
9159
|
-
};
|
|
9160
|
-
function createBaseExtendLeafResponse() {
|
|
9161
|
-
return {
|
|
9162
|
-
leafId: "",
|
|
9163
|
-
nodeTxSigningResult: void 0,
|
|
9164
|
-
refundTxSigningResult: void 0,
|
|
9165
|
-
directNodeTxSigningResult: void 0,
|
|
9166
|
-
directRefundTxSigningResult: void 0,
|
|
9167
|
-
directFromCpfpRefundTxSigningResult: void 0
|
|
9168
|
-
};
|
|
9169
|
-
}
|
|
9170
|
-
var ExtendLeafResponse = {
|
|
9171
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
9172
|
-
if (message.leafId !== "") {
|
|
9173
|
-
writer.uint32(10).string(message.leafId);
|
|
9174
|
-
}
|
|
9175
|
-
if (message.nodeTxSigningResult !== void 0) {
|
|
9176
|
-
ExtendLeafSigningResult.encode(message.nodeTxSigningResult, writer.uint32(18).fork()).join();
|
|
9177
|
-
}
|
|
9178
|
-
if (message.refundTxSigningResult !== void 0) {
|
|
9179
|
-
ExtendLeafSigningResult.encode(message.refundTxSigningResult, writer.uint32(26).fork()).join();
|
|
9180
|
-
}
|
|
9181
|
-
if (message.directNodeTxSigningResult !== void 0) {
|
|
9182
|
-
ExtendLeafSigningResult.encode(message.directNodeTxSigningResult, writer.uint32(34).fork()).join();
|
|
9183
|
-
}
|
|
9184
|
-
if (message.directRefundTxSigningResult !== void 0) {
|
|
9185
|
-
ExtendLeafSigningResult.encode(message.directRefundTxSigningResult, writer.uint32(42).fork()).join();
|
|
9186
|
-
}
|
|
9187
|
-
if (message.directFromCpfpRefundTxSigningResult !== void 0) {
|
|
9188
|
-
ExtendLeafSigningResult.encode(message.directFromCpfpRefundTxSigningResult, writer.uint32(50).fork()).join();
|
|
9189
|
-
}
|
|
9190
|
-
return writer;
|
|
9191
|
-
},
|
|
9192
|
-
decode(input, length) {
|
|
9193
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
9194
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
9195
|
-
const message = createBaseExtendLeafResponse();
|
|
9196
|
-
while (reader.pos < end) {
|
|
9197
|
-
const tag = reader.uint32();
|
|
9198
|
-
switch (tag >>> 3) {
|
|
9199
|
-
case 1: {
|
|
9200
|
-
if (tag !== 10) {
|
|
9201
|
-
break;
|
|
9202
|
-
}
|
|
9203
|
-
message.leafId = reader.string();
|
|
9204
|
-
continue;
|
|
9205
|
-
}
|
|
9206
|
-
case 2: {
|
|
9207
|
-
if (tag !== 18) {
|
|
9208
|
-
break;
|
|
9209
|
-
}
|
|
9210
|
-
message.nodeTxSigningResult = ExtendLeafSigningResult.decode(reader, reader.uint32());
|
|
9211
|
-
continue;
|
|
9212
|
-
}
|
|
9213
|
-
case 3: {
|
|
9214
|
-
if (tag !== 26) {
|
|
9215
|
-
break;
|
|
9216
|
-
}
|
|
9217
|
-
message.refundTxSigningResult = ExtendLeafSigningResult.decode(reader, reader.uint32());
|
|
9218
|
-
continue;
|
|
9219
|
-
}
|
|
9220
|
-
case 4: {
|
|
9221
|
-
if (tag !== 34) {
|
|
9222
|
-
break;
|
|
9223
|
-
}
|
|
9224
|
-
message.directNodeTxSigningResult = ExtendLeafSigningResult.decode(reader, reader.uint32());
|
|
9225
|
-
continue;
|
|
9226
|
-
}
|
|
9227
|
-
case 5: {
|
|
9228
|
-
if (tag !== 42) {
|
|
9229
|
-
break;
|
|
9230
|
-
}
|
|
9231
|
-
message.directRefundTxSigningResult = ExtendLeafSigningResult.decode(reader, reader.uint32());
|
|
9232
|
-
continue;
|
|
9233
|
-
}
|
|
9234
|
-
case 6: {
|
|
9235
|
-
if (tag !== 50) {
|
|
9236
|
-
break;
|
|
9237
|
-
}
|
|
9238
|
-
message.directFromCpfpRefundTxSigningResult = ExtendLeafSigningResult.decode(reader, reader.uint32());
|
|
9239
|
-
continue;
|
|
9240
|
-
}
|
|
9241
|
-
}
|
|
9242
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
9243
|
-
break;
|
|
9244
|
-
}
|
|
9245
|
-
reader.skip(tag & 7);
|
|
9246
|
-
}
|
|
9247
|
-
return message;
|
|
9248
|
-
},
|
|
9249
|
-
fromJSON(object) {
|
|
9250
|
-
return {
|
|
9251
|
-
leafId: isSet3(object.leafId) ? globalThis.String(object.leafId) : "",
|
|
9252
|
-
nodeTxSigningResult: isSet3(object.nodeTxSigningResult) ? ExtendLeafSigningResult.fromJSON(object.nodeTxSigningResult) : void 0,
|
|
9253
|
-
refundTxSigningResult: isSet3(object.refundTxSigningResult) ? ExtendLeafSigningResult.fromJSON(object.refundTxSigningResult) : void 0,
|
|
9254
|
-
directNodeTxSigningResult: isSet3(object.directNodeTxSigningResult) ? ExtendLeafSigningResult.fromJSON(object.directNodeTxSigningResult) : void 0,
|
|
9255
|
-
directRefundTxSigningResult: isSet3(object.directRefundTxSigningResult) ? ExtendLeafSigningResult.fromJSON(object.directRefundTxSigningResult) : void 0,
|
|
9256
|
-
directFromCpfpRefundTxSigningResult: isSet3(object.directFromCpfpRefundTxSigningResult) ? ExtendLeafSigningResult.fromJSON(object.directFromCpfpRefundTxSigningResult) : void 0
|
|
9257
|
-
};
|
|
9258
|
-
},
|
|
9259
|
-
toJSON(message) {
|
|
9260
|
-
const obj = {};
|
|
9261
|
-
if (message.leafId !== "") {
|
|
9262
|
-
obj.leafId = message.leafId;
|
|
9263
|
-
}
|
|
9264
|
-
if (message.nodeTxSigningResult !== void 0) {
|
|
9265
|
-
obj.nodeTxSigningResult = ExtendLeafSigningResult.toJSON(message.nodeTxSigningResult);
|
|
9266
|
-
}
|
|
9267
|
-
if (message.refundTxSigningResult !== void 0) {
|
|
9268
|
-
obj.refundTxSigningResult = ExtendLeafSigningResult.toJSON(message.refundTxSigningResult);
|
|
9269
|
-
}
|
|
9270
|
-
if (message.directNodeTxSigningResult !== void 0) {
|
|
9271
|
-
obj.directNodeTxSigningResult = ExtendLeafSigningResult.toJSON(message.directNodeTxSigningResult);
|
|
9272
|
-
}
|
|
9273
|
-
if (message.directRefundTxSigningResult !== void 0) {
|
|
9274
|
-
obj.directRefundTxSigningResult = ExtendLeafSigningResult.toJSON(message.directRefundTxSigningResult);
|
|
9275
|
-
}
|
|
9276
|
-
if (message.directFromCpfpRefundTxSigningResult !== void 0) {
|
|
9277
|
-
obj.directFromCpfpRefundTxSigningResult = ExtendLeafSigningResult.toJSON(
|
|
9278
|
-
message.directFromCpfpRefundTxSigningResult
|
|
9279
|
-
);
|
|
9280
|
-
}
|
|
9281
|
-
return obj;
|
|
9282
|
-
},
|
|
9283
|
-
create(base) {
|
|
9284
|
-
return ExtendLeafResponse.fromPartial(base ?? {});
|
|
9285
|
-
},
|
|
9286
|
-
fromPartial(object) {
|
|
9287
|
-
const message = createBaseExtendLeafResponse();
|
|
9288
|
-
message.leafId = object.leafId ?? "";
|
|
9289
|
-
message.nodeTxSigningResult = object.nodeTxSigningResult !== void 0 && object.nodeTxSigningResult !== null ? ExtendLeafSigningResult.fromPartial(object.nodeTxSigningResult) : void 0;
|
|
9290
|
-
message.refundTxSigningResult = object.refundTxSigningResult !== void 0 && object.refundTxSigningResult !== null ? ExtendLeafSigningResult.fromPartial(object.refundTxSigningResult) : void 0;
|
|
9291
|
-
message.directNodeTxSigningResult = object.directNodeTxSigningResult !== void 0 && object.directNodeTxSigningResult !== null ? ExtendLeafSigningResult.fromPartial(object.directNodeTxSigningResult) : void 0;
|
|
9292
|
-
message.directRefundTxSigningResult = object.directRefundTxSigningResult !== void 0 && object.directRefundTxSigningResult !== null ? ExtendLeafSigningResult.fromPartial(object.directRefundTxSigningResult) : void 0;
|
|
9293
|
-
message.directFromCpfpRefundTxSigningResult = object.directFromCpfpRefundTxSigningResult !== void 0 && object.directFromCpfpRefundTxSigningResult !== null ? ExtendLeafSigningResult.fromPartial(object.directFromCpfpRefundTxSigningResult) : void 0;
|
|
9294
|
-
return message;
|
|
9295
|
-
}
|
|
9296
|
-
};
|
|
9297
8213
|
function createBaseSigningOperatorInfo() {
|
|
9298
8214
|
return { index: 0, identifier: "", publicKey: new Uint8Array(0), address: "" };
|
|
9299
8215
|
}
|
|
@@ -10543,125 +9459,6 @@ var QueryNodesResponse_NodesEntry = {
|
|
|
10543
9459
|
return message;
|
|
10544
9460
|
}
|
|
10545
9461
|
};
|
|
10546
|
-
function createBaseCancelTransferRequest() {
|
|
10547
|
-
return { transferId: "", senderIdentityPublicKey: new Uint8Array(0) };
|
|
10548
|
-
}
|
|
10549
|
-
var CancelTransferRequest = {
|
|
10550
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
10551
|
-
if (message.transferId !== "") {
|
|
10552
|
-
writer.uint32(10).string(message.transferId);
|
|
10553
|
-
}
|
|
10554
|
-
if (message.senderIdentityPublicKey.length !== 0) {
|
|
10555
|
-
writer.uint32(18).bytes(message.senderIdentityPublicKey);
|
|
10556
|
-
}
|
|
10557
|
-
return writer;
|
|
10558
|
-
},
|
|
10559
|
-
decode(input, length) {
|
|
10560
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
10561
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
10562
|
-
const message = createBaseCancelTransferRequest();
|
|
10563
|
-
while (reader.pos < end) {
|
|
10564
|
-
const tag = reader.uint32();
|
|
10565
|
-
switch (tag >>> 3) {
|
|
10566
|
-
case 1: {
|
|
10567
|
-
if (tag !== 10) {
|
|
10568
|
-
break;
|
|
10569
|
-
}
|
|
10570
|
-
message.transferId = reader.string();
|
|
10571
|
-
continue;
|
|
10572
|
-
}
|
|
10573
|
-
case 2: {
|
|
10574
|
-
if (tag !== 18) {
|
|
10575
|
-
break;
|
|
10576
|
-
}
|
|
10577
|
-
message.senderIdentityPublicKey = reader.bytes();
|
|
10578
|
-
continue;
|
|
10579
|
-
}
|
|
10580
|
-
}
|
|
10581
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
10582
|
-
break;
|
|
10583
|
-
}
|
|
10584
|
-
reader.skip(tag & 7);
|
|
10585
|
-
}
|
|
10586
|
-
return message;
|
|
10587
|
-
},
|
|
10588
|
-
fromJSON(object) {
|
|
10589
|
-
return {
|
|
10590
|
-
transferId: isSet3(object.transferId) ? globalThis.String(object.transferId) : "",
|
|
10591
|
-
senderIdentityPublicKey: isSet3(object.senderIdentityPublicKey) ? bytesFromBase642(object.senderIdentityPublicKey) : new Uint8Array(0)
|
|
10592
|
-
};
|
|
10593
|
-
},
|
|
10594
|
-
toJSON(message) {
|
|
10595
|
-
const obj = {};
|
|
10596
|
-
if (message.transferId !== "") {
|
|
10597
|
-
obj.transferId = message.transferId;
|
|
10598
|
-
}
|
|
10599
|
-
if (message.senderIdentityPublicKey.length !== 0) {
|
|
10600
|
-
obj.senderIdentityPublicKey = base64FromBytes2(message.senderIdentityPublicKey);
|
|
10601
|
-
}
|
|
10602
|
-
return obj;
|
|
10603
|
-
},
|
|
10604
|
-
create(base) {
|
|
10605
|
-
return CancelTransferRequest.fromPartial(base ?? {});
|
|
10606
|
-
},
|
|
10607
|
-
fromPartial(object) {
|
|
10608
|
-
const message = createBaseCancelTransferRequest();
|
|
10609
|
-
message.transferId = object.transferId ?? "";
|
|
10610
|
-
message.senderIdentityPublicKey = object.senderIdentityPublicKey ?? new Uint8Array(0);
|
|
10611
|
-
return message;
|
|
10612
|
-
}
|
|
10613
|
-
};
|
|
10614
|
-
function createBaseCancelTransferResponse() {
|
|
10615
|
-
return { transfer: void 0 };
|
|
10616
|
-
}
|
|
10617
|
-
var CancelTransferResponse = {
|
|
10618
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
10619
|
-
if (message.transfer !== void 0) {
|
|
10620
|
-
Transfer.encode(message.transfer, writer.uint32(10).fork()).join();
|
|
10621
|
-
}
|
|
10622
|
-
return writer;
|
|
10623
|
-
},
|
|
10624
|
-
decode(input, length) {
|
|
10625
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
10626
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
10627
|
-
const message = createBaseCancelTransferResponse();
|
|
10628
|
-
while (reader.pos < end) {
|
|
10629
|
-
const tag = reader.uint32();
|
|
10630
|
-
switch (tag >>> 3) {
|
|
10631
|
-
case 1: {
|
|
10632
|
-
if (tag !== 10) {
|
|
10633
|
-
break;
|
|
10634
|
-
}
|
|
10635
|
-
message.transfer = Transfer.decode(reader, reader.uint32());
|
|
10636
|
-
continue;
|
|
10637
|
-
}
|
|
10638
|
-
}
|
|
10639
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
10640
|
-
break;
|
|
10641
|
-
}
|
|
10642
|
-
reader.skip(tag & 7);
|
|
10643
|
-
}
|
|
10644
|
-
return message;
|
|
10645
|
-
},
|
|
10646
|
-
fromJSON(object) {
|
|
10647
|
-
return { transfer: isSet3(object.transfer) ? Transfer.fromJSON(object.transfer) : void 0 };
|
|
10648
|
-
},
|
|
10649
|
-
toJSON(message) {
|
|
10650
|
-
const obj = {};
|
|
10651
|
-
if (message.transfer !== void 0) {
|
|
10652
|
-
obj.transfer = Transfer.toJSON(message.transfer);
|
|
10653
|
-
}
|
|
10654
|
-
return obj;
|
|
10655
|
-
},
|
|
10656
|
-
create(base) {
|
|
10657
|
-
return CancelTransferResponse.fromPartial(base ?? {});
|
|
10658
|
-
},
|
|
10659
|
-
fromPartial(object) {
|
|
10660
|
-
const message = createBaseCancelTransferResponse();
|
|
10661
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ? Transfer.fromPartial(object.transfer) : void 0;
|
|
10662
|
-
return message;
|
|
10663
|
-
}
|
|
10664
|
-
};
|
|
10665
9462
|
function createBaseQueryUnusedDepositAddressesRequest() {
|
|
10666
9463
|
return { identityPublicKey: new Uint8Array(0), network: 0, limit: 0, offset: 0 };
|
|
10667
9464
|
}
|
|
@@ -11861,267 +10658,6 @@ var InitiateStaticDepositUtxoRefundResponse = {
|
|
|
11861
10658
|
return message;
|
|
11862
10659
|
}
|
|
11863
10660
|
};
|
|
11864
|
-
function createBaseInitiateUtxoSwapRequest() {
|
|
11865
|
-
return {
|
|
11866
|
-
onChainUtxo: void 0,
|
|
11867
|
-
requestType: 0,
|
|
11868
|
-
amount: void 0,
|
|
11869
|
-
sspSignature: new Uint8Array(0),
|
|
11870
|
-
userSignature: new Uint8Array(0),
|
|
11871
|
-
transfer: void 0,
|
|
11872
|
-
spendTxSigningJob: void 0
|
|
11873
|
-
};
|
|
11874
|
-
}
|
|
11875
|
-
var InitiateUtxoSwapRequest = {
|
|
11876
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
11877
|
-
if (message.onChainUtxo !== void 0) {
|
|
11878
|
-
UTXO.encode(message.onChainUtxo, writer.uint32(10).fork()).join();
|
|
11879
|
-
}
|
|
11880
|
-
if (message.requestType !== 0) {
|
|
11881
|
-
writer.uint32(16).int32(message.requestType);
|
|
11882
|
-
}
|
|
11883
|
-
switch (message.amount?.$case) {
|
|
11884
|
-
case "creditAmountSats":
|
|
11885
|
-
writer.uint32(24).uint64(message.amount.creditAmountSats);
|
|
11886
|
-
break;
|
|
11887
|
-
case "maxFeeSats":
|
|
11888
|
-
writer.uint32(32).uint64(message.amount.maxFeeSats);
|
|
11889
|
-
break;
|
|
11890
|
-
}
|
|
11891
|
-
if (message.sspSignature.length !== 0) {
|
|
11892
|
-
writer.uint32(42).bytes(message.sspSignature);
|
|
11893
|
-
}
|
|
11894
|
-
if (message.userSignature.length !== 0) {
|
|
11895
|
-
writer.uint32(50).bytes(message.userSignature);
|
|
11896
|
-
}
|
|
11897
|
-
if (message.transfer !== void 0) {
|
|
11898
|
-
StartTransferRequest.encode(message.transfer, writer.uint32(58).fork()).join();
|
|
11899
|
-
}
|
|
11900
|
-
if (message.spendTxSigningJob !== void 0) {
|
|
11901
|
-
SigningJob.encode(message.spendTxSigningJob, writer.uint32(66).fork()).join();
|
|
11902
|
-
}
|
|
11903
|
-
return writer;
|
|
11904
|
-
},
|
|
11905
|
-
decode(input, length) {
|
|
11906
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
11907
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
11908
|
-
const message = createBaseInitiateUtxoSwapRequest();
|
|
11909
|
-
while (reader.pos < end) {
|
|
11910
|
-
const tag = reader.uint32();
|
|
11911
|
-
switch (tag >>> 3) {
|
|
11912
|
-
case 1: {
|
|
11913
|
-
if (tag !== 10) {
|
|
11914
|
-
break;
|
|
11915
|
-
}
|
|
11916
|
-
message.onChainUtxo = UTXO.decode(reader, reader.uint32());
|
|
11917
|
-
continue;
|
|
11918
|
-
}
|
|
11919
|
-
case 2: {
|
|
11920
|
-
if (tag !== 16) {
|
|
11921
|
-
break;
|
|
11922
|
-
}
|
|
11923
|
-
message.requestType = reader.int32();
|
|
11924
|
-
continue;
|
|
11925
|
-
}
|
|
11926
|
-
case 3: {
|
|
11927
|
-
if (tag !== 24) {
|
|
11928
|
-
break;
|
|
11929
|
-
}
|
|
11930
|
-
message.amount = { $case: "creditAmountSats", creditAmountSats: longToNumber2(reader.uint64()) };
|
|
11931
|
-
continue;
|
|
11932
|
-
}
|
|
11933
|
-
case 4: {
|
|
11934
|
-
if (tag !== 32) {
|
|
11935
|
-
break;
|
|
11936
|
-
}
|
|
11937
|
-
message.amount = { $case: "maxFeeSats", maxFeeSats: longToNumber2(reader.uint64()) };
|
|
11938
|
-
continue;
|
|
11939
|
-
}
|
|
11940
|
-
case 5: {
|
|
11941
|
-
if (tag !== 42) {
|
|
11942
|
-
break;
|
|
11943
|
-
}
|
|
11944
|
-
message.sspSignature = reader.bytes();
|
|
11945
|
-
continue;
|
|
11946
|
-
}
|
|
11947
|
-
case 6: {
|
|
11948
|
-
if (tag !== 50) {
|
|
11949
|
-
break;
|
|
11950
|
-
}
|
|
11951
|
-
message.userSignature = reader.bytes();
|
|
11952
|
-
continue;
|
|
11953
|
-
}
|
|
11954
|
-
case 7: {
|
|
11955
|
-
if (tag !== 58) {
|
|
11956
|
-
break;
|
|
11957
|
-
}
|
|
11958
|
-
message.transfer = StartTransferRequest.decode(reader, reader.uint32());
|
|
11959
|
-
continue;
|
|
11960
|
-
}
|
|
11961
|
-
case 8: {
|
|
11962
|
-
if (tag !== 66) {
|
|
11963
|
-
break;
|
|
11964
|
-
}
|
|
11965
|
-
message.spendTxSigningJob = SigningJob.decode(reader, reader.uint32());
|
|
11966
|
-
continue;
|
|
11967
|
-
}
|
|
11968
|
-
}
|
|
11969
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
11970
|
-
break;
|
|
11971
|
-
}
|
|
11972
|
-
reader.skip(tag & 7);
|
|
11973
|
-
}
|
|
11974
|
-
return message;
|
|
11975
|
-
},
|
|
11976
|
-
fromJSON(object) {
|
|
11977
|
-
return {
|
|
11978
|
-
onChainUtxo: isSet3(object.onChainUtxo) ? UTXO.fromJSON(object.onChainUtxo) : void 0,
|
|
11979
|
-
requestType: isSet3(object.requestType) ? utxoSwapRequestTypeFromJSON(object.requestType) : 0,
|
|
11980
|
-
amount: isSet3(object.creditAmountSats) ? { $case: "creditAmountSats", creditAmountSats: globalThis.Number(object.creditAmountSats) } : isSet3(object.maxFeeSats) ? { $case: "maxFeeSats", maxFeeSats: globalThis.Number(object.maxFeeSats) } : void 0,
|
|
11981
|
-
sspSignature: isSet3(object.sspSignature) ? bytesFromBase642(object.sspSignature) : new Uint8Array(0),
|
|
11982
|
-
userSignature: isSet3(object.userSignature) ? bytesFromBase642(object.userSignature) : new Uint8Array(0),
|
|
11983
|
-
transfer: isSet3(object.transfer) ? StartTransferRequest.fromJSON(object.transfer) : void 0,
|
|
11984
|
-
spendTxSigningJob: isSet3(object.spendTxSigningJob) ? SigningJob.fromJSON(object.spendTxSigningJob) : void 0
|
|
11985
|
-
};
|
|
11986
|
-
},
|
|
11987
|
-
toJSON(message) {
|
|
11988
|
-
const obj = {};
|
|
11989
|
-
if (message.onChainUtxo !== void 0) {
|
|
11990
|
-
obj.onChainUtxo = UTXO.toJSON(message.onChainUtxo);
|
|
11991
|
-
}
|
|
11992
|
-
if (message.requestType !== 0) {
|
|
11993
|
-
obj.requestType = utxoSwapRequestTypeToJSON(message.requestType);
|
|
11994
|
-
}
|
|
11995
|
-
if (message.amount?.$case === "creditAmountSats") {
|
|
11996
|
-
obj.creditAmountSats = Math.round(message.amount.creditAmountSats);
|
|
11997
|
-
} else if (message.amount?.$case === "maxFeeSats") {
|
|
11998
|
-
obj.maxFeeSats = Math.round(message.amount.maxFeeSats);
|
|
11999
|
-
}
|
|
12000
|
-
if (message.sspSignature.length !== 0) {
|
|
12001
|
-
obj.sspSignature = base64FromBytes2(message.sspSignature);
|
|
12002
|
-
}
|
|
12003
|
-
if (message.userSignature.length !== 0) {
|
|
12004
|
-
obj.userSignature = base64FromBytes2(message.userSignature);
|
|
12005
|
-
}
|
|
12006
|
-
if (message.transfer !== void 0) {
|
|
12007
|
-
obj.transfer = StartTransferRequest.toJSON(message.transfer);
|
|
12008
|
-
}
|
|
12009
|
-
if (message.spendTxSigningJob !== void 0) {
|
|
12010
|
-
obj.spendTxSigningJob = SigningJob.toJSON(message.spendTxSigningJob);
|
|
12011
|
-
}
|
|
12012
|
-
return obj;
|
|
12013
|
-
},
|
|
12014
|
-
create(base) {
|
|
12015
|
-
return InitiateUtxoSwapRequest.fromPartial(base ?? {});
|
|
12016
|
-
},
|
|
12017
|
-
fromPartial(object) {
|
|
12018
|
-
const message = createBaseInitiateUtxoSwapRequest();
|
|
12019
|
-
message.onChainUtxo = object.onChainUtxo !== void 0 && object.onChainUtxo !== null ? UTXO.fromPartial(object.onChainUtxo) : void 0;
|
|
12020
|
-
message.requestType = object.requestType ?? 0;
|
|
12021
|
-
switch (object.amount?.$case) {
|
|
12022
|
-
case "creditAmountSats": {
|
|
12023
|
-
if (object.amount?.creditAmountSats !== void 0 && object.amount?.creditAmountSats !== null) {
|
|
12024
|
-
message.amount = { $case: "creditAmountSats", creditAmountSats: object.amount.creditAmountSats };
|
|
12025
|
-
}
|
|
12026
|
-
break;
|
|
12027
|
-
}
|
|
12028
|
-
case "maxFeeSats": {
|
|
12029
|
-
if (object.amount?.maxFeeSats !== void 0 && object.amount?.maxFeeSats !== null) {
|
|
12030
|
-
message.amount = { $case: "maxFeeSats", maxFeeSats: object.amount.maxFeeSats };
|
|
12031
|
-
}
|
|
12032
|
-
break;
|
|
12033
|
-
}
|
|
12034
|
-
}
|
|
12035
|
-
message.sspSignature = object.sspSignature ?? new Uint8Array(0);
|
|
12036
|
-
message.userSignature = object.userSignature ?? new Uint8Array(0);
|
|
12037
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ? StartTransferRequest.fromPartial(object.transfer) : void 0;
|
|
12038
|
-
message.spendTxSigningJob = object.spendTxSigningJob !== void 0 && object.spendTxSigningJob !== null ? SigningJob.fromPartial(object.spendTxSigningJob) : void 0;
|
|
12039
|
-
return message;
|
|
12040
|
-
}
|
|
12041
|
-
};
|
|
12042
|
-
function createBaseInitiateUtxoSwapResponse() {
|
|
12043
|
-
return { spendTxSigningResult: void 0, transfer: void 0, depositAddress: void 0 };
|
|
12044
|
-
}
|
|
12045
|
-
var InitiateUtxoSwapResponse = {
|
|
12046
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12047
|
-
if (message.spendTxSigningResult !== void 0) {
|
|
12048
|
-
SigningResult.encode(message.spendTxSigningResult, writer.uint32(10).fork()).join();
|
|
12049
|
-
}
|
|
12050
|
-
if (message.transfer !== void 0) {
|
|
12051
|
-
Transfer.encode(message.transfer, writer.uint32(18).fork()).join();
|
|
12052
|
-
}
|
|
12053
|
-
if (message.depositAddress !== void 0) {
|
|
12054
|
-
DepositAddressQueryResult.encode(message.depositAddress, writer.uint32(26).fork()).join();
|
|
12055
|
-
}
|
|
12056
|
-
return writer;
|
|
12057
|
-
},
|
|
12058
|
-
decode(input, length) {
|
|
12059
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12060
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12061
|
-
const message = createBaseInitiateUtxoSwapResponse();
|
|
12062
|
-
while (reader.pos < end) {
|
|
12063
|
-
const tag = reader.uint32();
|
|
12064
|
-
switch (tag >>> 3) {
|
|
12065
|
-
case 1: {
|
|
12066
|
-
if (tag !== 10) {
|
|
12067
|
-
break;
|
|
12068
|
-
}
|
|
12069
|
-
message.spendTxSigningResult = SigningResult.decode(reader, reader.uint32());
|
|
12070
|
-
continue;
|
|
12071
|
-
}
|
|
12072
|
-
case 2: {
|
|
12073
|
-
if (tag !== 18) {
|
|
12074
|
-
break;
|
|
12075
|
-
}
|
|
12076
|
-
message.transfer = Transfer.decode(reader, reader.uint32());
|
|
12077
|
-
continue;
|
|
12078
|
-
}
|
|
12079
|
-
case 3: {
|
|
12080
|
-
if (tag !== 26) {
|
|
12081
|
-
break;
|
|
12082
|
-
}
|
|
12083
|
-
message.depositAddress = DepositAddressQueryResult.decode(reader, reader.uint32());
|
|
12084
|
-
continue;
|
|
12085
|
-
}
|
|
12086
|
-
}
|
|
12087
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12088
|
-
break;
|
|
12089
|
-
}
|
|
12090
|
-
reader.skip(tag & 7);
|
|
12091
|
-
}
|
|
12092
|
-
return message;
|
|
12093
|
-
},
|
|
12094
|
-
fromJSON(object) {
|
|
12095
|
-
return {
|
|
12096
|
-
spendTxSigningResult: isSet3(object.spendTxSigningResult) ? SigningResult.fromJSON(object.spendTxSigningResult) : void 0,
|
|
12097
|
-
transfer: isSet3(object.transfer) ? Transfer.fromJSON(object.transfer) : void 0,
|
|
12098
|
-
depositAddress: isSet3(object.depositAddress) ? DepositAddressQueryResult.fromJSON(object.depositAddress) : void 0
|
|
12099
|
-
};
|
|
12100
|
-
},
|
|
12101
|
-
toJSON(message) {
|
|
12102
|
-
const obj = {};
|
|
12103
|
-
if (message.spendTxSigningResult !== void 0) {
|
|
12104
|
-
obj.spendTxSigningResult = SigningResult.toJSON(message.spendTxSigningResult);
|
|
12105
|
-
}
|
|
12106
|
-
if (message.transfer !== void 0) {
|
|
12107
|
-
obj.transfer = Transfer.toJSON(message.transfer);
|
|
12108
|
-
}
|
|
12109
|
-
if (message.depositAddress !== void 0) {
|
|
12110
|
-
obj.depositAddress = DepositAddressQueryResult.toJSON(message.depositAddress);
|
|
12111
|
-
}
|
|
12112
|
-
return obj;
|
|
12113
|
-
},
|
|
12114
|
-
create(base) {
|
|
12115
|
-
return InitiateUtxoSwapResponse.fromPartial(base ?? {});
|
|
12116
|
-
},
|
|
12117
|
-
fromPartial(object) {
|
|
12118
|
-
const message = createBaseInitiateUtxoSwapResponse();
|
|
12119
|
-
message.spendTxSigningResult = object.spendTxSigningResult !== void 0 && object.spendTxSigningResult !== null ? SigningResult.fromPartial(object.spendTxSigningResult) : void 0;
|
|
12120
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ? Transfer.fromPartial(object.transfer) : void 0;
|
|
12121
|
-
message.depositAddress = object.depositAddress !== void 0 && object.depositAddress !== null ? DepositAddressQueryResult.fromPartial(object.depositAddress) : void 0;
|
|
12122
|
-
return message;
|
|
12123
|
-
}
|
|
12124
|
-
};
|
|
12125
10661
|
function createBaseExitingTree() {
|
|
12126
10662
|
return { treeId: "", userSigningCommitment: void 0, vin: 0 };
|
|
12127
10663
|
}
|
|
@@ -12507,451 +11043,6 @@ var ExitSingleNodeTreesResponse = {
|
|
|
12507
11043
|
return message;
|
|
12508
11044
|
}
|
|
12509
11045
|
};
|
|
12510
|
-
function createBaseQueryNodesDistributionRequest() {
|
|
12511
|
-
return { ownerIdentityPublicKey: new Uint8Array(0) };
|
|
12512
|
-
}
|
|
12513
|
-
var QueryNodesDistributionRequest = {
|
|
12514
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12515
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
12516
|
-
writer.uint32(10).bytes(message.ownerIdentityPublicKey);
|
|
12517
|
-
}
|
|
12518
|
-
return writer;
|
|
12519
|
-
},
|
|
12520
|
-
decode(input, length) {
|
|
12521
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12522
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12523
|
-
const message = createBaseQueryNodesDistributionRequest();
|
|
12524
|
-
while (reader.pos < end) {
|
|
12525
|
-
const tag = reader.uint32();
|
|
12526
|
-
switch (tag >>> 3) {
|
|
12527
|
-
case 1: {
|
|
12528
|
-
if (tag !== 10) {
|
|
12529
|
-
break;
|
|
12530
|
-
}
|
|
12531
|
-
message.ownerIdentityPublicKey = reader.bytes();
|
|
12532
|
-
continue;
|
|
12533
|
-
}
|
|
12534
|
-
}
|
|
12535
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12536
|
-
break;
|
|
12537
|
-
}
|
|
12538
|
-
reader.skip(tag & 7);
|
|
12539
|
-
}
|
|
12540
|
-
return message;
|
|
12541
|
-
},
|
|
12542
|
-
fromJSON(object) {
|
|
12543
|
-
return {
|
|
12544
|
-
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0)
|
|
12545
|
-
};
|
|
12546
|
-
},
|
|
12547
|
-
toJSON(message) {
|
|
12548
|
-
const obj = {};
|
|
12549
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
12550
|
-
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
12551
|
-
}
|
|
12552
|
-
return obj;
|
|
12553
|
-
},
|
|
12554
|
-
create(base) {
|
|
12555
|
-
return QueryNodesDistributionRequest.fromPartial(base ?? {});
|
|
12556
|
-
},
|
|
12557
|
-
fromPartial(object) {
|
|
12558
|
-
const message = createBaseQueryNodesDistributionRequest();
|
|
12559
|
-
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
12560
|
-
return message;
|
|
12561
|
-
}
|
|
12562
|
-
};
|
|
12563
|
-
function createBaseQueryNodesDistributionResponse() {
|
|
12564
|
-
return { nodeDistribution: {} };
|
|
12565
|
-
}
|
|
12566
|
-
var QueryNodesDistributionResponse = {
|
|
12567
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12568
|
-
Object.entries(message.nodeDistribution).forEach(([key, value]) => {
|
|
12569
|
-
QueryNodesDistributionResponse_NodeDistributionEntry.encode({ key, value }, writer.uint32(10).fork()).join();
|
|
12570
|
-
});
|
|
12571
|
-
return writer;
|
|
12572
|
-
},
|
|
12573
|
-
decode(input, length) {
|
|
12574
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12575
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12576
|
-
const message = createBaseQueryNodesDistributionResponse();
|
|
12577
|
-
while (reader.pos < end) {
|
|
12578
|
-
const tag = reader.uint32();
|
|
12579
|
-
switch (tag >>> 3) {
|
|
12580
|
-
case 1: {
|
|
12581
|
-
if (tag !== 10) {
|
|
12582
|
-
break;
|
|
12583
|
-
}
|
|
12584
|
-
const entry1 = QueryNodesDistributionResponse_NodeDistributionEntry.decode(reader, reader.uint32());
|
|
12585
|
-
if (entry1.value !== void 0) {
|
|
12586
|
-
message.nodeDistribution[entry1.key] = entry1.value;
|
|
12587
|
-
}
|
|
12588
|
-
continue;
|
|
12589
|
-
}
|
|
12590
|
-
}
|
|
12591
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12592
|
-
break;
|
|
12593
|
-
}
|
|
12594
|
-
reader.skip(tag & 7);
|
|
12595
|
-
}
|
|
12596
|
-
return message;
|
|
12597
|
-
},
|
|
12598
|
-
fromJSON(object) {
|
|
12599
|
-
return {
|
|
12600
|
-
nodeDistribution: isObject(object.nodeDistribution) ? Object.entries(object.nodeDistribution).reduce((acc, [key, value]) => {
|
|
12601
|
-
acc[globalThis.Number(key)] = Number(value);
|
|
12602
|
-
return acc;
|
|
12603
|
-
}, {}) : {}
|
|
12604
|
-
};
|
|
12605
|
-
},
|
|
12606
|
-
toJSON(message) {
|
|
12607
|
-
const obj = {};
|
|
12608
|
-
if (message.nodeDistribution) {
|
|
12609
|
-
const entries = Object.entries(message.nodeDistribution);
|
|
12610
|
-
if (entries.length > 0) {
|
|
12611
|
-
obj.nodeDistribution = {};
|
|
12612
|
-
entries.forEach(([k, v]) => {
|
|
12613
|
-
obj.nodeDistribution[k] = Math.round(v);
|
|
12614
|
-
});
|
|
12615
|
-
}
|
|
12616
|
-
}
|
|
12617
|
-
return obj;
|
|
12618
|
-
},
|
|
12619
|
-
create(base) {
|
|
12620
|
-
return QueryNodesDistributionResponse.fromPartial(base ?? {});
|
|
12621
|
-
},
|
|
12622
|
-
fromPartial(object) {
|
|
12623
|
-
const message = createBaseQueryNodesDistributionResponse();
|
|
12624
|
-
message.nodeDistribution = Object.entries(object.nodeDistribution ?? {}).reduce(
|
|
12625
|
-
(acc, [key, value]) => {
|
|
12626
|
-
if (value !== void 0) {
|
|
12627
|
-
acc[globalThis.Number(key)] = globalThis.Number(value);
|
|
12628
|
-
}
|
|
12629
|
-
return acc;
|
|
12630
|
-
},
|
|
12631
|
-
{}
|
|
12632
|
-
);
|
|
12633
|
-
return message;
|
|
12634
|
-
}
|
|
12635
|
-
};
|
|
12636
|
-
function createBaseQueryNodesDistributionResponse_NodeDistributionEntry() {
|
|
12637
|
-
return { key: 0, value: 0 };
|
|
12638
|
-
}
|
|
12639
|
-
var QueryNodesDistributionResponse_NodeDistributionEntry = {
|
|
12640
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12641
|
-
if (message.key !== 0) {
|
|
12642
|
-
writer.uint32(8).uint64(message.key);
|
|
12643
|
-
}
|
|
12644
|
-
if (message.value !== 0) {
|
|
12645
|
-
writer.uint32(16).uint64(message.value);
|
|
12646
|
-
}
|
|
12647
|
-
return writer;
|
|
12648
|
-
},
|
|
12649
|
-
decode(input, length) {
|
|
12650
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12651
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12652
|
-
const message = createBaseQueryNodesDistributionResponse_NodeDistributionEntry();
|
|
12653
|
-
while (reader.pos < end) {
|
|
12654
|
-
const tag = reader.uint32();
|
|
12655
|
-
switch (tag >>> 3) {
|
|
12656
|
-
case 1: {
|
|
12657
|
-
if (tag !== 8) {
|
|
12658
|
-
break;
|
|
12659
|
-
}
|
|
12660
|
-
message.key = longToNumber2(reader.uint64());
|
|
12661
|
-
continue;
|
|
12662
|
-
}
|
|
12663
|
-
case 2: {
|
|
12664
|
-
if (tag !== 16) {
|
|
12665
|
-
break;
|
|
12666
|
-
}
|
|
12667
|
-
message.value = longToNumber2(reader.uint64());
|
|
12668
|
-
continue;
|
|
12669
|
-
}
|
|
12670
|
-
}
|
|
12671
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12672
|
-
break;
|
|
12673
|
-
}
|
|
12674
|
-
reader.skip(tag & 7);
|
|
12675
|
-
}
|
|
12676
|
-
return message;
|
|
12677
|
-
},
|
|
12678
|
-
fromJSON(object) {
|
|
12679
|
-
return {
|
|
12680
|
-
key: isSet3(object.key) ? globalThis.Number(object.key) : 0,
|
|
12681
|
-
value: isSet3(object.value) ? globalThis.Number(object.value) : 0
|
|
12682
|
-
};
|
|
12683
|
-
},
|
|
12684
|
-
toJSON(message) {
|
|
12685
|
-
const obj = {};
|
|
12686
|
-
if (message.key !== 0) {
|
|
12687
|
-
obj.key = Math.round(message.key);
|
|
12688
|
-
}
|
|
12689
|
-
if (message.value !== 0) {
|
|
12690
|
-
obj.value = Math.round(message.value);
|
|
12691
|
-
}
|
|
12692
|
-
return obj;
|
|
12693
|
-
},
|
|
12694
|
-
create(base) {
|
|
12695
|
-
return QueryNodesDistributionResponse_NodeDistributionEntry.fromPartial(base ?? {});
|
|
12696
|
-
},
|
|
12697
|
-
fromPartial(object) {
|
|
12698
|
-
const message = createBaseQueryNodesDistributionResponse_NodeDistributionEntry();
|
|
12699
|
-
message.key = object.key ?? 0;
|
|
12700
|
-
message.value = object.value ?? 0;
|
|
12701
|
-
return message;
|
|
12702
|
-
}
|
|
12703
|
-
};
|
|
12704
|
-
function createBaseQueryNodesByValueRequest() {
|
|
12705
|
-
return { ownerIdentityPublicKey: new Uint8Array(0), value: 0, offset: 0, limit: 0 };
|
|
12706
|
-
}
|
|
12707
|
-
var QueryNodesByValueRequest = {
|
|
12708
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12709
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
12710
|
-
writer.uint32(10).bytes(message.ownerIdentityPublicKey);
|
|
12711
|
-
}
|
|
12712
|
-
if (message.value !== 0) {
|
|
12713
|
-
writer.uint32(16).int64(message.value);
|
|
12714
|
-
}
|
|
12715
|
-
if (message.offset !== 0) {
|
|
12716
|
-
writer.uint32(24).int64(message.offset);
|
|
12717
|
-
}
|
|
12718
|
-
if (message.limit !== 0) {
|
|
12719
|
-
writer.uint32(32).int64(message.limit);
|
|
12720
|
-
}
|
|
12721
|
-
return writer;
|
|
12722
|
-
},
|
|
12723
|
-
decode(input, length) {
|
|
12724
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12725
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12726
|
-
const message = createBaseQueryNodesByValueRequest();
|
|
12727
|
-
while (reader.pos < end) {
|
|
12728
|
-
const tag = reader.uint32();
|
|
12729
|
-
switch (tag >>> 3) {
|
|
12730
|
-
case 1: {
|
|
12731
|
-
if (tag !== 10) {
|
|
12732
|
-
break;
|
|
12733
|
-
}
|
|
12734
|
-
message.ownerIdentityPublicKey = reader.bytes();
|
|
12735
|
-
continue;
|
|
12736
|
-
}
|
|
12737
|
-
case 2: {
|
|
12738
|
-
if (tag !== 16) {
|
|
12739
|
-
break;
|
|
12740
|
-
}
|
|
12741
|
-
message.value = longToNumber2(reader.int64());
|
|
12742
|
-
continue;
|
|
12743
|
-
}
|
|
12744
|
-
case 3: {
|
|
12745
|
-
if (tag !== 24) {
|
|
12746
|
-
break;
|
|
12747
|
-
}
|
|
12748
|
-
message.offset = longToNumber2(reader.int64());
|
|
12749
|
-
continue;
|
|
12750
|
-
}
|
|
12751
|
-
case 4: {
|
|
12752
|
-
if (tag !== 32) {
|
|
12753
|
-
break;
|
|
12754
|
-
}
|
|
12755
|
-
message.limit = longToNumber2(reader.int64());
|
|
12756
|
-
continue;
|
|
12757
|
-
}
|
|
12758
|
-
}
|
|
12759
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12760
|
-
break;
|
|
12761
|
-
}
|
|
12762
|
-
reader.skip(tag & 7);
|
|
12763
|
-
}
|
|
12764
|
-
return message;
|
|
12765
|
-
},
|
|
12766
|
-
fromJSON(object) {
|
|
12767
|
-
return {
|
|
12768
|
-
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
12769
|
-
value: isSet3(object.value) ? globalThis.Number(object.value) : 0,
|
|
12770
|
-
offset: isSet3(object.offset) ? globalThis.Number(object.offset) : 0,
|
|
12771
|
-
limit: isSet3(object.limit) ? globalThis.Number(object.limit) : 0
|
|
12772
|
-
};
|
|
12773
|
-
},
|
|
12774
|
-
toJSON(message) {
|
|
12775
|
-
const obj = {};
|
|
12776
|
-
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
12777
|
-
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
12778
|
-
}
|
|
12779
|
-
if (message.value !== 0) {
|
|
12780
|
-
obj.value = Math.round(message.value);
|
|
12781
|
-
}
|
|
12782
|
-
if (message.offset !== 0) {
|
|
12783
|
-
obj.offset = Math.round(message.offset);
|
|
12784
|
-
}
|
|
12785
|
-
if (message.limit !== 0) {
|
|
12786
|
-
obj.limit = Math.round(message.limit);
|
|
12787
|
-
}
|
|
12788
|
-
return obj;
|
|
12789
|
-
},
|
|
12790
|
-
create(base) {
|
|
12791
|
-
return QueryNodesByValueRequest.fromPartial(base ?? {});
|
|
12792
|
-
},
|
|
12793
|
-
fromPartial(object) {
|
|
12794
|
-
const message = createBaseQueryNodesByValueRequest();
|
|
12795
|
-
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
12796
|
-
message.value = object.value ?? 0;
|
|
12797
|
-
message.offset = object.offset ?? 0;
|
|
12798
|
-
message.limit = object.limit ?? 0;
|
|
12799
|
-
return message;
|
|
12800
|
-
}
|
|
12801
|
-
};
|
|
12802
|
-
function createBaseQueryNodesByValueResponse() {
|
|
12803
|
-
return { nodes: {}, offset: 0 };
|
|
12804
|
-
}
|
|
12805
|
-
var QueryNodesByValueResponse = {
|
|
12806
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12807
|
-
Object.entries(message.nodes).forEach(([key, value]) => {
|
|
12808
|
-
QueryNodesByValueResponse_NodesEntry.encode({ key, value }, writer.uint32(10).fork()).join();
|
|
12809
|
-
});
|
|
12810
|
-
if (message.offset !== 0) {
|
|
12811
|
-
writer.uint32(16).int64(message.offset);
|
|
12812
|
-
}
|
|
12813
|
-
return writer;
|
|
12814
|
-
},
|
|
12815
|
-
decode(input, length) {
|
|
12816
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12817
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12818
|
-
const message = createBaseQueryNodesByValueResponse();
|
|
12819
|
-
while (reader.pos < end) {
|
|
12820
|
-
const tag = reader.uint32();
|
|
12821
|
-
switch (tag >>> 3) {
|
|
12822
|
-
case 1: {
|
|
12823
|
-
if (tag !== 10) {
|
|
12824
|
-
break;
|
|
12825
|
-
}
|
|
12826
|
-
const entry1 = QueryNodesByValueResponse_NodesEntry.decode(reader, reader.uint32());
|
|
12827
|
-
if (entry1.value !== void 0) {
|
|
12828
|
-
message.nodes[entry1.key] = entry1.value;
|
|
12829
|
-
}
|
|
12830
|
-
continue;
|
|
12831
|
-
}
|
|
12832
|
-
case 2: {
|
|
12833
|
-
if (tag !== 16) {
|
|
12834
|
-
break;
|
|
12835
|
-
}
|
|
12836
|
-
message.offset = longToNumber2(reader.int64());
|
|
12837
|
-
continue;
|
|
12838
|
-
}
|
|
12839
|
-
}
|
|
12840
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12841
|
-
break;
|
|
12842
|
-
}
|
|
12843
|
-
reader.skip(tag & 7);
|
|
12844
|
-
}
|
|
12845
|
-
return message;
|
|
12846
|
-
},
|
|
12847
|
-
fromJSON(object) {
|
|
12848
|
-
return {
|
|
12849
|
-
nodes: isObject(object.nodes) ? Object.entries(object.nodes).reduce((acc, [key, value]) => {
|
|
12850
|
-
acc[key] = TreeNode.fromJSON(value);
|
|
12851
|
-
return acc;
|
|
12852
|
-
}, {}) : {},
|
|
12853
|
-
offset: isSet3(object.offset) ? globalThis.Number(object.offset) : 0
|
|
12854
|
-
};
|
|
12855
|
-
},
|
|
12856
|
-
toJSON(message) {
|
|
12857
|
-
const obj = {};
|
|
12858
|
-
if (message.nodes) {
|
|
12859
|
-
const entries = Object.entries(message.nodes);
|
|
12860
|
-
if (entries.length > 0) {
|
|
12861
|
-
obj.nodes = {};
|
|
12862
|
-
entries.forEach(([k, v]) => {
|
|
12863
|
-
obj.nodes[k] = TreeNode.toJSON(v);
|
|
12864
|
-
});
|
|
12865
|
-
}
|
|
12866
|
-
}
|
|
12867
|
-
if (message.offset !== 0) {
|
|
12868
|
-
obj.offset = Math.round(message.offset);
|
|
12869
|
-
}
|
|
12870
|
-
return obj;
|
|
12871
|
-
},
|
|
12872
|
-
create(base) {
|
|
12873
|
-
return QueryNodesByValueResponse.fromPartial(base ?? {});
|
|
12874
|
-
},
|
|
12875
|
-
fromPartial(object) {
|
|
12876
|
-
const message = createBaseQueryNodesByValueResponse();
|
|
12877
|
-
message.nodes = Object.entries(object.nodes ?? {}).reduce((acc, [key, value]) => {
|
|
12878
|
-
if (value !== void 0) {
|
|
12879
|
-
acc[key] = TreeNode.fromPartial(value);
|
|
12880
|
-
}
|
|
12881
|
-
return acc;
|
|
12882
|
-
}, {});
|
|
12883
|
-
message.offset = object.offset ?? 0;
|
|
12884
|
-
return message;
|
|
12885
|
-
}
|
|
12886
|
-
};
|
|
12887
|
-
function createBaseQueryNodesByValueResponse_NodesEntry() {
|
|
12888
|
-
return { key: "", value: void 0 };
|
|
12889
|
-
}
|
|
12890
|
-
var QueryNodesByValueResponse_NodesEntry = {
|
|
12891
|
-
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
12892
|
-
if (message.key !== "") {
|
|
12893
|
-
writer.uint32(10).string(message.key);
|
|
12894
|
-
}
|
|
12895
|
-
if (message.value !== void 0) {
|
|
12896
|
-
TreeNode.encode(message.value, writer.uint32(18).fork()).join();
|
|
12897
|
-
}
|
|
12898
|
-
return writer;
|
|
12899
|
-
},
|
|
12900
|
-
decode(input, length) {
|
|
12901
|
-
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
12902
|
-
const end = length === void 0 ? reader.len : reader.pos + length;
|
|
12903
|
-
const message = createBaseQueryNodesByValueResponse_NodesEntry();
|
|
12904
|
-
while (reader.pos < end) {
|
|
12905
|
-
const tag = reader.uint32();
|
|
12906
|
-
switch (tag >>> 3) {
|
|
12907
|
-
case 1: {
|
|
12908
|
-
if (tag !== 10) {
|
|
12909
|
-
break;
|
|
12910
|
-
}
|
|
12911
|
-
message.key = reader.string();
|
|
12912
|
-
continue;
|
|
12913
|
-
}
|
|
12914
|
-
case 2: {
|
|
12915
|
-
if (tag !== 18) {
|
|
12916
|
-
break;
|
|
12917
|
-
}
|
|
12918
|
-
message.value = TreeNode.decode(reader, reader.uint32());
|
|
12919
|
-
continue;
|
|
12920
|
-
}
|
|
12921
|
-
}
|
|
12922
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
12923
|
-
break;
|
|
12924
|
-
}
|
|
12925
|
-
reader.skip(tag & 7);
|
|
12926
|
-
}
|
|
12927
|
-
return message;
|
|
12928
|
-
},
|
|
12929
|
-
fromJSON(object) {
|
|
12930
|
-
return {
|
|
12931
|
-
key: isSet3(object.key) ? globalThis.String(object.key) : "",
|
|
12932
|
-
value: isSet3(object.value) ? TreeNode.fromJSON(object.value) : void 0
|
|
12933
|
-
};
|
|
12934
|
-
},
|
|
12935
|
-
toJSON(message) {
|
|
12936
|
-
const obj = {};
|
|
12937
|
-
if (message.key !== "") {
|
|
12938
|
-
obj.key = message.key;
|
|
12939
|
-
}
|
|
12940
|
-
if (message.value !== void 0) {
|
|
12941
|
-
obj.value = TreeNode.toJSON(message.value);
|
|
12942
|
-
}
|
|
12943
|
-
return obj;
|
|
12944
|
-
},
|
|
12945
|
-
create(base) {
|
|
12946
|
-
return QueryNodesByValueResponse_NodesEntry.fromPartial(base ?? {});
|
|
12947
|
-
},
|
|
12948
|
-
fromPartial(object) {
|
|
12949
|
-
const message = createBaseQueryNodesByValueResponse_NodesEntry();
|
|
12950
|
-
message.key = object.key ?? "";
|
|
12951
|
-
message.value = object.value !== void 0 && object.value !== null ? TreeNode.fromPartial(object.value) : void 0;
|
|
12952
|
-
return message;
|
|
12953
|
-
}
|
|
12954
|
-
};
|
|
12955
11046
|
function createBaseGetUtxosForAddressRequest() {
|
|
12956
11047
|
return { address: "", offset: 0, limit: 0, network: 0, excludeClaimed: false };
|
|
12957
11048
|
}
|
|
@@ -13731,7 +11822,7 @@ var AdaptorPublicKeyPackage = {
|
|
|
13731
11822
|
}
|
|
13732
11823
|
};
|
|
13733
11824
|
function createBaseWalletSetting() {
|
|
13734
|
-
return { ownerIdentityPublicKey: new Uint8Array(0), privateEnabled: false };
|
|
11825
|
+
return { ownerIdentityPublicKey: new Uint8Array(0), privateEnabled: false, masterIdentityPublicKey: void 0 };
|
|
13735
11826
|
}
|
|
13736
11827
|
var WalletSetting = {
|
|
13737
11828
|
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
@@ -13741,6 +11832,9 @@ var WalletSetting = {
|
|
|
13741
11832
|
if (message.privateEnabled !== false) {
|
|
13742
11833
|
writer.uint32(16).bool(message.privateEnabled);
|
|
13743
11834
|
}
|
|
11835
|
+
if (message.masterIdentityPublicKey !== void 0) {
|
|
11836
|
+
writer.uint32(26).bytes(message.masterIdentityPublicKey);
|
|
11837
|
+
}
|
|
13744
11838
|
return writer;
|
|
13745
11839
|
},
|
|
13746
11840
|
decode(input, length) {
|
|
@@ -13764,6 +11858,13 @@ var WalletSetting = {
|
|
|
13764
11858
|
message.privateEnabled = reader.bool();
|
|
13765
11859
|
continue;
|
|
13766
11860
|
}
|
|
11861
|
+
case 3: {
|
|
11862
|
+
if (tag !== 26) {
|
|
11863
|
+
break;
|
|
11864
|
+
}
|
|
11865
|
+
message.masterIdentityPublicKey = reader.bytes();
|
|
11866
|
+
continue;
|
|
11867
|
+
}
|
|
13767
11868
|
}
|
|
13768
11869
|
if ((tag & 7) === 4 || tag === 0) {
|
|
13769
11870
|
break;
|
|
@@ -13775,7 +11876,8 @@ var WalletSetting = {
|
|
|
13775
11876
|
fromJSON(object) {
|
|
13776
11877
|
return {
|
|
13777
11878
|
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
13778
|
-
privateEnabled: isSet3(object.privateEnabled) ? globalThis.Boolean(object.privateEnabled) : false
|
|
11879
|
+
privateEnabled: isSet3(object.privateEnabled) ? globalThis.Boolean(object.privateEnabled) : false,
|
|
11880
|
+
masterIdentityPublicKey: isSet3(object.masterIdentityPublicKey) ? bytesFromBase642(object.masterIdentityPublicKey) : void 0
|
|
13779
11881
|
};
|
|
13780
11882
|
},
|
|
13781
11883
|
toJSON(message) {
|
|
@@ -13786,6 +11888,9 @@ var WalletSetting = {
|
|
|
13786
11888
|
if (message.privateEnabled !== false) {
|
|
13787
11889
|
obj.privateEnabled = message.privateEnabled;
|
|
13788
11890
|
}
|
|
11891
|
+
if (message.masterIdentityPublicKey !== void 0) {
|
|
11892
|
+
obj.masterIdentityPublicKey = base64FromBytes2(message.masterIdentityPublicKey);
|
|
11893
|
+
}
|
|
13789
11894
|
return obj;
|
|
13790
11895
|
},
|
|
13791
11896
|
create(base) {
|
|
@@ -13795,17 +11900,26 @@ var WalletSetting = {
|
|
|
13795
11900
|
const message = createBaseWalletSetting();
|
|
13796
11901
|
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
13797
11902
|
message.privateEnabled = object.privateEnabled ?? false;
|
|
11903
|
+
message.masterIdentityPublicKey = object.masterIdentityPublicKey ?? void 0;
|
|
13798
11904
|
return message;
|
|
13799
11905
|
}
|
|
13800
11906
|
};
|
|
13801
11907
|
function createBaseUpdateWalletSettingRequest() {
|
|
13802
|
-
return { privateEnabled: void 0 };
|
|
11908
|
+
return { privateEnabled: void 0, masterIdentityPublicKey: void 0 };
|
|
13803
11909
|
}
|
|
13804
11910
|
var UpdateWalletSettingRequest = {
|
|
13805
11911
|
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
13806
11912
|
if (message.privateEnabled !== void 0) {
|
|
13807
11913
|
writer.uint32(8).bool(message.privateEnabled);
|
|
13808
11914
|
}
|
|
11915
|
+
switch (message.masterIdentityPublicKey?.$case) {
|
|
11916
|
+
case "setMasterIdentityPublicKey":
|
|
11917
|
+
writer.uint32(18).bytes(message.masterIdentityPublicKey.setMasterIdentityPublicKey);
|
|
11918
|
+
break;
|
|
11919
|
+
case "clearMasterIdentityPublicKey":
|
|
11920
|
+
writer.uint32(24).bool(message.masterIdentityPublicKey.clearMasterIdentityPublicKey);
|
|
11921
|
+
break;
|
|
11922
|
+
}
|
|
13809
11923
|
return writer;
|
|
13810
11924
|
},
|
|
13811
11925
|
decode(input, length) {
|
|
@@ -13822,6 +11936,26 @@ var UpdateWalletSettingRequest = {
|
|
|
13822
11936
|
message.privateEnabled = reader.bool();
|
|
13823
11937
|
continue;
|
|
13824
11938
|
}
|
|
11939
|
+
case 2: {
|
|
11940
|
+
if (tag !== 18) {
|
|
11941
|
+
break;
|
|
11942
|
+
}
|
|
11943
|
+
message.masterIdentityPublicKey = {
|
|
11944
|
+
$case: "setMasterIdentityPublicKey",
|
|
11945
|
+
setMasterIdentityPublicKey: reader.bytes()
|
|
11946
|
+
};
|
|
11947
|
+
continue;
|
|
11948
|
+
}
|
|
11949
|
+
case 3: {
|
|
11950
|
+
if (tag !== 24) {
|
|
11951
|
+
break;
|
|
11952
|
+
}
|
|
11953
|
+
message.masterIdentityPublicKey = {
|
|
11954
|
+
$case: "clearMasterIdentityPublicKey",
|
|
11955
|
+
clearMasterIdentityPublicKey: reader.bool()
|
|
11956
|
+
};
|
|
11957
|
+
continue;
|
|
11958
|
+
}
|
|
13825
11959
|
}
|
|
13826
11960
|
if ((tag & 7) === 4 || tag === 0) {
|
|
13827
11961
|
break;
|
|
@@ -13831,13 +11965,27 @@ var UpdateWalletSettingRequest = {
|
|
|
13831
11965
|
return message;
|
|
13832
11966
|
},
|
|
13833
11967
|
fromJSON(object) {
|
|
13834
|
-
return {
|
|
11968
|
+
return {
|
|
11969
|
+
privateEnabled: isSet3(object.privateEnabled) ? globalThis.Boolean(object.privateEnabled) : void 0,
|
|
11970
|
+
masterIdentityPublicKey: isSet3(object.setMasterIdentityPublicKey) ? {
|
|
11971
|
+
$case: "setMasterIdentityPublicKey",
|
|
11972
|
+
setMasterIdentityPublicKey: bytesFromBase642(object.setMasterIdentityPublicKey)
|
|
11973
|
+
} : isSet3(object.clearMasterIdentityPublicKey) ? {
|
|
11974
|
+
$case: "clearMasterIdentityPublicKey",
|
|
11975
|
+
clearMasterIdentityPublicKey: globalThis.Boolean(object.clearMasterIdentityPublicKey)
|
|
11976
|
+
} : void 0
|
|
11977
|
+
};
|
|
13835
11978
|
},
|
|
13836
11979
|
toJSON(message) {
|
|
13837
11980
|
const obj = {};
|
|
13838
11981
|
if (message.privateEnabled !== void 0) {
|
|
13839
11982
|
obj.privateEnabled = message.privateEnabled;
|
|
13840
11983
|
}
|
|
11984
|
+
if (message.masterIdentityPublicKey?.$case === "setMasterIdentityPublicKey") {
|
|
11985
|
+
obj.setMasterIdentityPublicKey = base64FromBytes2(message.masterIdentityPublicKey.setMasterIdentityPublicKey);
|
|
11986
|
+
} else if (message.masterIdentityPublicKey?.$case === "clearMasterIdentityPublicKey") {
|
|
11987
|
+
obj.clearMasterIdentityPublicKey = message.masterIdentityPublicKey.clearMasterIdentityPublicKey;
|
|
11988
|
+
}
|
|
13841
11989
|
return obj;
|
|
13842
11990
|
},
|
|
13843
11991
|
create(base) {
|
|
@@ -13846,6 +11994,26 @@ var UpdateWalletSettingRequest = {
|
|
|
13846
11994
|
fromPartial(object) {
|
|
13847
11995
|
const message = createBaseUpdateWalletSettingRequest();
|
|
13848
11996
|
message.privateEnabled = object.privateEnabled ?? void 0;
|
|
11997
|
+
switch (object.masterIdentityPublicKey?.$case) {
|
|
11998
|
+
case "setMasterIdentityPublicKey": {
|
|
11999
|
+
if (object.masterIdentityPublicKey?.setMasterIdentityPublicKey !== void 0 && object.masterIdentityPublicKey?.setMasterIdentityPublicKey !== null) {
|
|
12000
|
+
message.masterIdentityPublicKey = {
|
|
12001
|
+
$case: "setMasterIdentityPublicKey",
|
|
12002
|
+
setMasterIdentityPublicKey: object.masterIdentityPublicKey.setMasterIdentityPublicKey
|
|
12003
|
+
};
|
|
12004
|
+
}
|
|
12005
|
+
break;
|
|
12006
|
+
}
|
|
12007
|
+
case "clearMasterIdentityPublicKey": {
|
|
12008
|
+
if (object.masterIdentityPublicKey?.clearMasterIdentityPublicKey !== void 0 && object.masterIdentityPublicKey?.clearMasterIdentityPublicKey !== null) {
|
|
12009
|
+
message.masterIdentityPublicKey = {
|
|
12010
|
+
$case: "clearMasterIdentityPublicKey",
|
|
12011
|
+
clearMasterIdentityPublicKey: object.masterIdentityPublicKey.clearMasterIdentityPublicKey
|
|
12012
|
+
};
|
|
12013
|
+
}
|
|
12014
|
+
break;
|
|
12015
|
+
}
|
|
12016
|
+
}
|
|
13849
12017
|
return message;
|
|
13850
12018
|
}
|
|
13851
12019
|
};
|
|
@@ -14017,50 +12185,6 @@ var SparkServiceDefinition = {
|
|
|
14017
12185
|
responseStream: false,
|
|
14018
12186
|
options: {}
|
|
14019
12187
|
},
|
|
14020
|
-
/**
|
|
14021
|
-
* This is deprecated, please use start_deposit_tree_creation instead.
|
|
14022
|
-
*
|
|
14023
|
-
* @deprecated
|
|
14024
|
-
*/
|
|
14025
|
-
start_tree_creation: {
|
|
14026
|
-
name: "start_tree_creation",
|
|
14027
|
-
requestType: StartTreeCreationRequest,
|
|
14028
|
-
requestStream: false,
|
|
14029
|
-
responseType: StartTreeCreationResponse,
|
|
14030
|
-
responseStream: false,
|
|
14031
|
-
options: {}
|
|
14032
|
-
},
|
|
14033
|
-
/** @deprecated */
|
|
14034
|
-
finalize_node_signatures: {
|
|
14035
|
-
name: "finalize_node_signatures",
|
|
14036
|
-
requestType: FinalizeNodeSignaturesRequest,
|
|
14037
|
-
requestStream: false,
|
|
14038
|
-
responseType: FinalizeNodeSignaturesResponse,
|
|
14039
|
-
responseStream: false,
|
|
14040
|
-
options: {}
|
|
14041
|
-
},
|
|
14042
|
-
/** @deprecated */
|
|
14043
|
-
start_transfer: {
|
|
14044
|
-
name: "start_transfer",
|
|
14045
|
-
requestType: StartTransferRequest,
|
|
14046
|
-
requestStream: false,
|
|
14047
|
-
responseType: StartTransferResponse,
|
|
14048
|
-
responseStream: false,
|
|
14049
|
-
options: {}
|
|
14050
|
-
},
|
|
14051
|
-
/**
|
|
14052
|
-
* This is deprecated, please use finalize_transfer_with_transfer_package instead.
|
|
14053
|
-
*
|
|
14054
|
-
* @deprecated
|
|
14055
|
-
*/
|
|
14056
|
-
finalize_transfer: {
|
|
14057
|
-
name: "finalize_transfer",
|
|
14058
|
-
requestType: FinalizeTransferRequest,
|
|
14059
|
-
requestStream: false,
|
|
14060
|
-
responseType: FinalizeTransferResponse,
|
|
14061
|
-
responseStream: false,
|
|
14062
|
-
options: {}
|
|
14063
|
-
},
|
|
14064
12188
|
finalize_transfer_with_transfer_package: {
|
|
14065
12189
|
name: "finalize_transfer_with_transfer_package",
|
|
14066
12190
|
requestType: FinalizeTransferWithTransferPackageRequest,
|
|
@@ -14069,15 +12193,6 @@ var SparkServiceDefinition = {
|
|
|
14069
12193
|
responseStream: false,
|
|
14070
12194
|
options: {}
|
|
14071
12195
|
},
|
|
14072
|
-
/** @deprecated */
|
|
14073
|
-
cancel_transfer: {
|
|
14074
|
-
name: "cancel_transfer",
|
|
14075
|
-
requestType: CancelTransferRequest,
|
|
14076
|
-
requestStream: false,
|
|
14077
|
-
responseType: CancelTransferResponse,
|
|
14078
|
-
responseStream: false,
|
|
14079
|
-
options: {}
|
|
14080
|
-
},
|
|
14081
12196
|
query_pending_transfers: {
|
|
14082
12197
|
name: "query_pending_transfers",
|
|
14083
12198
|
requestType: TransferFilter,
|
|
@@ -14102,15 +12217,6 @@ var SparkServiceDefinition = {
|
|
|
14102
12217
|
responseStream: false,
|
|
14103
12218
|
options: {}
|
|
14104
12219
|
},
|
|
14105
|
-
/** @deprecated */
|
|
14106
|
-
claim_transfer_sign_refunds: {
|
|
14107
|
-
name: "claim_transfer_sign_refunds",
|
|
14108
|
-
requestType: ClaimTransferSignRefundsRequest,
|
|
14109
|
-
requestStream: false,
|
|
14110
|
-
responseType: ClaimTransferSignRefundsResponse,
|
|
14111
|
-
responseStream: false,
|
|
14112
|
-
options: {}
|
|
14113
|
-
},
|
|
14114
12220
|
store_preimage_share: {
|
|
14115
12221
|
name: "store_preimage_share",
|
|
14116
12222
|
requestType: StorePreimageShareRequest,
|
|
@@ -14131,24 +12237,6 @@ var SparkServiceDefinition = {
|
|
|
14131
12237
|
responseStream: false,
|
|
14132
12238
|
options: {}
|
|
14133
12239
|
},
|
|
14134
|
-
/** @deprecated */
|
|
14135
|
-
cooperative_exit: {
|
|
14136
|
-
name: "cooperative_exit",
|
|
14137
|
-
requestType: CooperativeExitRequest,
|
|
14138
|
-
requestStream: false,
|
|
14139
|
-
responseType: CooperativeExitResponse,
|
|
14140
|
-
responseStream: false,
|
|
14141
|
-
options: {}
|
|
14142
|
-
},
|
|
14143
|
-
/** @deprecated */
|
|
14144
|
-
initiate_preimage_swap: {
|
|
14145
|
-
name: "initiate_preimage_swap",
|
|
14146
|
-
requestType: InitiatePreimageSwapRequest,
|
|
14147
|
-
requestStream: false,
|
|
14148
|
-
responseType: InitiatePreimageSwapResponse,
|
|
14149
|
-
responseStream: false,
|
|
14150
|
-
options: {}
|
|
14151
|
-
},
|
|
14152
12240
|
provide_preimage: {
|
|
14153
12241
|
name: "provide_preimage",
|
|
14154
12242
|
requestType: ProvidePreimageRequest,
|
|
@@ -14165,63 +12253,6 @@ var SparkServiceDefinition = {
|
|
|
14165
12253
|
responseStream: false,
|
|
14166
12254
|
options: {}
|
|
14167
12255
|
},
|
|
14168
|
-
/**
|
|
14169
|
-
* This is the exact same as start_transfer, but expresses to the SO
|
|
14170
|
-
* this transfer is specifically for a leaf swap.
|
|
14171
|
-
*/
|
|
14172
|
-
start_leaf_swap: {
|
|
14173
|
-
name: "start_leaf_swap",
|
|
14174
|
-
requestType: StartTransferRequest,
|
|
14175
|
-
requestStream: false,
|
|
14176
|
-
responseType: StartTransferResponse,
|
|
14177
|
-
responseStream: false,
|
|
14178
|
-
options: {}
|
|
14179
|
-
},
|
|
14180
|
-
/**
|
|
14181
|
-
* This is deprecated, please use counter_leaf_swap instead.
|
|
14182
|
-
*
|
|
14183
|
-
* @deprecated
|
|
14184
|
-
*/
|
|
14185
|
-
leaf_swap: {
|
|
14186
|
-
name: "leaf_swap",
|
|
14187
|
-
requestType: CounterLeafSwapRequest,
|
|
14188
|
-
requestStream: false,
|
|
14189
|
-
responseType: CounterLeafSwapResponse,
|
|
14190
|
-
responseStream: false,
|
|
14191
|
-
options: {}
|
|
14192
|
-
},
|
|
14193
|
-
/**
|
|
14194
|
-
* This is the exact same as start_leaf_swap, but signs with
|
|
14195
|
-
* an adaptor public key after a counterparty has begun the swap via start_leaf_swap.
|
|
14196
|
-
*
|
|
14197
|
-
* @deprecated
|
|
14198
|
-
*/
|
|
14199
|
-
counter_leaf_swap: {
|
|
14200
|
-
name: "counter_leaf_swap",
|
|
14201
|
-
requestType: CounterLeafSwapRequest,
|
|
14202
|
-
requestStream: false,
|
|
14203
|
-
responseType: CounterLeafSwapResponse,
|
|
14204
|
-
responseStream: false,
|
|
14205
|
-
options: {}
|
|
14206
|
-
},
|
|
14207
|
-
/** @deprecated */
|
|
14208
|
-
refresh_timelock: {
|
|
14209
|
-
name: "refresh_timelock",
|
|
14210
|
-
requestType: RefreshTimelockRequest,
|
|
14211
|
-
requestStream: false,
|
|
14212
|
-
responseType: RefreshTimelockResponse,
|
|
14213
|
-
responseStream: false,
|
|
14214
|
-
options: {}
|
|
14215
|
-
},
|
|
14216
|
-
/** @deprecated */
|
|
14217
|
-
extend_leaf: {
|
|
14218
|
-
name: "extend_leaf",
|
|
14219
|
-
requestType: ExtendLeafRequest,
|
|
14220
|
-
requestStream: false,
|
|
14221
|
-
responseType: ExtendLeafResponse,
|
|
14222
|
-
responseStream: false,
|
|
14223
|
-
options: {}
|
|
14224
|
-
},
|
|
14225
12256
|
/**
|
|
14226
12257
|
* Resets the timelocks for a leaf's transactions. Can be used to reset the
|
|
14227
12258
|
* refund transaction timelock for a leaf (when the node transaction
|
|
@@ -14253,24 +12284,6 @@ var SparkServiceDefinition = {
|
|
|
14253
12284
|
responseStream: false,
|
|
14254
12285
|
options: {}
|
|
14255
12286
|
},
|
|
14256
|
-
/** @deprecated */
|
|
14257
|
-
query_nodes_distribution: {
|
|
14258
|
-
name: "query_nodes_distribution",
|
|
14259
|
-
requestType: QueryNodesDistributionRequest,
|
|
14260
|
-
requestStream: false,
|
|
14261
|
-
responseType: QueryNodesDistributionResponse,
|
|
14262
|
-
responseStream: false,
|
|
14263
|
-
options: {}
|
|
14264
|
-
},
|
|
14265
|
-
/** @deprecated */
|
|
14266
|
-
query_nodes_by_value: {
|
|
14267
|
-
name: "query_nodes_by_value",
|
|
14268
|
-
requestType: QueryNodesByValueRequest,
|
|
14269
|
-
requestStream: false,
|
|
14270
|
-
responseType: QueryNodesByValueResponse,
|
|
14271
|
-
responseStream: false,
|
|
14272
|
-
options: {}
|
|
14273
|
-
},
|
|
14274
12287
|
query_balance: {
|
|
14275
12288
|
name: "query_balance",
|
|
14276
12289
|
requestType: QueryBalanceRequest,
|
|
@@ -14325,22 +12338,6 @@ var SparkServiceDefinition = {
|
|
|
14325
12338
|
responseStream: false,
|
|
14326
12339
|
options: {}
|
|
14327
12340
|
},
|
|
14328
|
-
/**
|
|
14329
|
-
* DEPRECATED: This unified method is being split for better clarity and type safety
|
|
14330
|
-
*
|
|
14331
|
-
* For swap operations: Use spark_ssp_internal.initiate_static_deposit_utxo_swap()
|
|
14332
|
-
* For refund operations: Use initiate_static_deposit_utxo_refund()
|
|
14333
|
-
*
|
|
14334
|
-
* @deprecated
|
|
14335
|
-
*/
|
|
14336
|
-
initiate_utxo_swap: {
|
|
14337
|
-
name: "initiate_utxo_swap",
|
|
14338
|
-
requestType: InitiateUtxoSwapRequest,
|
|
14339
|
-
requestStream: false,
|
|
14340
|
-
responseType: InitiateUtxoSwapResponse,
|
|
14341
|
-
responseStream: false,
|
|
14342
|
-
options: {}
|
|
14343
|
-
},
|
|
14344
12341
|
exit_single_node_trees: {
|
|
14345
12342
|
name: "exit_single_node_trees",
|
|
14346
12343
|
requestType: ExitSingleNodeTreesRequest,
|
|
@@ -14361,15 +12358,6 @@ var SparkServiceDefinition = {
|
|
|
14361
12358
|
responseStream: false,
|
|
14362
12359
|
options: {}
|
|
14363
12360
|
},
|
|
14364
|
-
/** @deprecated */
|
|
14365
|
-
extend_leaf_v2: {
|
|
14366
|
-
name: "extend_leaf_v2",
|
|
14367
|
-
requestType: ExtendLeafRequest,
|
|
14368
|
-
requestStream: false,
|
|
14369
|
-
responseType: ExtendLeafResponse,
|
|
14370
|
-
responseStream: false,
|
|
14371
|
-
options: {}
|
|
14372
|
-
},
|
|
14373
12361
|
claim_transfer_sign_refunds_v2: {
|
|
14374
12362
|
name: "claim_transfer_sign_refunds_v2",
|
|
14375
12363
|
requestType: ClaimTransferSignRefundsRequest,
|
|
@@ -14410,15 +12398,6 @@ var SparkServiceDefinition = {
|
|
|
14410
12398
|
responseStream: false,
|
|
14411
12399
|
options: {}
|
|
14412
12400
|
},
|
|
14413
|
-
/** @deprecated */
|
|
14414
|
-
counter_leaf_swap_v2: {
|
|
14415
|
-
name: "counter_leaf_swap_v2",
|
|
14416
|
-
requestType: CounterLeafSwapRequest,
|
|
14417
|
-
requestStream: false,
|
|
14418
|
-
responseType: CounterLeafSwapResponse,
|
|
14419
|
-
responseStream: false,
|
|
14420
|
-
options: {}
|
|
14421
|
-
},
|
|
14422
12401
|
start_transfer_v2: {
|
|
14423
12402
|
name: "start_transfer_v2",
|
|
14424
12403
|
requestType: StartTransferRequest,
|
|
@@ -14427,15 +12406,6 @@ var SparkServiceDefinition = {
|
|
|
14427
12406
|
responseStream: false,
|
|
14428
12407
|
options: {}
|
|
14429
12408
|
},
|
|
14430
|
-
/** @deprecated */
|
|
14431
|
-
refresh_timelock_v2: {
|
|
14432
|
-
name: "refresh_timelock_v2",
|
|
14433
|
-
requestType: RefreshTimelockRequest,
|
|
14434
|
-
requestStream: false,
|
|
14435
|
-
responseType: RefreshTimelockResponse,
|
|
14436
|
-
responseStream: false,
|
|
14437
|
-
options: {}
|
|
14438
|
-
},
|
|
14439
12409
|
get_utxos_for_address: {
|
|
14440
12410
|
name: "get_utxos_for_address",
|
|
14441
12411
|
requestType: GetUtxosForAddressRequest,
|
|
@@ -14686,22 +12656,22 @@ var BASE_CONFIG = {
|
|
|
14686
12656
|
// 5 minutes
|
|
14687
12657
|
minOutputsThreshold: 50
|
|
14688
12658
|
},
|
|
14689
|
-
tokenTransactionVersion: "
|
|
12659
|
+
tokenTransactionVersion: "V3"
|
|
14690
12660
|
};
|
|
14691
12661
|
var LOCAL_WALLET_CONFIG = {
|
|
14692
12662
|
...BASE_CONFIG,
|
|
14693
|
-
threshold:
|
|
12663
|
+
threshold: getLocalSigningThreshold()
|
|
14694
12664
|
};
|
|
14695
12665
|
var LOCAL_WALLET_CONFIG_SCHNORR = {
|
|
14696
12666
|
...LOCAL_WALLET_CONFIG,
|
|
14697
|
-
threshold:
|
|
14698
|
-
//
|
|
12667
|
+
threshold: getLocalSigningThreshold()
|
|
12668
|
+
// 2 for issuance tests.
|
|
14699
12669
|
};
|
|
14700
12670
|
var LOCAL_WALLET_CONFIG_ECDSA = {
|
|
14701
12671
|
...LOCAL_WALLET_CONFIG,
|
|
14702
12672
|
tokenSignatures: "ECDSA",
|
|
14703
|
-
threshold:
|
|
14704
|
-
//
|
|
12673
|
+
threshold: getLocalSigningThreshold()
|
|
12674
|
+
// 2 for issuance tests.
|
|
14705
12675
|
};
|
|
14706
12676
|
var REGTEST_WALLET_CONFIG = {
|
|
14707
12677
|
...BASE_CONFIG,
|
|
@@ -14757,6 +12727,7 @@ function getSigningOperators() {
|
|
|
14757
12727
|
};
|
|
14758
12728
|
}
|
|
14759
12729
|
function getLocalSigningOperators() {
|
|
12730
|
+
const numOperators = typeof process !== "undefined" && process.env.NUM_SPARK_OPERATORS !== void 0 ? parseInt(process.env.NUM_SPARK_OPERATORS, 10) : isHermeticTest ? 3 : 5;
|
|
14760
12731
|
const addresses = Array.from(
|
|
14761
12732
|
{ length: 5 },
|
|
14762
12733
|
(_, i) => isHermeticTest ? `https://${i}.spark.minikube.local` : `https://localhost:${i + 8535}`
|
|
@@ -14768,7 +12739,7 @@ function getLocalSigningOperators() {
|
|
|
14768
12739
|
"0352aef4d49439dedd798ac4aef1e7ebef95f569545b647a25338398c1247ffdea",
|
|
14769
12740
|
"02c05c88cc8fc181b1ba30006df6a4b0597de6490e24514fbdd0266d2b9cd3d0ba"
|
|
14770
12741
|
];
|
|
14771
|
-
|
|
12742
|
+
const allOperators = {
|
|
14772
12743
|
"0000000000000000000000000000000000000000000000000000000000000001": {
|
|
14773
12744
|
id: 0,
|
|
14774
12745
|
identifier: "0000000000000000000000000000000000000000000000000000000000000001",
|
|
@@ -14800,6 +12771,13 @@ function getLocalSigningOperators() {
|
|
|
14800
12771
|
identityPublicKey: pubkeys[4]
|
|
14801
12772
|
}
|
|
14802
12773
|
};
|
|
12774
|
+
return Object.fromEntries(
|
|
12775
|
+
Object.entries(allOperators).slice(0, numOperators)
|
|
12776
|
+
);
|
|
12777
|
+
}
|
|
12778
|
+
function getLocalSigningThreshold() {
|
|
12779
|
+
const numOperators = Object.keys(getLocalSigningOperators()).length;
|
|
12780
|
+
return Math.floor((numOperators + 2) / 2);
|
|
14803
12781
|
}
|
|
14804
12782
|
|
|
14805
12783
|
// src/services/config.ts
|
|
@@ -15992,7 +13970,8 @@ function createBaseTokenCreateInput() {
|
|
|
15992
13970
|
decimals: 0,
|
|
15993
13971
|
maxSupply: new Uint8Array(0),
|
|
15994
13972
|
isFreezable: false,
|
|
15995
|
-
creationEntityPublicKey: void 0
|
|
13973
|
+
creationEntityPublicKey: void 0,
|
|
13974
|
+
extraMetadata: void 0
|
|
15996
13975
|
};
|
|
15997
13976
|
}
|
|
15998
13977
|
var TokenCreateInput = {
|
|
@@ -16018,6 +13997,9 @@ var TokenCreateInput = {
|
|
|
16018
13997
|
if (message.creationEntityPublicKey !== void 0) {
|
|
16019
13998
|
writer.uint32(58).bytes(message.creationEntityPublicKey);
|
|
16020
13999
|
}
|
|
14000
|
+
if (message.extraMetadata !== void 0) {
|
|
14001
|
+
writer.uint32(66).bytes(message.extraMetadata);
|
|
14002
|
+
}
|
|
16021
14003
|
return writer;
|
|
16022
14004
|
},
|
|
16023
14005
|
decode(input, length) {
|
|
@@ -16076,6 +14058,13 @@ var TokenCreateInput = {
|
|
|
16076
14058
|
message.creationEntityPublicKey = reader.bytes();
|
|
16077
14059
|
continue;
|
|
16078
14060
|
}
|
|
14061
|
+
case 8: {
|
|
14062
|
+
if (tag !== 66) {
|
|
14063
|
+
break;
|
|
14064
|
+
}
|
|
14065
|
+
message.extraMetadata = reader.bytes();
|
|
14066
|
+
continue;
|
|
14067
|
+
}
|
|
16079
14068
|
}
|
|
16080
14069
|
if ((tag & 7) === 4 || tag === 0) {
|
|
16081
14070
|
break;
|
|
@@ -16092,7 +14081,8 @@ var TokenCreateInput = {
|
|
|
16092
14081
|
decimals: isSet6(object.decimals) ? globalThis.Number(object.decimals) : 0,
|
|
16093
14082
|
maxSupply: isSet6(object.maxSupply) ? bytesFromBase645(object.maxSupply) : new Uint8Array(0),
|
|
16094
14083
|
isFreezable: isSet6(object.isFreezable) ? globalThis.Boolean(object.isFreezable) : false,
|
|
16095
|
-
creationEntityPublicKey: isSet6(object.creationEntityPublicKey) ? bytesFromBase645(object.creationEntityPublicKey) : void 0
|
|
14084
|
+
creationEntityPublicKey: isSet6(object.creationEntityPublicKey) ? bytesFromBase645(object.creationEntityPublicKey) : void 0,
|
|
14085
|
+
extraMetadata: isSet6(object.extraMetadata) ? bytesFromBase645(object.extraMetadata) : void 0
|
|
16096
14086
|
};
|
|
16097
14087
|
},
|
|
16098
14088
|
toJSON(message) {
|
|
@@ -16118,6 +14108,9 @@ var TokenCreateInput = {
|
|
|
16118
14108
|
if (message.creationEntityPublicKey !== void 0) {
|
|
16119
14109
|
obj.creationEntityPublicKey = base64FromBytes5(message.creationEntityPublicKey);
|
|
16120
14110
|
}
|
|
14111
|
+
if (message.extraMetadata !== void 0) {
|
|
14112
|
+
obj.extraMetadata = base64FromBytes5(message.extraMetadata);
|
|
14113
|
+
}
|
|
16121
14114
|
return obj;
|
|
16122
14115
|
},
|
|
16123
14116
|
create(base) {
|
|
@@ -16132,6 +14125,7 @@ var TokenCreateInput = {
|
|
|
16132
14125
|
message.maxSupply = object.maxSupply ?? new Uint8Array(0);
|
|
16133
14126
|
message.isFreezable = object.isFreezable ?? false;
|
|
16134
14127
|
message.creationEntityPublicKey = object.creationEntityPublicKey ?? void 0;
|
|
14128
|
+
message.extraMetadata = object.extraMetadata ?? void 0;
|
|
16135
14129
|
return message;
|
|
16136
14130
|
}
|
|
16137
14131
|
};
|
|
@@ -18008,7 +16002,8 @@ function createBaseTokenMetadata() {
|
|
|
18008
16002
|
maxSupply: new Uint8Array(0),
|
|
18009
16003
|
isFreezable: false,
|
|
18010
16004
|
creationEntityPublicKey: void 0,
|
|
18011
|
-
tokenIdentifier: new Uint8Array(0)
|
|
16005
|
+
tokenIdentifier: new Uint8Array(0),
|
|
16006
|
+
extraMetadata: void 0
|
|
18012
16007
|
};
|
|
18013
16008
|
}
|
|
18014
16009
|
var TokenMetadata = {
|
|
@@ -18037,6 +16032,9 @@ var TokenMetadata = {
|
|
|
18037
16032
|
if (message.tokenIdentifier.length !== 0) {
|
|
18038
16033
|
writer.uint32(66).bytes(message.tokenIdentifier);
|
|
18039
16034
|
}
|
|
16035
|
+
if (message.extraMetadata !== void 0) {
|
|
16036
|
+
writer.uint32(74).bytes(message.extraMetadata);
|
|
16037
|
+
}
|
|
18040
16038
|
return writer;
|
|
18041
16039
|
},
|
|
18042
16040
|
decode(input, length) {
|
|
@@ -18102,6 +16100,13 @@ var TokenMetadata = {
|
|
|
18102
16100
|
message.tokenIdentifier = reader.bytes();
|
|
18103
16101
|
continue;
|
|
18104
16102
|
}
|
|
16103
|
+
case 9: {
|
|
16104
|
+
if (tag !== 74) {
|
|
16105
|
+
break;
|
|
16106
|
+
}
|
|
16107
|
+
message.extraMetadata = reader.bytes();
|
|
16108
|
+
continue;
|
|
16109
|
+
}
|
|
18105
16110
|
}
|
|
18106
16111
|
if ((tag & 7) === 4 || tag === 0) {
|
|
18107
16112
|
break;
|
|
@@ -18119,7 +16124,8 @@ var TokenMetadata = {
|
|
|
18119
16124
|
maxSupply: isSet6(object.maxSupply) ? bytesFromBase645(object.maxSupply) : new Uint8Array(0),
|
|
18120
16125
|
isFreezable: isSet6(object.isFreezable) ? globalThis.Boolean(object.isFreezable) : false,
|
|
18121
16126
|
creationEntityPublicKey: isSet6(object.creationEntityPublicKey) ? bytesFromBase645(object.creationEntityPublicKey) : void 0,
|
|
18122
|
-
tokenIdentifier: isSet6(object.tokenIdentifier) ? bytesFromBase645(object.tokenIdentifier) : new Uint8Array(0)
|
|
16127
|
+
tokenIdentifier: isSet6(object.tokenIdentifier) ? bytesFromBase645(object.tokenIdentifier) : new Uint8Array(0),
|
|
16128
|
+
extraMetadata: isSet6(object.extraMetadata) ? bytesFromBase645(object.extraMetadata) : void 0
|
|
18123
16129
|
};
|
|
18124
16130
|
},
|
|
18125
16131
|
toJSON(message) {
|
|
@@ -18148,6 +16154,9 @@ var TokenMetadata = {
|
|
|
18148
16154
|
if (message.tokenIdentifier.length !== 0) {
|
|
18149
16155
|
obj.tokenIdentifier = base64FromBytes5(message.tokenIdentifier);
|
|
18150
16156
|
}
|
|
16157
|
+
if (message.extraMetadata !== void 0) {
|
|
16158
|
+
obj.extraMetadata = base64FromBytes5(message.extraMetadata);
|
|
16159
|
+
}
|
|
18151
16160
|
return obj;
|
|
18152
16161
|
},
|
|
18153
16162
|
create(base) {
|
|
@@ -18163,6 +16172,7 @@ var TokenMetadata = {
|
|
|
18163
16172
|
message.isFreezable = object.isFreezable ?? false;
|
|
18164
16173
|
message.creationEntityPublicKey = object.creationEntityPublicKey ?? void 0;
|
|
18165
16174
|
message.tokenIdentifier = object.tokenIdentifier ?? new Uint8Array(0);
|
|
16175
|
+
message.extraMetadata = object.extraMetadata ?? void 0;
|
|
18166
16176
|
return message;
|
|
18167
16177
|
}
|
|
18168
16178
|
};
|
|
@@ -19470,6 +17480,9 @@ var ConnectionManager = class _ConnectionManager {
|
|
|
19470
17480
|
}
|
|
19471
17481
|
return serverTime;
|
|
19472
17482
|
}
|
|
17483
|
+
isTimeSynced() {
|
|
17484
|
+
return this.timeSync.isSynced();
|
|
17485
|
+
}
|
|
19473
17486
|
getMonotonicTime() {
|
|
19474
17487
|
return getMonotonicTime();
|
|
19475
17488
|
}
|
|
@@ -19647,39 +17660,6 @@ var ConnectionManager = class _ConnectionManager {
|
|
|
19647
17660
|
prepareMetadata(metadata) {
|
|
19648
17661
|
return metadata;
|
|
19649
17662
|
}
|
|
19650
|
-
recordTimeSync(dateHeader, serverProcessingTimeMs, sendTime, receiveTime) {
|
|
19651
|
-
this.timeSync.recordSync(
|
|
19652
|
-
dateHeader,
|
|
19653
|
-
serverProcessingTimeMs,
|
|
19654
|
-
sendTime,
|
|
19655
|
-
receiveTime
|
|
19656
|
-
);
|
|
19657
|
-
}
|
|
19658
|
-
processResponseForTimeSync(result, firstResponse, sendTime) {
|
|
19659
|
-
if (!firstResponse) return false;
|
|
19660
|
-
const receiveTime = this.getMonotonicTime();
|
|
19661
|
-
if (typeof result.value === "object" && result.value !== null) {
|
|
19662
|
-
const responseObj = result.value;
|
|
19663
|
-
if (responseObj.header && responseObj.header instanceof import_nice_grpc_common.Metadata) {
|
|
19664
|
-
const dateHeader = responseObj.header.get(
|
|
19665
|
-
_ConnectionManager.DATE_HEADER
|
|
19666
|
-
)?.[0];
|
|
19667
|
-
const processingTimeHeader = responseObj.header.get(
|
|
19668
|
-
_ConnectionManager.PROCESSING_TIME_HEADER
|
|
19669
|
-
)?.[0];
|
|
19670
|
-
if (dateHeader && processingTimeHeader) {
|
|
19671
|
-
const serverProcessingTimeMs = parseFloat(processingTimeHeader);
|
|
19672
|
-
this.recordTimeSync(
|
|
19673
|
-
dateHeader,
|
|
19674
|
-
serverProcessingTimeMs,
|
|
19675
|
-
sendTime,
|
|
19676
|
-
receiveTime
|
|
19677
|
-
);
|
|
19678
|
-
}
|
|
19679
|
-
}
|
|
19680
|
-
}
|
|
19681
|
-
return true;
|
|
19682
|
-
}
|
|
19683
17663
|
createAuthnMiddleware() {
|
|
19684
17664
|
return async function* (call, options) {
|
|
19685
17665
|
const metadata = this.prepareMetadata((0, import_nice_grpc_common.Metadata)(options.metadata));
|
|
@@ -19694,28 +17674,34 @@ var ConnectionManager = class _ConnectionManager {
|
|
|
19694
17674
|
const metadata = this.prepareMetadata((0, import_nice_grpc_common.Metadata)(options.metadata));
|
|
19695
17675
|
const authToken = await this.authenticate(address);
|
|
19696
17676
|
const sendTime = this.getMonotonicTime();
|
|
17677
|
+
const receiveTime = { value: 0 };
|
|
19697
17678
|
try {
|
|
19698
17679
|
const generator = call.next(call.request, {
|
|
19699
17680
|
...options,
|
|
19700
|
-
metadata: metadata.set("Authorization", `Bearer ${authToken}`)
|
|
17681
|
+
metadata: metadata.set("Authorization", `Bearer ${authToken}`),
|
|
17682
|
+
onHeader: (header) => {
|
|
17683
|
+
receiveTime.value = this.getMonotonicTime();
|
|
17684
|
+
const dateHeader = header.get(_ConnectionManager.DATE_HEADER);
|
|
17685
|
+
const processingTimeHeader = header.get(
|
|
17686
|
+
_ConnectionManager.PROCESSING_TIME_HEADER
|
|
17687
|
+
);
|
|
17688
|
+
if (dateHeader && processingTimeHeader) {
|
|
17689
|
+
const serverProcessingTimeMs = parseFloat(processingTimeHeader);
|
|
17690
|
+
this.timeSync.recordSync(
|
|
17691
|
+
dateHeader,
|
|
17692
|
+
serverProcessingTimeMs,
|
|
17693
|
+
sendTime,
|
|
17694
|
+
receiveTime.value
|
|
17695
|
+
);
|
|
17696
|
+
}
|
|
17697
|
+
}
|
|
19701
17698
|
});
|
|
19702
|
-
let firstResponse = true;
|
|
19703
17699
|
let result = await generator.next();
|
|
19704
17700
|
while (!result.done) {
|
|
19705
|
-
if (firstResponse) {
|
|
19706
|
-
firstResponse = this.processResponseForTimeSync(
|
|
19707
|
-
result,
|
|
19708
|
-
firstResponse,
|
|
19709
|
-
sendTime
|
|
19710
|
-
);
|
|
19711
|
-
}
|
|
19712
17701
|
yield result.value;
|
|
19713
17702
|
result = await generator.next();
|
|
19714
17703
|
}
|
|
19715
17704
|
if (result.value !== void 0) {
|
|
19716
|
-
if (firstResponse) {
|
|
19717
|
-
this.processResponseForTimeSync(result, firstResponse, sendTime);
|
|
19718
|
-
}
|
|
19719
17705
|
return result.value;
|
|
19720
17706
|
}
|
|
19721
17707
|
} catch (error) {
|
|
@@ -20830,7 +18816,7 @@ var DepositService = class {
|
|
|
20830
18816
|
});
|
|
20831
18817
|
} catch (error) {
|
|
20832
18818
|
throw new SparkRequestError("Failed to finalize node signatures", {
|
|
20833
|
-
operation: "
|
|
18819
|
+
operation: "finalize_node_signatures_v2",
|
|
20834
18820
|
error
|
|
20835
18821
|
});
|
|
20836
18822
|
}
|
|
@@ -23503,12 +21489,18 @@ var import_core7 = require("@lightsparkdev/core");
|
|
|
23503
21489
|
var LightningSendRequestStatus = /* @__PURE__ */ ((LightningSendRequestStatus2) => {
|
|
23504
21490
|
LightningSendRequestStatus2["FUTURE_VALUE"] = "FUTURE_VALUE";
|
|
23505
21491
|
LightningSendRequestStatus2["CREATED"] = "CREATED";
|
|
23506
|
-
LightningSendRequestStatus2["
|
|
21492
|
+
LightningSendRequestStatus2["USER_TRANSFER_VALIDATION_FAILED"] = "USER_TRANSFER_VALIDATION_FAILED";
|
|
23507
21493
|
LightningSendRequestStatus2["LIGHTNING_PAYMENT_INITIATED"] = "LIGHTNING_PAYMENT_INITIATED";
|
|
23508
21494
|
LightningSendRequestStatus2["LIGHTNING_PAYMENT_FAILED"] = "LIGHTNING_PAYMENT_FAILED";
|
|
23509
21495
|
LightningSendRequestStatus2["LIGHTNING_PAYMENT_SUCCEEDED"] = "LIGHTNING_PAYMENT_SUCCEEDED";
|
|
23510
21496
|
LightningSendRequestStatus2["PREIMAGE_PROVIDED"] = "PREIMAGE_PROVIDED";
|
|
21497
|
+
LightningSendRequestStatus2["PREIMAGE_PROVIDING_FAILED"] = "PREIMAGE_PROVIDING_FAILED";
|
|
23511
21498
|
LightningSendRequestStatus2["TRANSFER_COMPLETED"] = "TRANSFER_COMPLETED";
|
|
21499
|
+
LightningSendRequestStatus2["TRANSFER_FAILED"] = "TRANSFER_FAILED";
|
|
21500
|
+
LightningSendRequestStatus2["PENDING_USER_SWAP_RETURN"] = "PENDING_USER_SWAP_RETURN";
|
|
21501
|
+
LightningSendRequestStatus2["USER_SWAP_RETURNED"] = "USER_SWAP_RETURNED";
|
|
21502
|
+
LightningSendRequestStatus2["USER_SWAP_RETURN_FAILED"] = "USER_SWAP_RETURN_FAILED";
|
|
21503
|
+
LightningSendRequestStatus2["REQUEST_VALIDATED"] = "REQUEST_VALIDATED";
|
|
23512
21504
|
return LightningSendRequestStatus2;
|
|
23513
21505
|
})(LightningSendRequestStatus || {});
|
|
23514
21506
|
var LightningSendRequestStatus_default = LightningSendRequestStatus;
|
|
@@ -28980,7 +26972,7 @@ function isSet7(value) {
|
|
|
28980
26972
|
}
|
|
28981
26973
|
|
|
28982
26974
|
// src/spark-wallet/proto-descriptors.ts
|
|
28983
|
-
var SPARK_DESCRIPTORS_BASE64 = "Cv8BCh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvEg9nb29nbGUucHJvdG9idWYiOwoJVGltZXN0YW1wEhgKB3NlY29uZHMYASABKANSB3NlY29uZHMSFAoFbmFub3MYAiABKAVSBW5hbm9zQoUBChNjb20uZ29vZ2xlLnByb3RvYnVmQg5UaW1lc3RhbXBQcm90b1ABWjJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi90aW1lc3RhbXBwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCr4BChtnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIHCgVFbXB0eUJ9ChNjb20uZ29vZ2xlLnByb3RvYnVmQgpFbXB0eVByb3RvUAFaLmdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2VtcHR5cGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqIYAogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiJbChFGaWxlRGVzY3JpcHRvclNldBI4CgRmaWxlGAEgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG9SBGZpbGUqDAiA7Mr/ARCB7Mr/ASKYBQoTRmlsZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhgKB3BhY2thZ2UYAiABKAlSB3BhY2thZ2USHgoKZGVwZW5kZW5jeRgDIAMoCVIKZGVwZW5kZW5jeRIrChFwdWJsaWNfZGVwZW5kZW5jeRgKIAMoBVIQcHVibGljRGVwZW5kZW5jeRInCg93ZWFrX2RlcGVuZGVuY3kYCyADKAVSDndlYWtEZXBlbmRlbmN5EkMKDG1lc3NhZ2VfdHlwZRgEIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SC21lc3NhZ2VUeXBlEkEKCWVudW1fdHlwZRgFIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJBCgdzZXJ2aWNlGAYgAygLMicuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9SB3NlcnZpY2USQwoJZXh0ZW5zaW9uGAcgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SNgoHb3B0aW9ucxgIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1IHb3B0aW9ucxJJChBzb3VyY2VfY29kZV9pbmZvGAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvUg5zb3VyY2VDb2RlSW5mbxIWCgZzeW50YXgYDCABKAlSBnN5bnRheBIyCgdlZGl0aW9uGA4gASgOMhguZ29vZ2xlLnByb3RvYnVmLkVkaXRpb25SB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQizAQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SNwoIZmVhdHVyZXMYMiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSbQoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFREIDiAECUgx2ZXJpZmljYXRpb24alAEKC0RlY2xhcmF0aW9uEhYKBm51bWJlchgBIAEoBVIGbnVtYmVyEhsKCWZ1bGxfbmFtZRgCIAEoCVIIZnVsbE5hbWUSEgoEdHlwZRgDIAEoCVIEdHlwZRIaCghyZXNlcnZlZBgFIAEoCFIIcmVzZXJ2ZWQSGgoIcmVwZWF0ZWQYBiABKAhSCHJlcGVhdGVkSgQIBBAFIjQKEVZlcmlmaWNhdGlvblN0YXRlEg8KC0RFQ0xBUkFUSU9OEAASDgoKVU5WRVJJRklFRBABKgkI6AcQgICAgAIiwQYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucxInCg9wcm90bzNfb3B0aW9uYWwYESABKAhSDnByb3RvM09wdGlvbmFsIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUWVBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLVFlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUEVBVEVEEAMSEgoOTEFCRUxfUkVRVUlSRUQQAiJjChRPbmVvZkRlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjcKB29wdGlvbnMYAiABKAsyHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zUgdvcHRpb25zIuMCChNFbnVtRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPwoFdmFsdWUYAiADKAsyKS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvUgV2YWx1ZRI2CgdvcHRpb25zGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zUgdvcHRpb25zEl0KDnJlc2VydmVkX3JhbmdlGAQgAygLMjYuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USIwoNcmVzZXJ2ZWRfbmFtZRgFIAMoCVIMcmVzZXJ2ZWROYW1lGjsKEUVudW1SZXNlcnZlZFJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZCKDAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAIgASgFUgZudW1iZXISOwoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zUgdvcHRpb25zIqcBChZTZXJ2aWNlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPgoGbWV0aG9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1IGbWV0aG9kEjkKB29wdGlvbnMYAyABKAsyHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnNSB29wdGlvbnMiiQIKFU1ldGhvZERlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEh0KCmlucHV0X3R5cGUYAiABKAlSCWlucHV0VHlwZRIfCgtvdXRwdXRfdHlwZRgDIAEoCVIKb3V0cHV0VHlwZRI4CgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNSB29wdGlvbnMSMAoQY2xpZW50X3N0cmVhbWluZxgFIAEoCDoFZmFsc2VSD2NsaWVudFN0cmVhbWluZxIwChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZVIPc2VydmVyU3RyZWFtaW5nIq0JCgtGaWxlT3B0aW9ucxIhCgxqYXZhX3BhY2thZ2UYASABKAlSC2phdmFQYWNrYWdlEjAKFGphdmFfb3V0ZXJfY2xhc3NuYW1lGAggASgJUhJqYXZhT3V0ZXJDbGFzc25hbWUSNQoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEoCDoFZmFsc2VSEWphdmFNdWx0aXBsZUZpbGVzEkQKHWphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoGBQgASgIQgIYAVIZamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaBI6ChZqYXZhX3N0cmluZ19jaGVja191dGY4GBsgASgIOgVmYWxzZVITamF2YVN0cmluZ0NoZWNrVXRmOBJTCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlOgVTUEVFRFILb3B0aW1pemVGb3ISHQoKZ29fcGFja2FnZRgLIAEoCVIJZ29QYWNrYWdlEjUKE2NjX2dlbmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlUhFjY0dlbmVyaWNTZXJ2aWNlcxI5ChVqYXZhX2dlbmVyaWNfc2VydmljZXMYESABKAg6BWZhbHNlUhNqYXZhR2VuZXJpY1NlcnZpY2VzEjUKE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlUhFweUdlbmVyaWNTZXJ2aWNlcxIlCgpkZXByZWNhdGVkGBcgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIuChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlUg5jY0VuYWJsZUFyZW5hcxIqChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCVIPb2JqY0NsYXNzUHJlZml4EikKEGNzaGFycF9uYW1lc3BhY2UYJSABKAlSD2NzaGFycE5hbWVzcGFjZRIhCgxzd2lmdF9wcmVmaXgYJyABKAlSC3N3aWZ0UHJlZml4EigKEHBocF9jbGFzc19wcmVmaXgYKCABKAlSDnBocENsYXNzUHJlZml4EiMKDXBocF9uYW1lc3BhY2UYKSABKAlSDHBocE5hbWVzcGFjZRI0ChZwaHBfbWV0YWRhdGFfbmFtZXNwYWNlGCwgASgJUhRwaHBNZXRhZGF0YU5hbWVzcGFjZRIhCgxydWJ5X3BhY2thZ2UYLSABKAlSC3J1YnlQYWNrYWdlEjcKCGZlYXR1cmVzGDIgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNPREVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgqECtKBAgmECdSFHBocF9nZW5lcmljX3NlcnZpY2VzIvQDCg5NZXNzYWdlT3B0aW9ucxI8ChdtZXNzYWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2VSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0EkwKH25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlUhxub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEhsKCW1hcF9lbnRyeRgHIAEoCFIIbWFwRW50cnkSVgomZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9maWVsZF9jb25mbGljdHMYCyABKAhCAhgBUiJkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzEjcKCGZlYXR1cmVzGAwgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgEEAVKBAgFEAZKBAgGEAdKBAgIEAlKBAgJEAoinQ0KDEZpZWxkT3B0aW9ucxJBCgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklOR1IFY3R5cGUSFgoGcGFja2VkGAIgASgIUgZwYWNrZWQSRwoGanN0eXBlGAYgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6CUpTX05PUk1BTFIGanN0eXBlEhkKBGxhenkYBSABKAg6BWZhbHNlUgRsYXp5Ei4KD3VudmVyaWZpZWRfbGF6eRgPIAEoCDoFZmFsc2VSDnVudmVyaWZpZWRMYXp5EiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEhkKBHdlYWsYCiABKAg6BWZhbHNlUgR3ZWFrEigKDGRlYnVnX3JlZGFjdBgQIAEoCDoFZmFsc2VSC2RlYnVnUmVkYWN0EksKCXJldGVudGlvbhgRIAEoDjItLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uUmV0ZW50aW9uUglyZXRlbnRpb24SSAoHdGFyZ2V0cxgTIAMoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZVIHdGFyZ2V0cxJXChBlZGl0aW9uX2RlZmF1bHRzGBQgAygLMiwuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5FZGl0aW9uRGVmYXVsdFIPZWRpdGlvbkRlZmF1bHRzEjcKCGZlYXR1cmVzGBUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElUKD2ZlYXR1cmVfc3VwcG9ydBgWIAEoCzIsLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuRmVhdHVyZVN1cHBvcnRSDmZlYXR1cmVTdXBwb3J0ElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uGloKDkVkaXRpb25EZWZhdWx0EjIKB2VkaXRpb24YAyABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvblIHZWRpdGlvbhIUCgV2YWx1ZRgCIAEoCVIFdmFsdWUalgIKDkZlYXR1cmVTdXBwb3J0EkcKEmVkaXRpb25faW50cm9kdWNlZBgBIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uUhFlZGl0aW9uSW50cm9kdWNlZBJHChJlZGl0aW9uX2RlcHJlY2F0ZWQYAiABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvblIRZWRpdGlvbkRlcHJlY2F0ZWQSLwoTZGVwcmVjYXRpb25fd2FybmluZxgDIAEoCVISZGVwcmVjYXRpb25XYXJuaW5nEkEKD2VkaXRpb25fcmVtb3ZlZBgEIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uUg5lZGl0aW9uUmVtb3ZlZCIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACIlUKD09wdGlvblJldGVudGlvbhIVChFSRVRFTlRJT05fVU5LTk9XThAAEhUKEVJFVEVOVElPTl9SVU5USU1FEAESFAoQUkVURU5USU9OX1NPVVJDRRACIowCChBPcHRpb25UYXJnZXRUeXBlEhcKE1RBUkdFVF9UWVBFX1VOS05PV04QABIUChBUQVJHRVRfVFlQRV9GSUxFEAESHwobVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFEAISFwoTVEFSR0VUX1RZUEVfTUVTU0FHRRADEhUKEVRBUkdFVF9UWVBFX0ZJRUxEEAQSFQoRVEFSR0VUX1RZUEVfT05FT0YQBRIUChBUQVJHRVRfVFlQRV9FTlVNEAYSGgoWVEFSR0VUX1RZUEVfRU5VTV9FTlRSWRAHEhcKE1RBUkdFVF9UWVBFX1NFUlZJQ0UQCBIWChJUQVJHRVRfVFlQRV9NRVRIT0QQCSoJCOgHEICAgIACSgQIBBAFSgQIEhATIqwBCgxPbmVvZk9wdGlvbnMSNwoIZmVhdHVyZXMYASABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLRAgoLRW51bU9wdGlvbnMSHwoLYWxsb3dfYWxpYXMYAiABKAhSCmFsbG93QWxpYXMSJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSVgomZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9maWVsZF9jb25mbGljdHMYBiABKAhCAhgBUiJkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzEjcKCGZlYXR1cmVzGAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYi2AIKEEVudW1WYWx1ZU9wdGlvbnMSJQoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSNwoIZmVhdHVyZXMYAiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSKAoMZGVidWdfcmVkYWN0GAMgASgIOgVmYWxzZVILZGVidWdSZWRhY3QSVQoPZmVhdHVyZV9zdXBwb3J0GAQgASgLMiwuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5GZWF0dXJlU3VwcG9ydFIOZmVhdHVyZVN1cHBvcnQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLVAQoOU2VydmljZU9wdGlvbnMSNwoIZmVhdHVyZXMYIiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiKZAwoNTWV0aG9kT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJxChFpZGVtcG90ZW5jeV9sZXZlbBgiIAEoDjIvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWw6E0lERU1QT1RFTkNZX1VOS05PV05SEGlkZW1wb3RlbmN5TGV2ZWwSNwoIZmVhdHVyZXMYIyABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZXZlbBIXChNJREVNUE9URU5DWV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVOVBACKgkI6AcQgICAgAIimgMKE1VuaW50ZXJwcmV0ZWRPcHRpb24SQQoEbmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0UgRuYW1lEikKEGlkZW50aWZpZXJfdmFsdWUYAyABKAlSD2lkZW50aWZpZXJWYWx1ZRIsChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKARSEHBvc2l0aXZlSW50VmFsdWUSLAoSbmVnYXRpdmVfaW50X3ZhbHVlGAUgASgDUhBuZWdhdGl2ZUludFZhbHVlEiEKDGRvdWJsZV92YWx1ZRgGIAEoAVILZG91YmxlVmFsdWUSIQoMc3RyaW5nX3ZhbHVlGAcgASgMUgtzdHJpbmdWYWx1ZRInCg9hZ2dyZWdhdGVfdmFsdWUYCCABKAlSDmFnZ3JlZ2F0ZVZhbHVlGkoKCE5hbWVQYXJ0EhsKCW5hbWVfcGFydBgBIAIoCVIIbmFtZVBhcnQSIQoMaXNfZXh0ZW5zaW9uGAIgAigIUgtpc0V4dGVuc2lvbiKnCgoKRmVhdHVyZVNldBKRAQoOZmllbGRfcHJlc2VuY2UYASABKA4yKS5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5GaWVsZFByZXNlbmNlQj+IAQGYAQSYAQGiAQ0SCEVYUExJQ0lUGIQHogENEghJTVBMSUNJVBjnB6IBDRIIRVhQTElDSVQY6AeyAQMI6AdSDWZpZWxkUHJlc2VuY2USbAoJZW51bV90eXBlGAIgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuRW51bVR5cGVCKYgBAZgBBpgBAaIBCxIGQ0xPU0VEGIQHogEJEgRPUEVOGOcHsgEDCOgHUghlbnVtVHlwZRKYAQoXcmVwZWF0ZWRfZmllbGRfZW5jb2RpbmcYAyABKA4yMS5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5SZXBlYXRlZEZpZWxkRW5jb2RpbmdCLYgBAZgBBJgBAaIBDRIIRVhQQU5ERUQYhAeiAQsSBlBBQ0tFRBjnB7IBAwjoB1IVcmVwZWF0ZWRGaWVsZEVuY29kaW5nEn4KD3V0ZjhfdmFsaWRhdGlvbhgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlV0ZjhWYWxpZGF0aW9uQimIAQGYAQSYAQGiAQkSBE5PTkUYhAeiAQsSBlZFUklGWRjnB7IBAwjoB1IOdXRmOFZhbGlkYXRpb24SfgoQbWVzc2FnZV9lbmNvZGluZxgFIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lk1lc3NhZ2VFbmNvZGluZ0ImiAEBmAEEmAEBogEUEg9MRU5HVEhfUFJFRklYRUQYhAeyAQMI6AdSD21lc3NhZ2VFbmNvZGluZxKCAQoLanNvbl9mb3JtYXQYBiABKA4yJi5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5Kc29uRm9ybWF0QjmIAQGYAQOYAQaYAQGiARcSEkxFR0FDWV9CRVNUX0VGRk9SVBiEB6IBChIFQUxMT1cY5weyAQMI6AdSCmpzb25Gb3JtYXQiXAoNRmllbGRQcmVzZW5jZRIaChZGSUVMRF9QUkVTRU5DRV9VTktOT1dOEAASDAoIRVhQTElDSVQQARIMCghJTVBMSUNJVBACEhMKD0xFR0FDWV9SRVFVSVJFRBADIjcKCEVudW1UeXBlEhUKEUVOVU1fVFlQRV9VTktOT1dOEAASCAoET1BFThABEgoKBkNMT1NFRBACIlYKFVJlcGVhdGVkRmllbGRFbmNvZGluZxIjCh9SRVBFQVRFRF9GSUVMRF9FTkNPRElOR19VTktOT1dOEAASCgoGUEFDS0VEEAESDAoIRVhQQU5ERUQQAiJJCg5VdGY4VmFsaWRhdGlvbhIbChdVVEY4X1ZBTElEQVRJT05fVU5LTk9XThAAEgoKBlZFUklGWRACEggKBE5PTkUQAyIECAEQASJTCg9NZXNzYWdlRW5jb2RpbmcSHAoYTUVTU0FHRV9FTkNPRElOR19VTktOT1dOEAASEwoPTEVOR1RIX1BSRUZJWEVEEAESDQoJREVMSU1JVEVEEAIiSAoKSnNvbkZvcm1hdBIXChNKU09OX0ZPUk1BVF9VTktOT1dOEAASCQoFQUxMT1cQARIWChJMRUdBQ1lfQkVTVF9FRkZPUlQQAioGCOgHEItOKgYIi04QkE4qBgiQThCRTkoGCOcHEOgHIu8DChJGZWF0dXJlU2V0RGVmYXVsdHMSWAoIZGVmYXVsdHMYASADKAsyPC5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdFIIZGVmYXVsdHMSQQoPbWluaW11bV9lZGl0aW9uGAQgASgOMhguZ29vZ2xlLnByb3RvYnVmLkVkaXRpb25SDm1pbmltdW1FZGl0aW9uEkEKD21heGltdW1fZWRpdGlvbhgFIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uUg5tYXhpbXVtRWRpdGlvbhr4AQoYRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0EjIKB2VkaXRpb24YAyABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvblIHZWRpdGlvbhJOChRvdmVycmlkYWJsZV9mZWF0dXJlcxgEIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0UhNvdmVycmlkYWJsZUZlYXR1cmVzEkIKDmZpeGVkX2ZlYXR1cmVzGAUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSDWZpeGVkRmVhdHVyZXNKBAgBEAJKBAgCEANSCGZlYXR1cmVzIrUCCg5Tb3VyY2VDb2RlSW5mbxJECghsb2NhdGlvbhgBIAMoCzIoLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblIIbG9jYXRpb24azgEKCExvY2F0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEhYKBHNwYW4YAiADKAVCAhABUgRzcGFuEikKEGxlYWRpbmdfY29tbWVudHMYAyABKAlSD2xlYWRpbmdDb21tZW50cxIrChF0cmFpbGluZ19jb21tZW50cxgEIAEoCVIQdHJhaWxpbmdDb21tZW50cxI6ChlsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzGAYgAygJUhdsZWFkaW5nRGV0YWNoZWRDb21tZW50cyoMCIDsyv8BEIHsyv8BItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACKqcCCgdFZGl0aW9uEhMKD0VESVRJT05fVU5LTk9XThAAEhMKDkVESVRJT05fTEVHQUNZEIQHEhMKDkVESVRJT05fUFJPVE8yEOYHEhMKDkVESVRJT05fUFJPVE8zEOcHEhEKDEVESVRJT05fMjAyMxDoBxIRCgxFRElUSU9OXzIwMjQQ6QcSFwoTRURJVElPTl8xX1RFU1RfT05MWRABEhcKE0VESVRJT05fMl9URVNUX09OTFkQAhIdChdFRElUSU9OXzk5OTk3X1RFU1RfT05MWRCdjQYSHQoXRURJVElPTl85OTk5OF9URVNUX09OTFkQno0GEh0KF0VESVRJT05fOTk5OTlfVEVTVF9PTkxZEJ+NBhITCgtFRElUSU9OX01BWBD/////B0J+ChNjb20uZ29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAFaLWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2Rlc2NyaXB0b3JwYvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCvsBCh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI6CghEdXJhdGlvbhIYCgdzZWNvbmRzGAEgASgDUgdzZWNvbmRzEhQKBW5hbm9zGAIgASgFUgVuYW5vc0KDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9kdXJhdGlvbnBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKrzEKF3ZhbGlkYXRlL3ZhbGlkYXRlLnByb3RvEgh2YWxpZGF0ZRogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90byLICAoKRmllbGRSdWxlcxIwCgdtZXNzYWdlGBEgASgLMhYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlEiwKBWZsb2F0GAEgASgLMhQudmFsaWRhdGUuRmxvYXRSdWxlc0gAUgVmbG9hdBIvCgZkb3VibGUYAiABKAsyFS52YWxpZGF0ZS5Eb3VibGVSdWxlc0gAUgZkb3VibGUSLAoFaW50MzIYAyABKAsyFC52YWxpZGF0ZS5JbnQzMlJ1bGVzSABSBWludDMyEiwKBWludDY0GAQgASgLMhQudmFsaWRhdGUuSW50NjRSdWxlc0gAUgVpbnQ2NBIvCgZ1aW50MzIYBSABKAsyFS52YWxpZGF0ZS5VSW50MzJSdWxlc0gAUgZ1aW50MzISLwoGdWludDY0GAYgASgLMhUudmFsaWRhdGUuVUludDY0UnVsZXNIAFIGdWludDY0Ei8KBnNpbnQzMhgHIAEoCzIVLnZhbGlkYXRlLlNJbnQzMlJ1bGVzSABSBnNpbnQzMhIvCgZzaW50NjQYCCABKAsyFS52YWxpZGF0ZS5TSW50NjRSdWxlc0gAUgZzaW50NjQSMgoHZml4ZWQzMhgJIAEoCzIWLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAUgdmaXhlZDMyEjIKB2ZpeGVkNjQYCiABKAsyFi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIAFIHZml4ZWQ2NBI1CghzZml4ZWQzMhgLIAEoCzIXLnZhbGlkYXRlLlNGaXhlZDMyUnVsZXNIAFIIc2ZpeGVkMzISNQoIc2ZpeGVkNjQYDCABKAsyFy52YWxpZGF0ZS5TRml4ZWQ2NFJ1bGVzSABSCHNmaXhlZDY0EikKBGJvb2wYDSABKAsyEy52YWxpZGF0ZS5Cb29sUnVsZXNIAFIEYm9vbBIvCgZzdHJpbmcYDiABKAsyFS52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAUgZzdHJpbmcSLAoFYnl0ZXMYDyABKAsyFC52YWxpZGF0ZS5CeXRlc1J1bGVzSABSBWJ5dGVzEikKBGVudW0YECABKAsyEy52YWxpZGF0ZS5FbnVtUnVsZXNIAFIEZW51bRI1CghyZXBlYXRlZBgSIAEoCzIXLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIAFIIcmVwZWF0ZWQSJgoDbWFwGBMgASgLMhIudmFsaWRhdGUuTWFwUnVsZXNIAFIDbWFwEiYKA2FueRgUIAEoCzISLnZhbGlkYXRlLkFueVJ1bGVzSABSA2FueRI1CghkdXJhdGlvbhgVIAEoCzIXLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIAFIIZHVyYXRpb24SOAoJdGltZXN0YW1wGBYgASgLMhgudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAFIJdGltZXN0YW1wQgYKBHR5cGUisAEKCkZsb2F0UnVsZXMSFAoFY29uc3QYASABKAJSBWNvbnN0Eg4KAmx0GAIgASgCUgJsdBIQCgNsdGUYAyABKAJSA2x0ZRIOCgJndBgEIAEoAlICZ3QSEAoDZ3RlGAUgASgCUgNndGUSDgoCaW4YBiADKAJSAmluEhUKBm5vdF9pbhgHIAMoAlIFbm90SW4SIQoMaWdub3JlX2VtcHR5GAggASgIUgtpZ25vcmVFbXB0eSKxAQoLRG91YmxlUnVsZXMSFAoFY29uc3QYASABKAFSBWNvbnN0Eg4KAmx0GAIgASgBUgJsdBIQCgNsdGUYAyABKAFSA2x0ZRIOCgJndBgEIAEoAVICZ3QSEAoDZ3RlGAUgASgBUgNndGUSDgoCaW4YBiADKAFSAmluEhUKBm5vdF9pbhgHIAMoAVIFbm90SW4SIQoMaWdub3JlX2VtcHR5GAggASgIUgtpZ25vcmVFbXB0eSKwAQoKSW50MzJSdWxlcxIUCgVjb25zdBgBIAEoBVIFY29uc3QSDgoCbHQYAiABKAVSAmx0EhAKA2x0ZRgDIAEoBVIDbHRlEg4KAmd0GAQgASgFUgJndBIQCgNndGUYBSABKAVSA2d0ZRIOCgJpbhgGIAMoBVICaW4SFQoGbm90X2luGAcgAygFUgVub3RJbhIhCgxpZ25vcmVfZW1wdHkYCCABKAhSC2lnbm9yZUVtcHR5IrABCgpJbnQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgDUgVjb25zdBIOCgJsdBgCIAEoA1ICbHQSEAoDbHRlGAMgASgDUgNsdGUSDgoCZ3QYBCABKANSAmd0EhAKA2d0ZRgFIAEoA1IDZ3RlEg4KAmluGAYgAygDUgJpbhIVCgZub3RfaW4YByADKANSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1VJbnQzMlJ1bGVzEhQKBWNvbnN0GAEgASgNUgVjb25zdBIOCgJsdBgCIAEoDVICbHQSEAoDbHRlGAMgASgNUgNsdGUSDgoCZ3QYBCABKA1SAmd0EhAKA2d0ZRgFIAEoDVIDZ3RlEg4KAmluGAYgAygNUgJpbhIVCgZub3RfaW4YByADKA1SBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1VJbnQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgEUgVjb25zdBIOCgJsdBgCIAEoBFICbHQSEAoDbHRlGAMgASgEUgNsdGUSDgoCZ3QYBCABKARSAmd0EhAKA2d0ZRgFIAEoBFIDZ3RlEg4KAmluGAYgAygEUgJpbhIVCgZub3RfaW4YByADKARSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1NJbnQzMlJ1bGVzEhQKBWNvbnN0GAEgASgRUgVjb25zdBIOCgJsdBgCIAEoEVICbHQSEAoDbHRlGAMgASgRUgNsdGUSDgoCZ3QYBCABKBFSAmd0EhAKA2d0ZRgFIAEoEVIDZ3RlEg4KAmluGAYgAygRUgJpbhIVCgZub3RfaW4YByADKBFSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1NJbnQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgSUgVjb25zdBIOCgJsdBgCIAEoElICbHQSEAoDbHRlGAMgASgSUgNsdGUSDgoCZ3QYBCABKBJSAmd0EhAKA2d0ZRgFIAEoElIDZ3RlEg4KAmluGAYgAygSUgJpbhIVCgZub3RfaW4YByADKBJSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisgEKDEZpeGVkMzJSdWxlcxIUCgVjb25zdBgBIAEoB1IFY29uc3QSDgoCbHQYAiABKAdSAmx0EhAKA2x0ZRgDIAEoB1IDbHRlEg4KAmd0GAQgASgHUgJndBIQCgNndGUYBSABKAdSA2d0ZRIOCgJpbhgGIAMoB1ICaW4SFQoGbm90X2luGAcgAygHUgVub3RJbhIhCgxpZ25vcmVfZW1wdHkYCCABKAhSC2lnbm9yZUVtcHR5IrIBCgxGaXhlZDY0UnVsZXMSFAoFY29uc3QYASABKAZSBWNvbnN0Eg4KAmx0GAIgASgGUgJsdBIQCgNsdGUYAyABKAZSA2x0ZRIOCgJndBgEIAEoBlICZ3QSEAoDZ3RlGAUgASgGUgNndGUSDgoCaW4YBiADKAZSAmluEhUKBm5vdF9pbhgHIAMoBlIFbm90SW4SIQoMaWdub3JlX2VtcHR5GAggASgIUgtpZ25vcmVFbXB0eSKzAQoNU0ZpeGVkMzJSdWxlcxIUCgVjb25zdBgBIAEoD1IFY29uc3QSDgoCbHQYAiABKA9SAmx0EhAKA2x0ZRgDIAEoD1IDbHRlEg4KAmd0GAQgASgPUgJndBIQCgNndGUYBSABKA9SA2d0ZRIOCgJpbhgGIAMoD1ICaW4SFQoGbm90X2luGAcgAygPUgVub3RJbhIhCgxpZ25vcmVfZW1wdHkYCCABKAhSC2lnbm9yZUVtcHR5IrMBCg1TRml4ZWQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgQUgVjb25zdBIOCgJsdBgCIAEoEFICbHQSEAoDbHRlGAMgASgQUgNsdGUSDgoCZ3QYBCABKBBSAmd0EhAKA2d0ZRgFIAEoEFIDZ3RlEg4KAmluGAYgAygQUgJpbhIVCgZub3RfaW4YByADKBBSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkiIQoJQm9vbFJ1bGVzEhQKBWNvbnN0GAEgASgIUgVjb25zdCLUBQoLU3RyaW5nUnVsZXMSFAoFY29uc3QYASABKAlSBWNvbnN0EhAKA2xlbhgTIAEoBFIDbGVuEhcKB21pbl9sZW4YAiABKARSBm1pbkxlbhIXCgdtYXhfbGVuGAMgASgEUgZtYXhMZW4SGwoJbGVuX2J5dGVzGBQgASgEUghsZW5CeXRlcxIbCgltaW5fYnl0ZXMYBCABKARSCG1pbkJ5dGVzEhsKCW1heF9ieXRlcxgFIAEoBFIIbWF4Qnl0ZXMSGAoHcGF0dGVybhgGIAEoCVIHcGF0dGVybhIWCgZwcmVmaXgYByABKAlSBnByZWZpeBIWCgZzdWZmaXgYCCABKAlSBnN1ZmZpeBIaCghjb250YWlucxgJIAEoCVIIY29udGFpbnMSIQoMbm90X2NvbnRhaW5zGBcgASgJUgtub3RDb250YWlucxIOCgJpbhgKIAMoCVICaW4SFQoGbm90X2luGAsgAygJUgVub3RJbhIWCgVlbWFpbBgMIAEoCEgAUgVlbWFpbBIcCghob3N0bmFtZRgNIAEoCEgAUghob3N0bmFtZRIQCgJpcBgOIAEoCEgAUgJpcBIUCgRpcHY0GA8gASgISABSBGlwdjQSFAoEaXB2NhgQIAEoCEgAUgRpcHY2EhIKA3VyaRgRIAEoCEgAUgN1cmkSGQoHdXJpX3JlZhgSIAEoCEgAUgZ1cmlSZWYSGgoHYWRkcmVzcxgVIAEoCEgAUgdhZGRyZXNzEhQKBHV1aWQYFiABKAhIAFIEdXVpZBJAChB3ZWxsX2tub3duX3JlZ2V4GBggASgOMhQudmFsaWRhdGUuS25vd25SZWdleEgAUg53ZWxsS25vd25SZWdleBIcCgZzdHJpY3QYGSABKAg6BHRydWVSBnN0cmljdBIhCgxpZ25vcmVfZW1wdHkYGiABKAhSC2lnbm9yZUVtcHR5QgwKCndlbGxfa25vd24i4gIKCkJ5dGVzUnVsZXMSFAoFY29uc3QYASABKAxSBWNvbnN0EhAKA2xlbhgNIAEoBFIDbGVuEhcKB21pbl9sZW4YAiABKARSBm1pbkxlbhIXCgdtYXhfbGVuGAMgASgEUgZtYXhMZW4SGAoHcGF0dGVybhgEIAEoCVIHcGF0dGVybhIWCgZwcmVmaXgYBSABKAxSBnByZWZpeBIWCgZzdWZmaXgYBiABKAxSBnN1ZmZpeBIaCghjb250YWlucxgHIAEoDFIIY29udGFpbnMSDgoCaW4YCCADKAxSAmluEhUKBm5vdF9pbhgJIAMoDFIFbm90SW4SEAoCaXAYCiABKAhIAFICaXASFAoEaXB2NBgLIAEoCEgAUgRpcHY0EhQKBGlwdjYYDCABKAhIAFIEaXB2NhIhCgxpZ25vcmVfZW1wdHkYDiABKAhSC2lnbm9yZUVtcHR5QgwKCndlbGxfa25vd24iawoJRW51bVJ1bGVzEhQKBWNvbnN0GAEgASgFUgVjb25zdBIhCgxkZWZpbmVkX29ubHkYAiABKAhSC2RlZmluZWRPbmx5Eg4KAmluGAMgAygFUgJpbhIVCgZub3RfaW4YBCADKAVSBW5vdEluIj4KDE1lc3NhZ2VSdWxlcxISCgRza2lwGAEgASgIUgRza2lwEhoKCHJlcXVpcmVkGAIgASgIUghyZXF1aXJlZCKwAQoNUmVwZWF0ZWRSdWxlcxIbCgltaW5faXRlbXMYASABKARSCG1pbkl0ZW1zEhsKCW1heF9pdGVtcxgCIAEoBFIIbWF4SXRlbXMSFgoGdW5pcXVlGAMgASgIUgZ1bmlxdWUSKgoFaXRlbXMYBCABKAsyFC52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVpdGVtcxIhCgxpZ25vcmVfZW1wdHkYBSABKAhSC2lnbm9yZUVtcHR5ItwBCghNYXBSdWxlcxIbCgltaW5fcGFpcnMYASABKARSCG1pblBhaXJzEhsKCW1heF9wYWlycxgCIAEoBFIIbWF4UGFpcnMSGwoJbm9fc3BhcnNlGAMgASgIUghub1NwYXJzZRIoCgRrZXlzGAQgASgLMhQudmFsaWRhdGUuRmllbGRSdWxlc1IEa2V5cxIsCgZ2YWx1ZXMYBSABKAsyFC52YWxpZGF0ZS5GaWVsZFJ1bGVzUgZ2YWx1ZXMSIQoMaWdub3JlX2VtcHR5GAYgASgIUgtpZ25vcmVFbXB0eSJNCghBbnlSdWxlcxIaCghyZXF1aXJlZBgBIAEoCFIIcmVxdWlyZWQSDgoCaW4YAiADKAlSAmluEhUKBm5vdF9pbhgDIAMoCVIFbm90SW4i6QIKDUR1cmF0aW9uUnVsZXMSGgoIcmVxdWlyZWQYASABKAhSCHJlcXVpcmVkEi8KBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgVjb25zdBIpCgJsdBgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblICbHQSKwoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgNsdGUSKQoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SAmd0EisKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIDZ3RlEikKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgJpbhIwCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SBW5vdEluIvMCCg5UaW1lc3RhbXBSdWxlcxIaCghyZXF1aXJlZBgBIAEoCFIIcmVxdWlyZWQSMAoFY29uc3QYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgVjb25zdBIqCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSAmx0EiwKA2x0ZRgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSA2x0ZRIqCgJndBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSAmd0EiwKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSA2d0ZRIVCgZsdF9ub3cYByABKAhSBWx0Tm93EhUKBmd0X25vdxgIIAEoCFIFZ3ROb3cSMQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgZ3aXRoaW4qRgoKS25vd25SZWdleBILCgdVTktOT1dOEAASFAoQSFRUUF9IRUFERVJfTkFNRRABEhUKEUhUVFBfSEVBREVSX1ZBTFVFEAI6PAoIZGlzYWJsZWQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYrwggASgIUghkaXNhYmxlZDo6CgdpZ25vcmVkEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGLAIIAEoCFIHaWdub3JlZDo6CghyZXF1aXJlZBIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYrwggASgIUghyZXF1aXJlZDpKCgVydWxlcxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYrwggASgLMhQudmFsaWRhdGUuRmllbGRSdWxlc1IFcnVsZXNCUAoaaW8uZW52b3lwcm94eS5wZ3YudmFsaWRhdGVaMmdpdGh1Yi5jb20vZW52b3lwcm94eS9wcm90b2MtZ2VuLXZhbGlkYXRlL3ZhbGlkYXRlCrcDCgxjb21tb24ucHJvdG8SBmNvbW1vbiKHAQoKUGFja2FnZU1hcBI8CghwYWNrYWdlcxgBIAMoCzIgLmNvbW1vbi5QYWNrYWdlTWFwLlBhY2thZ2VzRW50cnlSCHBhY2thZ2VzGjsKDVBhY2thZ2VzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAxSBXZhbHVlOgI4ASJFChFTaWduaW5nQ29tbWl0bWVudBIWCgZoaWRpbmcYASABKAxSBmhpZGluZxIYCgdiaW5kaW5nGAIgASgMUgdiaW5kaW5nIjgKDVNpZ25pbmdSZXN1bHQSJwoPc2lnbmF0dXJlX3NoYXJlGAEgASgMUg5zaWduYXR1cmVTaGFyZSpdCg9TaWduYXR1cmVJbnRlbnQSDAoIQ1JFQVRJT04QABIMCghUUkFOU0ZFUhABEg0KCUFHR1JFR0FURRACEg8KB1JFRlJFU0gQAxoCCAESDgoGRVhURU5EEAQaAggBQi1aK2dpdGh1Yi5jb20vbGlnaHRzcGFya2Rldi9zcGFyay9wcm90by9jb21tb25iBnByb3RvMwqeuQIKC3NwYXJrLnByb3RvEgVzcGFyaxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGhd2YWxpZGF0ZS92YWxpZGF0ZS5wcm90bxoMY29tbW9uLnByb3RvIkoKGFN1YnNjcmliZVRvRXZlbnRzUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAogASgMUhFpZGVudGl0eVB1YmxpY0tleSLAAQoZU3Vic2NyaWJlVG9FdmVudHNSZXNwb25zZRIyCgh0cmFuc2ZlchgBIAEoCzIULnNwYXJrLlRyYW5zZmVyRXZlbnRIAFIIdHJhbnNmZXISLwoHZGVwb3NpdBgCIAEoCzITLnNwYXJrLkRlcG9zaXRFdmVudEgAUgdkZXBvc2l0EjUKCWNvbm5lY3RlZBgDIAEoCzIVLnNwYXJrLkNvbm5lY3RlZEV2ZW50SABSCWNvbm5lY3RlZEIHCgVldmVudCIQCg5Db25uZWN0ZWRFdmVudCI8Cg1UcmFuc2ZlckV2ZW50EisKCHRyYW5zZmVyGAogASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIjkKDERlcG9zaXRFdmVudBIpCgdkZXBvc2l0GAogASgLMg8uc3BhcmsuVHJlZU5vZGVSB2RlcG9zaXQicgoLUGFnZVJlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgFUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIuCglkaXJlY3Rpb24YAyABKA4yEC5zcGFyay5EaXJlY3Rpb25SCWRpcmVjdGlvbiKoAQoMUGFnZVJlc3BvbnNlEiIKDWhhc19uZXh0X3BhZ2UYASABKAhSC2hhc05leHRQYWdlEioKEWhhc19wcmV2aW91c19wYWdlGAIgASgIUg9oYXNQcmV2aW91c1BhZ2USHwoLbmV4dF9jdXJzb3IYAyABKAlSCm5leHRDdXJzb3ISJwoPcHJldmlvdXNfY3Vyc29yGAQgASgJUg5wcmV2aW91c0N1cnNvciKAAgoTRGVwb3NpdEFkZHJlc3NQcm9vZhJgChJhZGRyZXNzX3NpZ25hdHVyZXMYASADKAsyMS5zcGFyay5EZXBvc2l0QWRkcmVzc1Byb29mLkFkZHJlc3NTaWduYXR1cmVzRW50cnlSEWFkZHJlc3NTaWduYXR1cmVzEkEKHXByb29mX29mX3Bvc3Nlc3Npb25fc2lnbmF0dXJlGAIgASgMUhpwcm9vZk9mUG9zc2Vzc2lvblNpZ25hdHVyZRpEChZBZGRyZXNzU2lnbmF0dXJlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEilQIKHUdlbmVyYXRlRGVwb3NpdEFkZHJlc3NSZXF1ZXN0EiwKEnNpZ25pbmdfcHVibGljX2tleRgBIAEoDFIQc2lnbmluZ1B1YmxpY0tleRIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhFpZGVudGl0eVB1YmxpY0tleRIyCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya0II+kIFggECIABSB25ldHdvcmsSJgoHbGVhZl9pZBgEIAEoCUII+kIFcgOwAQFIAFIGbGVhZklkiAEBEiAKCWlzX3N0YXRpYxgFIAEoCEgBUghpc1N0YXRpY4gBAUIKCghfbGVhZl9pZEIMCgpfaXNfc3RhdGljIrUBCgdBZGRyZXNzEhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3MSIwoNdmVyaWZ5aW5nX2tleRgCIAEoDFIMdmVyaWZ5aW5nS2V5Ek4KFWRlcG9zaXRfYWRkcmVzc19wcm9vZhgDIAEoCzIaLnNwYXJrLkRlcG9zaXRBZGRyZXNzUHJvb2ZSE2RlcG9zaXRBZGRyZXNzUHJvb2YSGwoJaXNfc3RhdGljGAUgASgIUghpc1N0YXRpYyJZCh5HZW5lcmF0ZURlcG9zaXRBZGRyZXNzUmVzcG9uc2USNwoPZGVwb3NpdF9hZGRyZXNzGAEgASgLMg4uc3BhcmsuQWRkcmVzc1IOZGVwb3NpdEFkZHJlc3MiyQEKI0dlbmVyYXRlU3RhdGljRGVwb3NpdEFkZHJlc3NSZXF1ZXN0EjUKEnNpZ25pbmdfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIQc2lnbmluZ1B1YmxpY0tleRI3ChNpZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUhFpZGVudGl0eVB1YmxpY0tleRIyCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya0II+kIFggECIABSB25ldHdvcmsiXwokR2VuZXJhdGVTdGF0aWNEZXBvc2l0QWRkcmVzc1Jlc3BvbnNlEjcKD2RlcG9zaXRfYWRkcmVzcxgBIAEoCzIOLnNwYXJrLkFkZHJlc3NSDmRlcG9zaXRBZGRyZXNzInkKBFVUWE8SFQoGcmF3X3R4GAEgASgMUgVyYXdUeBISCgR2b3V0GAIgASgNUgR2b3V0EjIKB25ldHdvcmsYAyABKA4yDi5zcGFyay5OZXR3b3JrQgj6QgWCAQIgAFIHbmV0d29yaxISCgR0eGlkGAQgASgMUgR0eGlkIjkKCk5vZGVPdXRwdXQSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEhIKBHZvdXQYAiABKA1SBHZvdXQipgEKClNpZ25pbmdKb2ISLAoSc2lnbmluZ19wdWJsaWNfa2V5GAEgASgMUhBzaWduaW5nUHVibGljS2V5EhUKBnJhd190eBgCIAEoDFIFcmF3VHgSUwoYc2lnbmluZ19ub25jZV9jb21taXRtZW50GAMgASgLMhkuY29tbW9uLlNpZ25pbmdDb21taXRtZW50UhZzaWduaW5nTm9uY2VDb21taXRtZW50IsoCCg9TaWduaW5nS2V5c2hhcmUSKwoRb3duZXJfaWRlbnRpZmllcnMYASADKAlSEG93bmVySWRlbnRpZmllcnMSHAoJdGhyZXNob2xkGAIgASgNUgl0aHJlc2hvbGQSHQoKcHVibGljX2tleRgDIAEoDFIJcHVibGljS2V5Ek0KDXB1YmxpY19zaGFyZXMYBCADKAsyKC5zcGFyay5TaWduaW5nS2V5c2hhcmUuUHVibGljU2hhcmVzRW50cnlSDHB1YmxpY1NoYXJlcxI9Cgx1cGRhdGVkX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgt1cGRhdGVkVGltZRo/ChFQdWJsaWNTaGFyZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoDFIFdmFsdWU6AjgBIsgECg1TaWduaW5nUmVzdWx0EkUKC3B1YmxpY19rZXlzGAEgAygLMiQuc3BhcmsuU2lnbmluZ1Jlc3VsdC5QdWJsaWNLZXlzRW50cnlSCnB1YmxpY0tleXMSbQoZc2lnbmluZ19ub25jZV9jb21taXRtZW50cxgCIAMoCzIxLnNwYXJrLlNpZ25pbmdSZXN1bHQuU2lnbmluZ05vbmNlQ29tbWl0bWVudHNFbnRyeVIXc2lnbmluZ05vbmNlQ29tbWl0bWVudHMSVAoQc2lnbmF0dXJlX3NoYXJlcxgDIAMoCzIpLnNwYXJrLlNpZ25pbmdSZXN1bHQuU2lnbmF0dXJlU2hhcmVzRW50cnlSD3NpZ25hdHVyZVNoYXJlcxJBChBzaWduaW5nX2tleXNoYXJlGAQgASgLMhYuc3BhcmsuU2lnbmluZ0tleXNoYXJlUg9zaWduaW5nS2V5c2hhcmUaPQoPUHVibGljS2V5c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEaZQocU2lnbmluZ05vbmNlQ29tbWl0bWVudHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIvCgV2YWx1ZRgCIAEoCzIZLmNvbW1vbi5TaWduaW5nQ29tbWl0bWVudFIFdmFsdWU6AjgBGkIKFFNpZ25hdHVyZVNoYXJlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEikgMKEFJlbmV3TGVhZlJlcXVlc3QSFwoHbGVhZl9pZBgBIAEoCVIGbGVhZklkEmoKH3JlbmV3X25vZGVfdGltZWxvY2tfc2lnbmluZ19qb2IYAiABKAsyIi5zcGFyay5SZW5ld05vZGVUaW1lbG9ja1NpZ25pbmdKb2JIAFIbcmVuZXdOb2RlVGltZWxvY2tTaWduaW5nSm9iEnAKIXJlbmV3X3JlZnVuZF90aW1lbG9ja19zaWduaW5nX2pvYhgDIAEoCzIkLnNwYXJrLlJlbmV3UmVmdW5kVGltZWxvY2tTaWduaW5nSm9iSABSHXJlbmV3UmVmdW5kVGltZWxvY2tTaWduaW5nSm9iEncKJHJlbmV3X25vZGVfemVyb190aW1lbG9ja19zaWduaW5nX2pvYhgEIAEoCzImLnNwYXJrLlJlbmV3Tm9kZVplcm9UaW1lbG9ja1NpZ25pbmdKb2JIAFIfcmVuZXdOb2RlWmVyb1RpbWVsb2NrU2lnbmluZ0pvYkIOCgxzaWduaW5nX2pvYnMipwUKG1JlbmV3Tm9kZVRpbWVsb2NrU2lnbmluZ0pvYhJXChlzcGxpdF9ub2RlX3R4X3NpZ25pbmdfam9iGAEgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIVc3BsaXROb2RlVHhTaWduaW5nSm9iEmQKIHNwbGl0X25vZGVfZGlyZWN0X3R4X3NpZ25pbmdfam9iGAIgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIbc3BsaXROb2RlRGlyZWN0VHhTaWduaW5nSm9iEkwKE25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhBub2RlVHhTaWduaW5nSm9iElAKFXJlZnVuZF90eF9zaWduaW5nX2pvYhgEIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSEnJlZnVuZFR4U2lnbmluZ0pvYhJZChpkaXJlY3Rfbm9kZV90eF9zaWduaW5nX2pvYhgFIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSFmRpcmVjdE5vZGVUeFNpZ25pbmdKb2ISXQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgGIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJvCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgHIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iIuoDCh1SZW5ld1JlZnVuZFRpbWVsb2NrU2lnbmluZ0pvYhJMChNub2RlX3R4X3NpZ25pbmdfam9iGAEgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIQbm9kZVR4U2lnbmluZ0pvYhJQChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAiABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISWQoaZGlyZWN0X25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhZkaXJlY3ROb2RlVHhTaWduaW5nSm9iEl0KHGRpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYBCABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhhkaXJlY3RSZWZ1bmRUeFNpZ25pbmdKb2ISbwomZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYBSABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUiBkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ0pvYiKTAwofUmVuZXdOb2RlWmVyb1RpbWVsb2NrU2lnbmluZ0pvYhJMChNub2RlX3R4X3NpZ25pbmdfam9iGAEgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIQbm9kZVR4U2lnbmluZ0pvYhJQChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAiABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISWQoaZGlyZWN0X25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhZkaXJlY3ROb2RlVHhTaWduaW5nSm9iEm8KJmRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3R4X3NpZ25pbmdfam9iGAUgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIgZGlyZWN0RnJvbUNwZnBSZWZ1bmRUeFNpZ25pbmdKb2JKBAgEEAUi0wIKEVJlbmV3TGVhZlJlc3BvbnNlEl0KGnJlbmV3X25vZGVfdGltZWxvY2tfcmVzdWx0GAEgASgLMh4uc3BhcmsuUmVuZXdOb2RlVGltZWxvY2tSZXN1bHRIAFIXcmVuZXdOb2RlVGltZWxvY2tSZXN1bHQSYwoccmVuZXdfcmVmdW5kX3RpbWVsb2NrX3Jlc3VsdBgCIAEoCzIgLnNwYXJrLlJlbmV3UmVmdW5kVGltZWxvY2tSZXN1bHRIAFIZcmVuZXdSZWZ1bmRUaW1lbG9ja1Jlc3VsdBJqCh9yZW5ld19ub2RlX3plcm9fdGltZWxvY2tfcmVzdWx0GAMgASgLMiIuc3BhcmsuUmVuZXdOb2RlWmVyb1RpbWVsb2NrUmVzdWx0SABSG3JlbmV3Tm9kZVplcm9UaW1lbG9ja1Jlc3VsdEIOCgxyZW5ld19yZXN1bHQibgoXUmVuZXdOb2RlVGltZWxvY2tSZXN1bHQSLgoKc3BsaXRfbm9kZRgBIAEoCzIPLnNwYXJrLlRyZWVOb2RlUglzcGxpdE5vZGUSIwoEbm9kZRgCIAEoCzIPLnNwYXJrLlRyZWVOb2RlUgRub2RlIkAKGVJlbmV3UmVmdW5kVGltZWxvY2tSZXN1bHQSIwoEbm9kZRgBIAEoCzIPLnNwYXJrLlRyZWVOb2RlUgRub2RlInIKG1JlbmV3Tm9kZVplcm9UaW1lbG9ja1Jlc3VsdBIuCgpzcGxpdF9ub2RlGAEgASgLMg8uc3BhcmsuVHJlZU5vZGVSCXNwbGl0Tm9kZRIjCgRub2RlGAIgASgLMg8uc3BhcmsuVHJlZU5vZGVSBG5vZGUijwQKE05vZGVTaWduYXR1cmVTaGFyZXMSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEkkKFm5vZGVfdHhfc2lnbmluZ19yZXN1bHQYAiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhNub2RlVHhTaWduaW5nUmVzdWx0Ek0KGHJlZnVuZF90eF9zaWduaW5nX3Jlc3VsdBgDIAEoCzIULnNwYXJrLlNpZ25pbmdSZXN1bHRSFXJlZnVuZFR4U2lnbmluZ1Jlc3VsdBIjCg12ZXJpZnlpbmdfa2V5GAQgASgMUgx2ZXJpZnlpbmdLZXkSVgodZGlyZWN0X25vZGVfdHhfc2lnbmluZ19yZXN1bHQYBSABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhlkaXJlY3ROb2RlVHhTaWduaW5nUmVzdWx0EloKH2RpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhtkaXJlY3RSZWZ1bmRUeFNpZ25pbmdSZXN1bHQSbAopZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYByABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCLKAgoOTm9kZVNpZ25hdHVyZXMSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEioKEW5vZGVfdHhfc2lnbmF0dXJlGAIgASgMUg9ub2RlVHhTaWduYXR1cmUSLgoTcmVmdW5kX3R4X3NpZ25hdHVyZRgDIAEoDFIRcmVmdW5kVHhTaWduYXR1cmUSNwoYZGlyZWN0X25vZGVfdHhfc2lnbmF0dXJlGAQgASgMUhVkaXJlY3ROb2RlVHhTaWduYXR1cmUSOwoaZGlyZWN0X3JlZnVuZF90eF9zaWduYXR1cmUYBSABKAxSF2RpcmVjdFJlZnVuZFR4U2lnbmF0dXJlEk0KJGRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3R4X3NpZ25hdHVyZRgGIAEoDFIfZGlyZWN0RnJvbUNwZnBSZWZ1bmRUeFNpZ25hdHVyZSKKBAoYU3RhcnRUcmVlQ3JlYXRpb25SZXF1ZXN0Ei4KE2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSEWlkZW50aXR5UHVibGljS2V5Ei8KDW9uX2NoYWluX3V0eG8YAiABKAsyCy5zcGFyay5VVFhPUgtvbkNoYWluVXR4bxJAChNyb290X3R4X3NpZ25pbmdfam9iGAMgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIQcm9vdFR4U2lnbmluZ0pvYhJEChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYBCABKAsyES5zcGFyay5TaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISTQoaZGlyZWN0X3Jvb3RfdHhfc2lnbmluZ19qb2IYBSABKAsyES5zcGFyay5TaWduaW5nSm9iUhZkaXJlY3RSb290VHhTaWduaW5nSm9iElEKHGRpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYBiABKAsyES5zcGFyay5TaWduaW5nSm9iUhhkaXJlY3RSZWZ1bmRUeFNpZ25pbmdKb2ISYwomZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYByABKAsyES5zcGFyay5TaWduaW5nSm9iUiBkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ0pvYiKNAQoZU3RhcnRUcmVlQ3JlYXRpb25SZXNwb25zZRIXCgd0cmVlX2lkGAEgASgJUgZ0cmVlSWQSVwoacm9vdF9ub2RlX3NpZ25hdHVyZV9zaGFyZXMYAiABKAsyGi5zcGFyay5Ob2RlU2lnbmF0dXJlU2hhcmVzUhdyb290Tm9kZVNpZ25hdHVyZVNoYXJlcyKRBAofU3RhcnREZXBvc2l0VHJlZUNyZWF0aW9uUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhFpZGVudGl0eVB1YmxpY0tleRIvCg1vbl9jaGFpbl91dHhvGAIgASgLMgsuc3BhcmsuVVRYT1ILb25DaGFpblV0eG8SQAoTcm9vdF90eF9zaWduaW5nX2pvYhgDIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSEHJvb3RUeFNpZ25pbmdKb2ISRAoVcmVmdW5kX3R4X3NpZ25pbmdfam9iGAQgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIScmVmdW5kVHhTaWduaW5nSm9iEk0KGmRpcmVjdF9yb290X3R4X3NpZ25pbmdfam9iGAUgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIWZGlyZWN0Um9vdFR4U2lnbmluZ0pvYhJRChxkaXJlY3RfcmVmdW5kX3R4X3NpZ25pbmdfam9iGAYgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIYZGlyZWN0UmVmdW5kVHhTaWduaW5nSm9iEmMKJmRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3R4X3NpZ25pbmdfam9iGAcgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIgZGlyZWN0RnJvbUNwZnBSZWZ1bmRUeFNpZ25pbmdKb2IilAEKIFN0YXJ0RGVwb3NpdFRyZWVDcmVhdGlvblJlc3BvbnNlEhcKB3RyZWVfaWQYASABKAlSBnRyZWVJZBJXChpyb290X25vZGVfc2lnbmF0dXJlX3NoYXJlcxgCIAEoCzIaLnNwYXJrLk5vZGVTaWduYXR1cmVTaGFyZXNSF3Jvb3ROb2RlU2lnbmF0dXJlU2hhcmVzIpsBChJUb2tlbk91dHB1dFRvU3BlbmQSRgobcHJldl90b2tlbl90cmFuc2FjdGlvbl9oYXNoGAEgASgMQgf6QgR6AmggUhhwcmV2VG9rZW5UcmFuc2FjdGlvbkhhc2gSPQobcHJldl90b2tlbl90cmFuc2FjdGlvbl92b3V0GAIgASgNUhhwcmV2VG9rZW5UcmFuc2FjdGlvblZvdXQiWQoSVG9rZW5UcmFuc2ZlcklucHV0EkMKEG91dHB1dHNfdG9fc3BlbmQYASADKAsyGS5zcGFyay5Ub2tlbk91dHB1dFRvU3BlbmRSDm91dHB1dHNUb1NwZW5kIs8BCg5Ub2tlbk1pbnRJbnB1dBIzChFpc3N1ZXJfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIPaXNzdWVyUHVibGljS2V5EjoKGWlzc3Vlcl9wcm92aWRlZF90aW1lc3RhbXAYAiABKARSF2lzc3VlclByb3ZpZGVkVGltZXN0YW1wEjcKEHRva2VuX2lkZW50aWZpZXIYAyABKAxCB/pCBHoCaCBIAFIPdG9rZW5JZGVudGlmaWVyiAEBQhMKEV90b2tlbl9pZGVudGlmaWVyIvYCChBUb2tlbkNyZWF0ZUlucHV0EjMKEWlzc3Vlcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg9pc3N1ZXJQdWJsaWNLZXkSJgoKdG9rZW5fbmFtZRgCIAEoCUIH+kIEcgIYFFIJdG9rZW5OYW1lEioKDHRva2VuX3RpY2tlchgDIAEoCUIH+kIEcgIYBlILdG9rZW5UaWNrZXISJAoIZGVjaW1hbHMYBCABKA1CCPpCBSoDGP8BUghkZWNpbWFscxImCgptYXhfc3VwcGx5GAUgASgMQgf6QgR6AmgQUgltYXhTdXBwbHkSIQoMaXNfZnJlZXphYmxlGAYgASgIUgtpc0ZyZWV6YWJsZRJJChpjcmVhdGlvbl9lbnRpdHlfcHVibGljX2tleRgHIAEoDEIH+kIEegJoIUgAUhdjcmVhdGlvbkVudGl0eVB1YmxpY0tleYgBAUIdChtfY3JlYXRpb25fZW50aXR5X3B1YmxpY19rZXkixwQKC1Rva2VuT3V0cHV0Eh0KAmlkGAEgASgJQgj6QgVyA7ABAUgAUgJpZIgBARIxChBvd25lcl9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRJBChVyZXZvY2F0aW9uX2NvbW1pdG1lbnQYAyABKAxCB/pCBHoCaCFIAVIUcmV2b2NhdGlvbkNvbW1pdG1lbnSIAQESMQoSd2l0aGRyYXdfYm9uZF9zYXRzGAQgASgESAJSEHdpdGhkcmF3Qm9uZFNhdHOIAQESTAogd2l0aGRyYXdfcmVsYXRpdmVfYmxvY2tfbG9ja3RpbWUYBSABKARIA1Idd2l0aGRyYXdSZWxhdGl2ZUJsb2NrTG9ja3RpbWWIAQESNgoQdG9rZW5fcHVibGljX2tleRgGIAEoDEIH+kIEegJoIUgEUg50b2tlblB1YmxpY0tleYgBARI3ChB0b2tlbl9pZGVudGlmaWVyGAggASgMQgf6QgR6AmggSAVSD3Rva2VuSWRlbnRpZmllcogBARIqCgx0b2tlbl9hbW91bnQYByABKAxCB/pCBHoCaBBSC3Rva2VuQW1vdW50QgUKA19pZEIYChZfcmV2b2NhdGlvbl9jb21taXRtZW50QhUKE193aXRoZHJhd19ib25kX3NhdHNCIwohX3dpdGhkcmF3X3JlbGF0aXZlX2Jsb2NrX2xvY2t0aW1lQhMKEV90b2tlbl9wdWJsaWNfa2V5QhMKEV90b2tlbl9pZGVudGlmaWVyIqUDChBUb2tlblRyYW5zYWN0aW9uEjYKCm1pbnRfaW5wdXQYASABKAsyFS5zcGFyay5Ub2tlbk1pbnRJbnB1dEgAUgltaW50SW5wdXQSQgoOdHJhbnNmZXJfaW5wdXQYAiABKAsyGS5zcGFyay5Ub2tlblRyYW5zZmVySW5wdXRIAFINdHJhbnNmZXJJbnB1dBI8CgxjcmVhdGVfaW5wdXQYBSABKAsyFy5zcGFyay5Ub2tlbkNyZWF0ZUlucHV0SABSC2NyZWF0ZUlucHV0EjcKDXRva2VuX291dHB1dHMYAyADKAsyEi5zcGFyay5Ub2tlbk91dHB1dFIMdG9rZW5PdXRwdXRzEloKI3NwYXJrX29wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXlzGAQgAygMQgz6QgmSAQYiBHoCaCFSH3NwYXJrT3BlcmF0b3JJZGVudGl0eVB1YmxpY0tleXMSMgoHbmV0d29yaxgKIAEoDjIOLnNwYXJrLk5ldHdvcmtCCPpCBYIBAiAAUgduZXR3b3JrQg4KDHRva2VuX2lucHV0cyJeChJTaWduYXR1cmVXaXRoSW5kZXgSJwoJc2lnbmF0dXJlGAEgASgMQgn6QgZ6BBBAGElSCXNpZ25hdHVyZRIfCgtpbnB1dF9pbmRleBgCIAEoDVIKaW5wdXRJbmRleCLFAQovT3BlcmF0b3JTcGVjaWZpY1Rva2VuVHJhbnNhY3Rpb25TaWduYWJsZVBheWxvYWQSSAocZmluYWxfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgBIAEoDEIH+kIEegJoIFIZZmluYWxUb2tlblRyYW5zYWN0aW9uSGFzaBJIChxvcGVyYXRvcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUhlvcGVyYXRvcklkZW50aXR5UHVibGljS2V5IrYBCh5PcGVyYXRvclNwZWNpZmljT3duZXJTaWduYXR1cmUSQgoPb3duZXJfc2lnbmF0dXJlGAEgASgLMhkuc3BhcmsuU2lnbmF0dXJlV2l0aEluZGV4Ug5vd25lclNpZ25hdHVyZRJQCgdwYXlsb2FkGAIgASgLMjYuc3BhcmsuT3BlcmF0b3JTcGVjaWZpY1Rva2VuVHJhbnNhY3Rpb25TaWduYWJsZVBheWxvYWRSB3BheWxvYWQicgoZUmV2b2NhdGlvblNlY3JldFdpdGhJbmRleBIfCgtpbnB1dF9pbmRleBgBIAEoDVIKaW5wdXRJbmRleBI0ChFyZXZvY2F0aW9uX3NlY3JldBgCIAEoDEIH+kIEegJoIFIQcmV2b2NhdGlvblNlY3JldCL4AgoTRnJlZXplVG9rZW5zUGF5bG9hZBIxChBvd25lcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRIxChB0b2tlbl9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUg50b2tlblB1YmxpY0tleRI6Chlpc3N1ZXJfcHJvdmlkZWRfdGltZXN0YW1wGAMgASgEUhdpc3N1ZXJQcm92aWRlZFRpbWVzdGFtcBJIChxvcGVyYXRvcl9pZGVudGl0eV9wdWJsaWNfa2V5GAQgASgMQgf6QgR6AmghUhlvcGVyYXRvcklkZW50aXR5UHVibGljS2V5EicKD3Nob3VsZF91bmZyZWV6ZRgFIAEoCFIOc2hvdWxkVW5mcmVlemUSNwoQdG9rZW5faWRlbnRpZmllchgGIAEoDEIH+kIEegJoIEgAUg90b2tlbklkZW50aWZpZXKIAQFCEwoRX3Rva2VuX2lkZW50aWZpZXIimwEKE0ZyZWV6ZVRva2Vuc1JlcXVlc3QSTgoVZnJlZXplX3Rva2Vuc19wYXlsb2FkGAEgASgLMhouc3BhcmsuRnJlZXplVG9rZW5zUGF5bG9hZFITZnJlZXplVG9rZW5zUGF5bG9hZBI0ChBpc3N1ZXJfc2lnbmF0dXJlGAIgASgMQgn6QgZ6BBBAGElSD2lzc3VlclNpZ25hdHVyZSKJAQoURnJlZXplVG9rZW5zUmVzcG9uc2USPQoTaW1wYWN0ZWRfb3V0cHV0X2lkcxgBIAMoCUIN+kIKkgEHIgVyA7ABAVIRaW1wYWN0ZWRPdXRwdXRJZHMSMgoVaW1wYWN0ZWRfdG9rZW5fYW1vdW50GAIgASgMUhNpbXBhY3RlZFRva2VuQW1vdW50Iv0FCghUcmVlTm9kZRIOCgJpZBgBIAEoCVICaWQSFwoHdHJlZV9pZBgCIAEoCVIGdHJlZUlkEhQKBXZhbHVlGAMgASgEUgV2YWx1ZRIpCg5wYXJlbnRfbm9kZV9pZBgEIAEoCUgAUgxwYXJlbnROb2RlSWSIAQESFwoHbm9kZV90eBgFIAEoDFIGbm9kZVR4EhsKCXJlZnVuZF90eBgGIAEoDFIIcmVmdW5kVHgSEgoEdm91dBgHIAEoDVIEdm91dBIwChR2ZXJpZnlpbmdfcHVibGljX2tleRgIIAEoDFISdmVyaWZ5aW5nUHVibGljS2V5EjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYCSABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSQQoQc2lnbmluZ19rZXlzaGFyZRgKIAEoCzIWLnNwYXJrLlNpZ25pbmdLZXlzaGFyZVIPc2lnbmluZ0tleXNoYXJlEhYKBnN0YXR1cxgLIAEoCVIGc3RhdHVzEigKB25ldHdvcmsYDCABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEj0KDGNyZWF0ZWRfdGltZRgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSC2NyZWF0ZWRUaW1lEj0KDHVwZGF0ZWRfdGltZRgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSC3VwZGF0ZWRUaW1lEjcKGG93bmVyX3NpZ25pbmdfcHVibGljX2tleRgPIAEoDFIVb3duZXJTaWduaW5nUHVibGljS2V5EhsKCWRpcmVjdF90eBgQIAEoDFIIZGlyZWN0VHgSKAoQZGlyZWN0X3JlZnVuZF90eBgRIAEoDFIOZGlyZWN0UmVmdW5kVHgSOgoaZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHgYEiABKAxSFmRpcmVjdEZyb21DcGZwUmVmdW5kVHhCEQoPX3BhcmVudF9ub2RlX2lkIpABCh1GaW5hbGl6ZU5vZGVTaWduYXR1cmVzUmVxdWVzdBIvCgZpbnRlbnQYASABKA4yFy5jb21tb24uU2lnbmF0dXJlSW50ZW50UgZpbnRlbnQSPgoPbm9kZV9zaWduYXR1cmVzGAIgAygLMhUuc3BhcmsuTm9kZVNpZ25hdHVyZXNSDm5vZGVTaWduYXR1cmVzIkcKHkZpbmFsaXplTm9kZVNpZ25hdHVyZXNSZXNwb25zZRIlCgVub2RlcxgBIAMoCzIPLnNwYXJrLlRyZWVOb2RlUgVub2RlcyJICgtTZWNyZXRTaGFyZRIhCgxzZWNyZXRfc2hhcmUYASABKAxSC3NlY3JldFNoYXJlEhYKBnByb29mcxgCIAMoDFIGcHJvb2ZzIiUKC1NlY3JldFByb29mEhYKBnByb29mcxgBIAMoDFIGcHJvb2ZzIq8CChZMZWFmUmVmdW5kVHhTaWduaW5nSm9iEhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBJEChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAiABKAsyES5zcGFyay5TaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISUQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgDIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJjCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgEIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iIr4CChZVc2VyU2lnbmVkVHhTaWduaW5nSm9iEhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBIsChJzaWduaW5nX3B1YmxpY19rZXkYAiABKAxSEHNpZ25pbmdQdWJsaWNLZXkSFQoGcmF3X3R4GAMgASgMUgVyYXdUeBJTChhzaWduaW5nX25vbmNlX2NvbW1pdG1lbnQYBCABKAsyGS5jb21tb24uU2lnbmluZ0NvbW1pdG1lbnRSFnNpZ25pbmdOb25jZUNvbW1pdG1lbnQSJQoOdXNlcl9zaWduYXR1cmUYBSABKAxSDXVzZXJTaWduYXR1cmUSSgoTc2lnbmluZ19jb21taXRtZW50cxgGIAEoCzIZLnNwYXJrLlNpZ25pbmdDb21taXRtZW50c1ISc2lnbmluZ0NvbW1pdG1lbnRzIvICChlMZWFmUmVmdW5kVHhTaWduaW5nUmVzdWx0EhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBJNChhyZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYAiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSIwoNdmVyaWZ5aW5nX2tleRgDIAEoDFIMdmVyaWZ5aW5nS2V5EloKH2RpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBCABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhtkaXJlY3RSZWZ1bmRUeFNpZ25pbmdSZXN1bHQSbAopZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBSABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCL1AwoeU3RhcnRVc2VyU2lnbmVkVHJhbnNmZXJSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSQwoObGVhdmVzX3RvX3NlbmQYAyADKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUgxsZWF2ZXNUb1NlbmQSPwoccmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRgEIAEoDFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRI7CgtleHBpcnlfdGltZRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSCmV4cGlyeVRpbWUSUAoVZGlyZWN0X2xlYXZlc190b19zZW5kGAYgAygLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlISZGlyZWN0TGVhdmVzVG9TZW5kEmIKH2RpcmVjdF9mcm9tX2NwZnBfbGVhdmVzX3RvX3NlbmQYByADKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhpkaXJlY3RGcm9tQ3BmcExlYXZlc1RvU2VuZCKpAwoUU3RhcnRUcmFuc2ZlclJlcXVlc3QSHwoLdHJhbnNmZXJfaWQYASABKAlSCnRyYW5zZmVySWQSOQoZb3duZXJfaWRlbnRpdHlfcHVibGljX2tleRgCIAEoDFIWb3duZXJJZGVudGl0eVB1YmxpY0tleRJDCg5sZWF2ZXNfdG9fc2VuZBgDIAMoCzIdLnNwYXJrLkxlYWZSZWZ1bmRUeFNpZ25pbmdKb2JSDGxlYXZlc1RvU2VuZBI/ChxyZWNlaXZlcl9pZGVudGl0eV9wdWJsaWNfa2V5GAQgASgMUhlyZWNlaXZlcklkZW50aXR5UHVibGljS2V5EjsKC2V4cGlyeV90aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIKZXhwaXJ5VGltZRJBChB0cmFuc2Zlcl9wYWNrYWdlGAcgASgLMhYuc3BhcmsuVHJhbnNmZXJQYWNrYWdlUg90cmFuc2ZlclBhY2thZ2USIwoNc3BhcmtfaW52b2ljZRgKIAEoCVIMc3BhcmtJbnZvaWNlSgQIBhAHSgQICRAKIo8BChVTdGFydFRyYW5zZmVyUmVzcG9uc2USKwoIdHJhbnNmZXIYASABKAsyDy5zcGFyay5UcmFuc2ZlclIIdHJhbnNmZXISSQoPc2lnbmluZ19yZXN1bHRzGAIgAygLMiAuc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMi0AMKD1RyYW5zZmVyUGFja2FnZRJDCg5sZWF2ZXNfdG9fc2VuZBgBIAMoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSDGxlYXZlc1RvU2VuZBJXChFrZXlfdHdlYWtfcGFja2FnZRgCIAMoCzIrLnNwYXJrLlRyYW5zZmVyUGFja2FnZS5LZXlUd2Vha1BhY2thZ2VFbnRyeVIPa2V5VHdlYWtQYWNrYWdlEiUKDnVzZXJfc2lnbmF0dXJlGAMgASgMUg11c2VyU2lnbmF0dXJlElAKFWRpcmVjdF9sZWF2ZXNfdG9fc2VuZBgEIAMoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSEmRpcmVjdExlYXZlc1RvU2VuZBJiCh9kaXJlY3RfZnJvbV9jcGZwX2xlYXZlc190b19zZW5kGAUgAygLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIaZGlyZWN0RnJvbUNwZnBMZWF2ZXNUb1NlbmQaQgoUS2V5VHdlYWtQYWNrYWdlRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAxSBXZhbHVlOgI4ASJSChFTZW5kTGVhZktleVR3ZWFrcxI9Cg5sZWF2ZXNfdG9fc2VuZBgBIAMoCzIXLnNwYXJrLlNlbmRMZWFmS2V5VHdlYWtSDGxlYXZlc1RvU2VuZCKDBAoQU2VuZExlYWZLZXlUd2VhaxIXCgdsZWFmX2lkGAEgASgJUgZsZWFmSWQSQAoSc2VjcmV0X3NoYXJlX3R3ZWFrGAIgASgLMhIuc3BhcmsuU2VjcmV0U2hhcmVSEHNlY3JldFNoYXJlVHdlYWsSXgoTcHVia2V5X3NoYXJlc190d2VhaxgDIAMoCzIuLnNwYXJrLlNlbmRMZWFmS2V5VHdlYWsuUHVia2V5U2hhcmVzVHdlYWtFbnRyeVIRcHVia2V5U2hhcmVzVHdlYWsSIwoNc2VjcmV0X2NpcGhlchgEIAEoDFIMc2VjcmV0Q2lwaGVyEhwKCXNpZ25hdHVyZRgFIAEoDFIJc2lnbmF0dXJlEikKEHJlZnVuZF9zaWduYXR1cmUYBiABKAxSD3JlZnVuZFNpZ25hdHVyZRI2ChdkaXJlY3RfcmVmdW5kX3NpZ25hdHVyZRgHIAEoDFIVZGlyZWN0UmVmdW5kU2lnbmF0dXJlEkgKIWRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3NpZ25hdHVyZRgIIAEoDFIdZGlyZWN0RnJvbUNwZnBSZWZ1bmRTaWduYXR1cmUaRAoWUHVia2V5U2hhcmVzVHdlYWtFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoDFIFdmFsdWU6AjgBIuYBChdGaW5hbGl6ZVRyYW5zZmVyUmVxdWVzdBIfCgt0cmFuc2Zlcl9pZBgBIAEoCVIKdHJhbnNmZXJJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5Ej0KDmxlYXZlc190b19zZW5kGAMgAygLMhcuc3BhcmsuU2VuZExlYWZLZXlUd2Vha1IMbGVhdmVzVG9TZW5kEjAKFHNwYXJrX3BheW1lbnRfaW50ZW50GAQgASgJUhJzcGFya1BheW1lbnRJbnRlbnQiywEKKkZpbmFsaXplVHJhbnNmZXJXaXRoVHJhbnNmZXJQYWNrYWdlUmVxdWVzdBIfCgt0cmFuc2Zlcl9pZBgBIAEoCVIKdHJhbnNmZXJJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EkEKEHRyYW5zZmVyX3BhY2thZ2UYAyABKAsyFi5zcGFyay5UcmFuc2ZlclBhY2thZ2VSD3RyYW5zZmVyUGFja2FnZSJHChhGaW5hbGl6ZVRyYW5zZmVyUmVzcG9uc2USKwoIdHJhbnNmZXIYASABKAsyDy5zcGFyay5UcmFuc2ZlclIIdHJhbnNmZXIiyAQKCFRyYW5zZmVyEg4KAmlkGAEgASgJUgJpZBI7ChpzZW5kZXJfaWRlbnRpdHlfcHVibGljX2tleRgCIAEoDFIXc2VuZGVySWRlbnRpdHlQdWJsaWNLZXkSPwoccmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRgDIAEoDFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRItCgZzdGF0dXMYBCABKA4yFS5zcGFyay5UcmFuc2ZlclN0YXR1c1IGc3RhdHVzEh8KC3RvdGFsX3ZhbHVlGAUgASgEUgp0b3RhbFZhbHVlEjsKC2V4cGlyeV90aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIKZXhwaXJ5VGltZRIrCgZsZWF2ZXMYByADKAsyEy5zcGFyay5UcmFuc2ZlckxlYWZSBmxlYXZlcxI9CgxjcmVhdGVkX3RpbWUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgtjcmVhdGVkVGltZRI9Cgx1cGRhdGVkX3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgt1cGRhdGVkVGltZRInCgR0eXBlGAogASgOMhMuc3BhcmsuVHJhbnNmZXJUeXBlUgR0eXBlEiMKDXNwYXJrX2ludm9pY2UYCyABKAlSDHNwYXJrSW52b2ljZRIoCgduZXR3b3JrGAwgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yayKEAwoMVHJhbnNmZXJMZWFmEiMKBGxlYWYYASABKAsyDy5zcGFyay5UcmVlTm9kZVIEbGVhZhIjCg1zZWNyZXRfY2lwaGVyGAIgASgMUgxzZWNyZXRDaXBoZXISHAoJc2lnbmF0dXJlGAMgASgMUglzaWduYXR1cmUSNAoWaW50ZXJtZWRpYXRlX3JlZnVuZF90eBgEIAEoDFIUaW50ZXJtZWRpYXRlUmVmdW5kVHgSQQodaW50ZXJtZWRpYXRlX2RpcmVjdF9yZWZ1bmRfdHgYBSABKAxSGmludGVybWVkaWF0ZURpcmVjdFJlZnVuZFR4ElMKJ2ludGVybWVkaWF0ZV9kaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eBgGIAEoDFIiaW50ZXJtZWRpYXRlRGlyZWN0RnJvbUNwZnBSZWZ1bmRUeBI+ChxwZW5kaW5nX2tleV90d2Vha19wdWJsaWNfa2V5GAcgASgMUhhwZW5kaW5nS2V5VHdlYWtQdWJsaWNLZXki8wMKDlRyYW5zZmVyRmlsdGVyEkEKHHJlY2VpdmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxIAFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRI9ChpzZW5kZXJfaWRlbnRpdHlfcHVibGljX2tleRgCIAEoDEgAUhdzZW5kZXJJZGVudGl0eVB1YmxpY0tleRJTCiZzZW5kZXJfb3JfcmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRg8IAEoDEgAUiFzZW5kZXJPclJlY2VpdmVySWRlbnRpdHlQdWJsaWNLZXkSIQoMdHJhbnNmZXJfaWRzGAMgAygJUgt0cmFuc2ZlcklkcxIUCgVsaW1pdBgoIAEoA1IFbGltaXQSFgoGb2Zmc2V0GDIgASgDUgZvZmZzZXQSKQoFdHlwZXMYRiADKA4yEy5zcGFyay5UcmFuc2ZlclR5cGVSBXR5cGVzEigKB25ldHdvcmsYBCABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEjEKCHN0YXR1c2VzGFAgAygOMhUuc3BhcmsuVHJhbnNmZXJTdGF0dXNSCHN0YXR1c2VzEiIKBW9yZGVyGAUgASgOMgwuc3BhcmsuT3JkZXJSBW9yZGVyQg0KC3BhcnRpY2lwYW50Il8KFlF1ZXJ5VHJhbnNmZXJzUmVzcG9uc2USLQoJdHJhbnNmZXJzGAEgAygLMg8uc3BhcmsuVHJhbnNmZXJSCXRyYW5zZmVycxIWCgZvZmZzZXQYAiABKANSBm9mZnNldCKVAgoRQ2xhaW1MZWFmS2V5VHdlYWsSFwoHbGVhZl9pZBgBIAEoCVIGbGVhZklkEkAKEnNlY3JldF9zaGFyZV90d2VhaxgCIAEoCzISLnNwYXJrLlNlY3JldFNoYXJlUhBzZWNyZXRTaGFyZVR3ZWFrEl8KE3B1YmtleV9zaGFyZXNfdHdlYWsYAyADKAsyLy5zcGFyay5DbGFpbUxlYWZLZXlUd2Vhay5QdWJrZXlTaGFyZXNUd2Vha0VudHJ5UhFwdWJrZXlTaGFyZXNUd2VhaxpEChZQdWJrZXlTaGFyZXNUd2Vha0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEiwQEKHUNsYWltVHJhbnNmZXJUd2Vha0tleXNSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSRAoRbGVhdmVzX3RvX3JlY2VpdmUYAyADKAsyGC5zcGFyay5DbGFpbUxlYWZLZXlUd2Vha1IPbGVhdmVzVG9SZWNlaXZlIsUBCh9DbGFpbVRyYW5zZmVyU2lnblJlZnVuZHNSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSQAoMc2lnbmluZ19qb2JzGAMgAygLMh0uc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ0pvYlILc2lnbmluZ0pvYnNKBAgEEAUibQogQ2xhaW1UcmFuc2ZlclNpZ25SZWZ1bmRzUmVzcG9uc2USSQoPc2lnbmluZ19yZXN1bHRzGAEgAygLMiAuc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMi9wEKGVN0b3JlUHJlaW1hZ2VTaGFyZVJlcXVlc3QSIQoMcGF5bWVudF9oYXNoGAEgASgMUgtwYXltZW50SGFzaBI5Cg5wcmVpbWFnZV9zaGFyZRgCIAEoCzISLnNwYXJrLlNlY3JldFNoYXJlUg1wcmVpbWFnZVNoYXJlEhwKCXRocmVzaG9sZBgDIAEoDVIJdGhyZXNob2xkEiUKDmludm9pY2Vfc3RyaW5nGAQgASgJUg1pbnZvaWNlU3RyaW5nEjcKGHVzZXJfaWRlbnRpdHlfcHVibGljX2tleRgFIAEoDFIVdXNlcklkZW50aXR5UHVibGljS2V5IoECChtSZXF1ZXN0ZWRTaWduaW5nQ29tbWl0bWVudHMSewoZc2lnbmluZ19ub25jZV9jb21taXRtZW50cxgBIAMoCzI/LnNwYXJrLlJlcXVlc3RlZFNpZ25pbmdDb21taXRtZW50cy5TaWduaW5nTm9uY2VDb21taXRtZW50c0VudHJ5UhdzaWduaW5nTm9uY2VDb21taXRtZW50cxplChxTaWduaW5nTm9uY2VDb21taXRtZW50c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuY29tbW9uLlNpZ25pbmdDb21taXRtZW50UgV2YWx1ZToCOAEiTwocR2V0U2lnbmluZ0NvbW1pdG1lbnRzUmVxdWVzdBIZCghub2RlX2lkcxgBIAMoCVIHbm9kZUlkcxIUCgVjb3VudBgCIAEoDVIFY291bnQidAodR2V0U2lnbmluZ0NvbW1pdG1lbnRzUmVzcG9uc2USUwoTc2lnbmluZ19jb21taXRtZW50cxgBIAMoCzIiLnNwYXJrLlJlcXVlc3RlZFNpZ25pbmdDb21taXRtZW50c1ISc2lnbmluZ0NvbW1pdG1lbnRzItoBChJTaWduaW5nQ29tbWl0bWVudHMSYgoTc2lnbmluZ19jb21taXRtZW50cxgBIAMoCzIxLnNwYXJrLlNpZ25pbmdDb21taXRtZW50cy5TaWduaW5nQ29tbWl0bWVudHNFbnRyeVISc2lnbmluZ0NvbW1pdG1lbnRzGmAKF1NpZ25pbmdDb21taXRtZW50c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuY29tbW9uLlNpZ25pbmdDb21taXRtZW50UgV2YWx1ZToCOAEixgIKEFVzZXJTaWduZWRSZWZ1bmQSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEhsKCXJlZnVuZF90eBgCIAEoDFIIcmVmdW5kVHgSJQoOdXNlcl9zaWduYXR1cmUYAyABKAxSDXVzZXJTaWduYXR1cmUSSgoTc2lnbmluZ19jb21taXRtZW50cxgEIAEoCzIZLnNwYXJrLlNpZ25pbmdDb21taXRtZW50c1ISc2lnbmluZ0NvbW1pdG1lbnRzElUKGXVzZXJfc2lnbmF0dXJlX2NvbW1pdG1lbnQYBSABKAsyGS5jb21tb24uU2lnbmluZ0NvbW1pdG1lbnRSF3VzZXJTaWduYXR1cmVDb21taXRtZW50EjIKB25ldHdvcmsYBiABKA4yDi5zcGFyay5OZXR3b3JrQgj6QgWCAQIgAFIHbmV0d29yayI7ChJJbnZvaWNlQW1vdW50UHJvb2YSJQoOYm9sdDExX2ludm9pY2UYASABKAlSDWJvbHQxMUludm9pY2UiewoNSW52b2ljZUFtb3VudBIdCgp2YWx1ZV9zYXRzGAEgASgEUgl2YWx1ZVNhdHMSSwoUaW52b2ljZV9hbW91bnRfcHJvb2YYAiABKAsyGS5zcGFyay5JbnZvaWNlQW1vdW50UHJvb2ZSEmludm9pY2VBbW91bnRQcm9vZiLWAwobSW5pdGlhdGVQcmVpbWFnZVN3YXBSZXF1ZXN0EiEKDHBheW1lbnRfaGFzaBgBIAEoDFILcGF5bWVudEhhc2gSOwoOaW52b2ljZV9hbW91bnQYAiABKAsyFC5zcGFyay5JbnZvaWNlQW1vdW50Ug1pbnZvaWNlQW1vdW50EkEKBnJlYXNvbhgDIAEoDjIpLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVxdWVzdC5SZWFzb25SBnJlYXNvbhJBCgh0cmFuc2ZlchgEIAEoCzIlLnNwYXJrLlN0YXJ0VXNlclNpZ25lZFRyYW5zZmVyUmVxdWVzdFIIdHJhbnNmZXISPwoccmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRgFIAEoDFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRIZCghmZWVfc2F0cxgGIAEoBFIHZmVlU2F0cxJGChB0cmFuc2Zlcl9yZXF1ZXN0GAcgASgLMhsuc3BhcmsuU3RhcnRUcmFuc2ZlclJlcXVlc3RSD3RyYW5zZmVyUmVxdWVzdCItCgZSZWFzb24SDwoLUkVBU09OX1NFTkQQABISCg5SRUFTT05fUkVDRUlWRRABImcKHEluaXRpYXRlUHJlaW1hZ2VTd2FwUmVzcG9uc2USGgoIcHJlaW1hZ2UYASABKAxSCHByZWltYWdlEisKCHRyYW5zZmVyGAIgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIjIKCE91dFBvaW50EhIKBHR4aWQYASABKAxSBHR4aWQSEgoEdm91dBgCIAEoDVIEdm91dCKHAQoWQ29vcGVyYXRpdmVFeGl0UmVxdWVzdBI3Cgh0cmFuc2ZlchgBIAEoCzIbLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXF1ZXN0Ugh0cmFuc2ZlchIXCgdleGl0X2lkGAIgASgJUgZleGl0SWQSGwoJZXhpdF90eGlkGAMgASgMUghleGl0VHhpZCKRAQoXQ29vcGVyYXRpdmVFeGl0UmVzcG9uc2USKwoIdHJhbnNmZXIYASABKAsyDy5zcGFyay5UcmFuc2ZlclIIdHJhbnNmZXISSQoPc2lnbmluZ19yZXN1bHRzGAIgAygLMiAuc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMioAIKFkNvdW50ZXJMZWFmU3dhcFJlcXVlc3QSNwoIdHJhbnNmZXIYASABKAsyGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdFIIdHJhbnNmZXISFwoHc3dhcF9pZBgCIAEoCVIGc3dhcElkEiwKEmFkYXB0b3JfcHVibGljX2tleRgDIAEoDFIQYWRhcHRvclB1YmxpY0tleRI5ChlkaXJlY3RfYWRhcHRvcl9wdWJsaWNfa2V5GAQgASgMUhZkaXJlY3RBZGFwdG9yUHVibGljS2V5EksKI2RpcmVjdF9mcm9tX2NwZnBfYWRhcHRvcl9wdWJsaWNfa2V5GAUgASgMUh5kaXJlY3RGcm9tQ3BmcEFkYXB0b3JQdWJsaWNLZXkikQEKF0NvdW50ZXJMZWFmU3dhcFJlc3BvbnNlEisKCHRyYW5zZmVyGAEgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyEkkKD3NpZ25pbmdfcmVzdWx0cxgCIAMoCzIgLnNwYXJrLkxlYWZSZWZ1bmRUeFNpZ25pbmdSZXN1bHRSDnNpZ25pbmdSZXN1bHRzIqIBChZSZWZyZXNoVGltZWxvY2tSZXF1ZXN0EhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EjQKDHNpZ25pbmdfam9icxgDIAMoCzIRLnNwYXJrLlNpZ25pbmdKb2JSC3NpZ25pbmdKb2JzIoABChxSZWZyZXNoVGltZWxvY2tTaWduaW5nUmVzdWx0EjsKDnNpZ25pbmdfcmVzdWx0GAEgASgLMhQuc3BhcmsuU2lnbmluZ1Jlc3VsdFINc2lnbmluZ1Jlc3VsdBIjCg12ZXJpZnlpbmdfa2V5GAIgASgMUgx2ZXJpZnlpbmdLZXkiZwoXUmVmcmVzaFRpbWVsb2NrUmVzcG9uc2USTAoPc2lnbmluZ19yZXN1bHRzGAEgAygLMiMuc3BhcmsuUmVmcmVzaFRpbWVsb2NrU2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMi9gMKEUV4dGVuZExlYWZSZXF1ZXN0EhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EkAKE25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyES5zcGFyay5TaWduaW5nSm9iUhBub2RlVHhTaWduaW5nSm9iEkQKFXJlZnVuZF90eF9zaWduaW5nX2pvYhgEIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSEnJlZnVuZFR4U2lnbmluZ0pvYhJNChpkaXJlY3Rfbm9kZV90eF9zaWduaW5nX2pvYhgFIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSFmRpcmVjdE5vZGVUeFNpZ25pbmdKb2ISUQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgGIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJjCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgHIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iInsKF0V4dGVuZExlYWZTaWduaW5nUmVzdWx0EjsKDnNpZ25pbmdfcmVzdWx0GAEgASgLMhQuc3BhcmsuU2lnbmluZ1Jlc3VsdFINc2lnbmluZ1Jlc3VsdBIjCg12ZXJpZnlpbmdfa2V5GAIgASgMUgx2ZXJpZnlpbmdLZXkimwQKEkV4dGVuZExlYWZSZXNwb25zZRIXCgdsZWFmX2lkGAEgASgJUgZsZWFmSWQSUwoWbm9kZV90eF9zaWduaW5nX3Jlc3VsdBgCIAEoCzIeLnNwYXJrLkV4dGVuZExlYWZTaWduaW5nUmVzdWx0UhNub2RlVHhTaWduaW5nUmVzdWx0ElcKGHJlZnVuZF90eF9zaWduaW5nX3Jlc3VsdBgDIAEoCzIeLnNwYXJrLkV4dGVuZExlYWZTaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSYAodZGlyZWN0X25vZGVfdHhfc2lnbmluZ19yZXN1bHQYBCABKAsyHi5zcGFyay5FeHRlbmRMZWFmU2lnbmluZ1Jlc3VsdFIZZGlyZWN0Tm9kZVR4U2lnbmluZ1Jlc3VsdBJkCh9kaXJlY3RfcmVmdW5kX3R4X3NpZ25pbmdfcmVzdWx0GAUgASgLMh4uc3BhcmsuRXh0ZW5kTGVhZlNpZ25pbmdSZXN1bHRSG2RpcmVjdFJlZnVuZFR4U2lnbmluZ1Jlc3VsdBJ2CilkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX3Jlc3VsdBgGIAEoCzIeLnNwYXJrLkV4dGVuZExlYWZTaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCJzChJBZGRyZXNzUmVxdWVzdE5vZGUSJgoPdXNlcl9wdWJsaWNfa2V5GAEgASgMUg11c2VyUHVibGljS2V5EjUKCGNoaWxkcmVuGAIgAygLMhkuc3BhcmsuQWRkcmVzc1JlcXVlc3ROb2RlUghjaGlsZHJlbiKDAgoZUHJlcGFyZVRyZWVBZGRyZXNzUmVxdWVzdBJBChJwYXJlbnRfbm9kZV9vdXRwdXQYASABKAsyES5zcGFyay5Ob2RlT3V0cHV0SABSEHBhcmVudE5vZGVPdXRwdXQSMQoNb25fY2hhaW5fdXR4bxgCIAEoCzILLnNwYXJrLlVUWE9IAFILb25DaGFpblV0eG8SLQoEbm9kZRgDIAEoCzIZLnNwYXJrLkFkZHJlc3NSZXF1ZXN0Tm9kZVIEbm9kZRI3Chh1c2VyX2lkZW50aXR5X3B1YmxpY19rZXkYBCABKAxSFXVzZXJJZGVudGl0eVB1YmxpY0tleUIICgZzb3VyY2UiZwoLQWRkcmVzc05vZGUSKAoHYWRkcmVzcxgBIAEoCzIOLnNwYXJrLkFkZHJlc3NSB2FkZHJlc3MSLgoIY2hpbGRyZW4YAiADKAsyEi5zcGFyay5BZGRyZXNzTm9kZVIIY2hpbGRyZW4iRAoaUHJlcGFyZVRyZWVBZGRyZXNzUmVzcG9uc2USJgoEbm9kZRgBIAEoCzISLnNwYXJrLkFkZHJlc3NOb2RlUgRub2RlIs4DCgxDcmVhdGlvbk5vZGUSQAoTbm9kZV90eF9zaWduaW5nX2pvYhgBIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSEG5vZGVUeFNpZ25pbmdKb2ISRAoVcmVmdW5kX3R4X3NpZ25pbmdfam9iGAIgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIScmVmdW5kVHhTaWduaW5nSm9iEi8KCGNoaWxkcmVuGAMgAygLMhMuc3BhcmsuQ3JlYXRpb25Ob2RlUghjaGlsZHJlbhJNChpkaXJlY3Rfbm9kZV90eF9zaWduaW5nX2pvYhgEIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSFmRpcmVjdE5vZGVUeFNpZ25pbmdKb2ISUQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgFIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJjCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgGIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iIvUBChFDcmVhdGVUcmVlUmVxdWVzdBJBChJwYXJlbnRfbm9kZV9vdXRwdXQYASABKAsyES5zcGFyay5Ob2RlT3V0cHV0SABSEHBhcmVudE5vZGVPdXRwdXQSMQoNb25fY2hhaW5fdXR4bxgCIAEoCzILLnNwYXJrLlVUWE9IAFILb25DaGFpblV0eG8SJwoEbm9kZRgDIAEoCzITLnNwYXJrLkNyZWF0aW9uTm9kZVIEbm9kZRI3Chh1c2VyX2lkZW50aXR5X3B1YmxpY19rZXkYBCABKAxSFXVzZXJJZGVudGl0eVB1YmxpY0tleUIICgZzb3VyY2UipAQKFENyZWF0aW9uUmVzcG9uc2VOb2RlEhcKB25vZGVfaWQYASABKAlSBm5vZGVJZBJJChZub2RlX3R4X3NpZ25pbmdfcmVzdWx0GAIgASgLMhQuc3BhcmsuU2lnbmluZ1Jlc3VsdFITbm9kZVR4U2lnbmluZ1Jlc3VsdBJNChhyZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYAyABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSNwoIY2hpbGRyZW4YBCADKAsyGy5zcGFyay5DcmVhdGlvblJlc3BvbnNlTm9kZVIIY2hpbGRyZW4SVgodZGlyZWN0X25vZGVfdHhfc2lnbmluZ19yZXN1bHQYBSABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhlkaXJlY3ROb2RlVHhTaWduaW5nUmVzdWx0EloKH2RpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhtkaXJlY3RSZWZ1bmRUeFNpZ25pbmdSZXN1bHQSbAopZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYByABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCJFChJDcmVhdGVUcmVlUmVzcG9uc2USLwoEbm9kZRgBIAEoCzIbLnNwYXJrLkNyZWF0aW9uUmVzcG9uc2VOb2RlUgRub2RlIoQBChNTaWduaW5nT3BlcmF0b3JJbmZvEhQKBWluZGV4GAEgASgEUgVpbmRleBIeCgppZGVudGlmaWVyGAIgASgJUgppZGVudGlmaWVyEh0KCnB1YmxpY19rZXkYAyABKAxSCXB1YmxpY0tleRIYCgdhZGRyZXNzGAQgASgJUgdhZGRyZXNzIusBCh5HZXRTaWduaW5nT3BlcmF0b3JMaXN0UmVzcG9uc2USaAoRc2lnbmluZ19vcGVyYXRvcnMYASADKAsyOy5zcGFyay5HZXRTaWduaW5nT3BlcmF0b3JMaXN0UmVzcG9uc2UuU2lnbmluZ09wZXJhdG9yc0VudHJ5UhBzaWduaW5nT3BlcmF0b3JzGl8KFVNpZ25pbmdPcGVyYXRvcnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIwCgV2YWx1ZRgCIAEoCzIaLnNwYXJrLlNpZ25pbmdPcGVyYXRvckluZm9SBXZhbHVlOgI4ASJyCh1RdWVyeVVzZXJTaWduZWRSZWZ1bmRzUmVxdWVzdBIhCgxwYXltZW50X2hhc2gYASABKAxSC3BheW1lbnRIYXNoEi4KE2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSEWlkZW50aXR5UHVibGljS2V5IpwBCh5RdWVyeVVzZXJTaWduZWRSZWZ1bmRzUmVzcG9uc2USRwoTdXNlcl9zaWduZWRfcmVmdW5kcxgBIAMoCzIXLnNwYXJrLlVzZXJTaWduZWRSZWZ1bmRSEXVzZXJTaWduZWRSZWZ1bmRzEisKCHRyYW5zZmVyGAMgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVySgQIAhADIqQDChtQcmVpbWFnZVJlcXVlc3RXaXRoVHJhbnNmZXISKgoMcGF5bWVudF9oYXNoGAEgASgMQgf6QgR6AmggUgtwYXltZW50SGFzaBJBChhyZWNlaXZlcl9pZGVudGl0eV9wdWJrZXkYAiABKAxCB/pCBHoCaCFSFnJlY2VpdmVySWRlbnRpdHlQdWJrZXkSNAoGc3RhdHVzGAMgASgOMhwuc3BhcmsuUHJlaW1hZ2VSZXF1ZXN0U3RhdHVzUgZzdGF0dXMSPQoMY3JlYXRlZF90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFILY3JlYXRlZFRpbWUSMAoIdHJhbnNmZXIYBSABKAsyDy5zcGFyay5UcmFuc2ZlckgAUgh0cmFuc2ZlcogBARIfCghwcmVpbWFnZRgGIAEoDEgBUghwcmVpbWFnZYgBARI0ChZzZW5kZXJfaWRlbnRpdHlfcHVia2V5GAcgASgMUhRzZW5kZXJJZGVudGl0eVB1YmtleUILCglfdHJhbnNmZXJCCwoJX3ByZWltYWdlIsQCChBRdWVyeUh0bGNSZXF1ZXN0EiUKDnBheW1lbnRfaGFzaGVzGAEgAygMUg1wYXltZW50SGFzaGVzEjcKE2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxCB/pCBHoCaCFSEWlkZW50aXR5UHVibGljS2V5EjkKBnN0YXR1cxgDIAEoDjIcLnNwYXJrLlByZWltYWdlUmVxdWVzdFN0YXR1c0gAUgZzdGF0dXOIAQESFAoFbGltaXQYBCABKANSBWxpbWl0EhYKBm9mZnNldBgFIAEoA1IGb2Zmc2V0EiEKDHRyYW5zZmVyX2lkcxgGIAMoCVILdHJhbnNmZXJJZHMSOQoKbWF0Y2hfcm9sZRgHIAEoDjIaLnNwYXJrLlByZWltYWdlUmVxdWVzdFJvbGVSCW1hdGNoUm9sZUIJCgdfc3RhdHVzInwKEVF1ZXJ5SHRsY1Jlc3BvbnNlEk8KEXByZWltYWdlX3JlcXVlc3RzGAEgAygLMiIuc3BhcmsuUHJlaW1hZ2VSZXF1ZXN0V2l0aFRyYW5zZmVyUhBwcmVpbWFnZVJlcXVlc3RzEhYKBm9mZnNldBgCIAEoA1IGb2Zmc2V0IocBChZQcm92aWRlUHJlaW1hZ2VSZXF1ZXN0EiEKDHBheW1lbnRfaGFzaBgBIAEoDFILcGF5bWVudEhhc2gSGgoIcHJlaW1hZ2UYAiABKAxSCHByZWltYWdlEi4KE2lkZW50aXR5X3B1YmxpY19rZXkYAyABKAxSEWlkZW50aXR5UHVibGljS2V5IkYKF1Byb3ZpZGVQcmVpbWFnZVJlc3BvbnNlEisKCHRyYW5zZmVyGAEgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIigKC1RyZWVOb2RlSWRzEhkKCG5vZGVfaWRzGAEgAygJUgdub2RlSWRzIrgCChFRdWVyeU5vZGVzUmVxdWVzdBI0ChVvd25lcl9pZGVudGl0eV9wdWJrZXkYASABKAxIAFITb3duZXJJZGVudGl0eVB1YmtleRIvCghub2RlX2lkcxgCIAEoCzISLnNwYXJrLlRyZWVOb2RlSWRzSABSB25vZGVJZHMSJwoPaW5jbHVkZV9wYXJlbnRzGAMgASgIUg5pbmNsdWRlUGFyZW50cxIUCgVsaW1pdBgEIAEoA1IFbGltaXQSFgoGb2Zmc2V0GAUgASgDUgZvZmZzZXQSKAoHbmV0d29yaxgGIAEoDjIOLnNwYXJrLk5ldHdvcmtSB25ldHdvcmsSMQoIc3RhdHVzZXMYByADKA4yFS5zcGFyay5UcmVlTm9kZVN0YXR1c1IIc3RhdHVzZXNCCAoGc291cmNlIrMBChJRdWVyeU5vZGVzUmVzcG9uc2USOgoFbm9kZXMYASADKAsyJC5zcGFyay5RdWVyeU5vZGVzUmVzcG9uc2UuTm9kZXNFbnRyeVIFbm9kZXMSFgoGb2Zmc2V0GAIgASgDUgZvZmZzZXQaSQoKTm9kZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIlCgV2YWx1ZRgCIAEoCzIPLnNwYXJrLlRyZWVOb2RlUgV2YWx1ZToCOAEidQoVQ2FuY2VsVHJhbnNmZXJSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjsKGnNlbmRlcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhdzZW5kZXJJZGVudGl0eVB1YmxpY0tleSJFChZDYW5jZWxUcmFuc2ZlclJlc3BvbnNlEisKCHRyYW5zZmVyGAEgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIqwBCiJRdWVyeVVudXNlZERlcG9zaXRBZGRyZXNzZXNSZXF1ZXN0Ei4KE2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSEWlkZW50aXR5UHVibGljS2V5EigKB25ldHdvcmsYAiABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEhQKBWxpbWl0GAMgASgDUgVsaW1pdBIWCgZvZmZzZXQYBCABKANSBm9mZnNldCLuAQoiUXVlcnlTdGF0aWNEZXBvc2l0QWRkcmVzc2VzUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhFpZGVudGl0eVB1YmxpY0tleRIoCgduZXR3b3JrGAIgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yaxIUCgVsaW1pdBgEIAEoA1IFbGltaXQSFgoGb2Zmc2V0GAUgASgDUgZvZmZzZXQSLAoPZGVwb3NpdF9hZGRyZXNzGAYgASgJSABSDmRlcG9zaXRBZGRyZXNziAEBQhIKEF9kZXBvc2l0X2FkZHJlc3MiygIKGURlcG9zaXRBZGRyZXNzUXVlcnlSZXN1bHQSJwoPZGVwb3NpdF9hZGRyZXNzGAEgASgJUg5kZXBvc2l0QWRkcmVzcxI1Chd1c2VyX3NpZ25pbmdfcHVibGljX2tleRgCIAEoDFIUdXNlclNpZ25pbmdQdWJsaWNLZXkSMAoUdmVyaWZ5aW5nX3B1YmxpY19rZXkYAyABKAxSEnZlcmlmeWluZ1B1YmxpY0tleRImCgdsZWFmX2lkGAQgASgJQgj6QgVyA7ABAUgAUgZsZWFmSWSIAQESTwoTcHJvb2Zfb2ZfcG9zc2Vzc2lvbhgFIAEoCzIaLnNwYXJrLkRlcG9zaXRBZGRyZXNzUHJvb2ZIAVIRcHJvb2ZPZlBvc3Nlc3Npb26IAQFCCgoIX2xlYWZfaWRCFgoUX3Byb29mX29mX3Bvc3Nlc3Npb24ijAEKI1F1ZXJ5VW51c2VkRGVwb3NpdEFkZHJlc3Nlc1Jlc3BvbnNlEk0KEWRlcG9zaXRfYWRkcmVzc2VzGAEgAygLMiAuc3BhcmsuRGVwb3NpdEFkZHJlc3NRdWVyeVJlc3VsdFIQZGVwb3NpdEFkZHJlc3NlcxIWCgZvZmZzZXQYAiABKANSBm9mZnNldCJ0CiNRdWVyeVN0YXRpY0RlcG9zaXRBZGRyZXNzZXNSZXNwb25zZRJNChFkZXBvc2l0X2FkZHJlc3NlcxgBIAMoCzIgLnNwYXJrLkRlcG9zaXRBZGRyZXNzUXVlcnlSZXN1bHRSEGRlcG9zaXRBZGRyZXNzZXMibwoTUXVlcnlCYWxhbmNlUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhFpZGVudGl0eVB1YmxpY0tleRIoCgduZXR3b3JrGAIgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yayLFAQoUUXVlcnlCYWxhbmNlUmVzcG9uc2USGAoHYmFsYW5jZRgBIAEoBFIHYmFsYW5jZRJSCg1ub2RlX2JhbGFuY2VzGAIgAygLMi0uc3BhcmsuUXVlcnlCYWxhbmNlUmVzcG9uc2UuTm9kZUJhbGFuY2VzRW50cnlSDG5vZGVCYWxhbmNlcxo/ChFOb2RlQmFsYW5jZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoBFIFdmFsdWU6AjgBIsUBCgxTcGFya0FkZHJlc3MSLgoTaWRlbnRpdHlfcHVibGljX2tleRgBIAEoDFIRaWRlbnRpdHlQdWJsaWNLZXkSSwoUc3BhcmtfaW52b2ljZV9maWVsZHMYAiABKAsyGS5zcGFyay5TcGFya0ludm9pY2VGaWVsZHNSEnNwYXJrSW52b2ljZUZpZWxkcxIqCglzaWduYXR1cmUYAyABKAxCB/pCBHoCaEBIAFIJc2lnbmF0dXJliAEBQgwKCl9zaWduYXR1cmUinAMKElNwYXJrSW52b2ljZUZpZWxkcxIYCgd2ZXJzaW9uGAEgASgNUgd2ZXJzaW9uEhcKAmlkGAIgASgMQgf6QgR6AmgQUgJpZBI9Cg50b2tlbnNfcGF5bWVudBgDIAEoCzIULnNwYXJrLlRva2Vuc1BheW1lbnRIAFINdG9rZW5zUGF5bWVudBI3CgxzYXRzX3BheW1lbnQYBCABKAsyEi5zcGFyay5TYXRzUGF5bWVudEgAUgtzYXRzUGF5bWVudBIgCgRtZW1vGAUgASgJQgf6QgRyAih4SAFSBG1lbW+IAQESOAoRc2VuZGVyX3B1YmxpY19rZXkYBiABKAxCB/pCBHoCaCFIAlIPc2VuZGVyUHVibGljS2V5iAEBEkAKC2V4cGlyeV90aW1lGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDUgpleHBpcnlUaW1liAEBQg4KDHBheW1lbnRfdHlwZUIHCgVfbWVtb0IUChJfc2VuZGVyX3B1YmxpY19rZXlCDgoMX2V4cGlyeV90aW1lIjUKC1NhdHNQYXltZW50EhsKBmFtb3VudBgBIAEoBEgAUgZhbW91bnSIAQFCCQoHX2Ftb3VudCKOAQoNVG9rZW5zUGF5bWVudBI3ChB0b2tlbl9pZGVudGlmaWVyGAEgASgMQgf6QgR6AmggSABSD3Rva2VuSWRlbnRpZmllcogBARIkCgZhbW91bnQYAiABKAxCB/pCBHoCGBBIAVIGYW1vdW50iAEBQhMKEV90b2tlbl9pZGVudGlmaWVyQgkKB19hbW91bnQixgEKJkluaXRpYXRlU3RhdGljRGVwb3NpdFV0eG9SZWZ1bmRSZXF1ZXN0Ei8KDW9uX2NoYWluX3V0eG8YASABKAsyCy5zcGFyay5VVFhPUgtvbkNoYWluVXR4bxJEChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAyABKAsyES5zcGFyay5TaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISJQoOdXNlcl9zaWduYXR1cmUYBCABKAxSDXVzZXJTaWduYXR1cmUiwwEKJ0luaXRpYXRlU3RhdGljRGVwb3NpdFV0eG9SZWZ1bmRSZXNwb25zZRJNChhyZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYASABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSSQoPZGVwb3NpdF9hZGRyZXNzGAIgASgLMiAuc3BhcmsuRGVwb3NpdEFkZHJlc3NRdWVyeVJlc3VsdFIOZGVwb3NpdEFkZHJlc3MisAMKF0luaXRpYXRlVXR4b1N3YXBSZXF1ZXN0Ei8KDW9uX2NoYWluX3V0eG8YASABKAsyCy5zcGFyay5VVFhPUgtvbkNoYWluVXR4bxI9CgxyZXF1ZXN0X3R5cGUYAiABKA4yGi5zcGFyay5VdHhvU3dhcFJlcXVlc3RUeXBlUgtyZXF1ZXN0VHlwZRIuChJjcmVkaXRfYW1vdW50X3NhdHMYAyABKARIAFIQY3JlZGl0QW1vdW50U2F0cxIiCgxtYXhfZmVlX3NhdHMYBCABKARIAFIKbWF4RmVlU2F0cxIjCg1zc3Bfc2lnbmF0dXJlGAUgASgMUgxzc3BTaWduYXR1cmUSJQoOdXNlcl9zaWduYXR1cmUYBiABKAxSDXVzZXJTaWduYXR1cmUSNwoIdHJhbnNmZXIYByABKAsyGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdFIIdHJhbnNmZXISQgoUc3BlbmRfdHhfc2lnbmluZ19qb2IYCCABKAsyES5zcGFyay5TaWduaW5nSm9iUhFzcGVuZFR4U2lnbmluZ0pvYkIICgZhbW91bnQi3wEKGEluaXRpYXRlVXR4b1N3YXBSZXNwb25zZRJLChdzcGVuZF90eF9zaWduaW5nX3Jlc3VsdBgBIAEoCzIULnNwYXJrLlNpZ25pbmdSZXN1bHRSFHNwZW5kVHhTaWduaW5nUmVzdWx0EisKCHRyYW5zZmVyGAIgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyEkkKD2RlcG9zaXRfYWRkcmVzcxgDIAEoCzIgLnNwYXJrLkRlcG9zaXRBZGRyZXNzUXVlcnlSZXN1bHRSDmRlcG9zaXRBZGRyZXNzIosBCgtFeGl0aW5nVHJlZRIXCgd0cmVlX2lkGAEgASgJUgZ0cmVlSWQSUQoXdXNlcl9zaWduaW5nX2NvbW1pdG1lbnQYAiABKAsyGS5jb21tb24uU2lnbmluZ0NvbW1pdG1lbnRSFXVzZXJTaWduaW5nQ29tbWl0bWVudBIQCgN2aW4YAyABKA1SA3ZpbiKcAQofRXhpdFNpbmdsZU5vZGVUcmVlU2lnbmluZ1Jlc3VsdBIXCgd0cmVlX2lkGAEgASgJUgZ0cmVlSWQSOwoOc2lnbmluZ19yZXN1bHQYAiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0Ug1zaWduaW5nUmVzdWx0EiMKDXZlcmlmeWluZ19rZXkYAyABKAxSDHZlcmlmeWluZ0tleSJNChhCaXRjb2luVHJhbnNhY3Rpb25PdXRwdXQSFAoFdmFsdWUYASABKANSBXZhbHVlEhsKCXBrX3NjcmlwdBgCIAEoDFIIcGtTY3JpcHQi8wEKGkV4aXRTaW5nbGVOb2RlVHJlZXNSZXF1ZXN0EjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSNwoNZXhpdGluZ190cmVlcxgCIAMoCzISLnNwYXJrLkV4aXRpbmdUcmVlUgxleGl0aW5nVHJlZXMSFQoGcmF3X3R4GAMgASgMUgVyYXdUeBJKChBwcmV2aW91c19vdXRwdXRzGAQgAygLMh8uc3BhcmsuQml0Y29pblRyYW5zYWN0aW9uT3V0cHV0Ug9wcmV2aW91c091dHB1dHMibgobRXhpdFNpbmdsZU5vZGVUcmVlc1Jlc3BvbnNlEk8KD3NpZ25pbmdfcmVzdWx0cxgBIAMoCzImLnNwYXJrLkV4aXRTaW5nbGVOb2RlVHJlZVNpZ25pbmdSZXN1bHRSDnNpZ25pbmdSZXN1bHRzIloKHVF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXF1ZXN0EjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkizwEKHlF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXNwb25zZRJoChFub2RlX2Rpc3RyaWJ1dGlvbhgBIAMoCzI7LnNwYXJrLlF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXNwb25zZS5Ob2RlRGlzdHJpYnV0aW9uRW50cnlSEG5vZGVEaXN0cmlidXRpb24aQwoVTm9kZURpc3RyaWJ1dGlvbkVudHJ5EhAKA2tleRgBIAEoBFIDa2V5EhQKBXZhbHVlGAIgASgEUgV2YWx1ZToCOAEimQEKGFF1ZXJ5Tm9kZXNCeVZhbHVlUmVxdWVzdBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EhQKBXZhbHVlGAIgASgDUgV2YWx1ZRIWCgZvZmZzZXQYAyABKANSBm9mZnNldBIUCgVsaW1pdBgEIAEoA1IFbGltaXQiwQEKGVF1ZXJ5Tm9kZXNCeVZhbHVlUmVzcG9uc2USQQoFbm9kZXMYASADKAsyKy5zcGFyay5RdWVyeU5vZGVzQnlWYWx1ZVJlc3BvbnNlLk5vZGVzRW50cnlSBW5vZGVzEhYKBm9mZnNldBgCIAEoA1IGb2Zmc2V0GkkKCk5vZGVzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSJQoFdmFsdWUYAiABKAsyDy5zcGFyay5UcmVlTm9kZVIFdmFsdWU6AjgBIrYBChlHZXRVdHhvc0ZvckFkZHJlc3NSZXF1ZXN0EhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3MSFgoGb2Zmc2V0GAIgASgEUgZvZmZzZXQSFAoFbGltaXQYAyABKARSBWxpbWl0EigKB25ldHdvcmsYBCABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEicKD2V4Y2x1ZGVfY2xhaW1lZBgFIAEoCFIOZXhjbHVkZUNsYWltZWQiVwoaR2V0VXR4b3NGb3JBZGRyZXNzUmVzcG9uc2USIQoFdXR4b3MYASADKAsyCy5zcGFyay5VVFhPUgV1dHhvcxIWCgZvZmZzZXQYAiABKARSBm9mZnNldCJjChlRdWVyeVNwYXJrSW52b2ljZXNSZXF1ZXN0EhQKBWxpbWl0GAEgASgDUgVsaW1pdBIWCgZvZmZzZXQYAiABKANSBm9mZnNldBIYCgdpbnZvaWNlGAMgAygJUgdpbnZvaWNlIncKGlF1ZXJ5U3BhcmtJbnZvaWNlc1Jlc3BvbnNlEhYKBm9mZnNldBgBIAEoA1IGb2Zmc2V0EkEKEGludm9pY2Vfc3RhdHVzZXMYAiADKAsyFi5zcGFyay5JbnZvaWNlUmVzcG9uc2VSD2ludm9pY2VTdGF0dXNlcyLlAQoPSW52b2ljZVJlc3BvbnNlEhgKB2ludm9pY2UYASABKAlSB2ludm9pY2USLAoGc3RhdHVzGAIgASgOMhQuc3BhcmsuSW52b2ljZVN0YXR1c1IGc3RhdHVzEjoKDXNhdHNfdHJhbnNmZXIYAyABKAsyEy5zcGFyay5TYXRzVHJhbnNmZXJIAFIMc2F0c1RyYW5zZmVyEj0KDnRva2VuX3RyYW5zZmVyGAQgASgLMhQuc3BhcmsuVG9rZW5UcmFuc2ZlckgAUg10b2tlblRyYW5zZmVyQg8KDXRyYW5zZmVyX3R5cGUiOAoMU2F0c1RyYW5zZmVyEigKC3RyYW5zZmVyX2lkGAEgASgMQgf6QgR6AmgQUgp0cmFuc2ZlcklkIlkKDVRva2VuVHJhbnNmZXISSAocZmluYWxfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgBIAEoDEIH+kIEegJoIFIZZmluYWxUb2tlblRyYW5zYWN0aW9uSGFzaCKtAQoiSW5pdGlhdGVTd2FwUHJpbWFyeVRyYW5zZmVyUmVxdWVzdBI3Cgh0cmFuc2ZlchgBIAEoCzIbLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXF1ZXN0Ugh0cmFuc2ZlchJOChNhZGFwdG9yX3B1YmxpY19rZXlzGAIgASgLMh4uc3BhcmsuQWRhcHRvclB1YmxpY0tleVBhY2thZ2VSEWFkYXB0b3JQdWJsaWNLZXlzIp0BCiNJbml0aWF0ZVN3YXBQcmltYXJ5VHJhbnNmZXJSZXNwb25zZRIrCgh0cmFuc2ZlchgBIAEoCzIPLnNwYXJrLlRyYW5zZmVyUgh0cmFuc2ZlchJJCg9zaWduaW5nX3Jlc3VsdHMYAiADKAsyIC5zcGFyay5MZWFmUmVmdW5kVHhTaWduaW5nUmVzdWx0Ug5zaWduaW5nUmVzdWx0cyLPAQoXQWRhcHRvclB1YmxpY0tleVBhY2thZ2USLAoSYWRhcHRvcl9wdWJsaWNfa2V5GAEgASgMUhBhZGFwdG9yUHVibGljS2V5EjkKGWRpcmVjdF9hZGFwdG9yX3B1YmxpY19rZXkYAiABKAxSFmRpcmVjdEFkYXB0b3JQdWJsaWNLZXkSSwojZGlyZWN0X2Zyb21fY3BmcF9hZGFwdG9yX3B1YmxpY19rZXkYAyABKAxSHmRpcmVjdEZyb21DcGZwQWRhcHRvclB1YmxpY0tleSJ8Cg1XYWxsZXRTZXR0aW5nEkIKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxCB/pCBHoCaCFSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSJwoPcHJpdmF0ZV9lbmFibGVkGAIgASgIUg5wcml2YXRlRW5hYmxlZCJeChpVcGRhdGVXYWxsZXRTZXR0aW5nUmVxdWVzdBIsCg9wcml2YXRlX2VuYWJsZWQYASABKAhIAFIOcHJpdmF0ZUVuYWJsZWSIAQFCEgoQX3ByaXZhdGVfZW5hYmxlZCJaChtVcGRhdGVXYWxsZXRTZXR0aW5nUmVzcG9uc2USOwoOd2FsbGV0X3NldHRpbmcYASABKAsyFC5zcGFyay5XYWxsZXRTZXR0aW5nUg13YWxsZXRTZXR0aW5nIhsKGVF1ZXJ5V2FsbGV0U2V0dGluZ1JlcXVlc3QiWQoaUXVlcnlXYWxsZXRTZXR0aW5nUmVzcG9uc2USOwoOd2FsbGV0X3NldHRpbmcYASABKAsyFC5zcGFyay5XYWxsZXRTZXR0aW5nUg13YWxsZXRTZXR0aW5nKk0KB05ldHdvcmsSDwoLVU5TUEVDSUZJRUQQABILCgdNQUlOTkVUEAESCwoHUkVHVEVTVBACEgsKB1RFU1RORVQQAxIKCgZTSUdORVQQBCojCglEaXJlY3Rpb24SCAoETkVYVBAAEgwKCFBSRVZJT1VTEAEq/AMKDlRyYW5zZmVyU3RhdHVzEiQKIFRSQU5TRkVSX1NUQVRVU19TRU5ERVJfSU5JVElBVEVEEAASLAooVFJBTlNGRVJfU1RBVFVTX1NFTkRFUl9LRVlfVFdFQUtfUEVORElORxABEiYKIlRSQU5TRkVSX1NUQVRVU19TRU5ERVJfS0VZX1RXRUFLRUQQAhIoCiRUUkFOU0ZFUl9TVEFUVVNfUkVDRUlWRVJfS0VZX1RXRUFLRUQQAxIqCiZUUkFOU0ZFUl9TVEFUVVNfUkVDRUlWRVJfUkVGVU5EX1NJR05FRBAEEh0KGVRSQU5TRkVSX1NUQVRVU19DT01QTEVURUQQBRIbChdUUkFOU0ZFUl9TVEFUVVNfRVhQSVJFRBAGEhwKGFRSQU5TRkVSX1NUQVRVU19SRVRVUk5FRBAHEjAKLFRSQU5TRkVSX1NUQVRVU19TRU5ERVJfSU5JVElBVEVEX0NPT1JESU5BVE9SEAgSLQopVFJBTlNGRVJfU1RBVFVTX1JFQ0VJVkVSX0tFWV9UV0VBS19MT0NLRUQQCRIuCipUUkFOU0ZFUl9TVEFUVVNfUkVDRUlWRVJfS0VZX1RXRUFLX0FQUExJRUQQChItCilUUkFOU0ZFUl9TVEFUVVNfQVBQTFlJTkdfU0VOREVSX0tFWV9UV0VBSxALKpoBCgxUcmFuc2ZlclR5cGUSEQoNUFJFSU1BR0VfU1dBUBAAEhQKEENPT1BFUkFUSVZFX0VYSVQQARIMCghUUkFOU0ZFUhACEg0KCVVUWE9fU1dBUBADEggKBFNXQVAQHhIQCgxDT1VOVEVSX1NXQVAQKBITCg9QUklNQVJZX1NXQVBfVjMQBBITCg9DT1VOVEVSX1NXQVBfVjMQBSomCgVPcmRlchIOCgpERVNDRU5ESU5HEAASDQoJQVNDRU5ESU5HEAEqnAEKFVByZWltYWdlUmVxdWVzdFN0YXR1cxIwCixQUkVJTUFHRV9SRVFVRVNUX1NUQVRVU19XQUlUSU5HX0ZPUl9QUkVJTUFHRRAAEisKJ1BSRUlNQUdFX1JFUVVFU1RfU1RBVFVTX1BSRUlNQUdFX1NIQVJFRBABEiQKIFBSRUlNQUdFX1JFUVVFU1RfU1RBVFVTX1JFVFVSTkVEEAIqWwoTUHJlaW1hZ2VSZXF1ZXN0Um9sZRIiCh5QUkVJTUFHRV9SRVFVRVNUX1JPTEVfUkVDRUlWRVIQABIgChxQUkVJTUFHRV9SRVFVRVNUX1JPTEVfU0VOREVSEAEqOAoTVXR4b1N3YXBSZXF1ZXN0VHlwZRIJCgVGaXhlZBAAEgoKBk1heEZlZRABEgoKBlJlZnVuZBACKk4KDUludm9pY2VTdGF0dXMSDQoJTk9UX0ZPVU5EEAASCwoHUEVORElORxABEg0KCUZJTkFMSVpFRBACEgwKCFJFVFVSTkVEEAQiBAgDEAMq4AIKDlRyZWVOb2RlU3RhdHVzEh0KGVRSRUVfTk9ERV9TVEFUVVNfQ1JFQVRJTkcQABIeChpUUkVFX05PREVfU1RBVFVTX0FWQUlMQUJMRRABEiUKIVRSRUVfTk9ERV9TVEFUVVNfRlJPWkVOX0JZX0lTU1VFUhACEiQKIFRSRUVfTk9ERV9TVEFUVVNfVFJBTlNGRVJfTE9DS0VEEAMSIQodVFJFRV9OT0RFX1NUQVRVU19TUExJVF9MT0NLRUQQBBIdChlUUkVFX05PREVfU1RBVFVTX1NQTElUVEVEEAUSHwobVFJFRV9OT0RFX1NUQVRVU19BR0dSRUdBVEVEEAYSHQoZVFJFRV9OT0RFX1NUQVRVU19PTl9DSEFJThAHEiMKH1RSRUVfTk9ERV9TVEFUVVNfQUdHUkVHQVRFX0xPQ0sQCBIbChdUUkVFX05PREVfU1RBVFVTX0VYSVRFRBAJMpMnCgxTcGFya1NlcnZpY2USaQoYZ2VuZXJhdGVfZGVwb3NpdF9hZGRyZXNzEiQuc3BhcmsuR2VuZXJhdGVEZXBvc2l0QWRkcmVzc1JlcXVlc3QaJS5zcGFyay5HZW5lcmF0ZURlcG9zaXRBZGRyZXNzUmVzcG9uc2UiABJ8Ch9nZW5lcmF0ZV9zdGF0aWNfZGVwb3NpdF9hZGRyZXNzEiouc3BhcmsuR2VuZXJhdGVTdGF0aWNEZXBvc2l0QWRkcmVzc1JlcXVlc3QaKy5zcGFyay5HZW5lcmF0ZVN0YXRpY0RlcG9zaXRBZGRyZXNzUmVzcG9uc2UiABJwChtzdGFydF9kZXBvc2l0X3RyZWVfY3JlYXRpb24SJi5zcGFyay5TdGFydERlcG9zaXRUcmVlQ3JlYXRpb25SZXF1ZXN0Gicuc3BhcmsuU3RhcnREZXBvc2l0VHJlZUNyZWF0aW9uUmVzcG9uc2UiABJdChNzdGFydF90cmVlX2NyZWF0aW9uEh8uc3BhcmsuU3RhcnRUcmVlQ3JlYXRpb25SZXF1ZXN0GiAuc3BhcmsuU3RhcnRUcmVlQ3JlYXRpb25SZXNwb25zZSIDiAIBEmwKGGZpbmFsaXplX25vZGVfc2lnbmF0dXJlcxIkLnNwYXJrLkZpbmFsaXplTm9kZVNpZ25hdHVyZXNSZXF1ZXN0GiUuc3BhcmsuRmluYWxpemVOb2RlU2lnbmF0dXJlc1Jlc3BvbnNlIgOIAgESUAoOc3RhcnRfdHJhbnNmZXISGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdBocLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXNwb25zZSIDiAIBElkKEWZpbmFsaXplX3RyYW5zZmVyEh4uc3BhcmsuRmluYWxpemVUcmFuc2ZlclJlcXVlc3QaHy5zcGFyay5GaW5hbGl6ZVRyYW5zZmVyUmVzcG9uc2UiA4gCARJ/CidmaW5hbGl6ZV90cmFuc2Zlcl93aXRoX3RyYW5zZmVyX3BhY2thZ2USMS5zcGFyay5GaW5hbGl6ZVRyYW5zZmVyV2l0aFRyYW5zZmVyUGFja2FnZVJlcXVlc3QaHy5zcGFyay5GaW5hbGl6ZVRyYW5zZmVyUmVzcG9uc2UiABJTCg9jYW5jZWxfdHJhbnNmZXISHC5zcGFyay5DYW5jZWxUcmFuc2ZlclJlcXVlc3QaHS5zcGFyay5DYW5jZWxUcmFuc2ZlclJlc3BvbnNlIgOIAgESUQoXcXVlcnlfcGVuZGluZ190cmFuc2ZlcnMSFS5zcGFyay5UcmFuc2ZlckZpbHRlchodLnNwYXJrLlF1ZXJ5VHJhbnNmZXJzUmVzcG9uc2UiABJNChNxdWVyeV9hbGxfdHJhbnNmZXJzEhUuc3BhcmsuVHJhbnNmZXJGaWx0ZXIaHS5zcGFyay5RdWVyeVRyYW5zZmVyc1Jlc3BvbnNlIgASWwoZY2xhaW1fdHJhbnNmZXJfdHdlYWtfa2V5cxIkLnNwYXJrLkNsYWltVHJhbnNmZXJUd2Vha0tleXNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgAScwobY2xhaW1fdHJhbnNmZXJfc2lnbl9yZWZ1bmRzEiYuc3BhcmsuQ2xhaW1UcmFuc2ZlclNpZ25SZWZ1bmRzUmVxdWVzdBonLnNwYXJrLkNsYWltVHJhbnNmZXJTaWduUmVmdW5kc1Jlc3BvbnNlIgOIAgESUgoUc3RvcmVfcHJlaW1hZ2Vfc2hhcmUSIC5zcGFyay5TdG9yZVByZWltYWdlU2hhcmVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASZgoXZ2V0X3NpZ25pbmdfY29tbWl0bWVudHMSIy5zcGFyay5HZXRTaWduaW5nQ29tbWl0bWVudHNSZXF1ZXN0GiQuc3BhcmsuR2V0U2lnbmluZ0NvbW1pdG1lbnRzUmVzcG9uc2UiABJWChBjb29wZXJhdGl2ZV9leGl0Eh0uc3BhcmsuQ29vcGVyYXRpdmVFeGl0UmVxdWVzdBoeLnNwYXJrLkNvb3BlcmF0aXZlRXhpdFJlc3BvbnNlIgOIAgESZgoWaW5pdGlhdGVfcHJlaW1hZ2Vfc3dhcBIiLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVxdWVzdBojLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVzcG9uc2UiA4gCARJTChBwcm92aWRlX3ByZWltYWdlEh0uc3BhcmsuUHJvdmlkZVByZWltYWdlUmVxdWVzdBoeLnNwYXJrLlByb3ZpZGVQcmVpbWFnZVJlc3BvbnNlIgASQQoKcXVlcnlfaHRsYxIXLnNwYXJrLlF1ZXJ5SHRsY1JlcXVlc3QaGC5zcGFyay5RdWVyeUh0bGNSZXNwb25zZSIAEk4KD3N0YXJ0X2xlYWZfc3dhcBIbLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXF1ZXN0Ghwuc3BhcmsuU3RhcnRUcmFuc2ZlclJlc3BvbnNlIgASTwoJbGVhZl9zd2FwEh0uc3BhcmsuQ291bnRlckxlYWZTd2FwUmVxdWVzdBoeLnNwYXJrLkNvdW50ZXJMZWFmU3dhcFJlc3BvbnNlIgOIAgESVwoRY291bnRlcl9sZWFmX3N3YXASHS5zcGFyay5Db3VudGVyTGVhZlN3YXBSZXF1ZXN0Gh4uc3BhcmsuQ291bnRlckxlYWZTd2FwUmVzcG9uc2UiA4gCARJWChByZWZyZXNoX3RpbWVsb2NrEh0uc3BhcmsuUmVmcmVzaFRpbWVsb2NrUmVxdWVzdBoeLnNwYXJrLlJlZnJlc2hUaW1lbG9ja1Jlc3BvbnNlIgOIAgESRwoLZXh0ZW5kX2xlYWYSGC5zcGFyay5FeHRlbmRMZWFmUmVxdWVzdBoZLnNwYXJrLkV4dGVuZExlYWZSZXNwb25zZSIDiAIBEkEKCnJlbmV3X2xlYWYSFy5zcGFyay5SZW5ld0xlYWZSZXF1ZXN0Ghguc3BhcmsuUmVuZXdMZWFmUmVzcG9uc2UiABJcChlnZXRfc2lnbmluZ19vcGVyYXRvcl9saXN0EhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiUuc3BhcmsuR2V0U2lnbmluZ09wZXJhdG9yTGlzdFJlc3BvbnNlIgASRAoLcXVlcnlfbm9kZXMSGC5zcGFyay5RdWVyeU5vZGVzUmVxdWVzdBoZLnNwYXJrLlF1ZXJ5Tm9kZXNSZXNwb25zZSIAEmwKGHF1ZXJ5X25vZGVzX2Rpc3RyaWJ1dGlvbhIkLnNwYXJrLlF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXF1ZXN0GiUuc3BhcmsuUXVlcnlOb2Rlc0Rpc3RyaWJ1dGlvblJlc3BvbnNlIgOIAgESXgoUcXVlcnlfbm9kZXNfYnlfdmFsdWUSHy5zcGFyay5RdWVyeU5vZGVzQnlWYWx1ZVJlcXVlc3QaIC5zcGFyay5RdWVyeU5vZGVzQnlWYWx1ZVJlc3BvbnNlIgOIAgESSgoNcXVlcnlfYmFsYW5jZRIaLnNwYXJrLlF1ZXJ5QmFsYW5jZVJlcXVlc3QaGy5zcGFyay5RdWVyeUJhbGFuY2VSZXNwb25zZSIAEmoKGXF1ZXJ5X3VzZXJfc2lnbmVkX3JlZnVuZHMSJC5zcGFyay5RdWVyeVVzZXJTaWduZWRSZWZ1bmRzUmVxdWVzdBolLnNwYXJrLlF1ZXJ5VXNlclNpZ25lZFJlZnVuZHNSZXNwb25zZSIAEnkKHnF1ZXJ5X3VudXNlZF9kZXBvc2l0X2FkZHJlc3NlcxIpLnNwYXJrLlF1ZXJ5VW51c2VkRGVwb3NpdEFkZHJlc3Nlc1JlcXVlc3QaKi5zcGFyay5RdWVyeVVudXNlZERlcG9zaXRBZGRyZXNzZXNSZXNwb25zZSIAEnkKHnF1ZXJ5X3N0YXRpY19kZXBvc2l0X2FkZHJlc3NlcxIpLnNwYXJrLlF1ZXJ5U3RhdGljRGVwb3NpdEFkZHJlc3Nlc1JlcXVlc3QaKi5zcGFyay5RdWVyeVN0YXRpY0RlcG9zaXRBZGRyZXNzZXNSZXNwb25zZSIAElwKE3N1YnNjcmliZV90b19ldmVudHMSHy5zcGFyay5TdWJzY3JpYmVUb0V2ZW50c1JlcXVlc3QaIC5zcGFyay5TdWJzY3JpYmVUb0V2ZW50c1Jlc3BvbnNlIgAwARKGAQojaW5pdGlhdGVfc3RhdGljX2RlcG9zaXRfdXR4b19yZWZ1bmQSLS5zcGFyay5Jbml0aWF0ZVN0YXRpY0RlcG9zaXRVdHhvUmVmdW5kUmVxdWVzdBouLnNwYXJrLkluaXRpYXRlU3RhdGljRGVwb3NpdFV0eG9SZWZ1bmRSZXNwb25zZSIAEloKEmluaXRpYXRlX3V0eG9fc3dhcBIeLnNwYXJrLkluaXRpYXRlVXR4b1N3YXBSZXF1ZXN0Gh8uc3BhcmsuSW5pdGlhdGVVdHhvU3dhcFJlc3BvbnNlIgOIAgESYQoWZXhpdF9zaW5nbGVfbm9kZV90cmVlcxIhLnNwYXJrLkV4aXRTaW5nbGVOb2RlVHJlZXNSZXF1ZXN0GiIuc3BhcmsuRXhpdFNpbmdsZU5vZGVUcmVlc1Jlc3BvbnNlIgASVgoTY29vcGVyYXRpdmVfZXhpdF92MhIdLnNwYXJrLkNvb3BlcmF0aXZlRXhpdFJlcXVlc3QaHi5zcGFyay5Db29wZXJhdGl2ZUV4aXRSZXNwb25zZSIAEkoKDmV4dGVuZF9sZWFmX3YyEhguc3BhcmsuRXh0ZW5kTGVhZlJlcXVlc3QaGS5zcGFyay5FeHRlbmRMZWFmUmVzcG9uc2UiA4gCARJzCh5jbGFpbV90cmFuc2Zlcl9zaWduX3JlZnVuZHNfdjISJi5zcGFyay5DbGFpbVRyYW5zZmVyU2lnblJlZnVuZHNSZXF1ZXN0Gicuc3BhcmsuQ2xhaW1UcmFuc2ZlclNpZ25SZWZ1bmRzUmVzcG9uc2UiABJsChtmaW5hbGl6ZV9ub2RlX3NpZ25hdHVyZXNfdjISJC5zcGFyay5GaW5hbGl6ZU5vZGVTaWduYXR1cmVzUmVxdWVzdBolLnNwYXJrLkZpbmFsaXplTm9kZVNpZ25hdHVyZXNSZXNwb25zZSIAEmYKGWluaXRpYXRlX3ByZWltYWdlX3N3YXBfdjISIi5zcGFyay5Jbml0aWF0ZVByZWltYWdlU3dhcFJlcXVlc3QaIy5zcGFyay5Jbml0aWF0ZVByZWltYWdlU3dhcFJlc3BvbnNlIgASZgoZaW5pdGlhdGVfcHJlaW1hZ2Vfc3dhcF92MxIiLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVxdWVzdBojLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVzcG9uc2UiABJRChJzdGFydF9sZWFmX3N3YXBfdjISGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdBocLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXNwb25zZSIAEloKFGNvdW50ZXJfbGVhZl9zd2FwX3YyEh0uc3BhcmsuQ291bnRlckxlYWZTd2FwUmVxdWVzdBoeLnNwYXJrLkNvdW50ZXJMZWFmU3dhcFJlc3BvbnNlIgOIAgESUAoRc3RhcnRfdHJhbnNmZXJfdjISGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdBocLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXNwb25zZSIAElkKE3JlZnJlc2hfdGltZWxvY2tfdjISHS5zcGFyay5SZWZyZXNoVGltZWxvY2tSZXF1ZXN0Gh4uc3BhcmsuUmVmcmVzaFRpbWVsb2NrUmVzcG9uc2UiA4gCARJeChVnZXRfdXR4b3NfZm9yX2FkZHJlc3MSIC5zcGFyay5HZXRVdHhvc0ZvckFkZHJlc3NSZXF1ZXN0GiEuc3BhcmsuR2V0VXR4b3NGb3JBZGRyZXNzUmVzcG9uc2UiABJdChRxdWVyeV9zcGFya19pbnZvaWNlcxIgLnNwYXJrLlF1ZXJ5U3BhcmtJbnZvaWNlc1JlcXVlc3QaIS5zcGFyay5RdWVyeVNwYXJrSW52b2ljZXNSZXNwb25zZSIAEnkKHmluaXRpYXRlX3N3YXBfcHJpbWFyeV90cmFuc2ZlchIpLnNwYXJrLkluaXRpYXRlU3dhcFByaW1hcnlUcmFuc2ZlclJlcXVlc3QaKi5zcGFyay5Jbml0aWF0ZVN3YXBQcmltYXJ5VHJhbnNmZXJSZXNwb25zZSIAEmAKFXVwZGF0ZV93YWxsZXRfc2V0dGluZxIhLnNwYXJrLlVwZGF0ZVdhbGxldFNldHRpbmdSZXF1ZXN0GiIuc3BhcmsuVXBkYXRlV2FsbGV0U2V0dGluZ1Jlc3BvbnNlIgASXQoUcXVlcnlfd2FsbGV0X3NldHRpbmcSIC5zcGFyay5RdWVyeVdhbGxldFNldHRpbmdSZXF1ZXN0GiEuc3BhcmsuUXVlcnlXYWxsZXRTZXR0aW5nUmVzcG9uc2UiAEIsWipnaXRodWIuY29tL2xpZ2h0c3BhcmtkZXYvc3BhcmsvcHJvdG8vc3BhcmtiBnByb3RvMwqIVQoRc3BhcmtfdG9rZW4ucHJvdG8SC3NwYXJrX3Rva2VuGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvGgtzcGFyay5wcm90bxoXdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8imwEKElRva2VuT3V0cHV0VG9TcGVuZBJGChtwcmV2X3Rva2VuX3RyYW5zYWN0aW9uX2hhc2gYASABKAxCB/pCBHoCaCBSGHByZXZUb2tlblRyYW5zYWN0aW9uSGFzaBI9ChtwcmV2X3Rva2VuX3RyYW5zYWN0aW9uX3ZvdXQYAiABKA1SGHByZXZUb2tlblRyYW5zYWN0aW9uVm91dCJfChJUb2tlblRyYW5zZmVySW5wdXQSSQoQb3V0cHV0c190b19zcGVuZBgBIAMoCzIfLnNwYXJrX3Rva2VuLlRva2VuT3V0cHV0VG9TcGVuZFIOb3V0cHV0c1RvU3BlbmQikwEKDlRva2VuTWludElucHV0EjMKEWlzc3Vlcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg9pc3N1ZXJQdWJsaWNLZXkSNwoQdG9rZW5faWRlbnRpZmllchgCIAEoDEIH+kIEegJoIEgAUg90b2tlbklkZW50aWZpZXKIAQFCEwoRX3Rva2VuX2lkZW50aWZpZXIi9gIKEFRva2VuQ3JlYXRlSW5wdXQSMwoRaXNzdWVyX3B1YmxpY19rZXkYASABKAxCB/pCBHoCaCFSD2lzc3VlclB1YmxpY0tleRImCgp0b2tlbl9uYW1lGAIgASgJQgf6QgRyAhgUUgl0b2tlbk5hbWUSKgoMdG9rZW5fdGlja2VyGAMgASgJQgf6QgRyAhgGUgt0b2tlblRpY2tlchIkCghkZWNpbWFscxgEIAEoDUII+kIFKgMY/wFSCGRlY2ltYWxzEiYKCm1heF9zdXBwbHkYBSABKAxCB/pCBHoCaBBSCW1heFN1cHBseRIhCgxpc19mcmVlemFibGUYBiABKAhSC2lzRnJlZXphYmxlEkkKGmNyZWF0aW9uX2VudGl0eV9wdWJsaWNfa2V5GAcgASgMQgf6QgR6AmghSABSF2NyZWF0aW9uRW50aXR5UHVibGljS2V5iAEBQh0KG19jcmVhdGlvbl9lbnRpdHlfcHVibGljX2tleSLHBAoLVG9rZW5PdXRwdXQSHQoCaWQYASABKAlCCPpCBXIDsAEBSABSAmlkiAEBEjEKEG93bmVyX3B1YmxpY19rZXkYAiABKAxCB/pCBHoCaCFSDm93bmVyUHVibGljS2V5EkEKFXJldm9jYXRpb25fY29tbWl0bWVudBgDIAEoDEIH+kIEegJoIUgBUhRyZXZvY2F0aW9uQ29tbWl0bWVudIgBARIxChJ3aXRoZHJhd19ib25kX3NhdHMYBCABKARIAlIQd2l0aGRyYXdCb25kU2F0c4gBARJMCiB3aXRoZHJhd19yZWxhdGl2ZV9ibG9ja19sb2NrdGltZRgFIAEoBEgDUh13aXRoZHJhd1JlbGF0aXZlQmxvY2tMb2NrdGltZYgBARI2ChB0b2tlbl9wdWJsaWNfa2V5GAYgASgMQgf6QgR6AmghSARSDnRva2VuUHVibGljS2V5iAEBEjcKEHRva2VuX2lkZW50aWZpZXIYCCABKAxCB/pCBHoCaCBIBVIPdG9rZW5JZGVudGlmaWVyiAEBEioKDHRva2VuX2Ftb3VudBgHIAEoDEIH+kIEegJoEFILdG9rZW5BbW91bnRCBQoDX2lkQhgKFl9yZXZvY2F0aW9uX2NvbW1pdG1lbnRCFQoTX3dpdGhkcmF3X2JvbmRfc2F0c0IjCiFfd2l0aGRyYXdfcmVsYXRpdmVfYmxvY2tfbG9ja3RpbWVCEwoRX3Rva2VuX3B1YmxpY19rZXlCEwoRX3Rva2VuX2lkZW50aWZpZXIingIKElBhcnRpYWxUb2tlbk91dHB1dBIxChBvd25lcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRIsChJ3aXRoZHJhd19ib25kX3NhdHMYAiABKARSEHdpdGhkcmF3Qm9uZFNhdHMSRwogd2l0aGRyYXdfcmVsYXRpdmVfYmxvY2tfbG9ja3RpbWUYAyABKARSHXdpdGhkcmF3UmVsYXRpdmVCbG9ja0xvY2t0aW1lEjIKEHRva2VuX2lkZW50aWZpZXIYBCABKAxCB/pCBHoCaCBSD3Rva2VuSWRlbnRpZmllchIqCgx0b2tlbl9hbW91bnQYBSABKAxCB/pCBHoCaBBSC3Rva2VuQW1vdW50IqMBChBGaW5hbFRva2VuT3V0cHV0ElEKFHBhcnRpYWxfdG9rZW5fb3V0cHV0GAEgASgLMh8uc3BhcmtfdG9rZW4uUGFydGlhbFRva2VuT3V0cHV0UhJwYXJ0aWFsVG9rZW5PdXRwdXQSPAoVcmV2b2NhdGlvbl9jb21taXRtZW50GAIgASgMQgf6QgR6AmghUhRyZXZvY2F0aW9uQ29tbWl0bWVudCKaBgoQVG9rZW5UcmFuc2FjdGlvbhIYCgd2ZXJzaW9uGAEgASgNUgd2ZXJzaW9uEjwKCm1pbnRfaW5wdXQYAiABKAsyGy5zcGFya190b2tlbi5Ub2tlbk1pbnRJbnB1dEgAUgltaW50SW5wdXQSSAoOdHJhbnNmZXJfaW5wdXQYAyABKAsyHy5zcGFya190b2tlbi5Ub2tlblRyYW5zZmVySW5wdXRIAFINdHJhbnNmZXJJbnB1dBJCCgxjcmVhdGVfaW5wdXQYCCABKAsyHS5zcGFya190b2tlbi5Ub2tlbkNyZWF0ZUlucHV0SABSC2NyZWF0ZUlucHV0Ej0KDXRva2VuX291dHB1dHMYBCADKAsyGC5zcGFya190b2tlbi5Ub2tlbk91dHB1dFIMdG9rZW5PdXRwdXRzEloKI3NwYXJrX29wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXlzGAUgAygMQgz6QgmSAQYiBHoCaCFSH3NwYXJrT3BlcmF0b3JJZGVudGl0eVB1YmxpY0tleXMSOwoLZXhwaXJ5X3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgpleHBpcnlUaW1lEjIKB25ldHdvcmsYByABKA4yDi5zcGFyay5OZXR3b3JrQgj6QgWCAQIgAFIHbmV0d29yaxJUChhjbGllbnRfY3JlYXRlZF90aW1lc3RhbXAYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUhZjbGllbnRDcmVhdGVkVGltZXN0YW1wEk8KE2ludm9pY2VfYXR0YWNobWVudHMYCiADKAsyHi5zcGFya190b2tlbi5JbnZvaWNlQXR0YWNobWVudFISaW52b2ljZUF0dGFjaG1lbnRzEj8KGXZhbGlkaXR5X2R1cmF0aW9uX3NlY29uZHMYCyABKARIAVIXdmFsaWRpdHlEdXJhdGlvblNlY29uZHOIAQFCDgoMdG9rZW5faW5wdXRzQhwKGl92YWxpZGl0eV9kdXJhdGlvbl9zZWNvbmRzIpkDChhUb2tlblRyYW5zYWN0aW9uTWV0YWRhdGESWgojc3Bhcmtfb3BlcmF0b3JfaWRlbnRpdHlfcHVibGljX2tleXMYAiADKAxCDPpCCZIBBiIEegJoIVIfc3BhcmtPcGVyYXRvcklkZW50aXR5UHVibGljS2V5cxIyCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya0II+kIFggECIABSB25ldHdvcmsSVAoYY2xpZW50X2NyZWF0ZWRfdGltZXN0YW1wGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIWY2xpZW50Q3JlYXRlZFRpbWVzdGFtcBJGChl2YWxpZGl0eV9kdXJhdGlvbl9zZWNvbmRzGAUgASgEQgr6QgcyBRisAigBUhd2YWxpZGl0eUR1cmF0aW9uU2Vjb25kcxJPChNpbnZvaWNlX2F0dGFjaG1lbnRzGAYgAygLMh4uc3BhcmtfdG9rZW4uSW52b2ljZUF0dGFjaG1lbnRSEmludm9pY2VBdHRhY2htZW50cyLJAwoXUGFydGlhbFRva2VuVHJhbnNhY3Rpb24SGAoHdmVyc2lvbhgBIAEoDVIHdmVyc2lvbhJjChp0b2tlbl90cmFuc2FjdGlvbl9tZXRhZGF0YRgCIAEoCzIlLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNhY3Rpb25NZXRhZGF0YVIYdG9rZW5UcmFuc2FjdGlvbk1ldGFkYXRhEjwKCm1pbnRfaW5wdXQYAyABKAsyGy5zcGFya190b2tlbi5Ub2tlbk1pbnRJbnB1dEgAUgltaW50SW5wdXQSSAoOdHJhbnNmZXJfaW5wdXQYBCABKAsyHy5zcGFya190b2tlbi5Ub2tlblRyYW5zZmVySW5wdXRIAFINdHJhbnNmZXJJbnB1dBJCCgxjcmVhdGVfaW5wdXQYBSABKAsyHS5zcGFya190b2tlbi5Ub2tlbkNyZWF0ZUlucHV0SABSC2NyZWF0ZUlucHV0ElMKFXBhcnRpYWxfdG9rZW5fb3V0cHV0cxgGIAMoCzIfLnNwYXJrX3Rva2VuLlBhcnRpYWxUb2tlbk91dHB1dFITcGFydGlhbFRva2VuT3V0cHV0c0IOCgx0b2tlbl9pbnB1dHMiwQMKFUZpbmFsVG9rZW5UcmFuc2FjdGlvbhIYCgd2ZXJzaW9uGAEgASgNUgd2ZXJzaW9uEmMKGnRva2VuX3RyYW5zYWN0aW9uX21ldGFkYXRhGAIgASgLMiUuc3BhcmtfdG9rZW4uVG9rZW5UcmFuc2FjdGlvbk1ldGFkYXRhUhh0b2tlblRyYW5zYWN0aW9uTWV0YWRhdGESPAoKbWludF9pbnB1dBgDIAEoCzIbLnNwYXJrX3Rva2VuLlRva2VuTWludElucHV0SABSCW1pbnRJbnB1dBJICg50cmFuc2Zlcl9pbnB1dBgEIAEoCzIfLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNmZXJJbnB1dEgAUg10cmFuc2ZlcklucHV0EkIKDGNyZWF0ZV9pbnB1dBgFIAEoCzIdLnNwYXJrX3Rva2VuLlRva2VuQ3JlYXRlSW5wdXRIAFILY3JlYXRlSW5wdXQSTQoTZmluYWxfdG9rZW5fb3V0cHV0cxgGIAMoCzIdLnNwYXJrX3Rva2VuLkZpbmFsVG9rZW5PdXRwdXRSEWZpbmFsVG9rZW5PdXRwdXRzQg4KDHRva2VuX2lucHV0cyI4ChFJbnZvaWNlQXR0YWNobWVudBIjCg1zcGFya19pbnZvaWNlGAEgASgJUgxzcGFya0ludm9pY2UiXgoSU2lnbmF0dXJlV2l0aEluZGV4EicKCXNpZ25hdHVyZRgBIAEoDEIJ+kIGegQQQBhJUglzaWduYXR1cmUSHwoLaW5wdXRfaW5kZXgYAiABKA1SCmlucHV0SW5kZXgitAEKHklucHV0VHR4b1NpZ25hdHVyZXNQZXJPcGVyYXRvchJICg90dHhvX3NpZ25hdHVyZXMYASADKAsyHy5zcGFya190b2tlbi5TaWduYXR1cmVXaXRoSW5kZXhSDnR0eG9TaWduYXR1cmVzEkgKHG9wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxCB/pCBHoCaCFSGW9wZXJhdG9ySWRlbnRpdHlQdWJsaWNLZXki8gIKF1N0YXJ0VHJhbnNhY3Rpb25SZXF1ZXN0EjcKE2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxCB/pCBHoCaCFSEWlkZW50aXR5UHVibGljS2V5ElkKGXBhcnRpYWxfdG9rZW5fdHJhbnNhY3Rpb24YAiABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhdwYXJ0aWFsVG9rZW5UcmFuc2FjdGlvbhJ7CipwYXJ0aWFsX3Rva2VuX3RyYW5zYWN0aW9uX293bmVyX3NpZ25hdHVyZXMYAyADKAsyHy5zcGFya190b2tlbi5TaWduYXR1cmVXaXRoSW5kZXhSJnBhcnRpYWxUb2tlblRyYW5zYWN0aW9uT3duZXJTaWduYXR1cmVzEkYKGXZhbGlkaXR5X2R1cmF0aW9uX3NlY29uZHMYBCABKARCCvpCBzIFGKwCKAFSF3ZhbGlkaXR5RHVyYXRpb25TZWNvbmRzIq4BChhTdGFydFRyYW5zYWN0aW9uUmVzcG9uc2USVQoXZmluYWxfdG9rZW5fdHJhbnNhY3Rpb24YASABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhVmaW5hbFRva2VuVHJhbnNhY3Rpb24SOwoNa2V5c2hhcmVfaW5mbxgCIAEoCzIWLnNwYXJrLlNpZ25pbmdLZXlzaGFyZVIMa2V5c2hhcmVJbmZvIvgCChhDb21taXRUcmFuc2FjdGlvblJlcXVlc3QSVQoXZmluYWxfdG9rZW5fdHJhbnNhY3Rpb24YASABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhVmaW5hbFRva2VuVHJhbnNhY3Rpb24SSAocZmluYWxfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgCIAEoDEIH+kIEegJoIFIZZmluYWxUb2tlblRyYW5zYWN0aW9uSGFzaBJ3CiJpbnB1dF90dHhvX3NpZ25hdHVyZXNfcGVyX29wZXJhdG9yGAMgAygLMisuc3BhcmtfdG9rZW4uSW5wdXRUdHhvU2lnbmF0dXJlc1Blck9wZXJhdG9yUh5pbnB1dFR0eG9TaWduYXR1cmVzUGVyT3BlcmF0b3ISQgoZb3duZXJfaWRlbnRpdHlfcHVibGljX2tleRgEIAEoDEIH+kIEegJoIVIWb3duZXJJZGVudGl0eVB1YmxpY0tleSK6AQoOQ29tbWl0UHJvZ3Jlc3MSUQoeY29tbWl0dGVkX29wZXJhdG9yX3B1YmxpY19rZXlzGAEgAygMQgz6QgmSAQYiBHoCaCFSG2NvbW1pdHRlZE9wZXJhdG9yUHVibGljS2V5cxJVCiB1bmNvbW1pdHRlZF9vcGVyYXRvcl9wdWJsaWNfa2V5cxgCIAMoDEIM+kIJkgEGIgR6AmghUh11bmNvbW1pdHRlZE9wZXJhdG9yUHVibGljS2V5cyKhAQoZQ29tbWl0VHJhbnNhY3Rpb25SZXNwb25zZRI+Cg1jb21taXRfc3RhdHVzGAEgASgOMhkuc3BhcmtfdG9rZW4uQ29tbWl0U3RhdHVzUgxjb21taXRTdGF0dXMSRAoPY29tbWl0X3Byb2dyZXNzGAIgASgLMhsuc3BhcmtfdG9rZW4uQ29tbWl0UHJvZ3Jlc3NSDmNvbW1pdFByb2dyZXNzIqYCChtCcm9hZGNhc3RUcmFuc2FjdGlvblJlcXVlc3QSNwoTaWRlbnRpdHlfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIRaWRlbnRpdHlQdWJsaWNLZXkSYAoZcGFydGlhbF90b2tlbl90cmFuc2FjdGlvbhgCIAEoCzIkLnNwYXJrX3Rva2VuLlBhcnRpYWxUb2tlblRyYW5zYWN0aW9uUhdwYXJ0aWFsVG9rZW5UcmFuc2FjdGlvbhJsCiJ0b2tlbl90cmFuc2FjdGlvbl9vd25lcl9zaWduYXR1cmVzGAMgAygLMh8uc3BhcmtfdG9rZW4uU2lnbmF0dXJlV2l0aEluZGV4Uh90b2tlblRyYW5zYWN0aW9uT3duZXJTaWduYXR1cmVzIoACChxCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3BvbnNlEloKF2ZpbmFsX3Rva2VuX3RyYW5zYWN0aW9uGAEgASgLMiIuc3BhcmtfdG9rZW4uRmluYWxUb2tlblRyYW5zYWN0aW9uUhVmaW5hbFRva2VuVHJhbnNhY3Rpb24SPgoNY29tbWl0X3N0YXR1cxgCIAEoDjIZLnNwYXJrX3Rva2VuLkNvbW1pdFN0YXR1c1IMY29tbWl0U3RhdHVzEkQKD2NvbW1pdF9wcm9ncmVzcxgDIAEoCzIbLnNwYXJrX3Rva2VuLkNvbW1pdFByb2dyZXNzUg5jb21taXRQcm9ncmVzcyKSAQoZUXVlcnlUb2tlbk1ldGFkYXRhUmVxdWVzdBI5ChF0b2tlbl9pZGVudGlmaWVycxgBIAMoDEIM+kIJkgEGIgR6AmggUhB0b2tlbklkZW50aWZpZXJzEjoKEmlzc3Vlcl9wdWJsaWNfa2V5cxgCIAMoDEIM+kIJkgEGIgR6AmghUhBpc3N1ZXJQdWJsaWNLZXlzIqcDCg1Ub2tlbk1ldGFkYXRhEjMKEWlzc3Vlcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg9pc3N1ZXJQdWJsaWNLZXkSJgoKdG9rZW5fbmFtZRgCIAEoCUIH+kIEcgIYFFIJdG9rZW5OYW1lEioKDHRva2VuX3RpY2tlchgDIAEoCUIH+kIEcgIYBlILdG9rZW5UaWNrZXISJAoIZGVjaW1hbHMYBCABKA1CCPpCBSoDGP8BUghkZWNpbWFscxImCgptYXhfc3VwcGx5GAUgASgMQgf6QgR6AmgQUgltYXhTdXBwbHkSIQoMaXNfZnJlZXphYmxlGAYgASgIUgtpc0ZyZWV6YWJsZRJJChpjcmVhdGlvbl9lbnRpdHlfcHVibGljX2tleRgHIAEoDEIH+kIEegJoIUgAUhdjcmVhdGlvbkVudGl0eVB1YmxpY0tleYgBARIyChB0b2tlbl9pZGVudGlmaWVyGAggASgMQgf6QgR6AmggUg90b2tlbklkZW50aWZpZXJCHQobX2NyZWF0aW9uX2VudGl0eV9wdWJsaWNfa2V5Il8KGlF1ZXJ5VG9rZW5NZXRhZGF0YVJlc3BvbnNlEkEKDnRva2VuX21ldGFkYXRhGAEgAygLMhouc3BhcmtfdG9rZW4uVG9rZW5NZXRhZGF0YVINdG9rZW5NZXRhZGF0YSKsAgoYUXVlcnlUb2tlbk91dHB1dHNSZXF1ZXN0EjgKEW93bmVyX3B1YmxpY19rZXlzGAEgAygMQgz6QgmSAQYiBHoCaCFSD293bmVyUHVibGljS2V5cxI6ChJpc3N1ZXJfcHVibGljX2tleXMYAiADKAxCDPpCCZIBBiIEegJoIVIQaXNzdWVyUHVibGljS2V5cxI5ChF0b2tlbl9pZGVudGlmaWVycxgEIAMoDEIM+kIJkgEGIgR6AmggUhB0b2tlbklkZW50aWZpZXJzEigKB25ldHdvcmsYAyABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEjUKDHBhZ2VfcmVxdWVzdBgFIAEoCzISLnNwYXJrLlBhZ2VSZXF1ZXN0UgtwYWdlUmVxdWVzdCKtAwodUXVlcnlUb2tlblRyYW5zYWN0aW9uc1JlcXVlc3QSLAoKb3V0cHV0X2lkcxgBIAMoCUIN+kIKkgEHIgVyA7ABAVIJb3V0cHV0SWRzEjgKEW93bmVyX3B1YmxpY19rZXlzGAIgAygMQgz6QgmSAQYiBHoCaCFSD293bmVyUHVibGljS2V5cxI6ChJpc3N1ZXJfcHVibGljX2tleXMYAyADKAxCDPpCCZIBBiIEegJoIVIQaXNzdWVyUHVibGljS2V5cxI5ChF0b2tlbl9pZGVudGlmaWVycxgHIAMoDEIM+kIJkgEGIgR6AmggUhB0b2tlbklkZW50aWZpZXJzEkYKGHRva2VuX3RyYW5zYWN0aW9uX2hhc2hlcxgEIAMoDEIM+kIJkgEGIgR6AmggUhZ0b2tlblRyYW5zYWN0aW9uSGFzaGVzEiIKBW9yZGVyGAggASgOMgwuc3BhcmsuT3JkZXJSBW9yZGVyEiAKBWxpbWl0GAUgASgDQgr6QgciBRjoBygAUgVsaW1pdBIfCgZvZmZzZXQYBiABKANCB/pCBCICKABSBm9mZnNldCKmAQoeUXVlcnlUb2tlblRyYW5zYWN0aW9uc1Jlc3BvbnNlEmwKHnRva2VuX3RyYW5zYWN0aW9uc193aXRoX3N0YXR1cxgBIAMoCzInLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNhY3Rpb25XaXRoU3RhdHVzUht0b2tlblRyYW5zYWN0aW9uc1dpdGhTdGF0dXMSFgoGb2Zmc2V0GAIgASgDUgZvZmZzZXQi1gEKIU91dHB1dFdpdGhQcmV2aW91c1RyYW5zYWN0aW9uRGF0YRIwCgZvdXRwdXQYASABKAsyGC5zcGFya190b2tlbi5Ub2tlbk91dHB1dFIGb3V0cHV0EkMKGXByZXZpb3VzX3RyYW5zYWN0aW9uX2hhc2gYAiABKAxCB/pCBHoCaCBSF3ByZXZpb3VzVHJhbnNhY3Rpb25IYXNoEjoKGXByZXZpb3VzX3RyYW5zYWN0aW9uX3ZvdXQYAyABKA1SF3ByZXZpb3VzVHJhbnNhY3Rpb25Wb3V0ItoBChlRdWVyeVRva2VuT3V0cHV0c1Jlc3BvbnNlEoIBCiZvdXRwdXRzX3dpdGhfcHJldmlvdXNfdHJhbnNhY3Rpb25fZGF0YRgBIAMoCzIuLnNwYXJrX3Rva2VuLk91dHB1dFdpdGhQcmV2aW91c1RyYW5zYWN0aW9uRGF0YVIib3V0cHV0c1dpdGhQcmV2aW91c1RyYW5zYWN0aW9uRGF0YRI4Cg1wYWdlX3Jlc3BvbnNlGAIgASgLMhMuc3BhcmsuUGFnZVJlc3BvbnNlUgxwYWdlUmVzcG9uc2UiZAoYU3BlbnRUb2tlbk91dHB1dE1ldGFkYXRhEhsKCW91dHB1dF9pZBgBIAEoCVIIb3V0cHV0SWQSKwoRcmV2b2NhdGlvbl9zZWNyZXQYAiABKAxSEHJldm9jYXRpb25TZWNyZXQijgEKJFRva2VuVHJhbnNhY3Rpb25Db25maXJtYXRpb25NZXRhZGF0YRJmChxzcGVudF90b2tlbl9vdXRwdXRzX21ldGFkYXRhGAEgAygLMiUuc3BhcmtfdG9rZW4uU3BlbnRUb2tlbk91dHB1dE1ldGFkYXRhUhlzcGVudFRva2VuT3V0cHV0c01ldGFkYXRhIswCChpUb2tlblRyYW5zYWN0aW9uV2l0aFN0YXR1cxJKChF0b2tlbl90cmFuc2FjdGlvbhgBIAEoCzIdLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNhY3Rpb25SEHRva2VuVHJhbnNhY3Rpb24SOwoGc3RhdHVzGAIgASgOMiMuc3BhcmtfdG9rZW4uVG9rZW5UcmFuc2FjdGlvblN0YXR1c1IGc3RhdHVzEmYKFWNvbmZpcm1hdGlvbl9tZXRhZGF0YRgDIAEoCzIxLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNhY3Rpb25Db25maXJtYXRpb25NZXRhZGF0YVIUY29uZmlybWF0aW9uTWV0YWRhdGESPQoWdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgEIAEoDEIH+kIEegJoIFIUdG9rZW5UcmFuc2FjdGlvbkhhc2girAMKE0ZyZWV6ZVRva2Vuc1BheWxvYWQSGAoHdmVyc2lvbhgBIAEoDVIHdmVyc2lvbhIxChBvd25lcl9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRI2ChB0b2tlbl9wdWJsaWNfa2V5GAMgASgMQgf6QgR6AmghSABSDnRva2VuUHVibGljS2V5iAEBEjcKEHRva2VuX2lkZW50aWZpZXIYBCABKAxCB/pCBHoCaCBIAVIPdG9rZW5JZGVudGlmaWVyiAEBEjoKGWlzc3Vlcl9wcm92aWRlZF90aW1lc3RhbXAYBSABKARSF2lzc3VlclByb3ZpZGVkVGltZXN0YW1wEkgKHG9wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXkYBiABKAxCB/pCBHoCaCFSGW9wZXJhdG9ySWRlbnRpdHlQdWJsaWNLZXkSJwoPc2hvdWxkX3VuZnJlZXplGAcgASgIUg5zaG91bGRVbmZyZWV6ZUITChFfdG9rZW5fcHVibGljX2tleUITChFfdG9rZW5faWRlbnRpZmllciKhAQoTRnJlZXplVG9rZW5zUmVxdWVzdBJUChVmcmVlemVfdG9rZW5zX3BheWxvYWQYASABKAsyIC5zcGFya190b2tlbi5GcmVlemVUb2tlbnNQYXlsb2FkUhNmcmVlemVUb2tlbnNQYXlsb2FkEjQKEGlzc3Vlcl9zaWduYXR1cmUYAiABKAxCCfpCBnoEEEAYSVIPaXNzdWVyU2lnbmF0dXJlIokBChRGcmVlemVUb2tlbnNSZXNwb25zZRI9ChNpbXBhY3RlZF9vdXRwdXRfaWRzGAEgAygJQg36QgqSAQciBXIDsAEBUhFpbXBhY3RlZE91dHB1dElkcxIyChVpbXBhY3RlZF90b2tlbl9hbW91bnQYAiABKAxSE2ltcGFjdGVkVG9rZW5BbW91bnQqpwEKFFRva2VuVHJhbnNhY3Rpb25UeXBlEiYKIlRPS0VOX1RSQU5TQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIhCh1UT0tFTl9UUkFOU0FDVElPTl9UWVBFX0NSRUFURRABEh8KG1RPS0VOX1RSQU5TQUNUSU9OX1RZUEVfTUlOVBACEiMKH1RPS0VOX1RSQU5TQUNUSU9OX1RZUEVfVFJBTlNGRVIQAypTCgxDb21taXRTdGF0dXMSFgoSQ09NTUlUX1VOU1BFQ0lGSUVEEAASFQoRQ09NTUlUX1BST0NFU1NJTkcQARIUChBDT01NSVRfRklOQUxJWkVEEAIqhgIKFlRva2VuVHJhbnNhY3Rpb25TdGF0dXMSHQoZVE9LRU5fVFJBTlNBQ1RJT05fU1RBUlRFRBAAEhwKGFRPS0VOX1RSQU5TQUNUSU9OX1NJR05FRBABEh4KGlRPS0VOX1RSQU5TQUNUSU9OX1JFVkVBTEVEEAUSHwobVE9LRU5fVFJBTlNBQ1RJT05fRklOQUxJWkVEEAISJwojVE9LRU5fVFJBTlNBQ1RJT05fU1RBUlRFRF9DQU5DRUxMRUQQAxImCiJUT0tFTl9UUkFOU0FDVElPTl9TSUdORURfQ0FOQ0VMTEVEEAQSHQoZVE9LRU5fVFJBTlNBQ1RJT05fVU5LTk9XThAKMvAFChFTcGFya1Rva2VuU2VydmljZRJiChFzdGFydF90cmFuc2FjdGlvbhIkLnNwYXJrX3Rva2VuLlN0YXJ0VHJhbnNhY3Rpb25SZXF1ZXN0GiUuc3BhcmtfdG9rZW4uU3RhcnRUcmFuc2FjdGlvblJlc3BvbnNlIgASZQoSY29tbWl0X3RyYW5zYWN0aW9uEiUuc3BhcmtfdG9rZW4uQ29tbWl0VHJhbnNhY3Rpb25SZXF1ZXN0GiYuc3BhcmtfdG9rZW4uQ29tbWl0VHJhbnNhY3Rpb25SZXNwb25zZSIAEmkKFHF1ZXJ5X3Rva2VuX21ldGFkYXRhEiYuc3BhcmtfdG9rZW4uUXVlcnlUb2tlbk1ldGFkYXRhUmVxdWVzdBonLnNwYXJrX3Rva2VuLlF1ZXJ5VG9rZW5NZXRhZGF0YVJlc3BvbnNlIgASdQoYcXVlcnlfdG9rZW5fdHJhbnNhY3Rpb25zEiouc3BhcmtfdG9rZW4uUXVlcnlUb2tlblRyYW5zYWN0aW9uc1JlcXVlc3QaKy5zcGFya190b2tlbi5RdWVyeVRva2VuVHJhbnNhY3Rpb25zUmVzcG9uc2UiABJmChNxdWVyeV90b2tlbl9vdXRwdXRzEiUuc3BhcmtfdG9rZW4uUXVlcnlUb2tlbk91dHB1dHNSZXF1ZXN0GiYuc3BhcmtfdG9rZW4uUXVlcnlUb2tlbk91dHB1dHNSZXNwb25zZSIAElYKDWZyZWV6ZV90b2tlbnMSIC5zcGFya190b2tlbi5GcmVlemVUb2tlbnNSZXF1ZXN0GiEuc3BhcmtfdG9rZW4uRnJlZXplVG9rZW5zUmVzcG9uc2UiABJuChVicm9hZGNhc3RfdHJhbnNhY3Rpb24SKC5zcGFya190b2tlbi5Ccm9hZGNhc3RUcmFuc2FjdGlvblJlcXVlc3QaKS5zcGFya190b2tlbi5Ccm9hZGNhc3RUcmFuc2FjdGlvblJlc3BvbnNlIgBCMlowZ2l0aHViLmNvbS9saWdodHNwYXJrZGV2L3NwYXJrL3Byb3RvL3NwYXJrX3Rva2VuYgZwcm90bzMKpQQKCm1vY2sucHJvdG8SBG1vY2saG2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byJAChtDbGVhblVwUHJlaW1hZ2VTaGFyZVJlcXVlc3QSIQoMcGF5bWVudF9oYXNoGAEgASgMUgtwYXltZW50SGFzaCJNChhVcGRhdGVOb2Rlc1N0YXR1c1JlcXVlc3QSGQoIbm9kZV9pZHMYASADKAlSB25vZGVJZHMSFgoGc3RhdHVzGAIgASgJUgZzdGF0dXMiMQoSVHJpZ2dlclRhc2tSZXF1ZXN0EhsKCXRhc2tfbmFtZRgBIAEoCVIIdGFza05hbWUy+gEKC01vY2tTZXJ2aWNlElYKF2NsZWFuX3VwX3ByZWltYWdlX3NoYXJlEiEubW9jay5DbGVhblVwUHJlaW1hZ2VTaGFyZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiABJPChN1cGRhdGVfbm9kZXNfc3RhdHVzEh4ubW9jay5VcGRhdGVOb2Rlc1N0YXR1c1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiABJCCgx0cmlnZ2VyX3Rhc2sSGC5tb2NrLlRyaWdnZXJUYXNrUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAQitaKWdpdGh1Yi5jb20vbGlnaHRzcGFya2Rldi9zcGFyay9wcm90by9tb2NrYgZwcm90bzMK6gcKEXNwYXJrX2F1dGhuLnByb3RvEgtzcGFya19hdXRobiJ4CglDaGFsbGVuZ2USGAoHdmVyc2lvbhgBIAEoBVIHdmVyc2lvbhIcCgl0aW1lc3RhbXAYAiABKANSCXRpbWVzdGFtcBIUCgVub25jZRgDIAEoDFIFbm9uY2USHQoKcHVibGljX2tleRgEIAEoDFIJcHVibGljS2V5IoUBChJQcm90ZWN0ZWRDaGFsbGVuZ2USGAoHdmVyc2lvbhgBIAEoBVIHdmVyc2lvbhI0CgljaGFsbGVuZ2UYAiABKAsyFi5zcGFya19hdXRobi5DaGFsbGVuZ2VSCWNoYWxsZW5nZRIfCgtzZXJ2ZXJfaG1hYxgDIAEoDFIKc2VydmVySG1hYyI0ChNHZXRDaGFsbGVuZ2VSZXF1ZXN0Eh0KCnB1YmxpY19rZXkYASABKAxSCXB1YmxpY0tleSJoChRHZXRDaGFsbGVuZ2VSZXNwb25zZRJQChNwcm90ZWN0ZWRfY2hhbGxlbmdlGAEgASgLMh8uc3BhcmtfYXV0aG4uUHJvdGVjdGVkQ2hhbGxlbmdlUhJwcm90ZWN0ZWRDaGFsbGVuZ2UipwEKFlZlcmlmeUNoYWxsZW5nZVJlcXVlc3QSUAoTcHJvdGVjdGVkX2NoYWxsZW5nZRgBIAEoCzIfLnNwYXJrX2F1dGhuLlByb3RlY3RlZENoYWxsZW5nZVIScHJvdGVjdGVkQ2hhbGxlbmdlEhwKCXNpZ25hdHVyZRgCIAEoDFIJc2lnbmF0dXJlEh0KCnB1YmxpY19rZXkYAyABKAxSCXB1YmxpY0tleSJxChdWZXJpZnlDaGFsbGVuZ2VSZXNwb25zZRIjCg1zZXNzaW9uX3Rva2VuGAEgASgJUgxzZXNzaW9uVG9rZW4SMQoUZXhwaXJhdGlvbl90aW1lc3RhbXAYAiABKANSE2V4cGlyYXRpb25UaW1lc3RhbXAyzAEKEVNwYXJrQXV0aG5TZXJ2aWNlElYKDWdldF9jaGFsbGVuZ2USIC5zcGFya19hdXRobi5HZXRDaGFsbGVuZ2VSZXF1ZXN0GiEuc3BhcmtfYXV0aG4uR2V0Q2hhbGxlbmdlUmVzcG9uc2UiABJfChB2ZXJpZnlfY2hhbGxlbmdlEiMuc3BhcmtfYXV0aG4uVmVyaWZ5Q2hhbGxlbmdlUmVxdWVzdBokLnNwYXJrX2F1dGhuLlZlcmlmeUNoYWxsZW5nZVJlc3BvbnNlIgBCMlowZ2l0aHViLmNvbS9saWdodHNwYXJrZGV2L3NwYXJrL3Byb3RvL3NwYXJrX2F1dGhuYgZwcm90bzM=";
|
|
26975
|
+
var SPARK_DESCRIPTORS_BASE64 = "Cv8BCh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvEg9nb29nbGUucHJvdG9idWYiOwoJVGltZXN0YW1wEhgKB3NlY29uZHMYASABKANSB3NlY29uZHMSFAoFbmFub3MYAiABKAVSBW5hbm9zQoUBChNjb20uZ29vZ2xlLnByb3RvYnVmQg5UaW1lc3RhbXBQcm90b1ABWjJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi90aW1lc3RhbXBwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCr4BChtnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIHCgVFbXB0eUJ9ChNjb20uZ29vZ2xlLnByb3RvYnVmQgpFbXB0eVByb3RvUAFaLmdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2VtcHR5cGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqIYAogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiJbChFGaWxlRGVzY3JpcHRvclNldBI4CgRmaWxlGAEgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG9SBGZpbGUqDAiA7Mr/ARCB7Mr/ASKYBQoTRmlsZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhgKB3BhY2thZ2UYAiABKAlSB3BhY2thZ2USHgoKZGVwZW5kZW5jeRgDIAMoCVIKZGVwZW5kZW5jeRIrChFwdWJsaWNfZGVwZW5kZW5jeRgKIAMoBVIQcHVibGljRGVwZW5kZW5jeRInCg93ZWFrX2RlcGVuZGVuY3kYCyADKAVSDndlYWtEZXBlbmRlbmN5EkMKDG1lc3NhZ2VfdHlwZRgEIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SC21lc3NhZ2VUeXBlEkEKCWVudW1fdHlwZRgFIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJBCgdzZXJ2aWNlGAYgAygLMicuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9SB3NlcnZpY2USQwoJZXh0ZW5zaW9uGAcgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SNgoHb3B0aW9ucxgIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1IHb3B0aW9ucxJJChBzb3VyY2VfY29kZV9pbmZvGAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvUg5zb3VyY2VDb2RlSW5mbxIWCgZzeW50YXgYDCABKAlSBnN5bnRheBIyCgdlZGl0aW9uGA4gASgOMhguZ29vZ2xlLnByb3RvYnVmLkVkaXRpb25SB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQizAQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SNwoIZmVhdHVyZXMYMiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSbQoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFREIDiAECUgx2ZXJpZmljYXRpb24alAEKC0RlY2xhcmF0aW9uEhYKBm51bWJlchgBIAEoBVIGbnVtYmVyEhsKCWZ1bGxfbmFtZRgCIAEoCVIIZnVsbE5hbWUSEgoEdHlwZRgDIAEoCVIEdHlwZRIaCghyZXNlcnZlZBgFIAEoCFIIcmVzZXJ2ZWQSGgoIcmVwZWF0ZWQYBiABKAhSCHJlcGVhdGVkSgQIBBAFIjQKEVZlcmlmaWNhdGlvblN0YXRlEg8KC0RFQ0xBUkFUSU9OEAASDgoKVU5WRVJJRklFRBABKgkI6AcQgICAgAIiwQYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucxInCg9wcm90bzNfb3B0aW9uYWwYESABKAhSDnByb3RvM09wdGlvbmFsIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUWVBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLVFlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUEVBVEVEEAMSEgoOTEFCRUxfUkVRVUlSRUQQAiJjChRPbmVvZkRlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjcKB29wdGlvbnMYAiABKAsyHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zUgdvcHRpb25zIuMCChNFbnVtRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPwoFdmFsdWUYAiADKAsyKS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvUgV2YWx1ZRI2CgdvcHRpb25zGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zUgdvcHRpb25zEl0KDnJlc2VydmVkX3JhbmdlGAQgAygLMjYuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USIwoNcmVzZXJ2ZWRfbmFtZRgFIAMoCVIMcmVzZXJ2ZWROYW1lGjsKEUVudW1SZXNlcnZlZFJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZCKDAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAIgASgFUgZudW1iZXISOwoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zUgdvcHRpb25zIqcBChZTZXJ2aWNlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPgoGbWV0aG9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1IGbWV0aG9kEjkKB29wdGlvbnMYAyABKAsyHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnNSB29wdGlvbnMiiQIKFU1ldGhvZERlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEh0KCmlucHV0X3R5cGUYAiABKAlSCWlucHV0VHlwZRIfCgtvdXRwdXRfdHlwZRgDIAEoCVIKb3V0cHV0VHlwZRI4CgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNSB29wdGlvbnMSMAoQY2xpZW50X3N0cmVhbWluZxgFIAEoCDoFZmFsc2VSD2NsaWVudFN0cmVhbWluZxIwChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZVIPc2VydmVyU3RyZWFtaW5nIq0JCgtGaWxlT3B0aW9ucxIhCgxqYXZhX3BhY2thZ2UYASABKAlSC2phdmFQYWNrYWdlEjAKFGphdmFfb3V0ZXJfY2xhc3NuYW1lGAggASgJUhJqYXZhT3V0ZXJDbGFzc25hbWUSNQoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEoCDoFZmFsc2VSEWphdmFNdWx0aXBsZUZpbGVzEkQKHWphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoGBQgASgIQgIYAVIZamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaBI6ChZqYXZhX3N0cmluZ19jaGVja191dGY4GBsgASgIOgVmYWxzZVITamF2YVN0cmluZ0NoZWNrVXRmOBJTCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlOgVTUEVFRFILb3B0aW1pemVGb3ISHQoKZ29fcGFja2FnZRgLIAEoCVIJZ29QYWNrYWdlEjUKE2NjX2dlbmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlUhFjY0dlbmVyaWNTZXJ2aWNlcxI5ChVqYXZhX2dlbmVyaWNfc2VydmljZXMYESABKAg6BWZhbHNlUhNqYXZhR2VuZXJpY1NlcnZpY2VzEjUKE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlUhFweUdlbmVyaWNTZXJ2aWNlcxIlCgpkZXByZWNhdGVkGBcgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIuChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlUg5jY0VuYWJsZUFyZW5hcxIqChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCVIPb2JqY0NsYXNzUHJlZml4EikKEGNzaGFycF9uYW1lc3BhY2UYJSABKAlSD2NzaGFycE5hbWVzcGFjZRIhCgxzd2lmdF9wcmVmaXgYJyABKAlSC3N3aWZ0UHJlZml4EigKEHBocF9jbGFzc19wcmVmaXgYKCABKAlSDnBocENsYXNzUHJlZml4EiMKDXBocF9uYW1lc3BhY2UYKSABKAlSDHBocE5hbWVzcGFjZRI0ChZwaHBfbWV0YWRhdGFfbmFtZXNwYWNlGCwgASgJUhRwaHBNZXRhZGF0YU5hbWVzcGFjZRIhCgxydWJ5X3BhY2thZ2UYLSABKAlSC3J1YnlQYWNrYWdlEjcKCGZlYXR1cmVzGDIgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNPREVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgqECtKBAgmECdSFHBocF9nZW5lcmljX3NlcnZpY2VzIvQDCg5NZXNzYWdlT3B0aW9ucxI8ChdtZXNzYWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2VSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0EkwKH25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlUhxub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEhsKCW1hcF9lbnRyeRgHIAEoCFIIbWFwRW50cnkSVgomZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9maWVsZF9jb25mbGljdHMYCyABKAhCAhgBUiJkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzEjcKCGZlYXR1cmVzGAwgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgEEAVKBAgFEAZKBAgGEAdKBAgIEAlKBAgJEAoinQ0KDEZpZWxkT3B0aW9ucxJBCgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklOR1IFY3R5cGUSFgoGcGFja2VkGAIgASgIUgZwYWNrZWQSRwoGanN0eXBlGAYgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6CUpTX05PUk1BTFIGanN0eXBlEhkKBGxhenkYBSABKAg6BWZhbHNlUgRsYXp5Ei4KD3VudmVyaWZpZWRfbGF6eRgPIAEoCDoFZmFsc2VSDnVudmVyaWZpZWRMYXp5EiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEhkKBHdlYWsYCiABKAg6BWZhbHNlUgR3ZWFrEigKDGRlYnVnX3JlZGFjdBgQIAEoCDoFZmFsc2VSC2RlYnVnUmVkYWN0EksKCXJldGVudGlvbhgRIAEoDjItLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uUmV0ZW50aW9uUglyZXRlbnRpb24SSAoHdGFyZ2V0cxgTIAMoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZVIHdGFyZ2V0cxJXChBlZGl0aW9uX2RlZmF1bHRzGBQgAygLMiwuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5FZGl0aW9uRGVmYXVsdFIPZWRpdGlvbkRlZmF1bHRzEjcKCGZlYXR1cmVzGBUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElUKD2ZlYXR1cmVfc3VwcG9ydBgWIAEoCzIsLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuRmVhdHVyZVN1cHBvcnRSDmZlYXR1cmVTdXBwb3J0ElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uGloKDkVkaXRpb25EZWZhdWx0EjIKB2VkaXRpb24YAyABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvblIHZWRpdGlvbhIUCgV2YWx1ZRgCIAEoCVIFdmFsdWUalgIKDkZlYXR1cmVTdXBwb3J0EkcKEmVkaXRpb25faW50cm9kdWNlZBgBIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uUhFlZGl0aW9uSW50cm9kdWNlZBJHChJlZGl0aW9uX2RlcHJlY2F0ZWQYAiABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvblIRZWRpdGlvbkRlcHJlY2F0ZWQSLwoTZGVwcmVjYXRpb25fd2FybmluZxgDIAEoCVISZGVwcmVjYXRpb25XYXJuaW5nEkEKD2VkaXRpb25fcmVtb3ZlZBgEIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uUg5lZGl0aW9uUmVtb3ZlZCIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACIlUKD09wdGlvblJldGVudGlvbhIVChFSRVRFTlRJT05fVU5LTk9XThAAEhUKEVJFVEVOVElPTl9SVU5USU1FEAESFAoQUkVURU5USU9OX1NPVVJDRRACIowCChBPcHRpb25UYXJnZXRUeXBlEhcKE1RBUkdFVF9UWVBFX1VOS05PV04QABIUChBUQVJHRVRfVFlQRV9GSUxFEAESHwobVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFEAISFwoTVEFSR0VUX1RZUEVfTUVTU0FHRRADEhUKEVRBUkdFVF9UWVBFX0ZJRUxEEAQSFQoRVEFSR0VUX1RZUEVfT05FT0YQBRIUChBUQVJHRVRfVFlQRV9FTlVNEAYSGgoWVEFSR0VUX1RZUEVfRU5VTV9FTlRSWRAHEhcKE1RBUkdFVF9UWVBFX1NFUlZJQ0UQCBIWChJUQVJHRVRfVFlQRV9NRVRIT0QQCSoJCOgHEICAgIACSgQIBBAFSgQIEhATIqwBCgxPbmVvZk9wdGlvbnMSNwoIZmVhdHVyZXMYASABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLRAgoLRW51bU9wdGlvbnMSHwoLYWxsb3dfYWxpYXMYAiABKAhSCmFsbG93QWxpYXMSJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSVgomZGVwcmVjYXRlZF9sZWdhY3lfanNvbl9maWVsZF9jb25mbGljdHMYBiABKAhCAhgBUiJkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzEjcKCGZlYXR1cmVzGAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSCGZlYXR1cmVzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYi2AIKEEVudW1WYWx1ZU9wdGlvbnMSJQoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSNwoIZmVhdHVyZXMYAiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSKAoMZGVidWdfcmVkYWN0GAMgASgIOgVmYWxzZVILZGVidWdSZWRhY3QSVQoPZmVhdHVyZV9zdXBwb3J0GAQgASgLMiwuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5GZWF0dXJlU3VwcG9ydFIOZmVhdHVyZVN1cHBvcnQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLVAQoOU2VydmljZU9wdGlvbnMSNwoIZmVhdHVyZXMYIiABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiKZAwoNTWV0aG9kT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJxChFpZGVtcG90ZW5jeV9sZXZlbBgiIAEoDjIvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWw6E0lERU1QT1RFTkNZX1VOS05PV05SEGlkZW1wb3RlbmN5TGV2ZWwSNwoIZmVhdHVyZXMYIyABKAsyGy5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldFIIZmVhdHVyZXMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZXZlbBIXChNJREVNUE9URU5DWV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVOVBACKgkI6AcQgICAgAIimgMKE1VuaW50ZXJwcmV0ZWRPcHRpb24SQQoEbmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0UgRuYW1lEikKEGlkZW50aWZpZXJfdmFsdWUYAyABKAlSD2lkZW50aWZpZXJWYWx1ZRIsChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKARSEHBvc2l0aXZlSW50VmFsdWUSLAoSbmVnYXRpdmVfaW50X3ZhbHVlGAUgASgDUhBuZWdhdGl2ZUludFZhbHVlEiEKDGRvdWJsZV92YWx1ZRgGIAEoAVILZG91YmxlVmFsdWUSIQoMc3RyaW5nX3ZhbHVlGAcgASgMUgtzdHJpbmdWYWx1ZRInCg9hZ2dyZWdhdGVfdmFsdWUYCCABKAlSDmFnZ3JlZ2F0ZVZhbHVlGkoKCE5hbWVQYXJ0EhsKCW5hbWVfcGFydBgBIAIoCVIIbmFtZVBhcnQSIQoMaXNfZXh0ZW5zaW9uGAIgAigIUgtpc0V4dGVuc2lvbiKnCgoKRmVhdHVyZVNldBKRAQoOZmllbGRfcHJlc2VuY2UYASABKA4yKS5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5GaWVsZFByZXNlbmNlQj+IAQGYAQSYAQGiAQ0SCEVYUExJQ0lUGIQHogENEghJTVBMSUNJVBjnB6IBDRIIRVhQTElDSVQY6AeyAQMI6AdSDWZpZWxkUHJlc2VuY2USbAoJZW51bV90eXBlGAIgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXQuRW51bVR5cGVCKYgBAZgBBpgBAaIBCxIGQ0xPU0VEGIQHogEJEgRPUEVOGOcHsgEDCOgHUghlbnVtVHlwZRKYAQoXcmVwZWF0ZWRfZmllbGRfZW5jb2RpbmcYAyABKA4yMS5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5SZXBlYXRlZEZpZWxkRW5jb2RpbmdCLYgBAZgBBJgBAaIBDRIIRVhQQU5ERUQYhAeiAQsSBlBBQ0tFRBjnB7IBAwjoB1IVcmVwZWF0ZWRGaWVsZEVuY29kaW5nEn4KD3V0ZjhfdmFsaWRhdGlvbhgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0LlV0ZjhWYWxpZGF0aW9uQimIAQGYAQSYAQGiAQkSBE5PTkUYhAeiAQsSBlZFUklGWRjnB7IBAwjoB1IOdXRmOFZhbGlkYXRpb24SfgoQbWVzc2FnZV9lbmNvZGluZxgFIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0Lk1lc3NhZ2VFbmNvZGluZ0ImiAEBmAEEmAEBogEUEg9MRU5HVEhfUFJFRklYRUQYhAeyAQMI6AdSD21lc3NhZ2VFbmNvZGluZxKCAQoLanNvbl9mb3JtYXQYBiABKA4yJi5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldC5Kc29uRm9ybWF0QjmIAQGYAQOYAQaYAQGiARcSEkxFR0FDWV9CRVNUX0VGRk9SVBiEB6IBChIFQUxMT1cY5weyAQMI6AdSCmpzb25Gb3JtYXQiXAoNRmllbGRQcmVzZW5jZRIaChZGSUVMRF9QUkVTRU5DRV9VTktOT1dOEAASDAoIRVhQTElDSVQQARIMCghJTVBMSUNJVBACEhMKD0xFR0FDWV9SRVFVSVJFRBADIjcKCEVudW1UeXBlEhUKEUVOVU1fVFlQRV9VTktOT1dOEAASCAoET1BFThABEgoKBkNMT1NFRBACIlYKFVJlcGVhdGVkRmllbGRFbmNvZGluZxIjCh9SRVBFQVRFRF9GSUVMRF9FTkNPRElOR19VTktOT1dOEAASCgoGUEFDS0VEEAESDAoIRVhQQU5ERUQQAiJJCg5VdGY4VmFsaWRhdGlvbhIbChdVVEY4X1ZBTElEQVRJT05fVU5LTk9XThAAEgoKBlZFUklGWRACEggKBE5PTkUQAyIECAEQASJTCg9NZXNzYWdlRW5jb2RpbmcSHAoYTUVTU0FHRV9FTkNPRElOR19VTktOT1dOEAASEwoPTEVOR1RIX1BSRUZJWEVEEAESDQoJREVMSU1JVEVEEAIiSAoKSnNvbkZvcm1hdBIXChNKU09OX0ZPUk1BVF9VTktOT1dOEAASCQoFQUxMT1cQARIWChJMRUdBQ1lfQkVTVF9FRkZPUlQQAioGCOgHEItOKgYIi04QkE4qBgiQThCRTkoGCOcHEOgHIu8DChJGZWF0dXJlU2V0RGVmYXVsdHMSWAoIZGVmYXVsdHMYASADKAsyPC5nb29nbGUucHJvdG9idWYuRmVhdHVyZVNldERlZmF1bHRzLkZlYXR1cmVTZXRFZGl0aW9uRGVmYXVsdFIIZGVmYXVsdHMSQQoPbWluaW11bV9lZGl0aW9uGAQgASgOMhguZ29vZ2xlLnByb3RvYnVmLkVkaXRpb25SDm1pbmltdW1FZGl0aW9uEkEKD21heGltdW1fZWRpdGlvbhgFIAEoDjIYLmdvb2dsZS5wcm90b2J1Zi5FZGl0aW9uUg5tYXhpbXVtRWRpdGlvbhr4AQoYRmVhdHVyZVNldEVkaXRpb25EZWZhdWx0EjIKB2VkaXRpb24YAyABKA4yGC5nb29nbGUucHJvdG9idWYuRWRpdGlvblIHZWRpdGlvbhJOChRvdmVycmlkYWJsZV9mZWF0dXJlcxgEIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GZWF0dXJlU2V0UhNvdmVycmlkYWJsZUZlYXR1cmVzEkIKDmZpeGVkX2ZlYXR1cmVzGAUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZlYXR1cmVTZXRSDWZpeGVkRmVhdHVyZXNKBAgBEAJKBAgCEANSCGZlYXR1cmVzIrUCCg5Tb3VyY2VDb2RlSW5mbxJECghsb2NhdGlvbhgBIAMoCzIoLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblIIbG9jYXRpb24azgEKCExvY2F0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEhYKBHNwYW4YAiADKAVCAhABUgRzcGFuEikKEGxlYWRpbmdfY29tbWVudHMYAyABKAlSD2xlYWRpbmdDb21tZW50cxIrChF0cmFpbGluZ19jb21tZW50cxgEIAEoCVIQdHJhaWxpbmdDb21tZW50cxI6ChlsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzGAYgAygJUhdsZWFkaW5nRGV0YWNoZWRDb21tZW50cyoMCIDsyv8BEIHsyv8BItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACKqcCCgdFZGl0aW9uEhMKD0VESVRJT05fVU5LTk9XThAAEhMKDkVESVRJT05fTEVHQUNZEIQHEhMKDkVESVRJT05fUFJPVE8yEOYHEhMKDkVESVRJT05fUFJPVE8zEOcHEhEKDEVESVRJT05fMjAyMxDoBxIRCgxFRElUSU9OXzIwMjQQ6QcSFwoTRURJVElPTl8xX1RFU1RfT05MWRABEhcKE0VESVRJT05fMl9URVNUX09OTFkQAhIdChdFRElUSU9OXzk5OTk3X1RFU1RfT05MWRCdjQYSHQoXRURJVElPTl85OTk5OF9URVNUX09OTFkQno0GEh0KF0VESVRJT05fOTk5OTlfVEVTVF9PTkxZEJ+NBhITCgtFRElUSU9OX01BWBD/////B0J+ChNjb20uZ29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAFaLWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2Rlc2NyaXB0b3JwYvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCvsBCh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI6CghEdXJhdGlvbhIYCgdzZWNvbmRzGAEgASgDUgdzZWNvbmRzEhQKBW5hbm9zGAIgASgFUgVuYW5vc0KDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9kdXJhdGlvbnBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKrzEKF3ZhbGlkYXRlL3ZhbGlkYXRlLnByb3RvEgh2YWxpZGF0ZRogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90byLICAoKRmllbGRSdWxlcxIwCgdtZXNzYWdlGBEgASgLMhYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlEiwKBWZsb2F0GAEgASgLMhQudmFsaWRhdGUuRmxvYXRSdWxlc0gAUgVmbG9hdBIvCgZkb3VibGUYAiABKAsyFS52YWxpZGF0ZS5Eb3VibGVSdWxlc0gAUgZkb3VibGUSLAoFaW50MzIYAyABKAsyFC52YWxpZGF0ZS5JbnQzMlJ1bGVzSABSBWludDMyEiwKBWludDY0GAQgASgLMhQudmFsaWRhdGUuSW50NjRSdWxlc0gAUgVpbnQ2NBIvCgZ1aW50MzIYBSABKAsyFS52YWxpZGF0ZS5VSW50MzJSdWxlc0gAUgZ1aW50MzISLwoGdWludDY0GAYgASgLMhUudmFsaWRhdGUuVUludDY0UnVsZXNIAFIGdWludDY0Ei8KBnNpbnQzMhgHIAEoCzIVLnZhbGlkYXRlLlNJbnQzMlJ1bGVzSABSBnNpbnQzMhIvCgZzaW50NjQYCCABKAsyFS52YWxpZGF0ZS5TSW50NjRSdWxlc0gAUgZzaW50NjQSMgoHZml4ZWQzMhgJIAEoCzIWLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAUgdmaXhlZDMyEjIKB2ZpeGVkNjQYCiABKAsyFi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIAFIHZml4ZWQ2NBI1CghzZml4ZWQzMhgLIAEoCzIXLnZhbGlkYXRlLlNGaXhlZDMyUnVsZXNIAFIIc2ZpeGVkMzISNQoIc2ZpeGVkNjQYDCABKAsyFy52YWxpZGF0ZS5TRml4ZWQ2NFJ1bGVzSABSCHNmaXhlZDY0EikKBGJvb2wYDSABKAsyEy52YWxpZGF0ZS5Cb29sUnVsZXNIAFIEYm9vbBIvCgZzdHJpbmcYDiABKAsyFS52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAUgZzdHJpbmcSLAoFYnl0ZXMYDyABKAsyFC52YWxpZGF0ZS5CeXRlc1J1bGVzSABSBWJ5dGVzEikKBGVudW0YECABKAsyEy52YWxpZGF0ZS5FbnVtUnVsZXNIAFIEZW51bRI1CghyZXBlYXRlZBgSIAEoCzIXLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIAFIIcmVwZWF0ZWQSJgoDbWFwGBMgASgLMhIudmFsaWRhdGUuTWFwUnVsZXNIAFIDbWFwEiYKA2FueRgUIAEoCzISLnZhbGlkYXRlLkFueVJ1bGVzSABSA2FueRI1CghkdXJhdGlvbhgVIAEoCzIXLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIAFIIZHVyYXRpb24SOAoJdGltZXN0YW1wGBYgASgLMhgudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAFIJdGltZXN0YW1wQgYKBHR5cGUisAEKCkZsb2F0UnVsZXMSFAoFY29uc3QYASABKAJSBWNvbnN0Eg4KAmx0GAIgASgCUgJsdBIQCgNsdGUYAyABKAJSA2x0ZRIOCgJndBgEIAEoAlICZ3QSEAoDZ3RlGAUgASgCUgNndGUSDgoCaW4YBiADKAJSAmluEhUKBm5vdF9pbhgHIAMoAlIFbm90SW4SIQoMaWdub3JlX2VtcHR5GAggASgIUgtpZ25vcmVFbXB0eSKxAQoLRG91YmxlUnVsZXMSFAoFY29uc3QYASABKAFSBWNvbnN0Eg4KAmx0GAIgASgBUgJsdBIQCgNsdGUYAyABKAFSA2x0ZRIOCgJndBgEIAEoAVICZ3QSEAoDZ3RlGAUgASgBUgNndGUSDgoCaW4YBiADKAFSAmluEhUKBm5vdF9pbhgHIAMoAVIFbm90SW4SIQoMaWdub3JlX2VtcHR5GAggASgIUgtpZ25vcmVFbXB0eSKwAQoKSW50MzJSdWxlcxIUCgVjb25zdBgBIAEoBVIFY29uc3QSDgoCbHQYAiABKAVSAmx0EhAKA2x0ZRgDIAEoBVIDbHRlEg4KAmd0GAQgASgFUgJndBIQCgNndGUYBSABKAVSA2d0ZRIOCgJpbhgGIAMoBVICaW4SFQoGbm90X2luGAcgAygFUgVub3RJbhIhCgxpZ25vcmVfZW1wdHkYCCABKAhSC2lnbm9yZUVtcHR5IrABCgpJbnQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgDUgVjb25zdBIOCgJsdBgCIAEoA1ICbHQSEAoDbHRlGAMgASgDUgNsdGUSDgoCZ3QYBCABKANSAmd0EhAKA2d0ZRgFIAEoA1IDZ3RlEg4KAmluGAYgAygDUgJpbhIVCgZub3RfaW4YByADKANSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1VJbnQzMlJ1bGVzEhQKBWNvbnN0GAEgASgNUgVjb25zdBIOCgJsdBgCIAEoDVICbHQSEAoDbHRlGAMgASgNUgNsdGUSDgoCZ3QYBCABKA1SAmd0EhAKA2d0ZRgFIAEoDVIDZ3RlEg4KAmluGAYgAygNUgJpbhIVCgZub3RfaW4YByADKA1SBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1VJbnQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgEUgVjb25zdBIOCgJsdBgCIAEoBFICbHQSEAoDbHRlGAMgASgEUgNsdGUSDgoCZ3QYBCABKARSAmd0EhAKA2d0ZRgFIAEoBFIDZ3RlEg4KAmluGAYgAygEUgJpbhIVCgZub3RfaW4YByADKARSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1NJbnQzMlJ1bGVzEhQKBWNvbnN0GAEgASgRUgVjb25zdBIOCgJsdBgCIAEoEVICbHQSEAoDbHRlGAMgASgRUgNsdGUSDgoCZ3QYBCABKBFSAmd0EhAKA2d0ZRgFIAEoEVIDZ3RlEg4KAmluGAYgAygRUgJpbhIVCgZub3RfaW4YByADKBFSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisQEKC1NJbnQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgSUgVjb25zdBIOCgJsdBgCIAEoElICbHQSEAoDbHRlGAMgASgSUgNsdGUSDgoCZ3QYBCABKBJSAmd0EhAKA2d0ZRgFIAEoElIDZ3RlEg4KAmluGAYgAygSUgJpbhIVCgZub3RfaW4YByADKBJSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkisgEKDEZpeGVkMzJSdWxlcxIUCgVjb25zdBgBIAEoB1IFY29uc3QSDgoCbHQYAiABKAdSAmx0EhAKA2x0ZRgDIAEoB1IDbHRlEg4KAmd0GAQgASgHUgJndBIQCgNndGUYBSABKAdSA2d0ZRIOCgJpbhgGIAMoB1ICaW4SFQoGbm90X2luGAcgAygHUgVub3RJbhIhCgxpZ25vcmVfZW1wdHkYCCABKAhSC2lnbm9yZUVtcHR5IrIBCgxGaXhlZDY0UnVsZXMSFAoFY29uc3QYASABKAZSBWNvbnN0Eg4KAmx0GAIgASgGUgJsdBIQCgNsdGUYAyABKAZSA2x0ZRIOCgJndBgEIAEoBlICZ3QSEAoDZ3RlGAUgASgGUgNndGUSDgoCaW4YBiADKAZSAmluEhUKBm5vdF9pbhgHIAMoBlIFbm90SW4SIQoMaWdub3JlX2VtcHR5GAggASgIUgtpZ25vcmVFbXB0eSKzAQoNU0ZpeGVkMzJSdWxlcxIUCgVjb25zdBgBIAEoD1IFY29uc3QSDgoCbHQYAiABKA9SAmx0EhAKA2x0ZRgDIAEoD1IDbHRlEg4KAmd0GAQgASgPUgJndBIQCgNndGUYBSABKA9SA2d0ZRIOCgJpbhgGIAMoD1ICaW4SFQoGbm90X2luGAcgAygPUgVub3RJbhIhCgxpZ25vcmVfZW1wdHkYCCABKAhSC2lnbm9yZUVtcHR5IrMBCg1TRml4ZWQ2NFJ1bGVzEhQKBWNvbnN0GAEgASgQUgVjb25zdBIOCgJsdBgCIAEoEFICbHQSEAoDbHRlGAMgASgQUgNsdGUSDgoCZ3QYBCABKBBSAmd0EhAKA2d0ZRgFIAEoEFIDZ3RlEg4KAmluGAYgAygQUgJpbhIVCgZub3RfaW4YByADKBBSBW5vdEluEiEKDGlnbm9yZV9lbXB0eRgIIAEoCFILaWdub3JlRW1wdHkiIQoJQm9vbFJ1bGVzEhQKBWNvbnN0GAEgASgIUgVjb25zdCLUBQoLU3RyaW5nUnVsZXMSFAoFY29uc3QYASABKAlSBWNvbnN0EhAKA2xlbhgTIAEoBFIDbGVuEhcKB21pbl9sZW4YAiABKARSBm1pbkxlbhIXCgdtYXhfbGVuGAMgASgEUgZtYXhMZW4SGwoJbGVuX2J5dGVzGBQgASgEUghsZW5CeXRlcxIbCgltaW5fYnl0ZXMYBCABKARSCG1pbkJ5dGVzEhsKCW1heF9ieXRlcxgFIAEoBFIIbWF4Qnl0ZXMSGAoHcGF0dGVybhgGIAEoCVIHcGF0dGVybhIWCgZwcmVmaXgYByABKAlSBnByZWZpeBIWCgZzdWZmaXgYCCABKAlSBnN1ZmZpeBIaCghjb250YWlucxgJIAEoCVIIY29udGFpbnMSIQoMbm90X2NvbnRhaW5zGBcgASgJUgtub3RDb250YWlucxIOCgJpbhgKIAMoCVICaW4SFQoGbm90X2luGAsgAygJUgVub3RJbhIWCgVlbWFpbBgMIAEoCEgAUgVlbWFpbBIcCghob3N0bmFtZRgNIAEoCEgAUghob3N0bmFtZRIQCgJpcBgOIAEoCEgAUgJpcBIUCgRpcHY0GA8gASgISABSBGlwdjQSFAoEaXB2NhgQIAEoCEgAUgRpcHY2EhIKA3VyaRgRIAEoCEgAUgN1cmkSGQoHdXJpX3JlZhgSIAEoCEgAUgZ1cmlSZWYSGgoHYWRkcmVzcxgVIAEoCEgAUgdhZGRyZXNzEhQKBHV1aWQYFiABKAhIAFIEdXVpZBJAChB3ZWxsX2tub3duX3JlZ2V4GBggASgOMhQudmFsaWRhdGUuS25vd25SZWdleEgAUg53ZWxsS25vd25SZWdleBIcCgZzdHJpY3QYGSABKAg6BHRydWVSBnN0cmljdBIhCgxpZ25vcmVfZW1wdHkYGiABKAhSC2lnbm9yZUVtcHR5QgwKCndlbGxfa25vd24i4gIKCkJ5dGVzUnVsZXMSFAoFY29uc3QYASABKAxSBWNvbnN0EhAKA2xlbhgNIAEoBFIDbGVuEhcKB21pbl9sZW4YAiABKARSBm1pbkxlbhIXCgdtYXhfbGVuGAMgASgEUgZtYXhMZW4SGAoHcGF0dGVybhgEIAEoCVIHcGF0dGVybhIWCgZwcmVmaXgYBSABKAxSBnByZWZpeBIWCgZzdWZmaXgYBiABKAxSBnN1ZmZpeBIaCghjb250YWlucxgHIAEoDFIIY29udGFpbnMSDgoCaW4YCCADKAxSAmluEhUKBm5vdF9pbhgJIAMoDFIFbm90SW4SEAoCaXAYCiABKAhIAFICaXASFAoEaXB2NBgLIAEoCEgAUgRpcHY0EhQKBGlwdjYYDCABKAhIAFIEaXB2NhIhCgxpZ25vcmVfZW1wdHkYDiABKAhSC2lnbm9yZUVtcHR5QgwKCndlbGxfa25vd24iawoJRW51bVJ1bGVzEhQKBWNvbnN0GAEgASgFUgVjb25zdBIhCgxkZWZpbmVkX29ubHkYAiABKAhSC2RlZmluZWRPbmx5Eg4KAmluGAMgAygFUgJpbhIVCgZub3RfaW4YBCADKAVSBW5vdEluIj4KDE1lc3NhZ2VSdWxlcxISCgRza2lwGAEgASgIUgRza2lwEhoKCHJlcXVpcmVkGAIgASgIUghyZXF1aXJlZCKwAQoNUmVwZWF0ZWRSdWxlcxIbCgltaW5faXRlbXMYASABKARSCG1pbkl0ZW1zEhsKCW1heF9pdGVtcxgCIAEoBFIIbWF4SXRlbXMSFgoGdW5pcXVlGAMgASgIUgZ1bmlxdWUSKgoFaXRlbXMYBCABKAsyFC52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVpdGVtcxIhCgxpZ25vcmVfZW1wdHkYBSABKAhSC2lnbm9yZUVtcHR5ItwBCghNYXBSdWxlcxIbCgltaW5fcGFpcnMYASABKARSCG1pblBhaXJzEhsKCW1heF9wYWlycxgCIAEoBFIIbWF4UGFpcnMSGwoJbm9fc3BhcnNlGAMgASgIUghub1NwYXJzZRIoCgRrZXlzGAQgASgLMhQudmFsaWRhdGUuRmllbGRSdWxlc1IEa2V5cxIsCgZ2YWx1ZXMYBSABKAsyFC52YWxpZGF0ZS5GaWVsZFJ1bGVzUgZ2YWx1ZXMSIQoMaWdub3JlX2VtcHR5GAYgASgIUgtpZ25vcmVFbXB0eSJNCghBbnlSdWxlcxIaCghyZXF1aXJlZBgBIAEoCFIIcmVxdWlyZWQSDgoCaW4YAiADKAlSAmluEhUKBm5vdF9pbhgDIAMoCVIFbm90SW4i6QIKDUR1cmF0aW9uUnVsZXMSGgoIcmVxdWlyZWQYASABKAhSCHJlcXVpcmVkEi8KBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgVjb25zdBIpCgJsdBgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblICbHQSKwoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgNsdGUSKQoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SAmd0EisKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIDZ3RlEikKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgJpbhIwCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SBW5vdEluIvMCCg5UaW1lc3RhbXBSdWxlcxIaCghyZXF1aXJlZBgBIAEoCFIIcmVxdWlyZWQSMAoFY29uc3QYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgVjb25zdBIqCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSAmx0EiwKA2x0ZRgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSA2x0ZRIqCgJndBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSAmd0EiwKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSA2d0ZRIVCgZsdF9ub3cYByABKAhSBWx0Tm93EhUKBmd0X25vdxgIIAEoCFIFZ3ROb3cSMQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgZ3aXRoaW4qRgoKS25vd25SZWdleBILCgdVTktOT1dOEAASFAoQSFRUUF9IRUFERVJfTkFNRRABEhUKEUhUVFBfSEVBREVSX1ZBTFVFEAI6PAoIZGlzYWJsZWQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYrwggASgIUghkaXNhYmxlZDo6CgdpZ25vcmVkEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGLAIIAEoCFIHaWdub3JlZDo6CghyZXF1aXJlZBIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYrwggASgIUghyZXF1aXJlZDpKCgVydWxlcxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYrwggASgLMhQudmFsaWRhdGUuRmllbGRSdWxlc1IFcnVsZXNCUAoaaW8uZW52b3lwcm94eS5wZ3YudmFsaWRhdGVaMmdpdGh1Yi5jb20vZW52b3lwcm94eS9wcm90b2MtZ2VuLXZhbGlkYXRlL3ZhbGlkYXRlCrcDCgxjb21tb24ucHJvdG8SBmNvbW1vbiKHAQoKUGFja2FnZU1hcBI8CghwYWNrYWdlcxgBIAMoCzIgLmNvbW1vbi5QYWNrYWdlTWFwLlBhY2thZ2VzRW50cnlSCHBhY2thZ2VzGjsKDVBhY2thZ2VzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAxSBXZhbHVlOgI4ASJFChFTaWduaW5nQ29tbWl0bWVudBIWCgZoaWRpbmcYASABKAxSBmhpZGluZxIYCgdiaW5kaW5nGAIgASgMUgdiaW5kaW5nIjgKDVNpZ25pbmdSZXN1bHQSJwoPc2lnbmF0dXJlX3NoYXJlGAEgASgMUg5zaWduYXR1cmVTaGFyZSpdCg9TaWduYXR1cmVJbnRlbnQSDAoIQ1JFQVRJT04QABIMCghUUkFOU0ZFUhABEg0KCUFHR1JFR0FURRACEg8KB1JFRlJFU0gQAxoCCAESDgoGRVhURU5EEAQaAggBQi1aK2dpdGh1Yi5jb20vbGlnaHRzcGFya2Rldi9zcGFyay9wcm90by9jb21tb25iBnByb3RvMwq/rgIKC3NwYXJrLnByb3RvEgVzcGFyaxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGhd2YWxpZGF0ZS92YWxpZGF0ZS5wcm90bxoMY29tbW9uLnByb3RvIkoKGFN1YnNjcmliZVRvRXZlbnRzUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAogASgMUhFpZGVudGl0eVB1YmxpY0tleSLAAQoZU3Vic2NyaWJlVG9FdmVudHNSZXNwb25zZRIyCgh0cmFuc2ZlchgBIAEoCzIULnNwYXJrLlRyYW5zZmVyRXZlbnRIAFIIdHJhbnNmZXISLwoHZGVwb3NpdBgCIAEoCzITLnNwYXJrLkRlcG9zaXRFdmVudEgAUgdkZXBvc2l0EjUKCWNvbm5lY3RlZBgDIAEoCzIVLnNwYXJrLkNvbm5lY3RlZEV2ZW50SABSCWNvbm5lY3RlZEIHCgVldmVudCIQCg5Db25uZWN0ZWRFdmVudCI8Cg1UcmFuc2ZlckV2ZW50EisKCHRyYW5zZmVyGAogASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIjkKDERlcG9zaXRFdmVudBIpCgdkZXBvc2l0GAogASgLMg8uc3BhcmsuVHJlZU5vZGVSB2RlcG9zaXQicgoLUGFnZVJlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgFUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIuCglkaXJlY3Rpb24YAyABKA4yEC5zcGFyay5EaXJlY3Rpb25SCWRpcmVjdGlvbiKoAQoMUGFnZVJlc3BvbnNlEiIKDWhhc19uZXh0X3BhZ2UYASABKAhSC2hhc05leHRQYWdlEioKEWhhc19wcmV2aW91c19wYWdlGAIgASgIUg9oYXNQcmV2aW91c1BhZ2USHwoLbmV4dF9jdXJzb3IYAyABKAlSCm5leHRDdXJzb3ISJwoPcHJldmlvdXNfY3Vyc29yGAQgASgJUg5wcmV2aW91c0N1cnNvciKAAgoTRGVwb3NpdEFkZHJlc3NQcm9vZhJgChJhZGRyZXNzX3NpZ25hdHVyZXMYASADKAsyMS5zcGFyay5EZXBvc2l0QWRkcmVzc1Byb29mLkFkZHJlc3NTaWduYXR1cmVzRW50cnlSEWFkZHJlc3NTaWduYXR1cmVzEkEKHXByb29mX29mX3Bvc3Nlc3Npb25fc2lnbmF0dXJlGAIgASgMUhpwcm9vZk9mUG9zc2Vzc2lvblNpZ25hdHVyZRpEChZBZGRyZXNzU2lnbmF0dXJlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEilQIKHUdlbmVyYXRlRGVwb3NpdEFkZHJlc3NSZXF1ZXN0EiwKEnNpZ25pbmdfcHVibGljX2tleRgBIAEoDFIQc2lnbmluZ1B1YmxpY0tleRIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhFpZGVudGl0eVB1YmxpY0tleRIyCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya0II+kIFggECIABSB25ldHdvcmsSJgoHbGVhZl9pZBgEIAEoCUII+kIFcgOwAQFIAFIGbGVhZklkiAEBEiAKCWlzX3N0YXRpYxgFIAEoCEgBUghpc1N0YXRpY4gBAUIKCghfbGVhZl9pZEIMCgpfaXNfc3RhdGljIrUBCgdBZGRyZXNzEhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3MSIwoNdmVyaWZ5aW5nX2tleRgCIAEoDFIMdmVyaWZ5aW5nS2V5Ek4KFWRlcG9zaXRfYWRkcmVzc19wcm9vZhgDIAEoCzIaLnNwYXJrLkRlcG9zaXRBZGRyZXNzUHJvb2ZSE2RlcG9zaXRBZGRyZXNzUHJvb2YSGwoJaXNfc3RhdGljGAUgASgIUghpc1N0YXRpYyJZCh5HZW5lcmF0ZURlcG9zaXRBZGRyZXNzUmVzcG9uc2USNwoPZGVwb3NpdF9hZGRyZXNzGAEgASgLMg4uc3BhcmsuQWRkcmVzc1IOZGVwb3NpdEFkZHJlc3MiyQEKI0dlbmVyYXRlU3RhdGljRGVwb3NpdEFkZHJlc3NSZXF1ZXN0EjUKEnNpZ25pbmdfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIQc2lnbmluZ1B1YmxpY0tleRI3ChNpZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUhFpZGVudGl0eVB1YmxpY0tleRIyCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya0II+kIFggECIABSB25ldHdvcmsiXwokR2VuZXJhdGVTdGF0aWNEZXBvc2l0QWRkcmVzc1Jlc3BvbnNlEjcKD2RlcG9zaXRfYWRkcmVzcxgBIAEoCzIOLnNwYXJrLkFkZHJlc3NSDmRlcG9zaXRBZGRyZXNzInkKBFVUWE8SFQoGcmF3X3R4GAEgASgMUgVyYXdUeBISCgR2b3V0GAIgASgNUgR2b3V0EjIKB25ldHdvcmsYAyABKA4yDi5zcGFyay5OZXR3b3JrQgj6QgWCAQIgAFIHbmV0d29yaxISCgR0eGlkGAQgASgMUgR0eGlkIjkKCk5vZGVPdXRwdXQSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEhIKBHZvdXQYAiABKA1SBHZvdXQipgEKClNpZ25pbmdKb2ISLAoSc2lnbmluZ19wdWJsaWNfa2V5GAEgASgMUhBzaWduaW5nUHVibGljS2V5EhUKBnJhd190eBgCIAEoDFIFcmF3VHgSUwoYc2lnbmluZ19ub25jZV9jb21taXRtZW50GAMgASgLMhkuY29tbW9uLlNpZ25pbmdDb21taXRtZW50UhZzaWduaW5nTm9uY2VDb21taXRtZW50IsoCCg9TaWduaW5nS2V5c2hhcmUSKwoRb3duZXJfaWRlbnRpZmllcnMYASADKAlSEG93bmVySWRlbnRpZmllcnMSHAoJdGhyZXNob2xkGAIgASgNUgl0aHJlc2hvbGQSHQoKcHVibGljX2tleRgDIAEoDFIJcHVibGljS2V5Ek0KDXB1YmxpY19zaGFyZXMYBCADKAsyKC5zcGFyay5TaWduaW5nS2V5c2hhcmUuUHVibGljU2hhcmVzRW50cnlSDHB1YmxpY1NoYXJlcxI9Cgx1cGRhdGVkX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgt1cGRhdGVkVGltZRo/ChFQdWJsaWNTaGFyZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoDFIFdmFsdWU6AjgBIsgECg1TaWduaW5nUmVzdWx0EkUKC3B1YmxpY19rZXlzGAEgAygLMiQuc3BhcmsuU2lnbmluZ1Jlc3VsdC5QdWJsaWNLZXlzRW50cnlSCnB1YmxpY0tleXMSbQoZc2lnbmluZ19ub25jZV9jb21taXRtZW50cxgCIAMoCzIxLnNwYXJrLlNpZ25pbmdSZXN1bHQuU2lnbmluZ05vbmNlQ29tbWl0bWVudHNFbnRyeVIXc2lnbmluZ05vbmNlQ29tbWl0bWVudHMSVAoQc2lnbmF0dXJlX3NoYXJlcxgDIAMoCzIpLnNwYXJrLlNpZ25pbmdSZXN1bHQuU2lnbmF0dXJlU2hhcmVzRW50cnlSD3NpZ25hdHVyZVNoYXJlcxJBChBzaWduaW5nX2tleXNoYXJlGAQgASgLMhYuc3BhcmsuU2lnbmluZ0tleXNoYXJlUg9zaWduaW5nS2V5c2hhcmUaPQoPUHVibGljS2V5c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEaZQocU2lnbmluZ05vbmNlQ29tbWl0bWVudHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIvCgV2YWx1ZRgCIAEoCzIZLmNvbW1vbi5TaWduaW5nQ29tbWl0bWVudFIFdmFsdWU6AjgBGkIKFFNpZ25hdHVyZVNoYXJlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEikgMKEFJlbmV3TGVhZlJlcXVlc3QSFwoHbGVhZl9pZBgBIAEoCVIGbGVhZklkEmoKH3JlbmV3X25vZGVfdGltZWxvY2tfc2lnbmluZ19qb2IYAiABKAsyIi5zcGFyay5SZW5ld05vZGVUaW1lbG9ja1NpZ25pbmdKb2JIAFIbcmVuZXdOb2RlVGltZWxvY2tTaWduaW5nSm9iEnAKIXJlbmV3X3JlZnVuZF90aW1lbG9ja19zaWduaW5nX2pvYhgDIAEoCzIkLnNwYXJrLlJlbmV3UmVmdW5kVGltZWxvY2tTaWduaW5nSm9iSABSHXJlbmV3UmVmdW5kVGltZWxvY2tTaWduaW5nSm9iEncKJHJlbmV3X25vZGVfemVyb190aW1lbG9ja19zaWduaW5nX2pvYhgEIAEoCzImLnNwYXJrLlJlbmV3Tm9kZVplcm9UaW1lbG9ja1NpZ25pbmdKb2JIAFIfcmVuZXdOb2RlWmVyb1RpbWVsb2NrU2lnbmluZ0pvYkIOCgxzaWduaW5nX2pvYnMipwUKG1JlbmV3Tm9kZVRpbWVsb2NrU2lnbmluZ0pvYhJXChlzcGxpdF9ub2RlX3R4X3NpZ25pbmdfam9iGAEgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIVc3BsaXROb2RlVHhTaWduaW5nSm9iEmQKIHNwbGl0X25vZGVfZGlyZWN0X3R4X3NpZ25pbmdfam9iGAIgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIbc3BsaXROb2RlRGlyZWN0VHhTaWduaW5nSm9iEkwKE25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhBub2RlVHhTaWduaW5nSm9iElAKFXJlZnVuZF90eF9zaWduaW5nX2pvYhgEIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSEnJlZnVuZFR4U2lnbmluZ0pvYhJZChpkaXJlY3Rfbm9kZV90eF9zaWduaW5nX2pvYhgFIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSFmRpcmVjdE5vZGVUeFNpZ25pbmdKb2ISXQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgGIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJvCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgHIAEoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iIuoDCh1SZW5ld1JlZnVuZFRpbWVsb2NrU2lnbmluZ0pvYhJMChNub2RlX3R4X3NpZ25pbmdfam9iGAEgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIQbm9kZVR4U2lnbmluZ0pvYhJQChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAiABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISWQoaZGlyZWN0X25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhZkaXJlY3ROb2RlVHhTaWduaW5nSm9iEl0KHGRpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYBCABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhhkaXJlY3RSZWZ1bmRUeFNpZ25pbmdKb2ISbwomZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYBSABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUiBkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ0pvYiKTAwofUmVuZXdOb2RlWmVyb1RpbWVsb2NrU2lnbmluZ0pvYhJMChNub2RlX3R4X3NpZ25pbmdfam9iGAEgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIQbm9kZVR4U2lnbmluZ0pvYhJQChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAiABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISWQoaZGlyZWN0X25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhZkaXJlY3ROb2RlVHhTaWduaW5nSm9iEm8KJmRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3R4X3NpZ25pbmdfam9iGAUgASgLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIgZGlyZWN0RnJvbUNwZnBSZWZ1bmRUeFNpZ25pbmdKb2JKBAgEEAUi0wIKEVJlbmV3TGVhZlJlc3BvbnNlEl0KGnJlbmV3X25vZGVfdGltZWxvY2tfcmVzdWx0GAEgASgLMh4uc3BhcmsuUmVuZXdOb2RlVGltZWxvY2tSZXN1bHRIAFIXcmVuZXdOb2RlVGltZWxvY2tSZXN1bHQSYwoccmVuZXdfcmVmdW5kX3RpbWVsb2NrX3Jlc3VsdBgCIAEoCzIgLnNwYXJrLlJlbmV3UmVmdW5kVGltZWxvY2tSZXN1bHRIAFIZcmVuZXdSZWZ1bmRUaW1lbG9ja1Jlc3VsdBJqCh9yZW5ld19ub2RlX3plcm9fdGltZWxvY2tfcmVzdWx0GAMgASgLMiIuc3BhcmsuUmVuZXdOb2RlWmVyb1RpbWVsb2NrUmVzdWx0SABSG3JlbmV3Tm9kZVplcm9UaW1lbG9ja1Jlc3VsdEIOCgxyZW5ld19yZXN1bHQibgoXUmVuZXdOb2RlVGltZWxvY2tSZXN1bHQSLgoKc3BsaXRfbm9kZRgBIAEoCzIPLnNwYXJrLlRyZWVOb2RlUglzcGxpdE5vZGUSIwoEbm9kZRgCIAEoCzIPLnNwYXJrLlRyZWVOb2RlUgRub2RlIkAKGVJlbmV3UmVmdW5kVGltZWxvY2tSZXN1bHQSIwoEbm9kZRgBIAEoCzIPLnNwYXJrLlRyZWVOb2RlUgRub2RlInIKG1JlbmV3Tm9kZVplcm9UaW1lbG9ja1Jlc3VsdBIuCgpzcGxpdF9ub2RlGAEgASgLMg8uc3BhcmsuVHJlZU5vZGVSCXNwbGl0Tm9kZRIjCgRub2RlGAIgASgLMg8uc3BhcmsuVHJlZU5vZGVSBG5vZGUijwQKE05vZGVTaWduYXR1cmVTaGFyZXMSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEkkKFm5vZGVfdHhfc2lnbmluZ19yZXN1bHQYAiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhNub2RlVHhTaWduaW5nUmVzdWx0Ek0KGHJlZnVuZF90eF9zaWduaW5nX3Jlc3VsdBgDIAEoCzIULnNwYXJrLlNpZ25pbmdSZXN1bHRSFXJlZnVuZFR4U2lnbmluZ1Jlc3VsdBIjCg12ZXJpZnlpbmdfa2V5GAQgASgMUgx2ZXJpZnlpbmdLZXkSVgodZGlyZWN0X25vZGVfdHhfc2lnbmluZ19yZXN1bHQYBSABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhlkaXJlY3ROb2RlVHhTaWduaW5nUmVzdWx0EloKH2RpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhtkaXJlY3RSZWZ1bmRUeFNpZ25pbmdSZXN1bHQSbAopZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYByABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCLKAgoOTm9kZVNpZ25hdHVyZXMSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEioKEW5vZGVfdHhfc2lnbmF0dXJlGAIgASgMUg9ub2RlVHhTaWduYXR1cmUSLgoTcmVmdW5kX3R4X3NpZ25hdHVyZRgDIAEoDFIRcmVmdW5kVHhTaWduYXR1cmUSNwoYZGlyZWN0X25vZGVfdHhfc2lnbmF0dXJlGAQgASgMUhVkaXJlY3ROb2RlVHhTaWduYXR1cmUSOwoaZGlyZWN0X3JlZnVuZF90eF9zaWduYXR1cmUYBSABKAxSF2RpcmVjdFJlZnVuZFR4U2lnbmF0dXJlEk0KJGRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3R4X3NpZ25hdHVyZRgGIAEoDFIfZGlyZWN0RnJvbUNwZnBSZWZ1bmRUeFNpZ25hdHVyZSKKBAoYU3RhcnRUcmVlQ3JlYXRpb25SZXF1ZXN0Ei4KE2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSEWlkZW50aXR5UHVibGljS2V5Ei8KDW9uX2NoYWluX3V0eG8YAiABKAsyCy5zcGFyay5VVFhPUgtvbkNoYWluVXR4bxJAChNyb290X3R4X3NpZ25pbmdfam9iGAMgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIQcm9vdFR4U2lnbmluZ0pvYhJEChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYBCABKAsyES5zcGFyay5TaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISTQoaZGlyZWN0X3Jvb3RfdHhfc2lnbmluZ19qb2IYBSABKAsyES5zcGFyay5TaWduaW5nSm9iUhZkaXJlY3RSb290VHhTaWduaW5nSm9iElEKHGRpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYBiABKAsyES5zcGFyay5TaWduaW5nSm9iUhhkaXJlY3RSZWZ1bmRUeFNpZ25pbmdKb2ISYwomZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19qb2IYByABKAsyES5zcGFyay5TaWduaW5nSm9iUiBkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ0pvYiKNAQoZU3RhcnRUcmVlQ3JlYXRpb25SZXNwb25zZRIXCgd0cmVlX2lkGAEgASgJUgZ0cmVlSWQSVwoacm9vdF9ub2RlX3NpZ25hdHVyZV9zaGFyZXMYAiABKAsyGi5zcGFyay5Ob2RlU2lnbmF0dXJlU2hhcmVzUhdyb290Tm9kZVNpZ25hdHVyZVNoYXJlcyKRBAofU3RhcnREZXBvc2l0VHJlZUNyZWF0aW9uUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhFpZGVudGl0eVB1YmxpY0tleRIvCg1vbl9jaGFpbl91dHhvGAIgASgLMgsuc3BhcmsuVVRYT1ILb25DaGFpblV0eG8SQAoTcm9vdF90eF9zaWduaW5nX2pvYhgDIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSEHJvb3RUeFNpZ25pbmdKb2ISRAoVcmVmdW5kX3R4X3NpZ25pbmdfam9iGAQgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIScmVmdW5kVHhTaWduaW5nSm9iEk0KGmRpcmVjdF9yb290X3R4X3NpZ25pbmdfam9iGAUgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIWZGlyZWN0Um9vdFR4U2lnbmluZ0pvYhJRChxkaXJlY3RfcmVmdW5kX3R4X3NpZ25pbmdfam9iGAYgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIYZGlyZWN0UmVmdW5kVHhTaWduaW5nSm9iEmMKJmRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3R4X3NpZ25pbmdfam9iGAcgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIgZGlyZWN0RnJvbUNwZnBSZWZ1bmRUeFNpZ25pbmdKb2IilAEKIFN0YXJ0RGVwb3NpdFRyZWVDcmVhdGlvblJlc3BvbnNlEhcKB3RyZWVfaWQYASABKAlSBnRyZWVJZBJXChpyb290X25vZGVfc2lnbmF0dXJlX3NoYXJlcxgCIAEoCzIaLnNwYXJrLk5vZGVTaWduYXR1cmVTaGFyZXNSF3Jvb3ROb2RlU2lnbmF0dXJlU2hhcmVzIpsBChJUb2tlbk91dHB1dFRvU3BlbmQSRgobcHJldl90b2tlbl90cmFuc2FjdGlvbl9oYXNoGAEgASgMQgf6QgR6AmggUhhwcmV2VG9rZW5UcmFuc2FjdGlvbkhhc2gSPQobcHJldl90b2tlbl90cmFuc2FjdGlvbl92b3V0GAIgASgNUhhwcmV2VG9rZW5UcmFuc2FjdGlvblZvdXQiWQoSVG9rZW5UcmFuc2ZlcklucHV0EkMKEG91dHB1dHNfdG9fc3BlbmQYASADKAsyGS5zcGFyay5Ub2tlbk91dHB1dFRvU3BlbmRSDm91dHB1dHNUb1NwZW5kIs8BCg5Ub2tlbk1pbnRJbnB1dBIzChFpc3N1ZXJfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIPaXNzdWVyUHVibGljS2V5EjoKGWlzc3Vlcl9wcm92aWRlZF90aW1lc3RhbXAYAiABKARSF2lzc3VlclByb3ZpZGVkVGltZXN0YW1wEjcKEHRva2VuX2lkZW50aWZpZXIYAyABKAxCB/pCBHoCaCBIAFIPdG9rZW5JZGVudGlmaWVyiAEBQhMKEV90b2tlbl9pZGVudGlmaWVyIvYCChBUb2tlbkNyZWF0ZUlucHV0EjMKEWlzc3Vlcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg9pc3N1ZXJQdWJsaWNLZXkSJgoKdG9rZW5fbmFtZRgCIAEoCUIH+kIEcgIYFFIJdG9rZW5OYW1lEioKDHRva2VuX3RpY2tlchgDIAEoCUIH+kIEcgIYBlILdG9rZW5UaWNrZXISJAoIZGVjaW1hbHMYBCABKA1CCPpCBSoDGP8BUghkZWNpbWFscxImCgptYXhfc3VwcGx5GAUgASgMQgf6QgR6AmgQUgltYXhTdXBwbHkSIQoMaXNfZnJlZXphYmxlGAYgASgIUgtpc0ZyZWV6YWJsZRJJChpjcmVhdGlvbl9lbnRpdHlfcHVibGljX2tleRgHIAEoDEIH+kIEegJoIUgAUhdjcmVhdGlvbkVudGl0eVB1YmxpY0tleYgBAUIdChtfY3JlYXRpb25fZW50aXR5X3B1YmxpY19rZXkixwQKC1Rva2VuT3V0cHV0Eh0KAmlkGAEgASgJQgj6QgVyA7ABAUgAUgJpZIgBARIxChBvd25lcl9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRJBChVyZXZvY2F0aW9uX2NvbW1pdG1lbnQYAyABKAxCB/pCBHoCaCFIAVIUcmV2b2NhdGlvbkNvbW1pdG1lbnSIAQESMQoSd2l0aGRyYXdfYm9uZF9zYXRzGAQgASgESAJSEHdpdGhkcmF3Qm9uZFNhdHOIAQESTAogd2l0aGRyYXdfcmVsYXRpdmVfYmxvY2tfbG9ja3RpbWUYBSABKARIA1Idd2l0aGRyYXdSZWxhdGl2ZUJsb2NrTG9ja3RpbWWIAQESNgoQdG9rZW5fcHVibGljX2tleRgGIAEoDEIH+kIEegJoIUgEUg50b2tlblB1YmxpY0tleYgBARI3ChB0b2tlbl9pZGVudGlmaWVyGAggASgMQgf6QgR6AmggSAVSD3Rva2VuSWRlbnRpZmllcogBARIqCgx0b2tlbl9hbW91bnQYByABKAxCB/pCBHoCaBBSC3Rva2VuQW1vdW50QgUKA19pZEIYChZfcmV2b2NhdGlvbl9jb21taXRtZW50QhUKE193aXRoZHJhd19ib25kX3NhdHNCIwohX3dpdGhkcmF3X3JlbGF0aXZlX2Jsb2NrX2xvY2t0aW1lQhMKEV90b2tlbl9wdWJsaWNfa2V5QhMKEV90b2tlbl9pZGVudGlmaWVyIqUDChBUb2tlblRyYW5zYWN0aW9uEjYKCm1pbnRfaW5wdXQYASABKAsyFS5zcGFyay5Ub2tlbk1pbnRJbnB1dEgAUgltaW50SW5wdXQSQgoOdHJhbnNmZXJfaW5wdXQYAiABKAsyGS5zcGFyay5Ub2tlblRyYW5zZmVySW5wdXRIAFINdHJhbnNmZXJJbnB1dBI8CgxjcmVhdGVfaW5wdXQYBSABKAsyFy5zcGFyay5Ub2tlbkNyZWF0ZUlucHV0SABSC2NyZWF0ZUlucHV0EjcKDXRva2VuX291dHB1dHMYAyADKAsyEi5zcGFyay5Ub2tlbk91dHB1dFIMdG9rZW5PdXRwdXRzEloKI3NwYXJrX29wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXlzGAQgAygMQgz6QgmSAQYiBHoCaCFSH3NwYXJrT3BlcmF0b3JJZGVudGl0eVB1YmxpY0tleXMSMgoHbmV0d29yaxgKIAEoDjIOLnNwYXJrLk5ldHdvcmtCCPpCBYIBAiAAUgduZXR3b3JrQg4KDHRva2VuX2lucHV0cyJeChJTaWduYXR1cmVXaXRoSW5kZXgSJwoJc2lnbmF0dXJlGAEgASgMQgn6QgZ6BBBAGElSCXNpZ25hdHVyZRIfCgtpbnB1dF9pbmRleBgCIAEoDVIKaW5wdXRJbmRleCLFAQovT3BlcmF0b3JTcGVjaWZpY1Rva2VuVHJhbnNhY3Rpb25TaWduYWJsZVBheWxvYWQSSAocZmluYWxfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgBIAEoDEIH+kIEegJoIFIZZmluYWxUb2tlblRyYW5zYWN0aW9uSGFzaBJIChxvcGVyYXRvcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUhlvcGVyYXRvcklkZW50aXR5UHVibGljS2V5IrYBCh5PcGVyYXRvclNwZWNpZmljT3duZXJTaWduYXR1cmUSQgoPb3duZXJfc2lnbmF0dXJlGAEgASgLMhkuc3BhcmsuU2lnbmF0dXJlV2l0aEluZGV4Ug5vd25lclNpZ25hdHVyZRJQCgdwYXlsb2FkGAIgASgLMjYuc3BhcmsuT3BlcmF0b3JTcGVjaWZpY1Rva2VuVHJhbnNhY3Rpb25TaWduYWJsZVBheWxvYWRSB3BheWxvYWQicgoZUmV2b2NhdGlvblNlY3JldFdpdGhJbmRleBIfCgtpbnB1dF9pbmRleBgBIAEoDVIKaW5wdXRJbmRleBI0ChFyZXZvY2F0aW9uX3NlY3JldBgCIAEoDEIH+kIEegJoIFIQcmV2b2NhdGlvblNlY3JldCL4AgoTRnJlZXplVG9rZW5zUGF5bG9hZBIxChBvd25lcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRIxChB0b2tlbl9wdWJsaWNfa2V5GAIgASgMQgf6QgR6AmghUg50b2tlblB1YmxpY0tleRI6Chlpc3N1ZXJfcHJvdmlkZWRfdGltZXN0YW1wGAMgASgEUhdpc3N1ZXJQcm92aWRlZFRpbWVzdGFtcBJIChxvcGVyYXRvcl9pZGVudGl0eV9wdWJsaWNfa2V5GAQgASgMQgf6QgR6AmghUhlvcGVyYXRvcklkZW50aXR5UHVibGljS2V5EicKD3Nob3VsZF91bmZyZWV6ZRgFIAEoCFIOc2hvdWxkVW5mcmVlemUSNwoQdG9rZW5faWRlbnRpZmllchgGIAEoDEIH+kIEegJoIEgAUg90b2tlbklkZW50aWZpZXKIAQFCEwoRX3Rva2VuX2lkZW50aWZpZXIimwEKE0ZyZWV6ZVRva2Vuc1JlcXVlc3QSTgoVZnJlZXplX3Rva2Vuc19wYXlsb2FkGAEgASgLMhouc3BhcmsuRnJlZXplVG9rZW5zUGF5bG9hZFITZnJlZXplVG9rZW5zUGF5bG9hZBI0ChBpc3N1ZXJfc2lnbmF0dXJlGAIgASgMQgn6QgZ6BBBAGElSD2lzc3VlclNpZ25hdHVyZSKJAQoURnJlZXplVG9rZW5zUmVzcG9uc2USPQoTaW1wYWN0ZWRfb3V0cHV0X2lkcxgBIAMoCUIN+kIKkgEHIgVyA7ABAVIRaW1wYWN0ZWRPdXRwdXRJZHMSMgoVaW1wYWN0ZWRfdG9rZW5fYW1vdW50GAIgASgMUhNpbXBhY3RlZFRva2VuQW1vdW50Iv0FCghUcmVlTm9kZRIOCgJpZBgBIAEoCVICaWQSFwoHdHJlZV9pZBgCIAEoCVIGdHJlZUlkEhQKBXZhbHVlGAMgASgEUgV2YWx1ZRIpCg5wYXJlbnRfbm9kZV9pZBgEIAEoCUgAUgxwYXJlbnROb2RlSWSIAQESFwoHbm9kZV90eBgFIAEoDFIGbm9kZVR4EhsKCXJlZnVuZF90eBgGIAEoDFIIcmVmdW5kVHgSEgoEdm91dBgHIAEoDVIEdm91dBIwChR2ZXJpZnlpbmdfcHVibGljX2tleRgIIAEoDFISdmVyaWZ5aW5nUHVibGljS2V5EjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYCSABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSQQoQc2lnbmluZ19rZXlzaGFyZRgKIAEoCzIWLnNwYXJrLlNpZ25pbmdLZXlzaGFyZVIPc2lnbmluZ0tleXNoYXJlEhYKBnN0YXR1cxgLIAEoCVIGc3RhdHVzEigKB25ldHdvcmsYDCABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEj0KDGNyZWF0ZWRfdGltZRgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSC2NyZWF0ZWRUaW1lEj0KDHVwZGF0ZWRfdGltZRgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSC3VwZGF0ZWRUaW1lEjcKGG93bmVyX3NpZ25pbmdfcHVibGljX2tleRgPIAEoDFIVb3duZXJTaWduaW5nUHVibGljS2V5EhsKCWRpcmVjdF90eBgQIAEoDFIIZGlyZWN0VHgSKAoQZGlyZWN0X3JlZnVuZF90eBgRIAEoDFIOZGlyZWN0UmVmdW5kVHgSOgoaZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHgYEiABKAxSFmRpcmVjdEZyb21DcGZwUmVmdW5kVHhCEQoPX3BhcmVudF9ub2RlX2lkIpABCh1GaW5hbGl6ZU5vZGVTaWduYXR1cmVzUmVxdWVzdBIvCgZpbnRlbnQYASABKA4yFy5jb21tb24uU2lnbmF0dXJlSW50ZW50UgZpbnRlbnQSPgoPbm9kZV9zaWduYXR1cmVzGAIgAygLMhUuc3BhcmsuTm9kZVNpZ25hdHVyZXNSDm5vZGVTaWduYXR1cmVzIkcKHkZpbmFsaXplTm9kZVNpZ25hdHVyZXNSZXNwb25zZRIlCgVub2RlcxgBIAMoCzIPLnNwYXJrLlRyZWVOb2RlUgVub2RlcyJICgtTZWNyZXRTaGFyZRIhCgxzZWNyZXRfc2hhcmUYASABKAxSC3NlY3JldFNoYXJlEhYKBnByb29mcxgCIAMoDFIGcHJvb2ZzIiUKC1NlY3JldFByb29mEhYKBnByb29mcxgBIAMoDFIGcHJvb2ZzIq8CChZMZWFmUmVmdW5kVHhTaWduaW5nSm9iEhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBJEChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAiABKAsyES5zcGFyay5TaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISUQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgDIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJjCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgEIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iIr4CChZVc2VyU2lnbmVkVHhTaWduaW5nSm9iEhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBIsChJzaWduaW5nX3B1YmxpY19rZXkYAiABKAxSEHNpZ25pbmdQdWJsaWNLZXkSFQoGcmF3X3R4GAMgASgMUgVyYXdUeBJTChhzaWduaW5nX25vbmNlX2NvbW1pdG1lbnQYBCABKAsyGS5jb21tb24uU2lnbmluZ0NvbW1pdG1lbnRSFnNpZ25pbmdOb25jZUNvbW1pdG1lbnQSJQoOdXNlcl9zaWduYXR1cmUYBSABKAxSDXVzZXJTaWduYXR1cmUSSgoTc2lnbmluZ19jb21taXRtZW50cxgGIAEoCzIZLnNwYXJrLlNpZ25pbmdDb21taXRtZW50c1ISc2lnbmluZ0NvbW1pdG1lbnRzIvICChlMZWFmUmVmdW5kVHhTaWduaW5nUmVzdWx0EhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBJNChhyZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYAiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSIwoNdmVyaWZ5aW5nX2tleRgDIAEoDFIMdmVyaWZ5aW5nS2V5EloKH2RpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBCABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhtkaXJlY3RSZWZ1bmRUeFNpZ25pbmdSZXN1bHQSbAopZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBSABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCL1AwoeU3RhcnRVc2VyU2lnbmVkVHJhbnNmZXJSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSQwoObGVhdmVzX3RvX3NlbmQYAyADKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUgxsZWF2ZXNUb1NlbmQSPwoccmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRgEIAEoDFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRI7CgtleHBpcnlfdGltZRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSCmV4cGlyeVRpbWUSUAoVZGlyZWN0X2xlYXZlc190b19zZW5kGAYgAygLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlISZGlyZWN0TGVhdmVzVG9TZW5kEmIKH2RpcmVjdF9mcm9tX2NwZnBfbGVhdmVzX3RvX3NlbmQYByADKAsyHS5zcGFyay5Vc2VyU2lnbmVkVHhTaWduaW5nSm9iUhpkaXJlY3RGcm9tQ3BmcExlYXZlc1RvU2VuZCKpAwoUU3RhcnRUcmFuc2ZlclJlcXVlc3QSHwoLdHJhbnNmZXJfaWQYASABKAlSCnRyYW5zZmVySWQSOQoZb3duZXJfaWRlbnRpdHlfcHVibGljX2tleRgCIAEoDFIWb3duZXJJZGVudGl0eVB1YmxpY0tleRJDCg5sZWF2ZXNfdG9fc2VuZBgDIAMoCzIdLnNwYXJrLkxlYWZSZWZ1bmRUeFNpZ25pbmdKb2JSDGxlYXZlc1RvU2VuZBI/ChxyZWNlaXZlcl9pZGVudGl0eV9wdWJsaWNfa2V5GAQgASgMUhlyZWNlaXZlcklkZW50aXR5UHVibGljS2V5EjsKC2V4cGlyeV90aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIKZXhwaXJ5VGltZRJBChB0cmFuc2Zlcl9wYWNrYWdlGAcgASgLMhYuc3BhcmsuVHJhbnNmZXJQYWNrYWdlUg90cmFuc2ZlclBhY2thZ2USIwoNc3BhcmtfaW52b2ljZRgKIAEoCVIMc3BhcmtJbnZvaWNlSgQIBhAHSgQICRAKIo8BChVTdGFydFRyYW5zZmVyUmVzcG9uc2USKwoIdHJhbnNmZXIYASABKAsyDy5zcGFyay5UcmFuc2ZlclIIdHJhbnNmZXISSQoPc2lnbmluZ19yZXN1bHRzGAIgAygLMiAuc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMi0AMKD1RyYW5zZmVyUGFja2FnZRJDCg5sZWF2ZXNfdG9fc2VuZBgBIAMoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSDGxlYXZlc1RvU2VuZBJXChFrZXlfdHdlYWtfcGFja2FnZRgCIAMoCzIrLnNwYXJrLlRyYW5zZmVyUGFja2FnZS5LZXlUd2Vha1BhY2thZ2VFbnRyeVIPa2V5VHdlYWtQYWNrYWdlEiUKDnVzZXJfc2lnbmF0dXJlGAMgASgMUg11c2VyU2lnbmF0dXJlElAKFWRpcmVjdF9sZWF2ZXNfdG9fc2VuZBgEIAMoCzIdLnNwYXJrLlVzZXJTaWduZWRUeFNpZ25pbmdKb2JSEmRpcmVjdExlYXZlc1RvU2VuZBJiCh9kaXJlY3RfZnJvbV9jcGZwX2xlYXZlc190b19zZW5kGAUgAygLMh0uc3BhcmsuVXNlclNpZ25lZFR4U2lnbmluZ0pvYlIaZGlyZWN0RnJvbUNwZnBMZWF2ZXNUb1NlbmQaQgoUS2V5VHdlYWtQYWNrYWdlRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAxSBXZhbHVlOgI4ASJSChFTZW5kTGVhZktleVR3ZWFrcxI9Cg5sZWF2ZXNfdG9fc2VuZBgBIAMoCzIXLnNwYXJrLlNlbmRMZWFmS2V5VHdlYWtSDGxlYXZlc1RvU2VuZCKDBAoQU2VuZExlYWZLZXlUd2VhaxIXCgdsZWFmX2lkGAEgASgJUgZsZWFmSWQSQAoSc2VjcmV0X3NoYXJlX3R3ZWFrGAIgASgLMhIuc3BhcmsuU2VjcmV0U2hhcmVSEHNlY3JldFNoYXJlVHdlYWsSXgoTcHVia2V5X3NoYXJlc190d2VhaxgDIAMoCzIuLnNwYXJrLlNlbmRMZWFmS2V5VHdlYWsuUHVia2V5U2hhcmVzVHdlYWtFbnRyeVIRcHVia2V5U2hhcmVzVHdlYWsSIwoNc2VjcmV0X2NpcGhlchgEIAEoDFIMc2VjcmV0Q2lwaGVyEhwKCXNpZ25hdHVyZRgFIAEoDFIJc2lnbmF0dXJlEikKEHJlZnVuZF9zaWduYXR1cmUYBiABKAxSD3JlZnVuZFNpZ25hdHVyZRI2ChdkaXJlY3RfcmVmdW5kX3NpZ25hdHVyZRgHIAEoDFIVZGlyZWN0UmVmdW5kU2lnbmF0dXJlEkgKIWRpcmVjdF9mcm9tX2NwZnBfcmVmdW5kX3NpZ25hdHVyZRgIIAEoDFIdZGlyZWN0RnJvbUNwZnBSZWZ1bmRTaWduYXR1cmUaRAoWUHVia2V5U2hhcmVzVHdlYWtFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoDFIFdmFsdWU6AjgBIuYBChdGaW5hbGl6ZVRyYW5zZmVyUmVxdWVzdBIfCgt0cmFuc2Zlcl9pZBgBIAEoCVIKdHJhbnNmZXJJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5Ej0KDmxlYXZlc190b19zZW5kGAMgAygLMhcuc3BhcmsuU2VuZExlYWZLZXlUd2Vha1IMbGVhdmVzVG9TZW5kEjAKFHNwYXJrX3BheW1lbnRfaW50ZW50GAQgASgJUhJzcGFya1BheW1lbnRJbnRlbnQiywEKKkZpbmFsaXplVHJhbnNmZXJXaXRoVHJhbnNmZXJQYWNrYWdlUmVxdWVzdBIfCgt0cmFuc2Zlcl9pZBgBIAEoCVIKdHJhbnNmZXJJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EkEKEHRyYW5zZmVyX3BhY2thZ2UYAyABKAsyFi5zcGFyay5UcmFuc2ZlclBhY2thZ2VSD3RyYW5zZmVyUGFja2FnZSJHChhGaW5hbGl6ZVRyYW5zZmVyUmVzcG9uc2USKwoIdHJhbnNmZXIYASABKAsyDy5zcGFyay5UcmFuc2ZlclIIdHJhbnNmZXIiyAQKCFRyYW5zZmVyEg4KAmlkGAEgASgJUgJpZBI7ChpzZW5kZXJfaWRlbnRpdHlfcHVibGljX2tleRgCIAEoDFIXc2VuZGVySWRlbnRpdHlQdWJsaWNLZXkSPwoccmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRgDIAEoDFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRItCgZzdGF0dXMYBCABKA4yFS5zcGFyay5UcmFuc2ZlclN0YXR1c1IGc3RhdHVzEh8KC3RvdGFsX3ZhbHVlGAUgASgEUgp0b3RhbFZhbHVlEjsKC2V4cGlyeV90aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIKZXhwaXJ5VGltZRIrCgZsZWF2ZXMYByADKAsyEy5zcGFyay5UcmFuc2ZlckxlYWZSBmxlYXZlcxI9CgxjcmVhdGVkX3RpbWUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgtjcmVhdGVkVGltZRI9Cgx1cGRhdGVkX3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgt1cGRhdGVkVGltZRInCgR0eXBlGAogASgOMhMuc3BhcmsuVHJhbnNmZXJUeXBlUgR0eXBlEiMKDXNwYXJrX2ludm9pY2UYCyABKAlSDHNwYXJrSW52b2ljZRIoCgduZXR3b3JrGAwgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yayKEAwoMVHJhbnNmZXJMZWFmEiMKBGxlYWYYASABKAsyDy5zcGFyay5UcmVlTm9kZVIEbGVhZhIjCg1zZWNyZXRfY2lwaGVyGAIgASgMUgxzZWNyZXRDaXBoZXISHAoJc2lnbmF0dXJlGAMgASgMUglzaWduYXR1cmUSNAoWaW50ZXJtZWRpYXRlX3JlZnVuZF90eBgEIAEoDFIUaW50ZXJtZWRpYXRlUmVmdW5kVHgSQQodaW50ZXJtZWRpYXRlX2RpcmVjdF9yZWZ1bmRfdHgYBSABKAxSGmludGVybWVkaWF0ZURpcmVjdFJlZnVuZFR4ElMKJ2ludGVybWVkaWF0ZV9kaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eBgGIAEoDFIiaW50ZXJtZWRpYXRlRGlyZWN0RnJvbUNwZnBSZWZ1bmRUeBI+ChxwZW5kaW5nX2tleV90d2Vha19wdWJsaWNfa2V5GAcgASgMUhhwZW5kaW5nS2V5VHdlYWtQdWJsaWNLZXki8wMKDlRyYW5zZmVyRmlsdGVyEkEKHHJlY2VpdmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxIAFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRI9ChpzZW5kZXJfaWRlbnRpdHlfcHVibGljX2tleRgCIAEoDEgAUhdzZW5kZXJJZGVudGl0eVB1YmxpY0tleRJTCiZzZW5kZXJfb3JfcmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRg8IAEoDEgAUiFzZW5kZXJPclJlY2VpdmVySWRlbnRpdHlQdWJsaWNLZXkSIQoMdHJhbnNmZXJfaWRzGAMgAygJUgt0cmFuc2ZlcklkcxIUCgVsaW1pdBgoIAEoA1IFbGltaXQSFgoGb2Zmc2V0GDIgASgDUgZvZmZzZXQSKQoFdHlwZXMYRiADKA4yEy5zcGFyay5UcmFuc2ZlclR5cGVSBXR5cGVzEigKB25ldHdvcmsYBCABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEjEKCHN0YXR1c2VzGFAgAygOMhUuc3BhcmsuVHJhbnNmZXJTdGF0dXNSCHN0YXR1c2VzEiIKBW9yZGVyGAUgASgOMgwuc3BhcmsuT3JkZXJSBW9yZGVyQg0KC3BhcnRpY2lwYW50Il8KFlF1ZXJ5VHJhbnNmZXJzUmVzcG9uc2USLQoJdHJhbnNmZXJzGAEgAygLMg8uc3BhcmsuVHJhbnNmZXJSCXRyYW5zZmVycxIWCgZvZmZzZXQYAiABKANSBm9mZnNldCKVAgoRQ2xhaW1MZWFmS2V5VHdlYWsSFwoHbGVhZl9pZBgBIAEoCVIGbGVhZklkEkAKEnNlY3JldF9zaGFyZV90d2VhaxgCIAEoCzISLnNwYXJrLlNlY3JldFNoYXJlUhBzZWNyZXRTaGFyZVR3ZWFrEl8KE3B1YmtleV9zaGFyZXNfdHdlYWsYAyADKAsyLy5zcGFyay5DbGFpbUxlYWZLZXlUd2Vhay5QdWJrZXlTaGFyZXNUd2Vha0VudHJ5UhFwdWJrZXlTaGFyZXNUd2VhaxpEChZQdWJrZXlTaGFyZXNUd2Vha0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEiwQEKHUNsYWltVHJhbnNmZXJUd2Vha0tleXNSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSRAoRbGVhdmVzX3RvX3JlY2VpdmUYAyADKAsyGC5zcGFyay5DbGFpbUxlYWZLZXlUd2Vha1IPbGVhdmVzVG9SZWNlaXZlIsUBCh9DbGFpbVRyYW5zZmVyU2lnblJlZnVuZHNSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSQAoMc2lnbmluZ19qb2JzGAMgAygLMh0uc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ0pvYlILc2lnbmluZ0pvYnNKBAgEEAUibQogQ2xhaW1UcmFuc2ZlclNpZ25SZWZ1bmRzUmVzcG9uc2USSQoPc2lnbmluZ19yZXN1bHRzGAEgAygLMiAuc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMi9wEKGVN0b3JlUHJlaW1hZ2VTaGFyZVJlcXVlc3QSIQoMcGF5bWVudF9oYXNoGAEgASgMUgtwYXltZW50SGFzaBI5Cg5wcmVpbWFnZV9zaGFyZRgCIAEoCzISLnNwYXJrLlNlY3JldFNoYXJlUg1wcmVpbWFnZVNoYXJlEhwKCXRocmVzaG9sZBgDIAEoDVIJdGhyZXNob2xkEiUKDmludm9pY2Vfc3RyaW5nGAQgASgJUg1pbnZvaWNlU3RyaW5nEjcKGHVzZXJfaWRlbnRpdHlfcHVibGljX2tleRgFIAEoDFIVdXNlcklkZW50aXR5UHVibGljS2V5IoECChtSZXF1ZXN0ZWRTaWduaW5nQ29tbWl0bWVudHMSewoZc2lnbmluZ19ub25jZV9jb21taXRtZW50cxgBIAMoCzI/LnNwYXJrLlJlcXVlc3RlZFNpZ25pbmdDb21taXRtZW50cy5TaWduaW5nTm9uY2VDb21taXRtZW50c0VudHJ5UhdzaWduaW5nTm9uY2VDb21taXRtZW50cxplChxTaWduaW5nTm9uY2VDb21taXRtZW50c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuY29tbW9uLlNpZ25pbmdDb21taXRtZW50UgV2YWx1ZToCOAEiTwocR2V0U2lnbmluZ0NvbW1pdG1lbnRzUmVxdWVzdBIZCghub2RlX2lkcxgBIAMoCVIHbm9kZUlkcxIUCgVjb3VudBgCIAEoDVIFY291bnQidAodR2V0U2lnbmluZ0NvbW1pdG1lbnRzUmVzcG9uc2USUwoTc2lnbmluZ19jb21taXRtZW50cxgBIAMoCzIiLnNwYXJrLlJlcXVlc3RlZFNpZ25pbmdDb21taXRtZW50c1ISc2lnbmluZ0NvbW1pdG1lbnRzItoBChJTaWduaW5nQ29tbWl0bWVudHMSYgoTc2lnbmluZ19jb21taXRtZW50cxgBIAMoCzIxLnNwYXJrLlNpZ25pbmdDb21taXRtZW50cy5TaWduaW5nQ29tbWl0bWVudHNFbnRyeVISc2lnbmluZ0NvbW1pdG1lbnRzGmAKF1NpZ25pbmdDb21taXRtZW50c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuY29tbW9uLlNpZ25pbmdDb21taXRtZW50UgV2YWx1ZToCOAEixgIKEFVzZXJTaWduZWRSZWZ1bmQSFwoHbm9kZV9pZBgBIAEoCVIGbm9kZUlkEhsKCXJlZnVuZF90eBgCIAEoDFIIcmVmdW5kVHgSJQoOdXNlcl9zaWduYXR1cmUYAyABKAxSDXVzZXJTaWduYXR1cmUSSgoTc2lnbmluZ19jb21taXRtZW50cxgEIAEoCzIZLnNwYXJrLlNpZ25pbmdDb21taXRtZW50c1ISc2lnbmluZ0NvbW1pdG1lbnRzElUKGXVzZXJfc2lnbmF0dXJlX2NvbW1pdG1lbnQYBSABKAsyGS5jb21tb24uU2lnbmluZ0NvbW1pdG1lbnRSF3VzZXJTaWduYXR1cmVDb21taXRtZW50EjIKB25ldHdvcmsYBiABKA4yDi5zcGFyay5OZXR3b3JrQgj6QgWCAQIgAFIHbmV0d29yayI7ChJJbnZvaWNlQW1vdW50UHJvb2YSJQoOYm9sdDExX2ludm9pY2UYASABKAlSDWJvbHQxMUludm9pY2UiewoNSW52b2ljZUFtb3VudBIdCgp2YWx1ZV9zYXRzGAEgASgEUgl2YWx1ZVNhdHMSSwoUaW52b2ljZV9hbW91bnRfcHJvb2YYAiABKAsyGS5zcGFyay5JbnZvaWNlQW1vdW50UHJvb2ZSEmludm9pY2VBbW91bnRQcm9vZiLWAwobSW5pdGlhdGVQcmVpbWFnZVN3YXBSZXF1ZXN0EiEKDHBheW1lbnRfaGFzaBgBIAEoDFILcGF5bWVudEhhc2gSOwoOaW52b2ljZV9hbW91bnQYAiABKAsyFC5zcGFyay5JbnZvaWNlQW1vdW50Ug1pbnZvaWNlQW1vdW50EkEKBnJlYXNvbhgDIAEoDjIpLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVxdWVzdC5SZWFzb25SBnJlYXNvbhJBCgh0cmFuc2ZlchgEIAEoCzIlLnNwYXJrLlN0YXJ0VXNlclNpZ25lZFRyYW5zZmVyUmVxdWVzdFIIdHJhbnNmZXISPwoccmVjZWl2ZXJfaWRlbnRpdHlfcHVibGljX2tleRgFIAEoDFIZcmVjZWl2ZXJJZGVudGl0eVB1YmxpY0tleRIZCghmZWVfc2F0cxgGIAEoBFIHZmVlU2F0cxJGChB0cmFuc2Zlcl9yZXF1ZXN0GAcgASgLMhsuc3BhcmsuU3RhcnRUcmFuc2ZlclJlcXVlc3RSD3RyYW5zZmVyUmVxdWVzdCItCgZSZWFzb24SDwoLUkVBU09OX1NFTkQQABISCg5SRUFTT05fUkVDRUlWRRABImcKHEluaXRpYXRlUHJlaW1hZ2VTd2FwUmVzcG9uc2USGgoIcHJlaW1hZ2UYASABKAxSCHByZWltYWdlEisKCHRyYW5zZmVyGAIgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIjIKCE91dFBvaW50EhIKBHR4aWQYASABKAxSBHR4aWQSEgoEdm91dBgCIAEoDVIEdm91dCKHAQoWQ29vcGVyYXRpdmVFeGl0UmVxdWVzdBI3Cgh0cmFuc2ZlchgBIAEoCzIbLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXF1ZXN0Ugh0cmFuc2ZlchIXCgdleGl0X2lkGAIgASgJUgZleGl0SWQSGwoJZXhpdF90eGlkGAMgASgMUghleGl0VHhpZCKRAQoXQ29vcGVyYXRpdmVFeGl0UmVzcG9uc2USKwoIdHJhbnNmZXIYASABKAsyDy5zcGFyay5UcmFuc2ZlclIIdHJhbnNmZXISSQoPc2lnbmluZ19yZXN1bHRzGAIgAygLMiAuc3BhcmsuTGVhZlJlZnVuZFR4U2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMioAIKFkNvdW50ZXJMZWFmU3dhcFJlcXVlc3QSNwoIdHJhbnNmZXIYASABKAsyGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdFIIdHJhbnNmZXISFwoHc3dhcF9pZBgCIAEoCVIGc3dhcElkEiwKEmFkYXB0b3JfcHVibGljX2tleRgDIAEoDFIQYWRhcHRvclB1YmxpY0tleRI5ChlkaXJlY3RfYWRhcHRvcl9wdWJsaWNfa2V5GAQgASgMUhZkaXJlY3RBZGFwdG9yUHVibGljS2V5EksKI2RpcmVjdF9mcm9tX2NwZnBfYWRhcHRvcl9wdWJsaWNfa2V5GAUgASgMUh5kaXJlY3RGcm9tQ3BmcEFkYXB0b3JQdWJsaWNLZXkikQEKF0NvdW50ZXJMZWFmU3dhcFJlc3BvbnNlEisKCHRyYW5zZmVyGAEgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyEkkKD3NpZ25pbmdfcmVzdWx0cxgCIAMoCzIgLnNwYXJrLkxlYWZSZWZ1bmRUeFNpZ25pbmdSZXN1bHRSDnNpZ25pbmdSZXN1bHRzIqIBChZSZWZyZXNoVGltZWxvY2tSZXF1ZXN0EhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EjQKDHNpZ25pbmdfam9icxgDIAMoCzIRLnNwYXJrLlNpZ25pbmdKb2JSC3NpZ25pbmdKb2JzIoABChxSZWZyZXNoVGltZWxvY2tTaWduaW5nUmVzdWx0EjsKDnNpZ25pbmdfcmVzdWx0GAEgASgLMhQuc3BhcmsuU2lnbmluZ1Jlc3VsdFINc2lnbmluZ1Jlc3VsdBIjCg12ZXJpZnlpbmdfa2V5GAIgASgMUgx2ZXJpZnlpbmdLZXkiZwoXUmVmcmVzaFRpbWVsb2NrUmVzcG9uc2USTAoPc2lnbmluZ19yZXN1bHRzGAEgAygLMiMuc3BhcmsuUmVmcmVzaFRpbWVsb2NrU2lnbmluZ1Jlc3VsdFIOc2lnbmluZ1Jlc3VsdHMi9gMKEUV4dGVuZExlYWZSZXF1ZXN0EhcKB2xlYWZfaWQYASABKAlSBmxlYWZJZBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EkAKE25vZGVfdHhfc2lnbmluZ19qb2IYAyABKAsyES5zcGFyay5TaWduaW5nSm9iUhBub2RlVHhTaWduaW5nSm9iEkQKFXJlZnVuZF90eF9zaWduaW5nX2pvYhgEIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSEnJlZnVuZFR4U2lnbmluZ0pvYhJNChpkaXJlY3Rfbm9kZV90eF9zaWduaW5nX2pvYhgFIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSFmRpcmVjdE5vZGVUeFNpZ25pbmdKb2ISUQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgGIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJjCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgHIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iInsKF0V4dGVuZExlYWZTaWduaW5nUmVzdWx0EjsKDnNpZ25pbmdfcmVzdWx0GAEgASgLMhQuc3BhcmsuU2lnbmluZ1Jlc3VsdFINc2lnbmluZ1Jlc3VsdBIjCg12ZXJpZnlpbmdfa2V5GAIgASgMUgx2ZXJpZnlpbmdLZXkimwQKEkV4dGVuZExlYWZSZXNwb25zZRIXCgdsZWFmX2lkGAEgASgJUgZsZWFmSWQSUwoWbm9kZV90eF9zaWduaW5nX3Jlc3VsdBgCIAEoCzIeLnNwYXJrLkV4dGVuZExlYWZTaWduaW5nUmVzdWx0UhNub2RlVHhTaWduaW5nUmVzdWx0ElcKGHJlZnVuZF90eF9zaWduaW5nX3Jlc3VsdBgDIAEoCzIeLnNwYXJrLkV4dGVuZExlYWZTaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSYAodZGlyZWN0X25vZGVfdHhfc2lnbmluZ19yZXN1bHQYBCABKAsyHi5zcGFyay5FeHRlbmRMZWFmU2lnbmluZ1Jlc3VsdFIZZGlyZWN0Tm9kZVR4U2lnbmluZ1Jlc3VsdBJkCh9kaXJlY3RfcmVmdW5kX3R4X3NpZ25pbmdfcmVzdWx0GAUgASgLMh4uc3BhcmsuRXh0ZW5kTGVhZlNpZ25pbmdSZXN1bHRSG2RpcmVjdFJlZnVuZFR4U2lnbmluZ1Jlc3VsdBJ2CilkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX3Jlc3VsdBgGIAEoCzIeLnNwYXJrLkV4dGVuZExlYWZTaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCJzChJBZGRyZXNzUmVxdWVzdE5vZGUSJgoPdXNlcl9wdWJsaWNfa2V5GAEgASgMUg11c2VyUHVibGljS2V5EjUKCGNoaWxkcmVuGAIgAygLMhkuc3BhcmsuQWRkcmVzc1JlcXVlc3ROb2RlUghjaGlsZHJlbiKDAgoZUHJlcGFyZVRyZWVBZGRyZXNzUmVxdWVzdBJBChJwYXJlbnRfbm9kZV9vdXRwdXQYASABKAsyES5zcGFyay5Ob2RlT3V0cHV0SABSEHBhcmVudE5vZGVPdXRwdXQSMQoNb25fY2hhaW5fdXR4bxgCIAEoCzILLnNwYXJrLlVUWE9IAFILb25DaGFpblV0eG8SLQoEbm9kZRgDIAEoCzIZLnNwYXJrLkFkZHJlc3NSZXF1ZXN0Tm9kZVIEbm9kZRI3Chh1c2VyX2lkZW50aXR5X3B1YmxpY19rZXkYBCABKAxSFXVzZXJJZGVudGl0eVB1YmxpY0tleUIICgZzb3VyY2UiZwoLQWRkcmVzc05vZGUSKAoHYWRkcmVzcxgBIAEoCzIOLnNwYXJrLkFkZHJlc3NSB2FkZHJlc3MSLgoIY2hpbGRyZW4YAiADKAsyEi5zcGFyay5BZGRyZXNzTm9kZVIIY2hpbGRyZW4iRAoaUHJlcGFyZVRyZWVBZGRyZXNzUmVzcG9uc2USJgoEbm9kZRgBIAEoCzISLnNwYXJrLkFkZHJlc3NOb2RlUgRub2RlIs4DCgxDcmVhdGlvbk5vZGUSQAoTbm9kZV90eF9zaWduaW5nX2pvYhgBIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSEG5vZGVUeFNpZ25pbmdKb2ISRAoVcmVmdW5kX3R4X3NpZ25pbmdfam9iGAIgASgLMhEuc3BhcmsuU2lnbmluZ0pvYlIScmVmdW5kVHhTaWduaW5nSm9iEi8KCGNoaWxkcmVuGAMgAygLMhMuc3BhcmsuQ3JlYXRpb25Ob2RlUghjaGlsZHJlbhJNChpkaXJlY3Rfbm9kZV90eF9zaWduaW5nX2pvYhgEIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSFmRpcmVjdE5vZGVUeFNpZ25pbmdKb2ISUQocZGlyZWN0X3JlZnVuZF90eF9zaWduaW5nX2pvYhgFIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSGGRpcmVjdFJlZnVuZFR4U2lnbmluZ0pvYhJjCiZkaXJlY3RfZnJvbV9jcGZwX3JlZnVuZF90eF9zaWduaW5nX2pvYhgGIAEoCzIRLnNwYXJrLlNpZ25pbmdKb2JSIGRpcmVjdEZyb21DcGZwUmVmdW5kVHhTaWduaW5nSm9iIvUBChFDcmVhdGVUcmVlUmVxdWVzdBJBChJwYXJlbnRfbm9kZV9vdXRwdXQYASABKAsyES5zcGFyay5Ob2RlT3V0cHV0SABSEHBhcmVudE5vZGVPdXRwdXQSMQoNb25fY2hhaW5fdXR4bxgCIAEoCzILLnNwYXJrLlVUWE9IAFILb25DaGFpblV0eG8SJwoEbm9kZRgDIAEoCzITLnNwYXJrLkNyZWF0aW9uTm9kZVIEbm9kZRI3Chh1c2VyX2lkZW50aXR5X3B1YmxpY19rZXkYBCABKAxSFXVzZXJJZGVudGl0eVB1YmxpY0tleUIICgZzb3VyY2UipAQKFENyZWF0aW9uUmVzcG9uc2VOb2RlEhcKB25vZGVfaWQYASABKAlSBm5vZGVJZBJJChZub2RlX3R4X3NpZ25pbmdfcmVzdWx0GAIgASgLMhQuc3BhcmsuU2lnbmluZ1Jlc3VsdFITbm9kZVR4U2lnbmluZ1Jlc3VsdBJNChhyZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYAyABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSNwoIY2hpbGRyZW4YBCADKAsyGy5zcGFyay5DcmVhdGlvblJlc3BvbnNlTm9kZVIIY2hpbGRyZW4SVgodZGlyZWN0X25vZGVfdHhfc2lnbmluZ19yZXN1bHQYBSABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhlkaXJlY3ROb2RlVHhTaWduaW5nUmVzdWx0EloKH2RpcmVjdF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYBiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhtkaXJlY3RSZWZ1bmRUeFNpZ25pbmdSZXN1bHQSbAopZGlyZWN0X2Zyb21fY3BmcF9yZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYByABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UiNkaXJlY3RGcm9tQ3BmcFJlZnVuZFR4U2lnbmluZ1Jlc3VsdCJFChJDcmVhdGVUcmVlUmVzcG9uc2USLwoEbm9kZRgBIAEoCzIbLnNwYXJrLkNyZWF0aW9uUmVzcG9uc2VOb2RlUgRub2RlIoQBChNTaWduaW5nT3BlcmF0b3JJbmZvEhQKBWluZGV4GAEgASgEUgVpbmRleBIeCgppZGVudGlmaWVyGAIgASgJUgppZGVudGlmaWVyEh0KCnB1YmxpY19rZXkYAyABKAxSCXB1YmxpY0tleRIYCgdhZGRyZXNzGAQgASgJUgdhZGRyZXNzIusBCh5HZXRTaWduaW5nT3BlcmF0b3JMaXN0UmVzcG9uc2USaAoRc2lnbmluZ19vcGVyYXRvcnMYASADKAsyOy5zcGFyay5HZXRTaWduaW5nT3BlcmF0b3JMaXN0UmVzcG9uc2UuU2lnbmluZ09wZXJhdG9yc0VudHJ5UhBzaWduaW5nT3BlcmF0b3JzGl8KFVNpZ25pbmdPcGVyYXRvcnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIwCgV2YWx1ZRgCIAEoCzIaLnNwYXJrLlNpZ25pbmdPcGVyYXRvckluZm9SBXZhbHVlOgI4ASJyCh1RdWVyeVVzZXJTaWduZWRSZWZ1bmRzUmVxdWVzdBIhCgxwYXltZW50X2hhc2gYASABKAxSC3BheW1lbnRIYXNoEi4KE2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxSEWlkZW50aXR5UHVibGljS2V5IpwBCh5RdWVyeVVzZXJTaWduZWRSZWZ1bmRzUmVzcG9uc2USRwoTdXNlcl9zaWduZWRfcmVmdW5kcxgBIAMoCzIXLnNwYXJrLlVzZXJTaWduZWRSZWZ1bmRSEXVzZXJTaWduZWRSZWZ1bmRzEisKCHRyYW5zZmVyGAMgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVySgQIAhADIqQDChtQcmVpbWFnZVJlcXVlc3RXaXRoVHJhbnNmZXISKgoMcGF5bWVudF9oYXNoGAEgASgMQgf6QgR6AmggUgtwYXltZW50SGFzaBJBChhyZWNlaXZlcl9pZGVudGl0eV9wdWJrZXkYAiABKAxCB/pCBHoCaCFSFnJlY2VpdmVySWRlbnRpdHlQdWJrZXkSNAoGc3RhdHVzGAMgASgOMhwuc3BhcmsuUHJlaW1hZ2VSZXF1ZXN0U3RhdHVzUgZzdGF0dXMSPQoMY3JlYXRlZF90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFILY3JlYXRlZFRpbWUSMAoIdHJhbnNmZXIYBSABKAsyDy5zcGFyay5UcmFuc2ZlckgAUgh0cmFuc2ZlcogBARIfCghwcmVpbWFnZRgGIAEoDEgBUghwcmVpbWFnZYgBARI0ChZzZW5kZXJfaWRlbnRpdHlfcHVia2V5GAcgASgMUhRzZW5kZXJJZGVudGl0eVB1YmtleUILCglfdHJhbnNmZXJCCwoJX3ByZWltYWdlIsQCChBRdWVyeUh0bGNSZXF1ZXN0EiUKDnBheW1lbnRfaGFzaGVzGAEgAygMUg1wYXltZW50SGFzaGVzEjcKE2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxCB/pCBHoCaCFSEWlkZW50aXR5UHVibGljS2V5EjkKBnN0YXR1cxgDIAEoDjIcLnNwYXJrLlByZWltYWdlUmVxdWVzdFN0YXR1c0gAUgZzdGF0dXOIAQESFAoFbGltaXQYBCABKANSBWxpbWl0EhYKBm9mZnNldBgFIAEoA1IGb2Zmc2V0EiEKDHRyYW5zZmVyX2lkcxgGIAMoCVILdHJhbnNmZXJJZHMSOQoKbWF0Y2hfcm9sZRgHIAEoDjIaLnNwYXJrLlByZWltYWdlUmVxdWVzdFJvbGVSCW1hdGNoUm9sZUIJCgdfc3RhdHVzInwKEVF1ZXJ5SHRsY1Jlc3BvbnNlEk8KEXByZWltYWdlX3JlcXVlc3RzGAEgAygLMiIuc3BhcmsuUHJlaW1hZ2VSZXF1ZXN0V2l0aFRyYW5zZmVyUhBwcmVpbWFnZVJlcXVlc3RzEhYKBm9mZnNldBgCIAEoA1IGb2Zmc2V0IocBChZQcm92aWRlUHJlaW1hZ2VSZXF1ZXN0EiEKDHBheW1lbnRfaGFzaBgBIAEoDFILcGF5bWVudEhhc2gSGgoIcHJlaW1hZ2UYAiABKAxSCHByZWltYWdlEi4KE2lkZW50aXR5X3B1YmxpY19rZXkYAyABKAxSEWlkZW50aXR5UHVibGljS2V5IkYKF1Byb3ZpZGVQcmVpbWFnZVJlc3BvbnNlEisKCHRyYW5zZmVyGAEgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIigKC1RyZWVOb2RlSWRzEhkKCG5vZGVfaWRzGAEgAygJUgdub2RlSWRzIrgCChFRdWVyeU5vZGVzUmVxdWVzdBI0ChVvd25lcl9pZGVudGl0eV9wdWJrZXkYASABKAxIAFITb3duZXJJZGVudGl0eVB1YmtleRIvCghub2RlX2lkcxgCIAEoCzISLnNwYXJrLlRyZWVOb2RlSWRzSABSB25vZGVJZHMSJwoPaW5jbHVkZV9wYXJlbnRzGAMgASgIUg5pbmNsdWRlUGFyZW50cxIUCgVsaW1pdBgEIAEoA1IFbGltaXQSFgoGb2Zmc2V0GAUgASgDUgZvZmZzZXQSKAoHbmV0d29yaxgGIAEoDjIOLnNwYXJrLk5ldHdvcmtSB25ldHdvcmsSMQoIc3RhdHVzZXMYByADKA4yFS5zcGFyay5UcmVlTm9kZVN0YXR1c1IIc3RhdHVzZXNCCAoGc291cmNlIrMBChJRdWVyeU5vZGVzUmVzcG9uc2USOgoFbm9kZXMYASADKAsyJC5zcGFyay5RdWVyeU5vZGVzUmVzcG9uc2UuTm9kZXNFbnRyeVIFbm9kZXMSFgoGb2Zmc2V0GAIgASgDUgZvZmZzZXQaSQoKTm9kZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIlCgV2YWx1ZRgCIAEoCzIPLnNwYXJrLlRyZWVOb2RlUgV2YWx1ZToCOAEidQoVQ2FuY2VsVHJhbnNmZXJSZXF1ZXN0Eh8KC3RyYW5zZmVyX2lkGAEgASgJUgp0cmFuc2ZlcklkEjsKGnNlbmRlcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMUhdzZW5kZXJJZGVudGl0eVB1YmxpY0tleSJFChZDYW5jZWxUcmFuc2ZlclJlc3BvbnNlEisKCHRyYW5zZmVyGAEgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyIqwBCiJRdWVyeVVudXNlZERlcG9zaXRBZGRyZXNzZXNSZXF1ZXN0Ei4KE2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSEWlkZW50aXR5UHVibGljS2V5EigKB25ldHdvcmsYAiABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEhQKBWxpbWl0GAMgASgDUgVsaW1pdBIWCgZvZmZzZXQYBCABKANSBm9mZnNldCLuAQoiUXVlcnlTdGF0aWNEZXBvc2l0QWRkcmVzc2VzUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhFpZGVudGl0eVB1YmxpY0tleRIoCgduZXR3b3JrGAIgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yaxIUCgVsaW1pdBgEIAEoA1IFbGltaXQSFgoGb2Zmc2V0GAUgASgDUgZvZmZzZXQSLAoPZGVwb3NpdF9hZGRyZXNzGAYgASgJSABSDmRlcG9zaXRBZGRyZXNziAEBQhIKEF9kZXBvc2l0X2FkZHJlc3MiygIKGURlcG9zaXRBZGRyZXNzUXVlcnlSZXN1bHQSJwoPZGVwb3NpdF9hZGRyZXNzGAEgASgJUg5kZXBvc2l0QWRkcmVzcxI1Chd1c2VyX3NpZ25pbmdfcHVibGljX2tleRgCIAEoDFIUdXNlclNpZ25pbmdQdWJsaWNLZXkSMAoUdmVyaWZ5aW5nX3B1YmxpY19rZXkYAyABKAxSEnZlcmlmeWluZ1B1YmxpY0tleRImCgdsZWFmX2lkGAQgASgJQgj6QgVyA7ABAUgAUgZsZWFmSWSIAQESTwoTcHJvb2Zfb2ZfcG9zc2Vzc2lvbhgFIAEoCzIaLnNwYXJrLkRlcG9zaXRBZGRyZXNzUHJvb2ZIAVIRcHJvb2ZPZlBvc3Nlc3Npb26IAQFCCgoIX2xlYWZfaWRCFgoUX3Byb29mX29mX3Bvc3Nlc3Npb24ijAEKI1F1ZXJ5VW51c2VkRGVwb3NpdEFkZHJlc3Nlc1Jlc3BvbnNlEk0KEWRlcG9zaXRfYWRkcmVzc2VzGAEgAygLMiAuc3BhcmsuRGVwb3NpdEFkZHJlc3NRdWVyeVJlc3VsdFIQZGVwb3NpdEFkZHJlc3NlcxIWCgZvZmZzZXQYAiABKANSBm9mZnNldCJ0CiNRdWVyeVN0YXRpY0RlcG9zaXRBZGRyZXNzZXNSZXNwb25zZRJNChFkZXBvc2l0X2FkZHJlc3NlcxgBIAMoCzIgLnNwYXJrLkRlcG9zaXRBZGRyZXNzUXVlcnlSZXN1bHRSEGRlcG9zaXRBZGRyZXNzZXMibwoTUXVlcnlCYWxhbmNlUmVxdWVzdBIuChNpZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhFpZGVudGl0eVB1YmxpY0tleRIoCgduZXR3b3JrGAIgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yayLFAQoUUXVlcnlCYWxhbmNlUmVzcG9uc2USGAoHYmFsYW5jZRgBIAEoBFIHYmFsYW5jZRJSCg1ub2RlX2JhbGFuY2VzGAIgAygLMi0uc3BhcmsuUXVlcnlCYWxhbmNlUmVzcG9uc2UuTm9kZUJhbGFuY2VzRW50cnlSDG5vZGVCYWxhbmNlcxo/ChFOb2RlQmFsYW5jZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoBFIFdmFsdWU6AjgBIsUBCgxTcGFya0FkZHJlc3MSLgoTaWRlbnRpdHlfcHVibGljX2tleRgBIAEoDFIRaWRlbnRpdHlQdWJsaWNLZXkSSwoUc3BhcmtfaW52b2ljZV9maWVsZHMYAiABKAsyGS5zcGFyay5TcGFya0ludm9pY2VGaWVsZHNSEnNwYXJrSW52b2ljZUZpZWxkcxIqCglzaWduYXR1cmUYAyABKAxCB/pCBHoCaEBIAFIJc2lnbmF0dXJliAEBQgwKCl9zaWduYXR1cmUinAMKElNwYXJrSW52b2ljZUZpZWxkcxIYCgd2ZXJzaW9uGAEgASgNUgd2ZXJzaW9uEhcKAmlkGAIgASgMQgf6QgR6AmgQUgJpZBI9Cg50b2tlbnNfcGF5bWVudBgDIAEoCzIULnNwYXJrLlRva2Vuc1BheW1lbnRIAFINdG9rZW5zUGF5bWVudBI3CgxzYXRzX3BheW1lbnQYBCABKAsyEi5zcGFyay5TYXRzUGF5bWVudEgAUgtzYXRzUGF5bWVudBIgCgRtZW1vGAUgASgJQgf6QgRyAih4SAFSBG1lbW+IAQESOAoRc2VuZGVyX3B1YmxpY19rZXkYBiABKAxCB/pCBHoCaCFIAlIPc2VuZGVyUHVibGljS2V5iAEBEkAKC2V4cGlyeV90aW1lGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDUgpleHBpcnlUaW1liAEBQg4KDHBheW1lbnRfdHlwZUIHCgVfbWVtb0IUChJfc2VuZGVyX3B1YmxpY19rZXlCDgoMX2V4cGlyeV90aW1lIjUKC1NhdHNQYXltZW50EhsKBmFtb3VudBgBIAEoBEgAUgZhbW91bnSIAQFCCQoHX2Ftb3VudCKOAQoNVG9rZW5zUGF5bWVudBI3ChB0b2tlbl9pZGVudGlmaWVyGAEgASgMQgf6QgR6AmggSABSD3Rva2VuSWRlbnRpZmllcogBARIkCgZhbW91bnQYAiABKAxCB/pCBHoCGBBIAVIGYW1vdW50iAEBQhMKEV90b2tlbl9pZGVudGlmaWVyQgkKB19hbW91bnQixgEKJkluaXRpYXRlU3RhdGljRGVwb3NpdFV0eG9SZWZ1bmRSZXF1ZXN0Ei8KDW9uX2NoYWluX3V0eG8YASABKAsyCy5zcGFyay5VVFhPUgtvbkNoYWluVXR4bxJEChVyZWZ1bmRfdHhfc2lnbmluZ19qb2IYAyABKAsyES5zcGFyay5TaWduaW5nSm9iUhJyZWZ1bmRUeFNpZ25pbmdKb2ISJQoOdXNlcl9zaWduYXR1cmUYBCABKAxSDXVzZXJTaWduYXR1cmUiwwEKJ0luaXRpYXRlU3RhdGljRGVwb3NpdFV0eG9SZWZ1bmRSZXNwb25zZRJNChhyZWZ1bmRfdHhfc2lnbmluZ19yZXN1bHQYASABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0UhVyZWZ1bmRUeFNpZ25pbmdSZXN1bHQSSQoPZGVwb3NpdF9hZGRyZXNzGAIgASgLMiAuc3BhcmsuRGVwb3NpdEFkZHJlc3NRdWVyeVJlc3VsdFIOZGVwb3NpdEFkZHJlc3MisAMKF0luaXRpYXRlVXR4b1N3YXBSZXF1ZXN0Ei8KDW9uX2NoYWluX3V0eG8YASABKAsyCy5zcGFyay5VVFhPUgtvbkNoYWluVXR4bxI9CgxyZXF1ZXN0X3R5cGUYAiABKA4yGi5zcGFyay5VdHhvU3dhcFJlcXVlc3RUeXBlUgtyZXF1ZXN0VHlwZRIuChJjcmVkaXRfYW1vdW50X3NhdHMYAyABKARIAFIQY3JlZGl0QW1vdW50U2F0cxIiCgxtYXhfZmVlX3NhdHMYBCABKARIAFIKbWF4RmVlU2F0cxIjCg1zc3Bfc2lnbmF0dXJlGAUgASgMUgxzc3BTaWduYXR1cmUSJQoOdXNlcl9zaWduYXR1cmUYBiABKAxSDXVzZXJTaWduYXR1cmUSNwoIdHJhbnNmZXIYByABKAsyGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdFIIdHJhbnNmZXISQgoUc3BlbmRfdHhfc2lnbmluZ19qb2IYCCABKAsyES5zcGFyay5TaWduaW5nSm9iUhFzcGVuZFR4U2lnbmluZ0pvYkIICgZhbW91bnQi3wEKGEluaXRpYXRlVXR4b1N3YXBSZXNwb25zZRJLChdzcGVuZF90eF9zaWduaW5nX3Jlc3VsdBgBIAEoCzIULnNwYXJrLlNpZ25pbmdSZXN1bHRSFHNwZW5kVHhTaWduaW5nUmVzdWx0EisKCHRyYW5zZmVyGAIgASgLMg8uc3BhcmsuVHJhbnNmZXJSCHRyYW5zZmVyEkkKD2RlcG9zaXRfYWRkcmVzcxgDIAEoCzIgLnNwYXJrLkRlcG9zaXRBZGRyZXNzUXVlcnlSZXN1bHRSDmRlcG9zaXRBZGRyZXNzIosBCgtFeGl0aW5nVHJlZRIXCgd0cmVlX2lkGAEgASgJUgZ0cmVlSWQSUQoXdXNlcl9zaWduaW5nX2NvbW1pdG1lbnQYAiABKAsyGS5jb21tb24uU2lnbmluZ0NvbW1pdG1lbnRSFXVzZXJTaWduaW5nQ29tbWl0bWVudBIQCgN2aW4YAyABKA1SA3ZpbiKcAQofRXhpdFNpbmdsZU5vZGVUcmVlU2lnbmluZ1Jlc3VsdBIXCgd0cmVlX2lkGAEgASgJUgZ0cmVlSWQSOwoOc2lnbmluZ19yZXN1bHQYAiABKAsyFC5zcGFyay5TaWduaW5nUmVzdWx0Ug1zaWduaW5nUmVzdWx0EiMKDXZlcmlmeWluZ19rZXkYAyABKAxSDHZlcmlmeWluZ0tleSJNChhCaXRjb2luVHJhbnNhY3Rpb25PdXRwdXQSFAoFdmFsdWUYASABKANSBXZhbHVlEhsKCXBrX3NjcmlwdBgCIAEoDFIIcGtTY3JpcHQi8wEKGkV4aXRTaW5nbGVOb2RlVHJlZXNSZXF1ZXN0EjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkSNwoNZXhpdGluZ190cmVlcxgCIAMoCzISLnNwYXJrLkV4aXRpbmdUcmVlUgxleGl0aW5nVHJlZXMSFQoGcmF3X3R4GAMgASgMUgVyYXdUeBJKChBwcmV2aW91c19vdXRwdXRzGAQgAygLMh8uc3BhcmsuQml0Y29pblRyYW5zYWN0aW9uT3V0cHV0Ug9wcmV2aW91c091dHB1dHMibgobRXhpdFNpbmdsZU5vZGVUcmVlc1Jlc3BvbnNlEk8KD3NpZ25pbmdfcmVzdWx0cxgBIAMoCzImLnNwYXJrLkV4aXRTaW5nbGVOb2RlVHJlZVNpZ25pbmdSZXN1bHRSDnNpZ25pbmdSZXN1bHRzIloKHVF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXF1ZXN0EjkKGW93bmVyX2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxSFm93bmVySWRlbnRpdHlQdWJsaWNLZXkizwEKHlF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXNwb25zZRJoChFub2RlX2Rpc3RyaWJ1dGlvbhgBIAMoCzI7LnNwYXJrLlF1ZXJ5Tm9kZXNEaXN0cmlidXRpb25SZXNwb25zZS5Ob2RlRGlzdHJpYnV0aW9uRW50cnlSEG5vZGVEaXN0cmlidXRpb24aQwoVTm9kZURpc3RyaWJ1dGlvbkVudHJ5EhAKA2tleRgBIAEoBFIDa2V5EhQKBXZhbHVlGAIgASgEUgV2YWx1ZToCOAEimQEKGFF1ZXJ5Tm9kZXNCeVZhbHVlUmVxdWVzdBI5Chlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMUhZvd25lcklkZW50aXR5UHVibGljS2V5EhQKBXZhbHVlGAIgASgDUgV2YWx1ZRIWCgZvZmZzZXQYAyABKANSBm9mZnNldBIUCgVsaW1pdBgEIAEoA1IFbGltaXQiwQEKGVF1ZXJ5Tm9kZXNCeVZhbHVlUmVzcG9uc2USQQoFbm9kZXMYASADKAsyKy5zcGFyay5RdWVyeU5vZGVzQnlWYWx1ZVJlc3BvbnNlLk5vZGVzRW50cnlSBW5vZGVzEhYKBm9mZnNldBgCIAEoA1IGb2Zmc2V0GkkKCk5vZGVzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSJQoFdmFsdWUYAiABKAsyDy5zcGFyay5UcmVlTm9kZVIFdmFsdWU6AjgBIrYBChlHZXRVdHhvc0ZvckFkZHJlc3NSZXF1ZXN0EhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3MSFgoGb2Zmc2V0GAIgASgEUgZvZmZzZXQSFAoFbGltaXQYAyABKARSBWxpbWl0EigKB25ldHdvcmsYBCABKA4yDi5zcGFyay5OZXR3b3JrUgduZXR3b3JrEicKD2V4Y2x1ZGVfY2xhaW1lZBgFIAEoCFIOZXhjbHVkZUNsYWltZWQiVwoaR2V0VXR4b3NGb3JBZGRyZXNzUmVzcG9uc2USIQoFdXR4b3MYASADKAsyCy5zcGFyay5VVFhPUgV1dHhvcxIWCgZvZmZzZXQYAiABKARSBm9mZnNldCJjChlRdWVyeVNwYXJrSW52b2ljZXNSZXF1ZXN0EhQKBWxpbWl0GAEgASgDUgVsaW1pdBIWCgZvZmZzZXQYAiABKANSBm9mZnNldBIYCgdpbnZvaWNlGAMgAygJUgdpbnZvaWNlIncKGlF1ZXJ5U3BhcmtJbnZvaWNlc1Jlc3BvbnNlEhYKBm9mZnNldBgBIAEoA1IGb2Zmc2V0EkEKEGludm9pY2Vfc3RhdHVzZXMYAiADKAsyFi5zcGFyay5JbnZvaWNlUmVzcG9uc2VSD2ludm9pY2VTdGF0dXNlcyLlAQoPSW52b2ljZVJlc3BvbnNlEhgKB2ludm9pY2UYASABKAlSB2ludm9pY2USLAoGc3RhdHVzGAIgASgOMhQuc3BhcmsuSW52b2ljZVN0YXR1c1IGc3RhdHVzEjoKDXNhdHNfdHJhbnNmZXIYAyABKAsyEy5zcGFyay5TYXRzVHJhbnNmZXJIAFIMc2F0c1RyYW5zZmVyEj0KDnRva2VuX3RyYW5zZmVyGAQgASgLMhQuc3BhcmsuVG9rZW5UcmFuc2ZlckgAUg10b2tlblRyYW5zZmVyQg8KDXRyYW5zZmVyX3R5cGUiOAoMU2F0c1RyYW5zZmVyEigKC3RyYW5zZmVyX2lkGAEgASgMQgf6QgR6AmgQUgp0cmFuc2ZlcklkIlkKDVRva2VuVHJhbnNmZXISSAocZmluYWxfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgBIAEoDEIH+kIEegJoIFIZZmluYWxUb2tlblRyYW5zYWN0aW9uSGFzaCKtAQoiSW5pdGlhdGVTd2FwUHJpbWFyeVRyYW5zZmVyUmVxdWVzdBI3Cgh0cmFuc2ZlchgBIAEoCzIbLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXF1ZXN0Ugh0cmFuc2ZlchJOChNhZGFwdG9yX3B1YmxpY19rZXlzGAIgASgLMh4uc3BhcmsuQWRhcHRvclB1YmxpY0tleVBhY2thZ2VSEWFkYXB0b3JQdWJsaWNLZXlzIp0BCiNJbml0aWF0ZVN3YXBQcmltYXJ5VHJhbnNmZXJSZXNwb25zZRIrCgh0cmFuc2ZlchgBIAEoCzIPLnNwYXJrLlRyYW5zZmVyUgh0cmFuc2ZlchJJCg9zaWduaW5nX3Jlc3VsdHMYAiADKAsyIC5zcGFyay5MZWFmUmVmdW5kVHhTaWduaW5nUmVzdWx0Ug5zaWduaW5nUmVzdWx0cyLPAQoXQWRhcHRvclB1YmxpY0tleVBhY2thZ2USLAoSYWRhcHRvcl9wdWJsaWNfa2V5GAEgASgMUhBhZGFwdG9yUHVibGljS2V5EjkKGWRpcmVjdF9hZGFwdG9yX3B1YmxpY19rZXkYAiABKAxSFmRpcmVjdEFkYXB0b3JQdWJsaWNLZXkSSwojZGlyZWN0X2Zyb21fY3BmcF9hZGFwdG9yX3B1YmxpY19rZXkYAyABKAxSHmRpcmVjdEZyb21DcGZwQWRhcHRvclB1YmxpY0tleSLmAQoNV2FsbGV0U2V0dGluZxJCChlvd25lcl9pZGVudGl0eV9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUhZvd25lcklkZW50aXR5UHVibGljS2V5EicKD3ByaXZhdGVfZW5hYmxlZBgCIAEoCFIOcHJpdmF0ZUVuYWJsZWQSSQoabWFzdGVyX2lkZW50aXR5X3B1YmxpY19rZXkYAyABKAxCB/pCBHoCaCFIAFIXbWFzdGVySWRlbnRpdHlQdWJsaWNLZXmIAQFCHQobX21hc3Rlcl9pZGVudGl0eV9wdWJsaWNfa2V5IowCChpVcGRhdGVXYWxsZXRTZXR0aW5nUmVxdWVzdBIsCg9wcml2YXRlX2VuYWJsZWQYASABKAhIAVIOcHJpdmF0ZUVuYWJsZWSIAQESRAoec2V0X21hc3Rlcl9pZGVudGl0eV9wdWJsaWNfa2V5GAIgASgMSABSGnNldE1hc3RlcklkZW50aXR5UHVibGljS2V5EkgKIGNsZWFyX21hc3Rlcl9pZGVudGl0eV9wdWJsaWNfa2V5GAMgASgISABSHGNsZWFyTWFzdGVySWRlbnRpdHlQdWJsaWNLZXlCHAoabWFzdGVyX2lkZW50aXR5X3B1YmxpY19rZXlCEgoQX3ByaXZhdGVfZW5hYmxlZCJaChtVcGRhdGVXYWxsZXRTZXR0aW5nUmVzcG9uc2USOwoOd2FsbGV0X3NldHRpbmcYASABKAsyFC5zcGFyay5XYWxsZXRTZXR0aW5nUg13YWxsZXRTZXR0aW5nIhsKGVF1ZXJ5V2FsbGV0U2V0dGluZ1JlcXVlc3QiWQoaUXVlcnlXYWxsZXRTZXR0aW5nUmVzcG9uc2USOwoOd2FsbGV0X3NldHRpbmcYASABKAsyFC5zcGFyay5XYWxsZXRTZXR0aW5nUg13YWxsZXRTZXR0aW5nKk0KB05ldHdvcmsSDwoLVU5TUEVDSUZJRUQQABILCgdNQUlOTkVUEAESCwoHUkVHVEVTVBACEgsKB1RFU1RORVQQAxIKCgZTSUdORVQQBCojCglEaXJlY3Rpb24SCAoETkVYVBAAEgwKCFBSRVZJT1VTEAEq/AMKDlRyYW5zZmVyU3RhdHVzEiQKIFRSQU5TRkVSX1NUQVRVU19TRU5ERVJfSU5JVElBVEVEEAASLAooVFJBTlNGRVJfU1RBVFVTX1NFTkRFUl9LRVlfVFdFQUtfUEVORElORxABEiYKIlRSQU5TRkVSX1NUQVRVU19TRU5ERVJfS0VZX1RXRUFLRUQQAhIoCiRUUkFOU0ZFUl9TVEFUVVNfUkVDRUlWRVJfS0VZX1RXRUFLRUQQAxIqCiZUUkFOU0ZFUl9TVEFUVVNfUkVDRUlWRVJfUkVGVU5EX1NJR05FRBAEEh0KGVRSQU5TRkVSX1NUQVRVU19DT01QTEVURUQQBRIbChdUUkFOU0ZFUl9TVEFUVVNfRVhQSVJFRBAGEhwKGFRSQU5TRkVSX1NUQVRVU19SRVRVUk5FRBAHEjAKLFRSQU5TRkVSX1NUQVRVU19TRU5ERVJfSU5JVElBVEVEX0NPT1JESU5BVE9SEAgSLQopVFJBTlNGRVJfU1RBVFVTX1JFQ0VJVkVSX0tFWV9UV0VBS19MT0NLRUQQCRIuCipUUkFOU0ZFUl9TVEFUVVNfUkVDRUlWRVJfS0VZX1RXRUFLX0FQUExJRUQQChItCilUUkFOU0ZFUl9TVEFUVVNfQVBQTFlJTkdfU0VOREVSX0tFWV9UV0VBSxALKpoBCgxUcmFuc2ZlclR5cGUSEQoNUFJFSU1BR0VfU1dBUBAAEhQKEENPT1BFUkFUSVZFX0VYSVQQARIMCghUUkFOU0ZFUhACEg0KCVVUWE9fU1dBUBADEggKBFNXQVAQHhIQCgxDT1VOVEVSX1NXQVAQKBITCg9QUklNQVJZX1NXQVBfVjMQBBITCg9DT1VOVEVSX1NXQVBfVjMQBSomCgVPcmRlchIOCgpERVNDRU5ESU5HEAASDQoJQVNDRU5ESU5HEAEqnAEKFVByZWltYWdlUmVxdWVzdFN0YXR1cxIwCixQUkVJTUFHRV9SRVFVRVNUX1NUQVRVU19XQUlUSU5HX0ZPUl9QUkVJTUFHRRAAEisKJ1BSRUlNQUdFX1JFUVVFU1RfU1RBVFVTX1BSRUlNQUdFX1NIQVJFRBABEiQKIFBSRUlNQUdFX1JFUVVFU1RfU1RBVFVTX1JFVFVSTkVEEAIqigEKE1ByZWltYWdlUmVxdWVzdFJvbGUSIgoeUFJFSU1BR0VfUkVRVUVTVF9ST0xFX1JFQ0VJVkVSEAASIAocUFJFSU1BR0VfUkVRVUVTVF9ST0xFX1NFTkRFUhABEi0KKVBSRUlNQUdFX1JFUVVFU1RfUk9MRV9SRUNFSVZFUl9BTkRfU0VOREVSEAIqOAoTVXR4b1N3YXBSZXF1ZXN0VHlwZRIJCgVGaXhlZBAAEgoKBk1heEZlZRABEgoKBlJlZnVuZBACKk4KDUludm9pY2VTdGF0dXMSDQoJTk9UX0ZPVU5EEAASCwoHUEVORElORxABEg0KCUZJTkFMSVpFRBACEgwKCFJFVFVSTkVEEAQiBAgDEAMqgwMKDlRyZWVOb2RlU3RhdHVzEh0KGVRSRUVfTk9ERV9TVEFUVVNfQ1JFQVRJTkcQABIeChpUUkVFX05PREVfU1RBVFVTX0FWQUlMQUJMRRABEiUKIVRSRUVfTk9ERV9TVEFUVVNfRlJPWkVOX0JZX0lTU1VFUhACEiQKIFRSRUVfTk9ERV9TVEFUVVNfVFJBTlNGRVJfTE9DS0VEEAMSIQodVFJFRV9OT0RFX1NUQVRVU19TUExJVF9MT0NLRUQQBBIdChlUUkVFX05PREVfU1RBVFVTX1NQTElUVEVEEAUSHwobVFJFRV9OT0RFX1NUQVRVU19BR0dSRUdBVEVEEAYSHQoZVFJFRV9OT0RFX1NUQVRVU19PTl9DSEFJThAHEiMKH1RSRUVfTk9ERV9TVEFUVVNfQUdHUkVHQVRFX0xPQ0sQCBIbChdUUkVFX05PREVfU1RBVFVTX0VYSVRFRBAJEiEKHVRSRUVfTk9ERV9TVEFUVVNfUkVORVdfTE9DS0VEEAoyxxkKDFNwYXJrU2VydmljZRJpChhnZW5lcmF0ZV9kZXBvc2l0X2FkZHJlc3MSJC5zcGFyay5HZW5lcmF0ZURlcG9zaXRBZGRyZXNzUmVxdWVzdBolLnNwYXJrLkdlbmVyYXRlRGVwb3NpdEFkZHJlc3NSZXNwb25zZSIAEnwKH2dlbmVyYXRlX3N0YXRpY19kZXBvc2l0X2FkZHJlc3MSKi5zcGFyay5HZW5lcmF0ZVN0YXRpY0RlcG9zaXRBZGRyZXNzUmVxdWVzdBorLnNwYXJrLkdlbmVyYXRlU3RhdGljRGVwb3NpdEFkZHJlc3NSZXNwb25zZSIAEnAKG3N0YXJ0X2RlcG9zaXRfdHJlZV9jcmVhdGlvbhImLnNwYXJrLlN0YXJ0RGVwb3NpdFRyZWVDcmVhdGlvblJlcXVlc3QaJy5zcGFyay5TdGFydERlcG9zaXRUcmVlQ3JlYXRpb25SZXNwb25zZSIAEn8KJ2ZpbmFsaXplX3RyYW5zZmVyX3dpdGhfdHJhbnNmZXJfcGFja2FnZRIxLnNwYXJrLkZpbmFsaXplVHJhbnNmZXJXaXRoVHJhbnNmZXJQYWNrYWdlUmVxdWVzdBofLnNwYXJrLkZpbmFsaXplVHJhbnNmZXJSZXNwb25zZSIAElEKF3F1ZXJ5X3BlbmRpbmdfdHJhbnNmZXJzEhUuc3BhcmsuVHJhbnNmZXJGaWx0ZXIaHS5zcGFyay5RdWVyeVRyYW5zZmVyc1Jlc3BvbnNlIgASTQoTcXVlcnlfYWxsX3RyYW5zZmVycxIVLnNwYXJrLlRyYW5zZmVyRmlsdGVyGh0uc3BhcmsuUXVlcnlUcmFuc2ZlcnNSZXNwb25zZSIAElsKGWNsYWltX3RyYW5zZmVyX3R3ZWFrX2tleXMSJC5zcGFyay5DbGFpbVRyYW5zZmVyVHdlYWtLZXlzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAElIKFHN0b3JlX3ByZWltYWdlX3NoYXJlEiAuc3BhcmsuU3RvcmVQcmVpbWFnZVNoYXJlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAEmYKF2dldF9zaWduaW5nX2NvbW1pdG1lbnRzEiMuc3BhcmsuR2V0U2lnbmluZ0NvbW1pdG1lbnRzUmVxdWVzdBokLnNwYXJrLkdldFNpZ25pbmdDb21taXRtZW50c1Jlc3BvbnNlIgASUwoQcHJvdmlkZV9wcmVpbWFnZRIdLnNwYXJrLlByb3ZpZGVQcmVpbWFnZVJlcXVlc3QaHi5zcGFyay5Qcm92aWRlUHJlaW1hZ2VSZXNwb25zZSIAEkEKCnF1ZXJ5X2h0bGMSFy5zcGFyay5RdWVyeUh0bGNSZXF1ZXN0Ghguc3BhcmsuUXVlcnlIdGxjUmVzcG9uc2UiABJBCgpyZW5ld19sZWFmEhcuc3BhcmsuUmVuZXdMZWFmUmVxdWVzdBoYLnNwYXJrLlJlbmV3TGVhZlJlc3BvbnNlIgASXAoZZ2V0X3NpZ25pbmdfb3BlcmF0b3JfbGlzdBIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRolLnNwYXJrLkdldFNpZ25pbmdPcGVyYXRvckxpc3RSZXNwb25zZSIAEkQKC3F1ZXJ5X25vZGVzEhguc3BhcmsuUXVlcnlOb2Rlc1JlcXVlc3QaGS5zcGFyay5RdWVyeU5vZGVzUmVzcG9uc2UiABJKCg1xdWVyeV9iYWxhbmNlEhouc3BhcmsuUXVlcnlCYWxhbmNlUmVxdWVzdBobLnNwYXJrLlF1ZXJ5QmFsYW5jZVJlc3BvbnNlIgASagoZcXVlcnlfdXNlcl9zaWduZWRfcmVmdW5kcxIkLnNwYXJrLlF1ZXJ5VXNlclNpZ25lZFJlZnVuZHNSZXF1ZXN0GiUuc3BhcmsuUXVlcnlVc2VyU2lnbmVkUmVmdW5kc1Jlc3BvbnNlIgASeQoecXVlcnlfdW51c2VkX2RlcG9zaXRfYWRkcmVzc2VzEikuc3BhcmsuUXVlcnlVbnVzZWREZXBvc2l0QWRkcmVzc2VzUmVxdWVzdBoqLnNwYXJrLlF1ZXJ5VW51c2VkRGVwb3NpdEFkZHJlc3Nlc1Jlc3BvbnNlIgASeQoecXVlcnlfc3RhdGljX2RlcG9zaXRfYWRkcmVzc2VzEikuc3BhcmsuUXVlcnlTdGF0aWNEZXBvc2l0QWRkcmVzc2VzUmVxdWVzdBoqLnNwYXJrLlF1ZXJ5U3RhdGljRGVwb3NpdEFkZHJlc3Nlc1Jlc3BvbnNlIgASXAoTc3Vic2NyaWJlX3RvX2V2ZW50cxIfLnNwYXJrLlN1YnNjcmliZVRvRXZlbnRzUmVxdWVzdBogLnNwYXJrLlN1YnNjcmliZVRvRXZlbnRzUmVzcG9uc2UiADABEoYBCiNpbml0aWF0ZV9zdGF0aWNfZGVwb3NpdF91dHhvX3JlZnVuZBItLnNwYXJrLkluaXRpYXRlU3RhdGljRGVwb3NpdFV0eG9SZWZ1bmRSZXF1ZXN0Gi4uc3BhcmsuSW5pdGlhdGVTdGF0aWNEZXBvc2l0VXR4b1JlZnVuZFJlc3BvbnNlIgASYQoWZXhpdF9zaW5nbGVfbm9kZV90cmVlcxIhLnNwYXJrLkV4aXRTaW5nbGVOb2RlVHJlZXNSZXF1ZXN0GiIuc3BhcmsuRXhpdFNpbmdsZU5vZGVUcmVlc1Jlc3BvbnNlIgASVgoTY29vcGVyYXRpdmVfZXhpdF92MhIdLnNwYXJrLkNvb3BlcmF0aXZlRXhpdFJlcXVlc3QaHi5zcGFyay5Db29wZXJhdGl2ZUV4aXRSZXNwb25zZSIAEnMKHmNsYWltX3RyYW5zZmVyX3NpZ25fcmVmdW5kc192MhImLnNwYXJrLkNsYWltVHJhbnNmZXJTaWduUmVmdW5kc1JlcXVlc3QaJy5zcGFyay5DbGFpbVRyYW5zZmVyU2lnblJlZnVuZHNSZXNwb25zZSIAEmwKG2ZpbmFsaXplX25vZGVfc2lnbmF0dXJlc192MhIkLnNwYXJrLkZpbmFsaXplTm9kZVNpZ25hdHVyZXNSZXF1ZXN0GiUuc3BhcmsuRmluYWxpemVOb2RlU2lnbmF0dXJlc1Jlc3BvbnNlIgASZgoZaW5pdGlhdGVfcHJlaW1hZ2Vfc3dhcF92MhIiLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVxdWVzdBojLnNwYXJrLkluaXRpYXRlUHJlaW1hZ2VTd2FwUmVzcG9uc2UiABJmChlpbml0aWF0ZV9wcmVpbWFnZV9zd2FwX3YzEiIuc3BhcmsuSW5pdGlhdGVQcmVpbWFnZVN3YXBSZXF1ZXN0GiMuc3BhcmsuSW5pdGlhdGVQcmVpbWFnZVN3YXBSZXNwb25zZSIAElEKEnN0YXJ0X2xlYWZfc3dhcF92MhIbLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXF1ZXN0Ghwuc3BhcmsuU3RhcnRUcmFuc2ZlclJlc3BvbnNlIgASUAoRc3RhcnRfdHJhbnNmZXJfdjISGy5zcGFyay5TdGFydFRyYW5zZmVyUmVxdWVzdBocLnNwYXJrLlN0YXJ0VHJhbnNmZXJSZXNwb25zZSIAEl4KFWdldF91dHhvc19mb3JfYWRkcmVzcxIgLnNwYXJrLkdldFV0eG9zRm9yQWRkcmVzc1JlcXVlc3QaIS5zcGFyay5HZXRVdHhvc0ZvckFkZHJlc3NSZXNwb25zZSIAEl0KFHF1ZXJ5X3NwYXJrX2ludm9pY2VzEiAuc3BhcmsuUXVlcnlTcGFya0ludm9pY2VzUmVxdWVzdBohLnNwYXJrLlF1ZXJ5U3BhcmtJbnZvaWNlc1Jlc3BvbnNlIgASeQoeaW5pdGlhdGVfc3dhcF9wcmltYXJ5X3RyYW5zZmVyEikuc3BhcmsuSW5pdGlhdGVTd2FwUHJpbWFyeVRyYW5zZmVyUmVxdWVzdBoqLnNwYXJrLkluaXRpYXRlU3dhcFByaW1hcnlUcmFuc2ZlclJlc3BvbnNlIgASYAoVdXBkYXRlX3dhbGxldF9zZXR0aW5nEiEuc3BhcmsuVXBkYXRlV2FsbGV0U2V0dGluZ1JlcXVlc3QaIi5zcGFyay5VcGRhdGVXYWxsZXRTZXR0aW5nUmVzcG9uc2UiABJdChRxdWVyeV93YWxsZXRfc2V0dGluZxIgLnNwYXJrLlF1ZXJ5V2FsbGV0U2V0dGluZ1JlcXVlc3QaIS5zcGFyay5RdWVyeVdhbGxldFNldHRpbmdSZXNwb25zZSIAQixaKmdpdGh1Yi5jb20vbGlnaHRzcGFya2Rldi9zcGFyay9wcm90by9zcGFya2IGcHJvdG8zCppWChFzcGFya190b2tlbi5wcm90bxILc3BhcmtfdG9rZW4aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8aC3NwYXJrLnByb3RvGhd2YWxpZGF0ZS92YWxpZGF0ZS5wcm90byKbAQoSVG9rZW5PdXRwdXRUb1NwZW5kEkYKG3ByZXZfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgBIAEoDEIH+kIEegJoIFIYcHJldlRva2VuVHJhbnNhY3Rpb25IYXNoEj0KG3ByZXZfdG9rZW5fdHJhbnNhY3Rpb25fdm91dBgCIAEoDVIYcHJldlRva2VuVHJhbnNhY3Rpb25Wb3V0Il8KElRva2VuVHJhbnNmZXJJbnB1dBJJChBvdXRwdXRzX3RvX3NwZW5kGAEgAygLMh8uc3BhcmtfdG9rZW4uVG9rZW5PdXRwdXRUb1NwZW5kUg5vdXRwdXRzVG9TcGVuZCKTAQoOVG9rZW5NaW50SW5wdXQSMwoRaXNzdWVyX3B1YmxpY19rZXkYASABKAxCB/pCBHoCaCFSD2lzc3VlclB1YmxpY0tleRI3ChB0b2tlbl9pZGVudGlmaWVyGAIgASgMQgf6QgR6AmggSABSD3Rva2VuSWRlbnRpZmllcogBAUITChFfdG9rZW5faWRlbnRpZmllciK/AwoQVG9rZW5DcmVhdGVJbnB1dBIzChFpc3N1ZXJfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIPaXNzdWVyUHVibGljS2V5EiYKCnRva2VuX25hbWUYAiABKAlCB/pCBHICGBRSCXRva2VuTmFtZRIqCgx0b2tlbl90aWNrZXIYAyABKAlCB/pCBHICGAZSC3Rva2VuVGlja2VyEiQKCGRlY2ltYWxzGAQgASgNQgj6QgUqAxj/AVIIZGVjaW1hbHMSJgoKbWF4X3N1cHBseRgFIAEoDEIH+kIEegJoEFIJbWF4U3VwcGx5EiEKDGlzX2ZyZWV6YWJsZRgGIAEoCFILaXNGcmVlemFibGUSSQoaY3JlYXRpb25fZW50aXR5X3B1YmxpY19rZXkYByABKAxCB/pCBHoCaCFIAFIXY3JlYXRpb25FbnRpdHlQdWJsaWNLZXmIAQESNAoOZXh0cmFfbWV0YWRhdGEYCCABKAxCCPpCBXoDGIAISAFSDWV4dHJhTWV0YWRhdGGIAQFCHQobX2NyZWF0aW9uX2VudGl0eV9wdWJsaWNfa2V5QhEKD19leHRyYV9tZXRhZGF0YSLHBAoLVG9rZW5PdXRwdXQSHQoCaWQYASABKAlCCPpCBXIDsAEBSABSAmlkiAEBEjEKEG93bmVyX3B1YmxpY19rZXkYAiABKAxCB/pCBHoCaCFSDm93bmVyUHVibGljS2V5EkEKFXJldm9jYXRpb25fY29tbWl0bWVudBgDIAEoDEIH+kIEegJoIUgBUhRyZXZvY2F0aW9uQ29tbWl0bWVudIgBARIxChJ3aXRoZHJhd19ib25kX3NhdHMYBCABKARIAlIQd2l0aGRyYXdCb25kU2F0c4gBARJMCiB3aXRoZHJhd19yZWxhdGl2ZV9ibG9ja19sb2NrdGltZRgFIAEoBEgDUh13aXRoZHJhd1JlbGF0aXZlQmxvY2tMb2NrdGltZYgBARI2ChB0b2tlbl9wdWJsaWNfa2V5GAYgASgMQgf6QgR6AmghSARSDnRva2VuUHVibGljS2V5iAEBEjcKEHRva2VuX2lkZW50aWZpZXIYCCABKAxCB/pCBHoCaCBIBVIPdG9rZW5JZGVudGlmaWVyiAEBEioKDHRva2VuX2Ftb3VudBgHIAEoDEIH+kIEegJoEFILdG9rZW5BbW91bnRCBQoDX2lkQhgKFl9yZXZvY2F0aW9uX2NvbW1pdG1lbnRCFQoTX3dpdGhkcmF3X2JvbmRfc2F0c0IjCiFfd2l0aGRyYXdfcmVsYXRpdmVfYmxvY2tfbG9ja3RpbWVCEwoRX3Rva2VuX3B1YmxpY19rZXlCEwoRX3Rva2VuX2lkZW50aWZpZXIingIKElBhcnRpYWxUb2tlbk91dHB1dBIxChBvd25lcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg5vd25lclB1YmxpY0tleRIsChJ3aXRoZHJhd19ib25kX3NhdHMYAiABKARSEHdpdGhkcmF3Qm9uZFNhdHMSRwogd2l0aGRyYXdfcmVsYXRpdmVfYmxvY2tfbG9ja3RpbWUYAyABKARSHXdpdGhkcmF3UmVsYXRpdmVCbG9ja0xvY2t0aW1lEjIKEHRva2VuX2lkZW50aWZpZXIYBCABKAxCB/pCBHoCaCBSD3Rva2VuSWRlbnRpZmllchIqCgx0b2tlbl9hbW91bnQYBSABKAxCB/pCBHoCaBBSC3Rva2VuQW1vdW50IqMBChBGaW5hbFRva2VuT3V0cHV0ElEKFHBhcnRpYWxfdG9rZW5fb3V0cHV0GAEgASgLMh8uc3BhcmtfdG9rZW4uUGFydGlhbFRva2VuT3V0cHV0UhJwYXJ0aWFsVG9rZW5PdXRwdXQSPAoVcmV2b2NhdGlvbl9jb21taXRtZW50GAIgASgMQgf6QgR6AmghUhRyZXZvY2F0aW9uQ29tbWl0bWVudCKaBgoQVG9rZW5UcmFuc2FjdGlvbhIYCgd2ZXJzaW9uGAEgASgNUgd2ZXJzaW9uEjwKCm1pbnRfaW5wdXQYAiABKAsyGy5zcGFya190b2tlbi5Ub2tlbk1pbnRJbnB1dEgAUgltaW50SW5wdXQSSAoOdHJhbnNmZXJfaW5wdXQYAyABKAsyHy5zcGFya190b2tlbi5Ub2tlblRyYW5zZmVySW5wdXRIAFINdHJhbnNmZXJJbnB1dBJCCgxjcmVhdGVfaW5wdXQYCCABKAsyHS5zcGFya190b2tlbi5Ub2tlbkNyZWF0ZUlucHV0SABSC2NyZWF0ZUlucHV0Ej0KDXRva2VuX291dHB1dHMYBCADKAsyGC5zcGFya190b2tlbi5Ub2tlbk91dHB1dFIMdG9rZW5PdXRwdXRzEloKI3NwYXJrX29wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXlzGAUgAygMQgz6QgmSAQYiBHoCaCFSH3NwYXJrT3BlcmF0b3JJZGVudGl0eVB1YmxpY0tleXMSOwoLZXhwaXJ5X3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgpleHBpcnlUaW1lEjIKB25ldHdvcmsYByABKA4yDi5zcGFyay5OZXR3b3JrQgj6QgWCAQIgAFIHbmV0d29yaxJUChhjbGllbnRfY3JlYXRlZF90aW1lc3RhbXAYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUhZjbGllbnRDcmVhdGVkVGltZXN0YW1wEk8KE2ludm9pY2VfYXR0YWNobWVudHMYCiADKAsyHi5zcGFya190b2tlbi5JbnZvaWNlQXR0YWNobWVudFISaW52b2ljZUF0dGFjaG1lbnRzEj8KGXZhbGlkaXR5X2R1cmF0aW9uX3NlY29uZHMYCyABKARIAVIXdmFsaWRpdHlEdXJhdGlvblNlY29uZHOIAQFCDgoMdG9rZW5faW5wdXRzQhwKGl92YWxpZGl0eV9kdXJhdGlvbl9zZWNvbmRzIpkDChhUb2tlblRyYW5zYWN0aW9uTWV0YWRhdGESWgojc3Bhcmtfb3BlcmF0b3JfaWRlbnRpdHlfcHVibGljX2tleXMYAiADKAxCDPpCCZIBBiIEegJoIVIfc3BhcmtPcGVyYXRvcklkZW50aXR5UHVibGljS2V5cxIyCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya0II+kIFggECIABSB25ldHdvcmsSVAoYY2xpZW50X2NyZWF0ZWRfdGltZXN0YW1wGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIWY2xpZW50Q3JlYXRlZFRpbWVzdGFtcBJGChl2YWxpZGl0eV9kdXJhdGlvbl9zZWNvbmRzGAUgASgEQgr6QgcyBRisAigBUhd2YWxpZGl0eUR1cmF0aW9uU2Vjb25kcxJPChNpbnZvaWNlX2F0dGFjaG1lbnRzGAYgAygLMh4uc3BhcmtfdG9rZW4uSW52b2ljZUF0dGFjaG1lbnRSEmludm9pY2VBdHRhY2htZW50cyLJAwoXUGFydGlhbFRva2VuVHJhbnNhY3Rpb24SGAoHdmVyc2lvbhgBIAEoDVIHdmVyc2lvbhJjChp0b2tlbl90cmFuc2FjdGlvbl9tZXRhZGF0YRgCIAEoCzIlLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNhY3Rpb25NZXRhZGF0YVIYdG9rZW5UcmFuc2FjdGlvbk1ldGFkYXRhEjwKCm1pbnRfaW5wdXQYAyABKAsyGy5zcGFya190b2tlbi5Ub2tlbk1pbnRJbnB1dEgAUgltaW50SW5wdXQSSAoOdHJhbnNmZXJfaW5wdXQYBCABKAsyHy5zcGFya190b2tlbi5Ub2tlblRyYW5zZmVySW5wdXRIAFINdHJhbnNmZXJJbnB1dBJCCgxjcmVhdGVfaW5wdXQYBSABKAsyHS5zcGFya190b2tlbi5Ub2tlbkNyZWF0ZUlucHV0SABSC2NyZWF0ZUlucHV0ElMKFXBhcnRpYWxfdG9rZW5fb3V0cHV0cxgGIAMoCzIfLnNwYXJrX3Rva2VuLlBhcnRpYWxUb2tlbk91dHB1dFITcGFydGlhbFRva2VuT3V0cHV0c0IOCgx0b2tlbl9pbnB1dHMiwQMKFUZpbmFsVG9rZW5UcmFuc2FjdGlvbhIYCgd2ZXJzaW9uGAEgASgNUgd2ZXJzaW9uEmMKGnRva2VuX3RyYW5zYWN0aW9uX21ldGFkYXRhGAIgASgLMiUuc3BhcmtfdG9rZW4uVG9rZW5UcmFuc2FjdGlvbk1ldGFkYXRhUhh0b2tlblRyYW5zYWN0aW9uTWV0YWRhdGESPAoKbWludF9pbnB1dBgDIAEoCzIbLnNwYXJrX3Rva2VuLlRva2VuTWludElucHV0SABSCW1pbnRJbnB1dBJICg50cmFuc2Zlcl9pbnB1dBgEIAEoCzIfLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNmZXJJbnB1dEgAUg10cmFuc2ZlcklucHV0EkIKDGNyZWF0ZV9pbnB1dBgFIAEoCzIdLnNwYXJrX3Rva2VuLlRva2VuQ3JlYXRlSW5wdXRIAFILY3JlYXRlSW5wdXQSTQoTZmluYWxfdG9rZW5fb3V0cHV0cxgGIAMoCzIdLnNwYXJrX3Rva2VuLkZpbmFsVG9rZW5PdXRwdXRSEWZpbmFsVG9rZW5PdXRwdXRzQg4KDHRva2VuX2lucHV0cyI4ChFJbnZvaWNlQXR0YWNobWVudBIjCg1zcGFya19pbnZvaWNlGAEgASgJUgxzcGFya0ludm9pY2UiXgoSU2lnbmF0dXJlV2l0aEluZGV4EicKCXNpZ25hdHVyZRgBIAEoDEIJ+kIGegQQQBhJUglzaWduYXR1cmUSHwoLaW5wdXRfaW5kZXgYAiABKA1SCmlucHV0SW5kZXgitAEKHklucHV0VHR4b1NpZ25hdHVyZXNQZXJPcGVyYXRvchJICg90dHhvX3NpZ25hdHVyZXMYASADKAsyHy5zcGFya190b2tlbi5TaWduYXR1cmVXaXRoSW5kZXhSDnR0eG9TaWduYXR1cmVzEkgKHG9wZXJhdG9yX2lkZW50aXR5X3B1YmxpY19rZXkYAiABKAxCB/pCBHoCaCFSGW9wZXJhdG9ySWRlbnRpdHlQdWJsaWNLZXki8gIKF1N0YXJ0VHJhbnNhY3Rpb25SZXF1ZXN0EjcKE2lkZW50aXR5X3B1YmxpY19rZXkYASABKAxCB/pCBHoCaCFSEWlkZW50aXR5UHVibGljS2V5ElkKGXBhcnRpYWxfdG9rZW5fdHJhbnNhY3Rpb24YAiABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhdwYXJ0aWFsVG9rZW5UcmFuc2FjdGlvbhJ7CipwYXJ0aWFsX3Rva2VuX3RyYW5zYWN0aW9uX293bmVyX3NpZ25hdHVyZXMYAyADKAsyHy5zcGFya190b2tlbi5TaWduYXR1cmVXaXRoSW5kZXhSJnBhcnRpYWxUb2tlblRyYW5zYWN0aW9uT3duZXJTaWduYXR1cmVzEkYKGXZhbGlkaXR5X2R1cmF0aW9uX3NlY29uZHMYBCABKARCCvpCBzIFGKwCKAFSF3ZhbGlkaXR5RHVyYXRpb25TZWNvbmRzIq4BChhTdGFydFRyYW5zYWN0aW9uUmVzcG9uc2USVQoXZmluYWxfdG9rZW5fdHJhbnNhY3Rpb24YASABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhVmaW5hbFRva2VuVHJhbnNhY3Rpb24SOwoNa2V5c2hhcmVfaW5mbxgCIAEoCzIWLnNwYXJrLlNpZ25pbmdLZXlzaGFyZVIMa2V5c2hhcmVJbmZvIvgCChhDb21taXRUcmFuc2FjdGlvblJlcXVlc3QSVQoXZmluYWxfdG9rZW5fdHJhbnNhY3Rpb24YASABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhVmaW5hbFRva2VuVHJhbnNhY3Rpb24SSAocZmluYWxfdG9rZW5fdHJhbnNhY3Rpb25faGFzaBgCIAEoDEIH+kIEegJoIFIZZmluYWxUb2tlblRyYW5zYWN0aW9uSGFzaBJ3CiJpbnB1dF90dHhvX3NpZ25hdHVyZXNfcGVyX29wZXJhdG9yGAMgAygLMisuc3BhcmtfdG9rZW4uSW5wdXRUdHhvU2lnbmF0dXJlc1Blck9wZXJhdG9yUh5pbnB1dFR0eG9TaWduYXR1cmVzUGVyT3BlcmF0b3ISQgoZb3duZXJfaWRlbnRpdHlfcHVibGljX2tleRgEIAEoDEIH+kIEegJoIVIWb3duZXJJZGVudGl0eVB1YmxpY0tleSK6AQoOQ29tbWl0UHJvZ3Jlc3MSUQoeY29tbWl0dGVkX29wZXJhdG9yX3B1YmxpY19rZXlzGAEgAygMQgz6QgmSAQYiBHoCaCFSG2NvbW1pdHRlZE9wZXJhdG9yUHVibGljS2V5cxJVCiB1bmNvbW1pdHRlZF9vcGVyYXRvcl9wdWJsaWNfa2V5cxgCIAMoDEIM+kIJkgEGIgR6AmghUh11bmNvbW1pdHRlZE9wZXJhdG9yUHVibGljS2V5cyKhAQoZQ29tbWl0VHJhbnNhY3Rpb25SZXNwb25zZRI+Cg1jb21taXRfc3RhdHVzGAEgASgOMhkuc3BhcmtfdG9rZW4uQ29tbWl0U3RhdHVzUgxjb21taXRTdGF0dXMSRAoPY29tbWl0X3Byb2dyZXNzGAIgASgLMhsuc3BhcmtfdG9rZW4uQ29tbWl0UHJvZ3Jlc3NSDmNvbW1pdFByb2dyZXNzIqYCChtCcm9hZGNhc3RUcmFuc2FjdGlvblJlcXVlc3QSNwoTaWRlbnRpdHlfcHVibGljX2tleRgBIAEoDEIH+kIEegJoIVIRaWRlbnRpdHlQdWJsaWNLZXkSYAoZcGFydGlhbF90b2tlbl90cmFuc2FjdGlvbhgCIAEoCzIkLnNwYXJrX3Rva2VuLlBhcnRpYWxUb2tlblRyYW5zYWN0aW9uUhdwYXJ0aWFsVG9rZW5UcmFuc2FjdGlvbhJsCiJ0b2tlbl90cmFuc2FjdGlvbl9vd25lcl9zaWduYXR1cmVzGAMgAygLMh8uc3BhcmtfdG9rZW4uU2lnbmF0dXJlV2l0aEluZGV4Uh90b2tlblRyYW5zYWN0aW9uT3duZXJTaWduYXR1cmVzIoACChxCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3BvbnNlEloKF2ZpbmFsX3Rva2VuX3RyYW5zYWN0aW9uGAEgASgLMiIuc3BhcmtfdG9rZW4uRmluYWxUb2tlblRyYW5zYWN0aW9uUhVmaW5hbFRva2VuVHJhbnNhY3Rpb24SPgoNY29tbWl0X3N0YXR1cxgCIAEoDjIZLnNwYXJrX3Rva2VuLkNvbW1pdFN0YXR1c1IMY29tbWl0U3RhdHVzEkQKD2NvbW1pdF9wcm9ncmVzcxgDIAEoCzIbLnNwYXJrX3Rva2VuLkNvbW1pdFByb2dyZXNzUg5jb21taXRQcm9ncmVzcyKSAQoZUXVlcnlUb2tlbk1ldGFkYXRhUmVxdWVzdBI5ChF0b2tlbl9pZGVudGlmaWVycxgBIAMoDEIM+kIJkgEGIgR6AmggUhB0b2tlbklkZW50aWZpZXJzEjoKEmlzc3Vlcl9wdWJsaWNfa2V5cxgCIAMoDEIM+kIJkgEGIgR6AmghUhBpc3N1ZXJQdWJsaWNLZXlzIvADCg1Ub2tlbk1ldGFkYXRhEjMKEWlzc3Vlcl9wdWJsaWNfa2V5GAEgASgMQgf6QgR6AmghUg9pc3N1ZXJQdWJsaWNLZXkSJgoKdG9rZW5fbmFtZRgCIAEoCUIH+kIEcgIYFFIJdG9rZW5OYW1lEioKDHRva2VuX3RpY2tlchgDIAEoCUIH+kIEcgIYBlILdG9rZW5UaWNrZXISJAoIZGVjaW1hbHMYBCABKA1CCPpCBSoDGP8BUghkZWNpbWFscxImCgptYXhfc3VwcGx5GAUgASgMQgf6QgR6AmgQUgltYXhTdXBwbHkSIQoMaXNfZnJlZXphYmxlGAYgASgIUgtpc0ZyZWV6YWJsZRJJChpjcmVhdGlvbl9lbnRpdHlfcHVibGljX2tleRgHIAEoDEIH+kIEegJoIUgAUhdjcmVhdGlvbkVudGl0eVB1YmxpY0tleYgBARIyChB0b2tlbl9pZGVudGlmaWVyGAggASgMQgf6QgR6AmggUg90b2tlbklkZW50aWZpZXISNAoOZXh0cmFfbWV0YWRhdGEYCSABKAxCCPpCBXoDGIAISAFSDWV4dHJhTWV0YWRhdGGIAQFCHQobX2NyZWF0aW9uX2VudGl0eV9wdWJsaWNfa2V5QhEKD19leHRyYV9tZXRhZGF0YSJfChpRdWVyeVRva2VuTWV0YWRhdGFSZXNwb25zZRJBCg50b2tlbl9tZXRhZGF0YRgBIAMoCzIaLnNwYXJrX3Rva2VuLlRva2VuTWV0YWRhdGFSDXRva2VuTWV0YWRhdGEirAIKGFF1ZXJ5VG9rZW5PdXRwdXRzUmVxdWVzdBI4ChFvd25lcl9wdWJsaWNfa2V5cxgBIAMoDEIM+kIJkgEGIgR6AmghUg9vd25lclB1YmxpY0tleXMSOgoSaXNzdWVyX3B1YmxpY19rZXlzGAIgAygMQgz6QgmSAQYiBHoCaCFSEGlzc3VlclB1YmxpY0tleXMSOQoRdG9rZW5faWRlbnRpZmllcnMYBCADKAxCDPpCCZIBBiIEegJoIFIQdG9rZW5JZGVudGlmaWVycxIoCgduZXR3b3JrGAMgASgOMg4uc3BhcmsuTmV0d29ya1IHbmV0d29yaxI1CgxwYWdlX3JlcXVlc3QYBSABKAsyEi5zcGFyay5QYWdlUmVxdWVzdFILcGFnZVJlcXVlc3QirQMKHVF1ZXJ5VG9rZW5UcmFuc2FjdGlvbnNSZXF1ZXN0EiwKCm91dHB1dF9pZHMYASADKAlCDfpCCpIBByIFcgOwAQFSCW91dHB1dElkcxI4ChFvd25lcl9wdWJsaWNfa2V5cxgCIAMoDEIM+kIJkgEGIgR6AmghUg9vd25lclB1YmxpY0tleXMSOgoSaXNzdWVyX3B1YmxpY19rZXlzGAMgAygMQgz6QgmSAQYiBHoCaCFSEGlzc3VlclB1YmxpY0tleXMSOQoRdG9rZW5faWRlbnRpZmllcnMYByADKAxCDPpCCZIBBiIEegJoIFIQdG9rZW5JZGVudGlmaWVycxJGChh0b2tlbl90cmFuc2FjdGlvbl9oYXNoZXMYBCADKAxCDPpCCZIBBiIEegJoIFIWdG9rZW5UcmFuc2FjdGlvbkhhc2hlcxIiCgVvcmRlchgIIAEoDjIMLnNwYXJrLk9yZGVyUgVvcmRlchIgCgVsaW1pdBgFIAEoA0IK+kIHIgUY6AcoAFIFbGltaXQSHwoGb2Zmc2V0GAYgASgDQgf6QgQiAigAUgZvZmZzZXQipgEKHlF1ZXJ5VG9rZW5UcmFuc2FjdGlvbnNSZXNwb25zZRJsCh50b2tlbl90cmFuc2FjdGlvbnNfd2l0aF9zdGF0dXMYASADKAsyJy5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uV2l0aFN0YXR1c1IbdG9rZW5UcmFuc2FjdGlvbnNXaXRoU3RhdHVzEhYKBm9mZnNldBgCIAEoA1IGb2Zmc2V0ItYBCiFPdXRwdXRXaXRoUHJldmlvdXNUcmFuc2FjdGlvbkRhdGESMAoGb3V0cHV0GAEgASgLMhguc3BhcmtfdG9rZW4uVG9rZW5PdXRwdXRSBm91dHB1dBJDChlwcmV2aW91c190cmFuc2FjdGlvbl9oYXNoGAIgASgMQgf6QgR6AmggUhdwcmV2aW91c1RyYW5zYWN0aW9uSGFzaBI6ChlwcmV2aW91c190cmFuc2FjdGlvbl92b3V0GAMgASgNUhdwcmV2aW91c1RyYW5zYWN0aW9uVm91dCLaAQoZUXVlcnlUb2tlbk91dHB1dHNSZXNwb25zZRKCAQomb3V0cHV0c193aXRoX3ByZXZpb3VzX3RyYW5zYWN0aW9uX2RhdGEYASADKAsyLi5zcGFya190b2tlbi5PdXRwdXRXaXRoUHJldmlvdXNUcmFuc2FjdGlvbkRhdGFSIm91dHB1dHNXaXRoUHJldmlvdXNUcmFuc2FjdGlvbkRhdGESOAoNcGFnZV9yZXNwb25zZRgCIAEoCzITLnNwYXJrLlBhZ2VSZXNwb25zZVIMcGFnZVJlc3BvbnNlImQKGFNwZW50VG9rZW5PdXRwdXRNZXRhZGF0YRIbCglvdXRwdXRfaWQYASABKAlSCG91dHB1dElkEisKEXJldm9jYXRpb25fc2VjcmV0GAIgASgMUhByZXZvY2F0aW9uU2VjcmV0Io4BCiRUb2tlblRyYW5zYWN0aW9uQ29uZmlybWF0aW9uTWV0YWRhdGESZgocc3BlbnRfdG9rZW5fb3V0cHV0c19tZXRhZGF0YRgBIAMoCzIlLnNwYXJrX3Rva2VuLlNwZW50VG9rZW5PdXRwdXRNZXRhZGF0YVIZc3BlbnRUb2tlbk91dHB1dHNNZXRhZGF0YSLMAgoaVG9rZW5UcmFuc2FjdGlvbldpdGhTdGF0dXMSSgoRdG9rZW5fdHJhbnNhY3Rpb24YASABKAsyHS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uUhB0b2tlblRyYW5zYWN0aW9uEjsKBnN0YXR1cxgCIAEoDjIjLnNwYXJrX3Rva2VuLlRva2VuVHJhbnNhY3Rpb25TdGF0dXNSBnN0YXR1cxJmChVjb25maXJtYXRpb25fbWV0YWRhdGEYAyABKAsyMS5zcGFya190b2tlbi5Ub2tlblRyYW5zYWN0aW9uQ29uZmlybWF0aW9uTWV0YWRhdGFSFGNvbmZpcm1hdGlvbk1ldGFkYXRhEj0KFnRva2VuX3RyYW5zYWN0aW9uX2hhc2gYBCABKAxCB/pCBHoCaCBSFHRva2VuVHJhbnNhY3Rpb25IYXNoIqwDChNGcmVlemVUb2tlbnNQYXlsb2FkEhgKB3ZlcnNpb24YASABKA1SB3ZlcnNpb24SMQoQb3duZXJfcHVibGljX2tleRgCIAEoDEIH+kIEegJoIVIOb3duZXJQdWJsaWNLZXkSNgoQdG9rZW5fcHVibGljX2tleRgDIAEoDEIH+kIEegJoIUgAUg50b2tlblB1YmxpY0tleYgBARI3ChB0b2tlbl9pZGVudGlmaWVyGAQgASgMQgf6QgR6AmggSAFSD3Rva2VuSWRlbnRpZmllcogBARI6Chlpc3N1ZXJfcHJvdmlkZWRfdGltZXN0YW1wGAUgASgEUhdpc3N1ZXJQcm92aWRlZFRpbWVzdGFtcBJIChxvcGVyYXRvcl9pZGVudGl0eV9wdWJsaWNfa2V5GAYgASgMQgf6QgR6AmghUhlvcGVyYXRvcklkZW50aXR5UHVibGljS2V5EicKD3Nob3VsZF91bmZyZWV6ZRgHIAEoCFIOc2hvdWxkVW5mcmVlemVCEwoRX3Rva2VuX3B1YmxpY19rZXlCEwoRX3Rva2VuX2lkZW50aWZpZXIioQEKE0ZyZWV6ZVRva2Vuc1JlcXVlc3QSVAoVZnJlZXplX3Rva2Vuc19wYXlsb2FkGAEgASgLMiAuc3BhcmtfdG9rZW4uRnJlZXplVG9rZW5zUGF5bG9hZFITZnJlZXplVG9rZW5zUGF5bG9hZBI0ChBpc3N1ZXJfc2lnbmF0dXJlGAIgASgMQgn6QgZ6BBBAGElSD2lzc3VlclNpZ25hdHVyZSKJAQoURnJlZXplVG9rZW5zUmVzcG9uc2USPQoTaW1wYWN0ZWRfb3V0cHV0X2lkcxgBIAMoCUIN+kIKkgEHIgVyA7ABAVIRaW1wYWN0ZWRPdXRwdXRJZHMSMgoVaW1wYWN0ZWRfdG9rZW5fYW1vdW50GAIgASgMUhNpbXBhY3RlZFRva2VuQW1vdW50KqcBChRUb2tlblRyYW5zYWN0aW9uVHlwZRImCiJUT0tFTl9UUkFOU0FDVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodVE9LRU5fVFJBTlNBQ1RJT05fVFlQRV9DUkVBVEUQARIfChtUT0tFTl9UUkFOU0FDVElPTl9UWVBFX01JTlQQAhIjCh9UT0tFTl9UUkFOU0FDVElPTl9UWVBFX1RSQU5TRkVSEAMqUwoMQ29tbWl0U3RhdHVzEhYKEkNPTU1JVF9VTlNQRUNJRklFRBAAEhUKEUNPTU1JVF9QUk9DRVNTSU5HEAESFAoQQ09NTUlUX0ZJTkFMSVpFRBACKoYCChZUb2tlblRyYW5zYWN0aW9uU3RhdHVzEh0KGVRPS0VOX1RSQU5TQUNUSU9OX1NUQVJURUQQABIcChhUT0tFTl9UUkFOU0FDVElPTl9TSUdORUQQARIeChpUT0tFTl9UUkFOU0FDVElPTl9SRVZFQUxFRBAFEh8KG1RPS0VOX1RSQU5TQUNUSU9OX0ZJTkFMSVpFRBACEicKI1RPS0VOX1RSQU5TQUNUSU9OX1NUQVJURURfQ0FOQ0VMTEVEEAMSJgoiVE9LRU5fVFJBTlNBQ1RJT05fU0lHTkVEX0NBTkNFTExFRBAEEh0KGVRPS0VOX1RSQU5TQUNUSU9OX1VOS05PV04QCjLwBQoRU3BhcmtUb2tlblNlcnZpY2USYgoRc3RhcnRfdHJhbnNhY3Rpb24SJC5zcGFya190b2tlbi5TdGFydFRyYW5zYWN0aW9uUmVxdWVzdBolLnNwYXJrX3Rva2VuLlN0YXJ0VHJhbnNhY3Rpb25SZXNwb25zZSIAEmUKEmNvbW1pdF90cmFuc2FjdGlvbhIlLnNwYXJrX3Rva2VuLkNvbW1pdFRyYW5zYWN0aW9uUmVxdWVzdBomLnNwYXJrX3Rva2VuLkNvbW1pdFRyYW5zYWN0aW9uUmVzcG9uc2UiABJpChRxdWVyeV90b2tlbl9tZXRhZGF0YRImLnNwYXJrX3Rva2VuLlF1ZXJ5VG9rZW5NZXRhZGF0YVJlcXVlc3QaJy5zcGFya190b2tlbi5RdWVyeVRva2VuTWV0YWRhdGFSZXNwb25zZSIAEnUKGHF1ZXJ5X3Rva2VuX3RyYW5zYWN0aW9ucxIqLnNwYXJrX3Rva2VuLlF1ZXJ5VG9rZW5UcmFuc2FjdGlvbnNSZXF1ZXN0Gisuc3BhcmtfdG9rZW4uUXVlcnlUb2tlblRyYW5zYWN0aW9uc1Jlc3BvbnNlIgASZgoTcXVlcnlfdG9rZW5fb3V0cHV0cxIlLnNwYXJrX3Rva2VuLlF1ZXJ5VG9rZW5PdXRwdXRzUmVxdWVzdBomLnNwYXJrX3Rva2VuLlF1ZXJ5VG9rZW5PdXRwdXRzUmVzcG9uc2UiABJWCg1mcmVlemVfdG9rZW5zEiAuc3BhcmtfdG9rZW4uRnJlZXplVG9rZW5zUmVxdWVzdBohLnNwYXJrX3Rva2VuLkZyZWV6ZVRva2Vuc1Jlc3BvbnNlIgASbgoVYnJvYWRjYXN0X3RyYW5zYWN0aW9uEiguc3BhcmtfdG9rZW4uQnJvYWRjYXN0VHJhbnNhY3Rpb25SZXF1ZXN0Gikuc3BhcmtfdG9rZW4uQnJvYWRjYXN0VHJhbnNhY3Rpb25SZXNwb25zZSIAQjJaMGdpdGh1Yi5jb20vbGlnaHRzcGFya2Rldi9zcGFyay9wcm90by9zcGFya190b2tlbmIGcHJvdG8zCqUECgptb2NrLnByb3RvEgRtb2NrGhtnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8iQAobQ2xlYW5VcFByZWltYWdlU2hhcmVSZXF1ZXN0EiEKDHBheW1lbnRfaGFzaBgBIAEoDFILcGF5bWVudEhhc2giTQoYVXBkYXRlTm9kZXNTdGF0dXNSZXF1ZXN0EhkKCG5vZGVfaWRzGAEgAygJUgdub2RlSWRzEhYKBnN0YXR1cxgCIAEoCVIGc3RhdHVzIjEKElRyaWdnZXJUYXNrUmVxdWVzdBIbCgl0YXNrX25hbWUYASABKAlSCHRhc2tOYW1lMvoBCgtNb2NrU2VydmljZRJWChdjbGVhbl91cF9wcmVpbWFnZV9zaGFyZRIhLm1vY2suQ2xlYW5VcFByZWltYWdlU2hhcmVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASTwoTdXBkYXRlX25vZGVzX3N0YXR1cxIeLm1vY2suVXBkYXRlTm9kZXNTdGF0dXNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASQgoMdHJpZ2dlcl90YXNrEhgubW9jay5UcmlnZ2VyVGFza1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiAEIrWilnaXRodWIuY29tL2xpZ2h0c3BhcmtkZXYvc3BhcmsvcHJvdG8vbW9ja2IGcHJvdG8zCuoHChFzcGFya19hdXRobi5wcm90bxILc3BhcmtfYXV0aG4ieAoJQ2hhbGxlbmdlEhgKB3ZlcnNpb24YASABKAVSB3ZlcnNpb24SHAoJdGltZXN0YW1wGAIgASgDUgl0aW1lc3RhbXASFAoFbm9uY2UYAyABKAxSBW5vbmNlEh0KCnB1YmxpY19rZXkYBCABKAxSCXB1YmxpY0tleSKFAQoSUHJvdGVjdGVkQ2hhbGxlbmdlEhgKB3ZlcnNpb24YASABKAVSB3ZlcnNpb24SNAoJY2hhbGxlbmdlGAIgASgLMhYuc3BhcmtfYXV0aG4uQ2hhbGxlbmdlUgljaGFsbGVuZ2USHwoLc2VydmVyX2htYWMYAyABKAxSCnNlcnZlckhtYWMiNAoTR2V0Q2hhbGxlbmdlUmVxdWVzdBIdCgpwdWJsaWNfa2V5GAEgASgMUglwdWJsaWNLZXkiaAoUR2V0Q2hhbGxlbmdlUmVzcG9uc2USUAoTcHJvdGVjdGVkX2NoYWxsZW5nZRgBIAEoCzIfLnNwYXJrX2F1dGhuLlByb3RlY3RlZENoYWxsZW5nZVIScHJvdGVjdGVkQ2hhbGxlbmdlIqcBChZWZXJpZnlDaGFsbGVuZ2VSZXF1ZXN0ElAKE3Byb3RlY3RlZF9jaGFsbGVuZ2UYASABKAsyHy5zcGFya19hdXRobi5Qcm90ZWN0ZWRDaGFsbGVuZ2VSEnByb3RlY3RlZENoYWxsZW5nZRIcCglzaWduYXR1cmUYAiABKAxSCXNpZ25hdHVyZRIdCgpwdWJsaWNfa2V5GAMgASgMUglwdWJsaWNLZXkicQoXVmVyaWZ5Q2hhbGxlbmdlUmVzcG9uc2USIwoNc2Vzc2lvbl90b2tlbhgBIAEoCVIMc2Vzc2lvblRva2VuEjEKFGV4cGlyYXRpb25fdGltZXN0YW1wGAIgASgDUhNleHBpcmF0aW9uVGltZXN0YW1wMswBChFTcGFya0F1dGhuU2VydmljZRJWCg1nZXRfY2hhbGxlbmdlEiAuc3BhcmtfYXV0aG4uR2V0Q2hhbGxlbmdlUmVxdWVzdBohLnNwYXJrX2F1dGhuLkdldENoYWxsZW5nZVJlc3BvbnNlIgASXwoQdmVyaWZ5X2NoYWxsZW5nZRIjLnNwYXJrX2F1dGhuLlZlcmlmeUNoYWxsZW5nZVJlcXVlc3QaJC5zcGFya19hdXRobi5WZXJpZnlDaGFsbGVuZ2VSZXNwb25zZSIAQjJaMGdpdGh1Yi5jb20vbGlnaHRzcGFya2Rldi9zcGFyay9wcm90by9zcGFya19hdXRobmIGcHJvdG8z";
|
|
28984
26976
|
function getSparkDescriptorBytes() {
|
|
28985
26977
|
const binaryString = atob(SPARK_DESCRIPTORS_BASE64);
|
|
28986
26978
|
const bytes = new Uint8Array(binaryString.length);
|
|
@@ -29006,7 +26998,6 @@ function getRegistry() {
|
|
|
29006
26998
|
return _registry;
|
|
29007
26999
|
}
|
|
29008
27000
|
try {
|
|
29009
|
-
console.log("Loading embedded protobuf descriptors...");
|
|
29010
27001
|
const descriptorBytes = getSparkDescriptorBytes();
|
|
29011
27002
|
const descriptorSet = FileDescriptorSet.decode(descriptorBytes);
|
|
29012
27003
|
_registry = {
|
|
@@ -29015,7 +27006,6 @@ function getRegistry() {
|
|
|
29015
27006
|
messageMap: /* @__PURE__ */ new Map()
|
|
29016
27007
|
};
|
|
29017
27008
|
for (const fileDescriptor of descriptorSet.file) {
|
|
29018
|
-
console.log(`Processing proto file: ${fileDescriptor.name}`);
|
|
29019
27009
|
_registry.fileMap.set(fileDescriptor.name, fileDescriptor);
|
|
29020
27010
|
if (fileDescriptor.messageType) {
|
|
29021
27011
|
for (const messageDescriptor of fileDescriptor.messageType) {
|
|
@@ -30609,52 +28599,11 @@ function sortInvoiceAttachments(attachments) {
|
|
|
30609
28599
|
if (!attachments || attachments.length === 0) {
|
|
30610
28600
|
return attachments;
|
|
30611
28601
|
}
|
|
30612
|
-
|
|
30613
|
-
|
|
30614
|
-
const
|
|
30615
|
-
|
|
30616
|
-
throw new SparkValidationError(
|
|
30617
|
-
`invoice attachment at index ${i} cannot be null`,
|
|
30618
|
-
{
|
|
30619
|
-
field: `invoiceAttachments[${i}]`,
|
|
30620
|
-
index: i
|
|
30621
|
-
}
|
|
30622
|
-
);
|
|
30623
|
-
}
|
|
30624
|
-
const invoice = attachment.sparkInvoice;
|
|
30625
|
-
let idBytes;
|
|
30626
|
-
try {
|
|
30627
|
-
const decoded = import_base6.bech32m.decode(invoice, 500);
|
|
30628
|
-
const payload = SparkAddress.decode(import_base6.bech32m.fromWords(decoded.words));
|
|
30629
|
-
if (!payload.sparkInvoiceFields || !payload.sparkInvoiceFields.id) {
|
|
30630
|
-
throw new Error("missing spark invoice fields or id");
|
|
30631
|
-
}
|
|
30632
|
-
idBytes = payload.sparkInvoiceFields.id;
|
|
30633
|
-
} catch (err) {
|
|
30634
|
-
throw new SparkValidationError(`invalid invoice at ${i}`, {
|
|
30635
|
-
field: `invoiceAttachments[${i}].sparkInvoice`,
|
|
30636
|
-
index: i,
|
|
30637
|
-
value: invoice,
|
|
30638
|
-
error: err
|
|
30639
|
-
});
|
|
30640
|
-
}
|
|
30641
|
-
if (!idBytes || idBytes.length !== 16) {
|
|
30642
|
-
throw new SparkValidationError(`invalid invoice id at ${i}`, {
|
|
30643
|
-
field: `invoiceAttachments[${i}].sparkInvoice`,
|
|
30644
|
-
index: i
|
|
30645
|
-
});
|
|
30646
|
-
}
|
|
30647
|
-
keyed.push({ id: idBytes, attachment });
|
|
30648
|
-
}
|
|
30649
|
-
keyed.sort((a, b) => {
|
|
30650
|
-
for (let j = 0; j < a.id.length && j < b.id.length; j++) {
|
|
30651
|
-
const av = a.id[j];
|
|
30652
|
-
const bv = b.id[j];
|
|
30653
|
-
if (av !== bv) return av - bv;
|
|
30654
|
-
}
|
|
30655
|
-
return a.id.length - b.id.length;
|
|
28602
|
+
return [...attachments].sort((a, b) => {
|
|
28603
|
+
const invoiceA = a.sparkInvoice;
|
|
28604
|
+
const invoiceB = b.sparkInvoice;
|
|
28605
|
+
return invoiceA < invoiceB ? -1 : invoiceA > invoiceB ? 1 : 0;
|
|
30656
28606
|
});
|
|
30657
|
-
return keyed.map((k) => k.attachment);
|
|
30658
28607
|
}
|
|
30659
28608
|
async function hashPartialTokenTransaction(partialTokenTransaction) {
|
|
30660
28609
|
if (!partialTokenTransaction) {
|
|
@@ -32398,6 +30347,31 @@ var UserRequest3 = `
|
|
|
32398
30347
|
`;
|
|
32399
30348
|
|
|
32400
30349
|
// src/graphql/client.ts
|
|
30350
|
+
var RETRYABLE_STATUS_CODES = /* @__PURE__ */ new Set([
|
|
30351
|
+
502,
|
|
30352
|
+
// Bad Gateway
|
|
30353
|
+
503,
|
|
30354
|
+
// Service Unavailable
|
|
30355
|
+
504
|
|
30356
|
+
// Gateway Timeout
|
|
30357
|
+
]);
|
|
30358
|
+
function createRetryFetch(baseFetch, maxRetries = 5, baseDelayMs = 1e3) {
|
|
30359
|
+
return async (input, init) => {
|
|
30360
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
30361
|
+
const response = await baseFetch(input, init);
|
|
30362
|
+
if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < maxRetries) {
|
|
30363
|
+
const delay = Math.min(baseDelayMs * Math.pow(2, attempt), 1e4);
|
|
30364
|
+
console.warn(
|
|
30365
|
+
`[SspClient] HTTP ${response.status} (attempt ${attempt + 1}/${maxRetries + 1}), retrying in ${delay}ms`
|
|
30366
|
+
);
|
|
30367
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
30368
|
+
continue;
|
|
30369
|
+
}
|
|
30370
|
+
return response;
|
|
30371
|
+
}
|
|
30372
|
+
throw new Error("Retry loop exited unexpectedly");
|
|
30373
|
+
};
|
|
30374
|
+
}
|
|
32401
30375
|
var SspClient = class {
|
|
32402
30376
|
requester;
|
|
32403
30377
|
signer;
|
|
@@ -32408,6 +30382,7 @@ var SspClient = class {
|
|
|
32408
30382
|
this.authProvider = new SparkAuthProvider();
|
|
32409
30383
|
const { fetch } = getFetch();
|
|
32410
30384
|
const options = config.sspClientOptions;
|
|
30385
|
+
const retryFetch = createRetryFetch(fetch);
|
|
32411
30386
|
this.requester = new import_core12.Requester(
|
|
32412
30387
|
new import_core12.NodeKeyCache(import_core12.DefaultCrypto),
|
|
32413
30388
|
options.schemaEndpoint || `graphql/spark/2025-03-19`,
|
|
@@ -32416,7 +30391,7 @@ var SspClient = class {
|
|
|
32416
30391
|
options.baseUrl,
|
|
32417
30392
|
import_core12.DefaultCrypto,
|
|
32418
30393
|
void 0,
|
|
32419
|
-
|
|
30394
|
+
retryFetch
|
|
32420
30395
|
);
|
|
32421
30396
|
}
|
|
32422
30397
|
async executeRawQuery(query, needsAuth = true) {
|
|
@@ -33363,22 +31338,24 @@ var BaseTransferService = class {
|
|
|
33363
31338
|
signingCommitments.signingCommitments.slice(2 * leaves.length)
|
|
33364
31339
|
);
|
|
33365
31340
|
const sparkFrost2 = getSparkFrost();
|
|
33366
|
-
const
|
|
33367
|
-
|
|
33368
|
-
|
|
33369
|
-
|
|
33370
|
-
|
|
33371
|
-
|
|
33372
|
-
|
|
33373
|
-
|
|
33374
|
-
|
|
33375
|
-
|
|
33376
|
-
|
|
33377
|
-
|
|
33378
|
-
|
|
33379
|
-
|
|
33380
|
-
|
|
33381
|
-
|
|
31341
|
+
const encryptedKeyTweaksEntries = await Promise.all(
|
|
31342
|
+
Array.from(keyTweakInputMap.entries()).map(async ([key, value]) => {
|
|
31343
|
+
const protoToEncrypt = {
|
|
31344
|
+
leavesToSend: value
|
|
31345
|
+
};
|
|
31346
|
+
const protoToEncryptBinary = SendLeafKeyTweaks.encode(protoToEncrypt).finish();
|
|
31347
|
+
const operator = this.config.getSigningOperators()[key];
|
|
31348
|
+
if (!operator) {
|
|
31349
|
+
throw new SparkValidationError("Operator not found");
|
|
31350
|
+
}
|
|
31351
|
+
const encryptedProto = await sparkFrost2.encryptEcies(
|
|
31352
|
+
protoToEncryptBinary,
|
|
31353
|
+
(0, import_utils21.hexToBytes)(operator.identityPublicKey)
|
|
31354
|
+
);
|
|
31355
|
+
return [key, Uint8Array.from(encryptedProto)];
|
|
31356
|
+
})
|
|
31357
|
+
);
|
|
31358
|
+
const encryptedKeyTweaks = Object.fromEntries(encryptedKeyTweaksEntries);
|
|
33382
31359
|
const transferPackage = {
|
|
33383
31360
|
leavesToSend: cpfpLeafSigningJobs,
|
|
33384
31361
|
keyTweakPackage: encryptedKeyTweaks,
|
|
@@ -33424,22 +31401,24 @@ var BaseTransferService = class {
|
|
|
33424
31401
|
paymentHash
|
|
33425
31402
|
);
|
|
33426
31403
|
const sparkFrost2 = getSparkFrost();
|
|
33427
|
-
const
|
|
33428
|
-
|
|
33429
|
-
|
|
33430
|
-
|
|
33431
|
-
|
|
33432
|
-
|
|
33433
|
-
|
|
33434
|
-
|
|
33435
|
-
|
|
33436
|
-
|
|
33437
|
-
|
|
33438
|
-
|
|
33439
|
-
|
|
33440
|
-
|
|
33441
|
-
|
|
33442
|
-
|
|
31404
|
+
const encryptedKeyTweaksEntries = await Promise.all(
|
|
31405
|
+
Array.from(keyTweakInputMap.entries()).map(async ([key, value]) => {
|
|
31406
|
+
const protoToEncrypt = {
|
|
31407
|
+
leavesToSend: value
|
|
31408
|
+
};
|
|
31409
|
+
const protoToEncryptBinary = SendLeafKeyTweaks.encode(protoToEncrypt).finish();
|
|
31410
|
+
const operator = this.config.getSigningOperators()[key];
|
|
31411
|
+
if (!operator) {
|
|
31412
|
+
throw new SparkValidationError("Operator not found");
|
|
31413
|
+
}
|
|
31414
|
+
const encryptedProto = await sparkFrost2.encryptEcies(
|
|
31415
|
+
protoToEncryptBinary,
|
|
31416
|
+
(0, import_utils21.hexToBytes)(operator.identityPublicKey)
|
|
31417
|
+
);
|
|
31418
|
+
return [key, Uint8Array.from(encryptedProto)];
|
|
31419
|
+
})
|
|
31420
|
+
);
|
|
31421
|
+
const encryptedKeyTweaks = Object.fromEntries(encryptedKeyTweaksEntries);
|
|
33443
31422
|
const transferPackage = {
|
|
33444
31423
|
leavesToSend: cpfpLeafSigningJobs,
|
|
33445
31424
|
keyTweakPackage: encryptedKeyTweaks,
|
|
@@ -33566,19 +31545,25 @@ var BaseTransferService = class {
|
|
|
33566
31545
|
}
|
|
33567
31546
|
async prepareSendTransferKeyTweaks(transferID, receiverIdentityPubkey, leaves, cpfpRefundSignatureMap, directRefundSignatureMap, directFromCpfpRefundSignatureMap) {
|
|
33568
31547
|
const leavesTweaksMap = /* @__PURE__ */ new Map();
|
|
33569
|
-
|
|
33570
|
-
|
|
33571
|
-
|
|
33572
|
-
|
|
33573
|
-
|
|
33574
|
-
|
|
33575
|
-
leaf
|
|
33576
|
-
|
|
33577
|
-
|
|
33578
|
-
|
|
33579
|
-
|
|
33580
|
-
|
|
33581
|
-
|
|
31548
|
+
const results = await Promise.all(
|
|
31549
|
+
leaves.map(async (leaf) => {
|
|
31550
|
+
const cpfpRefundSignature = cpfpRefundSignatureMap.get(leaf.leaf.id);
|
|
31551
|
+
const directRefundSignature = directRefundSignatureMap.get(
|
|
31552
|
+
leaf.leaf.id
|
|
31553
|
+
);
|
|
31554
|
+
const directFromCpfpRefundSignature = directFromCpfpRefundSignatureMap.get(leaf.leaf.id);
|
|
31555
|
+
return await this.prepareSingleSendTransferKeyTweak(
|
|
31556
|
+
transferID,
|
|
31557
|
+
leaf,
|
|
31558
|
+
receiverIdentityPubkey,
|
|
31559
|
+
cpfpRefundSignature,
|
|
31560
|
+
directRefundSignature,
|
|
31561
|
+
directFromCpfpRefundSignature
|
|
31562
|
+
);
|
|
31563
|
+
})
|
|
31564
|
+
);
|
|
31565
|
+
for (const result of results) {
|
|
31566
|
+
for (const [identifier, leafTweak] of result) {
|
|
33582
31567
|
leavesTweaksMap.set(identifier, [
|
|
33583
31568
|
...leavesTweaksMap.get(identifier) || [],
|
|
33584
31569
|
leafTweak
|
|
@@ -33663,15 +31648,10 @@ var TransferService = class extends BaseTransferService {
|
|
|
33663
31648
|
super(config, connectionManager, signingService);
|
|
33664
31649
|
}
|
|
33665
31650
|
async claimTransfer(transfer, leaves) {
|
|
33666
|
-
let proofMap;
|
|
33667
31651
|
if (transfer.status === 2 /* TRANSFER_STATUS_SENDER_KEY_TWEAKED */) {
|
|
33668
|
-
|
|
31652
|
+
await this.claimTransferTweakKeys(transfer, leaves);
|
|
33669
31653
|
}
|
|
33670
|
-
const signatures = await this.claimTransferSignRefunds(
|
|
33671
|
-
transfer,
|
|
33672
|
-
leaves,
|
|
33673
|
-
proofMap
|
|
33674
|
-
);
|
|
31654
|
+
const signatures = await this.claimTransferSignRefunds(transfer, leaves);
|
|
33675
31655
|
return await this.finalizeNodeSignatures(signatures);
|
|
33676
31656
|
}
|
|
33677
31657
|
// When transferIds is not provided, all pending transfers for the receiver will be returned.
|
|
@@ -33722,31 +31702,33 @@ var TransferService = class extends BaseTransferService {
|
|
|
33722
31702
|
}
|
|
33723
31703
|
async verifyPendingTransfer(transfer) {
|
|
33724
31704
|
const leafPubKeyMap = /* @__PURE__ */ new Map();
|
|
33725
|
-
|
|
33726
|
-
|
|
33727
|
-
|
|
33728
|
-
|
|
33729
|
-
|
|
33730
|
-
|
|
33731
|
-
|
|
33732
|
-
|
|
33733
|
-
|
|
33734
|
-
|
|
33735
|
-
|
|
33736
|
-
|
|
33737
|
-
|
|
33738
|
-
|
|
33739
|
-
|
|
33740
|
-
|
|
33741
|
-
|
|
33742
|
-
|
|
33743
|
-
|
|
33744
|
-
|
|
33745
|
-
|
|
33746
|
-
|
|
33747
|
-
|
|
33748
|
-
|
|
33749
|
-
|
|
31705
|
+
await Promise.all(
|
|
31706
|
+
transfer.leaves.map(async (leaf) => {
|
|
31707
|
+
if (!leaf.leaf) {
|
|
31708
|
+
throw new Error("Leaf is undefined");
|
|
31709
|
+
}
|
|
31710
|
+
const encoder = new TextEncoder();
|
|
31711
|
+
const leafIdBytes = encoder.encode(leaf.leaf.id);
|
|
31712
|
+
const transferIdBytes = encoder.encode(transfer.id);
|
|
31713
|
+
const payload = new Uint8Array([
|
|
31714
|
+
...leafIdBytes,
|
|
31715
|
+
...transferIdBytes,
|
|
31716
|
+
...leaf.secretCipher
|
|
31717
|
+
]);
|
|
31718
|
+
const payloadHash = (0, import_sha212.sha256)(payload);
|
|
31719
|
+
if (!import_secp256k112.secp256k1.verify(
|
|
31720
|
+
leaf.signature,
|
|
31721
|
+
payloadHash,
|
|
31722
|
+
transfer.senderIdentityPublicKey
|
|
31723
|
+
)) {
|
|
31724
|
+
throw new Error("Signature verification failed");
|
|
31725
|
+
}
|
|
31726
|
+
const leafSecret = await this.config.signer.decryptEcies(
|
|
31727
|
+
leaf.secretCipher
|
|
31728
|
+
);
|
|
31729
|
+
leafPubKeyMap.set(leaf.leaf.id, leafSecret);
|
|
31730
|
+
})
|
|
31731
|
+
);
|
|
33750
31732
|
return leafPubKeyMap;
|
|
33751
31733
|
}
|
|
33752
31734
|
async queryTransfer(transferId) {
|
|
@@ -33808,29 +31790,31 @@ var TransferService = class extends BaseTransferService {
|
|
|
33808
31790
|
async sendTransferSignRefundInternal(leaves, receiverIdentityPubkey, expiryTime, forSwap) {
|
|
33809
31791
|
const transferId = (0, import_uuidv72.uuidv7)();
|
|
33810
31792
|
const leafDataMap = /* @__PURE__ */ new Map();
|
|
33811
|
-
|
|
33812
|
-
|
|
33813
|
-
|
|
33814
|
-
|
|
33815
|
-
|
|
33816
|
-
|
|
33817
|
-
|
|
33818
|
-
|
|
33819
|
-
|
|
33820
|
-
|
|
33821
|
-
|
|
33822
|
-
|
|
33823
|
-
|
|
33824
|
-
|
|
33825
|
-
|
|
33826
|
-
|
|
33827
|
-
|
|
33828
|
-
|
|
33829
|
-
|
|
33830
|
-
|
|
33831
|
-
|
|
33832
|
-
|
|
33833
|
-
|
|
31793
|
+
await Promise.all(
|
|
31794
|
+
leaves.map(async (leaf) => {
|
|
31795
|
+
const signingNonceCommitment = await this.config.signer.getRandomSigningCommitment();
|
|
31796
|
+
const directSigningNonceCommitment = await this.config.signer.getRandomSigningCommitment();
|
|
31797
|
+
const directFromCpfpRefundSigningNonceCommitment = await this.config.signer.getRandomSigningCommitment();
|
|
31798
|
+
const tx = getTxFromRawTxBytes(leaf.leaf.nodeTx);
|
|
31799
|
+
const refundTx = getTxFromRawTxBytes(leaf.leaf.refundTx);
|
|
31800
|
+
const directTx = leaf.leaf.directTx.length > 0 ? getTxFromRawTxBytes(leaf.leaf.directTx) : void 0;
|
|
31801
|
+
const directRefundTx = leaf.leaf.directRefundTx.length > 0 ? getTxFromRawTxBytes(leaf.leaf.directRefundTx) : void 0;
|
|
31802
|
+
const directFromCpfpRefundTx = leaf.leaf.directFromCpfpRefundTx.length > 0 ? getTxFromRawTxBytes(leaf.leaf.directFromCpfpRefundTx) : void 0;
|
|
31803
|
+
leafDataMap.set(leaf.leaf.id, {
|
|
31804
|
+
keyDerivation: leaf.keyDerivation,
|
|
31805
|
+
receivingPubkey: receiverIdentityPubkey,
|
|
31806
|
+
signingNonceCommitment,
|
|
31807
|
+
directSigningNonceCommitment,
|
|
31808
|
+
tx,
|
|
31809
|
+
directTx,
|
|
31810
|
+
refundTx,
|
|
31811
|
+
directRefundTx,
|
|
31812
|
+
directFromCpfpRefundTx,
|
|
31813
|
+
directFromCpfpRefundSigningNonceCommitment,
|
|
31814
|
+
vout: leaf.leaf.vout
|
|
31815
|
+
});
|
|
31816
|
+
})
|
|
31817
|
+
);
|
|
33834
31818
|
const signingJobs = await this.prepareRefundSoSigningJobs(
|
|
33835
31819
|
leaves,
|
|
33836
31820
|
leafDataMap
|
|
@@ -33892,65 +31876,71 @@ var TransferService = class extends BaseTransferService {
|
|
|
33892
31876
|
}
|
|
33893
31877
|
async prepareRefundSoSigningJobs(leaves, leafDataMap, isForClaim) {
|
|
33894
31878
|
const signingJobs = [];
|
|
33895
|
-
|
|
33896
|
-
|
|
33897
|
-
|
|
33898
|
-
|
|
33899
|
-
|
|
33900
|
-
|
|
33901
|
-
|
|
33902
|
-
|
|
33903
|
-
|
|
33904
|
-
|
|
33905
|
-
|
|
33906
|
-
|
|
33907
|
-
|
|
33908
|
-
|
|
33909
|
-
|
|
33910
|
-
|
|
33911
|
-
|
|
33912
|
-
|
|
33913
|
-
|
|
33914
|
-
|
|
33915
|
-
|
|
33916
|
-
|
|
33917
|
-
|
|
33918
|
-
|
|
33919
|
-
|
|
33920
|
-
|
|
33921
|
-
|
|
33922
|
-
|
|
33923
|
-
|
|
33924
|
-
|
|
33925
|
-
|
|
33926
|
-
|
|
33927
|
-
|
|
33928
|
-
|
|
33929
|
-
refundSigningData.
|
|
33930
|
-
|
|
33931
|
-
|
|
33932
|
-
|
|
33933
|
-
|
|
33934
|
-
|
|
33935
|
-
|
|
33936
|
-
|
|
33937
|
-
|
|
33938
|
-
|
|
33939
|
-
|
|
33940
|
-
|
|
33941
|
-
|
|
33942
|
-
|
|
33943
|
-
|
|
33944
|
-
|
|
33945
|
-
|
|
33946
|
-
|
|
33947
|
-
|
|
33948
|
-
|
|
31879
|
+
const results = await Promise.all(
|
|
31880
|
+
leaves.map(async (leaf) => {
|
|
31881
|
+
const refundSigningData = leafDataMap.get(leaf.leaf.id);
|
|
31882
|
+
if (!refundSigningData) {
|
|
31883
|
+
throw new Error(`Leaf data not found for leaf ${leaf.leaf.id}`);
|
|
31884
|
+
}
|
|
31885
|
+
const nodeTx = getTxFromRawTxBytes(leaf.leaf.nodeTx);
|
|
31886
|
+
let directNodeTx;
|
|
31887
|
+
if (leaf.leaf.directTx.length > 0) {
|
|
31888
|
+
directNodeTx = getTxFromRawTxBytes(leaf.leaf.directTx);
|
|
31889
|
+
}
|
|
31890
|
+
const currRefundTx = getTxFromRawTxBytes(leaf.leaf.refundTx);
|
|
31891
|
+
const currentSequence = currRefundTx.getInput(0).sequence;
|
|
31892
|
+
if (!currentSequence) {
|
|
31893
|
+
throw new SparkValidationError("Invalid refund transaction", {
|
|
31894
|
+
field: "sequence",
|
|
31895
|
+
value: currRefundTx.getInput(0),
|
|
31896
|
+
expected: "Non-null sequence"
|
|
31897
|
+
});
|
|
31898
|
+
}
|
|
31899
|
+
const refundTxsParams = {
|
|
31900
|
+
nodeTx,
|
|
31901
|
+
directNodeTx,
|
|
31902
|
+
sequence: currentSequence,
|
|
31903
|
+
receivingPubkey: refundSigningData.receivingPubkey,
|
|
31904
|
+
network: this.config.getNetwork()
|
|
31905
|
+
};
|
|
31906
|
+
const { cpfpRefundTx, directRefundTx, directFromCpfpRefundTx } = isForClaim ? createCurrentTimelockRefundTxs(refundTxsParams) : createDecrementedTimelockRefundTxs(refundTxsParams);
|
|
31907
|
+
const isZeroNode = !getCurrentTimelock(nodeTx.getInput(0).sequence);
|
|
31908
|
+
refundSigningData.refundTx = cpfpRefundTx;
|
|
31909
|
+
refundSigningData.directRefundTx = directRefundTx && !isZeroNode ? directRefundTx : void 0;
|
|
31910
|
+
refundSigningData.directFromCpfpRefundTx = directFromCpfpRefundTx;
|
|
31911
|
+
const cpfpRefundNonceCommitmentProto = refundSigningData.signingNonceCommitment;
|
|
31912
|
+
const directRefundNonceCommitmentProto = refundSigningData.directSigningNonceCommitment;
|
|
31913
|
+
const directFromCpfpRefundNonceCommitmentProto = refundSigningData.directFromCpfpRefundSigningNonceCommitment;
|
|
31914
|
+
const signingPublicKey = await this.config.signer.getPublicKeyFromDerivation(
|
|
31915
|
+
refundSigningData.keyDerivation
|
|
31916
|
+
);
|
|
31917
|
+
return {
|
|
31918
|
+
leafId: leaf.leaf.id,
|
|
31919
|
+
refundTxSigningJob: {
|
|
31920
|
+
signingPublicKey,
|
|
31921
|
+
rawTx: cpfpRefundTx.toBytes(),
|
|
31922
|
+
signingNonceCommitment: cpfpRefundNonceCommitmentProto.commitment
|
|
31923
|
+
},
|
|
31924
|
+
directRefundTxSigningJob: directRefundTx && !isZeroNode ? {
|
|
31925
|
+
signingPublicKey,
|
|
31926
|
+
rawTx: directRefundTx.toBytes(),
|
|
31927
|
+
signingNonceCommitment: directRefundNonceCommitmentProto.commitment
|
|
31928
|
+
} : void 0,
|
|
31929
|
+
directFromCpfpRefundTxSigningJob: directFromCpfpRefundTx ? {
|
|
31930
|
+
signingPublicKey,
|
|
31931
|
+
rawTx: directFromCpfpRefundTx.toBytes(),
|
|
31932
|
+
signingNonceCommitment: directFromCpfpRefundNonceCommitmentProto.commitment
|
|
31933
|
+
} : void 0
|
|
31934
|
+
};
|
|
31935
|
+
})
|
|
31936
|
+
);
|
|
31937
|
+
for (const result of results) {
|
|
31938
|
+
signingJobs.push(result);
|
|
33949
31939
|
}
|
|
33950
31940
|
return signingJobs;
|
|
33951
31941
|
}
|
|
33952
31942
|
async claimTransferTweakKeys(transfer, leaves) {
|
|
33953
|
-
const
|
|
31943
|
+
const leavesTweaksMap = await this.prepareClaimLeavesKeyTweaks(leaves);
|
|
33954
31944
|
const errors = [];
|
|
33955
31945
|
const promises = Object.entries(this.config.getSigningOperators()).map(
|
|
33956
31946
|
async ([identifier, operator]) => {
|
|
@@ -33988,14 +31978,13 @@ var TransferService = class extends BaseTransferService {
|
|
|
33988
31978
|
if (errors.length > 0) {
|
|
33989
31979
|
throw errors[0];
|
|
33990
31980
|
}
|
|
33991
|
-
return proofMap;
|
|
33992
31981
|
}
|
|
33993
31982
|
async prepareClaimLeavesKeyTweaks(leaves) {
|
|
33994
31983
|
const leafDataMap = /* @__PURE__ */ new Map();
|
|
33995
|
-
const
|
|
33996
|
-
|
|
33997
|
-
|
|
33998
|
-
|
|
31984
|
+
const results = await Promise.all(
|
|
31985
|
+
leaves.map((leaf) => this.prepareClaimLeafKeyTweaks(leaf))
|
|
31986
|
+
);
|
|
31987
|
+
for (const { leafKeyTweaks: leafData } of results) {
|
|
33999
31988
|
for (const [identifier, leafTweak] of leafData) {
|
|
34000
31989
|
leafDataMap.set(identifier, [
|
|
34001
31990
|
...leafDataMap.get(identifier) || [],
|
|
@@ -34003,7 +31992,7 @@ var TransferService = class extends BaseTransferService {
|
|
|
34003
31992
|
]);
|
|
34004
31993
|
}
|
|
34005
31994
|
}
|
|
34006
|
-
return
|
|
31995
|
+
return leafDataMap;
|
|
34007
31996
|
}
|
|
34008
31997
|
async prepareClaimLeafKeyTweaks(leaf) {
|
|
34009
31998
|
const signingOperators = this.config.getSigningOperators();
|
|
@@ -34050,24 +32039,26 @@ var TransferService = class extends BaseTransferService {
|
|
|
34050
32039
|
}
|
|
34051
32040
|
return { leafKeyTweaks: leafTweaksMap, proofs: shares[0].proofs };
|
|
34052
32041
|
}
|
|
34053
|
-
async claimTransferSignRefunds(transfer, leafKeys
|
|
32042
|
+
async claimTransferSignRefunds(transfer, leafKeys) {
|
|
34054
32043
|
const leafDataMap = /* @__PURE__ */ new Map();
|
|
34055
|
-
|
|
34056
|
-
|
|
34057
|
-
|
|
34058
|
-
|
|
34059
|
-
|
|
34060
|
-
|
|
34061
|
-
|
|
34062
|
-
|
|
34063
|
-
|
|
34064
|
-
|
|
34065
|
-
|
|
34066
|
-
|
|
34067
|
-
|
|
34068
|
-
|
|
34069
|
-
|
|
34070
|
-
|
|
32044
|
+
await Promise.all(
|
|
32045
|
+
leafKeys.map(async (leafKey) => {
|
|
32046
|
+
const tx = getTxFromRawTxBytes(leafKey.leaf.nodeTx);
|
|
32047
|
+
const directTx = leafKey.leaf.directTx.length > 0 ? getTxFromRawTxBytes(leafKey.leaf.directTx) : void 0;
|
|
32048
|
+
leafDataMap.set(leafKey.leaf.id, {
|
|
32049
|
+
keyDerivation: leafKey.newKeyDerivation,
|
|
32050
|
+
receivingPubkey: await this.config.signer.getPublicKeyFromDerivation(
|
|
32051
|
+
leafKey.newKeyDerivation
|
|
32052
|
+
),
|
|
32053
|
+
signingNonceCommitment: await this.config.signer.getRandomSigningCommitment(),
|
|
32054
|
+
directSigningNonceCommitment: await this.config.signer.getRandomSigningCommitment(),
|
|
32055
|
+
directFromCpfpRefundSigningNonceCommitment: await this.config.signer.getRandomSigningCommitment(),
|
|
32056
|
+
tx,
|
|
32057
|
+
directTx,
|
|
32058
|
+
vout: leafKey.leaf.vout
|
|
32059
|
+
});
|
|
32060
|
+
})
|
|
32061
|
+
);
|
|
34071
32062
|
const signingJobs = await this.prepareRefundSoSigningJobs(
|
|
34072
32063
|
leafKeys,
|
|
34073
32064
|
leafDataMap,
|
|
@@ -34077,14 +32068,6 @@ var TransferService = class extends BaseTransferService {
|
|
|
34077
32068
|
this.config.getCoordinatorAddress()
|
|
34078
32069
|
);
|
|
34079
32070
|
let resp;
|
|
34080
|
-
const secretProofMap = {};
|
|
34081
|
-
if (proofMap) {
|
|
34082
|
-
for (const [leafId, proof] of proofMap.entries()) {
|
|
34083
|
-
secretProofMap[leafId] = {
|
|
34084
|
-
proofs: proof
|
|
34085
|
-
};
|
|
34086
|
-
}
|
|
34087
|
-
}
|
|
34088
32071
|
try {
|
|
34089
32072
|
resp = await sparkClient.claim_transfer_sign_refunds_v2({
|
|
34090
32073
|
transferId: transfer.id,
|
|
@@ -34659,9 +32642,7 @@ var CoopExitService = class extends BaseTransferService {
|
|
|
34659
32642
|
const signingJob = {
|
|
34660
32643
|
leafId: leaf.leaf.id,
|
|
34661
32644
|
refundTxSigningJob: {
|
|
34662
|
-
signingPublicKey
|
|
34663
|
-
leaf.keyDerivation
|
|
34664
|
-
),
|
|
32645
|
+
signingPublicKey,
|
|
34665
32646
|
rawTx: cpfpRefundTx.toBytes(),
|
|
34666
32647
|
signingNonceCommitment: signingNonceCommitment.commitment
|
|
34667
32648
|
},
|
|
@@ -34712,13 +32693,13 @@ var CoopExitService = class extends BaseTransferService {
|
|
|
34712
32693
|
});
|
|
34713
32694
|
} catch (error) {
|
|
34714
32695
|
throw new SparkRequestError("Failed to initiate cooperative exit", {
|
|
34715
|
-
operation: "
|
|
32696
|
+
operation: "cooperative_exit_v2",
|
|
34716
32697
|
error
|
|
34717
32698
|
});
|
|
34718
32699
|
}
|
|
34719
32700
|
if (!response.transfer) {
|
|
34720
32701
|
throw new SparkRequestError("Failed to initiate cooperative exit", {
|
|
34721
|
-
operation: "
|
|
32702
|
+
operation: "cooperative_exit_v2",
|
|
34722
32703
|
error: new Error("No transfer in response")
|
|
34723
32704
|
});
|
|
34724
32705
|
}
|
|
@@ -35037,7 +33018,7 @@ var LightningService = class {
|
|
|
35037
33018
|
});
|
|
35038
33019
|
} catch (error) {
|
|
35039
33020
|
throw new SparkRequestError("Failed to initiate preimage swap", {
|
|
35040
|
-
operation: "
|
|
33021
|
+
operation: "initiate_preimage_swap_v3",
|
|
35041
33022
|
error
|
|
35042
33023
|
});
|
|
35043
33024
|
}
|
|
@@ -35116,12 +33097,13 @@ var SigningService = class {
|
|
|
35116
33097
|
expected: "Non-null signing commitments"
|
|
35117
33098
|
});
|
|
35118
33099
|
}
|
|
33100
|
+
const publicKey = await this.config.signer.getPublicKeyFromDerivation(
|
|
33101
|
+
leaf.keyDerivation
|
|
33102
|
+
);
|
|
35119
33103
|
const signingResult = await this.config.signer.signFrost({
|
|
35120
33104
|
message: sighash,
|
|
35121
33105
|
keyDerivation: leaf.keyDerivation,
|
|
35122
|
-
publicKey
|
|
35123
|
-
leaf.keyDerivation
|
|
35124
|
-
),
|
|
33106
|
+
publicKey,
|
|
35125
33107
|
selfCommitment: signingCommitment,
|
|
35126
33108
|
statechainCommitments: signingCommitments,
|
|
35127
33109
|
adaptorPubKey: new Uint8Array(),
|
|
@@ -35129,9 +33111,7 @@ var SigningService = class {
|
|
|
35129
33111
|
});
|
|
35130
33112
|
leafSigningJobs.push({
|
|
35131
33113
|
leafId: leaf.leaf.id,
|
|
35132
|
-
signingPublicKey:
|
|
35133
|
-
leaf.keyDerivation
|
|
35134
|
-
),
|
|
33114
|
+
signingPublicKey: publicKey,
|
|
35135
33115
|
rawTx: refundTx.toBytes(),
|
|
35136
33116
|
signingNonceCommitment: signingCommitment.commitment,
|
|
35137
33117
|
userSignature: signingResult,
|
|
@@ -39529,7 +37509,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
39529
37509
|
* @param tokenIdentifiers - Optional array of token identifiers to filter by
|
|
39530
37510
|
* @param outputIds - Optional array of output IDs to filter by
|
|
39531
37511
|
* @param order - Optional order for results ("ASCENDING" or "DESCENDING", defaults to "DESCENDING")
|
|
39532
|
-
* @param pageSize - Optional page size (defaults to
|
|
37512
|
+
* @param pageSize - Optional page size (defaults to 50)
|
|
39533
37513
|
* @param offset - Optional offset for pagination (defaults to 0)
|
|
39534
37514
|
* @returns Promise resolving to array of token transactions with their current status
|
|
39535
37515
|
*/
|
|
@@ -39552,7 +37532,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
39552
37532
|
tokenIdentifiers,
|
|
39553
37533
|
outputIds,
|
|
39554
37534
|
order,
|
|
39555
|
-
pageSize: pageSize ??
|
|
37535
|
+
pageSize: pageSize ?? 50,
|
|
39556
37536
|
offset: offset ?? 0
|
|
39557
37537
|
});
|
|
39558
37538
|
}
|