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