contentoh-components-library 21.5.19 → 21.5.21
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/components/atoms/UserSelector/UserSelector.stories.js +1 -1
- package/dist/components/atoms/UserSelector/index.js +4 -2
- package/dist/components/molecules/RowItem/styles.js +1 -1
- package/dist/components/molecules/StatusAsignationInfo/FinancedCompanies.js +1 -1
- package/dist/components/organisms/GridProducts/GridProducts.stories.js +102 -615
- package/dist/components/organisms/GridProducts/index.js +2 -2
- package/dist/components/organisms/InputGroup/index.js +30 -30
- package/dist/components/organisms/Table/styles.js +1 -1
- package/dist/components/pages/MultipleEdition/MultipleEdition.stories.js +1 -1
- package/dist/components/pages/MultipleEdition/saveData.js +19 -9
- package/dist/components/pages/MultipleEdition/styles.js +1 -1
- package/dist/components/pages/MultipleEdition/utils.js +153 -61
- package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +75 -72
- package/dist/components/pages/RetailerProductEdition/index.js +63 -19
- package/package.json +1 -1
- package/src/components/atoms/UserSelector/UserSelector.stories.js +1 -1
- package/src/components/atoms/UserSelector/index.js +7 -1
- package/src/components/molecules/RowItem/styles.js +1 -0
- package/src/components/molecules/StatusAsignationInfo/FinancedCompanies.js +43 -501
- package/src/components/molecules/StatusAsignationInfo/index.js +2 -3
- package/src/components/organisms/GridProducts/GridProducts.stories.js +107 -682
- package/src/components/organisms/GridProducts/index.js +2 -2
- package/src/components/organisms/InputGroup/index.js +47 -62
- package/src/components/organisms/Table/styles.js +5 -1
- package/src/components/pages/MultipleEdition/MultipleEdition.stories.js +1 -1
- package/src/components/pages/MultipleEdition/saveData.js +6 -7
- package/src/components/pages/MultipleEdition/styles.js +1 -7
- package/src/components/pages/MultipleEdition/utils.js +24 -47
- package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +79 -72
- package/src/components/pages/RetailerProductEdition/index.js +93 -29
|
@@ -31,97 +31,100 @@ RetailerProductEditionDefault.args = {
|
|
|
31
31
|
"Ficha técnica": false,
|
|
32
32
|
Imágenes: false
|
|
33
33
|
},
|
|
34
|
-
token: "
|
|
34
|
+
token: "eyJraWQiOiJEV3owZnNieXg2MXNFcVduN3RCXC81bVhod3ZNbFZIOTgwUnZcL3RjT0lKdEk9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJmNGRiODI2My1jYjA1LTQzMTItOWU0NS1lM2RlY2E2NjllNzIiLCJjb2duaXRvOmdyb3VwcyI6WyJjb2xhYm9yYWRvcmVzX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfbFN6UVo0WjdSIiwiY29nbml0bzp1c2VybmFtZSI6ImY0ZGI4MjYzLWNiMDUtNDMxMi05ZTQ1LWUzZGVjYTY2OWU3MiIsImF1ZCI6IjUyZDlza2tkY2c4cWpwODhvb2sxdXNlNm1rIiwiZXZlbnRfaWQiOiIyMTlmNjg1OS0zOGRkLTQwYzEtYmNhMC00OWQ1YjMwMTQxMTgiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTcxODIxMzQyOCwibmFtZSI6IkNvbGFib3JhZG9yIiwicGhvbmVfbnVtYmVyIjoiKzUyMTExMSIsImV4cCI6MTcxODIxNzAyNywiaWF0IjoxNzE4MjEzNDI4LCJlbWFpbCI6ImVtb250YW5vQGNvbnRlbnRvaC5jb20ifQ.TQfkHTvvjC0VUfoQexjuvlVixeb_J3ZP8uzGFgdDur8m3v0Wad32fUM3eOsTzrsXp_c0HJHHuT_7x9h27pCyLoeTmi5j_y9Rfyu4RXj9xEejE3_Ge7LXupdvYuo3-kI577vcQjrHjYShjLZ0RFNDQVxbrBLS19qRXYj7DJXM0tenLG4v5wLNZyhdmW5OdnIYjA8VfDCxV_fO2v9pFie0DUbmgGGnpzqHBVJfhbBVOrjq2PGmx4HvTy5Ne8b4pyio3Gs5LSYA7ZMTvVMaZWKTFfgNM69tY4NNCZVAfe56EL5DzOBhCtLGXljVqTrEIkd1bPHX_CmM2nGkzhbTwYtstg",
|
|
35
35
|
productSelected: {
|
|
36
|
-
orderId: 15190,
|
|
37
|
-
status: "RA",
|
|
38
|
-
datasheet_status: "NS",
|
|
39
|
-
prio: "none",
|
|
40
|
-
version: 3,
|
|
41
|
-
description_status: "NS",
|
|
42
|
-
images_status: "RA",
|
|
43
|
-
brand: null,
|
|
44
|
-
retailerOrder: 0,
|
|
45
|
-
missing: {
|
|
46
|
-
datasheet: null,
|
|
47
|
-
descriptions: null,
|
|
48
|
-
images: null
|
|
49
|
-
},
|
|
50
36
|
services: {
|
|
51
|
-
datasheets:
|
|
52
|
-
descriptions:
|
|
37
|
+
datasheets: 1,
|
|
38
|
+
descriptions: 1,
|
|
53
39
|
images: 1
|
|
54
40
|
},
|
|
41
|
+
orderId: 7961,
|
|
42
|
+
status: "RP",
|
|
43
|
+
datasheet_status: "AA",
|
|
44
|
+
prio: "none",
|
|
45
|
+
version: 3,
|
|
46
|
+
description_status: "RP",
|
|
47
|
+
images_status: "AA",
|
|
48
|
+
statusByRetailer: {
|
|
49
|
+
"58": {
|
|
50
|
+
datasheet: "AA",
|
|
51
|
+
description: "RP",
|
|
52
|
+
images: "AA"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
55
|
article: {
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
id_article: 126855,
|
|
57
|
+
id_category: "3066",
|
|
58
|
+
name: "ORGANIZADOR 3 CUBOS ITALIA 92 X 33 X 30 CM",
|
|
59
|
+
upc: "217141",
|
|
60
|
+
timestamp: "2024-05-17T18:52:34.000Z",
|
|
61
|
+
id_user: 1636,
|
|
62
|
+
status: null,
|
|
63
|
+
active: 1,
|
|
64
|
+
company_id: 315,
|
|
65
|
+
company_name: "MADERAS Y DISEÑOS DEL NORTE S.A. DE C.V.",
|
|
58
66
|
country: "México",
|
|
59
|
-
|
|
60
|
-
id_datasheet_especialist:
|
|
67
|
+
id_order: 7961,
|
|
68
|
+
id_datasheet_especialist: 2757,
|
|
61
69
|
id_datasheet_facilitator: null,
|
|
62
|
-
id_description_especialist:
|
|
70
|
+
id_description_especialist: 2757,
|
|
63
71
|
id_description_facilitator: null,
|
|
64
|
-
id_images_especialist:
|
|
65
|
-
id_images_facilitator:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
id_images_especialist: 1251,
|
|
73
|
+
id_images_facilitator: null,
|
|
74
|
+
id_auditor: 514,
|
|
75
|
+
id_recepcionist: null,
|
|
76
|
+
category: "Muebles|Muebles para Oficina y Gamer|Libreros",
|
|
77
|
+
missingAttributes: 0,
|
|
78
|
+
missingDescriptions: 0,
|
|
79
|
+
missingImages: 0
|
|
72
80
|
},
|
|
73
81
|
retailers: [{
|
|
74
|
-
id:
|
|
75
|
-
name: "
|
|
82
|
+
id: 58,
|
|
83
|
+
name: "The Home Depot Golden"
|
|
76
84
|
}],
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
images: "RA/AC"
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
location: {
|
|
84
|
-
product: {
|
|
85
|
-
articleId: 39364,
|
|
86
|
-
versionId: 3
|
|
87
|
-
},
|
|
88
|
-
state: {
|
|
89
|
-
withChat: true,
|
|
90
|
-
chatType: "product_status"
|
|
91
|
-
}
|
|
85
|
+
country: "México",
|
|
86
|
+
upc: "217141"
|
|
92
87
|
},
|
|
88
|
+
// location: {
|
|
89
|
+
// product: { articleId: 126855, versionId: 3 },
|
|
90
|
+
// state: {
|
|
91
|
+
// withChat: true,
|
|
92
|
+
// chatType: "product_status",
|
|
93
|
+
// },
|
|
94
|
+
// },
|
|
93
95
|
user: {
|
|
94
|
-
id_user:
|
|
95
|
-
name: "
|
|
96
|
-
last_name: "
|
|
97
|
-
email: "
|
|
98
|
-
position: "
|
|
99
|
-
telephone:
|
|
100
|
-
country:
|
|
96
|
+
id_user: 1973,
|
|
97
|
+
name: "Estefany",
|
|
98
|
+
last_name: "Montaño",
|
|
99
|
+
email: "emontano@contentoh.com",
|
|
100
|
+
position: "Front-End Developer",
|
|
101
|
+
telephone: null,
|
|
102
|
+
country: null,
|
|
101
103
|
id_company: 254,
|
|
102
|
-
id_cognito: "
|
|
103
|
-
birth_Date:
|
|
104
|
-
about_me:
|
|
105
|
-
zip_code:
|
|
106
|
-
address:
|
|
107
|
-
job:
|
|
108
|
-
id_stripe:
|
|
109
|
-
id_role:
|
|
104
|
+
id_cognito: "f4db8263-cb05-4312-9e45-e3deca669e72",
|
|
105
|
+
birth_Date: "1999-10-06T00:00:00.000Z",
|
|
106
|
+
about_me: null,
|
|
107
|
+
zip_code: null,
|
|
108
|
+
address: null,
|
|
109
|
+
job: null,
|
|
110
|
+
id_stripe: null,
|
|
111
|
+
id_role: 1,
|
|
110
112
|
active: 1,
|
|
111
113
|
is_retailer: 0,
|
|
112
114
|
email_notify: 1,
|
|
113
|
-
is_user_tech:
|
|
115
|
+
is_user_tech: "ADMIN-AS",
|
|
116
|
+
is_onboarding: 0,
|
|
114
117
|
membership: {
|
|
115
|
-
id:
|
|
116
|
-
start_date: "
|
|
117
|
-
end_date: "
|
|
118
|
-
planID:
|
|
119
|
-
plan: "
|
|
120
|
-
name: "Plan
|
|
121
|
-
user_limit: "
|
|
122
|
-
products_limit: "
|
|
118
|
+
id: 750,
|
|
119
|
+
start_date: "2022-01-07T21:32:54.000Z",
|
|
120
|
+
end_date: "2023-01-07T21:32:54.000Z",
|
|
121
|
+
planID: 6,
|
|
122
|
+
plan: "prod_KvGd6YSTJyR3AP",
|
|
123
|
+
name: "Plan Small",
|
|
124
|
+
user_limit: "10",
|
|
125
|
+
products_limit: "1000",
|
|
123
126
|
type: "Enterprise"
|
|
124
127
|
},
|
|
125
|
-
src: "https://content-management-profile.s3.amazonaws.com/id-
|
|
128
|
+
src: "https://content-management-profile-prod.s3.amazonaws.com/id-1973/1973.png?1718213428633"
|
|
126
129
|
}
|
|
127
130
|
};
|
|
@@ -37,6 +37,8 @@ var _GalleryElement = require("../../molecules/GalleryElement");
|
|
|
37
37
|
|
|
38
38
|
var _fileSaver = require("file-saver");
|
|
39
39
|
|
|
40
|
+
var _Commentary = require("../../atoms/Commentary");
|
|
41
|
+
|
|
40
42
|
var _data2 = require("../../../global-files/data");
|
|
41
43
|
|
|
42
44
|
var _GalleryHeader = require("../../molecules/GalleryHeader");
|
|
@@ -179,7 +181,7 @@ var reducerImages = function reducerImages(state, action) {
|
|
|
179
181
|
while (1) {
|
|
180
182
|
switch (_context.prev = _context.next) {
|
|
181
183
|
case 0:
|
|
182
|
-
videoSrc =
|
|
184
|
+
videoSrc = "data:video/mp4;base64," + base64.split(",")[1]; // Añade el tipo MIME adecuado
|
|
183
185
|
|
|
184
186
|
_context.next = 3;
|
|
185
187
|
return (0, _generateThumnail.default)(videoSrc, 2);
|
|
@@ -199,7 +201,7 @@ var reducerImages = function reducerImages(state, action) {
|
|
|
199
201
|
return _ref2.apply(this, arguments);
|
|
200
202
|
};
|
|
201
203
|
}()).catch(function (error) {
|
|
202
|
-
console.error(
|
|
204
|
+
console.error("Error:", error);
|
|
203
205
|
});
|
|
204
206
|
}
|
|
205
207
|
|
|
@@ -243,8 +245,8 @@ var REGION = "us-east-1";
|
|
|
243
245
|
function convertirVideoABase64(url) {
|
|
244
246
|
return new Promise(function (resolve, reject) {
|
|
245
247
|
var xhr = new XMLHttpRequest();
|
|
246
|
-
xhr.open(
|
|
247
|
-
xhr.responseType =
|
|
248
|
+
xhr.open("GET", url, true);
|
|
249
|
+
xhr.responseType = "blob";
|
|
248
250
|
|
|
249
251
|
xhr.onload = function () {
|
|
250
252
|
if (xhr.status === 200) {
|
|
@@ -257,12 +259,12 @@ function convertirVideoABase64(url) {
|
|
|
257
259
|
|
|
258
260
|
reader.readAsDataURL(blob);
|
|
259
261
|
} else {
|
|
260
|
-
reject(new Error(
|
|
262
|
+
reject(new Error("Error al cargar el video"));
|
|
261
263
|
}
|
|
262
264
|
};
|
|
263
265
|
|
|
264
266
|
xhr.onerror = function () {
|
|
265
|
-
reject(new Error(
|
|
267
|
+
reject(new Error("Error de red al cargar el video"));
|
|
266
268
|
};
|
|
267
269
|
|
|
268
270
|
xhr.send();
|
|
@@ -271,12 +273,12 @@ function convertirVideoABase64(url) {
|
|
|
271
273
|
|
|
272
274
|
function obtenerDuracionVideoBase64(base64Data) {
|
|
273
275
|
return new Promise(function (resolve, reject) {
|
|
274
|
-
var video = document.createElement(
|
|
276
|
+
var video = document.createElement("video");
|
|
275
277
|
video.src = base64Data;
|
|
276
|
-
video.addEventListener(
|
|
278
|
+
video.addEventListener("loadedmetadata", function () {
|
|
277
279
|
resolve(video.duration);
|
|
278
280
|
});
|
|
279
|
-
video.addEventListener(
|
|
281
|
+
video.addEventListener("error", reject);
|
|
280
282
|
});
|
|
281
283
|
}
|
|
282
284
|
|
|
@@ -293,7 +295,7 @@ var myBucket = new _awsSdk.default.S3({
|
|
|
293
295
|
});
|
|
294
296
|
|
|
295
297
|
var RetailerProductEdition = function RetailerProductEdition(_ref3) {
|
|
296
|
-
var _product$retailers, _location$state, _location$state2, _product$services2, _datasheets$, _datasheets$$data, _product$article17;
|
|
298
|
+
var _product$retailers, _location$state, _location$state2, _product$services2, _datasheets$, _datasheets$$data, _product$article17, _comment$message;
|
|
297
299
|
|
|
298
300
|
var tabsSections = _ref3.tabsSections,
|
|
299
301
|
_ref3$productSelected = _ref3.productSelected,
|
|
@@ -2341,15 +2343,57 @@ var RetailerProductEdition = function RetailerProductEdition(_ref3) {
|
|
|
2341
2343
|
headerType: "input-name-header"
|
|
2342
2344
|
}))]
|
|
2343
2345
|
})
|
|
2344
|
-
}), (userAssigned(activeTab) || auditorAssigned()) && product["".concat(getConcept(activeTab), "_status")] !== "NS" && /*#__PURE__*/(0, _jsxRuntime.
|
|
2346
|
+
}), (userAssigned(activeTab) || auditorAssigned()) && product["".concat(getConcept(activeTab), "_status")] !== "NS" && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
2345
2347
|
className: "commentary-box",
|
|
2346
|
-
children: [
|
|
2348
|
+
children: [!comment ? /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
2349
|
+
className: "commentary",
|
|
2350
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.TagAndInput, {
|
|
2351
|
+
label: "Caja de Comentario",
|
|
2352
|
+
inputType: "textarea",
|
|
2353
|
+
inputCols: 80,
|
|
2354
|
+
inputRows: 4,
|
|
2355
|
+
inputId: "commentary-box",
|
|
2356
|
+
index: 0
|
|
2357
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
2358
|
+
className: "buttons-box",
|
|
2359
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_GeneralButton.Button, {
|
|
2360
|
+
buttonType: "general-transparent-button",
|
|
2361
|
+
label: "Enviar comentario",
|
|
2362
|
+
onClick: function onClick(e) {
|
|
2363
|
+
return createComment(e, document.querySelector("#commentary-box .ql-container .ql-editor > p").innerHTML, activeTab);
|
|
2364
|
+
}
|
|
2365
|
+
})
|
|
2366
|
+
})]
|
|
2367
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
2368
|
+
className: "feedback-box",
|
|
2369
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Commentary.Commentary, {
|
|
2370
|
+
comment: comment === null || comment === void 0 ? void 0 : (_comment$message = comment.message) === null || _comment$message === void 0 ? void 0 : _comment$message.replace(/<.*?\/?>/gm, ""),
|
|
2371
|
+
reviewed: crossComment
|
|
2372
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GeneralButton.Button, {
|
|
2373
|
+
buttonType: "circular-button accept-button",
|
|
2374
|
+
onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
|
|
2375
|
+
return _regenerator.default.wrap(function _callee21$(_context21) {
|
|
2376
|
+
while (1) {
|
|
2377
|
+
switch (_context21.prev = _context21.next) {
|
|
2378
|
+
case 0:
|
|
2379
|
+
setCrossComment(true);
|
|
2380
|
+
commentRevised();
|
|
2381
|
+
|
|
2382
|
+
case 2:
|
|
2383
|
+
case "end":
|
|
2384
|
+
return _context21.stop();
|
|
2385
|
+
}
|
|
2386
|
+
}
|
|
2387
|
+
}, _callee21);
|
|
2388
|
+
}))
|
|
2389
|
+
})]
|
|
2390
|
+
}), [7, 8].includes(user.id_role) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GeneralButton.Button, {
|
|
2347
2391
|
buttonType: evaluationFinished(user.id_role, activeTab, statusArray) && requiredNull[activeTab] === 0 ? "general-green-button" : "general-button-disabled",
|
|
2348
2392
|
label: "Enviar evaluación",
|
|
2349
2393
|
onClick: function onClick() {
|
|
2350
2394
|
return sendToFacilitator();
|
|
2351
2395
|
}
|
|
2352
|
-
})
|
|
2396
|
+
})]
|
|
2353
2397
|
})]
|
|
2354
2398
|
})]
|
|
2355
2399
|
}), showModal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProductImageModal.ProductImageModal, {
|
|
@@ -2398,18 +2442,18 @@ var RetailerProductEdition = function RetailerProductEdition(_ref3) {
|
|
|
2398
2442
|
type: "pink",
|
|
2399
2443
|
label: "Aceptar",
|
|
2400
2444
|
size: 12,
|
|
2401
|
-
onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
2445
|
+
onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22() {
|
|
2402
2446
|
var body, messages;
|
|
2403
|
-
return _regenerator.default.wrap(function
|
|
2447
|
+
return _regenerator.default.wrap(function _callee22$(_context22) {
|
|
2404
2448
|
while (1) {
|
|
2405
|
-
switch (
|
|
2449
|
+
switch (_context22.prev = _context22.next) {
|
|
2406
2450
|
case 0:
|
|
2407
2451
|
body = document.querySelector("#modal-message-box .ql-container .ql-editor > p").innerHTML;
|
|
2408
2452
|
messages = [{
|
|
2409
2453
|
type: "message",
|
|
2410
2454
|
value: body === null || body === void 0 ? void 0 : body.replace(/<.*?\/?>/gm, "")
|
|
2411
2455
|
}];
|
|
2412
|
-
|
|
2456
|
+
_context22.next = 4;
|
|
2413
2457
|
return createComment(messages, activeRetailer.id);
|
|
2414
2458
|
|
|
2415
2459
|
case 4:
|
|
@@ -2419,10 +2463,10 @@ var RetailerProductEdition = function RetailerProductEdition(_ref3) {
|
|
|
2419
2463
|
|
|
2420
2464
|
case 7:
|
|
2421
2465
|
case "end":
|
|
2422
|
-
return
|
|
2466
|
+
return _context22.stop();
|
|
2423
2467
|
}
|
|
2424
2468
|
}
|
|
2425
|
-
},
|
|
2469
|
+
}, _callee22);
|
|
2426
2470
|
}))
|
|
2427
2471
|
}, "btn-Aceptar")]
|
|
2428
2472
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Modal.Modal, {
|
package/package.json
CHANGED
|
@@ -16,6 +16,7 @@ export const UserSelector = ({
|
|
|
16
16
|
assignationTarget,
|
|
17
17
|
target,
|
|
18
18
|
concept,
|
|
19
|
+
index,
|
|
19
20
|
}) => {
|
|
20
21
|
const [text, setText] = useState([]);
|
|
21
22
|
const [userFiltered, setUsersFiltered] = useState([]);
|
|
@@ -56,12 +57,17 @@ export const UserSelector = ({
|
|
|
56
57
|
key={user.id_user + "-" + i}
|
|
57
58
|
className="user-item"
|
|
58
59
|
onClick={() => {
|
|
60
|
+
console.log("onAss",product,
|
|
61
|
+
user.id_user," ",
|
|
62
|
+
assignationTarget," ",
|
|
63
|
+
target,
|
|
64
|
+
index)
|
|
59
65
|
onAssign(
|
|
60
66
|
product,
|
|
61
67
|
user.id_user,
|
|
62
68
|
assignationTarget,
|
|
63
69
|
target,
|
|
64
|
-
|
|
70
|
+
index
|
|
65
71
|
);
|
|
66
72
|
}}
|
|
67
73
|
>
|