verdaccio 5.13.2 → 5.15.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/CHANGELOG.md +40 -0
- package/README.md +63 -44
- package/build/api/endpoint/api/package.js +5 -1
- package/build/api/index.js +10 -2
- package/build/lib/storage-utils.js +44 -1
- package/build/lib/storage.js +7 -2
- package/conf/default.yaml +3 -0
- package/conf/docker.yaml +3 -0
- package/package.json +22 -22
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [5.15.0](https://github.com/verdaccio/verdaccio/compare/v5.14.0...v5.15.0) (2022-09-03)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* implement abbreviated manifest ([#3343](https://github.com/verdaccio/verdaccio/issues/3343)) ([966139f](https://github.com/verdaccio/verdaccio/commit/966139ffd832dcaa9f8ebc29da8b583dbbfc729d))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **deps:** update dependency @verdaccio/ui-theme to v6.0.0-6-next.26 ([#3313](https://github.com/verdaccio/verdaccio/issues/3313)) ([80755f2](https://github.com/verdaccio/verdaccio/commit/80755f21c9a8733073787a5c915c7c64077213f3))
|
|
16
|
+
* **deps:** update dependency @verdaccio/ui-theme to v6.0.0-6-next.28 ([#3335](https://github.com/verdaccio/verdaccio/issues/3335)) ([b1ec0da](https://github.com/verdaccio/verdaccio/commit/b1ec0daecae6ea1532ac020bdda7fc6fbc60606f))
|
|
17
|
+
* **deps:** update dependency dayjs to v1.11.5 ([#3300](https://github.com/verdaccio/verdaccio/issues/3300)) ([6a2b2fa](https://github.com/verdaccio/verdaccio/commit/6a2b2fa36a45bbb5b59f197cba5163e5963e8e31))
|
|
18
|
+
* **deps:** update dependency lru-cache to v7.14.0 ([#3345](https://github.com/verdaccio/verdaccio/issues/3345)) ([628616c](https://github.com/verdaccio/verdaccio/commit/628616ce323577d295d981cfe449da9359b162e4))
|
|
19
|
+
* **deps:** update dependency marked to v4.0.19 (5.x) ([#3328](https://github.com/verdaccio/verdaccio/issues/3328)) ([b80794a](https://github.com/verdaccio/verdaccio/commit/b80794a46f1c1a0aaf41a58fad6af427c87bb0f0))
|
|
20
|
+
* **deps:** update dependency marked to v4.1.0 ([#3346](https://github.com/verdaccio/verdaccio/issues/3346)) ([354f9ee](https://github.com/verdaccio/verdaccio/commit/354f9ee16ceff7f479799f63834da84635d0e6a9))
|
|
21
|
+
|
|
22
|
+
## [5.14.0](https://github.com/verdaccio/verdaccio/compare/v5.13.3...v5.14.0) (2022-07-29)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* allow express 'trust proxy' to be set for ip resolution behind proxies and load-balancers ([#3274](https://github.com/verdaccio/verdaccio/issues/3274)) ([0bc26e3](https://github.com/verdaccio/verdaccio/commit/0bc26e395a9fa348da52793526e3f13e614900ab))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* **deps:** update dependency @verdaccio/readme to v10.4.1 ([#3267](https://github.com/verdaccio/verdaccio/issues/3267)) ([080bd45](https://github.com/verdaccio/verdaccio/commit/080bd4578f27481a0681914e1e77e7e85cd4bbe6))
|
|
33
|
+
* **deps:** update dependency lru-cache to v7.13.1 ([#3268](https://github.com/verdaccio/verdaccio/issues/3268)) ([d995cc5](https://github.com/verdaccio/verdaccio/commit/d995cc516e012295dae56aa6a62b97d60c2f4da6))
|
|
34
|
+
|
|
35
|
+
### [5.13.3](https://github.com/verdaccio/verdaccio/compare/v5.13.2...v5.13.3) (2022-07-13)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Bug Fixes
|
|
39
|
+
|
|
40
|
+
* **deps:** update dependency @verdaccio/readme to v10.4.0 ([#3265](https://github.com/verdaccio/verdaccio/issues/3265)) ([531f468](https://github.com/verdaccio/verdaccio/commit/531f4685abe37e5d7487f665c9d480e0d085df5f))
|
|
41
|
+
* **deps:** update dependency kleur to v4.1.5 ([#3263](https://github.com/verdaccio/verdaccio/issues/3263)) ([cc1c2a5](https://github.com/verdaccio/verdaccio/commit/cc1c2a5e50ca7e0e6bade2f8f18ec31c35b3fb53))
|
|
42
|
+
* **deps:** update dependency lru-cache to v7.13.0 ([#3266](https://github.com/verdaccio/verdaccio/issues/3266)) ([0a611c0](https://github.com/verdaccio/verdaccio/commit/0a611c0b7df404c6ea66e104eb9ec80ffd7c49f3))
|
|
43
|
+
* **deps:** update dependency marked to v4.0.18 ([#3264](https://github.com/verdaccio/verdaccio/issues/3264)) ([b3f964d](https://github.com/verdaccio/verdaccio/commit/b3f964d93aa15334b685c9b66fe44912c1aa5447))
|
|
44
|
+
|
|
5
45
|
### [5.13.2](https://github.com/verdaccio/verdaccio/compare/v5.13.1...v5.13.2) (2022-07-12)
|
|
6
46
|
|
|
7
47
|
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ Google Cloud Storage** or create your own plugin.
|
|
|
31
31
|
Install with npm:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
npm install --global verdaccio
|
|
34
|
+
npm install --location=global verdaccio
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
> Node.js v12 or higher is required for Verdaccio 5
|
|
@@ -56,15 +56,49 @@ helm repo update
|
|
|
56
56
|
helm install verdaccio/verdaccio
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Are you still using **Verdaccio 4**?. Check the [migration guide](https://verdaccio.org/blog/2021/04/14/verdaccio-5-migration-guide).
|
|
59
|
+
Are you still using **Verdaccio 4**?. Check the [migration guide from 4.x to 5.x](https://verdaccio.org/blog/2021/04/14/verdaccio-5-migration-guide).
|
|
60
|
+
|
|
61
|
+
## Programmatic API
|
|
62
|
+
|
|
63
|
+
Verdaccio can be used as a module for launch a server programmatically, [you can find more info at the website](https://verdaccio.org/docs/verdaccio-programmatically#using-the-module-api).
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
const {runServer} = require('verdaccio');
|
|
67
|
+
const app = await runServer(); // default configuration
|
|
68
|
+
const app = await runServer('./config/config.yaml');
|
|
69
|
+
const app = await runServer({ configuration });
|
|
70
|
+
app.listen(4873, (event) => {
|
|
71
|
+
// do something
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Verdaccio 6 next
|
|
76
|
+
|
|
77
|
+
[Verdaccio 6 is on the way](https://github.com/verdaccio/verdaccio/discussions/2970), meanwhile is ready you can start testing (not for production) the new release with:
|
|
78
|
+
|
|
79
|
+
> Latest Node.js v16 required
|
|
80
|
+
|
|
81
|
+
Install with npm:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm install --location=global verdaccio@6-next
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
or
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
docker pull verdaccio/verdaccio:nightly-master
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The migration notes can be find [here](https://github.com/verdaccio/verdaccio/blob/master/docs/migration-v5-to-v6.md).
|
|
60
94
|
|
|
61
95
|
## Plugins
|
|
62
96
|
|
|
63
97
|
You can develop your own [plugins](https://verdaccio.org/docs/plugins) with the [verdaccio generator](https://github.com/verdaccio/generator-verdaccio-plugin). Installing [Yeoman](https://yeoman.io/) is required.
|
|
64
98
|
|
|
65
99
|
```
|
|
66
|
-
npm install
|
|
67
|
-
npm install
|
|
100
|
+
npm install --location=global yo
|
|
101
|
+
npm install --location=global generator-verdaccio-plugin
|
|
68
102
|
```
|
|
69
103
|
|
|
70
104
|
Learn more [here](https://verdaccio.org/docs/dev-plugins) how to develop plugins. Share your plugins with the community.
|
|
@@ -105,27 +139,13 @@ Furthermore, here few examples how to start:
|
|
|
105
139
|
- [verdaccio-end-to-end-tests](https://github.com/juanpicado/verdaccio-end-to-end-tests)
|
|
106
140
|
- [verdaccio-fork](https://github.com/juanpicado/verdaccio-fork)
|
|
107
141
|
|
|
108
|
-
##
|
|
109
|
-
|
|
110
|
-
**Node Congress 2022, February 2022, Online Free**
|
|
142
|
+
## Talks
|
|
111
143
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
</a>
|
|
116
|
-
</div>
|
|
144
|
+
- [**NodeTLV 20222** - Deep dive into Verdaccio, a lightweight Node.js registry - **Juan Picado**](https://portal.gitnation.org/contents/five-ways-of-taking-advantage-of-verdaccio-your-private-and-proxy-nodejs-registry)
|
|
145
|
+
- [Five Ways of Taking Advantage of Verdaccio, Your Private and Proxy Node.js Registry **Node Congress 2022** - **Juan Picado**](https://portal.gitnation.org/contents/five-ways-of-taking-advantage-of-verdaccio-your-private-and-proxy-nodejs-registry)
|
|
146
|
+
- [Using Docker and Verdaccio to make Integration Testing Easy - **Docker All Hands #4 December - 2021** - **Juan Picado**](https://www.youtube.com/watch?v=zRI0skF1f8I)
|
|
117
147
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
- [Using Docker and Verdaccio to make Integration Testing Easy - **Docker All Hands #4 December - 2021**](https://www.youtube.com/watch?v=zRI0skF1f8I)
|
|
121
|
-
- [**Juan Picado** – Testing the integrity of React components by publishing in a private registry - React Finland - 2021](https://www.youtube.com/watch?v=bRKZbrlQqLY&t=16s&ab_channel=ReactFinland)
|
|
122
|
-
- [BeerJS Cba Meetup No. 53 May 2021 - **Juan Picado**](https://www.youtube.com/watch?v=6SyjqBmS49Y&ab_channel=BeerJSCba)
|
|
123
|
-
- [Node.js Dependency Confusion Attacks - April 2021 - **Juan Picado**](https://www.youtube.com/watch?v=qTRADSp3Hpo)
|
|
124
|
-
- [**OpenJS World 2020** about \*Cover your Projects with a Multi purpose Lightweight Node.js Registry - **Juan Picado**](https://www.youtube.com/watch?v=oVCjDWeehAQ)
|
|
125
|
-
- [ViennaJS Meetup - Introduction to Verdaccio by **Priscila Olivera** and **Juan Picado**](https://www.youtube.com/watch?v=hDIFKzmoCa)
|
|
126
|
-
- [Open Source? trivago - Verdaccio (**Ayush** and **Juan Picado**) January 2020](https://www.youtube.com/watch?v=A5CWxJC9xzc)
|
|
127
|
-
- [GitNation Open Source Stage - How we have built a Node.js Registry with React - **Juan Picado** December 2019](https://www.youtube.com/watch?v=gpjC8Qp9B9A)
|
|
128
|
-
- [Verdaccio - A lightweight Private Proxy Registry built in Node.js | **Juan Picado** at The Destro Dev Show](https://www.youtube.com/watch?reload=9&v=P_hxy7W-IL4&ab_channel=TheDestroDevShow)
|
|
148
|
+
[View more in the YouTube channel](https://www.youtube.com/channel/UC5i20v6o7lSjXzAHOvatt0w).
|
|
129
149
|
|
|
130
150
|
## Get Started
|
|
131
151
|
|
|
@@ -234,34 +254,33 @@ Verdaccio aims to support all features of a standard npm client that make sense
|
|
|
234
254
|
|
|
235
255
|
If you want to report a security vulnerability, please follow the steps which we have defined for you in our [security policy](https://github.com/verdaccio/verdaccio/security/policy).
|
|
236
256
|
|
|
237
|
-
##
|
|
257
|
+
## Contributors
|
|
238
258
|
|
|
239
|
-
| [Juan Picado](https://github.com/juanpicado)
|
|
240
|
-
|
|
|
241
|
-
| 
|
|
243
|
-
| [Priscila Oliveria](https://github.com/priscilawebdev)
|
|
244
|
-
| 
|
|
259
|
+
| [Juan Picado](https://github.com/juanpicado) | [Ayush Sharma](https://github.com/ayusharma) | [Sergio Hg](https://github.com/sergiohgz) |
|
|
260
|
+
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
261
|
+
|  |  |  |
|
|
262
|
+
| [@jotadeveloper](https://twitter.com/jotadeveloper) | [@ayusharma\_](https://twitter.com/ayusharma_) | [@sergiohgz](https://twitter.com/sergiohgz) |
|
|
263
|
+
| [Priscila Oliveria](https://github.com/priscilawebdev) | [Daniel Ruf](https://github.com/DanielRuf) |
|
|
264
|
+
|  |  |
|
|
265
|
+
| [@priscilawebdev](https://twitter.com/priscilawebdev) | [@DanielRufde](https://twitter.com/DanielRufde) |
|
|
246
266
|
|
|
247
|
-
|
|
267
|
+
[See the full list of contributors is at the website.](https://verdaccio.org/contributors)
|
|
248
268
|
|
|
249
269
|
## Who is using Verdaccio?
|
|
250
270
|
|
|
251
|
-
- [create-react-app](https://github.com/facebook/create-react-app/blob/master/CONTRIBUTING.md#customizing-e2e-registry-configuration) _(+
|
|
252
|
-
- [Gatsby](https://github.com/gatsbyjs/gatsby) _(+
|
|
253
|
-
- [Babel.js](https://github.com/babel/babel) _(+
|
|
254
|
-
- [Docusaurus](https://github.com/facebook/docusaurus) _(+
|
|
255
|
-
- [Vue CLI](https://github.com/vuejs/vue-cli) _(+
|
|
256
|
-
- [Angular CLI](https://github.com/angular/angular-cli) _(+
|
|
257
|
-
- [Uppy](https://github.com/transloadit/uppy) _(+
|
|
258
|
-
- [
|
|
271
|
+
- [create-react-app](https://github.com/facebook/create-react-app/blob/master/CONTRIBUTING.md#customizing-e2e-registry-configuration) _(+96.2k ⭐️)_
|
|
272
|
+
- [Gatsby](https://github.com/gatsbyjs/gatsby) _(+53.5k ⭐️)_
|
|
273
|
+
- [Babel.js](https://github.com/babel/babel) _(+41.3k ⭐️)_
|
|
274
|
+
- [Docusaurus](https://github.com/facebook/docusaurus) _(+37k ⭐️)_
|
|
275
|
+
- [Vue CLI](https://github.com/vuejs/vue-cli) _(+29.4k ⭐️)_
|
|
276
|
+
- [Angular CLI](https://github.com/angular/angular-cli) _(+25.6k ⭐️)_
|
|
277
|
+
- [Uppy](https://github.com/transloadit/uppy) _(+25.8k ⭐️)_
|
|
278
|
+
- [pnpm](https://github.com/pnpm/pnpm) _(+19.2k ⭐️)_
|
|
279
|
+
- [bit](https://github.com/teambit/bit) _(+15k ⭐️)_
|
|
280
|
+
- [NX](https://github.com/nrwl/nx) _(+14.1k ⭐️)_
|
|
259
281
|
- [Aurelia Framework](https://github.com/aurelia/framework) _(+11.6k ⭐️)_
|
|
260
|
-
- [pnpm](https://github.com/pnpm/pnpm) _(+10.1k ⭐️)_
|
|
261
282
|
- [ethereum/web3.js](https://github.com/ethereum/web3.js) _(+9.8k ⭐️)_
|
|
262
|
-
- [
|
|
263
|
-
- [webiny-js](https://github.com/webiny/webiny-js) _(+4.3k ⭐️)_
|
|
264
|
-
- [Mozilla Neutrino](https://github.com/neutrinojs/neutrino) _(+3.7k ⭐️)_
|
|
283
|
+
- [webiny-js](https://github.com/webiny/webiny-js) _(+5.9k ⭐️)_
|
|
265
284
|
- [workshopper how to npm](https://github.com/workshopper/how-to-npm) _(+1k ⭐️)_
|
|
266
285
|
- [Amazon SDK v3](https://github.com/aws/aws-sdk-js-v3)
|
|
267
286
|
- [Amazon Encryption SDK for Javascript](https://github.com/aws/aws-encryption-sdk-javascript)
|
|
@@ -15,6 +15,8 @@ var _middleware = require("../../middleware");
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
|
+
const ABBREVIATED_HEADER = 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*';
|
|
19
|
+
|
|
18
20
|
const downloadStream = (packageName, filename, storage, req, res) => {
|
|
19
21
|
const stream = storage.getTarball(packageName, filename);
|
|
20
22
|
stream.on('content-length', function (content) {
|
|
@@ -82,10 +84,12 @@ function _default(route, auth, storage, config) {
|
|
|
82
84
|
return next(_utils.ErrorCode.getNotFound(`${_constants.API_ERROR.VERSION_NOT_EXIST}: ${req.params.version}`));
|
|
83
85
|
};
|
|
84
86
|
|
|
87
|
+
const abbreviated = req.get('Accept') === ABBREVIATED_HEADER;
|
|
85
88
|
storage.getPackage({
|
|
86
89
|
name: req.params.package,
|
|
87
90
|
uplinksLook: true,
|
|
88
91
|
req,
|
|
92
|
+
abbreviated,
|
|
89
93
|
callback: getPackageMetaCallback
|
|
90
94
|
});
|
|
91
95
|
});
|
|
@@ -109,4 +113,4 @@ function _default(route, auth, storage, config) {
|
|
|
109
113
|
}
|
|
110
114
|
});
|
|
111
115
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb3dubG9hZFN0cmVhbSIsInBhY2thZ2VOYW1lIiwiZmlsZW5hbWUiLCJzdG9yYWdlIiwicmVxIiwicmVzIiwic3RyZWFtIiwiZ2V0VGFyYmFsbCIsIm9uIiwiY29udGVudCIsImhlYWRlciIsImVyciIsImxvY2FscyIsInJlcG9ydF9lcnJvciIsIkhFQURFUlMiLCJDT05URU5UX1RZUEUiLCJPQ1RFVF9TVFJFQU0iLCJwaXBlIiwicmVkaXJlY3RPckRvd25sb2FkU3RyZWFtIiwiY29uZmlnIiwidGFyYmFsbFVybFJlZGlyZWN0IiwiXyIsImdldCIsImhhc0xvY2FsVGFyYmFsbCIsInRoZW4iLCJjb250ZXh0IiwidGFyYmFsbFVybCIsInRlbXBsYXRlIiwicmVkaXJlY3QiLCJjYXRjaCIsInJvdXRlIiwiYXV0aCIsImNhbiIsImFsbG93IiwibmV4dCIsImdldFBhY2thZ2VNZXRhQ2FsbGJhY2siLCJtZXRhZGF0YSIsImNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzIiwidXJsX3ByZWZpeCIsInF1ZXJ5VmVyc2lvbiIsInBhcmFtcyIsInZlcnNpb24iLCJpc05pbCIsImdldFZlcnNpb24iLCJESVNUX1RBR1MiLCJFcnJvckNvZGUiLCJnZXROb3RGb3VuZCIsIkFQSV9FUlJPUiIsIlZFUlNJT05fTk9UX0VYSVNUIiwiZ2V0UGFja2FnZSIsIm5hbWUiLCJwYWNrYWdlIiwidXBsaW5rc0xvb2siLCJjYWxsYmFjayIsInNjb3BlZFBhY2thZ2UiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL2VuZHBvaW50L2FwaS9wYWNrYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQ29uZmlnLCBQYWNrYWdlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICROZXh0RnVuY3Rpb25WZXIsICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIElBdXRoLCBJU3RvcmFnZUhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIERJU1RfVEFHUywgSEVBREVSUyB9IGZyb20gJy4uLy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBjb252ZXJ0RGlzdFJlbW90ZVRvTG9jYWxUYXJiYWxsVXJscywgZ2V0VmVyc2lvbiB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBhbGxvdyB9IGZyb20gJy4uLy4uL21pZGRsZXdhcmUnO1xuXG5jb25zdCBkb3dubG9hZFN0cmVhbSA9IChwYWNrYWdlTmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBzdG9yYWdlOiBhbnksIHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kKTogdm9pZCA9PiB7XG4gIGNvbnN0IHN0cmVhbSA9IHN0b3JhZ2UuZ2V0VGFyYmFsbChwYWNrYWdlTmFtZSwgZmlsZW5hbWUpO1xuXG4gIHN0cmVhbS5vbignY29udGVudC1sZW5ndGgnLCBmdW5jdGlvbiAoY29udGVudCk6IHZvaWQge1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgY29udGVudCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgcmV0dXJuIHJlcy5sb2NhbHMucmVwb3J0X2Vycm9yKGVycik7XG4gIH0pO1xuXG4gIHJlcy5oZWFkZXIoSEVBREVSUy5DT05URU5UX1RZUEUsIEhFQURFUlMuT0NURVRfU1RSRUFNKTtcbiAgc3RyZWFtLnBpcGUocmVzKTtcbn07XG5cbmNvbnN0IHJlZGlyZWN0T3JEb3dubG9hZFN0cmVhbSA9IChwYWNrYWdlTmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBzdG9yYWdlOiBhbnksIHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBjb25maWc6IENvbmZpZyk6IHZvaWQgPT4ge1xuICBjb25zdCB0YXJiYWxsVXJsUmVkaXJlY3QgPSBfLmdldChjb25maWcsICdleHBlcmltZW50cy50YXJiYWxsX3VybF9yZWRpcmVjdCcpO1xuICBzdG9yYWdlXG4gICAgLmhhc0xvY2FsVGFyYmFsbChwYWNrYWdlTmFtZSwgZmlsZW5hbWUpXG4gICAgLnRoZW4oKGhhc0xvY2FsVGFyYmFsbCkgPT4ge1xuICAgICAgaWYgKGhhc0xvY2FsVGFyYmFsbCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0geyBwYWNrYWdlTmFtZSwgZmlsZW5hbWUgfTtcbiAgICAgICAgY29uc3QgdGFyYmFsbFVybCA9IHR5cGVvZiB0YXJiYWxsVXJsUmVkaXJlY3QgPT09ICdmdW5jdGlvbicgPyB0YXJiYWxsVXJsUmVkaXJlY3QoY29udGV4dCkgOiBfLnRlbXBsYXRlKHRhcmJhbGxVcmxSZWRpcmVjdCkoY29udGV4dCk7XG4gICAgICAgIHJlcy5yZWRpcmVjdCh0YXJiYWxsVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvd25sb2FkU3RyZWFtKHBhY2thZ2VOYW1lLCBmaWxlbmFtZSwgc3RvcmFnZSwgcmVxLCByZXMpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIHJlcy5sb2NhbHMucmVwb3J0X2Vycm9yKGVycik7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocm91dGU6IFJvdXRlciwgYXV0aDogSUF1dGgsIHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlciwgY29uZmlnOiBDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgY2FuID0gYWxsb3coYXV0aCk7XG4gIC8vIFRPRE86IGFub255bW91cyB1c2VyP1xuICByb3V0ZS5nZXQoJy86cGFja2FnZS86dmVyc2lvbj8nLCBjYW4oJ2FjY2VzcycpLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBjb25zdCBnZXRQYWNrYWdlTWV0YUNhbGxiYWNrID0gZnVuY3Rpb24gKGVyciwgbWV0YWRhdGE6IFBhY2thZ2UpOiB2b2lkIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgIH1cbiAgICAgIG1ldGFkYXRhID0gY29udmVydERpc3RSZW1vdGVUb0xvY2FsVGFyYmFsbFVybHMobWV0YWRhdGEsIHJlcSwgY29uZmlnLnVybF9wcmVmaXgpO1xuXG4gICAgICBsZXQgcXVlcnlWZXJzaW9uID0gcmVxLnBhcmFtcy52ZXJzaW9uO1xuICAgICAgaWYgKF8uaXNOaWwocXVlcnlWZXJzaW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChtZXRhZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtZXRhZGF0YSwgcXVlcnlWZXJzaW9uKTtcbiAgICAgIGlmIChfLmlzTmlsKHZlcnNpb24pID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbmV4dCh2ZXJzaW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNOaWwobWV0YWRhdGFbRElTVF9UQUdTXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChfLmlzTmlsKG1ldGFkYXRhW0RJU1RfVEFHU11bcXVlcnlWZXJzaW9uXSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcXVlcnlWZXJzaW9uID0gbWV0YWRhdGFbRElTVF9UQUdTXVtxdWVyeVZlcnNpb25dO1xuICAgICAgICAgIHZlcnNpb24gPSBnZXRWZXJzaW9uKG1ldGFkYXRhLCBxdWVyeVZlcnNpb24pO1xuICAgICAgICAgIGlmIChfLmlzTmlsKHZlcnNpb24pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQodmVyc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0Tm90Rm91bmQoYCR7QVBJX0VSUk9SLlZFUlNJT05fTk9UX0VYSVNUfTogJHtyZXEucGFyYW1zLnZlcnNpb259YCkpO1xuICAgIH07XG5cbiAgICBzdG9yYWdlLmdldFBhY2thZ2Uoe1xuICAgICAgbmFtZTogcmVxLnBhcmFtcy5wYWNrYWdlLFxuICAgICAgdXBsaW5rc0xvb2s6IHRydWUsXG4gICAgICByZXEsXG4gICAgICBjYWxsYmFjazogZ2V0UGFja2FnZU1ldGFDYWxsYmFjayxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcm91dGUuZ2V0KCcvOnNjb3BlZFBhY2thZ2UvLS86c2NvcGUvOmZpbGVuYW1lJywgY2FuKCdhY2Nlc3MnKSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kKTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29wZWRQYWNrYWdlLCBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBpZiAoXy5nZXQoY29uZmlnLCAnZXhwZXJpbWVudHMudGFyYmFsbF91cmxfcmVkaXJlY3QnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb3dubG9hZFN0cmVhbShzY29wZWRQYWNrYWdlLCBmaWxlbmFtZSwgc3RvcmFnZSwgcmVxLCByZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWRpcmVjdE9yRG93bmxvYWRTdHJlYW0oc2NvcGVkUGFja2FnZSwgZmlsZW5hbWUsIHN0b3JhZ2UsIHJlcSwgcmVzLCBjb25maWcpO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGUuZ2V0KCcvOnBhY2thZ2UvLS86ZmlsZW5hbWUnLCBjYW4oJ2FjY2VzcycpLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQpOiB2b2lkIHtcbiAgICBpZiAoXy5nZXQoY29uZmlnLCAnZXhwZXJpbWVudHMudGFyYmFsbF91cmxfcmVkaXJlY3QnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb3dubG9hZFN0cmVhbShyZXEucGFyYW1zLnBhY2thZ2UsIHJlcS5wYXJhbXMuZmlsZW5hbWUsIHN0b3JhZ2UsIHJlcSwgcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVkaXJlY3RPckRvd25sb2FkU3RyZWFtKHJlcS5wYXJhbXMucGFja2FnZSwgcmVxLnBhcmFtcy5maWxlbmFtZSwgc3RvcmFnZSwgcmVxLCByZXMsIGNvbmZpZyk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUtBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUNDLFdBQUQsRUFBc0JDLFFBQXRCLEVBQXdDQyxPQUF4QyxFQUFzREMsR0FBdEQsRUFBMkVDLEdBQTNFLEtBQTBHO0VBQy9ILE1BQU1DLE1BQU0sR0FBR0gsT0FBTyxDQUFDSSxVQUFSLENBQW1CTixXQUFuQixFQUFnQ0MsUUFBaEMsQ0FBZjtFQUVBSSxNQUFNLENBQUNFLEVBQVAsQ0FBVSxnQkFBVixFQUE0QixVQUFVQyxPQUFWLEVBQXlCO0lBQ25ESixHQUFHLENBQUNLLE1BQUosQ0FBVyxnQkFBWCxFQUE2QkQsT0FBN0I7RUFDRCxDQUZEO0VBSUFILE1BQU0sQ0FBQ0UsRUFBUCxDQUFVLE9BQVYsRUFBbUIsVUFBVUcsR0FBVixFQUFxQjtJQUN0QyxPQUFPTixHQUFHLENBQUNPLE1BQUosQ0FBV0MsWUFBWCxDQUF3QkYsR0FBeEIsQ0FBUDtFQUNELENBRkQ7RUFJQU4sR0FBRyxDQUFDSyxNQUFKLENBQVdJLGtCQUFBLENBQVFDLFlBQW5CLEVBQWlDRCxrQkFBQSxDQUFRRSxZQUF6QztFQUNBVixNQUFNLENBQUNXLElBQVAsQ0FBWVosR0FBWjtBQUNELENBYkQ7O0FBZUEsTUFBTWEsd0JBQXdCLEdBQUcsQ0FBQ2pCLFdBQUQsRUFBc0JDLFFBQXRCLEVBQXdDQyxPQUF4QyxFQUFzREMsR0FBdEQsRUFBMkVDLEdBQTNFLEVBQWlHYyxNQUFqRyxLQUEwSDtFQUN6SixNQUFNQyxrQkFBa0IsR0FBR0MsZUFBQSxD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
|
|
116
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBQkJSRVZJQVRFRF9IRUFERVIiLCJkb3dubG9hZFN0cmVhbSIsInBhY2thZ2VOYW1lIiwiZmlsZW5hbWUiLCJzdG9yYWdlIiwicmVxIiwicmVzIiwic3RyZWFtIiwiZ2V0VGFyYmFsbCIsIm9uIiwiY29udGVudCIsImhlYWRlciIsImVyciIsImxvY2FscyIsInJlcG9ydF9lcnJvciIsIkhFQURFUlMiLCJDT05URU5UX1RZUEUiLCJPQ1RFVF9TVFJFQU0iLCJwaXBlIiwicmVkaXJlY3RPckRvd25sb2FkU3RyZWFtIiwiY29uZmlnIiwidGFyYmFsbFVybFJlZGlyZWN0IiwiXyIsImdldCIsImhhc0xvY2FsVGFyYmFsbCIsInRoZW4iLCJjb250ZXh0IiwidGFyYmFsbFVybCIsInRlbXBsYXRlIiwicmVkaXJlY3QiLCJjYXRjaCIsInJvdXRlIiwiYXV0aCIsImNhbiIsImFsbG93IiwibmV4dCIsImdldFBhY2thZ2VNZXRhQ2FsbGJhY2siLCJtZXRhZGF0YSIsImNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzIiwidXJsX3ByZWZpeCIsInF1ZXJ5VmVyc2lvbiIsInBhcmFtcyIsInZlcnNpb24iLCJpc05pbCIsImdldFZlcnNpb24iLCJESVNUX1RBR1MiLCJFcnJvckNvZGUiLCJnZXROb3RGb3VuZCIsIkFQSV9FUlJPUiIsIlZFUlNJT05fTk9UX0VYSVNUIiwiYWJicmV2aWF0ZWQiLCJnZXRQYWNrYWdlIiwibmFtZSIsInBhY2thZ2UiLCJ1cGxpbmtzTG9vayIsImNhbGxiYWNrIiwic2NvcGVkUGFja2FnZSIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBDb25maWcsIFBhY2thZ2UgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgJE5leHRGdW5jdGlvblZlciwgJFJlcXVlc3RFeHRlbmQsICRSZXNwb25zZUV4dGVuZCwgSUF1dGgsIElTdG9yYWdlSGFuZGxlciB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgRElTVF9UQUdTLCBIRUFERVJTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzLCBnZXRWZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IGFsbG93IH0gZnJvbSAnLi4vLi4vbWlkZGxld2FyZSc7XG5cbmNvbnN0IEFCQlJFVklBVEVEX0hFQURFUiA9ICdhcHBsaWNhdGlvbi92bmQubnBtLmluc3RhbGwtdjEranNvbjsgcT0xLjAsIGFwcGxpY2F0aW9uL2pzb247IHE9MC44LCAqLyonO1xuY29uc3QgZG93bmxvYWRTdHJlYW0gPSAocGFja2FnZU5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgc3RvcmFnZTogYW55LCByZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCk6IHZvaWQgPT4ge1xuICBjb25zdCBzdHJlYW0gPSBzdG9yYWdlLmdldFRhcmJhbGwocGFja2FnZU5hbWUsIGZpbGVuYW1lKTtcblxuICBzdHJlYW0ub24oJ2NvbnRlbnQtbGVuZ3RoJywgZnVuY3Rpb24gKGNvbnRlbnQpOiB2b2lkIHtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGNvbnRlbnQpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycik6IHZvaWQge1xuICAgIHJldHVybiByZXMubG9jYWxzLnJlcG9ydF9lcnJvcihlcnIpO1xuICB9KTtcblxuICByZXMuaGVhZGVyKEhFQURFUlMuQ09OVEVOVF9UWVBFLCBIRUFERVJTLk9DVEVUX1NUUkVBTSk7XG4gIHN0cmVhbS5waXBlKHJlcyk7XG59O1xuXG5jb25zdCByZWRpcmVjdE9yRG93bmxvYWRTdHJlYW0gPSAocGFja2FnZU5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgc3RvcmFnZTogYW55LCByZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgY29uZmlnOiBDb25maWcpOiB2b2lkID0+IHtcbiAgY29uc3QgdGFyYmFsbFVybFJlZGlyZWN0ID0gXy5nZXQoY29uZmlnLCAnZXhwZXJpbWVudHMudGFyYmFsbF91cmxfcmVkaXJlY3QnKTtcbiAgc3RvcmFnZVxuICAgIC5oYXNMb2NhbFRhcmJhbGwocGFja2FnZU5hbWUsIGZpbGVuYW1lKVxuICAgIC50aGVuKChoYXNMb2NhbFRhcmJhbGwpID0+IHtcbiAgICAgIGlmIChoYXNMb2NhbFRhcmJhbGwpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHsgcGFja2FnZU5hbWUsIGZpbGVuYW1lIH07XG4gICAgICAgIGNvbnN0IHRhcmJhbGxVcmwgPSB0eXBlb2YgdGFyYmFsbFVybFJlZGlyZWN0ID09PSAnZnVuY3Rpb24nID8gdGFyYmFsbFVybFJlZGlyZWN0KGNvbnRleHQpIDogXy50ZW1wbGF0ZSh0YXJiYWxsVXJsUmVkaXJlY3QpKGNvbnRleHQpO1xuICAgICAgICByZXMucmVkaXJlY3QodGFyYmFsbFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb3dubG9hZFN0cmVhbShwYWNrYWdlTmFtZSwgZmlsZW5hbWUsIHN0b3JhZ2UsIHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICByZXMubG9jYWxzLnJlcG9ydF9lcnJvcihlcnIpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHJvdXRlOiBSb3V0ZXIsIGF1dGg6IElBdXRoLCBzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIsIGNvbmZpZzogQ29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGNhbiA9IGFsbG93KGF1dGgpO1xuICAvLyBUT0RPOiBhbm9ueW1vdXMgdXNlcj9cbiAgcm91dGUuZ2V0KCcvOnBhY2thZ2UvOnZlcnNpb24/JywgY2FuKCdhY2Nlc3MnKSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgZ2V0UGFja2FnZU1ldGFDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIsIG1ldGFkYXRhOiBQYWNrYWdlKTogdm9pZCB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICB9XG4gICAgICBtZXRhZGF0YSA9IGNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzKG1ldGFkYXRhLCByZXEsIGNvbmZpZy51cmxfcHJlZml4KTtcblxuICAgICAgbGV0IHF1ZXJ5VmVyc2lvbiA9IHJlcS5wYXJhbXMudmVyc2lvbjtcbiAgICAgIGlmIChfLmlzTmlsKHF1ZXJ5VmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQobWV0YWRhdGEpO1xuICAgICAgfVxuXG4gICAgICBsZXQgdmVyc2lvbiA9IGdldFZlcnNpb24obWV0YWRhdGEsIHF1ZXJ5VmVyc2lvbik7XG4gICAgICBpZiAoXy5pc05pbCh2ZXJzaW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQodmVyc2lvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzTmlsKG1ldGFkYXRhW0RJU1RfVEFHU10pID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoXy5pc05pbChtZXRhZGF0YVtESVNUX1RBR1NdW3F1ZXJ5VmVyc2lvbl0pID09PSBmYWxzZSkge1xuICAgICAgICAgIHF1ZXJ5VmVyc2lvbiA9IG1ldGFkYXRhW0RJU1RfVEFHU11bcXVlcnlWZXJzaW9uXTtcbiAgICAgICAgICB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtZXRhZGF0YSwgcXVlcnlWZXJzaW9uKTtcbiAgICAgICAgICBpZiAoXy5pc05pbCh2ZXJzaW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHZlcnNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldE5vdEZvdW5kKGAke0FQSV9FUlJPUi5WRVJTSU9OX05PVF9FWElTVH06ICR7cmVxLnBhcmFtcy52ZXJzaW9ufWApKTtcbiAgICB9O1xuICAgIGNvbnN0IGFiYnJldmlhdGVkID0gcmVxLmdldCgnQWNjZXB0JykgPT09IEFCQlJFVklBVEVEX0hFQURFUjtcbiAgICBzdG9yYWdlLmdldFBhY2thZ2Uoe1xuICAgICAgbmFtZTogcmVxLnBhcmFtcy5wYWNrYWdlLFxuICAgICAgdXBsaW5rc0xvb2s6IHRydWUsXG4gICAgICByZXEsXG4gICAgICBhYmJyZXZpYXRlZCxcbiAgICAgIGNhbGxiYWNrOiBnZXRQYWNrYWdlTWV0YUNhbGxiYWNrLFxuICAgIH0pO1xuICB9KTtcblxuICByb3V0ZS5nZXQoJy86c2NvcGVkUGFja2FnZS8tLzpzY29wZS86ZmlsZW5hbWUnLCBjYW4oJ2FjY2VzcycpLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQpOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjb3BlZFBhY2thZ2UsIGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGlmIChfLmdldChjb25maWcsICdleHBlcmltZW50cy50YXJiYWxsX3VybF9yZWRpcmVjdCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvd25sb2FkU3RyZWFtKHNjb3BlZFBhY2thZ2UsIGZpbGVuYW1lLCBzdG9yYWdlLCByZXEsIHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZGlyZWN0T3JEb3dubG9hZFN0cmVhbShzY29wZWRQYWNrYWdlLCBmaWxlbmFtZSwgc3RvcmFnZSwgcmVxLCByZXMsIGNvbmZpZyk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZS5nZXQoJy86cGFja2FnZS8tLzpmaWxlbmFtZScsIGNhbignYWNjZXNzJyksIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCk6IHZvaWQge1xuICAgIGlmIChfLmdldChjb25maWcsICdleHBlcmltZW50cy50YXJiYWxsX3VybF9yZWRpcmVjdCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvd25sb2FkU3RyZWFtKHJlcS5wYXJhbXMucGFja2FnZSwgcmVxLnBhcmFtcy5maWxlbmFtZSwgc3RvcmFnZSwgcmVxLCByZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWRpcmVjdE9yRG93bmxvYWRTdHJlYW0ocmVxLnBhcmFtcy5wYWNrYWdlLCByZXEucGFyYW1zLmZpbGVuYW1lLCBzdG9yYWdlLCByZXEsIHJlcywgY29uZmlnKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRywwRUFBM0I7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLENBQUNDLFdBQUQsRUFBc0JDLFFBQXRCLEVBQXdDQyxPQUF4QyxFQUFzREMsR0FBdEQsRUFBMkVDLEdBQTNFLEtBQTBHO0VBQy9ILE1BQU1DLE1BQU0sR0FBR0gsT0FBTyxDQUFDSSxVQUFSLENBQW1CTixXQUFuQixFQUFnQ0MsUUFBaEMsQ0FBZjtFQUVBSSxNQUFNLENBQUNFLEVBQVAsQ0FBVSxnQkFBVixFQUE0QixVQUFVQyxPQUFWLEVBQXlCO0lBQ25ESixHQUFHLENBQUNLLE1BQUosQ0FBVyxnQkFBWCxFQUE2QkQsT0FBN0I7RUFDRCxDQUZEO0VBSUFILE1BQU0sQ0FBQ0UsRUFBUCxDQUFVLE9BQVYsRUFBbUIsVUFBVUcsR0FBVixFQUFxQjtJQUN0QyxPQUFPTixHQUFHLENBQUNPLE1BQUosQ0FBV0MsWUFBWCxDQUF3QkYsR0FBeEIsQ0FBUDtFQUNELENB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
|
package/build/api/index.js
CHANGED
|
@@ -40,11 +40,19 @@ var _api = _interopRequireDefault(require("./web/api"));
|
|
|
40
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
41
|
|
|
42
42
|
const defineAPI = function (config, storage) {
|
|
43
|
+
var _config$server;
|
|
44
|
+
|
|
43
45
|
const auth = new _auth.default(config);
|
|
44
46
|
const app = (0, _express.default)(); // run in production mode by default, just in case
|
|
45
47
|
// it shouldn't make any difference anyway
|
|
46
48
|
|
|
47
|
-
app.set('env', process.env.NODE_ENV || 'production');
|
|
49
|
+
app.set('env', process.env.NODE_ENV || 'production'); // Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
|
|
50
|
+
// See: https://expressjs.com/en/guide/behind-proxies.html
|
|
51
|
+
|
|
52
|
+
if ((_config$server = config.server) !== null && _config$server !== void 0 && _config$server.trustProxy) {
|
|
53
|
+
app.set('trust proxy', config.server.trustProxy);
|
|
54
|
+
}
|
|
55
|
+
|
|
48
56
|
app.use((0, _cors.default)()); // Router setup
|
|
49
57
|
|
|
50
58
|
app.use((0, _middleware.log)(config));
|
|
@@ -131,4 +139,4 @@ var _default = async function _default(configHash) {
|
|
|
131
139
|
};
|
|
132
140
|
|
|
133
141
|
exports.default = _default;
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZpbmVBUEkiLCJjb25maWciLCJzdG9yYWdlIiwiYXV0aCIsIkF1dGgiLCJhcHAiLCJleHByZXNzIiwic2V0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidXNlIiwiY29ycyIsImxvZyIsImVycm9yUmVwb3J0aW5nTWlkZGxld2FyZSIsInVzZXJfYWdlbnQiLCJyZXEiLCJyZXMiLCJuZXh0Iiwic2V0SGVhZGVyIiwiZ2V0VXNlckFnZW50IiwiZGlzYWJsZSIsImNvbXByZXNzaW9uIiwiZ2V0Iiwic2VydmVGYXZpY29uIiwiX2RlYnVnIiwiaG9va0RlYnVnIiwic2VsZl9wYXRoIiwicGx1Z2luX3BhcmFtcyIsImxvZ2dlciIsInBsdWdpbnMiLCJsb2FkUGx1Z2luIiwibWlkZGxld2FyZXMiLCJwbHVnaW4iLCJyZWdpc3Rlcl9taWRkbGV3YXJlcyIsImZvckVhY2giLCJhcGlFbmRwb2ludCIsIl8iLCJ3ZWIiLCJ3ZWJBUEkiLCJFcnJvckNvZGUiLCJnZXROb3RGb3VuZCIsIkFQSV9FUlJPUiIsIldFQl9ESVNBQkxFRCIsIkZJTEVfTk9UX0ZPVU5EIiwiZXJyIiwiaXNFcnJvciIsImNvZGUiLCJzdGF0dXNDb2RlIiwiSFRUUF9TVEFUVVMiLCJOT1RfTU9ESUZJRUQiLCJpc0Z1bmN0aW9uIiwibG9jYWxzIiwicmVwb3J0X2Vycm9yIiwibm9vcCIsImZpbmFsIiwiY29uZmlnSGFzaCIsInNldHVwIiwibG9ncyIsIkFwcENvbmZpZyIsImNsb25lRGVlcCIsImZpbHRlcnMiLCJmaWx0ZXJfbWV0YWRhdGEiLCJTdG9yYWdlIiwiaW5pdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbXByZXNzaW9uIGZyb20gJ2NvbXByZXNzaW9uJztcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnO1xuaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEh0dHBFcnJvciB9IGZyb20gJ2h0dHAtZXJyb3JzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IENvbmZpZyBhcyBJQ29uZmlnLCBJUGx1Z2luTWlkZGxld2FyZSwgSVBsdWdpblN0b3JhZ2VGaWx0ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgJE5leHRGdW5jdGlvblZlciwgJFJlcXVlc3RFeHRlbmQsICRSZXNwb25zZUV4dGVuZCwgSUF1dGgsIElTdG9yYWdlSGFuZGxlciB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCBBdXRoIGZyb20gJy4uL2xpYi9hdXRoJztcbmltcG9ydCBBcHBDb25maWcgZnJvbSAnLi4vbGliL2NvbmZpZyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBsb2dnZXIsIHNldHVwIH0gZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgbG9hZFBsdWdpbiBmcm9tICcuLi9saWIvcGx1Z2luLWxvYWRlcic7XG5pbXBvcnQgU3RvcmFnZSBmcm9tICcuLi9saWIvc3RvcmFnZSc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGdldFVzZXJBZ2VudCB9IGZyb20gJy4uL2xpYi91dGlscyc7XG5pbXBvcnQgaG9va0RlYnVnIGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IGFwaUVuZHBvaW50IGZyb20gJy4vZW5kcG9pbnQnO1xuaW1wb3J0IHsgZXJyb3JSZXBvcnRpbmdNaWRkbGV3YXJlLCBmaW5hbCwgbG9nLCBzZXJ2ZUZhdmljb24gfSBmcm9tICcuL21pZGRsZXdhcmUnO1xuaW1wb3J0IHdlYiBmcm9tICcuL3dlYic7XG5pbXBvcnQgd2ViQVBJIGZyb20gJy4vd2ViL2FwaSc7XG5cbmNvbnN0IGRlZmluZUFQSSA9IGZ1bmN0aW9uIChjb25maWc6IElDb25maWcsIHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlcik6IGFueSB7XG4gIGNvbnN0IGF1dGg6IElBdXRoID0gbmV3IEF1dGgoY29uZmlnKTtcbiAgY29uc3QgYXBwOiBBcHBsaWNhdGlvbiA9IGV4cHJlc3MoKTtcblxuICAvLyBydW4gaW4gcHJvZHVjdGlvbiBtb2RlIGJ5IGRlZmF1bHQsIGp1c3QgaW4gY2FzZVxuICAvLyBpdCBzaG91bGRuJ3QgbWFrZSBhbnkgZGlmZmVyZW5jZSBhbnl3YXlcbiAgYXBwLnNldCgnZW52JywgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJ3Byb2R1Y3Rpb24nKTtcbiAgYXBwLnVzZShjb3JzKCkpO1xuXG4gIC8vIFJvdXRlciBzZXR1cFxuICBhcHAudXNlKGxvZyhjb25maWcpKTtcbiAgYXBwLnVzZShlcnJvclJlcG9ydGluZ01pZGRsZXdhcmUpO1xuICBpZiAoY29uZmlnLnVzZXJfYWdlbnQpIHtcbiAgICBhcHAudXNlKGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgICAgcmVzLnNldEhlYWRlcignWC1Qb3dlcmVkLUJ5JywgZ2V0VXNlckFnZW50KGNvbmZpZy51c2VyX2FnZW50KSk7XG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXBwLmRpc2FibGUoJ3gtcG93ZXJlZC1ieScpO1xuICB9XG5cbiAgYXBwLnVzZShjb21wcmVzc2lvbigpKTtcblxuICBhcHAuZ2V0KCcvLS9zdGF0aWMvZmF2aWNvbi5pY28nLCBzZXJ2ZUZhdmljb24oY29uZmlnKSk7XG5cbiAgLy8gSG9vayBmb3IgdGVzdHMgb25seVxuICBpZiAoY29uZmlnLl9kZWJ1Zykge1xuICAgIGhvb2tEZWJ1ZyhhcHAsIGNvbmZpZy5zZWxmX3BhdGgpO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbWlkZGxld2FyZSBwbHVnaW5zXG4gIGNvbnN0IHBsdWdpbl9wYXJhbXMgPSB7XG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgbG9nZ2VyOiBsb2dnZXIsXG4gIH07XG5cbiAgY29uc3QgcGx1Z2luczogSVBsdWdpbk1pZGRsZXdhcmU8SUNvbmZpZz5bXSA9IGxvYWRQbHVnaW4oY29uZmlnLCBjb25maWcubWlkZGxld2FyZXMsIHBsdWdpbl9wYXJhbXMsIGZ1bmN0aW9uIChwbHVnaW46IElQbHVnaW5NaWRkbGV3YXJlPElDb25maWc+KSB7XG4gICAgcmV0dXJuIHBsdWdpbi5yZWdpc3Rlcl9taWRkbGV3YXJlcztcbiAgfSk7XG4gIHBsdWdpbnMuZm9yRWFjaCgocGx1Z2luOiBJUGx1Z2luTWlkZGxld2FyZTxJQ29uZmlnPikgPT4ge1xuICAgIHBsdWdpbi5yZWdpc3Rlcl9taWRkbGV3YXJlcyhhcHAsIGF1dGgsIHN0b3JhZ2UpO1xuICB9KTtcblxuICAvLyBGb3IgIG5wbSByZXF1ZXN0XG4gIGFwcC51c2UoYXBpRW5kcG9pbnQoY29uZmlnLCBhdXRoLCBzdG9yYWdlKSk7XG5cbiAgLy8gRm9yIFdlYlVJICYgV2ViVUkgQVBJXG4gIGlmIChfLmdldChjb25maWcsICd3ZWIuZW5hYmxlJywgdHJ1ZSkpIHtcbiAgICBhcHAudXNlKCcvJywgd2ViKGNvbmZpZywgYXV0aCwgc3RvcmFnZSkpO1xuICAgIGFwcC51c2UoJy8tL3ZlcmRhY2Npby8nLCB3ZWJBUEkoY29uZmlnLCBhdXRoLCBzdG9yYWdlKSk7XG4gIH0gZWxzZSB7XG4gICAgYXBwLmdldCgnLycsIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcikge1xuICAgICAgbmV4dChFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLldFQl9ESVNBQkxFRCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2F0Y2ggNDA0XG4gIGFwcC5nZXQoJy8qJywgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKSB7XG4gICAgbmV4dChFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLkZJTEVfTk9UX0ZPVU5EKSk7XG4gIH0pO1xuXG4gIGFwcC51c2UoZnVuY3Rpb24gKGVycjogSHR0cEVycm9yLCByZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcikge1xuICAgIGlmIChfLmlzRXJyb3IoZXJyKSkge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5BQk9SVCcgJiYgcmVzLnN0YXR1c0NvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9NT0RJRklFRCkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNGdW5jdGlvbihyZXMubG9jYWxzLnJlcG9ydF9lcnJvcikgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgdmVyeSBlYXJseSBlcnJvciB0aGlzIG1pZGRsZXdhcmUgbWF5IG5vdCBiZSBsb2FkZWQgYmVmb3JlIGVycm9yIGlzIGdlbmVyYXRlZFxuICAgICAgICAvLyBmaXhpbmcgdGhhdFxuICAgICAgICBlcnJvclJlcG9ydGluZ01pZGRsZXdhcmUocmVxLCByZXMsIF8ubm9vcCk7XG4gICAgICB9XG4gICAgICByZXMubG9jYWxzLnJlcG9ydF9lcnJvcihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsIHRvIE1pZGRsZXdhcmUuZmluYWxcbiAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgfVxuICB9KTtcblxuICBhcHAudXNlKGZpbmFsKTtcblxuICByZXR1cm4gYXBwO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGFzeW5jIGZ1bmN0aW9uIChjb25maWdIYXNoOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICBzZXR1cChjb25maWdIYXNoLmxvZ3MpO1xuICBjb25zdCBjb25maWc6IElDb25maWcgPSBuZXcgQXBwQ29uZmlnKF8uY2xvbmVEZWVwKGNvbmZpZ0hhc2gpKTtcbiAgLy8gcmVnaXN0ZXIgbWlkZGxld2FyZSBwbHVnaW5zXG4gIGNvbnN0IHBsdWdpbl9wYXJhbXMgPSB7XG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgbG9nZ2VyOiBsb2dnZXIsXG4gIH07XG4gIGNvbnN0IGZpbHRlcnMgPSBsb2FkUGx1Z2luKGNvbmZpZywgY29uZmlnLmZpbHRlcnMgfHwge30sIHBsdWdpbl9wYXJhbXMsIChwbHVnaW46IElQbHVnaW5TdG9yYWdlRmlsdGVyPElDb25maWc+KSA9PiBwbHVnaW4uZmlsdGVyX21ldGFkYXRhKTtcbiAgY29uc3Qgc3RvcmFnZTogSVN0b3JhZ2VIYW5kbGVyID0gbmV3IFN0b3JhZ2UoY29uZmlnKTtcbiAgLy8gd2FpdHMgdW50aWwgaW5pdCBjYWxscyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWRcbiAgYXdhaXQgc3RvcmFnZS5pbml0KGNvbmZpZywgZmlsdGVycyk7XG4gIHJldHVybiBkZWZpbmVBUEkoY29uZmlnLCBzdG9yYWdlKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUcsVUFBVUMsTUFBVixFQUEyQkMsT0FBM0IsRUFBMEQ7RUFDMUUsTUFBTUMsSUFBVyxHQUFHLElBQUlDLGFBQUosQ0FBU0gsTUFBVCxDQUFwQjtFQUNBLE1BQU1JLEdBQWdCLEdBQUcsSUFBQUMsZ0JBQUEsR0FBekIsQ0FGMEUsQ0FJMUU7RUFDQTs7RUFDQUQsR0FBRyxDQUFDRSxHQUFKLENBQVEsS0FBUixFQUFlQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsUUFBWixJQUF3QixZQUF2QztFQUNBTCxHQUFHLENBQUNNLEdBQUosQ0FBUSxJQUFBQyxhQUFBLEdBQVIsRUFQMEUsQ0FTMUU7O0VBQ0FQLEdBQUcsQ0FBQ00sR0FBSixDQUFRLElBQUFFLGVBQUEsRUFBSVosTUFBSixDQUFSO0VBQ0FJLEdBQUcsQ0FBQ00s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
|
|
142
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZpbmVBUEkiLCJjb25maWciLCJzdG9yYWdlIiwiYXV0aCIsIkF1dGgiLCJhcHAiLCJleHByZXNzIiwic2V0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwic2VydmVyIiwidHJ1c3RQcm94eSIsInVzZSIsImNvcnMiLCJsb2ciLCJlcnJvclJlcG9ydGluZ01pZGRsZXdhcmUiLCJ1c2VyX2FnZW50IiwicmVxIiwicmVzIiwibmV4dCIsInNldEhlYWRlciIsImdldFVzZXJBZ2VudCIsImRpc2FibGUiLCJjb21wcmVzc2lvbiIsImdldCIsInNlcnZlRmF2aWNvbiIsIl9kZWJ1ZyIsImhvb2tEZWJ1ZyIsInNlbGZfcGF0aCIsInBsdWdpbl9wYXJhbXMiLCJsb2dnZXIiLCJwbHVnaW5zIiwibG9hZFBsdWdpbiIsIm1pZGRsZXdhcmVzIiwicGx1Z2luIiwicmVnaXN0ZXJfbWlkZGxld2FyZXMiLCJmb3JFYWNoIiwiYXBpRW5kcG9pbnQiLCJfIiwid2ViIiwid2ViQVBJIiwiRXJyb3JDb2RlIiwiZ2V0Tm90Rm91bmQiLCJBUElfRVJST1IiLCJXRUJfRElTQUJMRUQiLCJGSUxFX05PVF9GT1VORCIsImVyciIsImlzRXJyb3IiLCJjb2RlIiwic3RhdHVzQ29kZSIsIkhUVFBfU1RBVFVTIiwiTk9UX01PRElGSUVEIiwiaXNGdW5jdGlvbiIsImxvY2FscyIsInJlcG9ydF9lcnJvciIsIm5vb3AiLCJmaW5hbCIsImNvbmZpZ0hhc2giLCJzZXR1cCIsImxvZ3MiLCJBcHBDb25maWciLCJjbG9uZURlZXAiLCJmaWx0ZXJzIiwiZmlsdGVyX21ldGFkYXRhIiwiU3RvcmFnZSIsImluaXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21wcmVzc2lvbiBmcm9tICdjb21wcmVzc2lvbic7XG5pbXBvcnQgY29ycyBmcm9tICdjb3JzJztcbmltcG9ydCBleHByZXNzLCB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBIdHRwRXJyb3IgfSBmcm9tICdodHRwLWVycm9ycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBDb25maWcgYXMgSUNvbmZpZywgSVBsdWdpbk1pZGRsZXdhcmUsIElQbHVnaW5TdG9yYWdlRmlsdGVyIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICROZXh0RnVuY3Rpb25WZXIsICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIElBdXRoLCBJU3RvcmFnZUhhbmRsZXIgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgQXV0aCBmcm9tICcuLi9saWIvYXV0aCc7XG5pbXBvcnQgQXBwQ29uZmlnIGZyb20gJy4uL2xpYi9jb25maWcnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBIVFRQX1NUQVRVUyB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgbG9nZ2VyLCBzZXR1cCB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IFN0b3JhZ2UgZnJvbSAnLi4vbGliL3N0b3JhZ2UnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBnZXRVc2VyQWdlbnQgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IGhvb2tEZWJ1ZyBmcm9tICcuL2RlYnVnJztcbmltcG9ydCBhcGlFbmRwb2ludCBmcm9tICcuL2VuZHBvaW50JztcbmltcG9ydCB7IGVycm9yUmVwb3J0aW5nTWlkZGxld2FyZSwgZmluYWwsIGxvZywgc2VydmVGYXZpY29uIH0gZnJvbSAnLi9taWRkbGV3YXJlJztcbmltcG9ydCB3ZWIgZnJvbSAnLi93ZWInO1xuaW1wb3J0IHdlYkFQSSBmcm9tICcuL3dlYi9hcGknO1xuXG5jb25zdCBkZWZpbmVBUEkgPSBmdW5jdGlvbiAoY29uZmlnOiBJQ29uZmlnLCBzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIpOiBhbnkge1xuICBjb25zdCBhdXRoOiBJQXV0aCA9IG5ldyBBdXRoKGNvbmZpZyk7XG4gIGNvbnN0IGFwcDogQXBwbGljYXRpb24gPSBleHByZXNzKCk7XG5cbiAgLy8gcnVuIGluIHByb2R1Y3Rpb24gbW9kZSBieSBkZWZhdWx0LCBqdXN0IGluIGNhc2VcbiAgLy8gaXQgc2hvdWxkbid0IG1ha2UgYW55IGRpZmZlcmVuY2UgYW55d2F5XG4gIGFwcC5zZXQoJ2VudicsIHByb2Nlc3MuZW52Lk5PREVfRU5WIHx8ICdwcm9kdWN0aW9uJyk7XG5cbiAgLy8gQWxsb3cgYHJlcS5pcGAgdG8gcmVzb2x2ZSBwcm9wZXJseSB3aGVuIFZlcmRhY2NpbyBpcyBiZWhpbmQgYSBwcm94eSBvciBsb2FkLWJhbGFuY2VyXG4gIC8vIFNlZTogaHR0cHM6Ly9leHByZXNzanMuY29tL2VuL2d1aWRlL2JlaGluZC1wcm94aWVzLmh0bWxcbiAgaWYgKGNvbmZpZy5zZXJ2ZXI/LnRydXN0UHJveHkpIHtcbiAgICBhcHAuc2V0KCd0cnVzdCBwcm94eScsIGNvbmZpZy5zZXJ2ZXIudHJ1c3RQcm94eSk7XG4gIH1cblxuICBhcHAudXNlKGNvcnMoKSk7XG5cbiAgLy8gUm91dGVyIHNldHVwXG4gIGFwcC51c2UobG9nKGNvbmZpZykpO1xuICBhcHAudXNlKGVycm9yUmVwb3J0aW5nTWlkZGxld2FyZSk7XG4gIGlmIChjb25maWcudXNlcl9hZ2VudCkge1xuICAgIGFwcC51c2UoZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVBvd2VyZWQtQnknLCBnZXRVc2VyQWdlbnQoY29uZmlnLnVzZXJfYWdlbnQpKTtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG4gIH1cblxuICBhcHAudXNlKGNvbXByZXNzaW9uKCkpO1xuXG4gIGFwcC5nZXQoJy8tL3N0YXRpYy9mYXZpY29uLmljbycsIHNlcnZlRmF2aWNvbihjb25maWcpKTtcblxuICAvLyBIb29rIGZvciB0ZXN0cyBvbmx5XG4gIGlmIChjb25maWcuX2RlYnVnKSB7XG4gICAgaG9va0RlYnVnKGFwcCwgY29uZmlnLnNlbGZfcGF0aCk7XG4gIH1cblxuICAvLyByZWdpc3RlciBtaWRkbGV3YXJlIHBsdWdpbnNcbiAgY29uc3QgcGx1Z2luX3BhcmFtcyA9IHtcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBsb2dnZXI6IGxvZ2dlcixcbiAgfTtcblxuICBjb25zdCBwbHVnaW5zOiBJUGx1Z2luTWlkZGxld2FyZTxJQ29uZmlnPltdID0gbG9hZFBsdWdpbihjb25maWcsIGNvbmZpZy5taWRkbGV3YXJlcywgcGx1Z2luX3BhcmFtcywgZnVuY3Rpb24gKHBsdWdpbjogSVBsdWdpbk1pZGRsZXdhcmU8SUNvbmZpZz4pIHtcbiAgICByZXR1cm4gcGx1Z2luLnJlZ2lzdGVyX21pZGRsZXdhcmVzO1xuICB9KTtcbiAgcGx1Z2lucy5mb3JFYWNoKChwbHVnaW46IElQbHVnaW5NaWRkbGV3YXJlPElDb25maWc+KSA9PiB7XG4gICAgcGx1Z2luLnJlZ2lzdGVyX21pZGRsZXdhcmVzKGFwcCwgYXV0aCwgc3RvcmFnZSk7XG4gIH0pO1xuXG4gIC8vIEZvciAgbnBtIHJlcXVlc3RcbiAgYXBwLnVzZShhcGlFbmRwb2ludChjb25maWcsIGF1dGgsIHN0b3JhZ2UpKTtcblxuICAvLyBGb3IgV2ViVUkgJiBXZWJVSSBBUElcbiAgaWYgKF8uZ2V0KGNvbmZpZywgJ3dlYi5lbmFibGUnLCB0cnVlKSkge1xuICAgIGFwcC51c2UoJy8nLCB3ZWIoY29uZmlnLCBhdXRoLCBzdG9yYWdlKSk7XG4gICAgYXBwLnVzZSgnLy0vdmVyZGFjY2lvLycsIHdlYkFQSShjb25maWcsIGF1dGgsIHN0b3JhZ2UpKTtcbiAgfSBlbHNlIHtcbiAgICBhcHAuZ2V0KCcvJywgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKSB7XG4gICAgICBuZXh0KEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuV0VCX0RJU0FCTEVEKSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBDYXRjaCA0MDRcbiAgYXBwLmdldCgnLyonLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpIHtcbiAgICBuZXh0KEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuRklMRV9OT1RfRk9VTkQpKTtcbiAgfSk7XG5cbiAgYXBwLnVzZShmdW5jdGlvbiAoZXJyOiBIdHRwRXJyb3IsIHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKSB7XG4gICAgaWYgKF8uaXNFcnJvcihlcnIpKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTkFCT1JUJyAmJiByZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX01PRElGSUVEKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHJlcy5sb2NhbHMucmVwb3J0X2Vycm9yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiB2ZXJ5IGVhcmx5IGVycm9yIHRoaXMgbWlkZGxld2FyZSBtYXkgbm90IGJlIGxvYWRlZCBiZWZvcmUgZXJyb3IgaXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vIGZpeGluZyB0aGF0XG4gICAgICAgIGVycm9yUmVwb3J0aW5nTWlkZGxld2FyZShyZXEsIHJlcywgXy5ub29wKTtcbiAgICAgIH1cbiAgICAgIHJlcy5sb2NhbHMucmVwb3J0X2Vycm9yKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGwgdG8gTWlkZGxld2FyZS5maW5hbFxuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGFwcC51c2UoZmluYWwpO1xuXG4gIHJldHVybiBhcHA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoYXN5bmMgZnVuY3Rpb24gKGNvbmZpZ0hhc2g6IGFueSk6IFByb21pc2U8YW55PiB7XG4gIHNldHVwKGNvbmZpZ0hhc2gubG9ncyk7XG4gIGNvbnN0IGNvbmZpZzogSUNvbmZpZyA9IG5ldyBBcHBDb25maWcoXy5jbG9uZURlZXAoY29uZmlnSGFzaCkpO1xuICAvLyByZWdpc3RlciBtaWRkbGV3YXJlIHBsdWdpbnNcbiAgY29uc3QgcGx1Z2luX3BhcmFtcyA9IHtcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBsb2dnZXI6IGxvZ2dlcixcbiAgfTtcbiAgY29uc3QgZmlsdGVycyA9IGxvYWRQbHVnaW4oY29uZmlnLCBjb25maWcuZmlsdGVycyB8fCB7fSwgcGx1Z2luX3BhcmFtcywgKHBsdWdpbjogSVBsdWdpblN0b3JhZ2VGaWx0ZXI8SUNvbmZpZz4pID0+IHBsdWdpbi5maWx0ZXJfbWV0YWRhdGEpO1xuICBjb25zdCBzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIgPSBuZXcgU3RvcmFnZShjb25maWcpO1xuICAvLyB3YWl0cyB1bnRpbCBpbml0IGNhbGxzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICBhd2FpdCBzdG9yYWdlLmluaXQoY29uZmlnLCBmaWx0ZXJzKTtcbiAgcmV0dXJuIGRlZmluZUFQSShjb25maWcsIHN0b3JhZ2UpO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFNBQVMsR0FBRyxVQUFVQyxNQUFWLEVBQTJCQyxPQUEzQixFQUEwRDtFQUFBOztFQUMxRSxNQUFNQyxJQUFXLEdBQUcsSUFBSUMsYUFB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
|
|
@@ -8,6 +8,7 @@ exports.checkPackageLocal = checkPackageLocal;
|
|
|
8
8
|
exports.checkPackageRemote = checkPackageRemote;
|
|
9
9
|
exports.cleanUpLinksRef = cleanUpLinksRef;
|
|
10
10
|
exports.cleanUpReadme = cleanUpReadme;
|
|
11
|
+
exports.convertAbbreviatedManifest = convertAbbreviatedManifest;
|
|
11
12
|
exports.generatePackageTemplate = generatePackageTemplate;
|
|
12
13
|
exports.generateRevision = generateRevision;
|
|
13
14
|
exports.getLatestReadme = getLatestReadme;
|
|
@@ -267,4 +268,46 @@ function isPublishablePackage(pkg) {
|
|
|
267
268
|
const keys = Object.keys(pkg);
|
|
268
269
|
return _lodash.default.includes(keys, 'versions');
|
|
269
270
|
}
|
|
270
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSIsIm5hbWUiLCJ2ZXJzaW9ucyIsInRpbWUiLCJVU0VSUyIsIkRJU1RfVEFHUyIsIl91cGxpbmtzIiwiX2Rpc3RmaWxlcyIsIl9hdHRhY2htZW50cyIsIl9yZXYiLCJub3JtYWxpemVQYWNrYWdlIiwicGtnIiwicGtnUHJvcGVydGllcyIsImZvckVhY2giLCJrZXkiLCJwa2dQcm9wIiwiXyIsImlzTmlsIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsIlNUT1JBR0UiLCJERUZBVUxUX1JFVklTSU9OIiwiX2lkIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJnZW5lcmF0ZVJldmlzaW9uIiwicmV2Iiwic3BsaXQiLCJnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyIsImdldExhdGVzdFJlYWRtZSIsImRpc3RUYWdzIiwibGF0ZXN0VmVyc2lvbiIsInJlYWRtZSIsInRyaW0iLCJyZWFkbWVEaXN0VGFnc1ByaW9yaXR5IiwibWFwIiwidGFnIiwidmVyc2lvbiIsImNsZWFuVXBSZWFkbWUiLCJub3JtYWxpemVDb250cmlidXRvcnMiLCJjb250cmlidXRvcnMiLCJpc0FycmF5IiwiV0hJVEVMSVNUIiwiY2xlYW5VcExpbmtzUmVmIiwia2VlcFVwTGlua0RhdGEiLCJyZXN1bHQiLCJwcm9wZXJ0eVRvS2VlcCIsInB1c2giLCJpIiwiaW5kZXhPZiIsImNoZWNrUGFja2FnZUxvY2FsIiwibG9jYWxTdG9yYWdlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJnZXRQYWNrYWdlTWV0YWRhdGEiLCJlcnIiLCJyZXN1bHRzIiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJFcnJvckNvZGUiLCJnZXRDb25mbGljdCIsIkFQSV9FUlJPUiIsIlBBQ0tBR0VfRVhJU1QiLCJwdWJsaXNoUGFja2FnZSIsIm1ldGFkYXRhIiwiYWRkUGFja2FnZSIsImxhdGVzdCIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiU2VhcmNoIiwiYWRkIiwiY2hlY2tQYWNrYWdlUmVtb3RlIiwiaXNBbGxvd1B1Ymxpc2hPZmZsaW5lIiwic3luY01ldGFkYXRhIiwicGFja2FnZUpzb25Mb2NhbCIsInVwTGlua3NFcnJvcnMiLCJlcnJvckl0ZW0iLCJsZW5ndGgiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJVUExJTktfT0ZGTElORV9QVUJMSVNIIiwibWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsIiwibG9jYWxNZXRhZGF0YSIsInJlbW90ZU1ldGFkYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwicHJlcGFyZVNlYXJjaFBhY2thZ2UiLCJkYXRhIiwibGlzdFZlcnNpb25zIiwia2V5cyIsInNlbXZlclNvcnQiLCJwb3AiLCJkZXNjcmlwdGlvbiIsIm1haW50YWluZXJzIiwiYXV0aG9yIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcG9zaXRvcnkiLCJyZWFkbWVGaWxlbmFtZSIsImhvbWVwYWdlIiwia2V5d29yZHMiLCJidWdzIiwibGljZW5zZSIsIm1vZGlmaWVkIiwiaXNQdWJsaXNoYWJsZVBhY2thZ2UiLCJpbmNsdWRlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc3RvcmFnZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBBdXRob3IsIFBhY2thZ2UsIFZlcnNpb24gfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgSVN0b3JhZ2UgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyB9IGZyb20gJy4uL2xpYi9jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBESVNUX1RBR1MsIEhUVFBfU1RBVFVTLCBTVE9SQUdFLCBVU0VSUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBTZWFyY2ggZnJvbSAnLi9zZWFyY2gnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBpc09iamVjdCwgbm9ybWFsaXplRGlzdFRhZ3MsIHNlbXZlclNvcnQgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlKG5hbWU6IHN0cmluZyk6IFBhY2thZ2Uge1xuICByZXR1cm4ge1xuICAgIC8vIHN0YW5kYXJkIHRoaW5nc1xuICAgIG5hbWUsXG4gICAgdmVyc2lvbnM6IHt9LFxuICAgIHRpbWU6IHt9LFxuICAgIFtVU0VSU106IHt9LFxuICAgIFtESVNUX1RBR1NdOiB7fSxcbiAgICBfdXBsaW5rczoge30sXG4gICAgX2Rpc3RmaWxlczoge30sXG4gICAgX2F0dGFjaG1lbnRzOiB7fSxcbiAgICBfcmV2OiAnJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcGFja2FnZSBwcm9wZXJ0aWVzLCB0YWdzLCByZXZpc2lvbiBpZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwa2cgcGFja2FnZSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYWNrYWdlKHBrZzogUGFja2FnZSk6IFBhY2thZ2Uge1xuICBjb25zdCBwa2dQcm9wZXJ0aWVzID0gWyd2ZXJzaW9ucycsICdkaXN0LXRhZ3MnLCAnX2Rpc3RmaWxlcycsICdfYXR0YWNobWVudHMnLCAnX3VwbGlua3MnLCAndGltZSddO1xuXG4gIHBrZ1Byb3BlcnRpZXMuZm9yRWFjaCgoa2V5KTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGtnUHJvcCA9IHBrZ1trZXldO1xuXG4gICAgaWYgKF8uaXNOaWwocGtnUHJvcCkgfHwgaXNPYmplY3QocGtnUHJvcCkgPT09IGZhbHNlKSB7XG4gICAgICBwa2dba2V5XSA9IHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9yZXYpID09PSBmYWxzZSkge1xuICAgIHBrZy5fcmV2ID0gU1RPUkFHRS5ERUZBVUxUX1JFVklTSU9OO1xuICB9XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9pZCkgPT09IGZhbHNlKSB7XG4gICAgcGtnLl9pZCA9IHBrZy5uYW1lO1xuICB9XG5cbiAgLy8gbm9ybWFsaXplIGRpc3QtdGFnc1xuICBub3JtYWxpemVEaXN0VGFncyhwa2cpO1xuXG4gIHJldHVybiBwa2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJldmlzaW9uKHJldjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgX3JldiA9IHJldi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiAoK19yZXZbMF0gfHwgMCkgKyAxICsgJy0nICsgZ2VuZXJhdGVSYW5kb21IZXhTdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdGVzdFJlYWRtZShwa2c6IFBhY2thZ2UpOiBzdHJpbmcge1xuICBjb25zdCB2ZXJzaW9ucyA9IHBrZ1sndmVyc2lvbnMnXSB8fCB7fTtcbiAgY29uc3QgZGlzdFRhZ3MgPSBwa2dbRElTVF9UQUdTXSB8fCB7fTtcbiAgLy8gRklYTUU6IGhlcmUgaXMgYSBiaXQgdHJpY2t5IGFkZCB0aGUgdHlwZXNcbiAgY29uc3QgbGF0ZXN0VmVyc2lvbjogVmVyc2lvbiB8IGFueSA9IGRpc3RUYWdzWydsYXRlc3QnXSA/IHZlcnNpb25zW2Rpc3RUYWdzWydsYXRlc3QnXV0gfHwge30gOiB7fTtcbiAgbGV0IHJlYWRtZSA9IF8udHJpbShwa2cucmVhZG1lIHx8IGxhdGVzdFZlcnNpb24ucmVhZG1lIHx8ICcnKTtcbiAgaWYgKHJlYWRtZSkge1xuICAgIHJldHVybiByZWFkbWU7XG4gIH1cblxuICAvLyBJbiBjYXNlIG9mIGVtcHR5IHJlYWRtZSAtIHRyeWluZyB0byBnZXQgQU5ZIHJlYWRtZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiAnbmV4dCcsJ2JldGEnLCdhbHBoYScsJ3Rlc3QnLCdkZXYnLCdjYW5hcnknXG4gIGNvbnN0IHJlYWRtZURpc3RUYWdzUHJpb3JpdHkgPSBbJ25leHQnLCAnYmV0YScsICdhbHBoYScsICd0ZXN0JywgJ2RldicsICdjYW5hcnknXTtcbiAgcmVhZG1lRGlzdFRhZ3NQcmlvcml0eS5tYXAoZnVuY3Rpb24gKHRhZyk6IHN0cmluZyB8IHZvaWQge1xuICAgIGlmIChyZWFkbWUpIHtcbiAgICAgIHJldHVybiByZWFkbWU7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gfCBhbnkgPSBkaXN0VGFnc1t0YWddID8gdmVyc2lvbnNbZGlzdFRhZ3NbdGFnXV0gfHwge30gOiB7fTtcbiAgICByZWFkbWUgPSBfLnRyaW0odmVyc2lvbi5yZWFkbWUgfHwgcmVhZG1lKTtcbiAgfSk7XG4gIHJldHVybiByZWFkbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVwUmVhZG1lKHZlcnNpb246IFZlcnNpb24pOiBWZXJzaW9uIHtcbiAgaWYgKF8uaXNOaWwodmVyc2lvbikgPT09IGZhbHNlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGRlbGV0ZSB2ZXJzaW9uLnJlYWRtZTtcbiAgfVxuXG4gIHJldHVybiB2ZXJzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29udHJpYnV0b3JzKGNvbnRyaWJ1dG9yczogQXV0aG9yW10pOiBBdXRob3JbXSB7XG4gIGlmIChfLmlzTmlsKGNvbnRyaWJ1dG9ycykpIHtcbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSBpZiAoY29udHJpYnV0b3JzICYmIF8uaXNBcnJheShjb250cmlidXRvcnMpID09PSBmYWxzZSkge1xuICAgIC8vIEZJWE1FOiB0aGlzIGJyYW5jaCBpcyBjbGVhcmx5IG5vIGFuIGFycmF5LCBzdGlsbCB0c2MgY29tcGxhaW5zXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBbY29udHJpYnV0b3JzXTtcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGNvbnRyaWJ1dG9ycykpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBjb250cmlidXRvcnMsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gY29udHJpYnV0b3JzO1xufVxuXG5leHBvcnQgY29uc3QgV0hJVEVMSVNUID0gWydfcmV2JywgJ25hbWUnLCAndmVyc2lvbnMnLCAnZGlzdC10YWdzJywgJ3JlYWRtZScsICd0aW1lJywgJ19pZCcsICd1c2VycyddO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcExpbmtzUmVmKGtlZXBVcExpbmtEYXRhOiBib29sZWFuLCByZXN1bHQ6IFBhY2thZ2UpOiBQYWNrYWdlIHtcbiAgY29uc3QgcHJvcGVydHlUb0tlZXAgPSBbLi4uV0hJVEVMSVNUXTtcbiAgaWYgKGtlZXBVcExpbmtEYXRhID09PSB0cnVlKSB7XG4gICAgcHJvcGVydHlUb0tlZXAucHVzaCgnX3VwbGlua3MnKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgaSBpbiByZXN1bHQpIHtcbiAgICBpZiAocHJvcGVydHlUb0tlZXAuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgIC8vIFJlbW92ZSBzZWN0aW9ucyBsaWtlICdfdXBsaW5rcycgZnJvbSByZXNwb25zZVxuICAgICAgZGVsZXRlIHJlc3VsdFtpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwYWNrYWdlIGl0IGlzIGFscmVhZHkgYSBsb2NhbCBwYWNrYWdlXG4gKiBAcGFyYW0geyp9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gbG9jYWxTdG9yYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BhY2thZ2VMb2NhbChuYW1lOiBzdHJpbmcsIGxvY2FsU3RvcmFnZTogSVN0b3JhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICBsb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhKG5hbWUsIChlcnIsIHJlc3VsdHMpOiB2b2lkID0+IHtcbiAgICAgIGlmICghXy5pc05pbChlcnIpICYmIGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICByZXR1cm4gcmVqZWN0KEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuUEFDS0FHRV9FWElTVCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUGFja2FnZShuYW1lOiBzdHJpbmcsIG1ldGFkYXRhOiBhbnksIGxvY2FsU3RvcmFnZTogSVN0b3JhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICBsb2NhbFN0b3JhZ2UuYWRkUGFja2FnZShuYW1lLCBtZXRhZGF0YSwgKGVyciwgbGF0ZXN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIV8uaXNOdWxsKGVycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1VuZGVmaW5lZChsYXRlc3QpKSB7XG4gICAgICAgIFNlYXJjaC5hZGQobGF0ZXN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWNrYWdlUmVtb3RlKG5hbWU6IHN0cmluZywgaXNBbGxvd1B1Ymxpc2hPZmZsaW5lOiBib29sZWFuLCBzeW5jTWV0YWRhdGE6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgc3luY01ldGFkYXRhKG5hbWUsIG51bGwsIHt9LCAoZXJyLCBwYWNrYWdlSnNvbkxvY2FsLCB1cExpbmtzRXJyb3JzKTogdm9pZCA9PiB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VpcmRcbiAgICAgIGlmIChlcnIgJiYgZXJyLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2tpbmcgcGFja2FnZSBleGlzdCBhbHJlYWR5XG4gICAgICBpZiAoXy5pc05pbChwYWNrYWdlSnNvbkxvY2FsKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChFcnJvckNvZGUuZ2V0Q29uZmxpY3QoQVBJX0VSUk9SLlBBQ0tBR0VfRVhJU1QpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgZXJyb3JJdGVtID0gMDsgZXJyb3JJdGVtIDwgdXBMaW5rc0Vycm9ycy5sZW5ndGg7IGVycm9ySXRlbSsrKSB7XG4gICAgICAgIC8vIGNoZWNraW5nIGVycm9yXG4gICAgICAgIC8vIGlmIHVwbGluayBmYWlscyB3aXRoIGEgc3RhdHVzIG90aGVyIHRoYW4gNDA0LCB3ZSByZXBvcnQgZmFpbHVyZVxuICAgICAgICBpZiAoXy5pc05pbCh1cExpbmtzRXJyb3JzW2Vycm9ySXRlbV1bMF0pID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmICh1cExpbmtzRXJyb3JzW2Vycm9ySXRlbV1bMF0uc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGlmIChpc0FsbG93UHVibGlzaE9mZmxpbmUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChFcnJvckNvZGUuZ2V0U2VydmljZVVuYXZhaWxhYmxlKEFQSV9FUlJPUi5VUExJTktfT0ZGTElORV9QVUJMSVNIKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsKGxvY2FsTWV0YWRhdGE6IFBhY2thZ2UsIHJlbW90ZU1ldGFkYXRhOiBQYWNrYWdlKTogYW55IHtcbiAgaWYgKCd0aW1lJyBpbiByZW1vdGVNZXRhZGF0YSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBsb2NhbE1ldGFkYXRhLnRpbWUsIHJlbW90ZU1ldGFkYXRhLnRpbWUpO1xuICB9XG5cbiAgcmV0dXJuIGxvY2FsTWV0YWRhdGEudGltZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTZWFyY2hQYWNrYWdlKGRhdGE6IFBhY2thZ2UsIHRpbWU6IHVua25vd24pOiBhbnkge1xuICBjb25zdCBsaXN0VmVyc2lvbnM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YS52ZXJzaW9ucyk7XG4gIGNvbnN0IHZlcnNpb25zOiBzdHJpbmdbXSA9IHNlbXZlclNvcnQobGlzdFZlcnNpb25zKTtcbiAgY29uc3QgbGF0ZXN0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBkYXRhW0RJU1RfVEFHU10gJiYgZGF0YVtESVNUX1RBR1NdLmxhdGVzdCA/IGRhdGFbRElTVF9UQUdTXS5sYXRlc3QgOiB2ZXJzaW9ucy5wb3AoKTtcblxuICBpZiAobGF0ZXN0ICYmIGRhdGEudmVyc2lvbnNbbGF0ZXN0XSkge1xuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gPSBkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgY29uc3QgdmVyc2lvbnM6IGFueSA9IHsgW2xhdGVzdF06ICdsYXRlc3QnIH07XG4gICAgY29uc3QgcGtnOiBhbnkgPSB7XG4gICAgICBuYW1lOiB2ZXJzaW9uLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdmVyc2lvbi5kZXNjcmlwdGlvbixcbiAgICAgIFtESVNUX1RBR1NdOiB7IGxhdGVzdCB9LFxuICAgICAgbWFpbnRhaW5lcnM6IHZlcnNpb24ubWFpbnRhaW5lcnMgfHwgW3ZlcnNpb24uYXV0aG9yXS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICBhdXRob3I6IHZlcnNpb24uYXV0aG9yLFxuICAgICAgcmVwb3NpdG9yeTogdmVyc2lvbi5yZXBvc2l0b3J5LFxuICAgICAgcmVhZG1lRmlsZW5hbWU6IHZlcnNpb24ucmVhZG1lRmlsZW5hbWUgfHwgJycsXG4gICAgICBob21lcGFnZTogdmVyc2lvbi5ob21lcGFnZSxcbiAgICAgIGtleXdvcmRzOiB2ZXJzaW9uLmtleXdvcmRzLFxuICAgICAgYnVnczogdmVyc2lvbi5idWdzLFxuICAgICAgbGljZW5zZTogdmVyc2lvbi5saWNlbnNlLFxuICAgICAgdGltZToge1xuICAgICAgICBtb2RpZmllZDogdGltZSxcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBrZztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgbWV0YWR0YSBoYXMgZW5vdWdoIGRhdGEgdG8gYmUgcHVibGlzaGVkXG4gKiBAcGFyYW0gcGtnIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1B1Ymxpc2hhYmxlUGFja2FnZShwa2c6IFBhY2thZ2UpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhwa2cpO1xuXG4gIHJldHVybiBfLmluY2x1ZGVzKGtleXMsICd2ZXJzaW9ucycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sU0FBU0EsdUJBQVQsQ0FBaUNDLElBQWpDLEVBQXdEO0VBQzdELE9BQU87SUFDTDtJQUNBQSxJQUZLO0lBR0xDLFFBQVEsRUFBRSxFQUhMO0lBSUxDLElBQUksRUFBRSxFQUpEO0lBS0wsQ0FBQ0MsZ0JBQUQsR0FBUyxFQUxKO0lBTUwsQ0FBQ0Msb0JBQUQsR0FBYSxFQU5SO0lBT0xDLFFBQVEsRUFBRSxFQVBMO0lBUUxDLFVBQVUsRUFBRSxFQVJQO0lBU0xDLFlBQVksRUFBRSxFQVRUO0lBVUxDLElBQUksRUFBRTtFQVZELENBQVA7QUFZRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTQyxnQkFB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
|
|
271
|
+
|
|
272
|
+
function convertAbbreviatedManifest(manifest) {
|
|
273
|
+
var _manifest$time;
|
|
274
|
+
|
|
275
|
+
const abbreviatedVersions = Object.keys(manifest.versions).reduce((acc, version) => {
|
|
276
|
+
const _version = manifest.versions[version]; // This should be align with this document
|
|
277
|
+
// https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object
|
|
278
|
+
|
|
279
|
+
const _version_abbreviated = {
|
|
280
|
+
name: _version.name,
|
|
281
|
+
version: _version.version,
|
|
282
|
+
description: _version.description,
|
|
283
|
+
deprecated: _version.deprecated,
|
|
284
|
+
bin: _version.bin,
|
|
285
|
+
dist: _version.dist,
|
|
286
|
+
engines: _version.engines,
|
|
287
|
+
funding: _version.funding,
|
|
288
|
+
directories: _version.directories,
|
|
289
|
+
dependencies: _version.dependencies,
|
|
290
|
+
devDependencies: _version.devDependencies,
|
|
291
|
+
peerDependencies: _version.peerDependencies,
|
|
292
|
+
optionalDependencies: _version.optionalDependencies,
|
|
293
|
+
bundleDependencies: _version.bundleDependencies,
|
|
294
|
+
// npm cli specifics
|
|
295
|
+
_hasShrinkwrap: _version._hasShrinkwrap,
|
|
296
|
+
hasInstallScript: _version.hasInstallScript
|
|
297
|
+
};
|
|
298
|
+
acc[version] = _version_abbreviated;
|
|
299
|
+
return acc;
|
|
300
|
+
}, {});
|
|
301
|
+
const convertedManifest = {
|
|
302
|
+
name: manifest['name'],
|
|
303
|
+
[_constants.DIST_TAGS]: manifest[_constants.DIST_TAGS],
|
|
304
|
+
versions: abbreviatedVersions,
|
|
305
|
+
// @ts-ignore
|
|
306
|
+
modified: manifest === null || manifest === void 0 ? void 0 : (_manifest$time = manifest.time) === null || _manifest$time === void 0 ? void 0 : _manifest$time.modified,
|
|
307
|
+
// NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2
|
|
308
|
+
time: manifest === null || manifest === void 0 ? void 0 : manifest.time
|
|
309
|
+
}; // @ts-ignore
|
|
310
|
+
|
|
311
|
+
return convertedManifest;
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSIsIm5hbWUiLCJ2ZXJzaW9ucyIsInRpbWUiLCJVU0VSUyIsIkRJU1RfVEFHUyIsIl91cGxpbmtzIiwiX2Rpc3RmaWxlcyIsIl9hdHRhY2htZW50cyIsIl9yZXYiLCJub3JtYWxpemVQYWNrYWdlIiwicGtnIiwicGtnUHJvcGVydGllcyIsImZvckVhY2giLCJrZXkiLCJwa2dQcm9wIiwiXyIsImlzTmlsIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsIlNUT1JBR0UiLCJERUZBVUxUX1JFVklTSU9OIiwiX2lkIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJnZW5lcmF0ZVJldmlzaW9uIiwicmV2Iiwic3BsaXQiLCJnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyIsImdldExhdGVzdFJlYWRtZSIsImRpc3RUYWdzIiwibGF0ZXN0VmVyc2lvbiIsInJlYWRtZSIsInRyaW0iLCJyZWFkbWVEaXN0VGFnc1ByaW9yaXR5IiwibWFwIiwidGFnIiwidmVyc2lvbiIsImNsZWFuVXBSZWFkbWUiLCJub3JtYWxpemVDb250cmlidXRvcnMiLCJjb250cmlidXRvcnMiLCJpc0FycmF5IiwiV0hJVEVMSVNUIiwiY2xlYW5VcExpbmtzUmVmIiwia2VlcFVwTGlua0RhdGEiLCJyZXN1bHQiLCJwcm9wZXJ0eVRvS2VlcCIsInB1c2giLCJpIiwiaW5kZXhPZiIsImNoZWNrUGFja2FnZUxvY2FsIiwibG9jYWxTdG9yYWdlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJnZXRQYWNrYWdlTWV0YWRhdGEiLCJlcnIiLCJyZXN1bHRzIiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJFcnJvckNvZGUiLCJnZXRDb25mbGljdCIsIkFQSV9FUlJPUiIsIlBBQ0tBR0VfRVhJU1QiLCJwdWJsaXNoUGFja2FnZSIsIm1ldGFkYXRhIiwiYWRkUGFja2FnZSIsImxhdGVzdCIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiU2VhcmNoIiwiYWRkIiwiY2hlY2tQYWNrYWdlUmVtb3RlIiwiaXNBbGxvd1B1Ymxpc2hPZmZsaW5lIiwic3luY01ldGFkYXRhIiwicGFja2FnZUpzb25Mb2NhbCIsInVwTGlua3NFcnJvcnMiLCJlcnJvckl0ZW0iLCJsZW5ndGgiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJVUExJTktfT0ZGTElORV9QVUJMSVNIIiwibWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsIiwibG9jYWxNZXRhZGF0YSIsInJlbW90ZU1ldGFkYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwicHJlcGFyZVNlYXJjaFBhY2thZ2UiLCJkYXRhIiwibGlzdFZlcnNpb25zIiwia2V5cyIsInNlbXZlclNvcnQiLCJwb3AiLCJkZXNjcmlwdGlvbiIsIm1haW50YWluZXJzIiwiYXV0aG9yIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcG9zaXRvcnkiLCJyZWFkbWVGaWxlbmFtZSIsImhvbWVwYWdlIiwia2V5d29yZHMiLCJidWdzIiwibGljZW5zZSIsIm1vZGlmaWVkIiwiaXNQdWJsaXNoYWJsZVBhY2thZ2UiLCJpbmNsdWRlcyIsImNvbnZlcnRBYmJyZXZpYXRlZE1hbmlmZXN0IiwibWFuaWZlc3QiLCJhYmJyZXZpYXRlZFZlcnNpb25zIiwicmVkdWNlIiwiYWNjIiwiX3ZlcnNpb24iLCJfdmVyc2lvbl9hYmJyZXZpYXRlZCIsImRlcHJlY2F0ZWQiLCJiaW4iLCJkaXN0IiwiZW5naW5lcyIsImZ1bmRpbmciLCJkaXJlY3RvcmllcyIsImRlcGVuZGVuY2llcyIsImRldkRlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsImJ1bmRsZURlcGVuZGVuY2llcyIsIl9oYXNTaHJpbmt3cmFwIiwiaGFzSW5zdGFsbFNjcmlwdCIsImNvbnZlcnRlZE1hbmlmZXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zdG9yYWdlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEFiYnJldmlhdGVkTWFuaWZlc3QsIEFiYnJldmlhdGVkVmVyc2lvbnMsIEF1dGhvciwgTWFuaWZlc3QsIFBhY2thZ2UsIFZlcnNpb24gfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgSVN0b3JhZ2UgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyB9IGZyb20gJy4uL2xpYi9jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBESVNUX1RBR1MsIEhUVFBfU1RBVFVTLCBTVE9SQUdFLCBVU0VSUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBTZWFyY2ggZnJvbSAnLi9zZWFyY2gnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBpc09iamVjdCwgbm9ybWFsaXplRGlzdFRhZ3MsIHNlbXZlclNvcnQgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlKG5hbWU6IHN0cmluZyk6IFBhY2thZ2Uge1xuICByZXR1cm4ge1xuICAgIC8vIHN0YW5kYXJkIHRoaW5nc1xuICAgIG5hbWUsXG4gICAgdmVyc2lvbnM6IHt9LFxuICAgIHRpbWU6IHt9LFxuICAgIFtVU0VSU106IHt9LFxuICAgIFtESVNUX1RBR1NdOiB7fSxcbiAgICBfdXBsaW5rczoge30sXG4gICAgX2Rpc3RmaWxlczoge30sXG4gICAgX2F0dGFjaG1lbnRzOiB7fSxcbiAgICBfcmV2OiAnJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcGFja2FnZSBwcm9wZXJ0aWVzLCB0YWdzLCByZXZpc2lvbiBpZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwa2cgcGFja2FnZSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYWNrYWdlKHBrZzogUGFja2FnZSk6IFBhY2thZ2Uge1xuICBjb25zdCBwa2dQcm9wZXJ0aWVzID0gWyd2ZXJzaW9ucycsICdkaXN0LXRhZ3MnLCAnX2Rpc3RmaWxlcycsICdfYXR0YWNobWVudHMnLCAnX3VwbGlua3MnLCAndGltZSddO1xuXG4gIHBrZ1Byb3BlcnRpZXMuZm9yRWFjaCgoa2V5KTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGtnUHJvcCA9IHBrZ1trZXldO1xuXG4gICAgaWYgKF8uaXNOaWwocGtnUHJvcCkgfHwgaXNPYmplY3QocGtnUHJvcCkgPT09IGZhbHNlKSB7XG4gICAgICBwa2dba2V5XSA9IHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9yZXYpID09PSBmYWxzZSkge1xuICAgIHBrZy5fcmV2ID0gU1RPUkFHRS5ERUZBVUxUX1JFVklTSU9OO1xuICB9XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9pZCkgPT09IGZhbHNlKSB7XG4gICAgcGtnLl9pZCA9IHBrZy5uYW1lO1xuICB9XG5cbiAgLy8gbm9ybWFsaXplIGRpc3QtdGFnc1xuICBub3JtYWxpemVEaXN0VGFncyhwa2cpO1xuXG4gIHJldHVybiBwa2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJldmlzaW9uKHJldjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgX3JldiA9IHJldi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiAoK19yZXZbMF0gfHwgMCkgKyAxICsgJy0nICsgZ2VuZXJhdGVSYW5kb21IZXhTdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdGVzdFJlYWRtZShwa2c6IFBhY2thZ2UpOiBzdHJpbmcge1xuICBjb25zdCB2ZXJzaW9ucyA9IHBrZ1sndmVyc2lvbnMnXSB8fCB7fTtcbiAgY29uc3QgZGlzdFRhZ3MgPSBwa2dbRElTVF9UQUdTXSB8fCB7fTtcbiAgLy8gRklYTUU6IGhlcmUgaXMgYSBiaXQgdHJpY2t5IGFkZCB0aGUgdHlwZXNcbiAgY29uc3QgbGF0ZXN0VmVyc2lvbjogVmVyc2lvbiB8IGFueSA9IGRpc3RUYWdzWydsYXRlc3QnXSA/IHZlcnNpb25zW2Rpc3RUYWdzWydsYXRlc3QnXV0gfHwge30gOiB7fTtcbiAgbGV0IHJlYWRtZSA9IF8udHJpbShwa2cucmVhZG1lIHx8IGxhdGVzdFZlcnNpb24ucmVhZG1lIHx8ICcnKTtcbiAgaWYgKHJlYWRtZSkge1xuICAgIHJldHVybiByZWFkbWU7XG4gIH1cblxuICAvLyBJbiBjYXNlIG9mIGVtcHR5IHJlYWRtZSAtIHRyeWluZyB0byBnZXQgQU5ZIHJlYWRtZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiAnbmV4dCcsJ2JldGEnLCdhbHBoYScsJ3Rlc3QnLCdkZXYnLCdjYW5hcnknXG4gIGNvbnN0IHJlYWRtZURpc3RUYWdzUHJpb3JpdHkgPSBbJ25leHQnLCAnYmV0YScsICdhbHBoYScsICd0ZXN0JywgJ2RldicsICdjYW5hcnknXTtcbiAgcmVhZG1lRGlzdFRhZ3NQcmlvcml0eS5tYXAoZnVuY3Rpb24gKHRhZyk6IHN0cmluZyB8IHZvaWQge1xuICAgIGlmIChyZWFkbWUpIHtcbiAgICAgIHJldHVybiByZWFkbWU7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gfCBhbnkgPSBkaXN0VGFnc1t0YWddID8gdmVyc2lvbnNbZGlzdFRhZ3NbdGFnXV0gfHwge30gOiB7fTtcbiAgICByZWFkbWUgPSBfLnRyaW0odmVyc2lvbi5yZWFkbWUgfHwgcmVhZG1lKTtcbiAgfSk7XG4gIHJldHVybiByZWFkbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVwUmVhZG1lKHZlcnNpb246IFZlcnNpb24pOiBWZXJzaW9uIHtcbiAgaWYgKF8uaXNOaWwodmVyc2lvbikgPT09IGZhbHNlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGRlbGV0ZSB2ZXJzaW9uLnJlYWRtZTtcbiAgfVxuXG4gIHJldHVybiB2ZXJzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29udHJpYnV0b3JzKGNvbnRyaWJ1dG9yczogQXV0aG9yW10pOiBBdXRob3JbXSB7XG4gIGlmIChfLmlzTmlsKGNvbnRyaWJ1dG9ycykpIHtcbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSBpZiAoY29udHJpYnV0b3JzICYmIF8uaXNBcnJheShjb250cmlidXRvcnMpID09PSBmYWxzZSkge1xuICAgIC8vIEZJWE1FOiB0aGlzIGJyYW5jaCBpcyBjbGVhcmx5IG5vIGFuIGFycmF5LCBzdGlsbCB0c2MgY29tcGxhaW5zXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBbY29udHJpYnV0b3JzXTtcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGNvbnRyaWJ1dG9ycykpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBjb250cmlidXRvcnMsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gY29udHJpYnV0b3JzO1xufVxuXG5leHBvcnQgY29uc3QgV0hJVEVMSVNUID0gWydfcmV2JywgJ25hbWUnLCAndmVyc2lvbnMnLCAnZGlzdC10YWdzJywgJ3JlYWRtZScsICd0aW1lJywgJ19pZCcsICd1c2VycyddO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcExpbmtzUmVmKGtlZXBVcExpbmtEYXRhOiBib29sZWFuLCByZXN1bHQ6IFBhY2thZ2UpOiBQYWNrYWdlIHtcbiAgY29uc3QgcHJvcGVydHlUb0tlZXAgPSBbLi4uV0hJVEVMSVNUXTtcbiAgaWYgKGtlZXBVcExpbmtEYXRhID09PSB0cnVlKSB7XG4gICAgcHJvcGVydHlUb0tlZXAucHVzaCgnX3VwbGlua3MnKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgaSBpbiByZXN1bHQpIHtcbiAgICBpZiAocHJvcGVydHlUb0tlZXAuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgIC8vIFJlbW92ZSBzZWN0aW9ucyBsaWtlICdfdXBsaW5rcycgZnJvbSByZXNwb25zZVxuICAgICAgZGVsZXRlIHJlc3VsdFtpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwYWNrYWdlIGl0IGlzIGFscmVhZHkgYSBsb2NhbCBwYWNrYWdlXG4gKiBAcGFyYW0geyp9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gbG9jYWxTdG9yYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BhY2thZ2VMb2NhbChuYW1lOiBzdHJpbmcsIGxvY2FsU3RvcmFnZTogSVN0b3JhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICBsb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhKG5hbWUsIChlcnIsIHJlc3VsdHMpOiB2b2lkID0+IHtcbiAgICAgIGlmICghXy5pc05pbChlcnIpICYmIGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICByZXR1cm4gcmVqZWN0KEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuUEFDS0FHRV9FWElTVCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUGFja2FnZShuYW1lOiBzdHJpbmcsIG1ldGFkYXRhOiBhbnksIGxvY2FsU3RvcmFnZTogSVN0b3JhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICBsb2NhbFN0b3JhZ2UuYWRkUGFja2FnZShuYW1lLCBtZXRhZGF0YSwgKGVyciwgbGF0ZXN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIV8uaXNOdWxsKGVycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIGlmICghXy5pc1VuZGVmaW5lZChsYXRlc3QpKSB7XG4gICAgICAgIFNlYXJjaC5hZGQobGF0ZXN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWNrYWdlUmVtb3RlKG5hbWU6IHN0cmluZywgaXNBbGxvd1B1Ymxpc2hPZmZsaW5lOiBib29sZWFuLCBzeW5jTWV0YWRhdGE6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgc3luY01ldGFkYXRhKG5hbWUsIG51bGwsIHt9LCAoZXJyLCBwYWNrYWdlSnNvbkxvY2FsLCB1cExpbmtzRXJyb3JzKTogdm9pZCA9PiB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VpcmRcbiAgICAgIGlmIChlcnIgJiYgZXJyLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2tpbmcgcGFja2FnZSBleGlzdCBhbHJlYWR5XG4gICAgICBpZiAoXy5pc05pbChwYWNrYWdlSnNvbkxvY2FsKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChFcnJvckNvZGUuZ2V0Q29uZmxpY3QoQVBJX0VSUk9SLlBBQ0tBR0VfRVhJU1QpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgZXJyb3JJdGVtID0gMDsgZXJyb3JJdGVtIDwgdXBMaW5rc0Vycm9ycy5sZW5ndGg7IGVycm9ySXRlbSsrKSB7XG4gICAgICAgIC8vIGNoZWNraW5nIGVycm9yXG4gICAgICAgIC8vIGlmIHVwbGluayBmYWlscyB3aXRoIGEgc3RhdHVzIG90aGVyIHRoYW4gNDA0LCB3ZSByZXBvcnQgZmFpbHVyZVxuICAgICAgICBpZiAoXy5pc05pbCh1cExpbmtzRXJyb3JzW2Vycm9ySXRlbV1bMF0pID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmICh1cExpbmtzRXJyb3JzW2Vycm9ySXRlbV1bMF0uc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGlmIChpc0FsbG93UHVibGlzaE9mZmxpbmUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChFcnJvckNvZGUuZ2V0U2VydmljZVVuYXZhaWxhYmxlKEFQSV9FUlJPUi5VUExJTktfT0ZGTElORV9QVUJMSVNIKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsKGxvY2FsTWV0YWRhdGE6IFBhY2thZ2UsIHJlbW90ZU1ldGFkYXRhOiBQYWNrYWdlKTogYW55IHtcbiAgaWYgKCd0aW1lJyBpbiByZW1vdGVNZXRhZGF0YSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBsb2NhbE1ldGFkYXRhLnRpbWUsIHJlbW90ZU1ldGFkYXRhLnRpbWUpO1xuICB9XG5cbiAgcmV0dXJuIGxvY2FsTWV0YWRhdGEudGltZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTZWFyY2hQYWNrYWdlKGRhdGE6IFBhY2thZ2UsIHRpbWU6IHVua25vd24pOiBhbnkge1xuICBjb25zdCBsaXN0VmVyc2lvbnM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YS52ZXJzaW9ucyk7XG4gIGNvbnN0IHZlcnNpb25zOiBzdHJpbmdbXSA9IHNlbXZlclNvcnQobGlzdFZlcnNpb25zKTtcbiAgY29uc3QgbGF0ZXN0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBkYXRhW0RJU1RfVEFHU10gJiYgZGF0YVtESVNUX1RBR1NdLmxhdGVzdCA/IGRhdGFbRElTVF9UQUdTXS5sYXRlc3QgOiB2ZXJzaW9ucy5wb3AoKTtcblxuICBpZiAobGF0ZXN0ICYmIGRhdGEudmVyc2lvbnNbbGF0ZXN0XSkge1xuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gPSBkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgY29uc3QgdmVyc2lvbnM6IGFueSA9IHsgW2xhdGVzdF06ICdsYXRlc3QnIH07XG4gICAgY29uc3QgcGtnOiBhbnkgPSB7XG4gICAgICBuYW1lOiB2ZXJzaW9uLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdmVyc2lvbi5kZXNjcmlwdGlvbixcbiAgICAgIFtESVNUX1RBR1NdOiB7IGxhdGVzdCB9LFxuICAgICAgbWFpbnRhaW5lcnM6IHZlcnNpb24ubWFpbnRhaW5lcnMgfHwgW3ZlcnNpb24uYXV0aG9yXS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICBhdXRob3I6IHZlcnNpb24uYXV0aG9yLFxuICAgICAgcmVwb3NpdG9yeTogdmVyc2lvbi5yZXBvc2l0b3J5LFxuICAgICAgcmVhZG1lRmlsZW5hbWU6IHZlcnNpb24ucmVhZG1lRmlsZW5hbWUgfHwgJycsXG4gICAgICBob21lcGFnZTogdmVyc2lvbi5ob21lcGFnZSxcbiAgICAgIGtleXdvcmRzOiB2ZXJzaW9uLmtleXdvcmRzLFxuICAgICAgYnVnczogdmVyc2lvbi5idWdzLFxuICAgICAgbGljZW5zZTogdmVyc2lvbi5saWNlbnNlLFxuICAgICAgdGltZToge1xuICAgICAgICBtb2RpZmllZDogdGltZSxcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBrZztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgbWV0YWR0YSBoYXMgZW5vdWdoIGRhdGEgdG8gYmUgcHVibGlzaGVkXG4gKiBAcGFyYW0gcGtnIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1B1Ymxpc2hhYmxlUGFja2FnZShwa2c6IFBhY2thZ2UpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhwa2cpO1xuXG4gIHJldHVybiBfLmluY2x1ZGVzKGtleXMsICd2ZXJzaW9ucycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFiYnJldmlhdGVkTWFuaWZlc3QobWFuaWZlc3Q6IE1hbmlmZXN0KTogQWJicmV2aWF0ZWRNYW5pZmVzdCB7XG4gIGNvbnN0IGFiYnJldmlhdGVkVmVyc2lvbnMgPSBPYmplY3Qua2V5cyhtYW5pZmVzdC52ZXJzaW9ucykucmVkdWNlKChhY2M6IEFiYnJldmlhdGVkVmVyc2lvbnMsIHZlcnNpb246IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IF92ZXJzaW9uID0gbWFuaWZlc3QudmVyc2lvbnNbdmVyc2lvbl07XG4gICAgLy8gVGhpcyBzaG91bGQgYmUgYWxpZ24gd2l0aCB0aGlzIGRvY3VtZW50XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25wbS9yZWdpc3RyeS9ibG9iL21hc3Rlci9kb2NzL3Jlc3BvbnNlcy9wYWNrYWdlLW1ldGFkYXRhLm1kI2FiYnJldmlhdGVkLXZlcnNpb24tb2JqZWN0XG4gICAgY29uc3QgX3ZlcnNpb25fYWJicmV2aWF0ZWQgPSB7XG4gICAgICBuYW1lOiBfdmVyc2lvbi5uYW1lLFxuICAgICAgdmVyc2lvbjogX3ZlcnNpb24udmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBfdmVyc2lvbi5kZXNjcmlwdGlvbixcbiAgICAgIGRlcHJlY2F0ZWQ6IF92ZXJzaW9uLmRlcHJlY2F0ZWQsXG4gICAgICBiaW46IF92ZXJzaW9uLmJpbixcbiAgICAgIGRpc3Q6IF92ZXJzaW9uLmRpc3QsXG4gICAgICBlbmdpbmVzOiBfdmVyc2lvbi5lbmdpbmVzLFxuICAgICAgZnVuZGluZzogX3ZlcnNpb24uZnVuZGluZyxcbiAgICAgIGRpcmVjdG9yaWVzOiBfdmVyc2lvbi5kaXJlY3RvcmllcyxcbiAgICAgIGRlcGVuZGVuY2llczogX3ZlcnNpb24uZGVwZW5kZW5jaWVzLFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiBfdmVyc2lvbi5kZXZEZXBlbmRlbmNpZXMsXG4gICAgICBwZWVyRGVwZW5kZW5jaWVzOiBfdmVyc2lvbi5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IF92ZXJzaW9uLm9wdGlvbmFsRGVwZW5kZW5jaWVzLFxuICAgICAgYnVuZGxlRGVwZW5kZW5jaWVzOiBfdmVyc2lvbi5idW5kbGVEZXBlbmRlbmNpZXMsXG4gICAgICAvLyBucG0gY2xpIHNwZWNpZmljc1xuICAgICAgX2hhc1Nocmlua3dyYXA6IF92ZXJzaW9uLl9oYXNTaHJpbmt3cmFwLFxuICAgICAgaGFzSW5zdGFsbFNjcmlwdDogX3ZlcnNpb24uaGFzSW5zdGFsbFNjcmlwdCxcbiAgICB9O1xuICAgIGFjY1t2ZXJzaW9uXSA9IF92ZXJzaW9uX2FiYnJldmlhdGVkO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgY29uc3QgY29udmVydGVkTWFuaWZlc3QgPSB7XG4gICAgbmFtZTogbWFuaWZlc3RbJ25hbWUnXSxcbiAgICBbRElTVF9UQUdTXTogbWFuaWZlc3RbRElTVF9UQUdTXSxcbiAgICB2ZXJzaW9uczogYWJicmV2aWF0ZWRWZXJzaW9ucyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kaWZpZWQ6IG1hbmlmZXN0Py50aW1lPy5tb2RpZmllZCxcbiAgICAvLyBOT1RFOiBzcGVjaWFsIGNhc2UgZm9yIHBucG0gaHR0cHM6Ly9naXRodWIuY29tL3BucG0vcmZjcy9wdWxsLzJcbiAgICB0aW1lOiBtYW5pZmVzdD8udGltZSxcbiAgfTtcblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjb252ZXJ0ZWRNYW5pZmVzdDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFTyxTQUFTQSx1QkFBVCxDQUFpQ0MsSUFBakMsRUFBd0Q7RUFDN0QsT0FBTztJQUNMO0lBQ0FBLElBRks7SUFHTEMsUUFBUSxFQUFFLEVBSEw7SUFJTEMsSUFBSSxFQUFFLEVBSkQ7SUFLTCxDQUFDQyxnQkFBRCxHQUFTLEVBTEo7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
|
package/build/lib/storage.js
CHANGED
|
@@ -360,7 +360,12 @@ class Storage {
|
|
|
360
360
|
(0, _utils.normalizeDistTags)((0, _storageUtils.cleanUpLinksRef)(options.keepUpLinkData, result)); // npm can throw if this field doesn't exist
|
|
361
361
|
|
|
362
362
|
result._attachments = {};
|
|
363
|
-
|
|
363
|
+
|
|
364
|
+
if (options.abbreviated === true) {
|
|
365
|
+
options.callback(null, (0, _storageUtils.convertAbbreviatedManifest)(result), uplinkErrors);
|
|
366
|
+
} else {
|
|
367
|
+
options.callback(null, result, uplinkErrors);
|
|
368
|
+
}
|
|
364
369
|
});
|
|
365
370
|
});
|
|
366
371
|
}
|
|
@@ -657,4 +662,4 @@ class Storage {
|
|
|
657
662
|
|
|
658
663
|
var _default = Storage;
|
|
659
664
|
exports.default = _default;
|
|
660
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdG9yYWdlIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJ1cGxpbmtzIiwic2V0dXBVcExpbmtzIiwibG9nZ2VyIiwiZmlsdGVycyIsImxvY2FsU3RvcmFnZSIsImluaXQiLCJMb2NhbFN0b3JhZ2UiLCJnZXRTZWNyZXQiLCJhZGRQYWNrYWdlIiwibmFtZSIsIm1ldGFkYXRhIiwiY2FsbGJhY2siLCJjaGVja1BhY2thZ2VMb2NhbCIsImNoZWNrUGFja2FnZVJlbW90ZSIsIl9pc0FsbG93UHVibGlzaE9mZmxpbmUiLCJfc3luY1VwbGlua3NNZXRhZGF0YSIsImJpbmQiLCJwdWJsaXNoUGFja2FnZSIsImVyciIsInB1Ymxpc2giLCJfIiwiaXNCb29sZWFuIiwiYWxsb3dfb2ZmbGluZSIsInJlYWRUb2tlbnMiLCJmaWx0ZXIiLCJzYXZlVG9rZW4iLCJ0b2tlbiIsImRlbGV0ZVRva2VuIiwidXNlciIsInRva2VuS2V5IiwiYWRkVmVyc2lvbiIsInZlcnNpb24iLCJ0YWciLCJtZXJnZVRhZ3MiLCJ0YWdIYXNoIiwiY2hhbmdlUGFja2FnZSIsInJldmlzaW9uIiwicmVtb3ZlUGFja2FnZSIsIlNlYXJjaCIsInJlbW92ZSIsInJlbW92ZVRhcmJhbGwiLCJmaWxlbmFtZSIsImFkZFRhcmJhbGwiLCJoYXNMb2NhbFRhcmJhbGwiLCJzZWxmIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsb2NhbFN0cmVhbSIsImdldFRhcmJhbGwiLCJpc09wZW4iLCJvbiIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiTk9UX0ZPVU5EIiwiYWJvcnQiLCJyZWFkU3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJlbWl0IiwiZXJyNDA0IiwiZ2V0UGFja2FnZU1ldGFkYXRhIiwiaW5mbyIsImlzTmlsIiwiX2Rpc3RmaWxlcyIsInNlcnZlRmlsZSIsInYiLCJwaXBlIiwiZmlsZSIsInVwbGluayIsInVwbGlua0lkIiwiaGFzUHJveHlUbyIsInBhY2thZ2VzIiwiUHJveHlTdG9yYWdlIiwidXJsIiwiY2FjaGUiLCJfYXV0b2dlbmVyYXRlZCIsInNhdmVzdHJlYW0iLCJvbl9vcGVuIiwicnN0cmVhbTIiLCJmZXRjaFRhcmJhbGwiLCJkb25lIiwid2FybiIsImZpbGVOYW1lIiwiZ2V0UGFja2FnZSIsIm9wdGlvbnMiLCJkYXRhIiwiSU5URVJOQUxfRVJST1IiLCJyZXEiLCJ1cGxpbmtzTG9vayIsImdldFBhY2thZ2VTeW5VcExpbmtzQ2FsbGJhY2siLCJyZXN1bHQiLCJ1cGxpbmtFcnJvcnMiLCJub3JtYWxpemVEaXN0VGFncyIsImNsZWFuVXBMaW5rc1JlZiIsImtlZXBVcExpbmtEYXRhIiwiX2F0dGFjaG1lbnRzIiwic2VhcmNoIiwic3RhcnRrZXkiLCJzZWFyY2hTdHJlYW0iLCJTdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJhc3luYyIsImVhY2hTZXJpZXMiLCJPYmplY3QiLCJrZXlzIiwidXBfbmFtZSIsImNiIiwicXVlcnkiLCJsb2NhbCIsInVuZGVmaW5lZCIsInVwbGlua1N0cmVhbSIsImVuZCIsImVycm9yIiwibG9jYWxTZWFyY2hTdHJlYW0iLCJnZXRMb2NhbERhdGFiYXNlIiwic3RvcmFnZVBsdWdpbiIsImdldCIsImxvY2FscyIsIml0ZW1Qa2ciLCJwa2dNZXRhZGF0YSIsImxhdGVzdCIsIkRJU1RfVEFHUyIsInZlcnNpb25zIiwidGltZUxpc3QiLCJ0aW1lIiwidXNlcnMiLCJwdXNoIiwicGFja2FnZSIsImxlbmd0aCIsInBhY2thZ2VJbmZvIiwiZm91bmQiLCJ1cExpbmtzIiwiaGFzVG9Mb29rSW50b1VwbGlua3MiLCJnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSIsIm1hcCIsInVwTGluayIsIl9vcHRpb25zIiwiYXNzaWduIiwidXBMaW5rTWV0YSIsIl91cGxpbmtzIiwidXBuYW1lIiwiaXNPYmplY3QiLCJmZXRjaGVkIiwiRGF0ZSIsIm5vdyIsIm1heGFnZSIsImV0YWciLCJnZXRSZW1vdGVNZXRhZGF0YSIsInVwTGlua1Jlc3BvbnNlIiwiZVRhZyIsInJlbW90ZVN0YXR1cyIsIkVycm9yQ29kZSIsImdldEludGVybmFsRXJyb3IiLCJ2YWxpZGF0ZU1ldGFkYXRhIiwic3ViIiwibWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsIiwidXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsiLCJtZXJnZVZlcnNpb25zIiwidXBMaW5rc0Vycm9ycyIsImFzc2VydCIsIkFycmF5IiwiaXNBcnJheSIsInVwbGlua1RpbWVvdXRFcnJvciIsImkiLCJqIiwiY29kZSIsImdldFNlcnZpY2VVbmF2YWlsYWJsZSIsImdldE5vdEZvdW5kIiwiQVBJX0VSUk9SIiwiTk9fUEFDS0FHRSIsInVwZGF0ZVZlcnNpb25zIiwicGFja2FnZUpzb25Mb2NhbCIsImZpbHRlckVycm9ycyIsImZpbHRlcl9tZXRhZGF0YSIsImNvbmNhdCIsIl91cGRhdGVWZXJzaW9uc0hpZGRlblVwTGluayIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlN5bWJvbCIsImZvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc3RvcmFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgYXN5bmMsIHsgQXN5bmNSZXN1bHRBcnJheUNhbGxiYWNrIH0gZnJvbSAnYXN5bmMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBTdHJlYW0gZnJvbSAnc3RyZWFtJztcblxuaW1wb3J0IHsgVmVyZGFjY2lvRXJyb3IgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IFJlYWRUYXJiYWxsIH0gZnJvbSAnQHZlcmRhY2Npby9zdHJlYW1zJztcbmltcG9ydCB7IENhbGxiYWNrLCBDb25maWcsIERpc3RGaWxlLCBJUmVhZFRhcmJhbGwsIElVcGxvYWRUYXJiYWxsLCBMb2dnZXIsIE1lcmdlVGFncywgUGFja2FnZSwgVmVyc2lvbiwgVmVyc2lvbnMgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IEdlbmVyaWNCb2R5LCBUb2tlbiwgVG9rZW5GaWx0ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgSUdldFBhY2thZ2VPcHRpb25zLCBJUGx1Z2luRmlsdGVycywgSVByb3h5LCBJU3RvcmFnZSwgSVN0b3JhZ2VIYW5kbGVyLCBJU3luY1VwbGlua3MsIFByb3h5TGlzdCwgU3RyaW5nVmFsdWUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9saWIvbG9nZ2VyJztcbmltcG9ydCB7IGhhc1Byb3h5VG8gfSBmcm9tICcuL2NvbmZpZy11dGlscyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIERJU1RfVEFHUywgSFRUUF9TVEFUVVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgTG9jYWxTdG9yYWdlIGZyb20gJy4vbG9jYWwtc3RvcmFnZSc7XG5pbXBvcnQgeyBtZXJnZVZlcnNpb25zIH0gZnJvbSAnLi9tZXRhZGF0YS11dGlscyc7XG5pbXBvcnQgU2VhcmNoIGZyb20gJy4vc2VhcmNoJztcbmltcG9ydCB7IGNoZWNrUGFja2FnZUxvY2FsLCBjaGVja1BhY2thZ2VSZW1vdGUsIGNsZWFuVXBMaW5rc1JlZiwgZ2VuZXJhdGVQYWNrYWdlVGVtcGxhdGUsIG1lcmdlVXBsaW5rVGltZUludG9Mb2NhbCwgcHVibGlzaFBhY2thZ2UgfSBmcm9tICcuL3N0b3JhZ2UtdXRpbHMnO1xuaW1wb3J0IFByb3h5U3RvcmFnZSBmcm9tICcuL3VwLXN0b3JhZ2UnO1xuaW1wb3J0IHsgc2V0dXBVcExpbmtzLCB1cGRhdGVWZXJzaW9uc0hpZGRlblVwTGluayB9IGZyb20gJy4vdXBsaW5rLXV0aWwnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBpc09iamVjdCwgbm9ybWFsaXplRGlzdFRhZ3MsIHZhbGlkYXRlTWV0YWRhdGEgfSBmcm9tICcuL3V0aWxzJztcblxuY2xhc3MgU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlSGFuZGxlciB7XG4gIHB1YmxpYyBsb2NhbFN0b3JhZ2U6IElTdG9yYWdlO1xuICBwdWJsaWMgY29uZmlnOiBDb25maWc7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHVwbGlua3M6IFByb3h5TGlzdDtcbiAgcHVibGljIGZpbHRlcnM6IElQbHVnaW5GaWx0ZXJzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMudXBsaW5rcyA9IHNldHVwVXBMaW5rcyhjb25maWcpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmxvY2FsU3RvcmFnZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgaW5pdChjb25maWc6IENvbmZpZywgZmlsdGVyczogSVBsdWdpbkZpbHRlcnMgPSBbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICB0aGlzLmxvY2FsU3RvcmFnZSA9IG5ldyBMb2NhbFN0b3JhZ2UodGhpcy5jb25maWcsIGxvZ2dlcik7XG5cbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0U2VjcmV0KGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogIEFkZCBhIHtuYW1lfSBwYWNrYWdlIHRvIGEgc3lzdGVtXG4gICBGdW5jdGlvbiBjaGVja3MgaWYgcGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYXZhaWxhYmxlIGZyb20gdXBsaW5rcy5cbiAgIElmIGl0IGlzbid0LCB3ZSBjcmVhdGUgcGFja2FnZSBsb2NhbGx5XG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpICYmIHVwbGlua3NcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKG5hbWU6IHN0cmluZywgbWV0YWRhdGE6IGFueSwgY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNoZWNrUGFja2FnZUxvY2FsKG5hbWUsIHRoaXMubG9jYWxTdG9yYWdlKTtcbiAgICAgIGF3YWl0IGNoZWNrUGFja2FnZVJlbW90ZShuYW1lLCB0aGlzLl9pc0FsbG93UHVibGlzaE9mZmxpbmUoKSwgdGhpcy5fc3luY1VwbGlua3NNZXRhZGF0YS5iaW5kKHRoaXMpKTtcbiAgICAgIGF3YWl0IHB1Ymxpc2hQYWNrYWdlKG5hbWUsIG1ldGFkYXRhLCB0aGlzLmxvY2FsU3RvcmFnZSBhcyBJU3RvcmFnZSk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0FsbG93UHVibGlzaE9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmNvbmZpZy5wdWJsaXNoICE9PSAndW5kZWZpbmVkJyAmJiBfLmlzQm9vbGVhbih0aGlzLmNvbmZpZy5wdWJsaXNoLmFsbG93X29mZmxpbmUpICYmIHRoaXMuY29uZmlnLnB1Ymxpc2guYWxsb3dfb2ZmbGluZTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkVG9rZW5zKGZpbHRlcjogVG9rZW5GaWx0ZXIpOiBQcm9taXNlPFRva2VuW10+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UucmVhZFRva2VucyhmaWx0ZXIpO1xuICB9XG5cbiAgcHVibGljIHNhdmVUb2tlbih0b2tlbjogVG9rZW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2Uuc2F2ZVRva2VuKHRva2VuKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVUb2tlbih1c2VyOiBzdHJpbmcsIHRva2VuS2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5kZWxldGVUb2tlbih1c2VyLCB0b2tlbktleSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHZlcnNpb24gb2YgcGFja2FnZSB7bmFtZX0gdG8gYSBzeXN0ZW1cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyBhZGRWZXJzaW9uKG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCBtZXRhZGF0YTogVmVyc2lvbiwgdGFnOiBTdHJpbmdWYWx1ZSwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UuYWRkVmVyc2lvbihuYW1lLCB2ZXJzaW9uLCBtZXRhZGF0YSwgdGFnLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogVGFncyBhIHBhY2thZ2UgdmVyc2lvbiB3aXRoIGEgcHJvdmlkZWQgdGFnXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgbWVyZ2VUYWdzKG5hbWU6IHN0cmluZywgdGFnSGFzaDogTWVyZ2VUYWdzLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5tZXJnZVRhZ3MobmFtZSwgdGFnSGFzaCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBhbiBleGlzdGluZyBwYWNrYWdlIChpLmUuIHVucHVibGlzaCBvbmUgdmVyc2lvbilcbiAgIEZ1bmN0aW9uIGNoYW5nZXMgYSBwYWNrYWdlIGluZm8gZnJvbSBsb2NhbCBzdG9yYWdlIGFuZCBhbGwgdXBsaW5rcyB3aXRoIHdyaXRlIGFjY2Vzcy4vXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlUGFja2FnZShuYW1lOiBzdHJpbmcsIG1ldGFkYXRhOiBQYWNrYWdlLCByZXZpc2lvbjogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5jaGFuZ2VQYWNrYWdlKG5hbWUsIG1ldGFkYXRhLCByZXZpc2lvbiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHBhY2thZ2UgZnJvbSBhIHN5c3RlbVxuICAgRnVuY3Rpb24gcmVtb3ZlcyBhIHBhY2thZ2UgZnJvbSBsb2NhbCBzdG9yYWdlXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUGFja2FnZShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZVBhY2thZ2UobmFtZSwgY2FsbGJhY2spO1xuICAgIC8vIHVwZGF0ZSB0aGUgaW5kZXhlclxuICAgIFNlYXJjaC5yZW1vdmUobmFtZSk7XG4gIH1cblxuICAvKipcbiAgIFJlbW92ZSBhIHRhcmJhbGwgZnJvbSBhIHN5c3RlbVxuICAgRnVuY3Rpb24gcmVtb3ZlcyBhIHRhcmJhbGwgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgVGFyYmFsbCBpbiBxdWVzdGlvbiBzaG91bGQgbm90IGJlIGxpbmtlZCB0byBpbiBhbnkgZXhpc3RpbmdcbiAgIHZlcnNpb25zLCBpLmUuIHBhY2thZ2UgdmVyc2lvbiBzaG91bGQgYmUgdW5wdWJsaXNoZWQgZmlyc3QuXG4gICBVc2VkIHN0b3JhZ2U6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgcmV2aXNpb246IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlVGFyYmFsbChuYW1lLCBmaWxlbmFtZSwgcmV2aXNpb24sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgYSB0YXJiYWxsIGZvciB7bmFtZX0gcGFja2FnZVxuICAgRnVuY3Rpb24gaXMgc3luY2hyb25vdXMgYW5kIHJldHVybnMgYSBXcml0YWJsZVN0cmVhbVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIGFkZFRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogSVVwbG9hZFRhcmJhbGwge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5hZGRUYXJiYWxsKG5hbWUsIGZpbGVuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2NhbFRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGxldCBsb2NhbFN0cmVhbTogYW55ID0gc2VsZi5sb2NhbFN0b3JhZ2UuZ2V0VGFyYmFsbChuYW1lLCBmaWxlbmFtZSk7XG4gICAgICBsZXQgaXNPcGVuID0gZmFsc2U7XG4gICAgICBsb2NhbFN0cmVhbS5vbignZXJyb3InLCAoZXJyKTogYW55ID0+IHtcbiAgICAgICAgaWYgKGlzT3BlbiB8fCBlcnIuc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbCByZXBvcnRlZCA0MDQgb3IgcmVxdWVzdCB3YXMgYWJvcnRlZCBhbHJlYWR5XG4gICAgICAgIGlmIChsb2NhbFN0cmVhbSkge1xuICAgICAgICAgIGxvY2FsU3RyZWFtLmFib3J0KCk7XG4gICAgICAgICAgbG9jYWxTdHJlYW0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgICBsb2NhbFN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgbG9jYWxTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgbG9jYWxTdHJlYW0gPSBudWxsO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgIEdldCBhIHRhcmJhbGwgZnJvbSBhIHN0b3JhZ2UgZm9yIHtuYW1lfSBwYWNrYWdlXG4gICBGdW5jdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgcmV0dXJucyBhIFJlYWRhYmxlU3RyZWFtXG4gICBGdW5jdGlvbiB0cmllcyB0byByZWFkIHRhcmJhbGwgbG9jYWxseSwgaWYgaXQgZmFpbHMgdGhlbiBpdCByZWFkcyBwYWNrYWdlXG4gICBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiBnZXQgdGhpcyB0YXJiYWxsIGZyb21cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsIHx8IHVwbGluayAoanVzdCBvbmUpXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBJUmVhZFRhcmJhbGwge1xuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBuZXcgUmVhZFRhcmJhbGwoe30pO1xuICAgIHJlYWRTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgLy8gaWYgc29tZW9uZSByZXF1ZXN0aW5nIHRhcmJhbGwsIGl0IG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBzb21lXG4gICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgaXQsIHNvIGZldGNoaW5nIHBhY2thZ2UgaW5mbyBpcyB1bm5lY2Vzc2FyeVxuXG4gICAgLy8gdHJ5aW5nIGxvY2FsIGZpcnN0XG4gICAgLy8gZmxvdzogc2hvdWxkIGJlIElSZWFkVGFyYmFsbFxuICAgIGxldCBsb2NhbFN0cmVhbTogYW55ID0gc2VsZi5sb2NhbFN0b3JhZ2UuZ2V0VGFyYmFsbChuYW1lLCBmaWxlbmFtZSk7XG4gICAgbGV0IGlzT3BlbiA9IGZhbHNlO1xuICAgIGxvY2FsU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpOiBhbnkgPT4ge1xuICAgICAgaWYgKGlzT3BlbiB8fCBlcnIuc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2NhbCByZXBvcnRlZCA0MDRcbiAgICAgIGNvbnN0IGVycjQwNCA9IGVycjtcbiAgICAgIGxvY2FsU3RyZWFtLmFib3J0KCk7XG4gICAgICBsb2NhbFN0cmVhbSA9IG51bGw7IC8vIHdlIGZvcmNlIGZvciBnYXJiYWdlIGNvbGxlY3RvclxuICAgICAgc2VsZi5sb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhKG5hbWUsIChlcnIsIGluZm86IFBhY2thZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSAmJiBpbmZvLl9kaXN0ZmlsZXMgJiYgXy5pc05pbChpbmZvLl9kaXN0ZmlsZXNbZmlsZW5hbWVdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUgZXhpc3RzIGxvY2FsbHlcbiAgICAgICAgICBzZXJ2ZUZpbGUoaW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gd2Uga25vdyBub3RoaW5nIGFib3V0IHRoaXMgZmlsZSwgdHJ5aW5nIHRvIGdldCBpbmZvcm1hdGlvbiBlbHNld2hlcmVcbiAgICAgICAgICBzZWxmLl9zeW5jVXBsaW5rc01ldGFkYXRhKG5hbWUsIGluZm8sIHt9LCAoZXJyLCBpbmZvOiBQYWNrYWdlKTogYW55ID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWFkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmlzTmlsKGluZm8uX2Rpc3RmaWxlcykgfHwgXy5pc05pbChpbmZvLl9kaXN0ZmlsZXNbZmlsZW5hbWVdKSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycjQwNCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJ2ZUZpbGUoaW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGxvY2FsU3RyZWFtLm9uKCdjb250ZW50LWxlbmd0aCcsIGZ1bmN0aW9uICh2KTogdm9pZCB7XG4gICAgICByZWFkU3RyZWFtLmVtaXQoJ2NvbnRlbnQtbGVuZ3RoJywgdik7XG4gICAgfSk7XG4gICAgbG9jYWxTdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICBpc09wZW4gPSB0cnVlO1xuICAgICAgbG9jYWxTdHJlYW0ucGlwZShyZWFkU3RyZWFtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhZFN0cmVhbTtcblxuICAgIC8qKlxuICAgICAqIEZldGNoIGFuZCBjYWNoZSBsb2NhbC9yZW1vdGUgcGFja2FnZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZpbGUgZGVmaW5lIHRoZSBwYWNrYWdlIHNoYXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VydmVGaWxlKGZpbGU6IERpc3RGaWxlKTogdm9pZCB7XG4gICAgICBsZXQgdXBsaW5rOiBhbnkgPSBudWxsO1xuXG4gICAgICBmb3IgKGNvbnN0IHVwbGlua0lkIGluIHNlbGYudXBsaW5rcykge1xuICAgICAgICBpZiAoaGFzUHJveHlUbyhuYW1lLCB1cGxpbmtJZCwgc2VsZi5jb25maWcucGFja2FnZXMpKSB7XG4gICAgICAgICAgdXBsaW5rID0gc2VsZi51cGxpbmtzW3VwbGlua0lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXBsaW5rID09IG51bGwpIHtcbiAgICAgICAgdXBsaW5rID0gbmV3IFByb3h5U3RvcmFnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmw6IGZpbGUudXJsLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICBfYXV0b2dlbmVyYXRlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGYuY29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBzYXZlc3RyZWFtOiBJVXBsb2FkVGFyYmFsbCB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHVwbGluay5jb25maWcuY2FjaGUpIHtcbiAgICAgICAgc2F2ZXN0cmVhbSA9IHNlbGYubG9jYWxTdG9yYWdlLmFkZFRhcmJhbGwobmFtZSwgZmlsZW5hbWUpO1xuICAgICAgfVxuXG4gICAgICBsZXQgb25fb3BlbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgLy8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZVxuICAgICAgICBvbl9vcGVuID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgIGNvbnN0IHJzdHJlYW0yID0gdXBsaW5rLmZldGNoVGFyYmFsbChmaWxlLnVybCk7XG4gICAgICAgIHJzdHJlYW0yLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICAgICAgc2F2ZXN0cmVhbS5hYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzYXZlc3RyZWFtID0gbnVsbDtcbiAgICAgICAgICByZWFkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJzdHJlYW0yLm9uKCdlbmQnLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICAgIHNhdmVzdHJlYW0uZG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcnN0cmVhbTIub24oJ2NvbnRlbnQtbGVuZ3RoJywgZnVuY3Rpb24gKHYpOiB2b2lkIHtcbiAgICAgICAgICByZWFkU3RyZWFtLmVtaXQoJ2NvbnRlbnQtbGVuZ3RoJywgdik7XG4gICAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICAgIHNhdmVzdHJlYW0uZW1pdCgnY29udGVudC1sZW5ndGgnLCB2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByc3RyZWFtMi5waXBlKHJlYWRTdHJlYW0pO1xuICAgICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICAgIHJzdHJlYW0yLnBpcGUoc2F2ZXN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgIHNhdmVzdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgb25fb3BlbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzYXZlc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuKHsgZXJyOiBlcnIsIGZpbGVOYW1lOiBmaWxlIH0sICdlcnJvciBzYXZpbmcgZmlsZSBAe2ZpbGVOYW1lfTogQHtlcnIubWVzc2FnZX1cXG5Ae2Vyci5zdGFja30nKTtcbiAgICAgICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICAgICAgc2F2ZXN0cmVhbS5hYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzYXZlc3RyZWFtID0gbnVsbDtcbiAgICAgICAgICBvbl9vcGVuKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25fb3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgUmV0cmlldmUgYSBwYWNrYWdlIG1ldGFkYXRhIGZvciB7bmFtZX0gcGFja2FnZVxuICAgRnVuY3Rpb24gaW52b2tlcyBsb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZSBhbmQgdXBsaW5rLmdldF9wYWNrYWdlIGZvciBldmVyeVxuICAgdXBsaW5rIHdpdGggcHJveHlfYWNjZXNzIHJpZ2h0cyBhZ2FpbnN0IHtuYW1lfSBhbmQgY29tYmluZXMgcmVzdWx0c1xuICAgaW50byBvbmUganNvbiBvYmplY3RcbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICYmIHVwbGluayAocHJveHlfYWNjZXNzKVxuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zLm5hbWUgUGFja2FnZSBOYW1lXG4gICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSAgb3B0aW9ucy5yZXEgRXhwcmVzcyBgcmVxYCBvYmplY3RcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBvcHRpb25zLmtlZXBVcExpbmtEYXRhIGtlZXAgdXAgbGluayBpbmZvIGluIHBhY2thZ2UgbWV0YSwgbGFzdCB1cGRhdGUsIGV0Yy5cbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gb3B0aW9ucy5jYWxsYmFjayBDYWxsYmFjayBmb3IgcmVjZWl2ZSBkYXRhXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFja2FnZShvcHRpb25zOiBJR2V0UGFja2FnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRQYWNrYWdlTWV0YWRhdGEob3B0aW9ucy5uYW1lLCAoZXJyLCBkYXRhKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZXJyICYmICghZXJyLnN0YXR1cyB8fCBlcnIuc3RhdHVzID49IEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SKSkge1xuICAgICAgICAvLyByZXBvcnQgaW50ZXJuYWwgZXJyb3JzIHJpZ2h0IGF3YXlcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3luY1VwbGlua3NNZXRhZGF0YShcbiAgICAgICAgb3B0aW9ucy5uYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICB7IHJlcTogb3B0aW9ucy5yZXEsIHVwbGlua3NMb29rOiBvcHRpb25zLnVwbGlua3NMb29rIH0sXG4gICAgICAgIGZ1bmN0aW9uIGdldFBhY2thZ2VTeW5VcExpbmtzQ2FsbGJhY2soZXJyLCByZXN1bHQ6IFBhY2thZ2UsIHVwbGlua0Vycm9ycyk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9ybWFsaXplRGlzdFRhZ3MoY2xlYW5VcExpbmtzUmVmKG9wdGlvbnMua2VlcFVwTGlua0RhdGEsIHJlc3VsdCkpO1xuXG4gICAgICAgICAgLy8gbnBtIGNhbiB0aHJvdyBpZiB0aGlzIGZpZWxkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICByZXN1bHQuX2F0dGFjaG1lbnRzID0ge307XG5cbiAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKG51bGwsIHJlc3VsdCwgdXBsaW5rRXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgUmV0cmlldmUgcmVtb3RlIGFuZCBsb2NhbCBwYWNrYWdlcyBtb3JlIHJlY2VudCB0aGFuIHtzdGFydGtleX1cbiAgIEZ1bmN0aW9uIHN0cmVhbXMgYWxsIHBhY2thZ2VzIGZyb20gYWxsIHVwbGlua3MgZmlyc3QsIGFuZCB0aGVuXG4gICBsb2NhbCBwYWNrYWdlcy5cbiAgIE5vdGUgdGhhdCBsb2NhbCBwYWNrYWdlcyBjb3VsZCBvdmVycmlkZSByZWdpc3RyeSBvbmVzIGp1c3QgYmVjYXVzZVxuICAgdGhleSBhcHBlYXIgaW4gSlNPTiBsYXN0LiBUaGF0J3MgYSB0cmFkZS1vZmYgd2UgbWFrZSB0byBhdm9pZFxuICAgbWVtb3J5IGlzc3Vlcy5cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICYmIHVwbGluayAocHJveHlfYWNjZXNzKVxuICAgKiBAcGFyYW0geyp9IHN0YXJ0a2V5XG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKHN0YXJ0a2V5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IElSZWFkVGFyYmFsbCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgc2VhcmNoU3RyZWFtOiBhbnkgPSBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgT2JqZWN0LmtleXModGhpcy51cGxpbmtzKSxcbiAgICAgIGZ1bmN0aW9uICh1cF9uYW1lLCBjYik6IHZvaWQge1xuICAgICAgICAvLyBzaG9ydGN1dDogaWYgYGxvY2FsPTFgIGlzIHN1cHBsaWVkLCBkb24ndCBjYWxsIHVwbGlua3NcbiAgICAgICAgaWYgKG9wdGlvbnMucmVxPy5xdWVyeT8ubG9jYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBzZWFyY2ggZm9yIHVwbGluayAke3VwX25hbWV9YCk7XG4gICAgICAgIC8vIHNlYXJjaCBieSBrZXl3b3JkIGZvciBlYWNoIHVwbGlua1xuICAgICAgICBjb25zdCB1cGxpbmtTdHJlYW06IElVcGxvYWRUYXJiYWxsID0gc2VsZi51cGxpbmtzW3VwX25hbWVdLnNlYXJjaChvcHRpb25zKTtcbiAgICAgICAgLy8gam9pbiB1cGxpbmsgc3RyZWFtIHdpdGggc3RyZWFtcyBQYXNzVGhyb3VnaFxuICAgICAgICB1cGxpbmtTdHJlYW0ucGlwZShzZWFyY2hTdHJlYW0sIHsgZW5kOiBmYWxzZSB9KTtcbiAgICAgICAgdXBsaW5rU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IGVycjogZXJyIH0sICd1cGxpbmsgZXJyb3I6IEB7ZXJyLm1lc3NhZ2V9Jyk7XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfSk7XG4gICAgICAgIHVwbGlua1N0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgLy8gdG8gYXZvaWQgY2FsbCBjYWxsYmFjayBtb3JlIHRoYW4gb25jZVxuICAgICAgICAgIGNiID0gZnVuY3Rpb24gKCk6IHZvaWQge307XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlYXJjaFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgICBpZiAodXBsaW5rU3RyZWFtLmFib3J0KSB7XG4gICAgICAgICAgICB1cGxpbmtTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAvLyBleGVjdXRlZCBhZnRlciBhbGwgc2VyaWVzXG4gICAgICBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIC8vIGF0dGFjaCBhIGxvY2FsIHNlYXJjaCByZXN1bHRzXG4gICAgICAgIGNvbnN0IGxvY2FsU2VhcmNoU3RyZWFtOiBJUmVhZFRhcmJhbGwgPSBzZWxmLmxvY2FsU3RvcmFnZS5zZWFyY2goc3RhcnRrZXksIG9wdGlvbnMpO1xuICAgICAgICBzZWFyY2hTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0ucGlwZShzZWFyY2hTdHJlYW0sIHsgZW5kOiB0cnVlIH0pO1xuICAgICAgICBsb2NhbFNlYXJjaFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvcik6IHZvaWQge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgZXJyOiBlcnIgfSwgJ3NlYXJjaCBlcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICBzZWFyY2hTdHJlYW0uZW5kKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gc2VhcmNoU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIG9ubHkgcHJpdmF0ZSBsb2NhbCBwYWNrYWdlc1xuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxEYXRhYmFzZShjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zdG9yYWdlUGx1Z2luLmdldCgoZXJyLCBsb2NhbHMpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFja2FnZXM6IFZlcnNpb25bXSA9IFtdO1xuICAgICAgY29uc3QgZ2V0UGFja2FnZSA9IGZ1bmN0aW9uIChpdGVtUGtnKTogdm9pZCB7XG4gICAgICAgIHNlbGYubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YShsb2NhbHNbaXRlbVBrZ10sIGZ1bmN0aW9uIChlcnIsIHBrZ01ldGFkYXRhOiBQYWNrYWdlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSkge1xuICAgICAgICAgICAgY29uc3QgbGF0ZXN0ID0gcGtnTWV0YWRhdGFbRElTVF9UQUdTXS5sYXRlc3Q7XG4gICAgICAgICAgICBpZiAobGF0ZXN0ICYmIHBrZ01ldGFkYXRhLnZlcnNpb25zW2xhdGVzdF0pIHtcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbjogVmVyc2lvbiA9IHBrZ01ldGFkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVMaXN0ID0gcGtnTWV0YWRhdGEudGltZSBhcyBHZW5lcmljQm9keTtcbiAgICAgICAgICAgICAgY29uc3QgdGltZSA9IHRpbWVMaXN0W2xhdGVzdF07XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdmVyc2lvbi50aW1lID0gdGltZTtcblxuICAgICAgICAgICAgICAvLyBBZGQgZm9yIHN0YXJzIGFwaVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHZlcnNpb24udXNlcnMgPSBwa2dNZXRhZGF0YS51c2VycztcblxuICAgICAgICAgICAgICBwYWNrYWdlcy5wdXNoKHZlcnNpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih7IHBhY2thZ2U6IGxvY2Fsc1tpdGVtUGtnXSB9LCAncGFja2FnZSBAe3BhY2thZ2V9IGRvZXMgbm90IGhhdmUgYSBcImxhdGVzdFwiIHRhZz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbVBrZyA+PSBsb2NhbHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcGFja2FnZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYWNrYWdlKGl0ZW1Qa2cgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGxvY2Fscy5sZW5ndGgpIHtcbiAgICAgICAgZ2V0UGFja2FnZSgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmZXRjaGVzIHBhY2thZ2UgbWV0YWRhdGEgZnJvbSB1cGxpbmtzIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aCBsb2NhbCBkYXRhXG4gICBpZiBwYWNrYWdlIGlzIGF2YWlsYWJsZSBsb2NhbGx5LCBpdCBNVVNUIGJlIHByb3ZpZGVkIGluIHBrZ2luZm9cbiAgIHJldHVybnMgY2FsbGJhY2soZXJyLCByZXN1bHQsIHVwbGlua19lcnJvcnMpXG4gICAqL1xuICBwdWJsaWMgX3N5bmNVcGxpbmtzTWV0YWRhdGEobmFtZTogc3RyaW5nLCBwYWNrYWdlSW5mbzogUGFja2FnZSwgb3B0aW9uczogSVN5bmNVcGxpbmtzLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBsZXQgZm91bmQgPSB0cnVlO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHVwTGlua3M6IElQcm94eVtdID0gW107XG4gICAgY29uc3QgaGFzVG9Mb29rSW50b1VwbGlua3MgPSBfLmlzTmlsKG9wdGlvbnMudXBsaW5rc0xvb2spIHx8IG9wdGlvbnMudXBsaW5rc0xvb2s7XG5cbiAgICBpZiAoIXBhY2thZ2VJbmZvKSB7XG4gICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgcGFja2FnZUluZm8gPSBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShuYW1lKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHVwbGluayBpbiB0aGlzLnVwbGlua3MpIHtcbiAgICAgIGlmIChoYXNQcm94eVRvKG5hbWUsIHVwbGluaywgdGhpcy5jb25maWcucGFja2FnZXMpICYmIGhhc1RvTG9va0ludG9VcGxpbmtzKSB7XG4gICAgICAgIHVwTGlua3MucHVzaCh0aGlzLnVwbGlua3NbdXBsaW5rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMubWFwKFxuICAgICAgdXBMaW5rcyxcbiAgICAgICh1cExpbmssIGNiKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IF9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHVwTGlua01ldGEgPSBwYWNrYWdlSW5mby5fdXBsaW5rc1t1cExpbmsudXBuYW1lXTtcblxuICAgICAgICBpZiAoaXNPYmplY3QodXBMaW5rTWV0YSkpIHtcbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gdXBMaW5rTWV0YS5mZXRjaGVkO1xuXG4gICAgICAgICAgaWYgKGZldGNoZWQgJiYgRGF0ZS5ub3coKSAtIGZldGNoZWQgPCB1cExpbmsubWF4YWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfb3B0aW9ucy5ldGFnID0gdXBMaW5rTWV0YS5ldGFnO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBMaW5rLmdldFJlbW90ZU1ldGFkYXRhKG5hbWUsIF9vcHRpb25zLCAoZXJyLCB1cExpbmtSZXNwb25zZSwgZVRhZyk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnJlbW90ZVN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAgICAgICB1cExpbmtNZXRhLmZldGNoZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlcnIgfHwgIXVwTGlua1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgW2VyciB8fCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcignbm8gZGF0YScpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEodXBMaW5rUmVzcG9uc2UsIG5hbWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWI6ICdvdXQnLFxuICAgICAgICAgICAgICAgIGVycjogZXJyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAncGFja2FnZS5qc29uIHZhbGlkYXRpbmcgZXJyb3IgQHshZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCBbZXJyXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFja2FnZUluZm8uX3VwbGlua3NbdXBMaW5rLnVwbmFtZV0gPSB7XG4gICAgICAgICAgICBldGFnOiBlVGFnLFxuICAgICAgICAgICAgZmV0Y2hlZDogRGF0ZS5ub3coKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcGFja2FnZUluZm8udGltZSA9IG1lcmdlVXBsaW5rVGltZUludG9Mb2NhbChwYWNrYWdlSW5mbywgdXBMaW5rUmVzcG9uc2UpO1xuXG4gICAgICAgICAgdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsodXBMaW5rUmVzcG9uc2UudmVyc2lvbnMsIHVwTGluayk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWVyZ2VWZXJzaW9ucyhwYWNrYWdlSW5mbywgdXBMaW5rUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWI6ICdvdXQnLFxuICAgICAgICAgICAgICAgIGVycjogZXJyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAncGFja2FnZS5qc29uIHBhcnNpbmcgZXJyb3IgQHshZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCBbZXJyXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgd2UgZ290IHRvIHRoaXMgcG9pbnQsIGFzc3VtZSB0aGF0IHRoZSBjb3JyZWN0IHBhY2thZ2UgZXhpc3RzXG4gICAgICAgICAgLy8gb24gdGhlIHVwbGlua1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAoZXJyOiBFcnJvciwgdXBMaW5rc0Vycm9yczogYW55KTogQXN5bmNSZXN1bHRBcnJheUNhbGxiYWNrPHVua25vd24sIEVycm9yPiA9PiB7XG4gICAgICAgIGFzc2VydCghZXJyICYmIEFycmF5LmlzQXJyYXkodXBMaW5rc0Vycm9ycykpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBjb25uZWN0aW9uIHRpbWVvdXQgb3IgcmVzZXQgZXJyb3JzIHdpdGggdXBsaW5rKHMpXG4gICAgICAgIC8vICh0aGVzZSBzaG91bGQgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSBwYWNrYWdlIG5vdCBiZWluZyBmb3VuZClcbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIGxldCB1cGxpbmtUaW1lb3V0RXJyb3I7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cExpbmtzRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tpXSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVwTGlua3NFcnJvcnNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tpXVtqXSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IHVwTGlua3NFcnJvcnNbaV1bal0uY29kZTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAnRVRJTUVET1VUJyB8fCBjb2RlID09PSAnRVNPQ0tFVFRJTUVET1VUJyB8fCBjb2RlID09PSAnRUNPTk5SRVNFVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsaW5rVGltZW91dEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVwbGlua1RpbWVvdXRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRTZXJ2aWNlVW5hdmFpbGFibGUoKSwgbnVsbCwgdXBMaW5rc0Vycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PX1BBQ0tBR0UpLCBudWxsLCB1cExpbmtzRXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cExpbmtzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBwYWNrYWdlSW5mbyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmxvY2FsU3RvcmFnZS51cGRhdGVWZXJzaW9ucyhuYW1lLCBwYWNrYWdlSW5mbywgYXN5bmMgKGVyciwgcGFja2FnZUpzb25Mb2NhbDogUGFja2FnZSk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFueSBlcnJvciBoZXJlIHdpbGwgY2F1c2UgYSA0MDQsIGxpa2UgYW4gdXBsaW5rIGVycm9yLiBUaGlzIGlzIGxpa2VseSB0aGUgcmlnaHQgdGhpbmcgdG8gZG9cbiAgICAgICAgICAvLyBhcyBhIGJyb2tlbiBmaWx0ZXIgaXMgYSBzZWN1cml0eSByaXNrLlxuICAgICAgICAgIGNvbnN0IGZpbHRlckVycm9yczogRXJyb3JbXSA9IFtdO1xuICAgICAgICAgIC8vIFRoaXMgTVVTVCBiZSBkb25lIHNlcmlhbGx5IGFuZCBub3QgaW4gcGFyYWxsZWwgYXMgdGhleSBtb2RpZnkgcGFja2FnZUpzb25Mb2NhbFxuICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHNlbGYuZmlsdGVycykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gVGhlc2UgZmlsdGVycyBjYW4gYXNzdW1lIGl0J3Mgc2F2ZSB0byBtb2RpZnkgcGFja2FnZUpzb25Mb2NhbCBhbmQgcmV0dXJuIGl0IGRpcmVjdGx5IGZvclxuICAgICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSAoaS5lLiBuZWVkIG5vdCBiZSBwdXJlKVxuICAgICAgICAgICAgICBwYWNrYWdlSnNvbkxvY2FsID0gYXdhaXQgZmlsdGVyLmZpbHRlcl9tZXRhZGF0YShwYWNrYWdlSnNvbkxvY2FsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBmaWx0ZXJFcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFjayhudWxsLCBwYWNrYWdlSnNvbkxvY2FsLCBfLmNvbmNhdCh1cExpbmtzRXJyb3JzLCBmaWx0ZXJFcnJvcnMpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBoaWRkZW4gdmFsdWUgZm9yIGVhY2ggdmVyc2lvbi5cbiAgICogQHBhcmFtIHtBcnJheX0gdmVyc2lvbnMgbGlzdCBvZiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cExpbmsgdXBsaW5rIG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHB1YmxpYyBfdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsodmVyc2lvbnM6IFZlcnNpb25zLCB1cExpbms6IElQcm94eSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaSBpbiB2ZXJzaW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZXJzaW9ucywgaSkpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHZlcnNpb25zW2ldO1xuXG4gICAgICAgIC8vIGhvbGRzIGEgXCJoaWRkZW5cIiB2YWx1ZSB0byBiZSB1c2VkIGJ5IHRoZSBwYWNrYWdlIHN0b3JhZ2UuXG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgdmVyc2lvbltTeW1ib2wuZm9yKCdfX3ZlcmRhY2Npb191cGxpbmsnKV0gPSB1cExpbmsudXBuYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdG9yYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLE9BQU4sQ0FBeUM7RUFPaENDLFdBQVcsQ0FBQ0MsTUFBRCxFQUFpQjtJQUFBOztJQUFBOztJQUFBOztJQUFBOztJQUFBOztJQUNqQyxLQUFLQSxNQUFMLEdBQWNBLE1BQWQ7SUFDQSxLQUFLQyxPQUFMLEdBQWUsSUFBQUMsd0JBQUEsRUFBYUYsTUFBYixDQUFmO0lBQ0EsS0FBS0csTUFBTCxHQUFjQSxjQUFkO0lBQ0EsS0FBS0MsT0FBTCxHQUFlLEVBQWYsQ0FKaUMsQ0FLakM7O0lBQ0EsS0FBS0MsWUFBTCxHQUFvQixJQUFwQjtFQUNEOztFQUVNQyxJQUFJLENBQUNOLE1BQUQsRUFBaUJJLE9BQXVCLEdBQUcsRUFBM0MsRUFBZ0U7SUFDekUsS0FBS0EsT0FBTCxHQUFlQSxPQUFmO0lBQ0EsS0FBS0MsWUFBTCxHQUFvQixJQUFJRSxxQkFBSixDQUFpQixLQUFLUCxNQUF0QixFQUE4QkcsY0FBOUIsQ0FBcEI7SUFFQSxPQUFPLEtBQUtFLFlBQUwsQ0FBa0JHLFNBQWxCLENBQTRCUixNQUE1QixDQUFQO0VBQ0Q7RUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztFQUN5QixNQUFWUyxVQUFVLENBQUNDLElBQUQsRUFBZUMsUUFBZixFQUE4QkMsUUFBOUIsRUFBaUU7SUFDdEYsSUFBSTtNQUNGLE1BQU0sSUFBQUMsK0JBQUEsRUFBa0JILElBQWxC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
|
|
665
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdG9yYWdlIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJ1cGxpbmtzIiwic2V0dXBVcExpbmtzIiwibG9nZ2VyIiwiZmlsdGVycyIsImxvY2FsU3RvcmFnZSIsImluaXQiLCJMb2NhbFN0b3JhZ2UiLCJnZXRTZWNyZXQiLCJhZGRQYWNrYWdlIiwibmFtZSIsIm1ldGFkYXRhIiwiY2FsbGJhY2siLCJjaGVja1BhY2thZ2VMb2NhbCIsImNoZWNrUGFja2FnZVJlbW90ZSIsIl9pc0FsbG93UHVibGlzaE9mZmxpbmUiLCJfc3luY1VwbGlua3NNZXRhZGF0YSIsImJpbmQiLCJwdWJsaXNoUGFja2FnZSIsImVyciIsInB1Ymxpc2giLCJfIiwiaXNCb29sZWFuIiwiYWxsb3dfb2ZmbGluZSIsInJlYWRUb2tlbnMiLCJmaWx0ZXIiLCJzYXZlVG9rZW4iLCJ0b2tlbiIsImRlbGV0ZVRva2VuIiwidXNlciIsInRva2VuS2V5IiwiYWRkVmVyc2lvbiIsInZlcnNpb24iLCJ0YWciLCJtZXJnZVRhZ3MiLCJ0YWdIYXNoIiwiY2hhbmdlUGFja2FnZSIsInJldmlzaW9uIiwicmVtb3ZlUGFja2FnZSIsIlNlYXJjaCIsInJlbW92ZSIsInJlbW92ZVRhcmJhbGwiLCJmaWxlbmFtZSIsImFkZFRhcmJhbGwiLCJoYXNMb2NhbFRhcmJhbGwiLCJzZWxmIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsb2NhbFN0cmVhbSIsImdldFRhcmJhbGwiLCJpc09wZW4iLCJvbiIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiTk9UX0ZPVU5EIiwiYWJvcnQiLCJyZWFkU3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJlbWl0IiwiZXJyNDA0IiwiZ2V0UGFja2FnZU1ldGFkYXRhIiwiaW5mbyIsImlzTmlsIiwiX2Rpc3RmaWxlcyIsInNlcnZlRmlsZSIsInYiLCJwaXBlIiwiZmlsZSIsInVwbGluayIsInVwbGlua0lkIiwiaGFzUHJveHlUbyIsInBhY2thZ2VzIiwiUHJveHlTdG9yYWdlIiwidXJsIiwiY2FjaGUiLCJfYXV0b2dlbmVyYXRlZCIsInNhdmVzdHJlYW0iLCJvbl9vcGVuIiwicnN0cmVhbTIiLCJmZXRjaFRhcmJhbGwiLCJkb25lIiwid2FybiIsImZpbGVOYW1lIiwiZ2V0UGFja2FnZSIsIm9wdGlvbnMiLCJkYXRhIiwiSU5URVJOQUxfRVJST1IiLCJyZXEiLCJ1cGxpbmtzTG9vayIsImdldFBhY2thZ2VTeW5VcExpbmtzQ2FsbGJhY2siLCJyZXN1bHQiLCJ1cGxpbmtFcnJvcnMiLCJub3JtYWxpemVEaXN0VGFncyIsImNsZWFuVXBMaW5rc1JlZiIsImtlZXBVcExpbmtEYXRhIiwiX2F0dGFjaG1lbnRzIiwiYWJicmV2aWF0ZWQiLCJjb252ZXJ0QWJicmV2aWF0ZWRNYW5pZmVzdCIsInNlYXJjaCIsInN0YXJ0a2V5Iiwic2VhcmNoU3RyZWFtIiwiU3RyZWFtIiwiUGFzc1Rocm91Z2giLCJvYmplY3RNb2RlIiwiYXN5bmMiLCJlYWNoU2VyaWVzIiwiT2JqZWN0Iiwia2V5cyIsInVwX25hbWUiLCJjYiIsInF1ZXJ5IiwibG9jYWwiLCJ1bmRlZmluZWQiLCJ1cGxpbmtTdHJlYW0iLCJlbmQiLCJlcnJvciIsImxvY2FsU2VhcmNoU3RyZWFtIiwiZ2V0TG9jYWxEYXRhYmFzZSIsInN0b3JhZ2VQbHVnaW4iLCJnZXQiLCJsb2NhbHMiLCJpdGVtUGtnIiwicGtnTWV0YWRhdGEiLCJsYXRlc3QiLCJESVNUX1RBR1MiLCJ2ZXJzaW9ucyIsInRpbWVMaXN0IiwidGltZSIsInVzZXJzIiwicHVzaCIsInBhY2thZ2UiLCJsZW5ndGgiLCJwYWNrYWdlSW5mbyIsImZvdW5kIiwidXBMaW5rcyIsImhhc1RvTG9va0ludG9VcGxpbmtzIiwiZ2VuZXJhdGVQYWNrYWdlVGVtcGxhdGUiLCJtYXAiLCJ1cExpbmsiLCJfb3B0aW9ucyIsImFzc2lnbiIsInVwTGlua01ldGEiLCJfdXBsaW5rcyIsInVwbmFtZSIsImlzT2JqZWN0IiwiZmV0Y2hlZCIsIkRhdGUiLCJub3ciLCJtYXhhZ2UiLCJldGFnIiwiZ2V0UmVtb3RlTWV0YWRhdGEiLCJ1cExpbmtSZXNwb25zZSIsImVUYWciLCJyZW1vdGVTdGF0dXMiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwidmFsaWRhdGVNZXRhZGF0YSIsInN1YiIsIm1lcmdlVXBsaW5rVGltZUludG9Mb2NhbCIsInVwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rIiwibWVyZ2VWZXJzaW9ucyIsInVwTGlua3NFcnJvcnMiLCJhc3NlcnQiLCJBcnJheSIsImlzQXJyYXkiLCJ1cGxpbmtUaW1lb3V0RXJyb3IiLCJpIiwiaiIsImNvZGUiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJnZXROb3RGb3VuZCIsIkFQSV9FUlJPUiIsIk5PX1BBQ0tBR0UiLCJ1cGRhdGVWZXJzaW9ucyIsInBhY2thZ2VKc29uTG9jYWwiLCJmaWx0ZXJFcnJvcnMiLCJmaWx0ZXJfbWV0YWRhdGEiLCJjb25jYXQiLCJfdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJTeW1ib2wiLCJmb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N0b3JhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IGFzeW5jLCB7IEFzeW5jUmVzdWx0QXJyYXlDYWxsYmFjayB9IGZyb20gJ2FzeW5jJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7IFZlcmRhY2Npb0Vycm9yIH0gZnJvbSAnQHZlcmRhY2Npby9jb21tb25zLWFwaSc7XG5pbXBvcnQgeyBSZWFkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vc3RyZWFtcyc7XG5pbXBvcnQgeyBDYWxsYmFjaywgQ29uZmlnLCBEaXN0RmlsZSwgSVJlYWRUYXJiYWxsLCBJVXBsb2FkVGFyYmFsbCwgTG9nZ2VyLCBNZXJnZVRhZ3MsIFBhY2thZ2UsIFZlcnNpb24sIFZlcnNpb25zIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBHZW5lcmljQm9keSwgVG9rZW4sIFRva2VuRmlsdGVyIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IElHZXRQYWNrYWdlT3B0aW9ucywgSVBsdWdpbkZpbHRlcnMsIElQcm94eSwgSVN0b3JhZ2UsIElTdG9yYWdlSGFuZGxlciwgSVN5bmNVcGxpbmtzLCBQcm94eUxpc3QsIFN0cmluZ1ZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgeyBoYXNQcm94eVRvIH0gZnJvbSAnLi9jb25maWctdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBESVNUX1RBR1MsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IExvY2FsU3RvcmFnZSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UnO1xuaW1wb3J0IHsgbWVyZ2VWZXJzaW9ucyB9IGZyb20gJy4vbWV0YWRhdGEtdXRpbHMnO1xuaW1wb3J0IFNlYXJjaCBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQge1xuICBjaGVja1BhY2thZ2VMb2NhbCxcbiAgY2hlY2tQYWNrYWdlUmVtb3RlLFxuICBjbGVhblVwTGlua3NSZWYsXG4gIGNvbnZlcnRBYmJyZXZpYXRlZE1hbmlmZXN0LFxuICBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSxcbiAgbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsLFxuICBwdWJsaXNoUGFja2FnZSxcbn0gZnJvbSAnLi9zdG9yYWdlLXV0aWxzJztcbmltcG9ydCBQcm94eVN0b3JhZ2UgZnJvbSAnLi91cC1zdG9yYWdlJztcbmltcG9ydCB7IHNldHVwVXBMaW5rcywgdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsgfSBmcm9tICcuL3VwbGluay11dGlsJztcbmltcG9ydCB7IEVycm9yQ29kZSwgaXNPYmplY3QsIG5vcm1hbGl6ZURpc3RUYWdzLCB2YWxpZGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi91dGlscyc7XG5cbmNsYXNzIFN0b3JhZ2UgaW1wbGVtZW50cyBJU3RvcmFnZUhhbmRsZXIge1xuICBwdWJsaWMgbG9jYWxTdG9yYWdlOiBJU3RvcmFnZTtcbiAgcHVibGljIGNvbmZpZzogQ29uZmlnO1xuICBwdWJsaWMgbG9nZ2VyOiBMb2dnZXI7XG4gIHB1YmxpYyB1cGxpbmtzOiBQcm94eUxpc3Q7XG4gIHB1YmxpYyBmaWx0ZXJzOiBJUGx1Z2luRmlsdGVycztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnVwbGlua3MgPSBzZXR1cFVwTGlua3MoY29uZmlnKTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLmZpbHRlcnMgPSBbXTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGluaXQoY29uZmlnOiBDb25maWcsIGZpbHRlcnM6IElQbHVnaW5GaWx0ZXJzID0gW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlKHRoaXMuY29uZmlnLCBsb2dnZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldFNlY3JldChjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqICBBZGQgYSB7bmFtZX0gcGFja2FnZSB0byBhIHN5c3RlbVxuICAgRnVuY3Rpb24gY2hlY2tzIGlmIHBhY2thZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGF2YWlsYWJsZSBmcm9tIHVwbGlua3MuXG4gICBJZiBpdCBpc24ndCwgd2UgY3JlYXRlIHBhY2thZ2UgbG9jYWxseVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKSAmJiB1cGxpbmtzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShuYW1lOiBzdHJpbmcsIG1ldGFkYXRhOiBhbnksIGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjaGVja1BhY2thZ2VMb2NhbChuYW1lLCB0aGlzLmxvY2FsU3RvcmFnZSk7XG4gICAgICBhd2FpdCBjaGVja1BhY2thZ2VSZW1vdGUobmFtZSwgdGhpcy5faXNBbGxvd1B1Ymxpc2hPZmZsaW5lKCksIHRoaXMuX3N5bmNVcGxpbmtzTWV0YWRhdGEuYmluZCh0aGlzKSk7XG4gICAgICBhd2FpdCBwdWJsaXNoUGFja2FnZShuYW1lLCBtZXRhZGF0YSwgdGhpcy5sb2NhbFN0b3JhZ2UgYXMgSVN0b3JhZ2UpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNBbGxvd1B1Ymxpc2hPZmZsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb25maWcucHVibGlzaCAhPT0gJ3VuZGVmaW5lZCcgJiYgXy5pc0Jvb2xlYW4odGhpcy5jb25maWcucHVibGlzaC5hbGxvd19vZmZsaW5lKSAmJiB0aGlzLmNvbmZpZy5wdWJsaXNoLmFsbG93X29mZmxpbmU7XG4gIH1cblxuICBwdWJsaWMgcmVhZFRva2VucyhmaWx0ZXI6IFRva2VuRmlsdGVyKTogUHJvbWlzZTxUb2tlbltdPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLnJlYWRUb2tlbnMoZmlsdGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlVG9rZW4odG9rZW46IFRva2VuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLnNhdmVUb2tlbih0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlVG9rZW4odXNlcjogc3RyaW5nLCB0b2tlbktleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuZGVsZXRlVG9rZW4odXNlciwgdG9rZW5LZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyB2ZXJzaW9uIG9mIHBhY2thZ2Uge25hbWV9IHRvIGEgc3lzdGVtXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgYWRkVmVyc2lvbihuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgbWV0YWRhdGE6IFZlcnNpb24sIHRhZzogU3RyaW5nVmFsdWUsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLmFkZFZlcnNpb24obmFtZSwgdmVyc2lvbiwgbWV0YWRhdGEsIHRhZywgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFRhZ3MgYSBwYWNrYWdlIHZlcnNpb24gd2l0aCBhIHByb3ZpZGVkIHRhZ1xuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIG1lcmdlVGFncyhuYW1lOiBzdHJpbmcsIHRhZ0hhc2g6IE1lcmdlVGFncywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UubWVyZ2VUYWdzKG5hbWUsIHRhZ0hhc2gsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgYW4gZXhpc3RpbmcgcGFja2FnZSAoaS5lLiB1bnB1Ymxpc2ggb25lIHZlcnNpb24pXG4gICBGdW5jdGlvbiBjaGFuZ2VzIGEgcGFja2FnZSBpbmZvIGZyb20gbG9jYWwgc3RvcmFnZSBhbmQgYWxsIHVwbGlua3Mgd2l0aCB3cml0ZSBhY2Nlc3MuL1xuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIGNoYW5nZVBhY2thZ2UobmFtZTogc3RyaW5nLCBtZXRhZGF0YTogUGFja2FnZSwgcmV2aXNpb246IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UuY2hhbmdlUGFja2FnZShuYW1lLCBtZXRhZGF0YSwgcmV2aXNpb24sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBwYWNrYWdlIGZyb20gYSBzeXN0ZW1cbiAgIEZ1bmN0aW9uIHJlbW92ZXMgYSBwYWNrYWdlIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhY2thZ2UobmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVQYWNrYWdlKG5hbWUsIGNhbGxiYWNrKTtcbiAgICAvLyB1cGRhdGUgdGhlIGluZGV4ZXJcbiAgICBTZWFyY2gucmVtb3ZlKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICBSZW1vdmUgYSB0YXJiYWxsIGZyb20gYSBzeXN0ZW1cbiAgIEZ1bmN0aW9uIHJlbW92ZXMgYSB0YXJiYWxsIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgIFRhcmJhbGwgaW4gcXVlc3Rpb24gc2hvdWxkIG5vdCBiZSBsaW5rZWQgdG8gaW4gYW55IGV4aXN0aW5nXG4gICB2ZXJzaW9ucywgaS5lLiBwYWNrYWdlIHZlcnNpb24gc2hvdWxkIGJlIHVucHVibGlzaGVkIGZpcnN0LlxuICAgVXNlZCBzdG9yYWdlOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIHJldmlzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZVRhcmJhbGwobmFtZSwgZmlsZW5hbWUsIHJldmlzaW9uLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGEgdGFyYmFsbCBmb3Ige25hbWV9IHBhY2thZ2VcbiAgIEZ1bmN0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCByZXR1cm5zIGEgV3JpdGFibGVTdHJlYW1cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyBhZGRUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IElVcGxvYWRUYXJiYWxsIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuYWRkVGFyYmFsbChuYW1lLCBmaWxlbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgaGFzTG9jYWxUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBsZXQgbG9jYWxTdHJlYW06IGFueSA9IHNlbGYubG9jYWxTdG9yYWdlLmdldFRhcmJhbGwobmFtZSwgZmlsZW5hbWUpO1xuICAgICAgbGV0IGlzT3BlbiA9IGZhbHNlO1xuICAgICAgbG9jYWxTdHJlYW0ub24oJ2Vycm9yJywgKGVycik6IGFueSA9PiB7XG4gICAgICAgIGlmIChpc09wZW4gfHwgZXJyLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9jYWwgcmVwb3J0ZWQgNDA0IG9yIHJlcXVlc3Qgd2FzIGFib3J0ZWQgYWxyZWFkeVxuICAgICAgICBpZiAobG9jYWxTdHJlYW0pIHtcbiAgICAgICAgICBsb2NhbFN0cmVhbS5hYm9ydCgpO1xuICAgICAgICAgIGxvY2FsU3RyZWFtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgbG9jYWxTdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIGlzT3BlbiA9IHRydWU7XG4gICAgICAgIGxvY2FsU3RyZWFtLmFib3J0KCk7XG4gICAgICAgIGxvY2FsU3RyZWFtID0gbnVsbDtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICBHZXQgYSB0YXJiYWxsIGZyb20gYSBzdG9yYWdlIGZvciB7bmFtZX0gcGFja2FnZVxuICAgRnVuY3Rpb24gaXMgc3luY2hyb25vdXMgYW5kIHJldHVybnMgYSBSZWFkYWJsZVN0cmVhbVxuICAgRnVuY3Rpb24gdHJpZXMgdG8gcmVhZCB0YXJiYWxsIGxvY2FsbHksIGlmIGl0IGZhaWxzIHRoZW4gaXQgcmVhZHMgcGFja2FnZVxuICAgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSBjYW4gZ2V0IHRoaXMgdGFyYmFsbCBmcm9tXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCB8fCB1cGxpbmsgKGp1c3Qgb25lKVxuICAgKi9cbiAgcHVibGljIGdldFRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogSVJlYWRUYXJiYWxsIHtcbiAgICBjb25zdCByZWFkU3RyZWFtID0gbmV3IFJlYWRUYXJiYWxsKHt9KTtcbiAgICByZWFkU3RyZWFtLmFib3J0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIC8vIGlmIHNvbWVvbmUgcmVxdWVzdGluZyB0YXJiYWxsLCBpdCBtZWFucyB0aGF0IHdlIHNob3VsZCBhbHJlYWR5IGhhdmUgc29tZVxuICAgIC8vIGluZm9ybWF0aW9uIGFib3V0IGl0LCBzbyBmZXRjaGluZyBwYWNrYWdlIGluZm8gaXMgdW5uZWNlc3NhcnlcblxuICAgIC8vIHRyeWluZyBsb2NhbCBmaXJzdFxuICAgIC8vIGZsb3c6IHNob3VsZCBiZSBJUmVhZFRhcmJhbGxcbiAgICBsZXQgbG9jYWxTdHJlYW06IGFueSA9IHNlbGYubG9jYWxTdG9yYWdlLmdldFRhcmJhbGwobmFtZSwgZmlsZW5hbWUpO1xuICAgIGxldCBpc09wZW4gPSBmYWxzZTtcbiAgICBsb2NhbFN0cmVhbS5vbignZXJyb3InLCAoZXJyKTogYW55ID0+IHtcbiAgICAgIGlmIChpc09wZW4gfHwgZXJyLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiByZWFkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgcmVwb3J0ZWQgNDA0XG4gICAgICBjb25zdCBlcnI0MDQgPSBlcnI7XG4gICAgICBsb2NhbFN0cmVhbS5hYm9ydCgpO1xuICAgICAgbG9jYWxTdHJlYW0gPSBudWxsOyAvLyB3ZSBmb3JjZSBmb3IgZ2FyYmFnZSBjb2xsZWN0b3JcbiAgICAgIHNlbGYubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YShuYW1lLCAoZXJyLCBpbmZvOiBQYWNrYWdlKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChfLmlzTmlsKGVycikgJiYgaW5mby5fZGlzdGZpbGVzICYmIF8uaXNOaWwoaW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmaWxlIGV4aXN0cyBsb2NhbGx5XG4gICAgICAgICAgc2VydmVGaWxlKGluZm8uX2Rpc3RmaWxlc1tmaWxlbmFtZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIGZpbGUsIHRyeWluZyB0byBnZXQgaW5mb3JtYXRpb24gZWxzZXdoZXJlXG4gICAgICAgICAgc2VsZi5fc3luY1VwbGlua3NNZXRhZGF0YShuYW1lLCBpbmZvLCB7fSwgKGVyciwgaW5mbzogUGFja2FnZSk6IGFueSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc05pbChlcnIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5pc05pbChpbmZvLl9kaXN0ZmlsZXMpIHx8IF8uaXNOaWwoaW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnI0MDQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VydmVGaWxlKGluZm8uX2Rpc3RmaWxlc1tmaWxlbmFtZV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBsb2NhbFN0cmVhbS5vbignY29udGVudC1sZW5ndGgnLCBmdW5jdGlvbiAodik6IHZvaWQge1xuICAgICAgcmVhZFN0cmVhbS5lbWl0KCdjb250ZW50LWxlbmd0aCcsIHYpO1xuICAgIH0pO1xuICAgIGxvY2FsU3RyZWFtLm9uKCdvcGVuJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgaXNPcGVuID0gdHJ1ZTtcbiAgICAgIGxvY2FsU3RyZWFtLnBpcGUocmVhZFN0cmVhbSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWRTdHJlYW07XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaCBhbmQgY2FjaGUgbG9jYWwvcmVtb3RlIHBhY2thZ2VzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaWxlIGRlZmluZSB0aGUgcGFja2FnZSBzaGFwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcnZlRmlsZShmaWxlOiBEaXN0RmlsZSk6IHZvaWQge1xuICAgICAgbGV0IHVwbGluazogYW55ID0gbnVsbDtcblxuICAgICAgZm9yIChjb25zdCB1cGxpbmtJZCBpbiBzZWxmLnVwbGlua3MpIHtcbiAgICAgICAgaWYgKGhhc1Byb3h5VG8obmFtZSwgdXBsaW5rSWQsIHNlbGYuY29uZmlnLnBhY2thZ2VzKSkge1xuICAgICAgICAgIHVwbGluayA9IHNlbGYudXBsaW5rc1t1cGxpbmtJZF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVwbGluayA9PSBudWxsKSB7XG4gICAgICAgIHVwbGluayA9IG5ldyBQcm94eVN0b3JhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsOiBmaWxlLnVybCxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgX2F1dG9nZW5lcmF0ZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxmLmNvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZXN0cmVhbTogSVVwbG9hZFRhcmJhbGwgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmICh1cGxpbmsuY29uZmlnLmNhY2hlKSB7XG4gICAgICAgIHNhdmVzdHJlYW0gPSBzZWxmLmxvY2FsU3RvcmFnZS5hZGRUYXJiYWxsKG5hbWUsIGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG9uX29wZW4gPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIC8vIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjYWxsZWQgdHdpY2VcbiAgICAgICAgb25fb3BlbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBjb25zdCByc3RyZWFtMiA9IHVwbGluay5mZXRjaFRhcmJhbGwoZmlsZS51cmwpO1xuICAgICAgICByc3RyZWFtMi5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICAgIHNhdmVzdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2F2ZXN0cmVhbSA9IG51bGw7XG4gICAgICAgICAgcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICByc3RyZWFtMi5vbignZW5kJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgICBzYXZlc3RyZWFtLmRvbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJzdHJlYW0yLm9uKCdjb250ZW50LWxlbmd0aCcsIGZ1bmN0aW9uICh2KTogdm9pZCB7XG4gICAgICAgICAgcmVhZFN0cmVhbS5lbWl0KCdjb250ZW50LWxlbmd0aCcsIHYpO1xuICAgICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgICBzYXZlc3RyZWFtLmVtaXQoJ2NvbnRlbnQtbGVuZ3RoJywgdik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcnN0cmVhbTIucGlwZShyZWFkU3RyZWFtKTtcbiAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICByc3RyZWFtMi5waXBlKHNhdmVzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICBzYXZlc3RyZWFtLm9uKCdvcGVuJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIG9uX29wZW4oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2F2ZXN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih7IGVycjogZXJyLCBmaWxlTmFtZTogZmlsZSB9LCAnZXJyb3Igc2F2aW5nIGZpbGUgQHtmaWxlTmFtZX06IEB7ZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9Jyk7XG4gICAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICAgIHNhdmVzdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2F2ZXN0cmVhbSA9IG51bGw7XG4gICAgICAgICAgb25fb3BlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uX29wZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgIFJldHJpZXZlIGEgcGFja2FnZSBtZXRhZGF0YSBmb3Ige25hbWV9IHBhY2thZ2VcbiAgIEZ1bmN0aW9uIGludm9rZXMgbG9jYWxTdG9yYWdlLmdldFBhY2thZ2UgYW5kIHVwbGluay5nZXRfcGFja2FnZSBmb3IgZXZlcnlcbiAgIHVwbGluayB3aXRoIHByb3h5X2FjY2VzcyByaWdodHMgYWdhaW5zdCB7bmFtZX0gYW5kIGNvbWJpbmVzIHJlc3VsdHNcbiAgIGludG8gb25lIGpzb24gb2JqZWN0XG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAmJiB1cGxpbmsgKHByb3h5X2FjY2VzcylcblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9ucy5uYW1lIFBhY2thZ2UgTmFtZVxuICAgKiBAcHJvcGVydHkge29iamVjdH0gIG9wdGlvbnMucmVxIEV4cHJlc3MgYHJlcWAgb2JqZWN0XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3B0aW9ucy5rZWVwVXBMaW5rRGF0YSBrZWVwIHVwIGxpbmsgaW5mbyBpbiBwYWNrYWdlIG1ldGEsIGxhc3QgdXBkYXRlLCBldGMuXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9wdGlvbnMuY2FsbGJhY2sgQ2FsbGJhY2sgZm9yIHJlY2VpdmUgZGF0YVxuICAgKi9cbiAgcHVibGljIGdldFBhY2thZ2Uob3B0aW9uczogSUdldFBhY2thZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhKG9wdGlvbnMubmFtZSwgKGVyciwgZGF0YSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGVyciAmJiAoIWVyci5zdGF0dXMgfHwgZXJyLnN0YXR1cyA+PSBIVFRQX1NUQVRVUy5JTlRFUk5BTF9FUlJPUikpIHtcbiAgICAgICAgLy8gcmVwb3J0IGludGVybmFsIGVycm9ycyByaWdodCBhd2F5XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N5bmNVcGxpbmtzTWV0YWRhdGEoXG4gICAgICAgIG9wdGlvbnMubmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgeyByZXE6IG9wdGlvbnMucmVxLCB1cGxpbmtzTG9vazogb3B0aW9ucy51cGxpbmtzTG9vayB9LFxuICAgICAgICBmdW5jdGlvbiBnZXRQYWNrYWdlU3luVXBMaW5rc0NhbGxiYWNrKGVyciwgcmVzdWx0OiBQYWNrYWdlLCB1cGxpbmtFcnJvcnMpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vcm1hbGl6ZURpc3RUYWdzKGNsZWFuVXBMaW5rc1JlZihvcHRpb25zLmtlZXBVcExpbmtEYXRhLCByZXN1bHQpKTtcblxuICAgICAgICAgIC8vIG5wbSBjYW4gdGhyb3cgaWYgdGhpcyBmaWVsZCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgcmVzdWx0Ll9hdHRhY2htZW50cyA9IHt9O1xuICAgICAgICAgIGlmIChvcHRpb25zLmFiYnJldmlhdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKG51bGwsIGNvbnZlcnRBYmJyZXZpYXRlZE1hbmlmZXN0KHJlc3VsdCksIHVwbGlua0Vycm9ycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2sobnVsbCwgcmVzdWx0LCB1cGxpbmtFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgUmV0cmlldmUgcmVtb3RlIGFuZCBsb2NhbCBwYWNrYWdlcyBtb3JlIHJlY2VudCB0aGFuIHtzdGFydGtleX1cbiAgIEZ1bmN0aW9uIHN0cmVhbXMgYWxsIHBhY2thZ2VzIGZyb20gYWxsIHVwbGlua3MgZmlyc3QsIGFuZCB0aGVuXG4gICBsb2NhbCBwYWNrYWdlcy5cbiAgIE5vdGUgdGhhdCBsb2NhbCBwYWNrYWdlcyBjb3VsZCBvdmVycmlkZSByZWdpc3RyeSBvbmVzIGp1c3QgYmVjYXVzZVxuICAgdGhleSBhcHBlYXIgaW4gSlNPTiBsYXN0LiBUaGF0J3MgYSB0cmFkZS1vZmYgd2UgbWFrZSB0byBhdm9pZFxuICAgbWVtb3J5IGlzc3Vlcy5cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICYmIHVwbGluayAocHJveHlfYWNjZXNzKVxuICAgKiBAcGFyYW0geyp9IHN0YXJ0a2V5XG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKHN0YXJ0a2V5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IElSZWFkVGFyYmFsbCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgc2VhcmNoU3RyZWFtOiBhbnkgPSBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgT2JqZWN0LmtleXModGhpcy51cGxpbmtzKSxcbiAgICAgIGZ1bmN0aW9uICh1cF9uYW1lLCBjYik6IHZvaWQge1xuICAgICAgICAvLyBzaG9ydGN1dDogaWYgYGxvY2FsPTFgIGlzIHN1cHBsaWVkLCBkb24ndCBjYWxsIHVwbGlua3NcbiAgICAgICAgaWYgKG9wdGlvbnMucmVxPy5xdWVyeT8ubG9jYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBzZWFyY2ggZm9yIHVwbGluayAke3VwX25hbWV9YCk7XG4gICAgICAgIC8vIHNlYXJjaCBieSBrZXl3b3JkIGZvciBlYWNoIHVwbGlua1xuICAgICAgICBjb25zdCB1cGxpbmtTdHJlYW06IElVcGxvYWRUYXJiYWxsID0gc2VsZi51cGxpbmtzW3VwX25hbWVdLnNlYXJjaChvcHRpb25zKTtcbiAgICAgICAgLy8gam9pbiB1cGxpbmsgc3RyZWFtIHdpdGggc3RyZWFtcyBQYXNzVGhyb3VnaFxuICAgICAgICB1cGxpbmtTdHJlYW0ucGlwZShzZWFyY2hTdHJlYW0sIHsgZW5kOiBmYWxzZSB9KTtcbiAgICAgICAgdXBsaW5rU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IGVycjogZXJyIH0sICd1cGxpbmsgZXJyb3I6IEB7ZXJyLm1lc3NhZ2V9Jyk7XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfSk7XG4gICAgICAgIHVwbGlua1N0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgLy8gdG8gYXZvaWQgY2FsbCBjYWxsYmFjayBtb3JlIHRoYW4gb25jZVxuICAgICAgICAgIGNiID0gZnVuY3Rpb24gKCk6IHZvaWQge307XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlYXJjaFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgICBpZiAodXBsaW5rU3RyZWFtLmFib3J0KSB7XG4gICAgICAgICAgICB1cGxpbmtTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAvLyBleGVjdXRlZCBhZnRlciBhbGwgc2VyaWVzXG4gICAgICBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIC8vIGF0dGFjaCBhIGxvY2FsIHNlYXJjaCByZXN1bHRzXG4gICAgICAgIGNvbnN0IGxvY2FsU2VhcmNoU3RyZWFtOiBJUmVhZFRhcmJhbGwgPSBzZWxmLmxvY2FsU3RvcmFnZS5zZWFyY2goc3RhcnRrZXksIG9wdGlvbnMpO1xuICAgICAgICBzZWFyY2hTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0ucGlwZShzZWFyY2hTdHJlYW0sIHsgZW5kOiB0cnVlIH0pO1xuICAgICAgICBsb2NhbFNlYXJjaFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvcik6IHZvaWQge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgZXJyOiBlcnIgfSwgJ3NlYXJjaCBlcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICBzZWFyY2hTdHJlYW0uZW5kKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gc2VhcmNoU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIG9ubHkgcHJpdmF0ZSBsb2NhbCBwYWNrYWdlc1xuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxEYXRhYmFzZShjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zdG9yYWdlUGx1Z2luLmdldCgoZXJyLCBsb2NhbHMpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFja2FnZXM6IFZlcnNpb25bXSA9IFtdO1xuICAgICAgY29uc3QgZ2V0UGFja2FnZSA9IGZ1bmN0aW9uIChpdGVtUGtnKTogdm9pZCB7XG4gICAgICAgIHNlbGYubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YShsb2NhbHNbaXRlbVBrZ10sIGZ1bmN0aW9uIChlcnIsIHBrZ01ldGFkYXRhOiBQYWNrYWdlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSkge1xuICAgICAgICAgICAgY29uc3QgbGF0ZXN0ID0gcGtnTWV0YWRhdGFbRElTVF9UQUdTXS5sYXRlc3Q7XG4gICAgICAgICAgICBpZiAobGF0ZXN0ICYmIHBrZ01ldGFkYXRhLnZlcnNpb25zW2xhdGVzdF0pIHtcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbjogVmVyc2lvbiA9IHBrZ01ldGFkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVMaXN0ID0gcGtnTWV0YWRhdGEudGltZSBhcyBHZW5lcmljQm9keTtcbiAgICAgICAgICAgICAgY29uc3QgdGltZSA9IHRpbWVMaXN0W2xhdGVzdF07XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdmVyc2lvbi50aW1lID0gdGltZTtcblxuICAgICAgICAgICAgICAvLyBBZGQgZm9yIHN0YXJzIGFwaVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHZlcnNpb24udXNlcnMgPSBwa2dNZXRhZGF0YS51c2VycztcblxuICAgICAgICAgICAgICBwYWNrYWdlcy5wdXNoKHZlcnNpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih7IHBhY2thZ2U6IGxvY2Fsc1tpdGVtUGtnXSB9LCAncGFja2FnZSBAe3BhY2thZ2V9IGRvZXMgbm90IGhhdmUgYSBcImxhdGVzdFwiIHRhZz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbVBrZyA+PSBsb2NhbHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcGFja2FnZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYWNrYWdlKGl0ZW1Qa2cgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGxvY2Fscy5sZW5ndGgpIHtcbiAgICAgICAgZ2V0UGFja2FnZSgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmZXRjaGVzIHBhY2thZ2UgbWV0YWRhdGEgZnJvbSB1cGxpbmtzIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aCBsb2NhbCBkYXRhXG4gICBpZiBwYWNrYWdlIGlzIGF2YWlsYWJsZSBsb2NhbGx5LCBpdCBNVVNUIGJlIHByb3ZpZGVkIGluIHBrZ2luZm9cbiAgIHJldHVybnMgY2FsbGJhY2soZXJyLCByZXN1bHQsIHVwbGlua19lcnJvcnMpXG4gICAqL1xuICBwdWJsaWMgX3N5bmNVcGxpbmtzTWV0YWRhdGEobmFtZTogc3RyaW5nLCBwYWNrYWdlSW5mbzogUGFja2FnZSwgb3B0aW9uczogSVN5bmNVcGxpbmtzLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBsZXQgZm91bmQgPSB0cnVlO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHVwTGlua3M6IElQcm94eVtdID0gW107XG4gICAgY29uc3QgaGFzVG9Mb29rSW50b1VwbGlua3MgPSBfLmlzTmlsKG9wdGlvbnMudXBsaW5rc0xvb2spIHx8IG9wdGlvbnMudXBsaW5rc0xvb2s7XG5cbiAgICBpZiAoIXBhY2thZ2VJbmZvKSB7XG4gICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgcGFja2FnZUluZm8gPSBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShuYW1lKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHVwbGluayBpbiB0aGlzLnVwbGlua3MpIHtcbiAgICAgIGlmIChoYXNQcm94eVRvKG5hbWUsIHVwbGluaywgdGhpcy5jb25maWcucGFja2FnZXMpICYmIGhhc1RvTG9va0ludG9VcGxpbmtzKSB7XG4gICAgICAgIHVwTGlua3MucHVzaCh0aGlzLnVwbGlua3NbdXBsaW5rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMubWFwKFxuICAgICAgdXBMaW5rcyxcbiAgICAgICh1cExpbmssIGNiKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IF9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHVwTGlua01ldGEgPSBwYWNrYWdlSW5mby5fdXBsaW5rc1t1cExpbmsudXBuYW1lXTtcblxuICAgICAgICBpZiAoaXNPYmplY3QodXBMaW5rTWV0YSkpIHtcbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gdXBMaW5rTWV0YS5mZXRjaGVkO1xuXG4gICAgICAgICAgaWYgKGZldGNoZWQgJiYgRGF0ZS5ub3coKSAtIGZldGNoZWQgPCB1cExpbmsubWF4YWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfb3B0aW9ucy5ldGFnID0gdXBMaW5rTWV0YS5ldGFnO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBMaW5rLmdldFJlbW90ZU1ldGFkYXRhKG5hbWUsIF9vcHRpb25zLCAoZXJyLCB1cExpbmtSZXNwb25zZSwgZVRhZyk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnJlbW90ZVN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAgICAgICB1cExpbmtNZXRhLmZldGNoZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlcnIgfHwgIXVwTGlua1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgW2VyciB8fCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcignbm8gZGF0YScpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEodXBMaW5rUmVzcG9uc2UsIG5hbWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWI6ICdvdXQnLFxuICAgICAgICAgICAgICAgIGVycjogZXJyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAncGFja2FnZS5qc29uIHZhbGlkYXRpbmcgZXJyb3IgQHshZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCBbZXJyXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFja2FnZUluZm8uX3VwbGlua3NbdXBMaW5rLnVwbmFtZV0gPSB7XG4gICAgICAgICAgICBldGFnOiBlVGFnLFxuICAgICAgICAgICAgZmV0Y2hlZDogRGF0ZS5ub3coKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcGFja2FnZUluZm8udGltZSA9IG1lcmdlVXBsaW5rVGltZUludG9Mb2NhbChwYWNrYWdlSW5mbywgdXBMaW5rUmVzcG9uc2UpO1xuXG4gICAgICAgICAgdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsodXBMaW5rUmVzcG9uc2UudmVyc2lvbnMsIHVwTGluayk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWVyZ2VWZXJzaW9ucyhwYWNrYWdlSW5mbywgdXBMaW5rUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWI6ICdvdXQnLFxuICAgICAgICAgICAgICAgIGVycjogZXJyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAncGFja2FnZS5qc29uIHBhcnNpbmcgZXJyb3IgQHshZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCBbZXJyXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgd2UgZ290IHRvIHRoaXMgcG9pbnQsIGFzc3VtZSB0aGF0IHRoZSBjb3JyZWN0IHBhY2thZ2UgZXhpc3RzXG4gICAgICAgICAgLy8gb24gdGhlIHVwbGlua1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAoZXJyOiBFcnJvciwgdXBMaW5rc0Vycm9yczogYW55KTogQXN5bmNSZXN1bHRBcnJheUNhbGxiYWNrPHVua25vd24sIEVycm9yPiA9PiB7XG4gICAgICAgIGFzc2VydCghZXJyICYmIEFycmF5LmlzQXJyYXkodXBMaW5rc0Vycm9ycykpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBjb25uZWN0aW9uIHRpbWVvdXQgb3IgcmVzZXQgZXJyb3JzIHdpdGggdXBsaW5rKHMpXG4gICAgICAgIC8vICh0aGVzZSBzaG91bGQgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSBwYWNrYWdlIG5vdCBiZWluZyBmb3VuZClcbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIGxldCB1cGxpbmtUaW1lb3V0RXJyb3I7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cExpbmtzRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tpXSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVwTGlua3NFcnJvcnNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tpXVtqXSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IHVwTGlua3NFcnJvcnNbaV1bal0uY29kZTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAnRVRJTUVET1VUJyB8fCBjb2RlID09PSAnRVNPQ0tFVFRJTUVET1VUJyB8fCBjb2RlID09PSAnRUNPTk5SRVNFVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsaW5rVGltZW91dEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVwbGlua1RpbWVvdXRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRTZXJ2aWNlVW5hdmFpbGFibGUoKSwgbnVsbCwgdXBMaW5rc0Vycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PX1BBQ0tBR0UpLCBudWxsLCB1cExpbmtzRXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cExpbmtzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBwYWNrYWdlSW5mbyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmxvY2FsU3RvcmFnZS51cGRhdGVWZXJzaW9ucyhuYW1lLCBwYWNrYWdlSW5mbywgYXN5bmMgKGVyciwgcGFja2FnZUpzb25Mb2NhbDogUGFja2FnZSk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFueSBlcnJvciBoZXJlIHdpbGwgY2F1c2UgYSA0MDQsIGxpa2UgYW4gdXBsaW5rIGVycm9yLiBUaGlzIGlzIGxpa2VseSB0aGUgcmlnaHQgdGhpbmcgdG8gZG9cbiAgICAgICAgICAvLyBhcyBhIGJyb2tlbiBmaWx0ZXIgaXMgYSBzZWN1cml0eSByaXNrLlxuICAgICAgICAgIGNvbnN0IGZpbHRlckVycm9yczogRXJyb3JbXSA9IFtdO1xuICAgICAgICAgIC8vIFRoaXMgTVVTVCBiZSBkb25lIHNlcmlhbGx5IGFuZCBub3QgaW4gcGFyYWxsZWwgYXMgdGhleSBtb2RpZnkgcGFja2FnZUpzb25Mb2NhbFxuICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHNlbGYuZmlsdGVycykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gVGhlc2UgZmlsdGVycyBjYW4gYXNzdW1lIGl0J3Mgc2F2ZSB0byBtb2RpZnkgcGFja2FnZUpzb25Mb2NhbCBhbmQgcmV0dXJuIGl0IGRpcmVjdGx5IGZvclxuICAgICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSAoaS5lLiBuZWVkIG5vdCBiZSBwdXJlKVxuICAgICAgICAgICAgICBwYWNrYWdlSnNvbkxvY2FsID0gYXdhaXQgZmlsdGVyLmZpbHRlcl9tZXRhZGF0YShwYWNrYWdlSnNvbkxvY2FsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBmaWx0ZXJFcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFjayhudWxsLCBwYWNrYWdlSnNvbkxvY2FsLCBfLmNvbmNhdCh1cExpbmtzRXJyb3JzLCBmaWx0ZXJFcnJvcnMpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBoaWRkZW4gdmFsdWUgZm9yIGVhY2ggdmVyc2lvbi5cbiAgICogQHBhcmFtIHtBcnJheX0gdmVyc2lvbnMgbGlzdCBvZiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cExpbmsgdXBsaW5rIG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHB1YmxpYyBfdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsodmVyc2lvbnM6IFZlcnNpb25zLCB1cExpbms6IElQcm94eSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaSBpbiB2ZXJzaW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZXJzaW9ucywgaSkpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHZlcnNpb25zW2ldO1xuXG4gICAgICAgIC8vIGhvbGRzIGEgXCJoaWRkZW5cIiB2YWx1ZSB0byBiZSB1c2VkIGJ5IHRoZSBwYWNrYWdlIHN0b3JhZ2UuXG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgdmVyc2lvbltTeW1ib2wuZm9yKCdfX3ZlcmRhY2Npb191cGxpbmsnKV0gPSB1cExpbmsudXBuYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdG9yYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBU0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLE9BQU4sQ0FBeUM7RUFPaENDLFdBQVcsQ0FBQ0MsTUFBRCxFQUFpQjtJQUFBOztJQUFBOztJQUFBOztJQUFBOztJQUFBOztJQUNqQyxLQUFLQSxNQUFMLEdBQWNBLE1BQWQ7SUFDQSxLQUFLQyxPQUFMLEdBQWUsSUFBQUMsd0JBQUEsRUFBYUYsTUFBYixDQUFmO0lBQ0EsS0FBS0csTUFBTCxHQUFjQSxjQUFkO0lBQ0EsS0FBS0MsT0FBTCxHQUFlLEVBQWYsQ0FKaUMsQ0FLakM7O0lBQ0EsS0FBS0MsWUFBTCxHQUFvQixJQUFwQjtFQUNEOztFQUVNQyxJQUFJLENBQUNOLE1BQUQsRUFBaUJJLE9BQXVCLEdBQUcsRUFBM0MsRUFBZ0U7SUFDekUsS0FBS0EsT0FBTCxHQUFlQSxPQUFmO0lB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
|
package/conf/default.yaml
CHANGED
|
@@ -103,6 +103,9 @@ packages:
|
|
|
103
103
|
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
|
|
104
104
|
server:
|
|
105
105
|
keepAliveTimeout: 60
|
|
106
|
+
# Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
|
|
107
|
+
# See: https://expressjs.com/en/guide/behind-proxies.html
|
|
108
|
+
# trustProxy: '127.0.0.1'
|
|
106
109
|
|
|
107
110
|
# https://verdaccio.org/docs/configuration#offline-publish
|
|
108
111
|
# publish:
|
package/conf/docker.yaml
CHANGED
|
@@ -107,6 +107,9 @@ packages:
|
|
|
107
107
|
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
|
|
108
108
|
server:
|
|
109
109
|
keepAliveTimeout: 60
|
|
110
|
+
# Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
|
|
111
|
+
# See: https://expressjs.com/en/guide/behind-proxies.html
|
|
112
|
+
# trustProxy: '127.0.0.1'
|
|
110
113
|
|
|
111
114
|
# https://verdaccio.org/docs/configuration#offline-publish
|
|
112
115
|
# publish:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verdaccio",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.15.0",
|
|
4
4
|
"description": "A lightweight private npm proxy registry",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Verdaccio Maintainers",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@verdaccio/commons-api": "10.2.0",
|
|
22
22
|
"@verdaccio/local-storage": "10.3.1",
|
|
23
|
-
"@verdaccio/readme": "10.
|
|
23
|
+
"@verdaccio/readme": "10.4.1",
|
|
24
24
|
"@verdaccio/streams": "10.2.0",
|
|
25
|
-
"@verdaccio/ui-theme": "6.0.0-6-next.
|
|
25
|
+
"@verdaccio/ui-theme": "6.0.0-6-next.28",
|
|
26
26
|
"JSONStream": "1.3.5",
|
|
27
27
|
"async": "3.2.4",
|
|
28
28
|
"body-parser": "1.20.0",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"compression": "1.7.4",
|
|
31
31
|
"cookies": "0.8.0",
|
|
32
32
|
"cors": "2.8.5",
|
|
33
|
-
"dayjs": "1.11.
|
|
33
|
+
"dayjs": "1.11.5",
|
|
34
34
|
"debug": "^4.3.3",
|
|
35
35
|
"envinfo": "7.8.1",
|
|
36
36
|
"eslint-import-resolver-node": "0.3.6",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"http-errors": "2.0.0",
|
|
42
42
|
"js-yaml": "4.1.0",
|
|
43
43
|
"jsonwebtoken": "8.5.1",
|
|
44
|
-
"kleur": "4.1.
|
|
44
|
+
"kleur": "4.1.5",
|
|
45
45
|
"lodash": "4.17.21",
|
|
46
|
-
"lru-cache": "7.
|
|
46
|
+
"lru-cache": "7.14.0",
|
|
47
47
|
"lunr-mutable-indexes": "2.3.2",
|
|
48
|
-
"marked": "4.0
|
|
48
|
+
"marked": "4.1.0",
|
|
49
49
|
"memoizee": "0.4.15",
|
|
50
50
|
"mime": "3.0.0",
|
|
51
51
|
"minimatch": "5.1.0",
|
|
@@ -62,29 +62,29 @@
|
|
|
62
62
|
"verdaccio-htpasswd": "10.5.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@babel/cli": "7.18.
|
|
66
|
-
"@babel/core": "7.18.
|
|
67
|
-
"@babel/node": "7.18.
|
|
65
|
+
"@babel/cli": "7.18.10",
|
|
66
|
+
"@babel/core": "7.18.10",
|
|
67
|
+
"@babel/node": "7.18.10",
|
|
68
68
|
"@babel/plugin-proposal-class-properties": "7.18.6",
|
|
69
|
-
"@babel/plugin-proposal-decorators": "7.18.
|
|
70
|
-
"@babel/plugin-proposal-export-namespace-from": "7.18.
|
|
69
|
+
"@babel/plugin-proposal-decorators": "7.18.10",
|
|
70
|
+
"@babel/plugin-proposal-export-namespace-from": "7.18.9",
|
|
71
71
|
"@babel/plugin-proposal-function-sent": "7.18.6",
|
|
72
72
|
"@babel/plugin-proposal-json-strings": "7.18.6",
|
|
73
73
|
"@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
|
|
74
74
|
"@babel/plugin-proposal-numeric-separator": "7.18.6",
|
|
75
|
-
"@babel/plugin-proposal-object-rest-spread": "7.18.
|
|
76
|
-
"@babel/plugin-proposal-optional-chaining": "7.18.
|
|
75
|
+
"@babel/plugin-proposal-object-rest-spread": "7.18.9",
|
|
76
|
+
"@babel/plugin-proposal-optional-chaining": "7.18.9",
|
|
77
77
|
"@babel/plugin-proposal-throw-expressions": "7.18.6",
|
|
78
78
|
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
|
79
79
|
"@babel/plugin-syntax-import-meta": "7.10.4",
|
|
80
80
|
"@babel/plugin-transform-async-to-generator": "7.18.6",
|
|
81
|
-
"@babel/plugin-transform-classes": "7.18.
|
|
82
|
-
"@babel/plugin-transform-runtime": "7.18.
|
|
81
|
+
"@babel/plugin-transform-classes": "7.18.9",
|
|
82
|
+
"@babel/plugin-transform-runtime": "7.18.10",
|
|
83
83
|
"@babel/polyfill": "^7.12.1",
|
|
84
|
-
"@babel/preset-env": "7.18.
|
|
84
|
+
"@babel/preset-env": "7.18.10",
|
|
85
85
|
"@babel/preset-typescript": "7.18.6",
|
|
86
|
-
"@babel/register": "7.18.
|
|
87
|
-
"@babel/runtime": "7.18.
|
|
86
|
+
"@babel/register": "7.18.9",
|
|
87
|
+
"@babel/runtime": "7.18.9",
|
|
88
88
|
"@commitlint/cli": "12.1.4",
|
|
89
89
|
"@commitlint/config-conventional": "12.1.4",
|
|
90
90
|
"@octokit/rest": "18.12.0",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"@typescript-eslint/parser": "5.22.0",
|
|
107
107
|
"@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
|
|
108
108
|
"@verdaccio/eslint-config": "^10.0.0",
|
|
109
|
-
"@verdaccio/types": "10.
|
|
109
|
+
"@verdaccio/types": "10.6.0",
|
|
110
110
|
"all-contributors-cli": "6.20.0",
|
|
111
111
|
"babel-eslint": "10.1.0",
|
|
112
112
|
"babel-jest": "26.6.3",
|
|
@@ -139,8 +139,8 @@
|
|
|
139
139
|
"puppeteer": "5.5.0",
|
|
140
140
|
"rimraf": "3.0.2",
|
|
141
141
|
"selfsigned": "1.10.14",
|
|
142
|
-
"standard-version": "9.
|
|
143
|
-
"supertest": "6.2.
|
|
142
|
+
"standard-version": "9.5.0",
|
|
143
|
+
"supertest": "6.2.4",
|
|
144
144
|
"ts-node": "10.7.0",
|
|
145
145
|
"typescript": "4.1.3",
|
|
146
146
|
"verdaccio-auth-memory": "10.2.0",
|