@ondewo/csi-client-angular 2.3.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/LICENSE +191 -0
- package/README.md +27 -0
- package/api/google/api/annotations.pb.d.ts +1 -0
- package/api/google/api/http.pb.d.ts +275 -0
- package/api/google/rpc/status.pb.d.ts +82 -0
- package/api/google/type/latlng.pb.d.ts +76 -0
- package/api/ondewo/csi/conversation.pb.d.ts +1312 -0
- package/api/ondewo/csi/conversation.pbconf.d.ts +6 -0
- package/api/ondewo/csi/conversation.pbsc.d.ts +167 -0
- package/api/ondewo/nlu/agent.pb.d.ts +3536 -0
- package/api/ondewo/nlu/agent.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/agent.pbsc.d.ts +472 -0
- package/api/ondewo/nlu/aiservices.pb.d.ts +2472 -0
- package/api/ondewo/nlu/aiservices.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/aiservices.pbsc.d.ts +150 -0
- package/api/ondewo/nlu/common.pb.d.ts +75 -0
- package/api/ondewo/nlu/context.pb.d.ts +756 -0
- package/api/ondewo/nlu/context.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/context.pbsc.d.ts +119 -0
- package/api/ondewo/nlu/entity-type.pb.d.ts +2014 -0
- package/api/ondewo/nlu/entity-type.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/entity-type.pbsc.d.ts +216 -0
- package/api/ondewo/nlu/intent.pb.d.ts +6236 -0
- package/api/ondewo/nlu/intent.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/intent.pbsc.d.ts +456 -0
- package/api/ondewo/nlu/operation-metadata.pb.d.ts +166 -0
- package/api/ondewo/nlu/operations.pb.d.ts +578 -0
- package/api/ondewo/nlu/operations.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/operations.pbsc.d.ts +87 -0
- package/api/ondewo/nlu/project-role.pb.d.ts +576 -0
- package/api/ondewo/nlu/project-role.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/project-role.pbsc.d.ts +103 -0
- package/api/ondewo/nlu/project-statistics.pb.d.ts +295 -0
- package/api/ondewo/nlu/project-statistics.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/project-statistics.pbsc.d.ts +151 -0
- package/api/ondewo/nlu/server-statistics.pb.d.ts +71 -0
- package/api/ondewo/nlu/server-statistics.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/server-statistics.pbsc.d.ts +72 -0
- package/api/ondewo/nlu/session.pb.d.ts +2892 -0
- package/api/ondewo/nlu/session.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/session.pbsc.d.ts +247 -0
- package/api/ondewo/nlu/user.pb.d.ts +1577 -0
- package/api/ondewo/nlu/user.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/user.pbsc.d.ts +263 -0
- package/api/ondewo/nlu/utility.pb.d.ts +1814 -0
- package/api/ondewo/nlu/utility.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/utility.pbsc.d.ts +150 -0
- package/api/ondewo/nlu/webhook.pb.d.ts +401 -0
- package/api/ondewo/nlu/webhook.pbconf.d.ts +6 -0
- package/api/ondewo/nlu/webhook.pbsc.d.ts +70 -0
- package/api/ondewo/s2t/speech-to-text.pb.d.ts +3710 -0
- package/api/ondewo/s2t/speech-to-text.pbconf.d.ts +6 -0
- package/api/ondewo/s2t/speech-to-text.pbsc.d.ts +263 -0
- package/api/ondewo/t2s/text-to-speech.pb.d.ts +3302 -0
- package/api/ondewo/t2s/text-to-speech.pbconf.d.ts +11 -0
- package/api/ondewo/t2s/text-to-speech.pbsc.d.ts +296 -0
- package/esm2020/api/google/api/annotations.pb.mjs +2 -0
- package/esm2020/api/google/api/http.pb.mjs +524 -0
- package/esm2020/api/google/rpc/status.pb.mjs +138 -0
- package/esm2020/api/google/type/latlng.pb.mjs +119 -0
- package/esm2020/api/ondewo/csi/conversation.pb.mjs +2232 -0
- package/esm2020/api/ondewo/csi/conversation.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/csi/conversation.pbsc.mjs +315 -0
- package/esm2020/api/ondewo/nlu/agent.pb.mjs +6077 -0
- package/esm2020/api/ondewo/nlu/agent.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/agent.pbsc.mjs +886 -0
- package/esm2020/api/ondewo/nlu/aiservices.pb.mjs +4371 -0
- package/esm2020/api/ondewo/nlu/aiservices.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/aiservices.pbsc.mjs +284 -0
- package/esm2020/api/ondewo/nlu/common.pb.mjs +108 -0
- package/esm2020/api/ondewo/nlu/context.pb.mjs +1233 -0
- package/esm2020/api/ondewo/nlu/context.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/context.pbsc.mjs +225 -0
- package/esm2020/api/ondewo/nlu/entity-type.pb.mjs +3466 -0
- package/esm2020/api/ondewo/nlu/entity-type.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/entity-type.pbsc.mjs +406 -0
- package/esm2020/api/ondewo/nlu/intent.pb.mjs +10809 -0
- package/esm2020/api/ondewo/nlu/intent.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/intent.pbsc.mjs +856 -0
- package/esm2020/api/ondewo/nlu/operation-metadata.pb.mjs +382 -0
- package/esm2020/api/ondewo/nlu/operations.pb.mjs +1003 -0
- package/esm2020/api/ondewo/nlu/operations.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/operations.pbsc.mjs +165 -0
- package/esm2020/api/ondewo/nlu/project-role.pb.mjs +988 -0
- package/esm2020/api/ondewo/nlu/project-role.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/project-role.pbsc.mjs +195 -0
- package/esm2020/api/ondewo/nlu/project-statistics.pb.mjs +460 -0
- package/esm2020/api/ondewo/nlu/project-statistics.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/project-statistics.pbsc.mjs +285 -0
- package/esm2020/api/ondewo/nlu/server-statistics.pb.mjs +103 -0
- package/esm2020/api/ondewo/nlu/server-statistics.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/server-statistics.pbsc.mjs +136 -0
- package/esm2020/api/ondewo/nlu/session.pb.mjs +5351 -0
- package/esm2020/api/ondewo/nlu/session.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/session.pbsc.mjs +465 -0
- package/esm2020/api/ondewo/nlu/user.pb.mjs +2536 -0
- package/esm2020/api/ondewo/nlu/user.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/user.pbsc.mjs +495 -0
- package/esm2020/api/ondewo/nlu/utility.pb.mjs +3302 -0
- package/esm2020/api/ondewo/nlu/utility.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/utility.pbsc.mjs +284 -0
- package/esm2020/api/ondewo/nlu/webhook.pb.mjs +705 -0
- package/esm2020/api/ondewo/nlu/webhook.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/nlu/webhook.pbsc.mjs +134 -0
- package/esm2020/api/ondewo/s2t/speech-to-text.pb.mjs +6452 -0
- package/esm2020/api/ondewo/s2t/speech-to-text.pbconf.mjs +13 -0
- package/esm2020/api/ondewo/s2t/speech-to-text.pbsc.mjs +495 -0
- package/esm2020/api/ondewo/t2s/text-to-speech.pb.mjs +5779 -0
- package/esm2020/api/ondewo/t2s/text-to-speech.pbconf.mjs +18 -0
- package/esm2020/api/ondewo/t2s/text-to-speech.pbsc.mjs +555 -0
- package/esm2020/ondewo-csi-client-angular.mjs +5 -0
- package/esm2020/public-api.mjs +55 -0
- package/fesm2015/ondewo-csi-client-angular.mjs +62142 -0
- package/fesm2015/ondewo-csi-client-angular.mjs.map +1 -0
- package/fesm2020/ondewo-csi-client-angular.mjs +62135 -0
- package/fesm2020/ondewo-csi-client-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/ondewo-csi-api/README.md +91 -0
- package/ondewo-csi-api/google/ads/googleads/README.md +21 -0
- package/ondewo-csi-api/google/api/README.md +5 -0
- package/ondewo-csi-api/google/api/servicecontrol/README.md +126 -0
- package/ondewo-csi-api/google/api/servicemanagement/README.md +102 -0
- package/ondewo-csi-api/google/appengine/README.md +12 -0
- package/ondewo-csi-api/google/assistant/embedded/README.md +3 -0
- package/ondewo-csi-api/google/cloud/functions/README.md +2 -0
- package/ondewo-csi-api/google/cloud/language/README.md +0 -0
- package/ondewo-csi-api/google/cloud/runtimeconfig/README.md +39 -0
- package/ondewo-csi-api/google/cloud/speech/README.md +3 -0
- package/ondewo-csi-api/google/container/README.md +0 -0
- package/ondewo-csi-api/google/datastore/README.md +0 -0
- package/ondewo-csi-api/google/devtools/cloudbuild/README.md +1 -0
- package/ondewo-csi-api/google/devtools/clouderrorreporting/README.md +1 -0
- package/ondewo-csi-api/google/example/library/README.md +4 -0
- package/ondewo-csi-api/google/firestore/README.md +0 -0
- package/ondewo-csi-api/google/genomics/README.md +14 -0
- package/ondewo-csi-api/google/iam/README.md +14 -0
- package/ondewo-csi-api/google/logging/README.md +3 -0
- package/ondewo-csi-api/google/longrunning/README.md +5 -0
- package/ondewo-csi-api/google/privacy/dlp/README.md +7 -0
- package/ondewo-csi-api/google/pubsub/v1beta2/README.md +136 -0
- package/ondewo-csi-api/google/rpc/README.md +5 -0
- package/ondewo-csi-api/google/streetview/publish/README.md +1 -0
- package/ondewo-csi-api/google/type/README.md +16 -0
- package/ondewo-csi-api/googleapis/README.md +87 -0
- package/ondewo-csi-api/googleapis/google/ads/googleads/README.md +21 -0
- package/ondewo-csi-api/googleapis/google/api/README.md +5 -0
- package/ondewo-csi-api/googleapis/google/api/servicecontrol/README.md +126 -0
- package/ondewo-csi-api/googleapis/google/api/servicemanagement/README.md +102 -0
- package/ondewo-csi-api/googleapis/google/appengine/README.md +12 -0
- package/ondewo-csi-api/googleapis/google/assistant/embedded/README.md +3 -0
- package/ondewo-csi-api/googleapis/google/cloud/functions/README.md +2 -0
- package/ondewo-csi-api/googleapis/google/cloud/language/README.md +0 -0
- package/ondewo-csi-api/googleapis/google/cloud/runtimeconfig/README.md +39 -0
- package/ondewo-csi-api/googleapis/google/cloud/speech/README.md +3 -0
- package/ondewo-csi-api/googleapis/google/container/README.md +0 -0
- package/ondewo-csi-api/googleapis/google/datastore/README.md +0 -0
- package/ondewo-csi-api/googleapis/google/devtools/cloudbuild/README.md +1 -0
- package/ondewo-csi-api/googleapis/google/devtools/clouderrorreporting/README.md +1 -0
- package/ondewo-csi-api/googleapis/google/example/library/README.md +4 -0
- package/ondewo-csi-api/googleapis/google/firestore/README.md +0 -0
- package/ondewo-csi-api/googleapis/google/genomics/README.md +14 -0
- package/ondewo-csi-api/googleapis/google/iam/README.md +14 -0
- package/ondewo-csi-api/googleapis/google/logging/README.md +3 -0
- package/ondewo-csi-api/googleapis/google/longrunning/README.md +5 -0
- package/ondewo-csi-api/googleapis/google/privacy/dlp/README.md +7 -0
- package/ondewo-csi-api/googleapis/google/pubsub/v1beta2/README.md +136 -0
- package/ondewo-csi-api/googleapis/google/rpc/README.md +5 -0
- package/ondewo-csi-api/googleapis/google/streetview/publish/README.md +1 -0
- package/ondewo-csi-api/googleapis/google/type/README.md +16 -0
- package/ondewo-csi-api/ondewo-nlu-api/README.md +117 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/README.md +87 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/ads/googleads/README.md +21 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/api/README.md +5 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/api/servicecontrol/README.md +126 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/api/servicemanagement/README.md +102 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/appengine/README.md +12 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/assistant/embedded/README.md +3 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/functions/README.md +2 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/language/README.md +0 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/runtimeconfig/README.md +39 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/cloud/speech/README.md +3 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/container/README.md +0 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/datastore/README.md +0 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/devtools/cloudbuild/README.md +1 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/devtools/clouderrorreporting/README.md +1 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/example/library/README.md +4 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/firestore/README.md +0 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/genomics/README.md +14 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/iam/README.md +14 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/logging/README.md +3 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/longrunning/README.md +5 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/privacy/dlp/README.md +7 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/pubsub/v1beta2/README.md +136 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/rpc/README.md +5 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/streetview/publish/README.md +1 -0
- package/ondewo-csi-api/ondewo-nlu-api/googleapis/google/type/README.md +16 -0
- package/ondewo-csi-api/ondewo-s2t-api/README.md +89 -0
- package/ondewo-csi-api/ondewo-t2s-api/README.md +89 -0
- package/package.json +49 -0
- package/public-api.d.ts +54 -0
|
@@ -0,0 +1,3466 @@
|
|
|
1
|
+
import { BinaryReader, BinaryWriter } from 'google-protobuf';
|
|
2
|
+
import * as googleProtobuf004 from '@ngx-grpc/well-known-types';
|
|
3
|
+
import * as googleProtobuf008 from '@ngx-grpc/well-known-types';
|
|
4
|
+
import * as ondewoNlu009 from '../../ondewo/nlu/common.pb';
|
|
5
|
+
export var EntityTypeView;
|
|
6
|
+
(function (EntityTypeView) {
|
|
7
|
+
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_UNSPECIFIED"] = 0] = "ENTITY_TYPE_VIEW_UNSPECIFIED";
|
|
8
|
+
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_FULL"] = 1] = "ENTITY_TYPE_VIEW_FULL";
|
|
9
|
+
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_PARTIAL"] = 2] = "ENTITY_TYPE_VIEW_PARTIAL";
|
|
10
|
+
EntityTypeView[EntityTypeView["ENTITY_TYPE_VIEW_SHALLOW"] = 3] = "ENTITY_TYPE_VIEW_SHALLOW";
|
|
11
|
+
})(EntityTypeView || (EntityTypeView = {}));
|
|
12
|
+
export var EntityTypeCategory;
|
|
13
|
+
(function (EntityTypeCategory) {
|
|
14
|
+
EntityTypeCategory[EntityTypeCategory["ALL_ENTITY_TYPES"] = 0] = "ALL_ENTITY_TYPES";
|
|
15
|
+
EntityTypeCategory[EntityTypeCategory["DEFAULT_ENTITY_TYPES"] = 1] = "DEFAULT_ENTITY_TYPES";
|
|
16
|
+
EntityTypeCategory[EntityTypeCategory["USER_DEFINED_ENTITY_TYPES"] = 2] = "USER_DEFINED_ENTITY_TYPES";
|
|
17
|
+
})(EntityTypeCategory || (EntityTypeCategory = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Message implementation for ondewo.nlu.EntityType
|
|
20
|
+
*/
|
|
21
|
+
export class EntityType {
|
|
22
|
+
/**
|
|
23
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
24
|
+
* @param _value initial values object or instance of EntityType to deeply clone from
|
|
25
|
+
*/
|
|
26
|
+
constructor(_value) {
|
|
27
|
+
_value = _value || {};
|
|
28
|
+
this.name = _value.name;
|
|
29
|
+
this.displayName = _value.displayName;
|
|
30
|
+
this.kind = _value.kind;
|
|
31
|
+
this.autoExpansionMode = _value.autoExpansionMode;
|
|
32
|
+
this.entities = (_value.entities || []).map(m => new EntityType.Entity(m));
|
|
33
|
+
this.nextPageToken = _value.nextPageToken;
|
|
34
|
+
this.entityCount = _value.entityCount;
|
|
35
|
+
this.status = _value.status;
|
|
36
|
+
this.synonymCount = _value.synonymCount;
|
|
37
|
+
EntityType.refineValues(this);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Deserialize binary data to message
|
|
41
|
+
* @param instance message instance
|
|
42
|
+
*/
|
|
43
|
+
static deserializeBinary(bytes) {
|
|
44
|
+
const instance = new EntityType();
|
|
45
|
+
EntityType.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
46
|
+
return instance;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check all the properties and set default protobuf values if necessary
|
|
50
|
+
* @param _instance message instance
|
|
51
|
+
*/
|
|
52
|
+
static refineValues(_instance) {
|
|
53
|
+
_instance.name = _instance.name || '';
|
|
54
|
+
_instance.displayName = _instance.displayName || '';
|
|
55
|
+
_instance.kind = _instance.kind || 0;
|
|
56
|
+
_instance.autoExpansionMode = _instance.autoExpansionMode || 0;
|
|
57
|
+
_instance.entities = _instance.entities || [];
|
|
58
|
+
_instance.nextPageToken = _instance.nextPageToken || '';
|
|
59
|
+
_instance.entityCount = _instance.entityCount || 0;
|
|
60
|
+
_instance.status = _instance.status || 0;
|
|
61
|
+
_instance.synonymCount = _instance.synonymCount || 0;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
65
|
+
* @param _instance message instance
|
|
66
|
+
* @param _reader binary reader instance
|
|
67
|
+
*/
|
|
68
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
69
|
+
while (_reader.nextField()) {
|
|
70
|
+
if (_reader.isEndGroup())
|
|
71
|
+
break;
|
|
72
|
+
switch (_reader.getFieldNumber()) {
|
|
73
|
+
case 1:
|
|
74
|
+
_instance.name = _reader.readString();
|
|
75
|
+
break;
|
|
76
|
+
case 2:
|
|
77
|
+
_instance.displayName = _reader.readString();
|
|
78
|
+
break;
|
|
79
|
+
case 3:
|
|
80
|
+
_instance.kind = _reader.readEnum();
|
|
81
|
+
break;
|
|
82
|
+
case 4:
|
|
83
|
+
_instance.autoExpansionMode = _reader.readEnum();
|
|
84
|
+
break;
|
|
85
|
+
case 6:
|
|
86
|
+
const messageInitializer6 = new EntityType.Entity();
|
|
87
|
+
_reader.readMessage(messageInitializer6, EntityType.Entity.deserializeBinaryFromReader);
|
|
88
|
+
(_instance.entities = _instance.entities || []).push(messageInitializer6);
|
|
89
|
+
break;
|
|
90
|
+
case 10:
|
|
91
|
+
_instance.nextPageToken = _reader.readString();
|
|
92
|
+
break;
|
|
93
|
+
case 11:
|
|
94
|
+
_instance.entityCount = _reader.readInt32();
|
|
95
|
+
break;
|
|
96
|
+
case 12:
|
|
97
|
+
_instance.status = _reader.readEnum();
|
|
98
|
+
break;
|
|
99
|
+
case 13:
|
|
100
|
+
_instance.synonymCount = _reader.readInt32();
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
_reader.skipField();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
EntityType.refineValues(_instance);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Serializes a message to binary format using provided binary reader
|
|
110
|
+
* @param _instance message instance
|
|
111
|
+
* @param _writer binary writer instance
|
|
112
|
+
*/
|
|
113
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
114
|
+
if (_instance.name) {
|
|
115
|
+
_writer.writeString(1, _instance.name);
|
|
116
|
+
}
|
|
117
|
+
if (_instance.displayName) {
|
|
118
|
+
_writer.writeString(2, _instance.displayName);
|
|
119
|
+
}
|
|
120
|
+
if (_instance.kind) {
|
|
121
|
+
_writer.writeEnum(3, _instance.kind);
|
|
122
|
+
}
|
|
123
|
+
if (_instance.autoExpansionMode) {
|
|
124
|
+
_writer.writeEnum(4, _instance.autoExpansionMode);
|
|
125
|
+
}
|
|
126
|
+
if (_instance.entities && _instance.entities.length) {
|
|
127
|
+
_writer.writeRepeatedMessage(6, _instance.entities, EntityType.Entity.serializeBinaryToWriter);
|
|
128
|
+
}
|
|
129
|
+
if (_instance.nextPageToken) {
|
|
130
|
+
_writer.writeString(10, _instance.nextPageToken);
|
|
131
|
+
}
|
|
132
|
+
if (_instance.entityCount) {
|
|
133
|
+
_writer.writeInt32(11, _instance.entityCount);
|
|
134
|
+
}
|
|
135
|
+
if (_instance.status) {
|
|
136
|
+
_writer.writeEnum(12, _instance.status);
|
|
137
|
+
}
|
|
138
|
+
if (_instance.synonymCount) {
|
|
139
|
+
_writer.writeInt32(13, _instance.synonymCount);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
get name() {
|
|
143
|
+
return this._name;
|
|
144
|
+
}
|
|
145
|
+
set name(value) {
|
|
146
|
+
this._name = value;
|
|
147
|
+
}
|
|
148
|
+
get displayName() {
|
|
149
|
+
return this._displayName;
|
|
150
|
+
}
|
|
151
|
+
set displayName(value) {
|
|
152
|
+
this._displayName = value;
|
|
153
|
+
}
|
|
154
|
+
get kind() {
|
|
155
|
+
return this._kind;
|
|
156
|
+
}
|
|
157
|
+
set kind(value) {
|
|
158
|
+
this._kind = value;
|
|
159
|
+
}
|
|
160
|
+
get autoExpansionMode() {
|
|
161
|
+
return this._autoExpansionMode;
|
|
162
|
+
}
|
|
163
|
+
set autoExpansionMode(value) {
|
|
164
|
+
this._autoExpansionMode = value;
|
|
165
|
+
}
|
|
166
|
+
get entities() {
|
|
167
|
+
return this._entities;
|
|
168
|
+
}
|
|
169
|
+
set entities(value) {
|
|
170
|
+
this._entities = value;
|
|
171
|
+
}
|
|
172
|
+
get nextPageToken() {
|
|
173
|
+
return this._nextPageToken;
|
|
174
|
+
}
|
|
175
|
+
set nextPageToken(value) {
|
|
176
|
+
this._nextPageToken = value;
|
|
177
|
+
}
|
|
178
|
+
get entityCount() {
|
|
179
|
+
return this._entityCount;
|
|
180
|
+
}
|
|
181
|
+
set entityCount(value) {
|
|
182
|
+
this._entityCount = value;
|
|
183
|
+
}
|
|
184
|
+
get status() {
|
|
185
|
+
return this._status;
|
|
186
|
+
}
|
|
187
|
+
set status(value) {
|
|
188
|
+
this._status = value;
|
|
189
|
+
}
|
|
190
|
+
get synonymCount() {
|
|
191
|
+
return this._synonymCount;
|
|
192
|
+
}
|
|
193
|
+
set synonymCount(value) {
|
|
194
|
+
this._synonymCount = value;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Serialize message to binary data
|
|
198
|
+
* @param instance message instance
|
|
199
|
+
*/
|
|
200
|
+
serializeBinary() {
|
|
201
|
+
const writer = new BinaryWriter();
|
|
202
|
+
EntityType.serializeBinaryToWriter(this, writer);
|
|
203
|
+
return writer.getResultBuffer();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
207
|
+
*/
|
|
208
|
+
toObject() {
|
|
209
|
+
return {
|
|
210
|
+
name: this.name,
|
|
211
|
+
displayName: this.displayName,
|
|
212
|
+
kind: this.kind,
|
|
213
|
+
autoExpansionMode: this.autoExpansionMode,
|
|
214
|
+
entities: (this.entities || []).map(m => m.toObject()),
|
|
215
|
+
nextPageToken: this.nextPageToken,
|
|
216
|
+
entityCount: this.entityCount,
|
|
217
|
+
status: this.status,
|
|
218
|
+
synonymCount: this.synonymCount
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
223
|
+
*/
|
|
224
|
+
toJSON() {
|
|
225
|
+
return this.toObject();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
229
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
230
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
231
|
+
*/
|
|
232
|
+
toProtobufJSON(
|
|
233
|
+
// @ts-ignore
|
|
234
|
+
options) {
|
|
235
|
+
return {
|
|
236
|
+
name: this.name,
|
|
237
|
+
displayName: this.displayName,
|
|
238
|
+
kind: EntityType.Kind[this.kind === null || this.kind === undefined ? 0 : this.kind],
|
|
239
|
+
autoExpansionMode: EntityType.AutoExpansionMode[this.autoExpansionMode === null ||
|
|
240
|
+
this.autoExpansionMode === undefined
|
|
241
|
+
? 0
|
|
242
|
+
: this.autoExpansionMode],
|
|
243
|
+
entities: (this.entities || []).map(m => m.toProtobufJSON(options)),
|
|
244
|
+
nextPageToken: this.nextPageToken,
|
|
245
|
+
entityCount: this.entityCount,
|
|
246
|
+
status: EntityType.EntityTypeStatus[this.status === null || this.status === undefined ? 0 : this.status],
|
|
247
|
+
synonymCount: this.synonymCount
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
EntityType.id = 'ondewo.nlu.EntityType';
|
|
252
|
+
(function (EntityType) {
|
|
253
|
+
let Kind;
|
|
254
|
+
(function (Kind) {
|
|
255
|
+
Kind[Kind["KIND_UNSPECIFIED"] = 0] = "KIND_UNSPECIFIED";
|
|
256
|
+
Kind[Kind["KIND_MAP"] = 1] = "KIND_MAP";
|
|
257
|
+
Kind[Kind["KIND_LIST"] = 2] = "KIND_LIST";
|
|
258
|
+
})(Kind = EntityType.Kind || (EntityType.Kind = {}));
|
|
259
|
+
let EntityTypeStatus;
|
|
260
|
+
(function (EntityTypeStatus) {
|
|
261
|
+
EntityTypeStatus[EntityTypeStatus["ACTIVE"] = 0] = "ACTIVE";
|
|
262
|
+
EntityTypeStatus[EntityTypeStatus["INACTIVE"] = 1] = "INACTIVE";
|
|
263
|
+
})(EntityTypeStatus = EntityType.EntityTypeStatus || (EntityType.EntityTypeStatus = {}));
|
|
264
|
+
let AutoExpansionMode;
|
|
265
|
+
(function (AutoExpansionMode) {
|
|
266
|
+
AutoExpansionMode[AutoExpansionMode["AUTO_EXPANSION_MODE_UNSPECIFIED"] = 0] = "AUTO_EXPANSION_MODE_UNSPECIFIED";
|
|
267
|
+
AutoExpansionMode[AutoExpansionMode["AUTO_EXPANSION_MODE_DEFAULT"] = 1] = "AUTO_EXPANSION_MODE_DEFAULT";
|
|
268
|
+
})(AutoExpansionMode = EntityType.AutoExpansionMode || (EntityType.AutoExpansionMode = {}));
|
|
269
|
+
/**
|
|
270
|
+
* Message implementation for ondewo.nlu.Entity
|
|
271
|
+
*/
|
|
272
|
+
class Entity {
|
|
273
|
+
/**
|
|
274
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
275
|
+
* @param _value initial values object or instance of Entity to deeply clone from
|
|
276
|
+
*/
|
|
277
|
+
constructor(_value) {
|
|
278
|
+
_value = _value || {};
|
|
279
|
+
this.value = _value.value;
|
|
280
|
+
this.synonyms = (_value.synonyms || []).slice();
|
|
281
|
+
this.name = _value.name;
|
|
282
|
+
this.displayName = _value.displayName;
|
|
283
|
+
this.synonymCount = _value.synonymCount;
|
|
284
|
+
this.languageCode = _value.languageCode;
|
|
285
|
+
Entity.refineValues(this);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Deserialize binary data to message
|
|
289
|
+
* @param instance message instance
|
|
290
|
+
*/
|
|
291
|
+
static deserializeBinary(bytes) {
|
|
292
|
+
const instance = new Entity();
|
|
293
|
+
Entity.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
294
|
+
return instance;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Check all the properties and set default protobuf values if necessary
|
|
298
|
+
* @param _instance message instance
|
|
299
|
+
*/
|
|
300
|
+
static refineValues(_instance) {
|
|
301
|
+
_instance.value = _instance.value || '';
|
|
302
|
+
_instance.synonyms = _instance.synonyms || [];
|
|
303
|
+
_instance.name = _instance.name || '';
|
|
304
|
+
_instance.displayName = _instance.displayName || '';
|
|
305
|
+
_instance.synonymCount = _instance.synonymCount || 0;
|
|
306
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
310
|
+
* @param _instance message instance
|
|
311
|
+
* @param _reader binary reader instance
|
|
312
|
+
*/
|
|
313
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
314
|
+
while (_reader.nextField()) {
|
|
315
|
+
if (_reader.isEndGroup())
|
|
316
|
+
break;
|
|
317
|
+
switch (_reader.getFieldNumber()) {
|
|
318
|
+
case 1:
|
|
319
|
+
_instance.value = _reader.readString();
|
|
320
|
+
break;
|
|
321
|
+
case 2:
|
|
322
|
+
(_instance.synonyms = _instance.synonyms || []).push(_reader.readString());
|
|
323
|
+
break;
|
|
324
|
+
case 3:
|
|
325
|
+
_instance.name = _reader.readString();
|
|
326
|
+
break;
|
|
327
|
+
case 4:
|
|
328
|
+
_instance.displayName = _reader.readString();
|
|
329
|
+
break;
|
|
330
|
+
case 5:
|
|
331
|
+
_instance.synonymCount = _reader.readInt32();
|
|
332
|
+
break;
|
|
333
|
+
case 6:
|
|
334
|
+
_instance.languageCode = _reader.readString();
|
|
335
|
+
break;
|
|
336
|
+
default:
|
|
337
|
+
_reader.skipField();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
Entity.refineValues(_instance);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Serializes a message to binary format using provided binary reader
|
|
344
|
+
* @param _instance message instance
|
|
345
|
+
* @param _writer binary writer instance
|
|
346
|
+
*/
|
|
347
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
348
|
+
if (_instance.value) {
|
|
349
|
+
_writer.writeString(1, _instance.value);
|
|
350
|
+
}
|
|
351
|
+
if (_instance.synonyms && _instance.synonyms.length) {
|
|
352
|
+
_writer.writeRepeatedString(2, _instance.synonyms);
|
|
353
|
+
}
|
|
354
|
+
if (_instance.name) {
|
|
355
|
+
_writer.writeString(3, _instance.name);
|
|
356
|
+
}
|
|
357
|
+
if (_instance.displayName) {
|
|
358
|
+
_writer.writeString(4, _instance.displayName);
|
|
359
|
+
}
|
|
360
|
+
if (_instance.synonymCount) {
|
|
361
|
+
_writer.writeInt32(5, _instance.synonymCount);
|
|
362
|
+
}
|
|
363
|
+
if (_instance.languageCode) {
|
|
364
|
+
_writer.writeString(6, _instance.languageCode);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
get value() {
|
|
368
|
+
return this._value;
|
|
369
|
+
}
|
|
370
|
+
set value(value) {
|
|
371
|
+
this._value = value;
|
|
372
|
+
}
|
|
373
|
+
get synonyms() {
|
|
374
|
+
return this._synonyms;
|
|
375
|
+
}
|
|
376
|
+
set synonyms(value) {
|
|
377
|
+
this._synonyms = value;
|
|
378
|
+
}
|
|
379
|
+
get name() {
|
|
380
|
+
return this._name;
|
|
381
|
+
}
|
|
382
|
+
set name(value) {
|
|
383
|
+
this._name = value;
|
|
384
|
+
}
|
|
385
|
+
get displayName() {
|
|
386
|
+
return this._displayName;
|
|
387
|
+
}
|
|
388
|
+
set displayName(value) {
|
|
389
|
+
this._displayName = value;
|
|
390
|
+
}
|
|
391
|
+
get synonymCount() {
|
|
392
|
+
return this._synonymCount;
|
|
393
|
+
}
|
|
394
|
+
set synonymCount(value) {
|
|
395
|
+
this._synonymCount = value;
|
|
396
|
+
}
|
|
397
|
+
get languageCode() {
|
|
398
|
+
return this._languageCode;
|
|
399
|
+
}
|
|
400
|
+
set languageCode(value) {
|
|
401
|
+
this._languageCode = value;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Serialize message to binary data
|
|
405
|
+
* @param instance message instance
|
|
406
|
+
*/
|
|
407
|
+
serializeBinary() {
|
|
408
|
+
const writer = new BinaryWriter();
|
|
409
|
+
Entity.serializeBinaryToWriter(this, writer);
|
|
410
|
+
return writer.getResultBuffer();
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
414
|
+
*/
|
|
415
|
+
toObject() {
|
|
416
|
+
return {
|
|
417
|
+
value: this.value,
|
|
418
|
+
synonyms: (this.synonyms || []).slice(),
|
|
419
|
+
name: this.name,
|
|
420
|
+
displayName: this.displayName,
|
|
421
|
+
synonymCount: this.synonymCount,
|
|
422
|
+
languageCode: this.languageCode
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
427
|
+
*/
|
|
428
|
+
toJSON() {
|
|
429
|
+
return this.toObject();
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
433
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
434
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
435
|
+
*/
|
|
436
|
+
toProtobufJSON(
|
|
437
|
+
// @ts-ignore
|
|
438
|
+
options) {
|
|
439
|
+
return {
|
|
440
|
+
value: this.value,
|
|
441
|
+
synonyms: (this.synonyms || []).slice(),
|
|
442
|
+
name: this.name,
|
|
443
|
+
displayName: this.displayName,
|
|
444
|
+
synonymCount: this.synonymCount,
|
|
445
|
+
languageCode: this.languageCode
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
Entity.id = 'ondewo.nlu.Entity';
|
|
450
|
+
EntityType.Entity = Entity;
|
|
451
|
+
})(EntityType || (EntityType = {}));
|
|
452
|
+
/**
|
|
453
|
+
* Message implementation for ondewo.nlu.ListEntityTypesRequest
|
|
454
|
+
*/
|
|
455
|
+
export class ListEntityTypesRequest {
|
|
456
|
+
/**
|
|
457
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
458
|
+
* @param _value initial values object or instance of ListEntityTypesRequest to deeply clone from
|
|
459
|
+
*/
|
|
460
|
+
constructor(_value) {
|
|
461
|
+
_value = _value || {};
|
|
462
|
+
this.parent = _value.parent;
|
|
463
|
+
this.languageCode = _value.languageCode;
|
|
464
|
+
this.pageToken = _value.pageToken;
|
|
465
|
+
this.entityTypeView = _value.entityTypeView;
|
|
466
|
+
this.filterByCategory = _value.filterByCategory;
|
|
467
|
+
this.sortByField = _value.sortByField
|
|
468
|
+
? new EntityTypeSorting(_value.sortByField)
|
|
469
|
+
: undefined;
|
|
470
|
+
ListEntityTypesRequest.refineValues(this);
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Deserialize binary data to message
|
|
474
|
+
* @param instance message instance
|
|
475
|
+
*/
|
|
476
|
+
static deserializeBinary(bytes) {
|
|
477
|
+
const instance = new ListEntityTypesRequest();
|
|
478
|
+
ListEntityTypesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
479
|
+
return instance;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Check all the properties and set default protobuf values if necessary
|
|
483
|
+
* @param _instance message instance
|
|
484
|
+
*/
|
|
485
|
+
static refineValues(_instance) {
|
|
486
|
+
_instance.parent = _instance.parent || '';
|
|
487
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
488
|
+
_instance.pageToken = _instance.pageToken || '';
|
|
489
|
+
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
490
|
+
_instance.filterByCategory = _instance.filterByCategory || 0;
|
|
491
|
+
_instance.sortByField = _instance.sortByField || undefined;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
495
|
+
* @param _instance message instance
|
|
496
|
+
* @param _reader binary reader instance
|
|
497
|
+
*/
|
|
498
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
499
|
+
while (_reader.nextField()) {
|
|
500
|
+
if (_reader.isEndGroup())
|
|
501
|
+
break;
|
|
502
|
+
switch (_reader.getFieldNumber()) {
|
|
503
|
+
case 1:
|
|
504
|
+
_instance.parent = _reader.readString();
|
|
505
|
+
break;
|
|
506
|
+
case 2:
|
|
507
|
+
_instance.languageCode = _reader.readString();
|
|
508
|
+
break;
|
|
509
|
+
case 4:
|
|
510
|
+
_instance.pageToken = _reader.readString();
|
|
511
|
+
break;
|
|
512
|
+
case 5:
|
|
513
|
+
_instance.entityTypeView = _reader.readEnum();
|
|
514
|
+
break;
|
|
515
|
+
case 6:
|
|
516
|
+
_instance.filterByCategory = _reader.readEnum();
|
|
517
|
+
break;
|
|
518
|
+
case 7:
|
|
519
|
+
_instance.sortByField = new EntityTypeSorting();
|
|
520
|
+
_reader.readMessage(_instance.sortByField, EntityTypeSorting.deserializeBinaryFromReader);
|
|
521
|
+
break;
|
|
522
|
+
default:
|
|
523
|
+
_reader.skipField();
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
ListEntityTypesRequest.refineValues(_instance);
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Serializes a message to binary format using provided binary reader
|
|
530
|
+
* @param _instance message instance
|
|
531
|
+
* @param _writer binary writer instance
|
|
532
|
+
*/
|
|
533
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
534
|
+
if (_instance.parent) {
|
|
535
|
+
_writer.writeString(1, _instance.parent);
|
|
536
|
+
}
|
|
537
|
+
if (_instance.languageCode) {
|
|
538
|
+
_writer.writeString(2, _instance.languageCode);
|
|
539
|
+
}
|
|
540
|
+
if (_instance.pageToken) {
|
|
541
|
+
_writer.writeString(4, _instance.pageToken);
|
|
542
|
+
}
|
|
543
|
+
if (_instance.entityTypeView) {
|
|
544
|
+
_writer.writeEnum(5, _instance.entityTypeView);
|
|
545
|
+
}
|
|
546
|
+
if (_instance.filterByCategory) {
|
|
547
|
+
_writer.writeEnum(6, _instance.filterByCategory);
|
|
548
|
+
}
|
|
549
|
+
if (_instance.sortByField) {
|
|
550
|
+
_writer.writeMessage(7, _instance.sortByField, EntityTypeSorting.serializeBinaryToWriter);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
get parent() {
|
|
554
|
+
return this._parent;
|
|
555
|
+
}
|
|
556
|
+
set parent(value) {
|
|
557
|
+
this._parent = value;
|
|
558
|
+
}
|
|
559
|
+
get languageCode() {
|
|
560
|
+
return this._languageCode;
|
|
561
|
+
}
|
|
562
|
+
set languageCode(value) {
|
|
563
|
+
this._languageCode = value;
|
|
564
|
+
}
|
|
565
|
+
get pageToken() {
|
|
566
|
+
return this._pageToken;
|
|
567
|
+
}
|
|
568
|
+
set pageToken(value) {
|
|
569
|
+
this._pageToken = value;
|
|
570
|
+
}
|
|
571
|
+
get entityTypeView() {
|
|
572
|
+
return this._entityTypeView;
|
|
573
|
+
}
|
|
574
|
+
set entityTypeView(value) {
|
|
575
|
+
this._entityTypeView = value;
|
|
576
|
+
}
|
|
577
|
+
get filterByCategory() {
|
|
578
|
+
return this._filterByCategory;
|
|
579
|
+
}
|
|
580
|
+
set filterByCategory(value) {
|
|
581
|
+
this._filterByCategory = value;
|
|
582
|
+
}
|
|
583
|
+
get sortByField() {
|
|
584
|
+
return this._sortByField;
|
|
585
|
+
}
|
|
586
|
+
set sortByField(value) {
|
|
587
|
+
this._sortByField = value;
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Serialize message to binary data
|
|
591
|
+
* @param instance message instance
|
|
592
|
+
*/
|
|
593
|
+
serializeBinary() {
|
|
594
|
+
const writer = new BinaryWriter();
|
|
595
|
+
ListEntityTypesRequest.serializeBinaryToWriter(this, writer);
|
|
596
|
+
return writer.getResultBuffer();
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
600
|
+
*/
|
|
601
|
+
toObject() {
|
|
602
|
+
return {
|
|
603
|
+
parent: this.parent,
|
|
604
|
+
languageCode: this.languageCode,
|
|
605
|
+
pageToken: this.pageToken,
|
|
606
|
+
entityTypeView: this.entityTypeView,
|
|
607
|
+
filterByCategory: this.filterByCategory,
|
|
608
|
+
sortByField: this.sortByField ? this.sortByField.toObject() : undefined
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
613
|
+
*/
|
|
614
|
+
toJSON() {
|
|
615
|
+
return this.toObject();
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
619
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
620
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
621
|
+
*/
|
|
622
|
+
toProtobufJSON(
|
|
623
|
+
// @ts-ignore
|
|
624
|
+
options) {
|
|
625
|
+
return {
|
|
626
|
+
parent: this.parent,
|
|
627
|
+
languageCode: this.languageCode,
|
|
628
|
+
pageToken: this.pageToken,
|
|
629
|
+
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
630
|
+
? 0
|
|
631
|
+
: this.entityTypeView],
|
|
632
|
+
filterByCategory: EntityTypeCategory[this.filterByCategory === null || this.filterByCategory === undefined
|
|
633
|
+
? 0
|
|
634
|
+
: this.filterByCategory],
|
|
635
|
+
sortByField: this.sortByField
|
|
636
|
+
? this.sortByField.toProtobufJSON(options)
|
|
637
|
+
: null
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
ListEntityTypesRequest.id = 'ondewo.nlu.ListEntityTypesRequest';
|
|
642
|
+
/**
|
|
643
|
+
* Message implementation for ondewo.nlu.ListEntityTypesResponse
|
|
644
|
+
*/
|
|
645
|
+
export class ListEntityTypesResponse {
|
|
646
|
+
/**
|
|
647
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
648
|
+
* @param _value initial values object or instance of ListEntityTypesResponse to deeply clone from
|
|
649
|
+
*/
|
|
650
|
+
constructor(_value) {
|
|
651
|
+
_value = _value || {};
|
|
652
|
+
this.entityTypes = (_value.entityTypes || []).map(m => new EntityType(m));
|
|
653
|
+
this.nextPageToken = _value.nextPageToken;
|
|
654
|
+
ListEntityTypesResponse.refineValues(this);
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Deserialize binary data to message
|
|
658
|
+
* @param instance message instance
|
|
659
|
+
*/
|
|
660
|
+
static deserializeBinary(bytes) {
|
|
661
|
+
const instance = new ListEntityTypesResponse();
|
|
662
|
+
ListEntityTypesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
663
|
+
return instance;
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Check all the properties and set default protobuf values if necessary
|
|
667
|
+
* @param _instance message instance
|
|
668
|
+
*/
|
|
669
|
+
static refineValues(_instance) {
|
|
670
|
+
_instance.entityTypes = _instance.entityTypes || [];
|
|
671
|
+
_instance.nextPageToken = _instance.nextPageToken || '';
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
675
|
+
* @param _instance message instance
|
|
676
|
+
* @param _reader binary reader instance
|
|
677
|
+
*/
|
|
678
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
679
|
+
while (_reader.nextField()) {
|
|
680
|
+
if (_reader.isEndGroup())
|
|
681
|
+
break;
|
|
682
|
+
switch (_reader.getFieldNumber()) {
|
|
683
|
+
case 1:
|
|
684
|
+
const messageInitializer1 = new EntityType();
|
|
685
|
+
_reader.readMessage(messageInitializer1, EntityType.deserializeBinaryFromReader);
|
|
686
|
+
(_instance.entityTypes = _instance.entityTypes || []).push(messageInitializer1);
|
|
687
|
+
break;
|
|
688
|
+
case 2:
|
|
689
|
+
_instance.nextPageToken = _reader.readString();
|
|
690
|
+
break;
|
|
691
|
+
default:
|
|
692
|
+
_reader.skipField();
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
ListEntityTypesResponse.refineValues(_instance);
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* Serializes a message to binary format using provided binary reader
|
|
699
|
+
* @param _instance message instance
|
|
700
|
+
* @param _writer binary writer instance
|
|
701
|
+
*/
|
|
702
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
703
|
+
if (_instance.entityTypes && _instance.entityTypes.length) {
|
|
704
|
+
_writer.writeRepeatedMessage(1, _instance.entityTypes, EntityType.serializeBinaryToWriter);
|
|
705
|
+
}
|
|
706
|
+
if (_instance.nextPageToken) {
|
|
707
|
+
_writer.writeString(2, _instance.nextPageToken);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
get entityTypes() {
|
|
711
|
+
return this._entityTypes;
|
|
712
|
+
}
|
|
713
|
+
set entityTypes(value) {
|
|
714
|
+
this._entityTypes = value;
|
|
715
|
+
}
|
|
716
|
+
get nextPageToken() {
|
|
717
|
+
return this._nextPageToken;
|
|
718
|
+
}
|
|
719
|
+
set nextPageToken(value) {
|
|
720
|
+
this._nextPageToken = value;
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* Serialize message to binary data
|
|
724
|
+
* @param instance message instance
|
|
725
|
+
*/
|
|
726
|
+
serializeBinary() {
|
|
727
|
+
const writer = new BinaryWriter();
|
|
728
|
+
ListEntityTypesResponse.serializeBinaryToWriter(this, writer);
|
|
729
|
+
return writer.getResultBuffer();
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
733
|
+
*/
|
|
734
|
+
toObject() {
|
|
735
|
+
return {
|
|
736
|
+
entityTypes: (this.entityTypes || []).map(m => m.toObject()),
|
|
737
|
+
nextPageToken: this.nextPageToken
|
|
738
|
+
};
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
742
|
+
*/
|
|
743
|
+
toJSON() {
|
|
744
|
+
return this.toObject();
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
748
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
749
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
750
|
+
*/
|
|
751
|
+
toProtobufJSON(
|
|
752
|
+
// @ts-ignore
|
|
753
|
+
options) {
|
|
754
|
+
return {
|
|
755
|
+
entityTypes: (this.entityTypes || []).map(m => m.toProtobufJSON(options)),
|
|
756
|
+
nextPageToken: this.nextPageToken
|
|
757
|
+
};
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
ListEntityTypesResponse.id = 'ondewo.nlu.ListEntityTypesResponse';
|
|
761
|
+
/**
|
|
762
|
+
* Message implementation for ondewo.nlu.GetEntityTypeRequest
|
|
763
|
+
*/
|
|
764
|
+
export class GetEntityTypeRequest {
|
|
765
|
+
/**
|
|
766
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
767
|
+
* @param _value initial values object or instance of GetEntityTypeRequest to deeply clone from
|
|
768
|
+
*/
|
|
769
|
+
constructor(_value) {
|
|
770
|
+
_value = _value || {};
|
|
771
|
+
this.name = _value.name;
|
|
772
|
+
this.languageCode = _value.languageCode;
|
|
773
|
+
this.pageToken = _value.pageToken;
|
|
774
|
+
this.entityTypeView = _value.entityTypeView;
|
|
775
|
+
GetEntityTypeRequest.refineValues(this);
|
|
776
|
+
}
|
|
777
|
+
/**
|
|
778
|
+
* Deserialize binary data to message
|
|
779
|
+
* @param instance message instance
|
|
780
|
+
*/
|
|
781
|
+
static deserializeBinary(bytes) {
|
|
782
|
+
const instance = new GetEntityTypeRequest();
|
|
783
|
+
GetEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
784
|
+
return instance;
|
|
785
|
+
}
|
|
786
|
+
/**
|
|
787
|
+
* Check all the properties and set default protobuf values if necessary
|
|
788
|
+
* @param _instance message instance
|
|
789
|
+
*/
|
|
790
|
+
static refineValues(_instance) {
|
|
791
|
+
_instance.name = _instance.name || '';
|
|
792
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
793
|
+
_instance.pageToken = _instance.pageToken || '';
|
|
794
|
+
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
795
|
+
}
|
|
796
|
+
/**
|
|
797
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
798
|
+
* @param _instance message instance
|
|
799
|
+
* @param _reader binary reader instance
|
|
800
|
+
*/
|
|
801
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
802
|
+
while (_reader.nextField()) {
|
|
803
|
+
if (_reader.isEndGroup())
|
|
804
|
+
break;
|
|
805
|
+
switch (_reader.getFieldNumber()) {
|
|
806
|
+
case 1:
|
|
807
|
+
_instance.name = _reader.readString();
|
|
808
|
+
break;
|
|
809
|
+
case 2:
|
|
810
|
+
_instance.languageCode = _reader.readString();
|
|
811
|
+
break;
|
|
812
|
+
case 5:
|
|
813
|
+
_instance.pageToken = _reader.readString();
|
|
814
|
+
break;
|
|
815
|
+
case 6:
|
|
816
|
+
_instance.entityTypeView = _reader.readEnum();
|
|
817
|
+
break;
|
|
818
|
+
default:
|
|
819
|
+
_reader.skipField();
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
GetEntityTypeRequest.refineValues(_instance);
|
|
823
|
+
}
|
|
824
|
+
/**
|
|
825
|
+
* Serializes a message to binary format using provided binary reader
|
|
826
|
+
* @param _instance message instance
|
|
827
|
+
* @param _writer binary writer instance
|
|
828
|
+
*/
|
|
829
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
830
|
+
if (_instance.name) {
|
|
831
|
+
_writer.writeString(1, _instance.name);
|
|
832
|
+
}
|
|
833
|
+
if (_instance.languageCode) {
|
|
834
|
+
_writer.writeString(2, _instance.languageCode);
|
|
835
|
+
}
|
|
836
|
+
if (_instance.pageToken) {
|
|
837
|
+
_writer.writeString(5, _instance.pageToken);
|
|
838
|
+
}
|
|
839
|
+
if (_instance.entityTypeView) {
|
|
840
|
+
_writer.writeEnum(6, _instance.entityTypeView);
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
get name() {
|
|
844
|
+
return this._name;
|
|
845
|
+
}
|
|
846
|
+
set name(value) {
|
|
847
|
+
this._name = value;
|
|
848
|
+
}
|
|
849
|
+
get languageCode() {
|
|
850
|
+
return this._languageCode;
|
|
851
|
+
}
|
|
852
|
+
set languageCode(value) {
|
|
853
|
+
this._languageCode = value;
|
|
854
|
+
}
|
|
855
|
+
get pageToken() {
|
|
856
|
+
return this._pageToken;
|
|
857
|
+
}
|
|
858
|
+
set pageToken(value) {
|
|
859
|
+
this._pageToken = value;
|
|
860
|
+
}
|
|
861
|
+
get entityTypeView() {
|
|
862
|
+
return this._entityTypeView;
|
|
863
|
+
}
|
|
864
|
+
set entityTypeView(value) {
|
|
865
|
+
this._entityTypeView = value;
|
|
866
|
+
}
|
|
867
|
+
/**
|
|
868
|
+
* Serialize message to binary data
|
|
869
|
+
* @param instance message instance
|
|
870
|
+
*/
|
|
871
|
+
serializeBinary() {
|
|
872
|
+
const writer = new BinaryWriter();
|
|
873
|
+
GetEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
874
|
+
return writer.getResultBuffer();
|
|
875
|
+
}
|
|
876
|
+
/**
|
|
877
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
878
|
+
*/
|
|
879
|
+
toObject() {
|
|
880
|
+
return {
|
|
881
|
+
name: this.name,
|
|
882
|
+
languageCode: this.languageCode,
|
|
883
|
+
pageToken: this.pageToken,
|
|
884
|
+
entityTypeView: this.entityTypeView
|
|
885
|
+
};
|
|
886
|
+
}
|
|
887
|
+
/**
|
|
888
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
889
|
+
*/
|
|
890
|
+
toJSON() {
|
|
891
|
+
return this.toObject();
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
895
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
896
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
897
|
+
*/
|
|
898
|
+
toProtobufJSON(
|
|
899
|
+
// @ts-ignore
|
|
900
|
+
options) {
|
|
901
|
+
return {
|
|
902
|
+
name: this.name,
|
|
903
|
+
languageCode: this.languageCode,
|
|
904
|
+
pageToken: this.pageToken,
|
|
905
|
+
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
906
|
+
? 0
|
|
907
|
+
: this.entityTypeView]
|
|
908
|
+
};
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
GetEntityTypeRequest.id = 'ondewo.nlu.GetEntityTypeRequest';
|
|
912
|
+
/**
|
|
913
|
+
* Message implementation for ondewo.nlu.CreateEntityTypeRequest
|
|
914
|
+
*/
|
|
915
|
+
export class CreateEntityTypeRequest {
|
|
916
|
+
/**
|
|
917
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
918
|
+
* @param _value initial values object or instance of CreateEntityTypeRequest to deeply clone from
|
|
919
|
+
*/
|
|
920
|
+
constructor(_value) {
|
|
921
|
+
_value = _value || {};
|
|
922
|
+
this.parent = _value.parent;
|
|
923
|
+
this.entityType = _value.entityType
|
|
924
|
+
? new EntityType(_value.entityType)
|
|
925
|
+
: undefined;
|
|
926
|
+
this.languageCode = _value.languageCode;
|
|
927
|
+
this.entityTypeView = _value.entityTypeView;
|
|
928
|
+
CreateEntityTypeRequest.refineValues(this);
|
|
929
|
+
}
|
|
930
|
+
/**
|
|
931
|
+
* Deserialize binary data to message
|
|
932
|
+
* @param instance message instance
|
|
933
|
+
*/
|
|
934
|
+
static deserializeBinary(bytes) {
|
|
935
|
+
const instance = new CreateEntityTypeRequest();
|
|
936
|
+
CreateEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
937
|
+
return instance;
|
|
938
|
+
}
|
|
939
|
+
/**
|
|
940
|
+
* Check all the properties and set default protobuf values if necessary
|
|
941
|
+
* @param _instance message instance
|
|
942
|
+
*/
|
|
943
|
+
static refineValues(_instance) {
|
|
944
|
+
_instance.parent = _instance.parent || '';
|
|
945
|
+
_instance.entityType = _instance.entityType || undefined;
|
|
946
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
947
|
+
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
951
|
+
* @param _instance message instance
|
|
952
|
+
* @param _reader binary reader instance
|
|
953
|
+
*/
|
|
954
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
955
|
+
while (_reader.nextField()) {
|
|
956
|
+
if (_reader.isEndGroup())
|
|
957
|
+
break;
|
|
958
|
+
switch (_reader.getFieldNumber()) {
|
|
959
|
+
case 1:
|
|
960
|
+
_instance.parent = _reader.readString();
|
|
961
|
+
break;
|
|
962
|
+
case 2:
|
|
963
|
+
_instance.entityType = new EntityType();
|
|
964
|
+
_reader.readMessage(_instance.entityType, EntityType.deserializeBinaryFromReader);
|
|
965
|
+
break;
|
|
966
|
+
case 3:
|
|
967
|
+
_instance.languageCode = _reader.readString();
|
|
968
|
+
break;
|
|
969
|
+
case 6:
|
|
970
|
+
_instance.entityTypeView = _reader.readEnum();
|
|
971
|
+
break;
|
|
972
|
+
default:
|
|
973
|
+
_reader.skipField();
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
CreateEntityTypeRequest.refineValues(_instance);
|
|
977
|
+
}
|
|
978
|
+
/**
|
|
979
|
+
* Serializes a message to binary format using provided binary reader
|
|
980
|
+
* @param _instance message instance
|
|
981
|
+
* @param _writer binary writer instance
|
|
982
|
+
*/
|
|
983
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
984
|
+
if (_instance.parent) {
|
|
985
|
+
_writer.writeString(1, _instance.parent);
|
|
986
|
+
}
|
|
987
|
+
if (_instance.entityType) {
|
|
988
|
+
_writer.writeMessage(2, _instance.entityType, EntityType.serializeBinaryToWriter);
|
|
989
|
+
}
|
|
990
|
+
if (_instance.languageCode) {
|
|
991
|
+
_writer.writeString(3, _instance.languageCode);
|
|
992
|
+
}
|
|
993
|
+
if (_instance.entityTypeView) {
|
|
994
|
+
_writer.writeEnum(6, _instance.entityTypeView);
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
get parent() {
|
|
998
|
+
return this._parent;
|
|
999
|
+
}
|
|
1000
|
+
set parent(value) {
|
|
1001
|
+
this._parent = value;
|
|
1002
|
+
}
|
|
1003
|
+
get entityType() {
|
|
1004
|
+
return this._entityType;
|
|
1005
|
+
}
|
|
1006
|
+
set entityType(value) {
|
|
1007
|
+
this._entityType = value;
|
|
1008
|
+
}
|
|
1009
|
+
get languageCode() {
|
|
1010
|
+
return this._languageCode;
|
|
1011
|
+
}
|
|
1012
|
+
set languageCode(value) {
|
|
1013
|
+
this._languageCode = value;
|
|
1014
|
+
}
|
|
1015
|
+
get entityTypeView() {
|
|
1016
|
+
return this._entityTypeView;
|
|
1017
|
+
}
|
|
1018
|
+
set entityTypeView(value) {
|
|
1019
|
+
this._entityTypeView = value;
|
|
1020
|
+
}
|
|
1021
|
+
/**
|
|
1022
|
+
* Serialize message to binary data
|
|
1023
|
+
* @param instance message instance
|
|
1024
|
+
*/
|
|
1025
|
+
serializeBinary() {
|
|
1026
|
+
const writer = new BinaryWriter();
|
|
1027
|
+
CreateEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1028
|
+
return writer.getResultBuffer();
|
|
1029
|
+
}
|
|
1030
|
+
/**
|
|
1031
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1032
|
+
*/
|
|
1033
|
+
toObject() {
|
|
1034
|
+
return {
|
|
1035
|
+
parent: this.parent,
|
|
1036
|
+
entityType: this.entityType ? this.entityType.toObject() : undefined,
|
|
1037
|
+
languageCode: this.languageCode,
|
|
1038
|
+
entityTypeView: this.entityTypeView
|
|
1039
|
+
};
|
|
1040
|
+
}
|
|
1041
|
+
/**
|
|
1042
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1043
|
+
*/
|
|
1044
|
+
toJSON() {
|
|
1045
|
+
return this.toObject();
|
|
1046
|
+
}
|
|
1047
|
+
/**
|
|
1048
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1049
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1050
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1051
|
+
*/
|
|
1052
|
+
toProtobufJSON(
|
|
1053
|
+
// @ts-ignore
|
|
1054
|
+
options) {
|
|
1055
|
+
return {
|
|
1056
|
+
parent: this.parent,
|
|
1057
|
+
entityType: this.entityType
|
|
1058
|
+
? this.entityType.toProtobufJSON(options)
|
|
1059
|
+
: null,
|
|
1060
|
+
languageCode: this.languageCode,
|
|
1061
|
+
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
1062
|
+
? 0
|
|
1063
|
+
: this.entityTypeView]
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
CreateEntityTypeRequest.id = 'ondewo.nlu.CreateEntityTypeRequest';
|
|
1068
|
+
/**
|
|
1069
|
+
* Message implementation for ondewo.nlu.UpdateEntityTypeRequest
|
|
1070
|
+
*/
|
|
1071
|
+
export class UpdateEntityTypeRequest {
|
|
1072
|
+
/**
|
|
1073
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1074
|
+
* @param _value initial values object or instance of UpdateEntityTypeRequest to deeply clone from
|
|
1075
|
+
*/
|
|
1076
|
+
constructor(_value) {
|
|
1077
|
+
_value = _value || {};
|
|
1078
|
+
this.entityType = _value.entityType
|
|
1079
|
+
? new EntityType(_value.entityType)
|
|
1080
|
+
: undefined;
|
|
1081
|
+
this.languageCode = _value.languageCode;
|
|
1082
|
+
this.updateMask = _value.updateMask
|
|
1083
|
+
? new googleProtobuf008.FieldMask(_value.updateMask)
|
|
1084
|
+
: undefined;
|
|
1085
|
+
this.entityTypeView = _value.entityTypeView;
|
|
1086
|
+
UpdateEntityTypeRequest.refineValues(this);
|
|
1087
|
+
}
|
|
1088
|
+
/**
|
|
1089
|
+
* Deserialize binary data to message
|
|
1090
|
+
* @param instance message instance
|
|
1091
|
+
*/
|
|
1092
|
+
static deserializeBinary(bytes) {
|
|
1093
|
+
const instance = new UpdateEntityTypeRequest();
|
|
1094
|
+
UpdateEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1095
|
+
return instance;
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1099
|
+
* @param _instance message instance
|
|
1100
|
+
*/
|
|
1101
|
+
static refineValues(_instance) {
|
|
1102
|
+
_instance.entityType = _instance.entityType || undefined;
|
|
1103
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
1104
|
+
_instance.updateMask = _instance.updateMask || undefined;
|
|
1105
|
+
_instance.entityTypeView = _instance.entityTypeView || 0;
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1109
|
+
* @param _instance message instance
|
|
1110
|
+
* @param _reader binary reader instance
|
|
1111
|
+
*/
|
|
1112
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1113
|
+
while (_reader.nextField()) {
|
|
1114
|
+
if (_reader.isEndGroup())
|
|
1115
|
+
break;
|
|
1116
|
+
switch (_reader.getFieldNumber()) {
|
|
1117
|
+
case 1:
|
|
1118
|
+
_instance.entityType = new EntityType();
|
|
1119
|
+
_reader.readMessage(_instance.entityType, EntityType.deserializeBinaryFromReader);
|
|
1120
|
+
break;
|
|
1121
|
+
case 2:
|
|
1122
|
+
_instance.languageCode = _reader.readString();
|
|
1123
|
+
break;
|
|
1124
|
+
case 3:
|
|
1125
|
+
_instance.updateMask = new googleProtobuf008.FieldMask();
|
|
1126
|
+
_reader.readMessage(_instance.updateMask, googleProtobuf008.FieldMask.deserializeBinaryFromReader);
|
|
1127
|
+
break;
|
|
1128
|
+
case 6:
|
|
1129
|
+
_instance.entityTypeView = _reader.readEnum();
|
|
1130
|
+
break;
|
|
1131
|
+
default:
|
|
1132
|
+
_reader.skipField();
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
UpdateEntityTypeRequest.refineValues(_instance);
|
|
1136
|
+
}
|
|
1137
|
+
/**
|
|
1138
|
+
* Serializes a message to binary format using provided binary reader
|
|
1139
|
+
* @param _instance message instance
|
|
1140
|
+
* @param _writer binary writer instance
|
|
1141
|
+
*/
|
|
1142
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1143
|
+
if (_instance.entityType) {
|
|
1144
|
+
_writer.writeMessage(1, _instance.entityType, EntityType.serializeBinaryToWriter);
|
|
1145
|
+
}
|
|
1146
|
+
if (_instance.languageCode) {
|
|
1147
|
+
_writer.writeString(2, _instance.languageCode);
|
|
1148
|
+
}
|
|
1149
|
+
if (_instance.updateMask) {
|
|
1150
|
+
_writer.writeMessage(3, _instance.updateMask, googleProtobuf008.FieldMask.serializeBinaryToWriter);
|
|
1151
|
+
}
|
|
1152
|
+
if (_instance.entityTypeView) {
|
|
1153
|
+
_writer.writeEnum(6, _instance.entityTypeView);
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
get entityType() {
|
|
1157
|
+
return this._entityType;
|
|
1158
|
+
}
|
|
1159
|
+
set entityType(value) {
|
|
1160
|
+
this._entityType = value;
|
|
1161
|
+
}
|
|
1162
|
+
get languageCode() {
|
|
1163
|
+
return this._languageCode;
|
|
1164
|
+
}
|
|
1165
|
+
set languageCode(value) {
|
|
1166
|
+
this._languageCode = value;
|
|
1167
|
+
}
|
|
1168
|
+
get updateMask() {
|
|
1169
|
+
return this._updateMask;
|
|
1170
|
+
}
|
|
1171
|
+
set updateMask(value) {
|
|
1172
|
+
this._updateMask = value;
|
|
1173
|
+
}
|
|
1174
|
+
get entityTypeView() {
|
|
1175
|
+
return this._entityTypeView;
|
|
1176
|
+
}
|
|
1177
|
+
set entityTypeView(value) {
|
|
1178
|
+
this._entityTypeView = value;
|
|
1179
|
+
}
|
|
1180
|
+
/**
|
|
1181
|
+
* Serialize message to binary data
|
|
1182
|
+
* @param instance message instance
|
|
1183
|
+
*/
|
|
1184
|
+
serializeBinary() {
|
|
1185
|
+
const writer = new BinaryWriter();
|
|
1186
|
+
UpdateEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1187
|
+
return writer.getResultBuffer();
|
|
1188
|
+
}
|
|
1189
|
+
/**
|
|
1190
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1191
|
+
*/
|
|
1192
|
+
toObject() {
|
|
1193
|
+
return {
|
|
1194
|
+
entityType: this.entityType ? this.entityType.toObject() : undefined,
|
|
1195
|
+
languageCode: this.languageCode,
|
|
1196
|
+
updateMask: this.updateMask ? this.updateMask.toObject() : undefined,
|
|
1197
|
+
entityTypeView: this.entityTypeView
|
|
1198
|
+
};
|
|
1199
|
+
}
|
|
1200
|
+
/**
|
|
1201
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1202
|
+
*/
|
|
1203
|
+
toJSON() {
|
|
1204
|
+
return this.toObject();
|
|
1205
|
+
}
|
|
1206
|
+
/**
|
|
1207
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1208
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1209
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1210
|
+
*/
|
|
1211
|
+
toProtobufJSON(
|
|
1212
|
+
// @ts-ignore
|
|
1213
|
+
options) {
|
|
1214
|
+
return {
|
|
1215
|
+
entityType: this.entityType
|
|
1216
|
+
? this.entityType.toProtobufJSON(options)
|
|
1217
|
+
: null,
|
|
1218
|
+
languageCode: this.languageCode,
|
|
1219
|
+
updateMask: this.updateMask
|
|
1220
|
+
? this.updateMask.toProtobufJSON(options)
|
|
1221
|
+
: null,
|
|
1222
|
+
entityTypeView: EntityTypeView[this.entityTypeView === null || this.entityTypeView === undefined
|
|
1223
|
+
? 0
|
|
1224
|
+
: this.entityTypeView]
|
|
1225
|
+
};
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
UpdateEntityTypeRequest.id = 'ondewo.nlu.UpdateEntityTypeRequest';
|
|
1229
|
+
/**
|
|
1230
|
+
* Message implementation for ondewo.nlu.DeleteEntityTypeRequest
|
|
1231
|
+
*/
|
|
1232
|
+
export class DeleteEntityTypeRequest {
|
|
1233
|
+
/**
|
|
1234
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1235
|
+
* @param _value initial values object or instance of DeleteEntityTypeRequest to deeply clone from
|
|
1236
|
+
*/
|
|
1237
|
+
constructor(_value) {
|
|
1238
|
+
_value = _value || {};
|
|
1239
|
+
this.name = _value.name;
|
|
1240
|
+
DeleteEntityTypeRequest.refineValues(this);
|
|
1241
|
+
}
|
|
1242
|
+
/**
|
|
1243
|
+
* Deserialize binary data to message
|
|
1244
|
+
* @param instance message instance
|
|
1245
|
+
*/
|
|
1246
|
+
static deserializeBinary(bytes) {
|
|
1247
|
+
const instance = new DeleteEntityTypeRequest();
|
|
1248
|
+
DeleteEntityTypeRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1249
|
+
return instance;
|
|
1250
|
+
}
|
|
1251
|
+
/**
|
|
1252
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1253
|
+
* @param _instance message instance
|
|
1254
|
+
*/
|
|
1255
|
+
static refineValues(_instance) {
|
|
1256
|
+
_instance.name = _instance.name || '';
|
|
1257
|
+
}
|
|
1258
|
+
/**
|
|
1259
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1260
|
+
* @param _instance message instance
|
|
1261
|
+
* @param _reader binary reader instance
|
|
1262
|
+
*/
|
|
1263
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1264
|
+
while (_reader.nextField()) {
|
|
1265
|
+
if (_reader.isEndGroup())
|
|
1266
|
+
break;
|
|
1267
|
+
switch (_reader.getFieldNumber()) {
|
|
1268
|
+
case 1:
|
|
1269
|
+
_instance.name = _reader.readString();
|
|
1270
|
+
break;
|
|
1271
|
+
default:
|
|
1272
|
+
_reader.skipField();
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
DeleteEntityTypeRequest.refineValues(_instance);
|
|
1276
|
+
}
|
|
1277
|
+
/**
|
|
1278
|
+
* Serializes a message to binary format using provided binary reader
|
|
1279
|
+
* @param _instance message instance
|
|
1280
|
+
* @param _writer binary writer instance
|
|
1281
|
+
*/
|
|
1282
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1283
|
+
if (_instance.name) {
|
|
1284
|
+
_writer.writeString(1, _instance.name);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
get name() {
|
|
1288
|
+
return this._name;
|
|
1289
|
+
}
|
|
1290
|
+
set name(value) {
|
|
1291
|
+
this._name = value;
|
|
1292
|
+
}
|
|
1293
|
+
/**
|
|
1294
|
+
* Serialize message to binary data
|
|
1295
|
+
* @param instance message instance
|
|
1296
|
+
*/
|
|
1297
|
+
serializeBinary() {
|
|
1298
|
+
const writer = new BinaryWriter();
|
|
1299
|
+
DeleteEntityTypeRequest.serializeBinaryToWriter(this, writer);
|
|
1300
|
+
return writer.getResultBuffer();
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1304
|
+
*/
|
|
1305
|
+
toObject() {
|
|
1306
|
+
return {
|
|
1307
|
+
name: this.name
|
|
1308
|
+
};
|
|
1309
|
+
}
|
|
1310
|
+
/**
|
|
1311
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1312
|
+
*/
|
|
1313
|
+
toJSON() {
|
|
1314
|
+
return this.toObject();
|
|
1315
|
+
}
|
|
1316
|
+
/**
|
|
1317
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1318
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1319
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1320
|
+
*/
|
|
1321
|
+
toProtobufJSON(
|
|
1322
|
+
// @ts-ignore
|
|
1323
|
+
options) {
|
|
1324
|
+
return {
|
|
1325
|
+
name: this.name
|
|
1326
|
+
};
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
DeleteEntityTypeRequest.id = 'ondewo.nlu.DeleteEntityTypeRequest';
|
|
1330
|
+
/**
|
|
1331
|
+
* Message implementation for ondewo.nlu.BatchUpdateEntityTypesRequest
|
|
1332
|
+
*/
|
|
1333
|
+
export class BatchUpdateEntityTypesRequest {
|
|
1334
|
+
/**
|
|
1335
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1336
|
+
* @param _value initial values object or instance of BatchUpdateEntityTypesRequest to deeply clone from
|
|
1337
|
+
*/
|
|
1338
|
+
constructor(_value) {
|
|
1339
|
+
this._entityTypeBatch = BatchUpdateEntityTypesRequest.EntityTypeBatchCase.none;
|
|
1340
|
+
_value = _value || {};
|
|
1341
|
+
this.parent = _value.parent;
|
|
1342
|
+
this.entityTypeBatchUri = _value.entityTypeBatchUri;
|
|
1343
|
+
this.entityTypeBatchInline = _value.entityTypeBatchInline
|
|
1344
|
+
? new EntityTypeBatch(_value.entityTypeBatchInline)
|
|
1345
|
+
: undefined;
|
|
1346
|
+
this.languageCode = _value.languageCode;
|
|
1347
|
+
this.updateMask = _value.updateMask
|
|
1348
|
+
? new googleProtobuf008.FieldMask(_value.updateMask)
|
|
1349
|
+
: undefined;
|
|
1350
|
+
BatchUpdateEntityTypesRequest.refineValues(this);
|
|
1351
|
+
}
|
|
1352
|
+
/**
|
|
1353
|
+
* Deserialize binary data to message
|
|
1354
|
+
* @param instance message instance
|
|
1355
|
+
*/
|
|
1356
|
+
static deserializeBinary(bytes) {
|
|
1357
|
+
const instance = new BatchUpdateEntityTypesRequest();
|
|
1358
|
+
BatchUpdateEntityTypesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1359
|
+
return instance;
|
|
1360
|
+
}
|
|
1361
|
+
/**
|
|
1362
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1363
|
+
* @param _instance message instance
|
|
1364
|
+
*/
|
|
1365
|
+
static refineValues(_instance) {
|
|
1366
|
+
_instance.parent = _instance.parent || '';
|
|
1367
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
1368
|
+
_instance.updateMask = _instance.updateMask || undefined;
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1372
|
+
* @param _instance message instance
|
|
1373
|
+
* @param _reader binary reader instance
|
|
1374
|
+
*/
|
|
1375
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1376
|
+
while (_reader.nextField()) {
|
|
1377
|
+
if (_reader.isEndGroup())
|
|
1378
|
+
break;
|
|
1379
|
+
switch (_reader.getFieldNumber()) {
|
|
1380
|
+
case 1:
|
|
1381
|
+
_instance.parent = _reader.readString();
|
|
1382
|
+
break;
|
|
1383
|
+
case 2:
|
|
1384
|
+
_instance.entityTypeBatchUri = _reader.readString();
|
|
1385
|
+
break;
|
|
1386
|
+
case 3:
|
|
1387
|
+
_instance.entityTypeBatchInline = new EntityTypeBatch();
|
|
1388
|
+
_reader.readMessage(_instance.entityTypeBatchInline, EntityTypeBatch.deserializeBinaryFromReader);
|
|
1389
|
+
break;
|
|
1390
|
+
case 4:
|
|
1391
|
+
_instance.languageCode = _reader.readString();
|
|
1392
|
+
break;
|
|
1393
|
+
case 5:
|
|
1394
|
+
_instance.updateMask = new googleProtobuf008.FieldMask();
|
|
1395
|
+
_reader.readMessage(_instance.updateMask, googleProtobuf008.FieldMask.deserializeBinaryFromReader);
|
|
1396
|
+
break;
|
|
1397
|
+
default:
|
|
1398
|
+
_reader.skipField();
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
BatchUpdateEntityTypesRequest.refineValues(_instance);
|
|
1402
|
+
}
|
|
1403
|
+
/**
|
|
1404
|
+
* Serializes a message to binary format using provided binary reader
|
|
1405
|
+
* @param _instance message instance
|
|
1406
|
+
* @param _writer binary writer instance
|
|
1407
|
+
*/
|
|
1408
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1409
|
+
if (_instance.parent) {
|
|
1410
|
+
_writer.writeString(1, _instance.parent);
|
|
1411
|
+
}
|
|
1412
|
+
if (_instance.entityTypeBatchUri || _instance.entityTypeBatchUri === '') {
|
|
1413
|
+
_writer.writeString(2, _instance.entityTypeBatchUri);
|
|
1414
|
+
}
|
|
1415
|
+
if (_instance.entityTypeBatchInline) {
|
|
1416
|
+
_writer.writeMessage(3, _instance.entityTypeBatchInline, EntityTypeBatch.serializeBinaryToWriter);
|
|
1417
|
+
}
|
|
1418
|
+
if (_instance.languageCode) {
|
|
1419
|
+
_writer.writeString(4, _instance.languageCode);
|
|
1420
|
+
}
|
|
1421
|
+
if (_instance.updateMask) {
|
|
1422
|
+
_writer.writeMessage(5, _instance.updateMask, googleProtobuf008.FieldMask.serializeBinaryToWriter);
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
get parent() {
|
|
1426
|
+
return this._parent;
|
|
1427
|
+
}
|
|
1428
|
+
set parent(value) {
|
|
1429
|
+
this._parent = value;
|
|
1430
|
+
}
|
|
1431
|
+
get entityTypeBatchUri() {
|
|
1432
|
+
return this._entityTypeBatchUri;
|
|
1433
|
+
}
|
|
1434
|
+
set entityTypeBatchUri(value) {
|
|
1435
|
+
if (value !== undefined && value !== null) {
|
|
1436
|
+
this._entityTypeBatchInline = undefined;
|
|
1437
|
+
this._entityTypeBatch =
|
|
1438
|
+
BatchUpdateEntityTypesRequest.EntityTypeBatchCase.entityTypeBatchUri;
|
|
1439
|
+
}
|
|
1440
|
+
this._entityTypeBatchUri = value;
|
|
1441
|
+
}
|
|
1442
|
+
get entityTypeBatchInline() {
|
|
1443
|
+
return this._entityTypeBatchInline;
|
|
1444
|
+
}
|
|
1445
|
+
set entityTypeBatchInline(value) {
|
|
1446
|
+
if (value !== undefined && value !== null) {
|
|
1447
|
+
this._entityTypeBatchUri = undefined;
|
|
1448
|
+
this._entityTypeBatch =
|
|
1449
|
+
BatchUpdateEntityTypesRequest.EntityTypeBatchCase.entityTypeBatchInline;
|
|
1450
|
+
}
|
|
1451
|
+
this._entityTypeBatchInline = value;
|
|
1452
|
+
}
|
|
1453
|
+
get languageCode() {
|
|
1454
|
+
return this._languageCode;
|
|
1455
|
+
}
|
|
1456
|
+
set languageCode(value) {
|
|
1457
|
+
this._languageCode = value;
|
|
1458
|
+
}
|
|
1459
|
+
get updateMask() {
|
|
1460
|
+
return this._updateMask;
|
|
1461
|
+
}
|
|
1462
|
+
set updateMask(value) {
|
|
1463
|
+
this._updateMask = value;
|
|
1464
|
+
}
|
|
1465
|
+
get entityTypeBatch() {
|
|
1466
|
+
return this._entityTypeBatch;
|
|
1467
|
+
}
|
|
1468
|
+
/**
|
|
1469
|
+
* Serialize message to binary data
|
|
1470
|
+
* @param instance message instance
|
|
1471
|
+
*/
|
|
1472
|
+
serializeBinary() {
|
|
1473
|
+
const writer = new BinaryWriter();
|
|
1474
|
+
BatchUpdateEntityTypesRequest.serializeBinaryToWriter(this, writer);
|
|
1475
|
+
return writer.getResultBuffer();
|
|
1476
|
+
}
|
|
1477
|
+
/**
|
|
1478
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1479
|
+
*/
|
|
1480
|
+
toObject() {
|
|
1481
|
+
return {
|
|
1482
|
+
parent: this.parent,
|
|
1483
|
+
entityTypeBatchUri: this.entityTypeBatchUri,
|
|
1484
|
+
entityTypeBatchInline: this.entityTypeBatchInline
|
|
1485
|
+
? this.entityTypeBatchInline.toObject()
|
|
1486
|
+
: undefined,
|
|
1487
|
+
languageCode: this.languageCode,
|
|
1488
|
+
updateMask: this.updateMask ? this.updateMask.toObject() : undefined
|
|
1489
|
+
};
|
|
1490
|
+
}
|
|
1491
|
+
/**
|
|
1492
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1493
|
+
*/
|
|
1494
|
+
toJSON() {
|
|
1495
|
+
return this.toObject();
|
|
1496
|
+
}
|
|
1497
|
+
/**
|
|
1498
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1499
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1500
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1501
|
+
*/
|
|
1502
|
+
toProtobufJSON(
|
|
1503
|
+
// @ts-ignore
|
|
1504
|
+
options) {
|
|
1505
|
+
return {
|
|
1506
|
+
parent: this.parent,
|
|
1507
|
+
entityTypeBatchUri: this.entityTypeBatchUri === null ||
|
|
1508
|
+
this.entityTypeBatchUri === undefined
|
|
1509
|
+
? null
|
|
1510
|
+
: this.entityTypeBatchUri,
|
|
1511
|
+
entityTypeBatchInline: this.entityTypeBatchInline
|
|
1512
|
+
? this.entityTypeBatchInline.toProtobufJSON(options)
|
|
1513
|
+
: null,
|
|
1514
|
+
languageCode: this.languageCode,
|
|
1515
|
+
updateMask: this.updateMask
|
|
1516
|
+
? this.updateMask.toProtobufJSON(options)
|
|
1517
|
+
: null
|
|
1518
|
+
};
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
BatchUpdateEntityTypesRequest.id = 'ondewo.nlu.BatchUpdateEntityTypesRequest';
|
|
1522
|
+
(function (BatchUpdateEntityTypesRequest) {
|
|
1523
|
+
let EntityTypeBatchCase;
|
|
1524
|
+
(function (EntityTypeBatchCase) {
|
|
1525
|
+
EntityTypeBatchCase[EntityTypeBatchCase["none"] = 0] = "none";
|
|
1526
|
+
EntityTypeBatchCase[EntityTypeBatchCase["entityTypeBatchUri"] = 1] = "entityTypeBatchUri";
|
|
1527
|
+
EntityTypeBatchCase[EntityTypeBatchCase["entityTypeBatchInline"] = 2] = "entityTypeBatchInline";
|
|
1528
|
+
})(EntityTypeBatchCase = BatchUpdateEntityTypesRequest.EntityTypeBatchCase || (BatchUpdateEntityTypesRequest.EntityTypeBatchCase = {}));
|
|
1529
|
+
})(BatchUpdateEntityTypesRequest || (BatchUpdateEntityTypesRequest = {}));
|
|
1530
|
+
/**
|
|
1531
|
+
* Message implementation for ondewo.nlu.BatchUpdateEntityTypesResponse
|
|
1532
|
+
*/
|
|
1533
|
+
export class BatchUpdateEntityTypesResponse {
|
|
1534
|
+
/**
|
|
1535
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1536
|
+
* @param _value initial values object or instance of BatchUpdateEntityTypesResponse to deeply clone from
|
|
1537
|
+
*/
|
|
1538
|
+
constructor(_value) {
|
|
1539
|
+
_value = _value || {};
|
|
1540
|
+
this.entityTypes = (_value.entityTypes || []).map(m => new EntityType(m));
|
|
1541
|
+
BatchUpdateEntityTypesResponse.refineValues(this);
|
|
1542
|
+
}
|
|
1543
|
+
/**
|
|
1544
|
+
* Deserialize binary data to message
|
|
1545
|
+
* @param instance message instance
|
|
1546
|
+
*/
|
|
1547
|
+
static deserializeBinary(bytes) {
|
|
1548
|
+
const instance = new BatchUpdateEntityTypesResponse();
|
|
1549
|
+
BatchUpdateEntityTypesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1550
|
+
return instance;
|
|
1551
|
+
}
|
|
1552
|
+
/**
|
|
1553
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1554
|
+
* @param _instance message instance
|
|
1555
|
+
*/
|
|
1556
|
+
static refineValues(_instance) {
|
|
1557
|
+
_instance.entityTypes = _instance.entityTypes || [];
|
|
1558
|
+
}
|
|
1559
|
+
/**
|
|
1560
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1561
|
+
* @param _instance message instance
|
|
1562
|
+
* @param _reader binary reader instance
|
|
1563
|
+
*/
|
|
1564
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1565
|
+
while (_reader.nextField()) {
|
|
1566
|
+
if (_reader.isEndGroup())
|
|
1567
|
+
break;
|
|
1568
|
+
switch (_reader.getFieldNumber()) {
|
|
1569
|
+
case 1:
|
|
1570
|
+
const messageInitializer1 = new EntityType();
|
|
1571
|
+
_reader.readMessage(messageInitializer1, EntityType.deserializeBinaryFromReader);
|
|
1572
|
+
(_instance.entityTypes = _instance.entityTypes || []).push(messageInitializer1);
|
|
1573
|
+
break;
|
|
1574
|
+
default:
|
|
1575
|
+
_reader.skipField();
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
BatchUpdateEntityTypesResponse.refineValues(_instance);
|
|
1579
|
+
}
|
|
1580
|
+
/**
|
|
1581
|
+
* Serializes a message to binary format using provided binary reader
|
|
1582
|
+
* @param _instance message instance
|
|
1583
|
+
* @param _writer binary writer instance
|
|
1584
|
+
*/
|
|
1585
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1586
|
+
if (_instance.entityTypes && _instance.entityTypes.length) {
|
|
1587
|
+
_writer.writeRepeatedMessage(1, _instance.entityTypes, EntityType.serializeBinaryToWriter);
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
get entityTypes() {
|
|
1591
|
+
return this._entityTypes;
|
|
1592
|
+
}
|
|
1593
|
+
set entityTypes(value) {
|
|
1594
|
+
this._entityTypes = value;
|
|
1595
|
+
}
|
|
1596
|
+
/**
|
|
1597
|
+
* Serialize message to binary data
|
|
1598
|
+
* @param instance message instance
|
|
1599
|
+
*/
|
|
1600
|
+
serializeBinary() {
|
|
1601
|
+
const writer = new BinaryWriter();
|
|
1602
|
+
BatchUpdateEntityTypesResponse.serializeBinaryToWriter(this, writer);
|
|
1603
|
+
return writer.getResultBuffer();
|
|
1604
|
+
}
|
|
1605
|
+
/**
|
|
1606
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1607
|
+
*/
|
|
1608
|
+
toObject() {
|
|
1609
|
+
return {
|
|
1610
|
+
entityTypes: (this.entityTypes || []).map(m => m.toObject())
|
|
1611
|
+
};
|
|
1612
|
+
}
|
|
1613
|
+
/**
|
|
1614
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1615
|
+
*/
|
|
1616
|
+
toJSON() {
|
|
1617
|
+
return this.toObject();
|
|
1618
|
+
}
|
|
1619
|
+
/**
|
|
1620
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1621
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1622
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1623
|
+
*/
|
|
1624
|
+
toProtobufJSON(
|
|
1625
|
+
// @ts-ignore
|
|
1626
|
+
options) {
|
|
1627
|
+
return {
|
|
1628
|
+
entityTypes: (this.entityTypes || []).map(m => m.toProtobufJSON(options))
|
|
1629
|
+
};
|
|
1630
|
+
}
|
|
1631
|
+
}
|
|
1632
|
+
BatchUpdateEntityTypesResponse.id = 'ondewo.nlu.BatchUpdateEntityTypesResponse';
|
|
1633
|
+
/**
|
|
1634
|
+
* Message implementation for ondewo.nlu.BatchDeleteEntityTypesRequest
|
|
1635
|
+
*/
|
|
1636
|
+
export class BatchDeleteEntityTypesRequest {
|
|
1637
|
+
/**
|
|
1638
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1639
|
+
* @param _value initial values object or instance of BatchDeleteEntityTypesRequest to deeply clone from
|
|
1640
|
+
*/
|
|
1641
|
+
constructor(_value) {
|
|
1642
|
+
_value = _value || {};
|
|
1643
|
+
this.parent = _value.parent;
|
|
1644
|
+
this.entityTypeNames = (_value.entityTypeNames || []).slice();
|
|
1645
|
+
BatchDeleteEntityTypesRequest.refineValues(this);
|
|
1646
|
+
}
|
|
1647
|
+
/**
|
|
1648
|
+
* Deserialize binary data to message
|
|
1649
|
+
* @param instance message instance
|
|
1650
|
+
*/
|
|
1651
|
+
static deserializeBinary(bytes) {
|
|
1652
|
+
const instance = new BatchDeleteEntityTypesRequest();
|
|
1653
|
+
BatchDeleteEntityTypesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1654
|
+
return instance;
|
|
1655
|
+
}
|
|
1656
|
+
/**
|
|
1657
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1658
|
+
* @param _instance message instance
|
|
1659
|
+
*/
|
|
1660
|
+
static refineValues(_instance) {
|
|
1661
|
+
_instance.parent = _instance.parent || '';
|
|
1662
|
+
_instance.entityTypeNames = _instance.entityTypeNames || [];
|
|
1663
|
+
}
|
|
1664
|
+
/**
|
|
1665
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1666
|
+
* @param _instance message instance
|
|
1667
|
+
* @param _reader binary reader instance
|
|
1668
|
+
*/
|
|
1669
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1670
|
+
while (_reader.nextField()) {
|
|
1671
|
+
if (_reader.isEndGroup())
|
|
1672
|
+
break;
|
|
1673
|
+
switch (_reader.getFieldNumber()) {
|
|
1674
|
+
case 1:
|
|
1675
|
+
_instance.parent = _reader.readString();
|
|
1676
|
+
break;
|
|
1677
|
+
case 2:
|
|
1678
|
+
(_instance.entityTypeNames = _instance.entityTypeNames || []).push(_reader.readString());
|
|
1679
|
+
break;
|
|
1680
|
+
default:
|
|
1681
|
+
_reader.skipField();
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
BatchDeleteEntityTypesRequest.refineValues(_instance);
|
|
1685
|
+
}
|
|
1686
|
+
/**
|
|
1687
|
+
* Serializes a message to binary format using provided binary reader
|
|
1688
|
+
* @param _instance message instance
|
|
1689
|
+
* @param _writer binary writer instance
|
|
1690
|
+
*/
|
|
1691
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1692
|
+
if (_instance.parent) {
|
|
1693
|
+
_writer.writeString(1, _instance.parent);
|
|
1694
|
+
}
|
|
1695
|
+
if (_instance.entityTypeNames && _instance.entityTypeNames.length) {
|
|
1696
|
+
_writer.writeRepeatedString(2, _instance.entityTypeNames);
|
|
1697
|
+
}
|
|
1698
|
+
}
|
|
1699
|
+
get parent() {
|
|
1700
|
+
return this._parent;
|
|
1701
|
+
}
|
|
1702
|
+
set parent(value) {
|
|
1703
|
+
this._parent = value;
|
|
1704
|
+
}
|
|
1705
|
+
get entityTypeNames() {
|
|
1706
|
+
return this._entityTypeNames;
|
|
1707
|
+
}
|
|
1708
|
+
set entityTypeNames(value) {
|
|
1709
|
+
this._entityTypeNames = value;
|
|
1710
|
+
}
|
|
1711
|
+
/**
|
|
1712
|
+
* Serialize message to binary data
|
|
1713
|
+
* @param instance message instance
|
|
1714
|
+
*/
|
|
1715
|
+
serializeBinary() {
|
|
1716
|
+
const writer = new BinaryWriter();
|
|
1717
|
+
BatchDeleteEntityTypesRequest.serializeBinaryToWriter(this, writer);
|
|
1718
|
+
return writer.getResultBuffer();
|
|
1719
|
+
}
|
|
1720
|
+
/**
|
|
1721
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1722
|
+
*/
|
|
1723
|
+
toObject() {
|
|
1724
|
+
return {
|
|
1725
|
+
parent: this.parent,
|
|
1726
|
+
entityTypeNames: (this.entityTypeNames || []).slice()
|
|
1727
|
+
};
|
|
1728
|
+
}
|
|
1729
|
+
/**
|
|
1730
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1731
|
+
*/
|
|
1732
|
+
toJSON() {
|
|
1733
|
+
return this.toObject();
|
|
1734
|
+
}
|
|
1735
|
+
/**
|
|
1736
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1737
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1738
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1739
|
+
*/
|
|
1740
|
+
toProtobufJSON(
|
|
1741
|
+
// @ts-ignore
|
|
1742
|
+
options) {
|
|
1743
|
+
return {
|
|
1744
|
+
parent: this.parent,
|
|
1745
|
+
entityTypeNames: (this.entityTypeNames || []).slice()
|
|
1746
|
+
};
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
BatchDeleteEntityTypesRequest.id = 'ondewo.nlu.BatchDeleteEntityTypesRequest';
|
|
1750
|
+
/**
|
|
1751
|
+
* Message implementation for ondewo.nlu.EntityTypeBatch
|
|
1752
|
+
*/
|
|
1753
|
+
export class EntityTypeBatch {
|
|
1754
|
+
/**
|
|
1755
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1756
|
+
* @param _value initial values object or instance of EntityTypeBatch to deeply clone from
|
|
1757
|
+
*/
|
|
1758
|
+
constructor(_value) {
|
|
1759
|
+
_value = _value || {};
|
|
1760
|
+
this.entityTypes = (_value.entityTypes || []).map(m => new EntityType(m));
|
|
1761
|
+
EntityTypeBatch.refineValues(this);
|
|
1762
|
+
}
|
|
1763
|
+
/**
|
|
1764
|
+
* Deserialize binary data to message
|
|
1765
|
+
* @param instance message instance
|
|
1766
|
+
*/
|
|
1767
|
+
static deserializeBinary(bytes) {
|
|
1768
|
+
const instance = new EntityTypeBatch();
|
|
1769
|
+
EntityTypeBatch.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1770
|
+
return instance;
|
|
1771
|
+
}
|
|
1772
|
+
/**
|
|
1773
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1774
|
+
* @param _instance message instance
|
|
1775
|
+
*/
|
|
1776
|
+
static refineValues(_instance) {
|
|
1777
|
+
_instance.entityTypes = _instance.entityTypes || [];
|
|
1778
|
+
}
|
|
1779
|
+
/**
|
|
1780
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1781
|
+
* @param _instance message instance
|
|
1782
|
+
* @param _reader binary reader instance
|
|
1783
|
+
*/
|
|
1784
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1785
|
+
while (_reader.nextField()) {
|
|
1786
|
+
if (_reader.isEndGroup())
|
|
1787
|
+
break;
|
|
1788
|
+
switch (_reader.getFieldNumber()) {
|
|
1789
|
+
case 1:
|
|
1790
|
+
const messageInitializer1 = new EntityType();
|
|
1791
|
+
_reader.readMessage(messageInitializer1, EntityType.deserializeBinaryFromReader);
|
|
1792
|
+
(_instance.entityTypes = _instance.entityTypes || []).push(messageInitializer1);
|
|
1793
|
+
break;
|
|
1794
|
+
default:
|
|
1795
|
+
_reader.skipField();
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
EntityTypeBatch.refineValues(_instance);
|
|
1799
|
+
}
|
|
1800
|
+
/**
|
|
1801
|
+
* Serializes a message to binary format using provided binary reader
|
|
1802
|
+
* @param _instance message instance
|
|
1803
|
+
* @param _writer binary writer instance
|
|
1804
|
+
*/
|
|
1805
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1806
|
+
if (_instance.entityTypes && _instance.entityTypes.length) {
|
|
1807
|
+
_writer.writeRepeatedMessage(1, _instance.entityTypes, EntityType.serializeBinaryToWriter);
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1810
|
+
get entityTypes() {
|
|
1811
|
+
return this._entityTypes;
|
|
1812
|
+
}
|
|
1813
|
+
set entityTypes(value) {
|
|
1814
|
+
this._entityTypes = value;
|
|
1815
|
+
}
|
|
1816
|
+
/**
|
|
1817
|
+
* Serialize message to binary data
|
|
1818
|
+
* @param instance message instance
|
|
1819
|
+
*/
|
|
1820
|
+
serializeBinary() {
|
|
1821
|
+
const writer = new BinaryWriter();
|
|
1822
|
+
EntityTypeBatch.serializeBinaryToWriter(this, writer);
|
|
1823
|
+
return writer.getResultBuffer();
|
|
1824
|
+
}
|
|
1825
|
+
/**
|
|
1826
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1827
|
+
*/
|
|
1828
|
+
toObject() {
|
|
1829
|
+
return {
|
|
1830
|
+
entityTypes: (this.entityTypes || []).map(m => m.toObject())
|
|
1831
|
+
};
|
|
1832
|
+
}
|
|
1833
|
+
/**
|
|
1834
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1835
|
+
*/
|
|
1836
|
+
toJSON() {
|
|
1837
|
+
return this.toObject();
|
|
1838
|
+
}
|
|
1839
|
+
/**
|
|
1840
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1841
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1842
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1843
|
+
*/
|
|
1844
|
+
toProtobufJSON(
|
|
1845
|
+
// @ts-ignore
|
|
1846
|
+
options) {
|
|
1847
|
+
return {
|
|
1848
|
+
entityTypes: (this.entityTypes || []).map(m => m.toProtobufJSON(options))
|
|
1849
|
+
};
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
EntityTypeBatch.id = 'ondewo.nlu.EntityTypeBatch';
|
|
1853
|
+
/**
|
|
1854
|
+
* Message implementation for ondewo.nlu.EntityTypeSorting
|
|
1855
|
+
*/
|
|
1856
|
+
export class EntityTypeSorting {
|
|
1857
|
+
/**
|
|
1858
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1859
|
+
* @param _value initial values object or instance of EntityTypeSorting to deeply clone from
|
|
1860
|
+
*/
|
|
1861
|
+
constructor(_value) {
|
|
1862
|
+
_value = _value || {};
|
|
1863
|
+
this.sortingField = _value.sortingField;
|
|
1864
|
+
this.sortingMode = _value.sortingMode;
|
|
1865
|
+
EntityTypeSorting.refineValues(this);
|
|
1866
|
+
}
|
|
1867
|
+
/**
|
|
1868
|
+
* Deserialize binary data to message
|
|
1869
|
+
* @param instance message instance
|
|
1870
|
+
*/
|
|
1871
|
+
static deserializeBinary(bytes) {
|
|
1872
|
+
const instance = new EntityTypeSorting();
|
|
1873
|
+
EntityTypeSorting.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1874
|
+
return instance;
|
|
1875
|
+
}
|
|
1876
|
+
/**
|
|
1877
|
+
* Check all the properties and set default protobuf values if necessary
|
|
1878
|
+
* @param _instance message instance
|
|
1879
|
+
*/
|
|
1880
|
+
static refineValues(_instance) {
|
|
1881
|
+
_instance.sortingField = _instance.sortingField || 0;
|
|
1882
|
+
_instance.sortingMode = _instance.sortingMode || 0;
|
|
1883
|
+
}
|
|
1884
|
+
/**
|
|
1885
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1886
|
+
* @param _instance message instance
|
|
1887
|
+
* @param _reader binary reader instance
|
|
1888
|
+
*/
|
|
1889
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1890
|
+
while (_reader.nextField()) {
|
|
1891
|
+
if (_reader.isEndGroup())
|
|
1892
|
+
break;
|
|
1893
|
+
switch (_reader.getFieldNumber()) {
|
|
1894
|
+
case 1:
|
|
1895
|
+
_instance.sortingField = _reader.readEnum();
|
|
1896
|
+
break;
|
|
1897
|
+
case 2:
|
|
1898
|
+
_instance.sortingMode = _reader.readEnum();
|
|
1899
|
+
break;
|
|
1900
|
+
default:
|
|
1901
|
+
_reader.skipField();
|
|
1902
|
+
}
|
|
1903
|
+
}
|
|
1904
|
+
EntityTypeSorting.refineValues(_instance);
|
|
1905
|
+
}
|
|
1906
|
+
/**
|
|
1907
|
+
* Serializes a message to binary format using provided binary reader
|
|
1908
|
+
* @param _instance message instance
|
|
1909
|
+
* @param _writer binary writer instance
|
|
1910
|
+
*/
|
|
1911
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
1912
|
+
if (_instance.sortingField) {
|
|
1913
|
+
_writer.writeEnum(1, _instance.sortingField);
|
|
1914
|
+
}
|
|
1915
|
+
if (_instance.sortingMode) {
|
|
1916
|
+
_writer.writeEnum(2, _instance.sortingMode);
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
get sortingField() {
|
|
1920
|
+
return this._sortingField;
|
|
1921
|
+
}
|
|
1922
|
+
set sortingField(value) {
|
|
1923
|
+
this._sortingField = value;
|
|
1924
|
+
}
|
|
1925
|
+
get sortingMode() {
|
|
1926
|
+
return this._sortingMode;
|
|
1927
|
+
}
|
|
1928
|
+
set sortingMode(value) {
|
|
1929
|
+
this._sortingMode = value;
|
|
1930
|
+
}
|
|
1931
|
+
/**
|
|
1932
|
+
* Serialize message to binary data
|
|
1933
|
+
* @param instance message instance
|
|
1934
|
+
*/
|
|
1935
|
+
serializeBinary() {
|
|
1936
|
+
const writer = new BinaryWriter();
|
|
1937
|
+
EntityTypeSorting.serializeBinaryToWriter(this, writer);
|
|
1938
|
+
return writer.getResultBuffer();
|
|
1939
|
+
}
|
|
1940
|
+
/**
|
|
1941
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1942
|
+
*/
|
|
1943
|
+
toObject() {
|
|
1944
|
+
return {
|
|
1945
|
+
sortingField: this.sortingField,
|
|
1946
|
+
sortingMode: this.sortingMode
|
|
1947
|
+
};
|
|
1948
|
+
}
|
|
1949
|
+
/**
|
|
1950
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1951
|
+
*/
|
|
1952
|
+
toJSON() {
|
|
1953
|
+
return this.toObject();
|
|
1954
|
+
}
|
|
1955
|
+
/**
|
|
1956
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1957
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1958
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
1959
|
+
*/
|
|
1960
|
+
toProtobufJSON(
|
|
1961
|
+
// @ts-ignore
|
|
1962
|
+
options) {
|
|
1963
|
+
return {
|
|
1964
|
+
sortingField: EntityTypeSorting.EntityTypeSortingField[this.sortingField === null || this.sortingField === undefined
|
|
1965
|
+
? 0
|
|
1966
|
+
: this.sortingField],
|
|
1967
|
+
sortingMode: ondewoNlu009.SortingMode[this.sortingMode === null || this.sortingMode === undefined
|
|
1968
|
+
? 0
|
|
1969
|
+
: this.sortingMode]
|
|
1970
|
+
};
|
|
1971
|
+
}
|
|
1972
|
+
}
|
|
1973
|
+
EntityTypeSorting.id = 'ondewo.nlu.EntityTypeSorting';
|
|
1974
|
+
(function (EntityTypeSorting) {
|
|
1975
|
+
let EntityTypeSortingField;
|
|
1976
|
+
(function (EntityTypeSortingField) {
|
|
1977
|
+
EntityTypeSortingField[EntityTypeSortingField["NO_ENTITY_TYPE_SORTING"] = 0] = "NO_ENTITY_TYPE_SORTING";
|
|
1978
|
+
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_NAME"] = 1] = "SORT_ENTITY_TYPE_BY_NAME";
|
|
1979
|
+
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_CREATION_DATE"] = 2] = "SORT_ENTITY_TYPE_BY_CREATION_DATE";
|
|
1980
|
+
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_LAST_UPDATED"] = 3] = "SORT_ENTITY_TYPE_BY_LAST_UPDATED";
|
|
1981
|
+
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_ENTITY_VALUE_COUNT"] = 4] = "SORT_ENTITY_TYPE_BY_ENTITY_VALUE_COUNT";
|
|
1982
|
+
EntityTypeSortingField[EntityTypeSortingField["SORT_ENTITY_TYPE_BY_SYNONYM_COUNT"] = 5] = "SORT_ENTITY_TYPE_BY_SYNONYM_COUNT";
|
|
1983
|
+
})(EntityTypeSortingField = EntityTypeSorting.EntityTypeSortingField || (EntityTypeSorting.EntityTypeSortingField = {}));
|
|
1984
|
+
})(EntityTypeSorting || (EntityTypeSorting = {}));
|
|
1985
|
+
/**
|
|
1986
|
+
* Message implementation for ondewo.nlu.BatchEntitiesResponse
|
|
1987
|
+
*/
|
|
1988
|
+
export class BatchEntitiesResponse {
|
|
1989
|
+
/**
|
|
1990
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1991
|
+
* @param _value initial values object or instance of BatchEntitiesResponse to deeply clone from
|
|
1992
|
+
*/
|
|
1993
|
+
constructor(_value) {
|
|
1994
|
+
_value = _value || {};
|
|
1995
|
+
this.entityStatuses = (_value.entityStatuses || []).map(m => new BatchEntitiesResponse.EntityStatus(m));
|
|
1996
|
+
this.hasErrors = _value.hasErrors;
|
|
1997
|
+
BatchEntitiesResponse.refineValues(this);
|
|
1998
|
+
}
|
|
1999
|
+
/**
|
|
2000
|
+
* Deserialize binary data to message
|
|
2001
|
+
* @param instance message instance
|
|
2002
|
+
*/
|
|
2003
|
+
static deserializeBinary(bytes) {
|
|
2004
|
+
const instance = new BatchEntitiesResponse();
|
|
2005
|
+
BatchEntitiesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2006
|
+
return instance;
|
|
2007
|
+
}
|
|
2008
|
+
/**
|
|
2009
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2010
|
+
* @param _instance message instance
|
|
2011
|
+
*/
|
|
2012
|
+
static refineValues(_instance) {
|
|
2013
|
+
_instance.entityStatuses = _instance.entityStatuses || [];
|
|
2014
|
+
_instance.hasErrors = _instance.hasErrors || false;
|
|
2015
|
+
}
|
|
2016
|
+
/**
|
|
2017
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2018
|
+
* @param _instance message instance
|
|
2019
|
+
* @param _reader binary reader instance
|
|
2020
|
+
*/
|
|
2021
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2022
|
+
while (_reader.nextField()) {
|
|
2023
|
+
if (_reader.isEndGroup())
|
|
2024
|
+
break;
|
|
2025
|
+
switch (_reader.getFieldNumber()) {
|
|
2026
|
+
case 1:
|
|
2027
|
+
const messageInitializer1 = new BatchEntitiesResponse.EntityStatus();
|
|
2028
|
+
_reader.readMessage(messageInitializer1, BatchEntitiesResponse.EntityStatus.deserializeBinaryFromReader);
|
|
2029
|
+
(_instance.entityStatuses = _instance.entityStatuses || []).push(messageInitializer1);
|
|
2030
|
+
break;
|
|
2031
|
+
case 2:
|
|
2032
|
+
_instance.hasErrors = _reader.readBool();
|
|
2033
|
+
break;
|
|
2034
|
+
default:
|
|
2035
|
+
_reader.skipField();
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
BatchEntitiesResponse.refineValues(_instance);
|
|
2039
|
+
}
|
|
2040
|
+
/**
|
|
2041
|
+
* Serializes a message to binary format using provided binary reader
|
|
2042
|
+
* @param _instance message instance
|
|
2043
|
+
* @param _writer binary writer instance
|
|
2044
|
+
*/
|
|
2045
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2046
|
+
if (_instance.entityStatuses && _instance.entityStatuses.length) {
|
|
2047
|
+
_writer.writeRepeatedMessage(1, _instance.entityStatuses, BatchEntitiesResponse.EntityStatus.serializeBinaryToWriter);
|
|
2048
|
+
}
|
|
2049
|
+
if (_instance.hasErrors) {
|
|
2050
|
+
_writer.writeBool(2, _instance.hasErrors);
|
|
2051
|
+
}
|
|
2052
|
+
}
|
|
2053
|
+
get entityStatuses() {
|
|
2054
|
+
return this._entityStatuses;
|
|
2055
|
+
}
|
|
2056
|
+
set entityStatuses(value) {
|
|
2057
|
+
this._entityStatuses = value;
|
|
2058
|
+
}
|
|
2059
|
+
get hasErrors() {
|
|
2060
|
+
return this._hasErrors;
|
|
2061
|
+
}
|
|
2062
|
+
set hasErrors(value) {
|
|
2063
|
+
this._hasErrors = value;
|
|
2064
|
+
}
|
|
2065
|
+
/**
|
|
2066
|
+
* Serialize message to binary data
|
|
2067
|
+
* @param instance message instance
|
|
2068
|
+
*/
|
|
2069
|
+
serializeBinary() {
|
|
2070
|
+
const writer = new BinaryWriter();
|
|
2071
|
+
BatchEntitiesResponse.serializeBinaryToWriter(this, writer);
|
|
2072
|
+
return writer.getResultBuffer();
|
|
2073
|
+
}
|
|
2074
|
+
/**
|
|
2075
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2076
|
+
*/
|
|
2077
|
+
toObject() {
|
|
2078
|
+
return {
|
|
2079
|
+
entityStatuses: (this.entityStatuses || []).map(m => m.toObject()),
|
|
2080
|
+
hasErrors: this.hasErrors
|
|
2081
|
+
};
|
|
2082
|
+
}
|
|
2083
|
+
/**
|
|
2084
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2085
|
+
*/
|
|
2086
|
+
toJSON() {
|
|
2087
|
+
return this.toObject();
|
|
2088
|
+
}
|
|
2089
|
+
/**
|
|
2090
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2091
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2092
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2093
|
+
*/
|
|
2094
|
+
toProtobufJSON(
|
|
2095
|
+
// @ts-ignore
|
|
2096
|
+
options) {
|
|
2097
|
+
return {
|
|
2098
|
+
entityStatuses: (this.entityStatuses || []).map(m => m.toProtobufJSON(options)),
|
|
2099
|
+
hasErrors: this.hasErrors
|
|
2100
|
+
};
|
|
2101
|
+
}
|
|
2102
|
+
}
|
|
2103
|
+
BatchEntitiesResponse.id = 'ondewo.nlu.BatchEntitiesResponse';
|
|
2104
|
+
(function (BatchEntitiesResponse) {
|
|
2105
|
+
/**
|
|
2106
|
+
* Message implementation for ondewo.nlu.EntityStatus
|
|
2107
|
+
*/
|
|
2108
|
+
class EntityStatus {
|
|
2109
|
+
/**
|
|
2110
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2111
|
+
* @param _value initial values object or instance of EntityStatus to deeply clone from
|
|
2112
|
+
*/
|
|
2113
|
+
constructor(_value) {
|
|
2114
|
+
this._entityOrStatus = EntityStatus.EntityOrStatusCase.none;
|
|
2115
|
+
_value = _value || {};
|
|
2116
|
+
this.entity = _value.entity
|
|
2117
|
+
? new EntityType.Entity(_value.entity)
|
|
2118
|
+
: undefined;
|
|
2119
|
+
this.errorMessage = _value.errorMessage;
|
|
2120
|
+
EntityStatus.refineValues(this);
|
|
2121
|
+
}
|
|
2122
|
+
/**
|
|
2123
|
+
* Deserialize binary data to message
|
|
2124
|
+
* @param instance message instance
|
|
2125
|
+
*/
|
|
2126
|
+
static deserializeBinary(bytes) {
|
|
2127
|
+
const instance = new EntityStatus();
|
|
2128
|
+
EntityStatus.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2129
|
+
return instance;
|
|
2130
|
+
}
|
|
2131
|
+
/**
|
|
2132
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2133
|
+
* @param _instance message instance
|
|
2134
|
+
*/
|
|
2135
|
+
static refineValues(_instance) { }
|
|
2136
|
+
/**
|
|
2137
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2138
|
+
* @param _instance message instance
|
|
2139
|
+
* @param _reader binary reader instance
|
|
2140
|
+
*/
|
|
2141
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2142
|
+
while (_reader.nextField()) {
|
|
2143
|
+
if (_reader.isEndGroup())
|
|
2144
|
+
break;
|
|
2145
|
+
switch (_reader.getFieldNumber()) {
|
|
2146
|
+
case 1:
|
|
2147
|
+
_instance.entity = new EntityType.Entity();
|
|
2148
|
+
_reader.readMessage(_instance.entity, EntityType.Entity.deserializeBinaryFromReader);
|
|
2149
|
+
break;
|
|
2150
|
+
case 2:
|
|
2151
|
+
_instance.errorMessage = _reader.readString();
|
|
2152
|
+
break;
|
|
2153
|
+
default:
|
|
2154
|
+
_reader.skipField();
|
|
2155
|
+
}
|
|
2156
|
+
}
|
|
2157
|
+
EntityStatus.refineValues(_instance);
|
|
2158
|
+
}
|
|
2159
|
+
/**
|
|
2160
|
+
* Serializes a message to binary format using provided binary reader
|
|
2161
|
+
* @param _instance message instance
|
|
2162
|
+
* @param _writer binary writer instance
|
|
2163
|
+
*/
|
|
2164
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2165
|
+
if (_instance.entity) {
|
|
2166
|
+
_writer.writeMessage(1, _instance.entity, EntityType.Entity.serializeBinaryToWriter);
|
|
2167
|
+
}
|
|
2168
|
+
if (_instance.errorMessage || _instance.errorMessage === '') {
|
|
2169
|
+
_writer.writeString(2, _instance.errorMessage);
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
get entity() {
|
|
2173
|
+
return this._entity;
|
|
2174
|
+
}
|
|
2175
|
+
set entity(value) {
|
|
2176
|
+
if (value !== undefined && value !== null) {
|
|
2177
|
+
this._errorMessage = undefined;
|
|
2178
|
+
this._entityOrStatus = EntityStatus.EntityOrStatusCase.entity;
|
|
2179
|
+
}
|
|
2180
|
+
this._entity = value;
|
|
2181
|
+
}
|
|
2182
|
+
get errorMessage() {
|
|
2183
|
+
return this._errorMessage;
|
|
2184
|
+
}
|
|
2185
|
+
set errorMessage(value) {
|
|
2186
|
+
if (value !== undefined && value !== null) {
|
|
2187
|
+
this._entity = undefined;
|
|
2188
|
+
this._entityOrStatus = EntityStatus.EntityOrStatusCase.errorMessage;
|
|
2189
|
+
}
|
|
2190
|
+
this._errorMessage = value;
|
|
2191
|
+
}
|
|
2192
|
+
get entityOrStatus() {
|
|
2193
|
+
return this._entityOrStatus;
|
|
2194
|
+
}
|
|
2195
|
+
/**
|
|
2196
|
+
* Serialize message to binary data
|
|
2197
|
+
* @param instance message instance
|
|
2198
|
+
*/
|
|
2199
|
+
serializeBinary() {
|
|
2200
|
+
const writer = new BinaryWriter();
|
|
2201
|
+
EntityStatus.serializeBinaryToWriter(this, writer);
|
|
2202
|
+
return writer.getResultBuffer();
|
|
2203
|
+
}
|
|
2204
|
+
/**
|
|
2205
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2206
|
+
*/
|
|
2207
|
+
toObject() {
|
|
2208
|
+
return {
|
|
2209
|
+
entity: this.entity ? this.entity.toObject() : undefined,
|
|
2210
|
+
errorMessage: this.errorMessage
|
|
2211
|
+
};
|
|
2212
|
+
}
|
|
2213
|
+
/**
|
|
2214
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2215
|
+
*/
|
|
2216
|
+
toJSON() {
|
|
2217
|
+
return this.toObject();
|
|
2218
|
+
}
|
|
2219
|
+
/**
|
|
2220
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2221
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2222
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2223
|
+
*/
|
|
2224
|
+
toProtobufJSON(
|
|
2225
|
+
// @ts-ignore
|
|
2226
|
+
options) {
|
|
2227
|
+
return {
|
|
2228
|
+
entity: this.entity ? this.entity.toProtobufJSON(options) : null,
|
|
2229
|
+
errorMessage: this.errorMessage === null || this.errorMessage === undefined
|
|
2230
|
+
? null
|
|
2231
|
+
: this.errorMessage
|
|
2232
|
+
};
|
|
2233
|
+
}
|
|
2234
|
+
}
|
|
2235
|
+
EntityStatus.id = 'ondewo.nlu.EntityStatus';
|
|
2236
|
+
BatchEntitiesResponse.EntityStatus = EntityStatus;
|
|
2237
|
+
(function (EntityStatus) {
|
|
2238
|
+
let EntityOrStatusCase;
|
|
2239
|
+
(function (EntityOrStatusCase) {
|
|
2240
|
+
EntityOrStatusCase[EntityOrStatusCase["none"] = 0] = "none";
|
|
2241
|
+
EntityOrStatusCase[EntityOrStatusCase["entity"] = 1] = "entity";
|
|
2242
|
+
EntityOrStatusCase[EntityOrStatusCase["errorMessage"] = 2] = "errorMessage";
|
|
2243
|
+
})(EntityOrStatusCase = EntityStatus.EntityOrStatusCase || (EntityStatus.EntityOrStatusCase = {}));
|
|
2244
|
+
})(EntityStatus = BatchEntitiesResponse.EntityStatus || (BatchEntitiesResponse.EntityStatus = {}));
|
|
2245
|
+
})(BatchEntitiesResponse || (BatchEntitiesResponse = {}));
|
|
2246
|
+
/**
|
|
2247
|
+
* Message implementation for ondewo.nlu.BatchCreateEntitiesRequest
|
|
2248
|
+
*/
|
|
2249
|
+
export class BatchCreateEntitiesRequest {
|
|
2250
|
+
/**
|
|
2251
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2252
|
+
* @param _value initial values object or instance of BatchCreateEntitiesRequest to deeply clone from
|
|
2253
|
+
*/
|
|
2254
|
+
constructor(_value) {
|
|
2255
|
+
_value = _value || {};
|
|
2256
|
+
this.createEntityRequests = (_value.createEntityRequests || []).map(m => new BatchCreateEntitiesRequest.CreateEntityRequest(m));
|
|
2257
|
+
BatchCreateEntitiesRequest.refineValues(this);
|
|
2258
|
+
}
|
|
2259
|
+
/**
|
|
2260
|
+
* Deserialize binary data to message
|
|
2261
|
+
* @param instance message instance
|
|
2262
|
+
*/
|
|
2263
|
+
static deserializeBinary(bytes) {
|
|
2264
|
+
const instance = new BatchCreateEntitiesRequest();
|
|
2265
|
+
BatchCreateEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2266
|
+
return instance;
|
|
2267
|
+
}
|
|
2268
|
+
/**
|
|
2269
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2270
|
+
* @param _instance message instance
|
|
2271
|
+
*/
|
|
2272
|
+
static refineValues(_instance) {
|
|
2273
|
+
_instance.createEntityRequests = _instance.createEntityRequests || [];
|
|
2274
|
+
}
|
|
2275
|
+
/**
|
|
2276
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2277
|
+
* @param _instance message instance
|
|
2278
|
+
* @param _reader binary reader instance
|
|
2279
|
+
*/
|
|
2280
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2281
|
+
while (_reader.nextField()) {
|
|
2282
|
+
if (_reader.isEndGroup())
|
|
2283
|
+
break;
|
|
2284
|
+
switch (_reader.getFieldNumber()) {
|
|
2285
|
+
case 1:
|
|
2286
|
+
const messageInitializer1 = new BatchCreateEntitiesRequest.CreateEntityRequest();
|
|
2287
|
+
_reader.readMessage(messageInitializer1, BatchCreateEntitiesRequest.CreateEntityRequest
|
|
2288
|
+
.deserializeBinaryFromReader);
|
|
2289
|
+
(_instance.createEntityRequests =
|
|
2290
|
+
_instance.createEntityRequests || []).push(messageInitializer1);
|
|
2291
|
+
break;
|
|
2292
|
+
default:
|
|
2293
|
+
_reader.skipField();
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
BatchCreateEntitiesRequest.refineValues(_instance);
|
|
2297
|
+
}
|
|
2298
|
+
/**
|
|
2299
|
+
* Serializes a message to binary format using provided binary reader
|
|
2300
|
+
* @param _instance message instance
|
|
2301
|
+
* @param _writer binary writer instance
|
|
2302
|
+
*/
|
|
2303
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2304
|
+
if (_instance.createEntityRequests &&
|
|
2305
|
+
_instance.createEntityRequests.length) {
|
|
2306
|
+
_writer.writeRepeatedMessage(1, _instance.createEntityRequests, BatchCreateEntitiesRequest.CreateEntityRequest.serializeBinaryToWriter);
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
get createEntityRequests() {
|
|
2310
|
+
return this._createEntityRequests;
|
|
2311
|
+
}
|
|
2312
|
+
set createEntityRequests(value) {
|
|
2313
|
+
this._createEntityRequests = value;
|
|
2314
|
+
}
|
|
2315
|
+
/**
|
|
2316
|
+
* Serialize message to binary data
|
|
2317
|
+
* @param instance message instance
|
|
2318
|
+
*/
|
|
2319
|
+
serializeBinary() {
|
|
2320
|
+
const writer = new BinaryWriter();
|
|
2321
|
+
BatchCreateEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2322
|
+
return writer.getResultBuffer();
|
|
2323
|
+
}
|
|
2324
|
+
/**
|
|
2325
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2326
|
+
*/
|
|
2327
|
+
toObject() {
|
|
2328
|
+
return {
|
|
2329
|
+
createEntityRequests: (this.createEntityRequests || []).map(m => m.toObject())
|
|
2330
|
+
};
|
|
2331
|
+
}
|
|
2332
|
+
/**
|
|
2333
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2334
|
+
*/
|
|
2335
|
+
toJSON() {
|
|
2336
|
+
return this.toObject();
|
|
2337
|
+
}
|
|
2338
|
+
/**
|
|
2339
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2340
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2341
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2342
|
+
*/
|
|
2343
|
+
toProtobufJSON(
|
|
2344
|
+
// @ts-ignore
|
|
2345
|
+
options) {
|
|
2346
|
+
return {
|
|
2347
|
+
createEntityRequests: (this.createEntityRequests || []).map(m => m.toProtobufJSON(options))
|
|
2348
|
+
};
|
|
2349
|
+
}
|
|
2350
|
+
}
|
|
2351
|
+
BatchCreateEntitiesRequest.id = 'ondewo.nlu.BatchCreateEntitiesRequest';
|
|
2352
|
+
(function (BatchCreateEntitiesRequest) {
|
|
2353
|
+
/**
|
|
2354
|
+
* Message implementation for ondewo.nlu.CreateEntityRequest
|
|
2355
|
+
*/
|
|
2356
|
+
class CreateEntityRequest {
|
|
2357
|
+
/**
|
|
2358
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2359
|
+
* @param _value initial values object or instance of CreateEntityRequest to deeply clone from
|
|
2360
|
+
*/
|
|
2361
|
+
constructor(_value) {
|
|
2362
|
+
_value = _value || {};
|
|
2363
|
+
this.entityTypeName = _value.entityTypeName;
|
|
2364
|
+
this.entity = _value.entity
|
|
2365
|
+
? new EntityType.Entity(_value.entity)
|
|
2366
|
+
: undefined;
|
|
2367
|
+
CreateEntityRequest.refineValues(this);
|
|
2368
|
+
}
|
|
2369
|
+
/**
|
|
2370
|
+
* Deserialize binary data to message
|
|
2371
|
+
* @param instance message instance
|
|
2372
|
+
*/
|
|
2373
|
+
static deserializeBinary(bytes) {
|
|
2374
|
+
const instance = new CreateEntityRequest();
|
|
2375
|
+
CreateEntityRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2376
|
+
return instance;
|
|
2377
|
+
}
|
|
2378
|
+
/**
|
|
2379
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2380
|
+
* @param _instance message instance
|
|
2381
|
+
*/
|
|
2382
|
+
static refineValues(_instance) {
|
|
2383
|
+
_instance.entityTypeName = _instance.entityTypeName || '';
|
|
2384
|
+
_instance.entity = _instance.entity || undefined;
|
|
2385
|
+
}
|
|
2386
|
+
/**
|
|
2387
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2388
|
+
* @param _instance message instance
|
|
2389
|
+
* @param _reader binary reader instance
|
|
2390
|
+
*/
|
|
2391
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2392
|
+
while (_reader.nextField()) {
|
|
2393
|
+
if (_reader.isEndGroup())
|
|
2394
|
+
break;
|
|
2395
|
+
switch (_reader.getFieldNumber()) {
|
|
2396
|
+
case 1:
|
|
2397
|
+
_instance.entityTypeName = _reader.readString();
|
|
2398
|
+
break;
|
|
2399
|
+
case 2:
|
|
2400
|
+
_instance.entity = new EntityType.Entity();
|
|
2401
|
+
_reader.readMessage(_instance.entity, EntityType.Entity.deserializeBinaryFromReader);
|
|
2402
|
+
break;
|
|
2403
|
+
default:
|
|
2404
|
+
_reader.skipField();
|
|
2405
|
+
}
|
|
2406
|
+
}
|
|
2407
|
+
CreateEntityRequest.refineValues(_instance);
|
|
2408
|
+
}
|
|
2409
|
+
/**
|
|
2410
|
+
* Serializes a message to binary format using provided binary reader
|
|
2411
|
+
* @param _instance message instance
|
|
2412
|
+
* @param _writer binary writer instance
|
|
2413
|
+
*/
|
|
2414
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2415
|
+
if (_instance.entityTypeName) {
|
|
2416
|
+
_writer.writeString(1, _instance.entityTypeName);
|
|
2417
|
+
}
|
|
2418
|
+
if (_instance.entity) {
|
|
2419
|
+
_writer.writeMessage(2, _instance.entity, EntityType.Entity.serializeBinaryToWriter);
|
|
2420
|
+
}
|
|
2421
|
+
}
|
|
2422
|
+
get entityTypeName() {
|
|
2423
|
+
return this._entityTypeName;
|
|
2424
|
+
}
|
|
2425
|
+
set entityTypeName(value) {
|
|
2426
|
+
this._entityTypeName = value;
|
|
2427
|
+
}
|
|
2428
|
+
get entity() {
|
|
2429
|
+
return this._entity;
|
|
2430
|
+
}
|
|
2431
|
+
set entity(value) {
|
|
2432
|
+
this._entity = value;
|
|
2433
|
+
}
|
|
2434
|
+
/**
|
|
2435
|
+
* Serialize message to binary data
|
|
2436
|
+
* @param instance message instance
|
|
2437
|
+
*/
|
|
2438
|
+
serializeBinary() {
|
|
2439
|
+
const writer = new BinaryWriter();
|
|
2440
|
+
CreateEntityRequest.serializeBinaryToWriter(this, writer);
|
|
2441
|
+
return writer.getResultBuffer();
|
|
2442
|
+
}
|
|
2443
|
+
/**
|
|
2444
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2445
|
+
*/
|
|
2446
|
+
toObject() {
|
|
2447
|
+
return {
|
|
2448
|
+
entityTypeName: this.entityTypeName,
|
|
2449
|
+
entity: this.entity ? this.entity.toObject() : undefined
|
|
2450
|
+
};
|
|
2451
|
+
}
|
|
2452
|
+
/**
|
|
2453
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2454
|
+
*/
|
|
2455
|
+
toJSON() {
|
|
2456
|
+
return this.toObject();
|
|
2457
|
+
}
|
|
2458
|
+
/**
|
|
2459
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2460
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2461
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2462
|
+
*/
|
|
2463
|
+
toProtobufJSON(
|
|
2464
|
+
// @ts-ignore
|
|
2465
|
+
options) {
|
|
2466
|
+
return {
|
|
2467
|
+
entityTypeName: this.entityTypeName,
|
|
2468
|
+
entity: this.entity ? this.entity.toProtobufJSON(options) : null
|
|
2469
|
+
};
|
|
2470
|
+
}
|
|
2471
|
+
}
|
|
2472
|
+
CreateEntityRequest.id = 'ondewo.nlu.CreateEntityRequest';
|
|
2473
|
+
BatchCreateEntitiesRequest.CreateEntityRequest = CreateEntityRequest;
|
|
2474
|
+
})(BatchCreateEntitiesRequest || (BatchCreateEntitiesRequest = {}));
|
|
2475
|
+
/**
|
|
2476
|
+
* Message implementation for ondewo.nlu.BatchUpdateEntitiesRequest
|
|
2477
|
+
*/
|
|
2478
|
+
export class BatchUpdateEntitiesRequest {
|
|
2479
|
+
/**
|
|
2480
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2481
|
+
* @param _value initial values object or instance of BatchUpdateEntitiesRequest to deeply clone from
|
|
2482
|
+
*/
|
|
2483
|
+
constructor(_value) {
|
|
2484
|
+
_value = _value || {};
|
|
2485
|
+
this.entities = (_value.entities || []).map(m => new EntityType.Entity(m));
|
|
2486
|
+
BatchUpdateEntitiesRequest.refineValues(this);
|
|
2487
|
+
}
|
|
2488
|
+
/**
|
|
2489
|
+
* Deserialize binary data to message
|
|
2490
|
+
* @param instance message instance
|
|
2491
|
+
*/
|
|
2492
|
+
static deserializeBinary(bytes) {
|
|
2493
|
+
const instance = new BatchUpdateEntitiesRequest();
|
|
2494
|
+
BatchUpdateEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2495
|
+
return instance;
|
|
2496
|
+
}
|
|
2497
|
+
/**
|
|
2498
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2499
|
+
* @param _instance message instance
|
|
2500
|
+
*/
|
|
2501
|
+
static refineValues(_instance) {
|
|
2502
|
+
_instance.entities = _instance.entities || [];
|
|
2503
|
+
}
|
|
2504
|
+
/**
|
|
2505
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2506
|
+
* @param _instance message instance
|
|
2507
|
+
* @param _reader binary reader instance
|
|
2508
|
+
*/
|
|
2509
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2510
|
+
while (_reader.nextField()) {
|
|
2511
|
+
if (_reader.isEndGroup())
|
|
2512
|
+
break;
|
|
2513
|
+
switch (_reader.getFieldNumber()) {
|
|
2514
|
+
case 1:
|
|
2515
|
+
const messageInitializer1 = new EntityType.Entity();
|
|
2516
|
+
_reader.readMessage(messageInitializer1, EntityType.Entity.deserializeBinaryFromReader);
|
|
2517
|
+
(_instance.entities = _instance.entities || []).push(messageInitializer1);
|
|
2518
|
+
break;
|
|
2519
|
+
default:
|
|
2520
|
+
_reader.skipField();
|
|
2521
|
+
}
|
|
2522
|
+
}
|
|
2523
|
+
BatchUpdateEntitiesRequest.refineValues(_instance);
|
|
2524
|
+
}
|
|
2525
|
+
/**
|
|
2526
|
+
* Serializes a message to binary format using provided binary reader
|
|
2527
|
+
* @param _instance message instance
|
|
2528
|
+
* @param _writer binary writer instance
|
|
2529
|
+
*/
|
|
2530
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2531
|
+
if (_instance.entities && _instance.entities.length) {
|
|
2532
|
+
_writer.writeRepeatedMessage(1, _instance.entities, EntityType.Entity.serializeBinaryToWriter);
|
|
2533
|
+
}
|
|
2534
|
+
}
|
|
2535
|
+
get entities() {
|
|
2536
|
+
return this._entities;
|
|
2537
|
+
}
|
|
2538
|
+
set entities(value) {
|
|
2539
|
+
this._entities = value;
|
|
2540
|
+
}
|
|
2541
|
+
/**
|
|
2542
|
+
* Serialize message to binary data
|
|
2543
|
+
* @param instance message instance
|
|
2544
|
+
*/
|
|
2545
|
+
serializeBinary() {
|
|
2546
|
+
const writer = new BinaryWriter();
|
|
2547
|
+
BatchUpdateEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2548
|
+
return writer.getResultBuffer();
|
|
2549
|
+
}
|
|
2550
|
+
/**
|
|
2551
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2552
|
+
*/
|
|
2553
|
+
toObject() {
|
|
2554
|
+
return {
|
|
2555
|
+
entities: (this.entities || []).map(m => m.toObject())
|
|
2556
|
+
};
|
|
2557
|
+
}
|
|
2558
|
+
/**
|
|
2559
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2560
|
+
*/
|
|
2561
|
+
toJSON() {
|
|
2562
|
+
return this.toObject();
|
|
2563
|
+
}
|
|
2564
|
+
/**
|
|
2565
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2566
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2567
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2568
|
+
*/
|
|
2569
|
+
toProtobufJSON(
|
|
2570
|
+
// @ts-ignore
|
|
2571
|
+
options) {
|
|
2572
|
+
return {
|
|
2573
|
+
entities: (this.entities || []).map(m => m.toProtobufJSON(options))
|
|
2574
|
+
};
|
|
2575
|
+
}
|
|
2576
|
+
}
|
|
2577
|
+
BatchUpdateEntitiesRequest.id = 'ondewo.nlu.BatchUpdateEntitiesRequest';
|
|
2578
|
+
/**
|
|
2579
|
+
* Message implementation for ondewo.nlu.BatchGetEntitiesRequest
|
|
2580
|
+
*/
|
|
2581
|
+
export class BatchGetEntitiesRequest {
|
|
2582
|
+
/**
|
|
2583
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2584
|
+
* @param _value initial values object or instance of BatchGetEntitiesRequest to deeply clone from
|
|
2585
|
+
*/
|
|
2586
|
+
constructor(_value) {
|
|
2587
|
+
_value = _value || {};
|
|
2588
|
+
this.names = (_value.names || []).slice();
|
|
2589
|
+
BatchGetEntitiesRequest.refineValues(this);
|
|
2590
|
+
}
|
|
2591
|
+
/**
|
|
2592
|
+
* Deserialize binary data to message
|
|
2593
|
+
* @param instance message instance
|
|
2594
|
+
*/
|
|
2595
|
+
static deserializeBinary(bytes) {
|
|
2596
|
+
const instance = new BatchGetEntitiesRequest();
|
|
2597
|
+
BatchGetEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2598
|
+
return instance;
|
|
2599
|
+
}
|
|
2600
|
+
/**
|
|
2601
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2602
|
+
* @param _instance message instance
|
|
2603
|
+
*/
|
|
2604
|
+
static refineValues(_instance) {
|
|
2605
|
+
_instance.names = _instance.names || [];
|
|
2606
|
+
}
|
|
2607
|
+
/**
|
|
2608
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2609
|
+
* @param _instance message instance
|
|
2610
|
+
* @param _reader binary reader instance
|
|
2611
|
+
*/
|
|
2612
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2613
|
+
while (_reader.nextField()) {
|
|
2614
|
+
if (_reader.isEndGroup())
|
|
2615
|
+
break;
|
|
2616
|
+
switch (_reader.getFieldNumber()) {
|
|
2617
|
+
case 1:
|
|
2618
|
+
(_instance.names = _instance.names || []).push(_reader.readString());
|
|
2619
|
+
break;
|
|
2620
|
+
default:
|
|
2621
|
+
_reader.skipField();
|
|
2622
|
+
}
|
|
2623
|
+
}
|
|
2624
|
+
BatchGetEntitiesRequest.refineValues(_instance);
|
|
2625
|
+
}
|
|
2626
|
+
/**
|
|
2627
|
+
* Serializes a message to binary format using provided binary reader
|
|
2628
|
+
* @param _instance message instance
|
|
2629
|
+
* @param _writer binary writer instance
|
|
2630
|
+
*/
|
|
2631
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2632
|
+
if (_instance.names && _instance.names.length) {
|
|
2633
|
+
_writer.writeRepeatedString(1, _instance.names);
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
get names() {
|
|
2637
|
+
return this._names;
|
|
2638
|
+
}
|
|
2639
|
+
set names(value) {
|
|
2640
|
+
this._names = value;
|
|
2641
|
+
}
|
|
2642
|
+
/**
|
|
2643
|
+
* Serialize message to binary data
|
|
2644
|
+
* @param instance message instance
|
|
2645
|
+
*/
|
|
2646
|
+
serializeBinary() {
|
|
2647
|
+
const writer = new BinaryWriter();
|
|
2648
|
+
BatchGetEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2649
|
+
return writer.getResultBuffer();
|
|
2650
|
+
}
|
|
2651
|
+
/**
|
|
2652
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2653
|
+
*/
|
|
2654
|
+
toObject() {
|
|
2655
|
+
return {
|
|
2656
|
+
names: (this.names || []).slice()
|
|
2657
|
+
};
|
|
2658
|
+
}
|
|
2659
|
+
/**
|
|
2660
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2661
|
+
*/
|
|
2662
|
+
toJSON() {
|
|
2663
|
+
return this.toObject();
|
|
2664
|
+
}
|
|
2665
|
+
/**
|
|
2666
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2667
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2668
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2669
|
+
*/
|
|
2670
|
+
toProtobufJSON(
|
|
2671
|
+
// @ts-ignore
|
|
2672
|
+
options) {
|
|
2673
|
+
return {
|
|
2674
|
+
names: (this.names || []).slice()
|
|
2675
|
+
};
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
BatchGetEntitiesRequest.id = 'ondewo.nlu.BatchGetEntitiesRequest';
|
|
2679
|
+
/**
|
|
2680
|
+
* Message implementation for ondewo.nlu.BatchDeleteEntitiesRequest
|
|
2681
|
+
*/
|
|
2682
|
+
export class BatchDeleteEntitiesRequest {
|
|
2683
|
+
/**
|
|
2684
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2685
|
+
* @param _value initial values object or instance of BatchDeleteEntitiesRequest to deeply clone from
|
|
2686
|
+
*/
|
|
2687
|
+
constructor(_value) {
|
|
2688
|
+
_value = _value || {};
|
|
2689
|
+
this.names = (_value.names || []).slice();
|
|
2690
|
+
BatchDeleteEntitiesRequest.refineValues(this);
|
|
2691
|
+
}
|
|
2692
|
+
/**
|
|
2693
|
+
* Deserialize binary data to message
|
|
2694
|
+
* @param instance message instance
|
|
2695
|
+
*/
|
|
2696
|
+
static deserializeBinary(bytes) {
|
|
2697
|
+
const instance = new BatchDeleteEntitiesRequest();
|
|
2698
|
+
BatchDeleteEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2699
|
+
return instance;
|
|
2700
|
+
}
|
|
2701
|
+
/**
|
|
2702
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2703
|
+
* @param _instance message instance
|
|
2704
|
+
*/
|
|
2705
|
+
static refineValues(_instance) {
|
|
2706
|
+
_instance.names = _instance.names || [];
|
|
2707
|
+
}
|
|
2708
|
+
/**
|
|
2709
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2710
|
+
* @param _instance message instance
|
|
2711
|
+
* @param _reader binary reader instance
|
|
2712
|
+
*/
|
|
2713
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2714
|
+
while (_reader.nextField()) {
|
|
2715
|
+
if (_reader.isEndGroup())
|
|
2716
|
+
break;
|
|
2717
|
+
switch (_reader.getFieldNumber()) {
|
|
2718
|
+
case 1:
|
|
2719
|
+
(_instance.names = _instance.names || []).push(_reader.readString());
|
|
2720
|
+
break;
|
|
2721
|
+
default:
|
|
2722
|
+
_reader.skipField();
|
|
2723
|
+
}
|
|
2724
|
+
}
|
|
2725
|
+
BatchDeleteEntitiesRequest.refineValues(_instance);
|
|
2726
|
+
}
|
|
2727
|
+
/**
|
|
2728
|
+
* Serializes a message to binary format using provided binary reader
|
|
2729
|
+
* @param _instance message instance
|
|
2730
|
+
* @param _writer binary writer instance
|
|
2731
|
+
*/
|
|
2732
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2733
|
+
if (_instance.names && _instance.names.length) {
|
|
2734
|
+
_writer.writeRepeatedString(1, _instance.names);
|
|
2735
|
+
}
|
|
2736
|
+
}
|
|
2737
|
+
get names() {
|
|
2738
|
+
return this._names;
|
|
2739
|
+
}
|
|
2740
|
+
set names(value) {
|
|
2741
|
+
this._names = value;
|
|
2742
|
+
}
|
|
2743
|
+
/**
|
|
2744
|
+
* Serialize message to binary data
|
|
2745
|
+
* @param instance message instance
|
|
2746
|
+
*/
|
|
2747
|
+
serializeBinary() {
|
|
2748
|
+
const writer = new BinaryWriter();
|
|
2749
|
+
BatchDeleteEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
2750
|
+
return writer.getResultBuffer();
|
|
2751
|
+
}
|
|
2752
|
+
/**
|
|
2753
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2754
|
+
*/
|
|
2755
|
+
toObject() {
|
|
2756
|
+
return {
|
|
2757
|
+
names: (this.names || []).slice()
|
|
2758
|
+
};
|
|
2759
|
+
}
|
|
2760
|
+
/**
|
|
2761
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2762
|
+
*/
|
|
2763
|
+
toJSON() {
|
|
2764
|
+
return this.toObject();
|
|
2765
|
+
}
|
|
2766
|
+
/**
|
|
2767
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2768
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2769
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2770
|
+
*/
|
|
2771
|
+
toProtobufJSON(
|
|
2772
|
+
// @ts-ignore
|
|
2773
|
+
options) {
|
|
2774
|
+
return {
|
|
2775
|
+
names: (this.names || []).slice()
|
|
2776
|
+
};
|
|
2777
|
+
}
|
|
2778
|
+
}
|
|
2779
|
+
BatchDeleteEntitiesRequest.id = 'ondewo.nlu.BatchDeleteEntitiesRequest';
|
|
2780
|
+
/**
|
|
2781
|
+
* Message implementation for ondewo.nlu.BatchDeleteEntitiesResponse
|
|
2782
|
+
*/
|
|
2783
|
+
export class BatchDeleteEntitiesResponse {
|
|
2784
|
+
/**
|
|
2785
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2786
|
+
* @param _value initial values object or instance of BatchDeleteEntitiesResponse to deeply clone from
|
|
2787
|
+
*/
|
|
2788
|
+
constructor(_value) {
|
|
2789
|
+
_value = _value || {};
|
|
2790
|
+
this.deleteStatuses = (_value.deleteStatuses || []).map(m => new BatchDeleteEntitiesResponse.DeleteEntityStatus(m));
|
|
2791
|
+
this.hasErrors = _value.hasErrors;
|
|
2792
|
+
BatchDeleteEntitiesResponse.refineValues(this);
|
|
2793
|
+
}
|
|
2794
|
+
/**
|
|
2795
|
+
* Deserialize binary data to message
|
|
2796
|
+
* @param instance message instance
|
|
2797
|
+
*/
|
|
2798
|
+
static deserializeBinary(bytes) {
|
|
2799
|
+
const instance = new BatchDeleteEntitiesResponse();
|
|
2800
|
+
BatchDeleteEntitiesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2801
|
+
return instance;
|
|
2802
|
+
}
|
|
2803
|
+
/**
|
|
2804
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2805
|
+
* @param _instance message instance
|
|
2806
|
+
*/
|
|
2807
|
+
static refineValues(_instance) {
|
|
2808
|
+
_instance.deleteStatuses = _instance.deleteStatuses || [];
|
|
2809
|
+
_instance.hasErrors = _instance.hasErrors || false;
|
|
2810
|
+
}
|
|
2811
|
+
/**
|
|
2812
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2813
|
+
* @param _instance message instance
|
|
2814
|
+
* @param _reader binary reader instance
|
|
2815
|
+
*/
|
|
2816
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2817
|
+
while (_reader.nextField()) {
|
|
2818
|
+
if (_reader.isEndGroup())
|
|
2819
|
+
break;
|
|
2820
|
+
switch (_reader.getFieldNumber()) {
|
|
2821
|
+
case 1:
|
|
2822
|
+
const messageInitializer1 = new BatchDeleteEntitiesResponse.DeleteEntityStatus();
|
|
2823
|
+
_reader.readMessage(messageInitializer1, BatchDeleteEntitiesResponse.DeleteEntityStatus
|
|
2824
|
+
.deserializeBinaryFromReader);
|
|
2825
|
+
(_instance.deleteStatuses = _instance.deleteStatuses || []).push(messageInitializer1);
|
|
2826
|
+
break;
|
|
2827
|
+
case 2:
|
|
2828
|
+
_instance.hasErrors = _reader.readBool();
|
|
2829
|
+
break;
|
|
2830
|
+
default:
|
|
2831
|
+
_reader.skipField();
|
|
2832
|
+
}
|
|
2833
|
+
}
|
|
2834
|
+
BatchDeleteEntitiesResponse.refineValues(_instance);
|
|
2835
|
+
}
|
|
2836
|
+
/**
|
|
2837
|
+
* Serializes a message to binary format using provided binary reader
|
|
2838
|
+
* @param _instance message instance
|
|
2839
|
+
* @param _writer binary writer instance
|
|
2840
|
+
*/
|
|
2841
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2842
|
+
if (_instance.deleteStatuses && _instance.deleteStatuses.length) {
|
|
2843
|
+
_writer.writeRepeatedMessage(1, _instance.deleteStatuses, BatchDeleteEntitiesResponse.DeleteEntityStatus.serializeBinaryToWriter);
|
|
2844
|
+
}
|
|
2845
|
+
if (_instance.hasErrors) {
|
|
2846
|
+
_writer.writeBool(2, _instance.hasErrors);
|
|
2847
|
+
}
|
|
2848
|
+
}
|
|
2849
|
+
get deleteStatuses() {
|
|
2850
|
+
return this._deleteStatuses;
|
|
2851
|
+
}
|
|
2852
|
+
set deleteStatuses(value) {
|
|
2853
|
+
this._deleteStatuses = value;
|
|
2854
|
+
}
|
|
2855
|
+
get hasErrors() {
|
|
2856
|
+
return this._hasErrors;
|
|
2857
|
+
}
|
|
2858
|
+
set hasErrors(value) {
|
|
2859
|
+
this._hasErrors = value;
|
|
2860
|
+
}
|
|
2861
|
+
/**
|
|
2862
|
+
* Serialize message to binary data
|
|
2863
|
+
* @param instance message instance
|
|
2864
|
+
*/
|
|
2865
|
+
serializeBinary() {
|
|
2866
|
+
const writer = new BinaryWriter();
|
|
2867
|
+
BatchDeleteEntitiesResponse.serializeBinaryToWriter(this, writer);
|
|
2868
|
+
return writer.getResultBuffer();
|
|
2869
|
+
}
|
|
2870
|
+
/**
|
|
2871
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2872
|
+
*/
|
|
2873
|
+
toObject() {
|
|
2874
|
+
return {
|
|
2875
|
+
deleteStatuses: (this.deleteStatuses || []).map(m => m.toObject()),
|
|
2876
|
+
hasErrors: this.hasErrors
|
|
2877
|
+
};
|
|
2878
|
+
}
|
|
2879
|
+
/**
|
|
2880
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2881
|
+
*/
|
|
2882
|
+
toJSON() {
|
|
2883
|
+
return this.toObject();
|
|
2884
|
+
}
|
|
2885
|
+
/**
|
|
2886
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2887
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2888
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
2889
|
+
*/
|
|
2890
|
+
toProtobufJSON(
|
|
2891
|
+
// @ts-ignore
|
|
2892
|
+
options) {
|
|
2893
|
+
return {
|
|
2894
|
+
deleteStatuses: (this.deleteStatuses || []).map(m => m.toProtobufJSON(options)),
|
|
2895
|
+
hasErrors: this.hasErrors
|
|
2896
|
+
};
|
|
2897
|
+
}
|
|
2898
|
+
}
|
|
2899
|
+
BatchDeleteEntitiesResponse.id = 'ondewo.nlu.BatchDeleteEntitiesResponse';
|
|
2900
|
+
(function (BatchDeleteEntitiesResponse) {
|
|
2901
|
+
/**
|
|
2902
|
+
* Message implementation for ondewo.nlu.DeleteEntityStatus
|
|
2903
|
+
*/
|
|
2904
|
+
class DeleteEntityStatus {
|
|
2905
|
+
/**
|
|
2906
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2907
|
+
* @param _value initial values object or instance of DeleteEntityStatus to deeply clone from
|
|
2908
|
+
*/
|
|
2909
|
+
constructor(_value) {
|
|
2910
|
+
this._deleteStatus = DeleteEntityStatus.DeleteStatusCase.none;
|
|
2911
|
+
_value = _value || {};
|
|
2912
|
+
this.successfullyDeleted = _value.successfullyDeleted
|
|
2913
|
+
? new googleProtobuf004.Empty(_value.successfullyDeleted)
|
|
2914
|
+
: undefined;
|
|
2915
|
+
this.errorMessage = _value.errorMessage;
|
|
2916
|
+
DeleteEntityStatus.refineValues(this);
|
|
2917
|
+
}
|
|
2918
|
+
/**
|
|
2919
|
+
* Deserialize binary data to message
|
|
2920
|
+
* @param instance message instance
|
|
2921
|
+
*/
|
|
2922
|
+
static deserializeBinary(bytes) {
|
|
2923
|
+
const instance = new DeleteEntityStatus();
|
|
2924
|
+
DeleteEntityStatus.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2925
|
+
return instance;
|
|
2926
|
+
}
|
|
2927
|
+
/**
|
|
2928
|
+
* Check all the properties and set default protobuf values if necessary
|
|
2929
|
+
* @param _instance message instance
|
|
2930
|
+
*/
|
|
2931
|
+
static refineValues(_instance) { }
|
|
2932
|
+
/**
|
|
2933
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2934
|
+
* @param _instance message instance
|
|
2935
|
+
* @param _reader binary reader instance
|
|
2936
|
+
*/
|
|
2937
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2938
|
+
while (_reader.nextField()) {
|
|
2939
|
+
if (_reader.isEndGroup())
|
|
2940
|
+
break;
|
|
2941
|
+
switch (_reader.getFieldNumber()) {
|
|
2942
|
+
case 1:
|
|
2943
|
+
_instance.successfullyDeleted = new googleProtobuf004.Empty();
|
|
2944
|
+
_reader.readMessage(_instance.successfullyDeleted, googleProtobuf004.Empty.deserializeBinaryFromReader);
|
|
2945
|
+
break;
|
|
2946
|
+
case 2:
|
|
2947
|
+
_instance.errorMessage = _reader.readString();
|
|
2948
|
+
break;
|
|
2949
|
+
default:
|
|
2950
|
+
_reader.skipField();
|
|
2951
|
+
}
|
|
2952
|
+
}
|
|
2953
|
+
DeleteEntityStatus.refineValues(_instance);
|
|
2954
|
+
}
|
|
2955
|
+
/**
|
|
2956
|
+
* Serializes a message to binary format using provided binary reader
|
|
2957
|
+
* @param _instance message instance
|
|
2958
|
+
* @param _writer binary writer instance
|
|
2959
|
+
*/
|
|
2960
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
2961
|
+
if (_instance.successfullyDeleted) {
|
|
2962
|
+
_writer.writeMessage(1, _instance.successfullyDeleted, googleProtobuf004.Empty.serializeBinaryToWriter);
|
|
2963
|
+
}
|
|
2964
|
+
if (_instance.errorMessage || _instance.errorMessage === '') {
|
|
2965
|
+
_writer.writeString(2, _instance.errorMessage);
|
|
2966
|
+
}
|
|
2967
|
+
}
|
|
2968
|
+
get successfullyDeleted() {
|
|
2969
|
+
return this._successfullyDeleted;
|
|
2970
|
+
}
|
|
2971
|
+
set successfullyDeleted(value) {
|
|
2972
|
+
if (value !== undefined && value !== null) {
|
|
2973
|
+
this._errorMessage = undefined;
|
|
2974
|
+
this._deleteStatus =
|
|
2975
|
+
DeleteEntityStatus.DeleteStatusCase.successfullyDeleted;
|
|
2976
|
+
}
|
|
2977
|
+
this._successfullyDeleted = value;
|
|
2978
|
+
}
|
|
2979
|
+
get errorMessage() {
|
|
2980
|
+
return this._errorMessage;
|
|
2981
|
+
}
|
|
2982
|
+
set errorMessage(value) {
|
|
2983
|
+
if (value !== undefined && value !== null) {
|
|
2984
|
+
this._successfullyDeleted = undefined;
|
|
2985
|
+
this._deleteStatus = DeleteEntityStatus.DeleteStatusCase.errorMessage;
|
|
2986
|
+
}
|
|
2987
|
+
this._errorMessage = value;
|
|
2988
|
+
}
|
|
2989
|
+
get deleteStatus() {
|
|
2990
|
+
return this._deleteStatus;
|
|
2991
|
+
}
|
|
2992
|
+
/**
|
|
2993
|
+
* Serialize message to binary data
|
|
2994
|
+
* @param instance message instance
|
|
2995
|
+
*/
|
|
2996
|
+
serializeBinary() {
|
|
2997
|
+
const writer = new BinaryWriter();
|
|
2998
|
+
DeleteEntityStatus.serializeBinaryToWriter(this, writer);
|
|
2999
|
+
return writer.getResultBuffer();
|
|
3000
|
+
}
|
|
3001
|
+
/**
|
|
3002
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3003
|
+
*/
|
|
3004
|
+
toObject() {
|
|
3005
|
+
return {
|
|
3006
|
+
successfullyDeleted: this.successfullyDeleted
|
|
3007
|
+
? this.successfullyDeleted.toObject()
|
|
3008
|
+
: undefined,
|
|
3009
|
+
errorMessage: this.errorMessage
|
|
3010
|
+
};
|
|
3011
|
+
}
|
|
3012
|
+
/**
|
|
3013
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3014
|
+
*/
|
|
3015
|
+
toJSON() {
|
|
3016
|
+
return this.toObject();
|
|
3017
|
+
}
|
|
3018
|
+
/**
|
|
3019
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3020
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3021
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3022
|
+
*/
|
|
3023
|
+
toProtobufJSON(
|
|
3024
|
+
// @ts-ignore
|
|
3025
|
+
options) {
|
|
3026
|
+
return {
|
|
3027
|
+
successfullyDeleted: this.successfullyDeleted
|
|
3028
|
+
? this.successfullyDeleted.toProtobufJSON(options)
|
|
3029
|
+
: null,
|
|
3030
|
+
errorMessage: this.errorMessage === null || this.errorMessage === undefined
|
|
3031
|
+
? null
|
|
3032
|
+
: this.errorMessage
|
|
3033
|
+
};
|
|
3034
|
+
}
|
|
3035
|
+
}
|
|
3036
|
+
DeleteEntityStatus.id = 'ondewo.nlu.DeleteEntityStatus';
|
|
3037
|
+
BatchDeleteEntitiesResponse.DeleteEntityStatus = DeleteEntityStatus;
|
|
3038
|
+
(function (DeleteEntityStatus) {
|
|
3039
|
+
let DeleteStatusCase;
|
|
3040
|
+
(function (DeleteStatusCase) {
|
|
3041
|
+
DeleteStatusCase[DeleteStatusCase["none"] = 0] = "none";
|
|
3042
|
+
DeleteStatusCase[DeleteStatusCase["successfullyDeleted"] = 1] = "successfullyDeleted";
|
|
3043
|
+
DeleteStatusCase[DeleteStatusCase["errorMessage"] = 2] = "errorMessage";
|
|
3044
|
+
})(DeleteStatusCase = DeleteEntityStatus.DeleteStatusCase || (DeleteEntityStatus.DeleteStatusCase = {}));
|
|
3045
|
+
})(DeleteEntityStatus = BatchDeleteEntitiesResponse.DeleteEntityStatus || (BatchDeleteEntitiesResponse.DeleteEntityStatus = {}));
|
|
3046
|
+
})(BatchDeleteEntitiesResponse || (BatchDeleteEntitiesResponse = {}));
|
|
3047
|
+
/**
|
|
3048
|
+
* Message implementation for ondewo.nlu.ListEntitiesRequest
|
|
3049
|
+
*/
|
|
3050
|
+
export class ListEntitiesRequest {
|
|
3051
|
+
/**
|
|
3052
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3053
|
+
* @param _value initial values object or instance of ListEntitiesRequest to deeply clone from
|
|
3054
|
+
*/
|
|
3055
|
+
constructor(_value) {
|
|
3056
|
+
_value = _value || {};
|
|
3057
|
+
this.entityTypeName = _value.entityTypeName;
|
|
3058
|
+
this.languageCode = _value.languageCode;
|
|
3059
|
+
this.pageToken = _value.pageToken;
|
|
3060
|
+
this.sortByField = _value.sortByField
|
|
3061
|
+
? new EntityValueSorting(_value.sortByField)
|
|
3062
|
+
: undefined;
|
|
3063
|
+
this.searchByPattern = _value.searchByPattern;
|
|
3064
|
+
ListEntitiesRequest.refineValues(this);
|
|
3065
|
+
}
|
|
3066
|
+
/**
|
|
3067
|
+
* Deserialize binary data to message
|
|
3068
|
+
* @param instance message instance
|
|
3069
|
+
*/
|
|
3070
|
+
static deserializeBinary(bytes) {
|
|
3071
|
+
const instance = new ListEntitiesRequest();
|
|
3072
|
+
ListEntitiesRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3073
|
+
return instance;
|
|
3074
|
+
}
|
|
3075
|
+
/**
|
|
3076
|
+
* Check all the properties and set default protobuf values if necessary
|
|
3077
|
+
* @param _instance message instance
|
|
3078
|
+
*/
|
|
3079
|
+
static refineValues(_instance) {
|
|
3080
|
+
_instance.entityTypeName = _instance.entityTypeName || '';
|
|
3081
|
+
_instance.languageCode = _instance.languageCode || '';
|
|
3082
|
+
_instance.pageToken = _instance.pageToken || '';
|
|
3083
|
+
_instance.sortByField = _instance.sortByField || undefined;
|
|
3084
|
+
_instance.searchByPattern = _instance.searchByPattern || '';
|
|
3085
|
+
}
|
|
3086
|
+
/**
|
|
3087
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3088
|
+
* @param _instance message instance
|
|
3089
|
+
* @param _reader binary reader instance
|
|
3090
|
+
*/
|
|
3091
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3092
|
+
while (_reader.nextField()) {
|
|
3093
|
+
if (_reader.isEndGroup())
|
|
3094
|
+
break;
|
|
3095
|
+
switch (_reader.getFieldNumber()) {
|
|
3096
|
+
case 1:
|
|
3097
|
+
_instance.entityTypeName = _reader.readString();
|
|
3098
|
+
break;
|
|
3099
|
+
case 2:
|
|
3100
|
+
_instance.languageCode = _reader.readString();
|
|
3101
|
+
break;
|
|
3102
|
+
case 3:
|
|
3103
|
+
_instance.pageToken = _reader.readString();
|
|
3104
|
+
break;
|
|
3105
|
+
case 5:
|
|
3106
|
+
_instance.sortByField = new EntityValueSorting();
|
|
3107
|
+
_reader.readMessage(_instance.sortByField, EntityValueSorting.deserializeBinaryFromReader);
|
|
3108
|
+
break;
|
|
3109
|
+
case 6:
|
|
3110
|
+
_instance.searchByPattern = _reader.readString();
|
|
3111
|
+
break;
|
|
3112
|
+
default:
|
|
3113
|
+
_reader.skipField();
|
|
3114
|
+
}
|
|
3115
|
+
}
|
|
3116
|
+
ListEntitiesRequest.refineValues(_instance);
|
|
3117
|
+
}
|
|
3118
|
+
/**
|
|
3119
|
+
* Serializes a message to binary format using provided binary reader
|
|
3120
|
+
* @param _instance message instance
|
|
3121
|
+
* @param _writer binary writer instance
|
|
3122
|
+
*/
|
|
3123
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
3124
|
+
if (_instance.entityTypeName) {
|
|
3125
|
+
_writer.writeString(1, _instance.entityTypeName);
|
|
3126
|
+
}
|
|
3127
|
+
if (_instance.languageCode) {
|
|
3128
|
+
_writer.writeString(2, _instance.languageCode);
|
|
3129
|
+
}
|
|
3130
|
+
if (_instance.pageToken) {
|
|
3131
|
+
_writer.writeString(3, _instance.pageToken);
|
|
3132
|
+
}
|
|
3133
|
+
if (_instance.sortByField) {
|
|
3134
|
+
_writer.writeMessage(5, _instance.sortByField, EntityValueSorting.serializeBinaryToWriter);
|
|
3135
|
+
}
|
|
3136
|
+
if (_instance.searchByPattern) {
|
|
3137
|
+
_writer.writeString(6, _instance.searchByPattern);
|
|
3138
|
+
}
|
|
3139
|
+
}
|
|
3140
|
+
get entityTypeName() {
|
|
3141
|
+
return this._entityTypeName;
|
|
3142
|
+
}
|
|
3143
|
+
set entityTypeName(value) {
|
|
3144
|
+
this._entityTypeName = value;
|
|
3145
|
+
}
|
|
3146
|
+
get languageCode() {
|
|
3147
|
+
return this._languageCode;
|
|
3148
|
+
}
|
|
3149
|
+
set languageCode(value) {
|
|
3150
|
+
this._languageCode = value;
|
|
3151
|
+
}
|
|
3152
|
+
get pageToken() {
|
|
3153
|
+
return this._pageToken;
|
|
3154
|
+
}
|
|
3155
|
+
set pageToken(value) {
|
|
3156
|
+
this._pageToken = value;
|
|
3157
|
+
}
|
|
3158
|
+
get sortByField() {
|
|
3159
|
+
return this._sortByField;
|
|
3160
|
+
}
|
|
3161
|
+
set sortByField(value) {
|
|
3162
|
+
this._sortByField = value;
|
|
3163
|
+
}
|
|
3164
|
+
get searchByPattern() {
|
|
3165
|
+
return this._searchByPattern;
|
|
3166
|
+
}
|
|
3167
|
+
set searchByPattern(value) {
|
|
3168
|
+
this._searchByPattern = value;
|
|
3169
|
+
}
|
|
3170
|
+
/**
|
|
3171
|
+
* Serialize message to binary data
|
|
3172
|
+
* @param instance message instance
|
|
3173
|
+
*/
|
|
3174
|
+
serializeBinary() {
|
|
3175
|
+
const writer = new BinaryWriter();
|
|
3176
|
+
ListEntitiesRequest.serializeBinaryToWriter(this, writer);
|
|
3177
|
+
return writer.getResultBuffer();
|
|
3178
|
+
}
|
|
3179
|
+
/**
|
|
3180
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3181
|
+
*/
|
|
3182
|
+
toObject() {
|
|
3183
|
+
return {
|
|
3184
|
+
entityTypeName: this.entityTypeName,
|
|
3185
|
+
languageCode: this.languageCode,
|
|
3186
|
+
pageToken: this.pageToken,
|
|
3187
|
+
sortByField: this.sortByField ? this.sortByField.toObject() : undefined,
|
|
3188
|
+
searchByPattern: this.searchByPattern
|
|
3189
|
+
};
|
|
3190
|
+
}
|
|
3191
|
+
/**
|
|
3192
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3193
|
+
*/
|
|
3194
|
+
toJSON() {
|
|
3195
|
+
return this.toObject();
|
|
3196
|
+
}
|
|
3197
|
+
/**
|
|
3198
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3199
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3200
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3201
|
+
*/
|
|
3202
|
+
toProtobufJSON(
|
|
3203
|
+
// @ts-ignore
|
|
3204
|
+
options) {
|
|
3205
|
+
return {
|
|
3206
|
+
entityTypeName: this.entityTypeName,
|
|
3207
|
+
languageCode: this.languageCode,
|
|
3208
|
+
pageToken: this.pageToken,
|
|
3209
|
+
sortByField: this.sortByField
|
|
3210
|
+
? this.sortByField.toProtobufJSON(options)
|
|
3211
|
+
: null,
|
|
3212
|
+
searchByPattern: this.searchByPattern
|
|
3213
|
+
};
|
|
3214
|
+
}
|
|
3215
|
+
}
|
|
3216
|
+
ListEntitiesRequest.id = 'ondewo.nlu.ListEntitiesRequest';
|
|
3217
|
+
/**
|
|
3218
|
+
* Message implementation for ondewo.nlu.ListEntitiesResponse
|
|
3219
|
+
*/
|
|
3220
|
+
export class ListEntitiesResponse {
|
|
3221
|
+
/**
|
|
3222
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3223
|
+
* @param _value initial values object or instance of ListEntitiesResponse to deeply clone from
|
|
3224
|
+
*/
|
|
3225
|
+
constructor(_value) {
|
|
3226
|
+
_value = _value || {};
|
|
3227
|
+
this.entities = (_value.entities || []).map(m => new EntityType.Entity(m));
|
|
3228
|
+
this.nextPageToken = _value.nextPageToken;
|
|
3229
|
+
ListEntitiesResponse.refineValues(this);
|
|
3230
|
+
}
|
|
3231
|
+
/**
|
|
3232
|
+
* Deserialize binary data to message
|
|
3233
|
+
* @param instance message instance
|
|
3234
|
+
*/
|
|
3235
|
+
static deserializeBinary(bytes) {
|
|
3236
|
+
const instance = new ListEntitiesResponse();
|
|
3237
|
+
ListEntitiesResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3238
|
+
return instance;
|
|
3239
|
+
}
|
|
3240
|
+
/**
|
|
3241
|
+
* Check all the properties and set default protobuf values if necessary
|
|
3242
|
+
* @param _instance message instance
|
|
3243
|
+
*/
|
|
3244
|
+
static refineValues(_instance) {
|
|
3245
|
+
_instance.entities = _instance.entities || [];
|
|
3246
|
+
_instance.nextPageToken = _instance.nextPageToken || '';
|
|
3247
|
+
}
|
|
3248
|
+
/**
|
|
3249
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3250
|
+
* @param _instance message instance
|
|
3251
|
+
* @param _reader binary reader instance
|
|
3252
|
+
*/
|
|
3253
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3254
|
+
while (_reader.nextField()) {
|
|
3255
|
+
if (_reader.isEndGroup())
|
|
3256
|
+
break;
|
|
3257
|
+
switch (_reader.getFieldNumber()) {
|
|
3258
|
+
case 1:
|
|
3259
|
+
const messageInitializer1 = new EntityType.Entity();
|
|
3260
|
+
_reader.readMessage(messageInitializer1, EntityType.Entity.deserializeBinaryFromReader);
|
|
3261
|
+
(_instance.entities = _instance.entities || []).push(messageInitializer1);
|
|
3262
|
+
break;
|
|
3263
|
+
case 2:
|
|
3264
|
+
_instance.nextPageToken = _reader.readString();
|
|
3265
|
+
break;
|
|
3266
|
+
default:
|
|
3267
|
+
_reader.skipField();
|
|
3268
|
+
}
|
|
3269
|
+
}
|
|
3270
|
+
ListEntitiesResponse.refineValues(_instance);
|
|
3271
|
+
}
|
|
3272
|
+
/**
|
|
3273
|
+
* Serializes a message to binary format using provided binary reader
|
|
3274
|
+
* @param _instance message instance
|
|
3275
|
+
* @param _writer binary writer instance
|
|
3276
|
+
*/
|
|
3277
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
3278
|
+
if (_instance.entities && _instance.entities.length) {
|
|
3279
|
+
_writer.writeRepeatedMessage(1, _instance.entities, EntityType.Entity.serializeBinaryToWriter);
|
|
3280
|
+
}
|
|
3281
|
+
if (_instance.nextPageToken) {
|
|
3282
|
+
_writer.writeString(2, _instance.nextPageToken);
|
|
3283
|
+
}
|
|
3284
|
+
}
|
|
3285
|
+
get entities() {
|
|
3286
|
+
return this._entities;
|
|
3287
|
+
}
|
|
3288
|
+
set entities(value) {
|
|
3289
|
+
this._entities = value;
|
|
3290
|
+
}
|
|
3291
|
+
get nextPageToken() {
|
|
3292
|
+
return this._nextPageToken;
|
|
3293
|
+
}
|
|
3294
|
+
set nextPageToken(value) {
|
|
3295
|
+
this._nextPageToken = value;
|
|
3296
|
+
}
|
|
3297
|
+
/**
|
|
3298
|
+
* Serialize message to binary data
|
|
3299
|
+
* @param instance message instance
|
|
3300
|
+
*/
|
|
3301
|
+
serializeBinary() {
|
|
3302
|
+
const writer = new BinaryWriter();
|
|
3303
|
+
ListEntitiesResponse.serializeBinaryToWriter(this, writer);
|
|
3304
|
+
return writer.getResultBuffer();
|
|
3305
|
+
}
|
|
3306
|
+
/**
|
|
3307
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3308
|
+
*/
|
|
3309
|
+
toObject() {
|
|
3310
|
+
return {
|
|
3311
|
+
entities: (this.entities || []).map(m => m.toObject()),
|
|
3312
|
+
nextPageToken: this.nextPageToken
|
|
3313
|
+
};
|
|
3314
|
+
}
|
|
3315
|
+
/**
|
|
3316
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3317
|
+
*/
|
|
3318
|
+
toJSON() {
|
|
3319
|
+
return this.toObject();
|
|
3320
|
+
}
|
|
3321
|
+
/**
|
|
3322
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3323
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3324
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3325
|
+
*/
|
|
3326
|
+
toProtobufJSON(
|
|
3327
|
+
// @ts-ignore
|
|
3328
|
+
options) {
|
|
3329
|
+
return {
|
|
3330
|
+
entities: (this.entities || []).map(m => m.toProtobufJSON(options)),
|
|
3331
|
+
nextPageToken: this.nextPageToken
|
|
3332
|
+
};
|
|
3333
|
+
}
|
|
3334
|
+
}
|
|
3335
|
+
ListEntitiesResponse.id = 'ondewo.nlu.ListEntitiesResponse';
|
|
3336
|
+
/**
|
|
3337
|
+
* Message implementation for ondewo.nlu.EntityValueSorting
|
|
3338
|
+
*/
|
|
3339
|
+
export class EntityValueSorting {
|
|
3340
|
+
/**
|
|
3341
|
+
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3342
|
+
* @param _value initial values object or instance of EntityValueSorting to deeply clone from
|
|
3343
|
+
*/
|
|
3344
|
+
constructor(_value) {
|
|
3345
|
+
_value = _value || {};
|
|
3346
|
+
this.sortingField = _value.sortingField;
|
|
3347
|
+
this.sortingMode = _value.sortingMode;
|
|
3348
|
+
EntityValueSorting.refineValues(this);
|
|
3349
|
+
}
|
|
3350
|
+
/**
|
|
3351
|
+
* Deserialize binary data to message
|
|
3352
|
+
* @param instance message instance
|
|
3353
|
+
*/
|
|
3354
|
+
static deserializeBinary(bytes) {
|
|
3355
|
+
const instance = new EntityValueSorting();
|
|
3356
|
+
EntityValueSorting.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3357
|
+
return instance;
|
|
3358
|
+
}
|
|
3359
|
+
/**
|
|
3360
|
+
* Check all the properties and set default protobuf values if necessary
|
|
3361
|
+
* @param _instance message instance
|
|
3362
|
+
*/
|
|
3363
|
+
static refineValues(_instance) {
|
|
3364
|
+
_instance.sortingField = _instance.sortingField || 0;
|
|
3365
|
+
_instance.sortingMode = _instance.sortingMode || 0;
|
|
3366
|
+
}
|
|
3367
|
+
/**
|
|
3368
|
+
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3369
|
+
* @param _instance message instance
|
|
3370
|
+
* @param _reader binary reader instance
|
|
3371
|
+
*/
|
|
3372
|
+
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3373
|
+
while (_reader.nextField()) {
|
|
3374
|
+
if (_reader.isEndGroup())
|
|
3375
|
+
break;
|
|
3376
|
+
switch (_reader.getFieldNumber()) {
|
|
3377
|
+
case 7:
|
|
3378
|
+
_instance.sortingField = _reader.readEnum();
|
|
3379
|
+
break;
|
|
3380
|
+
case 8:
|
|
3381
|
+
_instance.sortingMode = _reader.readEnum();
|
|
3382
|
+
break;
|
|
3383
|
+
default:
|
|
3384
|
+
_reader.skipField();
|
|
3385
|
+
}
|
|
3386
|
+
}
|
|
3387
|
+
EntityValueSorting.refineValues(_instance);
|
|
3388
|
+
}
|
|
3389
|
+
/**
|
|
3390
|
+
* Serializes a message to binary format using provided binary reader
|
|
3391
|
+
* @param _instance message instance
|
|
3392
|
+
* @param _writer binary writer instance
|
|
3393
|
+
*/
|
|
3394
|
+
static serializeBinaryToWriter(_instance, _writer) {
|
|
3395
|
+
if (_instance.sortingField) {
|
|
3396
|
+
_writer.writeEnum(7, _instance.sortingField);
|
|
3397
|
+
}
|
|
3398
|
+
if (_instance.sortingMode) {
|
|
3399
|
+
_writer.writeEnum(8, _instance.sortingMode);
|
|
3400
|
+
}
|
|
3401
|
+
}
|
|
3402
|
+
get sortingField() {
|
|
3403
|
+
return this._sortingField;
|
|
3404
|
+
}
|
|
3405
|
+
set sortingField(value) {
|
|
3406
|
+
this._sortingField = value;
|
|
3407
|
+
}
|
|
3408
|
+
get sortingMode() {
|
|
3409
|
+
return this._sortingMode;
|
|
3410
|
+
}
|
|
3411
|
+
set sortingMode(value) {
|
|
3412
|
+
this._sortingMode = value;
|
|
3413
|
+
}
|
|
3414
|
+
/**
|
|
3415
|
+
* Serialize message to binary data
|
|
3416
|
+
* @param instance message instance
|
|
3417
|
+
*/
|
|
3418
|
+
serializeBinary() {
|
|
3419
|
+
const writer = new BinaryWriter();
|
|
3420
|
+
EntityValueSorting.serializeBinaryToWriter(this, writer);
|
|
3421
|
+
return writer.getResultBuffer();
|
|
3422
|
+
}
|
|
3423
|
+
/**
|
|
3424
|
+
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3425
|
+
*/
|
|
3426
|
+
toObject() {
|
|
3427
|
+
return {
|
|
3428
|
+
sortingField: this.sortingField,
|
|
3429
|
+
sortingMode: this.sortingMode
|
|
3430
|
+
};
|
|
3431
|
+
}
|
|
3432
|
+
/**
|
|
3433
|
+
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3434
|
+
*/
|
|
3435
|
+
toJSON() {
|
|
3436
|
+
return this.toObject();
|
|
3437
|
+
}
|
|
3438
|
+
/**
|
|
3439
|
+
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3440
|
+
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3441
|
+
* If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
|
|
3442
|
+
*/
|
|
3443
|
+
toProtobufJSON(
|
|
3444
|
+
// @ts-ignore
|
|
3445
|
+
options) {
|
|
3446
|
+
return {
|
|
3447
|
+
sortingField: EntityValueSorting.EntityValueSortingField[this.sortingField === null || this.sortingField === undefined
|
|
3448
|
+
? 0
|
|
3449
|
+
: this.sortingField],
|
|
3450
|
+
sortingMode: ondewoNlu009.SortingMode[this.sortingMode === null || this.sortingMode === undefined
|
|
3451
|
+
? 0
|
|
3452
|
+
: this.sortingMode]
|
|
3453
|
+
};
|
|
3454
|
+
}
|
|
3455
|
+
}
|
|
3456
|
+
EntityValueSorting.id = 'ondewo.nlu.EntityValueSorting';
|
|
3457
|
+
(function (EntityValueSorting) {
|
|
3458
|
+
let EntityValueSortingField;
|
|
3459
|
+
(function (EntityValueSortingField) {
|
|
3460
|
+
EntityValueSortingField[EntityValueSortingField["NO_ENTITY_VALUE_SORTING"] = 0] = "NO_ENTITY_VALUE_SORTING";
|
|
3461
|
+
EntityValueSortingField[EntityValueSortingField["SORT_ENTITY_VALUE_BY_DISPLAY_NAME"] = 1] = "SORT_ENTITY_VALUE_BY_DISPLAY_NAME";
|
|
3462
|
+
EntityValueSortingField[EntityValueSortingField["SORT_ENTITY_VALUE_BY_VALUE"] = 2] = "SORT_ENTITY_VALUE_BY_VALUE";
|
|
3463
|
+
EntityValueSortingField[EntityValueSortingField["SORT_ENTITY_VALUE_BY_SYNONYM_COUNT"] = 3] = "SORT_ENTITY_VALUE_BY_SYNONYM_COUNT";
|
|
3464
|
+
})(EntityValueSortingField = EntityValueSorting.EntityValueSortingField || (EntityValueSorting.EntityValueSortingField = {}));
|
|
3465
|
+
})(EntityValueSorting || (EntityValueSorting = {}));
|
|
3466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXR5cGUucGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hcGkvb25kZXdvL25sdS9lbnRpdHktdHlwZS5wYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBS3pFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUloRSxPQUFPLEtBQUssaUJBQWlCLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxLQUFLLFlBQVksTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxNQUFNLENBQU4sSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3hCLG1HQUFnQyxDQUFBO0lBQ2hDLHFGQUF5QixDQUFBO0lBQ3pCLDJGQUE0QixDQUFBO0lBQzVCLDJGQUE0QixDQUFBO0FBQzlCLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQUNELE1BQU0sQ0FBTixJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDNUIsbUZBQW9CLENBQUE7SUFDcEIsMkZBQXdCLENBQUE7SUFDeEIscUdBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUpXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFJN0I7QUFDRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBcUlyQjs7O09BR0c7SUFDSCxZQUFZLE1BQThDO1FBQ3hELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFD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M0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQ3RCO1lBQ0gsV0FBVyxFQUNULFlBQVksQ0FBQyxXQUFXLENBQ3RCLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUztnQkFDekQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQ3JCO1NBQ0osQ0FBQztJQUNKLENBQUM7O0FBbEpNLHFCQUFFLEdBQUcsK0JBQStCLENBQUM7QUFvSjlDLFdBQWMsa0JBQWtCO0lBZ0I5QixJQUFZLHVCQUtYO0lBTEQsV0FBWSx1QkFBdUI7UUFDakMsMkdBQTJCLENBQUE7UUFDM0IsK0hBQXFDLENBQUE7UUFDckMsaUhBQThCLENBQUE7UUFDOUIsaUlBQXNDLENBQUE7SUFDeEMsQ0FBQyxFQUxXLHVCQUF1QixHQUF2QiwwQ0FBdUIsS0FBdkIsMENBQXVCLFFBS2xDO0FBQ0gsQ0FBQyxFQXRCYSxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBc0IvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbi8vXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEVcbi8vIERPIE5PVCBNT0RJRlkgSVQhIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIExPU1RcbmltcG9ydCB7XG4gIEdycGNNZXNzYWdlLFxuICBSZWN1cnNpdmVQYXJ0aWFsLFxuICBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbn0gZnJvbSAnQG5neC1ncnBjL2NvbW1vbic7XG5pbXBvcnQgeyBCaW5hcnlSZWFkZXIsIEJpbmFyeVdyaXRlciwgQnl0ZVNvdXJjZSB9IGZyb20gJ2dvb2dsZS1wcm90b2J1Zic7XG5pbXBvcnQgKiBhcyBnb29nbGVBcGkwMDAgZnJvbSAnLi4vLi4vZ29vZ2xlL2FwaS9odHRwLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAxIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZUFwaTAwMiBmcm9tICcuLi8uLi9nb29nbGUvYXBpL2Fubm90YXRpb25zLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAzIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDA0IGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGdvb2dsZVJwYzAwNSBmcm9tICcuLi8uLi9nb29nbGUvcnBjL3N0YXR1cy5wYic7XG5pbXBvcnQgKiBhcyBnb29nbGVQcm90b2J1ZjAwNiBmcm9tICdAbmd4LWdycGMvd2VsbC1rbm93bi10eXBlcyc7XG5pbXBvcnQgKiBhcyBvbmRld29ObHUwMDcgZnJvbSAnLi4vLi4vb25kZXdvL25sdS9vcGVyYXRpb24tbWV0YWRhdGEucGInO1xuaW1wb3J0ICogYXMgZ29vZ2xlUHJvdG9idWYwMDggZnJvbSAnQG5neC1ncnBjL3dlbGwta25vd24tdHlwZXMnO1xuaW1wb3J0ICogYXMgb25kZXdvTmx1MDA5IGZyb20gJy4uLy4uL29uZGV3by9ubHUvY29tbW9uLnBiJztcbmltcG9ydCAqIGFzIG9uZGV3b05sdTAxMCBmcm9tICcuLi8uLi9vbmRld28vbmx1L29wZXJhdGlvbnMucGInO1xuZXhwb3J0IGVudW0gRW50aXR5VHlwZVZpZXcge1xuICBFTlRJVFlfVFlQRV9WSUVXX1VOU1BFQ0lGSUVEID0gMCxcbiAgRU5USVRZX1RZUEVfVklFV19GVUxMID0gMSxcbiAgRU5USVRZX1RZUEVfVklFV19QQVJUSUFMID0gMixcbiAgRU5USVRZX1RZUEVfVklFV19TSEFMTE9XID0gM1xufVxuZXhwb3J0IGVudW0gRW50aXR5VHlwZUNhdGVnb3J5IHtcbiAgQUxMX0VOVElUWV9UWVBFUyA9IDAsXG4gIERFRkFVTFRfRU5USVRZX1RZUEVTID0gMSxcbiAgVVNFUl9ERUZJTkVEX0VOVElUWV9UWVBFUyA9IDJcbn1cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRpdHlUeXBlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5FbnRpdHlUeXBlJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgIEVudGl0eVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBFbnRpdHlUeXBlKSB7XG4gICAgX2luc3RhbmNlLm5hbWUgPSBfaW5zdGFuY2UubmFtZSB8fCAnJztcbiAgICBfaW5zdGFuY2UuZGlzcGxheU5hbWUgPSBfaW5zdGFuY2UuZGlzcGxheU5hbWUgfHwgJyc7XG4gICAgX2luc3RhbmNlLmtpbmQgPSBfaW5zdGFuY2Uua2luZCB8fCAwO1xuICAgIF9pbnN0YW5jZS5hdXRvRXhwYW5zaW9uTW9kZSA9IF9pbnN0YW5jZS5hdXRvRXhwYW5zaW9uTW9kZSB8fCAwO1xuICAgIF9pbnN0YW5jZS5lbnRpdGllcyA9IF9pbnN0YW5jZS5lbnRpdGllcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5lbnRpdHlDb3VudCA9IF9pbnN0YW5jZS5lbnRpdHlDb3VudCB8fCAwO1xuICAgIF9pbnN0YW5jZS5zdGF0dXMgPSBfaW5zdGFuY2Uuc3RhdHVzIHx8IDA7XG4gICAgX2luc3RhbmNlLnN5bm9ueW1Db3VudCA9IF9pbnN0YW5jZS5zeW5vbnltQ291bnQgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGUsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLm5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5kaXNwbGF5TmFtZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmtpbmQgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2UuYXV0b0V4cGFuc2lvbk1vZGUgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXI2ID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjYsXG4gICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXRpZXMgPSBfaW5zdGFuY2UuZW50aXRpZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXI2XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlDb3VudCA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBfaW5zdGFuY2Uuc3lub255bUNvdW50ID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEVudGl0eVR5cGUucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoX2luc3RhbmNlOiBFbnRpdHlUeXBlLCBfd3JpdGVyOiBCaW5hcnlXcml0ZXIpIHtcbiAgICBpZiAoX2luc3RhbmNlLm5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmRpc3BsYXlOYW1lKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5kaXNwbGF5TmFtZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uua2luZCkge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oMywgX2luc3RhbmNlLmtpbmQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmF1dG9FeHBhbnNpb25Nb2RlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlRW51bSg0LCBfaW5zdGFuY2UuYXV0b0V4cGFuc2lvbk1vZGUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmVudGl0aWVzICYmIF9pbnN0YW5jZS5lbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDYsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm5leHRQYWdlVG9rZW4pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMTAsIF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlDb3VudCkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDExLCBfaW5zdGFuY2UuZW50aXR5Q291bnQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnN0YXR1cykge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oMTIsIF9pbnN0YW5jZS5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnN5bm9ueW1Db3VudCkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDEzLCBfaW5zdGFuY2Uuc3lub255bUNvdW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nO1xuICBwcml2YXRlIF9kaXNwbGF5TmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfa2luZD86IEVudGl0eVR5cGUuS2luZDtcbiAgcHJpdmF0ZSBfYXV0b0V4cGFuc2lvbk1vZGU/OiBFbnRpdHlUeXBlLkF1dG9FeHBhbnNpb25Nb2RlO1xuICBwcml2YXRlIF9lbnRpdGllcz86IEVudGl0eVR5cGUuRW50aXR5W107XG4gIHByaXZhdGUgX25leHRQYWdlVG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eUNvdW50PzogbnVtYmVyO1xuICBwcml2YXRlIF9zdGF0dXM/OiBFbnRpdHlUeXBlLkVudGl0eVR5cGVTdGF0dXM7XG4gIHByaXZhdGUgX3N5bm9ueW1Db3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEVudGl0eVR5cGUgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5VHlwZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5uYW1lID0gX3ZhbHVlLm5hbWU7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IF92YWx1ZS5kaXNwbGF5TmFtZTtcbiAgICB0aGlzLmtpbmQgPSBfdmFsdWUua2luZDtcbiAgICB0aGlzLmF1dG9FeHBhbnNpb25Nb2RlID0gX3ZhbHVlLmF1dG9FeHBhbnNpb25Nb2RlO1xuICAgIHRoaXMuZW50aXRpZXMgPSAoX3ZhbHVlLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBuZXcgRW50aXR5VHlwZS5FbnRpdHkobSkpO1xuICAgIHRoaXMubmV4dFBhZ2VUb2tlbiA9IF92YWx1ZS5uZXh0UGFnZVRva2VuO1xuICAgIHRoaXMuZW50aXR5Q291bnQgPSBfdmFsdWUuZW50aXR5Q291bnQ7XG4gICAgdGhpcy5zdGF0dXMgPSBfdmFsdWUuc3RhdHVzO1xuICAgIHRoaXMuc3lub255bUNvdW50ID0gX3ZhbHVlLnN5bm9ueW1Db3VudDtcbiAgICBFbnRpdHlUeXBlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlOYW1lO1xuICB9XG4gIHNldCBkaXNwbGF5TmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQga2luZCgpOiBFbnRpdHlUeXBlLktpbmQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9raW5kO1xuICB9XG4gIHNldCBraW5kKHZhbHVlOiBFbnRpdHlUeXBlLktpbmQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9raW5kID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGF1dG9FeHBhbnNpb25Nb2RlKCk6IEVudGl0eVR5cGUuQXV0b0V4cGFuc2lvbk1vZGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9hdXRvRXhwYW5zaW9uTW9kZTtcbiAgfVxuICBzZXQgYXV0b0V4cGFuc2lvbk1vZGUodmFsdWU6IEVudGl0eVR5cGUuQXV0b0V4cGFuc2lvbk1vZGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hdXRvRXhwYW5zaW9uTW9kZSA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdGllcygpOiBFbnRpdHlUeXBlLkVudGl0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXRpZXM7XG4gIH1cbiAgc2V0IGVudGl0aWVzKHZhbHVlOiBFbnRpdHlUeXBlLkVudGl0eVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXRpZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbmV4dFBhZ2VUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uZXh0UGFnZVRva2VuO1xuICB9XG4gIHNldCBuZXh0UGFnZVRva2VuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9uZXh0UGFnZVRva2VuID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVudGl0eUNvdW50KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eUNvdW50O1xuICB9XG4gIHNldCBlbnRpdHlDb3VudCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5Q291bnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3RhdHVzKCk6IEVudGl0eVR5cGUuRW50aXR5VHlwZVN0YXR1cyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuICBzZXQgc3RhdHVzKHZhbHVlOiBFbnRpdHlUeXBlLkVudGl0eVR5cGVTdGF0dXMgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3lub255bUNvdW50KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3N5bm9ueW1Db3VudDtcbiAgfVxuICBzZXQgc3lub255bUNvdW50KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zeW5vbnltQ291bnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBFbnRpdHlUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEVudGl0eVR5cGUuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogdGhpcy5kaXNwbGF5TmFtZSxcbiAgICAgIGtpbmQ6IHRoaXMua2luZCxcbiAgICAgIGF1dG9FeHBhbnNpb25Nb2RlOiB0aGlzLmF1dG9FeHBhbnNpb25Nb2RlLFxuICAgICAgZW50aXRpZXM6ICh0aGlzLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpLFxuICAgICAgbmV4dFBhZ2VUb2tlbjogdGhpcy5uZXh0UGFnZVRva2VuLFxuICAgICAgZW50aXR5Q291bnQ6IHRoaXMuZW50aXR5Q291bnQsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3lub255bUNvdW50OiB0aGlzLnN5bm9ueW1Db3VudFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEVudGl0eVR5cGUuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogdGhpcy5kaXNwbGF5TmFtZSxcbiAgICAgIGtpbmQ6XG4gICAgICAgIEVudGl0eVR5cGUuS2luZFtcbiAgICAgICAgICB0aGlzLmtpbmQgPT09IG51bGwgfHwgdGhpcy5raW5kID09PSB1bmRlZmluZWQgPyAwIDogdGhpcy5raW5kXG4gICAgICAgIF0sXG4gICAgICBhdXRvRXhwYW5zaW9uTW9kZTpcbiAgICAgICAgRW50aXR5VHlwZS5BdXRvRXhwYW5zaW9uTW9kZVtcbiAgICAgICAgICB0aGlzLmF1dG9FeHBhbnNpb25Nb2RlID09PSBudWxsIHx8XG4gICAgICAgICAgdGhpcy5hdXRvRXhwYW5zaW9uTW9kZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5hdXRvRXhwYW5zaW9uTW9kZVxuICAgICAgICBdLFxuICAgICAgZW50aXRpZXM6ICh0aGlzLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKSxcbiAgICAgIG5leHRQYWdlVG9rZW46IHRoaXMubmV4dFBhZ2VUb2tlbixcbiAgICAgIGVudGl0eUNvdW50OiB0aGlzLmVudGl0eUNvdW50LFxuICAgICAgc3RhdHVzOlxuICAgICAgICBFbnRpdHlUeXBlLkVudGl0eVR5cGVTdGF0dXNbXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPT09IG51bGwgfHwgdGhpcy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDAgOiB0aGlzLnN0YXR1c1xuICAgICAgICBdLFxuICAgICAgc3lub255bUNvdW50OiB0aGlzLnN5bm9ueW1Db3VudFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgRW50aXR5VHlwZSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5VHlwZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgICBraW5kPzogRW50aXR5VHlwZS5LaW5kO1xuICAgIGF1dG9FeHBhbnNpb25Nb2RlPzogRW50aXR5VHlwZS5BdXRvRXhwYW5zaW9uTW9kZTtcbiAgICBlbnRpdGllcz86IEVudGl0eVR5cGUuRW50aXR5LkFzT2JqZWN0W107XG4gICAgbmV4dFBhZ2VUb2tlbj86IHN0cmluZztcbiAgICBlbnRpdHlDb3VudD86IG51bWJlcjtcbiAgICBzdGF0dXM/OiBFbnRpdHlUeXBlLkVudGl0eVR5cGVTdGF0dXM7XG4gICAgc3lub255bUNvdW50PzogbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVR5cGVcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAga2luZD86IHN0cmluZztcbiAgICBhdXRvRXhwYW5zaW9uTW9kZT86IHN0cmluZztcbiAgICBlbnRpdGllcz86IEVudGl0eVR5cGUuRW50aXR5LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICAgIG5leHRQYWdlVG9rZW4/OiBzdHJpbmc7XG4gICAgZW50aXR5Q291bnQ/OiBudW1iZXI7XG4gICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIHN5bm9ueW1Db3VudD86IG51bWJlcjtcbiAgfVxuICBleHBvcnQgZW51bSBLaW5kIHtcbiAgICBLSU5EX1VOU1BFQ0lGSUVEID0gMCxcbiAgICBLSU5EX01BUCA9IDEsXG4gICAgS0lORF9MSVNUID0gMlxuICB9XG4gIGV4cG9ydCBlbnVtIEVudGl0eVR5cGVTdGF0dXMge1xuICAgIEFDVElWRSA9IDAsXG4gICAgSU5BQ1RJVkUgPSAxXG4gIH1cbiAgZXhwb3J0IGVudW0gQXV0b0V4cGFuc2lvbk1vZGUge1xuICAgIEFVVE9fRVhQQU5TSU9OX01PREVfVU5TUEVDSUZJRUQgPSAwLFxuICAgIEFVVE9fRVhQQU5TSU9OX01PREVfREVGQVVMVCA9IDFcbiAgfVxuICAvKipcbiAgICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBFbnRpdHkgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRW50aXR5JztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5KCk7XG4gICAgICBFbnRpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEVudGl0eSkge1xuICAgICAgX2luc3RhbmNlLnZhbHVlID0gX2luc3RhbmNlLnZhbHVlIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLnN5bm9ueW1zID0gX2luc3RhbmNlLnN5bm9ueW1zIHx8IFtdO1xuICAgICAgX2luc3RhbmNlLm5hbWUgPSBfaW5zdGFuY2UubmFtZSB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5kaXNwbGF5TmFtZSA9IF9pbnN0YW5jZS5kaXNwbGF5TmFtZSB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5zeW5vbnltQ291bnQgPSBfaW5zdGFuY2Uuc3lub255bUNvdW50IHx8IDA7XG4gICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX2luc3RhbmNlLmxhbmd1YWdlQ29kZSB8fCAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgX2luc3RhbmNlOiBFbnRpdHksXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBfaW5zdGFuY2UudmFsdWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIChfaW5zdGFuY2Uuc3lub255bXMgPSBfaW5zdGFuY2Uuc3lub255bXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICAgIF9yZWFkZXIucmVhZFN0cmluZygpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgX2luc3RhbmNlLm5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5kaXNwbGF5TmFtZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgX2luc3RhbmNlLnN5bm9ueW1Db3VudCA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBFbnRpdHkucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IEVudGl0eSwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgICBpZiAoX2luc3RhbmNlLnZhbHVlKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2Uuc3lub255bXMgJiYgX2luc3RhbmNlLnN5bm9ueW1zLmxlbmd0aCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMiwgX2luc3RhbmNlLnN5bm9ueW1zKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UubmFtZSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDMsIF9pbnN0YW5jZS5uYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0LCBfaW5zdGFuY2UuZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5zeW5vbnltQ291bnQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZUludDMyKDUsIF9pbnN0YW5jZS5zeW5vbnltQ291bnQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg2LCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWx1ZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9zeW5vbnltcz86IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgX25hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfc3lub255bUNvdW50PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX2xhbmd1YWdlQ29kZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEVudGl0eSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5LkFzT2JqZWN0Pikge1xuICAgICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy52YWx1ZSA9IF92YWx1ZS52YWx1ZTtcbiAgICAgIHRoaXMuc3lub255bXMgPSAoX3ZhbHVlLnN5bm9ueW1zIHx8IFtdKS5zbGljZSgpO1xuICAgICAgdGhpcy5uYW1lID0gX3ZhbHVlLm5hbWU7XG4gICAgICB0aGlzLmRpc3BsYXlOYW1lID0gX3ZhbHVlLmRpc3BsYXlOYW1lO1xuICAgICAgdGhpcy5zeW5vbnltQ291bnQgPSBfdmFsdWUuc3lub255bUNvdW50O1xuICAgICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBfdmFsdWUubGFuZ3VhZ2VDb2RlO1xuICAgICAgRW50aXR5LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3lub255bXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHRoaXMuX3N5bm9ueW1zO1xuICAgIH1cbiAgICBzZXQgc3lub255bXModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zeW5vbnltcyA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU5hbWU7XG4gICAgfVxuICAgIHNldCBkaXNwbGF5TmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3lub255bUNvdW50KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fc3lub255bUNvdW50O1xuICAgIH1cbiAgICBzZXQgc3lub255bUNvdW50KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3N5bm9ueW1Db3VudCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDb2RlO1xuICAgIH1cbiAgICBzZXQgbGFuZ3VhZ2VDb2RlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xhbmd1YWdlQ29kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBFbnRpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogRW50aXR5LkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICBzeW5vbnltczogKHRoaXMuc3lub255bXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZGlzcGxheU5hbWUsXG4gICAgICAgIHN5bm9ueW1Db3VudDogdGhpcy5zeW5vbnltQ291bnQsXG4gICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogRW50aXR5LkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICBzeW5vbnltczogKHRoaXMuc3lub255bXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZGlzcGxheU5hbWUsXG4gICAgICAgIHN5bm9ueW1Db3VudDogdGhpcy5zeW5vbnltQ291bnQsXG4gICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGVcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgRW50aXR5IHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5XG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgICB2YWx1ZT86IHN0cmluZztcbiAgICAgIHN5bm9ueW1zPzogc3RyaW5nW107XG4gICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgICBzeW5vbnltQ291bnQ/OiBudW1iZXI7XG4gICAgICBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRW50aXR5XG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICB2YWx1ZT86IHN0cmluZztcbiAgICAgIHN5bm9ueW1zPzogc3RyaW5nW107XG4gICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgICBzeW5vbnltQ291bnQ/OiBudW1iZXI7XG4gICAgICBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5MaXN0RW50aXR5VHlwZXNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5MaXN0RW50aXR5VHlwZXNSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTGlzdEVudGl0eVR5cGVzUmVxdWVzdCgpO1xuICAgIExpc3RFbnRpdHlUeXBlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnBhcmVudCA9IF9pbnN0YW5jZS5wYXJlbnQgfHwgJyc7XG4gICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgfHwgJyc7XG4gICAgX2luc3RhbmNlLnBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5wYWdlVG9rZW4gfHwgJyc7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3ID0gX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3IHx8IDA7XG4gICAgX2luc3RhbmNlLmZpbHRlckJ5Q2F0ZWdvcnkgPSBfaW5zdGFuY2UuZmlsdGVyQnlDYXRlZ29yeSB8fCAwO1xuICAgIF9pbnN0YW5jZS5zb3J0QnlGaWVsZCA9IF9pbnN0YW5jZS5zb3J0QnlGaWVsZCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXJlbnQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF9pbnN0YW5jZS5wYWdlVG9rZW4gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJCeUNhdGVnb3J5ID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgX2luc3RhbmNlLnNvcnRCeUZpZWxkID0gbmV3IEVudGl0eVR5cGVTb3J0aW5nKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zb3J0QnlGaWVsZCxcbiAgICAgICAgICAgIEVudGl0eVR5cGVTb3J0aW5nLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdEVudGl0eVR5cGVzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnBhcmVudCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhZ2VUb2tlbikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0LCBfaW5zdGFuY2UucGFnZVRva2VuKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldykge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oNSwgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5maWx0ZXJCeUNhdGVnb3J5KSB7XG4gICAgICBfd3JpdGVyLndyaXRlRW51bSg2LCBfaW5zdGFuY2UuZmlsdGVyQnlDYXRlZ29yeSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc29ydEJ5RmllbGQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA3LFxuICAgICAgICBfaW5zdGFuY2Uuc29ydEJ5RmllbGQgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlU29ydGluZy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJlbnQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFnZVRva2VuPzogc3RyaW5nO1xuICBwcml2YXRlIF9lbnRpdHlUeXBlVmlldz86IEVudGl0eVR5cGVWaWV3O1xuICBwcml2YXRlIF9maWx0ZXJCeUNhdGVnb3J5PzogRW50aXR5VHlwZUNhdGVnb3J5O1xuICBwcml2YXRlIF9zb3J0QnlGaWVsZD86IEVudGl0eVR5cGVTb3J0aW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgTGlzdEVudGl0eVR5cGVzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnBhcmVudCA9IF92YWx1ZS5wYXJlbnQ7XG4gICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBfdmFsdWUubGFuZ3VhZ2VDb2RlO1xuICAgIHRoaXMucGFnZVRva2VuID0gX3ZhbHVlLnBhZ2VUb2tlbjtcbiAgICB0aGlzLmVudGl0eVR5cGVWaWV3ID0gX3ZhbHVlLmVudGl0eVR5cGVWaWV3O1xuICAgIHRoaXMuZmlsdGVyQnlDYXRlZ29yeSA9IF92YWx1ZS5maWx0ZXJCeUNhdGVnb3J5O1xuICAgIHRoaXMuc29ydEJ5RmllbGQgPSBfdmFsdWUuc29ydEJ5RmllbGRcbiAgICAgID8gbmV3IEVudGl0eVR5cGVTb3J0aW5nKF92YWx1ZS5zb3J0QnlGaWVsZClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIExpc3RFbnRpdHlUeXBlc1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBwYXJlbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG4gIHNldCBwYXJlbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhcmVudCA9IHZhbHVlO1xuICB9XG4gIGdldCBsYW5ndWFnZUNvZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDb2RlO1xuICB9XG4gIHNldCBsYW5ndWFnZUNvZGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2xhbmd1YWdlQ29kZSA9IHZhbHVlO1xuICB9XG4gIGdldCBwYWdlVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVRva2VuO1xuICB9XG4gIHNldCBwYWdlVG9rZW4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhZ2VUb2tlbiA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlVmlldygpOiBFbnRpdHlUeXBlVmlldyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVWaWV3O1xuICB9XG4gIHNldCBlbnRpdHlUeXBlVmlldyh2YWx1ZTogRW50aXR5VHlwZVZpZXcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdHlUeXBlVmlldyA9IHZhbHVlO1xuICB9XG4gIGdldCBmaWx0ZXJCeUNhdGVnb3J5KCk6IEVudGl0eVR5cGVDYXRlZ29yeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckJ5Q2F0ZWdvcnk7XG4gIH1cbiAgc2V0IGZpbHRlckJ5Q2F0ZWdvcnkodmFsdWU6IEVudGl0eVR5cGVDYXRlZ29yeSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2ZpbHRlckJ5Q2F0ZWdvcnkgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc29ydEJ5RmllbGQoKTogRW50aXR5VHlwZVNvcnRpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QnlGaWVsZDtcbiAgfVxuICBzZXQgc29ydEJ5RmllbGQodmFsdWU6IEVudGl0eVR5cGVTb3J0aW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc29ydEJ5RmllbGQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBMaXN0RW50aXR5VHlwZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RFbnRpdHlUeXBlc1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIHBhZ2VUb2tlbjogdGhpcy5wYWdlVG9rZW4sXG4gICAgICBlbnRpdHlUeXBlVmlldzogdGhpcy5lbnRpdHlUeXBlVmlldyxcbiAgICAgIGZpbHRlckJ5Q2F0ZWdvcnk6IHRoaXMuZmlsdGVyQnlDYXRlZ29yeSxcbiAgICAgIHNvcnRCeUZpZWxkOiB0aGlzLnNvcnRCeUZpZWxkID8gdGhpcy5zb3J0QnlGaWVsZC50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogTGlzdEVudGl0eVR5cGVzUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgcGFnZVRva2VuOiB0aGlzLnBhZ2VUb2tlbixcbiAgICAgIGVudGl0eVR5cGVWaWV3OlxuICAgICAgICBFbnRpdHlUeXBlVmlld1tcbiAgICAgICAgICB0aGlzLmVudGl0eVR5cGVWaWV3ID09PSBudWxsIHx8IHRoaXMuZW50aXR5VHlwZVZpZXcgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMuZW50aXR5VHlwZVZpZXdcbiAgICAgICAgXSxcbiAgICAgIGZpbHRlckJ5Q2F0ZWdvcnk6XG4gICAgICAgIEVudGl0eVR5cGVDYXRlZ29yeVtcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q2F0ZWdvcnkgPT09IG51bGwgfHwgdGhpcy5maWx0ZXJCeUNhdGVnb3J5ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLmZpbHRlckJ5Q2F0ZWdvcnlcbiAgICAgICAgXSxcbiAgICAgIHNvcnRCeUZpZWxkOiB0aGlzLnNvcnRCeUZpZWxkXG4gICAgICAgID8gdGhpcy5zb3J0QnlGaWVsZC50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIExpc3RFbnRpdHlUeXBlc1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIExpc3RFbnRpdHlUeXBlc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHBhcmVudD86IHN0cmluZztcbiAgICBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gICAgcGFnZVRva2VuPzogc3RyaW5nO1xuICAgIGVudGl0eVR5cGVWaWV3PzogRW50aXR5VHlwZVZpZXc7XG4gICAgZmlsdGVyQnlDYXRlZ29yeT86IEVudGl0eVR5cGVDYXRlZ29yeTtcbiAgICBzb3J0QnlGaWVsZD86IEVudGl0eVR5cGVTb3J0aW5nLkFzT2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIExpc3RFbnRpdHlUeXBlc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHBhcmVudD86IHN0cmluZztcbiAgICBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gICAgcGFnZVRva2VuPzogc3RyaW5nO1xuICAgIGVudGl0eVR5cGVWaWV3Pzogc3RyaW5nO1xuICAgIGZpbHRlckJ5Q2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgc29ydEJ5RmllbGQ/OiBFbnRpdHlUeXBlU29ydGluZy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1Lkxpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0RW50aXR5VHlwZXNSZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0RW50aXR5VHlwZXNSZXNwb25zZSgpO1xuICAgIExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZXMgfHwgW107XG4gICAgX2luc3RhbmNlLm5leHRQYWdlVG9rZW4gPSBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbiB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRW50aXR5VHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXR5VHlwZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMaXN0RW50aXR5VHlwZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0eVR5cGVzICYmIF9pbnN0YW5jZS5lbnRpdHlUeXBlcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlcyBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UubmV4dFBhZ2VUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlW107XG4gIHByaXZhdGUgX25leHRQYWdlVG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBMaXN0RW50aXR5VHlwZXNSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxMaXN0RW50aXR5VHlwZXNSZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5lbnRpdHlUeXBlcyA9IChfdmFsdWUuZW50aXR5VHlwZXMgfHwgW10pLm1hcChtID0+IG5ldyBFbnRpdHlUeXBlKG0pKTtcbiAgICB0aGlzLm5leHRQYWdlVG9rZW4gPSBfdmFsdWUubmV4dFBhZ2VUb2tlbjtcbiAgICBMaXN0RW50aXR5VHlwZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVzKCk6IEVudGl0eVR5cGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVzO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlcyh2YWx1ZTogRW50aXR5VHlwZVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbmV4dFBhZ2VUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uZXh0UGFnZVRva2VuO1xuICB9XG4gIHNldCBuZXh0UGFnZVRva2VuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9uZXh0UGFnZVRva2VuID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgTGlzdEVudGl0eVR5cGVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogTGlzdEVudGl0eVR5cGVzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlUeXBlczogKHRoaXMuZW50aXR5VHlwZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBuZXh0UGFnZVRva2VuOiB0aGlzLm5leHRQYWdlVG9rZW5cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBMaXN0RW50aXR5VHlwZXNSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGVzOiAodGhpcy5lbnRpdHlUeXBlcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSksXG4gICAgICBuZXh0UGFnZVRva2VuOiB0aGlzLm5leHRQYWdlVG9rZW5cbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIExpc3RFbnRpdHlUeXBlc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXR5VHlwZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlLkFzT2JqZWN0W107XG4gICAgbmV4dFBhZ2VUb2tlbj86IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXR5VHlwZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICAgIG5leHRQYWdlVG9rZW4/OiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkdldEVudGl0eVR5cGVSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBHZXRFbnRpdHlUeXBlUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuR2V0RW50aXR5VHlwZVJlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBHZXRFbnRpdHlUeXBlUmVxdWVzdCgpO1xuICAgIEdldEVudGl0eVR5cGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogR2V0RW50aXR5VHlwZVJlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UubmFtZSA9IF9pbnN0YW5jZS5uYW1lIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5wYWdlVG9rZW4gPSBfaW5zdGFuY2UucGFnZVRva2VuIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogR2V0RW50aXR5VHlwZVJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLm5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIF9pbnN0YW5jZS5wYWdlVG9rZW4gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEdldEVudGl0eVR5cGVSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogR2V0RW50aXR5VHlwZVJlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UubmFtZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhZ2VUb2tlbikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg1LCBfaW5zdGFuY2UucGFnZVRva2VuKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldykge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oNiwgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nO1xuICBwcml2YXRlIF9sYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhZ2VUb2tlbj86IHN0cmluZztcbiAgcHJpdmF0ZSBfZW50aXR5VHlwZVZpZXc/OiBFbnRpdHlUeXBlVmlldztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEdldEVudGl0eVR5cGVSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEdldEVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm5hbWUgPSBfdmFsdWUubmFtZTtcbiAgICB0aGlzLmxhbmd1YWdlQ29kZSA9IF92YWx1ZS5sYW5ndWFnZUNvZGU7XG4gICAgdGhpcy5wYWdlVG9rZW4gPSBfdmFsdWUucGFnZVRva2VuO1xuICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPSBfdmFsdWUuZW50aXR5VHlwZVZpZXc7XG4gICAgR2V0RW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBuYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlQ29kZTtcbiAgfVxuICBzZXQgbGFuZ3VhZ2VDb2RlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sYW5ndWFnZUNvZGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGFnZVRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VUb2tlbjtcbiAgfVxuICBzZXQgcGFnZVRva2VuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wYWdlVG9rZW4gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZVZpZXcoKTogRW50aXR5VHlwZVZpZXcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlVmlldztcbiAgfVxuICBzZXQgZW50aXR5VHlwZVZpZXcodmFsdWU6IEVudGl0eVR5cGVWaWV3IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZVZpZXcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBHZXRFbnRpdHlUeXBlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBHZXRFbnRpdHlUeXBlUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBwYWdlVG9rZW46IHRoaXMucGFnZVRva2VuLFxuICAgICAgZW50aXR5VHlwZVZpZXc6IHRoaXMuZW50aXR5VHlwZVZpZXdcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBHZXRFbnRpdHlUeXBlUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBwYWdlVG9rZW46IHRoaXMucGFnZVRva2VuLFxuICAgICAgZW50aXR5VHlwZVZpZXc6XG4gICAgICAgIEVudGl0eVR5cGVWaWV3W1xuICAgICAgICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPT09IG51bGwgfHwgdGhpcy5lbnRpdHlUeXBlVmlldyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5lbnRpdHlUeXBlVmlld1xuICAgICAgICBdXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBHZXRFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgR2V0RW50aXR5VHlwZVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICAgIHBhZ2VUb2tlbj86IHN0cmluZztcbiAgICBlbnRpdHlUeXBlVmlldz86IEVudGl0eVR5cGVWaWV3O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEdldEVudGl0eVR5cGVSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgICBwYWdlVG9rZW4/OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZVZpZXc/OiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkNyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdCgpO1xuICAgIENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UucGFyZW50ID0gX2luc3RhbmNlLnBhcmVudCB8fCAnJztcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZSA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX2luc3RhbmNlLmxhbmd1YWdlQ29kZSB8fCAnJztcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcgPSBfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXJlbnQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlID0gbmV3IEVudGl0eVR5cGUoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGUsXG4gICAgICAgICAgICBFbnRpdHlUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnBhcmVudCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UucGFyZW50KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMixcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGUgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhbmd1YWdlQ29kZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygzLCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldykge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oNiwgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJlbnQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBwcml2YXRlIF9sYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGVWaWV3PzogRW50aXR5VHlwZVZpZXc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5wYXJlbnQgPSBfdmFsdWUucGFyZW50O1xuICAgIHRoaXMuZW50aXR5VHlwZSA9IF92YWx1ZS5lbnRpdHlUeXBlXG4gICAgICA/IG5ldyBFbnRpdHlUeXBlKF92YWx1ZS5lbnRpdHlUeXBlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBfdmFsdWUubGFuZ3VhZ2VDb2RlO1xuICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPSBfdmFsdWUuZW50aXR5VHlwZVZpZXc7XG4gICAgQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBwYXJlbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG4gIHNldCBwYXJlbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhcmVudCA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlKHZhbHVlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZSA9IHZhbHVlO1xuICB9XG4gIGdldCBsYW5ndWFnZUNvZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDb2RlO1xuICB9XG4gIHNldCBsYW5ndWFnZUNvZGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2xhbmd1YWdlQ29kZSA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlVmlldygpOiBFbnRpdHlUeXBlVmlldyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVWaWV3O1xuICB9XG4gIHNldCBlbnRpdHlUeXBlVmlldyh2YWx1ZTogRW50aXR5VHlwZVZpZXcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdHlUeXBlVmlldyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZSA/IHRoaXMuZW50aXR5VHlwZS50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIGVudGl0eVR5cGVWaWV3OiB0aGlzLmVudGl0eVR5cGVWaWV3XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQ3JlYXRlRW50aXR5VHlwZVJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgZW50aXR5VHlwZTogdGhpcy5lbnRpdHlUeXBlXG4gICAgICAgID8gdGhpcy5lbnRpdHlUeXBlLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBlbnRpdHlUeXBlVmlldzpcbiAgICAgICAgRW50aXR5VHlwZVZpZXdbXG4gICAgICAgICAgdGhpcy5lbnRpdHlUeXBlVmlldyA9PT0gbnVsbCB8fCB0aGlzLmVudGl0eVR5cGVWaWV3ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLmVudGl0eVR5cGVWaWV3XG4gICAgICAgIF1cbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBDcmVhdGVFbnRpdHlUeXBlUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgcGFyZW50Pzogc3RyaW5nO1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLkFzT2JqZWN0O1xuICAgIGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgICBlbnRpdHlUeXBlVmlldz86IEVudGl0eVR5cGVWaWV3O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIENyZWF0ZUVudGl0eVR5cGVSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGUuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgICBlbnRpdHlUeXBlVmlldz86IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuVXBkYXRlRW50aXR5VHlwZVJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5VcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0KCk7XG4gICAgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlID0gX2luc3RhbmNlLmVudGl0eVR5cGUgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrID0gX2luc3RhbmNlLnVwZGF0ZU1hc2sgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGUgPSBuZXcgRW50aXR5VHlwZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZSxcbiAgICAgICAgICAgIEVudGl0eVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS51cGRhdGVNYXNrID0gbmV3IGdvb2dsZVByb3RvYnVmMDA4LkZpZWxkTWFzaygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UudXBkYXRlTWFzayxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA4LkZpZWxkTWFzay5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVWaWV3ID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGUgYXMgYW55LFxuICAgICAgICBFbnRpdHlUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhbmd1YWdlQ29kZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS51cGRhdGVNYXNrKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLnVwZGF0ZU1hc2sgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwOC5GaWVsZE1hc2suc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZVZpZXcpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDYsIF9pbnN0YW5jZS5lbnRpdHlUeXBlVmlldyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfdXBkYXRlTWFzaz86IGdvb2dsZVByb3RvYnVmMDA4LkZpZWxkTWFzaztcbiAgcHJpdmF0ZSBfZW50aXR5VHlwZVZpZXc/OiBFbnRpdHlUeXBlVmlldztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBfdmFsdWUuZW50aXR5VHlwZVxuICAgICAgPyBuZXcgRW50aXR5VHlwZShfdmFsdWUuZW50aXR5VHlwZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMubGFuZ3VhZ2VDb2RlID0gX3ZhbHVlLmxhbmd1YWdlQ29kZTtcbiAgICB0aGlzLnVwZGF0ZU1hc2sgPSBfdmFsdWUudXBkYXRlTWFza1xuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrKF92YWx1ZS51cGRhdGVNYXNrKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnRpdHlUeXBlVmlldyA9IF92YWx1ZS5lbnRpdHlUeXBlVmlldztcbiAgICBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGU7XG4gIH1cbiAgc2V0IGVudGl0eVR5cGUodmFsdWU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdHlUeXBlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxhbmd1YWdlQ29kZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUNvZGU7XG4gIH1cbiAgc2V0IGxhbmd1YWdlQ29kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFuZ3VhZ2VDb2RlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHVwZGF0ZU1hc2soKTogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlTWFzaztcbiAgfVxuICBzZXQgdXBkYXRlTWFzayh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdXBkYXRlTWFzayA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlVmlldygpOiBFbnRpdHlUeXBlVmlldyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVWaWV3O1xuICB9XG4gIHNldCBlbnRpdHlUeXBlVmlldyh2YWx1ZTogRW50aXR5VHlwZVZpZXcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdHlUeXBlVmlldyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZTogdGhpcy5lbnRpdHlUeXBlID8gdGhpcy5lbnRpdHlUeXBlLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgdXBkYXRlTWFzazogdGhpcy51cGRhdGVNYXNrID8gdGhpcy51cGRhdGVNYXNrLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBlbnRpdHlUeXBlVmlldzogdGhpcy5lbnRpdHlUeXBlVmlld1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFVwZGF0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZTogdGhpcy5lbnRpdHlUeXBlXG4gICAgICAgID8gdGhpcy5lbnRpdHlUeXBlLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICB1cGRhdGVNYXNrOiB0aGlzLnVwZGF0ZU1hc2tcbiAgICAgICAgPyB0aGlzLnVwZGF0ZU1hc2sudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgZW50aXR5VHlwZVZpZXc6XG4gICAgICAgIEVudGl0eVR5cGVWaWV3W1xuICAgICAgICAgIHRoaXMuZW50aXR5VHlwZVZpZXcgPT09IG51bGwgfHwgdGhpcy5lbnRpdHlUeXBlVmlldyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5lbnRpdHlUeXBlVmlld1xuICAgICAgICBdXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBVcGRhdGVFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLkFzT2JqZWN0O1xuICAgIGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgICB1cGRhdGVNYXNrPzogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrLkFzT2JqZWN0O1xuICAgIGVudGl0eVR5cGVWaWV3PzogRW50aXR5VHlwZVZpZXc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgVXBkYXRlRW50aXR5VHlwZVJlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gICAgdXBkYXRlTWFzaz86IGdvb2dsZVByb3RvYnVmMDA4LkZpZWxkTWFzay5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgZW50aXR5VHlwZVZpZXc/OiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkRlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdCgpO1xuICAgIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UubmFtZSA9IF9pbnN0YW5jZS5uYW1lIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLm5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UubmFtZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm5hbWUgPSBfdmFsdWUubmFtZTtcbiAgICBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRGVsZXRlRW50aXR5VHlwZVJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIERlbGV0ZUVudGl0eVR5cGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBEZWxldGVFbnRpdHlUeXBlUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5CYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0KCk7XG4gICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5wYXJlbnQgPSBfaW5zdGFuY2UucGFyZW50IHx8ICcnO1xuXG4gICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgfHwgJyc7XG4gICAgX2luc3RhbmNlLnVwZGF0ZU1hc2sgPSBfaW5zdGFuY2UudXBkYXRlTWFzayB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UucGFyZW50ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoVXJpID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoSW5saW5lID0gbmV3IEVudGl0eVR5cGVCYXRjaCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoSW5saW5lLFxuICAgICAgICAgICAgRW50aXR5VHlwZUJhdGNoLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBfaW5zdGFuY2UudXBkYXRlTWFzayA9IG5ldyBnb29nbGVQcm90b2J1ZjAwOC5GaWVsZE1hc2soKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnVwZGF0ZU1hc2ssXG4gICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwOC5GaWVsZE1hc2suZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UucGFyZW50KSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5wYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmVudGl0eVR5cGVCYXRjaFVyaSB8fCBfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoVXJpID09PSAnJykge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoVXJpKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlQmF0Y2hJbmxpbmUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAzLFxuICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZUJhdGNoSW5saW5lIGFzIGFueSxcbiAgICAgICAgRW50aXR5VHlwZUJhdGNoLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhbmd1YWdlQ29kZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0LCBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS51cGRhdGVNYXNrKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgNSxcbiAgICAgICAgX2luc3RhbmNlLnVwZGF0ZU1hc2sgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwOC5GaWVsZE1hc2suc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFyZW50Pzogc3RyaW5nO1xuICBwcml2YXRlIF9lbnRpdHlUeXBlQmF0Y2hVcmk/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGVCYXRjaElubGluZT86IEVudGl0eVR5cGVCYXRjaDtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICBwcml2YXRlIF91cGRhdGVNYXNrPzogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrO1xuXG4gIHByaXZhdGUgX2VudGl0eVR5cGVCYXRjaDogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuRW50aXR5VHlwZUJhdGNoQ2FzZSA9XG4gICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuRW50aXR5VHlwZUJhdGNoQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8QmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuQXNPYmplY3Q+XG4gICkge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnBhcmVudCA9IF92YWx1ZS5wYXJlbnQ7XG4gICAgdGhpcy5lbnRpdHlUeXBlQmF0Y2hVcmkgPSBfdmFsdWUuZW50aXR5VHlwZUJhdGNoVXJpO1xuICAgIHRoaXMuZW50aXR5VHlwZUJhdGNoSW5saW5lID0gX3ZhbHVlLmVudGl0eVR5cGVCYXRjaElubGluZVxuICAgICAgPyBuZXcgRW50aXR5VHlwZUJhdGNoKF92YWx1ZS5lbnRpdHlUeXBlQmF0Y2hJbmxpbmUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxhbmd1YWdlQ29kZSA9IF92YWx1ZS5sYW5ndWFnZUNvZGU7XG4gICAgdGhpcy51cGRhdGVNYXNrID0gX3ZhbHVlLnVwZGF0ZU1hc2tcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA4LkZpZWxkTWFzayhfdmFsdWUudXBkYXRlTWFzaylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFyZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuICBzZXQgcGFyZW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZW50aXR5VHlwZUJhdGNoVXJpKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVCYXRjaFVyaTtcbiAgfVxuICBzZXQgZW50aXR5VHlwZUJhdGNoVXJpKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZW50aXR5VHlwZUJhdGNoSW5saW5lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZW50aXR5VHlwZUJhdGNoID1cbiAgICAgICAgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3QuRW50aXR5VHlwZUJhdGNoQ2FzZS5lbnRpdHlUeXBlQmF0Y2hVcmk7XG4gICAgfVxuICAgIHRoaXMuX2VudGl0eVR5cGVCYXRjaFVyaSA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlQmF0Y2hJbmxpbmUoKTogRW50aXR5VHlwZUJhdGNoIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5VHlwZUJhdGNoSW5saW5lO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlQmF0Y2hJbmxpbmUodmFsdWU6IEVudGl0eVR5cGVCYXRjaCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9lbnRpdHlUeXBlQmF0Y2hVcmkgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9lbnRpdHlUeXBlQmF0Y2ggPVxuICAgICAgICBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdC5FbnRpdHlUeXBlQmF0Y2hDYXNlLmVudGl0eVR5cGVCYXRjaElubGluZTtcbiAgICB9XG4gICAgdGhpcy5fZW50aXR5VHlwZUJhdGNoSW5saW5lID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxhbmd1YWdlQ29kZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUNvZGU7XG4gIH1cbiAgc2V0IGxhbmd1YWdlQ29kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFuZ3VhZ2VDb2RlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHVwZGF0ZU1hc2soKTogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlTWFzaztcbiAgfVxuICBzZXQgdXBkYXRlTWFzayh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdXBkYXRlTWFzayA9IHZhbHVlO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlQmF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVCYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICBlbnRpdHlUeXBlQmF0Y2hVcmk6IHRoaXMuZW50aXR5VHlwZUJhdGNoVXJpLFxuICAgICAgZW50aXR5VHlwZUJhdGNoSW5saW5lOiB0aGlzLmVudGl0eVR5cGVCYXRjaElubGluZVxuICAgICAgICA/IHRoaXMuZW50aXR5VHlwZUJhdGNoSW5saW5lLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgdXBkYXRlTWFzazogdGhpcy51cGRhdGVNYXNrID8gdGhpcy51cGRhdGVNYXNrLnRvT2JqZWN0KCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICBlbnRpdHlUeXBlQmF0Y2hVcmk6XG4gICAgICAgIHRoaXMuZW50aXR5VHlwZUJhdGNoVXJpID09PSBudWxsIHx8XG4gICAgICAgIHRoaXMuZW50aXR5VHlwZUJhdGNoVXJpID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHRoaXMuZW50aXR5VHlwZUJhdGNoVXJpLFxuICAgICAgZW50aXR5VHlwZUJhdGNoSW5saW5lOiB0aGlzLmVudGl0eVR5cGVCYXRjaElubGluZVxuICAgICAgICA/IHRoaXMuZW50aXR5VHlwZUJhdGNoSW5saW5lLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICB1cGRhdGVNYXNrOiB0aGlzLnVwZGF0ZU1hc2tcbiAgICAgICAgPyB0aGlzLnVwZGF0ZU1hc2sudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHBhcmVudD86IHN0cmluZztcbiAgICBlbnRpdHlUeXBlQmF0Y2hVcmk/OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZUJhdGNoSW5saW5lPzogRW50aXR5VHlwZUJhdGNoLkFzT2JqZWN0O1xuICAgIGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgICB1cGRhdGVNYXNrPzogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrLkFzT2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZUJhdGNoVXJpPzogc3RyaW5nIHwgbnVsbDtcbiAgICBlbnRpdHlUeXBlQmF0Y2hJbmxpbmU/OiBFbnRpdHlUeXBlQmF0Y2guQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgICB1cGRhdGVNYXNrPzogZ29vZ2xlUHJvdG9idWYwMDguRmllbGRNYXNrLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxuICBleHBvcnQgZW51bSBFbnRpdHlUeXBlQmF0Y2hDYXNlIHtcbiAgICBub25lID0gMCxcbiAgICBlbnRpdHlUeXBlQmF0Y2hVcmkgPSAxLFxuICAgIGVudGl0eVR5cGVCYXRjaElubGluZSA9IDJcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSgpO1xuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlcyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IEVudGl0eVR5cGUoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMSxcbiAgICAgICAgICAgIEVudGl0eVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLmVudGl0eVR5cGVzID0gX2luc3RhbmNlLmVudGl0eVR5cGVzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2UucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZXMgJiYgX2luc3RhbmNlLmVudGl0eVR5cGVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVzIGFzIGFueSxcbiAgICAgICAgRW50aXR5VHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnRpdHlUeXBlcz86IEVudGl0eVR5cGVbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2UuQXNPYmplY3Q+XG4gICkge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0eVR5cGVzID0gKF92YWx1ZS5lbnRpdHlUeXBlcyB8fCBbXSkubWFwKG0gPT4gbmV3IEVudGl0eVR5cGUobSkpO1xuICAgIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVzKCk6IEVudGl0eVR5cGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVzO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlcyh2YWx1ZTogRW50aXR5VHlwZVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZXM6ICh0aGlzLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZXM6ICh0aGlzLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQmF0Y2hVcGRhdGVFbnRpdHlUeXBlc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaFVwZGF0ZUVudGl0eVR5cGVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0eVR5cGVzPzogRW50aXR5VHlwZS5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoVXBkYXRlRW50aXR5VHlwZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5CYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QoKTtcbiAgICBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnBhcmVudCA9IF9pbnN0YW5jZS5wYXJlbnQgfHwgJyc7XG4gICAgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lcyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UucGFyZW50ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAoX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lcyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBfcmVhZGVyLnJlYWRTdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnBhcmVudCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UucGFyZW50KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZXMgJiYgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZygyLCBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJlbnQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VudGl0eVR5cGVOYW1lcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8QmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QuQXNPYmplY3Q+XG4gICkge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnBhcmVudCA9IF92YWx1ZS5wYXJlbnQ7XG4gICAgdGhpcy5lbnRpdHlUeXBlTmFtZXMgPSAoX3ZhbHVlLmVudGl0eVR5cGVOYW1lcyB8fCBbXSkuc2xpY2UoKTtcbiAgICBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHBhcmVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gIH1cbiAgc2V0IHBhcmVudCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGFyZW50ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVOYW1lcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVOYW1lcztcbiAgfVxuICBzZXQgZW50aXR5VHlwZU5hbWVzKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VudGl0eVR5cGVOYW1lcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgIGVudGl0eVR5cGVOYW1lczogKHRoaXMuZW50aXR5VHlwZU5hbWVzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hEZWxldGVFbnRpdHlUeXBlc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgZW50aXR5VHlwZU5hbWVzOiAodGhpcy5lbnRpdHlUeXBlTmFtZXMgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaERlbGV0ZUVudGl0eVR5cGVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgcGFyZW50Pzogc3RyaW5nO1xuICAgIGVudGl0eVR5cGVOYW1lcz86IHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRGVsZXRlRW50aXR5VHlwZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZU5hbWVzPzogc3RyaW5nW107XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkVudGl0eVR5cGVCYXRjaFxuICovXG5leHBvcnQgY2xhc3MgRW50aXR5VHlwZUJhdGNoIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5FbnRpdHlUeXBlQmF0Y2gnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBFbnRpdHlUeXBlQmF0Y2goKTtcbiAgICBFbnRpdHlUeXBlQmF0Y2guZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBFbnRpdHlUeXBlQmF0Y2gpIHtcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZXMgPSBfaW5zdGFuY2UuZW50aXR5VHlwZXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBFbnRpdHlUeXBlQmF0Y2gsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBFbnRpdHlUeXBlKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjEsXG4gICAgICAgICAgICBFbnRpdHlUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS5lbnRpdHlUeXBlcyA9IF9pbnN0YW5jZS5lbnRpdHlUeXBlcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjFcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRW50aXR5VHlwZUJhdGNoLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogRW50aXR5VHlwZUJhdGNoLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0eVR5cGVzICYmIF9pbnN0YW5jZS5lbnRpdHlUeXBlcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdHlUeXBlcyBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlW107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFbnRpdHlUeXBlQmF0Y2ggdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5VHlwZUJhdGNoLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0eVR5cGVzID0gKF92YWx1ZS5lbnRpdHlUeXBlcyB8fCBbXSkubWFwKG0gPT4gbmV3IEVudGl0eVR5cGUobSkpO1xuICAgIEVudGl0eVR5cGVCYXRjaC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0eVR5cGVzKCk6IEVudGl0eVR5cGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eVR5cGVzO1xuICB9XG4gIHNldCBlbnRpdHlUeXBlcyh2YWx1ZTogRW50aXR5VHlwZVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW50aXR5VHlwZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBFbnRpdHlUeXBlQmF0Y2guc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRW50aXR5VHlwZUJhdGNoLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZXM6ICh0aGlzLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRW50aXR5VHlwZUJhdGNoLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5VHlwZXM6ICh0aGlzLmVudGl0eVR5cGVzIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgRW50aXR5VHlwZUJhdGNoIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlUeXBlQmF0Y2hcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0eVR5cGVzPzogRW50aXR5VHlwZS5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVR5cGVCYXRjaFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZXM/OiBFbnRpdHlUeXBlLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlUeXBlU29ydGluZ1xuICovXG5leHBvcnQgY2xhc3MgRW50aXR5VHlwZVNvcnRpbmcgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkVudGl0eVR5cGVTb3J0aW5nJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5VHlwZVNvcnRpbmcoKTtcbiAgICBFbnRpdHlUeXBlU29ydGluZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEVudGl0eVR5cGVTb3J0aW5nKSB7XG4gICAgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCA9IF9pbnN0YW5jZS5zb3J0aW5nRmllbGQgfHwgMDtcbiAgICBfaW5zdGFuY2Uuc29ydGluZ01vZGUgPSBfaW5zdGFuY2Uuc29ydGluZ01vZGUgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGVTb3J0aW5nLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zb3J0aW5nRmllbGQgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2Uuc29ydGluZ01vZGUgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBFbnRpdHlUeXBlU29ydGluZy5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVR5cGVTb3J0aW5nLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNvcnRpbmdGaWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oMSwgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc29ydGluZ01vZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDIsIF9pbnN0YW5jZS5zb3J0aW5nTW9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc29ydGluZ0ZpZWxkPzogRW50aXR5VHlwZVNvcnRpbmcuRW50aXR5VHlwZVNvcnRpbmdGaWVsZDtcbiAgcHJpdmF0ZSBfc29ydGluZ01vZGU/OiBvbmRld29ObHUwMDkuU29ydGluZ01vZGU7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFbnRpdHlUeXBlU29ydGluZyB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxFbnRpdHlUeXBlU29ydGluZy5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zb3J0aW5nRmllbGQgPSBfdmFsdWUuc29ydGluZ0ZpZWxkO1xuICAgIHRoaXMuc29ydGluZ01vZGUgPSBfdmFsdWUuc29ydGluZ01vZGU7XG4gICAgRW50aXR5VHlwZVNvcnRpbmcucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzb3J0aW5nRmllbGQoKTogRW50aXR5VHlwZVNvcnRpbmcuRW50aXR5VHlwZVNvcnRpbmdGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRpbmdGaWVsZDtcbiAgfVxuICBzZXQgc29ydGluZ0ZpZWxkKFxuICAgIHZhbHVlOiBFbnRpdHlUeXBlU29ydGluZy5FbnRpdHlUeXBlU29ydGluZ0ZpZWxkIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHRoaXMuX3NvcnRpbmdGaWVsZCA9IHZhbHVlO1xuICB9XG4gIGdldCBzb3J0aW5nTW9kZSgpOiBvbmRld29ObHUwMDkuU29ydGluZ01vZGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nTW9kZTtcbiAgfVxuICBzZXQgc29ydGluZ01vZGUodmFsdWU6IG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NvcnRpbmdNb2RlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRW50aXR5VHlwZVNvcnRpbmcuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRW50aXR5VHlwZVNvcnRpbmcuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzb3J0aW5nRmllbGQ6IHRoaXMuc29ydGluZ0ZpZWxkLFxuICAgICAgc29ydGluZ01vZGU6IHRoaXMuc29ydGluZ01vZGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBFbnRpdHlUeXBlU29ydGluZy5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRpbmdGaWVsZDpcbiAgICAgICAgRW50aXR5VHlwZVNvcnRpbmcuRW50aXR5VHlwZVNvcnRpbmdGaWVsZFtcbiAgICAgICAgICB0aGlzLnNvcnRpbmdGaWVsZCA9PT0gbnVsbCB8fCB0aGlzLnNvcnRpbmdGaWVsZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5zb3J0aW5nRmllbGRcbiAgICAgICAgXSxcbiAgICAgIHNvcnRpbmdNb2RlOlxuICAgICAgICBvbmRld29ObHUwMDkuU29ydGluZ01vZGVbXG4gICAgICAgICAgdGhpcy5zb3J0aW5nTW9kZSA9PT0gbnVsbCB8fCB0aGlzLnNvcnRpbmdNb2RlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdNb2RlXG4gICAgICAgIF1cbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEVudGl0eVR5cGVTb3J0aW5nIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlUeXBlU29ydGluZ1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgc29ydGluZ0ZpZWxkPzogRW50aXR5VHlwZVNvcnRpbmcuRW50aXR5VHlwZVNvcnRpbmdGaWVsZDtcbiAgICBzb3J0aW5nTW9kZT86IG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlUeXBlU29ydGluZ1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgc29ydGluZ0ZpZWxkPzogc3RyaW5nO1xuICAgIHNvcnRpbmdNb2RlPzogc3RyaW5nO1xuICB9XG4gIGV4cG9ydCBlbnVtIEVudGl0eVR5cGVTb3J0aW5nRmllbGQge1xuICAgIE5PX0VOVElUWV9UWVBFX1NPUlRJTkcgPSAwLFxuICAgIFNPUlRfRU5USVRZX1RZUEVfQllfTkFNRSA9IDEsXG4gICAgU09SVF9FTlRJVFlfVFlQRV9CWV9DUkVBVElPTl9EQVRFID0gMixcbiAgICBTT1JUX0VOVElUWV9UWVBFX0JZX0xBU1RfVVBEQVRFRCA9IDMsXG4gICAgU09SVF9FTlRJVFlfVFlQRV9CWV9FTlRJVFlfVkFMVUVfQ09VTlQgPSA0LFxuICAgIFNPUlRfRU5USVRZX1RZUEVfQllfU1lOT05ZTV9DT1VOVCA9IDVcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hFbnRpdGllc1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaEVudGl0aWVzUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkJhdGNoRW50aXRpZXNSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoRW50aXRpZXNSZXNwb25zZSgpO1xuICAgIEJhdGNoRW50aXRpZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEJhdGNoRW50aXRpZXNSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS5lbnRpdHlTdGF0dXNlcyA9IF9pbnN0YW5jZS5lbnRpdHlTdGF0dXNlcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UuaGFzRXJyb3JzID0gX2luc3RhbmNlLmhhc0Vycm9ycyB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoRW50aXRpZXNSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IEJhdGNoRW50aXRpZXNSZXNwb25zZS5FbnRpdHlTdGF0dXMoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMSxcbiAgICAgICAgICAgIEJhdGNoRW50aXRpZXNSZXNwb25zZS5FbnRpdHlTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLmVudGl0eVN0YXR1c2VzID0gX2luc3RhbmNlLmVudGl0eVN0YXR1c2VzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuaGFzRXJyb3JzID0gX3JlYWRlci5yZWFkQm9vbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0eVN0YXR1c2VzICYmIF9pbnN0YW5jZS5lbnRpdHlTdGF0dXNlcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdHlTdGF0dXNlcyBhcyBhbnksXG4gICAgICAgIEJhdGNoRW50aXRpZXNSZXNwb25zZS5FbnRpdHlTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuaGFzRXJyb3JzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlQm9vbCgyLCBfaW5zdGFuY2UuaGFzRXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnRpdHlTdGF0dXNlcz86IEJhdGNoRW50aXRpZXNSZXNwb25zZS5FbnRpdHlTdGF0dXNbXTtcbiAgcHJpdmF0ZSBfaGFzRXJyb3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoRW50aXRpZXNSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxCYXRjaEVudGl0aWVzUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZW50aXR5U3RhdHVzZXMgPSAoX3ZhbHVlLmVudGl0eVN0YXR1c2VzIHx8IFtdKS5tYXAoXG4gICAgICBtID0+IG5ldyBCYXRjaEVudGl0aWVzUmVzcG9uc2UuRW50aXR5U3RhdHVzKG0pXG4gICAgKTtcbiAgICB0aGlzLmhhc0Vycm9ycyA9IF92YWx1ZS5oYXNFcnJvcnM7XG4gICAgQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZW50aXR5U3RhdHVzZXMoKTogQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLkVudGl0eVN0YXR1c1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5U3RhdHVzZXM7XG4gIH1cbiAgc2V0IGVudGl0eVN0YXR1c2VzKHZhbHVlOiBCYXRjaEVudGl0aWVzUmVzcG9uc2UuRW50aXR5U3RhdHVzW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdHlTdGF0dXNlcyA9IHZhbHVlO1xuICB9XG4gIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0Vycm9ycztcbiAgfVxuICBzZXQgaGFzRXJyb3JzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGFzRXJyb3JzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEJhdGNoRW50aXRpZXNSZXNwb25zZS5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVN0YXR1c2VzOiAodGhpcy5lbnRpdHlTdGF0dXNlcyB8fCBbXSkubWFwKG0gPT4gbS50b09iamVjdCgpKSxcbiAgICAgIGhhc0Vycm9yczogdGhpcy5oYXNFcnJvcnNcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBCYXRjaEVudGl0aWVzUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlTdGF0dXNlczogKHRoaXMuZW50aXR5U3RhdHVzZXMgfHwgW10pLm1hcChtID0+XG4gICAgICAgIG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICksXG4gICAgICBoYXNFcnJvcnM6IHRoaXMuaGFzRXJyb3JzXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaEVudGl0aWVzUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRW50aXRpZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZW50aXR5U3RhdHVzZXM/OiBCYXRjaEVudGl0aWVzUmVzcG9uc2UuRW50aXR5U3RhdHVzLkFzT2JqZWN0W107XG4gICAgaGFzRXJyb3JzPzogYm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaEVudGl0aWVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGVudGl0eVN0YXR1c2VzPzogQmF0Y2hFbnRpdGllc1Jlc3BvbnNlLkVudGl0eVN0YXR1cy5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgICBoYXNFcnJvcnM/OiBib29sZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuRW50aXR5U3RhdHVzXG4gICAqL1xuICBleHBvcnQgY2xhc3MgRW50aXR5U3RhdHVzIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICAgIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkVudGl0eVN0YXR1cyc7XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEVudGl0eVN0YXR1cygpO1xuICAgICAgRW50aXR5U3RhdHVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBFbnRpdHlTdGF0dXMpIHt9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgX2luc3RhbmNlOiBFbnRpdHlTdGF0dXMsXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5ID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5LFxuICAgICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBfaW5zdGFuY2UuZXJyb3JNZXNzYWdlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBFbnRpdHlTdGF0dXMucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICAgIF9pbnN0YW5jZTogRW50aXR5U3RhdHVzLFxuICAgICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICAgKSB7XG4gICAgICBpZiAoX2luc3RhbmNlLmVudGl0eSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgICAxLFxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHkgYXMgYW55LFxuICAgICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmVycm9yTWVzc2FnZSB8fCBfaW5zdGFuY2UuZXJyb3JNZXNzYWdlID09PSAnJykge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VudGl0eT86IEVudGl0eVR5cGUuRW50aXR5O1xuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZT86IHN0cmluZztcblxuICAgIHByaXZhdGUgX2VudGl0eU9yU3RhdHVzOiBFbnRpdHlTdGF0dXMuRW50aXR5T3JTdGF0dXNDYXNlID1cbiAgICAgIEVudGl0eVN0YXR1cy5FbnRpdHlPclN0YXR1c0Nhc2Uubm9uZTtcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEVudGl0eVN0YXR1cyB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RW50aXR5U3RhdHVzLkFzT2JqZWN0Pikge1xuICAgICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy5lbnRpdHkgPSBfdmFsdWUuZW50aXR5XG4gICAgICAgID8gbmV3IEVudGl0eVR5cGUuRW50aXR5KF92YWx1ZS5lbnRpdHkpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfdmFsdWUuZXJyb3JNZXNzYWdlO1xuICAgICAgRW50aXR5U3RhdHVzLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IGVudGl0eSgpOiBFbnRpdHlUeXBlLkVudGl0eSB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fZW50aXR5O1xuICAgIH1cbiAgICBzZXQgZW50aXR5KHZhbHVlOiBFbnRpdHlUeXBlLkVudGl0eSB8IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9lbnRpdHlPclN0YXR1cyA9IEVudGl0eVN0YXR1cy5FbnRpdHlPclN0YXR1c0Nhc2UuZW50aXR5O1xuICAgICAgfVxuICAgICAgdGhpcy5fZW50aXR5ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIHNldCBlcnJvck1lc3NhZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZW50aXR5ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9lbnRpdHlPclN0YXR1cyA9IEVudGl0eVN0YXR1cy5FbnRpdHlPclN0YXR1c0Nhc2UuZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBlbnRpdHlPclN0YXR1cygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbnRpdHlPclN0YXR1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgICAgRW50aXR5U3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IEVudGl0eVN0YXR1cy5Bc09iamVjdCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5ID8gdGhpcy5lbnRpdHkudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiB0aGlzLmVycm9yTWVzc2FnZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBFbnRpdHlTdGF0dXMuQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSA/IHRoaXMuZW50aXR5LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgICAgZXJyb3JNZXNzYWdlOlxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID09PSBudWxsIHx8IHRoaXMuZXJyb3JNZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB0aGlzLmVycm9yTWVzc2FnZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IG1vZHVsZSBFbnRpdHlTdGF0dXMge1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlTdGF0dXNcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIGVudGl0eT86IEVudGl0eVR5cGUuRW50aXR5LkFzT2JqZWN0O1xuICAgICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVudGl0eVN0YXR1c1xuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgICAgZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHkuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9XG4gICAgZXhwb3J0IGVudW0gRW50aXR5T3JTdGF0dXNDYXNlIHtcbiAgICAgIG5vbmUgPSAwLFxuICAgICAgZW50aXR5ID0gMSxcbiAgICAgIGVycm9yTWVzc2FnZSA9IDJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCgpO1xuICAgIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMgPSBfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LkNyZWF0ZUVudGl0eVJlcXVlc3QoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMSxcbiAgICAgICAgICAgIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LkNyZWF0ZUVudGl0eVJlcXVlc3RcbiAgICAgICAgICAgICAgLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS5jcmVhdGVFbnRpdHlSZXF1ZXN0cyA9XG4gICAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMgfHwgW10pLnB1c2gobWVzc2FnZUluaXRpYWxpemVyMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoXG4gICAgICBfaW5zdGFuY2UuY3JlYXRlRW50aXR5UmVxdWVzdHMgJiZcbiAgICAgIF9pbnN0YW5jZS5jcmVhdGVFbnRpdHlSZXF1ZXN0cy5sZW5ndGhcbiAgICApIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5jcmVhdGVFbnRpdHlSZXF1ZXN0cyBhcyBhbnksXG4gICAgICAgIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LkNyZWF0ZUVudGl0eVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRW50aXR5UmVxdWVzdHM/OiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5DcmVhdGVFbnRpdHlSZXF1ZXN0W107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5jcmVhdGVFbnRpdHlSZXF1ZXN0cyA9IChfdmFsdWUuY3JlYXRlRW50aXR5UmVxdWVzdHMgfHwgW10pLm1hcChcbiAgICAgIG0gPT4gbmV3IEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LkNyZWF0ZUVudGl0eVJlcXVlc3QobSlcbiAgICApO1xuICAgIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgY3JlYXRlRW50aXR5UmVxdWVzdHMoKTpcbiAgICB8IEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0LkNyZWF0ZUVudGl0eVJlcXVlc3RbXVxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50aXR5UmVxdWVzdHM7XG4gIH1cbiAgc2V0IGNyZWF0ZUVudGl0eVJlcXVlc3RzKFxuICAgIHZhbHVlOiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5DcmVhdGVFbnRpdHlSZXF1ZXN0W10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5fY3JlYXRlRW50aXR5UmVxdWVzdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZUVudGl0eVJlcXVlc3RzOiAodGhpcy5jcmVhdGVFbnRpdHlSZXF1ZXN0cyB8fCBbXSkubWFwKG0gPT5cbiAgICAgICAgbS50b09iamVjdCgpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVFbnRpdHlSZXF1ZXN0czogKHRoaXMuY3JlYXRlRW50aXR5UmVxdWVzdHMgfHwgW10pLm1hcChtID0+XG4gICAgICAgIG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgIClcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEJhdGNoQ3JlYXRlRW50aXRpZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgY3JlYXRlRW50aXR5UmVxdWVzdHM/OiBCYXRjaENyZWF0ZUVudGl0aWVzUmVxdWVzdC5DcmVhdGVFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGNyZWF0ZUVudGl0eVJlcXVlc3RzPzpcbiAgICAgIHwgQmF0Y2hDcmVhdGVFbnRpdGllc1JlcXVlc3QuQ3JlYXRlRW50aXR5UmVxdWVzdC5Bc1Byb3RvYnVmSlNPTltdXG4gICAgICB8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5DcmVhdGVFbnRpdHlSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgY2xhc3MgQ3JlYXRlRW50aXR5UmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5DcmVhdGVFbnRpdHlSZXF1ZXN0JztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ3JlYXRlRW50aXR5UmVxdWVzdCgpO1xuICAgICAgQ3JlYXRlRW50aXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQ3JlYXRlRW50aXR5UmVxdWVzdCkge1xuICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lID0gX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLmVudGl0eSA9IF9pbnN0YW5jZS5lbnRpdHkgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBfaW5zdGFuY2U6IENyZWF0ZUVudGl0eVJlcXVlc3QsXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHkgPSBuZXcgRW50aXR5VHlwZS5FbnRpdHkoKTtcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHksXG4gICAgICAgICAgICAgIEVudGl0eVR5cGUuRW50aXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIENyZWF0ZUVudGl0eVJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICAgIF9pbnN0YW5jZTogQ3JlYXRlRW50aXR5UmVxdWVzdCxcbiAgICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICAgICkge1xuICAgICAgaWYgKF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5lbnRpdHlUeXBlTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmVudGl0eSkge1xuICAgICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgICAyLFxuICAgICAgICAgIF9pbnN0YW5jZS5lbnRpdHkgYXMgYW55LFxuICAgICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW50aXR5VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHk7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBDcmVhdGVFbnRpdHlSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxDcmVhdGVFbnRpdHlSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy5lbnRpdHlUeXBlTmFtZSA9IF92YWx1ZS5lbnRpdHlUeXBlTmFtZTtcbiAgICAgIHRoaXMuZW50aXR5ID0gX3ZhbHVlLmVudGl0eVxuICAgICAgICA/IG5ldyBFbnRpdHlUeXBlLkVudGl0eShfdmFsdWUuZW50aXR5KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIENyZWF0ZUVudGl0eVJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZW50aXR5VHlwZU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlTmFtZTtcbiAgICB9XG4gICAgc2V0IGVudGl0eVR5cGVOYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2VudGl0eVR5cGVOYW1lID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBlbnRpdHkoKTogRW50aXR5VHlwZS5FbnRpdHkgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eTtcbiAgICB9XG4gICAgc2V0IGVudGl0eSh2YWx1ZTogRW50aXR5VHlwZS5FbnRpdHkgfCB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2VudGl0eSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBDcmVhdGVFbnRpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IENyZWF0ZUVudGl0eVJlcXVlc3QuQXNPYmplY3Qge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZU5hbWU6IHRoaXMuZW50aXR5VHlwZU5hbWUsXG4gICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHkgPyB0aGlzLmVudGl0eS50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgICAqL1xuICAgIHRvUHJvdG9idWZKU09OKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICAgICk6IENyZWF0ZUVudGl0eVJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZU5hbWU6IHRoaXMuZW50aXR5VHlwZU5hbWUsXG4gICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHkgPyB0aGlzLmVudGl0eS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgQ3JlYXRlRW50aXR5UmVxdWVzdCB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENyZWF0ZUVudGl0eVJlcXVlc3RcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIGVudGl0eVR5cGVOYW1lPzogc3RyaW5nO1xuICAgICAgZW50aXR5PzogRW50aXR5VHlwZS5FbnRpdHkuQXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQ3JlYXRlRW50aXR5UmVxdWVzdFxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgICAgZW50aXR5VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgICBlbnRpdHk/OiBFbnRpdHlUeXBlLkVudGl0eS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5CYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1LkJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QoKTtcbiAgICBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLmVudGl0aWVzID0gX2luc3RhbmNlLmVudGl0aWVzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBFbnRpdHlUeXBlLkVudGl0eSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRW50aXR5VHlwZS5FbnRpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLmVudGl0aWVzID0gX2luc3RhbmNlLmVudGl0aWVzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0aWVzICYmIF9pbnN0YW5jZS5lbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VudGl0aWVzPzogRW50aXR5VHlwZS5FbnRpdHlbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0aWVzID0gKF92YWx1ZS5lbnRpdGllcyB8fCBbXSkubWFwKG0gPT4gbmV3IEVudGl0eVR5cGUuRW50aXR5KG0pKTtcbiAgICBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0aWVzKCk6IEVudGl0eVR5cGUuRW50aXR5W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdGllcztcbiAgfVxuICBzZXQgZW50aXRpZXModmFsdWU6IEVudGl0eVR5cGUuRW50aXR5W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdGllcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEJhdGNoVXBkYXRlRW50aXRpZXNSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXRpZXM6ICh0aGlzLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdGllczogKHRoaXMuZW50aXRpZXMgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hVcGRhdGVFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGVudGl0aWVzPzogRW50aXR5VHlwZS5FbnRpdHkuQXNPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaFVwZGF0ZUVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXRpZXM/OiBFbnRpdHlUeXBlLkVudGl0eS5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIG9uZGV3by5ubHUuQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnb25kZXdvLm5sdS5CYXRjaEdldEVudGl0aWVzUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0KCk7XG4gICAgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBCYXRjaEdldEVudGl0aWVzUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5uYW1lcyA9IF9pbnN0YW5jZS5uYW1lcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIChfaW5zdGFuY2UubmFtZXMgPSBfaW5zdGFuY2UubmFtZXMgfHwgW10pLnB1c2goX3JlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaEdldEVudGl0aWVzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5uYW1lcyAmJiBfaW5zdGFuY2UubmFtZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMSwgX2luc3RhbmNlLm5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYW1lcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8QmF0Y2hHZXRFbnRpdGllc1JlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMubmFtZXMgPSAoX3ZhbHVlLm5hbWVzIHx8IFtdKS5zbGljZSgpO1xuICAgIEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgbmFtZXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcztcbiAgfVxuICBzZXQgbmFtZXModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbmFtZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBCYXRjaEdldEVudGl0aWVzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaEdldEVudGl0aWVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzOiAodGhpcy5uYW1lcyB8fCBbXSkuc2xpY2UoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEJhdGNoR2V0RW50aXRpZXNSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXM6ICh0aGlzLm5hbWVzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBCYXRjaEdldEVudGl0aWVzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG5hbWVzPzogc3RyaW5nW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hHZXRFbnRpdGllc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIG5hbWVzPzogc3RyaW5nW107XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1LkJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCgpO1xuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UubmFtZXMgPSBfaW5zdGFuY2UubmFtZXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAoX2luc3RhbmNlLm5hbWVzID0gX2luc3RhbmNlLm5hbWVzIHx8IFtdKS5wdXNoKF9yZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UubmFtZXMgJiYgX2luc3RhbmNlLm5hbWVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDEsIF9pbnN0YW5jZS5uYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm5hbWVzID0gKF92YWx1ZS5uYW1lcyB8fCBbXSkuc2xpY2UoKTtcbiAgICBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IG5hbWVzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXM7XG4gIH1cbiAgc2V0IG5hbWVzKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25hbWVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lczogKHRoaXMubmFtZXMgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzOiAodGhpcy5uYW1lcyB8fCBbXSkuc2xpY2UoKVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQmF0Y2hEZWxldGVFbnRpdGllc1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBuYW1lcz86IHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEJhdGNoRGVsZXRlRW50aXRpZXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBuYW1lcz86IHN0cmluZ1tdO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5CYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlKCk7XG4gICAgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlKSB7XG4gICAgX2luc3RhbmNlLmRlbGV0ZVN0YXR1c2VzID0gX2luc3RhbmNlLmRlbGV0ZVN0YXR1c2VzIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5oYXNFcnJvcnMgPSBfaW5zdGFuY2UuaGFzRXJyb3JzIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLkRlbGV0ZUVudGl0eVN0YXR1cygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLkRlbGV0ZUVudGl0eVN0YXR1c1xuICAgICAgICAgICAgICAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLmRlbGV0ZVN0YXR1c2VzID0gX2luc3RhbmNlLmRlbGV0ZVN0YXR1c2VzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuaGFzRXJyb3JzID0gX3JlYWRlci5yZWFkQm9vbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmRlbGV0ZVN0YXR1c2VzICYmIF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5kZWxldGVTdGF0dXNlcyBhcyBhbnksXG4gICAgICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5EZWxldGVFbnRpdHlTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuaGFzRXJyb3JzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlQm9vbCgyLCBfaW5zdGFuY2UuaGFzRXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVTdGF0dXNlcz86IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5EZWxldGVFbnRpdHlTdGF0dXNbXTtcbiAgcHJpdmF0ZSBfaGFzRXJyb3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZGVsZXRlU3RhdHVzZXMgPSAoX3ZhbHVlLmRlbGV0ZVN0YXR1c2VzIHx8IFtdKS5tYXAoXG4gICAgICBtID0+IG5ldyBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UuRGVsZXRlRW50aXR5U3RhdHVzKG0pXG4gICAgKTtcbiAgICB0aGlzLmhhc0Vycm9ycyA9IF92YWx1ZS5oYXNFcnJvcnM7XG4gICAgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZGVsZXRlU3RhdHVzZXMoKTpcbiAgICB8IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5EZWxldGVFbnRpdHlTdGF0dXNbXVxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGVsZXRlU3RhdHVzZXM7XG4gIH1cbiAgc2V0IGRlbGV0ZVN0YXR1c2VzKFxuICAgIHZhbHVlOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UuRGVsZXRlRW50aXR5U3RhdHVzW10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5fZGVsZXRlU3RhdHVzZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9oYXNFcnJvcnM7XG4gIH1cbiAgc2V0IGhhc0Vycm9ycyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2hhc0Vycm9ycyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBkZWxldGVTdGF0dXNlczogKHRoaXMuZGVsZXRlU3RhdHVzZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBoYXNFcnJvcnM6IHRoaXMuaGFzRXJyb3JzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVsZXRlU3RhdHVzZXM6ICh0aGlzLmRlbGV0ZVN0YXR1c2VzIHx8IFtdKS5tYXAobSA9PlxuICAgICAgICBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICApLFxuICAgICAgaGFzRXJyb3JzOiB0aGlzLmhhc0Vycm9yc1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBCYXRjaERlbGV0ZUVudGl0aWVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGRlbGV0ZVN0YXR1c2VzPzogQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlLkRlbGV0ZUVudGl0eVN0YXR1cy5Bc09iamVjdFtdO1xuICAgIGhhc0Vycm9ycz86IGJvb2xlYW47XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQmF0Y2hEZWxldGVFbnRpdGllc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBkZWxldGVTdGF0dXNlcz86XG4gICAgICB8IEJhdGNoRGVsZXRlRW50aXRpZXNSZXNwb25zZS5EZWxldGVFbnRpdHlTdGF0dXMuQXNQcm90b2J1ZkpTT05bXVxuICAgICAgfCBudWxsO1xuICAgIGhhc0Vycm9ycz86IGJvb2xlYW47XG4gIH1cblxuICAvKipcbiAgICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5EZWxldGVFbnRpdHlTdGF0dXNcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBEZWxldGVFbnRpdHlTdGF0dXMgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRGVsZXRlRW50aXR5U3RhdHVzJztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGVsZXRlRW50aXR5U3RhdHVzKCk7XG4gICAgICBEZWxldGVFbnRpdHlTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICAgICk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVN0YXR1cykge31cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVN0YXR1cyxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zdWNjZXNzZnVsbHlEZWxldGVkID0gbmV3IGdvb2dsZVByb3RvYnVmMDA0LkVtcHR5KCk7XG4gICAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgICBfaW5zdGFuY2Uuc3VjY2Vzc2Z1bGx5RGVsZXRlZCxcbiAgICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuRW1wdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgX2luc3RhbmNlLmVycm9yTWVzc2FnZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRGVsZXRlRW50aXR5U3RhdHVzLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgICBfaW5zdGFuY2U6IERlbGV0ZUVudGl0eVN0YXR1cyxcbiAgICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICAgICkge1xuICAgICAgaWYgKF9pbnN0YW5jZS5zdWNjZXNzZnVsbHlEZWxldGVkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgX2luc3RhbmNlLnN1Y2Nlc3NmdWxseURlbGV0ZWQgYXMgYW55LFxuICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LkVtcHR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmVycm9yTWVzc2FnZSB8fCBfaW5zdGFuY2UuZXJyb3JNZXNzYWdlID09PSAnJykge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3N1Y2Nlc3NmdWxseURlbGV0ZWQ/OiBnb29nbGVQcm90b2J1ZjAwNC5FbXB0eTtcbiAgICBwcml2YXRlIF9lcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9kZWxldGVTdGF0dXM6IERlbGV0ZUVudGl0eVN0YXR1cy5EZWxldGVTdGF0dXNDYXNlID1cbiAgICAgIERlbGV0ZUVudGl0eVN0YXR1cy5EZWxldGVTdGF0dXNDYXNlLm5vbmU7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBEZWxldGVFbnRpdHlTdGF0dXMgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPERlbGV0ZUVudGl0eVN0YXR1cy5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMuc3VjY2Vzc2Z1bGx5RGVsZXRlZCA9IF92YWx1ZS5zdWNjZXNzZnVsbHlEZWxldGVkXG4gICAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA0LkVtcHR5KF92YWx1ZS5zdWNjZXNzZnVsbHlEZWxldGVkKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX3ZhbHVlLmVycm9yTWVzc2FnZTtcbiAgICAgIERlbGV0ZUVudGl0eVN0YXR1cy5yZWZpbmVWYWx1ZXModGhpcyk7XG4gICAgfVxuICAgIGdldCBzdWNjZXNzZnVsbHlEZWxldGVkKCk6IGdvb2dsZVByb3RvYnVmMDA0LkVtcHR5IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWNjZXNzZnVsbHlEZWxldGVkO1xuICAgIH1cbiAgICBzZXQgc3VjY2Vzc2Z1bGx5RGVsZXRlZCh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDQuRW1wdHkgfCB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZGVsZXRlU3RhdHVzID1cbiAgICAgICAgICBEZWxldGVFbnRpdHlTdGF0dXMuRGVsZXRlU3RhdHVzQ2FzZS5zdWNjZXNzZnVsbHlEZWxldGVkO1xuICAgICAgfVxuICAgICAgdGhpcy5fc3VjY2Vzc2Z1bGx5RGVsZXRlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICBzZXQgZXJyb3JNZXNzYWdlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3N1Y2Nlc3NmdWxseURlbGV0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0YXR1cyA9IERlbGV0ZUVudGl0eVN0YXR1cy5EZWxldGVTdGF0dXNDYXNlLmVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZGVsZXRlU3RhdHVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlbGV0ZVN0YXR1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgICAgRGVsZXRlRW50aXR5U3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IERlbGV0ZUVudGl0eVN0YXR1cy5Bc09iamVjdCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzZnVsbHlEZWxldGVkOiB0aGlzLnN1Y2Nlc3NmdWxseURlbGV0ZWRcbiAgICAgICAgICA/IHRoaXMuc3VjY2Vzc2Z1bGx5RGVsZXRlZC50b09iamVjdCgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yTWVzc2FnZTogdGhpcy5lcnJvck1lc3NhZ2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogRGVsZXRlRW50aXR5U3RhdHVzLkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3NmdWxseURlbGV0ZWQ6IHRoaXMuc3VjY2Vzc2Z1bGx5RGVsZXRlZFxuICAgICAgICAgID8gdGhpcy5zdWNjZXNzZnVsbHlEZWxldGVkLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBlcnJvck1lc3NhZ2U6XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPT09IG51bGwgfHwgdGhpcy5lcnJvck1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHRoaXMuZXJyb3JNZXNzYWdlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnQgbW9kdWxlIERlbGV0ZUVudGl0eVN0YXR1cyB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIERlbGV0ZUVudGl0eVN0YXR1c1xuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgc3VjY2Vzc2Z1bGx5RGVsZXRlZD86IGdvb2dsZVByb3RvYnVmMDA0LkVtcHR5LkFzT2JqZWN0O1xuICAgICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIERlbGV0ZUVudGl0eVN0YXR1c1xuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgICAgc3VjY2Vzc2Z1bGx5RGVsZXRlZD86IGdvb2dsZVByb3RvYnVmMDA0LkVtcHR5LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICAgIGVycm9yTWVzc2FnZT86IHN0cmluZyB8IG51bGw7XG4gICAgfVxuICAgIGV4cG9ydCBlbnVtIERlbGV0ZVN0YXR1c0Nhc2Uge1xuICAgICAgbm9uZSA9IDAsXG4gICAgICBzdWNjZXNzZnVsbHlEZWxldGVkID0gMSxcbiAgICAgIGVycm9yTWVzc2FnZSA9IDJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBvbmRld28ubmx1Lkxpc3RFbnRpdGllc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RFbnRpdGllc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1Lkxpc3RFbnRpdGllc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0RW50aXRpZXNSZXF1ZXN0KCk7XG4gICAgTGlzdEVudGl0aWVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IExpc3RFbnRpdGllc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUgPSBfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUgfHwgJyc7XG4gICAgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSA9IF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUgfHwgJyc7XG4gICAgX2luc3RhbmNlLnBhZ2VUb2tlbiA9IF9pbnN0YW5jZS5wYWdlVG9rZW4gfHwgJyc7XG4gICAgX2luc3RhbmNlLnNvcnRCeUZpZWxkID0gX2luc3RhbmNlLnNvcnRCeUZpZWxkIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2Uuc2VhcmNoQnlQYXR0ZXJuID0gX2luc3RhbmNlLnNlYXJjaEJ5UGF0dGVybiB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdGllc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UubGFuZ3VhZ2VDb2RlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZVRva2VuID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBfaW5zdGFuY2Uuc29ydEJ5RmllbGQgPSBuZXcgRW50aXR5VmFsdWVTb3J0aW5nKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zb3J0QnlGaWVsZCxcbiAgICAgICAgICAgIEVudGl0eVZhbHVlU29ydGluZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLnNlYXJjaEJ5UGF0dGVybiA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTGlzdEVudGl0aWVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdGllc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZW50aXR5VHlwZU5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLmVudGl0eVR5cGVOYW1lKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5sYW5ndWFnZUNvZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLmxhbmd1YWdlQ29kZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucGFnZVRva2VuKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDMsIF9pbnN0YW5jZS5wYWdlVG9rZW4pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnNvcnRCeUZpZWxkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgNSxcbiAgICAgICAgX2luc3RhbmNlLnNvcnRCeUZpZWxkIGFzIGFueSxcbiAgICAgICAgRW50aXR5VmFsdWVTb3J0aW5nLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnNlYXJjaEJ5UGF0dGVybikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg2LCBfaW5zdGFuY2Uuc2VhcmNoQnlQYXR0ZXJuKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnRpdHlUeXBlTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICBwcml2YXRlIF9wYWdlVG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3NvcnRCeUZpZWxkPzogRW50aXR5VmFsdWVTb3J0aW5nO1xuICBwcml2YXRlIF9zZWFyY2hCeVBhdHRlcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBMaXN0RW50aXRpZXNSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPExpc3RFbnRpdGllc1JlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZW50aXR5VHlwZU5hbWUgPSBfdmFsdWUuZW50aXR5VHlwZU5hbWU7XG4gICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBfdmFsdWUubGFuZ3VhZ2VDb2RlO1xuICAgIHRoaXMucGFnZVRva2VuID0gX3ZhbHVlLnBhZ2VUb2tlbjtcbiAgICB0aGlzLnNvcnRCeUZpZWxkID0gX3ZhbHVlLnNvcnRCeUZpZWxkXG4gICAgICA/IG5ldyBFbnRpdHlWYWx1ZVNvcnRpbmcoX3ZhbHVlLnNvcnRCeUZpZWxkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWFyY2hCeVBhdHRlcm4gPSBfdmFsdWUuc2VhcmNoQnlQYXR0ZXJuO1xuICAgIExpc3RFbnRpdGllc1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBlbnRpdHlUeXBlTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdHlUeXBlTmFtZTtcbiAgfVxuICBzZXQgZW50aXR5VHlwZU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VudGl0eVR5cGVOYW1lID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxhbmd1YWdlQ29kZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUNvZGU7XG4gIH1cbiAgc2V0IGxhbmd1YWdlQ29kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFuZ3VhZ2VDb2RlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBhZ2VUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYWdlVG9rZW47XG4gIH1cbiAgc2V0IHBhZ2VUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGFnZVRva2VuID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHNvcnRCeUZpZWxkKCk6IEVudGl0eVZhbHVlU29ydGluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRCeUZpZWxkO1xuICB9XG4gIHNldCBzb3J0QnlGaWVsZCh2YWx1ZTogRW50aXR5VmFsdWVTb3J0aW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc29ydEJ5RmllbGQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc2VhcmNoQnlQYXR0ZXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaEJ5UGF0dGVybjtcbiAgfVxuICBzZXQgc2VhcmNoQnlQYXR0ZXJuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zZWFyY2hCeVBhdHRlcm4gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBMaXN0RW50aXRpZXNSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RFbnRpdGllc1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlUeXBlTmFtZTogdGhpcy5lbnRpdHlUeXBlTmFtZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXG4gICAgICBwYWdlVG9rZW46IHRoaXMucGFnZVRva2VuLFxuICAgICAgc29ydEJ5RmllbGQ6IHRoaXMuc29ydEJ5RmllbGQgPyB0aGlzLnNvcnRCeUZpZWxkLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBzZWFyY2hCeVBhdHRlcm46IHRoaXMuc2VhcmNoQnlQYXR0ZXJuXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogTGlzdEVudGl0aWVzUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVR5cGVOYW1lOiB0aGlzLmVudGl0eVR5cGVOYW1lLFxuICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgIHBhZ2VUb2tlbjogdGhpcy5wYWdlVG9rZW4sXG4gICAgICBzb3J0QnlGaWVsZDogdGhpcy5zb3J0QnlGaWVsZFxuICAgICAgICA/IHRoaXMuc29ydEJ5RmllbGQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgc2VhcmNoQnlQYXR0ZXJuOiB0aGlzLnNlYXJjaEJ5UGF0dGVyblxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgTGlzdEVudGl0aWVzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgTGlzdEVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZW50aXR5VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICAgIHBhZ2VUb2tlbj86IHN0cmluZztcbiAgICBzb3J0QnlGaWVsZD86IEVudGl0eVZhbHVlU29ydGluZy5Bc09iamVjdDtcbiAgICBzZWFyY2hCeVBhdHRlcm4/OiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgTGlzdEVudGl0aWVzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXR5VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICAgIHBhZ2VUb2tlbj86IHN0cmluZztcbiAgICBzb3J0QnlGaWVsZD86IEVudGl0eVZhbHVlU29ydGluZy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc2VhcmNoQnlQYXR0ZXJuPzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5MaXN0RW50aXRpZXNSZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgTGlzdEVudGl0aWVzUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdvbmRld28ubmx1Lkxpc3RFbnRpdGllc1Jlc3BvbnNlJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTGlzdEVudGl0aWVzUmVzcG9uc2UoKTtcbiAgICBMaXN0RW50aXRpZXNSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IExpc3RFbnRpdGllc1Jlc3BvbnNlKSB7XG4gICAgX2luc3RhbmNlLmVudGl0aWVzID0gX2luc3RhbmNlLmVudGl0aWVzIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuID0gX2luc3RhbmNlLm5leHRQYWdlVG9rZW4gfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBMaXN0RW50aXRpZXNSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IEVudGl0eVR5cGUuRW50aXR5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjEsXG4gICAgICAgICAgICBFbnRpdHlUeXBlLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZW50aXRpZXMgPSBfaW5zdGFuY2UuZW50aXRpZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5uZXh0UGFnZVRva2VuID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMaXN0RW50aXRpZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RFbnRpdGllc1Jlc3BvbnNlLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmVudGl0aWVzICYmIF9pbnN0YW5jZS5lbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICAgIEVudGl0eVR5cGUuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm5leHRQYWdlVG9rZW4pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLm5leHRQYWdlVG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VudGl0aWVzPzogRW50aXR5VHlwZS5FbnRpdHlbXTtcbiAgcHJpdmF0ZSBfbmV4dFBhZ2VUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIExpc3RFbnRpdGllc1Jlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPExpc3RFbnRpdGllc1Jlc3BvbnNlLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmVudGl0aWVzID0gKF92YWx1ZS5lbnRpdGllcyB8fCBbXSkubWFwKG0gPT4gbmV3IEVudGl0eVR5cGUuRW50aXR5KG0pKTtcbiAgICB0aGlzLm5leHRQYWdlVG9rZW4gPSBfdmFsdWUubmV4dFBhZ2VUb2tlbjtcbiAgICBMaXN0RW50aXRpZXNSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGVudGl0aWVzKCk6IEVudGl0eVR5cGUuRW50aXR5W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbnRpdGllcztcbiAgfVxuICBzZXQgZW50aXRpZXModmFsdWU6IEVudGl0eVR5cGUuRW50aXR5W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnRpdGllcyA9IHZhbHVlO1xuICB9XG4gIGdldCBuZXh0UGFnZVRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25leHRQYWdlVG9rZW47XG4gIH1cbiAgc2V0IG5leHRQYWdlVG9rZW4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25leHRQYWdlVG9rZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBMaXN0RW50aXRpZXNSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBMaXN0RW50aXRpZXNSZXNwb25zZS5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0aWVzOiAodGhpcy5lbnRpdGllcyB8fCBbXSkubWFwKG0gPT4gbS50b09iamVjdCgpKSxcbiAgICAgIG5leHRQYWdlVG9rZW46IHRoaXMubmV4dFBhZ2VUb2tlblxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IExpc3RFbnRpdGllc1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXRpZXM6ICh0aGlzLmVudGl0aWVzIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKSxcbiAgICAgIG5leHRQYWdlVG9rZW46IHRoaXMubmV4dFBhZ2VUb2tlblxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgTGlzdEVudGl0aWVzUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIExpc3RFbnRpdGllc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBlbnRpdGllcz86IEVudGl0eVR5cGUuRW50aXR5LkFzT2JqZWN0W107XG4gICAgbmV4dFBhZ2VUb2tlbj86IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0RW50aXRpZXNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZW50aXRpZXM/OiBFbnRpdHlUeXBlLkVudGl0eS5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgICBuZXh0UGFnZVRva2VuPzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3Igb25kZXdvLm5sdS5FbnRpdHlWYWx1ZVNvcnRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eVZhbHVlU29ydGluZyBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ29uZGV3by5ubHUuRW50aXR5VmFsdWVTb3J0aW5nJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW50aXR5VmFsdWVTb3J0aW5nKCk7XG4gICAgRW50aXR5VmFsdWVTb3J0aW5nLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRW50aXR5VmFsdWVTb3J0aW5nKSB7XG4gICAgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCA9IF9pbnN0YW5jZS5zb3J0aW5nRmllbGQgfHwgMDtcbiAgICBfaW5zdGFuY2Uuc29ydGluZ01vZGUgPSBfaW5zdGFuY2Uuc29ydGluZ01vZGUgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEVudGl0eVZhbHVlU29ydGluZyxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBfaW5zdGFuY2Uuc29ydGluZ0ZpZWxkID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgX2luc3RhbmNlLnNvcnRpbmdNb2RlID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRW50aXR5VmFsdWVTb3J0aW5nLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogRW50aXR5VmFsdWVTb3J0aW5nLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNvcnRpbmdGaWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oNywgX2luc3RhbmNlLnNvcnRpbmdGaWVsZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc29ydGluZ01vZGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDgsIF9pbnN0YW5jZS5zb3J0aW5nTW9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc29ydGluZ0ZpZWxkPzogRW50aXR5VmFsdWVTb3J0aW5nLkVudGl0eVZhbHVlU29ydGluZ0ZpZWxkO1xuICBwcml2YXRlIF9zb3J0aW5nTW9kZT86IG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEVudGl0eVZhbHVlU29ydGluZyB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxFbnRpdHlWYWx1ZVNvcnRpbmcuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuc29ydGluZ0ZpZWxkID0gX3ZhbHVlLnNvcnRpbmdGaWVsZDtcbiAgICB0aGlzLnNvcnRpbmdNb2RlID0gX3ZhbHVlLnNvcnRpbmdNb2RlO1xuICAgIEVudGl0eVZhbHVlU29ydGluZy5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHNvcnRpbmdGaWVsZCgpOiBFbnRpdHlWYWx1ZVNvcnRpbmcuRW50aXR5VmFsdWVTb3J0aW5nRmllbGQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nRmllbGQ7XG4gIH1cbiAgc2V0IHNvcnRpbmdGaWVsZChcbiAgICB2YWx1ZTogRW50aXR5VmFsdWVTb3J0aW5nLkVudGl0eVZhbHVlU29ydGluZ0ZpZWxkIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHRoaXMuX3NvcnRpbmdGaWVsZCA9IHZhbHVlO1xuICB9XG4gIGdldCBzb3J0aW5nTW9kZSgpOiBvbmRld29ObHUwMDkuU29ydGluZ01vZGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nTW9kZTtcbiAgfVxuICBzZXQgc29ydGluZ01vZGUodmFsdWU6IG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NvcnRpbmdNb2RlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRW50aXR5VmFsdWVTb3J0aW5nLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEVudGl0eVZhbHVlU29ydGluZy5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRpbmdGaWVsZDogdGhpcy5zb3J0aW5nRmllbGQsXG4gICAgICBzb3J0aW5nTW9kZTogdGhpcy5zb3J0aW5nTW9kZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEVudGl0eVZhbHVlU29ydGluZy5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRpbmdGaWVsZDpcbiAgICAgICAgRW50aXR5VmFsdWVTb3J0aW5nLkVudGl0eVZhbHVlU29ydGluZ0ZpZWxkW1xuICAgICAgICAgIHRoaXMuc29ydGluZ0ZpZWxkID09PSBudWxsIHx8IHRoaXMuc29ydGluZ0ZpZWxkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdGaWVsZFxuICAgICAgICBdLFxuICAgICAgc29ydGluZ01vZGU6XG4gICAgICAgIG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZVtcbiAgICAgICAgICB0aGlzLnNvcnRpbmdNb2RlID09PSBudWxsIHx8IHRoaXMuc29ydGluZ01vZGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMuc29ydGluZ01vZGVcbiAgICAgICAgXVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgRW50aXR5VmFsdWVTb3J0aW5nIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlWYWx1ZVNvcnRpbmdcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHNvcnRpbmdGaWVsZD86IEVudGl0eVZhbHVlU29ydGluZy5FbnRpdHlWYWx1ZVNvcnRpbmdGaWVsZDtcbiAgICBzb3J0aW5nTW9kZT86IG9uZGV3b05sdTAwOS5Tb3J0aW5nTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBFbnRpdHlWYWx1ZVNvcnRpbmdcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHNvcnRpbmdGaWVsZD86IHN0cmluZztcbiAgICBzb3J0aW5nTW9kZT86IHN0cmluZztcbiAgfVxuICBleHBvcnQgZW51bSBFbnRpdHlWYWx1ZVNvcnRpbmdGaWVsZCB7XG4gICAgTk9fRU5USVRZX1ZBTFVFX1NPUlRJTkcgPSAwLFxuICAgIFNPUlRfRU5USVRZX1ZBTFVFX0JZX0RJU1BMQVlfTkFNRSA9IDEsXG4gICAgU09SVF9FTlRJVFlfVkFMVUVfQllfVkFMVUUgPSAyLFxuICAgIFNPUlRfRU5USVRZX1ZBTFVFX0JZX1NZTk9OWU1fQ09VTlQgPSAzXG4gIH1cbn1cbiJdfQ==
|