@wix/himalaya-cli 0.1495.0 → 0.1497.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/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/attendance-classifier.d.ts +37 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/catalog-pricing-contract.d.ts +1 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/index.d.ts +2 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/wix-payments-contract.d.ts +11 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/apple-iap-contract.d.ts +27 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/commerce-contract.d.ts +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/iap-verticals/attendance.d.ts +10 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/iap-verticals/index.d.ts +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/index.d.ts +1 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/events/src/index.d.ts +33 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap-checkout.mjs +346 -26
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap.mjs +132 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +366 -48
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-events.mjs +5 -0
- package/dist/cli.mjs +816 -667
- package/guides/iap-products.md +7 -1
- package/guides/sdk-reference.json +376 -27
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +394 -0
- package/templates/beauty-salon/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/beauty-salon/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/beauty-salon/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/branded-lite/dev/index.ts +1073 -284
- package/templates/branded-lite/tier5-src/_shared/business-chat-model.ts +35 -4
- package/templates/branded-lite/tier5-src/_shared/business-chat-transport.ts +12 -5
- package/templates/branded-lite/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/branded-lite/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/branded-lite/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/branded-lite/tier5-src/business-chat/index.ts +50 -17
- package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/branded-lite/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/community-club/dev/index.ts +397 -2
- package/templates/community-club/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/community-club/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/community-club/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/community-club/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/events-meetups/dev/index.ts +397 -2
- package/templates/events-meetups/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/events-meetups/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/events-meetups/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/events-meetups/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/gym-fitness/dev/index.ts +828 -39
- package/templates/gym-fitness/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/gym-fitness/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/gym-fitness/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/gym-fitness/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/nonprofit-cause/dev/index.ts +397 -2
- package/templates/nonprofit-cause/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/nonprofit-cause/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/nonprofit-cause/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/nonprofit-cause/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/podcast-creator/dev/index.ts +397 -2
- package/templates/podcast-creator/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/podcast-creator/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/podcast-creator/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/podcast-creator/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/portfolio-creative/dev/index.ts +397 -2
- package/templates/portfolio-creative/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/portfolio-creative/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/portfolio-creative/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/portfolio-creative/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/restaurant/dev/index.ts +397 -2
- package/templates/restaurant/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/restaurant/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/restaurant/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/restaurant/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/yoga-studio/dev/index.ts +828 -39
- package/templates/yoga-studio/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/yoga-studio/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/yoga-studio/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/yoga-studio/tier5-src/himi-events-detail/index.ts +112 -21
package/dist/cli.mjs
CHANGED
|
@@ -659,8 +659,8 @@ function mobileUxDocumentBody(mobile) {
|
|
|
659
659
|
}
|
|
660
660
|
return out2 + mobile.slice(last);
|
|
661
661
|
}
|
|
662
|
-
function mobileUxSection(
|
|
663
|
-
const match = new RegExp(`(?:^|\\n)##[ \\t]+${heading}\\b[^\\n]*([\\s\\S]*?)(?=\\n##[ \\t]|$)`, "i").exec(
|
|
662
|
+
function mobileUxSection(text11, heading) {
|
|
663
|
+
const match = new RegExp(`(?:^|\\n)##[ \\t]+${heading}\\b[^\\n]*([\\s\\S]*?)(?=\\n##[ \\t]|$)`, "i").exec(text11);
|
|
664
664
|
return match ? match[1] : null;
|
|
665
665
|
}
|
|
666
666
|
function sectionTables(markdown) {
|
|
@@ -689,8 +689,8 @@ function namesOneCta(cell2) {
|
|
|
689
689
|
if (!cell2) return false;
|
|
690
690
|
return !/[,;]|\s\/\s/.test(cell2);
|
|
691
691
|
}
|
|
692
|
-
function declaredStates(
|
|
693
|
-
const contract = section(
|
|
692
|
+
function declaredStates(text11) {
|
|
693
|
+
const contract = section(text11, "Screen contract");
|
|
694
694
|
if (!contract) return [];
|
|
695
695
|
const states = [];
|
|
696
696
|
for (const bullet of contract.matchAll(/^[ \t]*[-*][ \t]*[^:\n]*\bstates?[ \t]*:[ \t]*(\S.*)$/gim)) {
|
|
@@ -700,8 +700,8 @@ function declaredStates(text10) {
|
|
|
700
700
|
}
|
|
701
701
|
return [...new Set(states.map((state) => state.toLowerCase()))];
|
|
702
702
|
}
|
|
703
|
-
function primaryCtaStructureGap(
|
|
704
|
-
const acceptance = section(
|
|
703
|
+
function primaryCtaStructureGap(text11) {
|
|
704
|
+
const acceptance = section(text11, "Implementation acceptance");
|
|
705
705
|
if (acceptance === null) return "There is no `## Implementation acceptance` section to read it from.";
|
|
706
706
|
const tables = sectionTables(acceptance).filter((table) => table.data.length > 0);
|
|
707
707
|
if (!tables.length) return "Its acceptance table has no rows.";
|
|
@@ -714,7 +714,7 @@ function primaryCtaStructureGap(text10) {
|
|
|
714
714
|
const data = ctaTables.flatMap(({ table }) => table.data);
|
|
715
715
|
const flat = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
|
716
716
|
const rowText = data.map((row) => flat(row.join(" ")));
|
|
717
|
-
const missing2 = declaredStates(
|
|
717
|
+
const missing2 = declaredStates(text11).filter((state) => !rowText.some((row) => row.includes(flat(state))));
|
|
718
718
|
if (missing2.length) return `The acceptance table has no row for the declared state(s): ${missing2.join(", ")}.`;
|
|
719
719
|
return null;
|
|
720
720
|
}
|
|
@@ -729,16 +729,16 @@ function hasUnterminatedComment(mobile) {
|
|
|
729
729
|
}
|
|
730
730
|
}
|
|
731
731
|
function mobileUxMarkerFindings(mobile, renderedWidths = []) {
|
|
732
|
-
const
|
|
732
|
+
const text11 = mobileUxDocumentBody(mobile);
|
|
733
733
|
const findings = [];
|
|
734
|
-
if (!/^## Implementation acceptance\b/im.test(
|
|
734
|
+
if (!/^## Implementation acceptance\b/im.test(text11)) {
|
|
735
735
|
findings.push({ code: "missing-acceptance-matrix", message: "MOBILE-UX.md must contain the heading `## Implementation acceptance` at the start of a line. Case is not checked, but use this spelling: other tooling addresses the document by it." });
|
|
736
736
|
}
|
|
737
|
-
if (!/^## Evidence\b/im.test(
|
|
737
|
+
if (!/^## Evidence\b/im.test(text11)) {
|
|
738
738
|
findings.push({ code: "missing-evidence-section", message: "MOBILE-UX.md must contain the heading `## Evidence` at the start of a line. Case is not checked, but use this spelling: other tooling addresses the document by it." });
|
|
739
739
|
}
|
|
740
|
-
if (!/one primary CTA per state/i.test(
|
|
741
|
-
const gap = primaryCtaStructureGap(
|
|
740
|
+
if (!/one primary CTA per state/i.test(text11)) {
|
|
741
|
+
const gap = primaryCtaStructureGap(text11);
|
|
742
742
|
if (gap) {
|
|
743
743
|
findings.push({
|
|
744
744
|
code: "missing-primary-cta-rule",
|
|
@@ -746,8 +746,8 @@ function mobileUxMarkerFindings(mobile, renderedWidths = []) {
|
|
|
746
746
|
});
|
|
747
747
|
}
|
|
748
748
|
}
|
|
749
|
-
if (!hasWidthEvidence(
|
|
750
|
-
findings.push({ code: "missing-width-evidence", message: widthEvidenceMessage(
|
|
749
|
+
if (!hasWidthEvidence(text11, renderedWidths)) {
|
|
750
|
+
findings.push({ code: "missing-width-evidence", message: widthEvidenceMessage(text11, renderedWidths) });
|
|
751
751
|
}
|
|
752
752
|
if (findings.length && hasUnterminatedComment(mobile)) {
|
|
753
753
|
return [{
|
|
@@ -757,15 +757,15 @@ function mobileUxMarkerFindings(mobile, renderedWidths = []) {
|
|
|
757
757
|
}
|
|
758
758
|
return findings;
|
|
759
759
|
}
|
|
760
|
-
function widthMentions(
|
|
760
|
+
function widthMentions(text11) {
|
|
761
761
|
const mentions = [];
|
|
762
|
-
for (const match of
|
|
762
|
+
for (const match of text11.matchAll(/\d+/g)) {
|
|
763
763
|
const value = Number(match[0]);
|
|
764
764
|
const start = match.index ?? 0;
|
|
765
765
|
if (!inRange(value)) continue;
|
|
766
766
|
const end = start + match[0].length;
|
|
767
|
-
const after =
|
|
768
|
-
const before =
|
|
767
|
+
const after = text11.slice(end, end + EDGE_WINDOW);
|
|
768
|
+
const before = text11.slice(Math.max(0, start - EDGE_WINDOW), start);
|
|
769
769
|
if (looksLikeYear(value) && !(UNIT_ATTACHED.test(after) || UNIT_WORD_ATTACHED.test(after))) continue;
|
|
770
770
|
const spelledAsWidth = UNIT_ATTACHED.test(after) || UNIT_WORD_ATTACHED.test(after) || FILENAME_AFTER.test(after);
|
|
771
771
|
const vetoed = spelledAsWidth && (ANTI_CUE_BEFORE.test(before) || PAIR_HEIGHT_BEFORE.test(before) || ANTI_CUE_AFTER.test(after));
|
|
@@ -3463,8 +3463,8 @@ var init_catalog_cache = __esm({
|
|
|
3463
3463
|
let prior;
|
|
3464
3464
|
if (existsSync4(channelPath)) {
|
|
3465
3465
|
try {
|
|
3466
|
-
const
|
|
3467
|
-
if (Buffer.byteLength(
|
|
3466
|
+
const text11 = readFileSync5(channelPath, "utf8");
|
|
3467
|
+
if (Buffer.byteLength(text11) <= MAX_METADATA) prior = JSON.parse(text11);
|
|
3468
3468
|
} catch {
|
|
3469
3469
|
}
|
|
3470
3470
|
}
|
|
@@ -4090,8 +4090,8 @@ var init_catalog_v2 = __esm({
|
|
|
4090
4090
|
"../html-to-t5/catalog.v2.json"() {
|
|
4091
4091
|
catalog_v2_default = {
|
|
4092
4092
|
encoding: "gzip-base64",
|
|
4093
|
-
sha256: "
|
|
4094
|
-
data: "H4sIAAAAAAAC/+y963bbOpoo+Cp7qetf27XXdNecPrPPnyPbSqLaduy2lKR2d2e8IBKSUAYBNgDKVmplrXmIecJ5klm4kARIgJJsSZQT/ElMACJx+fDdL/8YrCDjiJLBb4PlMv/1X36b/Rv8y1/+7d/+9f/6P+Ff5v/zX/51cDbgyRJmYPDbPwZ/Qungt0FCs5wSSMSfdc+f/84pGZwNBBIYDn4bfEAZwGANfplcfRr/Uo0enA0eEppl8s/fBu9HH0f3w+no6pc5o9kvCWXwV8F/5Sz51bxV8F9m618WkJzL95+b1uzv/Jf/7//5f39J6S+Eil+WgKTnMEXiz79cQ4IgEb9Q8ktBHgl9Ir/kjOb8f/3CBUOJ6mDwvwvEYPrLP/8CSZHxPw/OBn9icD74bfBPv/4phXP+qz1f1SIXXjf+9o+BWOdymXT2d5jIUfIrkAkE1VC5RdUY+WWyGHw/G8xoulZb6H5NNX8/G2Q0RXMEGW9/4PvZIFkinDJIrE7AGFgPzgZIwIx7XlzP+Pv379b3m5Mvd2Tw23/qvq/NBeUgeQQLqLeBcHl4S3PCcm76hZ4Vq833LOf72QBgfDsf/Paf/xigufqE88HyjeXXPk8ESB7VD9uzlTNY6p1pTNv/+ebqXrm1ci1oQTIDGhKo5NwwBKnchrNBAomATN4OBhCWbXLKPAeJ/Lv+KCmyGWStRVbT+6qOcbsN+xA3bLcN+48fbcP2sSnX4Nv6GnFxoG2p1v6iPVlShr5RIgC2XjGjFENABp3wcjbgAiwWkN1wby8ldwXGU3oP5wzy5eC3f0hcBhaIAKEI5T/UK1DyuP4AQQpZ91zPBow+TZ5QDoeJ/D3XL1CrvANi6UWdgKAMCDhubJG1PgYl4YbXYE0L4R+SUCIgEWPCoZjS3LtYe8wFFYJmm2+YPqBdIOk9Q+lJQlFCcZERHtga1XcDU1RkXSNGzzkgKUz9sNYBh90w0AWl3hOpl7PL2VwClp4q4stBmgYvccfGJpQRyO5Bigr/2c5A8rhgtCB+Xq0nhDvJMRKfEXw60HnkDGWArTfhqxQKgPCmUeZlN+D5C0odEA4Aafn16gO7bM0VWqHU89K9bMz3nc4IJIeax2AFcOHnpROKMcg5/LKEZJTlYu1D+busQ71kIoCAB1qLEQZ9iK2YhTtRQon/TiY19dV/X4MZxN6x6vUTsd4wgfAI/YGqv0QBNQhzmFCS6r9zDBBRG2Z+hr45v+LZ4GyQpW0koXdhl2swhc+HYseEfLV3M2GWYwknausFyuC9xAryIUMEZUU2SQCG70AiKPNi24wSKtE1TK/QAokARyNYQZKSxfKRw9BhJRQ7H657MvB8jQj004AMsMeUPpHAbOCzGEoysC0JOBv8veACzdf6KOCzuEIMlkBbvQIUgg7OBljIHzOB1egUJpSB5tCCpJBhRKCEN8HQIxRLRovFUv1Gdkw6aeAWGKPiND83ME97xD1cQT+zvQvaGWdSk3AYCC6YHxsAzqEftBFBAgHMvZ1PAbJ2NlhCtFiKLn76CvKEoTwIzGbYDU0dTDFHclVzhLE+cigSfdg5BglcUmykDc8Sc5iIewlCfmZpCXLnS8wofyQLBFMJ0IglWB9CEAXLiTWJvX1lEPFvM4MSkhFZNNdboZazAWVISliGK9genuRcDwNOBGRwu+W0QacJIHXXCjAEZrh14eqzgvO5nI4XBxrK0vpNcOu3gsfG9qmF70KVLgohDnYMjAbQfpiHsFmFMNlIEZcHkfqBuewNimeGFoxDl6UkDMEBmIKGcGOrLwI8xNkAa33YvOi8i/IO3xK8DmkGNshHGSIfQkjOy8RUm74rN/MOQXwo+XMT1gyz26onePSUXC4BWRiO6BGuZ1QK0RreYFKwACXNCiwkTMCbbr7k+RqSRYD2SP7hEuRIAIy+tVgGQhW38ERZyhWXKm9/ApVuYAkYSIS0MHxVa5gUswwJM+tisYC8VE9Vr1NWHTqfaw2sGl8x3eWYVH9yIbkaInlI9dlU/QeYoV9zmhT8cFcpwRAwg4W8O7+EOIdsGmJxIWMOB2n9Mmdwjp4DYsQ81DWjTPJukAd43RXAKLXUiWoCwf1RvcHJrxBHM4SRWE/pYoHha1k085bDXEkclNlWYQ50l9soGEgeb4NwlDzezuf+zmWRzfbFCDb2Tq9tJ1WQgHl+ND1DvaLurc4QCaGsgCrdPpqcQYmQWkirlJ9fvWnDFRDgUHuGpOTyKSBidAoSAa5tlzt5AdKDiU1BwT/MOgn6CEm4JwA/zdnL7+7ELoDF0XUfvSz0jtEFg5xfHAyYc/MF760tO4NoIChtKAR7GVTHhNEOIikUkGXSxtathkjDsmd4vtW0tjuwand2ObR3lGWHQj1pQByHOH257UvzczXX1KXst7nFpu0pHVRTabx01+07pCwQ2MMwPyJZxiDPVc9va+7uBnJuvGi6oQ+lu22c3LSRYmCPTR+kCRppxWJJyzUnfTZ4AoyUrhvyBcG7qbjXANP6WjSKkseDsVA0r6SlwO1TdwximAiYjtMtWNdN4qr5ZHAr1SXsZrUySAp5OksIlYpxCaFoc17l2nYy0AEBD7rhinh8Iug5pLAI94HncF9DI5lqbaS0ckhDJRBQ/fm1dVhdjPJO9kRpgpsXeGJMBYfZPC4MXa0sGbS0ZEBlGzirbm4KBNAGhlo/1UUaoLEtWGL0d/OWDb80H3jPQAIDvjhmyDtM6VaOEHqdOwlajxDDw2kvX2hE2KCeS2hBxCtFincMLKSLwwTTQ5kUE8DDsqTs3IQ+UzgHBRaXgG9BN6uvle92f78LUHyh7BGySTETDB5M7GIQ/pVTEtygnGKUmJs1BxhLn5WNTJ0zT/sL1fusl+10T5Qy7zS1tS5mdjWbKZzRggQQzE73BWEB2eUS5fxw7lL59gxFJ+PfvilK9zxRv/YzrY1N7OQ12s5OOd9RlJ8daheFfPUeuTLedAIRNJesk/To1HzBBrZMGkZWcAfxU63AmeVuF1WhdZheUiIYxW+H/90J5srvv3ifLgGjBYf4NP1SC8aUW24Kt9GsSqNQjsF6LJ1SVgAHuKluf1OMVvALIil9OoQL8B1YHEw0yMECHm2v+ZI+jUmKEiBCNqNddlLPfVfTQD2BQ8kLMN+RwGzcxhYiTamQ93cGpNihx0GPl5yeS+MDO9107QmFyML46/dhIJCdw6Aj0gudJaHxPP/QJUtoN7DOMa/302YAY/Ac9AF8teOjNu1MBEP5gY4PqC90kHHdv4nghTx06AoyDPKwi1YGnj+3dGG2Bxd9ul1BNscOVrEZONN7GRAOpVgU9kijZApyjeGYFspTBL1q/t3sVoQc7ML59I+IzKlSQyeJVODXikipkiCSBH3tvG5ZUEvruhWliGeIB1WXm1yUmyiuXMnZC67GhIDkcXYwU9HWO1JoD9YA7/Hyw9ppJ8vZ7oRbMGTiCgFMF0f3he/a3YSSOWLZ0NrkBJAEYrslhVywQokYwSgw+Zaws7x+Z7g/o2nA79fvCOZOe5eDuEfJ8oAe7qzYIK80vqrG76Q2grMDRu8UQd8D6VL2QWQhO1aQ7m/0Gk4YxXhEOtwk1WEvSuDMgXJEQpDftw1kW/CQM4bShcMjame2R4MKEOFCQmtAnNSSdth7pRAd/pwMSmXz73DdYV/BOOReJvd4D9YAGW4rgz4P5X0Ft1Lpv5AbVSyODFfo8uHbbGmu+BCgyAJla4+HY7KEK6bcE5MlTB5lLEdN2V8T+aO6LzsiSrqCRsrXh39f7lFoxE6mI3y4kLgOX41dncCk/LaFXM3Mn55tLaQr3OcX+qwFnVU6NcPd7uE7nZJSTyFKDquPe5Fj5SPSAbDl5VJ3aUafZWQISBFV05JxsvlWCrzug+j2t9/oAbTLnkveY4XE+tBqkpf6UW7h7rR7qAcLBBPsJK+pFAAT5RZwICOHDkjZIgYZErGNCspSMWwUyqQQ/Z6B2QyykBHkSr/DcaMIwWzVHfbcbrAzM51i4cyKJHSynAR5beMd0oxJ11oFtS2KC9QCUyGoWUbIrB4SpnYAlRvpSnIgVQxJlnRjWo1NGvbvXp0jo7mi3yY0SsUraAnzofSG2aQo7zokBldSAtiUjmkHZ3yKxeF0XlttdNg7NqyYbMC9tpl1Qb8GW70khmTiC+f3QP4eU7J4yJnWFVTDnTu7y97e0Vzen173dkt0+Kr9fDUWa2DFsEJgF6X88mBQHWaFmvwO4FzmN5LYMy9U5FIVB6XjcIURPDdFKJl+raUO2QAYzOgKBImTJflQci/HlhYnY+AM0DTTG6ZBGK46HKeDHu7d/Fqn//uOcMDHavsPyKPtaMvSvwl75mxy1CTDNPWd5P5kikM6Cy6rrFZtFQilItD1aiMSIq517EU7c4V4gikvGHwvxZbTym0C24mirBtV9oY95mpa8aINpqQKENxNKSXxqfYn8bqZHVl+9W7IfrgtrQQ/sht9MN3C7hlPvu/mgnWwKM92WrUtkC6jT5vYeTlkDzTnPSgOFk13rNDK7ZkcqckB0ttfCoigNIB2KBE2ncKLI7F2OSNplSCL4ys3A9uNpGcV6DCzuZqwcEqi4G3vBg8ezim1E7MF2GH5rHCcz7ZsmKXPKSF5h4xPHdYuDhna4HG+E6dBSSEOuaEco2Sjh7wetBFs2lrEJUoeSSgCVGe3mgYZGd0/6eJ19kGiruFCZpLox0Hz+0Y9EGXIjrF6xUKvgAD90uPXE+CzwRKl8ENTdnBERqFD5Ku/w9QQPN+7s6mB8xucMfBqCUolxDrMbnegrY1xPeUAZOI+tMnZ/GU5ZSn2kNHHnZl56WNxWE4+pUkh9dSdwS32oIAMfY3I407RLy/bhVGKDmcgCuYQK9f/8g3apIQQlOJN19llWopcekBMIFuhBAY9IIYrgHBYi9WVOeoQJynTM4NDhiV182Wb9yzMqDeDdNvbbXZr2hVAvYTNNGIB17h6Ic1pv8RHq4dY/Y6TkC7IQkAmy5j83//1X3/iemW//fmf/+u//vznf/7ThoPYqM8LxZe9LnT/M0UJ/EgPloL3CazgXKal2InrLn8VRk3dnp51d0doI0cdb6i7u5KjCxjuCc8dyuAMtu7s7DCE3ElrqwGDO1DwGiYgfKxUvkBAF2LuoWDr0s9F7CoHMXet9UaxrqUGZfwZYJd7CCC+Aey/C3j0rESb/IwPqzRDGVR29sMsGhKxUUY9K0ftQckig7IO65aUhIMRdgm72mVRX2Ryi7eW+2ND7ONu0U6UHT4TxzaRs09AJMtdbW8bDAF72KFbkR/S4IjDyTv3k3BUuhJmOYYCbko5ulN8O5gdip0LWs2DR+1k8G2oPhlcFFjFDPIMqEzZGLAF7NJr70bWDueXIJAoUhjIdEIW4d5vlGbBJPZwY1SaGdUhQwQlto2Kb0YLhzvxq40KAVvJv5EKF9Fl/QRKdJLZJX36xCG7pq1SANY35xTjrcYhMaWXLbOpLa6CvFXlQcYYpDKh79mAAwExRion0HItwxOMy9ENyC1vjRu1v477xgI13JvlFnQkQ8kgA2FuV2qrNtIbNagDhyidVzVJuf0TWrBkZwL7GaWQHjnIJac85HhQBr+Hi2AxVxNiR2pTpy6Wk6s5aOF6cUTNTqxZOu8hlqjLfLKkTxa/GNhQLgATd25Em4vGwqojIC/1ZAleT8uUUkiKageMPeWyamqAt9vONRWwzmh5uZFGEJ6oajOhbJ3+VG/GIVjiFoXKpH4NqJXIqi0Dpa5Poa5bY1+SylW5QFiMiRmfKQtyUnDtcKiicL42Ll8VoiNDPWXicJJAnWyOlJHN9k8+13mrl7LQHsX+CmodN7G8vo3gIP2v5A3KTPk8YRAafiJHiSgYHJM7/YdurSuCSbgxOkrllSPVSgC7rbl5ut9dmJ9T9gRYOnlEedexyrdvM05ey38vYNHh8X65BLlwmYTGiCkDRBeI2DPG26bSydcKvYccJ0GeQ8Bk4J/hCDEVvCa1IK1VMiH1zIhUDnmjOksdJXd1Ilz1/K4CFpfjlkF5TsYViasuIcaKFQ351UolayDcpcOyuJOJlAqBDqWO4CV74CteESKc3eSY5zBQKDGcS30n7fSqh80ATJQVIAL6yBuQLEORkd0btpdtuaFELC8BhpKvPdD+rCEIVv8KiMOlhuQqqMu1BnSodMviWZvTCVYjO4J8GRdfIHxMnROx1VI6ou+qKolGid7fRpKgYfp3kCjUR8QygHzlpnXEmRCx7HIYC+5bBp47+6jgHQcilasNdC2T5yhpTUdpfrXOZiIZlY0nWI0Kyzhm5IhshgczpkvWUSPv6xNJEZeXrLkwDZyyYhPUAcTWuLBHvfLU7fLkv6rf4tIRwwipib1MvSlV0Aesp9tOiCtv0b/q/6pd0sEtwXOqu8N7uNoQ3/e9GtRlBGLiAy38eAeSNNi38ZbLC/yRPl27SNs5Yw1io1XlkCENP86xmgVM6wKK3XWioaYxG51wynEdYYdIhMGTE5DfIFIIGCqArRbVUDkyWCE8GdAw3FCCk0Gpt+setVNIr3QFA4eyu+wDGFWyjCkNIy9rQAdI13XFAzRDJVwOZqb3wOVOQJhCnkCSdsUSf/2uS2ebX6lpfp4I49aRg+RRyf+DpZQawRrIsDSw0A3ofMXVSLt8gR06otWBryhqwOZAXaH/HCCq4gRJyqgqUpCBRLU8wZmkZKTuFCs5x5XulUYLygdfS//TenrNytD1XAFZ384Hv/1nDa9lSJ6E77LNFA21m6p4ve9fDzR7bXNwC2a3NtlCfIebQrBE9p6/qi79pLnEQ9UodyBiX3AQrOvaUWb8bPBh60u4jJcwXsJ4CQ9xCf9j60v4LV7CPi5hvAHbHUInlF+Db2uZrGwbOMfg2/oc60D7GtSrZZ0ynJ8NZqhihk19HUt3K/M3JktAEM8Gv0kX1KWa0pIy9I0SobMktNbnJAz7kWmNktBlKo8b3uckKLkrpOB1D+fSzuSdSiiJh5JfA1Y+mfU480qXIE2V3Q7gO49Qa3s7AbbY6Q2tm00KjOUNbs6uvcke+OuSdzdszffQHOcAc6jRR9M02UZLecGXDgLSOXjsFgaVe7bTZhI9OW3KOGc3SLvfgzH82e1Apnt1P1pl0G1hvQoAvnav9zAgbNygFKwtZLIws5Hbgm9SMB5KREiuKUhvqGNsj7cg3oLX3QJZzmASqHfbKOBRA2Avd8uiUbXKzb1cXXqyQ0yJq1JcKspyIsvLaO0p3+XG41Y0UMglYec8HKUbZwW/EnhqYA5evXDL1+9fbV/PiIUiFtoPFtqQFL3xXg3yFSBueHsjl3G8ZfGWxVu2/1v2vVeewHHPatFeO93XASdh8uyMg4qSYykSmHTo5PAarGkhep2J8SYcy1RxU+2B1pdWwZ6KTpt8Mkp9U52tT33m68rfuQo0nxdhSDXfUDl5fBtauqBIDyM93Jfsa+loomYmQudPoJlpKE86/dvaao2ozIgXN17cqMyItyzesp9ZmdGdaLKpCPAE4TcldH8gdEN0DgXrNWTaLUuBnw1UWMIWDiELpiTQn8IXxEq92Z+mQk1BBkUX2QlMZGSlwe/NMaV/35iT0DGegIOOF5/UF+cNq7HaaXeduuzupQyNGLWLRljH0qEI66YpXWqyTSciB1yaeNdNuN5kH3iTLq65JNo9O9D1j6eaWYv7mkedoaFXo0x0ez4lt2friu6EHDem4nahrc2SH9fdepJjJD6byoKbUC6Xg89VHUIb8eYMZUBnPu3fxSmFAiB8GnMxG3MDnr+gNMCO9cEJlQdW7VavV9UCnw2FW83Bdo3ybHk3D9LeCzniCq2QUTxvuhSpGWrdCPcTfW7ud33HQbLdWrgeaV/uKrNkL3TRKxqXXbZYLPVJiJgaWwnFGOQcfllCMpJBzT26FpwOLHTWO/NsmCdE+2ygeidljuxN8KQiys91Sm0bqKrqLr1Jp1aFmb7mUOqwPbzenrTZh+VXk12DBqLSPCrNTyLmBbjJQ/pCAAoDVUli+0aFvU9En4pnGh5IN0ybA3cql2GzNccAkcGxsGHpBtE1d545E8zSYwvomvD1yom8sMxttPpGAvZGCBjYkMXKRbnBaxAe0cCWe8KRLhrbEnn58YtsLpNJbZITVE0WR0AwPzwdodNMMShzCisN1rYMsf2bA+CT5rmUX9uJ+5Jb6OVdMngP5yFitwGPiu4KO224k59jDUQgqx6sGphALs/Rg6LMbaDzuSwG77naYuO+/JjLOjhrpLJ8F9kkARi+A4mgbGdFaDkHRrwfoIQqzVV6hRZI7DekxQf7rCBJOGS+C0V1L4T3zYJXlaz6mkAGnmVmzF7NgbKmSUqfSK/xSJLcDKUpaO/WQKvx7wUXaL4+gngkl3OFGPTojNpLknmrnXli0UCSAh9hznVS500TLkgKma7eZjNbgqFHKJaMFovlEeYrJzA5Bav+6SjfKw/Hz0ErxpEncg9XsNfsTUe1RwCMzVXZljUMVGdssbLPQibnfQGD/aZY8eDPtlh6zaD/iFxrS+bUq1X6nI2ZyL0Mqa+8QIut9NSed5hBjzfcrlVDXSaoNasf/Fxd9suz3TZfdEBuqMWwvIZNcTmJV/APDRLv8+zcbMdtE8XgiJpatY3B6nDHmanItUnDg9RAW8VjKoWdjoZHTqhDwQO4hOk+7cUECQQw73MOT/36MdlVa3pOz3AFdV2rl2gB9j+bsvpIl5QiK2M5GnFZI6uBcKBIjiGqKB2+rMsGe9U2NEqM9eaKLctnbjo9SYpc6iJdSGHqkjrEEgyPcIBv3HdFgn7YJfNoOh5EeiUoDEq+A5HFNtijkj0cRo8hmZkCH9mE3avtOlThtOIP2mZri3C3Op8CbqqdtRH9NMgjYjjE4bUkoYG1PTvQXbGxwnN7wG6HcgVwMINH/PCXAffcpRfcIKUmGJuFbWSo5TibnyYgg28YJXcgo63tKj6GNcwvvuh9K8CQLIAVVihutmN5Xgvnc3kD9kgMfHxGyzvpuHxO3/TulDj3hmJEXd5eyVqJPvaNNFr3uk0Bm3Su7mrdtnYtvuritE/Pn5OoA4lvRVa9JydbLwohtsPdMz3Sxt6M9mv57dcb3u9xo6bUpZGJHujRge9teqD37umRIi4Ra9qfAOy98+W0uhKfOGN63EJjaxi/bVVIaQp548vAFAQzKhytLNLLvP9tC9IxKgVKRNq/8kvKr7cEr3vO+nwaGSgyRD70bNjwOnHbecj6E01K3tjvRN/hHR8ZwsgQ7o8hDHpy2LxUG4E12ZXWzxt8xL7JbpPA7/v9FuX1YO9dIkk8hNChVe3X20TEl5hwQyoWB+12p4lo4sMyuuWdZly3C3E512yukzvlNCyhp5rloUsOqAf0uHGUXC4BWcCohYhE521pIc4GcGXSTD3CtXUXIUmovow2TD3C9Yya1HxdAk4K56DA7lbATCbWcUIOl7Th7WZBVOUWx9wfpTCRqPUYxdRhUrB+/cWzAgtJt+HNSYTEPF9DsujX9Uv6W16CHAmA0bet4jJIE8ieKEt5IyJWqvzllB1L8xIwkAjI+BGAjZJJMcuQiCQkkpAfmoTwYrGA3FN5tL3/lDQdyo+B9dU19KSF8VC5JmZZuK7gRAaoNPBM2mgA7Ci+lnOaFDzqyqOuvNZ6YghYba3ujcVZQpxDNu0z1YP0IGAsEPPcnxlMzSkk+6oU28LaobMBoepZ/eyXDHIOFvB//aKy7/2SQUD4LyuAUTowxG+OnvvNODXveQYzymTEDeT9lr9UhwJ2dWKo2QB/wY4FfPaHlSFSM/FtXZjN4vs0ZWEfnAw8hzt1g4+GbiMVNkVAj5SIiIAL3aZQpwF//xYEnTNxM8qNkocZLlizTfMI5mP9lpKtkUTf2LNvFL5CHM0QRmI9pYsFhjHdq0e17HGuC6WDdTSrnjKStcozSqlRSt2LlGqrF3tUKlZ6vzbS8CrkdiSjfhXWARVXtm4p3tV4V/ekUXL0OLtobxwFy6HVKo7m40czuzeE+Da+cqXr1vIrsbf9y1pC9LBx81CXK1O13+oKO1HE+UFEHEcK8UNZEAZ9fLu36kDdvdHNQo+0XSxw33m+V/0mn4reFZGRiYzMCZrG7BrAgoHk8bbXVCJ6CvN5r3NYFtksJrg5HT9w3dqrHitcBX4VTmAVVViRmhyZmlgovB2pYOHWdmeJ9PaRHMR/f1UZOAHzfMs6cGbodoXgjoGX3jATmyHSs+9en5+PLHxEuj8uC4/KasGNPa8hvVFk5Sfj3VZBpVk3g2Zwpk8P522PDF3ELXvHLc3FNq5ymNMaroAAWzFaQI+0+SyVKfcTwxtK63TZB47OiFVz7sjW4k9fe+LrKufcsa5+s2qdeDp/G5h3yYvYuFvVa7bI7t6ZbbFjPs1Plq/ZKqV8INeUyZJ9AdLtsmTP1MC3XQit99Q2gj5CcmJ7JqfUJajWA04lI50usdFrkdCQ2TAciV8dvb8nwG76i4tIsyNYbGVzBIu3XrwwXpkf+8rs+WLcMbpgkPOL7bjc3Aw/nzV43bLjtNSK5ay6oM8Z02veRnJquAYR0XlvpSr8stdCg/55V/PaqFHuU5+KSAoFZBkioWKzR65olvaeQ7/3O+hCzqmQowq59huFYKH41k1pYlFPhq9Aql4Xi2y0DNefbN2fYPGjNJwCPjzfFih0k9T6jGTPO8qybejpXI5zdEZpn/Bfz6M1g6YWcvAnJmuXDf7p1z+lcM5/TWiWUwKNFv0Qs0yWCKcMkjrA2xf5Gp7WYWbFMRUx90PUYL/hJMZNfZmV16xx03qlP8h/Tyxp/WWYysUkXfgjxuDEm73nm73D3Sv5iq0TFUrmwpOosF8Wo3cffhlN03eYsx0VE3MWxICet5qz4KZebV9XST/7DdHdf9XVvBqhiCbySFsL6/pp2pHSbc1R8thq1GWVv35v6ar2uBGmsPEuNzdmEYhcUcwiELMIRAkm3tWYRSBmEYhZBKLQ8QazCGzkHA7Kc4ezksWYx0jEY8zjQWIee73yvA625DFWJiKCGCtzajfUKOF2uKA0r6SVkNHwRbbIMLHnasK7RjLouliHEBe6Kp35bFJ6ZZuNWRximAiYBlBNxFgRY+0fY21QbJvbHiS789Kg2g2RWqANe6rp/i9BpudVRewkzKeN6nzWq5dwxSgpdQvt+1LvUGj+33elC22QyiApXC3lEkLsA7LWYZcIuV9CkoYccbv4vE8EPYeOM9wHnsN9QYldG5ZsSxXKGtcTCKgbv0ZsG7HtIbBtlwjTp3KmzbUcLYZ2z7yi7aHS6uxWhUal6o+rVL0JTsgD+l4xIQAIpQtFwyGiGYMW3Qoi8YpuBdGtILoVxLsa3QqiW0F0K4gc8M/iVtBAYopjPivTKJztzGAbB2PbnyB6EUSaHb0I+vMiCNxwfT9fcMereAHHgyD6DcSrH/0GXncny+v0gktZhuvYPgPRUyB6CkQcFT0FoqfAj+Qp4CcdBuu/gHIY03vlIhAdAyJyjch1X44B/tuqoPqrYkNk6guJe0elOnFj7gs5+lxrH08/o2tXnkIOV5AhsQ4FuVdKQLVWB6kCRo6Qb91YivvO3ae0fLjPRIpvKO+yBVM7Q5J92H5da1DFGshBW8liG9PP6pH2hbYEtM0566Ko9jJR7bgY0ebCg0jRFh5jUdvIUMWcf6+qiGVdKKcslgVYDeG5t0vnyui9pkrd5eL/5EqBgx5GuGjb63QPx2QXLcVGfxxjVHdHdXdkIKK6O6q7T03dLTuugIDbC8tSfeaTmB3l9CGKX/grJx/7i7Ui/VhfNOr5LuZjV0X9PucXpdVIbE5CWvVB6Q6VmguCns85TChJ+bkFSgcvEX/Akp0vqsYcDYwRw0QDozlo+dqJAALOCzyBSbkhm5gkbn4iEYrBQFYRHNFKCODxd6cqwKMRNJaLtdvSsqmkQIAjmObK6Z1EkRy9LzvwHwKJQIFQXszCnYdSDoBku8CSiNQiUtsSqemR10H9mALySbBObnkNwiP0B6p+z2YylAG2bsS3Sfaq2WpceeubMDHFstsv5Znzyyz1bJK+v1/7L2NwBIzEoGDriDgi4tgb4lAQFcIbJ3jTFL9zElyIYYneM5DAG95nCVgzk3eYUtbnTBrgovneXg1RFet9CIbb4om7YLDiViOPGklN5FEjj7ohPD0yj/FG/7zMY8nfdVHUNufV4nLaLFF3cLfhVZT67xFiKLbU+5VjbX1fFWreFz9YR7T3NYOmLb6/eRREnApD3Csn/IL8B1u4VFT727xdKtSGgUUGiZhIgWmbYBsz/lxJWPaNSgCHfXtqyjkcMj4goTJFmtiE+0CSQF4mohkSQguSwAwSsVVCx/ozfbrrSzSvc+RdAt5j2c/G/lRQVh62O819X195Eoxi5SQoWAF3vND2nWgDUwmsPzaINqCo+92bjleO/0LZI2STYiYYhNvgrCf1g3NufuHECDII/8op6Rtx5RSjZCdzGcCYPsF0us63AiKbtde/HBoOcsdfZ+B5JB00YHqxFuGUlR9pGu68gnk4odqHLVP9OBvgWVV7qtbErGnYH+1XbToHGCtp4QRUp03BwL4nFbhaUz4xxNu8120Zubpw8Zqd3jWzb0IY/neGUSU5qnSe70p3543CoxquY8wdynEiIVJVHrEYGBm1VzEw8lWBkR4HVAum7MTXEdAjoP+wgJ7CmZIGT8dK3atS7uVFL6JndMQTe8cTsf5CBKq9A5WL8r12AoQFZJdLlPPtcnLJ4eeJGu9YCco3HD2Dz4GrMwStLCeZjMeJUt/tPCwEcND5qeo4EzXJHhN9RQE3ot4fMPMP93H/5/o4v59K5p2mbUiRjl5lgYp6RZq1OfnJrhpvF9+3sXwUpyL63b841ZkXxY+BZPMUzLZihIUc51iczQ+Pzv/OQLplRdGTY1CjfSPin8j+HSPxIy/98rvC4AXN3Y14Qjk8Qnz7iaSDlNu7giqH1Enxx4bUWKfcb0ZqQ+jeMnmLifwiQTg2QQhHRnXg3U3p/Tw4a0MkSBuZaO8Z5f0N00vtn7WdC435zblx6jqZpO5viyWOCdQj2oxo823w0aeoPy0x7emwiMdPQR25xIjufjq1pf/iy1GXgNGCw63YuKQca3Nv1T3dzLt1+nEfAgsmS4RTBomfcVLz6mKbkoIxSMSYpPC5z/DYyDhFTPI2GSe514WgOQbrMRGQrQDuNwdTfed7FIQwWsEviKT0afut2MTaafjvlZdrcmy74f8mso117CPuO0KyIy92asGegzbawoZznzd4Uuh7qiohgsWWhRDVQCf0DCzgyTNdkYOKWCRyUK/noPiSPo1JihIgAtlrj+UIewjGRaOyfuN7SmwaGZeIct4KymkihTYq2IUtMbdQ11WAufPmzVUVYH6Oql+4NRVgfpqxBafCmWzlbpNS0YQ+N9utnixMj13GUp9vYzd7TiUM8x3djjci8A6D/E4ns9XmKaUsxRjkHJHFBwjS7YSEpPrN+VL/yNHSWtU1e1F7+DWw5axcBazE4ojImnllXdAh51D0qbKp0rX2NQE7ZWxfc4DPOSApTD+cQOJKBewnMZVS3D19aVxykBiD53cgCUkSfSSgr1LO9qi67Cw+7GAgfz7s3dM8ty+TJ21nC8o9NU9r8HsR0LWBoptTNKclm4crIACbCIbybSgUUMNVEb/cIU66o3+vXj2NvfihdcITQQIBzHcvP3t8Cm0fTci5zKRc7023t4IMg/xeyn19ziMDz58RRzPc625IufB2BdkcB5Q0RwuaNpO47De3s8wimpcagdPhfMtJdTC+lExBHhXWUXv05hTWTGf9TxEk4lR8H3tlLxsMTts3v+Y8To7fMNS9rdVukF1fhlGLHrZxfoNQeaK9mxSkzfzWqN3jdGnQZ0SaEWnup4xKA635ihJfAEK209fN9EhHWw5XkKFmzdz2niIyp+7yCpXL3Wl7Aow0C6el0gzFjhCn2buqKoOcgwXsO0g0wHZGXBRx0SkzcGbFQVn2WDJkoxTdScTQVEj67BQUlzbJOBChCKswLSQbKPIXcV7EeftLUelipTYu6q5cufEeK+eHcqLb+D2UY20eLjIe8RJGxuPFjEfB1Db2GyTy48hhp8hAlRiyV74psi4Rax6TdXHwWhubHZ6L34k3qq6osvLLLblCANPFVlZ+Ofw81eOdtIdRJyRPZo5YNowcWsQ1b5NDSwBJII4AHAH4rYoYkAtWqGRoveo2DSnomTcvL3Tv08hoCnCPB+L1cmwS7H6zab5ID9viOCKajmh6L2i6yQlEwIqAtadSVA6FbpOBJulsIz2XprURZklsmu/ejgrIYfcoWU7hs9hGJGYoWZ4LOdiWh1mxn5yniUzp6o9MMPNrU/IyoK29M4A9dvqhtSFvRnHqAAESAKPEaSpIChlGxAU+WTHaacCIPBrQkX9G3BJxy15xS/N6y/vRa4mLxoQUSuiVySyRUkRFERVFVHRiqMiLLWTrFzj7jODTNrzIE5ydr+RYmxUp9hgYXiMjX/o9Im/eB5Ed6XvL/YYHd34L8BwmYr9haJ0f5AmjGI8ImGGY7k910vlNxQkvdlH8ymt2UQgRvNE09126JziTYPqwRFxQtn4QS0gecln+QFmzMKZPML1laIHIjuke4LOAjAB8jcgjD1ncHsz33Wu/5gJmDzNGn3hpV0tAsoQ3knr480PAOShwE0FhClw6RedzeTEeIObwQfd+VeArEzm8kmIUHLLhwu+zfjbIC4yn9B7OGeTLAOgs6dMdowsGOb8AoWQzVNUpnIboPGSMsmlQhYWIXNdf+RVNClkqYiIAE1uNHJFQBvA1LUTofHmDaMB0AR8EfZD/G7+MNUkmAohCrnmY5xAwKVUGPM8kPHIJUXcMrgwqbg9bQC4KBrfgpFLE5bUeYux/k+m/QyRZ/gelWecoeSi6rKLLw7RHypoe8FncQFJ0jvvEIbtiYNH9WZB/QIslbsSutwdOFCK7UPWntxhYJSfinYOvgABXUMAkNPL7JkVEBlO0jWlLHv5YUbY7DNaKr/BDiUk22QFD7wqMDTYMD7pDiQSjMTF/dAwdIhb64sbl54xmubiAc8rgyEKa/s/NMQUCkcWFg++7dw7WtKv9QrmPC0YLkl6GxQpERLjXegPnn0HHK0LdG/cIybyhCcyFSiBqUxX/8d8r3H9LLhkIoVtDC7bw/V7K2DhC5L1eIbEO4maFe29VvF4A9hhMZLTdumPQFuAC51Aky23qgrEFFC8haxvJuzp1kSwn/rDFjYvANAFY5fq4KEgaIFYpzSaCMrCAoy4AFkvE0jvAxPqS0kcEeedovgRMFlXaPPIJzq7grFgsEFl0DpwxlC7gBCZF6Vy0wSkOPA/ZYqLWeQ3JwolWdQI7h2xxBfNw/422SF2sBfR7PDEg4DXKkLgBz5cA4w2jdBq7gPdUzugchRJ0uZJcnj/IClQq98nXzdBgxr5DWEB2X2Avi3UmXyuJV3pFM7A7O5ovYQYZwJJeSbCCXYf5EWSQ55qR3ynHGSWcYviOsifAymQEvpSBc5isEwxHst5NAI8pnKfl3CnEMIOCrUMjJZxdQY4WZEofIQlhRrygDIllhpIrwB4hCU5wiVL4gXIB0wkSsM6O5vl2lkHGgzYEhTwx5bBFq6xBjxDmQxx8R46InkvnPGzCMOQTRdx5CA0rGfKDEPmllCtC5o8VZBegiy7KbfqCnocp32Yb31EqQtPnkHNEyYWCvsDLqhcNU5CbN224iU/ouaGM4fAvfzFSjzO5MC9KlfQ35hR3KIwayiKgUvFZTTlkD4hwoXh79fk5Axm8oxgl6y1eaaETqcxUVGECHYwcIt8E5HxJRbiCywb90b68aLoFfpCDGcJIvvy+Uj4dOqFn55RmFSx2Oee74EbZo8fh3quh0rCwS6m8YIXY3TJa+bxiCgHTV79FKxx+h+tXv2mO8C5OOkGN3Csn8orUHg5k7WQaKYLpNWydZhsVh3O3NTSGbT1hU8EXMIUvohYuauGiFi5q4aIWLmrhohYuauGiFi5q4aIWLmrhohYuauGiFq5PLVxIfbY9zqi1XTvouFwtljfDQa2dante2lqnVm9Lm9QaUWqJPEDqaH98CRSvERdjAbNtfNkw4uJcbp3jzIYhKFFrrV4Kp8A/jH8vx1T0nwjRm3q6DGoIJp7uvdSId9rVrLpSZq+Ma+9JzbyaVcfMBQMInwzUxtTj0e35jVYbV5lRKNuYu4nQZgTAEq4YJc225FHGIRwrZe6kXQ2unzJTvU9EzaJirXuLSgfsMaVPpNdMAeWZ9L4bJSHreSInlNjf4jW7aPULS0TZ7ExbY2pxDF3fjnnwIwXfLwV3aOx+KKtLc4K3JDzCRZDeWMISj/uw92zD71uYzye6TjDaslYn1yNtqVXjtv3HDb1MZFFdXUW/MkR6rrXVb9FemPda8syqKB5FtIjgexPRdpHOzgZwZfxfHuHawj+QJFQjoEFKC5ndW009CODH4ruLPIfs817x8gtmUaPiXqUx0mv55RTOlF9Kv3mhjUtLejJpynqVfSqOpW16RiRkkg7UV4e5v8aYRecidYvUbT9lvBoQZV1cF+O3wNFBxV4XJr+jioO8Wm+1sUrL3UfJFaXToPQLZBRvJWGUvzlPzI8cE1nf2R7D0s5R0OjLZB79im61spJrZ9Q1q8uacfQIKmTpZZfvErgQJZOIu6PxaHvxxHbDPAm+/AQ4UulskkIBWYYIEDDyxg6BbYFDk2u2/dwMfdmdqliI31MHN/LQEQ/vGQ93c8JdHK0HXXiZ3qFxp6/CTLaqPWJ+dI6qXx1Ox34cpvMkyMypYPi6HHlfKqC+FWGs5SMW1U+7iekb0U9HzfugiM8CrvK6JjgVgmYThey3KQyuhp9r4mCjr9LJ+SRcBOUmmtiErVMBWPE/h+aKT6J8sYxueM/AbAZZr/Og5MrwEFEqj9zgW3PpNFvZp5DrZd2qeXWxb+6gHhkHuEXKFE153DTYxsHNbqs8zw6v0ey7KtDZQN3ArEV225tHTdCuk36c6ETjh6/zWghqcHy/JlJ8SqVme+VPLW6ti0ez+KjtuaeNldAbnIcnas9mCSIjEBmBvTACDqn2ROo2iWE7P00w1PFFtClY56eB13fH5i2E20KzIRWwEgnLcNpNsmAmx9kyICDJsul735cIWCGo11YwQqHcQSElOkoal0keU32IQTwQbvmqTnVj5aluzWYsHB4x6iGLhKhbq29Fn1WLvNKQOuMuSYi3I8o8idoYzZWffiu4/9ndXL2DD+ZgD85f16v7iUukqqtXplXrm/ycEKdf0+SurWjSwkgjI42MNLJnGlnSpL1SIodYbF971EGvYUyi5IcppVigfBsRQpihpypFlJUBew00P3XNrJApd89eIQ3bAFuIYzijCoYWi6bhy7My4K4MU7J4kOiL9zHpaCmLpOqtWsreHEccrAkbzogQ1g8eBkNaSGwPqCsq3SNO2Tv7K394R3OpsN6GHczN0FNlB0/KyekHZc2iR0XkFSNe/7m9qvpWJr85bnVLf45jc6ivNrlHpjQir/0jr6CWU/Grl8vtdJfJsqG47D1wfZsYcMA54qLhOpIXjV0uFrIOEWrkRZurIgdH4AENqhkbK5FnPXuyFx1jFcMVEIB9Yr2CBoMZXYG+Yw5i6uaI1N8mR0rJvbxBMXVEBN63B7w6387JaVTKaXU6Ztlj+rSDYrgCoudcFkLWRzqxeh1ySl0HeBJJQOpZxuCPrvwf4SQf+xIbGpz9vvl5H8vtqRFk8cK+6JOYkzxS931Sd5t5jEAVgWo/LKPF1Plq8rl8U9tZwWJoPHVJS05jx/Q5DqH1xRZJ5RofK8qxpYqNn2tC08qVs1t0j3UH+siiwzem0endg1+B/ZLiFPZbx4UM0zSK2RFn/ngZGi2YivqkCOg/BaDHtPStvGA71uV2uYP2xXfJtseEbuhpRC4RuURxNgLVaQLVFoUGquDMzfUFSlJVi4xLCHoWbOaUin5nkCwRTlnAhNCiRB1RfoeZZzU9XSMeisgzuJDbrmVfgVSryz7rF51wdQLe23iFeIIpLxh8L9N7b3Mr0+on5yoluHM9ew907L2uvNTJPeeApCdnpy2n1aXCcsb0ieJ8ERonieEomdLFAkcNQOSnYjDni4njC4tX25i2jV+byKxNXGss8yLcYt/9eOPjjd9XqOW19OyA6WUNnpuYMqx/cV5C9On4s3tZET0llweRJ4wIxLWy7LTmXHYF53xCUaVvskqRFy9vyFFzXb59qwviiio954RBbzsqwpNq79giAqYsOgJakHy09GzV2XturjkUn9PItHTW25hOSg10y5LgIiMn6CoiwYA+7SVDbQIx3smm1GAx9O9PLmmn3J4ulUPVH6+yA+fbQ3cJgKcNdvY5+7DDe1AstsIOCzUw1lzbR7ZXRPos5GBqtf+cdSReJhhtExssi3YC7Ab9IwLBMUJ+e61d5w9tQUR00h9EFnuh36v91nT/3iMhl98mKOs/Uqo8u8gbvBy+DJJv/cpg362LSnTFFW1AOZ01DfkbunL2rfC4zVvg6mNx7oEwyGkTj8P0yLfO5PRM4BERkIEqjXiP+RLq8tjRRhgtBj+WlzAy1rCeFXJvXqN6EhJhu/Z1++pwN6FYlh5crngTXFiIn2pQIV+kck0eIlGIRGEvRCGkiT+cVaCb5S4Ry5boxESZArZlgKkc2A4t7RubviDA9Sj1y18Y4NpWPv1UJr+zwRKixVL0KdJwyBDci7pqg2F+x2qxG6KbwtiohKn2QQpGH+GpKcZOLggtuOUvOcXgYYTPr74S7YtQwWqE0IaPl3S9p6QQW1O4VI720DmOUXIUfOA94aC5/9SM0HqbOjOU1SNOSvw6LnkRS5Q8Esh7re+eyGTSbNprGIcXiuyJdTkCqmGTviNROpZQza3TnTH6V8EGjn0TmNVBZEE5rPVF5+q35+PeyTb5bMH8br5h13ABNZnd6MmpR9pEcG9FwsMnFWYPwm6sGWCP8E2Qx42FlU+iNjFlyFbf/PR46ZXVfk8G2LtrmTZO3Yc8roAAWzuXpkCAPXmYBjZWWUp2KjkHMFr487Q9hcSrnt1D9uX0Gig5/RKnxOj2urM6C6XwQzihwvHS+gqAd6pwdSSo6SENs9yJLrCxRvTpNwqe70MI4EhC4jc4YyBmltjNafy0Cdbr/NiPR0k6PNmbONWXWrVEdieC4lyM4uHrqqveuuDVHfRn+lmCfCuOjKuBNjPWv6GJEcjuQYqKfjVh1TzQLuRR0PzaVHnzSvo0n5YF33z9umhc1xv0iI6X9EhYZT4dhPFu++VPk9wwvuthX3tf2nvpbRvKjhJC8UHX3dJP96ztzatj/Wj+CqwczkANAkRi5x1XkzRmlHaGCK/tpvEZvcZ+D7Y2JvHtyb4jpR8FuJ9Q6hCKGiekgC93scj1iSJOiHnrMLm6NMijInaIw5snCSXWPiY4N9FpRKIHR6JNo/lPid10OAhKljvkeGEoWXoTvKQ0KTJIxF85JX1rBuy5nJbls7VLAQ0LJdeIPMZQjeiV++YKBM4BxmqFMQWRfR18+LFdEKeBuDwJ2Eu8ELFBxAZ7wQb2fd2Q6MriFUYpEpo12oVjOIf6ZzbjQEAGT4FZiEzLSZVuEpTi7Yy732PkbETAPwg7tu9I2RQxsQ7W0ylyTEE6gWyFkl5xsNSADFcA4dJ/pjc3gAyRD73H17wZFvqwLHPJGQTZ5Jfz0ZsKHVXUp4PmxIjZSAz2TgxaKLldp6OJK9sY0kFiLdS1A8N/A1ME3mnd1WZOP5Ojz7WqqxUGe0j22oNCj0Lajp3OzcetNy7HkT5bwtAUPosjn+yytv8c5YuNq2ynG3KB7Ovrvrp72GWQ/G1GImG36yZAtfGP5+g9AZlNI13AJtKxnaXGQX5oaxyktA0yF7EHD6G09zD8vpUM/WabPKXC0FGkj1zcG7WwUDIpZhkSEXgj8L7pak+SIvcbvJaGA8yCvE0H77SxfHLUGMTruvcKyjU1iEAVgWof9b/aWFq2faYogR+p2CqeYiUHnxM52pbBnsAKzinL3kg6snK6Xb5azpg+DcgFU8B5w08rQXM9r65dbIzqU0SlHJ3iPtbz6trHxqg+0wgJIE4s8YyaUmcCpmpAnxcZYrSCbH1irqtmVp2X2B7Tq3rnDoN1lI8jb/QGlTt3oOBRMRlh900qJiGMUQsRdN8i6N4DAaNRKALw2wVgKFjkeSPsvj3YZUCcYoECM7PT0gKxDRoMdgIKjF7rb8o0AIBd0oL06MN9QoGHtsZ9+1vVVGq3XawdbXM7VL2lzm1TGEfP2npDW5HpyX1vrqe/Jzx3S8EW7AznAq2US5G8RvK6JxtupfSJMBVhal9+AUYZE0EqgtSeQMpVkkTAioC1L8AqlRcRpiJM7QWmKqXC9kIPc8WJWhZhXdJEsK68LYa2UnPJ6DrA/ruAW3lTZWao7Uolo1x+cn8jJemtMfyJ60GekKahBMhddQXVEe5WrWeKMihTHm5zf0Q51r5AkIh91bEMJynnXdWI5LSOWh43pcQbM3xylSvM2XRpOu0h8fo54ByB2A/EDZDxYZU7sIAyxxWjeBvEkoMFVNmt5Hi3lE+vCuizQVIwBokYkxQ+9zmPGGoZ2fwfIlqt5/IqfkGifc9bA2LUWbx2+w4Qkj/8soQQ36HEVNzbRCmf5PDzXI+3KSXN5WcOWcgtHLHJ1X30cy8ZWMBPDB+XtUFcpvVJA+xNIyqrXNnXU+PezZF2RlpADBMB03F6YiEi9bw66hJHpiZi17fJ1LRSRDoA788TaV/nKGk7FCvSqf3SKYcqxAQKEdkewfjoYjefUuhS6qG3Z3WV2trH6laVq0+H37ETsAVKkURWJ96+H4LVKa+Bn8vRNHZHe5D9+x86cd8JpC88IQ6wQuSRRYlI8ghI0kJN2yOksDjRleBMMTy3Ih+TvNiqJBwV+TlSg21WB0OyCCCLIxme3iKzdRJJYiPHF5HZT8HxUXJJsxxDEUE9gvoPLtzApGB9ltY5Iea9Zk1aDEmYr+/OCRu5/og9DhAVYZOnCFYRrPZDlCpS0LLcyJe+A7NtpL45mLnFNZJmAZp925zecpkeQ7Qjlxkv9Alxmb5cLBx9g4F7bG3MosCAuSvJAMZOCwZsAQd7v7qHTC5yQK5159IEB7Lch5WCNY6KmClipv1gJoNM9oBCAlGWJpAy3y6IMndV1EAgUaQHS/Dk4zsoWRz7m98ozY74uQywR8j24s5rH1Brzs5WtnuDaC7gexWM4j0MIm5cqWql9roO6Na7lbXCnGSXvcIecswSkIes0Oz5ICICMon2VodTofmyz9EioJqOF+ktXSR1jp1J++SAG5pu5LwFwi7V14MFSvbPaPMlffrEIbumSbi87IEgf04x7vHrSEypDAKFAVHjQN/NQD5ppzNoQwEXgKSApS4kAAExRsKFj+V6xlC6f+Cg5AbkU813RZVGFBxOWaUhYVWyKRFcI7i+CXC9hwsUnXAixL4ViK352+PJgAnIIANH/ihfghweMlJZf9AHeyp7kQ0GOcXrBXWBJUEswUZhllNEBI8y48FkRgZSVPCbQEorRh/9jiRzhAMxfuo3X1Dq9U353rMMq0G/M6K7HnG8G0nJRH42snaRUL4BQinVNxNasGQntq5geAqzHIeS3QMhGJoVDetd3Z+B5/8wNoDdkMqPYUl9BSH75t82x8gRqetBqGvDstCae20DaG1QQ1vf1tlVevV4dofhjGx19guU2B7Fc/sQ/Spiz7iGMrc9wla77k3ZaitIIzMSmZE9eQQ7mswIVxGu9pZ/31U5RtCKoLWfNPy2brCd4NvR4rU1BZW+LWrZopbtNLRsjpbLEwhm66MiFo1YdC9Y1FUcnai6SPnifkYppNt4467UQNsft2D7C8npVBrnlAvIjvMtUAiam3qR+/Ej6jaL6VT0/Eifw5TmR/pUVgiYHulbe3Yw7QYQnsNE3Es8dowPvkIP+3IVbBFIT1lfxDaWsu5N+5xtMG/3llDpUfWUQNTu6lAoNo7IV8vpLp1/RvBpq5IR6fx8Jcf2gvuOCdpSkWfV0zgWUuICMHEHFvA4q5RGApkM9UirA1LtOVkCdpwPnhS+6LijPljzbIkNGl5zT3mS7d+6G++Nnb6BKQKyOvR2eUIzOfw81+NtbMAh55VocCRLeiWwHt21BRQpog7PrHlDVw5PE8AbzDtQv5NieJDAMCrfxTo7AxJYhjI4VY1+MRKCrOz2rUk0FsDogsljXTVsBtiVNFIghRYd8RaquASYQNwvygM8K7LQj54oewxlii5rtE1gQknqL9SGgxa1ZAly8SqDaFBnEaxJJa9y12w7F7xZ0JfV7KYMJI/HzPONAVkULnra5gaV9blcUEqAyVPuNJYn1XlvEL+Cc1Bg8ZI6W327KqnD6fRUkqBz0MJYQa6EctS4ZUf6fFNd0hVfgkhLD5o0LaAJzXKQuAg5QwS5yA2lqVSQ7Dv6xC/lthcyKxAWY9KaZAbcOOOk4IJmThORReb2PnG/NqA9cQJX0A2OpqShpnpaQvIZcTTDB5yn+gDCSKynSwb5kuL0mKHE+xX5twnPbqozPEdDG1ej+ayC2Pd9IFLfaNSN9vy+t/Dhyz8qkQRKRMHgmNzpPw75LalSXTBakFQyzErBesCvwWcBmSRHR/hWbr5xX1ag3pqjthSt+42mZE+ApZNHlB+f8Mid6O/rUiz89wIWR43blh+9tDjiY353ygDhCUP5USNXjx6Rfwit6XZ8ByRim0jtOXJ5I2WQ3DtZ0ArUT+youczyHAIGSLJjbFoCibgsC3rvYF12icVL3zCnDL7uDVwhL8DWL31BqQJ48SYU8zlk8MULMFzzJJiUx8fT+xL1WGl5EsoIZB3uky12qZ3lR6rBisz3BVt/Yu7PEV3WzwYcU8F3gfLaoPEnBueD3wb/9OufUjjnv8qtpUS6oCo2E5Qya9cwyBjd+C5bFOoaR1eQGcGja5jSxV1Ut23T8Jotvd3u/TDLxYZBRz1h6fkG0nUMHopuG6cfF34X8iOIkBoh9bQgFRQ8pi6IoPoGQHVE0gioEVDfAKCW4kAE1QiqJ07+jaYjQmuE1tOH1neVEiOm3IpQ+1agdixgFuE1wuvbgFflPHsJMVbGhCNaJnMGpbr9mJ+s/c9+/DIljqdy242w4d8QPYmjJ3H0JI6exHv0JHZceT0R4n6n29bAzZT9IE6xtvX2QO6rtsvpfhxNNziHtpOlhYPuSofL17hZOq6RfifGkLuh3zHQ58K3veOe39mutSkBtzhvXFPlwObhWxquZv4RrlPYHmMfWy5RuzhCOc5LbSrjuBlF56LoXHQKzkWlQ1B0A+rdDchy3Yk6j6jz2FMitDs350AEqQhSrwap0hkmwlSEqT3BlPFaiRAVIWpfEFWymRGmIkzti/JZfiARrCJY7QmsfA4bEbwieO0JvFzPighYEbD2AlgtF4i2Ht5yVmh3Om4FTUCR07qmQiC4TeIxrEc6KcfCZYn2noPwiFlDj5x+lecQpsdJO3i8RI69pADkzWzHlmk7mN6zO2lodTitbQrav9S9ujfOCptuFZPj+rpTgIkZlfboo3yNCyDgDUiW0iT+I+ZR/nlvlw1IPlcZ59x3TNvbfc9uKBHLS4ChNIRulT9T/uA8KX9hX701DLgZ7iExyNlArHQvEMmS8u2y0skZdSWlU4s5rSmrKXUm0oMYJgKmVybX/CGcHV82dXtm267gkC6bG1chHedgQrXr3F7ysKahAgApFZe0IH5/D9WJKZvSR+ivD5AiLpPkBrjUGUi9TmcHTAr5MgixdrsLQJrDeoSPOWJcfIHwMQ2QwWMgCl3jRN2a4K2PsnKUlXuKPeiAXzt4RrMaMXomQvDbhGDp1DlM/w4S5XpJxPJweQa3oQgVb9sjdayZ1T4ngUivvLAu33QKUwglTjsSj6L5eiQx/eZcjRyRRaMkMVOk4XX5GrefJ0wnMlDhdMWoanrbyFLu4B7hsJzQiJywhGomt83G2kN73NaS/7+P7FNkn94k+5QiLpWU29AGrZZz4qEgfDw0ZfBrLOpZd2osGsN6xBTwOQck3W9xrBchrKt6T6LUF9HWm9VbmDhMRXkjIEdAfpOAvL9sFb6P7WQHLc2E7Zjl0hrXFlsbNq82RfWYlNpGFNfW83NYeDy2FE/hdtfI0Zp+0/oQUV5EeXty/GxYBSJkRcjaDzH1auvbmNVWo7eTCNn6bU+KIRIkSJZG2NvnhrQ3KZ2lQ91Zc+pTbgbpZUttGBxp6fM2jQm+q6XEirc93va93PaGcmk3lZJHedMCN1er0kYjAXVHBPAI4HtilPxqiAhgEcD2AGDKF3iKMvie6ax3m9yABcrg+YIpdUHtAZxtodyXMqY9+39tNhxD1y+PnyRLyk7PRlnPq8vg0BjVp71hBYnYi/Ps7kkkTeLEcIZJPy0naSD7Jr4KedEn3doblDRQhAToHbJ5+fJ7fTW+/wUPMNNTkEcSEEnA3ngM+CwYeB0wMKijXLzwdnLu6Bp1daFZa0SfPjUSlX2gBevTuwuStO8pnIozvtQtfaRP16FAvOPZ2LU+ZSShNBolI1F4g9b1aFaPEPyWIVhxCFOY5bglSXYlYz3EpGSi3IHFhJ2gUNYpRp0cf1htZBeL6A7qUxBPkejd7Y8TkN8gUgjI+w2XVDxRpCuRrrxZzuiSwRjsG4H3LQJvRldwqJ6uy2I5fVFFBjn6dhqTOSEfzCxoKN/BPONaUNrq9JaJoq2Jr2wH0WIQLQaRikSLwa4Soaug91/pUm3dEkEslXarb6NPdEMJ7HMJamhn47WL125PzkDRCyhC1kEQelOb2aXDdPSMP4B2saXJa/OBlorNo1hzdV+eKJqGUipe23ht90QQamVRBKoIVHsBKo8SpwUxXu2KL0/6cCHzxW7jWQr0SNutNLoYRoVBxClRYRBdDA9nt00YxXhKTzBnlzWzzoRdzXG9Omyi5HH9AYLUlAjvzR6viv5O4bM4heRl0U8xUpbo5bUnL68U8gRW2LInBHNCJs1oS4yiQUTgUTQ4nC2xwSJ3DuiwSDZYw/Ztd3i2YBKNaFaMN7BH44/LfjTPRSv9MpqiOTJwnsuPB5iVAOxiCBofqI0pggGEg51Osbq6fUaFoJmvFtamvWnIqXtkc1R2t+RxwWhB0l12R4QNXfb562Ffe11gQhmB7B6kqNjkFn7QeTyhdGO9r4NOYKsSdwedwRxhfAOevwR3wiJEB51I1jWJY8FD78eBwZoW4goxnfVrU/IMLJhLWgR2njGVlfm0e+ZB503ncw7F3/rcOj2FP3qdQikFRYVW5Mb2zI25Oqj9Q+4VLWYYRviN8PsW4RckCeQczRBGYr1NXMdh2TqUppD0yk7pKWxh+DowQbymZHHHIOcRrUS08gbJ4jDPQ2WsI/BG4D1l4BVLmO0UL6zMSq8ETp6DxFXDbfsSS/fGKs3Qy98h1jldMJAv1y94T2CDpHOjV6qsFQetLuwGBFkRRSBDeO3FEhgKAdmktZX2FlkAp6ZVTcJ88utG+0YGBGQI+D05V4AhQESgcAbhSKwDKdLLm9s2nYLZhUKlPatX+RKk9OkHVa3WuuP38hbt6GDzphfaN7Nbz0jVdjmd6YwzsID9iwI3EPCC7USRtH48aDxV+vtAb784xp14X3vu7E9fkzCGvinNT2QmF8rq1/dkFi9Az3pCXkMAIlJMcYuApJK4G88dmr/CF0oEXY2A2MyebEUtXuAj1eSC1Br7JUoZ4I/xQH+gA51RlsKdxP/Kptxi+JV4dVwerPEbPbdyJv3uLJXSjVj3aa4DPFfVhwSivU5jZxXTG2LTbSHzB1yeJSb3xUhY0nhfU6iF/t5YO2lieAdhqlR6fZp+QC5Qsr8ZNL6p82wheasuKRGQiInRSfVmaRIMSAAMAUDIPZ8IyAKltVBA7WR7xWxWPB0FuaSIC0ASeHI+hAyuIMC3ZKKckHsFEGnzwBg890pj9Z3pVood/8aM017RNuTLk9iQhJI5FAL1Ogntid/vFNRlvWN0EbSYH2sqK5gIyoYEZX1CqKISV1DWUezVUVixFzd0VyL3hhhZ/oRyeGVspDtbu6NVPFrF91i8NczneV/a89VhUOsRYFokMO3AEscjIyCQ9v9I6JLRGlT7msO3MUlhrzznDG8sj3VgF0AxhXyrGhAH1qE+T3Y2uTeVpVaOqaZzSL2dz97W9WaNtv5a9e5+8Ynjy3pP8eYSqjChDAi0cnG7kCGjdsPSxM/ZbUjahl30XwhBXUSPEXEpgqCLZs35ZAmTxxl9bpksqPtLMGs+Y8TdeYL074WBW4e4QMCSZWuJOjGMMxWazWhzKq2vyAZJpZ3GDJKi1dAaJe0wdLGBFuaGjZ81zDi8yDLA3CTqJrLebpKm+7zRgtJWQwIxblD5hUpS8fWoYPoB9asEbUymf/drfdWu4SrgiX4svYe9L5/VJ07llKYMoG2z+LVxHldB7zBtcrMSa7iNRZ4CAfnDXCJ8SAR2r16OwZo/cBVt27iSTPCHDKYIGHb2sIGYNCn4bdDaeKxwUDmL9wr19Hl9EEECAfxOzqbXiQBCaGH0u9uyLjnFSEBiNDgeUU31u9SDc/n7lQnVFKFkD4KhxUJDSPu9lDwkOpew/WpKHoyB0SHyVLiUlFACDZj3GRiOUT5ZgrxXLCUncVlFqKPdFD75dVeSAppPu/IU6HwEXW/QIzpe0u/5gWwmlcm7a8pKR5i2WQeR9yC/8fP7GXgOdb5iH9QlQFlOmSZP/7tMTPvrcqnQYgJyoGgY0uOlzcqM/s+BNMtJLS6U8kT9oNOzSGvtHBHoDCKUZQCjb7A9WtOuC0mcNPGWm/y/n9Dzr6c2p2o+kpWFG2c0zPMJZCuUwBFjSvRqtFzKikRng49gdQGSx1tWqiZVk4mPX5kRUzrRyinzNAUSXu8oxvZA+TwRNLfbzBev5AYgE4RRzsJMtmr4AEiK1Y8EgyBzXqNayg36DDBKlf7jHUBYerx62u4L9S6Q59UBmO8MpNo7oSmcFDPBoHxGvL1fiKt3fjbwS8AKLeTOS58E9S37zyHG9ZOM8ZC+oWKp5+0BqniIb/MQqwOUWbPFxgPkyjUHfYPvKBuqX7RB4VVvqt6SUAZ/XVX7t/F995BTvIJpveU3GpZ2OZcUzkGBxQ3kXCo5zgZwPtfH/U7qDMwoKM/CjHmnTyXLMYLp73A9o4Cl9TkNlKmCw49FBhlKBjrFGF5Ba6hpMdPlS1rg9F4Z48tD3+Zo2+cQd/AFO1jtnkDZFvhsBRDW3esJpuIaPcpPXAIsU9BXBFDmczNdV2B9ZZRvCu1cgbUWntSfv0MpxKqG21yOkFdWBafXjzeUiOUlVLOX3xymIBeQ1QPKmlOKn7kCa9mWlu9OgQl2V3/yCyieNApNCz2nsldpky7WV+pFy2WWqSOZgAzqpkxO4wYIhp7lnmMq+JTWS+N140jn1TTevbdz/Xu5v+W35N+qIJH8W6fHO1NlAm/n5o9y2j44jyd1widVndITShdwM1mYaK56CpgcfTb4jOCTQ6e/qPdcVpnkyhbPoHc6XrJ6ZCCD1dM9nDPIl3cUo6QeM9GBkZoyy29XD7rfA34/0sKqRSnjcHtJ2mjsLuwKYrSCDKYfqUBzlJT3xX4sr9ddwZd3kEmWznBdyRKmBYbXMu1UfTES6SGHhxir9qqhesIQsAuQKjBUD9Uk5H2AouxT2yfZJ536VjXU359oHfqZUuzbb6A5JBPpXkQWXJEXkPpWo9SDXDgL4vaC5HM9mRVkalAbhOJuH3i3q51OEc+l9mHjdb0yA+tdqn7aPr+9vbXmoQux+W3DQiwN92XkJtlym8OKZunn8lvy6R7yAgvzMBEagV+N3g0/XU8fhp+mHx7u7kfvxn+TNKl+vXmquTpg/RqlkAgk1orX0ie4QFxAdgOVZkXxZ1DcAc6fqOLXOFqQMan+0DKVebwtyr9gOiajDCDskzHi/jT3p+b7pV2VFptJ0oio9OOZvl/v74cfp5OH4eXlaDKR2AOsbwuRUEVa7sD6Xt8/uTjFz99hQMYpV3Kr/R7EzXs1676+BHyJINOGCtWi//QILG9o4tWkEcjPt574UJmz7iFIteoDwzHIL8tft5uuYA5JCkkiX9buvlsCDj3t91SVEGx3lCB5wSTRr3dJP9/DecEVHjVLV+8ZnA3kG2iWQZY0nuq7Mwb5CKOFsdTpBrVdhum1WsbSOK4e7wqWyCVc0nzttrzTpbuctvcgdxvuldobcjPuHnJBGaxusP68EDIbdvnoogPVdAeYUOyVZrtV2z2cW39WI6y2idAXvX6mzMCbBCd90PVz5aEr9UqKeil1qN53yQ1KZXMCsP7wF/Rc9SQYcI7m60sZGXk2SFSZPg/o6A73pHTbF8oeDRhbE0WezZbWUzPhEdF2URmGLyNL1QJApt7ClTIeyVQj8i5VbWr7uZrbBGDI63fonjtG0yIRZnz7/serFK9SvEovvUq1Kl5pxflW7JEBF8XsqJ+53JBRPteN5S6Z31WXofHbqr35+ysoAMIw1eULhmUaK7e5Hi735J4+KdFFfmFEVhDTvOKwSv1/4syjPtt6CVVbY2pKDLY/3mALPJaOuL173t5qawvkk4IL1JCBh9JzztpJ+VihqolxKK/7y5apdFg4M353Z7XneZdkfhIzqmYzY/SJQ3YekH4Gpv9B9bszvNBdrsBjNVaztdoqiV2nZejap5OaWT0rwOFf/uKdj+5p39g7RldIw6nzoQv1g9KcoJ/01dF/f+LqN0qCWFc2w79ydf/kf7elG8M14haoXNMFItUS1facmdmVH1P3RXMt84Ik5S8Rd+ckqPvccVhxW5qQ8rieSejN0Ua0/rscOcxRLVXWLTynRHGRrOoMn8JxPlmTrRxCr4ZqYHrC9pLB2eAdwrUl/B4mdEHQN4vwVE011ssheLRQnvpI46260TWjT2Woa8JQXiPQumkCF0ZYB+6bWDUloogOl1/X3FKu/pOf+Cid5MqHicEc5ZMaJ8yXZlAuuPP44n6+ej9twc+3kbK5sYt3d9ejh8nwevRw/+l6JLU9WjyoENIwzy90CdiJquRVSm6SizbGZ/Ws9qBKo3oJhPTPv4dzyKBe8SWmyaNyfspyDGU9Ls3MW14qja5qf027rfNWqRee6yFG/72WXi4ytVHdYn+gbJNiXqWLNG2lwFo+l/2jhGae5bgqs3eIIL609qCa2HupiGyttG6tBn4Y3wyvh38MHyaj+8+jh/Hw7uH+9tN0JLsoF5cA49GzjHIrda2ydWxUodXZyEYjxVkkxmo1pir5+svhdHh9+/7h9/HHq4mWU4d5LsdWDxgawcjI1nofxiQvGi2V3GwafkfqEOqGOy2UOW2TRPPGjlYhQcYWMQa5fG05YZDfgDy34VCK22YTa2VA011JNjGU2HK8fKyFeClXypbyvG+Gf5N66dub4XR8+TCcTkc3d9OJ6bgfTe//eLgaXQ//eLhRjUrlbKCxem4dy939+HL88f3D3fXw40N96SYPo4/Di+vRlZbGnwDGl5TMkdwms2GOT6Bpa6heTGt5KuWjPhLzZPau1WABiekoD6V8NNtiHj8Rg9iwVHFotuOOURVUQBbD5JHQJwzTRXkxavAxf03X+u2VeqXcubqFshQR6ULib22uvtK4mItUNlS4omzgNS6TuH16ez+aBA7DdI6no5uHu+EfN6OP03bv3f3t1afLaY0+aw2Kta2mZUJAzpdUUR6J2ceWPsNCDM0+owf7ROTGEs+Amp7JjtAbW4OLWYak5ofOXSqmsZf9e6u5Ns5YjaXS5hOZKyQIU6uTV2//DFllgWwd2Rf0LHEARqWdvn5snLbuqifiPBuko9tss5RuMZvQfK7gRLeWuOQLelYLkbRSexhieAMIWMC0XDKwCaEy/FLCi6wW3i2866jBmihR9/huvOnx3g2jQnP3zlIGKE6+SZiMFbmBbGSTvp9cP/lPU/rDUC48PMGyXuk7RrP3mM6UthY18W3mIEjl5eJo8Qzays2KrT/fUWYDkbFsl29SOktt+jOnw5eAwfSDf75hPjTyTpF3irxT5J0i7xR5p8g7Rd4p8k6dvFMdBYcydA7y3GfIG8jOB9Xp8lCKDpM5ldbqHJIhUx6L8k8TeyD/rEA9AUQ+y78KxvSZLes3UN0XZu1Oc4q1D16enyM5zjM7kOcPqq8V/zUiK8QoMbdzmOfmU8M8v8NAzCnLjFskBuvP5sMKTjv3qu/JVBNhEEPA4Xmir7ZvPmbIQzmk6dgi2Zl7PUapgtVf0j5SP1XAXT6bFCGSBsk0B5aiWD3XppSSWapou/HILd0Qp/RaJj9Qqlz1085t/+FXW61UFUY+T2e+Jaq+hxQIIE1UTY/tmbZ+KatWAvC/F1BN/Q4qNPWFIUWDVPMlJWnpHqMabvPqL+OG2FDUJ7TQEbkMIPLvBSx0IOF/m780pC6g0NFOecGUJ8x/mzmoYVcwV+Y1BjOqNqvIOdxg7/3pd6PaiTnC0IugdYe7esfsIx8kQ2KDJEiltfJ//MU8TDW/XM2F6+GrChM9qf1qn8/JzKq2l0kS7TWXqY6OGU3kgPqKN45c/7zTUnfML1dflaTzvGBelCj7HmSf+22LSNd0uQyo1O0beYbjfbZ228Yo15GYnm/Wne5Hl4BXYFRBVAOCVKvHTfzw36tjC8uKiM3v6I4WQ4HXFwyQtCJA9wWRIXOq0UgR6/JBx9WYh/CJ9jMFN4p4Joecq5x35xnYJvTi8lLK0ZNP9++Gl6OH6/H7D9OHLyP5n2SvdO909Lfpw83448Pl7cfp/XAyNSpJIoYsU94l98OPVw+Xt9e39w/T299HHydV4/vr2y8Pkw/Dq9svyjUImBpqZeiRevfF8PL3q/vbu/rH8ognZeIOJcQJBrip6CGhnqEV1HOoguzsRvPbRqsBJ900gQmVIaVr3SfxqPRSkvKQCsBkEKvMe9dFhggw5nXBUK4WISWqcYqo5DuFNdnbeSjCO57NqZxNHc+3pIJ6ya/p6aA5noC5O5RYnh8ymBOsoGdcjpTWXf5XenzK+YMVnNJrNGOaZe4IQ3wz066nzKAOhTovckyBlyRUYx7MGHcZUtc7/ng9/jh6uBhORv/jLw8Xf0xHpRb409317fCqavqk3nADxZKm1WO9SP1coV6tpM0LsdGb6A2vw+E5z+Up6nRjPs7zwXRv4D9dyClb7uHfYanXqtvKKXqBSD0qCwFl63eU6ewunSfxZldRUwWT08DLHpV9jXRPprmKtWjmRfgIn5pNnpustZR1kihp4CufwrHAVdYBX4Svzh1VviR8bD/Loi3aTwRIhBddV33tpF4gCSzDP1UDkN7Ya51ct/NQTnOONWsN+KN3crrDnZnny1NZvFH/x2tr9Kz6S4NGJxzYcrR/BaI0lW8QE972WqzI7hTRc+l/6hfwVP+D6W86qqeI6gS6Z/rhXg3ThpdN7Eo11si81XPtJGs1lWuqm4zxtGr4IsP6yzusMypUf9S/9++mZJaqIXJrzRx49ag6FfSDgoc2nEFjouKVcy5g1psrb16aW43FTLvsljtpSclyScbrV/1dOv2aB5p7Q/Xjgb71A7XJLOYBGot5t8+7/XgPDQujfF2ktsI4GKhns8fyb2PnlX+WXjvy79JyK/9uZmkYX460Y8298nRJVIY9pS2+LcRM2g4naEGUydJzUpPpp48Ptx+v/3i4Ht+Mp8Pp+PajxIsFI/eyrJBKacqfvNrncjJSUNQS7BwtZG40+UNut6RVUwr14dibEIYhs1SZtFdloloCXs4KA+05dDuXnktp1Yx0s3wDlV3aux9KabjcBgZNEA5Ts5LTNyE6ASCU2daqjeUatd8UGq1zKO4RWaiaMOpJRS6o73L1wTJsQD1UYQPmycCvaSwht+KWOhnACJkRMk8DMq3kYM/nyRL40hkMntDzg+prpmEEWCps1ZutiNyyvTqLsqEmVPWzIYCmQU82r31CWkOr9ZQ9Ugoh7VZf+rMfcIV2lJeEkPMUAYa+hfJoDsywB3tYJ8a5qgeGeyq1gGuU0t+yQrcIwOtvZYRV4+Z3BrD9QEurlqXKL5xLf42ysG9zRWrEQzWiQ4tzI0de0SfiaMNU6535+aX98kZf5WbabCyqocpGbfygVINh23TyCt3yiPKxrGq4AtgE7TtvT8386gTC+hWO6rUxTQthE43zSq4zR4koGByTO/2HbNLo2lSUe1dgzMs8ADmDK0QLrccoXTi0DHhVT4tD+Gj+m9IWSi7N9BI76ynxR2RwbRnkrXFveVerLbTub9UWBvgIGREy/H49IdxX9bmQ8B7SuQkNKP8sGcPy+YYSpD03Gy313pcd07oadt2oZE3FmVybOQyTpGAgWVtNX9xUgk6z+q35pmS5FlYmxUZz7U3tseHQamrWO0wC8bLNvE/KzEVe+tCmaeMzpbm50VyrUNt7V9bKvoFCM3MSXis/RT8vmrVfz4Kz1ADZnqhXeyVZP6kZk/l2ifSVTR61IkJCobejIWiX/5cLrWphtLbE73AVwTSC6emBaU1faQhATU8zZ45AokjhBEiVsIxc0lVsqmddE6bBQ+rGxpgJJJyy6rEBcFajDn7xiNYC5h+Q9CZfO23Vdxqsp3Ih1NPXT2bu3RIyzC+Nf6JKeWt9EwolM/vOs3k4Hr4m7vux9r12zZfiojf7h+lpOOWPhtfTDw/TP+6U9d08fvo4VtFmH9RPGhuuGy+K5FE5rerHMomN9WRCd3SLuwN1e+llq5/sk8diacK09INywDUtX27vf7/9NH0YXk7Hn8fTsZq7TIGn0+SZv5QHt55z+7Q8R2I2qPyjLmziLrF0yvXiOLCC9Tw6AijiKZ3mKVUntMifN9eiwgV3yia8z5+vaFKU6X/z5zuKyj/lAswYReEkHgL5HVLBi4iYd+nyPrr+jJUHXXfeoTIzt6LqdeEFVYfkfa6qKJS/No+qfMlcVUugN3VgmWBGHOuWTH/aXaiVUenjuazHtkVaxc/D8fXwYnw9nv7xcD36PLqeNDT4Uvk+vCuHyGtx+/FhrMKerfb70fvxZHr/R1MHpfzfVSiI4jldZx2ro2RGR/c348lEfmIyHU4/TdT185G6tNYIrO16aa2xHlVd3B13dxztc15GagU00FV/I+8gqqYpg+0ZcqJmb+dzGalYyiL2o8G7pskSS5wIljtEFvcq0XsVmqr0GamSR/6uStGWYyf6IxOT1F3fODtW9aLgKjuvCU+TcaAmFtJ9KkkCenbfZbcLWIZ9l2n1kDL2wFwV7VZ7ZHZDRZVioCII0f/xP4kiADrsXerL1aPZBrWUC5n3Aaat9lZkc1YJOdr2I0cqFZMWVGrTtd6fMOaM5//Tnb9z9hhnG3Hie0hkeLgK7ygTJ9ht1Qle42yc6VzUOsLQoYvSM0q7Lz2XjJN+x19L02j9SqWTNG/YCL9vcA11uBE5T1XJl3PgzZRLyYPufwCo22y09QpviS4y0/h92TwiCw1M2yy/xQq//kTjjrTs3zoDftBAbLobHoo6YUOdIqWR1aKZ0AHxoRXiW7EPtZOoTFwC0ymtM0N038o3MWtnxhKd//qkMtRv5hN1JZvbv/1R17MZJip8tk4HJSva0BToV1Rrks2S2mgtrpvQnEpguAMMZLyE2IvJ+OH+djqcjh7GH6ej+8/Da51O53J4N738MHwYTS6H18qZ5eHy9koxiJcgF8kSjHgCMKjSTKm2KVJyiwF4mWK9zIZhNZVTrZtKebVusdJJlU1TyWtqvxOrUQYtcaeJVobws8GY3MBMqZIUzRpflQlDqo4GUadMY+eb0XQ4GU9HDx9Gw6vRvdKXzZBMtaMkaeNd9FGFI9kr+EinKIOsfLxVJyn/ub0f/8foYfTx6u52/HGqgI3zR7i+xJRU5WNlSbBhnjO6ApV30v3oang5VdlubIbFTkZbt9Y5iM1fVZ25yUgz+he3nz5emWo8D5PL2zuVK2f8/uPo6mH8cTIdfrwcPYz+dlcvvNo77Wppt9Rp5Fsb7G6sKV7KWh2G9ZnQBAHcSGX9Zfy3h8no42Q8HX8ePfw++mNSNaq1/OvD5Pbd9GH8cTx9mNyNLjULVd6TikuRbc5d0W3W2ZUY+At6vpUNVzQDShgHXAaXyxkrFeUwXck5p4Y5u2P0eV3xfk6rzqbP7aY7DouUlus2PeamUnYFBFDf0P5h7mW1Wz4xeQFmHE10HVVqwGRWIJyGLr/q9ENPoi9umaq6yg5TVuOogNvoyNICYL0/Q2tKulyT3MYJhjDXuLNcubVmxN8hxoWsM7L+gp5NhjPEpaoaqTK0DCry9VHXTLR6dNESxF34GT3niBmeVvfo4KiqkKNKd3AF1mOSwmcbi+v3KXWJxh3/zsrn1idkh7pIuhougylIxAVN19XDJaWPCE6EYZp1Yw0F+tmQaV0B16BPaDBngM5FqhGpRqQakWpEqhGpRpBquBSDr0ly/nc64yHhSBa1cClHfQFqFZYuT1Rq2GQDoWSd0YJ/Rlyqh8ZWRLLszvN2Cy6rxBpUJVvl/P5KZ+7TOxVNa3+t7DDJ7zxdxv2u0TJM0+Do1leU37s95zICrvxVjRq9nVV9D9WrLiK3nsq/dT0m7ysbXc4LVV96sW48mgnfEnhraqhdFoxTdgcWGo6qFvP9KxhcUrPL/r6+sNZuWQ0SjK0J6KxRZobWL3S7/ki7/ZMKpLXb30PhnabTbs9Rq1bLTIQSH4bax6k1X5nAzAYM7nzN02t/s8ws6wCOKS5r+ctLuvBEILP+dOagj+sGCiCTcX3+F92qA1zKr5fV9JzphYbYczQlAuvrrPfau7nNLvs9skKQvdJFfRDS90LfoBDvGjFRxEQRE0VMdGxM5GAhaaQ6V/HvuyAhz3WU4gESkDcuYt3s3JjAPXC3Wvcox6L2q+1m+9UTJKy/pgzw5bC06zeG8XcIi/LcVUPpxJRU8y7dhMoH7c0qn2Q4n3p9nczXfLsb78cdP/COu5aQjiweu2x2mdijfhimqank22rT6W+8XdBtHWUA4XaLO6i0iVotFbowDddgBt33GGGvbrhbUuJpcT9Vh8dYbQzJhLWtb3IHmpw2F57KvvKsraaJ9hGvqKZp95DeqsehfIpgebvey3wdnna1U/4eGdJr5tUG/G167LepLvWxRofG4r6FNnqqHyX2BlRpeurnRbVUFa9cr6+MUy7vgLlZzWc9SxV41Ph1Yc/IumfqL7XCO5m0L2CEjFcvXr149Y5w9ZxrN5NaM7LYUaq0PCdGRJSwckHp4wRT4dxI2QjTkeXBpVukPtqkOjdtFYiah2GqU2IDrFSibp8QMlkZSSxe2HSZTXCutul6R1nWGi9jOZ2GMmrLaTReCRcAGz1qq8v3QbkbrYbWBz+jFFJpk1FlmJrboGSKte/tpU9d3eLcdLfNvelln3XTyybrprewq4JvM9Bz9auetrxr7BSeH1U9bXzh7XoPhXVyob5We6uAvNPcRjDldrREyLrD/onUp6ME5YCIj/T/b+/dlhtHkkTBX4HppZRTonKq+jJzVDtrRkmUkjO6sEkqa3r3tCmDQJCMEQigcJGSNdZj5yPON+yHnS9Zc/e4I0BSWZnZVdN4kQj3QEQgLh4efq3tdB6KxLiRV1oUKNieh2m9pDZRCCe/LMSVa4x7twTlBC/n+Y9M1ECOWnfPeM2TJg1Ps7ufZxiNLtgFH+Vw/WhWzROVJqgwY2gUXebBOdkVzBrmizwDdYvQIptAGWdBSDx84HBZ85KyDCkFnlsAdn4AI5VRLhGRyAsMoEUa2yvOA6/bJfagfxRZgunHLXSLhihEU9X5JtwnRDlJhCTmkol0q1XFFrwp29Uo4JRlK3eSrsRHPaEO4l3elMEGLDZKQm7ERtQjVqbb7pHHMjeGCoWKhAYA4wu0IUYMqaB5xt3q7jHDj3N0ScyEraSa0IZpClEF+hYaIWcbuEuUarjkdiwYg4UYAhanaYic3MGB9mcS5QJrtlySYKwL7hxMGl1yXod2p1RUGsB7Vorw8lBUKNBX6+BTdMQ6yByQOc0UmOiPfVC6GKsm4vOC5I5QoVPNw9gvqU9ybikKaDFShgA7RvULyV/pUHxm6TnPw0pPGca6KjdWQfug1s+GuCY8dhd1wimchilgncxWuA1nYlb6HHYeJOez0scuKo2d/fpe5NqiJeXgVifHQrLI6jCUjwqrWWQL/5NzQmpBUfsI8FCmKKxy6a3unowkUnKPQx2D1aqm0p8+VN5DFkjzsJqBN8Pyqrtzz8T3THzPxPdMfM/E90x8z8T3THzPxPdMfM/E/7qZeIeBx2iMr+Dex//+eDmaD8c3j+Pb4fVIGmXfjGdzAxAfkQTPyGdRVA9ZJX7mCRq1ELF8kT+ByIUvFr+Sfjl9Atv0/PA+Xbwb3t2NbpS9/dV4dEMRICRcA1CrtGZZxtPKCuEmqprypiKDb2Hejy9H948Xw+mlqYNg+hE+nkDX0+Hk3Z9uHh+mNx1sOVZv/bxgZWI/Us8siGV8Z56vpAu7AlqnMD1n7YqssxOfJ+4rJp+3hpgs1jGjqFeq9zHVfpE/85LOTghHwGjwLJ5jxWv1ivpJIezoJVGBXTpPVBlRTZiwnmTHcshmQ32TsClnCRmpq87+yBdTvmwq9FpJrZlUOjfqcQimHm/ct56t6aHf5muf7e+c8ZhWszNfL9YwV9azOrK2eVM3C07TlXRszH4T9Jvg720TOBugFPEabUaA4zx4H0zHF+8wzSPkfcTUAjMdo8SEYhdxXlnxpvBZeevhwx054hDXNBUxONTVMqN8vUnH1bwUz0JGDZmkTGT4mnJuwQfpiVIAFtxt5rkqU5oK7595iVciCc+reT5Rb3SQhn5k6pDlKtj/vUJAik5017yelHnSOEYeiNFCDevpYp1LTzwD03GiFFjW5z3OVPIuG+iIVQ7jrIZJIl9GeubJ8MKSQP2FLaFe+9u1UC+ICg6Xx+/BYwaW4Xm5NbdzB2RdDDUcbphM3S0pIriWypohNQ8WObchpkUJBbrOjX256r6zcF241Ts1eXWOYecMpF2mciW3CmpfYBXMurriTz0GAfGgWSm+eDC0hsRHXF7VFZ5GIKErjTAOMRaAbsAdjRMytHI8jH6JuSsTT81SCUUmbCujpMf2wjO5ufXWks/2tkrsBUlnLcZ6r1mar97r0KYrvThVrFRnN4Kbo6xT+YN03E42avXRYafJFMUwgequWZrSHEqAYkDko9mEhbUK1YVVD7kCqKk0N1qLRphUMHKLjBNzh/UKVuoLKTrOVt9Y7SYbewL9O+ye62JPZHsi2xPZnsj2RPbzEVmHwPI437xOyZ8kc7im1fuoFDP64lJqwc3zjci42dU2xC2Jq2HKSX2lmlrzWMVnNk9ejWQ3LXEhzTPlhN5VgqTlUl0RKnBfJhDL0UaM4nzTdnUCqEtJEGI0R/BoVBJgv94a4GteX9Iu2tGva74HG+gyiGKcl3ztKxTA9zCLBcOlGCgCCeqVxoZyowfdIR31jwMCNYBxXXBQpDmSDpJlon0l4ed5s+WlMd9A2FWTLkWaGuWRD3VXC2J3gCx92o2JKrKjhPkMp1QHeGLRIoVzVF8EAWpjSIACgxQmSyyAyk3hDYk9eRb4R1GvrXHxpgyLVJrNIZsTnGCzdnWYPtMP+i0Rvk+qi/JMDZqUlSHDmSk64akB849HWHkgOTKf3F6MtpUBfVbA/EAh2oemavpPDbNsllxcpZDuAXqRN0WezXOZ1UQSRoZ01AWV8Vo8c7XAY5bGDUYTcUqRTk8XcghdCwAui97rbdqmoW6lgZ1Eh7b/stT9hYbcJHORza/CZIwwAZDqkqhGm6LeWpWZqPo0a1d5uRBJwnUMgbRN2BR0GyBWEhfaLBtWPiF8iAJTCWnXId2lkNuwCRvYqd1SivDSWf/avZTWSHu2SnfdtwtU1rolNWLH8DbhpaoxfvndTsQ929CzDT3b0LMNPdvQsw0929CzDWG2wdUi8gTPzl8cbkoD3LOxHYeqrlm8HqbpnG8KVFE7WzeEtjcw4VGdHHhPwp0XVOxEp/g5qyjzRdDS3rNuqzq5ojSF5LQ6dKSJCKWCbU3l8OpMt+3gUbuLjkkLagWL2vNWm7PxigSk1uESHU3v/6RXfcnuD0B7Z1rNYFJX/c1CWwUWy6cGr3LsmoOBp+442INAeFtLMA+xIaTwEM9QZ9iCQAwLaq1ND62sL+H/AcXUKbSjqBpm52O8MshU768Kitm8kwqyu+MNmKFDenmTr0S2G7+7AlqPlaR5OwrC+TJJWXZIryaluhiF8UqnQDJupx4vVhjEVB1nD9MblycyUIfd0gsMfnmGthLqeos8TG8cbu49SwUGpZDU0G84iPcNrcGTi0x14xBV2Hvz7Y+x/hjrj7H+GOuPsf4Y++0cY65zd5qvXnV6naf56oLVfJVrr+A0XzlOxfrZOx/SfGU7E6f5aq8j8WXJlvUkr0K2LRaubd3ShVRg79Ey9xhtFjyxjE9AahquDIxl/K5pmCvbfOJtqNUGWbYYQ3LTQ/hlW8LkVa29BrHjonbtXCgWGU2QCHr96q8J2JzYuLapSvidQPGW9Q2dCeHZbOFMxDOUUym3Q3vuYncFaAmSDVlZEyetR3LpJEbTAdYbzSIV1dou95M7gApiRkYbdciHkj/z0mmqCvS4yaxmG/eT9zKa/S7td2m/S39lu9TZoU0F0tPXbNHbreF6IWL2pMyXAp2rE1EVKdtKVQ8ItVVRkYlasLTqIBN/i044Hcj4y6DkKWcVf+WdOMvyJov5xsocYCDaM9aHVxUPFLeXOcjjHVzH0P1meu6eCzKUxGDJefKqbl9xnkDnnkW9vclXZhUAwnE+B4BRasKTtPW0vNEBanV9xWv1Vtd4/2Z67pqgYxqrV/b5cnQ1fLiZP05HlCS+s3N670l1uO6Jr+OUaiWjySVCa1WZ2q8j9WNxPc+tEk2GMA3psLn/b/7BbhaUjKXbWsSvIACXkMNXbDjIZ8pn9DxDVZ2OLU8/LvKMAlVpCNxYxUdMRIyh5oeqbcNeaW5NxfGhhHkyPs8GlG/xbZ7wFLaAOasxq93wbnjz5/n4YvY4HYHTHWSGuxxigjX1KvZTpWezq/OfVWgtB2imQoHfs7ShVG9lrblM/VnQx0kuDI2U8FvOqqZ0qKfEeJJIAwZ+xU0PIysB10BWpoJXtc4GfEnZ0/hyCXbTz/z/oejXGF/C/eaVNxEGBBMs3xNynq8go9uWMg+3egRr0am9MnnKahJl6ScVDAcBtyLJxGpdP9SxCTjhTXRXBp9+7fZr97exdp11K7JF/vEXR+WHXN6WXNiGSBnxpOTPgr9YVmw6nrwu6l8Rw2UCseI1tgrZxWH77SBxBuFeNxGqHhyPI9vTyESKGic69rs9DGgLo+pahT/GBIY3X7BXFtHP2K98xtxzQVCSn3jNXpfkR2a/DE7f7sxhv3QMwzmuKHaFU9ABmVCg5kbgFDAf5ICtLqZW/0A+4BR7bdTUfuC/zsA7g74q86Z45f0d0zHzf81Fdg1vy175R3hViVU2zVN+kEOuXVMA3haEBhAIsn4O45jMsetSWFIFxGF4FEsyiUD4pECVdqw+C1BJTs0mqNipPLXfnvG6lsHTFMiSyppnFbdDAQPV+0MehlKQEP25sJT3zFU3DcY+2N8cEJ9Sb/0LKPRhT7NkX9xd+0PGOhYRiVbbQ+HAjTlwx4KldNayAX1FVqsoMcuMThf18z9UPSqann4IjbRi7WiU1JP8Xrx2B0dKm6Haw4N3cqfLjflg98ladbuZk54A9ASgJwB/PwQgECBkEOepdJJ/bbCQoELOxmz9Z7XlVKwRBfez/KapvYbNs6U0NEBrPxlg5SdT0wg3/5oG22nW5D1C4YJ51QwylFotjMXsamGUzImmuxNKmGYh2yEubpmwh0cCPRWsypUW/LI20tJZ0jxhilLrWVUde4NipVuzQCv7862YFNZq+cn7UicChKO/bLze7k/e2i/3frn/t13urosxmicevrxH7yHQ4Gw+nD/MRiA4RvvGqYqFryWscxE/cc/8tgIhad1lDlw9B9k3qt/14/XsX1EUrbW+CLJmFp9d61aq07fRQKg0tjDewQisWd1UFsA2l8EBRD9XGxD2XSac5SR7zWvqnwgY1wQ+/RoW5RWLuUqqgAB0AnZyayho4G0YaOvRnig7VYaawhAjJz/DbtGa3XH2nOtISaY1qs4KokQAy9eNzF0IbNWHkVn1aNpQXDhqNcR6GemHUFUUUl29lJg1huEvEy2Lx41hPO7w0Y34j6BRltyKNBW6jFp59FBNGBIR7i1CfL5lBdkycbnIytqt68c1l9RA9VD91BNswfS6yiCEVSp+1t/lAobaysefagWn6lBeBOEB1JDUok75BcXOJSJDDXQEL+gpS09ZesrSU5ZfSlm8zAZ0wX2dWxjZNCGPpvaHB1RClDaZkG4+mMrbxV/laZq/YAWVF+KjHfljG0Kgzoxcxgl9nuZxK7/XjlLtEB7274s8y+zrgoYaSy4CWURNfq5tQCSFCu69wRZtScjWtNdK0OVJirQYx+flw/Idywk+wJi3RlbKcfSALGC89JMdJ8F71Anblzi1ugwYr7mTrQMiKBNO/SQqKooKHwkDSdBFvtk0GdEjlAY5gK4pbsuBmgw/xymNYK/PduQA87idpc2qM2tIv7f6vdXvrc+wt5x9FWP8kNftK4o5omQx8HsWa99FCSh47OU6JERAIaBkM4DegQgJbNoYFNa0wXuUA7JvodUX6JeLMOIWq7uWKEU+rlTHjLyERt4IRRAbJn/9NP0ap8lVQvJMvNbwYzgdDx/vp+PrMZhL49N0NLyZj29Hj8PJ5PFydPU4vlSo2fhy9Di6uhpdzB9llp0QanbzcK3gD3fjq/Ho8nE4m41n8+HdXFa3yEvwRhBVzTJlhHHNM176N9VhKdhMJHyE5ogAUG/p/IwUR0DaQ0riRivqljJ3BMy8PKixzbSh4Joiy1s92mnrRcgrkfKHAmz+zW3Nx1gvXTUZxY8maxP7UduwXo/uxqPHh8nN/fDycXbxbnQ7QlPYTPCLNdMxpa5d+66A+Y1XwkPNmtUKPdnJhcS6bQaQ1qtoAI/7xR54GbCJTmp80LGypXm8C5yUOeTZKWV6pnFW1RARO1Fwu0U9MSbEogKRVk8+aSkCxUT37Pz/1Ij4acqLFJUOD9fXo9kclit6EMxkVqcZzxJZmxkPC2jrMdwhOjo5shaRRV3Y7g2AMdUEa691ptd6hZfD2JrKcdICWY1blMcx7Iu9dWkyK9q7bmmtSWp55S89BKi1vWzbGlqWVR5GGQ57ywt5mtYKFzCDZBHMqtYQSpamvXIwtFlGu9WsmA29JUMYyieqvVBv4tNPevFgrLIsaW9ShTE9qfzNhNf5UqxWEJCt1fEGx27OIAo9SSgaM31ycvfYofRHQH8E9EdAfwT0R8DfyRHgkP+CEjoOCohfc/gJgHbaWwh6Q9E4HQ3DkEK7AtY3QQS1gX4rGGYa05AH0OAzYXDS5aIdPyFct8S0BVrmC8K4EBhc/OMA0goT3O6puh02Fe/oI4DNL0vzpB8t1ZWGqQCp2zjlHsrJ1QnQCS+fKuvRx095jLXFVk1VKPIGrNxN13fMaKzfi0pQhCFb2GVWhtYi2V8b+2tA+peEhnNF7Zhf6oXUW5sSFATo32ZSMQejPU2U9cb+YIo9635lB3vV769+f/X767PtL8+/D9XX1WtTOuhYc94SlupwL5+crSOXD1Ir4cRHUygMZegkmzNgO3S/RLiB+CXQiYcvYfO8Zl5bwbUzoQg0wW9RKd7w5bY+w2Dc9ZYlwdre5yKAYHp8aeWY8SucnlkZyGgSiQ0y2GdTfad/Zz//f0fz70ZlYcmK/+Jotn7QWrTwP4eq3aizNtweAgRZP6kgTyyQ0mM2WW1BlYeFKhpwPG6yug1xlRgECRzyodivgfitbgzWsMdmaI0RxrZjtp07SYPiNKhAjqLl60d3veY1jr7So/tO2R7SIw9+aY9OfGKYWJ23ocLWx0nIIdbDhzPadL4YyHBjLxCyPvNeDanrVQd2hLRtqb+cltoKuoAlQzvQqR3qQm2c9ib1MG11GyLI9MrpVQsb0Mg52HbVgfoCldhU0nQVZS+NZRhHdJP+OivSSfPhPVlz85Pcl03mtkK6QP3D+qTXeoz3xLcnvj3x7YlvT3y/PPF1CO8yLzfVL4toA/m4za+AzcweexZ8K3CtmDWLjcAo3v79QSP8Z/xVaytHqwavV2jSht1Geb9V30+6S9p/y9SyV/fZD+cvGU5/KJtX5Na8guLny6Ub+TmQesNF01O3ndemfa/HluxhtwDu3CCi5WuCUBNX2o2k3O5JOyzz/gDKfsBjqVuDhuUnmczzMjixqMAZAJ5kCfo8ngXBODkEVV+2Mi6xXizjqvYmh7wgwSUeykA+VP1eIbLdUY5NTGMMcikLk4M9DRVTGs8mM7Xt3bb9WuvX2pdYa+46Yz99tXRJ5L7kOr8Ns3gNERD1W5nY2OiiwNjyVgELMiwK+Gdxu8OiSCUnbEV1tOM7N4nITW3nLH5KyrwwTxCzJkv85+uSJYKbG5aCW4b65yzL1LnUlZMJDMV/avKaX/p5mmyAUdvQ74s81XcfgvwoEp1B6LxJn4bSn99prEmf6ObyJ9hOMCJZTTvGzh7VXcq5hzbpE/GYdjGX+e4o02ouWOaAxrTBDxXBOxncJKyha+ravhrR86zeprw78VXhXqcg7Wz7yV8ZAHfrVTsVKdB5I1I9iR7O/owwPQ7mHlJIdRkNIomtKnjsgtVF1X2Hpyl+gpV2e5F/dEf0Is0zLhOQ2jTXPis6irgxKBKOi//SiSHBikosUu41Cas98NiaAmtXyPNKx79oH2Xh0BiI616tQfxnlmnIq5Asv87tu7sn9Yjz0iKN5tmjgdK6PzQYPirkFJDVOnF1mzCEqtsxPpcc7ofyt9jwrDI771KgEZGZaQtgb63LPG426JGq1+prJDuJqPMy5VXlis4M3JeUeecNZin+zAnYsroEtbV31imwtixTLtpWZ9pnyuhjzbOEJ+R2LnkskVonDDzNrKxX5tlbOFd5Vl+xjUitNBQAm4mfrequx1f6hwUFm7Jy2wK4juAO7IZt88ZIu4ILtjOqzTX4anetyzbSDbtmn+Xv5rc3ptfqyRuZd5wlziH9jkN05V8kmLNYB/xpvageLzRnokH2zkCgAzBKVkhh734DgLysfzXfWLvqhi14qn5uuY5jitMEp4XpIcFCzz6VDmGsL78R2ZP5ZVUonxxBZvYkLTfcchbQHgz00tTnUUsg2XGa+ShfsAljdpcn3O5CVXu8U6uxXRxYEO83q0KiY9LFvPAoB4BsqnHLCtO/W+ZFCYTE5TxxNkgguVLmLuagMBaWE4Q1R3c1llokLoSR6T6sKXWXIyS3qQoWg01rtlLk+I7speUvb00AyFrB9wlHsu6SegX1Cf09CDbV78KMJv22jy6C2PQKpZo++zm5vHJHOhzCFzIerkpWrK03eWlJoAAgYlZVufshEuh/xyRlW8hG6Ky6SdqswMc1q5nI7FM2gMDbxG6sN+4Yf5+X9pqb5GlqflntySd79BBmja959slHCGN+OT1KU6cJMkwz/WiJDVoRwXaJFIgTs1l3BO/a96EC7VZ37nwP2b5ahAp4nfQ3uQMaZtULL61hdLDBe4hTIngZcUp4NxIHF7yWTHnaoaaZisXCvc21hEvTJpP27UgdJc4Z9a4irjkQ3qclQ6pg5TOYLYHtO2xUtfsknMKNapjLf+DJ6q6OcBE3zWlHEc9Q0qI3szUrrJNJP9pjBlRZTqwByHk0gHdw7/WBt6x84smwUvms2xj5aBDSUsuuZdKUK54A21pmLE23BjPlGdvYRecly6olL0sb+JAlfscesqLdzkOZOgfJ7InXsUVzIR2s92SRpNmGlTVeWV3Ox8AtmK0/nBW5SPWioQc7FLvi6GY1SKJcAk+w+UsX2Kf8hGhDrdnG37ZIaQ4STfeb5jK9iXrkH2v3yTtmAWQ/rpvNIjNWgvM8ttLYkXO2I+dwYSHf8CDLTzj3vhPQi7oFArX7BdptBMjmPsHWXqEW+BvRNRXZrEuSOCdB5CizcO9FwnPrpxlbnrrrhKfOUlh0ifYkLvytsSMv0QC/WOJIEjTAL9YSi/sFUoffloB2fzvE4e2CVZBomigBpjNNYDFosN/NV5kO9TL1Xqbey9R7mXovU+9l6r1MvZep9zL1Xqbey9R7mXovU+9l6r1MvZep9zL1Xqbey9R7mXovU+9l6r1Mfb9HWMKq9SJnZTKoeN0Ur/GKiJtKzi3+ntW8sH9fuCgdEA+9h9S7YSH/r6FTbijqNasHL3xxeE8gdhwxYRCEcc2sgGvWk4mWYwEhLIcqZwVyXLNahhiEnz/yhVIY2I8XMvTkmtVlnm+sn6rWa+60A8w9emvhRdIuqzFWPvf5FtkeCOlhddiKTpjD7clqXQYUsiCx23m5Lw0eduCa1fP8ibup4iv3adLKHn8pSh7XVlWi8kYqtb/Rf5YVblj5pGBTjoEJbdBDVhKwcsegK4Z5v3D6hXPAwgnl/RgsOU8GMM28PHz93C6fxzGKBm6Xz1Jcdbt8vstrO+j942PJK17fLp+neYP+W3OZvBb6PITgkvoL5E88wOxqqt1pS34j3Xe6nln4QVGqkJ3Vq7ZvluGVEBOh2A1OTH1u9Fu70DwvROwEnG1qE0z27n4+vhpfDCFM7ONkOroaTUd3F6PZ4/lwBoF5O5rzMNjGJV+KTMjxNGXl9dUAoG3ox5THogAxtNrKAJdH7UNR8fKgr014Kp5BEnW+xV6ojCLdHV+Fxke6AZqCVyDskB3EDXypGrrDhHUC1PhPyGZu9IBe4d4200zPsE3dLgBEt9vs/taOPdEvrH5hfY6F5Syqklc1a0r2qrSOIaMCVw+DifusQHM134TCEmSN+bUvbIEVLRN/BnyR/cAGfshskzQpa0LwUJRQEuaFUxHbuaLkQzvMgRwY5B7we5FroG9xYjP/pLumHnQoy5/sTuz1Te/n9Dc/p+4FoNwMalY9vXI2W3Ya+B1zqMj7Zu3tD0jzS9ltEJsscStey18/6eq0CAExHbeY3+BHeLsK+NBXdH+KL0A+ATJZsfPCyiWFNfrRj0woYfptqY5llUZnSQD1jTHFA6N+qk+eWsF09e+frPZ1gAKVTKCCgvRTZkHzv6GL7vQj5IyQG4U7L+tlnor8VRsAb8YmQ3wgVHWZ/weP6wBZtLB+FGsYHmvQJqprToJ5GyHrCUMlNUzdrqqoy1b/XBBGYTYtP0NkrWVXCPN+8A4ePGfgcgyrPSjKfIUSldcMH0RUp/fcEfjXXGSdCJ5YIhut/O8EyDi9E54lJk65QSsGH7Xb2KLz4KZYNvCrRivmCWCZIEpJtm4iGKFGDpeFWunBkPkpzVPBtqC7kHkufvLr1zA1B+El3s/Ur3SmnFlK8y1L6+0rsijQCxBeSMbfBnknAS+VjiIAsj5Iou6fQe2uTj4JdMZawqb8heo0oLlQcfZNf+zWDcJUCNTGqbFygVDn/stIP2C7B8wZrBpWJ9zfVAr6V5MBK329u1ve8TSxkE7ceBnvU+GUt0pov1nFWmyZxrQArv+LhdB8GaaJcKsgJazXb8Wl2YC0o/uGi7PGExM98BJ4ObuORgXoVLCdnG4/T7/KeXIVwHn2CVPzS3y9gn5YXW5ROzyYpEZJ9v+CbQomVlnVcjzqKNdyPuos5zsg+UU87yNpPeGXmrNVdb69EmntxdU97JUOX6ndr4Rdp0LvvKJHr+jJa3pw2Cge2tFDe3lwF3XBfSsg4EdGha5zltrOQ+1KWv5FgXZcFyMQWG9veV2SYPsr+x0R5zHctGKwv8ILx//EMDRob+oXCpqc+oU8q1MfTXRSWgfurgkW7W2eiKXYVzJozdpaYG0b3nARe7F9CRekAx2J8pilaOytHWv87sp16fvfdBbznHh27o8g/jPEmW+7wpBPRHiZhl0fmrQWam+iNkDd3HgCCjue0I7Zb0O+m6h1FTk8SLyz2JUseAXsk36ozC+11m2rxvCwhHEBo8gdU7joPpEdI8XQrtxbQJ2QOwtWmmkLfOWqvf7CUEOcfwrOl2bWAtXtvjL2nFvPufWcW8+59Zxbz7n1nFvPufWc26+Uc3O4tpVY1oMYpd5fN7iS8/BO7/7halXylR1XyQCs0EoG+G/C8a61MLQLqi44/dv56ixmKXN2k73hrFhNnUxnJTJeVbN4zZNGx6/pyB8idIge3EdOfBMH1HZPv4C1ntWTPBXx1soydy2WNQQAqtop6TSqnZvOQrVj0ChkIFmdQgX4D4P66kFpZhw8CtqQgyLZgIhcVDXqilpL08HaqySAMKFxSs4qPR7nLAXZvMvzhMt48Ww6yuyLk0POfMGZauE+Ne3fJwSy+RrMx1WTLkWa6gXcyhkXLuAyE/lFnpeJyFitdus1r4PD6cCdSiTUfQoypgrp8ZoKTAs5AMeYOUCLrWlRyCAPqbf8sChcp/NNYbkw62JtFtNF2bvhusyb4nyLgUGczfCpnFUWp03CbyEMRbbCal36Ns72b7KOMs4MdpbxTY70t59v3QTfrfApO0ruqHS0YSLdVZcs4FQBbDX/kiFRgDtNRbZq1G20IywKr2qetIhnC2zMloMo75xvlXFWVhe2deZTQQJbkWta4J0vOo1i8VbLKgiMWdaGdXplLBigSublV4VfKfOCl7XmM8wzTdj+e0SYafBRzr0BKm5Nvg+1G0LceRM/cRvQKuEMve2oEQzIYRcmrq7VpzazR+TV0eUTKDwMLZxroZ4lCoW71Yux4WG9iltYv+pPiv0B8TVSq8zXjbehF59FeVyE5/r3KwzU4YbTQGr5Lm/KCS9FrmNc5CUMayLq3WfrFwyz0RRwd+PJDQNqrTb6XGy43VMcmtQa7XkpVitedvEGV2n+Ys3dp4eN+H1r5flENAyVW8iiyruIr0XHW4DqoDAVsXM50pd6i59LXBaaLvLWU7qLBWjjcbOrC7/dcOWSGulb7NCI14ZX7gUBvSCgFwT0goBeENALAnpBQC8I6AUBvSCgFwT0goBeENALAnpBwH9fQYAjBKhEzQcbdMM/WAhwzTNwoucPBfAFD6VFsgIoy9+TcLcYM2yyzutcF7PQNmy3/elvqO9u/AURrwcxBXce0FF/+Adcjq6GDzfzx9vhvz8+TG7uh5eP53+ej2YQXUnEeUVdULFBbZC0mLVAyhe4tEB0WnRFjvit9NwLMVqzV4m48N6heVJ4sgUVGLVaRzEZZxDKSb0RsLKSmGonqh3nt10jWAiZjgmnXW0jpKrUoTCsEo1T8X7z7n7YDhg2Z8gWUuo3qPM8/ZpiVeWjCXHVnBFr4ewhGyYJAOe5KuK/6mO9l3cJc4MJ9SjQ506g2wUf5xhcd9v9E0cRrDKE9s24DR8KASVbr/vosBV4Z+s+2n2dFpBiD1ry5EmZL50MSgox5Svh5pf7agLozSbPgvMdkk13z8yuWXmNDPIrGzMzkfLE7buNcWd7pywxOCoO3DNz1kFtKcNd1/udxbzq3CuYKzP7NHndDQZVkO7jrcxDll+8J9/q8Ji3BVvuiKonSTDIOtkVeqkiQWmrQnrSVgWe8dobvPDrQQGr/pi25NRF2TeUTrkdML3hgQtgnXhILaGdfTqH9C6HCY12EMtdhNLg3GUXHEIf3dGKQraiLFg/w8vRRbV5jl0hHO6XS4wzZkmpWl9L0pfOUzqEbr8O8Ksy3wT3eVeR3Sb9rXXdBfezv+ykJQeJlw6QAkHQoQ5J0D5Jkb+eXiO1KTmvHe7mU6UoDxnbwdwEsG1+1mMIAjlFvBIBV4lWie5mJHuxoxlZYkczukR3M8Ss7GiFCuxoRBXobkMxPjsqMUXa1Ti8SygPjItvV+DuqB08YSc/yFzenSAuS26i51uQRYvF1QIrC7Di9qZP7VNXXYtsgIxoX7YolQb6tIfiL7bpSxNalC24XEUtOE18C2yxuU17fjTU6sarbGX6i11/sesvdv3Frr/Y9Re7/mLXX+z6i11/sesvdv3Frr/Y/bYudi0F5yC2grl/vWvdBatZmq8opbmzXXykf3PzkN7F7WJTddSpEK36DMKrC5g+E+o+XG2ojN9CuIzfWMmWFD+/oyEP32qkhfcasLmkcBPtEn4joRJeM9JELdyCg/Qr95BevfJMm/ByA8bPPi/TUcKr5KFMxc88CXfOQfqVe8hucUGa5i8cp9zqiIuDmWoji8LtUDDU27As2fYyj5uN2UwAmomf+dRwrgSrS80RDME2bq9w4ZosBaz0DpDu8Xw7y1hRrfO6HRjs0DfmPGNZDclH2oZrB9bjyyLarxzQO88Hh6Vxk7Jaja55nrAaDCptYUBAvgB0KCRz2OI12sVsfD8k1acLm+B6OCe9HIkdktDjfQHWV/ozfLD6X7luU1RInnQ+6H4ZKmzZibsw/GO/gYfysCiswVeTGZCNdBVs+2C5ExoY6K5SoRBxoVL7mtxbz/4qdo1EZ8l2peMs4R8DVUh4+4VbsQIjveSwnuws7YiwnC6HYComnCXlcvF4pepEj55FXLfwLRIKrme12HD3SbJp/gJV6FuGP0MYkfkYlVe9gzsJ4gNeacEzvIVrv7hv7XeWCjS0d+2HigUOzu5iexs99EP3VrS/ivA631MyUOkuJi1cJNTgTlaNyuzhxboLtavqZrqC+HYF3YxREO9WUHDwXXIPqEtelNy+Q17yqhaZDXBYnNeExNw5Q2HkhInSJnM7qmvTnCAzd1nmRZs6W1B7jJTJ+hdyBs2aDfkJqudnUeYZDK7HTYQwhpWw1BA/NSx1JzSoUSh4KULNaIRbh1Q3eOcIQJtSjhRSKetnm3UisNsgwmj6WoA2N0qUEI6r9ywVCQviaZgtQCUZRhNg0yEqzipsYVvBOXcQN8yH3HUJaiN3v0rYvWscknZ1t9jZ3qe6uJqMdbhZrJ9BBQdiguFrEWOtGXy+ERuhnXAB8Kcmr1kLGhTWUzIyb3nd8BWLtxd5qhbyjXji7tIGxc/wmYkUc3pB9bytGWoX8L1ivYOqpXXadR0K4v0GZMutiru6HOwpOjldszTV2omwxoe4SwqDPM1Tr/oQuqXzmaqE0W09kPMNdw04rVj34/sFpCa0lgbcNm9E9uQ+BY6QvZolB/b+ewWt43WITQ4g2gxbdyFH7dQuta8WrwJ/31sAm+DZpJR++5fbLtpKcKcuFGJ6HrwWzPAAPtTRfvjI6iAsnlp296hcU6/zUvysqVOgLo8EEPD+JVPaTwKgj47/BS3H5E55mbe6SQ22RwzWXcjTlmGUBPcJhcSWNk06aroLViradqyzjhIBbZ1Hj0DCHmTTDym+Uxk4FfH6gpy2DGCuzUBmApxRvTn1gJbgI4Txb5czka1SjsnI2xOL8QW0I9AsbZTaTn6NP+ZW2YCWr7Vt2/C9J3z7lVmDJNL+JIjFjCI8ewOTkPGGZ6t6bRFY+brz4JjezJ1fhtUKwaxOzPX1HmRULum1Ieq/9apxj9p1he4sFYrAvY8kh4rtraeriq4t31GiXcnuCva83LXYurCBFvZRJfIapR9wn7zP0q3DVndL79+LhMu9/oiyb/n7PM9TzuTrj5d61eLPDsEQ4tpSIQK3REKPxFvIh3u16llY60OY4FjGAelfB1jxLbGR9ukU4a0Kki5pTwdOdzRRt1XjQuhUvPKuEzKhrQNIA3ytBHvUXEJNmSLIMhUdrJBW1QbHtgwdII5j416waqXxN4uGBVt+lY1tr47t1bG9OrZXx/bq2F4d26tje3Vsr47t1bG9OrZXx/bq2F4d26tje3Vsr47t1bG9OrZXx/bq2F4d26tje3Vsr47t1bG9OrZXx/bq2M+hjnVUsRyEAIMNBPBHCv+1NLHk8RzM+t7COUovQkomZljXLF5bOqmmzjfk1iwd+fPSOYA7lFABJYudql49gTbLMEYKGrwdKmTwgqiRoqpLsWg6C1A2JUtTouAwazCoz5bsJVjDfSk006xgE9ZUXeV14oUwWufgcBJmGCyQoa53lX93F7pmtahqEVddcPQzF5rZVQXmsPKzwBCkIn7SAY6KvOJGTyX91enhmZe1tXLy2//YpF7CtI4yjqojL7aQAUGlx5jnlJvCqSdcxK2myWr1aYG8bRaqrWgxPQQuNbi7dhdsV7mjkl2vQbXqMwOvuujw6/ZIdVThFmlXE9DQ7al1R40deewsJZDhEi95DFRWPZgDv3I1NoGx9VGOWNsQDA8AEY68DfSagFsBetKNwRpQV+vVYPfGGfrPJlSuarHB5UuEGM0P7MELF3Ck3rLElUhrXnZWYKOd19uHxzWvVXO+jNLAPYHojoOqXceOol61atXcsqIQ2cqvqoXueN0XGwfXqQP3K5L0tvWChnsvyC2C+AxEJS3ZdLuAV8UNW/C09Z6CeoUnKYv5OocwXv/Gt23Zso/2Xm/HXcP0TKGEcG2k9+pDBVeLnd0JFrGrgXxN53mjWZN39Sb9ZcJwQm+p69LSyM2bFy7hCOKzmq90nDSYCPUzS0S2AmmnT7NAuqtPuJY8OHwsehhfuKxZlnZ9BtWq0Eb5NZpOt16zUa2wd+YeeJPnT02xa7d2lHBE0azYJefOMy6vo/cFz/ZJkY3EuKm45NT8PrVwrhgYmEolb9Vr1eG+23DQEnbh/AvyJGUiM/KbScmfBX8J0qYWzg1bh0hXckxsb5AAeji3IR/nNOQmF5OPIluZbTjlcZ7FAsV6rdBfbaQrbSRm235ytviUV6H4WTbYk17yLJnnd2i/lfGy8qTCPtqvtYX2Rb/pMx/GdcNSYN1CNKW70G4xK2+qMC/lYZwAd+o2Yuf1kwMdSvlnUH5avjmvarD6a6XzM4jQK63cgAAM1hHKBOglLLRAwevgLF/W9gExaxZVXIoFRfsy9Nhtv7OQ3R9z/ZLPec1Sn67rQHnBaQpgHQGdQidu9DbiJQJi1CD74aPassag/LHzYA/i2xXMRR0MYCfh7guVe8vcyRoeULpduRXfMFCZg+1+WbcwTnZU4pSyK5MCdg5MCmg73WENYEMvAyr4HiGcV3gplqHsuYSgGWwn5Axg7Ze1vJekoVqqaUmOVlxmpbLkRivDNcsnI5pYeawiJLEKcVlSZin/GU5FApy9V7hnNkDo+INfdCCZX1bPSn1K0INH3AkYJNaIaiqu/luVVpKgWRH+9Mc37e10dHL07K8GCyb15s9mel/rh9ILP3vhZy/87IWfvfCzF372ws9e+NkLP3vhZy/87IWfvfCzF372ws9e+NkLP3vhZy/87IWf/x2En47gk8k77QBFlvBJX0v0KRu+oHaDQC+Bm4cNUnivTCBNW7CEnfDrYOGo3fNXSRk+v4tt+DrufWnrSt3Cfw7nySwu0eVoZ+s7SrmefAGWfp8DnJ8kbmdHOkoclBeunX9tZ1OznSO+amOB8HWNk8rqFIBXwZoURQjrP3oy0JOBngz8vZEBhwR8deXnoRtMRhpR3Zuz1R50KE6Jgw4EO7Hw77/fU//77/e0AAV+fQmPr1jMF3n+NBEflQiSxPuSEuT5KuVDlQpZPmYs3Zr7qweUafnAI9PGz9nqlmVs5dZsoK3XgK0dbRYqv7Lc7r84WbE9JW2pp4NtSTA9rCtwNKg2ZMJKtrFdzoPEq0U15mwVVKDP2SqoO5+zVfDgm4unuTPFdBvt3B4htP2xf2bgD3fLwfWW6dudNwRJYAfIW5gzjni/8dt7ralGT6d6OtXTqZ5O/crolHud0uLIV16kxj4teh3Vsn9f5NlSrJqyFcA1dAXLM6jSWg0EnJT5s0jgBpbXzO4FIIPAGa9hvCob9gDratZsNkwx5AQ38RVa3fNQ+KfVO1PI6kVCMTFYasGKAsOY8sQZpXB4WwO1bcaGVcVrE8jWnhH16GxrkEdLGz2dtNgxzPOfndnaibQ7a0qE9qRBB7emQdOX+itAo/37t0Z4k63h4Su5RofnvQvdmnuztwK3eg95wIUeVFO0LtpwvDhZdf4o6jWGMnHJ9O6iraDAu4r6MYZp5qzCrdoCJcKV2GNxMR92ijMSE1nG3i+AmGWiKHjthd91S0ng6GMBYnCRZ9dl3hTG8s9adm67NqplL2ij9hn8KcO1cbLX5M8uuqvanRUFw+3CfL6iW3vK720gFIHYLbG/0VAzk5KLrKohmFqys7VwwUCjXQXbbSfn22FRjJP2+dFlhBiSAxHGkgZZAF1+ndvU27Vo5Cnb2kvc33ABJrvru6RRox2GyArIurPKnXMlw6jun6tdBUOBWQ+YKyo5q1l6eL07S7uWnhue2WFNXxuHVZ/TFCbVNUUhomuVaejwt4lEXlIgwNaH7CvrmEuiAXvKq8oNNGfgflA2RzpcCtu63zxXX/wuNvpYgyoyoRCj7csY/UYTpRl3w6YiBqLu+OyXqqapG4yIw1FMSWsVxatKMp1BBEuu2NOiqaX9l00cPRvNQ17x5N+HveJaK9I7B+y33UWDPTlkW0ipPXI5kgkPSfVdvF/BalXyFSwBpK/I/XkGr4EirWZCRTqtfOUdIV7zDes28HVLdVbWXcHOl55FFYiH2y6xq3pVwmvmvtx/8u4q9jn0LjXfuFv4lpcrbp9fCLh/5mUpEme1AR86bTKIPP+el60xeNV7e9U30EkMQ0hBqywyFMJM2DbNmf2hMjzre57m9HFdPPLugnY/79iGVwWLuUwWIKG5MleFX3LF3CccSbdLzhXUJ+Y2WaO7lumDOX3um7po6qEbm1XGw5yImFVV7oUpJWArnmfKdFTQyo4RGiQsMMqmD3YZ+/6rBAFdN1F5sO5a+F1FWjo2a36cXeojAwq8rpn1sR33uO5iO9vqur9hOeIl7bsXgr1hCDTQLtGqOzyj1VVe+rl89hdvd2BP8UN7c3DFfpW50eQ6gqYpGj1tRO09DttBYm2tbPksYo7rGCiUMXhFOEWt1bD6PSsF8C6VXSkQJcllGYBkrwwAnBBaQBQkJsNKMRRtjHw0CI9XJVAJOUw+QkBKlqZbg5nyjG3somh+uORlaQMfssTv2ENWtNt5KFOHBHpBX1N3rGc1pHZySRPB5i9dYJ9mEcKHaibPokTzUqy0xF4+dFEliXbFVBLYvlRKRFA6Fcb5oiliqX0hnw8NWMF20UMZWdWlBDtQobCsu+itDLy6n4/dVTAUyvUAHvahWJUs4VoSBS6HdJvD+O2XooINmASRo8zCKZNX09D5duzG1A0XCRrO+kVCVrcdg9RG72khWHtLrspTdxPx1Nkni50SRVmgJSQEi11HrKZNeHeCXLmUiQ7bWqHxfqmWLhVeLVpfEwC120t2yCvQrOaQa55VcEdNrauVhLZvQsrs2Xu9dZEgeMe1wNgltxE/eZxIAOQshZ92HL970HTsawtlpxtNB5lqdhADy4J5DxD24WuNBHoFXK+A6xVwvQKuV8D1CrheAdcr4HoFXK+A6xVwvQKuV8D1CrheAdcr4HoFXK+A6xVwvQKuV8D1CrheAdcr4HoFXK+A6xVwn66Ac5RvL3n5tEzzl1eq3ihuEoSItFQwXmTzQITyMjG/DLsBT9WNcCWfP8qOBYSiBtUWrQVf81HeTTT4jgP3w2kqTNsDVGNa3p8Wxg1CuYJQdO386nbIjDXTYPhpXUHg0Ro7P5BGuDs+yo3VVzdFcEQ8jPOSzfPQqRaswkfZdSio+yQ/NXYmXpMwC7Ay8yXdRPUH6s1lFXiVhrrfJP0m6TfJjlNkIVII1Teo2cevFowqbJGArJ6Su32yKpuqGX3km6JWlbW12MFSLZVzRylf7Uy79pZlDUvn7KNkuAKq83C5tt68q5zfsNszxwagSZ/8Cny8lB3s7093Qb9DO0o6TSvGft80dZRr9bCznKNsbdHr4DgHCHJgJA9I1fCFlLR8T5e7inxqBJKvEj+NJs4JM0wgNKoYJy5ZCGnrrnm9c1iC+C+iiKB4Ibs2VUcJN6qIiw5Dg+ZQfqGgUZRfyLN98tFBS6fWJ7TtlMJFbHIQVJrskijvHtquIjtDervHu6Ql7pKjAXAXXkBy5BYI8AZ+gbaUKjzzYVyggR2LfNF1pCnpSvjckdgOGquZl0C/kyApImYmAE1D20Jd10OIJjCkGhxo4FU3h54x6hmjnjHqGaOeMeoZo54x6hmjv1fGyGGKstzs+FeKVCGBxeU2YxsRox2lL1Rt49rn0pplGU8rJ82TAhrC1K7Jhtwvg8kELYobp00CKhxKo1Hp/Fftem/zhUyYZKy6TCasO2uwLMgWzb2dFerAHVMtRDiDQKDA6+6b9jo0yY5CCZCs93B6t3vD2Per4O9wFTgroOL5q+a9NYn/xrcvuVKXQJonMEo0w2+0Bk4ngaeY8bwVwLWNDn2igw6kC9tRs4uCiqCv1vJxy4Vad1EHVBHqISTbiTGV4Y6++oWCvWkXcrUkOdkl60cZsJX0JJbVxixtrAxzFMC1bI23AbYBfk9ee1Hv12K/Fv9Ga9FZh3G+IWeVgxfj+c399ePF/e3t6G4+exxOJo/jy6OTo+vp/cNkFkD8QulSklxQF6ecxS2zrRDanoawTjyL13lpxnyYCcfvtyj0D4zobZW0IOA5464/X9duntEuznGTTURuVdvU67w8Z8mKV22IGbZzFj8lZV6Yp1WZN1niP1+XDBiA2oePNzok+TlwHuVuuVyax08/NXltkZXzNF+pAVda4fM8f3Iydp7npb4y0u+LPNVCD4L8KJJ6XflesLLqluTIwXY42WqsL8aipMr2GmmLpgJlWs0Ey/iNvRNJ51dYuFblDs6vFKLMl8qIS7JsrdpDhVrNhAu123tWnTnfkq9YoLlWmUBrgTJ+Yyo/bMeguehWEz7aqx1lJSCgsVZnU9e2RIieZ/U25VWnjUzhSpHAOKb95G9IgDv18jTFZ8X98/hpkX90uwee3LjzbFCasqISi5T7ZVObjunHVkes7SdHynkgahMAkbSstiWIEg/d1NvAw9g3HAfm2K0HUa7gSBUJycUkzjHmd2HB8u9EkvAsAAqWJvv/AChcWm4u7wXju2BDgjV4bgU+NPiOJ+vzSJTrme2RL8vaS++fvCljruem2T0zIGpzAA/Zpj1kChisIiiLlLiACNLBOEETKPmwI3SWa8td3haI/jqLGz5YNtHO5KYwXgAEB9P2lA9RNgcT0FEE6dnXVE1cNFWdb3R2kEse53b4E/Ps8UC098ypwd23CDkGaWsAExqPHYf7Ja8oaSr9rp0LT8s5XaCPnCVqMQCbSF/mcYNL2xDqV+lXHH7xS6hbsrpkWcw9plWBR8slj23NjNWZQDodob4Rfl068BlSAv/Zm+6rPKuv2EakW+vlPKtn4meruuvxlf5hQcHovNy2AK73rwO7Ydu8MSqg0HqxwZ5JqYTP1yVnie9j7CA7alRIp16H1343v70xH6SevEF7x1niMMzvuFitVQ0dTGIng/ipmi5zF8Cf1ovq8UJfNTTI3ikIdAAZ+b6pLRSG0pLuoBDhwh2FlA4GMjlnq1Yh5axwweI1DwKveX2+9bR/5pc3a3gZN0Thhm25Ipa0LIG9M6NIsNCzz52FMNbsyBzO8pdVoXxyEkZlTxPKXe2Ws4D2hAE3qU6u860+/FvHTLhcy8y6XaSlJw0V8e24UUk8yavwQRwsYTMCUADm6i5P+KWjxrWk3zd5XngUFEA29QSpufHTZ4UrtQE2MLRNHbjrZ58I7fSf2Q7/mbtvJSDAene66lvxBPbdFPfeEvffEO90zjM1xFYfAWTtknsOB6L8XZivpt/2AU4Qm8Dfg5zAv71NLq/ciZjojQK/NLBkq5IVa1sgWnLNp0kQLzeisniEScq2CxY/OSM2SZuVyJC9FJnNQAQQKNXYjfXGa5ILoGb2wpvkaWp+We3JJ3uMEGaNonn2qUwIY345PUpTp4lSxM5pteNGvus2TlYAoS3tYNr6/zBv3WFUMFU548hpfJfssKOEKzUuUkGuHG3E1tx+dtybOowUpmKxcKUOUxGvnbvzjCL2SD41KDpes8KicfrRrnb2xOvY2gezNK+9J2v9zDasrFH84J5mBm7BXMfzXKS6l/RgFa0VJ+F0DX/b0sI5eA67LSPIeuQfa/fJozgAsh/XzWaRmSvhPI/N6w/Tsf6hDD/wrhpa2x6mberh0BYHFDDs2FGPzwNVFve/q4RmgKzNLEO+8KT76mWKyNrGSQciyIy9FwnPrZ9mdPERtSWNVTyvLcd+1hLfg3mKL2Ne+DJeCQsIZCXGYpYlJHSsaVRLSikxLjkD2xhW81VeCjKUsQRYH2sLQj/lyUlOxASyBAXa0MaSqGuY/+zzO9oYxzyveB16oBvL0cnR2hkRsM2xGq4kqM2dSUSL4To6ObJ2AzyFx7fwR/Anm6KDDospelaGyDHY/2RuS4232V5EsuL1qxWwveKrV3z1iq9e8dUrvnrFV6/46hVfveKrV3z1iq9e8dUrvnrFV6/46hVfveKrV3z1iq9e8dUrvnrFV6/46hVfveKrV3z95hRffz3xdFv/ecQ083f2n0cbFIWAdusv0I+VqGrgPGZNuWQxl3AQLpD7rSi51pmJHP9VxWZS5kkTk47snVSxXeSldVEHDRzLkjIXCbwDocVTfskLfOUszks+KClFyYA5LxWleGbxFl4iRp6yfJz9v+YzzqKbvK4Fj1iWRFPxzKMS4geUUZ5FCYf0AYiJ8xQyIEVZXq9FtvohYtEHmukP0cP0JhJVtITzgidRKp7gnW2U12teRvfzYcQgw+QpDWjGeVLd4ZiggO7orC4bDl9YFI8CzjlnYGFNHnWNLo6iGZuToxe+OOoc8h2jURQDaPosglVfRXmWbqN6LaqIFcU3VZS/ZNECOht9i9+zkbxzdPxMtO5EorNms+AlPGVJyiORnEQlTzmEN01OooqXzzzKMeD/m2hZ5ptIZIOizGNeVRENZxX9n//1v6MsV4Mv5G2cl9UJgJuKlxG0faLmQs0NT6K8jECaU21EXfPkNLqD8mzFo6ouoeTbqKQxSQYlZ1WeRcPJGIrVPBJ1lPBULHA3ptsoyXkV3d3PI1DhVjwaX14N3w7vLqf348vH8eVb2Ljp2/vZQA7BWcQSkE7g1Lc6H615yaOXvEmTiGhTxKKlyFa8LEqRwV4esCwZ1CWLQSkYycmKlnleYwmajzJ/oZ5leR3F+TMMdpVH9ZrV0YKnebaqIpFFLKp4weBLIr2Bt9GLqNeRqGk+Ex6njA6kzpW5ZGmFSxPUro8lyC4Tb3nGIDxLkcTDjxmlhSRaau4J4GPaVAQ1RYBCzvjKpqQSCY8Fa/B8L4kJMJWR62qzAWRVM+Ql8b+puSK+Cf5ZwGZRxaVY8Bv+jF1+YXW8vqNsffh7JmuTD3nxmXaeJHa4Fme4FKGO/zx64tujs6O72a2Iy7xY5xnH8PKXHPqpbn1Vs1rxCrQjZ0dTnIII54Omc5s3ZbTR758e/fUvJzupKryKxHHD4q/cLbyYp2ZY4nxzyooi5acVj5tS1NtT2jinWNNAQCh/SR/dI6CwbqBIzRFzasCn09HF/fTycfhwOb7fdxZYq/ssGr7HIaJP4mX0NkIJhHo+jYbUWITbJbLbiY4TuLqUeVOdRPJEenMa0aswuhEDIlACdcoikdWwcTnQ2KhiWbLIP0bHS5HyCFZqDbv3zQ+ayqWcPfMKX5DUpckguaCpgmdJFYn954z1uY8Lc9v9LOf5V1hL0csaxojhUTDAjc+TqKJtDgcxcEDPcsnBqTYBwgKdexibizvwtWb2cYX0u8bdNSehElf30xGYLN1dPs5G0/fji9Gh5R5vxxfT+8m7+7uOVyb3s/nj3f18fDW+GM7H93czoKjLvOQ0ZTKdE8Swwf6bgYJyFWFpLiBh0tHZkchPldHWKbCJp9bWvvLrPepo6+jMbumvh9MSa3OdEUsVWrFVtGHbCK49ImvU4jZv8uSHSNzP4FW51XG5mAIRMCLIoyrChEWZvWPMd0VymGi9sagA5qWCS0dkBzjaR0MWrIzzhD9WMZlDfVnaccE2vGR7dtNDxZOoziPoUvSnaQT9q3BcZGerU5q8V22Ii+HtaDrEdcgZ5DR11pd6Yc3K5IWV/DTGnkqmBfhMxUPtG86K//73HmfFmnp9k69E9l4wDNQ0YVUlY7bYuPu6sCGQE0Zl9DNwkkrCwy2XP6ZyjvRjxWuvCc22wYOMKKdef89LiM+EjSOJErwy8UotYAtAIgkLoGUHCnCNCRXVk8yEoB6pH7Bbm0yZYzznT/zz8mo7DoNzmq1X3EoX5g2LdOh7C4h+FFX7z6OaaM7dbEJFL/xikC8LLURTkYHJCK6ikyN1dZBLDmQIJdxcsD/dtU2o1LAoruR4MrgsQGcP6AsuTGks+uV79JeTI7j6zdiS11scLClYAjox4WUFRSNBwuJEVke0oYzGl3iroMqPzo6kLW20YRlb4fwfwScfViN+N9z45IfvrhZXpnNO0Io4i0CCDNydyCT/BiQejolvqohjG8dAwgq5L+GGm2d8AKsKKdybyDCR31QRLU08HXiWnMBpEq+jktdNmVWSZYpEchqRlQRcJw0DCYwpr6JVTnXCjZLqieo8x2s53RlJurFsSpRvoBwA1kll9QMumGq/Rus8TaJjIJknUbHO67w6iVJpWPx//tf/92bvYSPyDa9LEVc+hXxmIgUxN8kNl6LcfKUL2xWL+fjywBOpyUD+b4YZTl6oIBpf7r2unZtvf/XZ9TAbPZ6P729H8+n4Ar51J4lyG+rmcEzBM/UVUVWzbWVJzKQIRxO4AS4SntXlFq9NPNk757AyefkIJ40363Tl/+wisV87Nf7itC9ApGgSBjAJZxGLZFVwxzIytzqPAA+7HTp0Gg2TJCLyKM+F6G0EweUisZQMbL2OCsmhGNoEZEbdZEHlh+Rks1c0FbOUZwkrfbEUMh1KAURCf/UUlkzBJRFLVB0yJxlfFiv5OlTmQn5b9SNQ5vss3Q5jEJXuoTswARy/BCYH75RqlE7xiGvVf9Wk6UFVz9b5C04VLRy3ctloRxufp+bd1FI1duBN/Yt9/2G39kJuWhS9l6SOOFWVVZ98gx9ePl4Mb0Z3l8Np+J7943Q8H5kyew6G2B7T7mNBFTuLcIf8m6ijY7i3fvdP3xJjMcAb8Nto2aRpxHCw30RvIzUH6srSlq9Z3xN9G7mdD0ncBnLz8uTNKXWmwgPKOp88yZnSGewhOfJoilmatjiRrHqhmxSxJChv3ykEr+kOA7YOTaHUiFjzyVG+XGJlJY+5eOYzscpYis//QcYuIfJU8fq2IRv6itdTka2Ae6OnWcHZE1ZZYV1S5k0PSuitnqTkXAKVzFySxl+ZPHzO0icgcgXPi5SHxYVJg7ofBvs0PYSEpNXnlvR9Yjf/dvLyFklQYrQB0oZYD9JOgpBWZ9F3Z9+BUjGlKwsJr0BtFf3IF9P5xWk0X3N7GKq65GwDLEbBeTmo8wH8R5orSB9HwjXS9jVFmjP4vdjibraUXcCDihpe4hnclBKsowJJVyJKHteg4qS7EylqC1bWIhYFy+ro+HJ+MxvMpvPJm9OjE/UttENglo5nl5OIf4zRVOkNNAL1DCeTb6qoJNMUQf1ANaXXt29Iyel1GK5JoNcDfTIo9eInXsM38iwpwNjtNPpxzWoOY6cIF+SAhxsW9AYHVVTRC1zcgJYpDWIiqjjNq6bk0aappNbwB3wnZvS+USp8U+HVLMXBQiOEOBpP1EUXZGh6NGbzhzsi6iKLZjUch9+dRrh/QJyZgbq8Yhs+yHgNGUmxyjyL1KJ75tHdcI7Qq+H4BlDVdkN3i7fUsxJKgK59/jC9A00y2+pPXIqPHNQdamlUDSQS4tDrkqP6usyb1Rq/7YOIOUh0eVl9iGI7oXxUpXm9n+KjVM9XfBYgDwS2WsRPlul2UYLqlStLZJBH/mn61TjGV0hKa/bE5YU8ElklEq4WlsvCTaDIjViUrNweWDUMiaoa9fxI7VKqQ8phD+HPPtfXvIqYqun+JDr6+QTGu4krvHamBTI4RdVbtByrImbfz/DqfX9382e4f8lFm0Qb0GnCttEUFO5xZKFR/oB7KMqzgeSX5Guq1kopJfdunFQUi5y1jAbWrJoTCwL2JvIncon4+0ubu+hunUVggYZE7MT6XBJfeMYlbx3LEmBtyVamLsVqJWlyta1qvgFpXQ06HFCNRMff/fHbNz9ortYysCFVzzKPG1jCx9/947dvDjVZ2XsrJqe+qm1LFGBHYbN2MpWsjNdfi3jJTu/Z8Fcio7OcJYniqAyNUV++n9FTQ3QgLfr8nfvUK6I8jBd5/vSLLon3d/PhxXy29wJoD9SOTSWLnSHxP35DLJxqEu9bx3lTD/Kltvi6n2FZXr75IaKVdvxGXvvUcMubYvhWKD+gw+ziEt2b4prG3w9bL6s//lF8jKaj2XyvFBoMMx6pu96ukvsH2QDkLPNye5WXIwz98Zn2jl6gBywa6Gl1SrpmTsTrFMjOACmsWTLdcwk1DOhbz0hpjecFHieS0ZETEx0/jBXvM8EXorfRbHj1BolowcsBGrSsSpbV0n7PIW7Woozw/STC7qOlTJwXwNCFDGX2UkCsxZuolBSJ1plDtrN039Vn0Gcld+4406DxZFiIypfhaqHwUBWajC8kGvxI52LDq5ptCvqESm7v353/4fvT70hAHJjG6gyGbVDFeWHPHohYaSJcyf2xEdsDd/zWn7I3dGFz+hM6oWD3S+YkiRY8Bls+aKx+C5Mgpb5gugDWkcmwBhMFOfMu80Y0U+BJKqunL6azUpEFs45w4cnPVcJktuJ7F8wqT/LaXzA5SyZMno5oxopnYpZ8NV3zNfbqFarmlX6he3tjmTMc4RUI5nm2EhkH0llFo7v5eDq6+XPY/llzfkrF45vnsoyl21rE9KRufnyFeoB8qaxPcRWVXF6cSw4GKgGNEShf4AocWmB1rhYYXYz1ghF1xdNlVHKMvBSxRd7U+J0FXB+PKxiuE1BAYKdEnr0BAeAzTyvnzigVmWC4x8ptVHMguqDAkvdNvbrxA+iaD7/ghowDjJbSBYufqjMaZunaQC+n4hmWDvDqDAULPHk7m44HhcgynkSnP4tCW5SzWh1rJHsG1Q1PSIw0KXMQCir/plNYso+l9EJ4hOaP5Z61RA3T0dXDbDSDMcTKwBCIxU9YI4wWizZgAQvzXK3Z93/4YzSbjqNEAJsDCwOEENuIlRuU8b6Vm/DtC1+8kebIooLPhDFhWdRkz2AsArRcjUFMqctOI9heVZTioGY48BfDi3cjKaPJyy1s+0GSv2TwZaDsPQHBC+Ypo5Mdddog62yKNzQN2r3HzMW30bAoohkolqLvT/9w+v2ZmR5tgMVEFl1fzpC1U7pz+BDwGipKiDOAOncYThA4rEWBpBM5f5jgbxbbqAChLWyKb9B0G0V6JGDh0t86mgteDv4Q/essgs3BSzUY0fHvTn93+vHNCS6KDAzPUxELEFTBuVFA+wXRCVh9gk5NNF5HUVK+KcDEi24tGRiQiqw+i5CEwFJeLkUsWKpppryORysGav/z+/m7aDCAAA0DXAwwJYNBwep1tOBr4GsTUcEEPALsMVdZ1uSM82iR5zV0ENYjiZpgiGx6vqC9BDXD6IOlFt6EhpeXsBZFfRqNl4j6B6jsH3Ch4fGx4VHG4ViE90UtLeklXQChKYbdUJQMnRHM5MtmK/EzP4tATQtDhFNCxVmSVNF//dP30e05XoMzvN4BLZF+DMf/9Yffn/4ToGVV30b/9d0fT/8ZILMXsaxxjE+XJdtwmNM3+In/9f339BK4x0ZqCUdvo//64z+f/h4QIqtqiNOAcjE1Lces3Pzx94Pnf2Y4OD9Ew+uJUomeVmBOADON4rgEhl69B6O52TAggG/kEhVVlBf1QKDQDT8IlqeoQD6mDuV8ibYeIGXL8myQF7RmkfrJrwUxQUayzr2K+zWEfIp9Djll2890ZL7qnvN+fD4dzkf7usxZ2rIyOEiR85MMExO8OrNn/mNePoHl3de5P7/D75itWbnf8pgldCOtal5UJ9Gas7KOwOL8JOIZL1e0SV+o/1KGB5naeUStoKUlKEOxFrS4hquHIzekkmSut0+vyp6JQugWt3mDFA0U99CY3fi+63PCydG/PKWpfRK1nuwdvBZV/no7G2qELtXDi/n4Peon76fj0ezx/GF6N7oM62Ht9y7Hs/nwrsuY2i45+vfR9GI8O6Dku9FwOn/EDbC37Gw+msx2FiPF6yd8H7140AdSUf2Ffzk5kitLdNt1y1dp8qzIBFNG1jN8KBfnkYrGaYx0BDIjZH5KDSh3WDPTH1UL8On3d4+zd/c/Pk5G09vxbAY26jDA4/u74Q2QGTSa3NfJ94K/mI7izrD6WLNyxWsN+Hwfa4bbEkRbczCbw3J5Px7Zn/f4MBtew6QdMlSnVOiUMKfhqv7ieAO3X1Y34tN3o+HN/J091DjAfyGyK5TUaXO6yvNVyk9VPawoKjlQGN9jj3hrbXb9Z7AGkzTEWINJ66+/iXHulagz1y73S/Vmp3GaPDHgQFnqHlkWahIvTdcsIzXQcDoNefa5+yqW339QzW3pCS2MM3nmKIMWsFmR7V5IJeex5MDenMpT6roRcMHLePSH0+9Of4cdvMZFiqzgN5VfQ5GnIt5Gi7xegyBkgU4cwIZRH0iHAxISljzzshaIy8uo4imqo0V9Qp4OUIFhipUGWFaPJr1AnOg+YtcNIjHgl61eqnrgfup113IdhV5t1M0NX7vIsypHvUap7omd9P4fbLmNNtv5AThwtMuBDtM1q17zilulK31XJR0/mcZw/Ahg3sFtn8TEUcIzwUBhbSYyw3uFkhC8rDkaAMAgKLHmC4M6l6CZwfvNhwAD+CEis58q+pBBNJAa8BlPPuC3k6IHVQHYBU66n6gSmyLdarvHLIe7Y5GSah3u6aabFodjZqN2iliXenkThbU9vsQuWPKbOa/qqxSipdHlqNrLx4uNeARS2vb3vS8wEGjclCVpvNd5pWJU54D70vo76NsA+nYWQXswymTCobg5XD3PoOC03MtfRB2vo2NYpLx8A9sH6jl7+zZasyzJl0sl01JKF9oa+iT4wfFfR/EGGWOwJ54RhwxkFuxI2KbaK28UrPCvHEVxLvD+Tvbs0sXZ4XNBsJ2Jaj0HZaQO9QCLk21fWJpeoHGDBCk+F58eMnqTJ9a70io4XpNoU/28ykt07zEZ3EuKw/PV5J7j4eQ1Uk8YzN3r+YlvQ5roRFSwp7/4klXNn0WyRbmT82xQxSXnWaRK4CpEwYhSR7+ILMlf3qKiGBa8pLwgHADnYkZWQ098W9Vl/sRJ9Kp13PgEau6zCOlFBhKyfEFrGS1pgNYBL5GckDQGvOaxc+PbUbTgJAVEoe3dnogLPwQ0PJ+ivgbh6CPTLLAzYxwDcyn7RDLK/rzL0vEZvpvNmgLPiRvxrNhrZD73XyitN7avv1YG3GG73WYn0/vb+/nosu0/u2vbwDgP1BDu3D5oFPYIBBE8l3bLStC1gIgO/R1ibJmiKdEgSglNfmp4A/1CdpkeQGKpHkYZ/rOVdE1R8c+lUd29/lTaA/c7jdOtspm1IWg3CxGE9LkYFhpB3/NsmCT690XKWamfbpSWEh7ulJ5yhTHW5EDQo1yYHfKnX01wC5VD4sc1z8bZQ8X3G3RJczH5opY1ZZyVC2CdIGzdfgsPnbziMAsPVfzzde/kaw3Cp1qSmHX+SWYkw4uL0Wz2eDW+Gz3e3BPNCdMoWfLifjidWWUPtZJLc4sR8ezk9lA4ew10H8+q2FlkLxy4GWQDkQ1ATv42UuBb9P0o8aAGZ8xqnStz1GOz/0kHYMIgKBf/vKmkkTMaEuNufOPbt4RGFnRYwWHcF3aE7lGkkGnKZzC8NXQLr49wx5uNJkOQFdq3u7PogxoZK5jBh9MDDgvvnS8cIeALbq/AJh6mL2xbDbPk0OZkpA9sscybWoV50CrrSl2hzYgdGr/EWeGHUMOTINgKe9qTy18pudxV9nx48W8y3sru8r8ggMvuijvCt/xy+t4dAcas/f3xX1TZU7W2XhMARjf0qefNp8qTJ6SvtTbv31SUa/XDkrPKTkbWNL5S1ho4Mc6UQLCKhjc/Dv88Q8fhvBQ/0wZHbx4lG0SFvT6rPrTC43wLN2p1xAai4Rx3LooTvBr/i6r6RAXOAV25vMpDfqEoz1Y5nKV2FB3t5XM/G2xYlpABpXbHQdciGJ4pDkZUxWVTg4yGV/YHaJK25uxZpNszGSPCumXj2Q5rXhqCZDFYq5Dl5pJBFOpI7kPiBaQUAG2zzGiQM88xP12dRt+U1pG1hoiWdGKR0pgkFgJtSr6RRjcsWoHmWMTRN2ID7t2yMP9YgLYmi/k3p9HoYwECZCbltSjGAMndi6jQcMpb7o6dVdurQZkwMOMThtuBTI/KDUvBD8iIJ95W2ywG6/3xErornjnJmZ84h2VUojEQDCk6h1lGkXj7HSSLiDwFSO6nPCfenESQW04Ovb/N35rNJAMggGQWZwFP/gxN4ojrGZBrUqRNa/YxWmiV+1jI6Ou+aEsanMhbqR3H1XFBzeiOqMItFiKGhTLOJvQDQGC+gY5N4D4HztK0Agj2LHJ5r1UWknRhvzTtV5w/yX/zvOWr+id5zwe3VepS9SSkEypdmVU4R+WMqu/STebDvpwk6NOjx1EKg1cLgH5JqLXR5Xj4OLkZ/hn4gtec17sOt43+ju6blLskzyxC9haioChppypAwcpkzEUZqlOFXFSPqN8zVErRbIfSVnKm0SgY+zBIMa4Z0D4kFk7QigWEaF2yJt3r+7fJA4KgtnHQMK1F3WB+hxWvZaKa3Q7gvLiQgjJQYsDzOwFC9u2M103xa5fq3OYHMP/4gZahEUX5QBLNU/5MU6ccn7MOM6LPdxeQPjgbiKYEpylefoPN7xYs0bfPeIZpv/7y+nvAfPx+PP/zI/hcX9+NXyUKqbDVUxhOlLPKQAEu03yy9/0FKyGMzye+Lcfw9eIYuZs+E3P8G7Fv+GVmCDRkJJiihRcdX9xOeELzF30bXdwC9cGnN04gSFqhSlx1PP/zZISGXo8X9w9389E0ehshbDIdzWYP05F6vh1e343m44vHq/Ho5vLNqaxIqrRfF0vj5Ci03FFlrzwWwDfINYH97h+/xQ8hy2R0XkUj65qDPwiueuSt9SqWPgq0s4GdQ94W9jWI8KSNAGnhUZ2vVfLYOPHPCYeVy3VLVVQDx1syVC3Xa0YSmpc1WDfQMaatDSQtcSz7F1tHmEhcspnFM2XlQJYeH5CAH/9nRFvsLPpGVvpN9Nc3H6iHw5vZvXb5tW47GCIOo6whX2lIDWm5qR6lrgbH+mduDITxc0UGZh+bHMMDbDY5uOYQA57VMCz4e9Gs4IPvcmvc0ahdW8HDWMzEpklZDYHqSqpRzSqXiOo0ouCR1iGgaF+EhiAsjRTJwXn+YB+4x29OmVrvHzDwPuxxGfVcNS5nWT/T3aYG/wW8mxhHFvIPweUrz/AI7Ntx5cqOJ0ygWpQXUZ3XLCU5rz7BKfQCQ7dfqax9A8MoPT9Bl0tG2FjDbH4/Hak7BBZwHVfO2kud7icQHQObh+mKpbk93kYhWj7sFDIC0sYzXIb7Iz8MaVBErgUCrNobIReMjDNDxii01SmUEY5ilkf/kS9gNlkKLh9gZ47O9hBiNsnQpqSkNUaOJmgpAM2SNdE3lSWKHk7GJxhpg+zOuRqa0DEBV/cGrO+NmTzEJNSfDa+X6JGylMv1zalvqiR3pI7qTzdVWT91FBZYqTZwrbbEBzJR+mBZ2JwgPUJfM+kYIHcRBOVHHwIyHlEGTQu+zYEaB+if8i6BlpzBIfk/LD4XfNwxRm/ObMsyJc+o5IW48taS8o2CZUKLqoElHX33j1ECfoD3d9H83Si6HMEl4kQvLtkCo6BxP+gFKx3gIXgIWrXR6kSKy5SQQBnoJCq8pAodEEluN0JVfhVJD66lKFFPsdDsXXRs4Eiu32iPEwImFBUE47cwcCmCQDLGQCw4PmS5FX2oDNt9Fv1PvE8WZDb7P48+0JHO0hRvMSpaDNB3Gk7lC0nHO5z4g4pu+rgiFjkWhKgjkahfEcndnKH7o7nn2SNV8sjEvltKhrvgM4ZY2G/Hc59dYu+G4z33Rvs7zoBV4iXIjDqdEo/J1PIKroR0hMCdPIVggzJsIRq6IXEZjt/orCJwFWxNgFpQRLbUPBkPQ0f2RLOe5HkpiXglUp6BxGiJsW/stRKneePZM1peXbyKWYosTp17DuppulGNV9IOUib0ABGdyuHRShJiKRKN/ZCceNxKtzcRmA1e82w4jt5G13wjMhHdsSxHe7nhGCbtDZFNiC7EEzQbIq0k0kXL4nqTPon6bMUzJgb/8CEixj9KeAEZdLIYneEGC/bEtW8fuRUZkqpSMpLRU5JAWw2m31FXD3OboBQqSCaAycGQSPs2R8Gzx6ZMO20Yv4q5IjQyaMr0DM8H4v6l5JYCiRgxNtrGgI/doIrXfAPEpqph8G5msN6ltONPZP8+wyJVdAy2l6cFFH0DSmK5AFj0f0lD+f8bwhWKJRyVCwxFC6MtB0GafHFcZtAx5KRZ9g3kk4HFyiAGPfrkHYvsmZUCGObv/vDmNDoHa2O8DYAB5YDE8zs8xJR1TZEsvQkR1dAK5ftVJqVIlmiLB4IoUH9rz3ji2SAIF8qSijKvSWaknGrJ3JglPtHwphYYJosZsNyVj06odZlMKHo3vLuc0cF7f/FwO7qbR/P7aHh3P383mkJQMctbGlyujU0rfBGlqiKBcrkhY2UYweM3H/TRmkXSeQVcMiJytNARVyF9FdkcJmgPqCOMAQIPXApXpqkmpYVCOTZyMfiC4dFkp+KUiQ2WVMv2bZEsgfHBT6nR63YBbsno44zXS3T0J/k8Emc1J3i6C4p+rdQFxIyd0JejBYMV6OwlL+t1tGFwBTzRX/phkizB+eZDdHF/O7m/g5E+ViGygerAHR0Mi3VEtwWva3TQzSEw1N6FjVGY2jF3wLutO+4OOArOVXytryS9s0N6DZPk0NQK4KUnQ2ypyLImptcvixi2u+7DTBK+xFf9AnMBqnMg6zok7gq9QRF0TMYPL2rO5J0MtHLsXDfQzhcrUC1G0uIWk1+8keZKQOztBSeP9r2DZwUhOI12z7A6z/Jca+jw7IfQED/DpTdlkAop28KnWPWAw4Xk+o7H89vZ4H/84x//+XcU5wOixtrfhRzF83eG3aEvp5g10bdSgYD3O5xf+ErvepZn0Xe/+/bt9//j231sBCi+MELDI+n8fO/mhjI2gncc//UEJqeYcHlJQeF+JS5pqOeRqU7/pkJbGh08Gp7VANkmDUTKX+WOht9GQWzcyt7D6YH+WqjQL3U+sNdLg/2leCbV0FW02NaSXjzMRlM4sioeHTOKsCX3x4mtKn/OpRaNkkiwCEJhUVxAcOjRUq2SD6hJ4onmJkFFXGKkC4gp4ctZIFArq2s625UZBDAUKuSousJgTFW0TMC4PTJ2iLkBy4AhSmAmZHb302heio2rc6eYMZTSIifXBvJOLwrQ7TRoDiCH68y5k0keGPJvqFuyiZUEkT4w2oTW8uNYvqVYtqDTh++xxcQwcgOb22tN2gdJLT5YMhS6G5kITSoHHLJ0oo6moz89jKejWfQBl9gH+MgFt+LQyCQdyo2el8giAZ0T97OTaMNi+KevB8Du8YX0cquiD+ZWdup3+FR3FxeKjIqhBCyyP6fRWDJipSFmJyoGDHi9CWVkS31Gsbff1AfFcmYg75RCQgoMJXW80TFKkt6SlQHGk3pDPB6M6ofo2OwEOQwshVGWEXZVhDmc83bz4fmajS4epuP5n/UAQ8g4jNRMC+h2fDefYagbfAFX+jFwAtXb59+/rZqFUgm+Jd00FYNL4Rt5nYjXcPsBpQED5ThIs7M8227AXBhSIaNMW4l3fUxU5+CDBpLZBURTRn2KEj7TupKxfONUYKZq2MesJikGRgnBhITq6o7mL0vairb8k3hlHbYFdoyiOzndmWg4sFo16qKqGsxipu2OoIMozpZ3TYDhmQ4jiyd3pJRWIEyBvc5ZbUKVEpFiEJWkLpsKrwFNxuq6FIumNlGG9jPsTbUO5jMdpinobUxeU/0ErhqXSsdDqvxzlqyk4p+EXXOYjZ2JJuwaUPtv0tMHY4kAGW1SrnpRqUY/623B53NZUQ149izKPMPQxmdHMrCGzJV0gHkM7NGaD2xTjX3GMhOYE4ffPyTQx56+fgbfqz2a7UJ1+zNwbrSKnKQyfxMeifqhb90yi4zF2IQLvJalaSrMLgP/JSE7lhWPL9+4djvk1Yx7Z4tiAnyJ7hsgv7wSJQcHtRP9K2JplcsTy3AdcqBAcEZaDv6xLlnIV3GvDZ40e3sEmlPmvqiRcpGaxBCpygyPuxi+6otLumQHB7KDZyhTrOz03jLZvBTzyfIy6A/6iap39TlyQlrUDGjjYFlyHq2lNkdFqyf7XJ3Ih/jRTFUeCbJrTcGF9a7T5bqV0Pv2YTYnkSNKf86iD7JCuhJ/QC1wUShDyuMibVAyxBfNihzf3+gA8pTXu8LgCaQsXouioNMDXK9LFf5KnlApB498TK9ZVlFBEu1NxdNndf6BBIzrT8SEaTnyPxgHzQlqwGsp1ofLMEZMJ3IIF1OKZcbL/T7kKH/gjzLE5W71DxywtjPlZwx1uruPEI9qd9eoyFfoCqVBeUwEU2bkrTwuKKPAi7yXzOVLb9NA586iSmZHt1g+WY7SvOMVRDFaOgOCTIbBigK5Lp0vnmdlnqYnKmgnxDwvyWycIlWfRmOIRAEtYvsVmZ1QnAzgsBQNIx1vlltKJhlKj+xB9i/cgvN4vW/BxvkqEz/z+wx9M/DD7dzu4EOnMtngg85kI5+wHNIPtBD+jOKZz5bARgkhVYR9vLDSzRzPOhHXMiGvLV+d4fBNaYAOc8KiHAkQdJfMMbEGGVqZf6z32jxSk587Mc6v6/N/LfnpP5VvDAnX/hbZCClb+pcSgdHcnUX6az0vkapBz1pKZTHA2KOz+Ry5xdIsGTQca1L08xgoKwA6HCmMjq7dCoeNDhz7GEKiPr/I4TVr0nQn+cQ8E4+kyKtafh8ZeVGUfFnyaj1b52UdN18teddMlOLADVk2mZLO4XGDHCe8D0HkVbdP9+Vcp9EYyNE4i8JdQDEHSC0oAanORlkUEY1YJRWjyMxBDfsmumbVUxUIEUERSmKV9rpbCmCzYx0p3S5kCMzkK03eFAxCQBP6y1Iilqoal3Dr2j9jnb8owaSuU8m2wNgHby2JlaVN52Tce0rqD9xj7YRL5wyNP/7FJEzUvYmOD5oJKdqFHIsn0Y7RRRn+d/9kGQf9S8RUni+THMCYQ7YUix2Ga3t3CBiotKNcpdv7Z16SUxkK1Myj8uP54uw2du0MT4Q0b0pbBA8h4LKaRBHIZm/4JteOexy1IzBcoubtYE0P41aIpq8VNalpGQCmnPjhjMVPC0jh2TWonziIjTizIlhhc29VY5F0FzQjoZYWpH1x1dburd/NtHRhoubDWlVWRsi2SbMNDMLfitz/Qhf0/WYbL3wBX/ULQ1R0j5Ks/0wdOXyz4AkcQT/yBZijgGShkmIFsl2MWLkQNeq6VcB8iIcMFjOoyGbROZSDpaKsaI3xyw+kcmnqXOmg9ptkvYiPj6wQX5RpgTZiVq1FK4GOa/6Fdg48mecTtt189mTLB8Sc+xy6d+q6DIr4t+TFrwQI6UQwNbjs5Sc6Jqm3ZbDLdPCSlyl64Ww4mMkdQ4IqYDDekhjwbVEKcEUfFCnLKpTDVbyuUxJYgPJZ1ujm4aDZjOTK+QEUyEmUgKlYSlmCkE6Ln6kasgqeMMg0rAy/GQUzJwUymCqmjoxk3yGG63bN6rZd15STI4pm6rQzssK4Lsoa+qUPN9XlM+PaUcq2caAvUP5JqZExrKw/36TmRzMAssqr6B0MaaQk60b9X/0AVRhFOdEijjY+G0jasMK7H50IMSd6X6/5VllgGvO/g0hVkbIatKuH0avXjOpuIgaZ9Soce9lvCA3CtqAEx+wbGcV9W6b844ASmFC07aoGm3ADOTlaQfTPo6rA4AzQuVSssoGo+aYCv0t4UulEWYK+xGf6F4xBAgkL6P/bpUjTW/bxRwRCOgNwyTk6Uz9AYPNxoF7ZmILYzVWZv0BNqiywQ+XRGf2nveXEuTs6sx4C+IGqIFBqmaNmrt4W+apkxXqrMZiGEb8a8PxjPcTfJ0cLsFUpByVLRFNht8qMl1N6VGhojX4A5OOgWrMEv4p+6FZyGG6Mqa5+nRyxCiJSDJBhg5HHRwynrmSHtNAgKXfF67dgss/flnmtIp38PACm++PR2dHPY/yBucdq6lXaQJ9ASy/FmmdHa5EkFDohr4ReHyJ+Qh+NUiSDmm9ggYPWJW02GX02/nor/4OOvNmop5E00j7661//fyB8NLixhAgA"
|
|
4093
|
+
sha256: "c54c4867c4ceeb2712fe45fd349ca9fd8ab3254879549c7d437790ab15deb67a",
|
|
4094
|
+
data: "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"
|
|
4095
4095
|
};
|
|
4096
4096
|
}
|
|
4097
4097
|
});
|
|
@@ -4393,15 +4393,15 @@ function analyzeController(source, file2, profile, diagnostics) {
|
|
|
4393
4393
|
error(declaration ?? sf2, "Default-export defineController({ initialState, handlers }).");
|
|
4394
4394
|
return;
|
|
4395
4395
|
}
|
|
4396
|
-
const
|
|
4397
|
-
if (!
|
|
4396
|
+
const object9 = declaration.expression.arguments[0];
|
|
4397
|
+
if (!object9 || !ts2.isObjectLiteralExpression(object9)) {
|
|
4398
4398
|
error(declaration, "Controller definition must be an object literal.");
|
|
4399
4399
|
return;
|
|
4400
4400
|
}
|
|
4401
|
-
const props = new Map(
|
|
4401
|
+
const props = new Map(object9.properties.map((p2) => [p2.name?.getText(sf2).replace(/^["']|["']$/g, ""), p2]));
|
|
4402
4402
|
const state = props.get("initialState"), handlers = props.get("handlers");
|
|
4403
4403
|
if (!state || !ts2.isPropertyAssignment(state) || !handlers || !ts2.isPropertyAssignment(handlers) || !ts2.isObjectLiteralExpression(handlers.initializer)) {
|
|
4404
|
-
error(
|
|
4404
|
+
error(object9, "initialState and handlers must be object literals.");
|
|
4405
4405
|
return;
|
|
4406
4406
|
}
|
|
4407
4407
|
function literal(n2) {
|
|
@@ -4568,8 +4568,8 @@ function parseStyles(source, file2, diagnostics, origin = { line: 1, column: 1 }
|
|
|
4568
4568
|
declarations[decl.prop] = decl.value;
|
|
4569
4569
|
locations[decl.prop] = declLoc;
|
|
4570
4570
|
}
|
|
4571
|
-
for (const
|
|
4572
|
-
const s2 =
|
|
4571
|
+
for (const text11 of node.selector.split(",")) {
|
|
4572
|
+
const s2 = text11.trim();
|
|
4573
4573
|
if (!s2 || !selector.test(s2)) {
|
|
4574
4574
|
diagnostics.push({ ...loc, code: "HHP-CSS-SELECTOR", severity: "error", message: `Unsupported selector ${s2}.`, hint: "Use static tag, id, class, or compound selectors." });
|
|
4575
4575
|
continue;
|
|
@@ -4591,7 +4591,7 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4591
4591
|
if (!/^(?:0|\d+(?:\.\d+)?px)$/.test(v2)) throw new Error(`Expected a nonnegative px length, received ${v2}.`);
|
|
4592
4592
|
return parseFloat(v2);
|
|
4593
4593
|
};
|
|
4594
|
-
const
|
|
4594
|
+
const numeric2 = (v2) => {
|
|
4595
4595
|
if (!/^-?\d+(?:\.\d+)?$/.test(v2)) throw new Error(`Expected a number, received ${v2}.`);
|
|
4596
4596
|
return Number(v2);
|
|
4597
4597
|
};
|
|
@@ -4644,7 +4644,7 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4644
4644
|
mods.maxWidth = length(v2);
|
|
4645
4645
|
break;
|
|
4646
4646
|
case "flex-grow":
|
|
4647
|
-
mods.weight =
|
|
4647
|
+
mods.weight = numeric2(v2);
|
|
4648
4648
|
break;
|
|
4649
4649
|
case "color":
|
|
4650
4650
|
props.color = token(v2, "colors");
|
|
@@ -4673,17 +4673,17 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4673
4673
|
mods.shadow = { token: token(v2, "shadows") };
|
|
4674
4674
|
break;
|
|
4675
4675
|
case "opacity":
|
|
4676
|
-
mods.opacity =
|
|
4676
|
+
mods.opacity = numeric2(v2);
|
|
4677
4677
|
if (Number(mods.opacity) < 0 || Number(mods.opacity) > 1) throw new Error("Opacity must be between zero and one.");
|
|
4678
4678
|
break;
|
|
4679
4679
|
case "aspect-ratio": {
|
|
4680
|
-
const p2 = v2.split("/").map((x2) =>
|
|
4680
|
+
const p2 = v2.split("/").map((x2) => numeric2(x2.trim()));
|
|
4681
4681
|
mods.aspectRatio = p2[0] / (p2[1] ?? 1);
|
|
4682
4682
|
if (!Number.isFinite(mods.aspectRatio) || Number(mods.aspectRatio) <= 0) throw new Error("Aspect ratio must be positive.");
|
|
4683
4683
|
break;
|
|
4684
4684
|
}
|
|
4685
4685
|
case "z-index":
|
|
4686
|
-
mods.zIndex =
|
|
4686
|
+
mods.zIndex = numeric2(v2);
|
|
4687
4687
|
break;
|
|
4688
4688
|
case "visibility":
|
|
4689
4689
|
if (!["hidden", "visible"].includes(v2)) throw new Error("Unsupported visibility.");
|
|
@@ -4703,7 +4703,7 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4703
4703
|
const parts = [...v2.matchAll(/(translateX|translateY|scale|rotate)\(([^)]+)\)/g)];
|
|
4704
4704
|
if (!parts.length || parts.map((p2) => p2[0]).join("") !== v2.replace(/\s+/g, "")) throw new Error("Supported transforms: translateX, translateY, scale, rotate.");
|
|
4705
4705
|
for (const [, fn2, arg] of parts) {
|
|
4706
|
-
if (fn2 === "scale") mods.scale =
|
|
4706
|
+
if (fn2 === "scale") mods.scale = numeric2(arg);
|
|
4707
4707
|
else if (fn2 === "rotate") {
|
|
4708
4708
|
if (!/^-?\d+(?:\.\d+)?deg$/.test(arg)) throw new Error("Rotation uses degrees.");
|
|
4709
4709
|
mods.rotation = parseFloat(arg);
|
|
@@ -5342,31 +5342,31 @@ function compileV2(html, profile, options) {
|
|
|
5342
5342
|
return component;
|
|
5343
5343
|
}
|
|
5344
5344
|
const textNodes = element.contents().toArray().filter((n2) => n2.type === "text");
|
|
5345
|
-
const
|
|
5345
|
+
const text11 = textNodes.map((n2) => n2.data).join(" ").replace(/\s+/g, " ").trim();
|
|
5346
5346
|
if (["Text", "RichText"].includes(type)) {
|
|
5347
|
-
const matches = [...
|
|
5348
|
-
if (/{{|}}/.test(
|
|
5347
|
+
const matches = [...text11.matchAll(/{{\s*([\w.$]+)\s*}}/g)];
|
|
5348
|
+
if (/{{|}}/.test(text11.replace(/{{\s*[\w.$]+\s*}}/g, ""))) error(el2, "HHP-TEXT-EXPRESSION", "Text interpolation accepts state/item paths; compute expressions in the controller.");
|
|
5349
5349
|
if (matches.length) {
|
|
5350
|
-
if (matches.length === 1 && matches[0][0] ===
|
|
5350
|
+
if (matches.length === 1 && matches[0][0] === text11 && type === "Text") {
|
|
5351
5351
|
props.text = path2(el2, matches[0][1], row);
|
|
5352
5352
|
} else if (controller && type === "Text") {
|
|
5353
5353
|
for (const match of matches) path2(el2, match[1], row);
|
|
5354
5354
|
const key3 = `t${textProjections.length}`;
|
|
5355
|
-
const normalized =
|
|
5355
|
+
const normalized = text11.replace(/{{\s*([\w.$]+)\s*}}/g, (_match, raw) => `{{${raw.startsWith("$item.") ? raw : statePath(raw)}}}`);
|
|
5356
5356
|
textProjections.push({ key: key3, text: normalized, ...row ? { collection: row } : {} });
|
|
5357
5357
|
props.text = row ? `$item.__hhpText_${key3}` : `$service:${serviceName}.__hhpText.${key3}`;
|
|
5358
5358
|
} else {
|
|
5359
5359
|
if (profile.surfaces.some((surface) => surface === "ios" || surface === "android" || surface === "macos"))
|
|
5360
5360
|
error(el2, "HHP-TEXT-TEMPLATE-SURFACE", "Text templates are not implemented by the enabled native renderers.", "Compute the complete string in controller state and bind it on a Text component with {{path}} or bind:content.");
|
|
5361
5361
|
const params = {};
|
|
5362
|
-
let template =
|
|
5362
|
+
let template = text11;
|
|
5363
5363
|
matches.forEach((m2, i2) => {
|
|
5364
5364
|
params[`v${i2}`] = path2(el2, m2[1], row);
|
|
5365
5365
|
template = template.replace(m2[0], `{v${i2}}`);
|
|
5366
5366
|
});
|
|
5367
5367
|
props.template = { template, params };
|
|
5368
5368
|
}
|
|
5369
|
-
} else if (
|
|
5369
|
+
} else if (text11) props.text = text11;
|
|
5370
5370
|
if (/^h[1-6]$/.test(tag) && props.style === void 0) {
|
|
5371
5371
|
const candidates = tag === "h1" ? ["largeTitle", "title1", "body"] : tag === "h2" ? ["title1", "headline", "body"] : ["headline", "body"];
|
|
5372
5372
|
const available = profile.tokens.typography ?? [];
|
|
@@ -5374,8 +5374,8 @@ function compileV2(html, profile, options) {
|
|
|
5374
5374
|
if (heading) props.style = heading;
|
|
5375
5375
|
else error(el2, "HHP-TOKEN", "Headings require a body, title1, headline, or largeTitle typography token.");
|
|
5376
5376
|
}
|
|
5377
|
-
} else if (type === "Button" && (
|
|
5378
|
-
else if (
|
|
5377
|
+
} else if (type === "Button" && (text11 || attrs.title)) props.title = text11 || attrs.title;
|
|
5378
|
+
else if (text11) error(el2, "HHP-TEXT", "Wrap container text in a paragraph or span.");
|
|
5379
5379
|
if (type === "Image" && attrs.src) {
|
|
5380
5380
|
if (/^https:\/\//.test(attrs.src)) props.url = attrs.src;
|
|
5381
5381
|
else {
|
|
@@ -7391,17 +7391,17 @@ ${BLOCK_END}`;
|
|
|
7391
7391
|
${block}
|
|
7392
7392
|
`;
|
|
7393
7393
|
}
|
|
7394
|
-
function markersIntact(
|
|
7395
|
-
const begins =
|
|
7396
|
-
const ends =
|
|
7394
|
+
function markersIntact(text11) {
|
|
7395
|
+
const begins = text11.split(BLOCK_BEGIN).length - 1;
|
|
7396
|
+
const ends = text11.split(BLOCK_END).length - 1;
|
|
7397
7397
|
if (begins === 0 && ends === 0) return true;
|
|
7398
|
-
return begins === 1 && ends === 1 &&
|
|
7398
|
+
return begins === 1 && ends === 1 && text11.indexOf(BLOCK_BEGIN) < text11.indexOf(BLOCK_END) && BLOCK_RE.test(text11);
|
|
7399
7399
|
}
|
|
7400
|
-
function withoutBlock(
|
|
7401
|
-
const m2 = BLOCK_RE.exec(
|
|
7402
|
-
if (!m2) return
|
|
7403
|
-
const before =
|
|
7404
|
-
const after =
|
|
7400
|
+
function withoutBlock(text11) {
|
|
7401
|
+
const m2 = BLOCK_RE.exec(text11);
|
|
7402
|
+
if (!m2) return text11;
|
|
7403
|
+
const before = text11.slice(0, m2.index).replace(/\n+$/, "");
|
|
7404
|
+
const after = text11.slice(m2.index + m2[0].length).replace(/^\n+/, "");
|
|
7405
7405
|
if (!before) return after;
|
|
7406
7406
|
if (!after) return `${before}
|
|
7407
7407
|
`;
|
|
@@ -7409,8 +7409,8 @@ function withoutBlock(text10) {
|
|
|
7409
7409
|
|
|
7410
7410
|
${after}`;
|
|
7411
7411
|
}
|
|
7412
|
-
function blockVersion(
|
|
7413
|
-
return STAMP_RE.exec(
|
|
7412
|
+
function blockVersion(text11) {
|
|
7413
|
+
return STAMP_RE.exec(text11)?.[1] ?? null;
|
|
7414
7414
|
}
|
|
7415
7415
|
function agentsMdBody(appName2) {
|
|
7416
7416
|
const gates = APPROVAL_GATES.map((g2) => `- \`${g2.id}\` \u2014 ${g2.label}`).join("\n");
|
|
@@ -7873,13 +7873,13 @@ function assertConfinedTsconfig(entry, contentRoot2, allows) {
|
|
|
7873
7873
|
`refused to read ${p2}: ${why}. A tsconfig may extend a file from its own package or an installed dependency \u2014 nothing else.`
|
|
7874
7874
|
);
|
|
7875
7875
|
};
|
|
7876
|
-
const stripJsonc = (
|
|
7877
|
-
if (
|
|
7876
|
+
const stripJsonc = (text11) => {
|
|
7877
|
+
if (text11.charCodeAt(0) === 65279) text11 = text11.slice(1);
|
|
7878
7878
|
let out2 = "";
|
|
7879
7879
|
let inStr = false;
|
|
7880
7880
|
let esc = false;
|
|
7881
|
-
for (let i2 = 0; i2 <
|
|
7882
|
-
const c2 =
|
|
7881
|
+
for (let i2 = 0; i2 < text11.length; i2++) {
|
|
7882
|
+
const c2 = text11[i2];
|
|
7883
7883
|
if (inStr) {
|
|
7884
7884
|
out2 += c2;
|
|
7885
7885
|
if (esc) esc = false;
|
|
@@ -7892,13 +7892,13 @@ function assertConfinedTsconfig(entry, contentRoot2, allows) {
|
|
|
7892
7892
|
out2 += c2;
|
|
7893
7893
|
continue;
|
|
7894
7894
|
}
|
|
7895
|
-
if (c2 === "/" &&
|
|
7896
|
-
while (i2 <
|
|
7895
|
+
if (c2 === "/" && text11[i2 + 1] === "/") {
|
|
7896
|
+
while (i2 < text11.length && text11[i2] !== "\n") i2++;
|
|
7897
7897
|
continue;
|
|
7898
7898
|
}
|
|
7899
|
-
if (c2 === "/" &&
|
|
7899
|
+
if (c2 === "/" && text11[i2 + 1] === "*") {
|
|
7900
7900
|
i2 += 2;
|
|
7901
|
-
while (i2 <
|
|
7901
|
+
while (i2 < text11.length && !(text11[i2] === "*" && text11[i2 + 1] === "/")) i2++;
|
|
7902
7902
|
i2++;
|
|
7903
7903
|
continue;
|
|
7904
7904
|
}
|
|
@@ -12468,8 +12468,8 @@ function pushSpan(out2, s2) {
|
|
|
12468
12468
|
else out2.push(s2);
|
|
12469
12469
|
}
|
|
12470
12470
|
function spanOf(textNode) {
|
|
12471
|
-
const
|
|
12472
|
-
if (
|
|
12471
|
+
const text11 = str(at(textNode, "textData", "text"));
|
|
12472
|
+
if (text11 === "") return null;
|
|
12473
12473
|
let bold = false, italic = false, underline = false;
|
|
12474
12474
|
let link;
|
|
12475
12475
|
const decorations = at(textNode, "textData", "decorations");
|
|
@@ -12496,7 +12496,7 @@ function spanOf(textNode) {
|
|
|
12496
12496
|
}
|
|
12497
12497
|
}
|
|
12498
12498
|
}
|
|
12499
|
-
const span = { text:
|
|
12499
|
+
const span = { text: text11 };
|
|
12500
12500
|
if (bold) span.bold = true;
|
|
12501
12501
|
if (italic) span.italic = true;
|
|
12502
12502
|
if (underline) span.underline = true;
|
|
@@ -12718,8 +12718,8 @@ function blockOf(ids, n2, path2) {
|
|
|
12718
12718
|
const { title, url } = cardFields(n2, type);
|
|
12719
12719
|
return [card(ids.claim(n2, path2), type, title, url)];
|
|
12720
12720
|
}
|
|
12721
|
-
const
|
|
12722
|
-
return
|
|
12721
|
+
const text11 = plainText(n2);
|
|
12722
|
+
return text11.trim() !== "" ? [{ kind: "paragraph", id: ids.claim(n2, path2), spans: [{ text: text11 }] }] : [];
|
|
12723
12723
|
}
|
|
12724
12724
|
}
|
|
12725
12725
|
}
|
|
@@ -14241,26 +14241,26 @@ function serviceOnlyBindingValues(props, key3) {
|
|
|
14241
14241
|
});
|
|
14242
14242
|
return out2;
|
|
14243
14243
|
}
|
|
14244
|
-
function matchBraceSafe(
|
|
14244
|
+
function matchBraceSafe(text11, open) {
|
|
14245
14245
|
let depth = 0;
|
|
14246
|
-
for (let i2 = open; i2 <
|
|
14247
|
-
const c2 =
|
|
14246
|
+
for (let i2 = open; i2 < text11.length; i2++) {
|
|
14247
|
+
const c2 = text11[i2];
|
|
14248
14248
|
if (c2 === '"' || c2 === "'" || c2 === "`") {
|
|
14249
14249
|
const q2 = c2;
|
|
14250
14250
|
i2++;
|
|
14251
|
-
while (i2 <
|
|
14252
|
-
if (
|
|
14251
|
+
while (i2 < text11.length && text11[i2] !== q2) {
|
|
14252
|
+
if (text11[i2] === "\\") i2++;
|
|
14253
14253
|
i2++;
|
|
14254
14254
|
}
|
|
14255
14255
|
continue;
|
|
14256
14256
|
}
|
|
14257
|
-
if (c2 === "/" &&
|
|
14258
|
-
while (i2 <
|
|
14257
|
+
if (c2 === "/" && text11[i2 + 1] === "/") {
|
|
14258
|
+
while (i2 < text11.length && text11[i2] !== "\n") i2++;
|
|
14259
14259
|
continue;
|
|
14260
14260
|
}
|
|
14261
|
-
if (c2 === "/" &&
|
|
14261
|
+
if (c2 === "/" && text11[i2 + 1] === "*") {
|
|
14262
14262
|
i2 += 2;
|
|
14263
|
-
while (i2 <
|
|
14263
|
+
while (i2 < text11.length && !(text11[i2] === "*" && text11[i2 + 1] === "/")) i2++;
|
|
14264
14264
|
i2++;
|
|
14265
14265
|
continue;
|
|
14266
14266
|
}
|
|
@@ -17352,11 +17352,11 @@ function strip(line) {
|
|
|
17352
17352
|
function scalar(v2) {
|
|
17353
17353
|
return v2.trim().replace(/^["']|["']$/g, "");
|
|
17354
17354
|
}
|
|
17355
|
-
function parseRolloutYaml(
|
|
17355
|
+
function parseRolloutYaml(text11) {
|
|
17356
17356
|
const cfg = { app: "", rings: [] };
|
|
17357
17357
|
let cur = null;
|
|
17358
17358
|
let inRings = false;
|
|
17359
|
-
for (const raw of
|
|
17359
|
+
for (const raw of text11.split("\n")) {
|
|
17360
17360
|
const line = strip(raw);
|
|
17361
17361
|
if (!line.trim()) continue;
|
|
17362
17362
|
const top = /^([a-zA-Z_]+):\s*(.*)$/.exec(line);
|
|
@@ -17387,10 +17387,10 @@ function assignRing(r3, key3, val) {
|
|
|
17387
17387
|
else if (key3 === "percent") r3.percent = Number(v2);
|
|
17388
17388
|
else if (key3 === "minBinaryVersion") r3.minBinaryVersion = v2;
|
|
17389
17389
|
}
|
|
17390
|
-
function parseRevocationsYaml(
|
|
17390
|
+
function parseRevocationsYaml(text11) {
|
|
17391
17391
|
const out2 = { app: "", revoked: [] };
|
|
17392
17392
|
let inList = false;
|
|
17393
|
-
for (const raw of
|
|
17393
|
+
for (const raw of text11.split("\n")) {
|
|
17394
17394
|
const line = strip(raw);
|
|
17395
17395
|
if (!line.trim()) continue;
|
|
17396
17396
|
const top = /^([a-zA-Z_]+):\s*(.*)$/.exec(line);
|
|
@@ -17767,14 +17767,14 @@ function discoverNativeActions(appDir3) {
|
|
|
17767
17767
|
}
|
|
17768
17768
|
const sources = roots2.flatMap(({ directory, extension, buildDirMaxDepth }) => nativeSourceFiles(resolve16(appDir3, directory), extension, buildDirMaxDepth));
|
|
17769
17769
|
const registered = sources.flatMap((source) => {
|
|
17770
|
-
let
|
|
17770
|
+
let text11;
|
|
17771
17771
|
try {
|
|
17772
|
-
|
|
17772
|
+
text11 = readFileSync16(source, "utf8");
|
|
17773
17773
|
} catch (err) {
|
|
17774
17774
|
if (!vanished(err)) throw err;
|
|
17775
17775
|
return [];
|
|
17776
17776
|
}
|
|
17777
|
-
return registeredActions(
|
|
17777
|
+
return registeredActions(text11);
|
|
17778
17778
|
});
|
|
17779
17779
|
return {
|
|
17780
17780
|
registered: new Set(registered),
|
|
@@ -21178,9 +21178,9 @@ var init_wix_cache_policy = __esm({
|
|
|
21178
21178
|
});
|
|
21179
21179
|
|
|
21180
21180
|
// ../../core/dev-server/src/l10n-catalog.ts
|
|
21181
|
-
function parseCatalog(
|
|
21181
|
+
function parseCatalog(text11) {
|
|
21182
21182
|
try {
|
|
21183
|
-
const c2 = JSON.parse(
|
|
21183
|
+
const c2 = JSON.parse(text11);
|
|
21184
21184
|
return c2 && typeof c2 === "object" && c2.messages && typeof c2.messages === "object" ? c2 : void 0;
|
|
21185
21185
|
} catch {
|
|
21186
21186
|
return void 0;
|
|
@@ -22149,7 +22149,6 @@ function resolveIdiom(tokens2, ctx = {}) {
|
|
|
22149
22149
|
var IDIOM_CONTEXTS, UNSAFE_KEYS;
|
|
22150
22150
|
var init_idiom = __esm({
|
|
22151
22151
|
"../../core/ts/src/idiom.ts"() {
|
|
22152
|
-
"use strict";
|
|
22153
22152
|
IDIOM_CONTEXTS = {
|
|
22154
22153
|
ios: { native: ["ios"] },
|
|
22155
22154
|
android: { native: ["material"] },
|
|
@@ -26720,10 +26719,10 @@ async function mintAnonymousVisitor(clientId, fetchImpl = fetch) {
|
|
|
26720
26719
|
headers: { "Content-Type": "application/json" },
|
|
26721
26720
|
body: JSON.stringify({ clientId, grantType: "anonymous" })
|
|
26722
26721
|
});
|
|
26723
|
-
const
|
|
26722
|
+
const text11 = await res.text();
|
|
26724
26723
|
let j2 = {};
|
|
26725
26724
|
try {
|
|
26726
|
-
j2 =
|
|
26725
|
+
j2 = text11 ? JSON.parse(text11) : {};
|
|
26727
26726
|
} catch {
|
|
26728
26727
|
}
|
|
26729
26728
|
if (res.status !== 200 || !j2.access_token) throw new Error(`visitor mint failed (${res.status})`);
|
|
@@ -27069,10 +27068,10 @@ ${session}`);
|
|
|
27069
27068
|
}),
|
|
27070
27069
|
timedOut
|
|
27071
27070
|
]);
|
|
27072
|
-
const
|
|
27071
|
+
const text11 = await Promise.race([res.text(), timedOut]);
|
|
27073
27072
|
let j2 = {};
|
|
27074
27073
|
try {
|
|
27075
|
-
j2 =
|
|
27074
|
+
j2 = text11 ? JSON.parse(text11) : {};
|
|
27076
27075
|
} catch {
|
|
27077
27076
|
}
|
|
27078
27077
|
if (res.status < 200 || res.status >= 300 || !j2.signedInstance)
|
|
@@ -27258,7 +27257,7 @@ ${session}`);
|
|
|
27258
27257
|
});
|
|
27259
27258
|
const xsrf = /(?:^|;\s*)XSRF-TOKEN=([^;]+)/.exec(sessionCookie)?.[1];
|
|
27260
27259
|
let status;
|
|
27261
|
-
let
|
|
27260
|
+
let text11;
|
|
27262
27261
|
try {
|
|
27263
27262
|
const res = await Promise.race([
|
|
27264
27263
|
this.fetchImpl(`${ONE_APP_SESSION}/${msid}/signed-instance?signed_instance_type=Member`, {
|
|
@@ -27270,7 +27269,7 @@ ${session}`);
|
|
|
27270
27269
|
timedOut
|
|
27271
27270
|
]);
|
|
27272
27271
|
status = res.status;
|
|
27273
|
-
|
|
27272
|
+
text11 = await Promise.race([res.text(), timedOut]);
|
|
27274
27273
|
} catch (e2) {
|
|
27275
27274
|
return refuse7(new SiteInstanceUnavailable(msid, `mint failed: ${e2?.message ?? e2}`), MEMBER_TRANSIENT_TTL_MS);
|
|
27276
27275
|
} finally {
|
|
@@ -27280,7 +27279,7 @@ ${session}`);
|
|
|
27280
27279
|
if (status === 401) return refuse7(new AccountSessionExpired(msid, `mint refused (${status})`), MEMBER_TRANSIENT_TTL_MS);
|
|
27281
27280
|
let instance;
|
|
27282
27281
|
try {
|
|
27283
|
-
instance = JSON.parse(
|
|
27282
|
+
instance = JSON.parse(text11).signedInstance;
|
|
27284
27283
|
} catch {
|
|
27285
27284
|
}
|
|
27286
27285
|
if (status < 200 || status >= 300 || typeof instance !== "string" || !instance) {
|
|
@@ -27358,8 +27357,8 @@ async function postJson(path2, body, auth) {
|
|
|
27358
27357
|
headers: { "Content-Type": "application/json", ...auth ? { Authorization: auth } : {} },
|
|
27359
27358
|
body: JSON.stringify(body)
|
|
27360
27359
|
});
|
|
27361
|
-
const
|
|
27362
|
-
return { status: res.status, json:
|
|
27360
|
+
const text11 = await res.text();
|
|
27361
|
+
return { status: res.status, json: text11 ? JSON.parse(text11) : {} };
|
|
27363
27362
|
}
|
|
27364
27363
|
async function mintVisitor(clientId) {
|
|
27365
27364
|
const r3 = await postJson("/oauth2/token", { clientId, grantType: "anonymous" });
|
|
@@ -27629,13 +27628,13 @@ function recordWixTraffic(gw, app, adminUrl, ev) {
|
|
|
27629
27628
|
full.respBody = truncate(redactBodyString(full.respBody));
|
|
27630
27629
|
gw.traffic.push(full);
|
|
27631
27630
|
if (gw.traffic.length > TRAFFIC_CAP) gw.traffic.splice(0, gw.traffic.length - TRAFFIC_CAP);
|
|
27632
|
-
const
|
|
27631
|
+
const text11 = `event: wix.traffic
|
|
27633
27632
|
data: ${JSON.stringify(full)}
|
|
27634
27633
|
|
|
27635
27634
|
`;
|
|
27636
27635
|
for (const res of [...gw.clients]) {
|
|
27637
27636
|
try {
|
|
27638
|
-
res.write(
|
|
27637
|
+
res.write(text11);
|
|
27639
27638
|
} catch {
|
|
27640
27639
|
gw.clients.delete(res);
|
|
27641
27640
|
}
|
|
@@ -28138,13 +28137,13 @@ async function resolveWixAccounts(cookieHeader, fetchImpl = fetch, authorization
|
|
|
28138
28137
|
if (res.status === 428 || res.status === 401 || res.status === 403) {
|
|
28139
28138
|
return { ok: false, reason: "no_session" };
|
|
28140
28139
|
}
|
|
28141
|
-
const
|
|
28140
|
+
const text11 = await res.text();
|
|
28142
28141
|
if (!res.ok) {
|
|
28143
|
-
return { ok: false, reason: "upstream_failed", status: res.status, detail:
|
|
28142
|
+
return { ok: false, reason: "upstream_failed", status: res.status, detail: text11.slice(0, 200) };
|
|
28144
28143
|
}
|
|
28145
28144
|
let parsed;
|
|
28146
28145
|
try {
|
|
28147
|
-
parsed = JSON.parse(
|
|
28146
|
+
parsed = JSON.parse(text11);
|
|
28148
28147
|
} catch {
|
|
28149
28148
|
return { ok: false, reason: "upstream_failed", status: res.status, detail: "unparseable_body" };
|
|
28150
28149
|
}
|
|
@@ -28185,13 +28184,13 @@ async function resolveAccountCredential(auth, fetchImpl) {
|
|
|
28185
28184
|
if (res.status === 428 || res.status === 401 || res.status === 403 || res.status === 404) {
|
|
28186
28185
|
return { ok: false, reason: "no_session" };
|
|
28187
28186
|
}
|
|
28188
|
-
const
|
|
28187
|
+
const text11 = await res.text();
|
|
28189
28188
|
if (!res.ok) {
|
|
28190
|
-
return { ok: false, reason: "upstream_failed", status: res.status, detail:
|
|
28189
|
+
return { ok: false, reason: "upstream_failed", status: res.status, detail: text11.slice(0, 200) };
|
|
28191
28190
|
}
|
|
28192
28191
|
let parsed;
|
|
28193
28192
|
try {
|
|
28194
|
-
parsed = JSON.parse(
|
|
28193
|
+
parsed = JSON.parse(text11);
|
|
28195
28194
|
} catch {
|
|
28196
28195
|
return { ok: false, reason: "upstream_failed", status: res.status, detail: "unparseable_body" };
|
|
28197
28196
|
}
|
|
@@ -28843,9 +28842,9 @@ async function getAndroidPixelDims(serial) {
|
|
|
28843
28842
|
try {
|
|
28844
28843
|
const args = serial ? ["-s", serial, "shell", "wm", "size"] : ["shell", "wm", "size"];
|
|
28845
28844
|
const out2 = await runner.capture(ADB_BIN, args);
|
|
28846
|
-
const
|
|
28847
|
-
const override = /Override size:\s*(\d+)x(\d+)/.exec(
|
|
28848
|
-
const physical = /Physical size:\s*(\d+)x(\d+)/.exec(
|
|
28845
|
+
const text11 = out2.toString("utf8");
|
|
28846
|
+
const override = /Override size:\s*(\d+)x(\d+)/.exec(text11);
|
|
28847
|
+
const physical = /Physical size:\s*(\d+)x(\d+)/.exec(text11);
|
|
28849
28848
|
const m2 = override ?? physical;
|
|
28850
28849
|
if (!m2) throw new Error("could not parse wm size");
|
|
28851
28850
|
const dims = { width: parseInt(m2[1], 10), height: parseInt(m2[2], 10) };
|
|
@@ -30751,9 +30750,9 @@ function mdScan(src, linkStyle = "") {
|
|
|
30751
30750
|
}
|
|
30752
30751
|
return out2 + mdEsc(src.slice(last));
|
|
30753
30752
|
}
|
|
30754
|
-
function mdInline(
|
|
30753
|
+
function mdInline(text11, linkColor) {
|
|
30755
30754
|
const safe = typeof linkColor === "string" && /^[#a-zA-Z0-9(),.%\s-]+$/.test(linkColor) ? linkColor : "";
|
|
30756
|
-
return { __html: mdScan(
|
|
30755
|
+
return { __html: mdScan(text11, safe ? ` style="color:${safe}"` : "") };
|
|
30757
30756
|
}
|
|
30758
30757
|
function sevColor(ctx, sev) {
|
|
30759
30758
|
switch (sev) {
|
|
@@ -31442,7 +31441,7 @@ function PickerLeadingVisual({ option, ctx, size = 20 }) {
|
|
|
31442
31441
|
return null;
|
|
31443
31442
|
}
|
|
31444
31443
|
}
|
|
31445
|
-
function PickerFieldBox({ look, ctx, option, text:
|
|
31444
|
+
function PickerFieldBox({ look, ctx, option, text: text11, isPlaceholder, font, style }) {
|
|
31446
31445
|
const C2 = ctx.color;
|
|
31447
31446
|
return /* @__PURE__ */ jsxs2(
|
|
31448
31447
|
"div",
|
|
@@ -31466,7 +31465,7 @@ function PickerFieldBox({ look, ctx, option, text: text10, isPlaceholder, font,
|
|
|
31466
31465
|
},
|
|
31467
31466
|
children: [
|
|
31468
31467
|
!isPlaceholder && /* @__PURE__ */ jsx5(PickerLeadingVisual, { option, ctx }),
|
|
31469
|
-
/* @__PURE__ */ jsx5("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: isPlaceholder ? C2(look.placeholderColor, "#888") : C2("textPrimary", "#111") }, children:
|
|
31468
|
+
/* @__PURE__ */ jsx5("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: isPlaceholder ? C2(look.placeholderColor, "#888") : C2("textPrimary", "#111") }, children: text11 }),
|
|
31470
31469
|
look.chevronIcon && /* @__PURE__ */ jsx5("span", { "data-picker-chevron": "", style: { flex: "none", display: "inline-grid", placeItems: "center" }, children: iconSvg(look.chevronIcon, { size: 16, color: C2("textSecondary", "#636b78") }) })
|
|
31471
31470
|
]
|
|
31472
31471
|
}
|
|
@@ -31884,9 +31883,9 @@ function createRicosHostSession(o2) {
|
|
|
31884
31883
|
if (!state.ready || state.unavailable) return;
|
|
31885
31884
|
o2.send({ v: 1, type: "command", name, ...arg?.level ? { level: arg.level } : {}, ...arg?.value ? { value: arg.value } : {} });
|
|
31886
31885
|
},
|
|
31887
|
-
insertLink(url,
|
|
31886
|
+
insertLink(url, text11) {
|
|
31888
31887
|
if (!state.ready || state.unavailable || !isSafeEditorLink(url)) return false;
|
|
31889
|
-
o2.send({ v: 1, type: "insertLink", url: url.trim(), ...
|
|
31888
|
+
o2.send({ v: 1, type: "insertLink", url: url.trim(), ...text11 ? { text: text11 } : {} });
|
|
31890
31889
|
return true;
|
|
31891
31890
|
},
|
|
31892
31891
|
removeLink() {
|
|
@@ -34358,8 +34357,8 @@ var init_esm = __esm({
|
|
|
34358
34357
|
|
|
34359
34358
|
// ../../core/ts/src/rich-text-field.ts
|
|
34360
34359
|
function richTextHtmlToPlainText(html) {
|
|
34361
|
-
const
|
|
34362
|
-
return
|
|
34360
|
+
const text11 = decodeHTML(html.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, "").replace(/<li\b[^>]*>/gi, "\u2022 ").replace(/<br\s*\/?>|<\/(?:p|div|li|h[1-6]|blockquote|pre|tr)\s*>/gi, "\n").replace(/<[^>]*>/g, ""));
|
|
34361
|
+
return text11.replace(/\r\n?/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
34363
34362
|
}
|
|
34364
34363
|
function richTextPlainTextToHtml(value) {
|
|
34365
34364
|
if (value === "") return "";
|
|
@@ -34382,9 +34381,9 @@ function richTextEditedHtml(originalHtml, originalText, nextText) {
|
|
|
34382
34381
|
if (/<(script|style)\b/i.test(source)) return richTextPlainTextToHtml(nextText);
|
|
34383
34382
|
const spans = [];
|
|
34384
34383
|
let visible = "";
|
|
34385
|
-
const append = (
|
|
34386
|
-
visible +=
|
|
34387
|
-
for (let i2 = 0; i2 <
|
|
34384
|
+
const append = (text11, start, end, structural = false) => {
|
|
34385
|
+
visible += text11;
|
|
34386
|
+
for (let i2 = 0; i2 < text11.length; i2++) spans.push({ start, end, structural });
|
|
34388
34387
|
};
|
|
34389
34388
|
const token = /<[^>]*>|&(?:#\d+|#x[\da-f]+|[a-z][\da-z]+);?|[^<&]+/gi;
|
|
34390
34389
|
for (const match of source.matchAll(token)) {
|
|
@@ -34438,7 +34437,7 @@ function richTextEditedHtml(originalHtml, originalText, nextText) {
|
|
|
34438
34437
|
let edited = source;
|
|
34439
34438
|
for (const span of removed.slice().reverse()) edited = edited.slice(0, span.start) + edited.slice(span.end);
|
|
34440
34439
|
const insertionAfterDelete = insertionAt - removed.filter((span) => span.end <= insertionAt).reduce((n2, span) => n2 + span.end - span.start, 0);
|
|
34441
|
-
const escape3 = (
|
|
34440
|
+
const escape3 = (text11) => text11.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/\"/g, """).replace(/'/g, "'").replace(/\n/g, "<br>");
|
|
34442
34441
|
const replacement = escape3(nextText.slice(prefix, newEnd));
|
|
34443
34442
|
return edited.slice(0, insertionAfterDelete) + replacement + edited.slice(insertionAfterDelete);
|
|
34444
34443
|
}
|
|
@@ -34543,13 +34542,13 @@ function NamedImage({ node, alt, env }) {
|
|
|
34543
34542
|
}
|
|
34544
34543
|
function Block({ b: b2, env, depth }) {
|
|
34545
34544
|
const { ctx } = env;
|
|
34546
|
-
const
|
|
34545
|
+
const text11 = ctx.color("textPrimary", "#13171e");
|
|
34547
34546
|
const secondary = ctx.color("textSecondary", "#5c6370");
|
|
34548
34547
|
const border = ctx.color("border", "#e5e5e5");
|
|
34549
34548
|
switch (b2.kind) {
|
|
34550
34549
|
case "paragraph":
|
|
34551
34550
|
return /* @__PURE__ */ jsx9("p", { ...tid(env, b2.id, b2.kind), style: {
|
|
34552
|
-
...textStyle(ctx, "body",
|
|
34551
|
+
...textStyle(ctx, "body", text11),
|
|
34553
34552
|
textAlign: b2.align,
|
|
34554
34553
|
paddingInlineStart: b2.indent ? Math.min(b2.indent, 8) * 16 : void 0,
|
|
34555
34554
|
minHeight: b2.spans.length ? void 0 : "1.5em"
|
|
@@ -34557,7 +34556,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
34557
34556
|
case "heading":
|
|
34558
34557
|
return React9.createElement(
|
|
34559
34558
|
`h${b2.level}`,
|
|
34560
|
-
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1],
|
|
34559
|
+
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1], text11) },
|
|
34561
34560
|
/* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env })
|
|
34562
34561
|
);
|
|
34563
34562
|
case "list": {
|
|
@@ -34567,7 +34566,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
34567
34566
|
{
|
|
34568
34567
|
...tid(env, b2.id, b2.kind),
|
|
34569
34568
|
start: b2.ordered ? b2.start : void 0,
|
|
34570
|
-
style: { ...textStyle(ctx, "body",
|
|
34569
|
+
style: { ...textStyle(ctx, "body", text11), paddingInlineStart: 24, listStyleType: b2.ordered ? "decimal" : depth % 2 ? "circle" : "disc" },
|
|
34571
34570
|
children: b2.items.map((item, i2) => /* @__PURE__ */ jsx9("li", { "data-component-id": `${env.componentId}/${item.id}`, id: `${env.componentId}/${item.id}`, style: { marginBottom: 6 }, children: /* @__PURE__ */ jsx9("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: item.blocks.map((child, j2) => /* @__PURE__ */ jsx9(Block, { b: child, env, depth: depth + 1 }, `${j2}:${child.id}`)) }) }, `${i2}:${item.id}`))
|
|
34572
34571
|
}
|
|
34573
34572
|
);
|
|
@@ -34581,7 +34580,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
34581
34580
|
overflowWrap: "anywhere",
|
|
34582
34581
|
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
34583
34582
|
fontSize: "0.9em",
|
|
34584
|
-
color:
|
|
34583
|
+
color: text11,
|
|
34585
34584
|
background: ctx.color("surfaceSecondary", "#f5f5f7"),
|
|
34586
34585
|
padding: 10,
|
|
34587
34586
|
borderRadius: 6
|
|
@@ -34600,11 +34599,11 @@ function Block({ b: b2, env, depth }) {
|
|
|
34600
34599
|
case "button":
|
|
34601
34600
|
return /* @__PURE__ */ jsx9(LinkButton, { label: b2.label, url: b2.url, env, testId: `${env.componentId}/${b2.id}` });
|
|
34602
34601
|
case "table":
|
|
34603
|
-
return /* @__PURE__ */ jsx9("table", { ...tid(env, b2.id, b2.kind), style: { width: "100%", borderCollapse: "collapse", ...textStyle(ctx, "body",
|
|
34602
|
+
return /* @__PURE__ */ jsx9("table", { ...tid(env, b2.id, b2.kind), style: { width: "100%", borderCollapse: "collapse", ...textStyle(ctx, "body", text11) }, children: /* @__PURE__ */ jsx9("tbody", { children: b2.rows.map((row, r3) => /* @__PURE__ */ jsx9("tr", { children: row.map((cell2, c2) => /* @__PURE__ */ jsx9("td", { style: { border: `1px solid ${border}`, padding: 6, whiteSpace: "pre-wrap", verticalAlign: "top" }, children: cell2 }, c2)) }, r3)) }) });
|
|
34604
34603
|
case "card": {
|
|
34605
34604
|
const title = richContentCardTitle(b2);
|
|
34606
34605
|
return /* @__PURE__ */ jsxs6("div", { ...tid(env, b2.id, b2.kind), role: "group", "aria-label": title, style: { border: `1px solid ${border}`, borderRadius: 8, padding: 12, display: "flex", flexDirection: "column", gap: 6 }, children: [
|
|
34607
|
-
/* @__PURE__ */ jsx9("div", { style: textStyle(ctx, "bodyEmphasis",
|
|
34606
|
+
/* @__PURE__ */ jsx9("div", { style: textStyle(ctx, "bodyEmphasis", text11), children: title }),
|
|
34608
34607
|
b2.url ? /* @__PURE__ */ jsxs6(Fragment3, { children: [
|
|
34609
34608
|
/* @__PURE__ */ jsx9("div", { style: textStyle(ctx, "caption", secondary), children: richContentHost(b2.url) }),
|
|
34610
34609
|
/* @__PURE__ */ jsx9(LinkButton, { label: RICH_CONTENT_OPEN_LABEL, url: b2.url, env, testId: `${env.componentId}/${b2.id}/open` })
|
|
@@ -34633,10 +34632,10 @@ var init_richContent = __esm({
|
|
|
34633
34632
|
|
|
34634
34633
|
// ../../core/web-renderer/src/pdfPageCount.ts
|
|
34635
34634
|
function pdfPageCount(bytes2) {
|
|
34636
|
-
const
|
|
34637
|
-
const rooted = pdfRootPageCount(
|
|
34635
|
+
const text11 = pdfObjectSyntax(new TextDecoder("latin1").decode(bytes2));
|
|
34636
|
+
const rooted = pdfRootPageCount(text11);
|
|
34638
34637
|
let scanned = null;
|
|
34639
|
-
for (const m2 of
|
|
34638
|
+
for (const m2 of text11.matchAll(/<<((?:(?!<<|>>)[\s\S])*)>>/g)) {
|
|
34640
34639
|
const dict = m2[1];
|
|
34641
34640
|
if (!/\/Type\s*\/Pages(?![A-Za-z])/.test(dict)) continue;
|
|
34642
34641
|
const c2 = /\/Count\s+(\d+)/.exec(dict);
|
|
@@ -34648,24 +34647,24 @@ function pdfPageCount(bytes2) {
|
|
|
34648
34647
|
if (rooted !== null && scanned !== null && rooted !== scanned) return null;
|
|
34649
34648
|
return count2 <= PDF_MAX_PLAUSIBLE_PAGES ? count2 : null;
|
|
34650
34649
|
}
|
|
34651
|
-
function pdfObjectSyntax(
|
|
34652
|
-
const out2 =
|
|
34650
|
+
function pdfObjectSyntax(text11) {
|
|
34651
|
+
const out2 = text11.split("");
|
|
34653
34652
|
const blank = (from, to2) => {
|
|
34654
34653
|
for (let k2 = from; k2 < to2; k2++) out2[k2] = " ";
|
|
34655
34654
|
};
|
|
34656
34655
|
let i2 = 0;
|
|
34657
|
-
while (i2 <
|
|
34658
|
-
const c2 =
|
|
34656
|
+
while (i2 < text11.length) {
|
|
34657
|
+
const c2 = text11[i2];
|
|
34659
34658
|
if (c2 === "%") {
|
|
34660
|
-
const eol =
|
|
34661
|
-
const end = eol < 0 ?
|
|
34659
|
+
const eol = text11.slice(i2).search(/[\r\n]/);
|
|
34660
|
+
const end = eol < 0 ? text11.length : i2 + eol;
|
|
34662
34661
|
blank(i2, end);
|
|
34663
34662
|
i2 = end;
|
|
34664
34663
|
} else if (c2 === "(") {
|
|
34665
34664
|
let depth = 0;
|
|
34666
34665
|
let j2 = i2;
|
|
34667
|
-
for (; j2 <
|
|
34668
|
-
const d2 =
|
|
34666
|
+
for (; j2 < text11.length; j2++) {
|
|
34667
|
+
const d2 = text11[j2];
|
|
34669
34668
|
if (d2 === "\\") {
|
|
34670
34669
|
j2++;
|
|
34671
34670
|
continue;
|
|
@@ -34675,21 +34674,21 @@ function pdfObjectSyntax(text10) {
|
|
|
34675
34674
|
}
|
|
34676
34675
|
blank(i2, j2 + 1);
|
|
34677
34676
|
i2 = j2 + 1;
|
|
34678
|
-
} else if (c2 === "<" &&
|
|
34679
|
-
const end =
|
|
34680
|
-
const stop = end < 0 ?
|
|
34677
|
+
} else if (c2 === "<" && text11[i2 + 1] !== "<") {
|
|
34678
|
+
const end = text11.indexOf(">", i2);
|
|
34679
|
+
const stop = end < 0 ? text11.length : end + 1;
|
|
34681
34680
|
blank(i2, stop);
|
|
34682
34681
|
i2 = stop;
|
|
34683
|
-
} else if (c2 === "<" &&
|
|
34682
|
+
} else if (c2 === "<" && text11[i2 + 1] === "<") {
|
|
34684
34683
|
i2 += 2;
|
|
34685
34684
|
} else if (
|
|
34686
34685
|
// The `stream` KEYWORD, not the tail of a name (`/my-stream`) or of `endstream`: preceded by
|
|
34687
34686
|
// whitespace or the `>>` that closes its dictionary, and followed by CRLF or LF (PDF 32000
|
|
34688
34687
|
// §7.3.8.1 — a CR alone is not allowed there).
|
|
34689
|
-
|
|
34688
|
+
text11.startsWith("stream", i2) && /[\s>]/.test(text11[i2 - 1] ?? "") && (text11[i2 + 6] === "\n" || text11.startsWith("\r\n", i2 + 6))
|
|
34690
34689
|
) {
|
|
34691
|
-
const end =
|
|
34692
|
-
const stop = end < 0 ?
|
|
34690
|
+
const end = text11.indexOf("endstream", i2 + 6);
|
|
34691
|
+
const stop = end < 0 ? text11.length : end;
|
|
34693
34692
|
blank(i2 + 6, stop);
|
|
34694
34693
|
i2 = stop + "endstream".length;
|
|
34695
34694
|
} else {
|
|
@@ -36127,19 +36126,19 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
|
|
|
36127
36126
|
if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
|
|
36128
36127
|
return value;
|
|
36129
36128
|
}
|
|
36130
|
-
return value.replaceAll(/=\?([\w-]*)\?([QB])\?((?:[^?]|\?(?!=))*)\?=/gi, function(matches, charset, encoding,
|
|
36129
|
+
return value.replaceAll(/=\?([\w-]*)\?([QB])\?((?:[^?]|\?(?!=))*)\?=/gi, function(matches, charset, encoding, text11) {
|
|
36131
36130
|
if (encoding === "q" || encoding === "Q") {
|
|
36132
|
-
|
|
36133
|
-
|
|
36131
|
+
text11 = text11.replaceAll("_", " ");
|
|
36132
|
+
text11 = text11.replaceAll(/=([0-9a-f]{2})/gi, function(match, hex2) {
|
|
36134
36133
|
return String.fromCharCode(parseInt(hex2, 16));
|
|
36135
36134
|
});
|
|
36136
|
-
return textdecode(charset,
|
|
36135
|
+
return textdecode(charset, text11);
|
|
36137
36136
|
}
|
|
36138
36137
|
try {
|
|
36139
|
-
|
|
36138
|
+
text11 = atob(text11);
|
|
36140
36139
|
} catch {
|
|
36141
36140
|
}
|
|
36142
|
-
return textdecode(charset,
|
|
36141
|
+
return textdecode(charset, text11);
|
|
36143
36142
|
});
|
|
36144
36143
|
}
|
|
36145
36144
|
return "";
|
|
@@ -37009,11 +37008,11 @@ var init_pdf = __esm({
|
|
|
37009
37008
|
var DESCRIPTORS = __webpack_require__3(3724);
|
|
37010
37009
|
var definePropertyModule = __webpack_require__3(4913);
|
|
37011
37010
|
var createPropertyDescriptor = __webpack_require__3(6980);
|
|
37012
|
-
module.exports = DESCRIPTORS ? function(
|
|
37013
|
-
return definePropertyModule.f(
|
|
37014
|
-
} : function(
|
|
37015
|
-
|
|
37016
|
-
return
|
|
37011
|
+
module.exports = DESCRIPTORS ? function(object9, key3, value) {
|
|
37012
|
+
return definePropertyModule.f(object9, key3, createPropertyDescriptor(1, value));
|
|
37013
|
+
} : function(object9, key3, value) {
|
|
37014
|
+
object9[key3] = value;
|
|
37015
|
+
return object9;
|
|
37017
37016
|
};
|
|
37018
37017
|
},
|
|
37019
37018
|
/***/
|
|
@@ -37032,9 +37031,9 @@ var init_pdf = __esm({
|
|
|
37032
37031
|
var DESCRIPTORS = __webpack_require__3(3724);
|
|
37033
37032
|
var definePropertyModule = __webpack_require__3(4913);
|
|
37034
37033
|
var createPropertyDescriptor = __webpack_require__3(6980);
|
|
37035
|
-
module.exports = function(
|
|
37036
|
-
if (DESCRIPTORS) definePropertyModule.f(
|
|
37037
|
-
else
|
|
37034
|
+
module.exports = function(object9, key3, value) {
|
|
37035
|
+
if (DESCRIPTORS) definePropertyModule.f(object9, key3, createPropertyDescriptor(0, value));
|
|
37036
|
+
else object9[key3] = value;
|
|
37038
37037
|
};
|
|
37039
37038
|
},
|
|
37040
37039
|
/***/
|
|
@@ -37324,9 +37323,9 @@ var init_pdf = __esm({
|
|
|
37324
37323
|
6706(module, __unused_webpack_exports, __webpack_require__3) {
|
|
37325
37324
|
var uncurryThis = __webpack_require__3(9504);
|
|
37326
37325
|
var aCallable = __webpack_require__3(9306);
|
|
37327
|
-
module.exports = function(
|
|
37326
|
+
module.exports = function(object9, key3, method) {
|
|
37328
37327
|
try {
|
|
37329
|
-
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(
|
|
37328
|
+
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object9, key3)[method]));
|
|
37330
37329
|
} catch (error) {
|
|
37331
37330
|
}
|
|
37332
37331
|
};
|
|
@@ -38294,13 +38293,13 @@ var init_pdf = __esm({
|
|
|
38294
38293
|
var $Object = Object;
|
|
38295
38294
|
var ObjectPrototype = $Object.prototype;
|
|
38296
38295
|
module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O2) {
|
|
38297
|
-
var
|
|
38298
|
-
if (hasOwn(
|
|
38299
|
-
var constructor =
|
|
38300
|
-
if (isCallable(constructor) &&
|
|
38296
|
+
var object9 = toObject(O2);
|
|
38297
|
+
if (hasOwn(object9, IE_PROTO)) return object9[IE_PROTO];
|
|
38298
|
+
var constructor = object9.constructor;
|
|
38299
|
+
if (isCallable(constructor) && object9 instanceof constructor) {
|
|
38301
38300
|
return constructor.prototype;
|
|
38302
38301
|
}
|
|
38303
|
-
return
|
|
38302
|
+
return object9 instanceof $Object ? ObjectPrototype : null;
|
|
38304
38303
|
};
|
|
38305
38304
|
},
|
|
38306
38305
|
/***/
|
|
@@ -38316,8 +38315,8 @@ var init_pdf = __esm({
|
|
|
38316
38315
|
var indexOf = __webpack_require__3(9617).indexOf;
|
|
38317
38316
|
var hiddenKeys = __webpack_require__3(421);
|
|
38318
38317
|
var push = uncurryThis([].push);
|
|
38319
|
-
module.exports = function(
|
|
38320
|
-
var O2 = toIndexedObject(
|
|
38318
|
+
module.exports = function(object9, names2) {
|
|
38319
|
+
var O2 = toIndexedObject(object9);
|
|
38321
38320
|
var i2 = 0;
|
|
38322
38321
|
var result = [];
|
|
38323
38322
|
var key3;
|
|
@@ -39760,13 +39759,13 @@ var init_pdf = __esm({
|
|
|
39760
39759
|
}
|
|
39761
39760
|
return call(reviver, holder, name, val, context);
|
|
39762
39761
|
};
|
|
39763
|
-
var internalizeProperty = function(
|
|
39762
|
+
var internalizeProperty = function(object9, key3, value) {
|
|
39764
39763
|
if (DESCRIPTORS) {
|
|
39765
|
-
var descriptor = getOwnPropertyDescriptor(
|
|
39764
|
+
var descriptor = getOwnPropertyDescriptor(object9, key3);
|
|
39766
39765
|
if (descriptor && !descriptor.configurable) return;
|
|
39767
39766
|
}
|
|
39768
|
-
if (value === void 0) delete
|
|
39769
|
-
else createProperty(
|
|
39767
|
+
if (value === void 0) delete object9[key3];
|
|
39768
|
+
else createProperty(object9, key3, value);
|
|
39770
39769
|
};
|
|
39771
39770
|
var Node2 = function(value, end, source, nodes) {
|
|
39772
39771
|
this.value = value;
|
|
@@ -39811,7 +39810,7 @@ var init_pdf = __esm({
|
|
|
39811
39810
|
var source = this.source;
|
|
39812
39811
|
var i2 = this.index + 1;
|
|
39813
39812
|
var expectKeypair = false;
|
|
39814
|
-
var
|
|
39813
|
+
var object9 = {};
|
|
39815
39814
|
var nodes = {};
|
|
39816
39815
|
var closed = false;
|
|
39817
39816
|
while (i2 < source.length) {
|
|
@@ -39828,7 +39827,7 @@ var init_pdf = __esm({
|
|
|
39828
39827
|
i2 = this.skip(IS_WHITESPACE, i2);
|
|
39829
39828
|
result = this.fork(i2).parse();
|
|
39830
39829
|
createProperty(nodes, key3, result);
|
|
39831
|
-
createProperty(
|
|
39830
|
+
createProperty(object9, key3, result.value);
|
|
39832
39831
|
i2 = this.until([",", "}"], result.end);
|
|
39833
39832
|
var chr = at2(source, i2);
|
|
39834
39833
|
if (chr === ",") {
|
|
@@ -39841,7 +39840,7 @@ var init_pdf = __esm({
|
|
|
39841
39840
|
}
|
|
39842
39841
|
}
|
|
39843
39842
|
if (!closed) throw new SyntaxError2("Unterminated object at: " + i2);
|
|
39844
|
-
return this.node(OBJECT,
|
|
39843
|
+
return this.node(OBJECT, object9, this.index, i2, nodes);
|
|
39845
39844
|
},
|
|
39846
39845
|
array: function() {
|
|
39847
39846
|
var source = this.source;
|
|
@@ -39931,8 +39930,8 @@ var init_pdf = __esm({
|
|
|
39931
39930
|
return 1 / nativeParse("-0 ") !== -Infinity;
|
|
39932
39931
|
});
|
|
39933
39932
|
$2({ target: "JSON", stat: true, forced: NO_SOURCE_SUPPORT }, {
|
|
39934
|
-
parse: function parse4(
|
|
39935
|
-
return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(
|
|
39933
|
+
parse: function parse4(text11, reviver) {
|
|
39934
|
+
return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text11) : $parse(text11, reviver);
|
|
39936
39935
|
}
|
|
39937
39936
|
});
|
|
39938
39937
|
},
|
|
@@ -40070,7 +40069,7 @@ var init_pdf = __esm({
|
|
|
40070
40069
|
return ordered;
|
|
40071
40070
|
};
|
|
40072
40071
|
if ($stringify) $2({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE || !NATIVE_RAW_JSON }, {
|
|
40073
|
-
stringify: function stringify(
|
|
40072
|
+
stringify: function stringify(text11, replacer, space) {
|
|
40074
40073
|
var replacerFunction = isCallable(replacer) ? replacer : void 0;
|
|
40075
40074
|
var propertyList = replacerFunction ? void 0 : getPropertyList(replacer);
|
|
40076
40075
|
var keyPrefix = propertyList && getKeyPrefix(propertyList);
|
|
@@ -40080,7 +40079,7 @@ var init_pdf = __esm({
|
|
|
40080
40079
|
var currentOrdered;
|
|
40081
40080
|
var marked = false;
|
|
40082
40081
|
var root = true;
|
|
40083
|
-
var json8 = stringifyWithProperSymbolsConversion(
|
|
40082
|
+
var json8 = stringifyWithProperSymbolsConversion(text11, function(key3, value) {
|
|
40084
40083
|
key3 = $String(key3);
|
|
40085
40084
|
if (propertyList) {
|
|
40086
40085
|
if (key3 === END_MARK) {
|
|
@@ -43152,7 +43151,7 @@ var init_pdf = __esm({
|
|
|
43152
43151
|
focusNode,
|
|
43153
43152
|
focusOffset
|
|
43154
43153
|
} = selection;
|
|
43155
|
-
const
|
|
43154
|
+
const text11 = selection.toString();
|
|
43156
43155
|
const anchorElement = this.#getAnchorElementForSelection(selection);
|
|
43157
43156
|
const textLayer = anchorElement.closest(".textLayer");
|
|
43158
43157
|
const boxes = this.getSelectionBoxes(textLayer);
|
|
@@ -43173,7 +43172,7 @@ var init_pdf = __esm({
|
|
|
43173
43172
|
anchorOffset,
|
|
43174
43173
|
focusNode,
|
|
43175
43174
|
focusOffset,
|
|
43176
|
-
text:
|
|
43175
|
+
text: text11
|
|
43177
43176
|
});
|
|
43178
43177
|
if (isNoneMode) {
|
|
43179
43178
|
this.showAllEditors("highlight", true, true);
|
|
@@ -44879,32 +44878,32 @@ var init_pdf = __esm({
|
|
|
44879
44878
|
deleted: this.isDeleted()
|
|
44880
44879
|
};
|
|
44881
44880
|
}
|
|
44882
|
-
set data(
|
|
44883
|
-
if (
|
|
44881
|
+
set data(text11) {
|
|
44882
|
+
if (text11 !== this.#text) {
|
|
44884
44883
|
this.#richText = null;
|
|
44885
44884
|
}
|
|
44886
|
-
if (
|
|
44885
|
+
if (text11 === null) {
|
|
44887
44886
|
this.#text = "";
|
|
44888
44887
|
this.#deleted = true;
|
|
44889
44888
|
return;
|
|
44890
44889
|
}
|
|
44891
|
-
this.#text =
|
|
44890
|
+
this.#text = text11;
|
|
44892
44891
|
this.#date = /* @__PURE__ */ new Date();
|
|
44893
44892
|
this.#deleted = false;
|
|
44894
44893
|
}
|
|
44895
44894
|
restoreData({
|
|
44896
|
-
text:
|
|
44895
|
+
text: text11,
|
|
44897
44896
|
richText,
|
|
44898
44897
|
date
|
|
44899
44898
|
}) {
|
|
44900
|
-
this.#text =
|
|
44899
|
+
this.#text = text11;
|
|
44901
44900
|
this.#richText = richText;
|
|
44902
44901
|
this.#date = date;
|
|
44903
44902
|
this.#deleted = false;
|
|
44904
44903
|
}
|
|
44905
|
-
setInitialText(
|
|
44906
|
-
this.#initialText =
|
|
44907
|
-
this.data =
|
|
44904
|
+
setInitialText(text11, richText = null) {
|
|
44905
|
+
this.#initialText = text11;
|
|
44906
|
+
this.data = text11;
|
|
44908
44907
|
this.#date = null;
|
|
44909
44908
|
this.#richText = richText;
|
|
44910
44909
|
}
|
|
@@ -45955,8 +45954,8 @@ var init_pdf = __esm({
|
|
|
45955
45954
|
get guessedAltText() {
|
|
45956
45955
|
return this.#altText?.guessedText;
|
|
45957
45956
|
}
|
|
45958
|
-
async setGuessedAltText(
|
|
45959
|
-
await this.#altText?.setGuessedText(
|
|
45957
|
+
async setGuessedAltText(text11) {
|
|
45958
|
+
await this.#altText?.setGuessedText(text11);
|
|
45960
45959
|
}
|
|
45961
45960
|
serializeAltText(isForCopying) {
|
|
45962
45961
|
return this.#altText?.serialize(isForCopying);
|
|
@@ -46003,13 +46002,13 @@ var init_pdf = __esm({
|
|
|
46003
46002
|
const {
|
|
46004
46003
|
data: {
|
|
46005
46004
|
richText,
|
|
46006
|
-
text:
|
|
46005
|
+
text: text11,
|
|
46007
46006
|
date,
|
|
46008
46007
|
deleted
|
|
46009
46008
|
}
|
|
46010
46009
|
} = this.#comment;
|
|
46011
46010
|
return {
|
|
46012
|
-
text:
|
|
46011
|
+
text: text11,
|
|
46013
46012
|
richText,
|
|
46014
46013
|
date,
|
|
46015
46014
|
deleted,
|
|
@@ -56803,13 +56802,13 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
56803
56802
|
} = this;
|
|
56804
56803
|
return this.annotationStorage.getRawValue(`${AnnotationEditorPrefix}${data.id}`)?.popup?.contents || data.contentsObj?.str || "";
|
|
56805
56804
|
}
|
|
56806
|
-
set commentText(
|
|
56805
|
+
set commentText(text11) {
|
|
56807
56806
|
const {
|
|
56808
56807
|
data
|
|
56809
56808
|
} = this;
|
|
56810
56809
|
const popup = {
|
|
56811
|
-
deleted: !
|
|
56812
|
-
contents:
|
|
56810
|
+
deleted: !text11,
|
|
56811
|
+
contents: text11 || ""
|
|
56813
56812
|
};
|
|
56814
56813
|
if (!this.annotationStorage.updateEditor(data.id, {
|
|
56815
56814
|
popup
|
|
@@ -56823,7 +56822,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
56823
56822
|
modificationDate: /* @__PURE__ */ new Date()
|
|
56824
56823
|
});
|
|
56825
56824
|
}
|
|
56826
|
-
if (!
|
|
56825
|
+
if (!text11) {
|
|
56827
56826
|
this.removePopup();
|
|
56828
56827
|
}
|
|
56829
56828
|
}
|
|
@@ -57375,9 +57374,9 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
57375
57374
|
get commentText() {
|
|
57376
57375
|
return this.editor.comment.text;
|
|
57377
57376
|
}
|
|
57378
|
-
set commentText(
|
|
57379
|
-
this.editor.comment =
|
|
57380
|
-
if (!
|
|
57377
|
+
set commentText(text11) {
|
|
57378
|
+
this.editor.comment = text11;
|
|
57379
|
+
if (!text11) {
|
|
57381
57380
|
this.removePopup();
|
|
57382
57381
|
}
|
|
57383
57382
|
}
|
|
@@ -58835,11 +58834,11 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
58835
58834
|
this.#commentText ||= this.#firstElement.commentText;
|
|
58836
58835
|
return this.#commentText;
|
|
58837
58836
|
}
|
|
58838
|
-
set comment(
|
|
58839
|
-
if (
|
|
58837
|
+
set comment(text11) {
|
|
58838
|
+
if (text11 === this.comment) {
|
|
58840
58839
|
return;
|
|
58841
58840
|
}
|
|
58842
|
-
this.#firstElement.commentText = this.#commentText =
|
|
58841
|
+
this.#firstElement.commentText = this.#commentText = text11;
|
|
58843
58842
|
}
|
|
58844
58843
|
focus() {
|
|
58845
58844
|
this.#firstElement.container?.focus();
|
|
@@ -58956,10 +58955,10 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
58956
58955
|
get #fontColor() {
|
|
58957
58956
|
return this.#html?.attributes?.style?.color || null;
|
|
58958
58957
|
}
|
|
58959
|
-
#makePopupContent(
|
|
58958
|
+
#makePopupContent(text11) {
|
|
58960
58959
|
const popupLines = [];
|
|
58961
58960
|
const popupContent = {
|
|
58962
|
-
str:
|
|
58961
|
+
str: text11,
|
|
58963
58962
|
html: {
|
|
58964
58963
|
name: "div",
|
|
58965
58964
|
attributes: {
|
|
@@ -58977,7 +58976,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
58977
58976
|
fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--total-scale-factor))` : ""
|
|
58978
58977
|
}
|
|
58979
58978
|
};
|
|
58980
|
-
for (const line of
|
|
58979
|
+
for (const line of text11.split("\n")) {
|
|
58981
58980
|
popupLines.push({
|
|
58982
58981
|
name: "span",
|
|
58983
58982
|
value: line,
|
|
@@ -60486,9 +60485,9 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
60486
60485
|
if (savedText === newText) {
|
|
60487
60486
|
return;
|
|
60488
60487
|
}
|
|
60489
|
-
const setText = (
|
|
60490
|
-
this.#content =
|
|
60491
|
-
if (!
|
|
60488
|
+
const setText = (text11) => {
|
|
60489
|
+
this.#content = text11;
|
|
60490
|
+
if (!text11) {
|
|
60492
60491
|
this.remove();
|
|
60493
60492
|
return;
|
|
60494
60493
|
}
|
|
@@ -64303,7 +64302,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64303
64302
|
const uint8Buf = this.#toUint8(grayImage);
|
|
64304
64303
|
return [uint8Buf, newWidth, newHeight];
|
|
64305
64304
|
}
|
|
64306
|
-
static extractContoursFromText(
|
|
64305
|
+
static extractContoursFromText(text11, {
|
|
64307
64306
|
fontFamily,
|
|
64308
64307
|
fontStyle,
|
|
64309
64308
|
fontWeight
|
|
@@ -64322,7 +64321,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64322
64321
|
fontBoundingBoxAscent,
|
|
64323
64322
|
fontBoundingBoxDescent,
|
|
64324
64323
|
width
|
|
64325
|
-
} = ctx.measureText(
|
|
64324
|
+
} = ctx.measureText(text11);
|
|
64326
64325
|
const SCALE = 1.5;
|
|
64327
64326
|
const canvasWidth = Math.ceil(Math.max(Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0, width) * SCALE);
|
|
64328
64327
|
const canvasHeight = Math.ceil(Math.max(Math.abs(actualBoundingBoxAscent) + Math.abs(actualBoundingBoxDescent) || fontSize, Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) || fontSize) * SCALE);
|
|
@@ -64336,7 +64335,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64336
64335
|
ctx.fillStyle = "white";
|
|
64337
64336
|
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
64338
64337
|
ctx.fillStyle = "black";
|
|
64339
|
-
ctx.fillText(
|
|
64338
|
+
ctx.fillText(text11, canvasWidth * (SCALE - 1) / 2, canvasHeight * (3 - SCALE) / 2);
|
|
64340
64339
|
const uint8Buf = this.#toUint8(ctx.getImageData(0, 0, canvasWidth, canvasHeight).data);
|
|
64341
64340
|
const histogram = this.#getHistogram(uint8Buf);
|
|
64342
64341
|
const threshold = this.#guessThreshold(histogram);
|
|
@@ -64838,7 +64837,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64838
64837
|
} = this.parent.viewport;
|
|
64839
64838
|
return SignatureExtractor.process(bitmap, pageWidth, pageHeight, rotation, _SignatureEditor._INNER_MARGIN);
|
|
64840
64839
|
}
|
|
64841
|
-
getFromText(
|
|
64840
|
+
getFromText(text11, fontInfo) {
|
|
64842
64841
|
const {
|
|
64843
64842
|
rawDims: {
|
|
64844
64843
|
pageWidth,
|
|
@@ -64846,7 +64845,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64846
64845
|
},
|
|
64847
64846
|
rotation
|
|
64848
64847
|
} = this.parent.viewport;
|
|
64849
|
-
return SignatureExtractor.extractContoursFromText(
|
|
64848
|
+
return SignatureExtractor.extractContoursFromText(text11, fontInfo, pageWidth, pageHeight, rotation, _SignatureEditor._INNER_MARGIN);
|
|
64850
64849
|
}
|
|
64851
64850
|
getDrawnSignature(curves) {
|
|
64852
64851
|
const {
|
|
@@ -116189,11 +116188,11 @@ function pluralArgNames(pattern) {
|
|
|
116189
116188
|
return out2;
|
|
116190
116189
|
}
|
|
116191
116190
|
function formatInterpolated(pattern, params, resolvedByKey, ctx) {
|
|
116192
|
-
const
|
|
116191
|
+
const numeric2 = pluralArgNames(pattern);
|
|
116193
116192
|
const args = {};
|
|
116194
116193
|
for (const [k2, raw] of Object.entries(params)) {
|
|
116195
116194
|
const v2 = k2 in resolvedByKey ? resolvedByKey[k2] : raw;
|
|
116196
|
-
if (!
|
|
116195
|
+
if (!numeric2.has(k2)) {
|
|
116197
116196
|
args[k2] = v2;
|
|
116198
116197
|
continue;
|
|
116199
116198
|
}
|
|
@@ -116729,9 +116728,9 @@ function withExtras(name, render) {
|
|
|
116729
116728
|
Wrapped.displayName = name;
|
|
116730
116729
|
return Wrapped;
|
|
116731
116730
|
}
|
|
116732
|
-
function rememberReveal(
|
|
116731
|
+
function rememberReveal(text11, n2) {
|
|
116733
116732
|
if (revealProgress.size > 500) revealProgress.clear();
|
|
116734
|
-
revealProgress.set(
|
|
116733
|
+
revealProgress.set(text11, n2);
|
|
116735
116734
|
}
|
|
116736
116735
|
function revealHtml(html, shown2, fade) {
|
|
116737
116736
|
let w2 = 0;
|
|
@@ -117575,8 +117574,8 @@ function applyA11ySemantics(node, ctx, extra) {
|
|
|
117575
117574
|
extra["aria-live"] = str11(announce.politeness) === "assertive" ? "assertive" : "polite";
|
|
117576
117575
|
extra["aria-atomic"] = "true";
|
|
117577
117576
|
extra["aria-relevant"] = trigger === "on_appear" ? "additions" : trigger === "both" ? "additions text" : "text";
|
|
117578
|
-
const
|
|
117579
|
-
if (
|
|
117577
|
+
const text11 = str11(announce.text);
|
|
117578
|
+
if (text11 && extra["aria-label"] == null) extra["aria-label"] = text11;
|
|
117580
117579
|
}
|
|
117581
117580
|
}
|
|
117582
117581
|
return hint;
|
|
@@ -119902,13 +119901,13 @@ var init_renderNode = __esm({
|
|
|
119902
119901
|
const C2 = ctx.color;
|
|
119903
119902
|
const isBoundText = typeof props.textPath === "string" && isBinding(props.textPath);
|
|
119904
119903
|
const bound = useResolvedScalar(isBoundText ? props.textPath : void 0, ctx);
|
|
119905
|
-
const
|
|
119904
|
+
const text11 = isBoundText ? typeof bound === "string" || typeof bound === "number" ? String(bound) : "" : literalErrorText;
|
|
119906
119905
|
if (props.visible === false) return null;
|
|
119907
|
-
if (isBoundText && !
|
|
119906
|
+
if (isBoundText && !text11) return null;
|
|
119908
119907
|
const c2 = (props.severity ?? "error") === "warning" ? C2("warning", "#E89F00") : C2("danger", "#E62214");
|
|
119909
119908
|
return /* @__PURE__ */ jsxs8("div", { role: "alert", style: { display: "flex", gap: 6, alignItems: "center", color: c2, fontSize: pxToRem(13), fontFamily: bodyFont(ctx), ...wrap }, children: [
|
|
119910
119909
|
/* @__PURE__ */ jsx11("span", { "aria-hidden": "true", children: "\u26A0" }),
|
|
119911
|
-
|
|
119910
|
+
text11
|
|
119912
119911
|
] });
|
|
119913
119912
|
});
|
|
119914
119913
|
FormView = withExtras("FormView", ({ props, ctx, wrap }) => {
|
|
@@ -120534,7 +120533,7 @@ var init_renderNode = __esm({
|
|
|
120534
120533
|
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
120535
120534
|
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
120536
120535
|
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
120537
|
-
const
|
|
120536
|
+
const object9 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(React11.Suspense, { fallback: /* @__PURE__ */ jsx11("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx11(
|
|
120538
120537
|
PdfDocumentCanvas,
|
|
120539
120538
|
{
|
|
120540
120539
|
src: loadSrc ?? src,
|
|
@@ -120548,7 +120547,7 @@ var init_renderNode = __esm({
|
|
|
120548
120547
|
style: documentStyle
|
|
120549
120548
|
}
|
|
120550
120549
|
) });
|
|
120551
|
-
if (!showPageControls && !zoomable && !allowShare) return
|
|
120550
|
+
if (!showPageControls && !zoomable && !allowShare) return object9;
|
|
120552
120551
|
const C2 = ctx.color;
|
|
120553
120552
|
const go2 = (p2) => setNav({ from: rawUrl, page: Math.max(1, pageCount != null ? Math.min(p2, pageCount) : p2), zoom: view.zoom });
|
|
120554
120553
|
const zoomBy = (d2) => setNav({ from: rawUrl, page: view.page, zoom: pdfZoomStep(view.zoom ?? sourceZoomPercent(sourceHash) ?? null, d2) });
|
|
@@ -120566,7 +120565,7 @@ var init_renderNode = __esm({
|
|
|
120566
120565
|
const downloadHref = plan?.mode === "retype" ? base : directDoc?.blobUrl ?? null;
|
|
120567
120566
|
const openHref = base + pdfOpenFragment(sourceHash, { page: shownPage, zoom: zoomable ? view.zoom : null, viewerChrome: true });
|
|
120568
120567
|
return /* @__PURE__ */ jsxs8("div", { "data-himalaya-pdf": "reader", style: { ...frame, display: "flex", flexDirection: "column", background: C2("surfaceTertiary", "#f4f4f4") }, children: [
|
|
120569
|
-
|
|
120568
|
+
object9,
|
|
120570
120569
|
/* @__PURE__ */ jsxs8(
|
|
120571
120570
|
"div",
|
|
120572
120571
|
{
|
|
@@ -120675,8 +120674,8 @@ var init_renderNode = __esm({
|
|
|
120675
120674
|
const look = pickerFieldLook(props.field, ctx);
|
|
120676
120675
|
const shownSel = ctx.onAction ? sel : ctx.empty ? null : selectedId;
|
|
120677
120676
|
const picked = opts.find((o2) => o2 != null && String(o2.id) === String(shownSel ?? ""));
|
|
120678
|
-
const
|
|
120679
|
-
const box = /* @__PURE__ */ jsx11(PickerFieldBox, { look, ctx, option: picked, text:
|
|
120677
|
+
const text11 = picked ? labelOf(picked) : String(placeholderText || "Select");
|
|
120678
|
+
const box = /* @__PURE__ */ jsx11(PickerFieldBox, { look, ctx, option: picked, text: text11, isPlaceholder: !picked, font: bodyFont(ctx) });
|
|
120680
120679
|
if (!ctx.onAction) return /* @__PURE__ */ jsx11("div", { style: { width: "100%", ...wrap }, children: box });
|
|
120681
120680
|
return /* @__PURE__ */ jsxs8("div", { ...{ [A11Y_PART]: "root" }, "data-hm-picker-focus": "", style: { position: "relative", width: "100%", ...wrap }, children: [
|
|
120682
120681
|
box,
|
|
@@ -120695,7 +120694,7 @@ var init_renderNode = __esm({
|
|
|
120695
120694
|
...pickerA11yProps,
|
|
120696
120695
|
style: { position: "absolute", inset: 0, width: "100%", height: "100%", opacity: 0, cursor: "pointer", margin: 0, border: 0, fontSize: pxToRem(15) },
|
|
120697
120696
|
children: [
|
|
120698
|
-
!picked && /* @__PURE__ */ jsx11("option", { value: "", disabled: true, children:
|
|
120697
|
+
!picked && /* @__PURE__ */ jsx11("option", { value: "", disabled: true, children: text11 }),
|
|
120699
120698
|
opts.map((o2, i2) => /* @__PURE__ */ jsx11("option", { value: o2?.id, disabled: !pickerOptionPickable(o2), children: labelOf(o2) }, o2?.id ?? i2))
|
|
120700
120699
|
]
|
|
120701
120700
|
}
|
|
@@ -121145,37 +121144,37 @@ var init_renderNode = __esm({
|
|
|
121145
121144
|
REVEAL_BUFFER = 12;
|
|
121146
121145
|
revealProgress = /* @__PURE__ */ new Map();
|
|
121147
121146
|
countWords = (s2) => s2.split(/\s+/).filter((t2) => t2 !== "").length;
|
|
121148
|
-
RevealText = ({ text:
|
|
121149
|
-
const tokens2 = React11.useMemo(() =>
|
|
121147
|
+
RevealText = ({ text: text11, reduce, markdownHtml }) => {
|
|
121148
|
+
const tokens2 = React11.useMemo(() => text11.split(/(\s+)/).filter((t2) => t2 !== ""), [text11]);
|
|
121150
121149
|
const total = React11.useMemo(
|
|
121151
|
-
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(
|
|
121152
|
-
[
|
|
121150
|
+
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(text11),
|
|
121151
|
+
[text11, markdownHtml]
|
|
121153
121152
|
);
|
|
121154
121153
|
const [shown2, setShown] = React11.useState(total);
|
|
121155
121154
|
const prevRef = React11.useRef(null);
|
|
121156
121155
|
useIsomorphicLayoutEffect(() => {
|
|
121157
121156
|
const prev = prevRef.current;
|
|
121158
|
-
prevRef.current =
|
|
121157
|
+
prevRef.current = text11;
|
|
121159
121158
|
if (reduce) {
|
|
121160
|
-
rememberReveal(
|
|
121159
|
+
rememberReveal(text11, total);
|
|
121161
121160
|
setShown(total);
|
|
121162
121161
|
return;
|
|
121163
121162
|
}
|
|
121164
|
-
let start = revealProgress.get(
|
|
121165
|
-
if (start == null) start = prev != null &&
|
|
121163
|
+
let start = revealProgress.get(text11);
|
|
121164
|
+
if (start == null) start = prev != null && text11.startsWith(prev) ? revealProgress.get(prev) ?? countWords(prev) : 0;
|
|
121166
121165
|
start = Math.max(start, total - REVEAL_BUFFER);
|
|
121167
|
-
rememberReveal(
|
|
121166
|
+
rememberReveal(text11, start);
|
|
121168
121167
|
setShown(start);
|
|
121169
121168
|
if (start >= total) return;
|
|
121170
121169
|
let n2 = start;
|
|
121171
121170
|
const id = setInterval(() => {
|
|
121172
121171
|
n2 += 1;
|
|
121173
|
-
rememberReveal(
|
|
121172
|
+
rememberReveal(text11, n2);
|
|
121174
121173
|
setShown(n2);
|
|
121175
121174
|
if (n2 >= total) clearInterval(id);
|
|
121176
121175
|
}, REVEAL_RELEASE_MS);
|
|
121177
121176
|
return () => clearInterval(id);
|
|
121178
|
-
}, [
|
|
121177
|
+
}, [text11, reduce, total]);
|
|
121179
121178
|
const fade = reduce ? void 0 : `opacity ${REVEAL_FADE_MS}ms ease-out`;
|
|
121180
121179
|
if (markdownHtml != null) {
|
|
121181
121180
|
return /* @__PURE__ */ jsx11(
|
|
@@ -122178,7 +122177,7 @@ var init_renderNode = __esm({
|
|
|
122178
122177
|
TooltipNode = withExtras("TooltipNode", ({ props, ctx, wrap }) => {
|
|
122179
122178
|
const C2 = ctx.color;
|
|
122180
122179
|
const title = useBoundString(props.title, ctx);
|
|
122181
|
-
const
|
|
122180
|
+
const text11 = useBoundString(props.text, ctx);
|
|
122182
122181
|
const rich = title !== "";
|
|
122183
122182
|
const trigger = resolveTooltipTrigger(props.trigger, "pointer");
|
|
122184
122183
|
const edge = resolveOverlayEdge("Tooltip", props.edge);
|
|
@@ -122268,7 +122267,7 @@ var init_renderNode = __esm({
|
|
|
122268
122267
|
// A held press would otherwise open the browser's own context menu over the bubble.
|
|
122269
122268
|
onContextMenu: (e2) => e2.preventDefault()
|
|
122270
122269
|
};
|
|
122271
|
-
const hint = [title,
|
|
122270
|
+
const hint = [title, text11].filter((s2) => s2 !== "").join(". ");
|
|
122272
122271
|
const anchor = props.anchor ? renderNode(props.anchor, ctx) : null;
|
|
122273
122272
|
const wrapperHintId = `hm-tip-hint${React11.useId()}`;
|
|
122274
122273
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -122301,7 +122300,7 @@ var init_renderNode = __esm({
|
|
|
122301
122300
|
] }) }),
|
|
122302
122301
|
open && /* @__PURE__ */ jsxs8("div", { ref: bubbleRef, role: "tooltip", "data-hm-tooltip-edge": placed, style: { position: "absolute", zIndex: 45, maxWidth: Math.min(240, placement.maxWidth), overflowWrap: placement.maxWidth < 240 ? "anywhere" : void 0, width: "max-content", background: C2("textPrimary", "#13171e"), color: C2("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.35, boxShadow: "0 4px 14px rgba(0,0,0,.18)", ...overlayEdgeStyle(placed, TOOLTIP_GAP), translate: `${placement.x}px ${placement.y}px` }, children: [
|
|
122303
122302
|
rich && /* @__PURE__ */ jsx11("div", { style: { fontWeight: 700, marginBottom: 3 }, children: title }),
|
|
122304
|
-
|
|
122303
|
+
text11
|
|
122305
122304
|
] })
|
|
122306
122305
|
] });
|
|
122307
122306
|
});
|
|
@@ -124895,8 +124894,8 @@ function buildRenderTree(node, path2 = "$", provider = null, itemScope = void 0,
|
|
|
124895
124894
|
const asText3 = VALUE_PATH_TEXT.get(type);
|
|
124896
124895
|
if (typeof valuePath === "string" && asText3 && (valuePath.startsWith("$service:") || /^\$item\.[^.]/.test(valuePath))) {
|
|
124897
124896
|
const r3 = resolveTreeScalar(valuePath, provider, itemScope);
|
|
124898
|
-
const
|
|
124899
|
-
if (
|
|
124897
|
+
const text11 = asText3(r3, props);
|
|
124898
|
+
if (text11 !== void 0) values.value = text11;
|
|
124900
124899
|
else if (r3 !== void 0 && r3 !== null) {
|
|
124901
124900
|
delete values.value;
|
|
124902
124901
|
}
|
|
@@ -126845,11 +126844,11 @@ async function handleOwnerChatRequest(req, res) {
|
|
|
126845
126844
|
return sendJson(res, 400, { error: "invalid_json" }, cors);
|
|
126846
126845
|
}
|
|
126847
126846
|
const chatroomId = (parsed.chatroomId ?? "").trim();
|
|
126848
|
-
const
|
|
126849
|
-
if (!chatroomId || !
|
|
126847
|
+
const text11 = (parsed.text ?? "").trim();
|
|
126848
|
+
if (!chatroomId || !text11) return sendJson(res, 400, { error: "chatroomId_and_text_required" }, cors);
|
|
126850
126849
|
const metaSiteId = (parsed.metaSiteId ?? "").trim() || await resolveMetaSiteId();
|
|
126851
126850
|
if (!metaSiteId) return sendJson(res, 400, { error: "no_meta_site" }, cors);
|
|
126852
|
-
const result = await sendChatMessageLive(metaSiteId, chatroomId,
|
|
126851
|
+
const result = await sendChatMessageLive(metaSiteId, chatroomId, text11);
|
|
126853
126852
|
if (result.ok) return sendJson(res, 200, { ok: true, message: result.message }, cors);
|
|
126854
126853
|
return sendJson(res, result.status >= 400 && result.status < 600 ? result.status : 502, { ok: false, status: result.status, error: result.error }, cors);
|
|
126855
126854
|
}
|
|
@@ -127143,13 +127142,13 @@ function invalidate(state, ...screenIds) {
|
|
|
127143
127142
|
publishSSE(state, "screen.invalidated", { screenIds });
|
|
127144
127143
|
}
|
|
127145
127144
|
function publishSSE(state, type, payload) {
|
|
127146
|
-
const
|
|
127145
|
+
const text11 = `event: ${type}
|
|
127147
127146
|
data: ${JSON.stringify(payload)}
|
|
127148
127147
|
|
|
127149
127148
|
`;
|
|
127150
127149
|
for (const res of [...state.sseClients]) {
|
|
127151
127150
|
try {
|
|
127152
|
-
res.write(
|
|
127151
|
+
res.write(text11);
|
|
127153
127152
|
} catch {
|
|
127154
127153
|
state.sseClients.delete(res);
|
|
127155
127154
|
}
|
|
@@ -127165,13 +127164,13 @@ function publishAdminSSE(state, type, payload) {
|
|
|
127165
127164
|
state.lastDeviceScreen.set(key3, screenId);
|
|
127166
127165
|
}
|
|
127167
127166
|
}
|
|
127168
|
-
const
|
|
127167
|
+
const text11 = `event: ${type}
|
|
127169
127168
|
data: ${JSON.stringify(payload)}
|
|
127170
127169
|
|
|
127171
127170
|
`;
|
|
127172
127171
|
for (const res of [...state.adminClients]) {
|
|
127173
127172
|
try {
|
|
127174
|
-
res.write(
|
|
127173
|
+
res.write(text11);
|
|
127175
127174
|
} catch {
|
|
127176
127175
|
state.adminClients.delete(res);
|
|
127177
127176
|
}
|
|
@@ -127192,12 +127191,12 @@ function publishDevReady(state, res, extra = {}) {
|
|
|
127192
127191
|
hotReloadEnabled: state.hotReloadEnabled,
|
|
127193
127192
|
...extra
|
|
127194
127193
|
};
|
|
127195
|
-
const
|
|
127194
|
+
const text11 = `event: dev.ready
|
|
127196
127195
|
data: ${JSON.stringify(payload)}
|
|
127197
127196
|
|
|
127198
127197
|
`;
|
|
127199
127198
|
if (res) {
|
|
127200
|
-
res.write(
|
|
127199
|
+
res.write(text11);
|
|
127201
127200
|
} else {
|
|
127202
127201
|
publishSSE(state, "dev.ready", payload);
|
|
127203
127202
|
}
|
|
@@ -129246,9 +129245,9 @@ async function handleLiveSubscription(req, res, state) {
|
|
|
129246
129245
|
},
|
|
129247
129246
|
body: JSON.stringify({ ...body, app })
|
|
129248
129247
|
});
|
|
129249
|
-
const
|
|
129248
|
+
const text11 = await upstream.text();
|
|
129250
129249
|
res.writeHead(upstream.status, { "Content-Type": "application/json", ...cors });
|
|
129251
|
-
res.end(
|
|
129250
|
+
res.end(text11 || JSON.stringify({ ok: upstream.ok }));
|
|
129252
129251
|
} catch (error) {
|
|
129253
129252
|
sendJson(res, 502, { error: "admin_server_unreachable", detail: String(error) }, cors);
|
|
129254
129253
|
}
|
|
@@ -130203,8 +130202,8 @@ function sha256hex(b2) {
|
|
|
130203
130202
|
function stableStringify(value) {
|
|
130204
130203
|
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
130205
130204
|
if (Array.isArray(value)) return "[" + value.map(stableStringify).join(",") + "]";
|
|
130206
|
-
const
|
|
130207
|
-
return "{" + Object.keys(
|
|
130205
|
+
const object9 = value;
|
|
130206
|
+
return "{" + Object.keys(object9).sort().map((key3) => JSON.stringify(key3) + ":" + stableStringify(object9[key3])).join(",") + "}";
|
|
130208
130207
|
}
|
|
130209
130208
|
function manifestContent(m2) {
|
|
130210
130209
|
const {
|
|
@@ -131537,10 +131536,10 @@ function componentModuleIds() {
|
|
|
131537
131536
|
function usageStringCopyFor(permissionCopy) {
|
|
131538
131537
|
const out2 = {};
|
|
131539
131538
|
for (const [rawId, copy] of Object.entries(permissionCopy ?? {})) {
|
|
131540
|
-
const
|
|
131541
|
-
if (!
|
|
131539
|
+
const text11 = typeof copy === "string" ? copy.trim() : "";
|
|
131540
|
+
if (!text11) continue;
|
|
131542
131541
|
const req = CAPABILITY_NATIVE[catalogKey(rawId)];
|
|
131543
|
-
for (const u2 of [...req?.ios?.usageStrings ?? [], ...req?.macos?.usageStrings ?? []]) out2[u2.key] =
|
|
131542
|
+
for (const u2 of [...req?.ios?.usageStrings ?? [], ...req?.macos?.usageStrings ?? []]) out2[u2.key] = text11;
|
|
131544
131543
|
}
|
|
131545
131544
|
return out2;
|
|
131546
131545
|
}
|
|
@@ -132465,10 +132464,10 @@ function netTransport(rules) {
|
|
|
132465
132464
|
if (res.needsUpstream) {
|
|
132466
132465
|
throw new Error(`net fixture rule ${res.ruleId} is a \`transform\` rule, which needs a real upstream \u2014 not usable in a hermetic crawl`);
|
|
132467
132466
|
}
|
|
132468
|
-
const { status, body:
|
|
132467
|
+
const { status, body: text11 } = res.resolved;
|
|
132469
132468
|
if (status < 200 || status >= 300) throw new Error(`Wix ${status} for ${method} ${bare}`);
|
|
132470
132469
|
try {
|
|
132471
|
-
return
|
|
132470
|
+
return text11 ? JSON.parse(text11) : {};
|
|
132472
132471
|
} catch {
|
|
132473
132472
|
return {};
|
|
132474
132473
|
}
|
|
@@ -132512,10 +132511,10 @@ function layeredTransport(layers3) {
|
|
|
132512
132511
|
});
|
|
132513
132512
|
if (res.matched) {
|
|
132514
132513
|
if (res.needsUpstream) throw new Error(`net fixture rule ${res.ruleId} is a \`transform\` rule, which needs a real upstream \u2014 not usable in a hermetic crawl`);
|
|
132515
|
-
const { status, body:
|
|
132514
|
+
const { status, body: text11 } = res.resolved;
|
|
132516
132515
|
if (status < 200 || status >= 300) throw new Error(`Wix ${status} for ${m2} ${bare}`);
|
|
132517
132516
|
try {
|
|
132518
|
-
return
|
|
132517
|
+
return text11 ? JSON.parse(text11) : {};
|
|
132519
132518
|
} catch {
|
|
132520
132519
|
return {};
|
|
132521
132520
|
}
|
|
@@ -134689,13 +134688,13 @@ var init_build2 = __esm({
|
|
|
134689
134688
|
});
|
|
134690
134689
|
|
|
134691
134690
|
// ../mobile-dist/release-pin.ts
|
|
134692
|
-
function withPinnedRelease(
|
|
134693
|
-
if (!releaseId) return
|
|
134691
|
+
function withPinnedRelease(text11, releaseId) {
|
|
134692
|
+
if (!releaseId) return text11;
|
|
134694
134693
|
let cfg;
|
|
134695
134694
|
try {
|
|
134696
|
-
cfg = JSON.parse(
|
|
134695
|
+
cfg = JSON.parse(text11);
|
|
134697
134696
|
} catch {
|
|
134698
|
-
return
|
|
134697
|
+
return text11;
|
|
134699
134698
|
}
|
|
134700
134699
|
cfg.releaseId = releaseId;
|
|
134701
134700
|
cfg.releasePinned = true;
|
|
@@ -135068,18 +135067,18 @@ async function bakeCatalogs(app, locale, fetchCatalog, putDoc) {
|
|
|
135068
135067
|
const source = locale?.default ?? "en";
|
|
135069
135068
|
const tags = [.../* @__PURE__ */ new Set([source, ...declared])];
|
|
135070
135069
|
for (const tag of tags) {
|
|
135071
|
-
const
|
|
135072
|
-
if (!
|
|
135073
|
-
if (!declared.length && !servesMessages(
|
|
135074
|
-
const hash2 = sha2563(
|
|
135075
|
-
await putDoc(app, hash2,
|
|
135070
|
+
const text11 = await fetchCatalog(tag);
|
|
135071
|
+
if (!text11) continue;
|
|
135072
|
+
if (!declared.length && !servesMessages(text11)) continue;
|
|
135073
|
+
const hash2 = sha2563(text11);
|
|
135074
|
+
await putDoc(app, hash2, text11);
|
|
135076
135075
|
out2[tag] = hash2;
|
|
135077
135076
|
}
|
|
135078
135077
|
return out2;
|
|
135079
135078
|
}
|
|
135080
|
-
function servesMessages(
|
|
135079
|
+
function servesMessages(text11) {
|
|
135081
135080
|
try {
|
|
135082
|
-
const m2 = JSON.parse(
|
|
135081
|
+
const m2 = JSON.parse(text11).messages;
|
|
135083
135082
|
return !!m2 && typeof m2 === "object" && Object.keys(m2).length > 0;
|
|
135084
135083
|
} catch {
|
|
135085
135084
|
return false;
|
|
@@ -135174,9 +135173,9 @@ async function snapshotTokens(app, base, fetchTokens, put) {
|
|
|
135174
135173
|
}
|
|
135175
135174
|
};
|
|
135176
135175
|
}
|
|
135177
|
-
const
|
|
135178
|
-
await put(
|
|
135179
|
-
return { hash: sha2563(
|
|
135176
|
+
const text11 = await res.text();
|
|
135177
|
+
await put(text11);
|
|
135178
|
+
return { hash: sha2563(text11) };
|
|
135180
135179
|
}
|
|
135181
135180
|
function tokensSnapshotMessage(app, base, status) {
|
|
135182
135181
|
const why = status === 400 ? `the dev-server rejected the app id as malformed (400 bad_app). It must be lowercase letters, digits and hyphens, starting with a letter or digit, at most 63 characters, with at most one interior dot \u2014 so a leading underscore or an uppercase letter fails, on every build of that app. A single dot is FINE (an owner-namespaced slug), so do not remove one to get past this` : `${status} from the tokens route`;
|
|
@@ -135277,23 +135276,23 @@ function maximumBinaryVersion(current, candidate) {
|
|
|
135277
135276
|
}
|
|
135278
135277
|
return current;
|
|
135279
135278
|
}
|
|
135280
|
-
async function withStoreNavBundle(
|
|
135279
|
+
async function withStoreNavBundle(text11, address) {
|
|
135281
135280
|
let cfg;
|
|
135282
135281
|
try {
|
|
135283
|
-
cfg = JSON.parse(
|
|
135282
|
+
cfg = JSON.parse(text11);
|
|
135284
135283
|
} catch {
|
|
135285
|
-
return
|
|
135284
|
+
return text11;
|
|
135286
135285
|
}
|
|
135287
135286
|
const refs = [cfg?.app?.logicBundle, cfg?.navigation?.navLogicBundle, cfg?.navLogicBundle].filter(
|
|
135288
135287
|
(r3) => !!r3 && typeof r3 === "object" && typeof r3.url === "string"
|
|
135289
135288
|
);
|
|
135290
|
-
if (refs.length === 0) return
|
|
135289
|
+
if (refs.length === 0) return text11;
|
|
135291
135290
|
const resolved2 = [];
|
|
135292
135291
|
for (const ref of refs) {
|
|
135293
135292
|
const name = bundleNameFromUrl(ref.url);
|
|
135294
|
-
if (!name) return
|
|
135293
|
+
if (!name) return text11;
|
|
135295
135294
|
const addressed = await address(name);
|
|
135296
|
-
if (!addressed) return
|
|
135295
|
+
if (!addressed) return text11;
|
|
135297
135296
|
resolved2.push({ ref, url: addressed.url, sri: addressed.sri });
|
|
135298
135297
|
}
|
|
135299
135298
|
for (const { ref, url, sri: integrity2 } of resolved2) {
|
|
@@ -135302,10 +135301,10 @@ async function withStoreNavBundle(text10, address) {
|
|
|
135302
135301
|
}
|
|
135303
135302
|
return JSON.stringify(cfg);
|
|
135304
135303
|
}
|
|
135305
|
-
function linkableScreenIdsFrom(
|
|
135304
|
+
function linkableScreenIdsFrom(text11) {
|
|
135306
135305
|
let cfg;
|
|
135307
135306
|
try {
|
|
135308
|
-
cfg = JSON.parse(
|
|
135307
|
+
cfg = JSON.parse(text11);
|
|
135309
135308
|
} catch {
|
|
135310
135309
|
return [];
|
|
135311
135310
|
}
|
|
@@ -135317,24 +135316,24 @@ function linkableScreenIdsFrom(text10) {
|
|
|
135317
135316
|
}
|
|
135318
135317
|
return [...ids];
|
|
135319
135318
|
}
|
|
135320
|
-
function withoutDevOnlyAppConfig(
|
|
135319
|
+
function withoutDevOnlyAppConfig(text11) {
|
|
135321
135320
|
let cfg;
|
|
135322
135321
|
try {
|
|
135323
|
-
cfg = JSON.parse(
|
|
135322
|
+
cfg = JSON.parse(text11);
|
|
135324
135323
|
} catch {
|
|
135325
|
-
return
|
|
135324
|
+
return text11;
|
|
135326
135325
|
}
|
|
135327
|
-
if (!cfg || typeof cfg !== "object" || !("devGatewayConfig" in cfg)) return
|
|
135326
|
+
if (!cfg || typeof cfg !== "object" || !("devGatewayConfig" in cfg)) return text11;
|
|
135328
135327
|
delete cfg.devGatewayConfig;
|
|
135329
135328
|
return JSON.stringify(cfg);
|
|
135330
135329
|
}
|
|
135331
|
-
function withProdServeAppConfig(
|
|
135332
|
-
if (!prod?.serve) return
|
|
135330
|
+
function withProdServeAppConfig(text11, prod) {
|
|
135331
|
+
if (!prod?.serve) return text11;
|
|
135333
135332
|
let cfg;
|
|
135334
135333
|
try {
|
|
135335
|
-
cfg = JSON.parse(
|
|
135334
|
+
cfg = JSON.parse(text11);
|
|
135336
135335
|
} catch {
|
|
135337
|
-
return
|
|
135336
|
+
return text11;
|
|
135338
135337
|
}
|
|
135339
135338
|
cfg.useProdServe = true;
|
|
135340
135339
|
cfg.prodServeBaseUrl = prod.serve;
|
|
@@ -135717,10 +135716,10 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135717
135716
|
if (bytes2.length === 0 || bytes2.length > MAX_AUTHORING_DOC_BYTES) {
|
|
135718
135717
|
throw new Error(`${file2} must be non-empty and at most ${MAX_AUTHORING_DOC_BYTES} bytes to ship with a release.`);
|
|
135719
135718
|
}
|
|
135720
|
-
const
|
|
135721
|
-
if (!Buffer.from(
|
|
135719
|
+
const text11 = bytes2.toString("utf8");
|
|
135720
|
+
if (!Buffer.from(text11, "utf8").equals(bytes2)) throw new Error(`${file2} must be canonical UTF-8 Markdown.`);
|
|
135722
135721
|
const hash2 = sha2563(bytes2);
|
|
135723
|
-
await store.putDoc(app, hash2,
|
|
135722
|
+
await store.putDoc(app, hash2, text11);
|
|
135724
135723
|
authoringDocs[name] = { sha256: hash2, sri: sri2(bytes2), bytes: bytes2.length, contentType: "text/markdown; charset=utf-8" };
|
|
135725
135724
|
}
|
|
135726
135725
|
}
|
|
@@ -135873,10 +135872,10 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135873
135872
|
base = BAKE_OFFLINE_BASE;
|
|
135874
135873
|
}
|
|
135875
135874
|
const devFetch = (url, init) => dev.inject(new Request(url, init));
|
|
135876
|
-
const depthRefusalFromText = (status,
|
|
135875
|
+
const depthRefusalFromText = (status, text11) => {
|
|
135877
135876
|
if (status !== 422) return null;
|
|
135878
135877
|
try {
|
|
135879
|
-
const body = JSON.parse(
|
|
135878
|
+
const body = JSON.parse(text11);
|
|
135880
135879
|
return body?.error === "depth_budget_exceeded" && body.finding ? body.finding : null;
|
|
135881
135880
|
} catch {
|
|
135882
135881
|
return null;
|
|
@@ -135884,8 +135883,8 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135884
135883
|
};
|
|
135885
135884
|
const depthRefusalOf = async (res) => depthRefusalFromText(res.status, await res.text());
|
|
135886
135885
|
const recordUnbuilt = async (screenId, res) => {
|
|
135887
|
-
const
|
|
135888
|
-
const finding = depthRefusalFromText(res.status,
|
|
135886
|
+
const text11 = await res.text();
|
|
135887
|
+
const finding = depthRefusalFromText(res.status, text11);
|
|
135889
135888
|
if (finding) {
|
|
135890
135889
|
failedToBuild.push({ screenId, status: res.status, error: finding.message });
|
|
135891
135890
|
if (!depthRefusals.some((r3) => r3.screenId === screenId)) depthRefusals.push({ screenId, finding });
|
|
@@ -135894,7 +135893,7 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135894
135893
|
}
|
|
135895
135894
|
return;
|
|
135896
135895
|
}
|
|
135897
|
-
failedToBuild.push({ screenId, status: res.status, error:
|
|
135896
|
+
failedToBuild.push({ screenId, status: res.status, error: text11.slice(0, 2e3) });
|
|
135898
135897
|
};
|
|
135899
135898
|
try {
|
|
135900
135899
|
for (const screenId of screenIds) {
|
|
@@ -136139,11 +136138,11 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
136139
136138
|
ok: res.ok,
|
|
136140
136139
|
status: res.status,
|
|
136141
136140
|
text: async () => {
|
|
136142
|
-
const
|
|
136141
|
+
const text11 = await res.text();
|
|
136143
136142
|
try {
|
|
136144
|
-
const doc = JSON.parse(
|
|
136143
|
+
const doc = JSON.parse(text11);
|
|
136145
136144
|
if (!publishedFontPlan) {
|
|
136146
|
-
if (!("fontFaces" in doc)) return
|
|
136145
|
+
if (!("fontFaces" in doc)) return text11;
|
|
136147
136146
|
const kept = publishableFontFaces(doc.fontFaces);
|
|
136148
136147
|
if (kept) doc.fontFaces = kept;
|
|
136149
136148
|
else delete doc.fontFaces;
|
|
@@ -136152,12 +136151,12 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
136152
136151
|
doc.fontFaces = servedProjection(publishedFontPlan);
|
|
136153
136152
|
return JSON.stringify(doc);
|
|
136154
136153
|
} catch {
|
|
136155
|
-
return
|
|
136154
|
+
return text11;
|
|
136156
136155
|
}
|
|
136157
136156
|
}
|
|
136158
136157
|
};
|
|
136159
136158
|
},
|
|
136160
|
-
(
|
|
136159
|
+
(text11) => store.putTokens(app, text11)
|
|
136161
136160
|
);
|
|
136162
136161
|
if (snapshot2.hash) tokensHash = snapshot2.hash;
|
|
136163
136162
|
if (snapshot2.failure) {
|
|
@@ -136187,14 +136186,14 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
136187
136186
|
if (streamPolicyErrors.length) {
|
|
136188
136187
|
throw new Error(`invalid streamPolicy for release ${app}: ${streamPolicyErrors.join("; ")}`);
|
|
136189
136188
|
}
|
|
136190
|
-
const
|
|
136189
|
+
const text11 = await withStoreNavBundle(prodText, async (name) => {
|
|
136191
136190
|
const hash2 = await addressBundle(name) ?? null;
|
|
136192
136191
|
const entry = hash2 ? bundles[name] : void 0;
|
|
136193
136192
|
return entry ? { url: store.bundleUrl(app, entry.sha256), sri: entry.sri } : null;
|
|
136194
136193
|
});
|
|
136195
|
-
await store.putAppConfig(app,
|
|
136196
|
-
appConfigHash = sha2563(
|
|
136197
|
-
if (collect2?.descriptors) for (const id of linkableScreenIdsFrom(
|
|
136194
|
+
await store.putAppConfig(app, text11);
|
|
136195
|
+
appConfigHash = sha2563(text11);
|
|
136196
|
+
if (collect2?.descriptors) for (const id of linkableScreenIdsFrom(text11)) linkable.add(id);
|
|
136198
136197
|
}
|
|
136199
136198
|
const ahRes = await devFetch(`${base}/v1/action-handlers/${encodeURIComponent(app)}`, { headers: { "X-Himalaya-App": app } });
|
|
136200
136199
|
if (ahRes.ok) {
|
|
@@ -137123,8 +137122,8 @@ function penalty(m2, size) {
|
|
|
137123
137122
|
score += Math.floor(Math.abs(dark * 20 - total * 10) / total) * 10;
|
|
137124
137123
|
return score;
|
|
137125
137124
|
}
|
|
137126
|
-
function encodeQr(
|
|
137127
|
-
const bytes2 = [...new TextEncoder().encode(
|
|
137125
|
+
function encodeQr(text11) {
|
|
137126
|
+
const bytes2 = [...new TextEncoder().encode(text11)];
|
|
137128
137127
|
const version5 = fitVersion(bytes2.length);
|
|
137129
137128
|
if (!version5) {
|
|
137130
137129
|
throw new RangeError(`QR payload too long: ${bytes2.length} bytes exceeds version ${QR_MAX_VERSION} at EC level L`);
|
|
@@ -137364,14 +137363,14 @@ function headline(changes) {
|
|
|
137364
137363
|
function boardLines(changes) {
|
|
137365
137364
|
const lines = [];
|
|
137366
137365
|
for (const c2 of changes.items) {
|
|
137367
|
-
const
|
|
137368
|
-
const same3 = lines.find((l2) => l2.text ===
|
|
137366
|
+
const text11 = lineOf(c2);
|
|
137367
|
+
const same3 = lines.find((l2) => l2.text === text11);
|
|
137369
137368
|
if (same3) {
|
|
137370
137369
|
same3.n++;
|
|
137371
137370
|
continue;
|
|
137372
137371
|
}
|
|
137373
137372
|
lines.push({
|
|
137374
|
-
text:
|
|
137373
|
+
text: text11,
|
|
137375
137374
|
n: 1,
|
|
137376
137375
|
...c2.kind === "token" && c2.from && HEX.test(c2.from) ? { from: c2.from } : {},
|
|
137377
137376
|
...c2.kind === "token" && c2.to && HEX.test(c2.to) ? { to: c2.to } : {}
|
|
@@ -138158,10 +138157,10 @@ function ownerTransport(msid, fetchImpl = fetch, timeoutMs = DEFAULT_TIMEOUT_MS,
|
|
|
138158
138157
|
}
|
|
138159
138158
|
throw new Error(`${method} ${path2} failed: ${err?.message ?? String(e2)}`);
|
|
138160
138159
|
}
|
|
138161
|
-
const
|
|
138162
|
-
let parsed =
|
|
138160
|
+
const text11 = await res.text();
|
|
138161
|
+
let parsed = text11;
|
|
138163
138162
|
try {
|
|
138164
|
-
parsed =
|
|
138163
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
138165
138164
|
} catch {
|
|
138166
138165
|
}
|
|
138167
138166
|
if (!res.ok) throw new WixApiError(res.status, method, path2, parsed);
|
|
@@ -138343,10 +138342,10 @@ function scalar3(v2) {
|
|
|
138343
138342
|
}
|
|
138344
138343
|
return t2;
|
|
138345
138344
|
}
|
|
138346
|
-
function parseStoreConfig(
|
|
138345
|
+
function parseStoreConfig(text11) {
|
|
138347
138346
|
const cfg = {};
|
|
138348
138347
|
let section3 = null;
|
|
138349
|
-
for (const raw of
|
|
138348
|
+
for (const raw of text11.split("\n")) {
|
|
138350
138349
|
const line = strip2(raw);
|
|
138351
138350
|
if (!line.trim()) continue;
|
|
138352
138351
|
const indented = /^\s+/.test(raw);
|
|
@@ -143504,7 +143503,7 @@ function prettify(node, options, matcher, readonlyMatcher) {
|
|
|
143504
143503
|
return compress(node, options, matcher, readonlyMatcher);
|
|
143505
143504
|
}
|
|
143506
143505
|
function compress(arr2, options, matcher, readonlyMatcher) {
|
|
143507
|
-
let
|
|
143506
|
+
let text11;
|
|
143508
143507
|
const compressedObj = {};
|
|
143509
143508
|
for (let i2 = 0; i2 < arr2.length; i2++) {
|
|
143510
143509
|
const tagObj = arr2[i2];
|
|
@@ -143517,8 +143516,8 @@ function compress(arr2, options, matcher, readonlyMatcher) {
|
|
|
143517
143516
|
matcher.push(property2, rawAttrs);
|
|
143518
143517
|
}
|
|
143519
143518
|
if (property2 === options.textNodeName) {
|
|
143520
|
-
if (
|
|
143521
|
-
else
|
|
143519
|
+
if (text11 === void 0) text11 = tagObj[property2];
|
|
143520
|
+
else text11 += "" + tagObj[property2];
|
|
143522
143521
|
} else if (property2 === void 0) {
|
|
143523
143522
|
continue;
|
|
143524
143523
|
} else if (tagObj[property2]) {
|
|
@@ -143556,9 +143555,9 @@ function compress(arr2, options, matcher, readonlyMatcher) {
|
|
|
143556
143555
|
}
|
|
143557
143556
|
}
|
|
143558
143557
|
}
|
|
143559
|
-
if (typeof
|
|
143560
|
-
if (
|
|
143561
|
-
} else if (
|
|
143558
|
+
if (typeof text11 === "string") {
|
|
143559
|
+
if (text11.length > 0) compressedObj[options.textNodeName] = text11;
|
|
143560
|
+
} else if (text11 !== void 0) compressedObj[options.textNodeName] = text11;
|
|
143562
143561
|
return compressedObj;
|
|
143563
143562
|
}
|
|
143564
143563
|
function propName2(obj5) {
|
|
@@ -143736,9 +143735,9 @@ function arrToStr(arr2, options, indentation, matcher, stopNodeExpressions, xmlV
|
|
|
143736
143735
|
}
|
|
143737
143736
|
if (!Array.isArray(arr2)) {
|
|
143738
143737
|
if (arr2 !== void 0 && arr2 !== null) {
|
|
143739
|
-
let
|
|
143740
|
-
|
|
143741
|
-
return
|
|
143738
|
+
let text11 = arr2.toString();
|
|
143739
|
+
text11 = replaceEntitiesValue2(text11, options);
|
|
143740
|
+
return text11;
|
|
143742
143741
|
}
|
|
143743
143742
|
return "";
|
|
143744
143743
|
}
|
|
@@ -144024,22 +144023,22 @@ function resolveTagName2(name, isAttribute2, options, matcher, xmlVersion) {
|
|
|
144024
144023
|
if (qName(name, { xmlVersion })) return name;
|
|
144025
144024
|
return options.sanitizeName(name, { isAttribute: isAttribute2, matcher: matcher.readOnly() });
|
|
144026
144025
|
}
|
|
144027
|
-
function processTextOrObjNode(
|
|
144028
|
-
const attrValues = this.extractAttributes(
|
|
144026
|
+
function processTextOrObjNode(object9, key3, level, matcher, xmlVersion) {
|
|
144027
|
+
const attrValues = this.extractAttributes(object9);
|
|
144029
144028
|
matcher.push(key3, attrValues);
|
|
144030
144029
|
const isStopNode = this.checkStopNode(matcher);
|
|
144031
144030
|
if (isStopNode) {
|
|
144032
|
-
const rawContent = this.buildRawContent(
|
|
144033
|
-
const attrStr = this.buildAttributesForStopNode(
|
|
144031
|
+
const rawContent = this.buildRawContent(object9);
|
|
144032
|
+
const attrStr = this.buildAttributesForStopNode(object9);
|
|
144034
144033
|
matcher.pop();
|
|
144035
144034
|
return this.buildObjectNode(rawContent, key3, attrStr, level);
|
|
144036
144035
|
}
|
|
144037
|
-
const result = this.j2x(
|
|
144036
|
+
const result = this.j2x(object9, level + 1, matcher, xmlVersion);
|
|
144038
144037
|
matcher.pop();
|
|
144039
144038
|
if (key3[0] === "?") {
|
|
144040
144039
|
return this.buildTextValNode("", key3, result.attrStr, level, matcher);
|
|
144041
|
-
} else if (
|
|
144042
|
-
return this.buildTextValNode(
|
|
144040
|
+
} else if (object9[this.options.textNodeName] !== void 0 && Object.keys(object9).length === 1) {
|
|
144041
|
+
return this.buildTextValNode(object9[this.options.textNodeName], key3, result.attrStr, level, matcher);
|
|
144043
144042
|
} else {
|
|
144044
144043
|
return this.buildObjectNode(result.val, key3, result.attrStr, level);
|
|
144045
144044
|
}
|
|
@@ -146018,9 +146017,9 @@ function bundlesOf(block) {
|
|
|
146018
146017
|
walk2(block);
|
|
146019
146018
|
return [...out2];
|
|
146020
146019
|
}
|
|
146021
|
-
function parseJson2(
|
|
146020
|
+
function parseJson2(text11, what) {
|
|
146022
146021
|
try {
|
|
146023
|
-
const value = JSON.parse(
|
|
146022
|
+
const value = JSON.parse(text11);
|
|
146024
146023
|
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("not an object");
|
|
146025
146024
|
return value;
|
|
146026
146025
|
} catch (e2) {
|
|
@@ -146605,9 +146604,9 @@ function planTrim(src, keepIds, links) {
|
|
|
146605
146604
|
for (const r3 of keptRoutes) for (const b2 of r3.bundles) keptWorkers.add(b2);
|
|
146606
146605
|
const importsOf2 = (dir) => {
|
|
146607
146606
|
const out2 = [];
|
|
146608
|
-
for (const [rel,
|
|
146607
|
+
for (const [rel, text11] of Object.entries(src.workerFiles)) {
|
|
146609
146608
|
if (!rel.startsWith(`tier5-src/${dir}/`)) continue;
|
|
146610
|
-
for (const m2 of
|
|
146609
|
+
for (const m2 of text11.matchAll(/(?:\bfrom\s*|\bimport\s*\(?\s*|\brequire\s*\(\s*)["']\.\.\/([A-Za-z0-9_.-]+)(?:\/|["'])/g)) out2.push(m2[1]);
|
|
146611
146610
|
}
|
|
146612
146611
|
return out2;
|
|
146613
146612
|
};
|
|
@@ -146653,9 +146652,9 @@ function planTrim(src, keepIds, links) {
|
|
|
146653
146652
|
continue;
|
|
146654
146653
|
}
|
|
146655
146654
|
const block = edited.get(r3);
|
|
146656
|
-
let
|
|
146657
|
-
if (r3 === app.home && homeModules?.text !== void 0)
|
|
146658
|
-
if (
|
|
146655
|
+
let text11 = block ? serializeAt(block, app.dev, r3.open) : void 0;
|
|
146656
|
+
if (r3 === app.home && homeModules?.text !== void 0) text11 = homeModules.text;
|
|
146657
|
+
if (text11 !== void 0) cut2(r3.open, r3.close, text11);
|
|
146659
146658
|
}
|
|
146660
146659
|
if (templatedEmptied) cut2(templatedEmptied[0], templatedEmptied[1], "\n");
|
|
146661
146660
|
dev += app.dev.slice(cursor);
|
|
@@ -146708,9 +146707,9 @@ function homeModulesPass(app, kept, edited) {
|
|
|
146708
146707
|
const removedVertical = verticals.some(([, card2]) => !kept.has(app.exact.get(card2.screenId)));
|
|
146709
146708
|
if (!removedVertical) return { dropped: [] };
|
|
146710
146709
|
const block = edited.get(app.home);
|
|
146711
|
-
const
|
|
146710
|
+
const text11 = block ? serializeAt(block, app.dev, app.home.open) : app.dev.slice(app.home.open, app.home.close);
|
|
146712
146711
|
const installed = verticals.filter(([, card2]) => kept.has(app.exact.get(card2.screenId))).map(([v2]) => v2);
|
|
146713
|
-
const patched = patchHomeModules(
|
|
146712
|
+
const patched = patchHomeModules(text11, installed);
|
|
146714
146713
|
if (!patched.droppedModules.length) return { dropped: [] };
|
|
146715
146714
|
return { text: patched.src, dropped: patched.droppedModules };
|
|
146716
146715
|
}
|
|
@@ -147092,8 +147091,8 @@ function workerReach(src) {
|
|
|
147092
147091
|
const f2 = queue.shift();
|
|
147093
147092
|
if (seen.has(f2)) continue;
|
|
147094
147093
|
seen.add(f2);
|
|
147095
|
-
const
|
|
147096
|
-
for (const m2 of
|
|
147094
|
+
const text11 = all.get(f2) ?? "";
|
|
147095
|
+
for (const m2 of text11.matchAll(RELATIVE_IMPORT)) {
|
|
147097
147096
|
const r3 = resolveImport(f2, m2[1], all);
|
|
147098
147097
|
if (r3 && !seen.has(r3)) queue.push(r3);
|
|
147099
147098
|
}
|
|
@@ -147103,11 +147102,11 @@ function workerReach(src) {
|
|
|
147103
147102
|
let fetchCall = false;
|
|
147104
147103
|
const hits = [];
|
|
147105
147104
|
for (const f2 of [...seen].sort()) {
|
|
147106
|
-
const
|
|
147105
|
+
const text11 = all.get(f2) ?? "";
|
|
147107
147106
|
const before = wix.size;
|
|
147108
|
-
for (const m2 of
|
|
147109
|
-
const r3 = /\bwixApi\b/.test(
|
|
147110
|
-
const fe2 = /(?<![.\w])fetch\s*\(/.test(
|
|
147107
|
+
for (const m2 of text11.matchAll(WIX_MODULE)) wix.add(m2[1].replace(/^@wix\/himalaya\//, "@himalaya/"));
|
|
147108
|
+
const r3 = /\bwixApi\b/.test(text11);
|
|
147109
|
+
const fe2 = /(?<![.\w])fetch\s*\(/.test(text11);
|
|
147111
147110
|
if (wix.size > before || r3 || fe2) hits.push(f2);
|
|
147112
147111
|
raw ||= r3;
|
|
147113
147112
|
fetchCall ||= fe2;
|
|
@@ -147519,10 +147518,10 @@ async function pushSetupRequest(options) {
|
|
|
147519
147518
|
signal: AbortSignal.timeout(options.timeoutMs ?? (setup ? 12e4 : 3e4)),
|
|
147520
147519
|
...setup ? { body: JSON.stringify(options.body) } : {}
|
|
147521
147520
|
});
|
|
147522
|
-
const
|
|
147521
|
+
const text11 = await response.text();
|
|
147523
147522
|
let parsed = null;
|
|
147524
147523
|
try {
|
|
147525
|
-
const value =
|
|
147524
|
+
const value = text11 ? JSON.parse(text11) : null;
|
|
147526
147525
|
parsed = value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
147527
147526
|
} catch {
|
|
147528
147527
|
parsed = null;
|
|
@@ -147666,8 +147665,8 @@ function appendProperties(literal, file2, lines) {
|
|
|
147666
147665
|
const at2 = trailing ? literal.properties.end : last.end;
|
|
147667
147666
|
const lead = trailing ? "" : ",";
|
|
147668
147667
|
if (onOneLine(literal, file2)) {
|
|
147669
|
-
const
|
|
147670
|
-
return { at: at2, end: at2, text: `${lead} ${trailing ?
|
|
147668
|
+
const text11 = inline();
|
|
147669
|
+
return { at: at2, end: at2, text: `${lead} ${trailing ? text11 : text11.replace(/,$/, "")}` };
|
|
147671
147670
|
}
|
|
147672
147671
|
const indent = lineIndent2(file2.text, last.getStart(file2));
|
|
147673
147672
|
return { at: at2, end: at2, text: lead + lines.map((line) => `
|
|
@@ -147677,9 +147676,9 @@ function onOneLine(node, file2) {
|
|
|
147677
147676
|
const line = (position) => file2.getLineAndCharacterOfPosition(position).line;
|
|
147678
147677
|
return line(node.getStart(file2)) === line(node.getEnd());
|
|
147679
147678
|
}
|
|
147680
|
-
function lineIndent2(
|
|
147681
|
-
const lineStart =
|
|
147682
|
-
return /^[ \t]*/.exec(
|
|
147679
|
+
function lineIndent2(text11, position) {
|
|
147680
|
+
const lineStart = text11.lastIndexOf("\n", position - 1) + 1;
|
|
147681
|
+
return /^[ \t]*/.exec(text11.slice(lineStart))[0];
|
|
147683
147682
|
}
|
|
147684
147683
|
function applySplices(source, splices) {
|
|
147685
147684
|
return [...splices].sort((a2, b2) => b2.at - a2.at).reduce((out2, s2) => out2.slice(0, s2.at) + s2.text + out2.slice(s2.end), source);
|
|
@@ -149187,9 +149186,9 @@ __export(screen_state_exports, {
|
|
|
149187
149186
|
import { createHash as createHash26 } from "node:crypto";
|
|
149188
149187
|
import { lstatSync as lstatSync15, readFileSync as readFileSync51 } from "node:fs";
|
|
149189
149188
|
import { join as join40 } from "node:path";
|
|
149190
|
-
function quotableLine(
|
|
149191
|
-
if (!
|
|
149192
|
-
const first =
|
|
149189
|
+
function quotableLine(text11) {
|
|
149190
|
+
if (!text11) return void 0;
|
|
149191
|
+
const first = text11.split(/\r?\n/).map((l2) => l2.trim()).find(Boolean);
|
|
149193
149192
|
if (!first) return void 0;
|
|
149194
149193
|
let line = first.replace(/\s+/g, " ");
|
|
149195
149194
|
if (line.length > LINE_MAX) {
|
|
@@ -149202,9 +149201,9 @@ function quotableLine(text10) {
|
|
|
149202
149201
|
function visibleText(html) {
|
|
149203
149202
|
return html.replace(/<(script|style)\b[\s\S]*?<\/\1>/gi, " ").replace(/<[^>]*>/g, " ").replace(/&#x([0-9a-f]+);/gi, (_2, h2) => String.fromCodePoint(parseInt(h2, 16))).replace(/&#(\d+);/g, (_2, d2) => String.fromCodePoint(Number(d2))).replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/ /g, " ").replace(/&/g, "&").replace(/\s+/g, " ");
|
|
149204
149203
|
}
|
|
149205
|
-
function painted(
|
|
149204
|
+
function painted(text11, page) {
|
|
149206
149205
|
if (page === void 0) return true;
|
|
149207
|
-
const probe =
|
|
149206
|
+
const probe = text11.replace(/\s+/g, " ").trim().slice(0, 60);
|
|
149208
149207
|
return !!probe && page.includes(probe);
|
|
149209
149208
|
}
|
|
149210
149209
|
function errorMessageOf(s2) {
|
|
@@ -150414,8 +150413,8 @@ var init_cms_schema = __esm({
|
|
|
150414
150413
|
|
|
150415
150414
|
// ../native-config/car.ts
|
|
150416
150415
|
function parseCarConfig(configTs) {
|
|
150417
|
-
const { text:
|
|
150418
|
-
for (const m2 of
|
|
150416
|
+
const { text: text11, inString } = scanConfig(configTs);
|
|
150417
|
+
for (const m2 of text11.matchAll(/\bcar\s*[:=]\s*\{([^}]*)\}/g)) {
|
|
150419
150418
|
if (inString[m2.index]) continue;
|
|
150420
150419
|
return { category: /category\s*:\s*["']([^"']+)["']/.exec(m2[1])?.[1] };
|
|
150421
150420
|
}
|
|
@@ -150940,10 +150939,10 @@ function tokenColorIssues(dir, tokensPathOverride) {
|
|
|
150940
150939
|
if (controlButton === void 0 || controlButton === null || typeof controlButton !== "object" || Array.isArray(controlButton)) return;
|
|
150941
150940
|
const btn = controlButton;
|
|
150942
150941
|
for (const size of ["sm", "md", "lg"]) {
|
|
150943
|
-
const
|
|
150944
|
-
if (
|
|
150942
|
+
const text11 = btn[size]?.text;
|
|
150943
|
+
if (text11 === void 0 || typeof text11 === "string" && typo.has(text11)) continue;
|
|
150945
150944
|
error(
|
|
150946
|
-
`${tokensPath}: ${where}controls.button.${size}.text is ${JSON.stringify(
|
|
150945
|
+
`${tokensPath}: ${where}controls.button.${size}.text is ${JSON.stringify(text11)}, which names no \`typography\` token \u2014 every renderer would keep the built-in Button label. Name one that exists.`
|
|
150947
150946
|
);
|
|
150948
150947
|
}
|
|
150949
150948
|
const variants = btn.variants;
|
|
@@ -151373,16 +151372,16 @@ function encode(value, quote) {
|
|
|
151373
151372
|
if (quote === "'") return `'${value.replace(/[\\']/g, "\\$&").replace(/\n/g, "\\n")}'`;
|
|
151374
151373
|
return `\`${value.replace(/[\\`]|\$(?=\{)/g, "\\$&")}\``;
|
|
151375
151374
|
}
|
|
151376
|
-
function syntaxErrors(file2,
|
|
151375
|
+
function syntaxErrors(file2, text11) {
|
|
151377
151376
|
if (file2.endsWith(".json")) {
|
|
151378
151377
|
try {
|
|
151379
|
-
JSON.parse(
|
|
151378
|
+
JSON.parse(text11);
|
|
151380
151379
|
return [];
|
|
151381
151380
|
} catch (e2) {
|
|
151382
151381
|
return [e2.message];
|
|
151383
151382
|
}
|
|
151384
151383
|
}
|
|
151385
|
-
const out2 = ts7.transpileModule(
|
|
151384
|
+
const out2 = ts7.transpileModule(text11, { fileName: file2, reportDiagnostics: true, compilerOptions: { target: ts7.ScriptTarget.ES2022 } });
|
|
151386
151385
|
return (out2.diagnostics ?? []).map((d2) => ts7.flattenDiagnosticMessageText(d2.messageText, "\n"));
|
|
151387
151386
|
}
|
|
151388
151387
|
function sweepCopy(dir, pairs, dryRun) {
|
|
@@ -151394,10 +151393,10 @@ function sweepCopy(dir, pairs, dryRun) {
|
|
|
151394
151393
|
const next = /* @__PURE__ */ new Map();
|
|
151395
151394
|
const replaced = pairs.map(([from, to2]) => ({ from, to: to2, files: {} }));
|
|
151396
151395
|
for (const f2 of files) {
|
|
151397
|
-
const
|
|
151398
|
-
if (!pairs.some(([from]) =>
|
|
151396
|
+
const text11 = readFileSync59(join49(dir, f2), "utf8");
|
|
151397
|
+
if (!pairs.some(([from]) => text11.includes(from) || text11.includes(JSON.stringify(from).slice(1, -1)))) continue;
|
|
151399
151398
|
const kind = f2.endsWith(".json") ? ts7.ScriptKind.JSON : f2.endsWith("x") ? ts7.ScriptKind.TSX : ts7.ScriptKind.TS;
|
|
151400
|
-
const sf2 = ts7.createSourceFile(f2,
|
|
151399
|
+
const sf2 = ts7.createSourceFile(f2, text11, ts7.ScriptTarget.Latest, true, kind);
|
|
151401
151400
|
const edits = [];
|
|
151402
151401
|
const visit = (node) => {
|
|
151403
151402
|
if ((ts7.isStringLiteral(node) || ts7.isNoSubstitutionTemplateLiteral(node)) && isCopy(node, f2)) {
|
|
@@ -151410,14 +151409,14 @@ function sweepCopy(dir, pairs, dryRun) {
|
|
|
151410
151409
|
});
|
|
151411
151410
|
if (value !== node.text) {
|
|
151412
151411
|
const start = node.getStart(sf2);
|
|
151413
|
-
edits.push({ start, end: node.end, text: encode(value,
|
|
151412
|
+
edits.push({ start, end: node.end, text: encode(value, text11[start]) });
|
|
151414
151413
|
}
|
|
151415
151414
|
}
|
|
151416
151415
|
ts7.forEachChild(node, visit);
|
|
151417
151416
|
};
|
|
151418
151417
|
visit(sf2);
|
|
151419
151418
|
if (!edits.length) continue;
|
|
151420
|
-
let out2 =
|
|
151419
|
+
let out2 = text11;
|
|
151421
151420
|
for (const e2 of edits.sort((a2, b2) => b2.start - a2.start)) out2 = out2.slice(0, e2.start) + e2.text + out2.slice(e2.end);
|
|
151422
151421
|
const errors = syntaxErrors(f2, out2);
|
|
151423
151422
|
if (errors.length) throw new TrimRefusal(`the sweep would break ${f2} \u2014 nothing written: ${errors[0]}`);
|
|
@@ -151711,9 +151710,9 @@ function verticalsFromBook(path2) {
|
|
|
151711
151710
|
throw new Error(`no book.json / provisioning.overlay.json under ${path2} \u2014 run \`himi site analyze\` first, or pass --verticals`);
|
|
151712
151711
|
}
|
|
151713
151712
|
function recommendTemplates(input) {
|
|
151714
|
-
const
|
|
151715
|
-
const owner = OWNER_WORDS.test(
|
|
151716
|
-
const want = new Set(tokens(
|
|
151713
|
+
const text11 = input.text ?? "";
|
|
151714
|
+
const owner = OWNER_WORDS.test(text11);
|
|
151715
|
+
const want = new Set(tokens(text11));
|
|
151717
151716
|
const byName3 = /* @__PURE__ */ new Map();
|
|
151718
151717
|
for (const row of input.catalog) {
|
|
151719
151718
|
const reasons = [];
|
|
@@ -151727,7 +151726,7 @@ function recommendTemplates(input) {
|
|
|
151727
151726
|
reasons.push(`matches ${hit.map((h2) => `"${h2}"`).join(", ")}`);
|
|
151728
151727
|
}
|
|
151729
151728
|
}
|
|
151730
|
-
if (
|
|
151729
|
+
if (text11) {
|
|
151731
151730
|
if (owner === isOwner) {
|
|
151732
151731
|
score += 0.3;
|
|
151733
151732
|
reasons.push(owner ? "owner/operations app, and this is an owner template" : "customer-facing app, and this is a customer template");
|
|
@@ -153335,9 +153334,9 @@ function xmlAttr(value) {
|
|
|
153335
153334
|
return value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
153336
153335
|
}
|
|
153337
153336
|
function renderHealthPermissionCopyXml(copy, indent) {
|
|
153338
|
-
const
|
|
153339
|
-
if (!
|
|
153340
|
-
return [`${indent}<meta-data android:name="${HEALTH_PERMISSION_COPY_META}" android:value="${xmlAttr(
|
|
153337
|
+
const text11 = copy?.trim();
|
|
153338
|
+
if (!text11) return [];
|
|
153339
|
+
return [`${indent}<meta-data android:name="${HEALTH_PERMISSION_COPY_META}" android:value="${xmlAttr(text11)}" />`];
|
|
153341
153340
|
}
|
|
153342
153341
|
function renderModulesIosPackage(products, indent) {
|
|
153343
153342
|
return products.flatMap((p2) => {
|
|
@@ -153504,8 +153503,8 @@ function swiftFilesWithModuleMarkers(app) {
|
|
|
153504
153503
|
if (entry.isDirectory()) {
|
|
153505
153504
|
if (!entry.name.endsWith(".xcodeproj")) stack.push(path2);
|
|
153506
153505
|
} else if (entry.isFile() && entry.name.endsWith(".swift")) {
|
|
153507
|
-
const
|
|
153508
|
-
if (hasMarkers(
|
|
153506
|
+
const text11 = readFileSync64(path2, "utf8");
|
|
153507
|
+
if (hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_IMPORT) || hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_INSTALL)) out2.push(path2);
|
|
153509
153508
|
}
|
|
153510
153509
|
}
|
|
153511
153510
|
}
|
|
@@ -153540,8 +153539,8 @@ function kotlinBootSourcesUnder(root) {
|
|
|
153540
153539
|
}
|
|
153541
153540
|
return out2.sort();
|
|
153542
153541
|
}
|
|
153543
|
-
function stripComments2(
|
|
153544
|
-
return
|
|
153542
|
+
function stripComments2(text11) {
|
|
153543
|
+
return text11.replace(/\/\*[\s\S]*?\*\//g, (c2) => c2.replace(/[^\n]/g, " ")).replace(/\/\/[^\n]*/g, "");
|
|
153545
153544
|
}
|
|
153546
153545
|
function duplicateModuleInstalls(...texts) {
|
|
153547
153546
|
const calls = ["installLinkedModules", ...NATIVE_MODULES.flatMap((m2) => m2.ios ? [`${m2.ios.product}.install`] : [])];
|
|
@@ -153603,19 +153602,19 @@ function hostAppliesDeferredWidgetActions(app) {
|
|
|
153603
153602
|
}
|
|
153604
153603
|
return false;
|
|
153605
153604
|
}
|
|
153606
|
-
function countBeginMarkers(
|
|
153607
|
-
return
|
|
153605
|
+
function countBeginMarkers(text11, kind, label3) {
|
|
153606
|
+
return text11.split("\n").filter((l2) => isBegin(l2, kind, label3)).length;
|
|
153608
153607
|
}
|
|
153609
|
-
function countEndMarkers(
|
|
153610
|
-
return
|
|
153608
|
+
function countEndMarkers(text11, kind, label3) {
|
|
153609
|
+
return text11.split("\n").filter((l2) => isEnd(l2, kind, label3)).length;
|
|
153611
153610
|
}
|
|
153612
|
-
function hasMarkers(
|
|
153613
|
-
const lines =
|
|
153611
|
+
function hasMarkers(text11, kind, label3) {
|
|
153612
|
+
const lines = text11.split("\n");
|
|
153614
153613
|
return lines.some((l2) => isBegin(l2, kind, label3)) && lines.some((l2) => isEnd(l2, kind, label3));
|
|
153615
153614
|
}
|
|
153616
|
-
function assertSingleMarkerPair(
|
|
153617
|
-
const opens = countBeginMarkers(
|
|
153618
|
-
const closes = countEndMarkers(
|
|
153615
|
+
function assertSingleMarkerPair(text11, kind, label3, where = "the file") {
|
|
153616
|
+
const opens = countBeginMarkers(text11, kind, label3);
|
|
153617
|
+
const closes = countEndMarkers(text11, kind, label3);
|
|
153619
153618
|
if (opens > 1 || closes > 1) {
|
|
153620
153619
|
const which = opens > 1 ? `">>> ${label3}" opens ${opens} times` : `"<<< ${label3}" closes ${closes} times`;
|
|
153621
153620
|
throw new Error(
|
|
@@ -153623,9 +153622,9 @@ function assertSingleMarkerPair(text10, kind, label3, where = "the file") {
|
|
|
153623
153622
|
);
|
|
153624
153623
|
}
|
|
153625
153624
|
}
|
|
153626
|
-
function injectBlock(
|
|
153627
|
-
assertSingleMarkerPair(
|
|
153628
|
-
const lines =
|
|
153625
|
+
function injectBlock(text11, kind, label3, render, where = "the file") {
|
|
153626
|
+
assertSingleMarkerPair(text11, kind, label3, where);
|
|
153627
|
+
const lines = text11.split("\n");
|
|
153629
153628
|
const beginIdx = lines.findIndex((l2) => isBegin(l2, kind, label3));
|
|
153630
153629
|
const endIdx = lines.findIndex((l2) => isEnd(l2, kind, label3));
|
|
153631
153630
|
if (beginIdx === -1 || endIdx === -1 || endIdx < beginIdx) {
|
|
@@ -153665,8 +153664,8 @@ function applyToFile(path2, kind, label3, render, check) {
|
|
|
153665
153664
|
function assertModuleFlagsMarkers(paths) {
|
|
153666
153665
|
for (const path2 of paths) {
|
|
153667
153666
|
if (!existsSync54(path2)) continue;
|
|
153668
|
-
const
|
|
153669
|
-
if (hasMarkers(
|
|
153667
|
+
const text11 = readFileSync64(path2, "utf8");
|
|
153668
|
+
if (hasMarkers(text11, "yaml", LABEL_MODULES_IOS_LINK) && !hasMarkers(text11, "yaml", LABEL_MODULES_IOS_FLAGS)) {
|
|
153670
153669
|
throw new Error(`${path2} links modules (${LABEL_MODULES_IOS_LINK}) but has no ${LABEL_MODULES_IOS_FLAGS} block under its project-level settings:, so no module would install. Add the markers (see apps/_template).`);
|
|
153671
153670
|
}
|
|
153672
153671
|
}
|
|
@@ -153902,8 +153901,8 @@ function genNativeConfig(app, opts = {}) {
|
|
|
153902
153901
|
}
|
|
153903
153902
|
}
|
|
153904
153903
|
for (const swift of swiftFilesWithModuleMarkers(app)) {
|
|
153905
|
-
const
|
|
153906
|
-
if (!hasMarkers(
|
|
153904
|
+
const text11 = readFileSync64(swift, "utf8");
|
|
153905
|
+
if (!hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_IMPORT) || !hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_INSTALL)) {
|
|
153907
153906
|
throw new Error(`${app}: ${swift} must carry both ${LABEL_MODULES_SWIFT_IMPORT} and ${LABEL_MODULES_SWIFT_INSTALL} markers`);
|
|
153908
153907
|
}
|
|
153909
153908
|
files.push(applyToFile(swift, "slash", LABEL_MODULES_SWIFT_IMPORT, renderModulesSwiftImport, check));
|
|
@@ -153912,8 +153911,8 @@ function genNativeConfig(app, opts = {}) {
|
|
|
153912
153911
|
files.push(...genCapabilityRegistrations(appDir(app), ids, check));
|
|
153913
153912
|
const rce = declaresRichContentEditor(configTs);
|
|
153914
153913
|
for (const yml of [iosYml, macosProjectYml(app)]) {
|
|
153915
|
-
const
|
|
153916
|
-
const r3 = applyToFile(yml, "yaml", LABEL_LOCALWEB, renderLocalWebYaml(resourcesDirOf(
|
|
153914
|
+
const text11 = existsSync54(yml) ? readFileSync64(yml, "utf8") : "";
|
|
153915
|
+
const r3 = applyToFile(yml, "yaml", LABEL_LOCALWEB, renderLocalWebYaml(resourcesDirOf(text11), rce), check);
|
|
153917
153916
|
if (existsSync54(yml)) assertLocalWebBlockLanded(app, rce, yml, r3.outcome);
|
|
153918
153917
|
files.push(r3);
|
|
153919
153918
|
}
|
|
@@ -154894,8 +154893,8 @@ function renderBase44Types(entities, app) {
|
|
|
154894
154893
|
for (const f2 of fields) body.push(` ${key2(f2.key)}${required3.has(f2.key) ? "" : "?"}: ${fieldType(f2)};`);
|
|
154895
154894
|
body.push("};", `export const ${name} = entities<${name}Row>(${JSON.stringify(physicalEntityName(e2, app))});`);
|
|
154896
154895
|
}
|
|
154897
|
-
const
|
|
154898
|
-
const types = ["Json", "JsonObject"].filter((t2) => new RegExp(`\\b${t2}\\b`).test(
|
|
154896
|
+
const text11 = body.join("\n");
|
|
154897
|
+
const types = ["Json", "JsonObject"].filter((t2) => new RegExp(`\\b${t2}\\b`).test(text11)).map((t2) => `type ${t2}`);
|
|
154899
154898
|
if (usable.length) L2.push(`import { ${["entities", ...types].join(", ")} } from "@himalaya/base44";`);
|
|
154900
154899
|
return [...L2, ...body].join("\n") + "\n";
|
|
154901
154900
|
}
|
|
@@ -154907,14 +154906,14 @@ async function declaredEntities(dir) {
|
|
|
154907
154906
|
async function writeBase44Types(dir, app) {
|
|
154908
154907
|
const list = await declaredEntities(dir);
|
|
154909
154908
|
if (!list?.length) throw new Base44TypesError("no_base44_entities", "config.ts declares no base44.entities \u2014 nothing to type. Declare them (or run `himi base44 adopt`) first.");
|
|
154910
|
-
const
|
|
154909
|
+
const text11 = renderBase44Types(list, app);
|
|
154911
154910
|
const path2 = join56(dir, BASE44_TYPES_PATH);
|
|
154912
|
-
const changed = !existsSync56(path2) || readFileSync66(path2, "utf8") !==
|
|
154911
|
+
const changed = !existsSync56(path2) || readFileSync66(path2, "utf8") !== text11;
|
|
154913
154912
|
if (changed) {
|
|
154914
154913
|
mkdirSync26(dirname32(path2), { recursive: true });
|
|
154915
|
-
writeFileSync22(path2,
|
|
154914
|
+
writeFileSync22(path2, text11);
|
|
154916
154915
|
}
|
|
154917
|
-
return { path: path2, changed, entities:
|
|
154916
|
+
return { path: path2, changed, entities: text11.split("\nexport const ").length - 1 };
|
|
154918
154917
|
}
|
|
154919
154918
|
async function base44TypesIssues(dir, app, strict) {
|
|
154920
154919
|
const path2 = join56(dir, BASE44_TYPES_PATH);
|
|
@@ -155872,8 +155871,8 @@ function isNoneEntry(entry) {
|
|
|
155872
155871
|
const head = entryHead(entry);
|
|
155873
155872
|
return NONE.test(entry) || head !== "" && NONE.test(head);
|
|
155874
155873
|
}
|
|
155875
|
-
function parseDataAccess(
|
|
155876
|
-
const body =
|
|
155874
|
+
function parseDataAccess(text11, from) {
|
|
155875
|
+
const body = text11.replace(/<!--[\s\S]*?(?:-->|$)/g, "");
|
|
155877
155876
|
const heading = new RegExp(`(?:^|\\n)##[ \\t]+${DATA_ACCESS_HEADING}\\b[^\\n]*([\\s\\S]*?)(?=\\n##[ \\t]|$)`, "i").exec(body);
|
|
155878
155877
|
if (!heading) return null;
|
|
155879
155878
|
const lines = heading[1].split("\n").map((l2) => l2.trim()).filter((l2) => l2.startsWith("|"));
|
|
@@ -155900,13 +155899,13 @@ function readDataAccess(dir) {
|
|
|
155900
155899
|
for (const name of ["SPEC.md", "MOBILE-UX.md"]) {
|
|
155901
155900
|
const p2 = join62(dir, name);
|
|
155902
155901
|
if (!existsSync61(p2)) continue;
|
|
155903
|
-
let
|
|
155902
|
+
let text11;
|
|
155904
155903
|
try {
|
|
155905
|
-
|
|
155904
|
+
text11 = readFileSync71(p2, "utf8");
|
|
155906
155905
|
} catch {
|
|
155907
155906
|
continue;
|
|
155908
155907
|
}
|
|
155909
|
-
const plan = parseDataAccess(
|
|
155908
|
+
const plan = parseDataAccess(text11, name);
|
|
155910
155909
|
if (plan) return plan;
|
|
155911
155910
|
}
|
|
155912
155911
|
return null;
|
|
@@ -156062,7 +156061,7 @@ function readTestConfig(dir) {
|
|
|
156062
156061
|
if (input !== void 0 && (!input || typeof input !== "object" || Array.isArray(input) || Object.values(input).some((v2) => typeof v2 !== "string"))) {
|
|
156063
156062
|
throw new Error(`${TEST_CONFIG_FILE}: journeys[${i2}].input must be an object of string values \u2014 the screen input a nav edge would send, e.g. { "id": "svc-0001" }`);
|
|
156064
156063
|
}
|
|
156065
|
-
if (!Array.isArray(journey.expectText) || !journey.expectText.length || journey.expectText.some((
|
|
156064
|
+
if (!Array.isArray(journey.expectText) || !journey.expectText.length || journey.expectText.some((text11) => typeof text11 !== "string" || !text11.trim())) {
|
|
156066
156065
|
throw new Error(`${TEST_CONFIG_FILE}: journeys[${i2}] needs non-empty expectText values that prove a visible result`);
|
|
156067
156066
|
}
|
|
156068
156067
|
});
|
|
@@ -157752,14 +157751,14 @@ import { join as join68 } from "node:path";
|
|
|
157752
157751
|
function mobileUxIssues(dir, strict) {
|
|
157753
157752
|
const file2 = join68(dir, "MOBILE-UX.md");
|
|
157754
157753
|
if (!existsSync65(file2)) return [];
|
|
157755
|
-
let
|
|
157754
|
+
let text11;
|
|
157756
157755
|
try {
|
|
157757
|
-
|
|
157756
|
+
text11 = readFileSync76(file2, "utf8");
|
|
157758
157757
|
} catch {
|
|
157759
157758
|
return [];
|
|
157760
157759
|
}
|
|
157761
|
-
if (!
|
|
157762
|
-
return mobileUxMarkerFindings(
|
|
157760
|
+
if (!text11) return [];
|
|
157761
|
+
return mobileUxMarkerFindings(text11, recordedRenderWidths(dir)).map((finding) => {
|
|
157763
157762
|
const scaffoldAdvisory = finding.code === "missing-width-evidence";
|
|
157764
157763
|
return {
|
|
157765
157764
|
screen: null,
|
|
@@ -159583,12 +159582,12 @@ async function runRemoteFunctionOperation(input) {
|
|
|
159583
159582
|
if (input.boCookie) headers2.cookie = input.boCookie;
|
|
159584
159583
|
if (input.previewToken) headers2["x-himalaya-preview-token"] = input.previewToken;
|
|
159585
159584
|
const response = await (input.fetchImpl ?? fetch)(url, { method, headers: headers2 });
|
|
159586
|
-
const
|
|
159585
|
+
const text11 = await response.text();
|
|
159587
159586
|
let body;
|
|
159588
159587
|
try {
|
|
159589
|
-
body = JSON.parse(
|
|
159588
|
+
body = JSON.parse(text11);
|
|
159590
159589
|
} catch {
|
|
159591
|
-
body =
|
|
159590
|
+
body = text11;
|
|
159592
159591
|
}
|
|
159593
159592
|
return { ok: response.ok, status: response.status, body };
|
|
159594
159593
|
}
|
|
@@ -163267,10 +163266,10 @@ async function hostedAuthUrl(req, visitorToken, fetchImpl = fetch) {
|
|
|
163267
163266
|
}
|
|
163268
163267
|
})
|
|
163269
163268
|
});
|
|
163270
|
-
const
|
|
163269
|
+
const text11 = await res.text();
|
|
163271
163270
|
let parsed = {};
|
|
163272
163271
|
try {
|
|
163273
|
-
parsed =
|
|
163272
|
+
parsed = text11 ? JSON.parse(text11) : {};
|
|
163274
163273
|
} catch {
|
|
163275
163274
|
}
|
|
163276
163275
|
const fullUrl = parsed.redirectSession?.fullUrl;
|
|
@@ -163290,10 +163289,10 @@ async function exchangeAuthCode(cfg, code, verifier, fetchImpl = fetch) {
|
|
|
163290
163289
|
redirectUri: cfg.redirectUri
|
|
163291
163290
|
})
|
|
163292
163291
|
});
|
|
163293
|
-
const
|
|
163292
|
+
const text11 = await res.text();
|
|
163294
163293
|
let parsed = {};
|
|
163295
163294
|
try {
|
|
163296
|
-
parsed =
|
|
163295
|
+
parsed = text11 ? JSON.parse(text11) : {};
|
|
163297
163296
|
} catch {
|
|
163298
163297
|
}
|
|
163299
163298
|
if (res.status !== 200 || !parsed.access_token) throw new Error(`token exchange failed (${res.status})`);
|
|
@@ -164829,11 +164828,11 @@ async function localizeConfigResponse(res, kind, header) {
|
|
|
164829
164828
|
header
|
|
164830
164829
|
)
|
|
164831
164830
|
};
|
|
164832
|
-
const
|
|
164831
|
+
const text11 = JSON.stringify(next);
|
|
164833
164832
|
const headers2 = new Headers(res.headers);
|
|
164834
164833
|
headers2.delete("etag");
|
|
164835
|
-
headers2.set("content-length", String(new TextEncoder().encode(
|
|
164836
|
-
return new Response(
|
|
164834
|
+
headers2.set("content-length", String(new TextEncoder().encode(text11).length));
|
|
164835
|
+
return new Response(text11, { status: 200, headers: headers2 });
|
|
164837
164836
|
}
|
|
164838
164837
|
function makeRunHandler(opts) {
|
|
164839
164838
|
const mount = opts.chrome === "app" ? "/app" : "/preview";
|
|
@@ -165042,8 +165041,8 @@ var init_node_adapter = __esm({
|
|
|
165042
165041
|
function authConfigOf(appConfig) {
|
|
165043
165042
|
if (!appConfig) return void 0;
|
|
165044
165043
|
try {
|
|
165045
|
-
const
|
|
165046
|
-
return JSON.parse(
|
|
165044
|
+
const text11 = typeof appConfig === "string" ? appConfig : new TextDecoder().decode(appConfig);
|
|
165045
|
+
return JSON.parse(text11)?.authConfig ?? void 0;
|
|
165047
165046
|
} catch {
|
|
165048
165047
|
return void 0;
|
|
165049
165048
|
}
|
|
@@ -165407,16 +165406,16 @@ async function releasePayloadFromDir(root, app, header) {
|
|
|
165407
165406
|
const manifest = await store.getManifest(app);
|
|
165408
165407
|
if (!manifest) throw new Error(`no release manifest for ${app} under ${root}`);
|
|
165409
165408
|
const b64 = (b2) => b2 ? Buffer.from(b2).toString("base64") : void 0;
|
|
165410
|
-
const
|
|
165409
|
+
const text11 = (b2) => b2 ? new TextDecoder().decode(b2) : void 0;
|
|
165411
165410
|
const screens = {};
|
|
165412
165411
|
const docs = {};
|
|
165413
165412
|
const addDoc = async (hash2) => {
|
|
165414
165413
|
if (!hash2 || docs[hash2] !== void 0) return;
|
|
165415
|
-
const d2 =
|
|
165414
|
+
const d2 = text11(await store.getDoc?.(app, hash2) ?? null);
|
|
165416
165415
|
if (d2 !== void 0) docs[hash2] = d2;
|
|
165417
165416
|
};
|
|
165418
165417
|
for (const [id, meta] of Object.entries(manifest.screens ?? {})) {
|
|
165419
|
-
const s2 =
|
|
165418
|
+
const s2 = text11(await store.getScreen(app, id));
|
|
165420
165419
|
if (s2 !== void 0) screens[id] = s2;
|
|
165421
165420
|
await addDoc(meta.descriptorHash);
|
|
165422
165421
|
}
|
|
@@ -165437,10 +165436,10 @@ async function releasePayloadFromDir(root, app, header) {
|
|
|
165437
165436
|
}
|
|
165438
165437
|
const widgets = {};
|
|
165439
165438
|
for (const id of Object.keys(manifest.widgets ?? {})) {
|
|
165440
|
-
const w2 =
|
|
165439
|
+
const w2 = text11(await store.getWidget?.(app, id) ?? null);
|
|
165441
165440
|
if (w2 !== void 0) widgets[id] = w2;
|
|
165442
165441
|
}
|
|
165443
|
-
const appConfig =
|
|
165442
|
+
const appConfig = text11(await store.getAppConfig(app));
|
|
165444
165443
|
const wixClientId = appConfigWixClientId(appConfig);
|
|
165445
165444
|
return {
|
|
165446
165445
|
app,
|
|
@@ -165450,7 +165449,7 @@ async function releasePayloadFromDir(root, app, header) {
|
|
|
165450
165449
|
docs,
|
|
165451
165450
|
assets,
|
|
165452
165451
|
widgets,
|
|
165453
|
-
tokens:
|
|
165452
|
+
tokens: text11(await store.getTokens(app)),
|
|
165454
165453
|
appConfig,
|
|
165455
165454
|
icon: b64(await store.getIcon?.(app) ?? null),
|
|
165456
165455
|
header,
|
|
@@ -165846,13 +165845,18 @@ function appleSaleRules(options = {}) {
|
|
|
165846
165845
|
return {
|
|
165847
165846
|
onlineProgram: ONLINE_PROGRAM_SALE_RULE,
|
|
165848
165847
|
...(options.storesAppleSalesEnabled ?? STORES_APPLE_SALES_ENABLED) || (options.storesItemPaymentEnabled ?? STORES_ITEM_PAYMENT_ENABLED) ? { storesProduct: STORES_PRODUCT_SALE_RULE } : {},
|
|
165849
|
-
...options.pricingPlanAppleSalesEnabled ?? PRICING_PLAN_APPLE_SALES_ENABLED ? { pricingPlan: PRICING_PLAN_SALE_RULE } : {}
|
|
165848
|
+
...options.pricingPlanAppleSalesEnabled ?? PRICING_PLAN_APPLE_SALES_ENABLED ? { pricingPlan: PRICING_PLAN_SALE_RULE } : {},
|
|
165849
|
+
...options.bookingsAppleSalesEnabled ?? BOOKINGS_APPLE_SALES_ENABLED ? { bookingsService: ATTENDANCE_SALE_RULE } : {},
|
|
165850
|
+
...options.eventsAppleSalesEnabled ?? EVENTS_APPLE_SALES_ENABLED ? { eventsTicket: ATTENDANCE_SALE_RULE } : {}
|
|
165850
165851
|
};
|
|
165851
165852
|
}
|
|
165852
|
-
var HIMALAYA_SERVE_IAP_ROUTE, STORES_ITEM_PAYMENT_ENABLED, STORES_APPLE_SALES_ENABLED, STORES_PRODUCT_SALE_RULE, ONLINE_PROGRAM_SALE_RULE, PRICING_PLAN_APPLE_SALES_ENABLED, PRICING_PLAN_SALE_RULE, APPLE_SALE_RULES;
|
|
165853
|
+
var HIMALAYA_SERVE_IAP_ROUTE, BOOKINGS_APPLE_SALES_ENABLED, EVENTS_APPLE_SALES_ENABLED, ATTENDANCE_SALE_RULE, STORES_ITEM_PAYMENT_ENABLED, STORES_APPLE_SALES_ENABLED, STORES_PRODUCT_SALE_RULE, ONLINE_PROGRAM_SALE_RULE, PRICING_PLAN_APPLE_SALES_ENABLED, PRICING_PLAN_SALE_RULE, APPLE_SALE_RULES, APPLE_PROVISIONING_RULES;
|
|
165853
165854
|
var init_wix_payments_contract = __esm({
|
|
165854
165855
|
"../../core/sdk/iap/src/wix-payments-contract.ts"() {
|
|
165855
165856
|
HIMALAYA_SERVE_IAP_ROUTE = { prefix: "/himalaya-serve/v1/iap" };
|
|
165857
|
+
BOOKINGS_APPLE_SALES_ENABLED = false;
|
|
165858
|
+
EVENTS_APPLE_SALES_ENABLED = false;
|
|
165859
|
+
ATTENDANCE_SALE_RULE = { appProductId: (id) => id, productType: "CONSUMABLE" };
|
|
165856
165860
|
STORES_ITEM_PAYMENT_ENABLED = false;
|
|
165857
165861
|
STORES_APPLE_SALES_ENABLED = true;
|
|
165858
165862
|
STORES_PRODUCT_SALE_RULE = { appProductId: (id) => id, productType: "NON_CONSUMABLE" };
|
|
@@ -165860,6 +165864,11 @@ var init_wix_payments_contract = __esm({
|
|
|
165860
165864
|
PRICING_PLAN_APPLE_SALES_ENABLED = true;
|
|
165861
165865
|
PRICING_PLAN_SALE_RULE = { appProductId: (id) => id, productType: "NON_CONSUMABLE" };
|
|
165862
165866
|
APPLE_SALE_RULES = appleSaleRules();
|
|
165867
|
+
APPLE_PROVISIONING_RULES = {
|
|
165868
|
+
...APPLE_SALE_RULES,
|
|
165869
|
+
bookingsService: ATTENDANCE_SALE_RULE,
|
|
165870
|
+
eventsTicket: ATTENDANCE_SALE_RULE
|
|
165871
|
+
};
|
|
165863
165872
|
}
|
|
165864
165873
|
});
|
|
165865
165874
|
|
|
@@ -165978,11 +165987,11 @@ async function registerBundleId(opts) {
|
|
|
165978
165987
|
const j2 = await res.json();
|
|
165979
165988
|
return { status: "created", id: j2.data?.id };
|
|
165980
165989
|
}
|
|
165981
|
-
const
|
|
165982
|
-
if (res.status === 409 || /already (exists|in use)|duplicate|ENTITY_ERROR.*identifier/i.test(
|
|
165990
|
+
const text11 = await res.text();
|
|
165991
|
+
if (res.status === 409 || /already (exists|in use)|duplicate|ENTITY_ERROR.*identifier/i.test(text11)) {
|
|
165983
165992
|
return { status: "exists" };
|
|
165984
165993
|
}
|
|
165985
|
-
throw new Error(`POST /v1/bundleIds \u2192 ${res.status}: ${
|
|
165994
|
+
throw new Error(`POST /v1/bundleIds \u2192 ${res.status}: ${text11.slice(0, 300)}`);
|
|
165986
165995
|
}
|
|
165987
165996
|
async function main() {
|
|
165988
165997
|
const [app, ...rest] = process.argv.slice(2);
|
|
@@ -166235,9 +166244,9 @@ var init_iap_client = __esm({
|
|
|
166235
166244
|
retryAfterMs(response.headers.get("retry-after"), this.now())
|
|
166236
166245
|
);
|
|
166237
166246
|
}
|
|
166238
|
-
scrub(
|
|
166247
|
+
scrub(text11) {
|
|
166239
166248
|
const { keyId, issuerId, privateKeyPem } = this.options.key;
|
|
166240
|
-
let out2 =
|
|
166249
|
+
let out2 = text11;
|
|
166241
166250
|
for (const literal of [this.token?.value, privateKeyPem, issuerId, keyId]) {
|
|
166242
166251
|
if (literal) out2 = out2.split(literal).join("[redacted]");
|
|
166243
166252
|
}
|
|
@@ -166407,19 +166416,19 @@ var init_iap_api = __esm({
|
|
|
166407
166416
|
});
|
|
166408
166417
|
return toVersion(requireSingle(doc, "in-app purchase version"));
|
|
166409
166418
|
}
|
|
166410
|
-
async createLocalization(versionId,
|
|
166419
|
+
async createLocalization(versionId, text11) {
|
|
166411
166420
|
const doc = await this.client.post("/v2/inAppPurchaseLocalizations", {
|
|
166412
166421
|
data: {
|
|
166413
166422
|
type: "inAppPurchaseLocalizations",
|
|
166414
|
-
attributes: { locale:
|
|
166423
|
+
attributes: { locale: text11.locale, name: text11.name, description: text11.description },
|
|
166415
166424
|
relationships: { version: related("inAppPurchaseVersions", versionId) }
|
|
166416
166425
|
}
|
|
166417
166426
|
});
|
|
166418
166427
|
return toLocalization(requireSingle(doc, "localization"));
|
|
166419
166428
|
}
|
|
166420
|
-
async updateLocalization(localizationId,
|
|
166429
|
+
async updateLocalization(localizationId, text11) {
|
|
166421
166430
|
const doc = await this.client.patch(`/v2/inAppPurchaseLocalizations/${enc(localizationId)}`, {
|
|
166422
|
-
data: { type: "inAppPurchaseLocalizations", id: localizationId, attributes: { name:
|
|
166431
|
+
data: { type: "inAppPurchaseLocalizations", id: localizationId, attributes: { name: text11.name, description: text11.description } }
|
|
166423
166432
|
});
|
|
166424
166433
|
return toLocalization(requireSingle(doc, "localization"));
|
|
166425
166434
|
}
|
|
@@ -166523,7 +166532,7 @@ function createCatalogIapApi(client2, appId2, uploadMedia) {
|
|
|
166523
166532
|
const points = async (id, territory) => (await client2.listResources(appId2, "PRICE_POINT", { inAppPurchaseId: id, territory })).resources.map((point) => ({ id: point.id, customerPrice: text8(point, "customerPrice") }));
|
|
166524
166533
|
const desired = (item) => ({ localizations: item.localizations, price: selection(item.price), territories: item.territories });
|
|
166525
166534
|
const mapping = async (item) => {
|
|
166526
|
-
const rule = item.wix && !item.unlocks?.length ?
|
|
166535
|
+
const rule = item.wix && !item.unlocks?.length ? APPLE_PROVISIONING_RULES[item.wix.entityType] : void 0;
|
|
166527
166536
|
if (!rule || !item.wix || rule.productType !== appleProductType(item.type)) throw new IapCatalogError("mapping_unsupported", `No supported Wix mapping identity for ${item.productId}`);
|
|
166528
166537
|
const expected = rule.appProductId(item.wix.entityId);
|
|
166529
166538
|
const catalog3 = await client2.listProducts(appId2);
|
|
@@ -166787,8 +166796,8 @@ function reportDuplicateMappings(reader, items) {
|
|
|
166787
166796
|
reader.duplicates(items.flatMap((i2) => [i2.entitlement, ...(i2.unlocks ?? []).map((u2) => u2.entitlement)]), "items", "entitlement");
|
|
166788
166797
|
reader.duplicates(items.map((i2) => i2.referenceName), "items", "referenceName");
|
|
166789
166798
|
}
|
|
166790
|
-
function looksLikeCredential(
|
|
166791
|
-
return CREDENTIAL_SHAPES.some((shape) => shape.test(
|
|
166799
|
+
function looksLikeCredential(text11) {
|
|
166800
|
+
return CREDENTIAL_SHAPES.some((shape) => shape.test(text11));
|
|
166792
166801
|
}
|
|
166793
166802
|
function reportCredentialMaterial(reader, value, path2) {
|
|
166794
166803
|
if (typeof value === "string") {
|
|
@@ -166801,15 +166810,15 @@ function reportCredentialMaterial(reader, value, path2) {
|
|
|
166801
166810
|
for (const [key3, v2] of Object.entries(value)) reportCredentialMaterial(reader, v2, childPath(path2, key3));
|
|
166802
166811
|
}
|
|
166803
166812
|
}
|
|
166804
|
-
function parseJson3(
|
|
166813
|
+
function parseJson3(text11, label3) {
|
|
166805
166814
|
try {
|
|
166806
|
-
return JSON.parse(
|
|
166815
|
+
return JSON.parse(text11);
|
|
166807
166816
|
} catch (e2) {
|
|
166808
166817
|
throw new Error(`${label3} is not valid JSON: ${e2.message}`);
|
|
166809
166818
|
}
|
|
166810
166819
|
}
|
|
166811
|
-
function parseIapManifest(
|
|
166812
|
-
const doc = parseJson3(
|
|
166820
|
+
function parseIapManifest(text11, label3) {
|
|
166821
|
+
const doc = parseJson3(text11, label3);
|
|
166813
166822
|
const reader = new ManifestReader();
|
|
166814
166823
|
const obj5 = reader.object(doc, "", MANIFEST_KEYS);
|
|
166815
166824
|
if (obj5.manifestVersion !== 1) reader.problems.push("manifestVersion must be 1");
|
|
@@ -167759,9 +167768,9 @@ async function ensure(spec, sleep) {
|
|
|
167759
167768
|
}
|
|
167760
167769
|
}
|
|
167761
167770
|
function textFor(item, locale) {
|
|
167762
|
-
const
|
|
167763
|
-
if (!
|
|
167764
|
-
return
|
|
167771
|
+
const text11 = item.localizations.find((l2) => l2.locale === locale);
|
|
167772
|
+
if (!text11) throw new Error(`no ${locale} localization in the manifest for ${item.productId}`);
|
|
167773
|
+
return text11;
|
|
167765
167774
|
}
|
|
167766
167775
|
async function findProduct(api2, appId2, productId) {
|
|
167767
167776
|
return (await api2.listProducts(appId2)).find((p2) => p2.productId === productId);
|
|
@@ -167820,14 +167829,14 @@ async function deleteLeftoverScreenshot(context, resourceId) {
|
|
|
167820
167829
|
}
|
|
167821
167830
|
async function upsertManagedLocalization(run2, locale, context) {
|
|
167822
167831
|
const resourceId = required(run2.resourceId, "the product id");
|
|
167823
|
-
const
|
|
167832
|
+
const text11 = textFor(run2.item, locale);
|
|
167824
167833
|
const { api: api2, sleep } = context;
|
|
167825
167834
|
const find2 = async () => {
|
|
167826
167835
|
const version5 = await findDraft(api2, resourceId);
|
|
167827
|
-
const localization2 = version5 && await findLocalization(api2, version5.id, locale,
|
|
167836
|
+
const localization2 = version5 && await findLocalization(api2, version5.id, locale, text11);
|
|
167828
167837
|
return version5 && localization2 ? { version: version5, localization: localization2, outcome: "ALREADY_APPLIED" } : void 0;
|
|
167829
167838
|
};
|
|
167830
|
-
const { value, state } = await ensure({ write: () => api2.managed.upsertLocalization(resourceId,
|
|
167839
|
+
const { value, state } = await ensure({ write: () => api2.managed.upsertLocalization(resourceId, text11), find: find2 }, sleep);
|
|
167831
167840
|
run2.versionId = value.version.id;
|
|
167832
167841
|
return { state: value.outcome === "ALREADY_APPLIED" ? "reconciled" : state, resourceId: value.localization.id };
|
|
167833
167842
|
}
|
|
@@ -167852,16 +167861,16 @@ function operationRunners(context, manifest) {
|
|
|
167852
167861
|
createLocalization: async (run2, op) => {
|
|
167853
167862
|
if (api2.managed) return upsertManagedLocalization(run2, op.locale, context);
|
|
167854
167863
|
const versionId = required(run2.versionId, "the draft version");
|
|
167855
|
-
const
|
|
167856
|
-
const { value, state } = await ensure({ write: () => api2.createLocalization(versionId,
|
|
167864
|
+
const text11 = textFor(run2.item, op.locale);
|
|
167865
|
+
const { value, state } = await ensure({ write: () => api2.createLocalization(versionId, text11), find: () => findLocalization(api2, versionId, text11.locale) }, sleep);
|
|
167857
167866
|
return { state, resourceId: value.id };
|
|
167858
167867
|
},
|
|
167859
167868
|
updateLocalization: async (run2, op) => {
|
|
167860
167869
|
if (api2.managed) return upsertManagedLocalization(run2, op.locale, context);
|
|
167861
167870
|
const versionId = required(run2.versionId, "the draft version");
|
|
167862
|
-
const
|
|
167863
|
-
const localizationId = required(run2.localizations.find((l2) => l2.locale ===
|
|
167864
|
-
const { value, state } = await ensure({ write: () => api2.updateLocalization(localizationId,
|
|
167871
|
+
const text11 = textFor(run2.item, op.locale);
|
|
167872
|
+
const localizationId = required(run2.localizations.find((l2) => l2.locale === text11.locale)?.id, `the ${text11.locale} localization`);
|
|
167873
|
+
const { value, state } = await ensure({ write: () => api2.updateLocalization(localizationId, text11), find: () => findLocalization(api2, versionId, text11.locale, text11) }, sleep);
|
|
167865
167874
|
return { state, resourceId: value.id };
|
|
167866
167875
|
},
|
|
167867
167876
|
setPrice: async (run2) => {
|
|
@@ -168126,10 +168135,10 @@ function profilePath(name, home = homedir11()) {
|
|
|
168126
168135
|
}
|
|
168127
168136
|
return join93(credentialsDir(home), `${name}.json`);
|
|
168128
168137
|
}
|
|
168129
|
-
function parseProfile(
|
|
168138
|
+
function parseProfile(text11, label3) {
|
|
168130
168139
|
let doc;
|
|
168131
168140
|
try {
|
|
168132
|
-
doc = JSON.parse(
|
|
168141
|
+
doc = JSON.parse(text11);
|
|
168133
168142
|
} catch (e2) {
|
|
168134
168143
|
throw new Error(`${label3} is not valid JSON: ${e2.message}`);
|
|
168135
168144
|
}
|
|
@@ -168291,9 +168300,9 @@ var init_iap_credentials = __esm({
|
|
|
168291
168300
|
|
|
168292
168301
|
// ../store-release/iap-draft.ts
|
|
168293
168302
|
import { createHash as createHash46 } from "node:crypto";
|
|
168294
|
-
function fit(
|
|
168295
|
-
const chars = [...
|
|
168296
|
-
return chars.length <= max ?
|
|
168303
|
+
function fit(text11, max) {
|
|
168304
|
+
const chars = [...text11];
|
|
168305
|
+
return chars.length <= max ? text11 : `${chars.slice(0, max - 1).join("").trimEnd()}${ELLIPSIS}`;
|
|
168297
168306
|
}
|
|
168298
168307
|
function plainText2(html) {
|
|
168299
168308
|
return html.replace(/<[^>]*>/g, " ").replace(/&(amp|nbsp|lt|gt|quot|#39);/g, (entity) => ENTITIES[entity]).replace(/\s+/g, " ").trim();
|
|
@@ -168343,7 +168352,7 @@ function perItemProduct(item, options, names2) {
|
|
|
168343
168352
|
classification: "digital",
|
|
168344
168353
|
entitlement: entityKey(item.source, item.id),
|
|
168345
168354
|
productId: productIdFor(options.target.bundleId, SOURCE_SLUGS[item.source], item.id),
|
|
168346
|
-
type: "nonConsumable",
|
|
168355
|
+
type: repeatable(item) ? "consumable" : "nonConsumable",
|
|
168347
168356
|
referenceName: names2.claim(name, item.id),
|
|
168348
168357
|
localizations: [{ locale: options.locale, name: displayName(name), description: fit(plainDescription || `Unlock ${name}`, APPLE_LIMITS.description) }],
|
|
168349
168358
|
price: priceFor(item.price.amount, options),
|
|
@@ -168419,19 +168428,22 @@ function draftManifest(catalog3, options) {
|
|
|
168419
168428
|
else toDraft.push(item);
|
|
168420
168429
|
}
|
|
168421
168430
|
}
|
|
168422
|
-
const
|
|
168431
|
+
const perItem = toDraft.filter((item) => options.mode !== "tiers" || repeatable(item));
|
|
168432
|
+
const tiered = toDraft.filter((item) => options.mode === "tiers" && !repeatable(item));
|
|
168433
|
+
const drafted = [...perItem.map((item) => perItemProduct(item, options, names2)), ...draftTiers(tiered, options, names2, existingItems)];
|
|
168423
168434
|
const items = [...existingItems, ...drafted];
|
|
168424
168435
|
const newlyMapped = toDraft.length;
|
|
168425
168436
|
if (!items.length) return { skipped, kept, newlyMapped };
|
|
168426
168437
|
const manifest = { manifestVersion: 1, target: options.target, items };
|
|
168427
168438
|
return { manifest: parseIapManifest(JSON.stringify(manifest), "the drafted manifest"), skipped, kept, newlyMapped };
|
|
168428
168439
|
}
|
|
168429
|
-
var SOURCE_SLUGS, SKIP_REASONS, TIER_DESCRIPTION, ELLIPSIS, entityKey, sha2, ENTITIES, MAX_SUFFIX, ReferenceNames, nameOf, tierProductId;
|
|
168440
|
+
var SOURCE_SLUGS, repeatable, SKIP_REASONS, TIER_DESCRIPTION, ELLIPSIS, entityKey, sha2, ENTITIES, MAX_SUFFIX, ReferenceNames, nameOf, tierProductId;
|
|
168430
168441
|
var init_iap_draft = __esm({
|
|
168431
168442
|
"../store-release/iap-draft.ts"() {
|
|
168432
168443
|
init_iap_manifest();
|
|
168433
168444
|
init_iap_pricing();
|
|
168434
|
-
SOURCE_SLUGS = { storesProduct: "product", onlineProgram: "program", pricingPlan: "plan" };
|
|
168445
|
+
SOURCE_SLUGS = { storesProduct: "product", onlineProgram: "program", pricingPlan: "plan", bookingsService: "booking", eventsTicket: "ticket" };
|
|
168446
|
+
repeatable = (item) => item.source === "bookingsService" || item.source === "eventsTicket";
|
|
168435
168447
|
SKIP_REASONS = {
|
|
168436
168448
|
physical: "physical goods are never sold through in-app purchase",
|
|
168437
168449
|
subscription: "a recurring plan needs an App Store subscription, which this version does not register",
|
|
@@ -168440,7 +168452,7 @@ var init_iap_draft = __esm({
|
|
|
168440
168452
|
TIER_DESCRIPTION = "Unlocks one item in the app";
|
|
168441
168453
|
ELLIPSIS = "\u2026";
|
|
168442
168454
|
entityKey = (entityType, entityId) => `${entityType}:${entityId}`;
|
|
168443
|
-
sha2 = (
|
|
168455
|
+
sha2 = (text11) => createHash46("sha256").update(text11).digest("hex");
|
|
168444
168456
|
ENTITIES = { "&": "&", " ": " ", "<": "<", ">": ">", """: '"', "'": "'" };
|
|
168445
168457
|
MAX_SUFFIX = 24;
|
|
168446
168458
|
ReferenceNames = class {
|
|
@@ -168890,14 +168902,104 @@ var init_iap_config_edit = __esm({
|
|
|
168890
168902
|
}
|
|
168891
168903
|
});
|
|
168892
168904
|
|
|
168905
|
+
// ../../core/sdk/iap/src/attendance-classifier.ts
|
|
168906
|
+
function classifyForApple(item, currency) {
|
|
168907
|
+
if (item.hidden !== false || item.attendance === "hybrid") return "decide";
|
|
168908
|
+
if (item.kind === "bookingsService") return bookingRoute(item, currency);
|
|
168909
|
+
return ticketRoute(item, currency);
|
|
168910
|
+
}
|
|
168911
|
+
function bookingRoute(item, currency) {
|
|
168912
|
+
if (item.onlineBooking !== true) return "decide";
|
|
168913
|
+
if (item.conferencing === false && item.locations?.length && item.locations.every((type) => type === "BUSINESS" || type === "CUSTOMER" || type === "CUSTOM")) {
|
|
168914
|
+
return item.attendance === "online" ? "decide" : "wixPayments";
|
|
168915
|
+
}
|
|
168916
|
+
if (item.conferencing !== true || item.attendance === "physical") return "decide";
|
|
168917
|
+
if (item.attendance !== "online" && (!item.locations || item.locations.length > 0)) return "decide";
|
|
168918
|
+
if (item.type === "APPOINTMENT") {
|
|
168919
|
+
return item.capacity === 1 && item.maxParticipantsPerBooking === 1 ? "wixPayments" : "decide";
|
|
168920
|
+
}
|
|
168921
|
+
if (item.type !== "CLASS" && item.type !== "COURSE" || !item.capacity || item.capacity <= 1) return "decide";
|
|
168922
|
+
if (item.priceType === "NO_FEE" || zeroPrice(item.amount)) return "wixPayments";
|
|
168923
|
+
if (item.onlinePayment !== true || item.deposit !== false || item.priceType !== "FIXED") return "decide";
|
|
168924
|
+
return fixedPriceRoute(item, currency);
|
|
168925
|
+
}
|
|
168926
|
+
function ticketRoute(item, currency) {
|
|
168927
|
+
if (item.location === "VENUE") return item.attendance === "online" ? "decide" : "wixPayments";
|
|
168928
|
+
if (item.location !== "ONLINE" || item.attendance === "physical" || item.registration !== "TICKETING") return "decide";
|
|
168929
|
+
if (item.eventStatus !== "UPCOMING" && item.eventStatus !== "STARTED") return "decide";
|
|
168930
|
+
if (item.saleStatus !== "SALE_STARTED") return "decide";
|
|
168931
|
+
if (zeroPrice(item.amount)) return "wixPayments";
|
|
168932
|
+
return item.priceType === "STANDARD" ? fixedPriceRoute(item, currency) : "decide";
|
|
168933
|
+
}
|
|
168934
|
+
function fixedPriceRoute(item, currency) {
|
|
168935
|
+
const amount = item.amount;
|
|
168936
|
+
return typeof amount === "string" && /^\d+(?:\.\d+)?$/.test(amount) && Number.isFinite(Number(amount)) && Number(amount) > 0 && /^[A-Z]{3}$/.test(currency) && item.currency === currency ? "appleIap" : "decide";
|
|
168937
|
+
}
|
|
168938
|
+
function bookingAttendanceOf(raw) {
|
|
168939
|
+
const s2 = object7(raw);
|
|
168940
|
+
const payment = object7(s2.payment);
|
|
168941
|
+
const fixed = object7(payment.fixed);
|
|
168942
|
+
const price = object7(fixed.price);
|
|
168943
|
+
const options = object7(payment.options);
|
|
168944
|
+
const policy = object7(object7(s2.bookingPolicy).participantsPolicy);
|
|
168945
|
+
return {
|
|
168946
|
+
kind: "bookingsService",
|
|
168947
|
+
type: text9(s2.type),
|
|
168948
|
+
capacity: numeric(s2.defaultCapacity),
|
|
168949
|
+
maxParticipantsPerBooking: policy.enabled === true ? numeric(policy.maxParticipantsPerBooking) : void 0,
|
|
168950
|
+
hidden: boolean2(s2.hidden),
|
|
168951
|
+
conferencing: boolean2(object7(s2.conferencing).enabled),
|
|
168952
|
+
locations: Array.isArray(s2.locations) ? s2.locations.map((l2) => text9(object7(l2).type) ?? "UNKNOWN") : void 0,
|
|
168953
|
+
onlineBooking: boolean2(object7(s2.onlineBooking).enabled),
|
|
168954
|
+
onlinePayment: boolean2(options.online),
|
|
168955
|
+
deposit: options.deposit === true || fixed.deposit !== void 0,
|
|
168956
|
+
priceType: text9(payment.rateType),
|
|
168957
|
+
amount: text9(price.value),
|
|
168958
|
+
currency: text9(price.currency)
|
|
168959
|
+
};
|
|
168960
|
+
}
|
|
168961
|
+
function ticketAttendanceOf(event, definition) {
|
|
168962
|
+
const e2 = object7(event);
|
|
168963
|
+
const t2 = object7(definition);
|
|
168964
|
+
const pricing = object7(t2.pricingMethod);
|
|
168965
|
+
const price = object7(pricing.fixedPrice);
|
|
168966
|
+
const registration = object7(e2.registration);
|
|
168967
|
+
const type = text9(registration.type) ?? text9(registration.initialType) ?? text9(e2.eventType);
|
|
168968
|
+
const status = text9(e2.status) ?? text9(e2.eventStatus);
|
|
168969
|
+
return {
|
|
168970
|
+
kind: "eventsTicket",
|
|
168971
|
+
location: text9(object7(e2.location).type),
|
|
168972
|
+
registration: type === "TICKETS" || type === "RSVP_AND_TICKETS" ? "TICKETING" : type,
|
|
168973
|
+
eventStatus: status === "SCHEDULED" ? "UPCOMING" : status,
|
|
168974
|
+
saleStatus: text9(t2.saleStatus),
|
|
168975
|
+
hidden: boolean2(t2.hidden),
|
|
168976
|
+
priceType: text9(pricing.pricingType),
|
|
168977
|
+
amount: text9(price.value),
|
|
168978
|
+
currency: text9(price.currency)
|
|
168979
|
+
};
|
|
168980
|
+
}
|
|
168981
|
+
function object7(value) {
|
|
168982
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
168983
|
+
}
|
|
168984
|
+
var text9, numeric, boolean2, zeroPrice;
|
|
168985
|
+
var init_attendance_classifier = __esm({
|
|
168986
|
+
"../../core/sdk/iap/src/attendance-classifier.ts"() {
|
|
168987
|
+
init_wix_payments_contract();
|
|
168988
|
+
text9 = (value) => typeof value === "string" ? value : void 0;
|
|
168989
|
+
numeric = (value) => typeof value === "number" ? value : void 0;
|
|
168990
|
+
boolean2 = (value) => typeof value === "boolean" ? value : void 0;
|
|
168991
|
+
zeroPrice = (value) => typeof value === "string" && /^0+(?:\.0+)?$/.test(value);
|
|
168992
|
+
}
|
|
168993
|
+
});
|
|
168994
|
+
|
|
168893
168995
|
// src/store-iap-catalog.ts
|
|
168894
168996
|
function amountText(value) {
|
|
168895
168997
|
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
168896
168998
|
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
168897
168999
|
}
|
|
168898
169000
|
function priceOf(amount, currency) {
|
|
168899
|
-
const
|
|
168900
|
-
return
|
|
169001
|
+
const text11 = amountText(amount);
|
|
169002
|
+
return text11 && typeof currency === "string" && currency ? { amount: text11, currency } : void 0;
|
|
168901
169003
|
}
|
|
168902
169004
|
function catalogItem(fields) {
|
|
168903
169005
|
return Object.fromEntries(Object.entries(fields).filter(([, v2]) => v2 !== void 0 && v2 !== "" && v2 !== false));
|
|
@@ -169035,18 +169137,65 @@ async function readOneTimeUnlimitedPlanIds(wix) {
|
|
|
169035
169137
|
}
|
|
169036
169138
|
async function readWixCatalog(wix) {
|
|
169037
169139
|
const notes = [];
|
|
169038
|
-
const items = [...await readStores(wix, notes), ...await readPrograms(wix, notes), ...await readPlans(wix, notes)];
|
|
169039
|
-
notes.push(NEVER_DRAFTED_NOTE);
|
|
169140
|
+
const items = [...await readStores(wix, notes), ...await readPrograms(wix, notes), ...await readPlans(wix, notes), ...await readAttendance(wix, notes)];
|
|
169040
169141
|
return { items, notes };
|
|
169041
169142
|
}
|
|
169042
|
-
|
|
169143
|
+
async function attendanceRows(wix, path2, key3, extra = {}) {
|
|
169144
|
+
return allByOffset(async (offset) => {
|
|
169145
|
+
const { query = {}, ...fields } = extra;
|
|
169146
|
+
const res = await wix("POST", path2, { ...fields, query: { ...query, paging: { limit: PAGE4, offset } } });
|
|
169147
|
+
return { rows: res[key3] ?? [], total: res.pagingMetadata?.total ?? res.metadata?.total };
|
|
169148
|
+
}, path2);
|
|
169149
|
+
}
|
|
169150
|
+
function attendanceKind(item) {
|
|
169151
|
+
const route = classifyForApple(item, item.currency ?? "");
|
|
169152
|
+
return route === "appleIap" ? "digital" : route === "wixPayments" ? "physical" : "unknown";
|
|
169153
|
+
}
|
|
169154
|
+
async function readAttendance(wix, notes) {
|
|
169155
|
+
let services = [];
|
|
169156
|
+
let events = [];
|
|
169157
|
+
try {
|
|
169158
|
+
services = await attendanceRows(wix, "/bookings/v2/services/query", "services");
|
|
169159
|
+
} catch (e2) {
|
|
169160
|
+
if (isNotInstalled2(e2)) notInstalled(notes, "Wix Bookings");
|
|
169161
|
+
else throw e2;
|
|
169162
|
+
}
|
|
169163
|
+
try {
|
|
169164
|
+
events = await attendanceRows(wix, "/events/v3/events/query", "events", { fields: ["REGISTRATION", "DETAILS"] });
|
|
169165
|
+
} catch (e2) {
|
|
169166
|
+
if (isNotInstalled2(e2)) notInstalled(notes, "Wix Events");
|
|
169167
|
+
else throw e2;
|
|
169168
|
+
}
|
|
169169
|
+
const tickets = await mapLimit(events.filter((e2) => ticketAttendanceOf(e2, {}).registration === "TICKETING"), PROGRAM_READ_CONCURRENCY, async (event) => {
|
|
169170
|
+
const definitions2 = await attendanceRows(wix, "/events/v3/ticket-definitions/query", "ticketDefinitions", { query: { filter: { eventId: { $eq: event.id } } } });
|
|
169171
|
+
return definitions2.map((t2) => catalogItem({
|
|
169172
|
+
source: "eventsTicket",
|
|
169173
|
+
id: t2.id,
|
|
169174
|
+
name: t2.name || t2.id,
|
|
169175
|
+
description: t2.description,
|
|
169176
|
+
kind: attendanceKind(ticketAttendanceOf(event, t2)),
|
|
169177
|
+
hidden: t2.hidden === true,
|
|
169178
|
+
price: priceOf(t2.pricingMethod?.fixedPrice?.value, t2.pricingMethod?.fixedPrice?.currency)
|
|
169179
|
+
}));
|
|
169180
|
+
});
|
|
169181
|
+
return [...services.map((s2) => catalogItem({
|
|
169182
|
+
source: "bookingsService",
|
|
169183
|
+
id: s2.id,
|
|
169184
|
+
name: s2.name || s2.id,
|
|
169185
|
+
description: s2.description,
|
|
169186
|
+
kind: attendanceKind(bookingAttendanceOf(s2)),
|
|
169187
|
+
hidden: s2.hidden === true,
|
|
169188
|
+
price: priceOf(s2.payment?.fixed?.price?.value, s2.payment?.fixed?.price?.currency)
|
|
169189
|
+
})), ...tickets.flat()];
|
|
169190
|
+
}
|
|
169191
|
+
var PAGE4, MAX_PAGES3, PROGRAM_READ_CONCURRENCY, isNotInstalled2, isWrongCatalogVersion;
|
|
169043
169192
|
var init_store_iap_catalog = __esm({
|
|
169044
169193
|
"src/store-iap-catalog.ts"() {
|
|
169194
|
+
init_attendance_classifier();
|
|
169045
169195
|
init_wix_owner();
|
|
169046
169196
|
PAGE4 = 100;
|
|
169047
169197
|
MAX_PAGES3 = 500;
|
|
169048
169198
|
PROGRAM_READ_CONCURRENCY = 4;
|
|
169049
|
-
NEVER_DRAFTED_NOTE = "Bookings services and events are real-world services, which Apple does not allow as in-app purchases \u2014 they are never drafted.";
|
|
169050
169199
|
isNotInstalled2 = (e2) => e2 instanceof WixApiError && e2.isAppNotInstalled;
|
|
169051
169200
|
isWrongCatalogVersion = (e2) => e2 instanceof WixApiError && e2.status === 428 && /CATALOG_V1/.test(e2.message);
|
|
169052
169201
|
}
|
|
@@ -169054,7 +169203,7 @@ var init_store_iap_catalog = __esm({
|
|
|
169054
169203
|
|
|
169055
169204
|
// src/store-iap-connect.ts
|
|
169056
169205
|
async function planCheck(items, deps) {
|
|
169057
|
-
const rules = deps.saleRules ??
|
|
169206
|
+
const rules = deps.saleRules ?? APPLE_PROVISIONING_RULES;
|
|
169058
169207
|
if (!rules.pricingPlan || !items.some((item) => item.wix?.entityType === "pricingPlan")) return { ok: true, ids: /* @__PURE__ */ new Set() };
|
|
169059
169208
|
if (!deps.oneTimePlans) return { ok: false, why: "the site's plans were not read" };
|
|
169060
169209
|
try {
|
|
@@ -169156,7 +169305,7 @@ function providerPlan(provider) {
|
|
|
169156
169305
|
detail: "the appleIAP provider is connected through Serve's IAP routes (wix-iap ConnectProviderAccount), and this Serve target has none."
|
|
169157
169306
|
};
|
|
169158
169307
|
}
|
|
169159
|
-
async function mapItems(api2, appId2, items, apply, plans, rules =
|
|
169308
|
+
async function mapItems(api2, appId2, items, apply, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
169160
169309
|
let catalog3;
|
|
169161
169310
|
try {
|
|
169162
169311
|
catalog3 = await api2.listProducts(appId2);
|
|
@@ -169188,7 +169337,7 @@ async function mapItems(api2, appId2, items, apply, plans, rules = APPLE_SALE_RU
|
|
|
169188
169337
|
}
|
|
169189
169338
|
return steps;
|
|
169190
169339
|
}
|
|
169191
|
-
function mappingTarget(item, plans, rules =
|
|
169340
|
+
function mappingTarget(item, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
169192
169341
|
const skip = (entity2, detail) => ({ skip: { entity: entity2, appProductId: null, storeProductId: item.productId, state: "skipped", code: "mapping_unsupported", detail } });
|
|
169193
169342
|
if (!item.wix || item.unlocks?.length) {
|
|
169194
169343
|
return skip(item.productId, "a consumable tier unlocks several Wix items, but a purchase pays one order item, so it cannot be mapped");
|
|
@@ -169227,7 +169376,7 @@ function decide(catalog3, target) {
|
|
|
169227
169376
|
}
|
|
169228
169377
|
return void 0;
|
|
169229
169378
|
}
|
|
169230
|
-
function mappingWithoutApp(item, planning, plans, rules =
|
|
169379
|
+
function mappingWithoutApp(item, planning, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
169231
169380
|
const target = mappingTarget(item, plans, rules);
|
|
169232
169381
|
if ("skip" in target) return target.skip;
|
|
169233
169382
|
return planning ? { ...target, state: "planned", detail: `map ${target.appProductId} \u2192 ${target.storeProductId}` } : { ...target, ...noApp("the app is not registered") };
|
|
@@ -169384,8 +169533,8 @@ async function shoot(selected, run2, outDir) {
|
|
|
169384
169533
|
function visibleText2(html) {
|
|
169385
169534
|
return html.replace(/ | | /gi, "\xA0").replace(/&/g, "&");
|
|
169386
169535
|
}
|
|
169387
|
-
function manifestWithScreenshots(
|
|
169388
|
-
const doc = JSON.parse(
|
|
169536
|
+
function manifestWithScreenshots(text11, shot) {
|
|
169537
|
+
const doc = JSON.parse(text11);
|
|
169389
169538
|
for (const [index, path2] of shot) doc.items[index].reviewScreenshot = path2;
|
|
169390
169539
|
return `${JSON.stringify(doc, null, 2)}
|
|
169391
169540
|
`;
|
|
@@ -169601,10 +169750,10 @@ function makeTransport(fetchImpl, auth, timeoutMs = DEFAULT_TIMEOUT_MS3) {
|
|
|
169601
169750
|
body: body === void 0 ? void 0 : JSON.stringify(body),
|
|
169602
169751
|
signal: AbortSignal.timeout(timeoutMs)
|
|
169603
169752
|
});
|
|
169604
|
-
const
|
|
169605
|
-
let parsed =
|
|
169753
|
+
const text11 = await res.text();
|
|
169754
|
+
let parsed = text11;
|
|
169606
169755
|
try {
|
|
169607
|
-
parsed =
|
|
169756
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
169608
169757
|
} catch {
|
|
169609
169758
|
}
|
|
169610
169759
|
if (!res.ok) throw new WixApiError2(res.status, method, path2, parsed);
|
|
@@ -169742,9 +169891,9 @@ function manifestDirOf(manifestPath) {
|
|
|
169742
169891
|
return dirname46(resolve70(manifestPath));
|
|
169743
169892
|
}
|
|
169744
169893
|
function readPlan(deps, path2) {
|
|
169745
|
-
const
|
|
169894
|
+
const text11 = readInput(deps, path2, "plan");
|
|
169746
169895
|
try {
|
|
169747
|
-
return verifyPlan2(JSON.parse(
|
|
169896
|
+
return verifyPlan2(JSON.parse(text11));
|
|
169748
169897
|
} catch (e2) {
|
|
169749
169898
|
if (e2 instanceof SyntaxError) throw new Error(`${path2} is not valid JSON: ${e2.message}`);
|
|
169750
169899
|
throw e2;
|
|
@@ -169755,10 +169904,10 @@ function writeJson(deps, out2, path2, value) {
|
|
|
169755
169904
|
`);
|
|
169756
169905
|
}
|
|
169757
169906
|
function writePlan(deps, out2, path2, plan) {
|
|
169758
|
-
const
|
|
169907
|
+
const text11 = `${JSON.stringify(plan, null, 2)}
|
|
169759
169908
|
`;
|
|
169760
|
-
if (out2.carriesSecret(
|
|
169761
|
-
deps.writeFileAtomic(path2,
|
|
169909
|
+
if (out2.carriesSecret(text11)) throw new Error("refusing to write a plan that contains this run's App Store Connect credentials");
|
|
169910
|
+
deps.writeFileAtomic(path2, text11);
|
|
169762
169911
|
}
|
|
169763
169912
|
function catalogRoutePrefix(flags, deps) {
|
|
169764
169913
|
if (flags["catalog-route"] !== void 0 && !textFlag(flags, "catalog-route")) throw new IapCatalogError("catalog_route_unavailable", "--catalog-route needs an explicit gateway path");
|
|
@@ -170243,7 +170392,7 @@ async function screenshotsCommand(flags, deps, out2) {
|
|
|
170243
170392
|
appleLocked: (item) => facts.get(item.productId)?.locked,
|
|
170244
170393
|
appleRead: textFlag(flags, "profile") !== void 0,
|
|
170245
170394
|
writeBytes: deps.writeBytes ?? writeBinaryFile,
|
|
170246
|
-
writeText: (path2,
|
|
170395
|
+
writeText: (path2, text11) => deps.writeFileAtomic(path2, text11),
|
|
170247
170396
|
...only ? { only: new Set(only.split(",").map((id) => id.trim()).filter(Boolean)) } : {},
|
|
170248
170397
|
...outDir ? { outDir: resolve70(outDir) } : {},
|
|
170249
170398
|
force: flags.force === true,
|
|
@@ -170397,8 +170546,8 @@ var init_store_iap = __esm({
|
|
|
170397
170546
|
protectKey(key3) {
|
|
170398
170547
|
this.secrets.push(key3.privateKey, key3.keyId);
|
|
170399
170548
|
}
|
|
170400
|
-
line(
|
|
170401
|
-
this.io.log(this.scrub(
|
|
170549
|
+
line(text11 = "") {
|
|
170550
|
+
this.io.log(this.scrub(text11));
|
|
170402
170551
|
}
|
|
170403
170552
|
print(value) {
|
|
170404
170553
|
this.io.log(this.serialize(value));
|
|
@@ -170411,11 +170560,11 @@ var init_store_iap = __esm({
|
|
|
170411
170560
|
return JSON.stringify(scrubDeep(value, (t2) => this.scrub(t2)), null, 2);
|
|
170412
170561
|
}
|
|
170413
170562
|
/** This run's own key material, raw or JSON-escaped, anywhere in `text`. */
|
|
170414
|
-
carriesSecret(
|
|
170415
|
-
return this.secrets.some((secret) => secret && (
|
|
170563
|
+
carriesSecret(text11) {
|
|
170564
|
+
return this.secrets.some((secret) => secret && (text11.includes(secret) || text11.includes(JSON.stringify(secret).slice(1, -1))));
|
|
170416
170565
|
}
|
|
170417
|
-
scrub(
|
|
170418
|
-
let out2 =
|
|
170566
|
+
scrub(text11) {
|
|
170567
|
+
let out2 = text11;
|
|
170419
170568
|
for (const secret of this.secrets) if (secret) out2 = out2.split(secret).join("[redacted]");
|
|
170420
170569
|
return scrubString(out2);
|
|
170421
170570
|
}
|
|
@@ -171769,12 +171918,12 @@ async function runRemoteSecretsCommand(operation, flags, io2, options) {
|
|
|
171769
171918
|
body = JSON.stringify({ value });
|
|
171770
171919
|
}
|
|
171771
171920
|
const response = await (options.fetchImpl ?? fetch)(url, { method: operation === "list" ? "GET" : operation === "set" ? "PUT" : "POST", headers: headers2, body });
|
|
171772
|
-
const
|
|
171921
|
+
const text11 = await response.text();
|
|
171773
171922
|
let output;
|
|
171774
171923
|
try {
|
|
171775
|
-
output = JSON.parse(
|
|
171924
|
+
output = JSON.parse(text11);
|
|
171776
171925
|
} catch {
|
|
171777
|
-
output =
|
|
171926
|
+
output = text11;
|
|
171778
171927
|
}
|
|
171779
171928
|
if (!response.ok) throw new Error(typeof output === "string" ? output : JSON.stringify(output));
|
|
171780
171929
|
io2.log(JSON.stringify(output));
|
|
@@ -171832,9 +171981,9 @@ function headersFor(options) {
|
|
|
171832
171981
|
...options.previewTag ? { "x-wix-route-serve": options.previewTag } : {}
|
|
171833
171982
|
};
|
|
171834
171983
|
}
|
|
171835
|
-
function objectFrom(
|
|
171984
|
+
function objectFrom(text11) {
|
|
171836
171985
|
try {
|
|
171837
|
-
const value =
|
|
171986
|
+
const value = text11 ? JSON.parse(text11) : null;
|
|
171838
171987
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
171839
171988
|
} catch {
|
|
171840
171989
|
return null;
|
|
@@ -172072,12 +172221,12 @@ async function runNotifyPing(flags, io2, deps = {}) {
|
|
|
172072
172221
|
const flagError = flagRefusal(flags);
|
|
172073
172222
|
if (flagError) return refuse6(io2, flagError);
|
|
172074
172223
|
const allMembers = flags["all-members"] === true;
|
|
172075
|
-
if (allMembers &&
|
|
172224
|
+
if (allMembers && text10(flags["member-email"])) return refuse6(io2, "recipient_conflict", "Choose --all-members or --member-email.");
|
|
172076
172225
|
if (allMembers && flags["dry-run"] !== true && flags.yes !== true) return refuse6(io2, "confirmation_required", "Preview with --dry-run, then add --yes to send to every approved member.");
|
|
172077
|
-
const input = mergePushInputs(pushInputsFromContent(resolve72(
|
|
172078
|
-
const missing2 = [...input.app ? [] : ["app"], ...input.site ? [] : ["site"], ...REQUIRED_FLAGS.filter((f2) => !(allMembers && f2 === "member-email") && !
|
|
172226
|
+
const input = mergePushInputs(pushInputsFromContent(resolve72(text10(flags.content) ?? process.cwd())), flags);
|
|
172227
|
+
const missing2 = [...input.app ? [] : ["app"], ...input.site ? [] : ["site"], ...REQUIRED_FLAGS.filter((f2) => !(allMembers && f2 === "member-email") && !text10(flags[f2]))];
|
|
172079
172228
|
if (missing2.length) return refuse6(io2, "needs_input", "Name the app and site (or --content), the member's login email, a title and a link.", 2, { missing: missing2 });
|
|
172080
|
-
const requestId2 =
|
|
172229
|
+
const requestId2 = text10(flags["request-id"]) ?? (deps.newRequestId ?? randomUUID10)();
|
|
172081
172230
|
if (!UUID_RE.test(requestId2)) return refuse6(io2, "invalid_request_id", "Reuse the requestId a previous send printed.");
|
|
172082
172231
|
const owner = await hostedOwnerSession(flags, deps);
|
|
172083
172232
|
if (!owner.ok) return refuse6(io2, owner.error, owner.hint, owner.exit);
|
|
@@ -172094,10 +172243,10 @@ async function runNotifyPing(flags, io2, deps = {}) {
|
|
|
172094
172243
|
const body = {
|
|
172095
172244
|
app: ownership.slug,
|
|
172096
172245
|
site: input.site,
|
|
172097
|
-
memberEmail:
|
|
172098
|
-
title:
|
|
172099
|
-
...
|
|
172100
|
-
link:
|
|
172246
|
+
memberEmail: text10(flags["member-email"]),
|
|
172247
|
+
title: text10(flags.title),
|
|
172248
|
+
...text10(flags.body) ? { body: text10(flags.body) } : {},
|
|
172249
|
+
link: text10(flags.link),
|
|
172101
172250
|
requestId: requestId2,
|
|
172102
172251
|
...flags["dry-run"] === true ? { dryRun: true } : {}
|
|
172103
172252
|
};
|
|
@@ -172137,7 +172286,7 @@ async function runAllMembers(args) {
|
|
|
172137
172286
|
const code = error instanceof PushSendError ? error.code : error instanceof Error && ROSTER_CODES.has(error.message) ? error.message : "member_lookup_unavailable";
|
|
172138
172287
|
return refuse6(io2, code, void 0, 1);
|
|
172139
172288
|
}
|
|
172140
|
-
const base = { app: input.app, site: input.site, title:
|
|
172289
|
+
const base = { app: input.app, site: input.site, title: text10(flags.title), ...text10(flags.body) ? { body: text10(flags.body) } : {}, link: text10(flags.link) };
|
|
172141
172290
|
const send2 = (recipient, memberRequestId, dryRun = false) => pushSendRequest({
|
|
172142
172291
|
target: session.target,
|
|
172143
172292
|
wixToken: session.wixToken,
|
|
@@ -172220,7 +172369,7 @@ function summary(result, sent) {
|
|
|
172220
172369
|
}
|
|
172221
172370
|
return `Ping accepted request ${sent.requestId} for ${sent.memberEmail}. Ping does not confirm delivery: it reaches the member's signed-in devices with notifications allowed.`;
|
|
172222
172371
|
}
|
|
172223
|
-
var LOCAL_SENDER_FLAGS, SWITCHES, REQUIRED_FLAGS, UUID_RE, KNOWN_CODES, ROSTER_CODES, HINTS,
|
|
172372
|
+
var LOCAL_SENDER_FLAGS, SWITCHES, REQUIRED_FLAGS, UUID_RE, KNOWN_CODES, ROSTER_CODES, HINTS, text10;
|
|
172224
172373
|
var init_notify_ping = __esm({
|
|
172225
172374
|
"src/notify-ping.ts"() {
|
|
172226
172375
|
init_push_send();
|
|
@@ -172248,7 +172397,7 @@ var init_notify_ping = __esm({
|
|
|
172248
172397
|
site_token_invalid: "Run wix login as the site owner; the site token must belong to the app owner's account.",
|
|
172249
172398
|
ping_permission_denied: "Himi Serve is not permitted to send through Ping; this is a platform issue, not your setup."
|
|
172250
172399
|
};
|
|
172251
|
-
|
|
172400
|
+
text10 = (v2) => typeof v2 === "string" && v2.length > 0 ? v2 : void 0;
|
|
172252
172401
|
}
|
|
172253
172402
|
});
|
|
172254
172403
|
|
|
@@ -173373,14 +173522,14 @@ async function callJson(t2, appId2, method, path2, what, body) {
|
|
|
173373
173522
|
...body !== void 0 ? { body: JSON.stringify(body) } : {}
|
|
173374
173523
|
});
|
|
173375
173524
|
if (!res.ok) {
|
|
173376
|
-
const
|
|
173377
|
-
throw new Base44RequestError(res.status,
|
|
173525
|
+
const text12 = await res.text().catch(() => "");
|
|
173526
|
+
throw new Base44RequestError(res.status, text12.slice(0, 500), what);
|
|
173378
173527
|
}
|
|
173379
|
-
const
|
|
173528
|
+
const text11 = await res.text();
|
|
173380
173529
|
try {
|
|
173381
|
-
return JSON.parse(
|
|
173530
|
+
return JSON.parse(text11);
|
|
173382
173531
|
} catch {
|
|
173383
|
-
throw new Base44RequestError(res.status, `unreadable response: ${
|
|
173532
|
+
throw new Base44RequestError(res.status, `unreadable response: ${text11.slice(0, 200)}`, what);
|
|
173384
173533
|
}
|
|
173385
173534
|
}
|
|
173386
173535
|
function requestFailure(e2) {
|
|
@@ -173648,16 +173797,16 @@ var init_seed = __esm({
|
|
|
173648
173797
|
});
|
|
173649
173798
|
|
|
173650
173799
|
// src/base44-analyze/project.ts
|
|
173651
|
-
function parseJsonc(
|
|
173800
|
+
function parseJsonc(text11) {
|
|
173652
173801
|
let out2 = "";
|
|
173653
173802
|
let i2 = 0;
|
|
173654
173803
|
let inStr = false;
|
|
173655
|
-
while (i2 <
|
|
173656
|
-
const c2 =
|
|
173804
|
+
while (i2 < text11.length) {
|
|
173805
|
+
const c2 = text11[i2];
|
|
173657
173806
|
if (inStr) {
|
|
173658
173807
|
out2 += c2;
|
|
173659
173808
|
if (c2 === "\\") {
|
|
173660
|
-
out2 +=
|
|
173809
|
+
out2 += text11[i2 + 1] ?? "";
|
|
173661
173810
|
i2 += 2;
|
|
173662
173811
|
continue;
|
|
173663
173812
|
}
|
|
@@ -173669,11 +173818,11 @@ function parseJsonc(text10) {
|
|
|
173669
173818
|
inStr = true;
|
|
173670
173819
|
out2 += c2;
|
|
173671
173820
|
i2++;
|
|
173672
|
-
} else if (c2 === "/" &&
|
|
173673
|
-
while (i2 <
|
|
173674
|
-
} else if (c2 === "/" &&
|
|
173821
|
+
} else if (c2 === "/" && text11[i2 + 1] === "/") {
|
|
173822
|
+
while (i2 < text11.length && text11[i2] !== "\n") i2++;
|
|
173823
|
+
} else if (c2 === "/" && text11[i2 + 1] === "*") {
|
|
173675
173824
|
i2 += 2;
|
|
173676
|
-
while (i2 <
|
|
173825
|
+
while (i2 < text11.length && !(text11[i2] === "*" && text11[i2 + 1] === "/")) i2++;
|
|
173677
173826
|
i2 += 2;
|
|
173678
173827
|
} else {
|
|
173679
173828
|
out2 += c2;
|
|
@@ -173682,32 +173831,32 @@ function parseJsonc(text10) {
|
|
|
173682
173831
|
}
|
|
173683
173832
|
return JSON.parse(dropTrailingCommas(out2));
|
|
173684
173833
|
}
|
|
173685
|
-
function dropTrailingCommas(
|
|
173834
|
+
function dropTrailingCommas(text11) {
|
|
173686
173835
|
let out2 = "";
|
|
173687
173836
|
let inStr = false;
|
|
173688
|
-
for (let i2 = 0; i2 <
|
|
173689
|
-
const c2 =
|
|
173837
|
+
for (let i2 = 0; i2 < text11.length; i2++) {
|
|
173838
|
+
const c2 = text11[i2];
|
|
173690
173839
|
if (inStr) {
|
|
173691
173840
|
out2 += c2;
|
|
173692
|
-
if (c2 === "\\") out2 +=
|
|
173841
|
+
if (c2 === "\\") out2 += text11[++i2] ?? "";
|
|
173693
173842
|
else if (c2 === '"') inStr = false;
|
|
173694
173843
|
continue;
|
|
173695
173844
|
}
|
|
173696
173845
|
if (c2 === '"') inStr = true;
|
|
173697
173846
|
if (c2 === ",") {
|
|
173698
173847
|
let j2 = i2 + 1;
|
|
173699
|
-
while (j2 <
|
|
173700
|
-
if (
|
|
173848
|
+
while (j2 < text11.length && /\s/.test(text11[j2])) j2++;
|
|
173849
|
+
if (text11[j2] === "}" || text11[j2] === "]") continue;
|
|
173701
173850
|
}
|
|
173702
173851
|
out2 += c2;
|
|
173703
173852
|
}
|
|
173704
173853
|
return out2;
|
|
173705
173854
|
}
|
|
173706
173855
|
function readJson9(files, path2) {
|
|
173707
|
-
const
|
|
173708
|
-
if (
|
|
173856
|
+
const text11 = files.get(path2);
|
|
173857
|
+
if (text11 === void 0) return void 0;
|
|
173709
173858
|
try {
|
|
173710
|
-
const v2 = parseJsonc(
|
|
173859
|
+
const v2 = parseJsonc(text11);
|
|
173711
173860
|
return v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : void 0;
|
|
173712
173861
|
} catch {
|
|
173713
173862
|
return void 0;
|
|
@@ -174237,11 +174386,11 @@ async function readEntitySnapshot(appId2, deps) {
|
|
|
174237
174386
|
const { entries, skipped } = collectAppSource(dl2.dir);
|
|
174238
174387
|
const files = new Map(entries.map((e2) => [e2.path, e2.bytes.toString("utf8")]));
|
|
174239
174388
|
for (const cfgPath of ["base44/config.jsonc", "base44/config.json"]) {
|
|
174240
|
-
const
|
|
174241
|
-
if (
|
|
174389
|
+
const text11 = files.get(cfgPath);
|
|
174390
|
+
if (text11 === void 0) continue;
|
|
174242
174391
|
let cfg;
|
|
174243
174392
|
try {
|
|
174244
|
-
cfg = parseJsonc(
|
|
174393
|
+
cfg = parseJsonc(text11);
|
|
174245
174394
|
} catch (e2) {
|
|
174246
174395
|
throw new Error(`${cfgPath} does not parse (${e2.message}) \u2014 the entity directory it names cannot be trusted, so the snapshot may be incomplete`);
|
|
174247
174396
|
}
|
|
@@ -174254,11 +174403,11 @@ async function readEntitySnapshot(appId2, deps) {
|
|
|
174254
174403
|
const isEntityFile = (p2) => entityDirs.some((d2) => p2.startsWith(d2) && !p2.slice(d2.length).includes("/") && JSON_FILE2.test(p2));
|
|
174255
174404
|
const dropped = skipped.map((p2) => p2.split(/[\\/]/).join("/")).filter((p2) => entityDirs.some((d2) => p2.startsWith(d2) || d2.startsWith(`${p2}/`)));
|
|
174256
174405
|
if (dropped.length) throw new Error(`the download's entity files include ones himi will not read (${dropped.join(", ")}) \u2014 a sync without them would delete those entities`);
|
|
174257
|
-
for (const [path2,
|
|
174406
|
+
for (const [path2, text11] of files) {
|
|
174258
174407
|
if (!isEntityFile(path2)) continue;
|
|
174259
174408
|
let v2;
|
|
174260
174409
|
try {
|
|
174261
|
-
v2 = parseJsonc(
|
|
174410
|
+
v2 = parseJsonc(text11);
|
|
174262
174411
|
} catch (e2) {
|
|
174263
174412
|
throw new Error(`entity file ${path2} does not parse (${e2.message}) \u2014 a sync without it would delete that entity`);
|
|
174264
174413
|
}
|
|
@@ -174451,16 +174600,16 @@ function isPrivateV4([a2, b2, c2]) {
|
|
|
174451
174600
|
return a2 >= 224;
|
|
174452
174601
|
}
|
|
174453
174602
|
function v6Groups(host) {
|
|
174454
|
-
let
|
|
174455
|
-
const dotted = /:((?:\d{1,3}\.){3}\d{1,3})$/.exec(
|
|
174603
|
+
let text11 = host;
|
|
174604
|
+
const dotted = /:((?:\d{1,3}\.){3}\d{1,3})$/.exec(text11);
|
|
174456
174605
|
if (dotted) {
|
|
174457
174606
|
const octets = ipv4Octets(dotted[1]);
|
|
174458
174607
|
if (!octets) return null;
|
|
174459
174608
|
const hi2 = (octets[0] << 8 | octets[1]).toString(16);
|
|
174460
174609
|
const lo2 = (octets[2] << 8 | octets[3]).toString(16);
|
|
174461
|
-
|
|
174610
|
+
text11 = `${text11.slice(0, dotted.index)}:${hi2}:${lo2}`;
|
|
174462
174611
|
}
|
|
174463
|
-
const halves =
|
|
174612
|
+
const halves = text11.split("::");
|
|
174464
174613
|
if (halves.length > 2) return null;
|
|
174465
174614
|
const parts = (part3) => part3 ? part3.split(":") : [];
|
|
174466
174615
|
const head = parts(halves[0]);
|
|
@@ -174740,28 +174889,28 @@ var init_net_guard = __esm({
|
|
|
174740
174889
|
});
|
|
174741
174890
|
|
|
174742
174891
|
// src/site-analyze/copy-clean.ts
|
|
174743
|
-
function isTemplatePlaceholder(
|
|
174744
|
-
return PLACEHOLDER_RE.test(
|
|
174892
|
+
function isTemplatePlaceholder(text11) {
|
|
174893
|
+
return PLACEHOLDER_RE.test(text11);
|
|
174745
174894
|
}
|
|
174746
174895
|
function cleanText(raw, cap) {
|
|
174747
174896
|
const s2 = String(raw ?? "").replace(/[\u0000-\u001F\u007F]/g, " ").replace(/\s+/g, " ").trim();
|
|
174748
174897
|
return s2.length > cap ? `${s2.slice(0, cap - 1).trimEnd()}\u2026` : s2;
|
|
174749
174898
|
}
|
|
174750
|
-
function stripPii(
|
|
174751
|
-
return
|
|
174899
|
+
function stripPii(text11) {
|
|
174900
|
+
return text11.replace(EMAIL_RE2, "").replace(PHONE_SHAPE_RE, (m2) => {
|
|
174752
174901
|
const digits2 = (m2.match(ANY_DIGIT_RE) ?? []).length;
|
|
174753
174902
|
return digits2 >= PHONE_MIN_DIGITS && PHONE_DIGIT_RUN_RE.test(m2) ? "" : m2;
|
|
174754
174903
|
}).replace(/\s+/g, " ").trim();
|
|
174755
174904
|
}
|
|
174756
|
-
function isBoilerplate(
|
|
174757
|
-
return BOILERPLATE_RE.test(
|
|
174905
|
+
function isBoilerplate(text11) {
|
|
174906
|
+
return BOILERPLATE_RE.test(text11) || PLACEHOLDER_RE.test(text11);
|
|
174758
174907
|
}
|
|
174759
174908
|
function copyOrDrop(raw, cap) {
|
|
174760
|
-
const
|
|
174761
|
-
if (
|
|
174762
|
-
if (isBoilerplate(
|
|
174763
|
-
if (!/[A-Za-zͰ--]/.test(
|
|
174764
|
-
return
|
|
174909
|
+
const text11 = stripPii(cleanText(raw, cap));
|
|
174910
|
+
if (text11.length < 2) return "";
|
|
174911
|
+
if (isBoilerplate(text11)) return "";
|
|
174912
|
+
if (!/[A-Za-zͰ--]/.test(text11)) return "";
|
|
174913
|
+
return text11;
|
|
174765
174914
|
}
|
|
174766
174915
|
function dedupe2(values, cap) {
|
|
174767
174916
|
const out2 = [];
|
|
@@ -174857,8 +175006,8 @@ function parsePublishedHtml(html) {
|
|
|
174857
175006
|
const rawHeadings = [];
|
|
174858
175007
|
HEADING_RE.lastIndex = 0;
|
|
174859
175008
|
while (m2 = HEADING_RE.exec(html)) {
|
|
174860
|
-
const
|
|
174861
|
-
if (
|
|
175009
|
+
const text11 = copyOrDrop(textFromHtml(m2[1] ?? ""), 120);
|
|
175010
|
+
if (text11) rawHeadings.push(text11);
|
|
174862
175011
|
if (rawHeadings.length >= 40) break;
|
|
174863
175012
|
}
|
|
174864
175013
|
const headings = dedupe2(rawHeadings, 20);
|
|
@@ -174950,14 +175099,14 @@ async function readPublishedHtml(fetchImpl, siteUrl, opts) {
|
|
|
174950
175099
|
const chunk = await reader.read();
|
|
174951
175100
|
if (chunk.done) break;
|
|
174952
175101
|
bytes2 += chunk.value.byteLength;
|
|
174953
|
-
const
|
|
174954
|
-
html +=
|
|
174955
|
-
if (CODE_APP_ID_DONE_RE.test(overlap +
|
|
175102
|
+
const text11 = decoder.decode(chunk.value, { stream: true });
|
|
175103
|
+
html += text11;
|
|
175104
|
+
if (CODE_APP_ID_DONE_RE.test(overlap + text11) || bytes2 >= maxBytes) {
|
|
174956
175105
|
await reader.cancel().catch(() => {
|
|
174957
175106
|
});
|
|
174958
175107
|
break;
|
|
174959
175108
|
}
|
|
174960
|
-
overlap = (overlap +
|
|
175109
|
+
overlap = (overlap + text11).slice(-80);
|
|
174961
175110
|
}
|
|
174962
175111
|
} catch (e2) {
|
|
174963
175112
|
if (!opts.signal?.aborted) throw e2;
|
|
@@ -175182,9 +175331,9 @@ var init_permissions = __esm({
|
|
|
175182
175331
|
function genericDescription(it2) {
|
|
175183
175332
|
for (const field of DESCRIPTION_FIELDS) {
|
|
175184
175333
|
const raw = it2[field];
|
|
175185
|
-
const
|
|
175186
|
-
if (!
|
|
175187
|
-
const plain2 =
|
|
175334
|
+
const text11 = typeof raw === "string" ? raw : str8(raw?.text);
|
|
175335
|
+
if (!text11) continue;
|
|
175336
|
+
const plain2 = text11.replace(/<[^>]*>/g, " ").replace(/ /g, " ");
|
|
175188
175337
|
if (plain2.trim()) return plain2;
|
|
175189
175338
|
}
|
|
175190
175339
|
return void 0;
|
|
@@ -175665,8 +175814,8 @@ function cmsStatusNote(taxonomy) {
|
|
|
175665
175814
|
function yn2(v2) {
|
|
175666
175815
|
return v2 == null || v2 === "" ? "\u2014" : String(v2);
|
|
175667
175816
|
}
|
|
175668
|
-
function isAuthPhrase(
|
|
175669
|
-
const t2 =
|
|
175817
|
+
function isAuthPhrase(text11) {
|
|
175818
|
+
const t2 = text11.trim();
|
|
175670
175819
|
return AUTH_ONLY_ASCII.test(t2) || LOGIN_HE.includes(t2);
|
|
175671
175820
|
}
|
|
175672
175821
|
function looksGated(page) {
|
|
@@ -176465,12 +176614,12 @@ function mergeWst(pages2) {
|
|
|
176465
176614
|
return acc;
|
|
176466
176615
|
}
|
|
176467
176616
|
function fontSlug(value) {
|
|
176468
|
-
let
|
|
176617
|
+
let text11 = value;
|
|
176469
176618
|
try {
|
|
176470
|
-
|
|
176619
|
+
text11 = decodeURIComponent(value);
|
|
176471
176620
|
} catch {
|
|
176472
176621
|
}
|
|
176473
|
-
return
|
|
176622
|
+
return text11.toLowerCase().replace(/[^a-z0-9]+/g, "");
|
|
176474
176623
|
}
|
|
176475
176624
|
function fontUrlSlug(url) {
|
|
176476
176625
|
const last = url.split("?")[0].split("#")[0].split("/").pop() ?? "";
|
|
@@ -176558,9 +176707,9 @@ function attachVeloSources(book, sources, put) {
|
|
|
176558
176707
|
if (isSecretVeloPath(f2.path)) continue;
|
|
176559
176708
|
const rel = veloArtifactRelPath(f2.path);
|
|
176560
176709
|
if (!rel) continue;
|
|
176561
|
-
const
|
|
176562
|
-
if (!
|
|
176563
|
-
put(rel,
|
|
176710
|
+
const text11 = byPath.get(f2.path) ?? f2.excerpt;
|
|
176711
|
+
if (!text11) continue;
|
|
176712
|
+
put(rel, text11);
|
|
176564
176713
|
f2.localPath = rel;
|
|
176565
176714
|
}
|
|
176566
176715
|
}
|
|
@@ -176951,7 +177100,7 @@ function appIdFromUrl(raw) {
|
|
|
176951
177100
|
return void 0;
|
|
176952
177101
|
}
|
|
176953
177102
|
}
|
|
176954
|
-
function appIdFromText(
|
|
177103
|
+
function appIdFromText(text11) {
|
|
176955
177104
|
const shapes = [
|
|
176956
177105
|
// The published shell's own badge tag: `<script data-app-id="<id>" src="/static/js/badge.js">`.
|
|
176957
177106
|
/\bdata-app-id\s*=\s*["']([a-f0-9]{24})["']/,
|
|
@@ -176962,7 +177111,7 @@ function appIdFromText(text10) {
|
|
|
176962
177111
|
/\/apps\/([a-f0-9]{24})\b/
|
|
176963
177112
|
];
|
|
176964
177113
|
for (const re2 of shapes) {
|
|
176965
|
-
const m2 = re2.exec(
|
|
177114
|
+
const m2 = re2.exec(text11);
|
|
176966
177115
|
if (m2) return m2[1];
|
|
176967
177116
|
}
|
|
176968
177117
|
return void 0;
|
|
@@ -180410,8 +180559,8 @@ function copyFromEval(evaled) {
|
|
|
180410
180559
|
evaled.meta?.ogTitle,
|
|
180411
180560
|
evaled.meta?.ogDescription
|
|
180412
180561
|
].map((raw) => {
|
|
180413
|
-
const
|
|
180414
|
-
return
|
|
180562
|
+
const text11 = cleanText(raw, 400);
|
|
180563
|
+
return text11 && isTemplatePlaceholder(text11) ? stripPii(cleanText(text11, 90)) : "";
|
|
180415
180564
|
}),
|
|
180416
180565
|
8
|
|
180417
180566
|
);
|
|
@@ -181513,27 +181662,27 @@ var init_collect = __esm({
|
|
|
181513
181662
|
|
|
181514
181663
|
// src/one-app/navigation.ts
|
|
181515
181664
|
function sourceNavigationKind(raw) {
|
|
181516
|
-
const navigation =
|
|
181517
|
-
if (
|
|
181665
|
+
const navigation = object8(raw.navigation);
|
|
181666
|
+
if (object8(navigation.settings).drawerMode === true) return "side-menu";
|
|
181518
181667
|
const entries = array4(navigation.bottomTabs);
|
|
181519
181668
|
if (entries.length > 1) return "bottom-tabs";
|
|
181520
|
-
const screens =
|
|
181521
|
-
const screenId = string5(
|
|
181522
|
-
const screen = screenId && Object.hasOwn(screens, screenId) ?
|
|
181523
|
-
return
|
|
181669
|
+
const screens = object8(raw.screens);
|
|
181670
|
+
const screenId = string5(object8(entries[0]).screenId);
|
|
181671
|
+
const screen = screenId && Object.hasOwn(screens, screenId) ? object8(screens[screenId]) : {};
|
|
181672
|
+
return object8(screen.layout).type === "TOP_TABS" ? "top-tabs" : "single";
|
|
181524
181673
|
}
|
|
181525
181674
|
function planNavigation(raw, policy = "bottom-tabs") {
|
|
181526
|
-
const navigation =
|
|
181675
|
+
const navigation = object8(raw.navigation);
|
|
181527
181676
|
const entries = array4(navigation.bottomTabs);
|
|
181528
|
-
const screens =
|
|
181529
|
-
const layouts =
|
|
181677
|
+
const screens = object8(raw.screens);
|
|
181678
|
+
const layouts = object8(raw.layoutItems);
|
|
181530
181679
|
const kind = sourceNavigationKind(raw);
|
|
181531
181680
|
const warnings = [];
|
|
181532
|
-
const firstEntry =
|
|
181681
|
+
const firstEntry = object8(entries[0]);
|
|
181533
181682
|
const rootScreenId = string5(firstEntry.screenId) ?? null;
|
|
181534
|
-
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ?
|
|
181535
|
-
const rootLayout =
|
|
181536
|
-
const settings =
|
|
181683
|
+
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ? object8(screens[rootScreenId]) : {};
|
|
181684
|
+
const rootLayout = object8(rootScreen.layout);
|
|
181685
|
+
const settings = object8(navigation.settings);
|
|
181537
181686
|
const appInstance = string5(raw.appInstance) ?? null;
|
|
181538
181687
|
const source = {
|
|
181539
181688
|
kind,
|
|
@@ -181545,8 +181694,8 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
181545
181694
|
const next = "Build navigation from this plan with himi docs one-app-to-himi-app. Report every warning; the plan does not replace the source graph.";
|
|
181546
181695
|
if (kind === "bottom-tabs") {
|
|
181547
181696
|
entries.forEach((value, index) => {
|
|
181548
|
-
const id = string5(
|
|
181549
|
-
if (id && Object.hasOwn(screens, id) &&
|
|
181697
|
+
const id = string5(object8(value).screenId);
|
|
181698
|
+
if (id && Object.hasOwn(screens, id) && object8(object8(screens[id]).layout).type === "TOP_TABS") {
|
|
181550
181699
|
warnings.push({ code: "nested_top_tabs", pointer: `/screens/${part2(id)}/layout/type`, reference: `/navigation/bottomTabs/${index}` });
|
|
181551
181700
|
}
|
|
181552
181701
|
});
|
|
@@ -181557,14 +181706,14 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
181557
181706
|
const tabs = [];
|
|
181558
181707
|
const hiddenPages = [];
|
|
181559
181708
|
array4(rootLayout.items).forEach((value, index) => {
|
|
181560
|
-
const layoutItemId = string5(
|
|
181709
|
+
const layoutItemId = string5(object8(value).layoutItemId);
|
|
181561
181710
|
const itemPointer = `${pointer}/${index}`;
|
|
181562
181711
|
if (!layoutItemId || !Object.hasOwn(layouts, layoutItemId)) {
|
|
181563
181712
|
warnings.push({ code: "missing_reference", pointer: itemPointer, ...layoutItemId ? { reference: layoutItemId } : {} });
|
|
181564
181713
|
return;
|
|
181565
181714
|
}
|
|
181566
|
-
const layout =
|
|
181567
|
-
if (
|
|
181715
|
+
const layout = object8(layouts[layoutItemId]);
|
|
181716
|
+
if (object8(layout.settings).hideFromNavigation === true) {
|
|
181568
181717
|
hiddenPages.push({ layoutItemId, pointer: itemPointer });
|
|
181569
181718
|
return;
|
|
181570
181719
|
}
|
|
@@ -181609,10 +181758,10 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
181609
181758
|
next
|
|
181610
181759
|
};
|
|
181611
181760
|
}
|
|
181612
|
-
var
|
|
181761
|
+
var object8, array4, string5, part2, TOP_TABS_POLICIES, MAX_BAR_TABS;
|
|
181613
181762
|
var init_navigation = __esm({
|
|
181614
181763
|
"src/one-app/navigation.ts"() {
|
|
181615
|
-
|
|
181764
|
+
object8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
181616
181765
|
array4 = (value) => Array.isArray(value) ? value : [];
|
|
181617
181766
|
string5 = (value) => typeof value === "string" && value ? value : void 0;
|
|
181618
181767
|
part2 = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
|
|
@@ -182415,10 +182564,10 @@ async function mintVisitorToken(fetchImpl, clientId) {
|
|
|
182415
182564
|
body: JSON.stringify({ clientId, grantType: "anonymous" }),
|
|
182416
182565
|
signal: AbortSignal.timeout(8e3)
|
|
182417
182566
|
});
|
|
182418
|
-
const
|
|
182419
|
-
let parsed =
|
|
182567
|
+
const text11 = await res.text();
|
|
182568
|
+
let parsed = text11;
|
|
182420
182569
|
try {
|
|
182421
|
-
parsed =
|
|
182570
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
182422
182571
|
} catch {
|
|
182423
182572
|
}
|
|
182424
182573
|
if (!res.ok) throw new WixApiError2(res.status, "POST", "/oauth2/token", parsed);
|
|
@@ -183056,8 +183205,8 @@ var init_copy = __esm({
|
|
|
183056
183205
|
function textFields(look) {
|
|
183057
183206
|
if (look.unavailable) return [];
|
|
183058
183207
|
const out2 = [];
|
|
183059
|
-
const add = (
|
|
183060
|
-
if (
|
|
183208
|
+
const add = (text11, where, narrative = false) => {
|
|
183209
|
+
if (text11 && text11.trim()) out2.push({ text: text11, where, narrative });
|
|
183061
183210
|
};
|
|
183062
183211
|
for (const label3 of look.navLabels) add(label3, "nav");
|
|
183063
183212
|
for (const p2 of look.pages) {
|
|
@@ -183746,8 +183895,8 @@ async function analyzeSite(input, ports) {
|
|
|
183746
183895
|
if (locale) plan.provisioning.locale = locale;
|
|
183747
183896
|
const velo = buildVeloChapter({ look, owner: ownerVelo });
|
|
183748
183897
|
const veloFiles = ownerVelo.files.flatMap((f2) => {
|
|
183749
|
-
const
|
|
183750
|
-
return
|
|
183898
|
+
const text11 = f2.content ?? f2.excerpt;
|
|
183899
|
+
return text11 ? [{ path: f2.path, text: text11 }] : [];
|
|
183751
183900
|
}).slice(0, 80);
|
|
183752
183901
|
const permissions = buildPermissionsChapter({
|
|
183753
183902
|
cms,
|
|
@@ -185053,13 +185202,13 @@ async function veloCall(fetchImpl, method, url, opts = {}) {
|
|
|
185053
185202
|
body: opts.body === void 0 ? void 0 : JSON.stringify(opts.body),
|
|
185054
185203
|
signal: AbortSignal.timeout(opts.timeoutMs ?? 3e4)
|
|
185055
185204
|
});
|
|
185056
|
-
const
|
|
185057
|
-
let json8 =
|
|
185205
|
+
const text11 = await res.text();
|
|
185206
|
+
let json8 = text11;
|
|
185058
185207
|
try {
|
|
185059
|
-
json8 =
|
|
185208
|
+
json8 = text11 ? JSON.parse(text11) : null;
|
|
185060
185209
|
} catch {
|
|
185061
185210
|
}
|
|
185062
|
-
return { status: res.status, json: json8, text:
|
|
185211
|
+
return { status: res.status, json: json8, text: text11 };
|
|
185063
185212
|
}
|
|
185064
185213
|
function snippet2(x2, cap = 180) {
|
|
185065
185214
|
const s2 = typeof x2 === "string" ? x2 : JSON.stringify(x2) ?? "";
|
|
@@ -185616,10 +185765,10 @@ function accountTransport(fetchImpl = fetch, timeoutMs = DEFAULT_TIMEOUT_MS5, sp
|
|
|
185616
185765
|
}
|
|
185617
185766
|
throw new Error(`${method} ${path2} failed: ${err?.message ?? String(e2)}`);
|
|
185618
185767
|
}
|
|
185619
|
-
const
|
|
185620
|
-
let parsed =
|
|
185768
|
+
const text11 = await res.text();
|
|
185769
|
+
let parsed = text11;
|
|
185621
185770
|
try {
|
|
185622
|
-
parsed =
|
|
185771
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
185623
185772
|
} catch {
|
|
185624
185773
|
}
|
|
185625
185774
|
if (!res.ok) throw new WixApiError(res.status, method, path2, parsed);
|
|
@@ -185680,16 +185829,16 @@ async function installVerticals(msid, wanted, token, fetchImpl = fetch, timeoutM
|
|
|
185680
185829
|
body: JSON.stringify({ apps: wanted.map((w2) => ({ id: w2.appDefId })) }),
|
|
185681
185830
|
signal: AbortSignal.timeout(timeoutMs)
|
|
185682
185831
|
});
|
|
185683
|
-
const
|
|
185832
|
+
const text11 = await res.text();
|
|
185684
185833
|
if (!res.ok) {
|
|
185685
185834
|
return {
|
|
185686
185835
|
...empty2,
|
|
185687
|
-
errors: wanted.map((w2) => ({ ...w2, message: `bulk-install -> ${res.status}: ${
|
|
185836
|
+
errors: wanted.map((w2) => ({ ...w2, message: `bulk-install -> ${res.status}: ${text11.slice(0, 200)}` }))
|
|
185688
185837
|
};
|
|
185689
185838
|
}
|
|
185690
185839
|
let body = {};
|
|
185691
185840
|
try {
|
|
185692
|
-
body =
|
|
185841
|
+
body = text11 ? JSON.parse(text11) : {};
|
|
185693
185842
|
} catch {
|
|
185694
185843
|
}
|
|
185695
185844
|
const nameOf2 = (appDefId) => wanted.find((w2) => w2.appDefId === appDefId)?.vertical ?? appDefId;
|
|
@@ -186295,9 +186444,9 @@ function redactVeloSource(source, knownSecrets = []) {
|
|
|
186295
186444
|
const visitLiterals = (node) => {
|
|
186296
186445
|
if (ts10.isStringLiteral(node) || ts10.isNoSubstitutionTemplateLiteral(node) || ts10.isTemplateExpression(node)) {
|
|
186297
186446
|
const start = node.getStart(clean2);
|
|
186298
|
-
const
|
|
186299
|
-
const redacted = redactLiteral(
|
|
186300
|
-
if (redacted !==
|
|
186447
|
+
const text11 = source.slice(start, node.end);
|
|
186448
|
+
const redacted = redactLiteral(text11, start);
|
|
186449
|
+
if (redacted !== text11) {
|
|
186301
186450
|
edits.push({ start, end: node.end, text: redacted });
|
|
186302
186451
|
return;
|
|
186303
186452
|
}
|
|
@@ -186721,10 +186870,10 @@ var ServeCliClient = class {
|
|
|
186721
186870
|
...carriesCredential ? { redirect: "error" } : {},
|
|
186722
186871
|
body: opts.rawBody !== void 0 ? new Uint8Array(opts.rawBody) : opts.body !== void 0 ? JSON.stringify(opts.body) : void 0
|
|
186723
186872
|
});
|
|
186724
|
-
const
|
|
186873
|
+
const text11 = await res.text();
|
|
186725
186874
|
let json8 = null;
|
|
186726
186875
|
try {
|
|
186727
|
-
json8 =
|
|
186876
|
+
json8 = text11 ? JSON.parse(text11) : null;
|
|
186728
186877
|
} catch {
|
|
186729
186878
|
json8 = null;
|
|
186730
186879
|
}
|
|
@@ -186732,7 +186881,7 @@ var ServeCliClient = class {
|
|
|
186732
186881
|
res.headers.forEach((v2, k2) => {
|
|
186733
186882
|
h2[k2] = v2;
|
|
186734
186883
|
});
|
|
186735
|
-
return { status: res.status, ok: res.ok, json: json8, text:
|
|
186884
|
+
return { status: res.status, ok: res.ok, json: json8, text: text11, headers: h2 };
|
|
186736
186885
|
}
|
|
186737
186886
|
// ---- serve (device-facing reads) ----
|
|
186738
186887
|
health(plane) {
|
|
@@ -187519,15 +187668,15 @@ function summarizeLint(app, bres, outcome, strict, extraIssues = []) {
|
|
|
187519
187668
|
}
|
|
187520
187669
|
};
|
|
187521
187670
|
const record2 = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
187522
|
-
const
|
|
187671
|
+
const text11 = (value) => typeof value === "string" && value ? value : void 0;
|
|
187523
187672
|
const message = (value) => {
|
|
187524
187673
|
const item = record2(value);
|
|
187525
|
-
if (
|
|
187526
|
-
if (
|
|
187674
|
+
if (text11(item.message)) return text11(item.message);
|
|
187675
|
+
if (text11(item.error)) return text11(item.error);
|
|
187527
187676
|
if (Array.isArray(item.errors)) {
|
|
187528
187677
|
const diagnostics = item.errors.map((entry) => {
|
|
187529
187678
|
const diagnostic = record2(entry);
|
|
187530
|
-
return
|
|
187679
|
+
return text11(diagnostic.text) ?? text11(diagnostic.message);
|
|
187531
187680
|
}).filter((entry) => !!entry);
|
|
187532
187681
|
if (diagnostics.length) return diagnostics.join("; ");
|
|
187533
187682
|
}
|
|
@@ -187540,29 +187689,29 @@ function summarizeLint(app, bres, outcome, strict, extraIssues = []) {
|
|
|
187540
187689
|
...issues,
|
|
187541
187690
|
...bres.compileErrors.map((value) => ({
|
|
187542
187691
|
pass: "compile",
|
|
187543
|
-
path:
|
|
187692
|
+
path: text11(record2(value).bundle),
|
|
187544
187693
|
ruleCode: "compile-error",
|
|
187545
187694
|
severity: "error",
|
|
187546
187695
|
message: message(value)
|
|
187547
187696
|
})),
|
|
187548
187697
|
...outcome.failedToBuild.map((value) => ({
|
|
187549
187698
|
pass: "build",
|
|
187550
|
-
screen:
|
|
187699
|
+
screen: text11(record2(value).screenId),
|
|
187551
187700
|
ruleCode: "failed-to-build",
|
|
187552
187701
|
severity: "error",
|
|
187553
187702
|
message: message(value)
|
|
187554
187703
|
})),
|
|
187555
187704
|
...outcome.missingBundles.map((value) => ({
|
|
187556
187705
|
pass: "build",
|
|
187557
|
-
screen:
|
|
187558
|
-
path:
|
|
187706
|
+
screen: text11(record2(value).screen),
|
|
187707
|
+
path: text11(record2(value).bundle),
|
|
187559
187708
|
ruleCode: "missing-bundle",
|
|
187560
187709
|
severity: "error",
|
|
187561
187710
|
message: message(value)
|
|
187562
187711
|
})),
|
|
187563
187712
|
...workerThrows.map((value) => ({
|
|
187564
187713
|
pass: "worker",
|
|
187565
|
-
path:
|
|
187714
|
+
path: text11(record2(value).bundle),
|
|
187566
187715
|
ruleCode: "worker-threw",
|
|
187567
187716
|
severity: "error",
|
|
187568
187717
|
message: message(value.threw)
|
|
@@ -187777,14 +187926,14 @@ function contentDir(flags) {
|
|
|
187777
187926
|
return resolve32(str3(flags.content) ?? process.cwd());
|
|
187778
187927
|
}
|
|
187779
187928
|
function renameRestoredSource(restored, declaredApp, renamed) {
|
|
187780
|
-
const
|
|
187929
|
+
const text11 = {};
|
|
187781
187930
|
for (const entry of restored) {
|
|
187782
187931
|
const decoded = entry.bytes.toString("utf8");
|
|
187783
|
-
if (Buffer.from(decoded, "utf8").equals(entry.bytes))
|
|
187932
|
+
if (Buffer.from(decoded, "utf8").equals(entry.bytes)) text11[entry.path] = decoded;
|
|
187784
187933
|
}
|
|
187785
|
-
const sentineled = sentinelizeArchive(
|
|
187934
|
+
const sentineled = sentinelizeArchive(text11, declaredApp);
|
|
187786
187935
|
for (const entry of restored) {
|
|
187787
|
-
if (!(entry.path in
|
|
187936
|
+
if (!(entry.path in text11)) continue;
|
|
187788
187937
|
const body = sentineled[entry.path];
|
|
187789
187938
|
if (body !== void 0) entry.bytes = Buffer.from(substituteIdentity(body, renamed), "utf8");
|
|
187790
187939
|
}
|
|
@@ -190078,8 +190227,8 @@ async function templateCommand(ctx) {
|
|
|
190078
190227
|
io2.error(JSON.stringify({ ok: false, error: e2.message }));
|
|
190079
190228
|
return 2;
|
|
190080
190229
|
}
|
|
190081
|
-
const
|
|
190082
|
-
if (!
|
|
190230
|
+
const text11 = str3(flags.text) ?? (pos.slice(2).join(" ") || void 0);
|
|
190231
|
+
if (!text11 && !verticals?.length) {
|
|
190083
190232
|
io2.error(JSON.stringify({
|
|
190084
190233
|
ok: false,
|
|
190085
190234
|
error: 'nothing to match \u2014 pass a business description (--text "\u2026"), --verticals stores,bookings, or --book <site analyze dir>',
|
|
@@ -190100,7 +190249,7 @@ async function templateCommand(ctx) {
|
|
|
190100
190249
|
note = `remote catalog unreachable (${e2.message}); ranked the embedded templates only`;
|
|
190101
190250
|
}
|
|
190102
190251
|
}
|
|
190103
|
-
const res = recommendTemplates2({ catalog: catalog3, verticals, text:
|
|
190252
|
+
const res = recommendTemplates2({ catalog: catalog3, verticals, text: text11 });
|
|
190104
190253
|
print({
|
|
190105
190254
|
ok: true,
|
|
190106
190255
|
...verticals?.length ? { verticals } : {},
|
|
@@ -190721,9 +190870,9 @@ function dpxSessionPresent(path2 = dpxSessionTokenPath()) {
|
|
|
190721
190870
|
return false;
|
|
190722
190871
|
}
|
|
190723
190872
|
}
|
|
190724
|
-
function isPortInUseError(
|
|
190725
|
-
if (!
|
|
190726
|
-
return /EADDRINUSE/i.test(
|
|
190873
|
+
function isPortInUseError(text11) {
|
|
190874
|
+
if (!text11) return false;
|
|
190875
|
+
return /EADDRINUSE/i.test(text11) || new RegExp(`(:::|:)${DPX_SESSION_PORT}\\b`).test(text11);
|
|
190727
190876
|
}
|
|
190728
190877
|
function parseDpxAuthStatusIdentity(stdout) {
|
|
190729
190878
|
if (!stdout) return void 0;
|
|
@@ -190875,23 +191024,23 @@ async function functionsCommand(ctx) {
|
|
|
190875
191024
|
const app = str3(flags.app) ?? loaded.app;
|
|
190876
191025
|
const invoked2 = await invokeRemoteFunction2({ baseUrl: target.baseUrl, app, definition, body: input, params, releaseId: remoteRelease, previewToken: str3(flags["preview-token"]), boCookie: boCookie() });
|
|
190877
191026
|
const response = invoked2.response;
|
|
190878
|
-
const
|
|
191027
|
+
const text12 = await response.text();
|
|
190879
191028
|
let body2;
|
|
190880
191029
|
try {
|
|
190881
|
-
body2 = JSON.parse(
|
|
191030
|
+
body2 = JSON.parse(text12);
|
|
190882
191031
|
} catch {
|
|
190883
|
-
body2 =
|
|
191032
|
+
body2 = text12;
|
|
190884
191033
|
}
|
|
190885
191034
|
print({ ok: response.ok, app, releaseId: remoteRelease ?? null, url: invoked2.url, status: response.status, body: body2 });
|
|
190886
191035
|
return response.ok ? 0 : 1;
|
|
190887
191036
|
}
|
|
190888
191037
|
const invoked = await invokeLocalFunction2(loaded, name, input, params);
|
|
190889
|
-
const
|
|
191038
|
+
const text11 = await invoked.response.text();
|
|
190890
191039
|
let body;
|
|
190891
191040
|
try {
|
|
190892
|
-
body = JSON.parse(
|
|
191041
|
+
body = JSON.parse(text11);
|
|
190893
191042
|
} catch {
|
|
190894
|
-
body =
|
|
191043
|
+
body = text11;
|
|
190895
191044
|
}
|
|
190896
191045
|
print({ ok: invoked.response.ok, app: loaded.app, releaseId: invoked.releaseId, status: invoked.response.status, body });
|
|
190897
191046
|
return invoked.response.ok ? 0 : 1;
|
|
@@ -191173,18 +191322,18 @@ function walkSource(dir, root = dir) {
|
|
|
191173
191322
|
const ext = entry.name.slice(entry.name.lastIndexOf("."));
|
|
191174
191323
|
if (!SOURCE_EXTENSIONS.has(ext)) continue;
|
|
191175
191324
|
const absolute = join76(dir, entry.name);
|
|
191176
|
-
const
|
|
191177
|
-
if (
|
|
191325
|
+
const text11 = readText2(absolute);
|
|
191326
|
+
if (text11 !== null) found.push({ path: relative14(root, absolute), text: text11 });
|
|
191178
191327
|
}
|
|
191179
191328
|
return found;
|
|
191180
191329
|
}
|
|
191181
|
-
function blankMatrixRows(
|
|
191182
|
-
const acceptance = mobileUxSection(mobileUxDocumentBody(
|
|
191330
|
+
function blankMatrixRows(text11) {
|
|
191331
|
+
const acceptance = mobileUxSection(mobileUxDocumentBody(text11), "Implementation acceptance") ?? "";
|
|
191183
191332
|
return /\|\s*(?:Ready|Empty|Add\s*\/\s*edit|Saved\s*\/\s*completed|Error\s*\/\s*recovery)\s*\|\s*\|\s*\|\s*\|\s*\|/i.test(acceptance);
|
|
191184
191333
|
}
|
|
191185
191334
|
function usesAppNetwork(source) {
|
|
191186
|
-
const code = (
|
|
191187
|
-
return source.some(({ text:
|
|
191335
|
+
const code = (text11) => text11.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/[^\n]*/g, "");
|
|
191336
|
+
return source.some(({ text: text11 }) => /\bwixApi\b|(?:from|import)\s*["']@(?:himalaya|wix\/himalaya)\/wix-[^"']+["']/.test(code(text11)));
|
|
191188
191337
|
}
|
|
191189
191338
|
function auditUx(content, strict = false) {
|
|
191190
191339
|
const dir = resolve60(content);
|
|
@@ -193413,8 +193562,8 @@ import { resolve as resolve67 } from "node:path";
|
|
|
193413
193562
|
|
|
193414
193563
|
// ../../core/admin-web/src/utils/qr-terminal.ts
|
|
193415
193564
|
init_qr();
|
|
193416
|
-
function qrTerminal(
|
|
193417
|
-
const { modules, size } = encodeQr(
|
|
193565
|
+
function qrTerminal(text11, opts = {}) {
|
|
193566
|
+
const { modules, size } = encodeQr(text11);
|
|
193418
193567
|
const quietZone = opts.quietZone ?? 4;
|
|
193419
193568
|
const dim = size + quietZone * 2;
|
|
193420
193569
|
const dark = (x2, y2) => x2 >= quietZone && x2 < quietZone + size && y2 >= quietZone && y2 < quietZone + size ? modules[y2 - quietZone][x2 - quietZone] : false;
|
|
@@ -198067,14 +198216,14 @@ function createTrimValidator(deps = {}, spawnFn = spawn7) {
|
|
|
198067
198216
|
const parsed = JSON.parse(report3);
|
|
198068
198217
|
counts = parsed.counts;
|
|
198069
198218
|
if (Array.isArray(parsed.findings)) {
|
|
198070
|
-
const
|
|
198219
|
+
const text11 = (v2) => typeof v2 === "string" && v2 ? v2 : void 0;
|
|
198071
198220
|
errors = parsed.findings.filter((f2) => f2 && f2.severity === "error" && typeof f2.id === "string").map((f2) => ({
|
|
198072
198221
|
id: f2.id,
|
|
198073
|
-
message:
|
|
198074
|
-
...
|
|
198075
|
-
...
|
|
198076
|
-
...
|
|
198077
|
-
...
|
|
198222
|
+
message: text11(f2.message) ?? "",
|
|
198223
|
+
...text11(f2.pass) ? { pass: text11(f2.pass) } : {},
|
|
198224
|
+
...text11(f2.screen) ? { screen: text11(f2.screen) } : {},
|
|
198225
|
+
...text11(f2.path) ? { path: text11(f2.path) } : {},
|
|
198226
|
+
...text11(f2.ruleCode) ? { ruleCode: text11(f2.ruleCode) } : {}
|
|
198078
198227
|
}));
|
|
198079
198228
|
}
|
|
198080
198229
|
} catch {
|