tianheng-ui 0.1.77 → 0.1.79

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tianheng-ui",
3
3
  "description": "A Vue.js project",
4
- "version": "0.1.77",
4
+ "version": "0.1.79",
5
5
  "author": "shu lang <403732931@qq.com>",
6
6
  "license": "MIT",
7
7
  "private": false,
@@ -181,7 +181,7 @@
181
181
  <el-tooltip
182
182
  slot="label"
183
183
  effect="light"
184
- content="使用接口的出参配置可选字段"
184
+ content="使用该接口的出参配置可选字段"
185
185
  placement="top"
186
186
  >
187
187
  <span style="color: #409EFF;">字段接口</span>
@@ -217,7 +217,7 @@
217
217
  <el-tooltip
218
218
  slot="label"
219
219
  effect="light"
220
- content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器查询字段"
220
+ content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器获取字段"
221
221
  placement="top"
222
222
  >
223
223
  <span style="color: #409EFF;">远程字段</span>
@@ -3,14 +3,94 @@
3
3
  <el-steps :active="step" finish-status="success" simple>
4
4
  <el-step title="表单配置" icon="el-icon-s-operation" description="">
5
5
  </el-step>
6
- <el-step title="按钮配置" icon="el-icon-set-up" description=""></el-step>
6
+ <el-step
7
+ title="选择初始模板"
8
+ icon="el-icon-set-up"
9
+ description=""
10
+ ></el-step>
11
+ <!-- <el-step
12
+ title="选择初始模板"
13
+ icon="el-icon-set-up"
14
+ description=""
15
+ ></el-step> -->
7
16
  </el-steps>
8
17
  <div class="content">
9
- <div v-show="step === 0">
10
- <div>你好</div>
11
- <div>让我们来了解一些基本信息</div>
12
- </div>
13
- <div v-show="step === 1"></div>
18
+ <el-form :model="config" label-width="80px" size="small">
19
+ <div v-show="step === 0">
20
+ <el-form-item>
21
+ <el-tooltip
22
+ slot="label"
23
+ effect="light"
24
+ content="字段的配置方式"
25
+ placement="top"
26
+ >
27
+ <span style="color: #409EFF;">字段类型</span>
28
+ </el-tooltip>
29
+ <el-radio-group v-model="config.config.fields.type">
30
+ <el-radio-button label="custom">自定义</el-radio-button>
31
+ <el-radio-button label="api">接口导入</el-radio-button>
32
+ </el-radio-group>
33
+ </el-form-item>
34
+ <el-form-item v-if="config.config.fields.type === 'api'">
35
+ <el-tooltip
36
+ slot="label"
37
+ effect="light"
38
+ content="使用该接口的出参配置可选字段"
39
+ placement="top"
40
+ >
41
+ <span style="color: #409EFF;">字段接口</span>
42
+ </el-tooltip>
43
+ <el-select
44
+ v-model="config.config.fields.api"
45
+ style="width:100%"
46
+ clearable
47
+ placeholder="请选择"
48
+ no-data-text="暂无接口,请前往【接口模块】创建"
49
+ filterable
50
+ >
51
+ <el-option
52
+ v-for="item in apiOptions"
53
+ :key="item.id"
54
+ :label="item.name"
55
+ :value="item.id"
56
+ >
57
+ </el-option>
58
+ </el-select>
59
+ </el-form-item>
60
+ <el-form-item label="表单名称">
61
+ <el-input
62
+ v-model="config.config.title"
63
+ placeholder="请输入"
64
+ ></el-input>
65
+ </el-form-item>
66
+ <el-form-item>
67
+ <el-tooltip
68
+ slot="label"
69
+ effect="light"
70
+ content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器获取字段"
71
+ placement="top"
72
+ >
73
+ <span style="color: #409EFF;">远程字段</span>
74
+ </el-tooltip>
75
+ <el-switch v-model="config.config.fields.remote"> </el-switch>
76
+ </el-form-item>
77
+ </div>
78
+ <div v-show="step === 1" class="formTemplates">
79
+ <div
80
+ :class="
81
+ `formTemplates-item th-border th-hover_boxShadow_light ${
82
+ formTemplateActive === index ? 'th-active' : ''
83
+ }`
84
+ "
85
+ v-for="(item, index) in formTemplates"
86
+ :key="index"
87
+ @click="handleFormTemplateClick(index)"
88
+ >
89
+ <img :src="item.img" alt="" />
90
+ <div>{{ item.name }}</div>
91
+ </div>
92
+ </div>
93
+ </el-form>
14
94
  </div>
15
95
  <div class="footer">
16
96
  <div></div>
@@ -23,31 +103,43 @@
23
103
  @click="handleBack"
24
104
  >上一步</el-button
25
105
  >
26
- <el-button type="primary" size="small" @click="handleNext"
27
- >下一步<i class="el-icon-right el-icon--right"></i
28
- ></el-button>
106
+ <el-button
107
+ v-if="step !== 1"
108
+ type="primary"
109
+ size="small"
110
+ @click="handleNext"
111
+ >
112
+ 下一步<i class="el-icon-right el-icon--right"></i>
113
+ </el-button>
114
+ <el-button v-else type="success" size="small" @click="handleSave">
115
+ 完&nbsp;&nbsp;&nbsp;成<i class="el-icon-finished el-icon--right"></i>
116
+ </el-button>
29
117
  </div>
30
118
  </div>
31
119
  </div>
32
120
  </template>
33
121
 
34
122
  <script>
