angular-odata 0.122.0 → 0.123.0
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/esm2022/lib/client.mjs +253 -0
- package/esm2022/lib/models/collection.mjs +862 -0
- package/esm2022/lib/models/model.mjs +519 -0
- package/esm2022/lib/module.mjs +43 -0
- package/esm2022/lib/resources/query/builder.mjs +619 -0
- package/{esm2020 → esm2022}/lib/resources/query/expressions/base.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/query/expressions/compute.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/query/expressions/count.mjs +1 -1
- package/esm2022/lib/resources/query/expressions/expand.mjs +119 -0
- package/esm2022/lib/resources/query/expressions/filter.mjs +161 -0
- package/{esm2020 → esm2022}/lib/resources/query/expressions/orderby.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/query/expressions/search.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/query/expressions/select.mjs +1 -1
- package/esm2022/lib/resources/query/expressions/syntax.mjs +409 -0
- package/{esm2020 → esm2022}/lib/resources/query/handlers.mjs +1 -1
- package/esm2022/lib/resources/query/options.mjs +115 -0
- package/esm2022/lib/resources/responses/metadata.mjs +548 -0
- package/esm2022/lib/schema/parsers/edm.mjs +99 -0
- package/{esm2020 → esm2022}/lib/schema/parsers/enum-type.mjs +2 -2
- package/esm2022/lib/services/factory.mjs +34 -0
- package/esm2022/lib/utils/enums.mjs +61 -0
- package/{fesm2020 → fesm2022}/angular-odata.mjs +315 -257
- package/fesm2022/angular-odata.mjs.map +1 -0
- package/lib/helper.d.ts +1 -1
- package/lib/models/model.d.ts +3 -1
- package/lib/models/options.d.ts +4 -4
- package/lib/resources/path/segments.d.ts +1 -1
- package/lib/resources/query/builder.d.ts +21 -20
- package/lib/resources/query/expressions/base.d.ts +3 -3
- package/lib/resources/query/expressions/compute.d.ts +2 -2
- package/lib/resources/query/expressions/count.d.ts +3 -3
- package/lib/resources/query/expressions/expand.d.ts +13 -12
- package/lib/resources/query/expressions/filter.d.ts +15 -15
- package/lib/resources/query/expressions/orderby.d.ts +3 -3
- package/lib/resources/query/expressions/search.d.ts +3 -3
- package/lib/resources/query/expressions/select.d.ts +2 -2
- package/lib/resources/query/expressions/syntax.d.ts +59 -58
- package/lib/resources/query/handlers.d.ts +2 -2
- package/lib/resources/query/options.d.ts +1 -1
- package/lib/resources/resource.d.ts +1 -1
- package/lib/resources/responses/types.d.ts +3 -3
- package/lib/resources/types/options.d.ts +7 -7
- package/lib/schema/parsers/structured-type.d.ts +5 -5
- package/lib/types.d.ts +15 -15
- package/lib/utils/durations.d.ts +1 -1
- package/lib/utils/enums.d.ts +3 -0
- package/package.json +9 -15
- package/esm2020/lib/client.mjs +0 -252
- package/esm2020/lib/models/collection.mjs +0 -861
- package/esm2020/lib/models/model.mjs +0 -507
- package/esm2020/lib/module.mjs +0 -42
- package/esm2020/lib/resources/query/builder.mjs +0 -588
- package/esm2020/lib/resources/query/expressions/expand.mjs +0 -115
- package/esm2020/lib/resources/query/expressions/filter.mjs +0 -161
- package/esm2020/lib/resources/query/expressions/syntax.mjs +0 -409
- package/esm2020/lib/resources/query/options.mjs +0 -115
- package/esm2020/lib/resources/responses/metadata.mjs +0 -547
- package/esm2020/lib/schema/parsers/edm.mjs +0 -104
- package/esm2020/lib/services/factory.mjs +0 -33
- package/esm2020/lib/utils/enums.mjs +0 -45
- package/fesm2015/angular-odata.mjs +0 -11811
- package/fesm2015/angular-odata.mjs.map +0 -1
- package/fesm2020/angular-odata.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-odata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/cache.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/memory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/storage.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/helper.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/loaders.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/handlers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/segments.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/expressions/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/request.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/resource.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/annotations.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-annotation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-container.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-enum-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-function-action.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-reference.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-schema.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-singleton.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structural-property.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structured-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-type-definition.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/response.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/action.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/batch.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/count.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/entity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/media.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/navigation-property.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/property.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/reference.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/singleton.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/value.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/annotation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/callable.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/element.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/entity-container.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/enum-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/parsers/callable.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/parsers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/parsers/structured-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/schema.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/structured-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/base.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/entity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/singleton.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/arraybuffers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/arrays.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/dates.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/durations.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/http.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/objects.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/odata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/strings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/urls.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
import { CsdlAction, CsdlActionImport, CsdlFunction, CsdlFunctionImport, CsdlParameter, CsdlReturnType, } from './csdl/csdl-function-action';
|
|
2
|
+
import { CsdlAnnotation, CsdlAnnotations, CsdlTerm, } from './csdl/csdl-annotation';
|
|
3
|
+
import { CsdlComplexType, CsdlEntityType, CsdlKey, CsdlPropertyRef, } from './csdl/csdl-structured-type';
|
|
4
|
+
import { CsdlEnumMember, CsdlEnumType } from './csdl/csdl-enum-type';
|
|
5
|
+
import { CsdlInclude, CsdlIncludeAnnotations, CsdlReference, } from './csdl/csdl-reference';
|
|
6
|
+
import { CsdlNavigationProperty, CsdlOnDelete, CsdlProperty, CsdlReferentialConstraint, } from './csdl/csdl-structural-property';
|
|
7
|
+
import { CsdlEntityContainer } from './csdl/csdl-entity-container';
|
|
8
|
+
import { CsdlEntitySet } from './csdl/csdl-entity-set';
|
|
9
|
+
import { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';
|
|
10
|
+
import { CsdlSchema } from './csdl/csdl-schema';
|
|
11
|
+
import { CsdlSingleton } from './csdl/csdl-singleton';
|
|
12
|
+
import { CsdlTypeDefinition } from './csdl/csdl-type-definition';
|
|
13
|
+
import { VERSION_4_0 } from '../../constants';
|
|
14
|
+
var FieldType;
|
|
15
|
+
(function (FieldType) {
|
|
16
|
+
FieldType[FieldType["ATTRIBUTE"] = 0] = "ATTRIBUTE";
|
|
17
|
+
FieldType[FieldType["TAG"] = 1] = "TAG";
|
|
18
|
+
})(FieldType || (FieldType = {}));
|
|
19
|
+
class Field {
|
|
20
|
+
constructor(name, fieldType) {
|
|
21
|
+
this.name = name;
|
|
22
|
+
this.fieldType = fieldType;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
class ODataMetadata {
|
|
26
|
+
// TAGS
|
|
27
|
+
static { this.TAG_EDMX = 'edmx:Edmx'; }
|
|
28
|
+
static { this.TAG_DATA_SERVICES = 'edmx:DataServices'; }
|
|
29
|
+
static { this.TAG_REFERENCE = 'edmx:Reference'; }
|
|
30
|
+
static { this.TAG_INCLUDE = 'edmx:Include'; }
|
|
31
|
+
static { this.TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations'; }
|
|
32
|
+
static { this.TAG_TERM = 'Term'; }
|
|
33
|
+
static { this.TAG_ANNOTATIONS = 'Annotations'; }
|
|
34
|
+
static { this.TAG_ANNOTATION = 'Annotation'; }
|
|
35
|
+
static { this.TAG_SCHEMA = 'Schema'; }
|
|
36
|
+
static { this.TAG_ENUM_TYPE = 'EnumType'; }
|
|
37
|
+
static { this.TAG_MEMBER = 'Member'; }
|
|
38
|
+
static { this.TAG_COMPLEX_TYPE = 'ComplexType'; }
|
|
39
|
+
static { this.TAG_ENTITY_TYPE = 'EntityType'; }
|
|
40
|
+
static { this.TAG_PROPERTY = 'Property'; }
|
|
41
|
+
static { this.TAG_KEY = 'Key'; }
|
|
42
|
+
static { this.TAG_PROPERTY_REF = 'PropertyRef'; }
|
|
43
|
+
static { this.TAG_NAVIGATION_PROPERTY = 'NavigationProperty'; }
|
|
44
|
+
static { this.TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint'; }
|
|
45
|
+
static { this.TAG_ON_DELETE = 'OnDelete'; }
|
|
46
|
+
static { this.TAG_FUNCTION = 'Function'; }
|
|
47
|
+
static { this.TAG_RETURN_TYPE = 'ReturnType'; }
|
|
48
|
+
static { this.TAG_PARAMETER = 'Parameter'; }
|
|
49
|
+
static { this.TAG_ACTION = 'Action'; }
|
|
50
|
+
static { this.TAG_ENTITY_CONTAINER = 'EntityContainer'; }
|
|
51
|
+
static { this.TAG_ENTITY_SET = 'EntitySet'; }
|
|
52
|
+
static { this.TAG_SINGLETON = 'Singleton'; }
|
|
53
|
+
static { this.TAG_FUNCTION_IMPORT = 'FunctionImport'; }
|
|
54
|
+
static { this.TAG_ACTION_IMPORT = 'ActionImport'; }
|
|
55
|
+
static { this.TAG_NAVIGATION_PROPERTY_BINDING = 'NavigationPropertyBinding'; }
|
|
56
|
+
static { this.TAG_TYPE_DEFINITION = 'TypeDefinition'; }
|
|
57
|
+
// ATTRIBUTES
|
|
58
|
+
static { this.ATTRIBUTE_VERSION = 'Version'; }
|
|
59
|
+
static { this.ATTRIBUTE_URI = 'Uri'; }
|
|
60
|
+
static { this.ATTRIBUTE_ALIAS = 'Alias'; }
|
|
61
|
+
static { this.ATTRIBUTE_NAMESPACE = 'Namespace'; }
|
|
62
|
+
static { this.ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace'; }
|
|
63
|
+
static { this.ATTRIBUTE_QUALIFIER = 'Qualifier'; }
|
|
64
|
+
static { this.ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace'; }
|
|
65
|
+
static { this.ATTRIBUTE_TERM = 'Term'; }
|
|
66
|
+
static { this.ATTRIBUTE_NAME = 'Name'; }
|
|
67
|
+
static { this.ATTRIBUTE_VALUE = 'Value'; }
|
|
68
|
+
static { this.ATTRIBUTE_BASE_TYPE = 'BaseType'; }
|
|
69
|
+
static { this.ATTRIBUTE_OPEN_TYPE = 'OpenType'; }
|
|
70
|
+
static { this.ATTRIBUTE_TYPE = 'Type'; }
|
|
71
|
+
static { this.ATTRIBUTE_NULLABLE = 'Nullable'; }
|
|
72
|
+
static { this.ATTRIBUTE_MAX_LENGTH = 'MaxLength'; }
|
|
73
|
+
static { this.ATTRIBUTE_PRECISION = 'Precision'; }
|
|
74
|
+
static { this.ATTRIBUTE_SCALE = 'Scale'; }
|
|
75
|
+
static { this.ATTRIBUTE_UNICODE = 'Unicode'; }
|
|
76
|
+
static { this.ATTRIBUTE_SRID = 'SRID'; }
|
|
77
|
+
static { this.ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue'; }
|
|
78
|
+
static { this.ATTRIBUTE_PARTNER = 'Partner'; }
|
|
79
|
+
static { this.ATTRIBUTE_PROPERTY = 'Property'; }
|
|
80
|
+
static { this.ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty'; }
|
|
81
|
+
static { this.ATTRIBUTE_HAS_STREAM = 'HasStream'; }
|
|
82
|
+
static { this.ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget'; }
|
|
83
|
+
static { this.ATTRIBUTE_IS_BOUND = 'IsBound'; }
|
|
84
|
+
static { this.ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath'; }
|
|
85
|
+
static { this.ATTRIBUTE_IS_COMPOSABLE = 'IsComposable'; }
|
|
86
|
+
static { this.ATTRIBUTE_ENTITY_TYPE = 'EntityType'; }
|
|
87
|
+
static { this.ATTRIBUTE_PATH = 'Path'; }
|
|
88
|
+
static { this.ATTRIBUTE_TARGET = 'Target'; }
|
|
89
|
+
static { this.ATTRIBUTE_FUNCTION = 'Function'; }
|
|
90
|
+
static { this.ATTRIBUTE_ACTION = 'Action'; }
|
|
91
|
+
static { this.ATTRIBUTE_ENTITY_SET = 'EntitySet'; }
|
|
92
|
+
static { this.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT = 'IncludeInServiceDocument'; }
|
|
93
|
+
static { this.ATTRIBUTE_ABSTRACT = 'Abstract'; }
|
|
94
|
+
static { this.ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType'; }
|
|
95
|
+
static { this.ATTRIBUTE_IS_FLAGS = 'IsFlags'; }
|
|
96
|
+
static { this.ATTRIBUTE_EXTENDS = 'Extends'; }
|
|
97
|
+
static { this.ATTRIBUTE_BASE_TERM = 'BaseTerm'; }
|
|
98
|
+
static { this.ATTRIBUTE_APPLIES_TO = 'AppliesTo'; }
|
|
99
|
+
constructor(xml) {
|
|
100
|
+
try {
|
|
101
|
+
const parser = new DOMParser();
|
|
102
|
+
const document = parser.parseFromString(xml, 'text/xml');
|
|
103
|
+
this.checkVersion(document);
|
|
104
|
+
this.version = this.getFieldValueByAttribute(new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE), document.documentElement.attributes);
|
|
105
|
+
this.references = this.getObjects(document.documentElement, ODataMetadata.TAG_REFERENCE, [
|
|
106
|
+
new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),
|
|
107
|
+
new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),
|
|
108
|
+
new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),
|
|
109
|
+
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
110
|
+
]);
|
|
111
|
+
const dataServices = document.documentElement.getElementsByTagName(ODataMetadata.TAG_DATA_SERVICES)[0];
|
|
112
|
+
this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [
|
|
113
|
+
new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),
|
|
114
|
+
new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
|
|
115
|
+
new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),
|
|
116
|
+
new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),
|
|
117
|
+
new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),
|
|
118
|
+
new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),
|
|
119
|
+
new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),
|
|
120
|
+
new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),
|
|
121
|
+
new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),
|
|
122
|
+
new Field(ODataMetadata.TAG_TERM, FieldType.TAG),
|
|
123
|
+
new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),
|
|
124
|
+
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
125
|
+
]);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw new Error('Unable to parse metadata, ' + error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
checkVersion(document) {
|
|
132
|
+
// check version
|
|
133
|
+
const attributes = document.documentElement.attributes;
|
|
134
|
+
if (!attributes) {
|
|
135
|
+
throw new Error('OData version is not specified in the metadata');
|
|
136
|
+
}
|
|
137
|
+
const attr = attributes.getNamedItem('Version');
|
|
138
|
+
if (attr === null) {
|
|
139
|
+
throw new Error('OData version is not specified in the metadata');
|
|
140
|
+
}
|
|
141
|
+
const odataVersion = attr?.nodeValue;
|
|
142
|
+
if (odataVersion !== VERSION_4_0) {
|
|
143
|
+
throw new Error('OData version "' + odataVersion + '" is not supported');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
getObjects(parentElement, tag, fieldNames) {
|
|
147
|
+
let objects = [];
|
|
148
|
+
const children = parentElement.children;
|
|
149
|
+
for (let index = 0; index < children.length; index++) {
|
|
150
|
+
const element = children.item(index);
|
|
151
|
+
if (!element || element.nodeName !== tag) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const attributes = element.attributes;
|
|
155
|
+
const fieldValues = this.getFieldValues(fieldNames, attributes, element);
|
|
156
|
+
switch (tag) {
|
|
157
|
+
case ODataMetadata.TAG_REFERENCE:
|
|
158
|
+
objects.push(new CsdlReference(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
159
|
+
break;
|
|
160
|
+
case ODataMetadata.TAG_INCLUDE:
|
|
161
|
+
objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));
|
|
162
|
+
break;
|
|
163
|
+
case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:
|
|
164
|
+
objects.push(new CsdlIncludeAnnotations(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
165
|
+
break;
|
|
166
|
+
case ODataMetadata.TAG_TERM:
|
|
167
|
+
objects.push(new CsdlTerm(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8], fieldValues[9]));
|
|
168
|
+
break;
|
|
169
|
+
case ODataMetadata.TAG_ANNOTATIONS:
|
|
170
|
+
objects.push(new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
171
|
+
break;
|
|
172
|
+
case ODataMetadata.TAG_ANNOTATION:
|
|
173
|
+
objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));
|
|
174
|
+
break;
|
|
175
|
+
case ODataMetadata.TAG_SCHEMA:
|
|
176
|
+
objects.push(new CsdlSchema(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8], fieldValues[9], fieldValues[10], fieldValues[11]));
|
|
177
|
+
break;
|
|
178
|
+
case ODataMetadata.TAG_ENUM_TYPE:
|
|
179
|
+
objects.push(new CsdlEnumType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
180
|
+
break;
|
|
181
|
+
case ODataMetadata.TAG_COMPLEX_TYPE:
|
|
182
|
+
objects.push(new CsdlComplexType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]));
|
|
183
|
+
break;
|
|
184
|
+
case ODataMetadata.TAG_ENTITY_TYPE:
|
|
185
|
+
objects.push(new CsdlEntityType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7]));
|
|
186
|
+
break;
|
|
187
|
+
case ODataMetadata.TAG_FUNCTION:
|
|
188
|
+
objects.push(new CsdlFunction(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]));
|
|
189
|
+
break;
|
|
190
|
+
case ODataMetadata.TAG_MEMBER:
|
|
191
|
+
objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));
|
|
192
|
+
break;
|
|
193
|
+
case ODataMetadata.TAG_PROPERTY:
|
|
194
|
+
objects.push(new CsdlProperty(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8]));
|
|
195
|
+
break;
|
|
196
|
+
case ODataMetadata.TAG_PROPERTY_REF:
|
|
197
|
+
objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));
|
|
198
|
+
break;
|
|
199
|
+
case ODataMetadata.TAG_NAVIGATION_PROPERTY:
|
|
200
|
+
objects.push(new CsdlNavigationProperty(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6]));
|
|
201
|
+
break;
|
|
202
|
+
case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:
|
|
203
|
+
objects.push(new CsdlReferentialConstraint(fieldValues[0], fieldValues[1]));
|
|
204
|
+
break;
|
|
205
|
+
case ODataMetadata.TAG_PARAMETER:
|
|
206
|
+
objects.push(new CsdlParameter(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6]));
|
|
207
|
+
break;
|
|
208
|
+
case ODataMetadata.TAG_ACTION:
|
|
209
|
+
objects.push(new CsdlAction(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4]));
|
|
210
|
+
break;
|
|
211
|
+
case ODataMetadata.TAG_ENTITY_SET:
|
|
212
|
+
objects.push(new CsdlEntitySet(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
213
|
+
break;
|
|
214
|
+
case ODataMetadata.TAG_SINGLETON:
|
|
215
|
+
objects.push(new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
216
|
+
break;
|
|
217
|
+
case ODataMetadata.TAG_FUNCTION_IMPORT:
|
|
218
|
+
objects.push(new CsdlFunctionImport(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
|
|
219
|
+
break;
|
|
220
|
+
case ODataMetadata.TAG_ACTION_IMPORT:
|
|
221
|
+
objects.push(new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2]));
|
|
222
|
+
break;
|
|
223
|
+
case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:
|
|
224
|
+
objects.push(new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1]));
|
|
225
|
+
break;
|
|
226
|
+
case ODataMetadata.TAG_TYPE_DEFINITION:
|
|
227
|
+
objects.push(new CsdlTypeDefinition(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7]));
|
|
228
|
+
break;
|
|
229
|
+
default:
|
|
230
|
+
throw new Error('Unknwon tag:' + tag);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return objects;
|
|
234
|
+
}
|
|
235
|
+
getObject(parentElement, tag, fieldNames) {
|
|
236
|
+
let object;
|
|
237
|
+
const children = parentElement.children;
|
|
238
|
+
let element;
|
|
239
|
+
for (let index = 0; index < children.length; index++) {
|
|
240
|
+
if (children && children.item(index)?.nodeName === tag) {
|
|
241
|
+
if (element !== undefined && element !== null) {
|
|
242
|
+
throw new Error('Expected one ' + tag);
|
|
243
|
+
}
|
|
244
|
+
element = children.item(index);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (element !== undefined && element !== null) {
|
|
248
|
+
const attributes = element.attributes;
|
|
249
|
+
const fieldValues = this.getFieldValues(fieldNames, attributes, element);
|
|
250
|
+
switch (tag) {
|
|
251
|
+
case ODataMetadata.TAG_KEY:
|
|
252
|
+
object = new CsdlKey(fieldValues[0]);
|
|
253
|
+
break;
|
|
254
|
+
case ODataMetadata.TAG_RETURN_TYPE:
|
|
255
|
+
object = new CsdlReturnType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]);
|
|
256
|
+
break;
|
|
257
|
+
case ODataMetadata.TAG_ENTITY_CONTAINER:
|
|
258
|
+
object = new CsdlEntityContainer(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]);
|
|
259
|
+
break;
|
|
260
|
+
case ODataMetadata.TAG_ON_DELETE:
|
|
261
|
+
object = new CsdlOnDelete(fieldValues[0]);
|
|
262
|
+
break;
|
|
263
|
+
default:
|
|
264
|
+
throw new Error('Unknwon tag:' + tag);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return object;
|
|
268
|
+
}
|
|
269
|
+
getFieldValues(fields, attributes, element) {
|
|
270
|
+
const fieldValues = [];
|
|
271
|
+
for (const field of fields) {
|
|
272
|
+
if (field.fieldType === FieldType.TAG) {
|
|
273
|
+
fieldValues.push(this.getFieldValueByTag(field, element));
|
|
274
|
+
}
|
|
275
|
+
else if (field.fieldType === FieldType.ATTRIBUTE) {
|
|
276
|
+
fieldValues.push(this.getFieldValueByAttribute(field, attributes));
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
throw new Error('Unknown field type: ' + field.fieldType);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return fieldValues;
|
|
283
|
+
}
|
|
284
|
+
getFieldValueByAttribute(field, attributes) {
|
|
285
|
+
switch (field.name) {
|
|
286
|
+
case ODataMetadata.ATTRIBUTE_VERSION:
|
|
287
|
+
case ODataMetadata.ATTRIBUTE_URI:
|
|
288
|
+
case ODataMetadata.ATTRIBUTE_NAMESPACE:
|
|
289
|
+
case ODataMetadata.ATTRIBUTE_ALIAS:
|
|
290
|
+
case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:
|
|
291
|
+
case ODataMetadata.ATTRIBUTE_TERM:
|
|
292
|
+
case ODataMetadata.ATTRIBUTE_QUALIFIER:
|
|
293
|
+
case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:
|
|
294
|
+
case ODataMetadata.ATTRIBUTE_NAME:
|
|
295
|
+
case ODataMetadata.ATTRIBUTE_TYPE:
|
|
296
|
+
case ODataMetadata.ATTRIBUTE_SRID:
|
|
297
|
+
case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:
|
|
298
|
+
case ODataMetadata.ATTRIBUTE_PARTNER:
|
|
299
|
+
case ODataMetadata.ATTRIBUTE_PROPERTY:
|
|
300
|
+
case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:
|
|
301
|
+
case ODataMetadata.ATTRIBUTE_BASE_TYPE:
|
|
302
|
+
case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:
|
|
303
|
+
case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:
|
|
304
|
+
case ODataMetadata.ATTRIBUTE_PATH:
|
|
305
|
+
case ODataMetadata.ATTRIBUTE_TARGET:
|
|
306
|
+
case ODataMetadata.ATTRIBUTE_FUNCTION:
|
|
307
|
+
case ODataMetadata.ATTRIBUTE_ACTION:
|
|
308
|
+
case ODataMetadata.ATTRIBUTE_ENTITY_SET:
|
|
309
|
+
case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:
|
|
310
|
+
case ODataMetadata.ATTRIBUTE_EXTENDS:
|
|
311
|
+
case ODataMetadata.ATTRIBUTE_BASE_TERM:
|
|
312
|
+
case ODataMetadata.ATTRIBUTE_APPLIES_TO:
|
|
313
|
+
return this.getAttributeValue(attributes, field.name);
|
|
314
|
+
case ODataMetadata.ATTRIBUTE_NULLABLE:
|
|
315
|
+
case ODataMetadata.ATTRIBUTE_UNICODE:
|
|
316
|
+
case ODataMetadata.ATTRIBUTE_OPEN_TYPE:
|
|
317
|
+
case ODataMetadata.ATTRIBUTE_HAS_STREAM:
|
|
318
|
+
case ODataMetadata.ATTRIBUTE_IS_BOUND:
|
|
319
|
+
case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:
|
|
320
|
+
case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:
|
|
321
|
+
case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:
|
|
322
|
+
case ODataMetadata.ATTRIBUTE_ABSTRACT:
|
|
323
|
+
case ODataMetadata.ATTRIBUTE_IS_FLAGS:
|
|
324
|
+
return this.propertyValueToBoolean(this.getAttributeValue(attributes, field.name));
|
|
325
|
+
case ODataMetadata.ATTRIBUTE_VALUE:
|
|
326
|
+
case ODataMetadata.ATTRIBUTE_MAX_LENGTH:
|
|
327
|
+
case ODataMetadata.ATTRIBUTE_PRECISION:
|
|
328
|
+
case ODataMetadata.ATTRIBUTE_SCALE:
|
|
329
|
+
return this.propertyValueToNumber(this.getAttributeValue(attributes, field.name));
|
|
330
|
+
default:
|
|
331
|
+
throw new Error('Unknwon attribute:' + field.name);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
getFieldValueByTag(field, element) {
|
|
335
|
+
switch (field.name) {
|
|
336
|
+
case ODataMetadata.TAG_INCLUDE:
|
|
337
|
+
return this.getObjects(element, field.name, [
|
|
338
|
+
new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),
|
|
339
|
+
new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
|
|
340
|
+
]);
|
|
341
|
+
case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:
|
|
342
|
+
return this.getObjects(element, field.name, [
|
|
343
|
+
new Field(ODataMetadata.ATTRIBUTE_TERM_NAMESPACE, FieldType.ATTRIBUTE),
|
|
344
|
+
new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
|
|
345
|
+
new Field(ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE, FieldType.ATTRIBUTE),
|
|
346
|
+
]);
|
|
347
|
+
case ODataMetadata.TAG_TERM:
|
|
348
|
+
return this.getObjects(element, field.name, [
|
|
349
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
350
|
+
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
351
|
+
new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),
|
|
352
|
+
new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),
|
|
353
|
+
new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),
|
|
354
|
+
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
355
|
+
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
356
|
+
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
357
|
+
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
358
|
+
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
359
|
+
]);
|
|
360
|
+
case ODataMetadata.TAG_ANNOTATIONS:
|
|
361
|
+
return this.getObjects(element, field.name, [
|
|
362
|
+
new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),
|
|
363
|
+
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
364
|
+
new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
|
|
365
|
+
]);
|
|
366
|
+
case ODataMetadata.TAG_ANNOTATION:
|
|
367
|
+
return this.getObjects(element, field.name, [
|
|
368
|
+
new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),
|
|
369
|
+
new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
|
|
370
|
+
]);
|
|
371
|
+
case ODataMetadata.TAG_ENUM_TYPE:
|
|
372
|
+
return this.getObjects(element, field.name, [
|
|
373
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
374
|
+
new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),
|
|
375
|
+
new Field(ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE),
|
|
376
|
+
new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),
|
|
377
|
+
]);
|
|
378
|
+
case ODataMetadata.TAG_COMPLEX_TYPE:
|
|
379
|
+
return this.getObjects(element, field.name, [
|
|
380
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
381
|
+
new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),
|
|
382
|
+
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),
|
|
383
|
+
new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),
|
|
384
|
+
new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),
|
|
385
|
+
new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),
|
|
386
|
+
]);
|
|
387
|
+
case ODataMetadata.TAG_ENTITY_TYPE:
|
|
388
|
+
return this.getObjects(element, field.name, [
|
|
389
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
390
|
+
new Field(ODataMetadata.TAG_KEY, FieldType.TAG),
|
|
391
|
+
new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),
|
|
392
|
+
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),
|
|
393
|
+
new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),
|
|
394
|
+
new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),
|
|
395
|
+
new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),
|
|
396
|
+
new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),
|
|
397
|
+
]);
|
|
398
|
+
case ODataMetadata.TAG_FUNCTION:
|
|
399
|
+
return this.getObjects(element, field.name, [
|
|
400
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
401
|
+
new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),
|
|
402
|
+
new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),
|
|
403
|
+
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE),
|
|
404
|
+
new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),
|
|
405
|
+
new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),
|
|
406
|
+
]);
|
|
407
|
+
case ODataMetadata.TAG_MEMBER:
|
|
408
|
+
return this.getObjects(element, field.name, [
|
|
409
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
410
|
+
new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),
|
|
411
|
+
]);
|
|
412
|
+
case ODataMetadata.TAG_PROPERTY:
|
|
413
|
+
return this.getObjects(element, field.name, [
|
|
414
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
415
|
+
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
416
|
+
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
417
|
+
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
418
|
+
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
419
|
+
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
420
|
+
new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),
|
|
421
|
+
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
422
|
+
new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),
|
|
423
|
+
]);
|
|
424
|
+
case ODataMetadata.TAG_KEY:
|
|
425
|
+
return this.getObject(element, field.name, [
|
|
426
|
+
new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),
|
|
427
|
+
]);
|
|
428
|
+
case ODataMetadata.TAG_PROPERTY_REF:
|
|
429
|
+
return this.getObjects(element, field.name, [
|
|
430
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
431
|
+
new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
|
|
432
|
+
]);
|
|
433
|
+
case ODataMetadata.TAG_NAVIGATION_PROPERTY:
|
|
434
|
+
return this.getObjects(element, field.name, [
|
|
435
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
436
|
+
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
437
|
+
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
438
|
+
new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),
|
|
439
|
+
new Field(ODataMetadata.ATTRIBUTE_CONTAINS_TARGET, FieldType.ATTRIBUTE),
|
|
440
|
+
new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),
|
|
441
|
+
new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),
|
|
442
|
+
]);
|
|
443
|
+
case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:
|
|
444
|
+
return this.getObjects(element, field.name, [
|
|
445
|
+
new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),
|
|
446
|
+
new Field(ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY, FieldType.ATTRIBUTE),
|
|
447
|
+
]);
|
|
448
|
+
case ODataMetadata.TAG_ON_DELETE:
|
|
449
|
+
return this.getObject(element, field.name, [
|
|
450
|
+
new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),
|
|
451
|
+
]);
|
|
452
|
+
case ODataMetadata.TAG_PARAMETER:
|
|
453
|
+
return this.getObjects(element, field.name, [
|
|
454
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
455
|
+
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
456
|
+
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
457
|
+
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
458
|
+
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
459
|
+
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
460
|
+
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
461
|
+
]);
|
|
462
|
+
case ODataMetadata.TAG_RETURN_TYPE:
|
|
463
|
+
return this.getObject(element, field.name, [
|
|
464
|
+
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
465
|
+
new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
|
|
466
|
+
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
467
|
+
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
468
|
+
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
469
|
+
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
470
|
+
]);
|
|
471
|
+
case ODataMetadata.TAG_ACTION:
|
|
472
|
+
return this.getObjects(element, field.name, [
|
|
473
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
474
|
+
new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),
|
|
475
|
+
new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),
|
|
476
|
+
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE),
|
|
477
|
+
new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),
|
|
478
|
+
]);
|
|
479
|
+
case ODataMetadata.TAG_ENTITY_CONTAINER:
|
|
480
|
+
return this.getObject(element, field.name, [
|
|
481
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
482
|
+
new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),
|
|
483
|
+
new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),
|
|
484
|
+
new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),
|
|
485
|
+
new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),
|
|
486
|
+
new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),
|
|
487
|
+
]);
|
|
488
|
+
case ODataMetadata.TAG_ENTITY_SET:
|
|
489
|
+
return this.getObjects(element, field.name, [
|
|
490
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
491
|
+
new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),
|
|
492
|
+
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG),
|
|
493
|
+
new Field(ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE),
|
|
494
|
+
]);
|
|
495
|
+
case ODataMetadata.TAG_SINGLETON:
|
|
496
|
+
return this.getObjects(element, field.name, [
|
|
497
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
498
|
+
new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
|
|
499
|
+
new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG),
|
|
500
|
+
]);
|
|
501
|
+
case ODataMetadata.TAG_FUNCTION_IMPORT:
|
|
502
|
+
return this.getObjects(element, field.name, [
|
|
503
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
504
|
+
new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),
|
|
505
|
+
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),
|
|
506
|
+
new Field(ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE),
|
|
507
|
+
]);
|
|
508
|
+
case ODataMetadata.TAG_ACTION_IMPORT:
|
|
509
|
+
return this.getObjects(element, field.name, [
|
|
510
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
511
|
+
new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),
|
|
512
|
+
new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),
|
|
513
|
+
]);
|
|
514
|
+
case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:
|
|
515
|
+
return this.getObjects(element, field.name, [
|
|
516
|
+
new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),
|
|
517
|
+
new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),
|
|
518
|
+
]);
|
|
519
|
+
case ODataMetadata.TAG_TYPE_DEFINITION:
|
|
520
|
+
return this.getObjects(element, field.name, [
|
|
521
|
+
new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
|
|
522
|
+
new Field(ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE),
|
|
523
|
+
new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
|
|
524
|
+
new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
|
|
525
|
+
new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
|
|
526
|
+
new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),
|
|
527
|
+
new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
|
|
528
|
+
new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
|
|
529
|
+
]);
|
|
530
|
+
default:
|
|
531
|
+
throw new Error('Unknwon tag:' + field.name);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
getAttributeValue(attributes, attributeName) {
|
|
535
|
+
const attribute = attributes.getNamedItem(attributeName);
|
|
536
|
+
return attribute !== null && attribute.nodeValue
|
|
537
|
+
? attribute.nodeValue
|
|
538
|
+
: undefined;
|
|
539
|
+
}
|
|
540
|
+
propertyValueToNumber(attributeValue) {
|
|
541
|
+
return attributeValue !== undefined ? Number(attributeValue) : undefined;
|
|
542
|
+
}
|
|
543
|
+
propertyValueToBoolean(attributeValue) {
|
|
544
|
+
return attributeValue !== undefined ? attributeValue === 'true' : false;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
export { ODataMetadata };
|
|
548
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc3BvbnNlcy9tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEdBQ2YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixRQUFRLEdBQ1QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxPQUFPLEVBQ1AsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUNMLFdBQVcsRUFDWCxzQkFBc0IsRUFDdEIsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osWUFBWSxFQUNaLHlCQUF5QixHQUMxQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFB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QyxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxRSxDQUFDOztTQWx4QlUsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENzZGxBY3Rpb24sXG4gIENzZGxBY3Rpb25JbXBvcnQsXG4gIENzZGxGdW5jdGlvbixcbiAgQ3NkbEZ1bmN0aW9uSW1wb3J0LFxuICBDc2RsUGFyYW1ldGVyLFxuICBDc2RsUmV0dXJuVHlwZSxcbn0gZnJvbSAnLi9jc2RsL2NzZGwtZnVuY3Rpb24tYWN0aW9uJztcbmltcG9ydCB7XG4gIENzZGxBbm5vdGF0aW9uLFxuICBDc2RsQW5ub3RhdGlvbnMsXG4gIENzZGxUZXJtLFxufSBmcm9tICcuL2NzZGwvY3NkbC1hbm5vdGF0aW9uJztcbmltcG9ydCB7XG4gIENzZGxDb21wbGV4VHlwZSxcbiAgQ3NkbEVudGl0eVR5cGUsXG4gIENzZGxLZXksXG4gIENzZGxQcm9wZXJ0eVJlZixcbn0gZnJvbSAnLi9jc2RsL2NzZGwtc3RydWN0dXJlZC10eXBlJztcbmltcG9ydCB7IENzZGxFbnVtTWVtYmVyLCBDc2RsRW51bVR5cGUgfSBmcm9tICcuL2NzZGwvY3NkbC1lbnVtLXR5cGUnO1xuaW1wb3J0IHtcbiAgQ3NkbEluY2x1ZGUsXG4gIENzZGxJbmNsdWRlQW5ub3RhdGlvbnMsXG4gIENzZGxSZWZlcmVuY2UsXG59IGZyb20gJy4vY3NkbC9jc2RsLXJlZmVyZW5jZSc7XG5pbXBvcnQge1xuICBDc2RsTmF2aWdhdGlvblByb3BlcnR5LFxuICBDc2RsT25EZWxldGUsXG4gIENzZGxQcm9wZXJ0eSxcbiAgQ3NkbFJlZmVyZW50aWFsQ29uc3RyYWludCxcbn0gZnJvbSAnLi9jc2RsL2NzZGwtc3RydWN0dXJhbC1wcm9wZXJ0eSc7XG5cbmltcG9ydCB7IENzZGxFbnRpdHlDb250YWluZXIgfSBmcm9tICcuL2NzZGwvY3NkbC1lbnRpdHktY29udGFpbmVyJztcbmltcG9ydCB7IENzZGxFbnRpdHlTZXQgfSBmcm9tICcuL2NzZGwvY3NkbC1lbnRpdHktc2V0JztcbmltcG9ydCB7IENzZGxOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIH0gZnJvbSAnLi9jc2RsL2NzZGwtbmF2aWdhdGlvbi1wcm9wZXJ0eS1iaW5kaW5nJztcbmltcG9ydCB7IENzZGxTY2hlbWEgfSBmcm9tICcuL2NzZGwvY3NkbC1zY2hlbWEnO1xuaW1wb3J0IHsgQ3NkbFNpbmdsZXRvbiB9IGZyb20gJy4vY3NkbC9jc2RsLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBDc2RsVHlwZURlZmluaXRpb24gfSBmcm9tICcuL2NzZGwvY3NkbC10eXBlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgVkVSU0lPTl80XzAgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5lbnVtIEZpZWxkVHlwZSB7XG4gIEFUVFJJQlVURSxcbiAgVEFHLFxufVxuXG5jbGFzcyBGaWVsZCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBmaWVsZFR5cGU6IEZpZWxkVHlwZSkge31cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhTWV0YWRhdGEge1xuICAvLyBUQUdTXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19FRE1YID0gJ2VkbXg6RWRteCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19EQVRBX1NFUlZJQ0VTID0gJ2VkbXg6RGF0YVNlcnZpY2VzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1JFRkVSRU5DRSA9ICdlZG14OlJlZmVyZW5jZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19JTkNMVURFID0gJ2VkbXg6SW5jbHVkZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19JTkNMVURFX0FOTk9UQVRJT05TID0gJ2VkbXg6SW5jbHVkZUFubm90YXRpb25zJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1RFUk0gPSAnVGVybSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19BTk5PVEFUSU9OUyA9ICdBbm5vdGF0aW9ucyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19BTk5PVEFUSU9OID0gJ0Fubm90YXRpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfU0NIRU1BID0gJ1NjaGVtYSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19FTlVNX1RZUEUgPSAnRW51bVR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfTUVNQkVSID0gJ01lbWJlcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19DT01QTEVYX1RZUEUgPSAnQ29tcGxleFR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRU5USVRZX1RZUEUgPSAnRW50aXR5VHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19QUk9QRVJUWSA9ICdQcm9wZXJ0eSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19LRVkgPSAnS2V5JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1BST1BFUlRZX1JFRiA9ICdQcm9wZXJ0eVJlZic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19OQVZJR0FUSU9OX1BST1BFUlRZID0gJ05hdmlnYXRpb25Qcm9wZXJ0eSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19SRUZFUkVOVElBTF9DT05TVFJBSU5UID0gJ1JlZmVyZW50aWFsQ29uc3RyYWludCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19PTl9ERUxFVEUgPSAnT25EZWxldGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRlVOQ1RJT04gPSAnRnVuY3Rpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUkVUVVJOX1RZUEUgPSAnUmV0dXJuVHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19QQVJBTUVURVIgPSAnUGFyYW1ldGVyJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0FDVElPTiA9ICdBY3Rpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRU5USVRZX0NPTlRBSU5FUiA9ICdFbnRpdHlDb250YWluZXInO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRU5USVRZX1NFVCA9ICdFbnRpdHlTZXQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfU0lOR0xFVE9OID0gJ1NpbmdsZXRvbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19GVU5DVElPTl9JTVBPUlQgPSAnRnVuY3Rpb25JbXBvcnQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQUNUSU9OX0lNUE9SVCA9ICdBY3Rpb25JbXBvcnQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfTkFWSUdBVElPTl9QUk9QRVJUWV9CSU5ESU5HID1cbiAgICAnTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19UWVBFX0RFRklOSVRJT04gPSAnVHlwZURlZmluaXRpb24nO1xuXG4gIC8vIEFUVFJJQlVURVNcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1ZFUlNJT04gPSAnVmVyc2lvbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9VUkkgPSAnVXJpJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0FMSUFTID0gJ0FsaWFzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX05BTUVTUEFDRSA9ICdOYW1lc3BhY2UnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVEVSTV9OQU1FU1BBQ0UgPSAnVGVybU5hbWVzcGFjZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9RVUFMSUZJRVIgPSAnUXVhbGlmaWVyJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1RBUkdFVF9OQU1FU1BBQ0UgPSAnVGFyZ2V0TmFtZXNwYWNlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1RFUk0gPSAnVGVybSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9OQU1FID0gJ05hbWUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVkFMVUUgPSAnVmFsdWUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfQkFTRV9UWVBFID0gJ0Jhc2VUeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX09QRU5fVFlQRSA9ICdPcGVuVHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9UWVBFID0gJ1R5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfTlVMTEFCTEUgPSAnTnVsbGFibGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICdNYXhMZW5ndGgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUFJFQ0lTSU9OID0gJ1ByZWNpc2lvbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9TQ0FMRSA9ICdTY2FsZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9VTklDT0RFID0gJ1VuaWNvZGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfU1JJRCA9ICdTUklEJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0RFRkFVTFRfVkFMVUUgPSAnRGVmYXVsdFZhbHVlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1BBUlRORVIgPSAnUGFydG5lcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9QUk9QRVJUWSA9ICdQcm9wZXJ0eSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9SRUZFUkVOQ0VEX1BST1BFUlRZID0gJ1JlZmVyZW5jZWRQcm9wZXJ0eSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9IQVNfU1RSRUFNID0gJ0hhc1N0cmVhbSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9DT05UQUlOU19UQVJHRVQgPSAnQ29udGFpbnNUYXJnZXQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSVNfQk9VTkQgPSAnSXNCb3VuZCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9FTlRJVFlfU0VUX1BBVEggPSAnRW50aXR5U2V0UGF0aCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9JU19DT01QT1NBQkxFID0gJ0lzQ29tcG9zYWJsZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9FTlRJVFlfVFlQRSA9ICdFbnRpdHlUeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1BBVEggPSAnUGF0aCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9UQVJHRVQgPSAnVGFyZ2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0ZVTkNUSU9OID0gJ0Z1bmN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0FDVElPTiA9ICdBY3Rpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfRU5USVRZX1NFVCA9ICdFbnRpdHlTZXQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSU5DTFVERV9JTl9TRVJWSUNFX0RPQ1VNRU5UID1cbiAgICAnSW5jbHVkZUluU2VydmljZURvY3VtZW50JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0FCU1RSQUNUID0gJ0Fic3RyYWN0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1VOREVSTFlJTkdfVFlQRSA9ICdVbmRlcmx5aW5nVHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9JU19GTEFHUyA9ICdJc0ZsYWdzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0VYVEVORFMgPSAnRXh0ZW5kcyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9CQVNFX1RFUk0gPSAnQmFzZVRlcm0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfQVBQTElFU19UTyA9ICdBcHBsaWVzVG8nO1xuXG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZWZlcmVuY2VzOiBDc2RsUmVmZXJlbmNlW107XG4gIHB1YmxpYyByZWFkb25seSBzY2hlbWFzOiBDc2RsU2NoZW1hW107XG5cbiAgY29uc3RydWN0b3IoeG1sOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VyOiBET01QYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICBjb25zdCBkb2N1bWVudDogRG9jdW1lbnQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbCwgJ3RleHQveG1sJyk7XG5cbiAgICAgIHRoaXMuY2hlY2tWZXJzaW9uKGRvY3VtZW50KTtcblxuICAgICAgdGhpcy52ZXJzaW9uID0gdGhpcy5nZXRGaWVsZFZhbHVlQnlBdHRyaWJ1dGUoXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9WRVJTSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dHJpYnV0ZXNcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHRoaXMuZ2V0T2JqZWN0cyhcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgICBPRGF0YU1ldGFkYXRhLlRBR19SRUZFUkVOQ0UsXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVVJJLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfSU5DTFVERSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0lOQ0xVREVfQU5OT1RBVElPTlMsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF0YVNlcnZpY2VzOiBFbGVtZW50ID1cbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFxuICAgICAgICAgIE9EYXRhTWV0YWRhdGEuVEFHX0RBVEFfU0VSVklDRVNcbiAgICAgICAgKVswXTtcbiAgICAgIHRoaXMuc2NoZW1hcyA9IHRoaXMuZ2V0T2JqZWN0cyhkYXRhU2VydmljZXMsIE9EYXRhTWV0YWRhdGEuVEFHX1NDSEVNQSwgW1xuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRVNQQUNFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FMSUFTLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0VOVU1fVFlQRSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19DT01QTEVYX1RZUEUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX1RZUEUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfRlVOQ1RJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9DT05UQUlORVIsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfVFlQRV9ERUZJTklUSU9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1RFUk0sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTlMsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcGFyc2UgbWV0YWRhdGEsICcgKyBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrVmVyc2lvbihkb2N1bWVudDogRG9jdW1lbnQpIHtcbiAgICAvLyBjaGVjayB2ZXJzaW9uXG4gICAgY29uc3QgYXR0cmlidXRlczogTmFtZWROb2RlTWFwID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgaWYgKCFhdHRyaWJ1dGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09EYXRhIHZlcnNpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbWV0YWRhdGEnKTtcbiAgICB9XG4gICAgY29uc3QgYXR0cjogQXR0ciB8IG51bGwgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnVmVyc2lvbicpO1xuICAgIGlmIChhdHRyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09EYXRhIHZlcnNpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbWV0YWRhdGEnKTtcbiAgICB9XG4gICAgY29uc3Qgb2RhdGFWZXJzaW9uID0gYXR0cj8ubm9kZVZhbHVlO1xuICAgIGlmIChvZGF0YVZlcnNpb24gIT09IFZFUlNJT05fNF8wKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09EYXRhIHZlcnNpb24gXCInICsgb2RhdGFWZXJzaW9uICsgJ1wiIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0T2JqZWN0cyhcbiAgICBwYXJlbnRFbGVtZW50OiBFbGVtZW50LFxuICAgIHRhZzogc3RyaW5nLFxuICAgIGZpZWxkTmFtZXM6IEZpZWxkW11cbiAgKTogYW55W10ge1xuICAgIGxldCBvYmplY3RzOiBhbnlbXSA9IFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW46IEhUTUxDb2xsZWN0aW9uID0gcGFyZW50RWxlbWVudC5jaGlsZHJlbjtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gY2hpbGRyZW4uaXRlbShpbmRleCk7XG5cbiAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVOYW1lICE9PSB0YWcpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IGVsZW1lbnQuYXR0cmlidXRlcztcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWVzOiBhbnlbXSA9IHRoaXMuZ2V0RmllbGRWYWx1ZXMoXG4gICAgICAgIGZpZWxkTmFtZXMsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1JFRkVSRU5DRTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFJlZmVyZW5jZShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0lOQ0xVREU6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKG5ldyBDc2RsSW5jbHVkZShmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19JTkNMVURFX0FOTk9UQVRJT05TOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsSW5jbHVkZUFubm90YXRpb25zKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19URVJNOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsVGVybShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzddLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s4XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbOV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT05TOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsQW5ub3RhdGlvbnMoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdLCBmaWVsZFZhbHVlc1syXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKG5ldyBDc2RsQW5ub3RhdGlvbihmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19TQ0hFTUE6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxTY2hlbWEoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzZdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s3XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbOF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzldLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzExXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5VTV9UWVBFOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRW51bVR5cGUoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19DT01QTEVYX1RZUEU6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxDb21wbGV4VHlwZShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX1RZUEU6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxFbnRpdHlUeXBlKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbN11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRnVuY3Rpb24oXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX01FTUJFUjpcbiAgICAgICAgICBvYmplY3RzLnB1c2gobmV3IENzZGxFbnVtTWVtYmVyKGZpZWxkVmFsdWVzWzBdLCBmaWVsZFZhbHVlc1sxXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsUHJvcGVydHkoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzZdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s3XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbOF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZX1JFRjpcbiAgICAgICAgICBvYmplY3RzLnB1c2gobmV3IENzZGxQcm9wZXJ0eVJlZihmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsTmF2aWdhdGlvblByb3BlcnR5KFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUkVGRVJFTlRJQUxfQ09OU1RSQUlOVDpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFJlZmVyZW50aWFsQ29uc3RyYWludChmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19QQVJBTUVURVI6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxQYXJhbWV0ZXIoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzZdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BQ1RJT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxBY3Rpb24oXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX1NFVDpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEVudGl0eVNldChcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1NJTkdMRVRPTjpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFNpbmdsZXRvbihmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0sIGZpZWxkVmFsdWVzWzJdKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRlVOQ1RJT05fSU1QT1JUOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRnVuY3Rpb25JbXBvcnQoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BQ1RJT05fSU1QT1JUOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsQWN0aW9uSW1wb3J0KGZpZWxkVmFsdWVzWzBdLCBmaWVsZFZhbHVlc1sxXSwgZmllbGRWYWx1ZXNbMl0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkc6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKGZpZWxkVmFsdWVzWzBdLCBmaWVsZFZhbHVlc1sxXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1RZUEVfREVGSU5JVElPTjpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFR5cGVEZWZpbml0aW9uKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbN11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbndvbiB0YWc6JyArIHRhZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdHM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0T2JqZWN0KFxuICAgIHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZmllbGROYW1lczogRmllbGRbXVxuICApOiBhbnkge1xuICAgIGxldCBvYmplY3Q6IGFueTtcblxuICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MQ29sbGVjdGlvbiA9IHBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG4gICAgbGV0IGVsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQgfCBudWxsO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5pdGVtKGluZGV4KT8ubm9kZU5hbWUgPT09IHRhZykge1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG9uZSAnICsgdGFnKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50ID0gY2hpbGRyZW4uaXRlbShpbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBOYW1lZE5vZGVNYXAgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCBmaWVsZFZhbHVlczogYW55W10gPSB0aGlzLmdldEZpZWxkVmFsdWVzKFxuICAgICAgICBmaWVsZE5hbWVzLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19LRVk6XG4gICAgICAgICAgb2JqZWN0ID0gbmV3IENzZGxLZXkoZmllbGRWYWx1ZXNbMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1JFVFVSTl9UWVBFOlxuICAgICAgICAgIG9iamVjdCA9IG5ldyBDc2RsUmV0dXJuVHlwZShcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1s1XVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX0NPTlRBSU5FUjpcbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ3NkbEVudGl0eUNvbnRhaW5lcihcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1s1XVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfT05fREVMRVRFOlxuICAgICAgICAgIG9iamVjdCA9IG5ldyBDc2RsT25EZWxldGUoZmllbGRWYWx1ZXNbMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbndvbiB0YWc6JyArIHRhZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWVsZFZhbHVlcyhcbiAgICBmaWVsZHM6IEZpZWxkW10sXG4gICAgYXR0cmlidXRlczogTmFtZWROb2RlTWFwLFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRcbiAgKTogYW55W10ge1xuICAgIGNvbnN0IGZpZWxkVmFsdWVzOiBhbnlbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5UQUcpIHtcbiAgICAgICAgZmllbGRWYWx1ZXMucHVzaCh0aGlzLmdldEZpZWxkVmFsdWVCeVRhZyhmaWVsZCwgZWxlbWVudCkpO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5BVFRSSUJVVEUpIHtcbiAgICAgICAgZmllbGRWYWx1ZXMucHVzaCh0aGlzLmdldEZpZWxkVmFsdWVCeUF0dHJpYnV0ZShmaWVsZCwgYXR0cmlidXRlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZpZWxkIHR5cGU6ICcgKyBmaWVsZC5maWVsZFR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWVsZFZhbHVlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWVsZFZhbHVlQnlBdHRyaWJ1dGUoXG4gICAgZmllbGQ6IEZpZWxkLFxuICAgIGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcFxuICApOiBhbnkge1xuICAgIHN3aXRjaCAoZmllbGQubmFtZSkge1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9WRVJTSU9OOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9VUkk6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUVTUEFDRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUxJQVM6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RFUk1fTkFNRVNQQUNFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9URVJNOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVI6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVF9OQU1FU1BBQ0U6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0RFRkFVTFRfVkFMVUU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBUlRORVI6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BST1BFUlRZOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9SRUZFUkVOQ0VEX1BST1BFUlRZOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RZUEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVRfUEFUSDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1RZUEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBVEg6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRlVOQ1RJT046XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FDVElPTjpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1NFVDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5ERVJMWUlOR19UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FWFRFTkRTOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RFUk06XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FQUExJRVNfVE86XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZXMsIGZpZWxkLm5hbWUpO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5JQ09ERTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfT1BFTl9UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9IQVNfU1RSRUFNOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19CT1VORDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQ09NUE9TQUJMRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQ09OVEFJTlNfVEFSR0VUOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JTkNMVURFX0lOX1NFUlZJQ0VfRE9DVU1FTlQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FCU1RSQUNUOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19GTEFHUzpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHlWYWx1ZVRvQm9vbGVhbihcbiAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZXMsIGZpZWxkLm5hbWUpXG4gICAgICAgICk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1ZBTFVFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9NQVhfTEVOR1RIOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUkVDSVNJT046XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVZhbHVlVG9OdW1iZXIoXG4gICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVzLCBmaWVsZC5uYW1lKVxuICAgICAgICApO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtud29uIGF0dHJpYnV0ZTonICsgZmllbGQubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEZpZWxkVmFsdWVCeVRhZyhmaWVsZDogRmllbGQsIGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnlbXSB7XG4gICAgc3dpdGNoIChmaWVsZC5uYW1lKSB7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0lOQ0xVREU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FU1BBQ0UsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BTElBUywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19JTkNMVURFX0FOTk9UQVRJT05TOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9URVJNX05BTUVTUEFDRSxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEVcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1RFUk06XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0JBU0VfVEVSTSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0RFRkFVTFRfVkFMVUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BUFBMSUVTX1RPLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTlVMTEFCTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9NQVhfTEVOR1RILCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJFQ0lTSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU0NBTEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TUklELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT05TOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVEFSR0VULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1FVQUxJRklFUiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVEVSTSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1FVQUxJRklFUiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19FTlVNX1RZUEU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfTUVNQkVSLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9VTkRFUkxZSU5HX1RZUEUsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfRkxBR1MsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQ09NUExFWF9UWVBFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0JBU0VfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX09QRU5fVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FCU1RSQUNULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9UWVBFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0tFWSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0JBU0VfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX09QRU5fVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0hBU19TVFJFQU0sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BQlNUUkFDVCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19GVU5DVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19SRVRVUk5fVFlQRSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lTX0JPVU5ELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FTlRJVFlfU0VUX1BBVEgsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQ09NUE9TQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1BBUkFNRVRFUiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19NRU1CRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVkFMVUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFk6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05VTExBQkxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5JQ09ERSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0tFWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0KGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFlfUkVGLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZX1JFRjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BTElBUywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBUlRORVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0NPTlRBSU5TX1RBUkdFVCxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEVcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19SRUZFUkVOVElBTF9DT05TVFJBSU5ULCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfT05fREVMRVRFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1JFRkVSRU5USUFMX0NPTlNUUkFJTlQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUk9QRVJUWSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUkVGRVJFTkNFRF9QUk9QRVJUWSxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEVcbiAgICAgICAgICApLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfT05fREVMRVRFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3QoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BQ1RJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUEFSQU1FVEVSOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX01BWF9MRU5HVEgsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUkVDSVNJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TQ0FMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUkVUVVJOX1RZUEU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdChlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX01BWF9MRU5HVEgsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUkVDSVNJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TQ0FMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1JFVFVSTl9UWVBFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQk9VTkQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVRfUEFUSCxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEVcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19QQVJBTUVURVIsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX0NPTlRBSU5FUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0KGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VYVEVORFMsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfU0VULCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfU0lOR0xFVE9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfRlVOQ1RJT05fSU1QT1JULCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OX0lNUE9SVCwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfU0VUOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkcsXG4gICAgICAgICAgICBGaWVsZFR5cGUuVEFHXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JTkNMVURFX0lOX1NFUlZJQ0VfRE9DVU1FTlQsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1NJTkdMRVRPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkcsXG4gICAgICAgICAgICBGaWVsZFR5cGUuVEFHXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OX0lNUE9SVDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9GVU5DVElPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lOQ0xVREVfSU5fU0VSVklDRV9ET0NVTUVOVCxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEVcbiAgICAgICAgICApLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OX0lNUE9SVDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BQ1RJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FTlRJVFlfU0VULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX05BVklHQVRJT05fUFJPUEVSVFlfQklORElORzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBVEgsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9UQVJHRVQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfVFlQRV9ERUZJTklUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5ERVJMWUlOR19UWVBFLFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURVxuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX01BWF9MRU5HVEgsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QUkVDSVNJT04sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TQ0FMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VOSUNPREUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TUklELCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtud29uIHRhZzonICsgZmllbGQubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCwgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXR0cmlidXRlOiBBdHRyIHwgbnVsbCA9IGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKGF0dHJpYnV0ZU5hbWUpO1xuICAgIHJldHVybiBhdHRyaWJ1dGUgIT09IG51bGwgJiYgYXR0cmlidXRlLm5vZGVWYWx1ZVxuICAgICAgPyBhdHRyaWJ1dGUubm9kZVZhbHVlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlVG9OdW1iZXIoYXR0cmlidXRlVmFsdWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUgIT09IHVuZGVmaW5lZCA/IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvcGVydHlWYWx1ZVRvQm9vbGVhbihhdHRyaWJ1dGVWYWx1ZT86IHN0cmluZykge1xuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gYXR0cmlidXRlVmFsdWUgPT09ICd0cnVlJyA6IGZhbHNlO1xuICB9XG59XG4iXX0=
|