israeli-bank-scrapers 4.2.2 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/lib/assertNever.js +1 -2
- package/lib/constants.js +1 -1
- package/lib/definitions.d.ts +5 -0
- package/lib/definitions.js +7 -4
- package/lib/helpers/dates.js +1 -7
- package/lib/helpers/debug.js +1 -4
- package/lib/helpers/elements-interactions.js +5 -27
- package/lib/helpers/fetch.js +1 -21
- package/lib/helpers/navigation.js +1 -9
- package/lib/helpers/storage.js +1 -3
- package/lib/helpers/transactions.js +1 -17
- package/lib/helpers/waiting.js +4 -12
- package/lib/index.js +2 -12
- package/lib/scrapers/amex.js +1 -7
- package/lib/scrapers/amex.test.js +1 -14
- package/lib/scrapers/base-beinleumi-group.js +4 -67
- package/lib/scrapers/base-isracard-amex.js +1 -75
- package/lib/scrapers/base-scraper-with-browser.js +14 -82
- package/lib/scrapers/base-scraper-with-browser.test.js +13 -23
- package/lib/scrapers/base-scraper.js +13 -36
- package/lib/scrapers/behatsdaa.js +5 -26
- package/lib/scrapers/behatsdaa.test.js +1 -10
- package/lib/scrapers/beinleumi.js +1 -11
- package/lib/scrapers/beinleumi.test.js +1 -14
- package/lib/scrapers/beyahad-bishvilha.js +1 -35
- package/lib/scrapers/beyahad-bishvilha.test.js +1 -14
- package/lib/scrapers/discount.js +1 -31
- package/lib/scrapers/discount.test.js +1 -14
- package/lib/scrapers/errors.js +1 -5
- package/lib/scrapers/factory.js +4 -39
- package/lib/scrapers/factory.test.js +2 -4
- package/lib/scrapers/hapoalim.js +4 -50
- package/lib/scrapers/hapoalim.test.js +1 -14
- package/lib/scrapers/interface.js +1 -1
- package/lib/scrapers/isracard.js +1 -7
- package/lib/scrapers/isracard.test.js +1 -14
- package/lib/scrapers/leumi.js +12 -44
- package/lib/scrapers/leumi.test.js +1 -14
- package/lib/scrapers/massad.js +1 -11
- package/lib/scrapers/max.d.ts +20 -0
- package/lib/scrapers/max.js +76 -111
- package/lib/scrapers/max.test.js +21 -16
- package/lib/scrapers/mercantile.d.ts +20 -0
- package/lib/scrapers/mercantile.js +21 -0
- package/lib/scrapers/mercantile.test.d.ts +1 -0
- package/lib/scrapers/mercantile.test.js +48 -0
- package/lib/scrapers/mizrahi.js +14 -40
- package/lib/scrapers/mizrahi.test.js +1 -15
- package/lib/scrapers/one-zero-queries.js +1 -1
- package/lib/scrapers/one-zero.js +2 -54
- package/lib/scrapers/one-zero.test.js +1 -14
- package/lib/scrapers/otsar-hahayal.js +9 -47
- package/lib/scrapers/otsar-hahayal.test.js +1 -14
- package/lib/scrapers/union-bank.js +2 -60
- package/lib/scrapers/union-bank.test.js +1 -14
- package/lib/scrapers/visa-cal.js +17 -56
- package/lib/scrapers/visa-cal.test.js +3 -16
- package/lib/scrapers/yahav.js +25 -52
- package/lib/scrapers/yahav.test.js +1 -14
- package/lib/transactions.js +1 -4
- package/package.json +2 -7
|
@@ -1,50 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.symbol.description");
|
|
4
|
-
|
|
5
4
|
require("core-js/modules/es.array.iterator");
|
|
6
|
-
|
|
7
5
|
require("core-js/modules/es.promise");
|
|
8
|
-
|
|
9
6
|
require("core-js/modules/es.string.replace");
|
|
10
|
-
|
|
11
7
|
Object.defineProperty(exports, "__esModule", {
|
|
12
8
|
value: true
|
|
13
9
|
});
|
|
14
10
|
exports.default = void 0;
|
|
15
|
-
|
|
16
11
|
var _moment = _interopRequireDefault(require("moment"));
|
|
17
|
-
|
|
18
12
|
var _baseScraperWithBrowser = require("./base-scraper-with-browser");
|
|
19
|
-
|
|
20
13
|
var _navigation = require("../helpers/navigation");
|
|
21
|
-
|
|
22
14
|
var _elementsInteractions = require("../helpers/elements-interactions");
|
|
23
|
-
|
|
24
15
|
var _constants = require("../constants");
|
|
25
|
-
|
|
26
16
|
var _transactions = require("../transactions");
|
|
27
|
-
|
|
28
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
30
18
|
const BASE_URL = 'https://online.bankotsar.co.il';
|
|
31
19
|
const LONG_DATE_FORMAT = 'DD/MM/YYYY';
|
|
32
20
|
const DATE_FORMAT = 'DD/MM/YY';
|
|
33
|
-
|
|
34
21
|
function getPossibleLoginResults(page) {
|
|
35
22
|
const urls = {};
|
|
36
23
|
urls[_baseScraperWithBrowser.LoginResults.Success] = [`${BASE_URL}/wps/myportal/FibiMenu/Online`];
|
|
37
|
-
urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = [() => (0, _elementsInteractions.elementPresentOnPage)(page, '#validationMsg')];
|
|
38
|
-
|
|
24
|
+
urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = [() => (0, _elementsInteractions.elementPresentOnPage)(page, '#validationMsg')];
|
|
25
|
+
// TODO: support change password
|
|
39
26
|
/* urls[LOGIN_RESULT.CHANGE_PASSWORD] = [``]; */
|
|
40
|
-
|
|
41
27
|
return urls;
|
|
42
28
|
}
|
|
43
|
-
|
|
44
29
|
function getTransactionsUrl() {
|
|
45
30
|
return `${BASE_URL}/wps/myportal/FibiMenu/Online/OnAccountMngment/OnBalanceTrans/PrivateAccountFlow`;
|
|
46
31
|
}
|
|
47
|
-
|
|
48
32
|
function createLoginFields(credentials) {
|
|
49
33
|
return [{
|
|
50
34
|
selector: '#username',
|
|
@@ -54,12 +38,10 @@ function createLoginFields(credentials) {
|
|
|
54
38
|
value: credentials.password
|
|
55
39
|
}];
|
|
56
40
|
}
|
|
57
|
-
|
|
58
41
|
function getAmountData(amountStr, hasCurrency = false) {
|
|
59
42
|
const amountStrCln = amountStr.replace(',', '');
|
|
60
43
|
let currency = null;
|
|
61
44
|
let amount = null;
|
|
62
|
-
|
|
63
45
|
if (!hasCurrency) {
|
|
64
46
|
amount = parseFloat(amountStrCln);
|
|
65
47
|
currency = _constants.SHEKEL_CURRENCY;
|
|
@@ -71,21 +53,17 @@ function getAmountData(amountStr, hasCurrency = false) {
|
|
|
71
53
|
amount = parseFloat(parts[0]);
|
|
72
54
|
[, currency] = parts;
|
|
73
55
|
}
|
|
74
|
-
|
|
75
56
|
return {
|
|
76
57
|
amount,
|
|
77
58
|
currency
|
|
78
59
|
};
|
|
79
60
|
}
|
|
80
|
-
|
|
81
61
|
function convertTransactions(txns) {
|
|
82
62
|
return txns.map(txn => {
|
|
83
63
|
const dateFormat = txn.date.length === 8 ? DATE_FORMAT : txn.date.length === 10 ? LONG_DATE_FORMAT : null;
|
|
84
|
-
|
|
85
64
|
if (!dateFormat) {
|
|
86
65
|
throw new Error('invalid date format');
|
|
87
66
|
}
|
|
88
|
-
|
|
89
67
|
const txnDate = (0, _moment.default)(txn.date, dateFormat).toISOString();
|
|
90
68
|
const credit = getAmountData(txn.credit || '').amount;
|
|
91
69
|
const debit = getAmountData(txn.debit || '').amount;
|
|
@@ -105,7 +83,6 @@ function convertTransactions(txns) {
|
|
|
105
83
|
return result;
|
|
106
84
|
});
|
|
107
85
|
}
|
|
108
|
-
|
|
109
86
|
async function parseTransactionPage(page) {
|
|
110
87
|
const tdsValues = await (0, _elementsInteractions.pageEvalAll)(page, '#dataTable077 tbody tr', [], trs => {
|
|
111
88
|
return trs.map(el => ({
|
|
@@ -120,13 +97,12 @@ async function parseTransactionPage(page) {
|
|
|
120
97
|
});
|
|
121
98
|
return tdsValues;
|
|
122
99
|
}
|
|
123
|
-
|
|
124
100
|
async function getAccountSummary(page) {
|
|
125
101
|
const balanceElm = await page.$('.current_balance');
|
|
126
102
|
const balanceInnerTextElm = await balanceElm.getProperty('innerText');
|
|
127
103
|
const balanceText = await balanceInnerTextElm.jsonValue();
|
|
128
|
-
const balanceValue = getAmountData(balanceText, true);
|
|
129
|
-
|
|
104
|
+
const balanceValue = getAmountData(balanceText, true);
|
|
105
|
+
// TODO: Find the credit field in bank website (could see it in my account)
|
|
130
106
|
return {
|
|
131
107
|
balance: Number.isNaN(balanceValue.amount) ? 0 : balanceValue.amount,
|
|
132
108
|
creditLimit: 0.0,
|
|
@@ -134,19 +110,18 @@ async function getAccountSummary(page) {
|
|
|
134
110
|
balanceCurrency: balanceValue.currency
|
|
135
111
|
};
|
|
136
112
|
}
|
|
137
|
-
|
|
138
113
|
async function fetchTransactionsForAccount(page, startDate) {
|
|
139
114
|
const summary = await getAccountSummary(page);
|
|
140
|
-
await (0, _elementsInteractions.waitUntilElementFound)(page, 'input#fromDate');
|
|
141
|
-
|
|
115
|
+
await (0, _elementsInteractions.waitUntilElementFound)(page, 'input#fromDate');
|
|
116
|
+
// Get account number
|
|
142
117
|
const branchNum = await page.$eval('.branch_num', span => {
|
|
143
118
|
return span.innerText;
|
|
144
119
|
});
|
|
145
120
|
const accountNmbr = await page.$eval('.acc_num', span => {
|
|
146
121
|
return span.innerText;
|
|
147
122
|
});
|
|
148
|
-
const accountNumber = `14-${branchNum}-${accountNmbr}`;
|
|
149
|
-
|
|
123
|
+
const accountNumber = `14-${branchNum}-${accountNmbr}`;
|
|
124
|
+
// Search for relavant transaction from startDate
|
|
150
125
|
await (0, _elementsInteractions.clickButton)(page, '#tabHeader4');
|
|
151
126
|
await (0, _elementsInteractions.fillInput)(page, 'input#fromDate', startDate.format('DD/MM/YYYY'));
|
|
152
127
|
await (0, _elementsInteractions.clickButton)(page, '#fibi_tab_dates .fibi_btn:nth-child(2)');
|
|
@@ -155,7 +130,6 @@ async function fetchTransactionsForAccount(page, startDate) {
|
|
|
155
130
|
let hasNextPage = true;
|
|
156
131
|
let txns = [];
|
|
157
132
|
const noTransactionElm = await page.$('#NO_DATA077');
|
|
158
|
-
|
|
159
133
|
if (noTransactionElm == null) {
|
|
160
134
|
// Scape transactions (this maybe spanned on multiple pages)
|
|
161
135
|
while (hasNextPage) {
|
|
@@ -163,11 +137,9 @@ async function fetchTransactionsForAccount(page, startDate) {
|
|
|
163
137
|
txns = txns.concat(pageTxns);
|
|
164
138
|
const button = await page.$('#Npage');
|
|
165
139
|
hasNextPage = false;
|
|
166
|
-
|
|
167
140
|
if (button != null) {
|
|
168
141
|
hasNextPage = true;
|
|
169
142
|
}
|
|
170
|
-
|
|
171
143
|
if (hasNextPage) {
|
|
172
144
|
await (0, _elementsInteractions.clickButton)(page, '#Npage');
|
|
173
145
|
await (0, _navigation.waitForNavigation)(page);
|
|
@@ -175,25 +147,20 @@ async function fetchTransactionsForAccount(page, startDate) {
|
|
|
175
147
|
}
|
|
176
148
|
}
|
|
177
149
|
}
|
|
178
|
-
|
|
179
150
|
return {
|
|
180
151
|
accountNumber,
|
|
181
152
|
summary,
|
|
182
153
|
txns: convertTransactions(txns.slice(1)) // Remove first line which is "opening balance"
|
|
183
|
-
|
|
184
154
|
};
|
|
185
155
|
}
|
|
186
|
-
|
|
187
156
|
async function fetchTransactions(page, startDate) {
|
|
188
157
|
// TODO need to extend to support multiple accounts and foreign accounts
|
|
189
158
|
return [await fetchTransactionsForAccount(page, startDate)];
|
|
190
159
|
}
|
|
191
|
-
|
|
192
160
|
async function waitForPostLogin(page) {
|
|
193
161
|
// TODO check for condition to provide new password
|
|
194
162
|
return Promise.race([(0, _elementsInteractions.waitUntilElementFound)(page, 'div.lotusFrame', true), (0, _elementsInteractions.waitUntilElementFound)(page, '#validationMsg')]);
|
|
195
163
|
}
|
|
196
|
-
|
|
197
164
|
class OtsarHahayalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
198
165
|
getLoginOptions(credentials) {
|
|
199
166
|
return {
|
|
@@ -207,13 +174,10 @@ class OtsarHahayalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser
|
|
|
207
174
|
possibleResults: getPossibleLoginResults(this.page)
|
|
208
175
|
};
|
|
209
176
|
}
|
|
210
|
-
|
|
211
177
|
async fetchData() {
|
|
212
178
|
const defaultStartMoment = (0, _moment.default)().subtract(1, 'years').add(1, 'day');
|
|
213
179
|
const startDate = this.options.startDate || defaultStartMoment.toDate();
|
|
214
|
-
|
|
215
180
|
const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
|
|
216
|
-
|
|
217
181
|
const url = getTransactionsUrl();
|
|
218
182
|
await this.navigateTo(url);
|
|
219
183
|
const accounts = await fetchTransactions(this.page, startMoment);
|
|
@@ -222,9 +186,7 @@ class OtsarHahayalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser
|
|
|
222
186
|
accounts
|
|
223
187
|
};
|
|
224
188
|
}
|
|
225
|
-
|
|
226
189
|
}
|
|
227
|
-
|
|
228
190
|
var _default = OtsarHahayalScraper;
|
|
229
191
|
exports.default = _default;
|
|
230
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9vdHNhci1oYWhheWFsLnRzIl0sIm5hbWVzIjpbIkJBU0VfVVJMIiwiTE9OR19EQVRFX0ZPUk1BVCIsIkRBVEVfRk9STUFUIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJwYWdlIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJnZXRUcmFuc2FjdGlvbnNVcmwiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJnZXRBbW91bnREYXRhIiwiYW1vdW50U3RyIiwiaGFzQ3VycmVuY3kiLCJhbW91bnRTdHJDbG4iLCJyZXBsYWNlIiwiY3VycmVuY3kiLCJhbW91bnQiLCJwYXJzZUZsb2F0IiwiU0hFS0VMX0NVUlJFTkNZIiwiaW5jbHVkZXMiLCJTSEVLRUxfQ1VSUkVOQ1lfU1lNQk9MIiwicGFydHMiLCJzcGxpdCIsImNvbnZlcnRUcmFuc2FjdGlvbnMiLCJ0eG5zIiwibWFwIiwidHhuIiwiZGF0ZUZvcm1hdCIsImRhdGUiLCJsZW5ndGgiLCJFcnJvciIsInR4bkRhdGUiLCJ0b0lTT1N0cmluZyIsImNyZWRpdCIsImRlYml0IiwiTnVtYmVyIiwiaXNOYU4iLCJyZXN1bHQiLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsInN0YXR1cyIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiLCJDb21wbGV0ZWQiLCJpZGVudGlmaWVyIiwicmVmZXJlbmNlIiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJwcm9jZXNzZWREYXRlIiwib3JpZ2luYWxBbW91bnQiLCJvcmlnaW5hbEN1cnJlbmN5IiwiY2hhcmdlZEFtb3VudCIsImRlc2NyaXB0aW9uIiwibWVtbyIsInBhcnNlVHJhbnNhY3Rpb25QYWdlIiwidGRzVmFsdWVzIiwidHJzIiwiZWwiLCJxdWVyeVNlbGVjdG9yIiwiaW5uZXJUZXh0IiwiYmFsYW5jZSIsImdldEFjY291bnRTdW1tYXJ5IiwiYmFsYW5jZUVsbSIsIiQiLCJiYWxhbmNlSW5uZXJUZXh0RWxtIiwiZ2V0UHJvcGVydHkiLCJiYWxhbmNlVGV4dCIsImpzb25WYWx1ZSIsImJhbGFuY2VWYWx1ZSIsImNyZWRpdExpbWl0IiwiY3JlZGl0VXRpbGl6YXRpb24iLCJiYWxhbmNlQ3VycmVuY3kiLCJmZXRjaFRyYW5zYWN0aW9uc0ZvckFjY291bnQiLCJzdGFydERhdGUiLCJzdW1tYXJ5IiwiYnJhbmNoTnVtIiwiJGV2YWwiLCJzcGFuIiwiYWNjb3VudE5tYnIiLCJhY2NvdW50TnVtYmVyIiwiZm9ybWF0IiwiaGFzTmV4dFBhZ2UiLCJub1RyYW5zYWN0aW9uRWxtIiwicGFnZVR4bnMiLCJjb25jYXQiLCJidXR0b24iLCJzbGljZSIsImZldGNoVHJhbnNhY3Rpb25zIiwid2FpdEZvclBvc3RMb2dpbiIsIlByb21pc2UiLCJyYWNlIiwiT3RzYXJIYWhheWFsU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRMb2dpbk9wdGlvbnMiLCJsb2dpblVybCIsImZpZWxkcyIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwid2FpdEZvclRpbWVvdXQiLCJwb3N0QWN0aW9uIiwicG9zc2libGVSZXN1bHRzIiwiZmV0Y2hEYXRhIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJhZGQiLCJvcHRpb25zIiwidG9EYXRlIiwic3RhcnRNb21lbnQiLCJtb21lbnQiLCJtYXgiLCJ1cmwiLCJuYXZpZ2F0ZVRvIiwiYWNjb3VudHMiLCJzdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFDQTs7OztBQUVBLE1BQU1BLFFBQVEsR0FBRyxnQ0FBakI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxZQUF6QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxVQUFwQjs7QUFhQSxTQUFTQyx1QkFBVCxDQUFpQ0MsSUFBakMsRUFBNkM7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Z2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCBQb3NzaWJsZUxvZ2luUmVzdWx0cyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyB3YWl0Rm9yTmF2aWdhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQge1xuICBmaWxsSW5wdXQsXG4gIGNsaWNrQnV0dG9uLFxuICB3YWl0VW50aWxFbGVtZW50Rm91bmQsXG4gIHBhZ2VFdmFsQWxsLFxuICBlbGVtZW50UHJlc2VudE9uUGFnZSxcbn0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgU0hFS0VMX0NVUlJFTkNZLCBTSEVLRUxfQ1VSUkVOQ1lfU1lNQk9MIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblN0YXR1c2VzLCBUcmFuc2FjdGlvblR5cGVzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcblxuY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly9vbmxpbmUuYmFua290c2FyLmNvLmlsJztcbmNvbnN0IExPTkdfREFURV9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XG5jb25zdCBEQVRFX0ZPUk1BVCA9ICdERC9NTS9ZWSc7XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBiYWxhbmNlPzogc3RyaW5nO1xuICBkZWJpdD86IHN0cmluZztcbiAgY3JlZGl0Pzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHJlZmVyZW5jZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMocGFnZTogUGFnZSkge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFtgJHtCQVNFX1VSTH0vd3BzL215cG9ydGFsL0ZpYmlNZW51L09ubGluZWBdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdID0gWygpID0+IGVsZW1lbnRQcmVzZW50T25QYWdlKHBhZ2UsICcjdmFsaWRhdGlvbk1zZycpXTtcbiAgLy8gVE9ETzogc3VwcG9ydCBjaGFuZ2UgcGFzc3dvcmRcbiAgLyogdXJsc1tMT0dJTl9SRVNVTFQuQ0hBTkdFX1BBU1NXT1JEXSA9IFtgYF07ICovXG4gIHJldHVybiB1cmxzO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvbnNVcmwoKSB7XG4gIHJldHVybiBgJHtCQVNFX1VSTH0vd3BzL215cG9ydGFsL0ZpYmlNZW51L09ubGluZS9PbkFjY291bnRNbmdtZW50L09uQmFsYW5jZVRyYW5zL1ByaXZhdGVBY2NvdW50Rmxvd2A7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICByZXR1cm4gW1xuICAgIHsgc2VsZWN0b3I6ICcjdXNlcm5hbWUnLCB2YWx1ZTogY3JlZGVudGlhbHMudXNlcm5hbWUgfSxcbiAgICB7IHNlbGVjdG9yOiAnI3Bhc3N3b3JkJywgdmFsdWU6IGNyZWRlbnRpYWxzLnBhc3N3b3JkIH0sXG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldEFtb3VudERhdGEoYW1vdW50U3RyOiBzdHJpbmcsIGhhc0N1cnJlbmN5ID0gZmFsc2UpIHtcbiAgY29uc3QgYW1vdW50U3RyQ2xuID0gYW1vdW50U3RyLnJlcGxhY2UoJywnLCAnJyk7XG4gIGxldCBjdXJyZW5jeTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBhbW91bnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBpZiAoIWhhc0N1cnJlbmN5KSB7XG4gICAgYW1vdW50ID0gcGFyc2VGbG9hdChhbW91bnRTdHJDbG4pO1xuICAgIGN1cnJlbmN5ID0gU0hFS0VMX0NVUlJFTkNZO1xuICB9IGVsc2UgaWYgKGFtb3VudFN0ckNsbi5pbmNsdWRlcyhTSEVLRUxfQ1VSUkVOQ1lfU1lNQk9MKSkge1xuICAgIGFtb3VudCA9IHBhcnNlRmxvYXQoYW1vdW50U3RyQ2xuLnJlcGxhY2UoU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCwgJycpKTtcbiAgICBjdXJyZW5jeSA9IFNIRUtFTF9DVVJSRU5DWTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0cyA9IGFtb3VudFN0ckNsbi5zcGxpdCgnICcpO1xuICAgIGFtb3VudCA9IHBhcnNlRmxvYXQocGFydHNbMF0pO1xuICAgIFssIGN1cnJlbmN5XSA9IHBhcnRzO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbW91bnQsXG4gICAgY3VycmVuY3ksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbnModHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHR4bnMubWFwKCh0eG4pID0+IHtcbiAgICBjb25zdCBkYXRlRm9ybWF0ID1cbiAgICAgICAgdHhuLmRhdGUubGVuZ3RoID09PSA4ID9cbiAgICAgICAgICBEQVRFX0ZPUk1BVCA6XG4gICAgICAgICAgdHhuLmRhdGUubGVuZ3RoID09PSAxMCA/XG4gICAgICAgICAgICBMT05HX0RBVEVfRk9STUFUIDpcbiAgICAgICAgICAgIG51bGw7XG4gICAgaWYgKCFkYXRlRm9ybWF0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZGF0ZSBmb3JtYXQnKTtcbiAgICB9XG4gICAgY29uc3QgdHhuRGF0ZSA9IG1vbWVudCh0eG4uZGF0ZSwgZGF0ZUZvcm1hdCkudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCBjcmVkaXQgPSBnZXRBbW91bnREYXRhKHR4bi5jcmVkaXQgfHwgJycpLmFtb3VudDtcbiAgICBjb25zdCBkZWJpdCA9IGdldEFtb3VudERhdGEodHhuLmRlYml0IHx8ICcnKS5hbW91bnQ7XG4gICAgY29uc3QgYW1vdW50ID0gKE51bWJlci5pc05hTihjcmVkaXQpID8gMCA6IGNyZWRpdCkgLSAoTnVtYmVyLmlzTmFOKGRlYml0KSA/IDAgOiBkZWJpdCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgaWRlbnRpZmllcjogdHhuLnJlZmVyZW5jZSA/IHBhcnNlSW50KHR4bi5yZWZlcmVuY2UsIDEwKSA6IHVuZGVmaW5lZCxcbiAgICAgIGRhdGU6IHR4bkRhdGUsXG4gICAgICBwcm9jZXNzZWREYXRlOiB0eG5EYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IGFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBtZW1vOiAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25QYWdlKHBhZ2U6IFBhZ2UpOiBQcm9taXNlPFNjcmFwZWRUcmFuc2FjdGlvbltdPiB7XG4gIGNvbnN0IHRkc1ZhbHVlcyA9IGF3YWl0IHBhZ2VFdmFsQWxsKHBhZ2UsICcjZGF0YVRhYmxlMDc3IHRib2R5IHRyJywgW10sICh0cnMpID0+IHtcbiAgICByZXR1cm4gKHRycykubWFwKChlbCkgPT4gKHtcbiAgICAgIGRhdGU6IChlbC5xdWVyeVNlbGVjdG9yKCcuZGF0ZScpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQsXG4gICAgICAvLyByZWZlcmVuY2UgYW5kIGRlc2NyaXB0aW9uIGhhdmUgdmljZS12ZXJzYSBjbGFzcyBuYW1lXG4gICAgICBkZXNjcmlwdGlvbjogKGVsLnF1ZXJ5U2VsZWN0b3IoJy5yZWZlcmVuY2UnKSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0LFxuICAgICAgcmVmZXJlbmNlOiAoZWwucXVlcnlTZWxlY3RvcignLmRldGFpbHMnKSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0LFxuICAgICAgY3JlZGl0OiAoZWwucXVlcnlTZWxlY3RvcignLmNyZWRpdCcpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQsXG4gICAgICBkZWJpdDogKGVsLnF1ZXJ5U2VsZWN0b3IoJy5kZWJpdCcpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQsXG4gICAgICBiYWxhbmNlOiAoZWwucXVlcnlTZWxlY3RvcignLmJhbGFuY2UnKSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0LFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRkc1ZhbHVlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudFN1bW1hcnkocGFnZTogUGFnZSkge1xuICBjb25zdCBiYWxhbmNlRWxtID0gYXdhaXQgcGFnZS4kKCcuY3VycmVudF9iYWxhbmNlJyk7XG4gIGNvbnN0IGJhbGFuY2VJbm5lclRleHRFbG0gPSBhd2FpdCBiYWxhbmNlRWxtIS5nZXRQcm9wZXJ0eSgnaW5uZXJUZXh0Jyk7XG4gIGNvbnN0IGJhbGFuY2VUZXh0ID0gYXdhaXQgYmFsYW5jZUlubmVyVGV4dEVsbS5qc29uVmFsdWUoKTtcbiAgY29uc3QgYmFsYW5jZVZhbHVlID0gZ2V0QW1vdW50RGF0YShiYWxhbmNlVGV4dCBhcyBzdHJpbmcsIHRydWUpO1xuICAvLyBUT0RPOiBGaW5kIHRoZSBjcmVkaXQgZmllbGQgaW4gYmFuayB3ZWJzaXRlIChjb3VsZCBzZWUgaXQgaW4gbXkgYWNjb3VudClcbiAgcmV0dXJuIHtcbiAgICBiYWxhbmNlOiBOdW1iZXIuaXNOYU4oYmFsYW5jZVZhbHVlLmFtb3VudCkgPyAwIDogYmFsYW5jZVZhbHVlLmFtb3VudCxcbiAgICBjcmVkaXRMaW1pdDogMC4wLFxuICAgIGNyZWRpdFV0aWxpemF0aW9uOiAwLjAsXG4gICAgYmFsYW5jZUN1cnJlbmN5OiBiYWxhbmNlVmFsdWUuY3VycmVuY3ksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zRm9yQWNjb3VudChwYWdlOiBQYWdlLCBzdGFydERhdGU6IE1vbWVudCkge1xuICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgZ2V0QWNjb3VudFN1bW1hcnkocGFnZSk7XG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnaW5wdXQjZnJvbURhdGUnKTtcbiAgLy8gR2V0IGFjY291bnQgbnVtYmVyXG4gIGNvbnN0IGJyYW5jaE51bSA9IGF3YWl0IHBhZ2UuJGV2YWwoJy5icmFuY2hfbnVtJywgKHNwYW4pID0+IHtcbiAgICByZXR1cm4gKHNwYW4gYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dDtcbiAgfSk7XG5cbiAgY29uc3QgYWNjb3VudE5tYnIgPSBhd2FpdCBwYWdlLiRldmFsKCcuYWNjX251bScsIChzcGFuKSA9PiB7XG4gICAgcmV0dXJuIChzcGFuIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQ7XG4gIH0pO1xuICBjb25zdCBhY2NvdW50TnVtYmVyID0gYDE0LSR7YnJhbmNoTnVtfS0ke2FjY291bnRObWJyfWA7XG4gIC8vIFNlYXJjaCBmb3IgcmVsYXZhbnQgdHJhbnNhY3Rpb24gZnJvbSBzdGFydERhdGVcbiAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgJyN0YWJIZWFkZXI0Jyk7XG4gIGF3YWl0IGZpbGxJbnB1dChcbiAgICBwYWdlLFxuICAgICdpbnB1dCNmcm9tRGF0ZScsXG4gICAgc3RhcnREYXRlLmZvcm1hdCgnREQvTU0vWVlZWScpLFxuICApO1xuXG4gIGF3YWl0IGNsaWNrQnV0dG9uKHBhZ2UsICcjZmliaV90YWJfZGF0ZXMgLmZpYmlfYnRuOm50aC1jaGlsZCgyKScpO1xuICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbiAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICd0YWJsZSNkYXRhVGFibGUwNzcsICNOT19EQVRBMDc3Jyk7XG4gIGxldCBoYXNOZXh0UGFnZSA9IHRydWU7XG4gIGxldCB0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSA9IFtdO1xuXG4gIGNvbnN0IG5vVHJhbnNhY3Rpb25FbG0gPSBhd2FpdCBwYWdlLiQoJyNOT19EQVRBMDc3Jyk7XG4gIGlmIChub1RyYW5zYWN0aW9uRWxtID09IG51bGwpIHtcbiAgICAvLyBTY2FwZSB0cmFuc2FjdGlvbnMgKHRoaXMgbWF5YmUgc3Bhbm5lZCBvbiBtdWx0aXBsZSBwYWdlcylcbiAgICB3aGlsZSAoaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IHBhZ2VUeG5zID0gYXdhaXQgcGFyc2VUcmFuc2FjdGlvblBhZ2UocGFnZSk7XG4gICAgICB0eG5zID0gdHhucy5jb25jYXQocGFnZVR4bnMpO1xuICAgICAgY29uc3QgYnV0dG9uID0gYXdhaXQgcGFnZS4kKCcjTnBhZ2UnKTtcbiAgICAgIGhhc05leHRQYWdlID0gZmFsc2U7XG4gICAgICBpZiAoYnV0dG9uICE9IG51bGwpIHtcbiAgICAgICAgaGFzTmV4dFBhZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGhhc05leHRQYWdlKSB7XG4gICAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKHBhZ2UsICcjTnBhZ2UnKTtcbiAgICAgICAgYXdhaXQgd2FpdEZvck5hdmlnYXRpb24ocGFnZSk7XG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAndGFibGUjZGF0YVRhYmxlMDc3Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIHN1bW1hcnksXG4gICAgdHhuczogY29udmVydFRyYW5zYWN0aW9ucyh0eG5zLnNsaWNlKDEpKSwgLy8gUmVtb3ZlIGZpcnN0IGxpbmUgd2hpY2ggaXMgXCJvcGVuaW5nIGJhbGFuY2VcIlxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlLCBzdGFydERhdGU6IE1vbWVudCkge1xuICAvLyBUT0RPIG5lZWQgdG8gZXh0ZW5kIHRvIHN1cHBvcnQgbXVsdGlwbGUgYWNjb3VudHMgYW5kIGZvcmVpZ24gYWNjb3VudHNcbiAgcmV0dXJuIFthd2FpdCBmZXRjaFRyYW5zYWN0aW9uc0ZvckFjY291bnQocGFnZSwgc3RhcnREYXRlKV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JQb3N0TG9naW4ocGFnZTogUGFnZSkge1xuICAvLyBUT0RPIGNoZWNrIGZvciBjb25kaXRpb24gdG8gcHJvdmlkZSBuZXcgcGFzc3dvcmRcbiAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdkaXYubG90dXNGcmFtZScsIHRydWUpLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnI3ZhbGlkYXRpb25Nc2cnKSxcbiAgXSk7XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfTtcblxuY2xhc3MgT3RzYXJIYWhheWFsU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogYCR7QkFTRV9VUkx9L01hdGFmTG9naW5TZXJ2aWNlL01hdGFmTG9naW5TZXJ2bGV0P2JhbmtJZD1PVFNBUlBSVEFMJnNpdGU9UHJpdmF0ZSZLT0RTQUZBPUhFYCxcbiAgICAgIGZpZWxkczogY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHMpLFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3I6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlLndhaXRGb3JUaW1lb3V0KDEwMDApO1xuICAgICAgICBhd2FpdCBjbGlja0J1dHRvbih0aGlzLnBhZ2UsICcjY29udGludWVCdG4nKTtcbiAgICAgIH0sXG4gICAgICBwb3N0QWN0aW9uOiBhc3luYyAoKSA9PiB3YWl0Rm9yUG9zdExvZ2luKHRoaXMucGFnZSksXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKHRoaXMucGFnZSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnRNb21lbnQgPSBtb21lbnQoKS5zdWJ0cmFjdCgxLCAneWVhcnMnKS5hZGQoMSwgJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMub3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcblxuICAgIGNvbnN0IHVybCA9IGdldFRyYW5zYWN0aW9uc1VybCgpO1xuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyh1cmwpO1xuXG4gICAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9ucyh0aGlzLnBhZ2UsIHN0YXJ0TW9tZW50KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgYWNjb3VudHMsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBPdHNhckhhaGF5YWxTY3JhcGVyO1xuIl19
|
|
192
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsIl9uYXZpZ2F0aW9uIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX2NvbnN0YW50cyIsIl90cmFuc2FjdGlvbnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkJBU0VfVVJMIiwiTE9OR19EQVRFX0ZPUk1BVCIsIkRBVEVfRk9STUFUIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJwYWdlIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJlbGVtZW50UHJlc2VudE9uUGFnZSIsImdldFRyYW5zYWN0aW9uc1VybCIsImNyZWF0ZUxvZ2luRmllbGRzIiwiY3JlZGVudGlhbHMiLCJzZWxlY3RvciIsInZhbHVlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImdldEFtb3VudERhdGEiLCJhbW91bnRTdHIiLCJoYXNDdXJyZW5jeSIsImFtb3VudFN0ckNsbiIsInJlcGxhY2UiLCJjdXJyZW5jeSIsImFtb3VudCIsInBhcnNlRmxvYXQiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJpbmNsdWRlcyIsIlNIRUtFTF9DVVJSRU5DWV9TWU1CT0wiLCJwYXJ0cyIsInNwbGl0IiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJtYXAiLCJ0eG4iLCJkYXRlRm9ybWF0IiwiZGF0ZSIsImxlbmd0aCIsIkVycm9yIiwidHhuRGF0ZSIsIm1vbWVudCIsInRvSVNPU3RyaW5nIiwiY3JlZGl0IiwiZGViaXQiLCJOdW1iZXIiLCJpc05hTiIsInJlc3VsdCIsInR5cGUiLCJUcmFuc2FjdGlvblR5cGVzIiwiTm9ybWFsIiwic3RhdHVzIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIkNvbXBsZXRlZCIsImlkZW50aWZpZXIiLCJyZWZlcmVuY2UiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsInByb2Nlc3NlZERhdGUiLCJvcmlnaW5hbEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiZGVzY3JpcHRpb24iLCJtZW1vIiwicGFyc2VUcmFuc2FjdGlvblBhZ2UiLCJ0ZHNWYWx1ZXMiLCJwYWdlRXZhbEFsbCIsInRycyIsImVsIiwicXVlcnlTZWxlY3RvciIsImlubmVyVGV4dCIsImJhbGFuY2UiLCJnZXRBY2NvdW50U3VtbWFyeSIsImJhbGFuY2VFbG0iLCIkIiwiYmFsYW5jZUlubmVyVGV4dEVsbSIsImdldFByb3BlcnR5IiwiYmFsYW5jZVRleHQiLCJqc29uVmFsdWUiLCJiYWxhbmNlVmFsdWUiLCJjcmVkaXRMaW1pdCIsImNyZWRpdFV0aWxpemF0aW9uIiwiYmFsYW5jZUN1cnJlbmN5IiwiZmV0Y2hUcmFuc2FjdGlvbnNGb3JBY2NvdW50Iiwic3RhcnREYXRlIiwic3VtbWFyeSIsIndhaXRVbnRpbEVsZW1lbnRGb3VuZCIsImJyYW5jaE51bSIsIiRldmFsIiwic3BhbiIsImFjY291bnRObWJyIiwiYWNjb3VudE51bWJlciIsImNsaWNrQnV0dG9uIiwiZmlsbElucHV0IiwiZm9ybWF0Iiwid2FpdEZvck5hdmlnYXRpb24iLCJoYXNOZXh0UGFnZSIsIm5vVHJhbnNhY3Rpb25FbG0iLCJwYWdlVHhucyIsImNvbmNhdCIsImJ1dHRvbiIsInNsaWNlIiwiZmV0Y2hUcmFuc2FjdGlvbnMiLCJ3YWl0Rm9yUG9zdExvZ2luIiwiUHJvbWlzZSIsInJhY2UiLCJPdHNhckhhaGF5YWxTY3JhcGVyIiwiQmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImdldExvZ2luT3B0aW9ucyIsImxvZ2luVXJsIiwiZmllbGRzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJ3YWl0Rm9yVGltZW91dCIsInBvc3RBY3Rpb24iLCJwb3NzaWJsZVJlc3VsdHMiLCJmZXRjaERhdGEiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsIm9wdGlvbnMiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsInVybCIsIm5hdmlnYXRlVG8iLCJhY2NvdW50cyIsInN1Y2Nlc3MiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvb3RzYXItaGFoYXlhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50LCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luUmVzdWx0cywgUG9zc2libGVMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgd2FpdEZvck5hdmlnYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHtcbiAgZmlsbElucHV0LFxuICBjbGlja0J1dHRvbixcbiAgd2FpdFVudGlsRWxlbWVudEZvdW5kLFxuICBwYWdlRXZhbEFsbCxcbiAgZWxlbWVudFByZXNlbnRPblBhZ2UsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IFNIRUtFTF9DVVJSRU5DWSwgU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcyB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5cbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vb25saW5lLmJhbmtvdHNhci5jby5pbCc7XG5jb25zdCBMT05HX0RBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuY29uc3QgREFURV9GT1JNQVQgPSAnREQvTU0vWVknO1xuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgYmFsYW5jZT86IHN0cmluZztcbiAgZGViaXQ/OiBzdHJpbmc7XG4gIGNyZWRpdD86IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICByZWZlcmVuY2U/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkYXRlOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKHBhZ2U6IFBhZ2UpIHtcbiAgY29uc3QgdXJsczogUG9zc2libGVMb2dpblJlc3VsdHMgPSB7fTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuU3VjY2Vzc10gPSBbYCR7QkFTRV9VUkx9L3dwcy9teXBvcnRhbC9GaWJpTWVudS9PbmxpbmVgXTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkXSA9IFsoKSA9PiBlbGVtZW50UHJlc2VudE9uUGFnZShwYWdlLCAnI3ZhbGlkYXRpb25Nc2cnKV07XG4gIC8vIFRPRE86IHN1cHBvcnQgY2hhbmdlIHBhc3N3b3JkXG4gIC8qIHVybHNbTE9HSU5fUkVTVUxULkNIQU5HRV9QQVNTV09SRF0gPSBbYGBdOyAqL1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25zVXJsKCkge1xuICByZXR1cm4gYCR7QkFTRV9VUkx9L3dwcy9teXBvcnRhbC9GaWJpTWVudS9PbmxpbmUvT25BY2NvdW50TW5nbWVudC9PbkJhbGFuY2VUcmFucy9Qcml2YXRlQWNjb3VudEZsb3dgO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgcmV0dXJuIFtcbiAgICB7IHNlbGVjdG9yOiAnI3VzZXJuYW1lJywgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJuYW1lIH0sXG4gICAgeyBzZWxlY3RvcjogJyNwYXNzd29yZCcsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRBbW91bnREYXRhKGFtb3VudFN0cjogc3RyaW5nLCBoYXNDdXJyZW5jeSA9IGZhbHNlKSB7XG4gIGNvbnN0IGFtb3VudFN0ckNsbiA9IGFtb3VudFN0ci5yZXBsYWNlKCcsJywgJycpO1xuICBsZXQgY3VycmVuY3k6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBsZXQgYW1vdW50OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgaWYgKCFoYXNDdXJyZW5jeSkge1xuICAgIGFtb3VudCA9IHBhcnNlRmxvYXQoYW1vdW50U3RyQ2xuKTtcbiAgICBjdXJyZW5jeSA9IFNIRUtFTF9DVVJSRU5DWTtcbiAgfSBlbHNlIGlmIChhbW91bnRTdHJDbG4uaW5jbHVkZXMoU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCkpIHtcbiAgICBhbW91bnQgPSBwYXJzZUZsb2F0KGFtb3VudFN0ckNsbi5yZXBsYWNlKFNIRUtFTF9DVVJSRU5DWV9TWU1CT0wsICcnKSk7XG4gICAgY3VycmVuY3kgPSBTSEVLRUxfQ1VSUkVOQ1k7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydHMgPSBhbW91bnRTdHJDbG4uc3BsaXQoJyAnKTtcbiAgICBhbW91bnQgPSBwYXJzZUZsb2F0KHBhcnRzWzBdKTtcbiAgICBbLCBjdXJyZW5jeV0gPSBwYXJ0cztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYW1vdW50LFxuICAgIGN1cnJlbmN5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIHJldHVybiB0eG5zLm1hcCgodHhuKSA9PiB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgICAgIHR4bi5kYXRlLmxlbmd0aCA9PT0gOCA/XG4gICAgICAgICAgREFURV9GT1JNQVQgOlxuICAgICAgICAgIHR4bi5kYXRlLmxlbmd0aCA9PT0gMTAgP1xuICAgICAgICAgICAgTE9OR19EQVRFX0ZPUk1BVCA6XG4gICAgICAgICAgICBudWxsO1xuICAgIGlmICghZGF0ZUZvcm1hdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRhdGUgZm9ybWF0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4bkRhdGUgPSBtb21lbnQodHhuLmRhdGUsIGRhdGVGb3JtYXQpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgY3JlZGl0ID0gZ2V0QW1vdW50RGF0YSh0eG4uY3JlZGl0IHx8ICcnKS5hbW91bnQ7XG4gICAgY29uc3QgZGViaXQgPSBnZXRBbW91bnREYXRhKHR4bi5kZWJpdCB8fCAnJykuYW1vdW50O1xuICAgIGNvbnN0IGFtb3VudCA9IChOdW1iZXIuaXNOYU4oY3JlZGl0KSA/IDAgOiBjcmVkaXQpIC0gKE51bWJlci5pc05hTihkZWJpdCkgPyAwIDogZGViaXQpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbiA9IHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICAgIGlkZW50aWZpZXI6IHR4bi5yZWZlcmVuY2UgPyBwYXJzZUludCh0eG4ucmVmZXJlbmNlLCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICBkYXRlOiB0eG5EYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogdHhuRGF0ZSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBhbW91bnQsXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiBhbW91bnQsXG4gICAgICBkZXNjcmlwdGlvbjogdHhuLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgbWVtbzogJycsXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uUGFnZShwYWdlOiBQYWdlKTogUHJvbWlzZTxTY3JhcGVkVHJhbnNhY3Rpb25bXT4ge1xuICBjb25zdCB0ZHNWYWx1ZXMgPSBhd2FpdCBwYWdlRXZhbEFsbChwYWdlLCAnI2RhdGFUYWJsZTA3NyB0Ym9keSB0cicsIFtdLCAodHJzKSA9PiB7XG4gICAgcmV0dXJuICh0cnMpLm1hcCgoZWwpID0+ICh7XG4gICAgICBkYXRlOiAoZWwucXVlcnlTZWxlY3RvcignLmRhdGUnKSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0LFxuICAgICAgLy8gcmVmZXJlbmNlIGFuZCBkZXNjcmlwdGlvbiBoYXZlIHZpY2UtdmVyc2EgY2xhc3MgbmFtZVxuICAgICAgZGVzY3JpcHRpb246IChlbC5xdWVyeVNlbGVjdG9yKCcucmVmZXJlbmNlJykgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCxcbiAgICAgIHJlZmVyZW5jZTogKGVsLnF1ZXJ5U2VsZWN0b3IoJy5kZXRhaWxzJykgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCxcbiAgICAgIGNyZWRpdDogKGVsLnF1ZXJ5U2VsZWN0b3IoJy5jcmVkaXQnKSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0LFxuICAgICAgZGViaXQ6IChlbC5xdWVyeVNlbGVjdG9yKCcuZGViaXQnKSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0LFxuICAgICAgYmFsYW5jZTogKGVsLnF1ZXJ5U2VsZWN0b3IoJy5iYWxhbmNlJykgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCxcbiAgICB9KSk7XG4gIH0pO1xuXG4gIHJldHVybiB0ZHNWYWx1ZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFjY291bnRTdW1tYXJ5KHBhZ2U6IFBhZ2UpIHtcbiAgY29uc3QgYmFsYW5jZUVsbSA9IGF3YWl0IHBhZ2UuJCgnLmN1cnJlbnRfYmFsYW5jZScpO1xuICBjb25zdCBiYWxhbmNlSW5uZXJUZXh0RWxtID0gYXdhaXQgYmFsYW5jZUVsbSEuZ2V0UHJvcGVydHkoJ2lubmVyVGV4dCcpO1xuICBjb25zdCBiYWxhbmNlVGV4dCA9IGF3YWl0IGJhbGFuY2VJbm5lclRleHRFbG0uanNvblZhbHVlKCk7XG4gIGNvbnN0IGJhbGFuY2VWYWx1ZSA9IGdldEFtb3VudERhdGEoYmFsYW5jZVRleHQgYXMgc3RyaW5nLCB0cnVlKTtcbiAgLy8gVE9ETzogRmluZCB0aGUgY3JlZGl0IGZpZWxkIGluIGJhbmsgd2Vic2l0ZSAoY291bGQgc2VlIGl0IGluIG15IGFjY291bnQpXG4gIHJldHVybiB7XG4gICAgYmFsYW5jZTogTnVtYmVyLmlzTmFOKGJhbGFuY2VWYWx1ZS5hbW91bnQpID8gMCA6IGJhbGFuY2VWYWx1ZS5hbW91bnQsXG4gICAgY3JlZGl0TGltaXQ6IDAuMCxcbiAgICBjcmVkaXRVdGlsaXphdGlvbjogMC4wLFxuICAgIGJhbGFuY2VDdXJyZW5jeTogYmFsYW5jZVZhbHVlLmN1cnJlbmN5LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9uc0ZvckFjY291bnQocGFnZTogUGFnZSwgc3RhcnREYXRlOiBNb21lbnQpIHtcbiAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IGdldEFjY291bnRTdW1tYXJ5KHBhZ2UpO1xuICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2lucHV0I2Zyb21EYXRlJyk7XG4gIC8vIEdldCBhY2NvdW50IG51bWJlclxuICBjb25zdCBicmFuY2hOdW0gPSBhd2FpdCBwYWdlLiRldmFsKCcuYnJhbmNoX251bScsIChzcGFuKSA9PiB7XG4gICAgcmV0dXJuIChzcGFuIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQ7XG4gIH0pO1xuXG4gIGNvbnN0IGFjY291bnRObWJyID0gYXdhaXQgcGFnZS4kZXZhbCgnLmFjY19udW0nLCAoc3BhbikgPT4ge1xuICAgIHJldHVybiAoc3BhbiBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0O1xuICB9KTtcbiAgY29uc3QgYWNjb3VudE51bWJlciA9IGAxNC0ke2JyYW5jaE51bX0tJHthY2NvdW50Tm1icn1gO1xuICAvLyBTZWFyY2ggZm9yIHJlbGF2YW50IHRyYW5zYWN0aW9uIGZyb20gc3RhcnREYXRlXG4gIGF3YWl0IGNsaWNrQnV0dG9uKHBhZ2UsICcjdGFiSGVhZGVyNCcpO1xuICBhd2FpdCBmaWxsSW5wdXQoXG4gICAgcGFnZSxcbiAgICAnaW5wdXQjZnJvbURhdGUnLFxuICAgIHN0YXJ0RGF0ZS5mb3JtYXQoJ0REL01NL1lZWVknKSxcbiAgKTtcblxuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnI2ZpYmlfdGFiX2RhdGVzIC5maWJpX2J0bjpudGgtY2hpbGQoMiknKTtcbiAgYXdhaXQgd2FpdEZvck5hdmlnYXRpb24ocGFnZSk7XG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAndGFibGUjZGF0YVRhYmxlMDc3LCAjTk9fREFUQTA3NycpO1xuICBsZXQgaGFzTmV4dFBhZ2UgPSB0cnVlO1xuICBsZXQgdHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10gPSBbXTtcblxuICBjb25zdCBub1RyYW5zYWN0aW9uRWxtID0gYXdhaXQgcGFnZS4kKCcjTk9fREFUQTA3NycpO1xuICBpZiAobm9UcmFuc2FjdGlvbkVsbSA9PSBudWxsKSB7XG4gICAgLy8gU2NhcGUgdHJhbnNhY3Rpb25zICh0aGlzIG1heWJlIHNwYW5uZWQgb24gbXVsdGlwbGUgcGFnZXMpXG4gICAgd2hpbGUgKGhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCBwYWdlVHhucyA9IGF3YWl0IHBhcnNlVHJhbnNhY3Rpb25QYWdlKHBhZ2UpO1xuICAgICAgdHhucyA9IHR4bnMuY29uY2F0KHBhZ2VUeG5zKTtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IHBhZ2UuJCgnI05wYWdlJyk7XG4gICAgICBoYXNOZXh0UGFnZSA9IGZhbHNlO1xuICAgICAgaWYgKGJ1dHRvbiAhPSBudWxsKSB7XG4gICAgICAgIGhhc05leHRQYWdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNOZXh0UGFnZSkge1xuICAgICAgICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnI05wYWdlJyk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JOYXZpZ2F0aW9uKHBhZ2UpO1xuICAgICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ3RhYmxlI2RhdGFUYWJsZTA3NycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWNjb3VudE51bWJlcixcbiAgICBzdW1tYXJ5LFxuICAgIHR4bnM6IGNvbnZlcnRUcmFuc2FjdGlvbnModHhucy5zbGljZSgxKSksIC8vIFJlbW92ZSBmaXJzdCBsaW5lIHdoaWNoIGlzIFwib3BlbmluZyBiYWxhbmNlXCJcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgc3RhcnREYXRlOiBNb21lbnQpIHtcbiAgLy8gVE9ETyBuZWVkIHRvIGV4dGVuZCB0byBzdXBwb3J0IG11bHRpcGxlIGFjY291bnRzIGFuZCBmb3JlaWduIGFjY291bnRzXG4gIHJldHVybiBbYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnNGb3JBY2NvdW50KHBhZ2UsIHN0YXJ0RGF0ZSldO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yUG9zdExvZ2luKHBhZ2U6IFBhZ2UpIHtcbiAgLy8gVE9ETyBjaGVjayBmb3IgY29uZGl0aW9uIHRvIHByb3ZpZGUgbmV3IHBhc3N3b3JkXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnZGl2LmxvdHVzRnJhbWUnLCB0cnVlKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJyN2YWxpZGF0aW9uTXNnJyksXG4gIF0pO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIE90c2FySGFoYXlhbFNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IGAke0JBU0VfVVJMfS9NYXRhZkxvZ2luU2VydmljZS9NYXRhZkxvZ2luU2VydmxldD9iYW5rSWQ9T1RTQVJQUlRBTCZzaXRlPVByaXZhdGUmS09EU0FGQT1IRWAsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFnZS53YWl0Rm9yVGltZW91dCgxMDAwKTtcbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2NvbnRpbnVlQnRuJyk7XG4gICAgICB9LFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gd2FpdEZvclBvc3RMb2dpbih0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyh0aGlzLnBhZ2UpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLm9wdGlvbnMuc3RhcnREYXRlIHx8IGRlZmF1bHRTdGFydE1vbWVudC50b0RhdGUoKTtcbiAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG5cbiAgICBjb25zdCB1cmwgPSBnZXRUcmFuc2FjdGlvbnNVcmwoKTtcbiAgICBhd2FpdCB0aGlzLm5hdmlnYXRlVG8odXJsKTtcblxuICAgIGNvbnN0IGFjY291bnRzID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnModGhpcy5wYWdlLCBzdGFydE1vbWVudCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgT3RzYXJIYWhheWFsU2NyYXBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLHVCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxxQkFBQSxHQUFBSCxPQUFBO0FBT0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQXFGLFNBQUFELHVCQUFBTyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBO0FBRXJGLE1BQU1HLFFBQVEsR0FBRyxnQ0FBZ0M7QUFDakQsTUFBTUMsZ0JBQWdCLEdBQUcsWUFBWTtBQUNyQyxNQUFNQyxXQUFXLEdBQUcsVUFBVTtBQWE5QixTQUFTQyx1QkFBdUJBLENBQUNDLElBQVUsRUFBRTtFQUMzQyxNQUFNQyxJQUEwQixHQUFHLENBQUMsQ0FBQztFQUNyQ0EsSUFBSSxDQUFDQyxvQ0FBWSxDQUFDQyxPQUFPLENBQUMsR0FBRyxDQUFFLEdBQUVQLFFBQVMsK0JBQThCLENBQUM7RUFDekVLLElBQUksQ0FBQ0Msb0NBQVksQ0FBQ0UsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUFDLDBDQUFvQixFQUFDTCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztFQUN6RjtFQUNBO0VBQ0EsT0FBT0MsSUFBSTtBQUNiO0FBRUEsU0FBU0ssa0JBQWtCQSxDQUFBLEVBQUc7RUFDNUIsT0FBUSxHQUFFVixRQUFTLGtGQUFpRjtBQUN0RztBQUVBLFNBQVNXLGlCQUFpQkEsQ0FBQ0MsV0FBdUMsRUFBRTtFQUNsRSxPQUFPLENBQ0w7SUFBRUMsUUFBUSxFQUFFLFdBQVc7SUFBRUMsS0FBSyxFQUFFRixXQUFXLENBQUNHO0VBQVMsQ0FBQyxFQUN0RDtJ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
|
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.promise");
|
|
4
|
-
|
|
5
4
|
require("core-js/modules/es.string.trim");
|
|
6
|
-
|
|
7
5
|
var _otsarHahayal = _interopRequireDefault(require("./otsar-hahayal"));
|
|
8
|
-
|
|
9
6
|
var _testsUtils = require("../tests/tests-utils");
|
|
10
|
-
|
|
11
7
|
var _definitions = require("../definitions");
|
|
12
|
-
|
|
13
8
|
var _baseScraperWithBrowser = require("./base-scraper-with-browser");
|
|
14
|
-
|
|
15
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
-
|
|
17
10
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
-
|
|
19
11
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
20
|
-
|
|
21
12
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
22
|
-
|
|
23
13
|
const COMPANY_ID = 'otsarHahayal'; // TODO this property should be hard-coded in the provider
|
|
24
|
-
|
|
25
14
|
const testsConfig = (0, _testsUtils.getTestsConfig)();
|
|
26
15
|
describe('OtsarHahayal legacy scraper', () => {
|
|
27
16
|
beforeAll(() => {
|
|
@@ -36,7 +25,6 @@ describe('OtsarHahayal legacy scraper', () => {
|
|
|
36
25
|
const options = _objectSpread({}, testsConfig.options, {
|
|
37
26
|
companyId: COMPANY_ID
|
|
38
27
|
});
|
|
39
|
-
|
|
40
28
|
const scraper = new _otsarHahayal.default(options);
|
|
41
29
|
const result = await scraper.scrape({
|
|
42
30
|
username: 'e10s12',
|
|
@@ -50,7 +38,6 @@ describe('OtsarHahayal legacy scraper', () => {
|
|
|
50
38
|
const options = _objectSpread({}, testsConfig.options, {
|
|
51
39
|
companyId: COMPANY_ID
|
|
52
40
|
});
|
|
53
|
-
|
|
54
41
|
const scraper = new _otsarHahayal.default(options);
|
|
55
42
|
const result = await scraper.scrape(testsConfig.credentials.otsarHahayal);
|
|
56
43
|
expect(result).toBeDefined();
|
|
@@ -60,4 +47,4 @@ describe('OtsarHahayal legacy scraper', () => {
|
|
|
60
47
|
(0, _testsUtils.exportTransactions)(COMPANY_ID, result.accounts || []);
|
|
61
48
|
});
|
|
62
49
|
});
|
|
63
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3RzYXJIYWhheWFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdGVzdHNVdGlscyIsIl9kZWZpbml0aW9ucyIsIl9iYXNlU2NyYXBlcldpdGhCcm93c2VyIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJrZXkiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkNPTVBBTllfSUQiLCJ0ZXN0c0NvbmZpZyIsImdldFRlc3RzQ29uZmlnIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJleHRlbmRBc3luY1RpbWVvdXQiLCJ0ZXN0IiwiZXhwZWN0IiwiU0NSQVBFUlMiLCJvdHNhckhhaGF5YWwiLCJ0b0JlRGVmaW5lZCIsImxvZ2luRmllbGRzIiwidG9Db250YWluIiwibWF5YmVUZXN0Q29tcGFueUFQSSIsImNvbmZpZyIsImNvbXBhbnlBUEkiLCJpbnZhbGlkUGFzc3dvcmQiLCJvcHRpb25zIiwiY29tcGFueUlkIiwic2NyYXBlciIsIk90c2FySGFoYXlhbFNjcmFwZXIiLCJyZXN1bHQiLCJzY3JhcGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwic3VjY2VzcyIsInRvQmVGYWxzeSIsImVycm9yVHlwZSIsInRvQmUiLCJMb2dpblJlc3VsdHMiLCJJbnZhbGlkUGFzc3dvcmQiLCJjcmVkZW50aWFscyIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwidHJpbSIsInRvQmVUcnV0aHkiLCJleHBvcnRUcmFuc2FjdGlvbnMiLCJhY2NvdW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9vdHNhci1oYWhheWFsLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE90c2FySGFoYXlhbFNjcmFwZXIgZnJvbSAnLi9vdHNhci1oYWhheWFsJztcbmltcG9ydCB7XG4gIG1heWJlVGVzdENvbXBhbnlBUEksIGV4dGVuZEFzeW5jVGltZW91dCwgZ2V0VGVzdHNDb25maWcsIGV4cG9ydFRyYW5zYWN0aW9ucyxcbn0gZnJvbSAnLi4vdGVzdHMvdGVzdHMtdXRpbHMnO1xuaW1wb3J0IHsgU0NSQVBFUlMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuXG5jb25zdCBDT01QQU5ZX0lEID0gJ290c2FySGFoYXlhbCc7IC8vIFRPRE8gdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGFyZC1jb2RlZCBpbiB0aGUgcHJvdmlkZXJcbmNvbnN0IHRlc3RzQ29uZmlnID0gZ2V0VGVzdHNDb25maWcoKTtcblxuZGVzY3JpYmUoJ090c2FySGFoYXlhbCBsZWdhY3kgc2NyYXBlcicsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBleHRlbmRBc3luY1RpbWVvdXQoKTsgLy8gVGhlIGRlZmF1bHQgdGltZW91dCBpcyA1IHNlY29uZHMgcGVyIGFzeW5jIHRlc3QsIHRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgdGltZW91dCB2YWx1ZVxuICB9KTtcblxuICB0ZXN0KCdzaG91bGQgZXhwb3NlIGxvZ2luIGZpZWxkcyBpbiBzY3JhcGVycyBjb25zdGFudCcsICgpID0+IHtcbiAgICBleHBlY3QoU0NSQVBFUlMub3RzYXJIYWhheWFsKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChTQ1JBUEVSUy5vdHNhckhhaGF5YWwubG9naW5GaWVsZHMpLnRvQ29udGFpbigndXNlcm5hbWUnKTtcbiAgICBleHBlY3QoU0NSQVBFUlMub3RzYXJIYWhheWFsLmxvZ2luRmllbGRzKS50b0NvbnRhaW4oJ3Bhc3N3b3JkJyk7XG4gIH0pO1xuXG4gIG1heWJlVGVzdENvbXBhbnlBUEkoQ09NUEFOWV9JRCwgKGNvbmZpZykgPT4gY29uZmlnLmNvbXBhbnlBUEkuaW52YWxpZFBhc3N3b3JkKSgnc2hvdWxkIGZhaWwgb24gaW52YWxpZCB1c2VyL3Bhc3N3b3JkXCInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICBjb21wYW55SWQ6IENPTVBBTllfSUQsXG4gICAgfTtcblxuICAgIGNvbnN0IHNjcmFwZXIgPSBuZXcgT3RzYXJIYWhheWFsU2NyYXBlcihvcHRpb25zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjcmFwZXIuc2NyYXBlKHsgdXNlcm5hbWU6ICdlMTBzMTInLCBwYXNzd29yZDogJzNmM3NzM2QnIH0pO1xuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QocmVzdWx0LnN1Y2Nlc3MpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JUeXBlKS50b0JlKExvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmQpO1xuICB9KTtcblxuICBtYXliZVRlc3RDb21wYW55QVBJKENPTVBBTllfSUQpKCdzaG91bGQgc2NyYXBlIHRyYW5zYWN0aW9uc1wiJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAuLi50ZXN0c0NvbmZpZy5vcHRpb25zLFxuICAgICAgY29tcGFueUlkOiBDT01QQU5ZX0lELFxuICAgIH07XG5cbiAgICBjb25zdCBzY3JhcGVyID0gbmV3IE90c2FySGFoYXlhbFNjcmFwZXIob3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NyYXBlci5zY3JhcGUodGVzdHNDb25maWcuY3JlZGVudGlhbHMub3RzYXJIYWhheWFsKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGVycm9yID0gYCR7cmVzdWx0LmVycm9yVHlwZSB8fCAnJ30gJHtyZXN1bHQuZXJyb3JNZXNzYWdlIHx8ICcnfWAudHJpbSgpO1xuICAgIGV4cGVjdChlcnJvcikudG9CZSgnJyk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBleHBvcnRUcmFuc2FjdGlvbnMoQ09NUEFOWV9JRCwgcmVzdWx0LmFjY291bnRzIHx8IFtdKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUdBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLHVCQUFBLEdBQUFILE9BQUE7QUFBMkQsU0FBQUQsdUJBQUFLLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyxRQUFBQyxNQUFBLEVBQUFDLGNBQUEsUUFBQUMsSUFBQSxHQUFBQyxNQUFBLENBQUFELElBQUEsQ0FBQUYsTUFBQSxPQUFBRyxNQUFBLENBQUFDLHFCQUFBLFFBQUFDLE9BQUEsR0FBQUYsTUFBQSxDQUFBQyxxQkFBQSxDQUFBSixNQUFBLE9BQUFDLGNBQUEsRUFBQUksT0FBQSxHQUFBQSxPQUFBLENBQUFDLE1BQUEsV0FBQUMsR0FBQSxXQUFBSixNQUFBLENBQUFLLHdCQUFBLENBQUFSLE1BQUEsRUFBQU8sR0FBQSxFQUFBRSxVQUFBLE1BQUFQLElBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULElBQUEsRUFBQUcsT0FBQSxZQUFBSCxJ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
|