123
+ import EmptyTemplateJson from "./assets/templates/empty.json";
124
+ import GeneralTemplateJson from "./assets/templates/general.json";
125
+ import PersonalDetailsTemplateJson from "./assets/templates/personalDetails.json";
126
+ import TableTemplateJson from "./assets/templates/table.json";
127
+ import { deepClone } from "./util";
35
128
  export default {
36
- props: { visible: { type: Boolean, default: true } },
129
+ props: { config: Object, apiOptions: Array },
37
130
  data() {
38
131
  return {
39
- show: this.visible,
40
- step: 0
132
+ step: 0,
133
+ formTemplates: [
134
+ EmptyTemplateJson,
135
+ GeneralTemplateJson,
136
+ PersonalDetailsTemplateJson,
137
+ TableTemplateJson
138
+ ],
139
+ formTemplateActive: null
41
140
  };
42
141
  },
43
- watch: {
44
- visible(val) {
45
- this.show = val;
46
- },
47
- show(val) {
48
- this.$emit("update:visible", val);
49
- }
50
- },
142
+ computed: {},
51
143
  created() {},
52
144
  mounted() {},
53
145
  methods: {
@@ -57,8 +149,15 @@ export default {
57
149
  handleNext() {
58
150
  this.step++;
59
151
  },
60
- handleClose() {
61
- this.show = !this.show;
152
+ handleSave() {
153
+ if (this.formTemplateActive !== null) {
154
+ const list = this.formTemplates[this.formTemplateActive].data.list;
155
+ this.config.list = deepClone(list);
156
+ }
157
+ this.$emit("save");
158
+ },
159
+ handleFormTemplateClick(index) {
160
+ this.formTemplateActive = index;
62
161
  }
63
162
  }
64
163
  };
@@ -70,7 +169,13 @@ export default {
70
169
  height: 100%;
71
170
 
72
171
  .content {
73
- height: calc(100% - 50px);
172
+ height: calc(100% - 96px);
173
+ padding-top: 10px;
174
+ overflow-y: scroll;
175
+
176
+ .tools-item {
177
+ margin-bottom: 10px;
178
+ }
74
179
  }
75
180
  .footer {
76
181
  height: 50px;
@@ -78,9 +183,57 @@ export default {
78
183
  align-items: center;
79
184
  justify-content: space-between;
80
185
  box-sizing: border-box;
186
+ background-color: white;
81
187
 
82
188
  .stepView {
83
189
  }
84
190
  }
191
+ .fields-item {
192
+ span {
193
+ padding: 0px 8px 2px 8px;
194
+ border-radius: 4px;
195
+ }
196
+ span:nth-child(1) {
197
+ color: #1890ff;
198
+ background-color: #e8f4ff;
199
+ }
200
+ span:nth-child(2) {
201
+ color: #13ce66;
202
+ background-color: #e7faf0;
203
+ }
204
+ span:nth-child(3) {
205
+ color: #909399;
206
+ background-color: #f4f4f5;
207
+ }
208
+ }
209
+ .formTemplates {
210
+ .formTemplates-item {
211
+ display: inline-block;
212
+ margin: 10px;
213
+ padding: 10px;
214
+ width: 230px;
215
+ border-radius: 4px;
216
+ transition: 0.25s;
217
+ box-sizing: border-box;
218
+
219
+ img {
220
+ width: 100%;
221
+ height: 230px;
222
+ object-fit: contain;
223
+ }
224
+ }
225
+ }
226
+ }
227
+ </style>
228
+
229
+ <style lang="scss">
230
+ .widgetGuide {
231
+ .el-transfer {
232
+ display: flex;
233
+ align-items: center;
234
+ }
235
+ .el-transfer-panel {
236
+ flex: 1;
237
+ }
85
238
  }
86
239
  </style>
@@ -74,7 +74,6 @@
74
74
  <el-button
75
75
  type="text"
76
76
  size="medium"
77
- disabled
78
77
  @click="handleDialogOpen('importTemplate')"
79
78
  >导入模板
80
79
  </el-button>
@@ -120,7 +119,8 @@
120
119
  :showFooter="
121
120
  dialog.action === 'previewPc' ||
122
121
  dialog.action === 'previewH5' ||
123
- dialog.action === 'importJson'
122
+ dialog.action === 'importJson' ||
123
+ dialog.action === 'importTemplate'
124
124
  "
125
125
  @on-close="handleDialogClose"
126
126
  @on-affirm="handleDialogAffirm"
@@ -133,7 +133,21 @@
133
133
  ></el-alert>
134
134
  <th-code-editor v-model="dialog.data" ref="codeEditor"></th-code-editor>
135
135
  </template>
136
- <template v-if="dialog.action === 'importTemplate'"> </template>
136
+ <div v-if="dialog.action === 'importTemplate'" class="formTemplates">
137
+ <div
138
+ :class="
139
+ `formTemplates-item th-border th-hover_boxShadow_light ${
140
+ formTemplateActive === index ? 'th-active' : ''
141
+ }`
142
+ "
143
+ v-for="(item, index) in formTemplates"
144
+ :key="index"
145
+ @click="handleFormTemplateClick(index)"
146
+ >
147
+ <img :src="item.img" alt="" />
148
+ <div>{{ item.name }}</div>
149
+ </div>
150
+ </div>
137
151
  <template v-if="dialog.action === 'generateJson'">
138
152
  <th-code-editor v-model="dialog.data" ref="codeEditor"></th-code-editor>
139
153
  </template>
@@ -164,7 +178,7 @@
164
178
  <template v-if="dialog.action === 'previewPc'">
165
179
  <generate-form
166
180
  v-if="dialog.show"
167
- :config="formData"
181
+ :config="formConfig"
168
182
  :oauthConfig="oauthConfig"
169
183
  :slotKeys="slotKeys"
170
184
  @change="handleDataChange"
@@ -188,7 +202,7 @@
188
202
  <generate-form
189
203
  v-if="dialog.show"
190
204
  class="box"
191
- :config="formData"
205
+ :config="formConfig"
192
206
  :oauthConfig="oauthConfig"
193
207
  @change="handleDataChange"
194
208
  @button-submit="handleButtonSubmit"
@@ -230,13 +244,17 @@ import { deepClone } from "./util/index";
230
244
  import * as XLSX from "xlsx/xlsx.mjs";
231
245
  import generateCode from "./util/generateCode.js";
232
246
  import GenerateForm from "./GenerateForm";
247
+ import EmptyTemplateJson from "./assets/templates/empty.json";
248
+ import GeneralTemplateJson from "./assets/templates/general.json";
249
+ import PersonalDetailsTemplateJson from "./assets/templates/personalDetails.json";
250
+ import TableTemplateJson from "./assets/templates/table.json";
233
251
  export default {
234
252
  props: {
235
253
  baseConfig: Object,
236
254
  permissions: Array,
237
255
  basicComponents: Array,
238
256
  layoutComponents: Array,
239
- formData: Object,
257
+ formConfig: Object,
240
258
  oauthConfig: Object,
241
259
  apiOptions: Array
242
260
  },
@@ -249,7 +267,6 @@ export default {
249
267
  data: null
250
268
  },
251
269
  dialogResultData: { show: false, data: null },
252
-
253
270
  dialogTitles: {
254
271
  previewPc: "预览-电脑端",
255
272
  previewH5: "预览-移动端",
@@ -258,7 +275,14 @@ export default {
258
275
  generateJson: "生成JSON",
259
276
  generateCode: "生成代码"
260
277
  },
261
- slotKeys: ["blank_1681093126000_96387"]
278
+ formTemplates: [
279
+ EmptyTemplateJson,
280
+ GeneralTemplateJson,
281
+ PersonalDetailsTemplateJson,
282
+ TableTemplateJson
283
+ ],
284
+ formTemplateActive: null,
285
+ slotKeys: []
262
286
  };
263
287
  },
264
288
  created() {},
@@ -418,13 +442,13 @@ export default {
418
442
  let data = "";
419
443
  switch (action) {
420
444
  case "generateJson":
421
- data = JSON.stringify(this.formData, null, 2);
445
+ data = JSON.stringify(this.formConfig, null, 2);
422
446
  break;
423
447
  case "generateCode":
424
448
  data = {
425
449
  generate: generateCode(
426
450
  {
427
- formConfig: JSON.stringify(this.formData, null, 2),
451
+ formConfig: JSON.stringify(this.formConfig, null, 2),
428
452
  apiOptions: JSON.stringify(this.apiOptions, null, 2),
429
453
  oauthConfig: JSON.stringify(this.oauthConfig, null, 2)
430
454
  },
@@ -432,7 +456,7 @@ export default {
432
456
  ),
433
457
  making: generateCode(
434
458
  {
435
- formConfig: JSON.stringify(this.formData, null, 2),
459
+ formConfig: JSON.stringify(this.formConfig, null, 2),
436
460
  apiOptions: JSON.stringify(this.apiOptions, null, 2),
437
461
  oauthConfig: JSON.stringify(this.oauthConfig, null, 2)
438
462
  },
@@ -440,6 +464,9 @@ export default {
440
464
  )
441
465
  };
442
466
  break;
467
+ case "importTemplate":
468
+ this.formTemplateActive = null;
469
+ break;
443
470
 
444
471
  default:
445
472
  break;
@@ -453,6 +480,14 @@ export default {
453
480
  if (this.dialog.action === "importJson") {
454
481
  this.handleClick("import-json", JSON.parse(this.dialog.data));
455
482
  }
483
+ if (
484
+ this.dialog.action === "importTemplate" &&
485
+ this.formTemplateActive !== null
486
+ ) {
487
+ const list = this.formTemplates[this.formTemplateActive].data.list;
488
+ this.formConfig.list = deepClone(list);
489
+ this.$emit("importTemplate");
490
+ }
456
491
  this.handleDialogClose();
457
492
  },
458
493
  handleDialogFullscreen() {
@@ -472,8 +507,8 @@ export default {
472
507
  },
473
508
  handleNetworkConfig() {
474
509
  const fieldsApi = {
475
- fields: this.formData.config.fields.api,
476
- mounted: this.formData.config.mounted.api
510
+ fields: this.formConfig.config.fields.api,
511
+ mounted: this.formConfig.config.mounted.api
477
512
  };
478
513
  const initList = list => {
479
514
  for (const item of list) {
@@ -490,13 +525,16 @@ export default {
490
525
  }
491
526
  }
492
527
  };
493
- initList(this.formData.list);
528
+ initList(this.formConfig.list);
494
529
  const apis = Object.values(fieldsApi);
495
530
  const network = {};
496
531
  this.apiOptions.map(item => {
497
532
  if (apis.includes(item.id)) network[item.id] = item;
498
533
  });
499
- this.formData.config.network = network;
534
+ this.formConfig.config.network = network;
535
+ },
536
+ handleFormTemplateClick(index) {
537
+ this.formTemplateActive = index;
500
538
  }
501
539
  }
502
540
  };
@@ -520,6 +558,23 @@ export default {
520
558
  justify-content: right;
521
559
  }
522
560
 
561
+ .formTemplates {
562
+ .formTemplates-item {
563
+ display: inline-block;
564
+ margin: 10px;
565
+ padding: 10px;
566
+ width: 230px;
567
+ border-radius: 4px;
568
+ transition: 0.25s;
569
+
570
+ img {
571
+ width: 100%;
572
+ height: 230px;
573
+ object-fit: contain;
574
+ }
575
+ }
576
+ }
577
+
523
578
  .previewH5 {
524
579
  width: 300px;
525
580
  height: 649px;
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "空白表单",
3
+ "data": {
4
+ "list": [],
5
+ "config": {
6
+ "fields": {
7
+ "type": "api",
8
+ "api": "",
9
+ "remote": true
10
+ },
11
+ "ui": "element",
12
+ "title": "",
13
+ "width": "",
14
+ "labelWidth": 100,
15
+ "labelPosition": "right",
16
+ "labelSuffix": ":",
17
+ "size": "small",
18
+ "disabled": false,
19
+ "hideLabel": false,
20
+ "mounted": {
21
+ "api": ""
22
+ },
23
+ "eventScript": [
24
+ {
25
+ "id": "mounted",
26
+ "label": "mounted",
27
+ "value": ""
28
+ },
29
+ {
30
+ "id": "refresh",
31
+ "label": "refresh",
32
+ "value": ""
33
+ }
34
+ ],
35
+ "network": {}
36
+ }
37
+ },
38
+ "img": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJXCAYAAABPMCoJAAABSGlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8bAwiDFwMmgwGCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisbp07V2MmPjdxvXLacUqm13NM9SiAKyW1OBlI/wHi9OSCohIGBsYUIFu5vKQAxO4AskWKgI4CsueA2OkQ9gYQOwnCPgJWExLkDGTfALIFkjMSgWYwvgCydZKQxNOR2FB7QYDXxdXHRyHUyMTQ0iOYgHtJBiWpFSUg2jm/oLIoMz2jRMERGEqpCp55yXo6CkYGRkYMDKAwh6j+HAQOS0axfQix/CUMDBbfGBiYJyLEkqYwMGxvY2CQuIUQU5nHwMDfwsCw7VBBYlEi3AGM31iK04yNIGweewYG1rv//3/WYGBgn8jA8Hfi//+/F////3cx0PzbDAwHKgHHO2Hu23HkSwAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAACWKADAAQAAAABAAACVwAAAAAOBDdzAAA0sUlEQVR4Ae3d6ZPcRnon4Oybl6TR3N4dhx22Y73+4v2y//zu2juxozk8OkYj6qLucySNRIni0VddvcgqFbtJkwTRnVWJTDyI6GGzgUq8+bwQ59coFLBx0izBQoAAAQIECBAgkExgM9lIBiJAgAABAgQIEJgLCFgOBAIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBige3E4xmOQPUCs9kszGYn4eRk8VX9hE1w4AIbYXNz+eV38oEfDKbfQUDA6oBl02ELjEaTMJlMm3A1GzaE2Q9WYHNzM+zsbDVf/q9jsAeBiT+1wEbzW/jJU29tQwIDFJhOp+H4eCJYDbD3pvxoga2tzbC7uxPinxYCBB4tIGA92sVPCcwF4hmro6MRDQIEHiFw+fKekPUIFz8iEAX8+uE4IPAYAeHqMTB+TOAHgcPD4zCdesvcAUHgUQIC1qNU/GzwAvGd8+Pj8eAdABBoE/DfSZuQ9UMVELCG2nnzfqJAvKDd5YlPJLKSwFwgfuhjPJ7QIEDgIQEB6yEQfyUQg5X/w3AcEHh6gfgLiYUAgQcFBKwHPfyNQHMrBteUOAwIdBGIv5S4FquLmG2HICBgDaHL5thJwH2uOnHZmMBcIN7OxEKAwKmAgHVq4TsCcwEBy4FAoLuAOyp2N/OKugUErLr7a3bnENjY2DjHq7yEAAECBAicCghYpxa+I0CAAAECBAgkERCwkjAahAABAgQIECBwKiBgnVr4jgABAgQIECCQREDASsJoEAIECBAgQIDAqYCAdWrhOwIECBAgQIBAEgEBKwmjQQgQIECAAAECpwIC1qmF7wgQIECAAAECSQQErCSMBiFAgAABAgQInAoIWKcWviNAgAABAgQIJBEQsJIwGoQAAQIECBAgcCogYJ1a+I4AAQIECBAgkERAwErCaBACBAgQIECAwKmAgHVq4TsCBAgQIECAQBIBASsJo0EIECBAgAABAqcCAtaphe8IECBAgAABAkkEtpOMYhACBJIKTKbTMBpPwngyTTquweoT2NvdCTvb22Frc6O+yZkRgYIFBKyCm6f0+gROTmbh+7sHYf/gqL7JmdFKBO7+MOq1q5fDj565upJ9GJQAge4CAlZ3M68gsBKBk5OT8M2tO2E0mqxkfIPWLXBv/zBMmzOfP/nRs3VP1OwIFCLgGqxCGqXM+gX2D4+Eq/rbvNIZHh6NwkFzHFkIEMgvIGDl74EKCMwF9g+PSRC4sMCdfQHrwogGIJBAQMBKgGgIAhcViG/tjJuL2i0ELiowmUzmbxVedByvJ0DgYgIC1sX8vJpAEoHJdJZkHIMQiAKOJ8cBgfwCAlb+HqiAAAECBAgQqExAwKqsoaZDgAABAgQI5BcQsPL3QAUECBAgQIBAZQICVmUNNR0CBAgQIEAgv4CAlb8HKiBAgAABAgQqExCwKmuo6RAgQIAAAQL5BQSs/D1QAQECBAgQIFCZgIBVWUNNhwABAgQIEMgvIGDl74EKCBAgQIAAgcoEBKzKGmo6BAgQIECAQH4BASt/D1RAgAABAgQIVCYgYFXWUNMhQIAAAQIE8gsIWPl7oAICBAgQIECgMgEBq7KGmg4BAgQIECCQX0DAyt8DFRAgQIAAAQKVCQhYlTXUdAgQIECAAIH8AgJW/h6ogAABAgQIEKhMQMCqrKGmQ4AAAQIECOQXELDy90AFBAgQIECAQGUCAlZlDTUdAgQIECBAIL+AgJW/ByogQIAAAQIEKhMQsCprqOkQIECAAAEC+QUErPw9UAEBAgQIECBQmYCAVVlDTYcAAQIECBDILyBg5e+BCggQIECAAIHKBASsyhpqOgQIECBAgEB+AQErfw9UQIAAAQIECFQmIGBV1lDTIUCAAAECBPILCFj5e6ACAgQIECBAoDIBAauyhpoOAQIECBAgkF9AwMrfAxUQIECAAAEClQkIWJU11HQIECBAgACB/AICVv4eqIAAAQIECBCoTEDAqqyhpkOAAAECBAjkFxCw8vdABQQIECBAgEBlAgJWZQ01HQIECBAgQCC/gICVvwcqIECAAAECBCoTELAqa6jpECBAgAABAvkFBKz8PVABAQIECBAgUJmAgFVZQ02HAAECBAgQyC8gYOXvgQoIECBAgACBygQErMoaajoECBAgQIBAfgEBK38PVECAAAECBAhUJiBgVdZQ0yFAgAABAgTyCwhY+XugAgIECBAgQKAyAQGrsoaaDgECBAgQIJBfQMDK3wMVECBAgAABApUJCFiVNdR0CBAgQIAAgfwCAlb+HqiAAAECBAgQqExAwKqsoaZDgAABAgQI5BcQsPL3QAUECBAgQIBAZQICVmUNNR0CBAgQIEAgv4CAlb8HKiBAgAABAgQqExCwKmuo6RAgQIAAAQL5BQSs/D1QAQECBAgQIFCZgIBVWUNNhwABAgQIEMgvIGDl74EKCBAgQIAAgcoEBKzKGmo6BAgQIECAQH4BASt/D1RAgAABAgQIVCYgYFXWUNMhQIAAAQIE8gsIWPl7oAICBAgQIECgMgEBq7KGmg4BAgQIECCQX0DAyt8DFRAgQIAAAQKVCQhYlTXUdAgQIECAAIH8AgJW/h6ogAABAgQIEKhMQMCqrKGmQ4AAAQIECOQXELDy90AFBAgQIECAQGUCAlZlDTWdMgV2trfLLFzVvRTYdjz1si+KGpaAgDWsfpttTwU2NzfCzs5WT6tTVkkCOzvbYas5niwECOQVELDy+ts7gfsCl3b37n/vGwLnFbh25fJ5X+p1BAgkFBCwEmIaisBFBJ575spFXu61BMKVy3vhavNlIUAgv8DGSbPkL0MFBPojcHQ0CpPJNFtB+wdH4d7hURiPJ9lqsOOyBHabtwXjmasYsHIt8a3Jvb2dXLu3XwK9E3Blbe9aoqChC1y9cinEr+nspAl6QtbQj4e2+ccPSMRr+CwECPRLQMDqVz9UQ+C+QLxQeWvXGYH7IL4hQIBAQQKuwSqoWUolQIAAAQIEyhAQsMrokyoJECBAgACBggQErIKapVQCBAgQIECgDAEBq4w+qZIAAQIECBAoSEDAKqhZSiVAgAABAgTKEBCwyuiTKgkQIECAAIGCBASsgpqlVAIECBAgQKAMAQGrjD6pkgABAgQIEChIQMAqqFlKJUCAAAECBMoQELDK6JMqCRAgQIAAgYIEBKyCmqVUAgQIECBAoAwBAauMPqmSAAECBAgQKEhAwCqoWUolQIAAAQIEyhAQsMrokyoJECBAgACBggQErIKapVQCBAgQIECgDAEBq4w+qZIAAQIECBAoSEDAKqhZSiVAgAABAgTKEBCwyuiTKgkQIECAAIGCBASsgpqlVAIECBAgQKAMAQGrjD6pkgABAgQIEChIQMAqqFlKJUCAAAECBMoQELDK6JMqCRAgQIAAgYIEBKyCmqVUAgQIECBAoAwBAauMPqmSAAECBAgQKEhAwCqoWUolQIAAAQIEyhAQsMrokyoJECBAgACBggQErIKapdT1CEym0/XsyF4IECBAoFqB7WpnZmIEzinw7Xe3w0+ef+6cr077svFkEmazk7SDGq0aga2tzbC9tdWL+Xzz3ffhV3/zs17UoggCfRAQsPrQBTX0RuB//ebF8N/+/m+z1hPPoN2+ux+OR2PhKmsnytj5VhOwLu3thOefvZa14DvNMfv+8Sj809//16x12DmBvgh4i7AvnVBHdoHfvfx6uNmcvcq53L53EL765lY4PBoJVzkbUdC+p00g3z84Cp9/dTOMxnnf3v7jn98KX3/7fUF6SiWwOgEBa3W2Ri5I4MYHn4aPP/8qa8Wj8TjcbQKWhcB5BW7eup09mP+fF14KB4dH552C1xGoRkDAqqaVJnJegW+a37hfef2d87482evu7B8mG8tAwxSYzWbh1p272Sf/b799JXsNCiCQW0DAyt0B+88qEK93+vUfXs1aw3Lno+aaKwuBiwrEa/dyL3f3D8LvXn4jdxn2TyCrgICVld/Ocwv87//3Yoif1Mu9xKDn04K5u1DH/uNx1Idj+uPPvww33v+kDlSzIHAOAQHrHGheUofAb158rXk75V4dkzELAmcENjY2zvwt37evvPFu+OKvN/MVYM8EMgoIWBnx7TqfwJ/fej989sXX+Qp4aM/xXkbx4/YWAhcV6NO9seJc4lvw8bYjFgJDExCwhtZx850Hqzff/ah3EvFeRhYCFxW4cvnSRYdI/vp//+3LYdpcgG8hMCQBAWtI3TbXcO/gMLzw0vVeSuS+UWQvURTVSWB3dyc8d+1Kp9esY+PD5gakL/zxtXXsyj4I9EZAwOpNKxSyDoFf//7VcHLS30fP/PJnz4edHQ9YWMexUNs+dne3w89/3I9HPD3K9i/NtVivv/Pho1b5GYEqBfxLXmVbTepRAr/+w5/CnXv9vhYkXov1i5/8KMQ7usdPgo0n0zBtviwEHiWwfEzO7s5OuHp571Gb9Opn19/+IDx79Ur4u1/9sld1KYbAKgQErFWoGrN3Ai9fv9F8munb3tX1uIL6+DbP42r1cwJdBH7bPJLq6tXL4ac9eaB6l9ptS6CLgLcIu2jZtkiB9z76PLzz4WdF1q5oAjUK/NsLL4ej5rosC4GaBQSsmrtrbuHb5tlsL772NgkCBHokED9R2NcPm/SISSmFCwhYhTdQ+Y8XiBezv/BiPz8x+PiqrSEwDIGvb94Kr7753jAma5aDFBCwBtn2YUz633/3p7B/eDSMyZolgQIF3nrv4xDfwrcQqFFAwKqxq+YU/uPVN8Nfb35HggCBngvEt/C//LqcD6D0nFN5PRIQsHrUDKWkEYh3af/gky/SDGYUAgRWLvB/f/+ncLe5NYmFQE0CAlZN3TSX+YNl43MGLQQIlCXw25ev9/omwGVpqrYPAgJWH7qghiQCh0fH4Q9/ejPJWAYhQGC9At99fze81NyvzkKgFgEBq5ZOmkf4TfOsM/fWcSAQKFcgXvAeL3y3EKhBQMCqoYvmEH7X3B36ZnPPKwsBAmULxFs3fPrF12VPQvUEGgEBy2FQvMD1Gx+Ejz//qvh5mAABAguBF158LXz3/R0cBIoWELCKbp/iP/z0i/D6jQ9BECBQmUB8ZuHxaFzZrExnSAIC1pC6Xdlcb92+G+JDnC0ECNQnEG/b4L/v+vo6pBkJWEPqdmVzjZ8YHE+mlc3KdAgQWArEt/5fe9ttV5Ye/ixLQMAqq1+q/UEgfmIwnsGyECBQt8Ab73wU4qUAFgKlCQhYpXVMvc0DYt8Nn33pU0YOBQJDEYhnq//aPBzaQqAkAQGrpG6pNbz3cbxPzickCBAYmMBvX7oe7h0cDmzWpluygIBVcvcGVvtXzQNhXfQ6sKabLoEfBOJNhF+5/g4PAsUIbBdTqUIHLTAaT+aP0ZjNTgblMJ5MwtDmPKgGX3CyW1ubYXtr64KjlPPyz7/6pvkl653wP//1n8spWqWDFRCwBtv6siYe79R+p/nY9hCWyXQabt/dn98DSLgaQscvNsetJmBd2tsJzz977WIDFfLqdz78NFy7cin893/6u0IqVuZQBQSsoXa+oHnH31i/+OvNgio+f6m3mxAZ7/9jIfC0AtMmkO8fxK+j8POfPB92d+o/o/XKG++Ga1evhF/9zc+elsl2BNYu4BqstZPbYReBGx98EuJvrENYRuOxcDWERq9wjvF5nEM56/m7l6+H7++4VcsKDydDX1BAwLogoJevTiBeb/HK6++ubgc9G/nOvk9I9awlxZUzm83CrYGEjsl0Fl567UaIb6lbCPRRQMDqY1fUNL/eamifGBx57pojP4HAkJ7f9/W3389DVgI2QxBILiBgJSc1YAqBF//81vyakhRjlTBG/C18KG/tlNCPkmuMx1H89OlQFg98H0qny5ungFVez6qv+I+vvuWuzdV32QRXKbCxsbHK4Xs39vUbH4SPPvuyd3UpaNgCAtaw+9+72b/57sfh/U/+0ru6Vl1QvJdR/Li9hcBFBYZ2b6yl1+9feSN807xlaCHQFwEBqy+dUEf45C9fhT+/9d5gJeK9jCwELipw5fKliw5R7Otfun4jHBweFVu/wusSELDq6mexs/nu+zvzOzQXO4EEhQ/lRpEJqAzxGIHd3Z3w3LUrj1lb/49v3b4bXn7d43Tq73QZMxSwyuhT1VVO48etm98847PGhr788mfPh50d9/8d+nFwnvnv7m6Hn//4ufO8tKrXfPbF1+FPzY1ILQRyC/iXPHcH7D/8x6tvhpvf3SbRCMRrsX7xkx+FeEf3+Emw8WQaps2XhcCjBJaPydnd2QlXL+89apNB/uzt9z8JV69cDv/8D387yPmbdD8EBKx+9GGwVVx/+4Pw8edfDXb+j5v4kN/meZyJnxPoIhDvo/fM1cvhv/zip11eZlsCyQS8RZiM0kBdBT789Mvw+jsfdn2Z7QkQIPBUAvFO7/HB6RYCOQQErBzq9hm+/vZWc1H7DRIECBBYmcC9g8PmcVvvNDfxna1sHwYm8DgBAetxMn6+MoHDo+P5JwaHdLfplWEamACBJwp8+fW38w/RPHEjKwmsQEDAWgGqIZ8sEM9cxY9TWwgQILAOgfc//kt4492P1rEr+yBwX0DAuk/hm3UIvPrme+HT5mPUFgIECKxT4LW33p/fzHid+7SvYQsIWMPu/1pn/95Hn4e33vt4rfu0MwIECCwF4kXvN2+5JczSw5+rFRCwVutr9B8EvvrmOxe1OxoIEMgqcDwah5ebkOWmxlnbMJidC1iDaXW+id7dP5hfZDo7OclXhD0TIECgEfjWY7kcB2sScKPRNUEPeTfX3/4wnMxOmpv+lfGMtBgE42+661p2trfD5ubGunZnPwMRmDSPoJpO1/cUgI2NjWL+G4/PPo03Of7Xf/nHgRwNpplDYOOkWXLs2D6HI3Dj/c+GM9lzzjQGrJ3mcSeXmof17jXPlIuPPrEQ6CIQfyk4ar5G40nzNZ7/UtPl9UPb9rgx+h//8g9Dm7b5rlHAGaw1YtsVgccJzJozfMfNw67jV1z29nbDs81jPvaawGUh8CSBGKruNM+uHK3xrOuT6rGOAIGFgIDlSCDQQ4EYtL5pvp65diV4LmEPG9STkr67fS8cHB71pBplECBwVsBF7mc1fE+gZwJ3mzMT39y607OqlNMHgXixtnDVh06ogcCjBQSsR7v4KYHeCMSzWZ9/dbM39Sgkv0A8Hg6PFm8n569GBQQIPEpAwHqUip8R6KHArTv3eliVktYt4IzmusXtj8D5BASs87l5FYG1C+wfHIXbzVuGluEKxP4vPwgxXAUzJ1CGgIBVRp9USWAucHB0HKbNJw4twxOIfY/9txAgUIaAgFVGn1RJYC4wnUzDvYNDGgMUiH2P/bcQIFCGgIBVRp9USeC+gIub71MM6puDQ2evBtVwky1eQMAqvoUmMDSBySTeqXsytGkPer6Hx+O1PvZm0NgmTyCRgICVCNIwBNYpsM5nJa5zXvb1aIHDIzcTfbSMnxLor4CA1d/eqIzAYwWms9lj11lRn8C4OWtpIUCgLAEBq6x+qZbAXGAmYA3qSPDJ0UG122QrERCwKmmkaQxLwP/hDqvfs6kzlsPquNnWICBg1dBFcxicwMTH9QfT85MT9z0bTLNNtCoBAauqdprMUASm02k4OXFWYwj9njS9thAgUJ6AgFVez1RMYC4wnghYQzgUZu7cP4Q2m2OFAgJWhU01pWEIuFXDMPp8NBoNY6JmSaAyAQGrsoaaznAE3Gx0GL0+HrlFwzA6bZa1CQhYtXXUfAYjcNyc2Zj4dFnV/R6Nx2E0Glc9R5MjUKuAgFVrZ82reoF4bc6+Bz9X3ec79zzYu+oGm1zVAgJW1e01udoF7h0eeS5hpU0+aHp7dOz6q0rba1oDEBCwBtBkU6xX4KQ5i3Xrzr16JzjQmcXbcNy6uz/Q2Zs2gToEBKw6+mgWAxYYjyfh5vd3BixQ39RjP2N4thAgUK6AgFVu71RO4L7A0dEo3L7njMd9kIK/+eu334fx2M1FC26h0gnMBbY5ECBQh8Dd5oLoSXPz0WeuXg67O/7TLq2royZU3bpztwlXbstQWu/US+BRAv4VfpSKnxEoVODw6DjE2zc8c/XKPGgVOo1BlR0/DXq3+TTo/sFRmM3cnX9QzTfZqgUErKrba3JDFIj/h327uUD6eDwKO9s74fLerjNaPTwQ4icEj5uzVcfNn24a28MGKYnABQUErAsCejmBvgocHY3DURiHu/cOQtjYCNtbm2Gz+XNj06WXuXo2m03DtAnAMzeIzdUC+yWwNgEBa23UdkQgo8DJSXN9lgunM3bArgkQGJiAX2UH1nDTJUCAAAECBFYvIGCt3tgeCBAgQIAAgYEJCFgDa7jpEiBAgAABAqsXELBWb2wPBAgQIECAwMAEBKyBNdx0CRAgQIAAgdULCFirN7YHAgQIECBAYGACAtbAGm66BAgQIECAwOoFBKzVG9sDAQIECBAgMDABAWtgDTddAgQIECBAYPUCAtbqje2BAAECBAgQGJiAgDWwhpsuAQIECBAgsHoBAWv1xvZAgAABAj0TeP65Z3pWkXJqExCwauuo+RAgQIAAAQLZBQSs7C1QAAECBAgQIFCbgIBVW0fNhwABAgQIEMguIGBlb4ECCBAgQIAAgdoEBKzaOmo+BAgQIECAQHYBASt7CxRAgAABAgQI1CYgYNXWUfMhQIAAAQIEsgsIWNlboAACBAgQIECgNgEBq7aOmg8BAgQIECCQXUDAyt4CBRAgQIAAAQK1CQhYtXXUfAgQIECAAIHsAgJW9hYogAABAgQIEKhNQMCqraPmQ4AAAQIECGQXELCyt0ABBAgQIECAQG0CAlZtHTUfAgQIECBAILuAgJW9BQogQIAAAQIEahMQsGrrqPkQIECAAAEC2QUErOwtUAABAgQIECBQm4CAVVtHzYcAAQIECBDILiBgZW+BAggQIECAAIHaBASs2jpqPgQIECBAgEB2AQErewsUQIAAAQIECNQmIGDV1lHzIUCAAAECBLILCFjZW6AAAgQIECBAoDYBAau2jpoPAQIECBAgkF1AwMreAgUQIECAAAECtQkIWLV11HwIECBAgACB7AICVvYWKIAAAQIECBCoTUDAqq2j5kOAAAECBAhkFxCwsrdAAQQIECBAgEBtAgJWbR01HwIECBAgQCC7gICVvQUKIECAAAECBGoTELBq66j5ECBAgAABAtkFBKzsLVAAAQIECBAgUJuAgFVbR82HAAECBAgQyC4gYGVvgQIIECBAgACB2gQErNo6aj4ECBAgQIBAdoHt7BUooEqBk5OTMJ3Owmx2UuX8TIoAgbIFZrNZGI3GYXNzM2xtbYaNjY2yJ6T63gkIWL1rSZkFxUAVw9R0Ov3hz1mIP7MQIECgjwLxn6fRaDIvLYarGLLi1+bmxjx0CVx97FpZNQlYZfWrV9XGQBV/C4xnqhZnq2a9qk8xBAgQeBqB+MvgZDKdf8Xtl2e1lqFL2HoaRds8LCBgPSzi708UWIapRaCaNmepnri5lQQIEChOIP7iGL/G4xi2Fme0FmFra/734iak4CwCAlYW9rJ2Gv+hmUwW/+DEYOWtv7L6p1oCBM4vsDhTvzy7NQ7b21s/vJ0obJ1fdRivFLCG0efOs1y+/RdPmwtVnfm8gACBSgWWbyVubEzuX7cVQ5e3EStt+AWmJWBdAK/Gly4DVfzTmaoaO2xOBAikEDh73dZ4PG3ObMWL5Bdnt1KMb4zyBQSs8nt44Rks/qGIF6rHs1Wuq7owqAEIEBiUQLyMYjSKH/KZzN9CjGe04pdl2AIC1oD7vwxWi7NW0wFLmDoBAgTSCCzfQowXxS+DlrcP09iWNoqAVVrHEtQbP/k3mUzmH0mO11dZCBAgQCCtQPy3NX7FDwjt7CzeOhS00hr3fTQBq+8dSlzf8rer+KeFAAECBFYrsLz0Ip7NWgQtbx2uVrw/owtY/enFSitZ3Gphev/OxSvd2UODx/vIxE8lWggQINAXgXU/GWdxKUY8m3Uyf+sw/rtoqVtAwKq7v/PZxf+w4yMhYsjKsWw3n6wZzRaPpMixf/skQIDAwwJbzTMI173E617j8w/jv8XL67PWXYP9rU9AwFqfdZY9xWA1Hk+y3nJhe3s7jJoaLAQIEOiLQHwcTq4l/tIbz+rH62Hj24aWOgXyHWF1evZqVvE3pfgVf2vKuew094exECBAoE8C8cx6ziWexTo+Hs1/Ac5Zh32vTsD/863ONuvI8azV8knxWQtpdr695URp7h7YPwECDwrE2yj0YVm+y9CHWtSQVqAfR1jaOQ1+tOU1V32B2Nvd6Usp6iBAgMBcYCfzGaxlGxbXZS1um7P8mT/rEBCw6ujj/Vksbh7ar8fcxE/L7O0JWfeb5BsCBLIK7O3tzp8jmLWIMztf/rt95ke+rUBAwKqgiWensLixXf/ucXVlb+9smb4nQIBANoFLPTyrHt95iF+WegQErHp6OZ9JvKldH5dLl+JvjHkvKu2ji5oIEFivQPx36Mrlfv7Cl+tWOuvtwHD2JmBV1utMt7pqVYz3nLl25VLrdjYgQIDAKgXiv0M57oH1NHNyQ+anUSpnGwGrnF4VX2n8h213xycKi2+kCRAoVCD+++MXvUKbV2DZAlaBTXtSyRnvnfeksubr4oNOn712pXU7GxAgQGAVAs89cy30+YHLHp+ziq7nG1PAyme/kj33/TqnS82nd54RslbSe4MSIPB4gZ/++Nmwt9vvM+g57y7/eDlrzisgYJ1XrqevizfPi8+46vPyXBOwrroeq88tUhuBqgTiL3WXdnd7PSfPJux1e85VnIB1Lrb+viie/o7/ofb5NHjUe/7Za+GZq5f7C6kyAgSqEHjumash/lLX52X573afa1Rbd4GN5gZneR9U171mr3gKgfionOPj8VNsmXeTewdH4fbd/ezPS8yrYO8ECKQW2GkuaI/BKl6W0Oclhqvd5q3LWK+lLgEBq65+PjCbxcOeJw/8rI9/GY3H4fa9w/mDT/tYn5oIEChL4MrlS/Nw1ZfnDT5JLz7lQrh6klC56wSscnv3VJUvHyRawonK/cPjsH942JuHVD8VsI0IEOiNQHwETrwNw+Wen7WKYPGC9hisdnb6fc1sb5pbYCECVoFN61ry8uHPpdwlOAato+NROB6Nghvvde227QkMS2Cz+WBPfPTNXnMR+9We3qH94Y4sL2jv+weSHq7b37sJCFjdvIrdOoarZdAqaRKj8TTMTmZh1jwCaNrMYeaKwZLap1YCyQWaZ8fP78S+2TzyJt6Rfafnn5o+CxCvt4pnrWKwcs+rszJ1fi9g1dnXx85q+UBRDxV9LJEVBAgQSC4QQ1V8O7Dv9ypMPvEBDyhgDbD58XOjk8lkfkZrOp0NUMCUCRAgsB6BGKgWwWqz97fPWY/IcPYiYA2n1/9ppvHC98lk8dbhtHkLzkKAAAECaQSWN32OZ676fl/CNDM2ysMCAtbDIgP8+zJoxZAVz2iV8InDAbbJlAkQKEAgBqrlVwHlKnGFAgLWCnFLHDqGrOVZLUGrxA6qmQCBdQvEWy5sb2/Or68q4d5b6/YZ6v4ErKF2vmXei7NaizNazmq1YFlNgMDgBOLbfjFMLd8K9Dbg4A6B1gkLWK1ENljc4qG5RUJzmwRhy/FAgMCQBeLbf4tg5VYLQz4OnmbuAtbTKNnmvkAMWPFrEbamzfVa91f5hgABAtUJxPtVxbcAharqWrvyCQlYKyeudwfxLuvLs1rL0FXvbM2MAIGhCJwGqkWw8vbfUDqfdp4CVlrPwY4Wr9mKgSteJL/406cRB3swmDiBwgTOXk+1PGMlVBXWxB6WK2D1sCk1lBQD1+Ks1iJ0xe8tBAgQ6IPAMlDFMBVvBBr/FKj60Jm6ahCw6upnb2ezfDvx4T97W7DCCBCoRmAZpGKIWnzvrurVNLfHExGwetyc2ks7e4YrBq941it+WQgQIHARgXhBeryOahmm4vcWAusWELDWLW5/jxU4fVsxXr8VfrglxOL7x77ICgIEBiuwOCO1CFIxTC1Dlbf7BntI9GriAlav2qGYhwVi6Dp70Xz81OLybNfD2/o7AQL1CjwYpk5DlTBVb89Ln5mAVXoHB1j/8q3E+BZjPNO1CGGC1wAPBVOuUCCeiYqhKX7Ft/oWwWpxdqrC6ZpSxQICVsXNHdrUFsErNGe4FreIWF5QvzwLNjQP8yXQV4FlgFqGp+Wfy7f4+lq3ugh0ERCwumjZtliB5duKy7Nd8czXIogt/ix2Ygon0GOBGJiaE1EPXBu1DFPxTwuBmgUErJq7a25PJbA8w7U4A7a45mv5/TKIPdVANiIwMIFlWFoEqfi2XvjhLb1FsBKiBnZAmO4DAgLWAxz+QuA/CyzD1ulZsOXZr8UtJZY//8+v9BMC5QrEa6GauDS/1UEMSovwtLi4fPH3xc/KnaHKCaxWQMBara/RByKwCGGnF9wvL76PP4/L8u3I5d8HwmKaPRR4OCzFEpcXlp/93tmnHjZPSUUJCFhFtUuxpQssz4YtA1icz8Ph62xYE8hK7/hq619cxrT4xN3y7bm4xxiOzoamZaiKb+VZCBBYj4CAtR5neyFwLoFlwDobuuJAZ//+8Dan6xdnz861Yy9am8Ay/MQdLr5fXPz9YGBaXNN0dptFuFq8Zm3F2hEBAk8tIGA9NZUNCZQlsAxeseplIFt+v/wznkmL/0e9WB8fVRTXLJaHX99sOd8uro3rFq/7YeOK/4ihp5lx87UIPnGqZ0PR8u/xz7gsrl1abBNf82AQWoxz+vrT9YtX+18CBGoRELBq6aR5EFizwNkAFnf94N9Pw9gynDy4/sFiF4FtEWAWIe9soDmT+uYhp+3vMdzEehZ/PrinZfBZ/HQZfhbbLva/+Fn8PobIxc8eHsPfCRAg0CYgYLUJWU+AAAECBAgQ6CjgiseOYDYnQIAAAQIECLQJCFhtQtYTIECAAAECBDoKCFgdwWxOgAABAgQIEGgTELDahKwnQIAAAQIECHQUELA6gtmcAAECBAgQINAmIGC1CVlPgAABAgQIEOgoIGB1BLM5AQIECBAgQKBNQMBqE7KeAAECBAgQINBRQMDqCGZzAgQIECBAgECbgIDVJmQ9AQIECBAgQKCjgIDVEczmBAgQIECAAIE2AQGrTch6AgQIECBAgEBHAQGrI5jNCRAgQIAAAQJtAgJWm5D1BAgQIECAAIGOAgJWRzCbEyBAgAABAgTaBASsNiHrCRAgQIAAAQIdBQSsjmA2J0CAAAECBAi0CQhYbULWEyBAgAABAgQ6CghYHcFsToAAAQIECBBoExCw2oSsJ0CAAAECBAh0FBCwOoLZnAABAgQIECDQJiBgtQlZT4AAAQIECBDoKCBgdQSzOQECBAgQIECgTUDAahOyngABAgQIECDQUUDA6ghmcwIECBAgQIBAm4CA1SZkPQECBAgQIECgo4CA1RHM5gQIECBAgACBNgEBq03IegIECBAgQIBARwEBqyOYzQkQIECAAAECbQICVpuQ9QQIECBAgACBjgICVkcwmxMgQIAAAQIE2gQErDYh6wkQIECAAAECHQUErI5gNidAgAABAgQItAkIWG1C1hMgQIAAAQIEOgoIWB3BbE6AAAECBAgQaBMQsNqErCdAgAABAgQIdBQQsDqC2ZwAAQIECBAg0CYgYLUJWU+AAAECBAgQ6CggYHUEszkBAgQIECBAoE1AwGoTsp4AAQIECBAg0FFAwOoIZnMCBAgQIECAQJuAgNUmZD0BAgQIECBAoKOAgNURzOYECBAgQIAAgTYBAatNyHoCBAgQIECAQEcBAasjmM0JECBAgAABAm0CAlabkPUECBAgQIAAgY4CAlZHMJsTIECAAAECBNoEBKw2IesJECBAgAABAh0FBKyOYDYnQIAAAQIECLQJCFhtQtYTIECAAAECBDoKCFgdwWxOgAABAgQIEGgTELDahKwnQIAAAQIECHQUELA6gtmcAAECBAgQINAmIGC1CVlPgAABAgQIEOgoIGB1BLM5AQIECBAgQKBNQMBqE7KeAAECBAgQINBRQMDqCGZzAgQIECBAgECbgIDVJmQ9AQIECBAgQKCjgIDVEczmBAgQIECAAIE2AQGrTch6AgQIECBAgEBHAQGrI5jNCRAgQIAAAQJtAgJWm5D1BAgQIECAAIGOAgJWRzCbEyBAgAABAgTaBASsNiHrCRAgQIAAAQIdBQSsjmA2J0CAAAECBAi0CQhYbULWEyBAgAABAgQ6CghYHcFsToAAAQIECBBoExCw2oSsJ0CAAAECBAh0FBCwOoLZnAABAgQIECDQJiBgtQlZT4AAAQIECBDoKCBgdQSzOQECBAgQIECgTUDAahOyngABAgQIECDQUUDA6ghmcwIECBAgQIBAm4CA1SZkPQECBAgQIECgo4CA1RHM5gQIECBAgACBNgEBq03IegIECBAgQIBARwEBqyOYzQkQIECAAAECbQICVpuQ9QQIECBAgACBjgICVkcwmxMgQIAAAQIE2gQErDYh6wkQIECAAAECHQUErI5gNidAgAABAgQItAkIWG1C1hMgQIAAAQIEOgoIWB3BbE6AAAECBAgQaBMQsNqErCdAgAABAgQIdBQQsDqC2ZwAAQIECBAg0CYgYLUJWU+AAAECBAgQ6CggYHUEszkBAgQIECBAoE1AwGoTsp4AAQIECBAg0FFAwOoIZnMCBAgQIECAQJuAgNUmZD0BAgQIECBAoKOAgNURzOYECBAgQIAAgTYBAatNyHoCBAgQIECAQEcBAasjmM0JECBAgAABAm0CAlabkPUECBAgQIAAgY4CAlZHMJsTIECAAAECBNoEBKw2IesJECBAgAABAh0FBKyOYDYnQIAAAQIECLQJCFhtQtYTIECAAAECBDoKCFgdwWxOgAABAgQIEGgTELDahKwnQIAAAQIECHQUELA6gtmcAAECBAgQINAmIGC1CVlPgAABAgQIEOgoIGB1BLM5AQIECBAgQKBNQMBqE7KeAAECBAgQINBRQMDqCGZzAgQIECBAgECbgIDVJmQ9AQIECBAgQKCjgIDVEczmBAgQIECAAIE2AQGrTch6AgQIECBAgEBHAQGrI5jNCRAgQIAAAQJtAgJWm5D1BAgQIECAAIGOAgJWRzCbEyBAgAABAgTaBASsNiHrCRAgQIAAAQIdBQSsjmA2J0CAAAECBAi0CQhYbULWEyBAgAABAgQ6CghYHcFsToAAAQIECBBoExCw2oSsJ0CAAAECBAh0FBCwOoLZnAABAgQIECDQJiBgtQlZT4AAAQIECBDoKCBgdQSzOQECBAgQIECgTUDAahOyngABAgQIECDQUUDA6ghmcwIECBAgQIBAm4CA1SZkPQECBAgQIECgo4CA1RHM5gQIECBAgACBNgEBq03IegIECBAgQIBARwEBqyOYzQkQIECAAAECbQICVpuQ9QQIECBAgACBjgICVkcwmxMgQIAAAQIE2gQErDYh6wkQIECAAAECHQUErI5gNidAgAABAgQItAkIWG1C1hMgQIAAAQIEOgoIWB3BbE6AAAECBAgQaBMQsNqErCdAgAABAgQIdBQQsDqC2ZwAAQIECBAg0CYgYLUJWU+AAAECBAgQ6CggYHUEszkBAgQIECBAoE1AwGoTsp4AAQIECBAg0FFAwOoIZnMCBAgQIECAQJuAgNUmZD0BAgQIECBAoKOAgNURzOYECBAgQIAAgTYBAatNyHoCBAgQIECAQEcBAasjmM0JECBAgAABAm0C/x9YvWPWbALEKQAAAABJRU5ErkJggg=="
39
+ }