israeli-bank-scrapers 5.3.0 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -2
- package/lib/scrapers/base-beinleumi-group.js +14 -4
- package/lib/scrapers/base-isracard-amex.js +9 -9
- package/lib/scrapers/base-scraper-with-browser.d.ts +3 -2
- package/lib/scrapers/base-scraper-with-browser.js +62 -47
- package/lib/scrapers/interface.d.ts +41 -23
- package/lib/scrapers/interface.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
Israeli Bank Scrapers - Get closer to your own data!
|
|
2
|
-
|
|
1
|
+
# Israeli Bank Scrapers - Get closer to your own data!
|
|
2
|
+
|
|
3
3
|
<img src="./logo.png" width="100" height="100" alt="Logo" align="left" />
|
|
4
4
|
|
|
5
5
|
[](https://nodei.co/npm/israeli-bank-scrapers/)
|
|
@@ -130,7 +130,55 @@ The return value is a list of scraper metadata:
|
|
|
130
130
|
}
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
+
## Advanced options
|
|
134
|
+
|
|
135
|
+
### ExternalBrowserOptions
|
|
136
|
+
|
|
137
|
+
This option allows you to provide an externally created browser instance. You can get a browser directly from puppeteer via `puppeteer.launch()`.
|
|
138
|
+
Note that for backwards compatibility, the browser will be closed by the library after the scraper finishes unless `skipCloseBrowser` is set to true.
|
|
139
|
+
|
|
140
|
+
Example:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import puppeteer from 'puppeteer';
|
|
144
|
+
import { CompanyTypes, createScraper } from 'israeli-bank-scrapers';
|
|
145
|
+
|
|
146
|
+
const browser = await puppeteer.launch();
|
|
147
|
+
const options = {
|
|
148
|
+
companyId: CompanyTypes.leumi,
|
|
149
|
+
startDate: new Date('2020-05-01'),
|
|
150
|
+
browser,
|
|
151
|
+
skipCloseBrowser: true, // Or false [default] if you want it to auto-close
|
|
152
|
+
};
|
|
153
|
+
const scraper = createScraper(options);
|
|
154
|
+
const scrapeResult = await scraper.scrape({ username: 'vr29485', password: 'sometingsomething' });
|
|
155
|
+
await browser.close(); // Or not if `skipCloseBrowser` is false
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### ExternalBrowserContextOptions
|
|
159
|
+
|
|
160
|
+
This option allows you to provide a [browser context](https://pptr.dev/api/puppeteer.browsercontext). This is useful if you don't want to share cookies with other scrapers (i.e. multiple parallel runs of the same scraper with different users) without creating a new browser for each scraper.
|
|
161
|
+
|
|
162
|
+
Example:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
import puppeteer from 'puppeteer';
|
|
166
|
+
import { CompanyTypes, createScraper } from 'israeli-bank-scrapers';
|
|
167
|
+
|
|
168
|
+
const browser = await puppeteer.launch();
|
|
169
|
+
const browserContext = await browser.createBrowserContext();
|
|
170
|
+
const options = {
|
|
171
|
+
companyId: CompanyTypes.leumi,
|
|
172
|
+
startDate: new Date('2020-05-01'),
|
|
173
|
+
browserContext
|
|
174
|
+
};
|
|
175
|
+
const scraper = createScraper(options);
|
|
176
|
+
const scrapeResult = await scraper.scrape({ username: 'vr29485', password: 'sometingsomething' });
|
|
177
|
+
await browser.close();
|
|
178
|
+
```
|
|
179
|
+
|
|
133
180
|
## Two-Factor Authentication Scrapers
|
|
181
|
+
|
|
134
182
|
Some companies require two-factor authentication, and as such the scraper cannot be fully automated. When using the relevant scrapers, you have two options:
|
|
135
183
|
1. Provide an async callback that knows how to retrieve real time secrets like OTP codes.
|
|
136
184
|
2. When supported by the scraper - provide a "long term token". These are usually available if the financial provider only requires Two-Factor authentication periodically, and not on every login. You can retrieve your long term token from the relevant credit/banking app using reverse engineering and a MITM proxy, or use helper functions that are provided by some Two-Factor Auth scrapers (e.g. OneZero).
|
|
@@ -44,7 +44,7 @@ const NEXT_PAGE_LINK = 'a#Npage.paging';
|
|
|
44
44
|
const CURRENT_BALANCE = '.main_balance';
|
|
45
45
|
function getPossibleLoginResults() {
|
|
46
46
|
const urls = {};
|
|
47
|
-
urls[_baseScraperWithBrowser.LoginResults.Success] = [/
|
|
47
|
+
urls[_baseScraperWithBrowser.LoginResults.Success] = [/fibi.*accountSummary/];
|
|
48
48
|
urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = [/FibiMenu\/Marketing\/Private\/Home/];
|
|
49
49
|
return urls;
|
|
50
50
|
}
|
|
@@ -223,7 +223,7 @@ async function getCurrentBalance(page) {
|
|
|
223
223
|
return getAmountData(balanceStr);
|
|
224
224
|
}
|
|
225
225
|
async function waitForPostLogin(page) {
|
|
226
|
-
return Promise.race([(0, _elementsInteractions.waitUntilElementFound)(page, '#
|
|
226
|
+
return Promise.race([(0, _elementsInteractions.waitUntilElementFound)(page, '#card-header', true), (0, _elementsInteractions.waitUntilElementFound)(page, '#account_num', true)]);
|
|
227
227
|
}
|
|
228
228
|
async function fetchAccountData(page, startDate) {
|
|
229
229
|
await searchByDates(page, startDate);
|
|
@@ -245,11 +245,21 @@ async function getAccountIdsBySelector(page) {
|
|
|
245
245
|
});
|
|
246
246
|
return accountsIds;
|
|
247
247
|
}
|
|
248
|
+
async function getTransactionsFrame(page) {
|
|
249
|
+
await (0, _waiting.sleep)(5000);
|
|
250
|
+
const frames = page.frames();
|
|
251
|
+
const targetFrame = frames.find(f => f.name() === 'iframe-old-pages');
|
|
252
|
+
if (!targetFrame) {
|
|
253
|
+
throw new Error('iframe: "iframe-old-pages" (used for transactions page) was not found on the page');
|
|
254
|
+
}
|
|
255
|
+
return targetFrame;
|
|
256
|
+
}
|
|
248
257
|
async function fetchAccounts(page, startDate) {
|
|
249
258
|
const accounts = [];
|
|
250
259
|
const accountsIds = await getAccountIdsBySelector(page);
|
|
251
260
|
if (accountsIds.length <= 1) {
|
|
252
|
-
const
|
|
261
|
+
const frame = await getTransactionsFrame(page);
|
|
262
|
+
const accountData = await fetchAccountData(frame, startDate);
|
|
253
263
|
accounts.push(accountData);
|
|
254
264
|
} else {
|
|
255
265
|
for (const accountId of accountsIds) {
|
|
@@ -298,4 +308,4 @@ class BeinleumiGroupBaseScraper extends _baseScraperWithBrowser.BaseScraperWithB
|
|
|
298
308
|
}
|
|
299
309
|
}
|
|
300
310
|
var _default = exports.default = BeinleumiGroupBaseScraper;
|
|
301
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX25hdmlnYXRpb24iLCJfd2FpdGluZyIsIl90cmFuc2FjdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9kZWZpbmVQcm9wZXJ0eSIsInIiLCJ0IiwiX3RvUHJvcGVydHlLZXkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkRBVEVfRk9STUFUIiwiTk9fVFJBTlNBQ1RJT05fSU5fREFURV9SQU5HRV9URVhUIiwiREFURV9DT0xVTU5fQ0xBU1NfQ09NUExFVEVEIiwiREFURV9DT0xVTU5fQ0xBU1NfUEVORElORyIsIkRFU0NSSVBUSU9OX0NPTFVNTl9DTEFTU19DT01QTEVURUQiLCJERVNDUklQVElPTl9DT0xVTU5fQ0xBU1NfUEVORElORyIsIlJFRkVSRU5DRV9DT0xVTU5fQ0xBU1MiLCJERUJJVF9DT0xVTU5fQ0xBU1MiLCJDUkVESVRfQ09MVU1OX0NMQVNTIiwiRVJST1JfTUVTU0FHRV9DTEFTUyIsIkFDQ09VTlRTX05VTUJFUiIsIkNMT1NFX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fQ0xBU1MiLCJTSE9XX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fVkFMVUUiLCJDT01QTEVURURfVFJBTlNBQ1RJT05TX1RBQkxFIiwiUEVORElOR19UUkFOU0FDVElPTlNfVEFCTEUiLCJORVhUX1BBR0VfTElOSyIsIkNVUlJFTlRfQkFMQU5DRSIsImdldFBvc3NpYmxlTG9naW5SZXN1bHRzIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZ2V0QW1vdW50RGF0YSIsImFtb3VudFN0ciIsImFtb3VudFN0ckNvcHkiLCJyZXBsYWNlIiwiU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCIsInJlcGxhY2VBbGwiLCJwYXJzZUZsb2F0IiwiZ2V0VHhuQW1vdW50IiwidHhuIiwiY3JlZGl0IiwiZGViaXQiLCJpc05hTiIsImNvbnZlcnRUcmFuc2FjdGlvbnMiLCJ0eG5zIiwibWFwIiwiY29udmVydGVkRGF0ZSIsIm1vbWVudCIsImRhdGUiLCJ0b0lTT1N0cmluZyIsImNvbnZlcnRlZEFtb3VudCIsInR5cGUiLCJUcmFuc2FjdGlvblR5cGVzIiwiTm9ybWFsIiwiaWRlbnRpZmllciIsInJlZmVyZW5jZSIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwicHJvY2Vzc2VkRGF0ZSIsIm9yaWdpbmFsQW1vdW50Iiwib3JpZ2luYWxDdXJyZW5jeSIsIlNIRUtFTF9DVVJSRU5DWSIsImNoYXJnZWRBbW91bnQiLCJzdGF0dXMiLCJkZXNjcmlwdGlvbiIsIm1lbW8iLCJnZXRUcmFuc2FjdGlvbkRhdGUiLCJ0ZHMiLCJ0cmFuc2FjdGlvblR5cGUiLCJ0cmFuc2FjdGlvbnNDb2xzVHlwZXMiLCJ0cmltIiwiZ2V0VHJhbnNhY3Rpb25EZXNjcmlwdGlvbiIsImdldFRyYW5zYWN0aW9uUmVmZXJlbmNlIiwiZ2V0VHJhbnNhY3Rpb25EZWJpdCIsImdldFRyYW5zYWN0aW9uQ3JlZGl0IiwiZXh0cmFjdFRyYW5zYWN0aW9uRGV0YWlscyIsInR4blJvdyIsInRyYW5zYWN0aW9uU3RhdHVzIiwiaW5uZXJUZHMiLCJpdGVtIiwiZ2V0VHJhbnNhY3Rpb25zQ29sc1R5cGVDbGFzc2VzIiwicGFnZSIsInRhYmxlTG9jYXRvciIsInJlc3VsdCIsInR5cGVDbGFzc2VzT2JqcyIsInBhZ2VFdmFsQWxsIiwidGQiLCJpbmRleCIsImNvbENsYXNzIiwiZ2V0QXR0cmlidXRlIiwidHlwZUNsYXNzT2JqIiwiZXh0cmFjdFRyYW5zYWN0aW9uIiwicHVzaCIsImV4dHJhY3RUcmFuc2FjdGlvbnMiLCJ0cmFuc2FjdGlvbnNSb3dzIiwidHJzIiwidHIiLCJBcnJheSIsImZyb20iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImlubmVyVGV4dCIsImlzTm9UcmFuc2FjdGlvbkluRGF0ZVJhbmdlRXJyb3IiLCJoYXNFcnJvckluZm9FbGVtZW50IiwiZWxlbWVudFByZXNlbnRPblBhZ2UiLCJlcnJvclRleHQiLCIkZXZhbCIsImVycm9yRWxlbWVudCIsInNlYXJjaEJ5RGF0ZXMiLCJzdGFydERhdGUiLCJjbGlja0J1dHRvbiIsIndhaXRVbnRpbEVsZW1lbnRGb3VuZCIsImZpbGxJbnB1dCIsImZvcm1hdCIsIndhaXRGb3JOYXZpZ2F0aW9uIiwiZ2V0QWNjb3VudE51bWJlciIsInNlbGVjdGVkU25pZkFjY291bnQiLCJvcHRpb24iLCJjaGVja0lmSGFzTmV4dFBhZ2UiLCJuYXZpZ2F0ZVRvTmV4dFBhZ2UiLCJzY3JhcGVUcmFuc2FjdGlvbnMiLCJuZWVkVG9QYWdpbmF0ZSIsImhhc05leHRQYWdlIiwiY3VycmVudFBhZ2VUeG5zIiwiZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyIsIlByb21pc2UiLCJyYWNlIiwibm9UcmFuc2FjdGlvbkluUmFuZ2VFcnJvciIsInBlbmRpbmdUeG5zIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJjb21wbGV0ZWRUeG5zIiwiQ29tcGxldGVkIiwiZ2V0Q3VycmVudEJhbGFuY2UiLCJiYWxhbmNlRWxlbWVudCIsIiQiLCJiYWxhbmNlU3RyIiwiZXZhbHVhdGUiLCJ3YWl0Rm9yUG9zdExvZ2luIiwiZmV0Y2hBY2NvdW50RGF0YSIsImFjY291bnROdW1iZXIiLCJiYWxhbmNlIiwiZ2V0QWNjb3VudElkc0J5U2VsZWN0b3IiLCJhY2NvdW50c0lkcyIsInNlbGVjdEVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwib3B0aW9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmZXRjaEFjY291bnRzIiwiYWNjb3VudHMiLCJsZW5ndGgiLCJhY2NvdW50RGF0YSIsImFjY291bnRJZCIsInNlbGVjdCIsIkJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJMT0dJTl9VUkwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInBvc3RBY3Rpb24iLCJwb3NzaWJsZVJlc3VsdHMiLCJwcmVBY3Rpb24iLCJzbGVlcCIsImZldGNoRGF0YSIsImRlZmF1bHRTdGFydE1vbWVudCIsInN1YnRyYWN0IiwiYWRkIiwic3RhcnRNb21lbnRMaW1pdCIsInllYXIiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsIm5hdmlnYXRlVG8iLCJUUkFOU0FDVElPTlNfVVJMIiwic3VjY2VzcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLWJlaW5sZXVtaS1ncm91cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50LCB7IHR5cGUgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBTSEVLRUxfQ1VSUkVOQ1ksIFNIRUtFTF9DVVJSRU5DWV9TWU1CT0wgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgY2xpY2tCdXR0b24sXG4gIGVsZW1lbnRQcmVzZW50T25QYWdlLFxuICBmaWxsSW5wdXQsXG4gIHBhZ2VFdmFsQWxsLFxuICB3YWl0VW50aWxFbGVtZW50Rm91bmQsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3JOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsXG4gIHR5cGUgVHJhbnNhY3Rpb24sXG4gIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luUmVzdWx0cywgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5cbmNvbnN0IERBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuY29uc3QgTk9fVFJBTlNBQ1RJT05fSU5fREFURV9SQU5HRV9URVhUID0gJ9ec15Ag16DXntem15DXlSDXoNeq15XXoNeZ150g15HXoNeV16nXkCDXlNee15HXlden16knO1xuY29uc3QgREFURV9DT0xVTU5fQ0xBU1NfQ09NUExFVEVEID0gJ2RhdGUgZmlyc3QnO1xuY29uc3QgREFURV9DT0xVTU5fQ0xBU1NfUEVORElORyA9ICdmaXJzdCBkYXRlJztcbmNvbnN0IERFU0NSSVBUSU9OX0NPTFVNTl9DTEFTU19DT01QTEVURUQgPSAncmVmZXJlbmNlIHdyYXBfbm9ybWFsJztcbmNvbnN0IERFU0NSSVBUSU9OX0NPTFVNTl9DTEFTU19QRU5ESU5HID0gJ2RldGFpbHMgd3JhcF9ub3JtYWwnO1xuY29uc3QgUkVGRVJFTkNFX0NPTFVNTl9DTEFTUyA9ICdkZXRhaWxzJztcbmNvbnN0IERFQklUX0NPTFVNTl9DTEFTUyA9ICdkZWJpdCc7XG5jb25zdCBDUkVESVRfQ09MVU1OX0NMQVNTID0gJ2NyZWRpdCc7IFxuY29uc3QgRVJST1JfTUVTU0FHRV9DTEFTUyA9ICdOT19EQVRBJztcbmNvbnN0IEFDQ09VTlRTX05VTUJFUiA9ICdkaXYuZmliaV9hY2NvdW50IHNwYW4uYWNjX251bSc7XG5jb25zdCBDTE9TRV9TRUFSQ0hfQllfREFURVNfQlVUVE9OX0NMQVNTID0gJ3VpLWRhdGVwaWNrZXItY2xvc2UnO1xuY29uc3QgU0hPV19TRUFSQ0hfQllfREFURVNfQlVUVE9OX1ZBTFVFID0gJ9eU16bXkic7XG5jb25zdCBDT01QTEVURURfVFJBTlNBQ1RJT05TX1RBQkxFID0gJ3RhYmxlI2RhdGFUYWJsZTA3Nyc7XG5jb25zdCBQRU5ESU5HX1RSQU5TQUNUSU9OU19UQUJMRSA9ICd0YWJsZSNkYXRhVGFibGUwMjMnO1xuY29uc3QgTkVYVF9QQUdFX0xJTksgPSAnYSNOcGFnZS5wYWdpbmcnO1xuY29uc3QgQ1VSUkVOVF9CQUxBTkNFID0gJy5tYWluX2JhbGFuY2UnO1xuXG50eXBlIFRyYW5zYWN0aW9uc0NvbHNUeXBlcyA9IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG50eXBlIFRyYW5zYWN0aW9uc1RyVGRzID0gc3RyaW5nW107XG50eXBlIFRyYW5zYWN0aW9uc1RyID0geyBpbm5lclRkczogVHJhbnNhY3Rpb25zVHJUZHMgfTtcblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIHJlZmVyZW5jZTogc3RyaW5nO1xuICBkYXRlOiBzdHJpbmc7XG4gIGNyZWRpdDogc3RyaW5nO1xuICBkZWJpdDogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cygpOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyB7XG4gIGNvbnN0IHVybHM6IFBvc3NpYmxlTG9naW5SZXN1bHRzID0ge307XG4gIHVybHNbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdID0gWy9GaWJpTWVudVxcL09ubGluZS9dO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdID0gWy9GaWJpTWVudVxcL01hcmtldGluZ1xcL1ByaXZhdGVcXC9Ib21lL107XG4gIHJldHVybiB1cmxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJyN1c2VybmFtZScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6ICcjcGFzc3dvcmQnLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gZ2V0QW1vdW50RGF0YShhbW91bnRTdHI6IHN0cmluZykge1xuICBsZXQgYW1vdW50U3RyQ29weSA9IGFtb3VudFN0ci5yZXBsYWNlKFNIRUtFTF9DVVJSRU5DWV9TWU1CT0wsICcnKTtcbiAgYW1vdW50U3RyQ29weSA9IGFtb3VudFN0ckNvcHkucmVwbGFjZUFsbCgnLCcsICcnKTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQoYW1vdW50U3RyQ29weSk7XG59XG5cbmZ1bmN0aW9uIGdldFR4bkFtb3VudCh0eG46IFNjcmFwZWRUcmFuc2FjdGlvbikge1xuICBjb25zdCBjcmVkaXQgPSBnZXRBbW91bnREYXRhKHR4bi5jcmVkaXQpO1xuICBjb25zdCBkZWJpdCA9IGdldEFtb3VudERhdGEodHhuLmRlYml0KTtcbiAgcmV0dXJuIChOdW1iZXIuaXNOYU4oY3JlZGl0KSA/IDAgOiBjcmVkaXQpIC0gKE51bWJlci5pc05hTihkZWJpdCkgPyAwIDogZGViaXQpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIHJldHVybiB0eG5zLm1hcCgodHhuKTogVHJhbnNhY3Rpb24gPT4ge1xuICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBtb21lbnQodHhuLmRhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZEFtb3VudCA9IGdldFR4bkFtb3VudCh0eG4pO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIGlkZW50aWZpZXI6IHR4bi5yZWZlcmVuY2UgPyBwYXJzZUludCh0eG4ucmVmZXJlbmNlLCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICBkYXRlOiBjb252ZXJ0ZWREYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogY29udmVydGVkRGF0ZSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBjb252ZXJ0ZWRBbW91bnQsXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiBjb252ZXJ0ZWRBbW91bnQsXG4gICAgICBzdGF0dXM6IHR4bi5zdGF0dXMsXG4gICAgICBkZXNjcmlwdGlvbjogdHhuLmRlc2NyaXB0aW9uLFxuICAgICAgbWVtbzogdHhuLm1lbW8sXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRGF0ZSh0ZHM6IFRyYW5zYWN0aW9uc1RyVGRzLCB0cmFuc2FjdGlvblR5cGU6IHN0cmluZywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzOiBUcmFuc2FjdGlvbnNDb2xzVHlwZXMpIHtcbiAgaWYgKHRyYW5zYWN0aW9uVHlwZSA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICByZXR1cm4gKHRkc1t0cmFuc2FjdGlvbnNDb2xzVHlwZXNbREFURV9DT0xVTU5fQ0xBU1NfQ09NUExFVEVEXV0gfHwgJycpLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gKHRkc1t0cmFuc2FjdGlvbnNDb2xzVHlwZXNbREFURV9DT0xVTU5fQ0xBU1NfUEVORElOR11dIHx8ICcnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRGVzY3JpcHRpb24odGRzOiBUcmFuc2FjdGlvbnNUclRkcywgdHJhbnNhY3Rpb25UeXBlOiBzdHJpbmcsIHRyYW5zYWN0aW9uc0NvbHNUeXBlczogVHJhbnNhY3Rpb25zQ29sc1R5cGVzKSB7XG4gIGlmICh0cmFuc2FjdGlvblR5cGUgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgcmV0dXJuICh0ZHNbdHJhbnNhY3Rpb25zQ29sc1R5cGVzW0RFU0NSSVBUSU9OX0NPTFVNTl9DTEFTU19DT01QTEVURURdXSB8fCAnJykudHJpbSgpO1xuICB9XG4gIHJldHVybiAodGRzW3RyYW5zYWN0aW9uc0NvbHNUeXBlc1tERVNDUklQVElPTl9DT0xVTU5fQ0xBU1NfUEVORElOR11dIHx8ICcnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uUmVmZXJlbmNlKHRkczogVHJhbnNhY3Rpb25zVHJUZHMsIHRyYW5zYWN0aW9uc0NvbHNUeXBlczogVHJhbnNhY3Rpb25zQ29sc1R5cGVzKSB7XG4gIHJldHVybiAodGRzW3RyYW5zYWN0aW9uc0NvbHNUeXBlc1tSRUZFUkVOQ0VfQ09MVU1OX0NMQVNTXV0gfHwgJycpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25EZWJpdCh0ZHM6IFRyYW5zYWN0aW9uc1RyVGRzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXM6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcykge1xuICByZXR1cm4gKHRkc1t0cmFuc2FjdGlvbnNDb2xzVHlwZXNbREVCSVRfQ09MVU1OX0NMQVNTXV0gfHwgJycpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25DcmVkaXQodGRzOiBUcmFuc2FjdGlvbnNUclRkcywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzOiBUcmFuc2FjdGlvbnNDb2xzVHlwZXMpIHtcbiAgcmV0dXJuICh0ZHNbdHJhbnNhY3Rpb25zQ29sc1R5cGVzW0NSRURJVF9DT0xVTU5fQ0xBU1NdXSB8fCAnJykudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb25EZXRhaWxzKHR4blJvdzogVHJhbnNhY3Rpb25zVHIsIHRyYW5zYWN0aW9uU3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXM6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcyk6IFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IHRkcyA9IHR4blJvdy5pbm5lclRkcztcbiAgY29uc3QgaXRlbSA9IHtcbiAgICBzdGF0dXM6IHRyYW5zYWN0aW9uU3RhdHVzLFxuICAgIGRhdGU6IGdldFRyYW5zYWN0aW9uRGF0ZSh0ZHMsIHRyYW5zYWN0aW9uU3RhdHVzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXMpLFxuICAgIGRlc2NyaXB0aW9uOiBnZXRUcmFuc2FjdGlvbkRlc2NyaXB0aW9uKHRkcywgdHJhbnNhY3Rpb25TdGF0dXMsIHRyYW5zYWN0aW9uc0NvbHNUeXBlcyksXG4gICAgcmVmZXJlbmNlOiBnZXRUcmFuc2FjdGlvblJlZmVyZW5jZSh0ZHMsIHRyYW5zYWN0aW9uc0NvbHNUeXBlcyksXG4gICAgZGViaXQ6IGdldFRyYW5zYWN0aW9uRGViaXQodGRzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXMpLFxuICAgIGNyZWRpdDogZ2V0VHJhbnNhY3Rpb25DcmVkaXQodGRzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXMpLFxuICB9O1xuXG4gIHJldHVybiBpdGVtO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbnNDb2xzVHlwZUNsYXNzZXMocGFnZTogUGFnZSwgdGFibGVMb2NhdG9yOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uc0NvbHNUeXBlcz4ge1xuICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcyA9IHt9O1xuICBjb25zdCB0eXBlQ2xhc3Nlc09ianMgPSBhd2FpdCBwYWdlRXZhbEFsbChwYWdlLCBgJHt0YWJsZUxvY2F0b3J9IHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGRgLCBudWxsLCAodGRzKSA9PiB7XG4gICAgcmV0dXJuIHRkcy5tYXAoKHRkLCBpbmRleCkgPT4gKHtcbiAgICAgIGNvbENsYXNzOiB0ZC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyksXG4gICAgICBpbmRleCxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgdHlwZUNsYXNzT2JqIG9mIHR5cGVDbGFzc2VzT2Jqcykge1xuICAgIGlmICh0eXBlQ2xhc3NPYmouY29sQ2xhc3MpIHtcbiAgICAgIHJlc3VsdFt0eXBlQ2xhc3NPYmouY29sQ2xhc3NdID0gdHlwZUNsYXNzT2JqLmluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb24odHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10sIHRyYW5zYWN0aW9uU3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLCB0eG5Sb3c6IFRyYW5zYWN0aW9uc1RyLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXM6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcykge1xuICBjb25zdCB0eG4gPSBleHRyYWN0VHJhbnNhY3Rpb25EZXRhaWxzKHR4blJvdywgdHJhbnNhY3Rpb25TdGF0dXMsIHRyYW5zYWN0aW9uc0NvbHNUeXBlcyk7XG4gIGlmICh0eG4uZGF0ZSAhPT0gJycpIHtcbiAgICB0eG5zLnB1c2godHhuKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb25zKHBhZ2U6IFBhZ2UsIHRhYmxlTG9jYXRvcjogc3RyaW5nLCB0cmFuc2FjdGlvblN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcykge1xuICBjb25zdCB0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSA9IFtdO1xuICBjb25zdCB0cmFuc2FjdGlvbnNDb2xzVHlwZXMgPSBhd2FpdCBnZXRUcmFuc2FjdGlvbnNDb2xzVHlwZUNsYXNzZXMocGFnZSwgdGFibGVMb2NhdG9yKTtcblxuICBjb25zdCB0cmFuc2FjdGlvbnNSb3dzID0gYXdhaXQgcGFnZUV2YWxBbGw8VHJhbnNhY3Rpb25zVHJbXT4ocGFnZSwgYCR7dGFibGVMb2NhdG9yfSB0Ym9keSB0cmAsIFtdLCAodHJzKSA9PiB7XG4gICAgcmV0dXJuIHRycy5tYXAoKHRyKSA9PiAoe1xuICAgICAgaW5uZXJUZHM6IEFycmF5LmZyb20odHIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RkJykpLm1hcCgodGQpID0+IHRkLmlubmVyVGV4dCksXG4gICAgfSkpO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IHR4blJvdyBvZiB0cmFuc2FjdGlvbnNSb3dzKSB7XG4gICAgZXh0cmFjdFRyYW5zYWN0aW9uKHR4bnMsIHRyYW5zYWN0aW9uU3RhdHVzLCB0eG5Sb3csIHRyYW5zYWN0aW9uc0NvbHNUeXBlcyk7XG4gIH1cbiAgcmV0dXJuIHR4bnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzTm9UcmFuc2FjdGlvbkluRGF0ZVJhbmdlRXJyb3IocGFnZTogUGFnZSkge1xuICBjb25zdCBoYXNFcnJvckluZm9FbGVtZW50ID0gYXdhaXQgZWxlbWVudFByZXNlbnRPblBhZ2UocGFnZSwgYC4ke0VSUk9SX01FU1NBR0VfQ0xBU1N9YCk7XG4gIGlmIChoYXNFcnJvckluZm9FbGVtZW50KSB7XG4gICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcGFnZS4kZXZhbChgLiR7RVJST1JfTUVTU0FHRV9DTEFTU31gLCAoZXJyb3JFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gKGVycm9yRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0O1xuICAgIH0pO1xuICAgIHJldHVybiBlcnJvclRleHQudHJpbSgpID09PSBOT19UUkFOU0FDVElPTl9JTl9EQVRFX1JBTkdFX1RFWFQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWFyY2hCeURhdGVzKHBhZ2U6IFBhZ2UsIHN0YXJ0RGF0ZTogTW9tZW50KSB7XG4gIGF3YWl0IGNsaWNrQnV0dG9uKHBhZ2UsICdhI3RhYkhlYWRlcjQnKTtcbiAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdkaXYjZmliaV9kYXRlcycpO1xuICBhd2FpdCBmaWxsSW5wdXQoXG4gICAgcGFnZSxcbiAgICAnaW5wdXQjZnJvbURhdGUnLFxuICAgIHN0YXJ0RGF0ZS5mb3JtYXQoREFURV9GT1JNQVQpLFxuICApO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCBgYnV0dG9uW2NsYXNzKj0ke0NMT1NFX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fQ0xBU1N9XWApO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCBgaW5wdXRbdmFsdWU9JHtTSE9XX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fVkFMVUV9XWApO1xuICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudE51bWJlcihwYWdlOiBQYWdlKSB7XG4gIGNvbnN0IHNlbGVjdGVkU25pZkFjY291bnQgPSBhd2FpdCBwYWdlLiRldmFsKEFDQ09VTlRTX05VTUJFUiwgKG9wdGlvbikgPT4ge1xuICAgIHJldHVybiAob3B0aW9uIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiBzZWxlY3RlZFNuaWZBY2NvdW50LnJlcGxhY2UoJy8nLCAnXycpLnRyaW0oKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tJZkhhc05leHRQYWdlKHBhZ2U6IFBhZ2UpIHtcbiAgcmV0dXJuIGVsZW1lbnRQcmVzZW50T25QYWdlKHBhZ2UsIE5FWFRfUEFHRV9MSU5LKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbmF2aWdhdGVUb05leHRQYWdlKHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgTkVYVF9QQUdFX0xJTkspO1xuICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbn1cblxuLyogQ291bGRuJ3QgcmVwcm9kdWNlIHNjZW5hcmlvIHdpdGggbXVsdGlwbGUgcGFnZXMgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMgLSBTaG91bGQgc3VwcG9ydCBpZiBleGlzdHMgc3VjaCBjYXNlLlxuICAgbmVlZFRvUGFnaW5hdGUgaXMgZmFsc2UgaWYgc2NyYXBpbmcgcGVuZGluZyB0cmFuc2FjdGlvbnMgKi9cbmFzeW5jIGZ1bmN0aW9uIHNjcmFwZVRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlLCB0YWJsZUxvY2F0b3I6IHN0cmluZywgdHJhbnNhY3Rpb25TdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMsIG5lZWRUb1BhZ2luYXRlOiBib29sZWFuKSB7XG4gIGNvbnN0IHR4bnMgPSBbXTtcbiAgbGV0IGhhc05leHRQYWdlID0gZmFsc2U7XG5cbiAgZG8ge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlVHhucyA9IGF3YWl0IGV4dHJhY3RUcmFuc2FjdGlvbnMocGFnZSwgdGFibGVMb2NhdG9yLCB0cmFuc2FjdGlvblN0YXR1cyk7XG4gICAgdHhucy5wdXNoKC4uLmN1cnJlbnRQYWdlVHhucyk7XG4gICAgaWYgKG5lZWRUb1BhZ2luYXRlKSB7XG4gICAgICBoYXNOZXh0UGFnZSA9IGF3YWl0IGNoZWNrSWZIYXNOZXh0UGFnZShwYWdlKTtcbiAgICAgIGlmIChoYXNOZXh0UGFnZSkge1xuICAgICAgICBhd2FpdCBuYXZpZ2F0ZVRvTmV4dFBhZ2UocGFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChoYXNOZXh0UGFnZSk7XG5cbiAgcmV0dXJuIGNvbnZlcnRUcmFuc2FjdGlvbnModHhucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFjY291bnRUcmFuc2FjdGlvbnMocGFnZTogUGFnZSkge1xuICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnZGl2W2lkKj1cXCdkaXZUYWJsZVxcJ10nLCBmYWxzZSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsIGAuJHtFUlJPUl9NRVNTQUdFX0NMQVNTfWAsIGZhbHNlKSxcbiAgXSk7XG5cbiAgY29uc3Qgbm9UcmFuc2FjdGlvbkluUmFuZ2VFcnJvciA9IGF3YWl0IGlzTm9UcmFuc2FjdGlvbkluRGF0ZVJhbmdlRXJyb3IocGFnZSk7XG4gIGlmIChub1RyYW5zYWN0aW9uSW5SYW5nZUVycm9yKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGVuZGluZ1R4bnMgPSBhd2FpdCBzY3JhcGVUcmFuc2FjdGlvbnMocGFnZSwgUEVORElOR19UUkFOU0FDVElPTlNfVEFCTEUsXG4gICAgVHJhbnNhY3Rpb25TdGF0dXNlcy5QZW5kaW5nLCBmYWxzZSk7XG4gIGNvbnN0IGNvbXBsZXRlZFR4bnMgPSBhd2FpdCBzY3JhcGVUcmFuc2FjdGlvbnMocGFnZSwgQ09NUExFVEVEX1RSQU5TQUNUSU9OU19UQUJMRSxcbiAgICBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCwgdHJ1ZSk7XG4gIGNvbnN0IHR4bnMgPSBbXG4gICAgLi4ucGVuZGluZ1R4bnMsXG4gICAgLi4uY29tcGxldGVkVHhucyxcbiAgXTtcbiAgcmV0dXJuIHR4bnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRCYWxhbmNlKHBhZ2U6IFBhZ2UpIHtcbiAgY29uc3QgYmFsYW5jZUVsZW1lbnQgPSBhd2FpdCBwYWdlLiQoQ1VSUkVOVF9CQUxBTkNFKTtcbiAgaWYgKCFiYWxhbmNlRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYmFsYW5jZVN0ciA9IGF3YWl0IGJhbGFuY2VFbGVtZW50LmV2YWx1YXRlKChvcHRpb24pID0+IHtcbiAgICByZXR1cm4gKG9wdGlvbiBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0O1xuICB9KTtcbiAgcmV0dXJuIGdldEFtb3VudERhdGEoYmFsYW5jZVN0cik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUG9zdExvZ2luKHBhZ2U6IFBhZ2UpIHtcbiAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICcjbWF0YWZMb2dvdXRMaW5rJywgdHJ1ZSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICcjdmFsaWRhdGlvbk1zZycsIHRydWUpLFxuICBdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBY2NvdW50RGF0YShwYWdlOiBQYWdlLCBzdGFydERhdGU6IE1vbWVudCkge1xuICBhd2FpdCBzZWFyY2hCeURhdGVzKHBhZ2UsIHN0YXJ0RGF0ZSk7XG4gIGNvbnN0IGFjY291bnROdW1iZXIgPSBhd2FpdCBnZXRBY2NvdW50TnVtYmVyKHBhZ2UpO1xuICBjb25zdCBiYWxhbmNlID0gYXdhaXQgZ2V0Q3VycmVudEJhbGFuY2UocGFnZSk7XG4gIGNvbnN0IHR4bnMgPSBhd2FpdCBnZXRBY2NvdW50VHJhbnNhY3Rpb25zKHBhZ2UpO1xuXG4gIHJldHVybiB7XG4gICAgYWNjb3VudE51bWJlcixcbiAgICB0eG5zLFxuICAgIGJhbGFuY2UsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFjY291bnRJZHNCeVNlbGVjdG9yKHBhZ2U6IFBhZ2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGFjY291bnRzSWRzID0gYXdhaXQgcGFnZS5ldmFsdWF0ZSgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2NvdW50X251bV9zZWxlY3QnKTtcbiAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0RWxlbWVudCA/IHNlbGVjdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnb3B0aW9uJykgOiBbXTtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShvcHRpb25zLCAob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGFjY291bnRzSWRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFjY291bnRzKHBhZ2U6IFBhZ2UsIHN0YXJ0RGF0ZTogTW9tZW50KSB7XG4gIGNvbnN0IGFjY291bnRzOiBUcmFuc2FjdGlvbnNBY2NvdW50W10gPSBbXTtcbiAgY29uc3QgYWNjb3VudHNJZHMgPSBhd2FpdCBnZXRBY2NvdW50SWRzQnlTZWxlY3RvcihwYWdlKTtcbiAgaWYgKGFjY291bnRzSWRzLmxlbmd0aCA8PSAxKSB7XG4gICAgY29uc3QgYWNjb3VudERhdGEgPSBhd2FpdCBmZXRjaEFjY291bnREYXRhKHBhZ2UsIHN0YXJ0RGF0ZSk7XG4gICAgYWNjb3VudHMucHVzaChhY2NvdW50RGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBhY2NvdW50SWQgb2YgYWNjb3VudHNJZHMpIHtcbiAgICAgIGF3YWl0IHBhZ2Uuc2VsZWN0KCcjYWNjb3VudF9udW1fc2VsZWN0JywgYWNjb3VudElkKTtcbiAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnI2FjY291bnRfbnVtX3NlbGVjdCcsIHRydWUpO1xuICAgICAgY29uc3QgYWNjb3VudERhdGEgPSBhd2FpdCBmZXRjaEFjY291bnREYXRhKHBhZ2UsIHN0YXJ0RGF0ZSk7XG4gICAgICBhY2NvdW50cy5wdXNoKGFjY291bnREYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFjY291bnRzO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIEJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIEJBU0VfVVJMID0gJyc7XG5cbiAgTE9HSU5fVVJMID0gJyc7XG5cbiAgVFJBTlNBQ1RJT05TX1VSTCA9ICcnO1xuXG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IGAke3RoaXMuTE9HSU5fVVJMfWAsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiAnI2NvbnRpbnVlQnRuJyxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHdhaXRGb3JQb3N0TG9naW4odGhpcy5wYWdlKSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSxcbiAgICAgIC8vIEhBQ0s6IEZvciBzb21lIHJlYXNvbiwgdGhvdWdoIHRoZSBsb2dpbiBidXR0b24gKCNjb250aW51ZUJ0bikgaXMgcHJlc2VudCBhbmQgdmlzaWJsZSwgdGhlIGNsaWNrIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtLlxuICAgICAgLy8gQWRkaW5nIHRoaXMgZGVsYXkgZml4ZXMgdGhlIGlzc3VlLlxuICAgICAgcHJlQWN0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCkge1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnRMaW1pdCA9IG1vbWVudCh7IHllYXI6IDE2MDAgfSk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KHN0YXJ0TW9tZW50TGltaXQsIG1vbWVudChzdGFydERhdGUpKTtcblxuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyh0aGlzLlRSQU5TQUNUSU9OU19VUkwpO1xuXG4gICAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBmZXRjaEFjY291bnRzKHRoaXMucGFnZSwgc3RhcnRNb21lbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxxQkFBQSxHQUFBRixPQUFBO0FBT0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBS0EsSUFBQU0sdUJBQUEsR0FBQU4sT0FBQTtBQUE4RyxTQUFBRCx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLGdCQUFBSCxDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxZQUFBRCxDQUFBLEdBQUFFLGNBQUEsQ0FBQUYsQ0FBQSxNQUFBSixDQUFBLEdBQUFPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBUixDQUFBLEVBQUFJLENBQUEsSUFBQUssS0FBQSxFQUFBSixDQUFBLEVBQUFLLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFVBQUFaLENBQUEsQ0FBQUksQ0FBQSxJQUFBQyxDQUFBLEVBQUFMLENBQUE7QUFBQSxTQUFBTSxlQUFBRCxDQUFBLFFBQUFRLENBQUEsR0FBQUMsWUFBQSxDQUFBVCxDQUFBLHVDQUFBUSxDQUFBLEdBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFDLGFBQUFULENBQUEsRUFBQUQsQ0FBQSwyQkFBQUMsQ0FBQSxLQUFBQSxDQUFBLFNBQUFBLENBQUEsTUFBQUwsQ0FBQSxHQUFBSyxDQUFBLENBQUFVLE1BQUEsQ0FBQUMsV0FBQSxrQkFBQWhCLENBQUEsUUFBQWEsQ0FBQSxHQUFBYixDQUFBLENBQUFpQixJQUFBLENBQUFaLENBQUEsRUFBQUQsQ0FBQSx1Q0FBQVMsQ0FBQSxTQUFBQSxDQUFBLFlBQUFLLFNBQUEseUVBQUFkLENBQUEsR0FBQWUsTUFBQSxHQUFBQyxNQUFBLEVBQUFmLENBQUE7QUFFOUcsTUFBTWdCLFdBQVcsR0FBRyxZQUFZO0FBQ2hDLE1BQU1DLGlDQUFpQyxHQUFHLDhCQUE4QjtBQUN4RSxNQUFNQywyQkFBMkIsR0FBRyxZQUFZO0FBQ2hELE1BQU1DLHlCQUF5QixHQUFHLFlBQVk7QUFDOUMsTUFBTUMsa0NBQWtDLEdBQUcsdUJBQXVCO0FBQ2xFLE1BQU1DLGdDQUFnQyxHQUFHLHFCQUFxQjtBQUM5RCxNQUFNQyxzQkFBc0IsR0FBRyxTQUFTO0FBQ3hDLE1BQU1DLGtCQUFrQixHQUFHLE9BQU87QUFDbEMsTUFBTUMsbUJBQW1CLEdBQUcsUUFBUTtBQUNwQyxNQUFNQyxtQkFBbUIsR0FBRyxTQUFTO0FBQ3JDLE1BQU1DLGVBQWUsR0FBRywrQkFBK0I7QUFDdkQsTUFBTUMsa0NBQWtDLEdBQUcscUJBQXFCO0FBQ2hFLE1BQU1DLGlDQUFpQyxHQUFHLEtBQUs7QUFDL0MsTUFBTUMsNEJBQTRCLEdBQUcsb0JBQW9CO0FBQ3pELE1BQU1DLDBCQUEwQixHQUFHLG9CQUFvQjtBQUN2RCxNQUFNQyxjQUFjLEdBQUcsZ0JBQWdCO0FBQ3ZDLE1BQU1DLGVBQWUsR0FBRyxlQUFlO0FBZ0JoQyxTQUFTQyx1QkFBdUJBLENBQUEsRUFBeUI7RUFDOUQsTUFBTUMsSUFBMEIsR0FBRyxDQUFDLENBQUM7RUFDckNBLElBQUksQ0FBQ0Msb0NBQVksQ0FBQ0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztFQUNqREYsSUFBSSxDQUFDQyxvQ0FBWSxDQUFDRSxlQUFlLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDO0VBQzNFLE9BQU9ILElBQUk7QUFDYjtBQUVPLFNBQVNJLGlCQUFpQkEsQ0FBQ0MsV0FBdUMsRUFBRTtFQUN6RSxPQUFPLENBQ0w7SUFBRUMsUUFBUSxFQUFFLFdBQVc7SUFBRXBDLEtBQUssRUFBRW1DLFdBQVcsQ0FBQ0U7RUFBUyxDQUFDLEVBQ3REO0lBQUVELFFBQVEsRUFBRSxXQUFXO0lBQUVwQyxLQUFLLEVBQUVtQyxXQUFXLENBQUNHO0VBQVMsQ0FBQyxDQUN2RDtBQUNIO0FBRUEsU0FBU0MsYUFBYUEsQ0FBQ0MsU0FBaUIsRUFBRTtFQUN4QyxJQUFJQyxhQUFhLEdBQUdELFNBQVMsQ0FBQ0UsT0FBTyxDQUFDQyxpQ0FBc0IsRUFBRSxFQUFFLENBQUM7RUFDakVGLGFBQWEsR0FBR0EsYUFBYSxDQUFDRyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUNqRCxPQUFPQyxVQUFVLENBQUNKLGFBQWEsQ0FBQztBQUNsQztBQUVBLFNBQVNLLFlBQVlBLENBQUNDLEdBQXVCLEVBQUU7RUFDN0MsTUFBTUMsTUFBTSxHQUFHVCxhQUFhLENBQUNRLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDO0VBQ3hDLE1BQU1DLEtBQUssR0FBR1YsYUFBYSxDQUFDUSxHQUFHLENBQUNFLEtBQUssQ0FBQztFQUN0QyxPQUFPLENBQUN0QyxNQUFNLENBQUN1QyxLQUFLLENBQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBR0EsTUFBTSxLQUFLckMsTUFBTSxDQUFDdUMsS0FBSyxDQUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUdBLEtBQUssQ0FBQztBQUNoRjtBQUVBLFNBQVNFLG1CQUFtQkEsQ0FBQ0MsSUFBMEIsRUFBaUI7RUFDdEUsT0FBT0EsSUFBSSxDQUFDQyxHQUFHLENBQUVOLEdBQUcsSUFBa0I7SUFDcEMsTUFBTU8sYUFBYSxHQUFHLElBQUFDLGVBQU0sRUFBQ1IsR0FBRyxDQUFDUyxJQUFJLEVBQUU1QyxXQUFXLENBQUMsQ0FBQzZDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLE1BQU1DLGVBQWUsR0FBR1osWUFBWSxDQUFDQyxHQUFHLENBQUM7SUFDekMsT0FBTztNQUNMWSxJQUFJLEVBQUVDLDhCQUFnQixDQUFDQyxNQUFNO01BQzdCQyxVQUFVLEVBQUVmLEdBQUcsQ0FBQ2dCLFNBQVMsR0FBR0MsUUFBUSxDQUFDakIsR0FBRyxDQUFDZ0IsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHRSxTQUFTO01BQ25FVCxJQUFJLEVBQUVGLGFBQWE7TUFDbkJZLGFBQWEsRUFBRVosYUFBYTtNQUM1QmEsY0FBYyxFQUFFVCxlQUFlO01BQy9CVSxnQkFBZ0IsRUFBRUMsMEJBQWU7TUFDakNDLGFBQWEsRUFBRVosZUFBZTtNQUM5QmEsTUFBTSxFQUFFeEIsR0FBRyxDQUFDd0IsTUFBTTtNQUNsQkMsV0FBVyxFQUFFekIsR0FBRyxDQUFDeUIsV0FBVztNQUM1QkMsSUFBSSxFQUFFMUIsR0FBRyxDQUFDMEI7SUFDWixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTQyxrQkFBa0JBLENBQUNDLEdBQXNCLEVBQUVDLGVBQXVCLEVBQUVDLHFCQUE0QyxFQUFFO0VBQ3pILElBQUlELGVBQWUsS0FBSyxXQUFXLEVBQUU7SUFDbkMsT0FBTyxDQUFDRCxHQUFHLENBQUNFLHFCQUFxQixDQUFDL0QsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRWdFLElBQUksQ0FBQyxDQUFDO0VBQy9FO0VBQ0EsT0FBTyxDQUFDSCxHQUFHLENBQUNFLHFCQUFxQixDQUFDOUQseUJBQXlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRStELElBQUksQ0FBQyxDQUFDO0FBQzdFO0FBRUEsU0FBU0MseUJBQXlCQSxDQUFDSixHQUFzQixFQUFFQyxlQUF1QixFQUFFQyxxQkFBNEMsRUFBRTtFQUNoSSxJQUFJRCxlQUFlLEtBQUssV0FBVyxFQUFFO0lBQ25DLE9BQU8sQ0FBQ0QsR0FBRyxDQUFDRSxxQkFBcUIsQ0FBQzdELGtDQUFrQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU4RCxJQUFJLENBQUMsQ0FBQztFQUN0RjtFQUNBLE9BQU8sQ0FBQ0gsR0FBRyxDQUFDRSxxQkFBcUIsQ0FBQzVELGdDQUFnQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU2RCxJQUFJLENBQUMsQ0FBQztBQUNwRjtBQUVBLFNBQVNFLHVCQUF1QkEsQ0FBQ0wsR0FBc0IsRUFBRUUscUJBQTRDLEVBQUU7RUFDckcsT0FBTyxDQUFDRixHQUFHLENBQUNFLHFCQUFxQixDQUFDM0Qsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTRELElBQUksQ0FBQyxDQUFDO0FBQzFFO0FBRUEsU0FBU0csbUJBQW1CQSxDQUFDTixHQUFzQixFQUFFRSxxQkFBNEMsRUFBRTtFQUNqRyxPQUFPLENBQUNGLEdBQUcsQ0FBQ0UscUJBQXFCLENBQUMxRCxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFMkQsSUFBSSxDQUFDLENBQUM7QUFDdEU7QUFFQSxTQUFTSSxvQkFBb0JBLENBQUNQLEdBQXNCLEVBQUVFLHFCQUE0QyxFQUFFO0VBQ2xHLE9BQU8sQ0FBQ0YsR0FBRyxDQUFDRSxxQkFBcUIsQ0FBQ3pELG1CQUFtQixDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUwRCxJQUFJLENBQUMsQ0FBQztBQUN2RTtBQUVBLFNBQVNLLHlCQUF5QkEsQ0FBQ0MsTUFBc0IsRUFBRUMsaUJBQXNDLEVBQUVSLHFCQUE0QyxFQUFzQjtFQUNuSyxNQUFNRixHQUFHLEdBQUdTLE1BQU0sQ0FBQ0UsUUFBUTtFQUMzQixNQUFNQyxJQUFJLEdBQUc7SUFDWGhCLE1BQU0sRUFBRWMsaUJBQWlCO0lBQ3pCN0IsSUFBSSxFQUFFa0Isa0JBQWtCLENBQUNDLEdBQUcsRUFBRVUsaUJBQWlCLEVBQUVSLHFCQUFxQixDQUFDO0lBQ3ZFTCxXQUFXLEVBQUVPLHlCQUF5QixDQUFDSixHQUFHLEVBQUVVLGlCQUFpQixFQUFFUixxQkFBcUIsQ0FBQztJQUNyRmQsU0FBUyxFQUFFaUIsdUJBQXVCLENBQUNMLEdBQUcsRUFBRUUscUJBQXFCLENBQUM7SUFDOUQ1QixLQUFLLEVBQUVnQyxtQkFBbUIsQ0FBQ04sR0FBRyxFQUFFRSxxQkFBcUIsQ0FBQztJQUN0RDdCLE1BQU0sRUFBRWtDLG9CQUFvQixDQUFDUCxHQUFHLEVBQUVFLHFCQUFxQjtFQUN6RCxDQUFDO0VBRUQsT0FBT1UsSUFBSTtBQUNiO0FBRUEsZUFBZUMsOEJBQThCQSxDQUFDQyxJQUFVLEVBQUVDLFlBQW9CLEVBQWtDO0VBQzlHLE1BQU1DLE1BQTZCLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDLE1BQU1DLGVBQWUsR0FBRyxNQUFNLElBQUFDLGlDQUFXLEVBQUNKLElBQUksRUFBRSxHQUFHQyxZQUFZLDRCQUE0QixFQUFFLElBQUksRUFBR2YsR0FBRyxJQUFLO0lBQzFHLE9BQU9BLEdBQUcsQ0FBQ3RCLEdBQUcsQ0FBQyxDQUFDeUMsRUFBRSxFQUFFQyxLQUFLLE1BQU07TUFDN0JDLFFBQVEsRUFBRUYsRUFBRSxDQUFDRyxZQUFZLENBQUMsT0FBTyxDQUFDO01BQ2xDRjtJQUNGLENBQUMsQ0FBQyxDQUFDO0VBQ0wsQ0FBQyxDQUFDO0VBRUYsS0FBSyxNQUFNRyxZQUFZLElBQUlOLGVBQWUsRUFBRTtJQUMxQyxJQUFJTSxZQUFZLENBQUNGLFFBQVEsRUFBRTtNQUN6QkwsTUFBTSxDQUFDTyxZQUFZLENBQUNGLFFBQVEsQ0FBQyxHQUFHRSxZQUFZLENBQUNILEtBQUs7SUFDcEQ7RUFDRjtFQUNBLE9BQU9KLE1BQU07QUFDZjtBQUVBLFNBQVNRLGtCQUFrQkEsQ0FBQy9DLElBQTBCLEVBQUVpQyxpQkFBc0MsRUFBRUQsTUFBc0IsRUFBRVAscUJBQTRDLEVBQUU7RUFDcEssTUFBTTlCLEdBQUcsR0FBR29DLHlCQUF5QixDQUFDQyxNQUFNLEVBQUVDLGlCQUFpQixFQUFFUixxQkFBcUIsQ0FBQztFQUN2RixJQUFJOUIsR0FBRyxDQUFDUyxJQUFJLEtBQUssRUFBRSxFQUFFO0lBQ25CSixJQUFJLENBQUNnRCxJQUFJLENBQUNyRCxHQUFHLENBQUM7RUFDaEI7QUFDRjtBQUVBLGVBQWVzRCxtQkFBbUJBLENBQUNaLElBQVUsRUFBRUMsWUFBb0IsRUFBRUwsaUJBQXNDLEVBQUU7RUFDM0csTUFBTWpDLElBQTBCLEdBQUcsRUFBRTtFQUNyQyxNQUFNeUIscUJBQXFCLEdBQUcsTUFBTVcsOEJBQThCLENBQUNDLElBQUksRUFBRUMsWUFBWSxDQUFDO0VBRXRGLE1BQU1ZLGdCQUFnQixHQUFHLE1BQU0sSUFBQVQsaUNBQVcsRUFBbUJKLElBQUksRUFBRSxHQUFHQyxZQUFZLFdBQVcsRUFBRSxFQUFFLEVBQUdhLEdBQUcsSUFBSztJQUMxRyxPQUFPQSxHQUFHLENBQUNsRCxHQUFHLENBQUVtRCxFQUFFLEtBQU07TUFDdEJsQixRQUFRLEVBQUVtQixLQUFLLENBQUNDLElBQUksQ0FBQ0YsRUFBRSxDQUFDRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDdEQsR0FBRyxDQUFFeUMsRUFBRSxJQUFLQSxFQUFFLENBQUNjLFNBQVM7SUFDOUUsQ0FBQyxDQUFDLENBQUM7RUFDTCxDQUFDLENBQUM7RUFFRixLQUFLLE1BQU14QixNQUFNLElBQUlrQixnQkFBZ0IsRUFBRTtJQUNyQ0gsa0JBQWtCLENBQUMvQyxJQUFJLEVBQUVpQyxpQkFBaUIsRUFBRUQsTUFBTSxFQUFFUCxxQkFBcUIsQ0FBQztFQUM1RTtFQUNBLE9BQU96QixJQUFJO0FBQ2I7QUFFQSxlQUFleUQsK0JBQStCQSxDQUFDcEIsSUFBVSxFQUFFO0VBQ3pELE1BQU1xQixtQkFBbUIsR0FBRyxNQUFNLElBQUFDLDBDQUFvQixFQUFDdEIsSUFBSSxFQUFFLElBQUlwRSxtQkFBbUIsRUFBRSxDQUFDO0VBQ3ZGLElBQUl5RixtQkFBbUIsRUFBRTtJQUN2QixNQUFNRSxTQUFTLEdBQUcsTUFBTXZCLElBQUksQ0FBQ3dCLEtBQUssQ0FBQyxJQUFJNUYsbUJBQW1CLEVBQUUsRUFBRzZGLFlBQVksSUFBSztNQUM5RSxPQUFRQSxZQUFZLENBQWlCTixTQUFTO0lBQ2hELENBQUMsQ0FBQztJQUNGLE9BQU9JLFNBQVMsQ0FBQ2xDLElBQUksQ0FBQyxDQUFDLEtBQUtqRSxpQ0FBaUM7RUFDL0Q7RUFDQSxPQUFPLEtBQUs7QUFDZDtBQUVBLGVBQWVzRyxhQUFhQSxDQUFDMUIsSUFBVSxFQUFFMkIsU0FBaUIsRUFBRTtFQUMxRCxNQUFNLElBQUFDLGlDQUFXLEVBQUM1QixJQUFJLEVBQUUsY0FBYyxDQUFDO0VBQ3ZDLE1BQU0sSUFBQTZCLDJDQUFxQixFQUFDN0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDO0VBQ25ELE1BQU0sSUFBQThCLCtCQUFTLEVBQ2I5QixJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCMkIsU0FBUyxDQUFDSSxNQUFNLENBQUM1RyxXQUFXLENBQzlCLENBQUM7RUFDRCxNQUFNLElBQUF5RyxpQ0FBVyxFQUFDNUIsSUFBSSxFQUFFLGlCQUFpQmxFLGtDQUFrQyxHQUFHLENBQUM7RUFDL0UsTUFBTSxJQUFBOEYsaUNBQVcsRUFBQzVCLElBQUksRUFBRSxlQUFlakUsaUNBQWlDLEdBQUcsQ0FBQztFQUM1RSxNQUFNLElBQUFpRyw2QkFBaUIsRUFBQ2hDLElBQUksQ0FBQztBQUMvQjtBQUVBLGVBQWVpQyxnQkFBZ0JBLENBQUNqQyxJQUFVLEVBQUU7RUFDMUMsTUFBTWtDLG1CQUFtQixHQUFHLE1BQU1sQyxJQUFJLENBQUN3QixLQUFLLENBQUMzRixlQUFlLEVBQUdzRyxNQUFNLElBQUs7SUFDeEUsT0FBUUEsTUFBTSxDQUFpQmhCLFNBQVM7RUFDMUMsQ0FBQyxDQUFDO0VBRUYsT0FBT2UsbUJBQW1CLENBQUNqRixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDb0MsSUFBSSxDQUFDLENBQUM7QUFDckQ7QUFFQSxlQUFlK0Msa0JBQWtCQSxDQUFDcEMsSUFBVSxFQUFFO0VBQzVDLE9BQU8sSUFBQXNCLDBDQUFvQixFQUFDdEIsSUFBSSxFQUFFOUQsY0FBYyxDQUFDO0FBQ25EO0FBRUEsZUFBZW1HLGtCQUFrQkEsQ0FBQ3JDLElBQVUsRUFBRTtFQUM1QyxNQUFNLElBQUE0QixpQ0FBVyxFQUFDNUIsSUFBSSxFQUFFOUQsY0FBYyxDQUFDO0VBQ3ZDLE1BQU0sSUFBQThGLDZCQUFpQixFQUFDaEMsSUFBSSxDQUFDO0FBQy9COztBQUVBO0FBQ0E7QUFDQSxlQUFlc0Msa0JBQWtCQSxDQUFDdEMsSUFBVSxFQUFFQyxZQUFvQixFQUFFTCxpQkFBc0MsRUFBRTJDLGNBQXVCLEVBQUU7RUFDbkksTUFBTTVFLElBQUksR0FBRyxFQUFFO0VBQ2YsSUFBSTZFLFdBQVcsR0FBRyxLQUFLO0VBRXZCLEdBQUc7SUFDRCxNQUFNQyxlQUFlLEdBQUcsTUFBTTdCLG1CQUFtQixDQUFDWixJQUFJLEVBQUVDLFlBQVksRUFBRUwsaUJBQWlCLENBQUM7SUFDeEZqQyxJQUFJLENBQUNnRCxJQUFJLENBQUMsR0FBRzhCLGVBQWUsQ0FBQztJQUM3QixJQUFJRixjQUFjLEVBQUU7TUFDbEJDLFdBQVcsR0FBRyxNQUFNSixrQkFBa0IsQ0FBQ3BDLElBQUksQ0FBQztNQUM1QyxJQUFJd0MsV0FBVyxFQUFFO1FBQ2YsTUFBTUgsa0JBQWtCLENBQUNyQyxJQUFJLENBQUM7TUFDaEM7SUFDRjtFQUNGLENBQUMsUUFBUXdDLFdBQVc7RUFFcEIsT0FBTzlFLG1CQUFtQixDQUFDQyxJQUFJLENBQUM7QUFDbEM7QUFFQSxlQUFlK0Usc0JBQXNCQSxDQUFDMUMsSUFBVSxFQUFFO0VBQ2hELE1BQU0yQyxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUNqQixJQUFBZiwyQ0FBcUIsRUFBQzdCLElBQUksRUFBRSx1QkFBdUIsRUFBRSxLQUFLLENBQUMsRUFDM0QsSUFBQTZCLDJDQUFxQixFQUFDN0IsSUFBSSxFQUFFLElBQUlwRSxtQkFBbUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUM5RCxDQUFDO0VBRUYsTUFBTWlILHlCQUF5QixHQUFHLE1BQU16QiwrQkFBK0IsQ0FBQ3BCLElBQUksQ0FBQztFQUM3RSxJQUFJNkMseUJBQXlCLEVBQUU7SUFDN0IsT0FBTyxFQUFFO0VBQ1g7RUFFQSxNQUFNQyxXQUFXLEdBQUcsTUFBTVIsa0JBQWtCLENBQUN0QyxJQUFJLEVBQUUvRCwwQkFBMEIsRUFDM0U4RyxpQ0FBbUIsQ0FBQ0MsT0FBTyxFQUFFLEtBQUssQ0FBQztFQUNyQyxNQUFNQyxhQUFhLEdBQUcsTUFBTVgsa0JBQWtCLENBQUN0QyxJQUFJLEVBQUVoRSw0QkFBNEIsRUFDL0UrRyxpQ0FBbUIsQ0FBQ0csU0FBUyxFQUFFLElBQUksQ0FBQztFQUN0QyxNQUFNdkYsSUFBSSxHQUFHLENBQ1gsR0FBR21GLFdBQVcsRUFDZCxHQUFHRyxhQUFhLENBQ2pCO0VBQ0QsT0FBT3RGLElBQUk7QUFDYjtBQUVBLGVBQWV3RixpQkFBaUJBLENBQUNuRCxJQUFVLEVBQUU7RUFDM0MsTUFBTW9ELGNBQWMsR0FBRyxNQUFNcEQsSUFBSSxDQUFDcUQsQ0FBQyxDQUFDbEgsZUFBZSxDQUFDO0VBQ3BELElBQUksQ0FBQ2lILGNBQWMsRUFBRTtJQUNuQixPQUFPNUUsU0FBUztFQUNsQjtFQUNBLE1BQU04RSxVQUFVLEdBQUcsTUFBTUYsY0FBYyxDQUFDRyxRQUFRLENBQUVwQixNQUFNLElBQUs7SUFDM0QsT0FBUUEsTUFBTSxDQUFpQmhCLFNBQVM7RUFDMUMsQ0FBQyxDQUFDO0VBQ0YsT0FBT3JFLGFBQWEsQ0FBQ3dHLFVBQVUsQ0FBQztBQUNsQztBQUVPLGVBQWVFLGdCQUFnQkEsQ0FBQ3hELElBQVUsRUFBRTtFQUNqRCxPQUFPMkMsT0FBTyxDQUFDQyxJQUFJLENBQUMsQ0FDbEIsSUFBQWYsMkNBQXFCLEVBQUM3QixJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEVBQ3JELElBQUE2QiwyQ0FBcUIsRUFBQzdCLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FDcEQsQ0FBQztBQUNKO0FBRUEsZUFBZXlELGdCQUFnQkEsQ0FBQ3pELElBQVUsRUFBRTJCLFNBQWlCLEVBQUU7RUFDN0QsTUFBTUQsYUFBYSxDQUFDMUIsSUFBSSxFQUFFMkIsU0FBUyxDQUFDO0VBQ3BDLE1BQU0rQixhQUFhLEdBQUcsTUFBTXpCLGdCQUFnQixDQUFDakMsSUFBSSxDQUFDO0VBQ2xELE1BQU0yRCxPQUFPLEdBQUcsTUFBTVIsaUJBQWlCLENBQUNuRCxJQUFJLENBQUM7RUFDN0MsTUFBTXJDLElBQUksR0FBRyxNQUFNK0Usc0JBQXNCLENBQUMxQyxJQUFJLENBQUM7RUFFL0MsT0FBTztJQUNMMEQsYUFBYTtJQUNiL0YsSUFBSTtJQUNKZ0c7RUFDRixDQUFDO0FBQ0g7QUFFQSxlQUFlQyx1QkFBdUJBLENBQUM1RCxJQUFVLEVBQXFCO0VBQ3BFLE1BQU02RCxXQUFXLEdBQUcsTUFBTTdELElBQUksQ0FBQ3VELFFBQVEsQ0FBQyxNQUFNO0lBQzVDLE1BQU1PLGFBQWEsR0FBR0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsb0JBQW9CLENBQUM7SUFDbkUsTUFBTUMsT0FBTyxHQUFHSCxhQUFhLEdBQUdBLGFBQWEsQ0FBQ0ksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtJQUM3RSxJQUFJLENBQUNELE9BQU8sRUFBRSxPQUFPLEVBQUU7SUFDdkIsT0FBT2pELEtBQUssQ0FBQ0MsSUFBSSxDQUFDZ0QsT0FBTyxFQUFHOUIsTUFBTSxJQUFLQSxNQUFNLENBQUM1SCxLQUFLLENBQUM7RUFDdEQsQ0FBQyxDQUFDO0VBQ0YsT0FBT3NKLFdBQVc7QUFDcEI7QUFFQSxlQUFlTSxhQUFhQSxDQUFDbkUsSUFBVSxFQUFFMkIsU0FBaUIsRUFBRTtFQUMxRCxNQUFNeUMsUUFBK0IsR0FBRyxFQUFFO0VBQzFDLE1BQU1QLFdBQVcsR0FBRyxNQUFNRCx1QkFBdUIsQ0FBQzVELElBQUksQ0FBQztFQUN2RCxJQUFJNkQsV0FBVyxDQUFDUSxNQUFNLElBQUksQ0FBQyxFQUFFO0lBQzNCLE1BQU1DLFdBQVcsR0FBRyxNQUFNYixnQkFBZ0IsQ0FBQ3pELElBQUksRUFBRTJCLFNBQVMsQ0FBQztJQUMzRHlDLFFBQVEsQ0FBQ3pELElBQUksQ0FBQzJELFdBQVcsQ0FBQztFQUM1QixDQUFDLE1BQU07SUFDTCxLQUFLLE1BQU1DLFNBQVMsSUFBSVYsV0FBVyxFQUFFO01BQ25DLE1BQU03RCxJQUFJLENBQUN3RSxNQUFNLENBQUMscUJBQXFCLEVBQUVELFNBQVMsQ0FBQztNQUNuRCxNQUFNLElBQUExQywyQ0FBcUIsRUFBQzdCLElBQUksRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUM7TUFDOUQsTUFBTXNFLFdBQVcsR0FBRyxNQUFNYixnQkFBZ0IsQ0FBQ3pELElBQUksRUFBRTJCLFNBQVMsQ0FBQztNQUMzRHlDLFFBQVEsQ0FBQ3pELElBQUksQ0FBQzJELFdBQVcsQ0FBQztJQUM1QjtFQUNGO0VBQ0EsT0FBT0YsUUFBUTtBQUNqQjtBQUlBLE1BQU1LLHlCQUF5QixTQUFTQyw4Q0FBc0IsQ0FBNkI7RUFBQUMsWUFBQSxHQUFBQyxJQUFBO0lBQUEsU0FBQUEsSUFBQTtJQUFBM0ssZUFBQSxtQkFDOUUsRUFBRTtJQUFBQSxlQUFBLG9CQUVELEVBQUU7SUFBQUEsZUFBQSwyQkFFSyxFQUFFO0VBQUE7RUFFckI0SyxlQUFlQSxDQUFDbkksV0FBdUMsRUFBRTtJQUN2RCxPQUFPO01BQ0xvSSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUNDLFNBQVMsRUFBRTtNQUM3QkMsTUFBTSxFQUFFdkksaUJBQWlCLENBQUNDLFdBQVcsQ0FBQztNQUN0Q3VJLG9CQUFvQixFQUFFLGNBQWM7TUFDcENDLFVBQVUsRUFBRSxNQUFBQSxDQUFBLEtBQVkxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUN4RCxJQUFJLENBQUM7TUFDbkRtRixlQUFlLEVBQUUvSSx1QkFBdUIsQ0FBQyxDQUFDO01BQzFDO01BQ0E7TUFDQWdKLFNBQVMsRUFBRSxNQUFBQSxDQUFBLEtBQVk7UUFDckIsTUFBTSxJQUFBQyxjQUFLLEVBQUMsSUFBSSxDQUFDO01BQ25CO0lBQ0YsQ0FBQztFQUNIO0VBRUEsTUFBTUMsU0FBU0EsQ0FBQSxFQUFHO0lBQ2hCLE1BQU1DLGtCQUFrQixHQUFHLElBQUF6SCxlQUFNLEVBQUMsQ0FBQyxDQUFDMEgsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEUsTUFBTUMsZ0JBQWdCLEdBQUcsSUFBQTVILGVBQU0sRUFBQztNQUFFNkgsSUFBSSxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBQy9DLE1BQU1oRSxTQUFTLEdBQUcsSUFBSSxDQUFDc0MsT0FBTyxDQUFDdEMsU0FBUyxJQUFJNEQsa0JBQWtCLENBQUNLLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU1DLFdBQVcsR0FBRy9ILGVBQU0sQ0FBQ2dJLEdBQUcsQ0FBQ0osZ0JBQWdCLEVBQUUsSUFBQTVILGVBQU0sRUFBQzZELFNBQVMsQ0FBQyxDQUFDO0lBRW5FLE1BQU0sSUFBSSxDQUFDb0UsVUFBVSxDQUFDLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUM7SUFFNUMsTUFBTTVCLFFBQVEsR0FBRyxNQUFNRCxhQUFhLENBQUMsSUFBSSxDQUFDbkUsSUFBSSxFQUFFNkYsV0FBVyxDQUFDO0lBRTVELE9BQU87TUFDTEksT0FBTyxFQUFFLElBQUk7TUFDYjdCO0lBQ0YsQ0FBQztFQUNIO0FBQ0Y7QUFBQyxJQUFBOEIsUUFBQSxHQUFBQyxPQUFBLENBQUFuTSxPQUFBLEdBRWN5Syx5QkFBeUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
311
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX25hdmlnYXRpb24iLCJfd2FpdGluZyIsIl90cmFuc2FjdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9kZWZpbmVQcm9wZXJ0eSIsInIiLCJ0IiwiX3RvUHJvcGVydHlLZXkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkRBVEVfRk9STUFUIiwiTk9fVFJBTlNBQ1RJT05fSU5fREFURV9SQU5HRV9URVhUIiwiREFURV9DT0xVTU5fQ0xBU1NfQ09NUExFVEVEIiwiREFURV9DT0xVTU5fQ0xBU1NfUEVORElORyIsIkRFU0NSSVBUSU9OX0NPTFVNTl9DTEFTU19DT01QTEVURUQiLCJERVNDUklQVElPTl9DT0xVTU5fQ0xBU1NfUEVORElORyIsIlJFRkVSRU5DRV9DT0xVTU5fQ0xBU1MiLCJERUJJVF9DT0xVTU5fQ0xBU1MiLCJDUkVESVRfQ09MVU1OX0NMQVNTIiwiRVJST1JfTUVTU0FHRV9DTEFTUyIsIkFDQ09VTlRTX05VTUJFUiIsIkNMT1NFX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fQ0xBU1MiLCJTSE9XX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fVkFMVUUiLCJDT01QTEVURURfVFJBTlNBQ1RJT05TX1RBQkxFIiwiUEVORElOR19UUkFOU0FDVElPTlNfVEFCTEUiLCJORVhUX1BBR0VfTElOSyIsIkNVUlJFTlRfQkFMQU5DRSIsImdldFBvc3NpYmxlTG9naW5SZXN1bHRzIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZ2V0QW1vdW50RGF0YSIsImFtb3VudFN0ciIsImFtb3VudFN0ckNvcHkiLCJyZXBsYWNlIiwiU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCIsInJlcGxhY2VBbGwiLCJwYXJzZUZsb2F0IiwiZ2V0VHhuQW1vdW50IiwidHhuIiwiY3JlZGl0IiwiZGViaXQiLCJpc05hTiIsImNvbnZlcnRUcmFuc2FjdGlvbnMiLCJ0eG5zIiwibWFwIiwiY29udmVydGVkRGF0ZSIsIm1vbWVudCIsImRhdGUiLCJ0b0lTT1N0cmluZyIsImNvbnZlcnRlZEFtb3VudCIsInR5cGUiLCJUcmFuc2FjdGlvblR5cGVzIiwiTm9ybWFsIiwiaWRlbnRpZmllciIsInJlZmVyZW5jZSIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwicHJvY2Vzc2VkRGF0ZSIsIm9yaWdpbmFsQW1vdW50Iiwib3JpZ2luYWxDdXJyZW5jeSIsIlNIRUtFTF9DVVJSRU5DWSIsImNoYXJnZWRBbW91bnQiLCJzdGF0dXMiLCJkZXNjcmlwdGlvbiIsIm1lbW8iLCJnZXRUcmFuc2FjdGlvbkRhdGUiLCJ0ZHMiLCJ0cmFuc2FjdGlvblR5cGUiLCJ0cmFuc2FjdGlvbnNDb2xzVHlwZXMiLCJ0cmltIiwiZ2V0VHJhbnNhY3Rpb25EZXNjcmlwdGlvbiIsImdldFRyYW5zYWN0aW9uUmVmZXJlbmNlIiwiZ2V0VHJhbnNhY3Rpb25EZWJpdCIsImdldFRyYW5zYWN0aW9uQ3JlZGl0IiwiZXh0cmFjdFRyYW5zYWN0aW9uRGV0YWlscyIsInR4blJvdyIsInRyYW5zYWN0aW9uU3RhdHVzIiwiaW5uZXJUZHMiLCJpdGVtIiwiZ2V0VHJhbnNhY3Rpb25zQ29sc1R5cGVDbGFzc2VzIiwicGFnZSIsInRhYmxlTG9jYXRvciIsInJlc3VsdCIsInR5cGVDbGFzc2VzT2JqcyIsInBhZ2VFdmFsQWxsIiwidGQiLCJpbmRleCIsImNvbENsYXNzIiwiZ2V0QXR0cmlidXRlIiwidHlwZUNsYXNzT2JqIiwiZXh0cmFjdFRyYW5zYWN0aW9uIiwicHVzaCIsImV4dHJhY3RUcmFuc2FjdGlvbnMiLCJ0cmFuc2FjdGlvbnNSb3dzIiwidHJzIiwidHIiLCJBcnJheSIsImZyb20iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImlubmVyVGV4dCIsImlzTm9UcmFuc2FjdGlvbkluRGF0ZVJhbmdlRXJyb3IiLCJoYXNFcnJvckluZm9FbGVtZW50IiwiZWxlbWVudFByZXNlbnRPblBhZ2UiLCJlcnJvclRleHQiLCIkZXZhbCIsImVycm9yRWxlbWVudCIsInNlYXJjaEJ5RGF0ZXMiLCJzdGFydERhdGUiLCJjbGlja0J1dHRvbiIsIndhaXRVbnRpbEVsZW1lbnRGb3VuZCIsImZpbGxJbnB1dCIsImZvcm1hdCIsIndhaXRGb3JOYXZpZ2F0aW9uIiwiZ2V0QWNjb3VudE51bWJlciIsInNlbGVjdGVkU25pZkFjY291bnQiLCJvcHRpb24iLCJjaGVja0lmSGFzTmV4dFBhZ2UiLCJuYXZpZ2F0ZVRvTmV4dFBhZ2UiLCJzY3JhcGVUcmFuc2FjdGlvbnMiLCJuZWVkVG9QYWdpbmF0ZSIsImhhc05leHRQYWdlIiwiY3VycmVudFBhZ2VUeG5zIiwiZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyIsIlByb21pc2UiLCJyYWNlIiwibm9UcmFuc2FjdGlvbkluUmFuZ2VFcnJvciIsInBlbmRpbmdUeG5zIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJjb21wbGV0ZWRUeG5zIiwiQ29tcGxldGVkIiwiZ2V0Q3VycmVudEJhbGFuY2UiLCJiYWxhbmNlRWxlbWVudCIsIiQiLCJiYWxhbmNlU3RyIiwiZXZhbHVhdGUiLCJ3YWl0Rm9yUG9zdExvZ2luIiwiZmV0Y2hBY2NvdW50RGF0YSIsImFjY291bnROdW1iZXIiLCJiYWxhbmNlIiwiZ2V0QWNjb3VudElkc0J5U2VsZWN0b3IiLCJhY2NvdW50c0lkcyIsInNlbGVjdEVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwib3B0aW9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJnZXRUcmFuc2FjdGlvbnNGcmFtZSIsInNsZWVwIiwiZnJhbWVzIiwidGFyZ2V0RnJhbWUiLCJmaW5kIiwiZiIsIm5hbWUiLCJFcnJvciIsImZldGNoQWNjb3VudHMiLCJhY2NvdW50cyIsImxlbmd0aCIsImZyYW1lIiwiYWNjb3VudERhdGEiLCJhY2NvdW50SWQiLCJzZWxlY3QiLCJCZWlubGV1bWlHcm91cEJhc2VTY3JhcGVyIiwiQmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImdldExvZ2luT3B0aW9ucyIsImxvZ2luVXJsIiwiTE9HSU5fVVJMIiwiZmllbGRzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJwb3N0QWN0aW9uIiwicG9zc2libGVSZXN1bHRzIiwicHJlQWN0aW9uIiwiZmV0Y2hEYXRhIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJhZGQiLCJzdGFydE1vbWVudExpbWl0IiwieWVhciIsInRvRGF0ZSIsInN0YXJ0TW9tZW50IiwibWF4IiwibmF2aWdhdGVUbyIsIlRSQU5TQUNUSU9OU19VUkwiLCJzdWNjZXNzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL2Jhc2UtYmVpbmxldW1pLWdyb3VwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQsIHsgdHlwZSBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgdHlwZSBGcmFtZSwgdHlwZSBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IFNIRUtFTF9DVVJSRU5DWSwgU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBjbGlja0J1dHRvbixcbiAgZWxlbWVudFByZXNlbnRPblBhZ2UsXG4gIGZpbGxJbnB1dCxcbiAgcGFnZUV2YWxBbGwsXG4gIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCxcbn0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgd2FpdEZvck5hdmlnYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRpbmcnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcyxcbiAgdHlwZSBUcmFuc2FjdGlvbixcbiAgdHlwZSBUcmFuc2FjdGlvbnNBY2NvdW50LFxufSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcblxuY29uc3QgREFURV9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XG5jb25zdCBOT19UUkFOU0FDVElPTl9JTl9EQVRFX1JBTkdFX1RFWFQgPSAn15zXkCDXoNee16bXkNeVINeg16rXldeg15nXnSDXkdeg15XXqdeQINeU157XkdeV16fXqSc7XG5jb25zdCBEQVRFX0NPTFVNTl9DTEFTU19DT01QTEVURUQgPSAnZGF0ZSBmaXJzdCc7XG5jb25zdCBEQVRFX0NPTFVNTl9DTEFTU19QRU5ESU5HID0gJ2ZpcnN0IGRhdGUnO1xuY29uc3QgREVTQ1JJUFRJT05fQ09MVU1OX0NMQVNTX0NPTVBMRVRFRCA9ICdyZWZlcmVuY2Ugd3JhcF9ub3JtYWwnO1xuY29uc3QgREVTQ1JJUFRJT05fQ09MVU1OX0NMQVNTX1BFTkRJTkcgPSAnZGV0YWlscyB3cmFwX25vcm1hbCc7XG5jb25zdCBSRUZFUkVOQ0VfQ09MVU1OX0NMQVNTID0gJ2RldGFpbHMnO1xuY29uc3QgREVCSVRfQ09MVU1OX0NMQVNTID0gJ2RlYml0JztcbmNvbnN0IENSRURJVF9DT0xVTU5fQ0xBU1MgPSAnY3JlZGl0JztcbmNvbnN0IEVSUk9SX01FU1NBR0VfQ0xBU1MgPSAnTk9fREFUQSc7XG5jb25zdCBBQ0NPVU5UU19OVU1CRVIgPSAnZGl2LmZpYmlfYWNjb3VudCBzcGFuLmFjY19udW0nO1xuY29uc3QgQ0xPU0VfU0VBUkNIX0JZX0RBVEVTX0JVVFRPTl9DTEFTUyA9ICd1aS1kYXRlcGlja2VyLWNsb3NlJztcbmNvbnN0IFNIT1dfU0VBUkNIX0JZX0RBVEVTX0JVVFRPTl9WQUxVRSA9ICfXlNem15InO1xuY29uc3QgQ09NUExFVEVEX1RSQU5TQUNUSU9OU19UQUJMRSA9ICd0YWJsZSNkYXRhVGFibGUwNzcnO1xuY29uc3QgUEVORElOR19UUkFOU0FDVElPTlNfVEFCTEUgPSAndGFibGUjZGF0YVRhYmxlMDIzJztcbmNvbnN0IE5FWFRfUEFHRV9MSU5LID0gJ2EjTnBhZ2UucGFnaW5nJztcbmNvbnN0IENVUlJFTlRfQkFMQU5DRSA9ICcubWFpbl9iYWxhbmNlJztcblxudHlwZSBUcmFuc2FjdGlvbnNDb2xzVHlwZXMgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xudHlwZSBUcmFuc2FjdGlvbnNUclRkcyA9IHN0cmluZ1tdO1xudHlwZSBUcmFuc2FjdGlvbnNUciA9IHsgaW5uZXJUZHM6IFRyYW5zYWN0aW9uc1RyVGRzIH07XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICByZWZlcmVuY2U6IHN0cmluZztcbiAgZGF0ZTogc3RyaW5nO1xuICBjcmVkaXQ6IHN0cmluZztcbiAgZGViaXQ6IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKTogUG9zc2libGVMb2dpblJlc3VsdHMge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFsvZmliaS4qYWNjb3VudFN1bW1hcnkvXTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkXSA9IFsvRmliaU1lbnVcXC9NYXJrZXRpbmdcXC9Qcml2YXRlXFwvSG9tZS9dO1xuICByZXR1cm4gdXJscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICByZXR1cm4gW1xuICAgIHsgc2VsZWN0b3I6ICcjdXNlcm5hbWUnLCB2YWx1ZTogY3JlZGVudGlhbHMudXNlcm5hbWUgfSxcbiAgICB7IHNlbGVjdG9yOiAnI3Bhc3N3b3JkJywgdmFsdWU6IGNyZWRlbnRpYWxzLnBhc3N3b3JkIH0sXG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldEFtb3VudERhdGEoYW1vdW50U3RyOiBzdHJpbmcpIHtcbiAgbGV0IGFtb3VudFN0ckNvcHkgPSBhbW91bnRTdHIucmVwbGFjZShTSEVLRUxfQ1VSUkVOQ1lfU1lNQk9MLCAnJyk7XG4gIGFtb3VudFN0ckNvcHkgPSBhbW91bnRTdHJDb3B5LnJlcGxhY2VBbGwoJywnLCAnJyk7XG4gIHJldHVybiBwYXJzZUZsb2F0KGFtb3VudFN0ckNvcHkpO1xufVxuXG5mdW5jdGlvbiBnZXRUeG5BbW91bnQodHhuOiBTY3JhcGVkVHJhbnNhY3Rpb24pIHtcbiAgY29uc3QgY3JlZGl0ID0gZ2V0QW1vdW50RGF0YSh0eG4uY3JlZGl0KTtcbiAgY29uc3QgZGViaXQgPSBnZXRBbW91bnREYXRhKHR4bi5kZWJpdCk7XG4gIHJldHVybiAoTnVtYmVyLmlzTmFOKGNyZWRpdCkgPyAwIDogY3JlZGl0KSAtIChOdW1iZXIuaXNOYU4oZGViaXQpID8gMCA6IGRlYml0KTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uW10ge1xuICByZXR1cm4gdHhucy5tYXAoKHR4bik6IFRyYW5zYWN0aW9uID0+IHtcbiAgICBjb25zdCBjb252ZXJ0ZWREYXRlID0gbW9tZW50KHR4bi5kYXRlLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCBjb252ZXJ0ZWRBbW91bnQgPSBnZXRUeG5BbW91bnQodHhuKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBpZGVudGlmaWVyOiB0eG4ucmVmZXJlbmNlID8gcGFyc2VJbnQodHhuLnJlZmVyZW5jZSwgMTApIDogdW5kZWZpbmVkLFxuICAgICAgZGF0ZTogY29udmVydGVkRGF0ZSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IGNvbnZlcnRlZERhdGUsXG4gICAgICBvcmlnaW5hbEFtb3VudDogY29udmVydGVkQW1vdW50LFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogU0hFS0VMX0NVUlJFTkNZLFxuICAgICAgY2hhcmdlZEFtb3VudDogY29udmVydGVkQW1vdW50LFxuICAgICAgc3RhdHVzOiB0eG4uc3RhdHVzLFxuICAgICAgZGVzY3JpcHRpb246IHR4bi5kZXNjcmlwdGlvbixcbiAgICAgIG1lbW86IHR4bi5tZW1vLFxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkRhdGUodGRzOiBUcmFuc2FjdGlvbnNUclRkcywgdHJhbnNhY3Rpb25UeXBlOiBzdHJpbmcsIHRyYW5zYWN0aW9uc0NvbHNUeXBlczogVHJhbnNhY3Rpb25zQ29sc1R5cGVzKSB7XG4gIGlmICh0cmFuc2FjdGlvblR5cGUgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgcmV0dXJuICh0ZHNbdHJhbnNhY3Rpb25zQ29sc1R5cGVzW0RBVEVfQ09MVU1OX0NMQVNTX0NPTVBMRVRFRF1dIHx8ICcnKS50cmltKCk7XG4gIH1cbiAgcmV0dXJuICh0ZHNbdHJhbnNhY3Rpb25zQ29sc1R5cGVzW0RBVEVfQ09MVU1OX0NMQVNTX1BFTkRJTkddXSB8fCAnJykudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkRlc2NyaXB0aW9uKHRkczogVHJhbnNhY3Rpb25zVHJUZHMsIHRyYW5zYWN0aW9uVHlwZTogc3RyaW5nLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXM6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcykge1xuICBpZiAodHJhbnNhY3Rpb25UeXBlID09PSAnY29tcGxldGVkJykge1xuICAgIHJldHVybiAodGRzW3RyYW5zYWN0aW9uc0NvbHNUeXBlc1tERVNDUklQVElPTl9DT0xVTU5fQ0xBU1NfQ09NUExFVEVEXV0gfHwgJycpLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gKHRkc1t0cmFuc2FjdGlvbnNDb2xzVHlwZXNbREVTQ1JJUFRJT05fQ09MVU1OX0NMQVNTX1BFTkRJTkddXSB8fCAnJykudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvblJlZmVyZW5jZSh0ZHM6IFRyYW5zYWN0aW9uc1RyVGRzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXM6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcykge1xuICByZXR1cm4gKHRkc1t0cmFuc2FjdGlvbnNDb2xzVHlwZXNbUkVGRVJFTkNFX0NPTFVNTl9DTEFTU11dIHx8ICcnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRGViaXQodGRzOiBUcmFuc2FjdGlvbnNUclRkcywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzOiBUcmFuc2FjdGlvbnNDb2xzVHlwZXMpIHtcbiAgcmV0dXJuICh0ZHNbdHJhbnNhY3Rpb25zQ29sc1R5cGVzW0RFQklUX0NPTFVNTl9DTEFTU11dIHx8ICcnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uQ3JlZGl0KHRkczogVHJhbnNhY3Rpb25zVHJUZHMsIHRyYW5zYWN0aW9uc0NvbHNUeXBlczogVHJhbnNhY3Rpb25zQ29sc1R5cGVzKSB7XG4gIHJldHVybiAodGRzW3RyYW5zYWN0aW9uc0NvbHNUeXBlc1tDUkVESVRfQ09MVU1OX0NMQVNTXV0gfHwgJycpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zYWN0aW9uRGV0YWlscyh0eG5Sb3c6IFRyYW5zYWN0aW9uc1RyLCB0cmFuc2FjdGlvblN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzOiBUcmFuc2FjdGlvbnNDb2xzVHlwZXMpOiBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBjb25zdCB0ZHMgPSB0eG5Sb3cuaW5uZXJUZHM7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgc3RhdHVzOiB0cmFuc2FjdGlvblN0YXR1cyxcbiAgICBkYXRlOiBnZXRUcmFuc2FjdGlvbkRhdGUodGRzLCB0cmFuc2FjdGlvblN0YXR1cywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzKSxcbiAgICBkZXNjcmlwdGlvbjogZ2V0VHJhbnNhY3Rpb25EZXNjcmlwdGlvbih0ZHMsIHRyYW5zYWN0aW9uU3RhdHVzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXMpLFxuICAgIHJlZmVyZW5jZTogZ2V0VHJhbnNhY3Rpb25SZWZlcmVuY2UodGRzLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXMpLFxuICAgIGRlYml0OiBnZXRUcmFuc2FjdGlvbkRlYml0KHRkcywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzKSxcbiAgICBjcmVkaXQ6IGdldFRyYW5zYWN0aW9uQ3JlZGl0KHRkcywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzKSxcbiAgfTtcblxuICByZXR1cm4gaXRlbTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25zQ29sc1R5cGVDbGFzc2VzKHBhZ2U6IFBhZ2UgfCBGcmFtZSwgdGFibGVMb2NhdG9yOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uc0NvbHNUeXBlcz4ge1xuICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcyA9IHt9O1xuICBjb25zdCB0eXBlQ2xhc3Nlc09ianMgPSBhd2FpdCBwYWdlRXZhbEFsbChwYWdlLCBgJHt0YWJsZUxvY2F0b3J9IHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGRgLCBudWxsLCAodGRzKSA9PiB7XG4gICAgcmV0dXJuIHRkcy5tYXAoKHRkLCBpbmRleCkgPT4gKHtcbiAgICAgIGNvbENsYXNzOiB0ZC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyksXG4gICAgICBpbmRleCxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgdHlwZUNsYXNzT2JqIG9mIHR5cGVDbGFzc2VzT2Jqcykge1xuICAgIGlmICh0eXBlQ2xhc3NPYmouY29sQ2xhc3MpIHtcbiAgICAgIHJlc3VsdFt0eXBlQ2xhc3NPYmouY29sQ2xhc3NdID0gdHlwZUNsYXNzT2JqLmluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb24odHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10sIHRyYW5zYWN0aW9uU3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLCB0eG5Sb3c6IFRyYW5zYWN0aW9uc1RyLCB0cmFuc2FjdGlvbnNDb2xzVHlwZXM6IFRyYW5zYWN0aW9uc0NvbHNUeXBlcykge1xuICBjb25zdCB0eG4gPSBleHRyYWN0VHJhbnNhY3Rpb25EZXRhaWxzKHR4blJvdywgdHJhbnNhY3Rpb25TdGF0dXMsIHRyYW5zYWN0aW9uc0NvbHNUeXBlcyk7XG4gIGlmICh0eG4uZGF0ZSAhPT0gJycpIHtcbiAgICB0eG5zLnB1c2godHhuKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb25zKHBhZ2U6IFBhZ2UgfCBGcmFtZSwgdGFibGVMb2NhdG9yOiBzdHJpbmcsIHRyYW5zYWN0aW9uU3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzKSB7XG4gIGNvbnN0IHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdID0gW107XG4gIGNvbnN0IHRyYW5zYWN0aW9uc0NvbHNUeXBlcyA9IGF3YWl0IGdldFRyYW5zYWN0aW9uc0NvbHNUeXBlQ2xhc3NlcyhwYWdlLCB0YWJsZUxvY2F0b3IpO1xuXG4gIGNvbnN0IHRyYW5zYWN0aW9uc1Jvd3MgPSBhd2FpdCBwYWdlRXZhbEFsbDxUcmFuc2FjdGlvbnNUcltdPihwYWdlLCBgJHt0YWJsZUxvY2F0b3J9IHRib2R5IHRyYCwgW10sICh0cnMpID0+IHtcbiAgICByZXR1cm4gdHJzLm1hcCgodHIpID0+ICh7XG4gICAgICBpbm5lclRkczogQXJyYXkuZnJvbSh0ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKSkubWFwKCh0ZCkgPT4gdGQuaW5uZXJUZXh0KSxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgdHhuUm93IG9mIHRyYW5zYWN0aW9uc1Jvd3MpIHtcbiAgICBleHRyYWN0VHJhbnNhY3Rpb24odHhucywgdHJhbnNhY3Rpb25TdGF0dXMsIHR4blJvdywgdHJhbnNhY3Rpb25zQ29sc1R5cGVzKTtcbiAgfVxuICByZXR1cm4gdHhucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNOb1RyYW5zYWN0aW9uSW5EYXRlUmFuZ2VFcnJvcihwYWdlOiBQYWdlIHwgRnJhbWUpIHtcbiAgY29uc3QgaGFzRXJyb3JJbmZvRWxlbWVudCA9IGF3YWl0IGVsZW1lbnRQcmVzZW50T25QYWdlKHBhZ2UsIGAuJHtFUlJPUl9NRVNTQUdFX0NMQVNTfWApO1xuICBpZiAoaGFzRXJyb3JJbmZvRWxlbWVudCkge1xuICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHBhZ2UuJGV2YWwoYC4ke0VSUk9SX01FU1NBR0VfQ0xBU1N9YCwgKGVycm9yRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIChlcnJvckVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dDtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JUZXh0LnRyaW0oKSA9PT0gTk9fVFJBTlNBQ1RJT05fSU5fREFURV9SQU5HRV9URVhUO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VhcmNoQnlEYXRlcyhwYWdlOiBQYWdlIHwgRnJhbWUsIHN0YXJ0RGF0ZTogTW9tZW50KSB7XG4gIGF3YWl0IGNsaWNrQnV0dG9uKHBhZ2UsICdhI3RhYkhlYWRlcjQnKTtcbiAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdkaXYjZmliaV9kYXRlcycpO1xuICBhd2FpdCBmaWxsSW5wdXQoXG4gICAgcGFnZSxcbiAgICAnaW5wdXQjZnJvbURhdGUnLFxuICAgIHN0YXJ0RGF0ZS5mb3JtYXQoREFURV9GT1JNQVQpLFxuICApO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCBgYnV0dG9uW2NsYXNzKj0ke0NMT1NFX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fQ0xBU1N9XWApO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCBgaW5wdXRbdmFsdWU9JHtTSE9XX1NFQVJDSF9CWV9EQVRFU19CVVRUT05fVkFMVUV9XWApO1xuICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudE51bWJlcihwYWdlOiBQYWdlIHwgRnJhbWUpIHtcbiAgY29uc3Qgc2VsZWN0ZWRTbmlmQWNjb3VudCA9IGF3YWl0IHBhZ2UuJGV2YWwoQUNDT1VOVFNfTlVNQkVSLCAob3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChvcHRpb24gYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dDtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlbGVjdGVkU25pZkFjY291bnQucmVwbGFjZSgnLycsICdfJykudHJpbSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja0lmSGFzTmV4dFBhZ2UocGFnZTogUGFnZSB8IEZyYW1lKSB7XG4gIHJldHVybiBlbGVtZW50UHJlc2VudE9uUGFnZShwYWdlLCBORVhUX1BBR0VfTElOSyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG5hdmlnYXRlVG9OZXh0UGFnZShwYWdlOiBQYWdlIHwgRnJhbWUpIHtcbiAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgTkVYVF9QQUdFX0xJTkspO1xuICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbn1cblxuLyogQ291bGRuJ3QgcmVwcm9kdWNlIHNjZW5hcmlvIHdpdGggbXVsdGlwbGUgcGFnZXMgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMgLSBTaG91bGQgc3VwcG9ydCBpZiBleGlzdHMgc3VjaCBjYXNlLlxuICAgbmVlZFRvUGFnaW5hdGUgaXMgZmFsc2UgaWYgc2NyYXBpbmcgcGVuZGluZyB0cmFuc2FjdGlvbnMgKi9cbmFzeW5jIGZ1bmN0aW9uIHNjcmFwZVRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlIHwgRnJhbWUsIHRhYmxlTG9jYXRvcjogc3RyaW5nLCB0cmFuc2FjdGlvblN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcywgbmVlZFRvUGFnaW5hdGU6IGJvb2xlYW4pIHtcbiAgY29uc3QgdHhucyA9IFtdO1xuICBsZXQgaGFzTmV4dFBhZ2UgPSBmYWxzZTtcblxuICBkbyB7XG4gICAgY29uc3QgY3VycmVudFBhZ2VUeG5zID0gYXdhaXQgZXh0cmFjdFRyYW5zYWN0aW9ucyhwYWdlLCB0YWJsZUxvY2F0b3IsIHRyYW5zYWN0aW9uU3RhdHVzKTtcbiAgICB0eG5zLnB1c2goLi4uY3VycmVudFBhZ2VUeG5zKTtcbiAgICBpZiAobmVlZFRvUGFnaW5hdGUpIHtcbiAgICAgIGhhc05leHRQYWdlID0gYXdhaXQgY2hlY2tJZkhhc05leHRQYWdlKHBhZ2UpO1xuICAgICAgaWYgKGhhc05leHRQYWdlKSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRlVG9OZXh0UGFnZShwYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGhhc05leHRQYWdlKTtcblxuICByZXR1cm4gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlIHwgRnJhbWUpIHtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2RpdltpZCo9XFwnZGl2VGFibGVcXCddJywgZmFsc2UpLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBgLiR7RVJST1JfTUVTU0FHRV9DTEFTU31gLCBmYWxzZSksXG4gIF0pO1xuXG4gIGNvbnN0IG5vVHJhbnNhY3Rpb25JblJhbmdlRXJyb3IgPSBhd2FpdCBpc05vVHJhbnNhY3Rpb25JbkRhdGVSYW5nZUVycm9yKHBhZ2UpO1xuICBpZiAobm9UcmFuc2FjdGlvbkluUmFuZ2VFcnJvcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBlbmRpbmdUeG5zID0gYXdhaXQgc2NyYXBlVHJhbnNhY3Rpb25zKHBhZ2UsIFBFTkRJTkdfVFJBTlNBQ1RJT05TX1RBQkxFLFxuICAgIFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZywgZmFsc2UpO1xuICBjb25zdCBjb21wbGV0ZWRUeG5zID0gYXdhaXQgc2NyYXBlVHJhbnNhY3Rpb25zKHBhZ2UsIENPTVBMRVRFRF9UUkFOU0FDVElPTlNfVEFCTEUsXG4gICAgVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsIHRydWUpO1xuICBjb25zdCB0eG5zID0gW1xuICAgIC4uLnBlbmRpbmdUeG5zLFxuICAgIC4uLmNvbXBsZXRlZFR4bnMsXG4gIF07XG4gIHJldHVybiB0eG5zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50QmFsYW5jZShwYWdlOiBQYWdlIHwgRnJhbWUpIHtcbiAgY29uc3QgYmFsYW5jZUVsZW1lbnQgPSBhd2FpdCBwYWdlLiQoQ1VSUkVOVF9CQUxBTkNFKTtcbiAgaWYgKCFiYWxhbmNlRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYmFsYW5jZVN0ciA9IGF3YWl0IGJhbGFuY2VFbGVtZW50LmV2YWx1YXRlKChvcHRpb24pID0+IHtcbiAgICByZXR1cm4gKG9wdGlvbiBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0O1xuICB9KTtcbiAgcmV0dXJuIGdldEFtb3VudERhdGEoYmFsYW5jZVN0cik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUG9zdExvZ2luKHBhZ2U6IFBhZ2UpIHtcbiAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICcjY2FyZC1oZWFkZXInLCB0cnVlKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJyNhY2NvdW50X251bScsIHRydWUpLFxuICBdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBY2NvdW50RGF0YShwYWdlOiBQYWdlIHwgRnJhbWUsIHN0YXJ0RGF0ZTogTW9tZW50KSB7XG4gIGF3YWl0IHNlYXJjaEJ5RGF0ZXMocGFnZSwgc3RhcnREYXRlKTtcbiAgY29uc3QgYWNjb3VudE51bWJlciA9IGF3YWl0IGdldEFjY291bnROdW1iZXIocGFnZSk7XG4gIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBnZXRDdXJyZW50QmFsYW5jZShwYWdlKTtcbiAgY29uc3QgdHhucyA9IGF3YWl0IGdldEFjY291bnRUcmFuc2FjdGlvbnMocGFnZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIHR4bnMsXG4gICAgYmFsYW5jZSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudElkc0J5U2VsZWN0b3IocGFnZTogUGFnZSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgYWNjb3VudHNJZHMgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjY291bnRfbnVtX3NlbGVjdCcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3RFbGVtZW50ID8gc2VsZWN0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdvcHRpb24nKSA6IFtdO1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG9wdGlvbnMsIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gYWNjb3VudHNJZHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uc0ZyYW1lKHBhZ2U6IFBhZ2UpOiBQcm9taXNlPEZyYW1lPiB7XG4gIGF3YWl0IHNsZWVwKDUwMDApO1xuICBjb25zdCBmcmFtZXMgPSBwYWdlLmZyYW1lcygpO1xuICBjb25zdCB0YXJnZXRGcmFtZSA9IGZyYW1lcy5maW5kKGYgPT4gZi5uYW1lKCkgPT09ICdpZnJhbWUtb2xkLXBhZ2VzJyk7XG5cbiAgaWYgKCF0YXJnZXRGcmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaWZyYW1lOiBcImlmcmFtZS1vbGQtcGFnZXNcIiAodXNlZCBmb3IgdHJhbnNhY3Rpb25zIHBhZ2UpIHdhcyBub3QgZm91bmQgb24gdGhlIHBhZ2UnKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBY2NvdW50cyhwYWdlOiBQYWdlLCBzdGFydERhdGU6IE1vbWVudCkge1xuICBjb25zdCBhY2NvdW50czogVHJhbnNhY3Rpb25zQWNjb3VudFtdID0gW107XG4gIGNvbnN0IGFjY291bnRzSWRzID0gYXdhaXQgZ2V0QWNjb3VudElkc0J5U2VsZWN0b3IocGFnZSk7XG4gIGlmIChhY2NvdW50c0lkcy5sZW5ndGggPD0gMSkge1xuICAgIGNvbnN0IGZyYW1lID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25zRnJhbWUocGFnZSk7XG4gICAgY29uc3QgYWNjb3VudERhdGEgPSBhd2FpdCBmZXRjaEFjY291bnREYXRhKGZyYW1lLCBzdGFydERhdGUpO1xuICAgIGFjY291bnRzLnB1c2goYWNjb3VudERhdGEpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgYWNjb3VudElkIG9mIGFjY291bnRzSWRzKSB7XG4gICAgICBhd2FpdCBwYWdlLnNlbGVjdCgnI2FjY291bnRfbnVtX3NlbGVjdCcsIGFjY291bnRJZCk7XG4gICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJyNhY2NvdW50X251bV9zZWxlY3QnLCB0cnVlKTtcbiAgICAgIGNvbnN0IGFjY291bnREYXRhID0gYXdhaXQgZmV0Y2hBY2NvdW50RGF0YShwYWdlLCBzdGFydERhdGUpO1xuICAgICAgYWNjb3VudHMucHVzaChhY2NvdW50RGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhY2NvdW50cztcbn1cblxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIEJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIEJBU0VfVVJMID0gJyc7XG5cbiAgTE9HSU5fVVJMID0gJyc7XG5cbiAgVFJBTlNBQ1RJT05TX1VSTCA9ICcnO1xuXG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IGAke3RoaXMuTE9HSU5fVVJMfWAsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiAnI2NvbnRpbnVlQnRuJyxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHdhaXRGb3JQb3N0TG9naW4odGhpcy5wYWdlKSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSxcbiAgICAgIC8vIEhBQ0s6IEZvciBzb21lIHJlYXNvbiwgdGhvdWdoIHRoZSBsb2dpbiBidXR0b24gKCNjb250aW51ZUJ0bikgaXMgcHJlc2VudCBhbmQgdmlzaWJsZSwgdGhlIGNsaWNrIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtLlxuICAgICAgLy8gQWRkaW5nIHRoaXMgZGVsYXkgZml4ZXMgdGhlIGlzc3VlLlxuICAgICAgcHJlQWN0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCkge1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnRMaW1pdCA9IG1vbWVudCh7IHllYXI6IDE2MDAgfSk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KHN0YXJ0TW9tZW50TGltaXQsIG1vbWVudChzdGFydERhdGUpKTtcblxuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyh0aGlzLlRSQU5TQUNUSU9OU19VUkwpO1xuXG4gICAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBmZXRjaEFjY291bnRzKHRoaXMucGFnZSwgc3RhcnRNb21lbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxxQkFBQSxHQUFBRixPQUFBO0FBT0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBS0EsSUFBQU0sdUJBQUEsR0FBQU4sT0FBQTtBQUE4RyxTQUFBRCx1QkFBQVEs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
|
|
@@ -122,9 +122,9 @@ function convertTransactions(txns, processedDate) {
|
|
|
122
122
|
return result;
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
|
-
async function fetchTransactions(page, options, startMoment, monthMoment) {
|
|
126
|
-
const accounts = await fetchAccounts(page,
|
|
127
|
-
const dataUrl = getTransactionsUrl(
|
|
125
|
+
async function fetchTransactions(page, options, companyServiceOptions, startMoment, monthMoment) {
|
|
126
|
+
const accounts = await fetchAccounts(page, companyServiceOptions.servicesUrl, monthMoment);
|
|
127
|
+
const dataUrl = getTransactionsUrl(companyServiceOptions.servicesUrl, monthMoment);
|
|
128
128
|
const dataResult = await (0, _fetch.fetchGetWithinPage)(page, dataUrl);
|
|
129
129
|
if (dataResult && _lodash.default.get(dataResult, 'Header.Status') === '1' && dataResult.CardsTransactionsListBean) {
|
|
130
130
|
const accountTxns = {};
|
|
@@ -200,14 +200,14 @@ function getExtraScrap(accountsWithIndex, page, options, allMonths) {
|
|
|
200
200
|
const actions = accountsWithIndex.map((a, i) => () => getExtraScrapAccount(page, options, a, allMonths[i]));
|
|
201
201
|
return (0, _waiting.runSerial)(actions);
|
|
202
202
|
}
|
|
203
|
-
async function fetchAllTransactions(page, options, startMoment) {
|
|
203
|
+
async function fetchAllTransactions(page, options, companyServiceOptions, startMoment) {
|
|
204
204
|
var _options$futureMonths;
|
|
205
205
|
const futureMonthsToScrape = (_options$futureMonths = options.futureMonthsToScrape) !== null && _options$futureMonths !== void 0 ? _options$futureMonths : 1;
|
|
206
206
|
const allMonths = (0, _dates.default)(startMoment, futureMonthsToScrape);
|
|
207
207
|
const results = await Promise.all(allMonths.map(async monthMoment => {
|
|
208
|
-
return fetchTransactions(page, options, startMoment, monthMoment);
|
|
208
|
+
return fetchTransactions(page, options, companyServiceOptions, startMoment, monthMoment);
|
|
209
209
|
}));
|
|
210
|
-
const finalResult = options.additionalTransactionInformation ? await getExtraScrap(results, page,
|
|
210
|
+
const finalResult = options.additionalTransactionInformation ? await getExtraScrap(results, page, companyServiceOptions, allMonths) : results;
|
|
211
211
|
const combinedTxns = {};
|
|
212
212
|
finalResult.forEach(result => {
|
|
213
213
|
Object.keys(result).forEach(accountNumber => {
|
|
@@ -320,11 +320,11 @@ class IsracardAmexBaseScraper extends _baseScraperWithBrowser.BaseScraperWithBro
|
|
|
320
320
|
const defaultStartMoment = (0, _moment.default)().subtract(1, 'years');
|
|
321
321
|
const startDate = this.options.startDate || defaultStartMoment.toDate();
|
|
322
322
|
const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
|
|
323
|
-
return fetchAllTransactions(this.page,
|
|
323
|
+
return fetchAllTransactions(this.page, this.options, {
|
|
324
324
|
servicesUrl: this.servicesUrl,
|
|
325
325
|
companyCode: this.companyCode
|
|
326
|
-
}
|
|
326
|
+
}, startMoment);
|
|
327
327
|
}
|
|
328
328
|
}
|
|
329
329
|
var _default = exports.default = IsracardAmexBaseScraper;
|
|
330
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVpbGRVcmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbW9tZW50IiwiX2NvbnN0YW50cyIsIl9kZWZpbml0aW9ucyIsIl9kYXRlcyIsIl9kZWJ1ZyIsIl9mZXRjaCIsIl90cmFuc2FjdGlvbnMiLCJfd2FpdGluZyIsIl90cmFuc2FjdGlvbnMyIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJfZXJyb3JzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkNPVU5UUllfQ09ERSIsIklEX1RZUEUiLCJJTlNUQUxMTUVOVFNfS0VZV09SRCIsIkRBVEVfRk9STUFUIiwiZGVidWciLCJnZXREZWJ1ZyIsImdldEFjY291bnRzVXJsIiwic2VydmljZXNVcmwiLCJtb250aE1vbWVudCIsImJpbGxpbmdEYXRlIiwiZm9ybWF0IiwiYnVpbGRVcmwiLCJxdWVyeVBhcmFtcyIsInJlcU5hbWUiLCJhY3Rpb25Db2RlIiwiZmV0Y2hBY2NvdW50cyIsInBhZ2UiLCJkYXRhVXJsIiwiZGF0YVJlc3VsdCIsImZldGNoR2V0V2l0aGluUGFnZSIsIl8iLCJnZXQiLCJEYXNoYm9hcmRNb250aEJlYW4iLCJjYXJkc0NoYXJnZXMiLCJtYXAiLCJjYXJkQ2hhcmdlIiwiaW5kZXgiLCJwYXJzZUludCIsImNhcmRJbmRleCIsImFjY291bnROdW1iZXIiLCJjYXJkTnVtYmVyIiwicHJvY2Vzc2VkRGF0ZSIsIm1vbWVudCIsInRvSVNPU3RyaW5nIiwiZ2V0VHJhbnNhY3Rpb25zVXJsIiwibW9udGgiLCJ5ZWFyIiwibW9udGhTdHIiLCJ0b1N0cmluZyIsInJlcXVpcmVkRGF0ZSIsImNvbnZlcnRDdXJyZW5jeSIsImN1cnJlbmN5U3RyIiwiU0hFS0VMX0NVUlJFTkNZX0tFWVdPUkQiLCJBTFRfU0hFS0VMX0NVUlJFTkNZIiwiU0hFS0VMX0NVUlJFTkNZIiwiZ2V0SW5zdGFsbG1lbnRzSW5mbyIsInR4biIsIm1vcmVJbmZvIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWQiLCJtYXRjaGVzIiwibWF0Y2giLCJudW1iZXIiLCJ0b3RhbCIsImdldFRyYW5zYWN0aW9uVHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJJbnN0YWxsbWVudHMiLCJOb3JtYWwiLCJjb252ZXJ0VHJhbnNhY3Rpb25zIiwidHhucyIsImZpbHRlcmVkVHhucyIsImRlYWxTdW1UeXBlIiwidm91Y2hlck51bWJlclJhdHoiLCJ2b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kIiwiX3R4biRjdXJyZW50UGF5bWVudEN1IiwiaXNPdXRib3VuZCIsImRlYWxTdW1PdXRib3VuZCIsInR4bkRhdGVTdHIiLCJmdWxsUHVyY2hhc2VEYXRlT3V0Ym91bmQiLCJmdWxsUHVyY2hhc2VEYXRlIiwidHhuTW9tZW50IiwiY3VycmVudFByb2Nlc3NlZERhdGUiLCJmdWxsUGF5bWVudERhdGUiLCJyZXN1bHQiLCJ0eXBlIiwiaWRlbnRpZmllciIsImRhdGUiLCJvcmlnaW5hbEFtb3VudCIsImRlYWxTdW0iLCJvcmlnaW5hbEN1cnJlbmN5IiwiY3VycmVudFBheW1lbnRDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJjaGFyZ2VkQW1vdW50IiwicGF5bWVudFN1bU91dGJvdW5kIiwicGF5bWVudFN1bSIsImNoYXJnZWRDdXJyZW5jeSIsImRlc2NyaXB0aW9uIiwiZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kIiwiZnVsbFN1cHBsaWVyTmFtZUhlYiIsIm1lbW8iLCJpbnN0YWxsbWVudHMiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwiZmV0Y2hUcmFuc2FjdGlvbnMiLCJvcHRpb25zIiwic3RhcnRNb21lbnQiLCJhY2NvdW50cyIsIkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4iLCJhY2NvdW50VHhucyIsImFjY291bnQiLCJ0eG5Hcm91cHMiLCJfb3B0aW9ucyRvdXRwdXREYXRhJGUiLCJfb3B0aW9ucyRvdXRwdXREYXRhIiwiYWxsVHhucyIsInR4bkdyb3VwIiwidHhuSXNyYWVsIiwidHhuQWJyb2FkIiwiY29tYmluZUluc3RhbGxtZW50cyIsImZpeEluc3RhbGxtZW50cyIsIm91dHB1dERhdGEiLCJlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUiLCJmaWx0ZXJPbGRUcmFuc2FjdGlvbnMiLCJnZXRUcmFuc2FjdGlvbkV4dHJhRGV0YWlscyIsImFjY291bnRJbmRleCIsInRyYW5zYWN0aW9uIiwibW9lZENoaXV2IiwiQ2FyZEluZGV4Iiwic2hvdmFyUmF0eiIsImdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbiIsIl8kZ2V0IiwiZGF0YSIsInJhd0NhdGVnb3J5IiwiY2F0ZWdvcnkiLCJ0cmltIiwiZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9ucyIsImFjY291bnRXaXRoSW5kZXgiLCJwcm9taXNlcyIsIlByb21pc2UiLCJhbGwiLCJnZXRFeHRyYVNjcmFwQWNjb3VudCIsImFjY291bnRNYXAiLCJhIiwicmVkdWNlIiwibSIsIngiLCJnZXRFeHRyYVNjcmFwIiwiYWNjb3VudHNXaXRoSW5kZXgiLCJhbGxNb250aHMiLCJhY3Rpb25zIiwicnVuU2VyaWFsIiwiZmV0Y2hBbGxUcmFuc2FjdGlvbnMiLCJfb3B0aW9ucyRmdXR1cmVNb250aHMiLCJmdXR1cmVNb250aHNUb1NjcmFwZSIsImdldEFsbE1vbnRoTW9tZW50cyIsInJlc3VsdHMiLCJmaW5hbFJlc3VsdCIsImFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uIiwiY29tYmluZWRUeG5zIiwidHhuc0ZvckFjY291bnQiLCJ0b0JlQWRkZWRUeG5zIiwic3VjY2VzcyIsIklzcmFjYXJkQW1leEJhc2VTY3JhcGVyIiwiQmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImNvbnN0cnVjdG9yIiwiYmFzZVVybCIsImNvbXBhbnlDb2RlIiwibG9naW4iLCJjcmVkZW50aWFscyIsInNldFJlcXVlc3RJbnRlcmNlcHRpb24iLCJvbiIsInJlcXVlc3QiLCJ1cmwiLCJhYm9ydCIsImNvbnRpbnVlIiwibmF2aWdhdGVUbyIsImVtaXRQcm9ncmVzcyIsIlNjcmFwZXJQcm9ncmVzc1R5cGVzIiwiTG9nZ2luZ0luIiwidmFsaWRhdGVVcmwiLCJ2YWxpZGF0ZVJlcXVlc3QiLCJpZCIsImNhcmRTdWZmaXgiLCJjYXJkNkRpZ2l0cyIsImNvdW50cnlDb2RlIiwiaWRUeXBlIiwiY2hlY2tMZXZlbCIsInZhbGlkYXRlUmVzdWx0IiwiZmV0Y2hQb3N0V2l0aGluUGFnZSIsIkhlYWRlciIsIlN0YXR1cyIsIlZhbGlkYXRlSWREYXRhQmVhbiIsIkVycm9yIiwidmFsaWRhdGVSZXR1cm5Db2RlIiwicmV0dXJuQ29kZSIsInVzZXJOYW1lIiwibG9naW5VcmwiLCJLb2RNaXNodGFtZXNoIiwiTWlzcGFyWmlodXkiLCJTaXNtYSIsInBhc3N3b3JkIiwibG9naW5SZXN1bHQiLCJMb2dpblN1Y2Nlc3MiLCJDaGFuZ2VQYXNzd29yZCIsImVycm9yVHlwZSIsIlNjcmFwZXJFcnJvclR5cGVzIiwiTG9naW5GYWlsZWQiLCJJbnZhbGlkUGFzc3dvcmQiLCJmZXRjaERhdGEiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsInN0YXJ0RGF0ZSIsInRvRGF0ZSIsIm1heCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLWlzcmFjYXJkLWFtZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJ1aWxkVXJsIGZyb20gJ2J1aWxkLXVybCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHtcbiAgQUxUX1NIRUtFTF9DVVJSRU5DWSxcbiAgU0hFS0VMX0NVUlJFTkNZLFxuICBTSEVLRUxfQ1VSUkVOQ1lfS0VZV09SRCxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmFwZXJQcm9ncmVzc1R5cGVzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IGdldEFsbE1vbnRoTW9tZW50cyBmcm9tICcuLi9oZWxwZXJzL2RhdGVzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBmZXRjaEdldFdpdGhpblBhZ2UsIGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucywgZml4SW5zdGFsbG1lbnRzIH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgcnVuU2VyaWFsIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsXG4gIHR5cGUgVHJhbnNhY3Rpb24sIHR5cGUgVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMsXG4gIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgU2NyYXBlckVycm9yVHlwZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIFNjcmFwZXJPcHRpb25zLCB0eXBlIFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgQ09VTlRSWV9DT0RFID0gJzIxMic7XG5jb25zdCBJRF9UWVBFID0gJzEnO1xuY29uc3QgSU5TVEFMTE1FTlRTX0tFWVdPUkQgPSAn16rXqdec15XXnSc7XG5cbmNvbnN0IERBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdiYXNlLWlzcmFjYXJkLWFtZXgnKTtcblxuaW50ZXJmYWNlIEV4dGVuZGVkU2NyYXBlck9wdGlvbnMgZXh0ZW5kcyBTY3JhcGVyT3B0aW9ucyB7XG4gIHNlcnZpY2VzVXJsOiBzdHJpbmc7XG4gIGNvbXBhbnlDb2RlOiBzdHJpbmc7XG59XG5cbnR5cGUgU2NyYXBlZEFjY291bnRzV2l0aEluZGV4ID0gUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25zQWNjb3VudCAmIHsgaW5kZXg6IG51bWJlciB9PjtcblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIGRlYWxTdW1UeXBlOiBzdHJpbmc7XG4gIHZvdWNoZXJOdW1iZXJSYXR6T3V0Ym91bmQ6IHN0cmluZztcbiAgdm91Y2hlck51bWJlclJhdHo6IHN0cmluZztcbiAgbW9yZUluZm8/OiBzdHJpbmc7XG4gIGRlYWxTdW1PdXRib3VuZDogYm9vbGVhbjtcbiAgY3VycmVuY3lJZDogc3RyaW5nO1xuICBjdXJyZW50UGF5bWVudEN1cnJlbmN5OiBzdHJpbmc7XG4gIGRlYWxTdW06IG51bWJlcjtcbiAgZnVsbFBheW1lbnREYXRlPzogc3RyaW5nO1xuICBmdWxsUHVyY2hhc2VEYXRlPzogc3RyaW5nO1xuICBmdWxsUHVyY2hhc2VEYXRlT3V0Ym91bmQ/OiBzdHJpbmc7XG4gIGZ1bGxTdXBwbGllck5hbWVIZWI6IHN0cmluZztcbiAgZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kOiBzdHJpbmc7XG4gIHBheW1lbnRTdW06IG51bWJlcjtcbiAgcGF5bWVudFN1bU91dGJvdW5kOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTY3JhcGVkQWNjb3VudCB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgcHJvY2Vzc2VkRGF0ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZExvZ2luVmFsaWRhdGlvbiB7XG4gIEhlYWRlcjoge1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9O1xuICBWYWxpZGF0ZUlkRGF0YUJlYW4/OiB7XG4gICAgdXNlck5hbWU/OiBzdHJpbmc7XG4gICAgcmV0dXJuQ29kZTogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZEFjY291bnRzV2l0aGluUGFnZVJlc3BvbnNlIHtcbiAgSGVhZGVyOiB7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gIH07XG4gIERhc2hib2FyZE1vbnRoQmVhbj86IHtcbiAgICBjYXJkc0NoYXJnZXM6IHtcbiAgICAgIGNhcmRJbmRleDogc3RyaW5nO1xuICAgICAgY2FyZE51bWJlcjogc3RyaW5nO1xuICAgICAgYmlsbGluZ0RhdGU6IHN0cmluZztcbiAgICB9W107XG4gIH07XG59XG5cbmludGVyZmFjZSBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnMge1xuICB0eG5Jc3JhZWw/OiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgdHhuQWJyb2FkPzogU2NyYXBlZFRyYW5zYWN0aW9uW107XG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb25EYXRhIHtcbiAgSGVhZGVyPzoge1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9O1xuICBQaXJ0ZXlJc2thXzIwNEJlYW4/OiB7XG4gICAgc2VjdG9yOiBzdHJpbmc7XG4gIH07XG4gIFxuICBDYXJkc1RyYW5zYWN0aW9uc0xpc3RCZWFuPzogUmVjb3JkPHN0cmluZywge1xuICAgIEN1cnJlbnRDYXJkVHJhbnNhY3Rpb25zOiBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnNbXTtcbiAgfT47XG59XG5cbmZ1bmN0aW9uIGdldEFjY291bnRzVXJsKHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoTW9tZW50OiBNb21lbnQpIHtcbiAgY29uc3QgYmlsbGluZ0RhdGUgPSBtb250aE1vbWVudC5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgcmV0dXJuIGJ1aWxkVXJsKHNlcnZpY2VzVXJsLCB7XG4gICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgIHJlcU5hbWU6ICdEYXNoYm9hcmRNb250aCcsXG4gICAgICBhY3Rpb25Db2RlOiAnMCcsXG4gICAgICBiaWxsaW5nRGF0ZSxcbiAgICAgIGZvcm1hdDogJ0pzb24nLFxuICAgIH0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFjY291bnRzKHBhZ2U6IFBhZ2UsIHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoTW9tZW50OiBNb21lbnQpOiBQcm9taXNlPFNjcmFwZWRBY2NvdW50W10+IHtcbiAgY29uc3QgZGF0YVVybCA9IGdldEFjY291bnRzVXJsKHNlcnZpY2VzVXJsLCBtb250aE1vbWVudCk7XG4gIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZEFjY291bnRzV2l0aGluUGFnZVJlc3BvbnNlPihwYWdlLCBkYXRhVXJsKTtcbiAgaWYgKGRhdGFSZXN1bHQgJiYgXy5nZXQoZGF0YVJlc3VsdCwgJ0hlYWRlci5TdGF0dXMnKSA9PT0gJzEnICYmIGRhdGFSZXN1bHQuRGFzaGJvYXJkTW9udGhCZWFuKSB7XG4gICAgY29uc3QgeyBjYXJkc0NoYXJnZXMgfSA9IGRhdGFSZXN1bHQuRGFzaGJvYXJkTW9udGhCZWFuO1xuICAgIGlmIChjYXJkc0NoYXJnZXMpIHtcbiAgICAgIHJldHVybiBjYXJkc0NoYXJnZXMubWFwKChjYXJkQ2hhcmdlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5kZXg6IHBhcnNlSW50KGNhcmRDaGFyZ2UuY2FyZEluZGV4LCAxMCksXG4gICAgICAgICAgYWNjb3VudE51bWJlcjogY2FyZENoYXJnZS5jYXJkTnVtYmVyLFxuICAgICAgICAgIHByb2Nlc3NlZERhdGU6IG1vbWVudChjYXJkQ2hhcmdlLmJpbGxpbmdEYXRlLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uc1VybChzZXJ2aWNlc1VybDogc3RyaW5nLCBtb250aE1vbWVudDogTW9tZW50KSB7XG4gIGNvbnN0IG1vbnRoID0gbW9udGhNb21lbnQubW9udGgoKSArIDE7XG4gIGNvbnN0IHllYXIgPSBtb250aE1vbWVudC55ZWFyKCk7XG4gIGNvbnN0IG1vbnRoU3RyID0gbW9udGggPCAxMCA/IGAwJHttb250aH1gIDogbW9udGgudG9TdHJpbmcoKTtcbiAgcmV0dXJuIGJ1aWxkVXJsKHNlcnZpY2VzVXJsLCB7XG4gICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgIHJlcU5hbWU6ICdDYXJkc1RyYW5zYWN0aW9uc0xpc3QnLFxuICAgICAgbW9udGg6IG1vbnRoU3RyLFxuICAgICAgeWVhcjogYCR7eWVhcn1gLFxuICAgICAgcmVxdWlyZWREYXRlOiAnTicsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDdXJyZW5jeShjdXJyZW5jeVN0cjogc3RyaW5nKSB7XG4gIGlmIChjdXJyZW5jeVN0ciA9PT0gU0hFS0VMX0NVUlJFTkNZX0tFWVdPUkQgfHwgY3VycmVuY3lTdHIgPT09IEFMVF9TSEVLRUxfQ1VSUkVOQ1kpIHtcbiAgICByZXR1cm4gU0hFS0VMX0NVUlJFTkNZO1xuICB9XG4gIHJldHVybiBjdXJyZW5jeVN0cjtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdGFsbG1lbnRzSW5mbyh0eG46IFNjcmFwZWRUcmFuc2FjdGlvbik6IFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0eG4ubW9yZUluZm8gfHwgIXR4bi5tb3JlSW5mby5pbmNsdWRlcyhJTlNUQUxMTUVOVFNfS0VZV09SRCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSB0eG4ubW9yZUluZm8ubWF0Y2goL1xcZCsvZyk7XG4gIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IHBhcnNlSW50KG1hdGNoZXNbMF0sIDEwKSxcbiAgICB0b3RhbDogcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHhuOiBTY3JhcGVkVHJhbnNhY3Rpb24pIHtcbiAgcmV0dXJuIGdldEluc3RhbGxtZW50c0luZm8odHhuKSA/IFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzIDogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWw7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbnModHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10sIHByb2Nlc3NlZERhdGU6IHN0cmluZyk6IFRyYW5zYWN0aW9uW10ge1xuICBjb25zdCBmaWx0ZXJlZFR4bnMgPSB0eG5zLmZpbHRlcigodHhuKSA9PiB0eG4uZGVhbFN1bVR5cGUgIT09ICcxJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eG4udm91Y2hlck51bWJlclJhdHogIT09ICcwMDAwMDAwMDAnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4bi52b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kICE9PSAnMDAwMDAwMDAwJyk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkVHhucy5tYXAoKHR4bikgPT4ge1xuICAgIGNvbnN0IGlzT3V0Ym91bmQgPSB0eG4uZGVhbFN1bU91dGJvdW5kO1xuICAgIGNvbnN0IHR4bkRhdGVTdHIgPSBpc091dGJvdW5kID8gdHhuLmZ1bGxQdXJjaGFzZURhdGVPdXRib3VuZCA6IHR4bi5mdWxsUHVyY2hhc2VEYXRlO1xuICAgIGNvbnN0IHR4bk1vbWVudCA9IG1vbWVudCh0eG5EYXRlU3RyLCBEQVRFX0ZPUk1BVCk7XG5cbiAgICBjb25zdCBjdXJyZW50UHJvY2Vzc2VkRGF0ZSA9IHR4bi5mdWxsUGF5bWVudERhdGUgP1xuICAgICAgbW9tZW50KHR4bi5mdWxsUGF5bWVudERhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpIDpcbiAgICAgIHByb2Nlc3NlZERhdGU7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbiA9IHtcbiAgICAgIHR5cGU6IGdldFRyYW5zYWN0aW9uVHlwZSh0eG4pLFxuICAgICAgaWRlbnRpZmllcjogcGFyc2VJbnQoaXNPdXRib3VuZCA/IHR4bi52b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kIDogdHhuLnZvdWNoZXJOdW1iZXJSYXR6LCAxMCksXG4gICAgICBkYXRlOiB0eG5Nb21lbnQudG9JU09TdHJpbmcoKSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IGN1cnJlbnRQcm9jZXNzZWREYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGlzT3V0Ym91bmQgPyAtdHhuLmRlYWxTdW1PdXRib3VuZCA6IC10eG4uZGVhbFN1bSxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IGNvbnZlcnRDdXJyZW5jeSh0eG4uY3VycmVudFBheW1lbnRDdXJyZW5jeSA/PyB0eG4uY3VycmVuY3lJZCksXG4gICAgICBjaGFyZ2VkQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5wYXltZW50U3VtT3V0Ym91bmQgOiAtdHhuLnBheW1lbnRTdW0sXG4gICAgICBjaGFyZ2VkQ3VycmVuY3k6IGNvbnZlcnRDdXJyZW5jeSh0eG4uY3VycmVuY3lJZCksXG4gICAgICBkZXNjcmlwdGlvbjogaXNPdXRib3VuZCA/IHR4bi5mdWxsU3VwcGxpZXJOYW1lT3V0Ym91bmQgOiB0eG4uZnVsbFN1cHBsaWVyTmFtZUhlYixcbiAgICAgIG1lbW86IHR4bi5tb3JlSW5mbyB8fCAnJyxcbiAgICAgIGluc3RhbGxtZW50czogZ2V0SW5zdGFsbG1lbnRzSW5mbyh0eG4pIHx8IHVuZGVmaW5lZCxcbiAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlLCBvcHRpb25zOiBFeHRlbmRlZFNjcmFwZXJPcHRpb25zLCBzdGFydE1vbWVudDogTW9tZW50LCBtb250aE1vbWVudDogTW9tZW50KTogUHJvbWlzZTxTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXg+IHtcbiAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBmZXRjaEFjY291bnRzKHBhZ2UsIG9wdGlvbnMuc2VydmljZXNVcmwsIG1vbnRoTW9tZW50KTtcbiAgY29uc3QgZGF0YVVybCA9IGdldFRyYW5zYWN0aW9uc1VybChvcHRpb25zLnNlcnZpY2VzVXJsLCBtb250aE1vbWVudCk7XG4gIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uRGF0YT4ocGFnZSwgZGF0YVVybCk7XG4gIGlmIChkYXRhUmVzdWx0ICYmIF8uZ2V0KGRhdGFSZXN1bHQsICdIZWFkZXIuU3RhdHVzJykgPT09ICcxJyAmJiBkYXRhUmVzdWx0LkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4pIHtcbiAgICBjb25zdCBhY2NvdW50VHhuczogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4ID0ge307XG4gICAgYWNjb3VudHMuZm9yRWFjaCgoYWNjb3VudCkgPT4ge1xuICAgICAgY29uc3QgdHhuR3JvdXBzOiBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnNbXSB8IHVuZGVmaW5lZCA9IF8uZ2V0KGRhdGFSZXN1bHQsIGBDYXJkc1RyYW5zYWN0aW9uc0xpc3RCZWFuLkluZGV4JHthY2NvdW50LmluZGV4fS5DdXJyZW50Q2FyZFRyYW5zYWN0aW9uc2ApO1xuICAgICAgaWYgKHR4bkdyb3Vwcykge1xuICAgICAgICBsZXQgYWxsVHhuczogVHJhbnNhY3Rpb25bXSA9IFtdO1xuICAgICAgICB0eG5Hcm91cHMuZm9yRWFjaCgodHhuR3JvdXApID0+IHtcbiAgICAgICAgICBpZiAodHhuR3JvdXAudHhuSXNyYWVsKSB7XG4gICAgICAgICAgICBjb25zdCB0eG5zID0gY29udmVydFRyYW5zYWN0aW9ucyh0eG5Hcm91cC50eG5Jc3JhZWwsIGFjY291bnQucHJvY2Vzc2VkRGF0ZSk7XG4gICAgICAgICAgICBhbGxUeG5zLnB1c2goLi4udHhucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eG5Hcm91cC50eG5BYnJvYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHR4bnMgPSBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bkdyb3VwLnR4bkFicm9hZCwgYWNjb3VudC5wcm9jZXNzZWREYXRlKTtcbiAgICAgICAgICAgIGFsbFR4bnMucHVzaCguLi50eG5zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzKSB7XG4gICAgICAgICAgYWxsVHhucyA9IGZpeEluc3RhbGxtZW50cyhhbGxUeG5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSkge1xuICAgICAgICAgIGFsbFR4bnMgPSBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMoYWxsVHhucywgc3RhcnRNb21lbnQsIG9wdGlvbnMuY29tYmluZUluc3RhbGxtZW50cyB8fCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWNjb3VudFR4bnNbYWNjb3VudC5hY2NvdW50TnVtYmVyXSA9IHtcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiBhY2NvdW50LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgaW5kZXg6IGFjY291bnQuaW5kZXgsXG4gICAgICAgICAgdHhuczogYWxsVHhucyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWNjb3VudFR4bnM7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXh0cmFEZXRhaWxzKHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoOiBNb21lbnQsIGFjY291bnRJbmRleDogbnVtYmVyLCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBtb2VkQ2hpdXYgPSBtb250aC5mb3JtYXQoJ01NWVlZWScpO1xuICByZXR1cm4gYnVpbGRVcmwoc2VydmljZXNVcmwsIHtcbiAgICBxdWVyeVBhcmFtczoge1xuICAgICAgcmVxTmFtZTogJ1BpcnRleUlza2FfMjA0JyxcbiAgICAgIENhcmRJbmRleDogYWNjb3VudEluZGV4LnRvU3RyaW5nKCksXG4gICAgICBzaG92YXJSYXR6OiB0cmFuc2FjdGlvbi5pZGVudGlmaWVyIS50b1N0cmluZygpLFxuICAgICAgbW9lZENoaXV2LFxuICAgIH0sXG4gIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9uKHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIG1vbnRoOiBNb21lbnQsIGFjY291bnRJbmRleDogbnVtYmVyLCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gIGNvbnN0IGRhdGFVcmwgPSBnZXRUcmFuc2FjdGlvbkV4dHJhRGV0YWlscyhvcHRpb25zLnNlcnZpY2VzVXJsLCBtb250aCwgYWNjb3VudEluZGV4LCB0cmFuc2FjdGlvbik7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uRGF0YT4ocGFnZSwgZGF0YVVybCk7XG4gIFxuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cblxuICBjb25zdCByYXdDYXRlZ29yeSA9IF8uZ2V0KGRhdGEsICdQaXJ0ZXlJc2thXzIwNEJlYW4uc2VjdG9yJykgPz8gJyc7XG4gIHJldHVybiB7XG4gICAgLi4udHJhbnNhY3Rpb24sXG4gICAgY2F0ZWdvcnk6IHJhd0NhdGVnb3J5LnRyaW0oKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9ucyhhY2NvdW50V2l0aEluZGV4OiBUcmFuc2FjdGlvbnNBY2NvdW50ICYgeyBpbmRleDogbnVtYmVyIH0sIHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIG1vbnRoOiBtb21lbnQuTW9tZW50KTogUHJvbWlzZTxUcmFuc2FjdGlvbltdPiB7XG4gIGNvbnN0IHByb21pc2VzID0gYWNjb3VudFdpdGhJbmRleC50eG5zXG4gICAgLm1hcCgodCkgPT4gZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9uKHBhZ2UsIG9wdGlvbnMsIG1vbnRoLCBhY2NvdW50V2l0aEluZGV4LmluZGV4LCB0KSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhU2NyYXBBY2NvdW50KHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIGFjY291bnRNYXA6IFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleCwgbW9udGg6IG1vbWVudC5Nb21lbnQpOiBQcm9taXNlPFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleD4ge1xuICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5rZXlzKGFjY291bnRNYXApXG4gICAgLm1hcChhc3luYyAoYSkgPT4gKHtcbiAgICAgIC4uLmFjY291bnRNYXBbYV0sXG4gICAgICB0eG5zOiBhd2FpdCBnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb25zKGFjY291bnRNYXBbYV0sIHBhZ2UsIG9wdGlvbnMsIG1vbnRoKSxcbiAgICB9KSk7XG4gIGNvbnN0IGFjY291bnRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICByZXR1cm4gYWNjb3VudHMucmVkdWNlKChtLCB4KSA9PiAoeyAuLi5tLCBbeC5hY2NvdW50TnVtYmVyXTogeCB9KSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRFeHRyYVNjcmFwKGFjY291bnRzV2l0aEluZGV4OiBTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXhbXSwgcGFnZTogUGFnZSwgb3B0aW9uczogRXh0ZW5kZWRTY3JhcGVyT3B0aW9ucywgYWxsTW9udGhzOiBtb21lbnQuTW9tZW50W10pOiBQcm9taXNlPFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleFtdPiB7XG4gIGNvbnN0IGFjdGlvbnMgPSBhY2NvdW50c1dpdGhJbmRleC5tYXAoKGEsIGkpID0+ICgpID0+IGdldEV4dHJhU2NyYXBBY2NvdW50KHBhZ2UsIG9wdGlvbnMsIGEsIGFsbE1vbnRoc1tpXSkpO1xuICByZXR1cm4gcnVuU2VyaWFsKGFjdGlvbnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFsbFRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlLCBvcHRpb25zOiBFeHRlbmRlZFNjcmFwZXJPcHRpb25zLCBzdGFydE1vbWVudDogTW9tZW50KSB7XG4gIGNvbnN0IGZ1dHVyZU1vbnRoc1RvU2NyYXBlID0gb3B0aW9ucy5mdXR1cmVNb250aHNUb1NjcmFwZSA/PyAxO1xuICBjb25zdCBhbGxNb250aHMgPSBnZXRBbGxNb250aE1vbWVudHMoc3RhcnRNb21lbnQsIGZ1dHVyZU1vbnRoc1RvU2NyYXBlKTtcbiAgY29uc3QgcmVzdWx0czogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4W10gPSBhd2FpdCBQcm9taXNlLmFsbChhbGxNb250aHMubWFwKGFzeW5jIChtb250aE1vbWVudCkgPT4ge1xuICAgIHJldHVybiBmZXRjaFRyYW5zYWN0aW9ucyhwYWdlLCBvcHRpb25zLCBzdGFydE1vbWVudCwgbW9udGhNb21lbnQpO1xuICB9KSk7XG5cbiAgY29uc3QgZmluYWxSZXN1bHQgPSBvcHRpb25zLmFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uID9cbiAgICBhd2FpdCBnZXRFeHRyYVNjcmFwKHJlc3VsdHMsIHBhZ2UsIG9wdGlvbnMsIGFsbE1vbnRocykgOiByZXN1bHRzO1xuXG4gIGNvbnN0IGNvbWJpbmVkVHhuczogUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25bXT4gPSB7fTtcblxuICBmaW5hbFJlc3VsdC5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goKGFjY291bnROdW1iZXIpID0+IHtcbiAgICAgIGxldCB0eG5zRm9yQWNjb3VudCA9IGNvbWJpbmVkVHhuc1thY2NvdW50TnVtYmVyXTtcbiAgICAgIGlmICghdHhuc0ZvckFjY291bnQpIHtcbiAgICAgICAgdHhuc0ZvckFjY291bnQgPSBbXTtcbiAgICAgICAgY29tYmluZWRUeG5zW2FjY291bnROdW1iZXJdID0gdHhuc0ZvckFjY291bnQ7XG4gICAgICB9XG4gICAgICBjb25zdCB0b0JlQWRkZWRUeG5zID0gcmVzdWx0W2FjY291bnROdW1iZXJdLnR4bnM7XG4gICAgICBjb21iaW5lZFR4bnNbYWNjb3VudE51bWJlcl0ucHVzaCguLi50b0JlQWRkZWRUeG5zKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgYWNjb3VudHMgPSBPYmplY3Qua2V5cyhjb21iaW5lZFR4bnMpLm1hcCgoYWNjb3VudE51bWJlcikgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50TnVtYmVyLFxuICAgICAgdHhuczogY29tYmluZWRUeG5zW2FjY291bnROdW1iZXJdLFxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBhY2NvdW50cyxcbiAgfTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgaWQ6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2FyZDZEaWdpdHM6IHN0cmluZyB9O1xuY2xhc3MgSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29tcGFueUNvZGU6IHN0cmluZztcblxuICBwcml2YXRlIHNlcnZpY2VzVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2NyYXBlck9wdGlvbnMsIGJhc2VVcmw6IHN0cmluZywgY29tcGFueUNvZGU6IHN0cmluZykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmNvbXBhbnlDb2RlID0gY29tcGFueUNvZGU7XG4gICAgdGhpcy5zZXJ2aWNlc1VybCA9IGAke2Jhc2VVcmx9L3NlcnZpY2VzL1Byb3h5UmVxdWVzdEhhbmRsZXIuYXNoeGA7XG4gIH1cblxuICBhc3luYyBsb2dpbihjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMucGFnZS5zZXRSZXF1ZXN0SW50ZXJjZXB0aW9uKHRydWUpO1xuICAgIHRoaXMucGFnZS5vbigncmVxdWVzdCcsIChyZXF1ZXN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC51cmwoKS5pbmNsdWRlcygnZGV0ZWN0b3ItZG9tLm1pbi5qcycpKSB7XG4gICAgICAgIGRlYnVnKCdmb3JjZSBhYm9ydCBmb3IgcmVxdWVzdCBkbyBkb3dubG9hZCBkZXRlY3Rvci1kb20ubWluLmpzIHJlc291cmNlJyk7XG4gICAgICAgIHZvaWQgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm9pZCByZXF1ZXN0LmNvbnRpbnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWJ1ZygnbmF2aWdhdGUgdG8gbG9naW4gcGFnZScpO1xuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyhgJHt0aGlzLmJhc2VVcmx9L3BlcnNvbmFsYXJlYS9Mb2dpbmApO1xuXG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9nZ2luZ0luKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlVXJsID0gYCR7dGhpcy5zZXJ2aWNlc1VybH0/cmVxTmFtZT1WYWxpZGF0ZUlkRGF0YWA7XG4gICAgY29uc3QgdmFsaWRhdGVSZXF1ZXN0ID0ge1xuICAgICAgaWQ6IGNyZWRlbnRpYWxzLmlkLFxuICAgICAgY2FyZFN1ZmZpeDogY3JlZGVudGlhbHMuY2FyZDZEaWdpdHMsXG4gICAgICBjb3VudHJ5Q29kZTogQ09VTlRSWV9DT0RFLFxuICAgICAgaWRUeXBlOiBJRF9UWVBFLFxuICAgICAgY2hlY2tMZXZlbDogJzEnLFxuICAgICAgY29tcGFueUNvZGU6IHRoaXMuY29tcGFueUNvZGUsXG4gICAgfTtcbiAgICBjb25zdCB2YWxpZGF0ZVJlc3VsdCA9IGF3YWl0IGZldGNoUG9zdFdpdGhpblBhZ2U8U2NyYXBlZExvZ2luVmFsaWRhdGlvbj4odGhpcy5wYWdlLCB2YWxpZGF0ZVVybCwgdmFsaWRhdGVSZXF1ZXN0KTtcbiAgICBpZiAoIXZhbGlkYXRlUmVzdWx0IHx8ICF2YWxpZGF0ZVJlc3VsdC5IZWFkZXIgfHwgdmFsaWRhdGVSZXN1bHQuSGVhZGVyLlN0YXR1cyAhPT0gJzEnIHx8ICF2YWxpZGF0ZVJlc3VsdC5WYWxpZGF0ZUlkRGF0YUJlYW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBlcnJvciBkdXJpbmcgbG9naW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVJldHVybkNvZGUgPSB2YWxpZGF0ZVJlc3VsdC5WYWxpZGF0ZUlkRGF0YUJlYW4ucmV0dXJuQ29kZTtcbiAgICBkZWJ1ZyhgdXNlciB2YWxpZGF0ZSB3aXRoIHJldHVybiBjb2RlICcke3ZhbGlkYXRlUmV0dXJuQ29kZX0nYCk7XG4gICAgaWYgKHZhbGlkYXRlUmV0dXJuQ29kZSA9PT0gJzEnKSB7XG4gICAgICBjb25zdCB7IHVzZXJOYW1lIH0gPSB2YWxpZGF0ZVJlc3VsdC5WYWxpZGF0ZUlkRGF0YUJlYW47XG5cbiAgICAgIGNvbnN0IGxvZ2luVXJsID0gYCR7dGhpcy5zZXJ2aWNlc1VybH0/cmVxTmFtZT1wZXJmb3JtTG9nb25JYDtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgIEtvZE1pc2h0YW1lc2g6IHVzZXJOYW1lLFxuICAgICAgICBNaXNwYXJaaWh1eTogY3JlZGVudGlhbHMuaWQsXG4gICAgICAgIFNpc21hOiBjcmVkZW50aWFscy5wYXNzd29yZCxcbiAgICAgICAgY2FyZFN1ZmZpeDogY3JlZGVudGlhbHMuY2FyZDZEaWdpdHMsXG4gICAgICAgIGNvdW50cnlDb2RlOiBDT1VOVFJZX0NPREUsXG4gICAgICAgIGlkVHlwZTogSURfVFlQRSxcbiAgICAgIH07XG4gICAgICBjb25zdCBsb2dpblJlc3VsdCA9IGF3YWl0IGZldGNoUG9zdFdpdGhpblBhZ2U8eyBzdGF0dXM6IHN0cmluZyB9Pih0aGlzLnBhZ2UsIGxvZ2luVXJsLCByZXF1ZXN0KTtcbiAgICAgIGRlYnVnKGB1c2VyIGxvZ2luIHdpdGggc3RhdHVzICcke2xvZ2luUmVzdWx0Py5zdGF0dXN9J2ApO1xuXG4gICAgICBpZiAobG9naW5SZXN1bHQgJiYgbG9naW5SZXN1bHQuc3RhdHVzID09PSAnMScpIHtcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5TdWNjZXNzKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobG9naW5SZXN1bHQgJiYgbG9naW5SZXN1bHQuc3RhdHVzID09PSAnMycpIHtcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuQ2hhbmdlUGFzc3dvcmQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuQ2hhbmdlUGFzc3dvcmQsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2luRmFpbGVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkludmFsaWRQYXNzd29yZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlUmV0dXJuQ29kZSA9PT0gJzQnKSB7XG4gICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5DaGFuZ2VQYXNzd29yZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5DaGFuZ2VQYXNzd29yZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5GYWlsZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuSW52YWxpZFBhc3N3b3JkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KGRlZmF1bHRTdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuXG4gICAgcmV0dXJuIGZldGNoQWxsVHJhbnNhY3Rpb25zKHRoaXMucGFnZSwge1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgc2VydmljZXNVcmw6IHRoaXMuc2VydmljZXNVcmwsXG4gICAgICBjb21wYW55Q29kZTogdGhpcy5jb21wYW55Q29kZSxcbiAgICB9LCBzdGFydE1vbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFLQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxRQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFWLE9BQUE7QUFLQSxJQUFBVyx1QkFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksT0FBQSxHQUFBWixPQUFBO0FBQTZDLFNBQUFELHVCQUFBYyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FB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
|
|
330
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVpbGRVcmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbW9tZW50IiwiX2NvbnN0YW50cyIsIl9kZWZpbml0aW9ucyIsIl9kYXRlcyIsIl9kZWJ1ZyIsIl9mZXRjaCIsIl90cmFuc2FjdGlvbnMiLCJfd2FpdGluZyIsIl90cmFuc2FjdGlvbnMyIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJfZXJyb3JzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkNPVU5UUllfQ09ERSIsIklEX1RZUEUiLCJJTlNUQUxMTUVOVFNfS0VZV09SRCIsIkRBVEVfRk9STUFUIiwiZGVidWciLCJnZXREZWJ1ZyIsImdldEFjY291bnRzVXJsIiwic2VydmljZXNVcmwiLCJtb250aE1vbWVudCIsImJpbGxpbmdEYXRlIiwiZm9ybWF0IiwiYnVpbGRVcmwiLCJxdWVyeVBhcmFtcyIsInJlcU5hbWUiLCJhY3Rpb25Db2RlIiwiZmV0Y2hBY2NvdW50cyIsInBhZ2UiLCJkYXRhVXJsIiwiZGF0YVJlc3VsdCIsImZldGNoR2V0V2l0aGluUGFnZSIsIl8iLCJnZXQiLCJEYXNoYm9hcmRNb250aEJlYW4iLCJjYXJkc0NoYXJnZXMiLCJtYXAiLCJjYXJkQ2hhcmdlIiwiaW5kZXgiLCJwYXJzZUludCIsImNhcmRJbmRleCIsImFjY291bnROdW1iZXIiLCJjYXJkTnVtYmVyIiwicHJvY2Vzc2VkRGF0ZSIsIm1vbWVudCIsInRvSVNPU3RyaW5nIiwiZ2V0VHJhbnNhY3Rpb25zVXJsIiwibW9udGgiLCJ5ZWFyIiwibW9udGhTdHIiLCJ0b1N0cmluZyIsInJlcXVpcmVkRGF0ZSIsImNvbnZlcnRDdXJyZW5jeSIsImN1cnJlbmN5U3RyIiwiU0hFS0VMX0NVUlJFTkNZX0tFWVdPUkQiLCJBTFRfU0hFS0VMX0NVUlJFTkNZIiwiU0hFS0VMX0NVUlJFTkNZIiwiZ2V0SW5zdGFsbG1lbnRzSW5mbyIsInR4biIsIm1vcmVJbmZvIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWQiLCJtYXRjaGVzIiwibWF0Y2giLCJudW1iZXIiLCJ0b3RhbCIsImdldFRyYW5zYWN0aW9uVHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJJbnN0YWxsbWVudHMiLCJOb3JtYWwiLCJjb252ZXJ0VHJhbnNhY3Rpb25zIiwidHhucyIsImZpbHRlcmVkVHhucyIsImRlYWxTdW1UeXBlIiwidm91Y2hlck51bWJlclJhdHoiLCJ2b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kIiwiX3R4biRjdXJyZW50UGF5bWVudEN1IiwiaXNPdXRib3VuZCIsImRlYWxTdW1PdXRib3VuZCIsInR4bkRhdGVTdHIiLCJmdWxsUHVyY2hhc2VEYXRlT3V0Ym91bmQiLCJmdWxsUHVyY2hhc2VEYXRlIiwidHhuTW9tZW50IiwiY3VycmVudFByb2Nlc3NlZERhdGUiLCJmdWxsUGF5bWVudERhdGUiLCJyZXN1bHQiLCJ0eXBlIiwiaWRlbnRpZmllciIsImRhdGUiLCJvcmlnaW5hbEFtb3VudCIsImRlYWxTdW0iLCJvcmlnaW5hbEN1cnJlbmN5IiwiY3VycmVudFBheW1lbnRDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJjaGFyZ2VkQW1vdW50IiwicGF5bWVudFN1bU91dGJvdW5kIiwicGF5bWVudFN1bSIsImNoYXJnZWRDdXJyZW5jeSIsImRlc2NyaXB0aW9uIiwiZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kIiwiZnVsbFN1cHBsaWVyTmFtZUhlYiIsIm1lbW8iLCJpbnN0YWxsbWVudHMiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwiZmV0Y2hUcmFuc2FjdGlvbnMiLCJvcHRpb25zIiwiY29tcGFueVNlcnZpY2VPcHRpb25zIiwic3RhcnRNb21lbnQiLCJhY2NvdW50cyIsIkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4iLCJhY2NvdW50VHhucyIsImFjY291bnQiLCJ0eG5Hcm91cHMiLCJfb3B0aW9ucyRvdXRwdXREYXRhJGUiLCJfb3B0aW9ucyRvdXRwdXREYXRhIiwiYWxsVHhucyIsInR4bkdyb3VwIiwidHhuSXNyYWVsIiwidHhuQWJyb2FkIiwiY29tYmluZUluc3RhbGxtZW50cyIsImZpeEluc3RhbGxtZW50cyIsIm91dHB1dERhdGEiLCJlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUiLCJmaWx0ZXJPbGRUcmFuc2FjdGlvbnMiLCJnZXRUcmFuc2FjdGlvbkV4dHJhRGV0YWlscyIsImFjY291bnRJbmRleCIsInRyYW5zYWN0aW9uIiwibW9lZENoaXV2IiwiQ2FyZEluZGV4Iiwic2hvdmFyUmF0eiIsImdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbiIsIl8kZ2V0IiwiZGF0YSIsInJhd0NhdGVnb3J5IiwiY2F0ZWdvcnkiLCJ0cmltIiwiZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9ucyIsImFjY291bnRXaXRoSW5kZXgiLCJwcm9taXNlcyIsIlByb21pc2UiLCJhbGwiLCJnZXRFeHRyYVNjcmFwQWNjb3VudCIsImFjY291bnRNYXAiLCJhIiwicmVkdWNlIiwibSIsIngiLCJnZXRFeHRyYVNjcmFwIiwiYWNjb3VudHNXaXRoSW5kZXgiLCJhbGxNb250aHMiLCJhY3Rpb25zIiwicnVuU2VyaWFsIiwiZmV0Y2hBbGxUcmFuc2FjdGlvbnMiLCJfb3B0aW9ucyRmdXR1cmVNb250aHMiLCJmdXR1cmVNb250aHNUb1NjcmFwZSIsImdldEFsbE1vbnRoTW9tZW50cyIsInJlc3VsdHMiLCJmaW5hbFJlc3VsdCIsImFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uIiwiY29tYmluZWRUeG5zIiwidHhuc0ZvckFjY291bnQiLCJ0b0JlQWRkZWRUeG5zIiwic3VjY2VzcyIsIklzcmFjYXJkQW1leEJhc2VTY3JhcGVyIiwiQmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImNvbnN0cnVjdG9yIiwiYmFzZVVybCIsImNvbXBhbnlDb2RlIiwibG9naW4iLCJjcmVkZW50aWFscyIsInNldFJlcXVlc3RJbnRlcmNlcHRpb24iLCJvbiIsInJlcXVlc3QiLCJ1cmwiLCJhYm9ydCIsImNvbnRpbnVlIiwibmF2aWdhdGVUbyIsImVtaXRQcm9ncmVzcyIsIlNjcmFwZXJQcm9ncmVzc1R5cGVzIiwiTG9nZ2luZ0luIiwidmFsaWRhdGVVcmwiLCJ2YWxpZGF0ZVJlcXVlc3QiLCJpZCIsImNhcmRTdWZmaXgiLCJjYXJkNkRpZ2l0cyIsImNvdW50cnlDb2RlIiwiaWRUeXBlIiwiY2hlY2tMZXZlbCIsInZhbGlkYXRlUmVzdWx0IiwiZmV0Y2hQb3N0V2l0aGluUGFnZSIsIkhlYWRlciIsIlN0YXR1cyIsIlZhbGlkYXRlSWREYXRhQmVhbiIsIkVycm9yIiwidmFsaWRhdGVSZXR1cm5Db2RlIiwicmV0dXJuQ29kZSIsInVzZXJOYW1lIiwibG9naW5VcmwiLCJLb2RNaXNodGFtZXNoIiwiTWlzcGFyWmlodXkiLCJTaXNtYSIsInBhc3N3b3JkIiwibG9naW5SZXN1bHQiLCJMb2dpblN1Y2Nlc3MiLCJDaGFuZ2VQYXNzd29yZCIsImVycm9yVHlwZSIsIlNjcmFwZXJFcnJvclR5cGVzIiwiTG9naW5GYWlsZWQiLCJJbnZhbGlkUGFzc3dvcmQiLCJmZXRjaERhdGEiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsInN0YXJ0RGF0ZSIsInRvRGF0ZSIsIm1heCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLWlzcmFjYXJkLWFtZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJ1aWxkVXJsIGZyb20gJ2J1aWxkLXVybCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHtcbiAgQUxUX1NIRUtFTF9DVVJSRU5DWSxcbiAgU0hFS0VMX0NVUlJFTkNZLFxuICBTSEVLRUxfQ1VSUkVOQ1lfS0VZV09SRCxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmFwZXJQcm9ncmVzc1R5cGVzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IGdldEFsbE1vbnRoTW9tZW50cyBmcm9tICcuLi9oZWxwZXJzL2RhdGVzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBmZXRjaEdldFdpdGhpblBhZ2UsIGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucywgZml4SW5zdGFsbG1lbnRzIH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgcnVuU2VyaWFsIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsXG4gIHR5cGUgVHJhbnNhY3Rpb24sIHR5cGUgVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMsXG4gIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgU2NyYXBlckVycm9yVHlwZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIFNjcmFwZXJPcHRpb25zLCB0eXBlIFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgQ09VTlRSWV9DT0RFID0gJzIxMic7XG5jb25zdCBJRF9UWVBFID0gJzEnO1xuY29uc3QgSU5TVEFMTE1FTlRTX0tFWVdPUkQgPSAn16rXqdec15XXnSc7XG5cbmNvbnN0IERBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdiYXNlLWlzcmFjYXJkLWFtZXgnKTtcblxudHlwZSBDb21wYW55U2VydmljZU9wdGlvbnMgPSB7XG4gIHNlcnZpY2VzVXJsOiBzdHJpbmc7XG4gIGNvbXBhbnlDb2RlOiBzdHJpbmc7XG59O1xuXG50eXBlIFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleCA9IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uc0FjY291bnQgJiB7IGluZGV4OiBudW1iZXIgfT47XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBkZWFsU3VtVHlwZTogc3RyaW5nO1xuICB2b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kOiBzdHJpbmc7XG4gIHZvdWNoZXJOdW1iZXJSYXR6OiBzdHJpbmc7XG4gIG1vcmVJbmZvPzogc3RyaW5nO1xuICBkZWFsU3VtT3V0Ym91bmQ6IGJvb2xlYW47XG4gIGN1cnJlbmN5SWQ6IHN0cmluZztcbiAgY3VycmVudFBheW1lbnRDdXJyZW5jeTogc3RyaW5nO1xuICBkZWFsU3VtOiBudW1iZXI7XG4gIGZ1bGxQYXltZW50RGF0ZT86IHN0cmluZztcbiAgZnVsbFB1cmNoYXNlRGF0ZT86IHN0cmluZztcbiAgZnVsbFB1cmNoYXNlRGF0ZU91dGJvdW5kPzogc3RyaW5nO1xuICBmdWxsU3VwcGxpZXJOYW1lSGViOiBzdHJpbmc7XG4gIGZ1bGxTdXBwbGllck5hbWVPdXRib3VuZDogc3RyaW5nO1xuICBwYXltZW50U3VtOiBudW1iZXI7XG4gIHBheW1lbnRTdW1PdXRib3VuZDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZEFjY291bnQge1xuICBpbmRleDogbnVtYmVyO1xuICBhY2NvdW50TnVtYmVyOiBzdHJpbmc7XG4gIHByb2Nlc3NlZERhdGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRMb2dpblZhbGlkYXRpb24ge1xuICBIZWFkZXI6IHtcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgfTtcbiAgVmFsaWRhdGVJZERhdGFCZWFuPzoge1xuICAgIHVzZXJOYW1lPzogc3RyaW5nO1xuICAgIHJldHVybkNvZGU6IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRBY2NvdW50c1dpdGhpblBhZ2VSZXNwb25zZSB7XG4gIEhlYWRlcjoge1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9O1xuICBEYXNoYm9hcmRNb250aEJlYW4/OiB7XG4gICAgY2FyZHNDaGFyZ2VzOiB7XG4gICAgICBjYXJkSW5kZXg6IHN0cmluZztcbiAgICAgIGNhcmROdW1iZXI6IHN0cmluZztcbiAgICAgIGJpbGxpbmdEYXRlOiBzdHJpbmc7XG4gICAgfVtdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZEN1cnJlbnRDYXJkVHJhbnNhY3Rpb25zIHtcbiAgdHhuSXNyYWVsPzogU2NyYXBlZFRyYW5zYWN0aW9uW107XG4gIHR4bkFicm9hZD86IFNjcmFwZWRUcmFuc2FjdGlvbltdO1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uRGF0YSB7XG4gIEhlYWRlcj86IHtcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgfTtcbiAgUGlydGV5SXNrYV8yMDRCZWFuPzoge1xuICAgIHNlY3Rvcjogc3RyaW5nO1xuICB9O1xuICBcbiAgQ2FyZHNUcmFuc2FjdGlvbnNMaXN0QmVhbj86IFJlY29yZDxzdHJpbmcsIHtcbiAgICBDdXJyZW50Q2FyZFRyYW5zYWN0aW9uczogU2NyYXBlZEN1cnJlbnRDYXJkVHJhbnNhY3Rpb25zW107XG4gIH0+O1xufVxuXG5mdW5jdGlvbiBnZXRBY2NvdW50c1VybChzZXJ2aWNlc1VybDogc3RyaW5nLCBtb250aE1vbWVudDogTW9tZW50KSB7XG4gIGNvbnN0IGJpbGxpbmdEYXRlID0gbW9udGhNb21lbnQuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIHJldHVybiBidWlsZFVybChzZXJ2aWNlc1VybCwge1xuICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICByZXFOYW1lOiAnRGFzaGJvYXJkTW9udGgnLFxuICAgICAgYWN0aW9uQ29kZTogJzAnLFxuICAgICAgYmlsbGluZ0RhdGUsXG4gICAgICBmb3JtYXQ6ICdKc29uJyxcbiAgICB9LFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBY2NvdW50cyhwYWdlOiBQYWdlLCBzZXJ2aWNlc1VybDogc3RyaW5nLCBtb250aE1vbWVudDogTW9tZW50KTogUHJvbWlzZTxTY3JhcGVkQWNjb3VudFtdPiB7XG4gIGNvbnN0IGRhdGFVcmwgPSBnZXRBY2NvdW50c1VybChzZXJ2aWNlc1VybCwgbW9udGhNb21lbnQpO1xuICBjb25zdCBkYXRhUmVzdWx0ID0gYXdhaXQgZmV0Y2hHZXRXaXRoaW5QYWdlPFNjcmFwZWRBY2NvdW50c1dpdGhpblBhZ2VSZXNwb25zZT4ocGFnZSwgZGF0YVVybCk7XG4gIGlmIChkYXRhUmVzdWx0ICYmIF8uZ2V0KGRhdGFSZXN1bHQsICdIZWFkZXIuU3RhdHVzJykgPT09ICcxJyAmJiBkYXRhUmVzdWx0LkRhc2hib2FyZE1vbnRoQmVhbikge1xuICAgIGNvbnN0IHsgY2FyZHNDaGFyZ2VzIH0gPSBkYXRhUmVzdWx0LkRhc2hib2FyZE1vbnRoQmVhbjtcbiAgICBpZiAoY2FyZHNDaGFyZ2VzKSB7XG4gICAgICByZXR1cm4gY2FyZHNDaGFyZ2VzLm1hcCgoY2FyZENoYXJnZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluZGV4OiBwYXJzZUludChjYXJkQ2hhcmdlLmNhcmRJbmRleCwgMTApLFxuICAgICAgICAgIGFjY291bnROdW1iZXI6IGNhcmRDaGFyZ2UuY2FyZE51bWJlcixcbiAgICAgICAgICBwcm9jZXNzZWREYXRlOiBtb21lbnQoY2FyZENoYXJnZS5iaWxsaW5nRGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvbnNVcmwoc2VydmljZXNVcmw6IHN0cmluZywgbW9udGhNb21lbnQ6IE1vbWVudCkge1xuICBjb25zdCBtb250aCA9IG1vbnRoTW9tZW50Lm1vbnRoKCkgKyAxO1xuICBjb25zdCB5ZWFyID0gbW9udGhNb21lbnQueWVhcigpO1xuICBjb25zdCBtb250aFN0ciA9IG1vbnRoIDwgMTAgPyBgMCR7bW9udGh9YCA6IG1vbnRoLnRvU3RyaW5nKCk7XG4gIHJldHVybiBidWlsZFVybChzZXJ2aWNlc1VybCwge1xuICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICByZXFOYW1lOiAnQ2FyZHNUcmFuc2FjdGlvbnNMaXN0JyxcbiAgICAgIG1vbnRoOiBtb250aFN0cixcbiAgICAgIHllYXI6IGAke3llYXJ9YCxcbiAgICAgIHJlcXVpcmVkRGF0ZTogJ04nLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Q3VycmVuY3koY3VycmVuY3lTdHI6IHN0cmluZykge1xuICBpZiAoY3VycmVuY3lTdHIgPT09IFNIRUtFTF9DVVJSRU5DWV9LRVlXT1JEIHx8IGN1cnJlbmN5U3RyID09PSBBTFRfU0hFS0VMX0NVUlJFTkNZKSB7XG4gICAgcmV0dXJuIFNIRUtFTF9DVVJSRU5DWTtcbiAgfVxuICByZXR1cm4gY3VycmVuY3lTdHI7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RhbGxtZW50c0luZm8odHhuOiBTY3JhcGVkVHJhbnNhY3Rpb24pOiBUcmFuc2FjdGlvbkluc3RhbGxtZW50cyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdHhuLm1vcmVJbmZvIHx8ICF0eG4ubW9yZUluZm8uaW5jbHVkZXMoSU5TVEFMTE1FTlRTX0tFWVdPUkQpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gdHhuLm1vcmVJbmZvLm1hdGNoKC9cXGQrL2cpO1xuICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBwYXJzZUludChtYXRjaGVzWzBdLCAxMCksXG4gICAgdG90YWw6IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25UeXBlKHR4bjogU2NyYXBlZFRyYW5zYWN0aW9uKSB7XG4gIHJldHVybiBnZXRJbnN0YWxsbWVudHNJbmZvKHR4bikgPyBUcmFuc2FjdGlvblR5cGVzLkluc3RhbGxtZW50cyA6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdLCBwcm9jZXNzZWREYXRlOiBzdHJpbmcpOiBUcmFuc2FjdGlvbltdIHtcbiAgY29uc3QgZmlsdGVyZWRUeG5zID0gdHhucy5maWx0ZXIoKHR4bikgPT4gdHhuLmRlYWxTdW1UeXBlICE9PSAnMScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhuLnZvdWNoZXJOdW1iZXJSYXR6ICE9PSAnMDAwMDAwMDAwJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eG4udm91Y2hlck51bWJlclJhdHpPdXRib3VuZCAhPT0gJzAwMDAwMDAwMCcpO1xuXG4gIHJldHVybiBmaWx0ZXJlZFR4bnMubWFwKCh0eG4pID0+IHtcbiAgICBjb25zdCBpc091dGJvdW5kID0gdHhuLmRlYWxTdW1PdXRib3VuZDtcbiAgICBjb25zdCB0eG5EYXRlU3RyID0gaXNPdXRib3VuZCA/IHR4bi5mdWxsUHVyY2hhc2VEYXRlT3V0Ym91bmQgOiB0eG4uZnVsbFB1cmNoYXNlRGF0ZTtcbiAgICBjb25zdCB0eG5Nb21lbnQgPSBtb21lbnQodHhuRGF0ZVN0ciwgREFURV9GT1JNQVQpO1xuXG4gICAgY29uc3QgY3VycmVudFByb2Nlc3NlZERhdGUgPSB0eG4uZnVsbFBheW1lbnREYXRlID9cbiAgICAgIG1vbWVudCh0eG4uZnVsbFBheW1lbnREYXRlLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSA6XG4gICAgICBwcm9jZXNzZWREYXRlO1xuICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb24gPSB7XG4gICAgICB0eXBlOiBnZXRUcmFuc2FjdGlvblR5cGUodHhuKSxcbiAgICAgIGlkZW50aWZpZXI6IHBhcnNlSW50KGlzT3V0Ym91bmQgPyB0eG4udm91Y2hlck51bWJlclJhdHpPdXRib3VuZCA6IHR4bi52b3VjaGVyTnVtYmVyUmF0eiwgMTApLFxuICAgICAgZGF0ZTogdHhuTW9tZW50LnRvSVNPU3RyaW5nKCksXG4gICAgICBwcm9jZXNzZWREYXRlOiBjdXJyZW50UHJvY2Vzc2VkRGF0ZSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5kZWFsU3VtT3V0Ym91bmQgOiAtdHhuLmRlYWxTdW0sXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBjb252ZXJ0Q3VycmVuY3kodHhuLmN1cnJlbnRQYXltZW50Q3VycmVuY3kgPz8gdHhuLmN1cnJlbmN5SWQpLFxuICAgICAgY2hhcmdlZEFtb3VudDogaXNPdXRib3VuZCA/IC10eG4ucGF5bWVudFN1bU91dGJvdW5kIDogLXR4bi5wYXltZW50U3VtLFxuICAgICAgY2hhcmdlZEN1cnJlbmN5OiBjb252ZXJ0Q3VycmVuY3kodHhuLmN1cnJlbmN5SWQpLFxuICAgICAgZGVzY3JpcHRpb246IGlzT3V0Ym91bmQgPyB0eG4uZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kIDogdHhuLmZ1bGxTdXBwbGllck5hbWVIZWIsXG4gICAgICBtZW1vOiB0eG4ubW9yZUluZm8gfHwgJycsXG4gICAgICBpbnN0YWxsbWVudHM6IGdldEluc3RhbGxtZW50c0luZm8odHhuKSB8fCB1bmRlZmluZWQsXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgb3B0aW9uczogU2NyYXBlck9wdGlvbnMsIGNvbXBhbnlTZXJ2aWNlT3B0aW9uczpDb21wYW55U2VydmljZU9wdGlvbnMsIHN0YXJ0TW9tZW50OiBNb21lbnQsIG1vbnRoTW9tZW50OiBNb21lbnQpOiBQcm9taXNlPFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleD4ge1xuICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IGZldGNoQWNjb3VudHMocGFnZSwgY29tcGFueVNlcnZpY2VPcHRpb25zLnNlcnZpY2VzVXJsLCBtb250aE1vbWVudCk7XG4gIGNvbnN0IGRhdGFVcmwgPSBnZXRUcmFuc2FjdGlvbnNVcmwoY29tcGFueVNlcnZpY2VPcHRpb25zLnNlcnZpY2VzVXJsLCBtb250aE1vbWVudCk7XG4gIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uRGF0YT4ocGFnZSwgZGF0YVVybCk7XG4gIGlmIChkYXRhUmVzdWx0ICYmIF8uZ2V0KGRhdGFSZXN1bHQsICdIZWFkZXIuU3RhdHVzJykgPT09ICcxJyAmJiBkYXRhUmVzdWx0LkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4pIHtcbiAgICBjb25zdCBhY2NvdW50VHhuczogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4ID0ge307XG4gICAgYWNjb3VudHMuZm9yRWFjaCgoYWNjb3VudCkgPT4ge1xuICAgICAgY29uc3QgdHhuR3JvdXBzOiBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnNbXSB8IHVuZGVmaW5lZCA9IF8uZ2V0KGRhdGFSZXN1bHQsIGBDYXJkc1RyYW5zYWN0aW9uc0xpc3RCZWFuLkluZGV4JHthY2NvdW50LmluZGV4fS5DdXJyZW50Q2FyZFRyYW5zYWN0aW9uc2ApO1xuICAgICAgaWYgKHR4bkdyb3Vwcykge1xuICAgICAgICBsZXQgYWxsVHhuczogVHJhbnNhY3Rpb25bXSA9IFtdO1xuICAgICAgICB0eG5Hcm91cHMuZm9yRWFjaCgodHhuR3JvdXApID0+IHtcbiAgICAgICAgICBpZiAodHhuR3JvdXAudHhuSXNyYWVsKSB7XG4gICAgICAgICAgICBjb25zdCB0eG5zID0gY29udmVydFRyYW5zYWN0aW9ucyh0eG5Hcm91cC50eG5Jc3JhZWwsIGFjY291bnQucHJvY2Vzc2VkRGF0ZSk7XG4gICAgICAgICAgICBhbGxUeG5zLnB1c2goLi4udHhucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eG5Hcm91cC50eG5BYnJvYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHR4bnMgPSBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bkdyb3VwLnR4bkFicm9hZCwgYWNjb3VudC5wcm9jZXNzZWREYXRlKTtcbiAgICAgICAgICAgIGFsbFR4bnMucHVzaCguLi50eG5zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzKSB7XG4gICAgICAgICAgYWxsVHhucyA9IGZpeEluc3RhbGxtZW50cyhhbGxUeG5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSkge1xuICAgICAgICAgIGFsbFR4bnMgPSBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMoYWxsVHhucywgc3RhcnRNb21lbnQsIG9wdGlvbnMuY29tYmluZUluc3RhbGxtZW50cyB8fCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWNjb3VudFR4bnNbYWNjb3VudC5hY2NvdW50TnVtYmVyXSA9IHtcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiBhY2NvdW50LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgaW5kZXg6IGFjY291bnQuaW5kZXgsXG4gICAgICAgICAgdHhuczogYWxsVHhucyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWNjb3VudFR4bnM7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXh0cmFEZXRhaWxzKHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoOiBNb21lbnQsIGFjY291bnRJbmRleDogbnVtYmVyLCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBtb2VkQ2hpdXYgPSBtb250aC5mb3JtYXQoJ01NWVlZWScpO1xuICByZXR1cm4gYnVpbGRVcmwoc2VydmljZXNVcmwsIHtcbiAgICBxdWVyeVBhcmFtczoge1xuICAgICAgcmVxTmFtZTogJ1BpcnRleUlza2FfMjA0JyxcbiAgICAgIENhcmRJbmRleDogYWNjb3VudEluZGV4LnRvU3RyaW5nKCksXG4gICAgICBzaG92YXJSYXR6OiB0cmFuc2FjdGlvbi5pZGVudGlmaWVyIS50b1N0cmluZygpLFxuICAgICAgbW9lZENoaXV2LFxuICAgIH0sXG4gIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9uKHBhZ2U6IFBhZ2UsIG9wdGlvbnM6Q29tcGFueVNlcnZpY2VPcHRpb25zLCBtb250aDogTW9tZW50LCBhY2NvdW50SW5kZXg6IG51bWJlciwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICBjb25zdCBkYXRhVXJsID0gZ2V0VHJhbnNhY3Rpb25FeHRyYURldGFpbHMob3B0aW9ucy5zZXJ2aWNlc1VybCwgbW9udGgsIGFjY291bnRJbmRleCwgdHJhbnNhY3Rpb24pO1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hHZXRXaXRoaW5QYWdlPFNjcmFwZWRUcmFuc2FjdGlvbkRhdGE+KHBhZ2UsIGRhdGFVcmwpO1xuICBcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgY29uc3QgcmF3Q2F0ZWdvcnkgPSBfLmdldChkYXRhLCAnUGlydGV5SXNrYV8yMDRCZWFuLnNlY3RvcicpID8/ICcnO1xuICByZXR1cm4ge1xuICAgIC4uLnRyYW5zYWN0aW9uLFxuICAgIGNhdGVnb3J5OiByYXdDYXRlZ29yeS50cmltKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbnMoYWNjb3VudFdpdGhJbmRleDogVHJhbnNhY3Rpb25zQWNjb3VudCAmIHsgaW5kZXg6IG51bWJlciB9LCBwYWdlOiBQYWdlLCBvcHRpb25zOiBDb21wYW55U2VydmljZU9wdGlvbnMsIG1vbnRoOiBtb21lbnQuTW9tZW50KTogUHJvbWlzZTxUcmFuc2FjdGlvbltdPiB7XG4gIGNvbnN0IHByb21pc2VzID0gYWNjb3VudFdpdGhJbmRleC50eG5zXG4gICAgLm1hcCgodCkgPT4gZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9uKHBhZ2UsIG9wdGlvbnMsIG1vbnRoLCBhY2NvdW50V2l0aEluZGV4LmluZGV4LCB0KSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhU2NyYXBBY2NvdW50KHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IENvbXBhbnlTZXJ2aWNlT3B0aW9ucywgYWNjb3VudE1hcDogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4LCBtb250aDogbW9tZW50Lk1vbWVudCk6IFByb21pc2U8U2NyYXBlZEFjY291bnRzV2l0aEluZGV4PiB7XG4gIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoYWNjb3VudE1hcClcbiAgICAubWFwKGFzeW5jIChhKSA9PiAoe1xuICAgICAgLi4uYWNjb3VudE1hcFthXSxcbiAgICAgIHR4bnM6IGF3YWl0IGdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbnMoYWNjb3VudE1hcFthXSwgcGFnZSwgb3B0aW9ucywgbW9udGgpLFxuICAgIH0pKTtcbiAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gIHJldHVybiBhY2NvdW50cy5yZWR1Y2UoKG0sIHgpID0+ICh7IC4uLm0sIFt4LmFjY291bnROdW1iZXJdOiB4IH0pLCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldEV4dHJhU2NyYXAoYWNjb3VudHNXaXRoSW5kZXg6IFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleFtdLCBwYWdlOiBQYWdlLCBvcHRpb25zOiBDb21wYW55U2VydmljZU9wdGlvbnMsIGFsbE1vbnRoczogbW9tZW50Lk1vbWVudFtdKTogUHJvbWlzZTxTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXhbXT4ge1xuICBjb25zdCBhY3Rpb25zID0gYWNjb3VudHNXaXRoSW5kZXgubWFwKChhLCBpKSA9PiAoKSA9PiBnZXRFeHRyYVNjcmFwQWNjb3VudChwYWdlLCBvcHRpb25zLCBhLCBhbGxNb250aHNbaV0pKTtcbiAgcmV0dXJuIHJ1blNlcmlhbChhY3Rpb25zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbGxUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgb3B0aW9uczogU2NyYXBlck9wdGlvbnMsIGNvbXBhbnlTZXJ2aWNlT3B0aW9uczpDb21wYW55U2VydmljZU9wdGlvbnMsIHN0YXJ0TW9tZW50OiBNb21lbnQpIHtcbiAgY29uc3QgZnV0dXJlTW9udGhzVG9TY3JhcGUgPSBvcHRpb25zLmZ1dHVyZU1vbnRoc1RvU2NyYXBlID8/IDE7XG4gIGNvbnN0IGFsbE1vbnRocyA9IGdldEFsbE1vbnRoTW9tZW50cyhzdGFydE1vbWVudCwgZnV0dXJlTW9udGhzVG9TY3JhcGUpO1xuICBjb25zdCByZXN1bHRzOiBTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXhbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFsbE1vbnRocy5tYXAoYXN5bmMgKG1vbnRoTW9tZW50KSA9PiB7XG4gICAgcmV0dXJuIGZldGNoVHJhbnNhY3Rpb25zKHBhZ2UsIG9wdGlvbnMsIGNvbXBhbnlTZXJ2aWNlT3B0aW9ucywgc3RhcnRNb21lbnQsIG1vbnRoTW9tZW50KTtcbiAgfSkpO1xuXG4gIGNvbnN0IGZpbmFsUmVzdWx0ID0gb3B0aW9ucy5hZGRpdGlvbmFsVHJhbnNhY3Rpb25JbmZvcm1hdGlvbiA/XG4gICAgYXdhaXQgZ2V0RXh0cmFTY3JhcChyZXN1bHRzLCBwYWdlLCBjb21wYW55U2VydmljZU9wdGlvbnMsIGFsbE1vbnRocykgOiByZXN1bHRzO1xuXG4gIGNvbnN0IGNvbWJpbmVkVHhuczogUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25bXT4gPSB7fTtcblxuICBmaW5hbFJlc3VsdC5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goKGFjY291bnROdW1iZXIpID0+IHtcbiAgICAgIGxldCB0eG5zRm9yQWNjb3VudCA9IGNvbWJpbmVkVHhuc1thY2NvdW50TnVtYmVyXTtcbiAgICAgIGlmICghdHhuc0ZvckFjY291bnQpIHtcbiAgICAgICAgdHhuc0ZvckFjY291bnQgPSBbXTtcbiAgICAgICAgY29tYmluZWRUeG5zW2FjY291bnROdW1iZXJdID0gdHhuc0ZvckFjY291bnQ7XG4gICAgICB9XG4gICAgICBjb25zdCB0b0JlQWRkZWRUeG5zID0gcmVzdWx0W2FjY291bnROdW1iZXJdLnR4bnM7XG4gICAgICBjb21iaW5lZFR4bnNbYWNjb3VudE51bWJlcl0ucHVzaCguLi50b0JlQWRkZWRUeG5zKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgYWNjb3VudHMgPSBPYmplY3Qua2V5cyhjb21iaW5lZFR4bnMpLm1hcCgoYWNjb3VudE51bWJlcikgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50TnVtYmVyLFxuICAgICAgdHhuczogY29tYmluZWRUeG5zW2FjY291bnROdW1iZXJdLFxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBhY2NvdW50cyxcbiAgfTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgaWQ6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2FyZDZEaWdpdHM6IHN0cmluZyB9O1xuY2xhc3MgSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29tcGFueUNvZGU6IHN0cmluZztcblxuICBwcml2YXRlIHNlcnZpY2VzVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2NyYXBlck9wdGlvbnMsIGJhc2VVcmw6IHN0cmluZywgY29tcGFueUNvZGU6IHN0cmluZykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmNvbXBhbnlDb2RlID0gY29tcGFueUNvZGU7XG4gICAgdGhpcy5zZXJ2aWNlc1VybCA9IGAke2Jhc2VVcmx9L3NlcnZpY2VzL1Byb3h5UmVxdWVzdEhhbmRsZXIuYXNoeGA7XG4gIH1cblxuICBhc3luYyBsb2dpbihjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMucGFnZS5zZXRSZXF1ZXN0SW50ZXJjZXB0aW9uKHRydWUpO1xuICAgIHRoaXMucGFnZS5vbigncmVxdWVzdCcsIChyZXF1ZXN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC51cmwoKS5pbmNsdWRlcygnZGV0ZWN0b3ItZG9tLm1pbi5qcycpKSB7XG4gICAgICAgIGRlYnVnKCdmb3JjZSBhYm9ydCBmb3IgcmVxdWVzdCBkbyBkb3dubG9hZCBkZXRlY3Rvci1kb20ubWluLmpzIHJlc291cmNlJyk7XG4gICAgICAgIHZvaWQgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm9pZCByZXF1ZXN0LmNvbnRpbnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWJ1ZygnbmF2aWdhdGUgdG8gbG9naW4gcGFnZScpO1xuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyhgJHt0aGlzLmJhc2VVcmx9L3BlcnNvbmFsYXJlYS9Mb2dpbmApO1xuXG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9nZ2luZ0luKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlVXJsID0gYCR7dGhpcy5zZXJ2aWNlc1VybH0/cmVxTmFtZT1WYWxpZGF0ZUlkRGF0YWA7XG4gICAgY29uc3QgdmFsaWRhdGVSZXF1ZXN0ID0ge1xuICAgICAgaWQ6IGNyZWRlbnRpYWxzLmlkLFxuICAgICAgY2FyZFN1ZmZpeDogY3JlZGVudGlhbHMuY2FyZDZEaWdpdHMsXG4gICAgICBjb3VudHJ5Q29kZTogQ09VTlRSWV9DT0RFLFxuICAgICAgaWRUeXBlOiBJRF9UWVBFLFxuICAgICAgY2hlY2tMZXZlbDogJzEnLFxuICAgICAgY29tcGFueUNvZGU6IHRoaXMuY29tcGFueUNvZGUsXG4gICAgfTtcbiAgICBjb25zdCB2YWxpZGF0ZVJlc3VsdCA9IGF3YWl0IGZldGNoUG9zdFdpdGhpblBhZ2U8U2NyYXBlZExvZ2luVmFsaWRhdGlvbj4odGhpcy5wYWdlLCB2YWxpZGF0ZVVybCwgdmFsaWRhdGVSZXF1ZXN0KTtcbiAgICBpZiAoIXZhbGlkYXRlUmVzdWx0IHx8ICF2YWxpZGF0ZVJlc3VsdC5IZWFkZXIgfHwgdmFsaWRhdGVSZXN1bHQuSGVhZGVyLlN0YXR1cyAhPT0gJzEnIHx8ICF2YWxpZGF0ZVJlc3VsdC5WYWxpZGF0ZUlkRGF0YUJlYW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBlcnJvciBkdXJpbmcgbG9naW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVJldHVybkNvZGUgPSB2YWxpZGF0ZVJlc3VsdC5WYWxpZGF0ZUlkRGF0YUJlYW4ucmV0dXJuQ29kZTtcbiAgICBkZWJ1ZyhgdXNlciB2YWxpZGF0ZSB3aXRoIHJldHVybiBjb2RlICcke3ZhbGlkYXRlUmV0dXJuQ29kZX0nYCk7XG4gICAgaWYgKHZhbGlkYXRlUmV0dXJuQ29kZSA9PT0gJzEnKSB7XG4gICAgICBjb25zdCB7IHVzZXJOYW1lIH0gPSB2YWxpZGF0ZVJlc3VsdC5WYWxpZGF0ZUlkRGF0YUJlYW47XG5cbiAgICAgIGNvbnN0IGxvZ2luVXJsID0gYCR7dGhpcy5zZXJ2aWNlc1VybH0/cmVxTmFtZT1wZXJmb3JtTG9nb25JYDtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgIEtvZE1pc2h0YW1lc2g6IHVzZXJOYW1lLFxuICAgICAgICBNaXNwYXJaaWh1eTogY3JlZGVudGlhbHMuaWQsXG4gICAgICAgIFNpc21hOiBjcmVkZW50aWFscy5wYXNzd29yZCxcbiAgICAgICAgY2FyZFN1ZmZpeDogY3JlZGVudGlhbHMuY2FyZDZEaWdpdHMsXG4gICAgICAgIGNvdW50cnlDb2RlOiBDT1VOVFJZX0NPREUsXG4gICAgICAgIGlkVHlwZTogSURfVFlQRSxcbiAgICAgIH07XG4gICAgICBjb25zdCBsb2dpblJlc3VsdCA9IGF3YWl0IGZldGNoUG9zdFdpdGhpblBhZ2U8eyBzdGF0dXM6IHN0cmluZyB9Pih0aGlzLnBhZ2UsIGxvZ2luVXJsLCByZXF1ZXN0KTtcbiAgICAgIGRlYnVnKGB1c2VyIGxvZ2luIHdpdGggc3RhdHVzICcke2xvZ2luUmVzdWx0Py5zdGF0dXN9J2ApO1xuXG4gICAgICBpZiAobG9naW5SZXN1bHQgJiYgbG9naW5SZXN1bHQuc3RhdHVzID09PSAnMScpIHtcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5TdWNjZXNzKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobG9naW5SZXN1bHQgJiYgbG9naW5SZXN1bHQuc3RhdHVzID09PSAnMycpIHtcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuQ2hhbmdlUGFzc3dvcmQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuQ2hhbmdlUGFzc3dvcmQsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2luRmFpbGVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkludmFsaWRQYXNzd29yZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlUmV0dXJuQ29kZSA9PT0gJzQnKSB7XG4gICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5DaGFuZ2VQYXNzd29yZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5DaGFuZ2VQYXNzd29yZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5GYWlsZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuSW52YWxpZFBhc3N3b3JkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KGRlZmF1bHRTdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuXG4gICAgcmV0dXJuIGZldGNoQWxsVHJhbnNhY3Rpb25zKHRoaXMucGFnZSwgdGhpcy5vcHRpb25zLCB7XG5cbiAgICAgIHNlcnZpY2VzVXJsOiB0aGlzLnNlcnZpY2VzVXJsLFxuICAgICAgY29tcGFueUNvZGU6IHRoaXMuY29tcGFueUNvZGUsXG4gICAgfSwgc3RhcnRNb21lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IElzcmFjYXJkQW1leEJhc2VTY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsU0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBS0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsY0FBQSxHQUFBVixPQUFBO0FBS0EsSUFBQVcsdUJBQUEsR0FBQVgs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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Frame, type Page, type PuppeteerLifeCycleEvent } from 'puppeteer';
|
|
2
2
|
import { BaseScraper } from './base-scraper';
|
|
3
3
|
import { ScraperErrorTypes } from './errors';
|
|
4
4
|
import { type ScraperCredentials, type ScraperScrapingResult } from './interface';
|
|
@@ -35,13 +35,14 @@ export interface LoginOptions {
|
|
|
35
35
|
waitUntil?: PuppeteerLifeCycleEvent;
|
|
36
36
|
}
|
|
37
37
|
declare class BaseScraperWithBrowser<TCredentials extends ScraperCredentials> extends BaseScraper<TCredentials> {
|
|
38
|
-
|
|
38
|
+
private cleanups;
|
|
39
39
|
protected page: Page;
|
|
40
40
|
protected getViewPort(): {
|
|
41
41
|
width: number;
|
|
42
42
|
height: number;
|
|
43
43
|
};
|
|
44
44
|
initialize(): Promise<void>;
|
|
45
|
+
private initializePage;
|
|
45
46
|
navigateTo(url: string, page?: Page, timeout?: number, waitUntil?: PuppeteerLifeCycleEvent | undefined): Promise<void>;
|
|
46
47
|
getLoginOptions(_credentials: ScraperCredentials): LoginOptions;
|
|
47
48
|
fillInputs(pageOrFrame: Page | Frame, fields: {
|
|
@@ -76,9 +76,7 @@ function createGeneralError() {
|
|
|
76
76
|
class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
77
77
|
constructor(...args) {
|
|
78
78
|
super(...args);
|
|
79
|
-
|
|
80
|
-
// all the classes that inherit from this base assume is it mandatory.
|
|
81
|
-
_defineProperty(this, "browser", void 0);
|
|
79
|
+
_defineProperty(this, "cleanups", []);
|
|
82
80
|
// NOTICE - it is discouraged to use bang (!) in general. It is used here because
|
|
83
81
|
// all the classes that inherit from this base assume is it mandatory.
|
|
84
82
|
_defineProperty(this, "page", void 0);
|
|
@@ -93,47 +91,15 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
93
91
|
await super.initialize();
|
|
94
92
|
debug('initialize scraper');
|
|
95
93
|
this.emitProgress(_definitions.ScraperProgressTypes.Initializing);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
if (typeof this.options.browser !== 'undefined' && this.options.browser !== null) {
|
|
103
|
-
debug('use custom browser instance provided in options');
|
|
104
|
-
this.browser = this.options.browser;
|
|
105
|
-
} else {
|
|
106
|
-
const executablePath = this.options.executablePath || undefined;
|
|
107
|
-
const args = this.options.args || [];
|
|
108
|
-
const {
|
|
109
|
-
timeout
|
|
110
|
-
} = this.options;
|
|
111
|
-
const headless = !this.options.showBrowser;
|
|
112
|
-
debug(`launch a browser with headless mode = ${headless}`);
|
|
113
|
-
this.browser = await _puppeteer.default.launch({
|
|
114
|
-
env,
|
|
115
|
-
headless,
|
|
116
|
-
executablePath,
|
|
117
|
-
args,
|
|
118
|
-
timeout
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
if (this.options.prepareBrowser) {
|
|
122
|
-
debug("execute 'prepareBrowser' interceptor provided in options");
|
|
123
|
-
await this.options.prepareBrowser(this.browser);
|
|
124
|
-
}
|
|
125
|
-
if (!this.browser) {
|
|
126
|
-
debug('failed to initiate a browser, exit');
|
|
94
|
+
const page = await this.initializePage();
|
|
95
|
+
await page.setCacheEnabled(false); // Clear cache and avoid 300's response status
|
|
96
|
+
|
|
97
|
+
if (!page) {
|
|
98
|
+
debug('failed to initiate a browser page, exit');
|
|
127
99
|
return;
|
|
128
100
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
debug('browser has already pages open, use the first one');
|
|
132
|
-
[this.page] = pages;
|
|
133
|
-
} else {
|
|
134
|
-
debug('create a new browser page');
|
|
135
|
-
this.page = await this.browser.newPage();
|
|
136
|
-
}
|
|
101
|
+
this.page = page;
|
|
102
|
+
this.cleanups.push(() => page.close());
|
|
137
103
|
if (this.options.defaultTimeout) {
|
|
138
104
|
this.page.setDefaultTimeout(this.options.defaultTimeout);
|
|
139
105
|
}
|
|
@@ -152,6 +118,57 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
152
118
|
debug('Request failed: %s %s', (_request$failure = request.failure()) === null || _request$failure === void 0 ? void 0 : _request$failure.errorText, request.url());
|
|
153
119
|
});
|
|
154
120
|
}
|
|
121
|
+
async initializePage() {
|
|
122
|
+
debug('initialize browser page');
|
|
123
|
+
if ('browserContext' in this.options) {
|
|
124
|
+
debug('Using the browser context provided in options');
|
|
125
|
+
return this.options.browserContext.newPage();
|
|
126
|
+
}
|
|
127
|
+
if ('browser' in this.options) {
|
|
128
|
+
debug('Using the browser instance provided in options');
|
|
129
|
+
const {
|
|
130
|
+
browser
|
|
131
|
+
} = this.options;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* For backward compatibility, we will close the browser even if we didn't create it
|
|
135
|
+
*/
|
|
136
|
+
if (!this.options.skipCloseBrowser) {
|
|
137
|
+
this.cleanups.push(async () => {
|
|
138
|
+
debug('closing the browser');
|
|
139
|
+
await browser.close();
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return browser.newPage();
|
|
143
|
+
}
|
|
144
|
+
const {
|
|
145
|
+
timeout,
|
|
146
|
+
args,
|
|
147
|
+
executablePath,
|
|
148
|
+
showBrowser
|
|
149
|
+
} = this.options;
|
|
150
|
+
const headless = !showBrowser;
|
|
151
|
+
debug(`launch a browser with headless mode = ${headless}`);
|
|
152
|
+
const browser = await _puppeteer.default.launch({
|
|
153
|
+
env: this.options.verbose ? _objectSpread({
|
|
154
|
+
DEBUG: '*'
|
|
155
|
+
}, process.env) : undefined,
|
|
156
|
+
headless,
|
|
157
|
+
executablePath,
|
|
158
|
+
args,
|
|
159
|
+
timeout
|
|
160
|
+
});
|
|
161
|
+
this.cleanups.push(async () => {
|
|
162
|
+
debug('closing the browser');
|
|
163
|
+
await browser.close();
|
|
164
|
+
});
|
|
165
|
+
if (this.options.prepareBrowser) {
|
|
166
|
+
debug("execute 'prepareBrowser' interceptor provided in options");
|
|
167
|
+
await this.options.prepareBrowser(browser);
|
|
168
|
+
}
|
|
169
|
+
debug('create a new browser page');
|
|
170
|
+
return browser.newPage();
|
|
171
|
+
}
|
|
155
172
|
async navigateTo(url, page, timeout, waitUntil = 'load') {
|
|
156
173
|
const pageToUse = page || this.page;
|
|
157
174
|
if (!pageToUse) {
|
|
@@ -241,10 +258,8 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
241
258
|
fullPage: true
|
|
242
259
|
});
|
|
243
260
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
await this.browser.close();
|
|
261
|
+
await Promise.all(this.cleanups.reverse().map(cleanup => cleanup()));
|
|
262
|
+
this.cleanups = [];
|
|
248
263
|
}
|
|
249
264
|
handleLoginResult(loginResult) {
|
|
250
265
|
switch (loginResult) {
|
|
@@ -273,4 +288,4 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
273
288
|
}
|
|
274
289
|
}
|
|
275
290
|
exports.BaseScraperWithBrowser = BaseScraperWithBrowser;
|
|
276
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcHVwcGV0ZWVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVmaW5pdGlvbnMiLCJfZGVidWciLCJfZWxlbWVudHNJbnRlcmFjdGlvbnMiLCJfbmF2aWdhdGlvbiIsIl9iYXNlU2NyYXBlciIsIl9lcnJvcnMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJuIiwiaW5kZXhPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaGFzT3duUHJvcGVydHkiLCJWSUVXUE9SVF9XSURUSCIsIlZJRVdQT1JUX0hFSUdIVCIsIk9LX1NUQVRVUyIsImRlYnVnIiwiZ2V0RGVidWciLCJMb2dpbkJhc2VSZXN1bHRzIiwiVGltZW91dCIsIkdlbmVyaWMiLCJHZW5lcmFsIiwiU2NyYXBlckVycm9yVHlwZXMiLCJyZXN0IiwiTG9naW5SZXN1bHRzIiwiZXhwb3J0cyIsImdldEtleUJ5VmFsdWUiLCJvYmplY3QiLCJwYWdlIiwia2V5IiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIlJlZ0V4cCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiVW5rbm93bkVycm9yIiwiY3JlYXRlR2VuZXJhbEVycm9yIiwic3VjY2VzcyIsImVycm9yVHlwZSIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJCYXNlU2NyYXBlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImdldFZpZXdQb3J0Iiwid2lkdGgiLCJoZWlnaHQiLCJpbml0aWFsaXplIiwiZW1pdFByb2dyZXNzIiwiU2NyYXBlclByb2dyZXNzVHlwZXMiLCJJbml0aWFsaXppbmciLCJlbnYiLCJvcHRpb25zIiwidmVyYm9zZSIsIkRFQlVHIiwicHJvY2VzcyIsImJyb3dzZXIiLCJleGVjdXRhYmxlUGF0aCIsInVuZGVmaW5lZCIsInRpbWVvdXQiLCJoZWFkbGVzcyIsInNob3dCcm93c2VyIiwicHVwcGV0ZWVyIiwibGF1bmNoIiwicHJlcGFyZUJyb3dzZXIiLCJwYWdlcyIsIm5ld1BhZ2UiLCJkZWZhdWx0VGltZW91dCIsInNldERlZmF1bHRUaW1lb3V0IiwicHJlcGFyZVBhZ2UiLCJ2aWV3cG9ydCIsInNldFZpZXdwb3J0Iiwib24iLCJyZXF1ZXN0IiwiX3JlcXVlc3QkZmFpbHVyZSIsImZhaWx1cmUiLCJlcnJvclRleHQiLCJ1cmwiLCJuYXZpZ2F0ZVRvIiwid2FpdFVudGlsIiwicGFnZVRvVXNlIiwicmVzcG9uc2UiLCJnb3RvIiwic3RhdHVzIiwiRXJyb3IiLCJnZXRMb2dpbk9wdGlvbnMiLCJfY3JlZGVudGlhbHMiLCJjb21wYW55SWQiLCJmaWxsSW5wdXRzIiwicGFnZU9yRnJhbWUiLCJmaWVsZHMiLCJtb2RpZmllZCIsImlucHV0Iiwic2hpZnQiLCJmaWxsSW5wdXQiLCJzZWxlY3RvciIsImxvZ2luIiwiY3JlZGVudGlhbHMiLCJsb2dpbk9wdGlvbnMiLCJ1c2VyQWdlbnQiLCJzZXRVc2VyQWdlbnQiLCJsb2dpblVybCIsImNoZWNrUmVhZGluZXNzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJ3YWl0VW50aWxFbGVtZW50Rm91bmQiLCJsb2dpbkZyYW1lT3JQYWdlIiwicHJlQWN0aW9uIiwiY2xpY2tCdXR0b24iLCJMb2dnaW5nSW4iLCJwb3N0QWN0aW9uIiwid2FpdEZvck5hdmlnYXRpb24iLCJjdXJyZW50IiwiZ2V0Q3VycmVudFVybCIsImxvZ2luUmVzdWx0IiwicG9zc2libGVSZXN1bHRzIiwiaGFuZGxlTG9naW5SZXN1bHQiLCJ0ZXJtaW5hdGUiLCJfc3VjY2VzcyIsIlRlcm1pbmF0aW5nIiwic3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGgiLCJzY3JlZW5zaG90IiwicGF0aCIsImZ1bGxQYWdlIiwiY2xvc2UiLCJTdWNjZXNzIiwiTG9naW5TdWNjZXNzIiwiSW52YWxpZFBhc3N3b3JkIiwiTG9naW5GYWlsZWQiLCJlcnJvck1lc3NhZ2UiLCJDaGFuZ2VQYXNzd29yZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwdXBwZXRlZXIsIHtcbiAgdHlwZSBCcm93c2VyLCB0eXBlIEZyYW1lLCB0eXBlIEdvVG9PcHRpb25zLCB0eXBlIFBhZ2UsIHR5cGUgUHVwcGV0ZWVyTGlmZUN5Y2xlRXZlbnQsXG59IGZyb20gJ3B1cHBldGVlcic7XG5cbmltcG9ydCB7IFNjcmFwZXJQcm9ncmVzc1R5cGVzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0RGVidWcgfSBmcm9tICcuLi9oZWxwZXJzL2RlYnVnJztcbmltcG9ydCB7IGNsaWNrQnV0dG9uLCBmaWxsSW5wdXQsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGdldEN1cnJlbnRVcmwsIHdhaXRGb3JOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXInO1xuaW1wb3J0IHsgU2NyYXBlckVycm9yVHlwZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIFNjcmFwZXJDcmVkZW50aWFscywgdHlwZSBTY3JhcGVyU2NyYXBpbmdSZXN1bHQgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmNvbnN0IFZJRVdQT1JUX1dJRFRIID0gMTAyNDtcbmNvbnN0IFZJRVdQT1JUX0hFSUdIVCA9IDc2ODtcbmNvbnN0IE9LX1NUQVRVUyA9IDIwMDtcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygnYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3NlcicpO1xuXG5lbnVtIExvZ2luQmFzZVJlc3VsdHMge1xuICBTdWNjZXNzID0gJ1NVQ0NFU1MnLFxuICBVbmtub3duRXJyb3IgPSAnVU5LTk9XTl9FUlJPUicsXG59XG5cbmNvbnN0IHtcbiAgVGltZW91dCwgR2VuZXJpYywgR2VuZXJhbCwgLi4ucmVzdFxufSA9IFNjcmFwZXJFcnJvclR5cGVzO1xuZXhwb3J0IGNvbnN0IExvZ2luUmVzdWx0cyA9IHtcbiAgLi4ucmVzdCxcbiAgLi4uTG9naW5CYXNlUmVzdWx0cyxcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkZWNsYXJlXG5leHBvcnQgdHlwZSBMb2dpblJlc3VsdHMgPVxuICB8IEV4Y2x1ZGU8U2NyYXBlckVycm9yVHlwZXMsIFNjcmFwZXJFcnJvclR5cGVzLlRpbWVvdXQgfCBTY3JhcGVyRXJyb3JUeXBlcy5HZW5lcmljIHwgU2NyYXBlckVycm9yVHlwZXMuR2VuZXJhbD5cbiAgfCBMb2dpbkJhc2VSZXN1bHRzO1xuXG5leHBvcnQgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHtcbiAgW2tleSBpbiBMb2dpblJlc3VsdHNdPzogKHN0cmluZyB8IFJlZ0V4cCB8ICgob3B0aW9ucz86IHsgcGFnZT86IFBhZ2UgfSkgPT4gUHJvbWlzZTxib29sZWFuPikpW107XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luT3B0aW9ucyB7XG4gIGxvZ2luVXJsOiBzdHJpbmc7XG4gIGNoZWNrUmVhZGluZXNzPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZmllbGRzOiB7IHNlbGVjdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdO1xuICBzdWJtaXRCdXR0b25TZWxlY3Rvcjogc3RyaW5nIHwgKCgpID0+IFByb21pc2U8dm9pZD4pO1xuICBwcmVBY3Rpb24/OiAoKSA9PiBQcm9taXNlPEZyYW1lIHwgdm9pZD47XG4gIHBvc3RBY3Rpb24/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwb3NzaWJsZVJlc3VsdHM6IFBvc3NpYmxlTG9naW5SZXN1bHRzO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHdhaXRVbnRpbD86IFB1cHBldGVlckxpZmVDeWNsZUV2ZW50O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRLZXlCeVZhbHVlKG9iamVjdDogUG9zc2libGVMb2dpblJlc3VsdHMsIHZhbHVlOiBzdHJpbmcsIHBhZ2U6IFBhZ2UpOiBQcm9taXNlPExvZ2luUmVzdWx0cz4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBjb25kaXRpb25zID0gb2JqZWN0W2tleV07XG5cbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG5cbiAgICAgIGlmIChjb25kaXRpb24gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uLnRlc3QodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbmRpdGlvbih7IHBhZ2UsIHZhbHVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gY29uZGl0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShMb2dpblJlc3VsdHMuVW5rbm93bkVycm9yKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR2VuZXJhbEVycm9yKCk6IFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5HZW5lcmFsLFxuICB9O1xufVxuXG5jbGFzcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFRDcmVkZW50aWFscyBleHRlbmRzIFNjcmFwZXJDcmVkZW50aWFscz4gZXh0ZW5kcyBCYXNlU2NyYXBlcjxUQ3JlZGVudGlhbHM+IHtcbiAgLy8gTk9USUNFIC0gaXQgaXMgZGlzY291cmFnZWQgdG8gdXNlIGJhbmcgKCEpIGluIGdlbmVyYWwuIEl0IGlzIHVzZWQgaGVyZSBiZWNhdXNlXG4gIC8vIGFsbCB0aGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSB0aGlzIGJhc2UgYXNzdW1lIGlzIGl0IG1hbmRhdG9yeS5cbiAgcHJvdGVjdGVkIGJyb3dzZXIhOiBCcm93c2VyO1xuXG4gIC8vIE5PVElDRSAtIGl0IGlzIGRpc2NvdXJhZ2VkIHRvIHVzZSBiYW5nICghKSBpbiBnZW5lcmFsLiBJdCBpcyB1c2VkIGhlcmUgYmVjYXVzZVxuICAvLyBhbGwgdGhlIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyBiYXNlIGFzc3VtZSBpcyBpdCBtYW5kYXRvcnkuXG4gIHByb3RlY3RlZCBwYWdlITogUGFnZTtcblxuICBwcm90ZWN0ZWQgZ2V0Vmlld1BvcnQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBWSUVXUE9SVF9XSURUSCxcbiAgICAgIGhlaWdodDogVklFV1BPUlRfSEVJR0hULFxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKCkge1xuICAgIGF3YWl0IHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICBkZWJ1ZygnaW5pdGlhbGl6ZSBzY3JhcGVyJyk7XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuSW5pdGlhbGl6aW5nKTtcblxuICAgIGxldCBlbnY6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBlbnYgPSB7IERFQlVHOiAnKicsIC4uLnByb2Nlc3MuZW52IH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYnJvd3NlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zLmJyb3dzZXIgIT09IG51bGwpIHtcbiAgICAgIGRlYnVnKCd1c2UgY3VzdG9tIGJyb3dzZXIgaW5zdGFuY2UgcHJvdmlkZWQgaW4gb3B0aW9ucycpO1xuICAgICAgdGhpcy5icm93c2VyID0gdGhpcy5vcHRpb25zLmJyb3dzZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4ZWN1dGFibGVQYXRoID0gdGhpcy5vcHRpb25zLmV4ZWN1dGFibGVQYXRoIHx8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLm9wdGlvbnMuYXJncyB8fCBbXTtcbiAgICAgIGNvbnN0IHsgdGltZW91dCB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICBjb25zdCBoZWFkbGVzcyA9ICF0aGlzLm9wdGlvbnMuc2hvd0Jyb3dzZXI7XG4gICAgICBkZWJ1ZyhgbGF1bmNoIGEgYnJvd3NlciB3aXRoIGhlYWRsZXNzIG1vZGUgPSAke2hlYWRsZXNzfWApO1xuICAgICAgdGhpcy5icm93c2VyID0gYXdhaXQgcHVwcGV0ZWVyLmxhdW5jaCh7XG4gICAgICAgIGVudixcbiAgICAgICAgaGVhZGxlc3MsXG4gICAgICAgIGV4ZWN1dGFibGVQYXRoLFxuICAgICAgICBhcmdzLFxuICAgICAgICB0aW1lb3V0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcmVwYXJlQnJvd3Nlcikge1xuICAgICAgZGVidWcoXCJleGVjdXRlICdwcmVwYXJlQnJvd3NlcicgaW50ZXJjZXB0b3IgcHJvdmlkZWQgaW4gb3B0aW9uc1wiKTtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwYXJlQnJvd3Nlcih0aGlzLmJyb3dzZXIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5icm93c2VyKSB7XG4gICAgICBkZWJ1ZygnZmFpbGVkIHRvIGluaXRpYXRlIGEgYnJvd3NlciwgZXhpdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5icm93c2VyLnBhZ2VzKCk7XG4gICAgaWYgKHBhZ2VzLmxlbmd0aCkge1xuICAgICAgZGVidWcoJ2Jyb3dzZXIgaGFzIGFscmVhZHkgcGFnZXMgb3BlbiwgdXNlIHRoZSBmaXJzdCBvbmUnKTtcbiAgICAgIFt0aGlzLnBhZ2VdID0gcGFnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdjcmVhdGUgYSBuZXcgYnJvd3NlciBwYWdlJyk7XG4gICAgICB0aGlzLnBhZ2UgPSBhd2FpdCB0aGlzLmJyb3dzZXIubmV3UGFnZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVmYXVsdFRpbWVvdXQpIHtcbiAgICAgIHRoaXMucGFnZS5zZXREZWZhdWx0VGltZW91dCh0aGlzLm9wdGlvbnMuZGVmYXVsdFRpbWVvdXQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJlcGFyZVBhZ2UpIHtcbiAgICAgIGRlYnVnKFwiZXhlY3V0ZSAncHJlcGFyZVBhZ2UnIGludGVyY2VwdG9yIHByb3ZpZGVkIGluIG9wdGlvbnNcIik7XG4gICAgICBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcGFyZVBhZ2UodGhpcy5wYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuZ2V0Vmlld1BvcnQoKTtcbiAgICBkZWJ1Zyhgc2V0IHZpZXdwb3J0IHRvIHdpZHRoICR7dmlld3BvcnQud2lkdGh9LCBoZWlnaHQgJHt2aWV3cG9ydC5oZWlnaHR9YCk7XG4gICAgYXdhaXQgdGhpcy5wYWdlLnNldFZpZXdwb3J0KHtcbiAgICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wYWdlLm9uKCdyZXF1ZXN0ZmFpbGVkJywgKHJlcXVlc3QpID0+IHtcbiAgICAgIGRlYnVnKCdSZXF1ZXN0IGZhaWxlZDogJXMgJXMnLCByZXF1ZXN0LmZhaWx1cmUoKT8uZXJyb3JUZXh0LCByZXF1ZXN0LnVybCgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG8oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcGFnZT86IFBhZ2UsXG4gICAgdGltZW91dD86IG51bWJlcixcbiAgICB3YWl0VW50aWw6IFB1cHBldGVlckxpZmVDeWNsZUV2ZW50IHwgdW5kZWZpbmVkID0gJ2xvYWQnLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYWdlVG9Vc2UgPSBwYWdlIHx8IHRoaXMucGFnZTtcblxuICAgIGlmICghcGFnZVRvVXNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uczogR29Ub09wdGlvbnMgPSB7IC4uLih0aW1lb3V0ID09PSBudWxsID8gbnVsbCA6IHsgdGltZW91dCB9KSwgd2FpdFVudGlsIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwYWdlVG9Vc2UuZ290byh1cmwsIG9wdGlvbnMpO1xuXG4gICAgLy8gbm90ZTogcmVzcG9uc2Ugd2lsbCBiZSBudWxsIHdoZW4gbmF2aWdhdGluZyB0byBzYW1lIHVybCB3aGlsZSBjaGFuZ2luZyB0aGUgaGFzaCBwYXJ0LiB0aGUgY29uZGl0aW9uIGJlbG93IHdpbGwgYWx3YXlzIGFjY2VwdCBudWxsIGFzIHZhbGlkIHJlc3VsdC5cbiAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgKHJlc3BvbnNlID09PSB1bmRlZmluZWQgfHwgcmVzcG9uc2Uuc3RhdHVzKCkgIT09IE9LX1NUQVRVUykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIG5hdmlnYXRlIHRvIHVybCAke3VybH1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldExvZ2luT3B0aW9ucyhfY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZXRMb2dpbk9wdGlvbnMoKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICBhc3luYyBmaWxsSW5wdXRzKHBhZ2VPckZyYW1lOiBQYWdlIHwgRnJhbWUsIGZpZWxkczogeyBzZWxlY3Rvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vZGlmaWVkID0gWy4uLmZpZWxkc107XG4gICAgY29uc3QgaW5wdXQgPSBtb2RpZmllZC5zaGlmdCgpO1xuXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBmaWxsSW5wdXQocGFnZU9yRnJhbWUsIGlucHV0LnNlbGVjdG9yLCBpbnB1dC52YWx1ZSk7XG4gICAgaWYgKG1vZGlmaWVkLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5maWxsSW5wdXRzKHBhZ2VPckZyYW1lLCBtb2RpZmllZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgaWYgKCFjcmVkZW50aWFscyB8fCAhdGhpcy5wYWdlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlR2VuZXJhbEVycm9yKCk7XG4gICAgfVxuXG4gICAgZGVidWcoJ2V4ZWN1dGUgbG9naW4gcHJvY2VzcycpO1xuICAgIGNvbnN0IGxvZ2luT3B0aW9ucyA9IHRoaXMuZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzKTtcblxuICAgIGlmIChsb2dpbk9wdGlvbnMudXNlckFnZW50KSB7XG4gICAgICBkZWJ1Zygnc2V0IGN1c3RvbSB1c2VyIGFnZW50IHByb3ZpZGVkIGluIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5zZXRVc2VyQWdlbnQobG9naW5PcHRpb25zLnVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgZGVidWcoJ25hdmlnYXRlIHRvIGxvZ2luIHVybCcpO1xuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyhsb2dpbk9wdGlvbnMubG9naW5VcmwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBsb2dpbk9wdGlvbnMud2FpdFVudGlsKTtcbiAgICBpZiAobG9naW5PcHRpb25zLmNoZWNrUmVhZGluZXNzKSB7XG4gICAgICBkZWJ1ZyhcImV4ZWN1dGUgJ2NoZWNrUmVhZGluZXNzJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zXCIpO1xuICAgICAgYXdhaXQgbG9naW5PcHRpb25zLmNoZWNrUmVhZGluZXNzKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbG9naW5PcHRpb25zLnN1Ym1pdEJ1dHRvblNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgZGVidWcoJ3dhaXQgdW50aWwgc3VibWl0IGJ1dHRvbiBpcyBhdmFpbGFibGUnKTtcbiAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsIGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgbGV0IGxvZ2luRnJhbWVPclBhZ2U6IFBhZ2UgfCBGcmFtZSB8IG51bGwgPSB0aGlzLnBhZ2U7XG4gICAgaWYgKGxvZ2luT3B0aW9ucy5wcmVBY3Rpb24pIHtcbiAgICAgIGRlYnVnKFwiZXhlY3V0ZSAncHJlQWN0aW9uJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zXCIpO1xuICAgICAgbG9naW5GcmFtZU9yUGFnZSA9IChhd2FpdCBsb2dpbk9wdGlvbnMucHJlQWN0aW9uKCkpIHx8IHRoaXMucGFnZTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnZmlsbCBsb2dpbiBjb21wb25lbnRzIGlucHV0IHdpdGggcmVsZXZhbnQgdmFsdWVzJyk7XG4gICAgYXdhaXQgdGhpcy5maWxsSW5wdXRzKGxvZ2luRnJhbWVPclBhZ2UsIGxvZ2luT3B0aW9ucy5maWVsZHMpO1xuICAgIGRlYnVnKCdjbGljayBvbiBsb2dpbiBzdWJtaXQgYnV0dG9uJyk7XG4gICAgaWYgKHR5cGVvZiBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhd2FpdCBjbGlja0J1dHRvbihsb2dpbkZyYW1lT3JQYWdlLCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IoKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9nZ2luZ0luKTtcblxuICAgIGlmIChsb2dpbk9wdGlvbnMucG9zdEFjdGlvbikge1xuICAgICAgZGVidWcoXCJleGVjdXRlICdwb3N0QWN0aW9uJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zXCIpO1xuICAgICAgYXdhaXQgbG9naW5PcHRpb25zLnBvc3RBY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3dhaXQgZm9yIHBhZ2UgbmF2aWdhdGlvbicpO1xuICAgICAgYXdhaXQgd2FpdEZvck5hdmlnYXRpb24odGhpcy5wYWdlKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnY2hlY2sgbG9naW4gcmVzdWx0Jyk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IGdldEN1cnJlbnRVcmwodGhpcy5wYWdlLCB0cnVlKTtcbiAgICBjb25zdCBsb2dpblJlc3VsdCA9IGF3YWl0IGdldEtleUJ5VmFsdWUobG9naW5PcHRpb25zLnBvc3NpYmxlUmVzdWx0cywgY3VycmVudCwgdGhpcy5wYWdlKTtcbiAgICBkZWJ1ZyhgaGFuZGxlIGxvZ2luIHJlc3VsdHMgJHtsb2dpblJlc3VsdH1gKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dpblJlc3VsdChsb2dpblJlc3VsdCk7XG4gIH1cblxuICBhc3luYyB0ZXJtaW5hdGUoX3N1Y2Nlc3M6IGJvb2xlYW4pIHtcbiAgICBkZWJ1ZyhgdGVybWluYXRpbmcgYnJvd3NlciB3aXRoIHN1Y2Nlc3MgPSAke19zdWNjZXNzfWApO1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLlRlcm1pbmF0aW5nKTtcblxuICAgIGlmICghX3N1Y2Nlc3MgJiYgISF0aGlzLm9wdGlvbnMuc3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGgpIHtcbiAgICAgIGRlYnVnKGBjcmVhdGUgYSBzbmFwc2hvdCBiZWZvcmUgdGVybWluYXRlZCBpbiAke3RoaXMub3B0aW9ucy5zdG9yZUZhaWx1cmVTY3JlZW5TaG90UGF0aH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgcGF0aDogdGhpcy5vcHRpb25zLnN0b3JlRmFpbHVyZVNjcmVlblNob3RQYXRoLFxuICAgICAgICBmdWxsUGFnZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5icm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxvZ2luUmVzdWx0KGxvZ2luUmVzdWx0OiBMb2dpblJlc3VsdHMpIHtcbiAgICBzd2l0Y2ggKGxvZ2luUmVzdWx0KSB7XG4gICAgICBjYXNlIExvZ2luUmVzdWx0cy5TdWNjZXNzOlxuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dpblN1Y2Nlc3MpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICBjYXNlIExvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmQ6XG4gICAgICBjYXNlIExvZ2luUmVzdWx0cy5Vbmtub3duRXJyb3I6XG4gICAgICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2luRmFpbGVkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBlcnJvclR5cGU6XG4gICAgICAgICAgICBsb2dpblJlc3VsdCA9PT0gTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZCA/XG4gICAgICAgICAgICAgIFNjcmFwZXJFcnJvclR5cGVzLkludmFsaWRQYXNzd29yZCA6XG4gICAgICAgICAgICAgIFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyYWwsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiBgTG9naW4gZmFpbGVkIHdpdGggJHtsb2dpblJlc3VsdH0gZXJyb3JgLFxuICAgICAgICB9O1xuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmQ6XG4gICAgICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkNoYW5nZVBhc3N3b3JkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkNoYW5nZVBhc3N3b3JkLFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGxvZ2luIHJlc3VsdCBcIiR7bG9naW5SZXN1bHR9XCJgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBSUEsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcscUJBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUE2QyxTQUFBRCx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLFFBQUFILENBQUEsRUFBQUksQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLE9BQUFNLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFSLENBQUEsR0FBQUksQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVgsQ0FBQSxFQUFBSSxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBZixDQUFBLGFBQUFJLENBQUEsTUFBQUEsQ0FB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
|
|
291
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcHVwcGV0ZWVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVmaW5pdGlvbnMiLCJfZGVidWciLCJfZWxlbWVudHNJbnRlcmFjdGlvbnMiLCJfbmF2aWdhdGlvbiIsIl9iYXNlU2NyYXBlciIsIl9lcnJvcnMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJuIiwiaW5kZXhPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaGFzT3duUHJvcGVydHkiLCJWSUVXUE9SVF9XSURUSCIsIlZJRVdQT1JUX0hFSUdIVCIsIk9LX1NUQVRVUyIsImRlYnVnIiwiZ2V0RGVidWciLCJMb2dpbkJhc2VSZXN1bHRzIiwiVGltZW91dCIsIkdlbmVyaWMiLCJHZW5lcmFsIiwiU2NyYXBlckVycm9yVHlwZXMiLCJyZXN0IiwiTG9naW5SZXN1bHRzIiwiZXhwb3J0cyIsImdldEtleUJ5VmFsdWUiLCJvYmplY3QiLCJwYWdlIiwia2V5IiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIlJlZ0V4cCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiVW5rbm93bkVycm9yIiwiY3JlYXRlR2VuZXJhbEVycm9yIiwic3VjY2VzcyIsImVycm9yVHlwZSIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJCYXNlU2NyYXBlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImdldFZpZXdQb3J0Iiwid2lkdGgiLCJoZWlnaHQiLCJpbml0aWFsaXplIiwiZW1pdFByb2dyZXNzIiwiU2NyYXBlclByb2dyZXNzVHlwZXMiLCJJbml0aWFsaXppbmciLCJpbml0aWFsaXplUGFnZSIsInNldENhY2hlRW5hYmxlZCIsImNsZWFudXBzIiwiY2xvc2UiLCJvcHRpb25zIiwiZGVmYXVsdFRpbWVvdXQiLCJzZXREZWZhdWx0VGltZW91dCIsInByZXBhcmVQYWdlIiwidmlld3BvcnQiLCJzZXRWaWV3cG9ydCIsIm9uIiwicmVxdWVzdCIsIl9yZXF1ZXN0JGZhaWx1cmUiLCJmYWlsdXJlIiwiZXJyb3JUZXh0IiwidXJsIiwiYnJvd3NlckNvbnRleHQiLCJuZXdQYWdlIiwiYnJvd3NlciIsInNraXBDbG9zZUJyb3dzZXIiLCJ0aW1lb3V0IiwiZXhlY3V0YWJsZVBhdGgiLCJzaG93QnJvd3NlciIsImhlYWRsZXNzIiwicHVwcGV0ZWVyIiwibGF1bmNoIiwiZW52IiwidmVyYm9zZSIsIkRFQlVHIiwicHJvY2VzcyIsInVuZGVmaW5lZCIsInByZXBhcmVCcm93c2VyIiwibmF2aWdhdGVUbyIsIndhaXRVbnRpbCIsInBhZ2VUb1VzZSIsInJlc3BvbnNlIiwiZ290byIsInN0YXR1cyIsIkVycm9yIiwiZ2V0TG9naW5PcHRpb25zIiwiX2NyZWRlbnRpYWxzIiwiY29tcGFueUlkIiwiZmlsbElucHV0cyIsInBhZ2VPckZyYW1lIiwiZmllbGRzIiwibW9kaWZpZWQiLCJpbnB1dCIsInNoaWZ0IiwiZmlsbElucHV0Iiwic2VsZWN0b3IiLCJsb2dpbiIsImNyZWRlbnRpYWxzIiwibG9naW5PcHRpb25zIiwidXNlckFnZW50Iiwic2V0VXNlckFnZW50IiwibG9naW5VcmwiLCJjaGVja1JlYWRpbmVzcyIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwibG9naW5GcmFtZU9yUGFnZSIsInByZUFjdGlvbiIsImNsaWNrQnV0dG9uIiwiTG9nZ2luZ0luIiwicG9zdEFjdGlvbiIsIndhaXRGb3JOYXZpZ2F0aW9uIiwiY3VycmVudCIsImdldEN1cnJlbnRVcmwiLCJsb2dpblJlc3VsdCIsInBvc3NpYmxlUmVzdWx0cyIsImhhbmRsZUxvZ2luUmVzdWx0IiwidGVybWluYXRlIiwiX3N1Y2Nlc3MiLCJUZXJtaW5hdGluZyIsInN0b3JlRmFpbHVyZVNjcmVlblNob3RQYXRoIiwic2NyZWVuc2hvdCIsInBhdGgiLCJmdWxsUGFnZSIsImFsbCIsInJldmVyc2UiLCJtYXAiLCJjbGVhbnVwIiwiU3VjY2VzcyIsIkxvZ2luU3VjY2VzcyIsIkludmFsaWRQYXNzd29yZCIsIkxvZ2luRmFpbGVkIiwiZXJyb3JNZXNzYWdlIiwiQ2hhbmdlUGFzc3dvcmQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcHVwcGV0ZWVyLCB7IHR5cGUgRnJhbWUsIHR5cGUgR29Ub09wdGlvbnMsIHR5cGUgUGFnZSwgdHlwZSBQdXBwZXRlZXJMaWZlQ3ljbGVFdmVudCB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBTY3JhcGVyUHJvZ3Jlc3NUeXBlcyB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZmlsbElucHV0LCB3YWl0VW50aWxFbGVtZW50Rm91bmQgfSBmcm9tICcuLi9oZWxwZXJzL2VsZW1lbnRzLWludGVyYWN0aW9ucyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXJsLCB3YWl0Rm9yTmF2aWdhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBCYXNlU2NyYXBlciB9IGZyb20gJy4vYmFzZS1zY3JhcGVyJztcbmltcG9ydCB7IFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyQ3JlZGVudGlhbHMsIHR5cGUgU2NyYXBlclNjcmFwaW5nUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBWSUVXUE9SVF9XSURUSCA9IDEwMjQ7XG5jb25zdCBWSUVXUE9SVF9IRUlHSFQgPSA3Njg7XG5jb25zdCBPS19TVEFUVVMgPSAyMDA7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInKTtcblxuZW51bSBMb2dpbkJhc2VSZXN1bHRzIHtcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgVW5rbm93bkVycm9yID0gJ1VOS05PV05fRVJST1InLFxufVxuXG5jb25zdCB7XG4gIFRpbWVvdXQsIEdlbmVyaWMsIEdlbmVyYWwsIC4uLnJlc3Rcbn0gPSBTY3JhcGVyRXJyb3JUeXBlcztcbmV4cG9ydCBjb25zdCBMb2dpblJlc3VsdHMgPSB7XG4gIC4uLnJlc3QsXG4gIC4uLkxvZ2luQmFzZVJlc3VsdHMsXG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZGVjbGFyZVxuZXhwb3J0IHR5cGUgTG9naW5SZXN1bHRzID1cbiAgfCBFeGNsdWRlPFNjcmFwZXJFcnJvclR5cGVzLCBTY3JhcGVyRXJyb3JUeXBlcy5UaW1lb3V0IHwgU2NyYXBlckVycm9yVHlwZXMuR2VuZXJpYyB8IFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyYWw+XG4gIHwgTG9naW5CYXNlUmVzdWx0cztcblxuZXhwb3J0IHR5cGUgUG9zc2libGVMb2dpblJlc3VsdHMgPSB7XG4gIFtrZXkgaW4gTG9naW5SZXN1bHRzXT86IChzdHJpbmcgfCBSZWdFeHAgfCAoKG9wdGlvbnM/OiB7IHBhZ2U/OiBQYWdlIH0pID0+IFByb21pc2U8Ym9vbGVhbj4pKVtdO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbk9wdGlvbnMge1xuICBsb2dpblVybDogc3RyaW5nO1xuICBjaGVja1JlYWRpbmVzcz86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGZpZWxkczogeyBzZWxlY3Rvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXTtcbiAgc3VibWl0QnV0dG9uU2VsZWN0b3I6IHN0cmluZyB8ICgoKSA9PiBQcm9taXNlPHZvaWQ+KTtcbiAgcHJlQWN0aW9uPzogKCkgPT4gUHJvbWlzZTxGcmFtZSB8IHZvaWQ+O1xuICBwb3N0QWN0aW9uPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcG9zc2libGVSZXN1bHRzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xuICB3YWl0VW50aWw/OiBQdXBwZXRlZXJMaWZlQ3ljbGVFdmVudDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0S2V5QnlWYWx1ZShvYmplY3Q6IFBvc3NpYmxlTG9naW5SZXN1bHRzLCB2YWx1ZTogc3RyaW5nLCBwYWdlOiBQYWdlKTogUHJvbWlzZTxMb2dpblJlc3VsdHM+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IG9iamVjdFtrZXldO1xuXG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICBpZiAoY29uZGl0aW9uIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi50ZXN0KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25kaXRpb24oeyBwYWdlLCB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoTG9naW5SZXN1bHRzLlVua25vd25FcnJvcik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdlbmVyYWxFcnJvcigpOiBTY3JhcGVyU2NyYXBpbmdSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuR2VuZXJhbCxcbiAgfTtcbn1cblxuY2xhc3MgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxUQ3JlZGVudGlhbHMgZXh0ZW5kcyBTY3JhcGVyQ3JlZGVudGlhbHM+IGV4dGVuZHMgQmFzZVNjcmFwZXI8VENyZWRlbnRpYWxzPiB7XG4gIHByaXZhdGUgY2xlYW51cHM6IEFycmF5PCgpID0+IFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgLy8gTk9USUNFIC0gaXQgaXMgZGlzY291cmFnZWQgdG8gdXNlIGJhbmcgKCEpIGluIGdlbmVyYWwuIEl0IGlzIHVzZWQgaGVyZSBiZWNhdXNlXG4gIC8vIGFsbCB0aGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSB0aGlzIGJhc2UgYXNzdW1lIGlzIGl0IG1hbmRhdG9yeS5cbiAgcHJvdGVjdGVkIHBhZ2UhOiBQYWdlO1xuXG4gIHByb3RlY3RlZCBnZXRWaWV3UG9ydCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IFZJRVdQT1JUX1dJRFRILFxuICAgICAgaGVpZ2h0OiBWSUVXUE9SVF9IRUlHSFQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemUoKSB7XG4gICAgYXdhaXQgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIGRlYnVnKCdpbml0aWFsaXplIHNjcmFwZXInKTtcbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Jbml0aWFsaXppbmcpO1xuXG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcbiAgICBhd2FpdCBwYWdlLnNldENhY2hlRW5hYmxlZChmYWxzZSk7IC8vIENsZWFyIGNhY2hlIGFuZCBhdm9pZCAzMDAncyByZXNwb25zZSBzdGF0dXNcblxuICAgIGlmICghcGFnZSkge1xuICAgICAgZGVidWcoJ2ZhaWxlZCB0byBpbml0aWF0ZSBhIGJyb3dzZXIgcGFnZSwgZXhpdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZSA9IHBhZ2U7XG5cbiAgICB0aGlzLmNsZWFudXBzLnB1c2goICgpID0+IHBhZ2UuY2xvc2UoKSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZmF1bHRUaW1lb3V0KSB7XG4gICAgICB0aGlzLnBhZ2Uuc2V0RGVmYXVsdFRpbWVvdXQodGhpcy5vcHRpb25zLmRlZmF1bHRUaW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnByZXBhcmVQYWdlKSB7XG4gICAgICBkZWJ1ZyhcImV4ZWN1dGUgJ3ByZXBhcmVQYWdlJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBvcHRpb25zXCIpO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLnByZXBhcmVQYWdlKHRoaXMucGFnZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmdldFZpZXdQb3J0KCk7XG4gICAgZGVidWcoYHNldCB2aWV3cG9ydCB0byB3aWR0aCAke3ZpZXdwb3J0LndpZHRofSwgaGVpZ2h0ICR7dmlld3BvcnQuaGVpZ2h0fWApO1xuICAgIGF3YWl0IHRoaXMucGFnZS5zZXRWaWV3cG9ydCh7XG4gICAgICB3aWR0aDogdmlld3BvcnQud2lkdGgsXG4gICAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCxcbiAgICB9KTtcblxuICAgIHRoaXMucGFnZS5vbigncmVxdWVzdGZhaWxlZCcsIChyZXF1ZXN0KSA9PiB7XG4gICAgICBkZWJ1ZygnUmVxdWVzdCBmYWlsZWQ6ICVzICVzJywgcmVxdWVzdC5mYWlsdXJlKCk/LmVycm9yVGV4dCwgcmVxdWVzdC51cmwoKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVQYWdlKCkge1xuICAgIGRlYnVnKCdpbml0aWFsaXplIGJyb3dzZXIgcGFnZScpO1xuICAgIGlmICgnYnJvd3NlckNvbnRleHQnIGluIHRoaXMub3B0aW9ucykge1xuICAgICAgZGVidWcoJ1VzaW5nIHRoZSBicm93c2VyIGNvbnRleHQgcHJvdmlkZWQgaW4gb3B0aW9ucycpO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5icm93c2VyQ29udGV4dC5uZXdQYWdlKCk7XG4gICAgfVxuXG4gICAgaWYgKCdicm93c2VyJyBpbiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgIGRlYnVnKCdVc2luZyB0aGUgYnJvd3NlciBpbnN0YW5jZSBwcm92aWRlZCBpbiBvcHRpb25zJyk7XG4gICAgICBjb25zdCB7IGJyb3dzZXIgfSA9IHRoaXMub3B0aW9ucztcblxuICAgICAgLyoqXG4gICAgICAgKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2Ugd2lsbCBjbG9zZSB0aGUgYnJvd3NlciBldmVuIGlmIHdlIGRpZG4ndCBjcmVhdGUgaXRcbiAgICAgICAqL1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2tpcENsb3NlQnJvd3Nlcikge1xuICAgICAgICB0aGlzLmNsZWFudXBzLnB1c2goYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGRlYnVnKCdjbG9zaW5nIHRoZSBicm93c2VyJyk7XG4gICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJyb3dzZXIubmV3UGFnZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGltZW91dCwgYXJncywgZXhlY3V0YWJsZVBhdGgsIHNob3dCcm93c2VyIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBjb25zdCBoZWFkbGVzcyA9ICFzaG93QnJvd3NlcjtcbiAgICBkZWJ1ZyhgbGF1bmNoIGEgYnJvd3NlciB3aXRoIGhlYWRsZXNzIG1vZGUgPSAke2hlYWRsZXNzfWApO1xuXG4gICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHB1cHBldGVlci5sYXVuY2goe1xuICAgICAgZW52OiB0aGlzLm9wdGlvbnMudmVyYm9zZSA/IHsgREVCVUc6ICcqJywgLi4ucHJvY2Vzcy5lbnYgfSA6IHVuZGVmaW5lZCxcbiAgICAgIGhlYWRsZXNzLFxuICAgICAgZXhlY3V0YWJsZVBhdGgsXG4gICAgICBhcmdzLFxuICAgICAgdGltZW91dCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2xlYW51cHMucHVzaChhc3luYyAoKSA9PiB7XG4gICAgICBkZWJ1ZygnY2xvc2luZyB0aGUgYnJvd3NlcicpO1xuICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcmVwYXJlQnJvd3Nlcikge1xuICAgICAgZGVidWcoXCJleGVjdXRlICdwcmVwYXJlQnJvd3NlcicgaW50ZXJjZXB0b3IgcHJvdmlkZWQgaW4gb3B0aW9uc1wiKTtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwYXJlQnJvd3Nlcihicm93c2VyKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnY3JlYXRlIGEgbmV3IGJyb3dzZXIgcGFnZScpO1xuICAgIHJldHVybiBicm93c2VyLm5ld1BhZ2UoKTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG8oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcGFnZT86IFBhZ2UsXG4gICAgdGltZW91dD86IG51bWJlcixcbiAgICB3YWl0VW50aWw6IFB1cHBldGVlckxpZmVDeWNsZUV2ZW50IHwgdW5kZWZpbmVkID0gJ2xvYWQnLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYWdlVG9Vc2UgPSBwYWdlIHx8IHRoaXMucGFnZTtcblxuICAgIGlmICghcGFnZVRvVXNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uczogR29Ub09wdGlvbnMgPSB7IC4uLih0aW1lb3V0ID09PSBudWxsID8gbnVsbCA6IHsgdGltZW91dCB9KSwgd2FpdFVudGlsIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwYWdlVG9Vc2UuZ290byh1cmwsIG9wdGlvbnMpO1xuXG4gICAgLy8gbm90ZTogcmVzcG9uc2Ugd2lsbCBiZSBudWxsIHdoZW4gbmF2aWdhdGluZyB0byBzYW1lIHVybCB3aGlsZSBjaGFuZ2luZyB0aGUgaGFzaCBwYXJ0LiB0aGUgY29uZGl0aW9uIGJlbG93IHdpbGwgYWx3YXlzIGFjY2VwdCBudWxsIGFzIHZhbGlkIHJlc3VsdC5cbiAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgKHJlc3BvbnNlID09PSB1bmRlZmluZWQgfHwgcmVzcG9uc2Uuc3RhdHVzKCkgIT09IE9LX1NUQVRVUykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIG5hdmlnYXRlIHRvIHVybCAke3VybH1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldExvZ2luT3B0aW9ucyhfY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZXRMb2dpbk9wdGlvbnMoKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICBhc3luYyBmaWxsSW5wdXRzKHBhZ2VPckZyYW1lOiBQYWdlIHwgRnJhbWUsIGZpZWxkczogeyBzZWxlY3Rvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vZGlmaWVkID0gWy4uLmZpZWxkc107XG4gICAgY29uc3QgaW5wdXQgPSBtb2RpZmllZC5zaGlmdCgpO1xuXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBmaWxsSW5wdXQocGFnZU9yRnJhbWUsIGlucHV0LnNlbGVjdG9yLCBpbnB1dC52YWx1ZSk7XG4gICAgaWYgKG1vZGlmaWVkLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5maWxsSW5wdXRzKHBhZ2VPckZyYW1lLCBtb2RpZmllZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgaWYgKCFjcmVkZW50aWFscyB8fCAhdGhpcy5wYWdlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlR2VuZXJhbEVycm9yKCk7XG4gICAgfVxuXG4gICAgZGVidWcoJ2V4ZWN1dGUgbG9naW4gcHJvY2VzcycpO1xuICAgIGNvbnN0IGxvZ2luT3B0aW9ucyA9IHRoaXMuZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzKTtcblxuICAgIGlmIChsb2dpbk9wdGlvbnMudXNlckFnZW50KSB7XG4gICAgICBkZWJ1Zygnc2V0IGN1c3RvbSB1c2VyIGFnZW50IHByb3ZpZGVkIGluIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5zZXRVc2VyQWdlbnQobG9naW5PcHRpb25zLnVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgZGVidWcoJ25hdmlnYXRlIHRvIGxvZ2luIHVybCcpO1xuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyhsb2dpbk9wdGlvbnMubG9naW5VcmwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBsb2dpbk9wdGlvbnMud2FpdFVudGlsKTtcbiAgICBpZiAobG9naW5PcHRpb25zLmNoZWNrUmVhZGluZXNzKSB7XG4gICAgICBkZWJ1ZyhcImV4ZWN1dGUgJ2NoZWNrUmVhZGluZXNzJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zXCIpO1xuICAgICAgYXdhaXQgbG9naW5PcHRpb25zLmNoZWNrUmVhZGluZXNzKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbG9naW5PcHRpb25zLnN1Ym1pdEJ1dHRvblNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgZGVidWcoJ3dhaXQgdW50aWwgc3VibWl0IGJ1dHRvbiBpcyBhdmFpbGFibGUnKTtcbiAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsIGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgbGV0IGxvZ2luRnJhbWVPclBhZ2U6IFBhZ2UgfCBGcmFtZSB8IG51bGwgPSB0aGlzLnBhZ2U7XG4gICAgaWYgKGxvZ2luT3B0aW9ucy5wcmVBY3Rpb24pIHtcbiAgICAgIGRlYnVnKFwiZXhlY3V0ZSAncHJlQWN0aW9uJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zXCIpO1xuICAgICAgbG9naW5GcmFtZU9yUGFnZSA9IChhd2FpdCBsb2dpbk9wdGlvbnMucHJlQWN0aW9uKCkpIHx8IHRoaXMucGFnZTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnZmlsbCBsb2dpbiBjb21wb25lbnRzIGlucHV0IHdpdGggcmVsZXZhbnQgdmFsdWVzJyk7XG4gICAgYXdhaXQgdGhpcy5maWxsSW5wdXRzKGxvZ2luRnJhbWVPclBhZ2UsIGxvZ2luT3B0aW9ucy5maWVsZHMpO1xuICAgIGRlYnVnKCdjbGljayBvbiBsb2dpbiBzdWJtaXQgYnV0dG9uJyk7XG4gICAgaWYgKHR5cGVvZiBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhd2FpdCBjbGlja0J1dHRvbihsb2dpbkZyYW1lT3JQYWdlLCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IoKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9nZ2luZ0luKTtcblxuICAgIGlmIChsb2dpbk9wdGlvbnMucG9zdEFjdGlvbikge1xuICAgICAgZGVidWcoXCJleGVjdXRlICdwb3N0QWN0aW9uJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zXCIpO1xuICAgICAgYXdhaXQgbG9naW5PcHRpb25zLnBvc3RBY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3dhaXQgZm9yIHBhZ2UgbmF2aWdhdGlvbicpO1xuICAgICAgYXdhaXQgd2FpdEZvck5hdmlnYXRpb24odGhpcy5wYWdlKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnY2hlY2sgbG9naW4gcmVzdWx0Jyk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IGdldEN1cnJlbnRVcmwodGhpcy5wYWdlLCB0cnVlKTtcbiAgICBjb25zdCBsb2dpblJlc3VsdCA9IGF3YWl0IGdldEtleUJ5VmFsdWUobG9naW5PcHRpb25zLnBvc3NpYmxlUmVzdWx0cywgY3VycmVudCwgdGhpcy5wYWdlKTtcbiAgICBkZWJ1ZyhgaGFuZGxlIGxvZ2luIHJlc3VsdHMgJHtsb2dpblJlc3VsdH1gKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dpblJlc3VsdChsb2dpblJlc3VsdCk7XG4gIH1cblxuICBhc3luYyB0ZXJtaW5hdGUoX3N1Y2Nlc3M6IGJvb2xlYW4pIHtcbiAgICBkZWJ1ZyhgdGVybWluYXRpbmcgYnJvd3NlciB3aXRoIHN1Y2Nlc3MgPSAke19zdWNjZXNzfWApO1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLlRlcm1pbmF0aW5nKTtcblxuICAgIGlmICghX3N1Y2Nlc3MgJiYgISF0aGlzLm9wdGlvbnMuc3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGgpIHtcbiAgICAgIGRlYnVnKGBjcmVhdGUgYSBzbmFwc2hvdCBiZWZvcmUgdGVybWluYXRlZCBpbiAke3RoaXMub3B0aW9ucy5zdG9yZUZhaWx1cmVTY3JlZW5TaG90UGF0aH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgcGF0aDogdGhpcy5vcHRpb25zLnN0b3JlRmFpbHVyZVNjcmVlblNob3RQYXRoLFxuICAgICAgICBmdWxsUGFnZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuY2xlYW51cHMucmV2ZXJzZSgpLm1hcCgoY2xlYW51cCkgPT4gY2xlYW51cCgpKSk7XG4gICAgdGhpcy5jbGVhbnVwcyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMb2dpblJlc3VsdChsb2dpblJlc3VsdDogTG9naW5SZXN1bHRzKSB7XG4gICAgc3dpdGNoIChsb2dpblJlc3VsdCkge1xuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuU3VjY2VzczpcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5TdWNjZXNzKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkOlxuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuVW5rbm93bkVycm9yOlxuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dpbkZhaWxlZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3JUeXBlOlxuICAgICAgICAgICAgbG9naW5SZXN1bHQgPT09IExvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmQgP1xuICAgICAgICAgICAgICBTY3JhcGVyRXJyb3JUeXBlcy5JbnZhbGlkUGFzc3dvcmQgOlxuICAgICAgICAgICAgICBTY3JhcGVyRXJyb3JUeXBlcy5HZW5lcmFsLFxuICAgICAgICAgIGVycm9yTWVzc2FnZTogYExvZ2luIGZhaWxlZCB3aXRoICR7bG9naW5SZXN1bHR9IGVycm9yYCxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkOlxuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5DaGFuZ2VQYXNzd29yZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5DaGFuZ2VQYXNzd29yZCxcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBsb2dpbiByZXN1bHQgXCIke2xvZ2luUmVzdWx0fVwiYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLHFCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFBNkMsU0FBQUQsdUJBQUFRLENBQUEsV0FBQUEsQ0FBQSxJQUFB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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Browser, type Page } from 'puppeteer';
|
|
1
|
+
import { type BrowserContext, type Browser, type Page } from 'puppeteer';
|
|
2
2
|
import { type CompanyTypes, type ScraperProgressTypes } from '../definitions';
|
|
3
3
|
import { type TransactionsAccount } from '../transactions';
|
|
4
4
|
import { type ErrorResult, type ScraperErrorTypes } from './errors';
|
|
@@ -38,41 +38,35 @@ export interface FutureDebit {
|
|
|
38
38
|
chargeDate?: string;
|
|
39
39
|
bankAccountNumber?: string;
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
interface ExternalBrowserOptions {
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* An externally created browser instance.
|
|
44
|
+
* you can get a browser directly from puppeteer via `puppeteer.launch()`
|
|
45
|
+
*
|
|
46
|
+
* Note: The browser will be closed by the library after the scraper finishes unless `skipCloseBrowser` is set to true
|
|
44
47
|
*/
|
|
45
|
-
|
|
48
|
+
browser: Browser;
|
|
46
49
|
/**
|
|
47
|
-
*
|
|
50
|
+
* If true, the browser will not be closed by the library after the scraper finishes
|
|
48
51
|
*/
|
|
49
|
-
|
|
52
|
+
skipCloseBrowser?: boolean;
|
|
53
|
+
}
|
|
54
|
+
interface ExternalBrowserContextOptions {
|
|
50
55
|
/**
|
|
51
|
-
*
|
|
56
|
+
* An externally managed browser context. This is useful when you want to manage the browser
|
|
52
57
|
*/
|
|
53
|
-
|
|
58
|
+
browserContext: BrowserContext;
|
|
59
|
+
}
|
|
60
|
+
interface DefaultBrowserOptions {
|
|
54
61
|
/**
|
|
55
62
|
* shows the browser while scraping, good for debugging (default false)
|
|
56
63
|
*/
|
|
57
64
|
showBrowser?: boolean;
|
|
58
|
-
/**
|
|
59
|
-
* scrape transactions to be processed X months in the future
|
|
60
|
-
*/
|
|
61
|
-
futureMonthsToScrape?: number;
|
|
62
|
-
/**
|
|
63
|
-
* option from init puppeteer browser instance outside the libary scope. you can get
|
|
64
|
-
* browser diretly from puppeteer via `puppeteer.launch()`
|
|
65
|
-
*/
|
|
66
|
-
browser?: any;
|
|
67
65
|
/**
|
|
68
66
|
* provide a patch to local chromium to be used by puppeteer. Relevant when using
|
|
69
67
|
* `israeli-bank-scrapers-core` library
|
|
70
68
|
*/
|
|
71
69
|
executablePath?: string;
|
|
72
|
-
/**
|
|
73
|
-
* if set to true, all installment transactions will be combine into the first one
|
|
74
|
-
*/
|
|
75
|
-
combineInstallments?: boolean;
|
|
76
70
|
/**
|
|
77
71
|
* additional arguments to pass to the browser instance. The list of flags can be found in
|
|
78
72
|
*
|
|
@@ -84,13 +78,36 @@ export interface ScraperOptions {
|
|
|
84
78
|
* Maximum navigation time in milliseconds, pass 0 to disable timeout.
|
|
85
79
|
* @default 30000
|
|
86
80
|
*/
|
|
87
|
-
timeout?: number
|
|
81
|
+
timeout?: number;
|
|
88
82
|
/**
|
|
89
83
|
* adjust the browser instance before it is being used
|
|
90
84
|
*
|
|
91
85
|
* @param browser
|
|
92
86
|
*/
|
|
93
87
|
prepareBrowser?: (browser: Browser) => Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
type ScraperBrowserOptions = ExternalBrowserOptions | ExternalBrowserContextOptions | DefaultBrowserOptions;
|
|
90
|
+
export type ScraperOptions = ScraperBrowserOptions & {
|
|
91
|
+
/**
|
|
92
|
+
* The company you want to scrape
|
|
93
|
+
*/
|
|
94
|
+
companyId: CompanyTypes;
|
|
95
|
+
/**
|
|
96
|
+
* include more debug info about in the output
|
|
97
|
+
*/
|
|
98
|
+
verbose?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* the date to fetch transactions from (can't be before the minimum allowed time difference for the scraper)
|
|
101
|
+
*/
|
|
102
|
+
startDate: Date;
|
|
103
|
+
/**
|
|
104
|
+
* scrape transactions to be processed X months in the future
|
|
105
|
+
*/
|
|
106
|
+
futureMonthsToScrape?: number;
|
|
107
|
+
/**
|
|
108
|
+
* if set to true, all installment transactions will be combine into the first one
|
|
109
|
+
*/
|
|
110
|
+
combineInstallments?: boolean;
|
|
94
111
|
/**
|
|
95
112
|
* adjust the page instance before it is being used.
|
|
96
113
|
*
|
|
@@ -114,7 +131,7 @@ export interface ScraperOptions {
|
|
|
114
131
|
* Please note: It will take more time to finish the process.
|
|
115
132
|
*/
|
|
116
133
|
additionalTransactionInformation?: boolean;
|
|
117
|
-
}
|
|
134
|
+
};
|
|
118
135
|
export interface OutputDataOptions {
|
|
119
136
|
/**
|
|
120
137
|
* if true, the result wouldn't be filtered out by date, and you will return unfiltered scrapped data.
|
|
@@ -149,3 +166,4 @@ export interface ScraperLoginResult {
|
|
|
149
166
|
errorMessage?: string;
|
|
150
167
|
persistentOtpToken?: string;
|
|
151
168
|
}
|
|
169
|
+
export {};
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL2ludGVyZmFjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEJyb3dzZXJDb250ZXh0LCB0eXBlIEJyb3dzZXIsIHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyB0eXBlIENvbXBhbnlUeXBlcywgdHlwZSBTY3JhcGVyUHJvZ3Jlc3NUeXBlcyB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcbmltcG9ydCB7IHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyB0eXBlIEVycm9yUmVzdWx0LCB0eXBlIFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG4vLyBUT0RPOiBSZW1vdmUgdGhpcyB0eXBlIHdoZW4gdGhlIHNjcmFwZXIgJ2ZhY3RvcnknIHdpbGwgcmV0dXJuIGNvbmNyZXRlIHNjcmFwZXIgdHlwZXNcbi8vIEluc3RlYWQgb2YgYSBnZW5lcmljIGludGVyZmFjZSAod2hpY2ggaW4gdHVybiB1c2VzIHRoaXMgdHlwZSlcbmV4cG9ydCB0eXBlIFNjcmFwZXJDcmVkZW50aWFscyA9XG4gICAgeyB1c2VyQ29kZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0gfFxuICAgIHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9IHxcbiAgICB7IGlkOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfSB8XG4gICAgeyBpZDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBudW06IHN0cmluZyB9IHxcbiAgICB7IGlkOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNhcmQ2RGlnaXRzOiBzdHJpbmcgfSB8XG4gICAgeyB1c2VybmFtZTogc3RyaW5nLCBuYXRpb25hbElEOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfSB8XG4gICAgKHsgZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9ICYgKHtcbiAgICAgIG90cENvZGVSZXRyaWV2ZXI6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gICAgfSB8IHtcbiAgICAgIG90cExvbmdUZXJtVG9rZW46IHN0cmluZztcbiAgICB9KSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnV0dXJlRGViaXQge1xuICBhbW91bnQ6IG51bWJlcjtcbiAgYW1vdW50Q3VycmVuY3k6IHN0cmluZztcbiAgY2hhcmdlRGF0ZT86IHN0cmluZztcbiAgYmFua0FjY291bnROdW1iZXI/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBFeHRlcm5hbEJyb3dzZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIGV4dGVybmFsbHkgY3JlYXRlZCBicm93c2VyIGluc3RhbmNlLlxuICAgKiB5b3UgY2FuIGdldCBhIGJyb3dzZXIgZGlyZWN0bHkgZnJvbSBwdXBwZXRlZXIgdmlhIGBwdXBwZXRlZXIubGF1bmNoKClgXG4gICAqXG4gICAqIE5vdGU6IFRoZSBicm93c2VyIHdpbGwgYmUgY2xvc2VkIGJ5IHRoZSBsaWJyYXJ5IGFmdGVyIHRoZSBzY3JhcGVyIGZpbmlzaGVzIHVubGVzcyBgc2tpcENsb3NlQnJvd3NlcmAgaXMgc2V0IHRvIHRydWVcbiAgICovXG4gIGJyb3dzZXI6IEJyb3dzZXI7XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBicm93c2VyIHdpbGwgbm90IGJlIGNsb3NlZCBieSB0aGUgbGlicmFyeSBhZnRlciB0aGUgc2NyYXBlciBmaW5pc2hlc1xuICAgKi9cbiAgc2tpcENsb3NlQnJvd3Nlcj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBFeHRlcm5hbEJyb3dzZXJDb250ZXh0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBleHRlcm5hbGx5IG1hbmFnZWQgYnJvd3NlciBjb250ZXh0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIG1hbmFnZSB0aGUgYnJvd3NlclxuICAgKi9cbiAgYnJvd3NlckNvbnRleHQ6IEJyb3dzZXJDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgRGVmYXVsdEJyb3dzZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIHNob3dzIHRoZSBicm93c2VyIHdoaWxlIHNjcmFwaW5nLCBnb29kIGZvciBkZWJ1Z2dpbmcgKGRlZmF1bHQgZmFsc2UpXG4gICAqL1xuICBzaG93QnJvd3Nlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHByb3ZpZGUgYSBwYXRjaCB0byBsb2NhbCBjaHJvbWl1bSB0byBiZSB1c2VkIGJ5IHB1cHBldGVlci4gUmVsZXZhbnQgd2hlbiB1c2luZ1xuICAgKiBgaXNyYWVsaS1iYW5rLXNjcmFwZXJzLWNvcmVgIGxpYnJhcnlcbiAgICovXG4gIGV4ZWN1dGFibGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBicm93c2VyIGluc3RhbmNlLiBUaGUgbGlzdCBvZiBmbGFncyBjYW4gYmUgZm91bmQgaW5cbiAgICpcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL0NvbW1hbmRfTGluZV9PcHRpb25zXG4gICAqIGh0dHBzOi8vcGV0ZXIuc2gvZXhwZXJpbWVudHMvY2hyb21pdW0tY29tbWFuZC1saW5lLXN3aXRjaGVzL1xuICAgKi9cbiAgYXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG5hdmlnYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMsIHBhc3MgMCB0byBkaXNhYmxlIHRpbWVvdXQuXG4gICAqIEBkZWZhdWx0IDMwMDAwXG4gICAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBhZGp1c3QgdGhlIGJyb3dzZXIgaW5zdGFuY2UgYmVmb3JlIGl0IGlzIGJlaW5nIHVzZWRcbiAgICpcbiAgICogQHBhcmFtIGJyb3dzZXJcbiAgICovXG4gIHByZXBhcmVCcm93c2VyPzogKGJyb3dzZXI6IEJyb3dzZXIpID0+IFByb21pc2U8dm9pZD47XG59XG5cbnR5cGUgU2NyYXBlckJyb3dzZXJPcHRpb25zID1cbiAgfCBFeHRlcm5hbEJyb3dzZXJPcHRpb25zXG4gIHwgRXh0ZXJuYWxCcm93c2VyQ29udGV4dE9wdGlvbnNcbiAgfCBEZWZhdWx0QnJvd3Nlck9wdGlvbnM7XG5cbmV4cG9ydCB0eXBlIFNjcmFwZXJPcHRpb25zID0gU2NyYXBlckJyb3dzZXJPcHRpb25zICYge1xuICAvKipcbiAgICogVGhlIGNvbXBhbnkgeW91IHdhbnQgdG8gc2NyYXBlXG4gICAqL1xuICBjb21wYW55SWQ6IENvbXBhbnlUeXBlcztcblxuICAvKipcbiAgICogaW5jbHVkZSBtb3JlIGRlYnVnIGluZm8gYWJvdXQgaW4gdGhlIG91dHB1dFxuICAgKi9cbiAgdmVyYm9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHRoZSBkYXRlIHRvIGZldGNoIHRyYW5zYWN0aW9ucyBmcm9tIChjYW4ndCBiZSBiZWZvcmUgdGhlIG1pbmltdW0gYWxsb3dlZCB0aW1lIGRpZmZlcmVuY2UgZm9yIHRoZSBzY3JhcGVyKVxuICAgKi9cbiAgc3RhcnREYXRlOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBzY3JhcGUgdHJhbnNhY3Rpb25zIHRvIGJlIHByb2Nlc3NlZCBYIG1vbnRocyBpbiB0aGUgZnV0dXJlXG4gICAqL1xuICBmdXR1cmVNb250aHNUb1NjcmFwZT86IG51bWJlcjtcblxuICAvKipcbiAgICogaWYgc2V0IHRvIHRydWUsIGFsbCBpbnN0YWxsbWVudCB0cmFuc2FjdGlvbnMgd2lsbCBiZSBjb21iaW5lIGludG8gdGhlIGZpcnN0IG9uZVxuICAgKi9cbiAgY29tYmluZUluc3RhbGxtZW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGFkanVzdCB0aGUgcGFnZSBpbnN0YW5jZSBiZWZvcmUgaXQgaXMgYmVpbmcgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIHByZXBhcmVQYWdlPzogKHBhZ2U6IFBhZ2UpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIGlmIHNldCwgc3RvcmUgYSBzY3JlZW5zaG90IGlmIGZhaWxlZCB0byBzY3JhcGUuIFVzZWQgZm9yIGRlYnVnIHB1cnBvc2VzXG4gICAqL1xuICBzdG9yZUZhaWx1cmVTY3JlZW5TaG90UGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogaWYgc2V0LCB3aWxsIHNldCB0aGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgb2YgcHVwcGV0ZWVyJ3MgYHBhZ2Uuc2V0RGVmYXVsdFRpbWVvdXRgLlxuICAgKi9cbiAgZGVmYXVsdFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIG1hbmlwdWxhdGlvbiBvZiBvdXRwdXQgZGF0YVxuICAgKi9cbiAgb3V0cHV0RGF0YT86IE91dHB1dERhdGFPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGFkZGl0aW9uYWwgb3BlcmF0aW9uIGZvciBlYWNoIHRyYW5zYWN0aW9uIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uIChMaWtlIGNhdGVnb3J5KSBhYm91dCBpdC5cbiAgICogUGxlYXNlIG5vdGU6IEl0IHdpbGwgdGFrZSBtb3JlIHRpbWUgdG8gZmluaXNoIHRoZSBwcm9jZXNzLlxuICAgKi9cbiAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBpZiB0cnVlLCB0aGUgcmVzdWx0IHdvdWxkbid0IGJlIGZpbHRlcmVkIG91dCBieSBkYXRlLCBhbmQgeW91IHdpbGwgcmV0dXJuIHVuZmlsdGVyZWQgc2NyYXBwZWQgZGF0YS5cbiAgICovXG4gIGVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyYXBlclNjcmFwaW5nUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgYWNjb3VudHM/OiBUcmFuc2FjdGlvbnNBY2NvdW50W107XG4gIGZ1dHVyZURlYml0cz86IEZ1dHVyZURlYml0W107XG4gIGVycm9yVHlwZT86IFNjcmFwZXJFcnJvclR5cGVzO1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7IC8vIG9ubHkgb24gc3VjY2Vzcz1mYWxzZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmFwZXI8VENyZWRlbnRpYWxzIGV4dGVuZHMgU2NyYXBlckNyZWRlbnRpYWxzPiB7XG4gIHNjcmFwZShjcmVkZW50aWFsczogVENyZWRlbnRpYWxzKTogUHJvbWlzZTxTY3JhcGVyU2NyYXBpbmdSZXN1bHQ+O1xuICBvblByb2dyZXNzKGZ1bmM6IChjb21wYW55SWQ6IENvbXBhbnlUeXBlcywgcGF5bG9hZDogeyB0eXBlOiBTY3JhcGVyUHJvZ3Jlc3NUeXBlcyB9KSA9PiB2b2lkKTogdm9pZDtcbiAgdHJpZ2dlclR3b0ZhY3RvckF1dGgocGhvbmVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8U2NyYXBlclR3b0ZhY3RvckF1dGhUcmlnZ2VyUmVzdWx0PjtcbiAgZ2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlbihvdHBDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNjcmFwZXJHZXRMb25nVGVybVR3b0ZhY3RvclRva2VuUmVzdWx0Pjtcbn1cblxuZXhwb3J0IHR5cGUgU2NyYXBlclR3b0ZhY3RvckF1dGhUcmlnZ2VyUmVzdWx0ID0gRXJyb3JSZXN1bHQgfCB7XG4gIHN1Y2Nlc3M6IHRydWU7XG59O1xuXG5leHBvcnQgdHlwZSBTY3JhcGVyR2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlblJlc3VsdCA9IEVycm9yUmVzdWx0IHwge1xuICBzdWNjZXNzOiB0cnVlO1xuICBsb25nVGVybVR3b0ZhY3RvckF1dGhUb2tlbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JhcGVyTG9naW5SZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBlcnJvclR5cGU/OiBTY3JhcGVyRXJyb3JUeXBlcztcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nOyAvLyBvbmx5IG9uIHN1Y2Nlc3M9ZmFsc2VcbiAgcGVyc2lzdGVudE90cFRva2VuPzogc3RyaW5nO1xufVxuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|