ng2-rest 18.0.24 → 19.0.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/assets/shared/shared_folder_info.txt +1 -1
- package/firedev.jsonc +44 -0
- package/package.json +2 -2
- package/taon.jsonc +52 -0
- package/tmp-environment.json +24 -3
- package/browser/esm2022/lib/content-type.mjs +0 -13
- package/browser/esm2022/lib/cookie.mjs +0 -29
- package/browser/esm2022/lib/helpers.mjs +0 -24
- package/browser/esm2022/lib/index.mjs +0 -13
- package/browser/esm2022/lib/mapping.mjs +0 -250
- package/browser/esm2022/lib/models.mjs +0 -172
- package/browser/esm2022/lib/other/simple-resource.mjs +0 -118
- package/browser/esm2022/lib/params.mjs +0 -279
- package/browser/esm2022/lib/request-cache.mjs +0 -101
- package/browser/esm2022/lib/resource-service.mjs +0 -220
- package/browser/esm2022/lib/rest-headers.mjs +0 -129
- package/browser/esm2022/lib/rest-request.mjs +0 -325
- package/browser/esm2022/lib/rest.class.mjs +0 -120
- package/browser/esm2022/ng2-rest.mjs +0 -5
- package/browser/esm2022/public-api.mjs +0 -2
- package/client/esm2022/lib/content-type.mjs +0 -13
- package/client/esm2022/lib/cookie.mjs +0 -29
- package/client/esm2022/lib/helpers.mjs +0 -24
- package/client/esm2022/lib/index.mjs +0 -13
- package/client/esm2022/lib/mapping.mjs +0 -250
- package/client/esm2022/lib/models.mjs +0 -172
- package/client/esm2022/lib/other/simple-resource.mjs +0 -118
- package/client/esm2022/lib/params.mjs +0 -279
- package/client/esm2022/lib/request-cache.mjs +0 -101
- package/client/esm2022/lib/resource-service.mjs +0 -220
- package/client/esm2022/lib/rest-headers.mjs +0 -129
- package/client/esm2022/lib/rest-request.mjs +0 -325
- package/client/esm2022/lib/rest.class.mjs +0 -120
- package/client/esm2022/ng2-rest.mjs +0 -5
- package/client/esm2022/public-api.mjs +0 -2
- package/websql/esm2022/lib/content-type.mjs +0 -13
- package/websql/esm2022/lib/cookie.mjs +0 -29
- package/websql/esm2022/lib/helpers.mjs +0 -24
- package/websql/esm2022/lib/index.mjs +0 -13
- package/websql/esm2022/lib/mapping.mjs +0 -250
- package/websql/esm2022/lib/models.mjs +0 -172
- package/websql/esm2022/lib/other/simple-resource.mjs +0 -118
- package/websql/esm2022/lib/params.mjs +0 -279
- package/websql/esm2022/lib/request-cache.mjs +0 -101
- package/websql/esm2022/lib/resource-service.mjs +0 -220
- package/websql/esm2022/lib/rest-headers.mjs +0 -129
- package/websql/esm2022/lib/rest-request.mjs +0 -325
- package/websql/esm2022/lib/rest.class.mjs +0 -120
- package/websql/esm2022/ng2-rest.mjs +0 -5
- package/websql/esm2022/public-api.mjs +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
THIS FILE IS GENERATED. THIS FILE IS GENERATED. THIS FILE IS GENERATED.
|
|
2
2
|
|
|
3
|
-
Assets from this folder are being shipped with this npm package (ng2-rest@18.0.
|
|
3
|
+
Assets from this folder are being shipped with this npm package (ng2-rest@18.0.25)
|
|
4
4
|
created from this project.
|
|
5
5
|
|
|
6
6
|
THIS FILE IS GENERATED.THIS FILE IS GENERATED. THIS FILE IS GENERATED.
|
package/firedev.jsonc
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"resources": ["README.md"],
|
|
3
|
+
"overrided": {
|
|
4
|
+
"dependencies": {},
|
|
5
|
+
"includeAsDev": [],
|
|
6
|
+
"includeOnly": [
|
|
7
|
+
"@types/diff",
|
|
8
|
+
"diff",
|
|
9
|
+
"axios",
|
|
10
|
+
"lodash",
|
|
11
|
+
"@types/lodash",
|
|
12
|
+
"ng2-logger",
|
|
13
|
+
"json5",
|
|
14
|
+
"json10",
|
|
15
|
+
],
|
|
16
|
+
"ignoreDepsPattern": [],
|
|
17
|
+
"linkedFolders": [],
|
|
18
|
+
"npmFixes": [],
|
|
19
|
+
},
|
|
20
|
+
"smartContainerBuildTarget": "",
|
|
21
|
+
"linkedRepos": [],
|
|
22
|
+
"libReleaseOptions": {
|
|
23
|
+
"nodts": false,
|
|
24
|
+
"obscure": false,
|
|
25
|
+
"ugly": false,
|
|
26
|
+
"includeNodeModules": false,
|
|
27
|
+
"cliBuildNoDts": false,
|
|
28
|
+
"cliBuildObscure": false,
|
|
29
|
+
"cliBuildIncludeNodeModules": false,
|
|
30
|
+
"cliBuildUglify": false,
|
|
31
|
+
},
|
|
32
|
+
"smartContainerTarget": "",
|
|
33
|
+
"type": "isomorphic-lib",
|
|
34
|
+
"version": "v16",
|
|
35
|
+
"additionalNpmNames": ["firedev-rest"],
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"private": false,
|
|
38
|
+
"author": {
|
|
39
|
+
"name": "Dariusz Filipiak",
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/darekf77/ng2-rest#readme",
|
|
42
|
+
"keywords": ["isomorphic", "logger", "log", "typescript"],
|
|
43
|
+
"workerPlugins": {},
|
|
44
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng2-rest",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "19.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Dariusz Filipiak"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@types/diff": "~5.2.1",
|
|
15
15
|
"diff": "~4.0.2",
|
|
16
|
-
"axios": "~1.
|
|
16
|
+
"axios": "~1.8.4",
|
|
17
17
|
"lodash": "~4.17.21",
|
|
18
18
|
"@types/lodash": "4.14.92",
|
|
19
19
|
"ng2-logger": "~18.0.27",
|
package/taon.jsonc
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"resources": ["README.md"],
|
|
3
|
+
|
|
4
|
+
"overrided": {
|
|
5
|
+
"dependencies": {},
|
|
6
|
+
"includeAsDev": [],
|
|
7
|
+
|
|
8
|
+
"includeOnly": [
|
|
9
|
+
"@types/diff",
|
|
10
|
+
"diff",
|
|
11
|
+
"axios",
|
|
12
|
+
"lodash",
|
|
13
|
+
"@types/lodash",
|
|
14
|
+
"ng2-logger",
|
|
15
|
+
"json5",
|
|
16
|
+
"json10"
|
|
17
|
+
],
|
|
18
|
+
|
|
19
|
+
"ignoreDepsPattern": [],
|
|
20
|
+
"linkedFolders": [],
|
|
21
|
+
"npmFixes": []
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
"smartContainerBuildTarget": "",
|
|
25
|
+
"linkedRepos": [],
|
|
26
|
+
|
|
27
|
+
"libReleaseOptions": {
|
|
28
|
+
"nodts": false,
|
|
29
|
+
"obscure": false,
|
|
30
|
+
"ugly": false,
|
|
31
|
+
"includeNodeModules": false,
|
|
32
|
+
"cliBuildNoDts": false,
|
|
33
|
+
"cliBuildObscure": false,
|
|
34
|
+
"cliBuildIncludeNodeModules": false,
|
|
35
|
+
"cliBuildUglify": false
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
"smartContainerTarget": "",
|
|
39
|
+
"type": "isomorphic-lib",
|
|
40
|
+
"version": "v18",
|
|
41
|
+
"additionalNpmNames": ["taon-rest"],
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"private": false,
|
|
44
|
+
|
|
45
|
+
"author": {
|
|
46
|
+
"name": "Dariusz Filipiak"
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
"homepage": "https://github.com/darekf77/ng2-rest#readme",
|
|
50
|
+
"keywords": ["isomorphic", "logger", "log", "typescript"],
|
|
51
|
+
"workerPlugins": {}
|
|
52
|
+
}
|
package/tmp-environment.json
CHANGED
|
@@ -3,10 +3,31 @@
|
|
|
3
3
|
"domain": "ng2-rest.example.domain.com",
|
|
4
4
|
"title": "Ng 2 Rest"
|
|
5
5
|
},
|
|
6
|
+
"paths": {},
|
|
7
|
+
"config": {},
|
|
8
|
+
"container": {},
|
|
9
|
+
"ports": {},
|
|
10
|
+
"init": {},
|
|
11
|
+
"build": {
|
|
12
|
+
"pwa": {},
|
|
13
|
+
"watch": false
|
|
14
|
+
},
|
|
15
|
+
"loading": {
|
|
16
|
+
"preAngularBootstrap": {},
|
|
17
|
+
"afterAngularBootstrap": {}
|
|
18
|
+
},
|
|
19
|
+
"release": {
|
|
20
|
+
"cli": {},
|
|
21
|
+
"lib": {},
|
|
22
|
+
"autoReleaseUsingConfig": true,
|
|
23
|
+
"releaseVersionBumpType": "major",
|
|
24
|
+
"releaseType": "manual",
|
|
25
|
+
"targetArtifact": "npm-lib-and-cli-tool"
|
|
26
|
+
},
|
|
27
|
+
"copyToManager": {},
|
|
6
28
|
"buildInfo": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"hash": "86f7da12a7edd2e3353c3175df22f8977cf41e7d"
|
|
29
|
+
"date": "2025-04-18T12:38:54.000Z",
|
|
30
|
+
"hash": "9d8eb4daa3c7433ad5c74d2fa230aa63e292bfdb"
|
|
10
31
|
},
|
|
11
32
|
"currentProjectName": "ng2-rest",
|
|
12
33
|
"currentProjectType": "isomorphic-lib",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { RestHeaders } from "./rest-headers";
|
|
2
|
-
export const CONTENT_TYPE = {
|
|
3
|
-
APPLICATION_JSON: RestHeaders.from({
|
|
4
|
-
'Content-Type': 'application/json',
|
|
5
|
-
'Accept': 'application/json'
|
|
6
|
-
}),
|
|
7
|
-
APPLICATINO_VND_API_JSON: RestHeaders.from({
|
|
8
|
-
'Content-Type': 'application/vnd.api+json',
|
|
9
|
-
'Accept': 'application/vnd.api+json'
|
|
10
|
-
}),
|
|
11
|
-
};
|
|
12
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/content-type.ts
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9jb250ZW50LXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQixnQkFBZ0IsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ2pDLGNBQWMsRUFBRSxrQkFBa0I7UUFDbEMsUUFBUSxFQUFFLGtCQUFrQjtLQUM3QixDQUFDO0lBQ0Ysd0JBQXdCLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztRQUN6QyxjQUFjLEVBQUUsMEJBQTBCO1FBQzFDLFFBQVEsRUFBRSwwQkFBMEI7S0FDckMsQ0FBQztDQUNILENBRUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseURBQXlEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IFJlc3RIZWFkZXJzIH0gZnJvbSBcIi4vcmVzdC1oZWFkZXJzXCI7XG5cblxuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRSA9IHtcbiAgQVBQTElDQVRJT05fSlNPTjogUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gIH0pLFxuICBBUFBMSUNBVElOT19WTkRfQVBJX0pTT046IFJlc3RIZWFkZXJzLmZyb20oe1xuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmFwaStqc29uJyxcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5hcGkranNvbidcbiAgfSksXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvY29udGVudC10eXBlLnRzIl19
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export class Cookie {
|
|
2
|
-
static get Instance() {
|
|
3
|
-
if (!Cookie.__instance) {
|
|
4
|
-
Cookie.__instance = new Cookie();
|
|
5
|
-
}
|
|
6
|
-
return Cookie.__instance;
|
|
7
|
-
}
|
|
8
|
-
constructor() {
|
|
9
|
-
}
|
|
10
|
-
read(name) {
|
|
11
|
-
var result = new RegExp('(?:^|; )' + encodeURIComponent(name) + '=([^;]*)').exec(document.cookie);
|
|
12
|
-
return result ? result[1] : null;
|
|
13
|
-
}
|
|
14
|
-
write(name, value, days) {
|
|
15
|
-
if (!days) {
|
|
16
|
-
days = 365 * 20;
|
|
17
|
-
}
|
|
18
|
-
var date = new Date();
|
|
19
|
-
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
20
|
-
var expires = "; expires=" + date.toUTCString();
|
|
21
|
-
document.cookie = name + "=" + value + expires + "; path=/";
|
|
22
|
-
}
|
|
23
|
-
remove(name) {
|
|
24
|
-
this.write(name, "", -1);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
;
|
|
28
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/cookie.ts
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9jb29raWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLE1BQU07SUFFUixNQUFNLEtBQUssUUFBUTtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsVUFBaUIsQ0FBQztJQUNwQyxDQUFDO0lBR0Q7SUFDQSxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVk7UUFDYixJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLElBQWE7UUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU1RCxJQUFJLE9BQU8sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWhELFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBRUo7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgY2xhc3MgQ29va2llIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IENvb2tpZSB7XG4gICAgICAgIGlmICghQ29va2llLl9faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIENvb2tpZS5fX2luc3RhbmNlID0gbmV3IENvb2tpZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb29raWUuX19pbnN0YW5jZSBhcyBhbnk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9faW5zdGFuY2U7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIHJlYWQobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgUmVnRXhwKCcoPzpefDsgKScgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPShbXjtdKiknKS5leGVjKGRvY3VtZW50LmNvb2tpZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHRbMV0gOiBudWxsO1xuICAgIH1cblxuICAgIHdyaXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZGF5cz86IG51bWJlcikge1xuICAgICAgICBpZiAoIWRheXMpIHtcbiAgICAgICAgICAgIGRheXMgPSAzNjUgKiAyMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG5cbiAgICAgICAgdmFyIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9VVENTdHJpbmcoKTtcblxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgXCI9XCIgKyB2YWx1ZSArIGV4cGlyZXMgKyBcIjsgcGF0aD0vXCI7XG4gICAgfVxuXG4gICAgcmVtb3ZlKG5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLndyaXRlKG5hbWUsIFwiXCIsIC0xKTtcbiAgICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9jb29raWUudHMiXX0=
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { CoreHelpers } from 'tnp-core/browser';
|
|
2
|
-
import { Mapping } from './mapping';
|
|
3
|
-
import { JSON10 } from 'json10/browser';
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
export class Helpers extends CoreHelpers {
|
|
6
|
-
static { this.JSON = JSON10; }
|
|
7
|
-
static get Mapping() {
|
|
8
|
-
return {
|
|
9
|
-
encode(json, mapping) {
|
|
10
|
-
return Mapping.encode(json, mapping);
|
|
11
|
-
},
|
|
12
|
-
decode(json, autodetect = false) {
|
|
13
|
-
return Mapping.decode(json, autodetect);
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
static checkValidUrl(url) {
|
|
18
|
-
let regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
|
|
19
|
-
return regex.test(url);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
;
|
|
23
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/helpers.ts
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L25nMi1yZXN0L3Byb2plY3RzL25nMi1yZXN0L3NyYy9saWIvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsYUFBYTtBQUNiLE1BQU0sT0FBTyxPQUFRLFNBQVEsV0FBVzthQUUvQixTQUFJLEdBQUcsTUFBTSxDQUFDO0lBRXJCLE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU87WUFDTCxNQUFNLENBQWUsSUFBWSxFQUFFLE9BQXdCO2dCQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBWSxFQUFFLFVBQVUsR0FBRyxLQUFLO2dCQUNyQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQ3pDLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBVztRQUM5QixJQUFJLEtBQUssR0FBRyw2RUFBNkUsQ0FBQztRQUMxRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7QUFNRixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9EQUFvRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDb3JlSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgTWFwcGluZyB9IGZyb20gJy4vbWFwcGluZyc7XG5pbXBvcnQgeyBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5cbi8vIEB0cy1pZ25vcmVcbmV4cG9ydCBjbGFzcyBIZWxwZXJzIGV4dGVuZHMgQ29yZUhlbHBlcnMge1xuXG4gIHN0YXRpYyBKU09OID0gSlNPTjEwO1xuXG4gIHN0YXRpYyBnZXQgTWFwcGluZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5jb2RlPFQgPSBGdW5jdGlvbj4oanNvbjogT2JqZWN0LCBtYXBwaW5nOiBNYXBwaW5nLk1hcHBpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIE1hcHBpbmcuZW5jb2RlKGpzb24sIG1hcHBpbmcpO1xuICAgICAgfSxcbiAgICAgIGRlY29kZShqc29uOiBPYmplY3QsIGF1dG9kZXRlY3QgPSBmYWxzZSApOiBNYXBwaW5nLk1hcHBpbmcge1xuICAgICAgICByZXR1cm4gTWFwcGluZy5kZWNvZGUoanNvbiwgYXV0b2RldGVjdClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tWYWxpZFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZWdleCA9IC8oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJSFcXC1cXC9dKSk/LztcbiAgICByZXR1cm4gcmVnZXgudGVzdCh1cmwpO1xuICB9XG5cblxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvaGVscGVycy50cyJdfQ==
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export * from './resource-service';
|
|
2
|
-
export * from './models';
|
|
3
|
-
export * from './mapping';
|
|
4
|
-
export * from './rest.class';
|
|
5
|
-
export * from './rest-headers';
|
|
6
|
-
export * from './helpers';
|
|
7
|
-
export * from './request-cache';
|
|
8
|
-
export * from './content-type';
|
|
9
|
-
export { SimpleResource } from './other/simple-resource';
|
|
10
|
-
export { interpolateParamsToUrl } from './params';
|
|
11
|
-
;
|
|
12
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/index.ts
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVqRCxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtEQUFrRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgKiBmcm9tICcuL3Jlc291cmNlLXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXBwaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzdC5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc3QtaGVhZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0LWNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGVudC10eXBlJztcbmV4cG9ydCB7IFNpbXBsZVJlc291cmNlIH0gZnJvbSAnLi9vdGhlci9zaW1wbGUtcmVzb3VyY2UnO1xuZXhwb3J0IHsgaW50ZXJwb2xhdGVQYXJhbXNUb1VybCB9IGZyb20gJy4vcGFyYW1zJztcblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9pbmRleC50cyJdfQ==
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
import { _ } from 'tnp-core/browser';
|
|
2
|
-
import { Helpers } from 'tnp-core/browser';
|
|
3
|
-
import { walk } from 'lodash-walk-object/browser';
|
|
4
|
-
import { CLASS, SYMBOL } from 'typescript-class-helpers/browser';
|
|
5
|
-
export var Mapping;
|
|
6
|
-
(function (Mapping) {
|
|
7
|
-
function decode(json, autodetect = false) {
|
|
8
|
-
if (_.isUndefined(json)) {
|
|
9
|
-
return void 0;
|
|
10
|
-
}
|
|
11
|
-
let mapping = decodeFromDecorator(_.isArray(json) ? _.first(json) : json, !autodetect);
|
|
12
|
-
if (autodetect) {
|
|
13
|
-
mapping = _.merge(getMappingNaive(json), mapping);
|
|
14
|
-
}
|
|
15
|
-
return mapping;
|
|
16
|
-
}
|
|
17
|
-
Mapping.decode = decode;
|
|
18
|
-
function encode(json, mapping, circular = []) {
|
|
19
|
-
if (_.isString(json) || _.isBoolean(json) || _.isNumber(json)) {
|
|
20
|
-
return json;
|
|
21
|
-
}
|
|
22
|
-
if (mapping['']) {
|
|
23
|
-
const decoratorMapping = getModelsMapping(CLASS.getBy(mapping['']));
|
|
24
|
-
mapping = _.merge(mapping, decoratorMapping);
|
|
25
|
-
}
|
|
26
|
-
let res;
|
|
27
|
-
if (_.isArray(circular) && circular.length > 0) {
|
|
28
|
-
res = setMappingCirc(json, mapping, circular);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
res = setMapping(json, mapping);
|
|
32
|
-
}
|
|
33
|
-
return res;
|
|
34
|
-
}
|
|
35
|
-
Mapping.encode = encode;
|
|
36
|
-
function decodeFromDecorator(json, production = false) {
|
|
37
|
-
const entityClass = CLASS.getFromObject(json);
|
|
38
|
-
const mappings = getModelsMapping(entityClass);
|
|
39
|
-
return mappings;
|
|
40
|
-
}
|
|
41
|
-
function getModelsMapping(entity) {
|
|
42
|
-
if (!_.isFunction(entity) || entity === Object) {
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
|
-
const className = CLASS.getName(entity);
|
|
46
|
-
let enityOWnMapping = _.isArray(entity[SYMBOL.MODELS_MAPPING]) ?
|
|
47
|
-
entity[SYMBOL.MODELS_MAPPING] : [{ '': className }];
|
|
48
|
-
let res = {};
|
|
49
|
-
let parents = enityOWnMapping
|
|
50
|
-
.filter(m => !_.isUndefined(m['']) && m[''] !== className)
|
|
51
|
-
.map(m => m['']);
|
|
52
|
-
enityOWnMapping.reverse().forEach(m => {
|
|
53
|
-
m = _.cloneDeep(m);
|
|
54
|
-
Object.keys(m).forEach(key => {
|
|
55
|
-
const v = m[key];
|
|
56
|
-
const isArr = _.isArray(v);
|
|
57
|
-
const model = isArr ? _.first(v) : v;
|
|
58
|
-
if (parents.includes(model)) {
|
|
59
|
-
m[key] = isArr ? [className] : className;
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
res = _.merge(res, m);
|
|
63
|
-
});
|
|
64
|
-
res[''] = className;
|
|
65
|
-
return res;
|
|
66
|
-
}
|
|
67
|
-
Mapping.getModelsMapping = getModelsMapping;
|
|
68
|
-
function add(o, path, mapping = {}) {
|
|
69
|
-
if (!o || Array.isArray(o) || typeof o !== 'object')
|
|
70
|
-
return;
|
|
71
|
-
const objectClassName = CLASS.getName(Object.getPrototypeOf(o).constructor);
|
|
72
|
-
const resolveClass = CLASS.getBy(objectClassName);
|
|
73
|
-
if (!resolveClass) {
|
|
74
|
-
if (objectClassName !== 'Object') {
|
|
75
|
-
if (Helpers.isBrowser) {
|
|
76
|
-
console.error(`Cannot resolve class "${objectClassName}" while mapping.`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (!mapping[path])
|
|
82
|
-
mapping[path] = CLASS.getName(resolveClass);
|
|
83
|
-
;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* USE ONLY IN DEVELOPMENT
|
|
87
|
-
* @param c
|
|
88
|
-
* @param path
|
|
89
|
-
* @param mapping
|
|
90
|
-
* @param level
|
|
91
|
-
*/
|
|
92
|
-
function getMappingNaive(c, path = '', mapping = {}, level = 0) {
|
|
93
|
-
if (Array.isArray(c)) {
|
|
94
|
-
c.forEach(c => getMappingNaive(c, path, mapping, level));
|
|
95
|
-
return mapping;
|
|
96
|
-
}
|
|
97
|
-
if (++level === 16)
|
|
98
|
-
return;
|
|
99
|
-
add(c, path, mapping);
|
|
100
|
-
for (var p in c) {
|
|
101
|
-
if (c.hasOwnProperty(p)) {
|
|
102
|
-
const v = c[p];
|
|
103
|
-
if (Array.isArray(v) && v.length > 0) { // reducer as impovement
|
|
104
|
-
v.forEach((elem, i) => {
|
|
105
|
-
const currentPaht = [path, p].filter(c => c.trim() != '').join('.');
|
|
106
|
-
getMappingNaive(elem, currentPaht, mapping, level);
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
else if (typeof v === 'object') {
|
|
110
|
-
const currentPaht = [path, p].filter(c => c.trim() != '').join('.');
|
|
111
|
-
add(v, currentPaht, mapping);
|
|
112
|
-
getMappingNaive(v, currentPaht, mapping, level);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return mapping;
|
|
117
|
-
}
|
|
118
|
-
function getMappingPathFrom(pathLodhas) {
|
|
119
|
-
if (!_.isString(pathLodhas)) {
|
|
120
|
-
return void 0;
|
|
121
|
-
}
|
|
122
|
-
const regex = /\[([0-9a-zA-Z]|\'|\")*\]/g;
|
|
123
|
-
pathLodhas = pathLodhas
|
|
124
|
-
.replace(regex, '')
|
|
125
|
-
.replace('..', '.');
|
|
126
|
-
if (pathLodhas.startsWith('.')) {
|
|
127
|
-
pathLodhas = pathLodhas.slice(1);
|
|
128
|
-
}
|
|
129
|
-
return pathLodhas;
|
|
130
|
-
}
|
|
131
|
-
function setMappingCirc(json, mapping = {}, circular = []) {
|
|
132
|
-
const mainClassFn = !_.isArray(json) && CLASS.getBy(mapping['']);
|
|
133
|
-
walk.Object(json, (v, lodashPath, changeValue) => {
|
|
134
|
-
if (!_.isUndefined(v) && !_.isNull(v)) {
|
|
135
|
-
const mappingPath = getMappingPathFrom(lodashPath);
|
|
136
|
-
if (!_.isUndefined(mapping[mappingPath])) {
|
|
137
|
-
const isArray = _.isArray(mapping[mappingPath]);
|
|
138
|
-
if (!isArray) {
|
|
139
|
-
const className = isArray ? _.first(mapping[mappingPath]) : mapping[mappingPath];
|
|
140
|
-
const classFN = CLASS.getBy(className);
|
|
141
|
-
if (_.isFunction(classFN)) {
|
|
142
|
-
changeValue(_.merge(new classFN(), v));
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
circular.forEach(c => {
|
|
149
|
-
const ref = _.get(json, c.circuralTargetPath);
|
|
150
|
-
_.set(json, c.pathToObj, ref);
|
|
151
|
-
});
|
|
152
|
-
if (_.isFunction(mainClassFn)) {
|
|
153
|
-
json = _.merge(new mainClassFn(), json);
|
|
154
|
-
}
|
|
155
|
-
return json;
|
|
156
|
-
}
|
|
157
|
-
function setMapping(json, mapping = {}) {
|
|
158
|
-
if (Array.isArray(json)) {
|
|
159
|
-
return json.map(j => {
|
|
160
|
-
return setMapping(j, mapping);
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
const mainClassFn = CLASS.getBy(mapping['']);
|
|
164
|
-
for (const key in json) {
|
|
165
|
-
if (json.hasOwnProperty(key)) {
|
|
166
|
-
if (_.isArray(json[key])) {
|
|
167
|
-
json[key] = json[key].map(arrObj => {
|
|
168
|
-
const objMapping = getModelsMapping(CLASS.getBy(mapping[key]));
|
|
169
|
-
return setMapping(arrObj, objMapping);
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
else if (_.isObject(json[key])) {
|
|
173
|
-
const objMapping = getModelsMapping(CLASS.getBy(mapping[key]));
|
|
174
|
-
json[key] = setMapping(json[key], objMapping);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
Object
|
|
179
|
-
.keys(mapping)
|
|
180
|
-
.filter(key => key !== '' && key.split('.').length >= 2)
|
|
181
|
-
.forEach(lodasPath => {
|
|
182
|
-
const objMapping = getModelsMapping(CLASS.getBy(mapping[lodasPath]));
|
|
183
|
-
const input = _.get(json, lodasPath);
|
|
184
|
-
if (!_.isUndefined(input)) {
|
|
185
|
-
const res = setMapping(input, objMapping);
|
|
186
|
-
_.set(json, lodasPath, res);
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
if (!mainClassFn) {
|
|
190
|
-
return json;
|
|
191
|
-
}
|
|
192
|
-
return _.merge(new mainClassFn(), json);
|
|
193
|
-
}
|
|
194
|
-
function DefaultModelWithMapping(defaultModelValues, mapping) {
|
|
195
|
-
return function (target) {
|
|
196
|
-
if (!_.isArray(target[SYMBOL.MODELS_MAPPING])) {
|
|
197
|
-
target[SYMBOL.MODELS_MAPPING] = [];
|
|
198
|
-
}
|
|
199
|
-
target[SYMBOL.MODELS_MAPPING].push({ '': CLASS.getName(target) });
|
|
200
|
-
if (_.isObject(mapping)) {
|
|
201
|
-
target[SYMBOL.MODELS_MAPPING] = target[SYMBOL.MODELS_MAPPING].concat(mapping);
|
|
202
|
-
Object.keys(mapping)
|
|
203
|
-
.forEach(key => {
|
|
204
|
-
const v = mapping;
|
|
205
|
-
if (_.isUndefined(v) || _.isFunction(v)) {
|
|
206
|
-
throw `
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
Class: '${target.name}'
|
|
210
|
-
[ng2rest] Bad mapping value for path: ${key} , please use type: <string> or [<string>]
|
|
211
|
-
`;
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
if (_.isObject(defaultModelValues)) {
|
|
216
|
-
const toMerge = {};
|
|
217
|
-
const describedTarget = CLASS
|
|
218
|
-
.describeProperites(target)
|
|
219
|
-
.filter(prop => /^([a-zA-Z0-9]|\_|\#)+$/.test(prop));
|
|
220
|
-
describedTarget.forEach(propDefInConstr => {
|
|
221
|
-
if (defaultModelValues[propDefInConstr]) {
|
|
222
|
-
console.warn(`
|
|
223
|
-
|
|
224
|
-
CONFLICT: default value for property: "${propDefInConstr}"
|
|
225
|
-
in class "${target.name}" already defined as typescript
|
|
226
|
-
default class proprty value.
|
|
227
|
-
|
|
228
|
-
`);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
toMerge[propDefInConstr] = null; // TODO from toString I can't know that
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
target[SYMBOL.DEFAULT_MODEL] = _.merge(toMerge, defaultModelValues);
|
|
235
|
-
const propsToOmmit = Object
|
|
236
|
-
.keys(target[SYMBOL.DEFAULT_MODEL])
|
|
237
|
-
.filter(key => {
|
|
238
|
-
const descriptor = Object
|
|
239
|
-
.getOwnPropertyDescriptor(target.prototype, key);
|
|
240
|
-
return !!descriptor;
|
|
241
|
-
});
|
|
242
|
-
_.merge(target.prototype, _.omit(target[SYMBOL.DEFAULT_MODEL], propsToOmmit));
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
Mapping.DefaultModelWithMapping = DefaultModelWithMapping;
|
|
247
|
-
})(Mapping || (Mapping = {}));
|
|
248
|
-
;
|
|
249
|
-
({}); // @--end-of-file-for-module=ng2-rest lib/mapping.ts
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L25nMi1yZXN0L3Byb2plY3RzL25nMi1yZXN0L3NyYy9saWIvbWFwcGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR2pFLE1BQU0sS0FBVyxPQUFPLENBcVR2QjtBQXJURCxXQUFpQixPQUFPO0lBRXRCLFNBQWdCLE1BQU0sQ0FBQyxJQUFZLEVBQUUsVUFBVSxHQUFHLEtBQUs7UUFHckQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFdEYsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQWRlLGNBQU0sU0FjckIsQ0FBQTtJQUVELFNBQWdCLE1BQU0sQ0FBZSxJQUFZLEVBQUUsT0FBZ0IsRUFBRSxXQUFtQixFQUFFO1FBQ3hGLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxPQUFPLElBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBRUQsSUFBSSxHQUFRLENBQUM7UUFDYixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBakJlLGNBQU0sU0FpQnJCLENBQUE7SUFHRCxTQUFTLG1CQUFtQixDQUFDLElBQVksRUFBRSxVQUFVLEdBQUcsS0FBSztRQUMzRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sUUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFnQjtRQUUvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDL0MsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV2QyxJQUFJLGVBQWUsR0FBVSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLE9BQU8sR0FBRyxlQUFlO2FBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBUyxDQUFDO2FBQ3pELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5CLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDMUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNGLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7UUFFcEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBL0JlLHdCQUFnQixtQkErQi9CLENBQUE7SUFPRCxTQUFTLEdBQUcsQ0FBQyxDQUFTLEVBQUUsSUFBWSxFQUFFLFVBQW1CLEVBQUU7UUFDekQsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzVELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixJQUFJLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLGVBQWUsa0JBQWtCLENBQUMsQ0FBQTtnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFRLENBQUM7UUFBQSxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxTQUFTLGVBQWUsQ0FBQyxDQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxVQUFtQixFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUM7UUFDN0UsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3hELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPO1FBQzNCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtvQkFDOUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFFcEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDcEUsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRCxDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO3FCQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM3QixlQUFlLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGtCQUFrQixDQUFDLFVBQWtCO1FBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxLQUFLLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsMkJBQTJCLENBQUM7UUFDMUMsVUFBVSxHQUFHLFVBQVU7YUFDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7YUFDbEIsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMsY0FBYyxDQUFDLElBQVksRUFBRSxVQUFtQixFQUFFLEVBQUUsV0FBbUIsRUFBRTtRQUVoRixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN6QyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ2pGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7d0JBQ3RDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUUxQixXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFLLE9BQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7d0JBQ2pELENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUM3QyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSyxXQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUlELFNBQVMsVUFBVSxDQUFDLElBQVksRUFBRSxVQUFtQixFQUFFO1FBR3JELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQy9CLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFJN0IsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNqQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7d0JBQzlELE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtvQkFDdkMsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtnQkFDL0MsQ0FBQztZQUNILENBQUM7UUFNSCxDQUFDO1FBRUQsTUFBTTthQUNILElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzthQUN2RCxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFFbkIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3BFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUE7Z0JBQ3pDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFSixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUssV0FBbUIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFhRCxTQUFnQix1QkFBdUIsQ0FDckMsa0JBQWtDLEVBQ2xDLE9BQW9CO1FBRXBCLE9BQU8sVUFBVSxNQUFnQjtZQUUvQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckMsQ0FBQztZQUVBLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN4RixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNiLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDbEIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEMsTUFBTTs7O3NCQUdFLE1BQU0sQ0FBQyxJQUFJO3dDQUNPLEdBQUc7Q0FDMUMsQ0FBQztvQkFFVSxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUdELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxlQUFlLEdBQUcsS0FBSztxQkFDMUIsa0JBQWtCLENBQUMsTUFBTSxDQUFDO3FCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFFdEQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtvQkFDeEMsSUFBSSxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDOztxREFFNEIsZUFBZTt3QkFDNUMsTUFBTSxDQUFDLElBQUk7OzthQUd0QixDQUFDLENBQUE7b0JBQ0osQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7b0JBQzFFLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBSUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUVwRSxNQUFNLFlBQVksR0FBRyxNQUFNO3FCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNaLE1BQU0sVUFBVSxHQUFHLE1BQU07eUJBQ3RCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ25ELE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBR2hGLENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBakVlLCtCQUF1QiwwQkFpRXRDLENBQUE7QUFFSCxDQUFDLEVBclRnQixPQUFPLEtBQVAsT0FBTyxRQXFUdkI7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9EQUFvRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDaXJjLCBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5pbXBvcnQgeyB3YWxrIH0gZnJvbSAnbG9kYXNoLXdhbGstb2JqZWN0L2Jyb3dzZXInO1xuaW1wb3J0IHsgQ0xBU1MsIFNZTUJPTCB9IGZyb20gJ3R5cGVzY3JpcHQtY2xhc3MtaGVscGVycy9icm93c2VyJztcbmltcG9ydCB7IEhlbHBlcnMgYXMgSGVscGVyc0xvZyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5leHBvcnQgbmFtZXNwYWNlIE1hcHBpbmcge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoanNvbjogT2JqZWN0LCBhdXRvZGV0ZWN0ID0gZmFsc2UpOiBNYXBwaW5nIHtcblxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoanNvbikpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgbGV0IG1hcHBpbmcgPSBkZWNvZGVGcm9tRGVjb3JhdG9yKF8uaXNBcnJheShqc29uKSA/IF8uZmlyc3QoanNvbikgOiBqc29uLCAhYXV0b2RldGVjdClcblxuICAgIGlmIChhdXRvZGV0ZWN0KSB7XG4gICAgICBtYXBwaW5nID0gXy5tZXJnZShnZXRNYXBwaW5nTmFpdmUoanNvbiksIG1hcHBpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuY29kZTxUID0gRnVuY3Rpb24+KGpzb246IE9iamVjdCwgbWFwcGluZzogTWFwcGluZywgY2lyY3VsYXI6IENpcmNbXSA9IFtdKTogVCB7XG4gICAgaWYgKF8uaXNTdHJpbmcoanNvbikgfHwgXy5pc0Jvb2xlYW4oanNvbikgfHwgXy5pc051bWJlcihqc29uKSkge1xuICAgICAgcmV0dXJuIGpzb24gYXMgYW55O1xuICAgIH1cblxuICAgIGlmIChtYXBwaW5nWycnXSkge1xuICAgICAgY29uc3QgZGVjb3JhdG9yTWFwcGluZyA9IGdldE1vZGVsc01hcHBpbmcoQ0xBU1MuZ2V0QnkobWFwcGluZ1snJ10pKTtcbiAgICAgIG1hcHBpbmcgPSBfLm1lcmdlKG1hcHBpbmcsIGRlY29yYXRvck1hcHBpbmcpXG4gICAgfVxuXG4gICAgbGV0IHJlczogYW55O1xuICAgIGlmIChfLmlzQXJyYXkoY2lyY3VsYXIpICYmIGNpcmN1bGFyLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlcyA9IHNldE1hcHBpbmdDaXJjKGpzb24sIG1hcHBpbmcsIGNpcmN1bGFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gc2V0TWFwcGluZyhqc29uLCBtYXBwaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG5cbiAgZnVuY3Rpb24gZGVjb2RlRnJvbURlY29yYXRvcihqc29uOiBPYmplY3QsIHByb2R1Y3Rpb24gPSBmYWxzZSk6IE1hcHBpbmcge1xuICAgIGNvbnN0IGVudGl0eUNsYXNzID0gQ0xBU1MuZ2V0RnJvbU9iamVjdChqc29uKTtcbiAgICBjb25zdCBtYXBwaW5ncyA9IGdldE1vZGVsc01hcHBpbmcoZW50aXR5Q2xhc3MpO1xuICAgIHJldHVybiBtYXBwaW5ncyBhcyBhbnk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxzTWFwcGluZyhlbnRpdHk6IEZ1bmN0aW9uKSB7XG5cbiAgICBpZiAoIV8uaXNGdW5jdGlvbihlbnRpdHkpIHx8IGVudGl0eSA9PT0gT2JqZWN0KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENMQVNTLmdldE5hbWUoZW50aXR5KVxuXG4gICAgbGV0IGVuaXR5T1duTWFwcGluZzogYW55W10gPSBfLmlzQXJyYXkoZW50aXR5W1NZTUJPTC5NT0RFTFNfTUFQUElOR10pID9cbiAgICAgIGVudGl0eVtTWU1CT0wuTU9ERUxTX01BUFBJTkddIDogW3sgJyc6IGNsYXNzTmFtZSB9XTtcblxuICAgIGxldCByZXMgPSB7fTtcbiAgICBsZXQgcGFyZW50cyA9IGVuaXR5T1duTWFwcGluZ1xuICAgICAgLmZpbHRlcihtID0+ICFfLmlzVW5kZWZpbmVkKG1bJyddKSAmJiBtWycnXSAhPT0gY2xhc3NOYW1lKVxuICAgICAgLm1hcChtID0+IG1bJyddKTtcblxuICAgIGVuaXR5T1duTWFwcGluZy5yZXZlcnNlKCkuZm9yRWFjaChtID0+IHtcbiAgICAgIG0gPSBfLmNsb25lRGVlcChtKTtcblxuICAgICAgT2JqZWN0LmtleXMobSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gbVtrZXldXG4gICAgICAgIGNvbnN0IGlzQXJyID0gXy5pc0FycmF5KHYpXG4gICAgICAgIGNvbnN0IG1vZGVsID0gaXNBcnIgPyBfLmZpcnN0KHYpIDogdjtcbiAgICAgICAgaWYgKHBhcmVudHMuaW5jbHVkZXMobW9kZWwpKSB7XG4gICAgICAgICAgbVtrZXldID0gaXNBcnIgPyBbY2xhc3NOYW1lXSA6IGNsYXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJlcyA9IF8ubWVyZ2UocmVzLCBtKVxuICAgIH0pXG4gICAgcmVzWycnXSA9IGNsYXNzTmFtZTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuXG4gIGV4cG9ydCB0eXBlIE1hcHBpbmc8VCA9IHt9PiA9IHtcbiAgICBbUCBpbiBrZXlvZiBUXT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZChvOiBPYmplY3QsIHBhdGg6IHN0cmluZywgbWFwcGluZzogTWFwcGluZyA9IHt9KSB7XG4gICAgaWYgKCFvIHx8IEFycmF5LmlzQXJyYXkobykgfHwgdHlwZW9mIG8gIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgY29uc3Qgb2JqZWN0Q2xhc3NOYW1lID0gQ0xBU1MuZ2V0TmFtZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobykuY29uc3RydWN0b3IpO1xuICAgIGNvbnN0IHJlc29sdmVDbGFzcyA9IENMQVNTLmdldEJ5KG9iamVjdENsYXNzTmFtZSk7XG4gICAgaWYgKCFyZXNvbHZlQ2xhc3MpIHtcbiAgICAgIGlmIChvYmplY3RDbGFzc05hbWUgIT09ICdPYmplY3QnKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzQnJvd3Nlcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCByZXNvbHZlIGNsYXNzIFwiJHtvYmplY3RDbGFzc05hbWV9XCIgd2hpbGUgbWFwcGluZy5gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbWFwcGluZ1twYXRoXSkgbWFwcGluZ1twYXRoXSA9IENMQVNTLmdldE5hbWUocmVzb2x2ZUNsYXNzKSBhcyBhbnk7O1xuICB9XG5cbiAgLyoqXG4gICAqIFVTRSBPTkxZIElOIERFVkVMT1BNRU5UXG4gICAqIEBwYXJhbSBjXG4gICAqIEBwYXJhbSBwYXRoXG4gICAqIEBwYXJhbSBtYXBwaW5nXG4gICAqIEBwYXJhbSBsZXZlbFxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TWFwcGluZ05haXZlKGM6IE9iamVjdCwgcGF0aCA9ICcnLCBtYXBwaW5nOiBNYXBwaW5nID0ge30sIGxldmVsID0gMCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICBjLmZvckVhY2goYyA9PiBnZXRNYXBwaW5nTmFpdmUoYywgcGF0aCwgbWFwcGluZywgbGV2ZWwpKVxuICAgICAgcmV0dXJuIG1hcHBpbmc7XG4gICAgfVxuICAgIGlmICgrK2xldmVsID09PSAxNikgcmV0dXJuO1xuICAgIGFkZChjLCBwYXRoLCBtYXBwaW5nKTtcbiAgICBmb3IgKHZhciBwIGluIGMpIHtcbiAgICAgIGlmIChjLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgIGNvbnN0IHYgPSBjW3BdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA+IDApIHsgLy8gcmVkdWNlciBhcyBpbXBvdmVtZW50XG4gICAgICAgICAgdi5mb3JFYWNoKChlbGVtLCBpKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWh0ID0gW3BhdGgsIHBdLmZpbHRlcihjID0+IGMudHJpbSgpICE9ICcnKS5qb2luKCcuJyk7XG4gICAgICAgICAgICBnZXRNYXBwaW5nTmFpdmUoZWxlbSwgY3VycmVudFBhaHQsIG1hcHBpbmcsIGxldmVsKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWh0ID0gW3BhdGgsIHBdLmZpbHRlcihjID0+IGMudHJpbSgpICE9ICcnKS5qb2luKCcuJyk7XG4gICAgICAgICAgYWRkKHYsIGN1cnJlbnRQYWh0LCBtYXBwaW5nKTtcbiAgICAgICAgICBnZXRNYXBwaW5nTmFpdmUodiwgY3VycmVudFBhaHQsIG1hcHBpbmcsIGxldmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1hcHBpbmdQYXRoRnJvbShwYXRoTG9kaGFzOiBzdHJpbmcpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcocGF0aExvZGhhcykpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2V4ID0gL1xcWyhbMC05YS16QS1aXXxcXCd8XFxcIikqXFxdL2c7XG4gICAgcGF0aExvZGhhcyA9IHBhdGhMb2RoYXNcbiAgICAgIC5yZXBsYWNlKHJlZ2V4LCAnJylcbiAgICAgIC5yZXBsYWNlKCcuLicsICcuJyk7XG4gICAgaWYgKHBhdGhMb2RoYXMuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICBwYXRoTG9kaGFzID0gcGF0aExvZGhhcy5zbGljZSgxKVxuICAgIH1cbiAgICByZXR1cm4gcGF0aExvZGhhcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE1hcHBpbmdDaXJjKGpzb246IE9iamVjdCwgbWFwcGluZzogTWFwcGluZyA9IHt9LCBjaXJjdWxhcjogQ2lyY1tdID0gW10pIHtcblxuICAgIGNvbnN0IG1haW5DbGFzc0ZuID0gIV8uaXNBcnJheShqc29uKSAmJiBDTEFTUy5nZXRCeShtYXBwaW5nWycnXSk7XG5cbiAgICB3YWxrLk9iamVjdChqc29uLCAodiwgbG9kYXNoUGF0aCwgY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh2KSAmJiAhXy5pc051bGwodikpIHtcbiAgICAgICAgY29uc3QgbWFwcGluZ1BhdGggPSBnZXRNYXBwaW5nUGF0aEZyb20obG9kYXNoUGF0aClcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKG1hcHBpbmdbbWFwcGluZ1BhdGhdKSkge1xuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBfLmlzQXJyYXkobWFwcGluZ1ttYXBwaW5nUGF0aF0pO1xuICAgICAgICAgIGlmICghaXNBcnJheSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gaXNBcnJheSA/IF8uZmlyc3QobWFwcGluZ1ttYXBwaW5nUGF0aF0pIDogbWFwcGluZ1ttYXBwaW5nUGF0aF07XG4gICAgICAgICAgICBjb25zdCBjbGFzc0ZOID0gQ0xBU1MuZ2V0QnkoY2xhc3NOYW1lKVxuICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjbGFzc0ZOKSkge1xuXG4gICAgICAgICAgICAgIGNoYW5nZVZhbHVlKF8ubWVyZ2UobmV3IChjbGFzc0ZOIGFzIGFueSkoKSwgdikpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIGNpcmN1bGFyLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCByZWYgPSBfLmdldChqc29uLCBjLmNpcmN1cmFsVGFyZ2V0UGF0aClcbiAgICAgIF8uc2V0KGpzb24sIGMucGF0aFRvT2JqLCByZWYpXG4gICAgfSlcblxuICAgIGlmIChfLmlzRnVuY3Rpb24obWFpbkNsYXNzRm4pKSB7XG4gICAgICBqc29uID0gXy5tZXJnZShuZXcgKG1haW5DbGFzc0ZuIGFzIGFueSkoKSwganNvbilcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG5cblxuICBmdW5jdGlvbiBzZXRNYXBwaW5nKGpzb246IE9iamVjdCwgbWFwcGluZzogTWFwcGluZyA9IHt9KSB7XG5cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICByZXR1cm4ganNvbi5tYXAoaiA9PiB7XG4gICAgICAgIHJldHVybiBzZXRNYXBwaW5nKGosIG1hcHBpbmcpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IG1haW5DbGFzc0ZuID0gQ0xBU1MuZ2V0QnkobWFwcGluZ1snJ10pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4ganNvbikge1xuICAgICAgaWYgKGpzb24uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXG5cblxuICAgICAgICBpZiAoXy5pc0FycmF5KGpzb25ba2V5XSkpIHtcbiAgICAgICAgICBqc29uW2tleV0gPSBqc29uW2tleV0ubWFwKGFyck9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmpNYXBwaW5nID0gZ2V0TW9kZWxzTWFwcGluZyhDTEFTUy5nZXRCeShtYXBwaW5nW2tleV0pKVxuICAgICAgICAgICAgcmV0dXJuIHNldE1hcHBpbmcoYXJyT2JqLCBvYmpNYXBwaW5nKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChqc29uW2tleV0pKSB7XG4gICAgICAgICAgY29uc3Qgb2JqTWFwcGluZyA9IGdldE1vZGVsc01hcHBpbmcoQ0xBU1MuZ2V0QnkobWFwcGluZ1trZXldKSlcbiAgICAgICAgICBqc29uW2tleV0gPSBzZXRNYXBwaW5nKGpzb25ba2V5XSwgb2JqTWFwcGluZylcbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuXG5cbiAgICB9XG5cbiAgICBPYmplY3RcbiAgICAgIC5rZXlzKG1hcHBpbmcpXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkgIT09ICcnICYmIGtleS5zcGxpdCgnLicpLmxlbmd0aCA+PSAyKVxuICAgICAgLmZvckVhY2gobG9kYXNQYXRoID0+IHtcblxuICAgICAgICBjb25zdCBvYmpNYXBwaW5nID0gZ2V0TW9kZWxzTWFwcGluZyhDTEFTUy5nZXRCeShtYXBwaW5nW2xvZGFzUGF0aF0pKVxuICAgICAgICBjb25zdCBpbnB1dCA9IF8uZ2V0KGpzb24sIGxvZGFzUGF0aClcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHNldE1hcHBpbmcoaW5wdXQsIG9iak1hcHBpbmcpXG4gICAgICAgICAgXy5zZXQoanNvbiwgbG9kYXNQYXRoLCByZXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICBpZiAoIW1haW5DbGFzc0ZuKSB7XG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWVyZ2UobmV3IChtYWluQ2xhc3NGbiBhcyBhbnkpKCksIGpzb24pXG4gIH1cblxuXG5cblxuICBleHBvcnQgdHlwZSBNb2RlbFZhbHVlPFQ+ID0ge1xuICAgIC8qKlxuICAgICAqIEluc2lkZSBtb2RlbHMgdHlwZXNcbiAgICAgKi9cbiAgICBbcHJvcE5hbWUgaW4ga2V5b2YgVF0/OiBUW3Byb3BOYW1lXTtcbiAgfTtcblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0TW9kZWxXaXRoTWFwcGluZzxUID0gT2JqZWN0PihcbiAgICBkZWZhdWx0TW9kZWxWYWx1ZXM/OiBNb2RlbFZhbHVlPFQ+LFxuICAgIG1hcHBpbmc/OiBNYXBwaW5nPFQ+XG4gICkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBGdW5jdGlvbikge1xuXG4gICAgICBpZiAoIV8uaXNBcnJheSh0YXJnZXRbU1lNQk9MLk1PREVMU19NQVBQSU5HXSkpIHtcbiAgICAgICAgdGFyZ2V0W1NZTUJPTC5NT0RFTFNfTUFQUElOR10gPSBbXTtcbiAgICAgIH1cblxuICAgICAgKHRhcmdldFtTWU1CT0wuTU9ERUxTX01BUFBJTkddIGFzIGFueVtdKS5wdXNoKHsgJyc6IENMQVNTLmdldE5hbWUodGFyZ2V0KSB9KTtcbiAgICAgIGlmIChfLmlzT2JqZWN0KG1hcHBpbmcpKSB7XG4gICAgICAgIHRhcmdldFtTWU1CT0wuTU9ERUxTX01BUFBJTkddID0gKHRhcmdldFtTWU1CT0wuTU9ERUxTX01BUFBJTkddIGFzIGFueVtdKS5jb25jYXQobWFwcGluZylcbiAgICAgICAgT2JqZWN0LmtleXMobWFwcGluZylcbiAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IG1hcHBpbmc7XG4gICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh2KSB8fCBfLmlzRnVuY3Rpb24odikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgYFxuXG5cbiAgICAgICAgICAgIENsYXNzOiAnJHt0YXJnZXQubmFtZX0nXG5bbmcycmVzdF0gQmFkIG1hcHBpbmcgdmFsdWUgZm9yIHBhdGg6ICR7a2V5fSAsIHBsZWFzZSB1c2UgdHlwZTogPHN0cmluZz4gb3IgWzxzdHJpbmc+XVxuYDtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChfLmlzT2JqZWN0KGRlZmF1bHRNb2RlbFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgdG9NZXJnZSA9IHt9O1xuICAgICAgICBjb25zdCBkZXNjcmliZWRUYXJnZXQgPSBDTEFTU1xuICAgICAgICAgIC5kZXNjcmliZVByb3Blcml0ZXModGFyZ2V0KVxuICAgICAgICAgIC5maWx0ZXIocHJvcCA9PiAvXihbYS16QS1aMC05XXxcXF98XFwjKSskLy50ZXN0KHByb3ApKVxuXG4gICAgICAgIGRlc2NyaWJlZFRhcmdldC5mb3JFYWNoKHByb3BEZWZJbkNvbnN0ciA9PiB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRNb2RlbFZhbHVlc1twcm9wRGVmSW5Db25zdHJdKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFxuXG4gICAgICAgICAgICBDT05GTElDVDogZGVmYXVsdCB2YWx1ZSBmb3IgcHJvcGVydHk6IFwiJHtwcm9wRGVmSW5Db25zdHJ9XCJcbiAgICAgICAgICAgIGluIGNsYXNzIFwiJHt0YXJnZXQubmFtZX1cIiBhbHJlYWR5IGRlZmluZWQgYXMgdHlwZXNjcmlwdFxuICAgICAgICAgICAgZGVmYXVsdCBjbGFzcyBwcm9wcnR5IHZhbHVlLlxuXG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b01lcmdlW3Byb3BEZWZJbkNvbnN0cl0gPSBudWxsOyAvLyBUT0RPIGZyb20gdG9TdHJpbmcgSSBjYW4ndCBrbm93IHRoYXRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cblxuICAgICAgICB0YXJnZXRbU1lNQk9MLkRFRkFVTFRfTU9ERUxdID0gXy5tZXJnZSh0b01lcmdlLCBkZWZhdWx0TW9kZWxWYWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IHByb3BzVG9PbW1pdCA9IE9iamVjdFxuICAgICAgICAgIC5rZXlzKHRhcmdldFtTWU1CT0wuREVGQVVMVF9NT0RFTF0pXG4gICAgICAgICAgLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdFxuICAgICAgICAgICAgICAuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5wcm90b3R5cGUsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4gISFkZXNjcmlwdG9yO1xuICAgICAgICAgIH0pO1xuICAgICAgICBfLm1lcmdlKHRhcmdldC5wcm90b3R5cGUsIF8ub21pdCh0YXJnZXRbU1lNQk9MLkRFRkFVTFRfTU9ERUxdLCBwcm9wc1RvT21taXQpKTtcblxuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9tYXBwaW5nLnRzIl19
|