israeli-bank-scrapers 1.13.0 → 1.13.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/lib/scrapers/mizrahi.d.ts +1 -1
- package/lib/scrapers/mizrahi.js +24 -12
- package/package.json +1 -1
package/lib/scrapers/mizrahi.js
CHANGED
|
@@ -30,10 +30,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
30
30
|
const BASE_WEBSITE_URL = 'https://www.mizrahi-tefahot.co.il';
|
|
31
31
|
const LOGIN_URL = `${BASE_WEBSITE_URL}/login/index.html#/auth-page-he`;
|
|
32
32
|
const BASE_APP_URL = 'https://mto.mizrahi-tefahot.co.il';
|
|
33
|
-
const AFTER_LOGIN_BASE_URL = /https:\/\/mto\.mizrahi-tefahot\.co\.il\/
|
|
34
|
-
const OSH_PAGE =
|
|
33
|
+
const AFTER_LOGIN_BASE_URL = /https:\/\/mto\.mizrahi-tefahot\.co\.il\/OnlineApp\/.*/;
|
|
34
|
+
const OSH_PAGE = '/OnlineApp/osh/legacy/legacy-Osh-Main';
|
|
35
|
+
const TRANSACTIONS_PAGE = '/OnlineApp/osh/legacy/root-main-osh-p428New';
|
|
35
36
|
const TRANSACTIONS_REQUEST_URL = `${BASE_APP_URL}/Online/api/SkyOSH/get428Index`;
|
|
36
|
-
const PENDING_TRANSACTIONS_PAGE =
|
|
37
|
+
const PENDING_TRANSACTIONS_PAGE = '/OnlineApp/osh/legacy/legacy-Osh-p420';
|
|
37
38
|
const PENDING_TRANSACTIONS_IFRAME = 'p420.aspx';
|
|
38
39
|
const CHANGE_PASSWORD_URL = /https:\/\/www\.mizrahi-tefahot\.co\.il\/login\/\w+\/index\.html#\/change-pass/;
|
|
39
40
|
const DATE_FORMAT = 'DD/MM/YYYY';
|
|
@@ -42,12 +43,12 @@ const usernameSelector = '#emailDesktopHeb';
|
|
|
42
43
|
const passwordSelector = '#passwordIDDesktopHEB';
|
|
43
44
|
const submitButtonSelector = '.form-desktop button';
|
|
44
45
|
const invalidPasswordSelector = 'a[href*="https://sc.mizrahi-tefahot.co.il/SCServices/SC/P010.aspx"]';
|
|
45
|
-
const afterLoginSelector = '#
|
|
46
|
+
const afterLoginSelector = '#dropdownBasic';
|
|
46
47
|
const loginSpinnerSelector = 'div.ngx-overlay.loading-foreground';
|
|
47
|
-
const accountDropDownItemSelector = '#
|
|
48
|
+
const accountDropDownItemSelector = '#AccountPicker .item';
|
|
48
49
|
const pendingTrxIdentifierId = '#ctl00_ContentPlaceHolder2_panel1';
|
|
49
|
-
const
|
|
50
|
-
const
|
|
50
|
+
const checkingAccountTabHebrewName = 'עובר ושב';
|
|
51
|
+
const checkingAccountTabEnglishName = 'Checking Account';
|
|
51
52
|
|
|
52
53
|
function createLoginFields(credentials) {
|
|
53
54
|
return [{
|
|
@@ -61,7 +62,7 @@ function createLoginFields(credentials) {
|
|
|
61
62
|
|
|
62
63
|
function getPossibleLoginResults(page) {
|
|
63
64
|
return {
|
|
64
|
-
[_baseScraperWithBrowser.LoginResults.Success]: [AFTER_LOGIN_BASE_URL, async () => !!(await page.$x(`//
|
|
65
|
+
[_baseScraperWithBrowser.LoginResults.Success]: [AFTER_LOGIN_BASE_URL, async () => !!(await page.$x(`//a//span[contains(., "${checkingAccountTabHebrewName}") or contains(., "${checkingAccountTabEnglishName}")]`))],
|
|
65
66
|
[_baseScraperWithBrowser.LoginResults.InvalidPassword]: [async () => !!(await page.$(invalidPasswordSelector))],
|
|
66
67
|
[_baseScraperWithBrowser.LoginResults.ChangePassword]: [CHANGE_PASSWORD_URL]
|
|
67
68
|
};
|
|
@@ -142,13 +143,18 @@ class MizrahiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
async fetchData() {
|
|
146
|
+
await this.page.$eval('#dropdownBasic, .item', el => el.click());
|
|
145
147
|
const numOfAccounts = (await this.page.$$(accountDropDownItemSelector)).length;
|
|
146
148
|
|
|
147
149
|
try {
|
|
148
150
|
const results = [];
|
|
149
151
|
|
|
150
152
|
for (let i = 0; i < numOfAccounts; i += 1) {
|
|
151
|
-
|
|
153
|
+
if (i > 0) {
|
|
154
|
+
await this.page.$eval('#dropdownBasic, .item', el => el.click());
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
await this.page.$eval(`${accountDropDownItemSelector}:nth-child(${i + 1})`, el => el.click());
|
|
152
158
|
results.push((await this.fetchAccount()));
|
|
153
159
|
}
|
|
154
160
|
|
|
@@ -166,7 +172,13 @@ class MizrahiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
166
172
|
}
|
|
167
173
|
|
|
168
174
|
async fetchAccount() {
|
|
169
|
-
|
|
175
|
+
// workaround for situations where Mizrahi pops up pages (e.g. email update page)
|
|
176
|
+
await this.page.waitForNavigation({
|
|
177
|
+
waitUntil: 'networkidle2'
|
|
178
|
+
});
|
|
179
|
+
await this.page.$eval(`a[href="${OSH_PAGE}"]`, el => el.click());
|
|
180
|
+
await (0, _elementsInteractions.waitUntilElementFound)(this.page, `a[href="${TRANSACTIONS_PAGE}"]`);
|
|
181
|
+
await this.page.$eval(`a[href="${TRANSACTIONS_PAGE}"]`, el => el.click());
|
|
170
182
|
const request = await this.page.waitForRequest(TRANSACTIONS_REQUEST_URL);
|
|
171
183
|
const data = createDataFromRequest(request, this.options.startDate);
|
|
172
184
|
const headers = createHeadersFromRequest(request);
|
|
@@ -181,7 +193,7 @@ class MizrahiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
181
193
|
|
|
182
194
|
const startMoment = getStartMoment(this.options.startDate);
|
|
183
195
|
const oshTxnAfterStartDate = oshTxn.filter(txn => (0, _moment.default)(txn.date).isSameOrAfter(startMoment));
|
|
184
|
-
await this.
|
|
196
|
+
await this.page.$eval(`a[href="${PENDING_TRANSACTIONS_PAGE}"]`, el => el.click());
|
|
185
197
|
const frame = await (0, _elementsInteractions.waitUntilIframeFound)(this.page, f => f.url().includes(PENDING_TRANSACTIONS_IFRAME));
|
|
186
198
|
await (0, _elementsInteractions.waitUntilElementFound)(frame, pendingTrxIdentifierId);
|
|
187
199
|
const pendingTxn = await extractPendingTransactions(frame);
|
|
@@ -197,4 +209,4 @@ class MizrahiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
197
209
|
|
|
198
210
|
var _default = MizrahiScraper;
|
|
199
211
|
exports.default = _default;
|
|
200
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9taXpyYWhpLnRzIl0sIm5hbWVzIjpbIkJBU0VfV0VCU0lURV9VUkwiLCJMT0dJTl9VUkwiLCJCQVNFX0FQUF9VUkwiLCJBRlRFUl9MT0dJTl9CQVNFX1VSTCIsIk9TSF9QQUdFIiwiVFJBTlNBQ1RJT05TX1JFUVVFU1RfVVJMIiwiUEVORElOR19UUkFOU0FDVElPTlNfUEFHRSIsIlBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSIsIkNIQU5HRV9QQVNTV09SRF9VUkwiLCJEQVRFX0ZPUk1BVCIsIk1BWF9ST1dTX1BFUl9SRVFVRVNUIiwidXNlcm5hbWVTZWxlY3RvciIsInBhc3N3b3JkU2VsZWN0b3IiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsImludmFsaWRQYXNzd29yZFNlbGVjdG9yIiwiYWZ0ZXJMb2dpblNlbGVjdG9yIiwibG9naW5TcGlubmVyU2VsZWN0b3IiLCJhY2NvdW50RHJvcERvd25JdGVtU2VsZWN0b3IiLCJwZW5kaW5nVHJ4SWRlbnRpZmllcklkIiwiZW1haWxVcGRhdGVQYWdlSGVicmV3VGl0bGUiLCJlbWFpbFVwZGF0ZVBhZ2VFbmdsaXNoVGl0bGUiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInBhZ2UiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiJHgiLCJJbnZhbGlkUGFzc3dvcmQiLCIkIiwiQ2hhbmdlUGFzc3dvcmQiLCJnZXRTdGFydE1vbWVudCIsIm9wdGlvbnNTdGFydERhdGUiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsInN0YXJ0RGF0ZSIsInRvRGF0ZSIsIm1vbWVudCIsIm1heCIsImNyZWF0ZURhdGFGcm9tUmVxdWVzdCIsInJlcXVlc3QiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicG9zdERhdGEiLCJpbkZyb21EYXRlIiwiZm9ybWF0IiwiaW5Ub0RhdGUiLCJ0YWJsZSIsIm1heFJvdyIsImNyZWF0ZUhlYWRlcnNGcm9tUmVxdWVzdCIsIm1penJhaGl4c3JmdG9rZW4iLCJoZWFkZXJzIiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJtYXAiLCJyb3ciLCJ0eG5EYXRlIiwiTUMwMlBldWxhVGFhRVoiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwidG9JU09TdHJpbmciLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsImlkZW50aWZpZXIiLCJNQzAyQXNtYWh0YU1la29yaXRFWiIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwiZGF0ZSIsInByb2Nlc3NlZERhdGUiLCJvcmlnaW5hbEFtb3VudCIsIk1DMDJTY2h1bUVaIiwib3JpZ2luYWxDdXJyZW5jeSIsIlNIRUtFTF9DVVJSRU5DWSIsImNoYXJnZWRBbW91bnQiLCJkZXNjcmlwdGlvbiIsIk1DMDJUbnVhVGV1ckVaIiwic3RhdHVzIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIkNvbXBsZXRlZCIsImV4dHJhY3RQZW5kaW5nVHJhbnNhY3Rpb25zIiwicGVuZGluZ1R4biIsInRycyIsInRyIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsInRkIiwidGV4dENvbnRlbnQiLCJ0eG4iLCJhbW91bnQiLCJQZW5kaW5nIiwicG9zdExvZ2luIiwiUHJvbWlzZSIsInJhY2UiLCJNaXpyYWhpU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRMb2dpbk9wdGlvbnMiLCJsb2dpblVybCIsImZpZWxkcyIsImNoZWNrUmVhZGluZXNzIiwicG9zdEFjdGlvbiIsInBvc3NpYmxlUmVzdWx0cyIsImZldGNoRGF0YSIsIm51bU9mQWNjb3VudHMiLCIkJCIsImxlbmd0aCIsInJlc3VsdHMiLCJpIiwiJCRldmFsIiwiZWxzIiwiY2xpY2siLCJwdXNoIiwiZmV0Y2hBY2NvdW50Iiwic3VjY2VzcyIsImFjY291bnRzIiwiZSIsImVycm9yVHlwZSIsIlNjcmFwZXJFcnJvclR5cGVzIiwiR2VuZXJpYyIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJuYXZpZ2F0ZVRvIiwid2FpdEZvclJlcXVlc3QiLCJvcHRpb25zIiwicmVzcG9uc2UiLCJoZWFkZXIiLCJFcnJvciIsIm1lc3NhZ2VzIiwidGV4dCIsInJlbGV2YW50Um93cyIsImJvZHkiLCJyb3dzIiwiZmlsdGVyIiwiUmVjVHlwZVNwZWNpZmllZCIsIm9zaFR4biIsInN0YXJ0TW9tZW50Iiwib3NoVHhuQWZ0ZXJTdGFydERhdGUiLCJpc1NhbWVPckFmdGVyIiwiZnJhbWUiLCJmIiwidXJsIiwiaW5jbHVkZXMiLCJhbGxUeG4iLCJjb25jYXQiLCJhY2NvdW50TnVtYmVyIiwiQWNjb3VudE51bWJlciIsImJhbGFuY2UiLCJZaXRyYUxlbG9DaGVraW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7Ozs7QUEwQkEsTUFBTUEsZ0JBQWdCLEdBQUcsbUNBQXpCO0FBQ0EsTUFBTUMsU0FBUyxHQUFJLEdBQUVELGdCQUFpQixpQ0FBdEM7QUFDQSxNQUFNRSxZQUFZLEdBQUcsbUNBQXJCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsMkVBQTdCO0FBQ0EsTUFBTUMsUUFBUSxHQUFJLEdBQUVGLFlBQWEsMENBQWpDO0FBQ0EsTUFBTUcsd0JBQXdCLEdBQUksR0FBRUgsWUFBYSxnQ0FBakQ7QUFDQSxNQUFNSSx5QkFBeUIsR0FBSSxHQUFFSixZQUFhLGlFQUFsRDtBQUNBLE1BQU1LLDJCQUEyQixHQUFHLFdBQXBDO0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsK0VBQTVCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLFlBQXBCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsV0FBN0I7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxrQkFBekI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyx1QkFBekI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxz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QU1JLE1BQU0sR0FBR04sb0JBQW9CLENBQUNPLE1BQXJCLENBQTRCL0QsVUFBNUIsQ0FBZjtBQUVBLFdBQU87QUFDTGdFLE1BQUFBLGFBQWEsRUFBRXBCLFFBQVEsQ0FBQ00sSUFBVCxDQUFjaEMsTUFBZCxDQUFxQitDLGFBRC9CO0FBRUw3RixNQUFBQSxJQUFJLEVBQUUwRixNQUZEO0FBR0xJLE1BQUFBLE9BQU8sRUFBRSxDQUFDdEIsUUFBUSxDQUFDTSxJQUFULENBQWNoQyxNQUFkLENBQXFCaUQ7QUFIMUIsS0FBUDtBQUtEOztBQW5FaUQ7O2VBc0VyQ3JELGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBGcmFtZSwgUGFnZSwgUmVxdWVzdCB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcGFnZUV2YWxBbGwsIHdhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCwgd2FpdFVudGlsSWZyYW1lRm91bmQsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IHdhaXRGb3JVcmwgfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uc0FjY291bnQsIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBTY3JhcGVyQ3JlZGVudGlhbHMsIFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXInO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCBQb3NzaWJsZUxvZ2luUmVzdWx0cyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBSZWNUeXBlU3BlY2lmaWVkOiBib29sZWFuO1xuICBNQzAyUGV1bGFUYWFFWjogc3RyaW5nO1xuICBNQzAyU2NodW1FWjogbnVtYmVyO1xuICBNQzAyQXNtYWh0YU1la29yaXRFWjogc3RyaW5nO1xuICBNQzAyVG51YVRldXJFWjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uc1Jlc3VsdCB7XG4gIGhlYWRlcjoge1xuICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgbWVzc2FnZXM6IHsgdGV4dDogc3RyaW5nIH1bXTtcbiAgfTtcbiAgYm9keToge1xuICAgIGZpZWxkczoge1xuICAgICAgQWNjb3VudE51bWJlcjogc3RyaW5nO1xuICAgICAgWWl0cmFMZWxvQ2hla2ltOiBzdHJpbmc7XG4gICAgfTtcbiAgICB0YWJsZToge1xuICAgICAgcm93czogU2NyYXBlZFRyYW5zYWN0aW9uW107XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgQkFTRV9XRUJTSVRFX1VSTCA9ICdodHRwczovL3d3dy5taXpyYWhpLXRlZmFob3QuY28uaWwnO1xuY29uc3QgTE9HSU5fVVJMID0gYCR7QkFTRV9XRUJTSVRFX1VSTH0vbG9naW4vaW5kZXguaHRtbCMvYXV0aC1wYWdlLWhlYDtcbmNvbnN0IEJBU0VfQVBQX1VSTCA9ICdodHRwczovL210by5taXpyYWhpLXRlZmFob3QuY28uaWwnO1xuY29uc3QgQUZURVJfTE9HSU5fQkFTRV9VUkwgPSAvaHR0cHM6XFwvXFwvbXRvXFwubWl6cmFoaS10ZWZhaG90XFwuY29cXC5pbFxcL25nT25saW5lXFwvaW5kZXhcXC5odG1sI1xcL21haW5cXC91aXMvO1xuY29uc3QgT1NIX1BBR0UgPSBgJHtCQVNFX0FQUF9VUkx9L25nT25saW5lL2luZGV4Lmh0bWwjL21haW4vdWlzL29zaC9wNDI4L2A7XG5jb25zdCBUUkFOU0FDVElPTlNfUkVRVUVTVF9VUkwgPSBgJHtCQVNFX0FQUF9VUkx9L09ubGluZS9hcGkvU2t5T1NIL2dldDQyOEluZGV4YDtcbmNvbnN0IFBFTkRJTkdfVFJBTlNBQ1RJT05TX1BBR0UgPSBgJHtCQVNFX0FQUF9VUkx9L25nT25saW5lL2luZGV4Lmh0bWwjL21haW4vdWlzL2xlZ2FjeS9Pc2gvcDQyMC8vbGVnYWN5Lk9zaC5wNDIwYDtcbmNvbnN0IFBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSA9ICdwNDIwLmFzcHgnO1xuY29uc3QgQ0hBTkdFX1BBU1NXT1JEX1VSTCA9IC9odHRwczpcXC9cXC93d3dcXC5taXpyYWhpLXRlZmFob3RcXC5jb1xcLmlsXFwvbG9naW5cXC9cXHcrXFwvaW5kZXhcXC5odG1sI1xcL2NoYW5nZS1wYXNzLztcbmNvbnN0IERBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuY29uc3QgTUFYX1JPV1NfUEVSX1JFUVVFU1QgPSAxMDAwMDAwMDAwMDtcblxuY29uc3QgdXNlcm5hbWVTZWxlY3RvciA9ICcjZW1haWxEZXNrdG9wSGViJztcbmNvbnN0IHBhc3N3b3JkU2VsZWN0b3IgPSAnI3Bhc3N3b3JkSUREZXNrdG9wSEVCJztcbmNvbnN0IHN1Ym1pdEJ1dHRvblNlbGVjdG9yID0gJy5mb3JtLWRlc2t0b3AgYnV0dG9uJztcbmNvbnN0IGludmFsaWRQYXNzd29yZFNlbGVjdG9yID0gJ2FbaHJlZio9XCJodHRwczovL3NjLm1penJhaGktdGVmYWhvdC5jby5pbC9TQ1NlcnZpY2VzL1NDL1AwMTAuYXNweFwiXSc7XG5jb25zdCBhZnRlckxvZ2luU2VsZWN0b3IgPSAnI3N0aWNreUhlYWRlclNjcm9sbFJlZ2lvbic7XG5jb25zdCBsb2dpblNwaW5uZXJTZWxlY3RvciA9ICdkaXYubmd4LW92ZXJsYXkubG9hZGluZy1mb3JlZ3JvdW5kJztcbmNvbnN0IGFjY291bnREcm9wRG93bkl0ZW1TZWxlY3RvciA9ICcjc2t5LWFjY291bnQtY29tYm8tbGlzdCB1bCBsaSAuc2t5LWFjYy12YWx1ZSc7XG5jb25zdCBwZW5kaW5nVHJ4SWRlbnRpZmllcklkID0gJyNjdGwwMF9Db250ZW50UGxhY2VIb2xkZXIyX3BhbmVsMSc7XG5jb25zdCBlbWFpbFVwZGF0ZVBhZ2VIZWJyZXdUaXRsZSA9IFwi16LXk9eb15XXnyDXm9eq15XXkdeqINeT15XXkCcn15xcIjtcbmNvbnN0IGVtYWlsVXBkYXRlUGFnZUVuZ2xpc2hUaXRsZSA9ICdVcGRhdGUgZW1haWwgYWRkcmVzcyc7XG5cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscykge1xuICByZXR1cm4gW1xuICAgIHsgc2VsZWN0b3I6IHVzZXJuYW1lU2VsZWN0b3IsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6IHBhc3N3b3JkU2VsZWN0b3IsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyhwYWdlOiBQYWdlKTogUG9zc2libGVMb2dpblJlc3VsdHMge1xuICByZXR1cm4ge1xuICAgIFtMb2dpblJlc3VsdHMuU3VjY2Vzc106IFtBRlRFUl9MT0dJTl9CQVNFX1VSTCwgYXN5bmMgKCkgPT4gISEoYXdhaXQgcGFnZS4keChgLy90aXRsZVtjb250YWlucyguLCBcIiR7ZW1haWxVcGRhdGVQYWdlSGVicmV3VGl0bGV9XCIpIG9yIGNvbnRhaW5zKC4sIFwiJHtlbWFpbFVwZGF0ZVBhZ2VFbmdsaXNoVGl0bGV9XCIpXWApKV0sXG4gICAgW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdOiBbYXN5bmMgKCkgPT4gISEoYXdhaXQgcGFnZS4kKGludmFsaWRQYXNzd29yZFNlbGVjdG9yKSldLFxuICAgIFtMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmRdOiBbQ0hBTkdFX1BBU1NXT1JEX1VSTF0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0TW9tZW50KG9wdGlvbnNTdGFydERhdGU6IERhdGUpIHtcbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG9wdGlvbnNTdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICByZXR1cm4gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YUZyb21SZXF1ZXN0KHJlcXVlc3Q6IFJlcXVlc3QsIG9wdGlvbnNTdGFydERhdGU6IERhdGUpIHtcbiAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmVxdWVzdC5wb3N0RGF0YSgpIHx8ICd7fScpO1xuXG4gIGRhdGEuaW5Gcm9tRGF0ZSA9IGdldFN0YXJ0TW9tZW50KG9wdGlvbnNTdGFydERhdGUpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG4gIGRhdGEuaW5Ub0RhdGUgPSBtb21lbnQoKS5mb3JtYXQoREFURV9GT1JNQVQpO1xuICBkYXRhLnRhYmxlLm1heFJvdyA9IE1BWF9ST1dTX1BFUl9SRVFVRVNUO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzRnJvbVJlcXVlc3QocmVxdWVzdDogUmVxdWVzdCkge1xuICByZXR1cm4ge1xuICAgIG1penJhaGl4c3JmdG9rZW46IHJlcXVlc3QuaGVhZGVycygpLm1penJhaGl4c3JmdG9rZW4sXG4gICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuaGVhZGVycygpWydjb250ZW50LXR5cGUnXSxcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIHJldHVybiB0eG5zLm1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgdHhuRGF0ZSA9IG1vbWVudChyb3cuTUMwMlBldWxhVGFhRVosIG1vbWVudC5IVE1MNV9GTVQuREFURVRJTUVfTE9DQUxfU0VDT05EUylcbiAgICAgIC50b0lTT1N0cmluZygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgaWRlbnRpZmllcjogcm93Lk1DMDJBc21haHRhTWVrb3JpdEVaID8gcGFyc2VJbnQocm93Lk1DMDJBc21haHRhTWVrb3JpdEVaLCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICBkYXRlOiB0eG5EYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogdHhuRGF0ZSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiByb3cuTUMwMlNjaHVtRVosXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiByb3cuTUMwMlNjaHVtRVosXG4gICAgICBkZXNjcmlwdGlvbjogcm93Lk1DMDJUbnVhVGV1ckVaLFxuICAgICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICB9O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFBlbmRpbmdUcmFuc2FjdGlvbnMocGFnZTogRnJhbWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgY29uc3QgcGVuZGluZ1R4biA9IGF3YWl0IHBhZ2VFdmFsQWxsKHBhZ2UsICd0ci5yZ1JvdycsIFtdLCAodHJzKSA9PiB7XG4gICAgcmV0dXJuIHRycy5tYXAoKHRyKSA9PiBBcnJheS5mcm9tKHRyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyksICh0ZDogSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50KSA9PiB0ZC50ZXh0Q29udGVudCB8fCAnJykpO1xuICB9KTtcblxuICByZXR1cm4gcGVuZGluZ1R4bi5tYXAoKHR4bikgPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodHhuWzBdLCAnREQvTU0vWVknKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGFtb3VudCA9IHBhcnNlSW50KHR4blszXSwgMTApO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIGRhdGUsXG4gICAgICBwcm9jZXNzZWREYXRlOiBkYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IGFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG5bMV0sXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyxcbiAgICB9O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9zdExvZ2luKHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgYWZ0ZXJMb2dpblNlbGVjdG9yKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgaW52YWxpZFBhc3N3b3JkU2VsZWN0b3IpLFxuICAgIHdhaXRGb3JVcmwocGFnZSwgQ0hBTkdFX1BBU1NXT1JEX1VSTCksXG4gIF0pO1xufVxuXG5jbGFzcyBNaXpyYWhpU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIge1xuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogTE9HSU5fVVJMLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcixcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiB3YWl0VW50aWxFbGVtZW50RGlzYXBwZWFyKHRoaXMucGFnZSwgbG9naW5TcGlubmVyU2VsZWN0b3IpLFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gcG9zdExvZ2luKHRoaXMucGFnZSksXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKHRoaXMucGFnZSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICBjb25zdCBudW1PZkFjY291bnRzID0gKGF3YWl0IHRoaXMucGFnZS4kJChhY2NvdW50RHJvcERvd25JdGVtU2VsZWN0b3IpKS5sZW5ndGg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PZkFjY291bnRzOyBpICs9IDEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlLiQkZXZhbChhY2NvdW50RHJvcERvd25JdGVtU2VsZWN0b3IsIChlbHMsIGkpID0+IChlbHNbaV0gYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCksIGkpO1xuICAgICAgICByZXN1bHRzLnB1c2goYXdhaXQgdGhpcy5mZXRjaEFjY291bnQoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGFjY291bnRzOiByZXN1bHRzLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5HZW5lcmljLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IChlIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoQWNjb3VudCgpIHtcbiAgICBhd2FpdCB0aGlzLm5hdmlnYXRlVG8oT1NIX1BBR0UsIHRoaXMucGFnZSk7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgdGhpcy5wYWdlLndhaXRGb3JSZXF1ZXN0KFRSQU5TQUNUSU9OU19SRVFVRVNUX1VSTCk7XG4gICAgY29uc3QgZGF0YSA9IGNyZWF0ZURhdGFGcm9tUmVxdWVzdChyZXF1ZXN0LCB0aGlzLm9wdGlvbnMuc3RhcnREYXRlKTtcbiAgICBjb25zdCBoZWFkZXJzID0gY3JlYXRlSGVhZGVyc0Zyb21SZXF1ZXN0KHJlcXVlc3QpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFBvc3RXaXRoaW5QYWdlPFNjcmFwZWRUcmFuc2FjdGlvbnNSZXN1bHQ+KHRoaXMucGFnZSxcbiAgICAgIFRSQU5TQUNUSU9OU19SRVFVRVNUX1VSTCwgZGF0YSwgaGVhZGVycyk7XG5cbiAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLmhlYWRlci5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmZXRjaGluZyB0cmFuc2FjdGlvbi4gUmVzcG9uc2UgbWVzc2FnZTogJHtyZXNwb25zZSA/IHJlc3BvbnNlLmhlYWRlci5tZXNzYWdlc1swXS50ZXh0IDogJyd9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsZXZhbnRSb3dzID0gcmVzcG9uc2UuYm9keS50YWJsZS5yb3dzLmZpbHRlcigocm93KSA9PiByb3cuUmVjVHlwZVNwZWNpZmllZCk7XG4gICAgY29uc3Qgb3NoVHhuID0gY29udmVydFRyYW5zYWN0aW9ucyhyZWxldmFudFJvd3MpO1xuXG4gICAgLy8gd29ya2Fyb3VuZCBmb3IgYSBidWcgd2hpY2ggdGhlIGJhbmsncyBBUEkgcmV0dXJucyB0cmFuc2FjdGlvbnMgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc3RhcnQgZGF0ZVxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gZ2V0U3RhcnRNb21lbnQodGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3Qgb3NoVHhuQWZ0ZXJTdGFydERhdGUgPSBvc2hUeG4uZmlsdGVyKCh0eG4pID0+IG1vbWVudCh0eG4uZGF0ZSkuaXNTYW1lT3JBZnRlcihzdGFydE1vbWVudCkpO1xuXG4gICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvKFBFTkRJTkdfVFJBTlNBQ1RJT05TX1BBR0UsIHRoaXMucGFnZSk7XG4gICAgY29uc3QgZnJhbWUgPSBhd2FpdCB3YWl0VW50aWxJZnJhbWVGb3VuZCh0aGlzLnBhZ2UsIChmKSA9PiBmLnVybCgpLmluY2x1ZGVzKFBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSkpO1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChmcmFtZSwgcGVuZGluZ1RyeElkZW50aWZpZXJJZCk7XG4gICAgY29uc3QgcGVuZGluZ1R4biA9IGF3YWl0IGV4dHJhY3RQZW5kaW5nVHJhbnNhY3Rpb25zKGZyYW1lKTtcblxuICAgIGNvbnN0IGFsbFR4biA9IG9zaFR4bkFmdGVyU3RhcnREYXRlLmNvbmNhdChwZW5kaW5nVHhuKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50TnVtYmVyOiByZXNwb25zZS5ib2R5LmZpZWxkcy5BY2NvdW50TnVtYmVyLFxuICAgICAgdHhuczogYWxsVHhuLFxuICAgICAgYmFsYW5jZTogK3Jlc3BvbnNlLmJvZHkuZmllbGRzLllpdHJhTGVsb0NoZWtpbSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1penJhaGlTY3JhcGVyO1xuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9taXpyYWhpLnRzIl0sIm5hbWVzIjpbIkJBU0VfV0VCU0lURV9VUkwiLCJMT0dJTl9VUkwiLCJCQVNFX0FQUF9VUkwiLCJBRlRFUl9MT0dJTl9CQVNFX1VSTCIsIk9TSF9QQUdFIiwiVFJBTlNBQ1RJT05TX1BBR0UiLCJUUkFOU0FDVElPTlNfUkVRVUVTVF9VUkwiLCJQRU5ESU5HX1RSQU5TQUNUSU9OU19QQUdFIiwiUEVORElOR19UUkFOU0FDVElPTlNfSUZSQU1FIiwiQ0hBTkdFX1BBU1NXT1JEX1VSTCIsIkRBVEVfRk9STUFUIiwiTUFYX1JPV1NfUEVSX1JFUVVFU1QiLCJ1c2VybmFtZVNlbGVjdG9yIiwicGFzc3dvcmRTZWxlY3RvciIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwiaW52YWxpZFBhc3N3b3JkU2VsZWN0b3IiLCJhZnRlckxvZ2luU2VsZWN0b3IiLCJsb2dpblNwaW5uZXJTZWxlY3RvciIsImFjY291bnREcm9wRG93bkl0ZW1TZWxlY3RvciIsInBlbmRpbmdUcnhJZGVudGlmaWVySWQiLCJjaGVja2luZ0FjY291bnRUYWJIZWJyZXdOYW1lIiwiY2hlY2tpbmdBY2NvdW50VGFiRW5nbGlzaE5hbWUiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInBhZ2UiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiJHgiLCJJbnZhbGlkUGFzc3dvcmQiLCIkIiwiQ2hhbmdlUGFzc3dvcmQiLCJnZXRTdGFydE1vbWVudCIsIm9wdGlvbnNTdGFydERhdGUiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsInN0YXJ0RGF0ZSIsInRvRGF0ZSIsIm1vbWVudCIsIm1heCIsImNyZWF0ZURhdGFGcm9tUmVxdWVzdCIsInJlcXVlc3QiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicG9zdERhdGEiLCJpbkZyb21EYXRlIiwiZm9ybWF0IiwiaW5Ub0RhdGUiLCJ0YWJsZSIsIm1heFJvdyIsImNyZWF0ZUhlYWRlcnNGcm9tUmVxdWVzdCIsIm1penJhaGl4c3JmdG9rZW4iLCJoZWFkZXJzIiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJtYXAiLCJyb3ciLCJ0eG5EYXRlIiwiTUMwMlBldWxhVGFhRVoiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwidG9JU09TdHJpbmciLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsImlkZW50aWZpZXIiLCJNQzAyQXNtYWh0YU1la29yaXRFWiIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwiZGF0ZSIsInByb2Nlc3NlZERhdGUiLCJvcmlnaW5hbEFtb3VudCIsIk1DMDJTY2h1bUVaIiwib3JpZ2luYWxDdXJyZW5jeSIsIlNIRUtFTF9DVVJSRU5DWSIsImNoYXJnZWRBbW91bnQiLCJkZXNjcmlwdGlvbiIsIk1DMDJUbnVhVGV1ckVaIiwic3RhdHVzIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIkNvbXBsZXRlZCIsImV4dHJhY3RQZW5kaW5nVHJhbnNhY3Rpb25zIiwicGVuZGluZ1R4biIsInRycyIsInRyIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsInRkIiwidGV4dENvbnRlbnQiLCJ0eG4iLCJhbW91bnQiLCJQZW5kaW5nIiwicG9zdExvZ2luIiwiUHJvbWlzZSIsInJhY2UiLCJNaXpyYWhpU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRMb2dpbk9wdGlvbnMiLCJsb2dpblVybCIsImZpZWxkcyIsImNoZWNrUmVhZGluZXNzIiwicG9zdEFjdGlvbiIsInBvc3NpYmxlUmVzdWx0cyIsImZldGNoRGF0YSIsIiRldmFsIiwiZWwiLCJjbGljayIsIm51bU9mQWNjb3VudHMiLCIkJCIsImxlbmd0aCIsInJlc3VsdHMiLCJpIiwicHVzaCIsImZldGNoQWNjb3VudCIsInN1Y2Nlc3MiLCJhY2NvdW50cyIsImUiLCJlcnJvclR5cGUiLCJTY3JhcGVyRXJyb3JUeXBlcyIsIkdlbmVyaWMiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwid2FpdEZvck5hdmlnYXRpb24iLCJ3YWl0VW50aWwiLCJ3YWl0Rm9yUmVxdWVzdCIsIm9wdGlvbnMiLCJyZXNwb25zZSIsImhlYWRlciIsIkVycm9yIiwibWVzc2FnZXMiLCJ0ZXh0IiwicmVsZXZhbnRSb3dzIiwiYm9keSIsInJvd3MiLCJmaWx0ZXIiLCJSZWNUeXBlU3BlY2lmaWVkIiwib3NoVHhuIiwic3RhcnRNb21lbnQiLCJvc2hUeG5BZnRlclN0YXJ0RGF0ZSIsImlzU2FtZU9yQWZ0ZXIiLCJmcmFtZSIsImYiLCJ1cmwiLCJpbmNsdWRlcyIsImFsbFR4biIsImNvbmNhdCIsImFjY291bnROdW1iZXIiLCJBY2NvdW50TnVtYmVyIiwiYmFsYW5jZSIsIllpdHJhTGVsb0NoZWtpbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7OztBQTBCQSxNQUFNQSxnQkFBZ0IsR0FBRyxtQ0FBekI7QUFDQSxNQUFNQyxTQUFTLEdBQUksR0FBRUQsZ0JBQWlCLGlDQUF0QztBQUNBLE1BQU1FLFlBQVksR0FBRyxtQ0FBckI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyx1REFBN0I7QUFDQSxNQUFNQyxRQUFRLEdBQUcsdUNBQWpCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsNkNBQTFCO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUksR0FBRUosWUFBYSxnQ0FBakQ7QUFDQSxNQUFNSyx5QkFBeUIsR0FBRyx1Q0FBbEM7QUFDQSxNQUFNQywyQkFBMkIsR0FBRyxXQUFwQztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLCtFQUE1QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxZQUFwQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFdBQTdCO0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsa0JBQXpCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsdUJBQXpCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsc0JBQTdCO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcscUVBQWhDO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsZ0JBQTNCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsb0NBQTdCO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsc0JBQXBDO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsbUNBQS9CO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsVUFBckM7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxrQkFBdEM7O0FBR0EsU0FBU0MsaUJBQVQsQ0FBMkJDLFdBQTNCLEVBQTREO0FBQzFELFNBQU8sQ0FDTDtBQUFFQyxJQUFBQSxRQUFRLEVBQUVaLGdCQUFaO0FBQThCYSxJQUFBQSxLQUFLLEVBQUVGLFdBQVcsQ0FBQ0c7QUFBakQsR0FESyxFQUVMO0FBQUVGLElBQUFBLFFBQVEsRUFBRVgsZ0JBQVo7QUFBOEJZLElBQUFBLEtBQUssRUFBRUYsV0FBVyxDQUFDSTtBQUFqRCxHQUZLLENBQVA7QUFJRDs7QUFFRCxTQUFTQyx1QkFBVCxDQUFpQ0MsSUFBakMsRUFBbUU7QUFDakUsU0FBTztBQUNMLEtBQUNDLHFDQUFhQyxPQUFkLEdBQXdCLENBQUM1QixvQkFBRCxFQUF1QixZQUFZLENBQUMsRUFBRSxNQUFNMEIsSUFBSSxDQUFDRyxFQUFMLENBQVMsMEJBQXlCWiw0QkFBNkIsc0JBQXFCQyw2QkFBOEIsS0FBbEgsQ0FBUixDQUFwQyxDQURuQjtBQUVMLEtBQUNTLHFDQUFhRyxlQUFkLEdBQWdDLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTUosSUFBSSxDQUFDSyxDQUFMLENBQU9uQix1QkFBUCxDQUFSLENBQWQsQ0FGM0I7QUFHTCxLQUFDZSxxQ0FBYUssY0FBZCxHQUErQixDQUFDMUIsbUJBQUQ7QUFIMUIsR0FBUDtBQUtEOztBQUVELFNBQVMyQixjQUFULENBQXdCQyxnQkFBeEIsRUFBZ0Q7QUFDOUMsUUFBTUMsa0JBQWtCLEdBQUcsdUJBQVNDLFFBQVQsQ0FBa0IsQ0FBbEIsRUFBcUIsT0FBckIsQ0FBM0I7QUFDQSxRQUFNQyxTQUFTLEdBQUdILGdCQUFnQixJQUFJQyxrQkFBa0IsQ0FBQ0csTUFBbkIsRUFBdEM7QUFDQSxTQUFPQyxnQkFBT0MsR0FBUCxDQUFXTCxrQkFBWCxFQUErQixxQkFBT0UsU0FBUCxDQUEvQixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0kscUJBQVQsQ0FBK0JDLE9BQS9CLEVBQWlEUixnQkFBakQsRUFBeUU7QUFDdkUsUUFBTVMsSUFBSSxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsT0FBTyxDQUFDSSxRQUFSLE1BQXNCLElBQWpDLENBQWI7QUFFQUgsRUFBQUEsSUFBSSxDQUFDSSxVQUFMLEdBQWtCZCxjQUFjLENBQUNDLGdCQUFELENBQWQsQ0FBaUNjLE1BQWpDLENBQXdDekMsV0FBeEMsQ0FBbEI7QUFDQW9DLEVBQUFBLElBQUksQ0FBQ00sUUFBTCxHQUFnQix1QkFBU0QsTUFBVCxDQUFnQnpDLFdBQWhCLENBQWhCO0FBQ0FvQyxFQUFBQSxJQUFJLENBQUNPLEtBQUwsQ0FBV0MsTUFBWCxHQUFvQjNDLG9CQUFwQjtBQUVBLFNBQU9tQyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1Msd0JBQVQsQ0FBa0NWLE9BQWxDLEVBQW9EO0FBQ2xELFNBQU87QUFDTFcsSUFBQUEsZ0JBQWdCLEVBQUVYLE9BQU8sQ0FBQ1ksT0FBUixHQUFrQkQsZ0JBRC9CO0FBRUwsb0JBQWdCWCxPQUFPLENBQUNZLE9BQVIsR0FBa0IsY0FBbEI7QUFGWCxHQUFQO0FBSUQ7O0FBR0QsU0FBU0MsbUJBQVQsQ0FBNkJDLElBQTdCLEVBQXdFO0FBQ3RFLFNBQU9BLElBQUksQ0FBQ0MsR0FBTCxDQUFVQyxHQUFELElBQVM7QUFDdkIsVUFBTUMsT0FBTyxHQUFHLHFCQUFPRCxHQUFHLENBQUNFLGNBQVgsRUFBMkJyQixnQkFBT3NCLFNBQVAsQ0FBaUJDLHNCQUE1QyxFQUNiQyxXQURhLEVBQWhCO0FBR0EsV0FBTztBQUNMQyxNQUFBQSxJQUFJLEVBQUVDLCtCQUFpQkMsTUFEbEI7QUFFTEMsTUFBQUEsVUFBVSxFQUFFVCxHQUFHLENBQUNVLG9CQUFKLEdBQTJCQyxRQUFRLENBQUNYLEdBQUcsQ0FBQ1Usb0JBQUwsRUFBMkIsRUFBM0IsQ0FBbkMsR0FBb0VFLFNBRjNFO0FBR0xDLE1BQUFBLElBQUksRUFBRVosT0FIRDtBQUlMYSxNQUFBQSxhQUFhLEVBQUViLE9BSlY7QUFLTGMsTUFBQUEsY0FBYyxFQUFFZixHQUFHLENBQUNnQixXQUxmO0FBTUxDLE1BQUFBLGdCQUFnQixFQUFFQywwQkFOYjtBQU9MQyxNQUFBQSxhQUFhLEVBQUVuQixHQUFHLENBQUNnQixXQVBkO0FBUUxJLE1BQUFBLFdBQVcsRUFBRXBCLEdBQUcsQ0FBQ3FCLGNBUlo7QUFTTEMsTUFBQUEsTUFBTSxFQUFFQyxrQ0FBb0JDO0FBVHZCLEtBQVA7QUFXRCxHQWZNLENBQVA7QUFnQkQ7O0FBRUQsZUFBZUMsMEJBQWYsQ0FBMEN6RCxJQUExQyxFQUErRTtBQUM3RSxRQUFNMEQsVUFBVSxHQUFHLE1BQU0sdUNBQVkxRCxJQUFaLEVBQWtCLFVBQWxCLEVBQThCLEVBQTlCLEVBQW1DMkQsR0FBRCxJQUFTO0FBQ2xFLFdBQU9BLEdBQUcsQ0FBQzVCLEdBQUosQ0FBUzZCLEVBQUQsSUFBUUMsS0FBSyxDQUFDQyxJQUFOLENBQVdGLEVBQUUsQ0FBQ0csZ0JBQUgsQ0FBb0IsSUFBcEIsQ0FBWCxFQUF1Q0MsRUFBRCxJQUFrQ0EsRUFBRSxDQUFDQyxXQUFILElBQWtCLEVBQTFGLENBQWhCLENBQVA7QUFDRCxHQUZ3QixDQUF6QjtBQUlBLFNBQU9QLFVBQVUsQ0FBQzNCLEdBQVgsQ0FBZ0JtQyxHQUFELElBQVM7QUFDN0IsVUFBTXJCLElBQUksR0FBRyxxQkFBT3FCLEdBQUcsQ0FBQyxDQUFELENBQVYsRUFBZSxVQUFmLEVBQTJCN0IsV0FBM0IsRUFBYjtBQUNBLFVBQU04QixNQUFNLEdBQUd4QixRQUFRLENBQUN1QixHQUFHLENBQUMsQ0FBRCxDQUFKLEVBQVMsRUFBVCxDQUF2QjtBQUNBLFdBQU87QUFDTDVCLE1BQUFBLElBQUksRUFBRUMsK0JBQWlCQyxNQURsQjtBQUVMSyxNQUFBQSxJQUZLO0FBR0xDLE1BQUFBLGFBQWEsRUFBRUQsSUFIVjtBQUlMRSxNQUFBQSxjQUFjLEVBQUVvQixNQUpYO0FBS0xsQixNQUFBQSxnQkFBZ0IsRUFBRUMsMEJBTGI7QUFNTEMsTUFBQUEsYUFBYSxFQUFFZ0IsTUFOVjtBQU9MZixNQUFBQSxXQUFXLEVBQUVjLEdBQUcsQ0FBQyxDQUFELENBUFg7QUFRTFosTUFBQUEsTUFBTSxFQUFFQyxrQ0FBb0JhO0FBUnZCLEtBQVA7QUFVRCxHQWJNLENBQVA7QUFjRDs7QUFFRCxlQUFlQyxTQUFmLENBQXlCckUsSUFBekIsRUFBcUM7QUFDbkMsUUFBTXNFLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQ2pCLGlEQUFzQnZFLElBQXRCLEVBQTRCYixrQkFBNUIsQ0FEaUIsRUFFakIsaURBQXNCYSxJQUF0QixFQUE0QmQsdUJBQTVCLENBRmlCLEVBR2pCLDRCQUFXYyxJQUFYLEVBQWlCcEIsbUJBQWpCLENBSGlCLENBQWIsQ0FBTjtBQUtEOztBQUVELE1BQU00RixjQUFOLFNBQTZCQyw4Q0FBN0IsQ0FBb0Q7QUFDbERDLEVBQUFBLGVBQWUsQ0FBQ2hGLFdBQUQsRUFBa0M7QUFDL0MsV0FBTztBQUNMaUYsTUFBQUEsUUFBUSxFQUFFdkcsU0FETDtBQUVMd0csTUFBQUEsTUFBTSxFQUFFbkYsaUJBQWlCLENBQUNDLFdBQUQsQ0FGcEI7QUFHTFQsTUFBQUEsb0JBSEs7QUFJTDRGLE1BQUFBLGNBQWMsRUFBRSxZQUFZLHFEQUEwQixLQUFLN0UsSUFBL0IsRUFBcUNaLG9CQUFyQyxDQUp2QjtBQUtMMEYsTUFBQUEsVUFBVSxFQUFFLFlBQVlULFNBQVMsQ0FBQyxLQUFLckUsSUFBTixDQUw1QjtBQU1MK0UsTUFBQUEsZUFBZSxFQUFFaEYsdUJBQXVCLENBQUMsS0FBS0MsSUFBTjtBQU5uQyxLQUFQO0FBUUQ7O0FBRUQsUUFBTWdGLFNBQU4sR0FBa0I7QUFDaEIsVUFBTSxLQUFLaEYsSUFBTCxDQUFVaUYsS0FBVixDQUFnQix1QkFBaEIsRUFBMENDLEVBQUQsSUFBU0EsRUFBRCxDQUFvQkMsS0FBcEIsRUFBakQsQ0FBTjtBQUVBLFVBQU1DLGFBQWEsR0FBRyxDQUFDLE1BQU0sS0FBS3BGLElBQUwsQ0FBVXFGLEVBQVYsQ0FBYWhHLDJCQUFiLENBQVAsRUFBa0RpRyxNQUF4RTs7QUFFQSxRQUFJO0FBQ0YsWUFBTUMsT0FBOEIsR0FBRyxFQUF2Qzs7QUFFQSxXQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdKLGFBQXBCLEVBQW1DSSxDQUFDLElBQUksQ0FBeEMsRUFBMkM7QUFDekMsWUFBSUEsQ0FBQyxHQUFHLENBQVIsRUFBVztBQUNULGdCQUFNLEtBQUt4RixJQUFMLENBQVVpRixLQUFWLENBQWdCLHVCQUFoQixFQUEwQ0MsRUFBRCxJQUFTQSxFQUFELENBQW9CQyxLQUFwQixFQUFqRCxDQUFOO0FBQ0Q7O0FBRUQsY0FBTSxLQUFLbkYsSUFBTCxDQUFVaUYsS0FBVixDQUFpQixHQUFFNUYsMkJBQTRCLGNBQWFtRyxDQUFDLEdBQUcsQ0FBRSxHQUFsRSxFQUF1RU4sRUFBRCxJQUFTQSxFQUFELENBQW9CQyxLQUFwQixFQUE5RSxDQUFOO0FBQ0FJLFFBQUFBLE9BQU8sQ0FBQ0UsSUFBUixFQUFjLE1BQU0sS0FBS0MsWUFBTCxFQUFwQjtBQUNEOztBQUVELGFBQU87QUFDTEMsUUFBQUEsT0FBTyxFQUFFLElBREo7QUFFTEMsUUFBQUEsUUFBUSxFQUFFTDtBQUZMLE9BQVA7QUFJRCxLQWhCRCxDQWdCRSxPQUFPTSxDQUFQLEVBQVU7QUFDVixhQUFPO0FBQ0xGLFFBQUFBLE9BQU8sRUFBRSxLQURKO0FBRUxHLFFBQUFBLFNBQVMsRUFBRUMsK0JBQWtCQyxPQUZ4QjtBQUdMQyxRQUFBQSxZQUFZLEVBQUVKLENBQUMsQ0FBQ0s7QUFIWCxPQUFQO0FBS0Q7QUFDRjs7QUFFRCxRQUFjUixZQUFkLEdBQTZCO0FBQzNCO0FBQ0EsVUFBTSxLQUFLMUYsSUFBTCxDQUFVbUcsaUJBQVYsQ0FBNEI7QUFBRUMsTUFBQUEsU0FBUyxFQUFFO0FBQWIsS0FBNUIsQ0FBTjtBQUNBLFVBQU0sS0FBS3BHLElBQUwsQ0FBVWlGLEtBQVYsQ0FBaUIsV0FBVTFHLFFBQVMsSUFBcEMsRUFBMEMyRyxFQUFELElBQVNBLEVBQUQsQ0FBb0JDLEtBQXBCLEVBQWpELENBQU47QUFDQSxVQUFNLGlEQUFzQixLQUFLbkYsSUFBM0IsRUFBa0MsV0FBVXhCLGlCQUFrQixJQUE5RCxDQUFOO0FBQ0EsVUFBTSxLQUFLd0IsSUFBTCxDQUFVaUYsS0FBVixDQUFpQixXQUFVekcsaUJBQWtCLElBQTdDLEVBQW1EMEcsRUFBRCxJQUFTQSxFQUFELENBQW9CQyxLQUFwQixFQUExRCxDQUFOO0FBRUEsVUFBTW5FLE9BQU8sR0FBRyxNQUFNLEtBQUtoQixJQUFMLENBQVVxRyxjQUFWLENBQXlCNUgsd0JBQXpCLENBQXRCO0FBQ0EsVUFBTXdDLElBQUksR0FBR0YscUJBQXFCLENBQUNDLE9BQUQsRUFBVSxLQUFLc0YsT0FBTCxDQUFhM0YsU0FBdkIsQ0FBbEM7QUFDQSxVQUFNaUIsT0FBTyxHQUFHRix3QkFBd0IsQ0FBQ1YsT0FBRCxDQUF4QztBQUVBLFVBQU11RixRQUFRLEdBQUcsTUFBTSxnQ0FBK0MsS0FBS3ZHLElBQXBELEVBQ3JCdkIsd0JBRHFCLEVBQ0t3QyxJQURMLEVBQ1dXLE9BRFgsQ0FBdkI7O0FBR0EsUUFBSSxDQUFDMkUsUUFBRCxJQUFhQSxRQUFRLENBQUNDLE1BQVQsQ0FBZ0JiLE9BQWhCLEtBQTRCLEtBQTdDLEVBQW9EO0FBQ2xELFlBQU0sSUFBSWMsS0FBSixDQUFXLGlEQUFnREYsUUFBUSxHQUFHQSxRQUFRLENBQUNDLE1BQVQsQ0FBZ0JFLFFBQWhCLENBQXlCLENBQXpCLEVBQTRCQyxJQUEvQixHQUFzQyxFQUFHLEVBQTVHLENBQU47QUFDRDs7QUFFRCxVQUFNQyxZQUFZLEdBQUdMLFFBQVEsQ0FBQ00sSUFBVCxDQUFjckYsS0FBZCxDQUFvQnNGLElBQXBCLENBQXlCQyxNQUF6QixDQUFpQy9FLEdBQUQsSUFBU0EsR0FBRyxDQUFDZ0YsZ0JBQTdDLENBQXJCO0FBQ0EsVUFBTUMsTUFBTSxHQUFHcEYsbUJBQW1CLENBQUMrRSxZQUFELENBQWxDLENBbkIyQixDQXFCM0I7O0FBQ0EsVUFBTU0sV0FBVyxHQUFHM0csY0FBYyxDQUFDLEtBQUsrRixPQUFMLENBQWEzRixTQUFkLENBQWxDO0FBQ0EsVUFBTXdHLG9CQUFvQixHQUFHRixNQUFNLENBQUNGLE1BQVAsQ0FBZTdDLEdBQUQsSUFBUyxxQkFBT0EsR0FBRyxDQUFDckIsSUFBWCxFQUFpQnVFLGFBQWpCLENBQStCRixXQUEvQixDQUF2QixDQUE3QjtBQUVBLFVBQU0sS0FBS2xILElBQUwsQ0FBVWlGLEtBQVYsQ0FBaUIsV0FBVXZHLHlCQUEwQixJQUFyRCxFQUEyRHdHLEVBQUQsSUFBU0EsRUFBRCxDQUFvQkMsS0FBcEIsRUFBbEUsQ0FBTjtBQUNBLFVBQU1rQyxLQUFLLEdBQUcsTUFBTSxnREFBcUIsS0FBS3JILElBQTFCLEVBQWlDc0gsQ0FBRCxJQUFPQSxDQUFDLENBQUNDLEdBQUYsR0FBUUMsUUFBUixDQUFpQjdJLDJCQUFqQixDQUF2QyxDQUFwQjtBQUNBLFVBQU0saURBQXNCMEksS0FBdEIsRUFBNkIvSCxzQkFBN0IsQ0FBTjtBQUNBLFVBQU1vRSxVQUFVLEdBQUcsTUFBTUQsMEJBQTBCLENBQUM0RCxLQUFELENBQW5EO0FBRUEsVUFBTUksTUFBTSxHQUFHTixvQkFBb0IsQ0FBQ08sTUFBckIsQ0FBNEJoRSxVQUE1QixDQUFmO0FBRUEsV0FBTztBQUNMaUUsTUFBQUEsYUFBYSxFQUFFcEIsUUFBUSxDQUFDTSxJQUFULENBQWNqQyxNQUFkLENBQXFCZ0QsYUFEL0I7QUFFTDlGLE1BQUFBLElBQUksRUFBRTJGLE1BRkQ7QUFHTEksTUFBQUEsT0FBTyxFQUFFLENBQUN0QixRQUFRLENBQUNNLElBQVQsQ0FBY2pDLE1BQWQsQ0FBcUJrRDtBQUgxQixLQUFQO0FBS0Q7O0FBL0VpRDs7ZUFrRnJDdEQsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEZyYW1lLCBQYWdlLCBSZXF1ZXN0IH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IFNIRUtFTF9DVVJSRU5DWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBwYWdlRXZhbEFsbCwgd2FpdFVudGlsRWxlbWVudERpc2FwcGVhciwgd2FpdFVudGlsRWxlbWVudEZvdW5kLCB3YWl0VW50aWxJZnJhbWVGb3VuZCxcbn0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgZmV0Y2hQb3N0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclVybCB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25zQWNjb3VudCwgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcyxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IFNjcmFwZXJDcmVkZW50aWFscywgU2NyYXBlckVycm9yVHlwZXMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlcic7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCBMb2dpblJlc3VsdHMsIFBvc3NpYmxlTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIFJlY1R5cGVTcGVjaWZpZWQ6IGJvb2xlYW47XG4gIE1DMDJQZXVsYVRhYUVaOiBzdHJpbmc7XG4gIE1DMDJTY2h1bUVaOiBudW1iZXI7XG4gIE1DMDJBc21haHRhTWVrb3JpdEVaOiBzdHJpbmc7XG4gIE1DMDJUbnVhVGV1ckVaOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb25zUmVzdWx0IHtcbiAgaGVhZGVyOiB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICBtZXNzYWdlczogeyB0ZXh0OiBzdHJpbmcgfVtdO1xuICB9O1xuICBib2R5OiB7XG4gICAgZmllbGRzOiB7XG4gICAgICBBY2NvdW50TnVtYmVyOiBzdHJpbmc7XG4gICAgICBZaXRyYUxlbG9DaGVraW06IHN0cmluZztcbiAgICB9O1xuICAgIHRhYmxlOiB7XG4gICAgICByb3dzOiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCBCQVNFX1dFQlNJVEVfVVJMID0gJ2h0dHBzOi8vd3d3Lm1penJhaGktdGVmYWhvdC5jby5pbCc7XG5jb25zdCBMT0dJTl9VUkwgPSBgJHtCQVNFX1dFQlNJVEVfVVJMfS9sb2dpbi9pbmRleC5odG1sIy9hdXRoLXBhZ2UtaGVgO1xuY29uc3QgQkFTRV9BUFBfVVJMID0gJ2h0dHBzOi8vbXRvLm1penJhaGktdGVmYWhvdC5jby5pbCc7XG5jb25zdCBBRlRFUl9MT0dJTl9CQVNFX1VSTCA9IC9odHRwczpcXC9cXC9tdG9cXC5taXpyYWhpLXRlZmFob3RcXC5jb1xcLmlsXFwvT25saW5lQXBwXFwvLiovO1xuY29uc3QgT1NIX1BBR0UgPSAnL09ubGluZUFwcC9vc2gvbGVnYWN5L2xlZ2FjeS1Pc2gtTWFpbic7XG5jb25zdCBUUkFOU0FDVElPTlNfUEFHRSA9ICcvT25saW5lQXBwL29zaC9sZWdhY3kvcm9vdC1tYWluLW9zaC1wNDI4TmV3JztcbmNvbnN0IFRSQU5TQUNUSU9OU19SRVFVRVNUX1VSTCA9IGAke0JBU0VfQVBQX1VSTH0vT25saW5lL2FwaS9Ta3lPU0gvZ2V0NDI4SW5kZXhgO1xuY29uc3QgUEVORElOR19UUkFOU0FDVElPTlNfUEFHRSA9ICcvT25saW5lQXBwL29zaC9sZWdhY3kvbGVnYWN5LU9zaC1wNDIwJztcbmNvbnN0IFBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSA9ICdwNDIwLmFzcHgnO1xuY29uc3QgQ0hBTkdFX1BBU1NXT1JEX1VSTCA9IC9odHRwczpcXC9cXC93d3dcXC5taXpyYWhpLXRlZmFob3RcXC5jb1xcLmlsXFwvbG9naW5cXC9cXHcrXFwvaW5kZXhcXC5odG1sI1xcL2NoYW5nZS1wYXNzLztcbmNvbnN0IERBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuY29uc3QgTUFYX1JPV1NfUEVSX1JFUVVFU1QgPSAxMDAwMDAwMDAwMDtcblxuY29uc3QgdXNlcm5hbWVTZWxlY3RvciA9ICcjZW1haWxEZXNrdG9wSGViJztcbmNvbnN0IHBhc3N3b3JkU2VsZWN0b3IgPSAnI3Bhc3N3b3JkSUREZXNrdG9wSEVCJztcbmNvbnN0IHN1Ym1pdEJ1dHRvblNlbGVjdG9yID0gJy5mb3JtLWRlc2t0b3AgYnV0dG9uJztcbmNvbnN0IGludmFsaWRQYXNzd29yZFNlbGVjdG9yID0gJ2FbaHJlZio9XCJodHRwczovL3NjLm1penJhaGktdGVmYWhvdC5jby5pbC9TQ1NlcnZpY2VzL1NDL1AwMTAuYXNweFwiXSc7XG5jb25zdCBhZnRlckxvZ2luU2VsZWN0b3IgPSAnI2Ryb3Bkb3duQmFzaWMnO1xuY29uc3QgbG9naW5TcGlubmVyU2VsZWN0b3IgPSAnZGl2Lm5neC1vdmVybGF5LmxvYWRpbmctZm9yZWdyb3VuZCc7XG5jb25zdCBhY2NvdW50RHJvcERvd25JdGVtU2VsZWN0b3IgPSAnI0FjY291bnRQaWNrZXIgLml0ZW0nO1xuY29uc3QgcGVuZGluZ1RyeElkZW50aWZpZXJJZCA9ICcjY3RsMDBfQ29udGVudFBsYWNlSG9sZGVyMl9wYW5lbDEnO1xuY29uc3QgY2hlY2tpbmdBY2NvdW50VGFiSGVicmV3TmFtZSA9ICfXoteV15HXqCDXldep15EnO1xuY29uc3QgY2hlY2tpbmdBY2NvdW50VGFiRW5nbGlzaE5hbWUgPSAnQ2hlY2tpbmcgQWNjb3VudCc7XG5cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscykge1xuICByZXR1cm4gW1xuICAgIHsgc2VsZWN0b3I6IHVzZXJuYW1lU2VsZWN0b3IsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6IHBhc3N3b3JkU2VsZWN0b3IsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyhwYWdlOiBQYWdlKTogUG9zc2libGVMb2dpblJlc3VsdHMge1xuICByZXR1cm4ge1xuICAgIFtMb2dpblJlc3VsdHMuU3VjY2Vzc106IFtBRlRFUl9MT0dJTl9CQVNFX1VSTCwgYXN5bmMgKCkgPT4gISEoYXdhaXQgcGFnZS4keChgLy9hLy9zcGFuW2NvbnRhaW5zKC4sIFwiJHtjaGVja2luZ0FjY291bnRUYWJIZWJyZXdOYW1lfVwiKSBvciBjb250YWlucyguLCBcIiR7Y2hlY2tpbmdBY2NvdW50VGFiRW5nbGlzaE5hbWV9XCIpXWApKV0sXG4gICAgW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdOiBbYXN5bmMgKCkgPT4gISEoYXdhaXQgcGFnZS4kKGludmFsaWRQYXNzd29yZFNlbGVjdG9yKSldLFxuICAgIFtMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmRdOiBbQ0hBTkdFX1BBU1NXT1JEX1VSTF0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0TW9tZW50KG9wdGlvbnNTdGFydERhdGU6IERhdGUpIHtcbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG9wdGlvbnNTdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICByZXR1cm4gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YUZyb21SZXF1ZXN0KHJlcXVlc3Q6IFJlcXVlc3QsIG9wdGlvbnNTdGFydERhdGU6IERhdGUpIHtcbiAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmVxdWVzdC5wb3N0RGF0YSgpIHx8ICd7fScpO1xuXG4gIGRhdGEuaW5Gcm9tRGF0ZSA9IGdldFN0YXJ0TW9tZW50KG9wdGlvbnNTdGFydERhdGUpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG4gIGRhdGEuaW5Ub0RhdGUgPSBtb21lbnQoKS5mb3JtYXQoREFURV9GT1JNQVQpO1xuICBkYXRhLnRhYmxlLm1heFJvdyA9IE1BWF9ST1dTX1BFUl9SRVFVRVNUO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzRnJvbVJlcXVlc3QocmVxdWVzdDogUmVxdWVzdCkge1xuICByZXR1cm4ge1xuICAgIG1penJhaGl4c3JmdG9rZW46IHJlcXVlc3QuaGVhZGVycygpLm1penJhaGl4c3JmdG9rZW4sXG4gICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuaGVhZGVycygpWydjb250ZW50LXR5cGUnXSxcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIHJldHVybiB0eG5zLm1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgdHhuRGF0ZSA9IG1vbWVudChyb3cuTUMwMlBldWxhVGFhRVosIG1vbWVudC5IVE1MNV9GTVQuREFURVRJTUVfTE9DQUxfU0VDT05EUylcbiAgICAgIC50b0lTT1N0cmluZygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgaWRlbnRpZmllcjogcm93Lk1DMDJBc21haHRhTWVrb3JpdEVaID8gcGFyc2VJbnQocm93Lk1DMDJBc21haHRhTWVrb3JpdEVaLCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICBkYXRlOiB0eG5EYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogdHhuRGF0ZSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiByb3cuTUMwMlNjaHVtRVosXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiByb3cuTUMwMlNjaHVtRVosXG4gICAgICBkZXNjcmlwdGlvbjogcm93Lk1DMDJUbnVhVGV1ckVaLFxuICAgICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICB9O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFBlbmRpbmdUcmFuc2FjdGlvbnMocGFnZTogRnJhbWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgY29uc3QgcGVuZGluZ1R4biA9IGF3YWl0IHBhZ2VFdmFsQWxsKHBhZ2UsICd0ci5yZ1JvdycsIFtdLCAodHJzKSA9PiB7XG4gICAgcmV0dXJuIHRycy5tYXAoKHRyKSA9PiBBcnJheS5mcm9tKHRyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyksICh0ZDogSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50KSA9PiB0ZC50ZXh0Q29udGVudCB8fCAnJykpO1xuICB9KTtcblxuICByZXR1cm4gcGVuZGluZ1R4bi5tYXAoKHR4bikgPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodHhuWzBdLCAnREQvTU0vWVknKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGFtb3VudCA9IHBhcnNlSW50KHR4blszXSwgMTApO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIGRhdGUsXG4gICAgICBwcm9jZXNzZWREYXRlOiBkYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IGFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG5bMV0sXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyxcbiAgICB9O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9zdExvZ2luKHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgYWZ0ZXJMb2dpblNlbGVjdG9yKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgaW52YWxpZFBhc3N3b3JkU2VsZWN0b3IpLFxuICAgIHdhaXRGb3JVcmwocGFnZSwgQ0hBTkdFX1BBU1NXT1JEX1VSTCksXG4gIF0pO1xufVxuXG5jbGFzcyBNaXpyYWhpU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIge1xuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogTE9HSU5fVVJMLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcixcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiB3YWl0VW50aWxFbGVtZW50RGlzYXBwZWFyKHRoaXMucGFnZSwgbG9naW5TcGlubmVyU2VsZWN0b3IpLFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gcG9zdExvZ2luKHRoaXMucGFnZSksXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKHRoaXMucGFnZSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoJyNkcm9wZG93bkJhc2ljLCAuaXRlbScsIChlbCkgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcblxuICAgIGNvbnN0IG51bU9mQWNjb3VudHMgPSAoYXdhaXQgdGhpcy5wYWdlLiQkKGFjY291bnREcm9wRG93bkl0ZW1TZWxlY3RvcikpLmxlbmd0aDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHRzOiBUcmFuc2FjdGlvbnNBY2NvdW50W10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PZkFjY291bnRzOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKCcjZHJvcGRvd25CYXNpYywgLml0ZW0nLCAoZWwpID0+IChlbCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoYCR7YWNjb3VudERyb3BEb3duSXRlbVNlbGVjdG9yfTpudGgtY2hpbGQoJHtpICsgMX0pYCwgKGVsKSA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xuICAgICAgICByZXN1bHRzLnB1c2goKGF3YWl0IHRoaXMuZmV0Y2hBY2NvdW50KCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgYWNjb3VudHM6IHJlc3VsdHMsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyaWMsXG4gICAgICAgIGVycm9yTWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoQWNjb3VudCgpIHtcbiAgICAvLyB3b3JrYXJvdW5kIGZvciBzaXR1YXRpb25zIHdoZXJlIE1penJhaGkgcG9wcyB1cCBwYWdlcyAoZS5nLiBlbWFpbCB1cGRhdGUgcGFnZSlcbiAgICBhd2FpdCB0aGlzLnBhZ2Uud2FpdEZvck5hdmlnYXRpb24oeyB3YWl0VW50aWw6ICduZXR3b3JraWRsZTInIH0pO1xuICAgIGF3YWl0IHRoaXMucGFnZS4kZXZhbChgYVtocmVmPVwiJHtPU0hfUEFHRX1cIl1gLCAoZWwpID0+IChlbCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKSk7XG4gICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgYGFbaHJlZj1cIiR7VFJBTlNBQ1RJT05TX1BBR0V9XCJdYCk7XG4gICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKGBhW2hyZWY9XCIke1RSQU5TQUNUSU9OU19QQUdFfVwiXWAsIChlbCkgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCB0aGlzLnBhZ2Uud2FpdEZvclJlcXVlc3QoVFJBTlNBQ1RJT05TX1JFUVVFU1RfVVJMKTtcbiAgICBjb25zdCBkYXRhID0gY3JlYXRlRGF0YUZyb21SZXF1ZXN0KHJlcXVlc3QsIHRoaXMub3B0aW9ucy5zdGFydERhdGUpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzRnJvbVJlcXVlc3QocmVxdWVzdCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoUG9zdFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uc1Jlc3VsdD4odGhpcy5wYWdlLFxuICAgICAgVFJBTlNBQ1RJT05TX1JFUVVFU1RfVVJMLCBkYXRhLCBoZWFkZXJzKTtcblxuICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UuaGVhZGVyLnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZldGNoaW5nIHRyYW5zYWN0aW9uLiBSZXNwb25zZSBtZXNzYWdlOiAke3Jlc3BvbnNlID8gcmVzcG9uc2UuaGVhZGVyLm1lc3NhZ2VzWzBdLnRleHQgOiAnJ31gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxldmFudFJvd3MgPSByZXNwb25zZS5ib2R5LnRhYmxlLnJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5SZWNUeXBlU3BlY2lmaWVkKTtcbiAgICBjb25zdCBvc2hUeG4gPSBjb252ZXJ0VHJhbnNhY3Rpb25zKHJlbGV2YW50Um93cyk7XG5cbiAgICAvLyB3b3JrYXJvdW5kIGZvciBhIGJ1ZyB3aGljaCB0aGUgYmFuaydzIEFQSSByZXR1cm5zIHRyYW5zYWN0aW9ucyBiZWZvcmUgdGhlIHJlcXVlc3RlZCBzdGFydCBkYXRlXG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBnZXRTdGFydE1vbWVudCh0aGlzLm9wdGlvbnMuc3RhcnREYXRlKTtcbiAgICBjb25zdCBvc2hUeG5BZnRlclN0YXJ0RGF0ZSA9IG9zaFR4bi5maWx0ZXIoKHR4bikgPT4gbW9tZW50KHR4bi5kYXRlKS5pc1NhbWVPckFmdGVyKHN0YXJ0TW9tZW50KSk7XG5cbiAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoYGFbaHJlZj1cIiR7UEVORElOR19UUkFOU0FDVElPTlNfUEFHRX1cIl1gLCAoZWwpID0+IChlbCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKSk7XG4gICAgY29uc3QgZnJhbWUgPSBhd2FpdCB3YWl0VW50aWxJZnJhbWVGb3VuZCh0aGlzLnBhZ2UsIChmKSA9PiBmLnVybCgpLmluY2x1ZGVzKFBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSkpO1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChmcmFtZSwgcGVuZGluZ1RyeElkZW50aWZpZXJJZCk7XG4gICAgY29uc3QgcGVuZGluZ1R4biA9IGF3YWl0IGV4dHJhY3RQZW5kaW5nVHJhbnNhY3Rpb25zKGZyYW1lKTtcblxuICAgIGNvbnN0IGFsbFR4biA9IG9zaFR4bkFmdGVyU3RhcnREYXRlLmNvbmNhdChwZW5kaW5nVHhuKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50TnVtYmVyOiByZXNwb25zZS5ib2R5LmZpZWxkcy5BY2NvdW50TnVtYmVyLFxuICAgICAgdHhuczogYWxsVHhuLFxuICAgICAgYmFsYW5jZTogK3Jlc3BvbnNlLmJvZHkuZmllbGRzLllpdHJhTGVsb0NoZWtpbSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1penJhaGlTY3JhcGVyO1xuIl19
|