@reorderjs/reorder 1.0.8 → 1.1.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/.medusa/server/e2e/auth.setup.js +26 -0
- package/.medusa/server/e2e/cancellation-retention.spec.js +133 -0
- package/.medusa/server/e2e/pages/CancellationCaseDetailPage.js +69 -0
- package/.medusa/server/e2e/pages/CancellationsListPage.js +34 -0
- package/.medusa/server/e2e/pages/PlanFormPage.js +89 -0
- package/.medusa/server/e2e/pages/RenewalDetailPage.js +101 -0
- package/.medusa/server/e2e/pages/SubscriptionDetailPage.js +102 -0
- package/.medusa/server/e2e/plans-offers.spec.js +96 -0
- package/.medusa/server/e2e/renewal-force.spec.js +154 -0
- package/.medusa/server/e2e/seed.setup.js +80 -0
- package/.medusa/server/e2e/subscription-status.spec.js +109 -0
- package/.medusa/server/e2e/subscriptions-list.spec.js +84 -0
- package/.medusa/server/playwright.config.js +37 -0
- package/.medusa/server/scripts/reset-subscriptions-test-data.js +279 -0
- package/.medusa/server/scripts/seed-subscriptions-test-data.js +2425 -0
- package/.medusa/server/scripts/wipe-test-data.js +44 -0
- package/.medusa/server/src/admin/index.js +11106 -9689
- package/.medusa/server/src/admin/index.mjs +11099 -9682
- package/.medusa/server/src/admin/types/analytics.js +2 -1
- package/.medusa/server/src/api/admin/cancellations/validators.js +2 -2
- package/.medusa/server/src/api/admin/dunning/validators.js +2 -2
- package/.medusa/server/src/api/admin/renewals/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-analytics/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-logs/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-offers/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-settings/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscriptions/[id]/payment-method/route.js +19 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/payment-methods/route.js +10 -0
- package/.medusa/server/src/api/admin/subscriptions/middlewares.js +8 -1
- package/.medusa/server/src/api/admin/subscriptions/utils.js +5 -1
- package/.medusa/server/src/api/admin/subscriptions/validators.js +7 -3
- package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/payment-method/route.js +26 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/payment-methods/route.js +15 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/middlewares.js +8 -1
- package/.medusa/server/src/api/store/customers/me/subscriptions/utils.js +72 -1
- package/.medusa/server/src/api/store/customers/me/subscriptions/validators.js +7 -3
- package/.medusa/server/src/api/store/products/validators.js +2 -2
- package/.medusa/server/src/modules/activity-log/__tests__/create-subscription-log-event.spec.js +257 -0
- package/.medusa/server/src/modules/activity-log/__tests__/normalize-log-event.spec.js +231 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260818120000.js +16 -0
- package/.medusa/server/src/modules/activity-log/types/index.js +2 -1
- package/.medusa/server/src/modules/analytics/__tests__/admin-query.spec.js +560 -0
- package/.medusa/server/src/modules/analytics/index.js +2 -2
- package/.medusa/server/src/modules/analytics/utils/admin-query.js +157 -5
- package/.medusa/server/src/modules/plan-offer/__tests__/service.spec.js +94 -0
- package/.medusa/server/src/modules/renewal/__tests__/service.spec.js +89 -0
- package/.medusa/server/src/modules/settings/__tests__/normalize-settings.spec.js +86 -0
- package/.medusa/server/src/modules/settings/__tests__/service.spec.js +124 -0
- package/.medusa/server/src/modules/subscription/__tests__/payment-methods.spec.js +186 -0
- package/.medusa/server/src/modules/subscription/__tests__/service.spec.js +124 -0
- package/.medusa/server/src/modules/subscription/utils/admin-query.js +196 -14
- package/.medusa/server/src/modules/subscription/utils/payment-methods.js +146 -0
- package/.medusa/server/src/workflows/__tests__/cancel-subscription.spec.js +20 -0
- package/.medusa/server/src/workflows/__tests__/pause-subscription.spec.js +20 -0
- package/.medusa/server/src/workflows/__tests__/update-subscription-shipping-address.spec.js +49 -0
- package/.medusa/server/src/workflows/cancel-subscription.js +21 -1
- package/.medusa/server/src/workflows/index.js +6 -2
- package/.medusa/server/src/workflows/pause-subscription.js +21 -1
- package/.medusa/server/src/workflows/steps/rebuild-analytics-daily-snapshots.js +33 -10
- package/.medusa/server/src/workflows/steps/update-subscription-payment-method.js +110 -0
- package/.medusa/server/src/workflows/steps/validate-subscription-cart.js +7 -22
- package/.medusa/server/src/workflows/update-subscription-payment-method.js +65 -0
- package/.medusa/server/src/workflows/utils/analytics-incremental.js +1 -1
- package/README.md +89 -36
- package/package.json +25 -23
|
@@ -16,6 +16,7 @@ const METRIC_LABELS = {
|
|
|
16
16
|
[analytics_1.AnalyticsMetricKey.CHURN_RATE]: "Churn Rate",
|
|
17
17
|
[analytics_1.AnalyticsMetricKey.LTV]: "LTV",
|
|
18
18
|
[analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT]: "Active Subscriptions",
|
|
19
|
+
[analytics_1.AnalyticsMetricKey.CREATED_SUBSCRIPTIONS_COUNT]: "Created Subscriptions",
|
|
19
20
|
};
|
|
20
21
|
function getQuery(container) {
|
|
21
22
|
return container.resolve(utils_2.ContainerRegistrationKeys.QUERY);
|
|
@@ -63,6 +64,16 @@ function shiftDays(value, days) {
|
|
|
63
64
|
next.setUTCDate(next.getUTCDate() + days);
|
|
64
65
|
return next;
|
|
65
66
|
}
|
|
67
|
+
function filterIncludesCurrentUtcDay(filters) {
|
|
68
|
+
if (!filters.date_from || !filters.date_to) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const todayStart = toUtcDayStart(new Date());
|
|
72
|
+
const rangeFrom = toUtcDayStart(filters.date_from);
|
|
73
|
+
const rangeTo = toUtcDayStart(filters.date_to);
|
|
74
|
+
return (rangeFrom.getTime() <= todayStart.getTime() &&
|
|
75
|
+
rangeTo.getTime() >= todayStart.getTime());
|
|
76
|
+
}
|
|
66
77
|
function roundValue(value, precision) {
|
|
67
78
|
if (value === null || !Number.isFinite(value)) {
|
|
68
79
|
return null;
|
|
@@ -187,6 +198,93 @@ async function listMetricsDailyRows(container, filters) {
|
|
|
187
198
|
const allowedTokens = new Set(filters.frequency.map((frequency) => `${frequency.interval}:${frequency.value}`));
|
|
188
199
|
return rows.filter((row) => allowedTokens.has(`${row.frequency_interval}:${row.frequency_value}`));
|
|
189
200
|
}
|
|
201
|
+
async function getLiveActiveSubscriptionsCount(container, filters) {
|
|
202
|
+
if (filters.status.length && !filters.status.includes("active")) {
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
const query = getQuery(container);
|
|
206
|
+
const rows = [];
|
|
207
|
+
const take = 500;
|
|
208
|
+
let skip = 0;
|
|
209
|
+
while (true) {
|
|
210
|
+
const result = await query.graph({
|
|
211
|
+
entity: "subscription",
|
|
212
|
+
fields: ["id", "frequency_interval", "frequency_value"],
|
|
213
|
+
filters: {
|
|
214
|
+
status: ["active"],
|
|
215
|
+
...(filters.product_id.length ? { product_id: filters.product_id } : {}),
|
|
216
|
+
},
|
|
217
|
+
pagination: {
|
|
218
|
+
take,
|
|
219
|
+
skip,
|
|
220
|
+
order: {
|
|
221
|
+
id: "ASC",
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
const batch = (result.data ?? []);
|
|
226
|
+
rows.push(...batch);
|
|
227
|
+
if (!batch.length || rows.length >= (result.metadata?.count ?? 0)) {
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
skip += result.metadata?.take ?? take;
|
|
231
|
+
}
|
|
232
|
+
if (!filters.frequency.length) {
|
|
233
|
+
return rows.length;
|
|
234
|
+
}
|
|
235
|
+
const allowedTokens = new Set(filters.frequency.map((frequency) => `${frequency.interval}:${frequency.value}`));
|
|
236
|
+
return rows.filter((row) => allowedTokens.has(`${row.frequency_interval}:${row.frequency_value}`)).length;
|
|
237
|
+
}
|
|
238
|
+
async function listCreatedSubscriptions(container, filters) {
|
|
239
|
+
const query = getQuery(container);
|
|
240
|
+
const rows = [];
|
|
241
|
+
const take = 500;
|
|
242
|
+
let skip = 0;
|
|
243
|
+
while (true) {
|
|
244
|
+
const result = await query.graph({
|
|
245
|
+
entity: "subscription",
|
|
246
|
+
fields: ["id", "created_at"],
|
|
247
|
+
filters: {
|
|
248
|
+
created_at: {
|
|
249
|
+
$gte: filters.date_from,
|
|
250
|
+
$lte: filters.date_to,
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
pagination: {
|
|
254
|
+
take,
|
|
255
|
+
skip,
|
|
256
|
+
order: {
|
|
257
|
+
created_at: "ASC",
|
|
258
|
+
id: "ASC",
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
const batch = (result.data ?? []);
|
|
263
|
+
rows.push(...batch);
|
|
264
|
+
if (!batch.length || rows.length >= (result.metadata?.count ?? 0)) {
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
skip += result.metadata?.take ?? take;
|
|
268
|
+
}
|
|
269
|
+
return rows;
|
|
270
|
+
}
|
|
271
|
+
function overrideLiveActiveBucket(buckets, filters, liveActiveSubscriptionsCount) {
|
|
272
|
+
if (!buckets.length || liveActiveSubscriptionsCount === null) {
|
|
273
|
+
return buckets;
|
|
274
|
+
}
|
|
275
|
+
const todayStart = toUtcDayStart(new Date()).getTime();
|
|
276
|
+
return buckets.map((bucket) => {
|
|
277
|
+
const bucketStart = new Date(bucket.bucket_start).getTime();
|
|
278
|
+
const bucketEnd = new Date(bucket.bucket_end).getTime();
|
|
279
|
+
if (bucketStart <= todayStart && bucketEnd >= todayStart) {
|
|
280
|
+
return {
|
|
281
|
+
...bucket,
|
|
282
|
+
active_subscriptions_count: liveActiveSubscriptionsCount,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return bucket;
|
|
286
|
+
});
|
|
287
|
+
}
|
|
190
288
|
function buildDaySummaries(rows) {
|
|
191
289
|
const summaryByDay = new Map();
|
|
192
290
|
for (const row of rows) {
|
|
@@ -310,7 +408,8 @@ function computeLtv(mrr, churnRate) {
|
|
|
310
408
|
return mrr / (churnRate / 100);
|
|
311
409
|
}
|
|
312
410
|
function metricUnit(metric) {
|
|
313
|
-
if (metric === analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT
|
|
411
|
+
if (metric === analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT ||
|
|
412
|
+
metric === analytics_1.AnalyticsMetricKey.CREATED_SUBSCRIPTIONS_COUNT) {
|
|
314
413
|
return "count";
|
|
315
414
|
}
|
|
316
415
|
if (metric === analytics_1.AnalyticsMetricKey.CHURN_RATE) {
|
|
@@ -319,7 +418,10 @@ function metricUnit(metric) {
|
|
|
319
418
|
return "currency";
|
|
320
419
|
}
|
|
321
420
|
function metricPrecision(metric) {
|
|
322
|
-
return metric === analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT
|
|
421
|
+
return metric === analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT ||
|
|
422
|
+
metric === analytics_1.AnalyticsMetricKey.CREATED_SUBSCRIPTIONS_COUNT
|
|
423
|
+
? 0
|
|
424
|
+
: 2;
|
|
323
425
|
}
|
|
324
426
|
function buildKpiValue(metric, value, previousValue, currencyCode) {
|
|
325
427
|
const deltaValue = value === null || previousValue === null ? null : value - previousValue;
|
|
@@ -370,6 +472,9 @@ function buildTrendPoints(buckets, metric) {
|
|
|
370
472
|
if (metric === analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT) {
|
|
371
473
|
value = bucket.active_subscriptions_count;
|
|
372
474
|
}
|
|
475
|
+
else if (metric === analytics_1.AnalyticsMetricKey.CREATED_SUBSCRIPTIONS_COUNT) {
|
|
476
|
+
value = 0;
|
|
477
|
+
}
|
|
373
478
|
else if (metric === analytics_1.AnalyticsMetricKey.MRR) {
|
|
374
479
|
value = bucket.has_mixed_currency ? null : bucket.mrr_amount;
|
|
375
480
|
}
|
|
@@ -399,6 +504,36 @@ function buildTrendSeries(buckets, metric) {
|
|
|
399
504
|
points: buildTrendPoints(buckets, metric),
|
|
400
505
|
};
|
|
401
506
|
}
|
|
507
|
+
function buildCreatedSubscriptionsSeries(filters, rows) {
|
|
508
|
+
const countsByDay = new Map();
|
|
509
|
+
for (const row of rows) {
|
|
510
|
+
const createdAt = new Date(row.created_at);
|
|
511
|
+
if (Number.isNaN(createdAt.getTime())) {
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
514
|
+
const dayKey = toUtcDayStart(createdAt).toISOString();
|
|
515
|
+
countsByDay.set(dayKey, (countsByDay.get(dayKey) ?? 0) + 1);
|
|
516
|
+
}
|
|
517
|
+
const start = toUtcDayStart(filters.date_from);
|
|
518
|
+
const end = toUtcDayStart(filters.date_to);
|
|
519
|
+
const points = [];
|
|
520
|
+
for (let cursor = new Date(start); cursor.getTime() <= end.getTime(); cursor = shiftDays(cursor, 1)) {
|
|
521
|
+
const bucketStart = toUtcDayStart(cursor).toISOString();
|
|
522
|
+
points.push({
|
|
523
|
+
bucket_start: bucketStart,
|
|
524
|
+
bucket_end: toUtcDayEnd(cursor).toISOString(),
|
|
525
|
+
value: countsByDay.get(bucketStart) ?? 0,
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
return {
|
|
529
|
+
metric: analytics_1.AnalyticsMetricKey.CREATED_SUBSCRIPTIONS_COUNT,
|
|
530
|
+
label: METRIC_LABELS[analytics_1.AnalyticsMetricKey.CREATED_SUBSCRIPTIONS_COUNT],
|
|
531
|
+
unit: "count",
|
|
532
|
+
currency_code: null,
|
|
533
|
+
precision: 0,
|
|
534
|
+
points,
|
|
535
|
+
};
|
|
536
|
+
}
|
|
402
537
|
async function buildAnalyticsSnapshot(container, input) {
|
|
403
538
|
const normalized = normalizeAnalyticsQueryInput(input);
|
|
404
539
|
const currentRows = await listMetricsDailyRows(container, normalized.filters);
|
|
@@ -416,10 +551,14 @@ async function buildAnalyticsSnapshot(container, input) {
|
|
|
416
551
|
};
|
|
417
552
|
const previousRows = await listMetricsDailyRows(container, previousFilters);
|
|
418
553
|
const previousBuckets = buildBucketSummaries(buildDaySummaries(previousRows), normalized.filters.group_by);
|
|
554
|
+
const liveActiveSubscriptionsCount = filterIncludesCurrentUtcDay(normalized.filters)
|
|
555
|
+
? await getLiveActiveSubscriptionsCount(container, normalized.filters)
|
|
556
|
+
: null;
|
|
419
557
|
return {
|
|
420
558
|
normalized,
|
|
421
559
|
currentBuckets,
|
|
422
560
|
previousBuckets,
|
|
561
|
+
liveActiveSubscriptionsCount,
|
|
423
562
|
};
|
|
424
563
|
}
|
|
425
564
|
async function getAdminAnalyticsKpis(container, input) {
|
|
@@ -430,6 +569,7 @@ async function getAdminAnalyticsKpis(container, input) {
|
|
|
430
569
|
const snapshot = await buildAnalyticsSnapshot(container, input);
|
|
431
570
|
const currentSet = deriveKpiSet(snapshot.currentBuckets);
|
|
432
571
|
const previousSet = deriveKpiSet(snapshot.previousBuckets);
|
|
572
|
+
const currentActiveSubscriptionsCount = snapshot.liveActiveSubscriptionsCount ?? currentSet.active_subscriptions_count;
|
|
433
573
|
const response = {
|
|
434
574
|
filters: snapshot.normalized.filters,
|
|
435
575
|
metrics_version: constants_1.ANALYTICS_METRICS_VERSION,
|
|
@@ -438,7 +578,7 @@ async function getAdminAnalyticsKpis(container, input) {
|
|
|
438
578
|
buildKpiValue(analytics_1.AnalyticsMetricKey.MRR, currentSet.mrr, previousSet.mrr, currentSet.mrr_currency_code),
|
|
439
579
|
buildKpiValue(analytics_1.AnalyticsMetricKey.CHURN_RATE, currentSet.churn_rate, previousSet.churn_rate, null),
|
|
440
580
|
buildKpiValue(analytics_1.AnalyticsMetricKey.LTV, currentSet.ltv, previousSet.ltv, currentSet.mrr_currency_code),
|
|
441
|
-
buildKpiValue(analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT,
|
|
581
|
+
buildKpiValue(analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT, currentActiveSubscriptionsCount, previousSet.active_subscriptions_count, null),
|
|
442
582
|
],
|
|
443
583
|
};
|
|
444
584
|
const durationMs = Date.now() - startedAt;
|
|
@@ -487,7 +627,14 @@ async function getAdminAnalyticsTrends(container, input) {
|
|
|
487
627
|
try {
|
|
488
628
|
const normalized = normalizeAnalyticsQueryInput(input);
|
|
489
629
|
const rows = await listMetricsDailyRows(container, normalized.filters);
|
|
490
|
-
const
|
|
630
|
+
const createdSubscriptions = await listCreatedSubscriptions(container, {
|
|
631
|
+
date_from: normalized.filters.date_from,
|
|
632
|
+
date_to: normalized.filters.date_to,
|
|
633
|
+
});
|
|
634
|
+
const liveActiveSubscriptionsCount = filterIncludesCurrentUtcDay(normalized.filters)
|
|
635
|
+
? await getLiveActiveSubscriptionsCount(container, normalized.filters)
|
|
636
|
+
: null;
|
|
637
|
+
const buckets = overrideLiveActiveBucket(buildBucketSummaries(buildDaySummaries(rows), normalized.filters.group_by), normalized.filters, liveActiveSubscriptionsCount);
|
|
491
638
|
const response = {
|
|
492
639
|
filters: normalized.filters,
|
|
493
640
|
metrics_version: constants_1.ANALYTICS_METRICS_VERSION,
|
|
@@ -497,6 +644,10 @@ async function getAdminAnalyticsTrends(container, input) {
|
|
|
497
644
|
buildTrendSeries(buckets, analytics_1.AnalyticsMetricKey.CHURN_RATE),
|
|
498
645
|
buildTrendSeries(buckets, analytics_1.AnalyticsMetricKey.LTV),
|
|
499
646
|
buildTrendSeries(buckets, analytics_1.AnalyticsMetricKey.ACTIVE_SUBSCRIPTIONS_COUNT),
|
|
647
|
+
buildCreatedSubscriptionsSeries({
|
|
648
|
+
date_from: normalized.filters.date_from,
|
|
649
|
+
date_to: normalized.filters.date_to,
|
|
650
|
+
}, createdSubscriptions),
|
|
500
651
|
],
|
|
501
652
|
};
|
|
502
653
|
const durationMs = Date.now() - startedAt;
|
|
@@ -518,6 +669,7 @@ async function getAdminAnalyticsTrends(container, input) {
|
|
|
518
669
|
metadata: {
|
|
519
670
|
filters: response.filters,
|
|
520
671
|
row_count: rows.length,
|
|
672
|
+
created_subscription_count: createdSubscriptions.length,
|
|
521
673
|
bucket_count: buckets.length,
|
|
522
674
|
series_count: response.series.length,
|
|
523
675
|
},
|
|
@@ -629,4 +781,4 @@ async function getAdminAnalyticsExport(container, input) {
|
|
|
629
781
|
throw error;
|
|
630
782
|
}
|
|
631
783
|
}
|
|
632
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hbmFseXRpY3MvdXRpbHMvYWRtaW4tcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3c0JBLHNEQXdGQztBQUVELDBEQXVFQztBQUVELDBEQXFIQztBQS85QkQscURBQXVEO0FBQ3ZELHFEQUFxRTtBQUNyRSw4REFjdUM7QUFDdkMsNENBQXdEO0FBQ3hELG1EQU93QjtBQXFFeEIsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUE7QUFDaEMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUE7QUFDeEMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7QUFDckMsTUFBTSxhQUFhLEdBQXVDO0lBQ3hELENBQUMsOEJBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSztJQUMvQixDQUFDLDhCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVk7SUFDN0MsQ0FBQyw4QkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO0lBQy9CLENBQUMsOEJBQWtCLENBQUMsMEJBQTBCLENBQUMsRUFBRSxzQkFBc0I7Q0FDeEUsQ0FBQTtBQUVELFNBQVMsUUFBUSxDQUFDLFNBQTBCO0lBQzFDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBWSxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUN0RSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsU0FBMEI7SUFDM0MsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUlyQixRQUFRLENBQUMsQ0FBQTtBQUNkLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFvQjtJQUN6QyxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFeEUsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQzdFLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBb0I7SUFDdkMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXJDLE9BQU8sSUFBSSxJQUFJLENBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FDTixRQUFRLENBQUMsY0FBYyxFQUFFLEVBQ3pCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFDdEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUNyQixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixHQUFHLENBQ0osQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQW9CO0lBQzFDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUE7SUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUE7SUFFckQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQW9CO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNuQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM1QyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBRXBDLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxLQUFvQjtJQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTlELE9BQU8sSUFBSSxJQUFJLENBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUMzRCxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQW9CO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV6QyxPQUFPLElBQUksSUFBSSxDQUNiLElBQUksQ0FBQyxHQUFHLENBQ04sVUFBVSxDQUFDLGNBQWMsRUFBRSxFQUMzQixVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUM1QixDQUFDLEVBQ0QsRUFBRSxFQUNGLEVBQUUsRUFDRixFQUFFLEVBQ0YsR0FBRyxDQUNKLENBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFFBQWMsRUFBRSxNQUFZO0lBQ3JELE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUNSLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUN4QixHQUFHLENBQUMsQ0FDTixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQVcsRUFBRSxJQUFZO0lBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO0lBRXpDLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQW9CLEVBQUUsU0FBaUI7SUFDekQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtBQUN6QyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFhO0lBQ3hDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM3QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFdkQsSUFDRSxDQUFDLFFBQVE7UUFDVCxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzdDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0IsV0FBVyxJQUFJLENBQUMsRUFDaEIsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGdDQUFnQyxLQUFLLEdBQUcsQ0FDekMsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsUUFBUSxFQUFFLFFBQXNDO1FBQ2hELEtBQUssRUFBRSxXQUFXO0tBQ25CLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FDaEMsT0FBa0Q7SUFFbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNyQixPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM1QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUVELElBQ0UsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDcEQsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDOUIsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQ2pCLENBQUM7WUFDRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixpQ0FBaUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQ3BFLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7U0FDcEIsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLEtBQThCO0lBRTlCLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7SUFDdEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTO1FBQ2xDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNoQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV0RSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwrREFBK0QsQ0FDaEUsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLDBCQUEwQixDQUFBO0lBRTdELElBQUksUUFBUSxLQUFLLDBCQUEwQixFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbUNBQW1DLFFBQVEsbUNBQW1DLENBQy9FLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFdkUsSUFBSSxtQkFBbUIsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3BELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHVDQUF1Qyx5QkFBeUIsT0FBTyxDQUN4RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksNEJBQWdCLENBQUMsR0FBRyxDQUFBO0lBRXRELE9BQU87UUFDTCxPQUFPLEVBQUU7WUFDUCxTQUFTLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUNyQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQzFCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDbEMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDckQsUUFBUSxFQUFFLE9BQU87U0FDbEI7UUFDRCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxNQUFNO0tBQy9CLENBQUE7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUNqQyxTQUEwQixFQUMxQixPQUE4QjtJQUU5QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDakMsTUFBTSxJQUFJLEdBQXFDLEVBQUUsQ0FBQTtJQUNqRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUE7SUFDaEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBRVosT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvQixNQUFNLEVBQUUsNEJBQTRCO1lBQ3BDLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLGFBQWE7Z0JBQ2IsaUJBQWlCO2dCQUNqQixhQUFhO2dCQUNiLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixRQUFRO2dCQUNSLG9CQUFvQjtnQkFDcEIsaUJBQWlCO2dCQUNqQixlQUFlO2dCQUNmLFdBQVc7Z0JBQ1gsNEJBQTRCO2dCQUM1QixZQUFZO2dCQUNaLDZCQUE2QjtnQkFDN0IsdUJBQXVCO2FBQ3hCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVM7b0JBQ3ZCLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTztpQkFDdEI7Z0JBQ0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUN6RTtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osS0FBSyxFQUFFO29CQUNMLFdBQVcsRUFBRSxLQUFLO29CQUNsQixFQUFFLEVBQUUsS0FBSztpQkFDVjthQUNGO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBcUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBSztRQUNQLENBQUM7UUFFRCxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FDM0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDakYsQ0FBQTtJQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3pCLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsa0JBQWtCLElBQUksR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQ3RFLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFzQztJQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQTtJQUVsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDL0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUM5QyxXQUFXLEVBQUUsVUFBVTtZQUN2QiwwQkFBMEIsRUFBRSxDQUFDO1lBQzdCLDJCQUEyQixFQUFFLENBQUM7WUFDOUIsVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsSUFBSTtZQUNuQixrQkFBa0IsRUFBRSxLQUFLO1NBQzFCLENBQUE7UUFFRCxPQUFPLENBQUMsMEJBQTBCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNqRixPQUFPLENBQUMsMkJBQTJCLElBQUksTUFBTSxDQUMzQyxHQUFHLENBQUMsMkJBQTJCLElBQUksQ0FBQyxDQUNyQyxDQUFBO1FBRUQsTUFBTSxTQUFTLEdBQ2IsR0FBRyxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTO1lBQ3JELENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFNUIsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNyQyxTQUFRO1FBQ1YsQ0FBQztRQUVELElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDckQsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFBO1lBRTFELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUE7WUFDbkQsQ0FBQztpQkFBTSxJQUNMLEdBQUcsQ0FBQyxhQUFhO2dCQUNqQixPQUFPLENBQUMsYUFBYTtnQkFDckIsR0FBRyxDQUFDLGFBQWEsS0FBSyxPQUFPLENBQUMsYUFBYSxFQUMzQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7Z0JBQ2pDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO2dCQUN6QixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDOUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUMzQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFVBQWtCLEVBQUUsT0FBeUI7SUFDcEUsSUFBSSxPQUFPLEtBQUssNEJBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsT0FBTztZQUNMLFlBQVksRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ3RELFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1NBQ25ELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssNEJBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsT0FBTztZQUNMLFlBQVksRUFBRSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ3ZELFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1NBQ3BELENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLFlBQVksRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1FBQ3JELFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO0tBQ2xELENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FDM0IsWUFBMEIsRUFDMUIsT0FBeUI7SUFFekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlELENBQUE7SUFFMUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN4RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSTtZQUNwRCxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLDBCQUEwQixFQUFFLENBQUM7WUFDN0IsMkJBQTJCLEVBQUUsQ0FBQztZQUM5QixvQ0FBb0MsRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsRUFBRSxDQUFDO1lBQ2IsYUFBYSxFQUFFLElBQUk7WUFDbkIsa0JBQWtCLEVBQUUsS0FBSztZQUN6QixTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUE7UUFFRCxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQTtRQUN0QixPQUFPLENBQUMsMEJBQTBCLEdBQUcsR0FBRyxDQUFDLDBCQUEwQixDQUFBO1FBQ25FLE9BQU8sQ0FBQyxvQ0FBb0MsSUFBSSxHQUFHLENBQUMsMEJBQTBCLENBQUE7UUFDOUUsT0FBTyxDQUFDLDJCQUEyQixJQUFJLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQTtRQUV0RSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7WUFDakMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7WUFDekIsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7UUFDOUIsQ0FBQzthQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxPQUFPLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUE7WUFFbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFBO1lBQzNDLENBQUM7aUJBQU0sSUFDTCxHQUFHLENBQUMsYUFBYTtnQkFDakIsT0FBTyxDQUFDLGFBQWE7Z0JBQ3JCLEdBQUcsQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDLGFBQWEsRUFDM0MsQ0FBQztnQkFDRCxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO2dCQUNqQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtnQkFDekIsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDNUQsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLDBCQUEwQjtRQUM3RCwyQkFBMkIsRUFBRSxNQUFNLENBQUMsMkJBQTJCO1FBQy9ELG9DQUFvQyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsb0NBQW9DLEdBQUcsTUFBTSxDQUFDLFNBQVM7WUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2hFLGFBQWEsRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWE7UUFDdEUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtLQUM5QyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixZQUFvQixFQUNwQixpQkFBeUI7SUFFekIsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGlCQUFpQixJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELE9BQU8sQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxHQUFHLENBQUE7QUFDakQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQWtCLEVBQUUsU0FBaUI7SUFDdkQsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsTUFBMEI7SUFDNUMsSUFBSSxNQUFNLEtBQUssOEJBQWtCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsSUFBSSxNQUFNLEtBQUssOEJBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxNQUEwQjtJQUNqRCxPQUFPLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUNwQixNQUEwQixFQUMxQixLQUFvQixFQUNwQixhQUE0QixFQUM1QixZQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FDZCxLQUFLLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQTtJQUN6RSxNQUFNLGVBQWUsR0FDbkIsVUFBVSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFbEQsT0FBTztRQUNMLEdBQUcsRUFBRSxNQUFNO1FBQ1gsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDNUIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3hCLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDdEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDbEMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLFdBQVcsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztLQUNqRCxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLE9BQXdCLEVBQ3hCLFFBQXNDO0lBRXRDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM5QyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBd0I7SUFDNUMsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDekQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3JELENBQUE7SUFDRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNO1FBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDUixNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUM1QyxPQUFPLEVBQ1AsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FDOUMsQ0FBQTtJQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2pDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFDekQsQ0FBQyxDQUNGLENBQUE7SUFDRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNO1FBQ3RDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNaLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsRUFDbEUsQ0FBQyxDQUNGLEdBQUcsT0FBTyxDQUFDLE1BQU07UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNMLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFNUMsT0FBTztRQUNMLEdBQUcsRUFBRSxTQUFTO1FBQ2QsaUJBQWlCLEVBQUUsa0JBQWtCO1FBQ3JDLDBCQUEwQixFQUFFLGlCQUFpQixJQUFJLENBQUM7UUFDbEQsVUFBVSxFQUFFLFNBQVM7UUFDckIsR0FBRztLQUNKLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsT0FBd0IsRUFDeEIsTUFBMEI7SUFFMUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDNUIsSUFBSSxLQUFvQixDQUFBO1FBRXhCLElBQUksTUFBTSxLQUFLLDhCQUFrQixDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDN0QsS0FBSyxHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQTtRQUMzQyxDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssOEJBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0MsS0FBSyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFBO1FBQzlELENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwRCxLQUFLLEdBQUcsZ0JBQWdCLENBQ3RCLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsTUFBTSxDQUFDLG9DQUFvQyxDQUM1QyxDQUFBO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsVUFBVSxDQUNoQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFDcEQsZ0JBQWdCLENBQ2QsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyxNQUFNLENBQUMsb0NBQW9DLENBQzVDLENBQ0YsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEQsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLE9BQXdCLEVBQ3hCLE1BQTBCO0lBRTFCLE1BQU0sWUFBWSxHQUNoQixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVTtRQUMvQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsSUFBSSxJQUFJO1FBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFFVixPQUFPO1FBQ0wsTUFBTTtRQUNOLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3hCLGFBQWEsRUFBRSxZQUFZO1FBQzNCLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0tBQzFDLENBQUE7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLHNCQUFzQixDQUNuQyxTQUEwQixFQUMxQixLQUE4QjtJQUU5QixNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDN0UsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMxRCxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FDekMsbUJBQW1CLEVBQ25CLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUM1QixDQUFBO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNyRSxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNyRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDM0QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUNoQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNoRCxDQUFBO0lBQ0QsTUFBTSxlQUFlLEdBQTBCO1FBQzdDLEdBQUcsVUFBVSxDQUFDLE9BQU87UUFDckIsU0FBUyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUU7UUFDckMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUU7S0FDbEMsQ0FBQTtJQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUMxQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFDL0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLENBQUE7SUFFRCxPQUFPO1FBQ0wsVUFBVTtRQUNWLGNBQWM7UUFDZCxlQUFlO0tBQ2hCLENBQUE7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxTQUEwQixFQUMxQixLQUE4QjtJQUU5QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBQSw0Q0FBNEIsRUFBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUU1QixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUMvRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDMUQsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQ3BDLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLElBQUksRUFBRTtnQkFDSixhQUFhLENBQ1gsOEJBQWtCLENBQUMsR0FBRyxFQUN0QixVQUFVLENBQUMsR0FBRyxFQUNkLFdBQVcsQ0FBQyxHQUFHLEVBQ2YsVUFBVSxDQUFDLGlCQUFpQixDQUM3QjtnQkFDRCxhQUFhLENBQ1gsOEJBQWtCLENBQUMsVUFBVSxFQUM3QixVQUFVLENBQUMsVUFBVSxFQUNyQixXQUFXLENBQUMsVUFBVSxFQUN0QixJQUFJLENBQ0w7Z0JBQ0QsYUFBYSxDQUNYLDhCQUFrQixDQUFDLEdBQUcsRUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFDZCxXQUFXLENBQUMsR0FBRyxFQUNmLFVBQVUsQ0FBQyxpQkFBaUIsQ0FDN0I7Z0JBQ0QsYUFBYSxDQUNYLDhCQUFrQixDQUFDLDBCQUEwQixFQUM3QyxVQUFVLENBQUMsMEJBQTBCLEVBQ3JDLFdBQVcsQ0FBQywwQkFBMEIsRUFDdEMsSUFBSSxDQUNMO2FBQ0Y7U0FDbUMsQ0FBQTtRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO1FBRXpDLElBQUEsaUNBQWlCLEVBQ2YsTUFBTSxFQUNOLElBQUEsd0NBQXdCLEVBQUM7WUFDdkIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLEVBQ0Y7WUFDRSxLQUFLLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxNQUFNLENBQUM7WUFDMUMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsZUFBZSxFQUFFLHFDQUF5QjtZQUMxQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUztZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksU0FBUztZQUM5QyxTQUFTLEVBQUUsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUM7WUFDMUMsT0FBTyxFQUFFLElBQUEsbUNBQW1CLEVBQUMsVUFBVSxDQUFDO2dCQUN0QyxDQUFDLENBQUMscUNBQXFDO2dCQUN2QyxDQUFDLENBQUMsOEJBQThCO1lBQ2xDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU07Z0JBQzVDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTTtnQkFDdEQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTthQUNoQztTQUNGLENBQ0YsQ0FBQTtRQUVELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtRQUV6QyxJQUFBLGlDQUFpQixFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDakMsS0FBSyxFQUFFLElBQUEsMkNBQTJCLEVBQUMsTUFBTSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBQSx3Q0FBd0IsRUFBQyxLQUFLLENBQUM7U0FDekMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsU0FBMEIsRUFDMUIsS0FBOEI7SUFFOUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUEsNENBQTRCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUMzRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUNsQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFDdkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLENBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixlQUFlLEVBQUUscUNBQXlCO1lBQzFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN0QyxNQUFNLEVBQUU7Z0JBQ04sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLFVBQVUsQ0FBQztnQkFDeEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLDBCQUEwQixDQUFDO2FBQ3pFO1NBQ3FDLENBQUE7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtRQUV6QyxJQUFBLGlDQUFpQixFQUNmLE1BQU0sRUFDTixJQUFBLHdDQUF3QixFQUFDO1lBQ3ZCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxFQUNGO1lBQ0UsS0FBSyxFQUFFLElBQUEsMkNBQTJCLEVBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVM7WUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFNBQVM7WUFDOUMsU0FBUyxFQUFFLElBQUEsbUNBQW1CLEVBQUMsVUFBVSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxJQUFBLG1DQUFtQixFQUFDLFVBQVUsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLHdDQUF3QztnQkFDMUMsQ0FBQyxDQUFDLGlDQUFpQztZQUNyQyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3RCLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDNUIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNyQztTQUNGLENBQ0YsQ0FBQTtRQUVELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtRQUV6QyxJQUFBLGlDQUFpQixFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDakMsS0FBSyxFQUFFLElBQUEsMkNBQTJCLEVBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBQSx3Q0FBd0IsRUFBQyxLQUFLLENBQUM7U0FDekMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsU0FBMEIsRUFDMUIsS0FBOEI7SUFFOUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUEsNENBQTRCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUMzRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUNsQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFDdkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLENBQUE7UUFDRCxNQUFNLE1BQU0sR0FBRztZQUNiLGdCQUFnQixDQUFDLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxHQUFHLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLFVBQVUsQ0FBQztZQUN4RCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsR0FBRyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQywwQkFBMEIsQ0FBQztTQUN6RSxDQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO1FBQzlDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsY0FBYztZQUNkLFlBQVk7WUFDWixLQUFLO1lBQ0wsWUFBWTtZQUNaLEtBQUs7WUFDTCw0QkFBNEI7U0FDN0IsQ0FBQTtRQUNELE1BQU0sVUFBVSxHQUFrRCxFQUFFLENBQUE7UUFFcEUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQTtZQUMzQixNQUFNLFVBQVUsR0FDZCxNQUFNLENBQUMsSUFBSSxDQUNULENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLDhCQUFrQixDQUFDLFVBQVUsQ0FDcEU7Z0JBQ0MsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFBO1lBQzNCLE1BQU0sUUFBUSxHQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssOEJBQWtCLENBQUMsR0FBRyxDQUFDO2dCQUN2RSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUE7WUFDM0IsTUFBTSxXQUFXLEdBQ2YsTUFBTSxDQUFDLElBQUksQ0FDVCxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2IsVUFBVSxDQUFDLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQywwQkFBMEIsQ0FDdEUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFBO1lBRTFCLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLElBQUksV0FBVyxFQUFFLFlBQVksSUFBSSxJQUFJO2dCQUN6RSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsVUFBVSxJQUFJLElBQUk7Z0JBQ25FLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQ3JDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQzVCLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSTthQUN2RCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUc7WUFDZixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1lBQzNCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLFNBQVMsRUFBRSwwQkFBMEIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDakcsWUFBWSxFQUNWLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtZQUMvRCxPQUFPO1lBQ1AsSUFBSSxFQUFFLFVBQVU7U0FDc0IsQ0FBQTtRQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO1FBRXpDLElBQUEsaUNBQWlCLEVBQ2YsTUFBTSxFQUNOLElBQUEsd0NBQXdCLEVBQUM7WUFDdkIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLEVBQ0Y7WUFDRSxLQUFLLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxRQUFRLENBQUM7WUFDNUMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsZUFBZSxFQUFFLHFDQUF5QjtZQUMxQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUztZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksU0FBUztZQUM5QyxTQUFTLEVBQUUsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUM7WUFDMUMsT0FBTyxFQUFFLElBQUEsbUNBQW1CLEVBQUMsVUFBVSxDQUFDO2dCQUN0QyxDQUFDLENBQUMsd0NBQXdDO2dCQUMxQyxDQUFDLENBQUMsaUNBQWlDO1lBQ3JDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtnQkFDdkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDL0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUM1QixZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2FBQ3RDO1NBQ0YsQ0FDRixDQUFBO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO1FBRXpDLElBQUEsaUNBQWlCLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUNqQyxLQUFLLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxRQUFRLENBQUM7WUFDNUMsT0FBTyxFQUFFLFFBQVE7WUFDakIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsZUFBZSxFQUFFLHFDQUF5QjtZQUMxQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFBLHdDQUF3QixFQUFDLEtBQUssQ0FBQztTQUN6QyxDQUFDLENBQUE7UUFFRixNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDIn0=
|
|
784
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hbmFseXRpY3MvdXRpbHMvYWRtaW4tcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE2NUJBLHNEQTBGQztBQUVELDBEQStGQztBQUVELDBEQXFIQztBQTlzQ0QscURBQXVEO0FBQ3ZELHFEQUFxRTtBQUNyRSw4REFjdUM7QUFDdkMsNENBQXdEO0FBQ3hELG1EQU93QjtBQWdGeEIsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUE7QUFDaEMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUE7QUFDeEMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7QUFDckMsTUFBTSxhQUFhLEdBQXVDO0lBQ3hELENBQUMsOEJBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSztJQUMvQixDQUFDLDhCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVk7SUFDN0MsQ0FBQyw4QkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO0lBQy9CLENBQUMsOEJBQWtCLENBQUMsMEJBQTBCLENBQUMsRUFBRSxzQkFBc0I7SUFDdkUsQ0FBQyw4QkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLHVCQUF1QjtDQUMxRSxDQUFBO0FBRUQsU0FBUyxRQUFRLENBQUMsU0FBMEI7SUFDMUMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFZLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxTQUEwQjtJQUMzQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBSXJCLFFBQVEsQ0FBQyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQW9CO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV4RSxPQUFPLElBQUksSUFBSSxDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDN0UsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFvQjtJQUN2QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFckMsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsR0FBRyxDQUNOLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFDekIsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUN0QixRQUFRLENBQUMsVUFBVSxFQUFFLEVBQ3JCLEVBQUUsRUFDRixFQUFFLEVBQ0YsRUFBRSxFQUNGLEdBQUcsQ0FDSixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBb0I7SUFDMUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtJQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNwQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQTtJQUVyRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBb0I7SUFDeEMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzVDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFFcEMsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQW9CO0lBQzNDLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFOUQsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQzNELENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBb0I7SUFDekMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXpDLE9BQU8sSUFBSSxJQUFJLENBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FDTixVQUFVLENBQUMsY0FBYyxFQUFFLEVBQzNCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQzVCLENBQUMsRUFDRCxFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixHQUFHLENBQ0osQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsUUFBYyxFQUFFLE1BQVk7SUFDckQsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQ1IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25FLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQ3hCLEdBQUcsQ0FBQyxDQUNOLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBVyxFQUFFLElBQVk7SUFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUE7SUFFekMsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxPQUE4QjtJQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUU5QyxPQUFPLENBQ0wsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUU7UUFDM0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FDMUMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFvQixFQUFFLFNBQWlCO0lBQ3pELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7QUFDekMsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBYTtJQUN4QyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRXZELElBQ0UsQ0FBQyxRQUFRO1FBQ1QsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzdCLFdBQVcsSUFBSSxDQUFDLEVBQ2hCLENBQUM7UUFDRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixnQ0FBZ0MsS0FBSyxHQUFHLENBQ3pDLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLFFBQVEsRUFBRSxRQUFzQztRQUNoRCxLQUFLLEVBQUUsV0FBVztLQUNuQixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQ2hDLE9BQWtEO0lBRWxELElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDckIsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDNUIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BDLENBQUM7UUFFRCxJQUNFLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3BELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUNqQixDQUFDO1lBQ0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsaUNBQWlDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxDQUNwRSxDQUFBO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1NBQ3BCLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUNuQyxLQUE4QjtJQUU5QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUztRQUNsQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDaEMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFdEUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDbEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsK0RBQStELENBQ2hFLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSwwQkFBMEIsQ0FBQTtJQUU3RCxJQUFJLFFBQVEsS0FBSywwQkFBMEIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1DQUFtQyxRQUFRLG1DQUFtQyxDQUMvRSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRXZFLElBQUksbUJBQW1CLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix1Q0FBdUMseUJBQXlCLE9BQU8sQ0FDeEUsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLDRCQUFnQixDQUFDLEdBQUcsQ0FBQTtJQUV0RCxPQUFPO1FBQ0wsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDckMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDakMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRTtZQUMxQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ2xDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3JELFFBQVEsRUFBRSxPQUFPO1NBQ2xCO1FBQ0QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtLQUMvQixDQUFBO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxvQkFBb0IsQ0FDakMsU0FBMEIsRUFDMUIsT0FBOEI7SUFFOUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sSUFBSSxHQUFxQyxFQUFFLENBQUE7SUFDakQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUVaLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDL0IsTUFBTSxFQUFFLDRCQUE0QjtZQUNwQyxNQUFNLEVBQUU7Z0JBQ04sSUFBSTtnQkFDSixhQUFhO2dCQUNiLGlCQUFpQjtnQkFDakIsYUFBYTtnQkFDYixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixvQkFBb0I7Z0JBQ3BCLGlCQUFpQjtnQkFDakIsZUFBZTtnQkFDZixXQUFXO2dCQUNYLDRCQUE0QjtnQkFDNUIsWUFBWTtnQkFDWiw2QkFBNkI7Z0JBQzdCLHVCQUF1QjthQUN4QjtZQUNELE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTO29CQUN2QixJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU87aUJBQ3RCO2dCQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekU7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSTtnQkFDSixJQUFJO2dCQUNKLEtBQUssRUFBRTtvQkFDTCxXQUFXLEVBQUUsS0FBSztvQkFDbEIsRUFBRSxFQUFFLEtBQUs7aUJBQ1Y7YUFDRjtTQUNGLENBQUMsQ0FBQTtRQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQXFDLENBQUE7UUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO1FBRW5CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQUs7UUFDUCxDQUFDO1FBRUQsSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQTtJQUN2QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQzNCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQ2pGLENBQUE7SUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUN6QixhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUN0RSxDQUFBO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSwrQkFBK0IsQ0FDNUMsU0FBMEIsRUFDMUIsT0FBOEI7SUFFOUIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDaEUsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sSUFBSSxHQUE2QixFQUFFLENBQUE7SUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUVaLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDL0IsTUFBTSxFQUFFLGNBQWM7WUFDdEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDO1lBQ3ZELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekU7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSTtnQkFDSixJQUFJO2dCQUNKLEtBQUssRUFBRTtvQkFDTCxFQUFFLEVBQUUsS0FBSztpQkFDVjthQUNGO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBNkIsQ0FBQTtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBSztRQUNQLENBQUM7UUFFRCxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUMzQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUNqRixDQUFBO0lBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDekIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FDdEUsQ0FBQyxNQUFNLENBQUE7QUFDVixDQUFDO0FBRUQsS0FBSyxVQUFVLHdCQUF3QixDQUNyQyxTQUEwQixFQUMxQixPQUdDO0lBRUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sSUFBSSxHQUFnQyxFQUFFLENBQUE7SUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUVaLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDL0IsTUFBTSxFQUFFLGNBQWM7WUFDdEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztZQUM1QixPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUztvQkFDdkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPO2lCQUN0QjthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixLQUFLLEVBQUU7b0JBQ0wsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLEVBQUUsRUFBRSxLQUFLO2lCQUNWO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFFRixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFnQyxDQUFBO1FBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQTtRQUVuQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxNQUFLO1FBQ1AsQ0FBQztRQUVELElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUE7SUFDdkMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQy9CLE9BQXdCLEVBQ3hCLE9BQThCLEVBQzlCLDRCQUEyQztJQUUzQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSw0QkFBNEIsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUV0RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRXZELElBQUksV0FBVyxJQUFJLFVBQVUsSUFBSSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDekQsT0FBTztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsMEJBQTBCLEVBQUUsNEJBQTRCO2FBQ3pELENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQXNDO0lBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFBO0lBRWxELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUMvRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1lBQzlDLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLDBCQUEwQixFQUFFLENBQUM7WUFDN0IsMkJBQTJCLEVBQUUsQ0FBQztZQUM5QixVQUFVLEVBQUUsQ0FBQztZQUNiLGFBQWEsRUFBRSxJQUFJO1lBQ25CLGtCQUFrQixFQUFFLEtBQUs7U0FDMUIsQ0FBQTtRQUVELE9BQU8sQ0FBQywwQkFBMEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE9BQU8sQ0FBQywyQkFBMkIsSUFBSSxNQUFNLENBQzNDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxDQUFDLENBQ3JDLENBQUE7UUFFRCxNQUFNLFNBQVMsR0FDYixHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFDckQsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUU1QixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9CLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3JDLFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUE7WUFFMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQTtZQUNuRCxDQUFDO2lCQUFNLElBQ0wsR0FBRyxDQUFDLGFBQWE7Z0JBQ2pCLE9BQU8sQ0FBQyxhQUFhO2dCQUNyQixHQUFHLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQyxhQUFhLEVBQzNDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtnQkFDakMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7Z0JBQ3pCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBRUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUM5QyxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQzNDLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsVUFBa0IsRUFBRSxPQUF5QjtJQUNwRSxJQUFJLE9BQU8sS0FBSyw0QkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDdEQsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7U0FDbkQsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyw0QkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDdkQsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7U0FDcEQsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsWUFBWSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDckQsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7S0FDbEQsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixZQUEwQixFQUMxQixPQUF5QjtJQUV6QixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUQsQ0FBQTtJQUUxRSxLQUFLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3hELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJO1lBQ3BELFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsMEJBQTBCLEVBQUUsQ0FBQztZQUM3QiwyQkFBMkIsRUFBRSxDQUFDO1lBQzlCLG9DQUFvQyxFQUFFLENBQUM7WUFDdkMsVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsSUFBSTtZQUNuQixrQkFBa0IsRUFBRSxLQUFLO1lBQ3pCLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQTtRQUVELE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFBO1FBQ3RCLE9BQU8sQ0FBQywwQkFBMEIsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUE7UUFDbkUsT0FBTyxDQUFDLG9DQUFvQyxJQUFJLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQTtRQUM5RSxPQUFPLENBQUMsMkJBQTJCLElBQUksR0FBRyxDQUFDLDJCQUEyQixDQUFBO1FBRXRFLElBQUksR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtZQUNqQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtZQUN6QixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUM5QixDQUFDO2FBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQTtZQUVuQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUE7WUFDM0MsQ0FBQztpQkFBTSxJQUNMLEdBQUcsQ0FBQyxhQUFhO2dCQUNqQixPQUFPLENBQUMsYUFBYTtnQkFDckIsR0FBRyxDQUFDLGFBQWEsS0FBSyxPQUFPLENBQUMsYUFBYSxFQUMzQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7Z0JBQ2pDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO2dCQUN6QixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUVELFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM1RCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QiwwQkFBMEIsRUFBRSxNQUFNLENBQUMsMEJBQTBCO1FBQzdELDJCQUEyQixFQUFFLE1BQU0sQ0FBQywyQkFBMkI7UUFDL0Qsb0NBQW9DLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsR0FBRyxNQUFNLENBQUMsU0FBUztZQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDaEUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYTtRQUN0RSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCO0tBQzlDLENBQUMsQ0FBQyxDQUFBO0FBQ1AsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLFlBQW9CLEVBQ3BCLGlCQUF5QjtJQUV6QixJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsT0FBTyxDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtBQUNqRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBa0IsRUFBRSxTQUFpQjtJQUN2RCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8sR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUEwQjtJQUM1QyxJQUNFLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQywwQkFBMEI7UUFDeEQsTUFBTSxLQUFLLDhCQUFrQixDQUFDLDJCQUEyQixFQUN6RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELElBQUksTUFBTSxLQUFLLDhCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdDLE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsTUFBMEI7SUFDakQsT0FBTyxNQUFNLEtBQUssOEJBQWtCLENBQUMsMEJBQTBCO1FBQzdELE1BQU0sS0FBSyw4QkFBa0IsQ0FBQywyQkFBMkI7UUFDekQsQ0FBQyxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ1AsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUNwQixNQUEwQixFQUMxQixLQUFvQixFQUNwQixhQUE0QixFQUM1QixZQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FDZCxLQUFLLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQTtJQUN6RSxNQUFNLGVBQWUsR0FDbkIsVUFBVSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFbEQsT0FBTztRQUNMLEdBQUcsRUFBRSxNQUFNO1FBQ1gsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDNUIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3hCLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDdEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDbEMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLFdBQVcsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztLQUNqRCxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLE9BQXdCLEVBQ3hCLFFBQXNDO0lBRXRDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM5QyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBd0I7SUFDNUMsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDekQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3JELENBQUE7SUFDRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNO1FBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDUixNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUM1QyxPQUFPLEVBQ1AsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FDOUMsQ0FBQTtJQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2pDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFDekQsQ0FBQyxDQUNGLENBQUE7SUFDRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNO1FBQ3RDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNaLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsRUFDbEUsQ0FBQyxDQUNGLEdBQUcsT0FBTyxDQUFDLE1BQU07UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNMLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFNUMsT0FBTztRQUNMLEdBQUcsRUFBRSxTQUFTO1FBQ2QsaUJBQWlCLEVBQUUsa0JBQWtCO1FBQ3JDLDBCQUEwQixFQUFFLGlCQUFpQixJQUFJLENBQUM7UUFDbEQsVUFBVSxFQUFFLFNBQVM7UUFDckIsR0FBRztLQUNKLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsT0FBd0IsRUFDeEIsTUFBMEI7SUFFMUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDNUIsSUFBSSxLQUFvQixDQUFBO1FBRXhCLElBQUksTUFBTSxLQUFLLDhCQUFrQixDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDN0QsS0FBSyxHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQTtRQUMzQyxDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssOEJBQWtCLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNyRSxLQUFLLEdBQUcsQ0FBQyxDQUFBO1FBQ1gsQ0FBQzthQUFNLElBQUksTUFBTSxLQUFLLDhCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdDLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQTtRQUM5RCxDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssOEJBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEQsS0FBSyxHQUFHLGdCQUFnQixDQUN0QixNQUFNLENBQUMsMkJBQTJCLEVBQ2xDLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FDNUMsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLFVBQVUsQ0FDaEIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQ3BELGdCQUFnQixDQUNkLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsTUFBTSxDQUFDLG9DQUFvQyxDQUM1QyxDQUNGLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xELENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixPQUF3QixFQUN4QixNQUEwQjtJQUUxQixNQUFNLFlBQVksR0FDaEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVU7UUFDL0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxhQUFhLElBQUksSUFBSTtRQUN2RSxDQUFDLENBQUMsSUFBSSxDQUFBO0lBRVYsT0FBTztRQUNMLE1BQU07UUFDTixLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN4QixhQUFhLEVBQUUsWUFBWTtRQUMzQixTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztLQUMxQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQ3RDLE9BR0MsRUFDRCxJQUFpQztJQUVqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUU3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUUxQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxTQUFRO1FBQ1YsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNyRCxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDOUMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMxQyxNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFBO0lBRXhDLEtBQ0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQzVCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQ2pDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUM3QixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixZQUFZLEVBQUUsV0FBVztZQUN6QixVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUM3QyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQ3pDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLDhCQUFrQixDQUFDLDJCQUEyQjtRQUN0RCxLQUFLLEVBQUUsYUFBYSxDQUFDLDhCQUFrQixDQUFDLDJCQUEyQixDQUFDO1FBQ3BFLElBQUksRUFBRSxPQUFPO1FBQ2IsYUFBYSxFQUFFLElBQUk7UUFDbkIsU0FBUyxFQUFFLENBQUM7UUFDWixNQUFNO0tBQ1AsQ0FBQTtBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsc0JBQXNCLENBQ25DLFNBQTBCLEVBQzFCLEtBQThCO0lBRTlCLE1BQU0sVUFBVSxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RELE1BQU0sV0FBVyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM3RSxNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzFELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUN6QyxtQkFBbUIsRUFDbkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLENBQUE7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7SUFDekUsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3JFLE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQ2hDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ2hELENBQUE7SUFDRCxNQUFNLGVBQWUsR0FBMEI7UUFDN0MsR0FBRyxVQUFVLENBQUMsT0FBTztRQUNyQixTQUFTLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRTtRQUNyQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRTtLQUNsQyxDQUFBO0lBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDM0UsTUFBTSxlQUFlLEdBQUcsb0JBQW9CLENBQzFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUMvQixVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDNUIsQ0FBQTtJQUNELE1BQU0sNEJBQTRCLEdBQUcsMkJBQTJCLENBQzlELFVBQVUsQ0FBQyxPQUFPLENBQ25CO1FBQ0MsQ0FBQyxDQUFDLE1BQU0sK0JBQStCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUVSLE9BQU87UUFDTCxVQUFVO1FBQ1YsY0FBYztRQUNkLGVBQWU7UUFDZiw0QkFBNEI7S0FDN0IsQ0FBQTtBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLFNBQTBCLEVBQzFCLEtBQThCO0lBRTlCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFBLDRDQUE0QixFQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRTVCLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDeEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUMxRCxNQUFNLCtCQUErQixHQUNuQyxRQUFRLENBQUMsNEJBQTRCLElBQUksVUFBVSxDQUFDLDBCQUEwQixDQUFBO1FBQ2hGLE1BQU0sUUFBUSxHQUFHO1lBQ2YsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNwQyxlQUFlLEVBQUUscUNBQXlCO1lBQzFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN0QyxJQUFJLEVBQUU7Z0JBQ0osYUFBYSxDQUNYLDhCQUFrQixDQUFDLEdBQUcsRUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFDZCxXQUFXLENBQUMsR0FBRyxFQUNmLFVBQVUsQ0FBQyxpQkFBaUIsQ0FDN0I7Z0JBQ0QsYUFBYSxDQUNYLDhCQUFrQixDQUFDLFVBQVUsRUFDN0IsVUFBVSxDQUFDLFVBQVUsRUFDckIsV0FBVyxDQUFDLFVBQVUsRUFDdEIsSUFBSSxDQUNMO2dCQUNELGFBQWEsQ0FDWCw4QkFBa0IsQ0FBQyxHQUFHLEVBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQ2QsV0FBVyxDQUFDLEdBQUcsRUFDZixVQUFVLENBQUMsaUJBQWlCLENBQzdCO2dCQUNELGFBQWEsQ0FDWCw4QkFBa0IsQ0FBQywwQkFBMEIsRUFDN0MsK0JBQStCLEVBQy9CLFdBQVcsQ0FBQywwQkFBMEIsRUFDdEMsSUFBSSxDQUNMO2FBQ0Y7U0FDbUMsQ0FBQTtRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO1FBRXpDLElBQUEsaUNBQWlCLEVBQ2YsTUFBTSxFQUNOLElBQUEsd0NBQXdCLEVBQUM7WUFDdkIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLEVBQ0Y7WUFDRSxLQUFLLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxNQUFNLENBQUM7WUFDMUMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsZUFBZSxFQUFFLHFDQUF5QjtZQUMxQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUztZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksU0FBUztZQUM5QyxTQUFTLEVBQUUsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUM7WUFDMUMsT0FBTyxFQUFFLElBQUEsbUNBQW1CLEVBQUMsVUFBVSxDQUFDO2dCQUN0QyxDQUFDLENBQUMscUNBQXFDO2dCQUN2QyxDQUFDLENBQUMsOEJBQThCO1lBQ2xDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU07Z0JBQzVDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTTtnQkFDdEQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTthQUNoQztTQUNGLENBQ0YsQ0FBQTtRQUVELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtRQUV6QyxJQUFBLGlDQUFpQixFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDakMsS0FBSyxFQUFFLElBQUEsMkNBQTJCLEVBQUMsTUFBTSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBQSx3Q0FBd0IsRUFBQyxLQUFLLENBQUM7U0FDekMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsU0FBMEIsRUFDMUIsS0FBOEI7SUFFOUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUEsNENBQTRCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUMzRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSx3QkFBd0IsQ0FDekQsU0FBUyxFQUNUO1lBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBbUI7WUFDakQsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBaUI7U0FDOUMsQ0FDRixDQUFBO1FBQ0QsTUFBTSw0QkFBNEIsR0FBRywyQkFBMkIsQ0FDOUQsVUFBVSxDQUFDLE9BQU8sQ0FDbkI7WUFDQyxDQUFDLENBQUMsTUFBTSwrQkFBK0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ1IsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQ3RDLG9CQUFvQixDQUNsQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFDdkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLEVBQ0QsVUFBVSxDQUFDLE9BQU8sRUFDbEIsNEJBQTRCLENBQzdCLENBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixlQUFlLEVBQUUscUNBQXlCO1lBQzFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN0QyxNQUFNLEVBQUU7Z0JBQ04sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLFVBQVUsQ0FBQztnQkFDeEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLDBCQUEwQixDQUFDO2dCQUN4RSwrQkFBK0IsQ0FDN0I7b0JBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBbUI7b0JBQ2pELE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQWlCO2lCQUM5QyxFQUNELG9CQUFvQixDQUNyQjthQUNGO1NBQ3FDLENBQUE7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtRQUV6QyxJQUFBLGlDQUFpQixFQUNmLE1BQU0sRUFDTixJQUFBLHdDQUF3QixFQUFDO1lBQ3ZCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxFQUNGO1lBQ0UsS0FBSyxFQUFFLElBQUEsMkNBQTJCLEVBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVM7WUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFNBQVM7WUFDOUMsU0FBUyxFQUFFLElBQUEsbUNBQW1CLEVBQUMsVUFBVSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxJQUFBLG1DQUFtQixFQUFDLFVBQVUsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLHdDQUF3QztnQkFDMUMsQ0FBQyxDQUFDLGlDQUFpQztZQUNyQyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3RCLDBCQUEwQixFQUFFLG9CQUFvQixDQUFDLE1BQU07Z0JBQ3ZELFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDNUIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNyQztTQUNGLENBQ0YsQ0FBQTtRQUVELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtRQUV6QyxJQUFBLGlDQUFpQixFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDakMsS0FBSyxFQUFFLElBQUEsMkNBQTJCLEVBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsV0FBVyxFQUFFLFVBQVU7WUFDdkIsU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBQSx3Q0FBd0IsRUFBQyxLQUFLLENBQUM7U0FDekMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsU0FBMEIsRUFDMUIsS0FBOEI7SUFFOUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUEsNENBQTRCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUMzRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUNsQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFDdkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLENBQUE7UUFDRCxNQUFNLE1BQU0sR0FBRztZQUNiLGdCQUFnQixDQUFDLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxHQUFHLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLDhCQUFrQixDQUFDLFVBQVUsQ0FBQztZQUN4RCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsR0FBRyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQywwQkFBMEIsQ0FBQztTQUN6RSxDQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO1FBQzlDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsY0FBYztZQUNkLFlBQVk7WUFDWixLQUFLO1lBQ0wsWUFBWTtZQUNaLEtBQUs7WUFDTCw0QkFBNEI7U0FDN0IsQ0FBQTtRQUNELE1BQU0sVUFBVSxHQUFrRCxFQUFFLENBQUE7UUFFcEUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQTtZQUMzQixNQUFNLFVBQVUsR0FDZCxNQUFNLENBQUMsSUFBSSxDQUNULENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLDhCQUFrQixDQUFDLFVBQVUsQ0FDcEU7Z0JBQ0MsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFBO1lBQzNCLE1BQU0sUUFBUSxHQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssOEJBQWtCLENBQUMsR0FBRyxDQUFDO2dCQUN2RSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUE7WUFDM0IsTUFBTSxXQUFXLEdBQ2YsTUFBTSxDQUFDLElBQUksQ0FDVCxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2IsVUFBVSxDQUFDLE1BQU0sS0FBSyw4QkFBa0IsQ0FBQywwQkFBMEIsQ0FDdEUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFBO1lBRTFCLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLElBQUksV0FBVyxFQUFFLFlBQVksSUFBSSxJQUFJO2dCQUN6RSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsVUFBVSxJQUFJLElBQUk7Z0JBQ25FLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQ3JDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQzVCLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSTthQUN2RCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUc7WUFDZixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1lBQzNCLGVBQWUsRUFBRSxxQ0FBeUI7WUFDMUMsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLFNBQVMsRUFBRSwwQkFBMEIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDakcsWUFBWSxFQUNWLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtZQUMvRCxPQUFPO1lBQ1AsSUFBSSxFQUFFLFVBQVU7U0FDc0IsQ0FBQTtRQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO1FBRXpDLElBQUEsaUNBQWlCLEVBQ2YsTUFBTSxFQUNOLElBQUEsd0NBQXdCLEVBQUM7WUFDdkIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLEVBQ0Y7WUFDRSxLQUFLLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxRQUFRLENBQUM7WUFDNUMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsZUFBZSxFQUFFLHFDQUF5QjtZQUMxQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUztZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksU0FBUztZQUM5QyxTQUFTLEVBQUUsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUM7WUFDMUMsT0FBTyxFQUFFLElBQUEsbUNBQW1CLEVBQUMsVUFBVSxDQUFDO2dCQUN0QyxDQUFDLENBQUMsd0NBQXdDO2dCQUMxQyxDQUFDLENBQUMsaUNBQWlDO1lBQ3JDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtnQkFDdkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDL0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUM1QixZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2FBQ3RDO1NBQ0YsQ0FDRixDQUFBO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO1FBRXpDLElBQUEsaUNBQWlCLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUNqQyxLQUFLLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxRQUFRLENBQUM7WUFDNUMsT0FBTyxFQUFFLFFBQVE7WUFDakIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsZUFBZSxFQUFFLHFDQUF5QjtZQUMxQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFBLHdDQUF3QixFQUFDLEtBQUssQ0FBQztTQUN6QyxDQUFDLENBQUE7UUFFRixNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const test_utils_1 = require("@medusajs/test-utils");
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
const plan_offer_1 = __importDefault(require("../models/plan-offer"));
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
(0, test_utils_1.moduleIntegrationTestRunner)({
|
|
11
|
+
moduleName: __1.PLAN_OFFER_MODULE,
|
|
12
|
+
moduleModels: [plan_offer_1.default],
|
|
13
|
+
resolve: "./src/modules/plan-offer",
|
|
14
|
+
testSuite: ({ service }) => {
|
|
15
|
+
describe("PlanOfferModuleService", () => {
|
|
16
|
+
it("creates and retrieves a plan offer", async () => {
|
|
17
|
+
const created = await service.createPlanOffers({
|
|
18
|
+
name: "PLAN-MODULE-001",
|
|
19
|
+
scope: types_1.PlanOfferScope.PRODUCT,
|
|
20
|
+
product_id: "prod_module_001",
|
|
21
|
+
variant_id: null,
|
|
22
|
+
is_enabled: true,
|
|
23
|
+
allowed_frequencies: [
|
|
24
|
+
{
|
|
25
|
+
interval: types_1.PlanOfferFrequencyInterval.MONTH,
|
|
26
|
+
value: 1,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
frequency_intervals: ["month"],
|
|
30
|
+
discount_per_frequency: [
|
|
31
|
+
{
|
|
32
|
+
interval: types_1.PlanOfferFrequencyInterval.MONTH,
|
|
33
|
+
value: 1,
|
|
34
|
+
discount_type: types_1.PlanOfferDiscountType.PERCENTAGE,
|
|
35
|
+
discount_value: 10,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
rules: {
|
|
39
|
+
minimum_cycles: 2,
|
|
40
|
+
trial_enabled: false,
|
|
41
|
+
trial_days: null,
|
|
42
|
+
stacking_policy: types_1.PlanOfferStackingPolicy.DISALLOW_SUBSCRIPTION_DISCOUNTS,
|
|
43
|
+
},
|
|
44
|
+
metadata: {
|
|
45
|
+
source: "module-test",
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
const retrieved = await service.retrievePlanOffer(created.id);
|
|
49
|
+
expect(retrieved.id).toEqual(created.id);
|
|
50
|
+
expect(retrieved.name).toEqual("PLAN-MODULE-001");
|
|
51
|
+
expect(retrieved.frequency_intervals).toEqual(["month"]);
|
|
52
|
+
});
|
|
53
|
+
it("updates helper and json fields", async () => {
|
|
54
|
+
const created = await service.createPlanOffers({
|
|
55
|
+
name: "PLAN-MODULE-002",
|
|
56
|
+
scope: types_1.PlanOfferScope.VARIANT,
|
|
57
|
+
product_id: "prod_module_002",
|
|
58
|
+
variant_id: "variant_module_002",
|
|
59
|
+
is_enabled: true,
|
|
60
|
+
allowed_frequencies: [
|
|
61
|
+
{
|
|
62
|
+
interval: types_1.PlanOfferFrequencyInterval.MONTH,
|
|
63
|
+
value: 1,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
frequency_intervals: ["month"],
|
|
67
|
+
discount_per_frequency: [],
|
|
68
|
+
rules: null,
|
|
69
|
+
metadata: null,
|
|
70
|
+
});
|
|
71
|
+
await service.updatePlanOffers({
|
|
72
|
+
id: created.id,
|
|
73
|
+
is_enabled: false,
|
|
74
|
+
frequency_intervals: ["month", "year"],
|
|
75
|
+
allowed_frequencies: [
|
|
76
|
+
{
|
|
77
|
+
interval: types_1.PlanOfferFrequencyInterval.MONTH,
|
|
78
|
+
value: 1,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
interval: types_1.PlanOfferFrequencyInterval.YEAR,
|
|
82
|
+
value: 1,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
const updated = await service.retrievePlanOffer(created.id);
|
|
87
|
+
expect(updated.is_enabled).toBe(false);
|
|
88
|
+
expect(updated.frequency_intervals).toEqual(["month", "year"]);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
jest.setTimeout(60 * 1000);
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcGxhbi1vZmZlci9fX3Rlc3RzX18vc2VydmljZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQWtFO0FBQ2xFLDBCQUFzQztBQUN0QyxzRUFBNEM7QUFFNUMsb0NBS2lCO0FBRWpCLElBQUEsd0NBQTJCLEVBQXlCO0lBQ2xELFVBQVUsRUFBRSxxQkFBaUI7SUFDN0IsWUFBWSxFQUFFLENBQUMsb0JBQVMsQ0FBQztJQUN6QixPQUFPLEVBQUUsMEJBQTBCO0lBQ25DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUN6QixRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7b0JBQzdDLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLEtBQUssRUFBRSxzQkFBYyxDQUFDLE9BQU87b0JBQzdCLFVBQVUsRUFBRSxpQkFBaUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsbUJBQW1CLEVBQUU7d0JBQ25COzRCQUNFLFFBQVEsRUFBRSxrQ0FBMEIsQ0FBQyxLQUFLOzRCQUMxQyxLQUFLLEVBQUUsQ0FBQzt5QkFDVDtxQkFDSztvQkFDUixtQkFBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDOUIsc0JBQXNCLEVBQUU7d0JBQ3RCOzRCQUNFLFFBQVEsRUFBRSxrQ0FBMEIsQ0FBQyxLQUFLOzRCQUMxQyxLQUFLLEVBQUUsQ0FBQzs0QkFDUixhQUFhLEVBQUUsNkJBQXFCLENBQUMsVUFBVTs0QkFDL0MsY0FBYyxFQUFFLEVBQUU7eUJBQ25CO3FCQUNLO29CQUNSLEtB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
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const test_utils_1 = require("@medusajs/test-utils");
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
const renewal_attempt_1 = __importDefault(require("../models/renewal-attempt"));
|
|
9
|
+
const renewal_cycle_1 = __importDefault(require("../models/renewal-cycle"));
|
|
10
|
+
const types_1 = require("../types");
|
|
11
|
+
(0, test_utils_1.moduleIntegrationTestRunner)({
|
|
12
|
+
moduleName: __1.RENEWAL_MODULE,
|
|
13
|
+
moduleModels: [renewal_cycle_1.default, renewal_attempt_1.default],
|
|
14
|
+
resolve: "./src/modules/renewal",
|
|
15
|
+
testSuite: ({ service }) => {
|
|
16
|
+
describe("RenewalModuleService", () => {
|
|
17
|
+
it("creates and retrieves a renewal cycle", async () => {
|
|
18
|
+
const created = await service.createRenewalCycles({
|
|
19
|
+
subscription_id: "sub_module_001",
|
|
20
|
+
scheduled_for: new Date("2026-03-30T10:00:00.000Z"),
|
|
21
|
+
processed_at: null,
|
|
22
|
+
status: types_1.RenewalCycleStatus.SCHEDULED,
|
|
23
|
+
approval_required: true,
|
|
24
|
+
approval_status: types_1.RenewalApprovalStatus.PENDING,
|
|
25
|
+
approval_decided_at: null,
|
|
26
|
+
approval_decided_by: null,
|
|
27
|
+
approval_reason: null,
|
|
28
|
+
generated_order_id: null,
|
|
29
|
+
applied_pending_update_data: null,
|
|
30
|
+
last_error: null,
|
|
31
|
+
attempt_count: 0,
|
|
32
|
+
metadata: {
|
|
33
|
+
source: "module-test",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
const retrieved = await service.retrieveRenewalCycle(created.id);
|
|
37
|
+
expect(retrieved.id).toEqual(created.id);
|
|
38
|
+
expect(retrieved.subscription_id).toEqual("sub_module_001");
|
|
39
|
+
expect(retrieved.status).toEqual(types_1.RenewalCycleStatus.SCHEDULED);
|
|
40
|
+
expect(retrieved.approval_status).toEqual(types_1.RenewalApprovalStatus.PENDING);
|
|
41
|
+
});
|
|
42
|
+
it("creates an attempt and updates renewal processing state", async () => {
|
|
43
|
+
const cycle = await service.createRenewalCycles({
|
|
44
|
+
subscription_id: "sub_module_002",
|
|
45
|
+
scheduled_for: new Date("2026-03-30T11:00:00.000Z"),
|
|
46
|
+
processed_at: null,
|
|
47
|
+
status: types_1.RenewalCycleStatus.SCHEDULED,
|
|
48
|
+
approval_required: false,
|
|
49
|
+
approval_status: null,
|
|
50
|
+
approval_decided_at: null,
|
|
51
|
+
approval_decided_by: null,
|
|
52
|
+
approval_reason: null,
|
|
53
|
+
generated_order_id: null,
|
|
54
|
+
applied_pending_update_data: null,
|
|
55
|
+
last_error: null,
|
|
56
|
+
attempt_count: 0,
|
|
57
|
+
metadata: null,
|
|
58
|
+
});
|
|
59
|
+
const attempt = await service.createRenewalAttempts({
|
|
60
|
+
renewal_cycle_id: cycle.id,
|
|
61
|
+
attempt_no: 1,
|
|
62
|
+
started_at: new Date("2026-03-30T11:01:00.000Z"),
|
|
63
|
+
finished_at: null,
|
|
64
|
+
status: types_1.RenewalAttemptStatus.PROCESSING,
|
|
65
|
+
error_code: null,
|
|
66
|
+
error_message: null,
|
|
67
|
+
payment_reference: null,
|
|
68
|
+
order_id: null,
|
|
69
|
+
metadata: {
|
|
70
|
+
trigger_type: "scheduler",
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
await service.updateRenewalCycles({
|
|
74
|
+
id: cycle.id,
|
|
75
|
+
status: types_1.RenewalCycleStatus.PROCESSING,
|
|
76
|
+
attempt_count: 1,
|
|
77
|
+
});
|
|
78
|
+
const updatedCycle = await service.retrieveRenewalCycle(cycle.id);
|
|
79
|
+
const retrievedAttempt = await service.retrieveRenewalAttempt(attempt.id);
|
|
80
|
+
expect(updatedCycle.status).toEqual(types_1.RenewalCycleStatus.PROCESSING);
|
|
81
|
+
expect(updatedCycle.attempt_count).toEqual(1);
|
|
82
|
+
expect(retrievedAttempt.renewal_cycle_id).toEqual(cycle.id);
|
|
83
|
+
expect(retrievedAttempt.status).toEqual(types_1.RenewalAttemptStatus.PROCESSING);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
jest.setTimeout(60 * 1000);
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcmVuZXdhbC9fX3Rlc3RzX18vc2VydmljZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQWtFO0FBQ2xFLDBCQUFtQztBQUNuQyxnRkFBc0Q7QUFDdEQsNEVBQWtEO0FBRWxELG9DQUlpQjtBQUVqQixJQUFBLHdDQUEyQixFQUF1QjtJQUNoRCxVQUFVLEVBQUUsa0JBQWM7SUFDMUIsWUFBWSxFQUFFLENBQUMsdUJBQVksRUFBRSx5QkFBYyxDQUFDO0lBQzVDLE9BQU8sRUFBRSx1QkFBdUI7SUFDaEMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1FBQ3pCLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDcEMsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztvQkFDaEQsZUFBZSxFQUFFLGdCQUFnQjtvQkFDakMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDO29CQUNuRCxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsTUFBTSxFQUFFLDBCQUFrQixDQUFDLFNBQVM7b0JBQ3BDLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGVBQWUsRUFBRSw2QkFBcUIsQ0FBQyxPQUFPO29CQUM5QyxtQkFBbUIsRUFBRSxJQUFJO29CQUN6QixtQkFBbUIsRUFBRSxJQUFJO29CQUN6QixlQUFlLEVBQUUsSUFBSTtvQkFDckIsa0JBQWtCLEVBQUUsSUFBSTtvQkFDeEIsMkJBQTJCLEVBQUUsSUFBSTtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGFBQWEsRUFBRSxDQUFDO29CQUNoQixRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLGFBQWE7cUJBQ3RC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
|