@yunzhanghu/sdk-nodejs 1.0.22 → 1.0.24
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/example/calculatelabor.js +58 -0
- package/example/realName.js +149 -0
- package/package.json +1 -1
- package/src/services/calculatelabor/index.ts +161 -76
- package/src/services/dataservice/index.ts +608 -431
- package/src/services/payment/index.ts +510 -392
- package/src/services/realname/index.ts +123 -0
- package/yzh/services/calculatelabor/index.d.ts +91 -46
- package/yzh/services/calculatelabor/index.js +8 -0
- package/yzh/services/dataservice/index.d.ts +453 -318
- package/yzh/services/index.d.ts +1 -0
- package/yzh/services/index.js +4 -1
- package/yzh/services/payment/index.d.ts +285 -246
- package/yzh/services/realname/index.d.ts +123 -0
- package/yzh/services/realname/index.js +20 -0
|
@@ -69,3 +69,61 @@ caculatorLabor
|
|
|
69
69
|
// 发生异常
|
|
70
70
|
console.log(err.toString())
|
|
71
71
|
})
|
|
72
|
+
|
|
73
|
+
// 连续劳务年度税费测算-H5
|
|
74
|
+
caculatorLabor
|
|
75
|
+
.CalculationYearH5Url({
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @param {string} request-id:请求 ID,请求的唯一标识
|
|
79
|
+
* 建议平台企业自定义 request-id,并记录在日志中,便于问题发现及排查
|
|
80
|
+
* 如未自定义 request-id,将使用 SDK 中的 UUID 方法自动生成。注意:UUID 方法生成的 request-id 不能保证全局唯一,推荐自定义 request-id
|
|
81
|
+
*/
|
|
82
|
+
request_id: 'requestIdExample123456789',
|
|
83
|
+
dealer_id: config.dealer_id,
|
|
84
|
+
broker_id: config.broker_id,
|
|
85
|
+
color: "#FF3D3D",
|
|
86
|
+
})
|
|
87
|
+
.then((data) => {
|
|
88
|
+
if (data.code === '0000') {
|
|
89
|
+
// 操作成功
|
|
90
|
+
console.log('操作成功 ', data.data)
|
|
91
|
+
} else {
|
|
92
|
+
// 失败返回
|
|
93
|
+
console.log('失败返回 ', 'code:' + data.code + ' message:' + data.message + ' request_id:' + data.request_id)
|
|
94
|
+
}
|
|
95
|
+
})
|
|
96
|
+
.catch((err) => {
|
|
97
|
+
// 发生异常
|
|
98
|
+
console.log(err.toString())
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
// 连续劳务单笔结算税费测算-H5
|
|
102
|
+
caculatorLabor
|
|
103
|
+
.CalculationH5Url({
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param {string} request-id:请求 ID,请求的唯一标识
|
|
107
|
+
* 建议平台企业自定义 request-id,并记录在日志中,便于问题发现及排查
|
|
108
|
+
* 如未自定义 request-id,将使用 SDK 中的 UUID 方法自动生成。注意:UUID 方法生成的 request-id 不能保证全局唯一,推荐自定义 request-id
|
|
109
|
+
*/
|
|
110
|
+
request_id: 'requestIdExample123456789',
|
|
111
|
+
dealer_id: config.dealer_id,
|
|
112
|
+
broker_id: config.broker_id,
|
|
113
|
+
real_name: "张三",
|
|
114
|
+
id_card: "11010519491231002X",
|
|
115
|
+
color: "#FF3D3D",
|
|
116
|
+
})
|
|
117
|
+
.then((data) => {
|
|
118
|
+
if (data.code === '0000') {
|
|
119
|
+
// 操作成功
|
|
120
|
+
console.log('操作成功 ', data.data)
|
|
121
|
+
} else {
|
|
122
|
+
// 失败返回
|
|
123
|
+
console.log('失败返回 ', 'code:' + data.code + ' message:' + data.message + ' request_id:' + data.request_id)
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
.catch((err) => {
|
|
127
|
+
// 发生异常
|
|
128
|
+
console.log(err.toString())
|
|
129
|
+
})
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
const yzhAPI = require('../yzh/index.js')
|
|
2
|
+
const config = require('./conf/config.js')
|
|
3
|
+
|
|
4
|
+
// 用户实名认证信息收集
|
|
5
|
+
const realNameServiceClient = new yzhAPI.RealNameServiceClient(config)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
// 用户实名认证信息收集-人脸认证方式
|
|
9
|
+
realNameServiceClient
|
|
10
|
+
.CollectRealNameInfo({
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {string} request-id:请求 ID,请求的唯一标识
|
|
14
|
+
* 建议平台企业自定义 request-id,并记录在日志中,便于问题发现及排查
|
|
15
|
+
* 如未自定义 request-id,将使用 SDK 中的 UUID 方法自动生成。注意:UUID 方法生成的 request-id 不能保证全局唯一,推荐自定义 request-id
|
|
16
|
+
*/
|
|
17
|
+
request_id: 'requestIdExample123456789',
|
|
18
|
+
dealer_id: config.dealer_id,
|
|
19
|
+
broker_id: config.broker_id,
|
|
20
|
+
real_name: "张三",
|
|
21
|
+
id_card: "11010519491231002X",
|
|
22
|
+
realname_result: 1,
|
|
23
|
+
realname_time: "2025-09-09 19:19:19",
|
|
24
|
+
realname_type: 1,
|
|
25
|
+
realname_trace_id: "1413536187796566016",
|
|
26
|
+
realname_platform: "xxxxxxx公司",
|
|
27
|
+
face_image_collect_type: 1,
|
|
28
|
+
face_image: "https://www.example.com/file_name.png",
|
|
29
|
+
face_verify_score: "89.12",
|
|
30
|
+
})
|
|
31
|
+
.then((data) => {
|
|
32
|
+
if (data.code === '0000') {
|
|
33
|
+
// 操作成功
|
|
34
|
+
console.log('操作成功 ', data.data)
|
|
35
|
+
} else {
|
|
36
|
+
// 失败返回
|
|
37
|
+
console.log('失败返回 ', 'code:' + data.code + ' message:' + data.message + ' request_id:' + data.request_id)
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
.catch((err) => {
|
|
41
|
+
// 发生异常
|
|
42
|
+
console.log(err.toString())
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
// 用户实名认证信息收集-银行卡四要素认证方式
|
|
46
|
+
realNameServiceClient
|
|
47
|
+
.CollectRealNameInfo({
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param {string} request-id:请求 ID,请求的唯一标识
|
|
51
|
+
* 建议平台企业自定义 request-id,并记录在日志中,便于问题发现及排查
|
|
52
|
+
* 如未自定义 request-id,将使用 SDK 中的 UUID 方法自动生成。注意:UUID 方法生成的 request-id 不能保证全局唯一,推荐自定义 request-id
|
|
53
|
+
*/
|
|
54
|
+
request_id: 'requestIdExample123456789',
|
|
55
|
+
dealer_id: config.dealer_id,
|
|
56
|
+
broker_id: config.broker_id,
|
|
57
|
+
real_name: "张三",
|
|
58
|
+
id_card: "11010519491231002X",
|
|
59
|
+
realname_result: 1,
|
|
60
|
+
realname_time: "2025-09-09 19:19:19",
|
|
61
|
+
realname_type: 2,
|
|
62
|
+
realname_trace_id: "1413536187796566016",
|
|
63
|
+
realname_platform: "xxxxxxx公司",
|
|
64
|
+
bank_no: "6127000xxxxxxx16",
|
|
65
|
+
bank_phone: "188xxx8888",
|
|
66
|
+
})
|
|
67
|
+
.then((data) => {
|
|
68
|
+
if (data.code === '0000') {
|
|
69
|
+
// 操作成功
|
|
70
|
+
console.log('操作成功 ', data.data)
|
|
71
|
+
} else {
|
|
72
|
+
// 失败返回
|
|
73
|
+
console.log('失败返回 ', 'code:' + data.code + ' message:' + data.message + ' request_id:' + data.request_id)
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
.catch((err) => {
|
|
77
|
+
// 发生异常
|
|
78
|
+
console.log(err.toString())
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// 用户实名认证信息收集-人工审核
|
|
82
|
+
realNameServiceClient
|
|
83
|
+
.CollectRealNameInfo({
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param {string} request-id:请求 ID,请求的唯一标识
|
|
87
|
+
* 建议平台企业自定义 request-id,并记录在日志中,便于问题发现及排查
|
|
88
|
+
* 如未自定义 request-id,将使用 SDK 中的 UUID 方法自动生成。注意:UUID 方法生成的 request-id 不能保证全局唯一,推荐自定义 request-id
|
|
89
|
+
*/
|
|
90
|
+
request_id: 'requestIdExample123456789',
|
|
91
|
+
dealer_id: config.dealer_id,
|
|
92
|
+
broker_id: config.broker_id,
|
|
93
|
+
real_name: "张三",
|
|
94
|
+
id_card: "11010519491231002X",
|
|
95
|
+
realname_result: 1,
|
|
96
|
+
realname_time: "2025-09-09 19:19:19",
|
|
97
|
+
realname_type: 3,
|
|
98
|
+
realname_trace_id: "1413536187796566016",
|
|
99
|
+
realname_platform: "xxxxxxx公司",
|
|
100
|
+
face_image_collect_type: 1,
|
|
101
|
+
face_image: "https://www.example.com/file_name.png",
|
|
102
|
+
face_verify_score: "89.12",
|
|
103
|
+
bank_no: "6127000xxxxxxx16",
|
|
104
|
+
bank_phone: "188xxx8888",
|
|
105
|
+
reviewer: "908xxx8888",
|
|
106
|
+
})
|
|
107
|
+
.then((data) => {
|
|
108
|
+
if (data.code === '0000') {
|
|
109
|
+
// 操作成功
|
|
110
|
+
console.log('操作成功 ', data.data)
|
|
111
|
+
} else {
|
|
112
|
+
// 失败返回
|
|
113
|
+
console.log('失败返回 ', 'code:' + data.code + ' message:' + data.message + ' request_id:' + data.request_id)
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
.catch((err) => {
|
|
117
|
+
// 发生异常
|
|
118
|
+
console.log(err.toString())
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
// 用户实名认证信息查询
|
|
123
|
+
realNameServiceClient
|
|
124
|
+
.QueryRealNameInfo({
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @param {string} request-id:请求 ID,请求的唯一标识
|
|
128
|
+
* 建议平台企业自定义 request-id,并记录在日志中,便于问题发现及排查
|
|
129
|
+
* 如未自定义 request-id,将使用 SDK 中的 UUID 方法自动生成。注意:UUID 方法生成的 request-id 不能保证全局唯一,推荐自定义 request-id
|
|
130
|
+
*/
|
|
131
|
+
request_id: 'requestIdExample123456789',
|
|
132
|
+
dealer_id: config.dealer_id,
|
|
133
|
+
broker_id: config.broker_id,
|
|
134
|
+
real_name: "张三",
|
|
135
|
+
id_card: "11010519491231002X",
|
|
136
|
+
})
|
|
137
|
+
.then((data) => {
|
|
138
|
+
if (data.code === '0000') {
|
|
139
|
+
// 操作成功
|
|
140
|
+
console.log('操作成功 ', data.data)
|
|
141
|
+
} else {
|
|
142
|
+
// 失败返回
|
|
143
|
+
console.log('失败返回 ', 'code:' + data.code + ' message:' + data.message + ' request_id:' + data.request_id)
|
|
144
|
+
}
|
|
145
|
+
})
|
|
146
|
+
.catch((err) => {
|
|
147
|
+
// 发生异常
|
|
148
|
+
console.log(err.toString())
|
|
149
|
+
})
|
package/package.json
CHANGED
|
@@ -2,68 +2,68 @@ import YZHclient from '../../common/client';
|
|
|
2
2
|
|
|
3
3
|
/** LaborCaculatorRequest 连续劳务税费试算(计算器)请求 */
|
|
4
4
|
interface LaborCaculatorRequest {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
/** 平台企业 ID */
|
|
6
|
+
dealer_id: string;
|
|
7
|
+
/** 综合服务主体 ID */
|
|
8
|
+
broker_id: string;
|
|
9
|
+
/** 月度收入列表 */
|
|
10
|
+
month_settlement_list: MonthSettlement[];
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/** MonthSettlement 月度收入 */
|
|
14
14
|
interface MonthSettlement {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/** 月份 */
|
|
16
|
+
month: number;
|
|
17
|
+
/** 月度收入 */
|
|
18
|
+
month_pre_tax_amount: string;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/** LaborCaculatorResponse 连续劳务税费试算(计算器)返回 */
|
|
22
22
|
interface LaborCaculatorResponse {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
/** 综合所得汇算清缴 */
|
|
24
|
+
year_tax_info: YearTaxInfo;
|
|
25
|
+
/** 月度税务信息列表 */
|
|
26
|
+
month_tax_list: MontTax[];
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/** YearTaxInfo 综合所得汇算清缴信息 */
|
|
30
30
|
interface YearTaxInfo {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
/** 连续劳务年度个税 */
|
|
32
|
+
continuous_month_personal_tax: string;
|
|
33
|
+
/** 综合所得汇算清缴年度个税 */
|
|
34
|
+
personal_tax: string;
|
|
35
|
+
/** 年度扣除费用 */
|
|
36
|
+
deduct_cost: string;
|
|
37
|
+
/** 个税税率 */
|
|
38
|
+
personal_tax_rate: string;
|
|
39
|
+
/** 速算扣除数 */
|
|
40
|
+
deduct_tax: string;
|
|
41
|
+
/** 税负率 */
|
|
42
|
+
total_tax_rate: string;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/** MontTax 月度税务信息 */
|
|
46
46
|
interface MontTax {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
47
|
+
/** 月份 */
|
|
48
|
+
month: number;
|
|
49
|
+
/** 含增值税收入 */
|
|
50
|
+
pre_tax_amount: string;
|
|
51
|
+
/** 不含增值税收入 */
|
|
52
|
+
excluding_vat_amount: string;
|
|
53
|
+
/** 增值税 */
|
|
54
|
+
value_added_tax: string;
|
|
55
|
+
/** 附加税 */
|
|
56
|
+
additional_tax: string;
|
|
57
|
+
/** 个税 */
|
|
58
|
+
personal_tax: string;
|
|
59
|
+
/** 个税税率 */
|
|
60
|
+
personal_tax_rate: string;
|
|
61
|
+
/** 速算扣除数 */
|
|
62
|
+
deduct_tax: string;
|
|
63
|
+
/** 税后金额 */
|
|
64
|
+
post_tax_amount: string;
|
|
65
|
+
/** 税负率 */
|
|
66
|
+
total_tax_rate: string;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
/** CalcTaxRequest 订单税费试算请求 */
|
|
@@ -110,6 +110,14 @@ interface CalcTaxResponse {
|
|
|
110
110
|
status_message: string;
|
|
111
111
|
/** 结果详细状态码描述 */
|
|
112
112
|
status_detail_message: string;
|
|
113
|
+
/** 用户实收金额(未扣除追缴的增附税) */
|
|
114
|
+
user_real_excluding_vat_amount: string;
|
|
115
|
+
/** 用户还未缴清的增附税 */
|
|
116
|
+
user_remaining_repayment_amount: string;
|
|
117
|
+
/** 已追缴增附税(本笔订单) */
|
|
118
|
+
user_recover_tax_amount: string;
|
|
119
|
+
/** 待追缴增附税总金额 */
|
|
120
|
+
user_total_recover_tax_amount: string;
|
|
113
121
|
}
|
|
114
122
|
|
|
115
123
|
/** CalcTaxDetail 税费明细 */
|
|
@@ -144,35 +152,112 @@ interface CalcTaxDetail {
|
|
|
144
152
|
deduct_tax: string;
|
|
145
153
|
}
|
|
146
154
|
|
|
155
|
+
/** CalculationYearH5UrlRequest 连续劳务年度税费测算-H5 请求 */
|
|
156
|
+
interface CalculationYearH5UrlRequest {
|
|
157
|
+
/** 平台企业 ID */
|
|
158
|
+
dealer_id: string;
|
|
159
|
+
/** 综合服务主体 ID */
|
|
160
|
+
broker_id: string;
|
|
161
|
+
/** 主题颜色 */
|
|
162
|
+
color: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** CalculationYearH5UrlResponse 连续劳务年度税费测算-H5 返回 */
|
|
166
|
+
interface CalculationYearH5UrlResponse {
|
|
167
|
+
/** 年度劳务测算 H5 页面 URL */
|
|
168
|
+
url: string;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** CalculationH5UrlRequest 连续劳务单笔结算税费测算-H5 请求 */
|
|
172
|
+
interface CalculationH5UrlRequest {
|
|
173
|
+
/** 平台企业 ID */
|
|
174
|
+
dealer_id: string;
|
|
175
|
+
/** 综合服务主体 ID */
|
|
176
|
+
broker_id: string;
|
|
177
|
+
/** 姓名 */
|
|
178
|
+
real_name: string;
|
|
179
|
+
/** 证件号 */
|
|
180
|
+
id_card: string;
|
|
181
|
+
/** 主题颜色 */
|
|
182
|
+
color: string;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** CalculationH5UrlResponse 连续劳务单笔结算税费测算-H5 返回 */
|
|
186
|
+
interface CalculationH5UrlResponse {
|
|
187
|
+
/** 连续劳务单笔结算税费测算 H5 页面 URL */
|
|
188
|
+
url: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
147
191
|
export class CalculateLaborServiceClient extends YZHclient {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
192
|
+
// eslint-disable-next-line no-useless-constructor
|
|
193
|
+
constructor(conf: {
|
|
194
|
+
dealer_id: string;
|
|
195
|
+
broker_id: string;
|
|
196
|
+
app_key: string;
|
|
197
|
+
des3_key: string;
|
|
198
|
+
private_key: string;
|
|
199
|
+
yzh_public_key: string;
|
|
200
|
+
sign_type: 'rsa' | 'sha256';
|
|
201
|
+
base_url?: string;
|
|
202
|
+
timeout?: number;
|
|
203
|
+
}) {
|
|
204
|
+
super(conf);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// LaborCaculator 连续劳务税费试算(计算器)
|
|
208
|
+
async LaborCaculator(
|
|
209
|
+
req: LaborCaculatorRequest,
|
|
210
|
+
cb?: (error: null | string,rep: LaborCaculatorResponse)=>void
|
|
211
|
+
): Promise<LaborCaculatorResponse> {
|
|
212
|
+
return this.request(
|
|
213
|
+
'post',
|
|
214
|
+
'/api/tax/v1/labor-caculator',
|
|
215
|
+
req,
|
|
216
|
+
{encryption: false },
|
|
217
|
+
cb
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// CalcTax 订单税费试算
|
|
222
|
+
async CalcTax(
|
|
223
|
+
req: CalcTaxRequest,
|
|
224
|
+
cb?: (error: null | string,rep: CalcTaxResponse)=>void
|
|
225
|
+
): Promise<CalcTaxResponse> {
|
|
226
|
+
return this.request(
|
|
227
|
+
'post',
|
|
228
|
+
'/api/payment/v1/calc-tax',
|
|
229
|
+
req,
|
|
230
|
+
{encryption: false },
|
|
231
|
+
cb
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// CalculationYearH5Url 连续劳务年度税费测算-H5
|
|
236
|
+
async CalculationYearH5Url(
|
|
237
|
+
req: CalculationYearH5UrlRequest,
|
|
238
|
+
cb?: (error: null | string,rep: CalculationYearH5UrlResponse)=>void
|
|
239
|
+
): Promise<CalculationYearH5UrlResponse> {
|
|
240
|
+
return this.request(
|
|
241
|
+
'get',
|
|
242
|
+
'/api/labor/service/calculation/year/h5url',
|
|
243
|
+
req,
|
|
244
|
+
{encryption: false },
|
|
245
|
+
cb
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// CalculationH5Url 连续劳务单笔结算税费测算-H5
|
|
250
|
+
async CalculationH5Url(
|
|
251
|
+
req: CalculationH5UrlRequest,
|
|
252
|
+
cb?: (error: null | string,rep: CalculationH5UrlResponse)=>void
|
|
253
|
+
): Promise<CalculationH5UrlResponse> {
|
|
254
|
+
return this.request(
|
|
255
|
+
'get',
|
|
256
|
+
'/api/labor/service/calculation/h5url',
|
|
257
|
+
req,
|
|
258
|
+
{encryption: false },
|
|
259
|
+
cb
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
|
|
178
263
|
}
|